← Kembali ke aplikasi
MMB

SOP Keuangan

MMB Travel Pusat · panduan tim — angka di sistem selalu = kenyataan
Dokumen ini diwarisi dari SOP MMB Medan. Prinsip pencatatannya berlaku sama; bagian yang menyebut Google Spreadsheet/Drive/Apps Script TIDAK berlaku di sistem pusat — data pusat tersimpan di Cloudflare D1 (pemulihan point-in-time 30 hari) dan berkas bukti di R2. Ekspor cadangan manual: menu Laporan → Backup.

1 Peta Pencatatan — uang dicatat di mana?

KejadianCatat sebagaiCatatan
Pelanggan bayar invoiceInvoice → + BayarJANGAN lewat Deposit Masuk
Pelanggan/agen titip dana di luar invoiceDeposit Masukstatus Aktif selama belum dipakai
Bayar/top-up saldo supplier (NSK, trip.com, maskapai)Deposit Keluarbukan Pengeluaran!
Gaji, listrik, air, internet, ATK, PBB, marketingPengeluaraninilah yang memotong laba
Cicilan modal ke KastomoDeposit Keluar, Pihak: Kastomobukan Pengeluaran
Komisi ke agenKomisi Agen → tombol Bayarsaldo terpotong saat Sudah Dibayar
Uang kembali ke pelangganRefund → Ke Pelanggan
Uang kembali dari supplierRefund → Dari Supplier
Staf/pimpinan menalangi pakai uang pribadiPengajuan Dana → tipe ReimbursementJANGAN "Permintaan Dana + Cairkan" — lihat bagian 6
Dana operasional masuk dari MMB PusatDeposit Masuk, Pihak MMB PUSAT PEKANBARU, status DigunakanJANGAN Aktif — lihat bagian 7
Pindah uang antar rekening milik sendiriSepasang Deposit (Keluar + Masuk), keduanya status Digunakanbelum ada fitur Transfer — lihat bagian 10
Aturan emas: bayaran supplier yang salah masuk ke "Pengeluaran" = laba terpotong DUA KALI (di margin invoice + di biaya). Selalu cek tabel ini sebelum input.

2 Membatalkan invoice yang SUDAH ada pembayarannya

Sistem hanya menandai invoice Batalpembayarannya TIDAK ikut batal otomatis. Setiap membatalkan invoice berbayar, wajib jawab:

"Uang yang sudah diterima itu ke mana?"
SituasiLangkah
Pembayaran memang salah input (uangnya tak pernah ada)Buka detail invoice → Batalkan pembayarannya juga (void)
Uang dikembalikan ke pelangganCatat Refund → Ke Pelanggan (pilih rekening yang keluar uang)
Uang dipindah jadi titipan untuk order berikutnyaRefund → Ke Pelanggan LALU Deposit Masuk pihak & nominal sama
Kalau dilewati: saldo sistem lebih besar dari saldo bank sungguhan — ketahuan saat rekonsiliasi.

3 Refund sebagian (invoice tetap jalan)

Contoh: 1 pax batal dari rombongan 47 pax, sisanya berangkat. Refund di sistem = pergerakan kas saja — tidak mengoreksi laba invoice. Wajib DUA langkah:

  1. Edit invoice → koreksi item (pax/harga) supaya Total Jual & Laba mencerminkan yang benar-benar jalan.
  2. Catat Refund → Ke Pelanggan sebesar uang yang dikembalikan.
Hanya langkah 2 tanpa langkah 1 → laba bulan itu kelebihan catat. Kalau supplier ikut mengembalikan modal → tambah Refund → Dari Supplier.

4 Rekonsiliasi bank — tiap tanggal 1 (±15 menit)

Tujuan: saldo sistem = saldo rekening koran. Dikerjakan Yogi/admin, hasil dilaporkan singkat ke Faris.

Selama masih pakai rekening MMB Pusat (tercampur): rekonsiliasi cukup atas transaksi milik Medan — arsir mutasi bank yang bukan milik Medan, sisanya harus cocok dengan sistem.

5 Disiplin label status Deposit

Titipan pelanggan (Deposit Masuk) tampil di Laporan → Kewajiban Titipan Pelanggan selama statusnya Aktif. Supaya laporan benar:

Label lupa di-update = laporan kewajiban menampilkan utang yang sebenarnya sudah beres.

6 Talangan uang pribadi (Reimbursement)

Kadang staf atau pimpinan menalangi dulu dengan uang sendiri — tagihan mendesak, booking fee, bonus. Pegang satu aturan:

Tidak ada apa pun yang dicatat saat uang pribadi keluar. Sistem baru mencatat ketika kas perusahaan mengganti uang itu.

Sebabnya: tombol Cairkan Dana berarti "kas perusahaan keluar hari ini". Kalau dipakai padahal uangnya dari kantong pribadi, dua hal rusak sekaligus — saldo sistem jadi lebih kecil daripada saldo bank sungguhan, dan biayanya tercatat dua kali begitu penggantiannya dibayar.

  1. Ajukan lewat Pengajuan Dana → pilih tipe Reimbursement (bukan Permintaan Dana).
  2. Nota/bukti wajib dilampirkan + isi Tanggal Transaksi (kapan uang pribadi dibelanjakan). Sistem menolak kalau kosong — nota itu satu-satunya bukti, karena reimbursement tidak punya LPJ menyusul.
  3. Review → approval Faris → klik Bayar Penggantian saat uang benar-benar diganti. Pengajuan langsung Selesai, biaya tercatat sekali di tanggal pembayaran.
Ajukan di bulan yang sama dengan belanjanya. Kalau telat, biayanya jatuh ke bulan pembayaran — dan bulan yang sudah tutup buku tidak bisa lagi dibebani.

Satu pengeluaran = satu jalur pendanaan.

Permintaan Dana dan Reimbursement bukan dua pengeluaran berbeda — keduanya dua cara mendanai satu pengeluaran yang sama:

Dipakai saatUrutan uang
Permintaan Danabelum dibayar, minta dana duluperusahaan bayar → belanja
Reimbursementsudah dibayar pakai uang pribadiorang bayar → perusahaan ganti

Jadi untuk satu tagihan listrik, satu gaji, satu booking fee — hanya boleh ada satu yang aktif. Kalau keduanya ada dan sama-sama cair, uang keluar dua kali untuk barang yang sama.

Begitu sebuah kebutuhan dibayar dengan uang pribadi, pengajuan lama untuk kebutuhan yang sama WAJIB dibatalkan di hari yang sama.

Jangan ditunda. Begitu dana turun, tidak ada lagi yang ingat baris mana pasangan baris mana — dan pengajuan lama yang masih Disetujui ikut tercetak di Surat Permintaan Dana, sehingga Pusat mengirim dana yang sebenarnya sudah tidak dibutuhkan.

Cara membatalkannya: buka Detail pengajuan lama → tombol Batalkan → isi alasan yang menyebut tanggal talangan dan ID pengajuan penggantinya, contoh:

Sudah ditalangi uang pribadi Faris 26/07/2026; penggantian via reimbursement PGJ-20260726xxxxxx

Status berubah jadi Dibatalkan (bukan Ditolak — bukan penolakan, tapi koreksi), jejaknya tetap terlihat di daftar, dan barisnya otomatis keluar dari Surat Permintaan Dana. Menyebut ID pengganti itu penting: itulah yang membuat baris batal bisa ditelusuri ke penggantinya tanpa bertanya siapa pun.

Berlaku sebaliknya juga: kalau Permintaan Dana sudah cair lalu belanjanya ternyata dibayar pribadi, jangan buat reimbursement — dananya sudah di tangan perusahaan, tinggal diserahkan ke yang menalangi lalu dipertanggungjawabkan lewat LPJ.

Cara cepat memeriksanya: di halaman Pengajuan, lihat baris berstatus Disetujui, cari nominal kembar, lalu buka Detail-nya dan baca Uraian — jangan menilai dari angka saja.

⚠️ Nominal kembar bukan bukti dobel input. Gaji semua orang di cabang ini besarnya sama, jadi empat baris gaji bernominal identik itu wajar — masing-masing untuk orang yang berbeda. Yang menentukan kembar atau tidak adalah Uraian-nya ("Gaji Yogi Prayudha" vs "Gaji Husni Mubarak" = dua kebutuhan berbeda), bukan angkanya. Membatalkan pengajuan gaji yang sah = ada orang yang tidak digaji bulan itu.

Yang benar-benar kembar punya ciri: uraian menyebut kebutuhan yang sama, dan salah satunya bertipe Reimbursement sementara pasangannya Permintaan Dana.

Tidak semua talangan itu biaya operasional:

Yang ditalangiCatat sebagai
Tagihan, ATK, bensin, jamuan, bonusReimbursement → jadi biaya operasional
Biaya tambahan tiket untuk invoice tertentuEdit invoice → tambahkan ke Modal; penggantian uangnya lewat Deposit Keluar
Deposit/jaminan ke supplierDeposit Keluar ke supplier, saat uang diganti
Dua baris terakhir jangan lewat tombol Bayar Penggantian: alur itu selalu melahirkan biaya operasional, sehingga biaya tiket tercatat dua kali (di modal invoice + di biaya) dan laba per-invoice — termasuk KPI penjualnya — jadi salah.

Kalau terlanjur salah catat (sudah "Cairkan" padahal uangnya pribadi):

  1. Menu PengeluaranEdit baris itu → ubah status jadi Dibatalkan. Gunakan Dibatalkan, bukan Ditolak: keduanya sama-sama tidak dihitung, tapi Ditolak berarti penyetuju menolak, sedangkan ini koreksi pencatatan atas pengeluaran yang sah.
  2. Tambahkan keterangan koreksi di belakang teks aslinya, mis. "— Koreksi: dibayar dulu dengan uang pribadi Faris, kas perusahaan belum keluar; penggantian via reimbursement PGJ-xxxxx".
  3. Status Dibatalkan otomatis mengeluarkannya dari saldo maupun dari biaya, dan barisnya tampil dicoret di daftar. Pengajuan lama yang sudah Selesai dibiarkan apa adanya sebagai riwayat — memang tidak bisa dibatalkan, dan tidak memengaruhi angka mana pun.

7 Dana operasional dari MMB Pusat

Biaya operasional cabang didanai kiriman dari Pusat. Kirimannya kadang masuk ke rekening yang tercatat di sistem, kadang ke rekening pribadi Faris lalu beliau yang membayarkan. Keputusan pemilik (1 Agustus 2026): dari mana pun masuknya, dicatat sama — yang penting dananya dari Pusat dan tercatat di sistem.

Diperbarui 11 Agustus 2026: cabang kini punya rekening sendiri (MMB CABANG MEDAN, Mandiri 1080501277777). Cara pencatatan di bawah tidak berubah — yang berubah hanya pilihan Rekening saat input: kiriman Pusat yang masuk ke rekening cabang dicatat dengan Rekening MMB CABANG MEDAN. Kiriman lewat rekening pribadi tetap dicatat seperti biasa, dan keterangannya tetap wajib menyebut lewat mana.

Dua sisi yang harus lengkap — ini bagian yang paling mudah tertinggal:

SisiDicatat sebagai
Uang masuk dari PusatDeposit Masuk, Pihak MMB PUSAT PEKANBARU, status Digunakan
Uang keluar untuk biayaPengajuan Dana → Cairkan / Bayar Penggantian
Kalau hanya sisi keluar yang dicatat, saldo sistem menyusut tanpa sebab. Terjadi 3 Agustus 2026: Rp 30,35 jt tercatat keluar sementara dana yang membiayainya belum dicatat masuk — saldo tampak Rp 30 jt lebih kecil dari yang sebenarnya.
Statusnya Digunakan, bukan Aktif. Label Aktif pada Deposit Masuk dipakai laporan Kewajiban Titipan Pelanggan (bagian 5). Dana operasional dari Pusat bukan titipan pelanggan dan tidak untuk dikembalikan — kalau ditandai Aktif, laporan menampilkan utang yang tidak ada.

Keterangannya sebutkan lewat mana. Contoh: "Dana operasional cabang Medan Juli 2026 — transfer BNI ke rekening Faris". Suatu saat akan ada yang mencocokkan ke rekening koran; keterangan inilah yang menjelaskan kenapa transaksinya tidak ada di sana.

Yang dibayar Pusat langsung ke penerima (mis. gaji ditransfer Pusat langsung ke orangnya) tetap dicatat dua sisi: Deposit Masuk sebesar itu, lalu pengajuannya dicairkan seperti biasa. Kalau tidak, biayanya diakui tanpa sumber dana.

Uji cepat: setelah semua tercatat, jumlah Deposit Masuk dari Pusat harus kira-kira sama dengan jumlah biaya yang didanainya. Selisih besar berarti ada sisi yang belum dicatat.

8 Tutup bulan — urutan kerja tanggal 1

  1. Pastikan semua transaksi bulan lalu sudah diinput dengan tanggal bulan lalu (boleh telat input, tanggal harus benar).
  2. Bukukan biaya rutin: gaji, listrik, air, (internet), dst → Pengeluaran.
  3. Pastikan semua talangan pribadi bulan itu sudah diajukan & diganti (bagian 6) — jangan tertinggal ke bulan depan.
  4. Periksa pengajuan kembar: buka Pengajuan Dana, lihat baris berstatus Disetujui, cari nominal kembar. Kalau sebuah kebutuhan sudah ditalangi dan diajukan sebagai Reimbursement, pengajuan lamanya harus sudah Dibatalkan (bagian 6). Kalau tidak, Pusat mengirim dana untuk sesuatu yang sudah dibayar.
  5. Tuntaskan pengajuan yang menggantung. Buka Pengajuan Dana, lihat yang masih Menunggu Review / Menunggu Approval — setujui, tolak, atau batalkan. Jangan biarkan menyeberang bulan.
    Alasannya: biaya diakui saat kas keluar (bagian 6). Pengajuan bulan lalu yang baru cair dua bulan kemudian membebani bulan yang salah — persis yang membuat laba Juli 2026 kelebihan ±Rp 20 juta karena seluruh gaji Juli baru dibayar 3 Agustus.
  6. Jalankan rekonsiliasi bank (bagian 4).
  7. Update label status deposit (bagian 5).
  8. Buka Laporan → periksa → unduh PDF + Excel → kirim ke Faris.
  9. KUNCI bulannya: buka menu Pengaturan di aplikasi (khusus owner) → kartu Tutup Buku → pilih tanggal akhir bulan (mis. 30/06/2026) → klik Kunci Periode. Sistem lalu menolak tambah/ubah/void transaksi bertanggal ≤ tanggal itu.
  10. Yang tetap bisa setelah terkunci: pelunasan piutang, bayar komisi, dan refund — asal dicatat dengan tanggal periode berjalan; juga ganti label status deposit, pasang bukti, cetak kwitansi.
  11. Perlu koreksi bulan terkunci (kasus luar biasa)? Owner klik Buka Kunci di halaman Pengaturan → koreksi → kunci lagi. Semua tetap terekam di Audit Log.

9 Pemulihan dari cadangan (kalau data hilang)

Diuji 5 Agustus 2026. Cadangan 4 Agustus dibandingkan sel-demi-sel dengan sistem yang hidup: 16/16 lembar lengkap, nol kehilangan data. Delapan perbedaan yang muncul semuanya terjelaskan sebagai perubahan yang terjadi setelah cadangan diambil.

9.1 Apa yang dicadangkan otomatis

CadanganKapanDisimpan
Salinan Spreadsheet (16 lembar)tiap hari ±02:50 WIBDrive → MMB_Medan_Backup, 60 terakhir
Ekspor .xlsxtiap Senin ±03:55 WIBfolder yang sama

Cek cepat: buka folder MMB_Medan_Backup → harus ada berkas bertanggal hari ini atau kemarin. Kalau tertinggal lebih dari 2 hari, pemicunya mati — buka editor Apps Script → jalankan setupTriggers sekali.

9.2 Yang TIDAK ada di dalam cadangan

  1. Penghitung nomor invoice & kwitansi (INV_COUNTER_yyyyMM, KW_COUNTER_yyyyMM) — hidup di Script Properties. Sejak backend @68 sistem memulihkannya sendiri dari sheet, tapi tetap harus diperiksa setelah pemulihan.
  2. Berkas yang diunggah — folder Drive MMB Medan Pengajuan, Deposit, Komisi, Bukti Bayar. Spreadsheet hanya menyimpan alamatnya.
  3. Rahasia & setelanAPI_SECRET, REQUIRE_PROXY_EMAIL, variabel Cloudflare Pages, kebijakan Cloudflare Access.
  4. Kode — ada di GitHub, bukan di cadangan ini.

9.3 Keadaan A — data rusak, berkasnya masih ada

  1. Berhenti dulu. Jangan menambah transaksi baru sampai selesai.
  2. Spreadsheet produksi → File → Version history. Untuk kerusakan yang baru terjadi, ini lebih cepat & lebih aman daripada cadangan.
  3. Kalau tidak memadai: buka cadangan terakhir → klik kanan tab lembar yang rusak → Copy to → Existing spreadsheet → pilih berkas produksi → hapus lembar rusak → ganti nama salinan agar persis seperti aslinya (mis. Invoice, bukan Invoice (1)).
  4. ID spreadsheet tidak berubah → tidak perlu ubah kode, tidak perlu deploy ulang.

9.4 Keadaan B — berkas produksi hilang seluruhnya

  1. Folder MMB_Medan_Backup → cadangan terbaru → Make a copy → beri nama MMB Travel Medan - Operasional.
  2. Salin ID-nya dari alamat: docs.google.com/spreadsheets/d/<ID>/edit.
  3. Ubah baris 29 MMB_Medan_Backend_v3.gs: const SPREADSHEET_ID = '<ID BARU>';
  4. Deploy: clasp push --force lalu clasp redeploy <id deployment produksi>.
  5. Penghitung nomor — sejak backend @68 pulih sendiri. Kalau Script Properties hilang, sistem membaca nomor tertinggi bulan berjalan dari sheet dan melanjutkan dari situ (tercatat di Audit Log sebagai COUNTER_PULIH). Tetap periksa lewat 9.5 nomor 4 — kalau ternyata mengulang dari 0001, isi manual di editor Apps Script → Project Settings → Script Properties: INV_COUNTER_202608 dan KW_COUNTER_202608.
  6. Pastikan API_SECRET (sama dengan variabel di Cloudflare Pages) dan REQUIRE_PROXY_EMAIL = true masih ada.

9.5 Pemeriksaan setelah pemulihan — jangan dilewati

  1. Masuk aplikasi → nama & peran benar.
  2. Dashboard → bandingkan Revenue, Laba Kotor, Laba Bersih bulan lalu dengan PDF Laporan bulan itu yang sudah pernah dikirim ke Faris. Harus sama persis — inilah bukti datanya utuh, bukan sekadar aplikasinya terbuka.
  3. Saldo Rekening → cocokkan dengan mutasi bank hari itu.
  4. Buat satu invoice percobaan → nomornya harus melanjutkan urutan, bukan mengulang 0001 → lalu batalkan dengan alasan uji pemulihan.
  5. Buka satu Pengajuan lama berlampiran → klik dokumennya → pastikan masih terbuka (menguji folder Drive).
Cadangan berjalan sekali sehari ±02:50 WIB, jadi kerusakan sore hari bisa menghilangkan transaksi sejak dini hari itu. Pengamannya: Version history Google Sheets (jauh lebih rinci) dan Audit Log yang merekam tiap penulisan berikut isinya — dari situ transaksi yang hilang bisa direkonstruksi tangan.

10 Pindah kas antar-rekening sendiri (sementara)

Sejak 11 Agustus 2026 cabang punya dua rekening: PUSAT BANK MANDIRI dan MMB CABANG MEDAN. Selama rekeningnya cuma satu, memindahkan uang antar-rekening tidak pernah jadi soal — sekarang jadi soal.

Sistem BELUM punya fitur Transfer Antar-Rekening. Yang di bawah ini cara sementara yang memakai fitur yang sudah ada. Benar secara angka, tapi bergantung pada disiplin — baca ketiga jebakannya sampai habis.

10.1 Kenapa tidak boleh asal catat

Kalau pindah kas dicatat sebagai pasangan Deposit berstatus Aktif, saldonya memang benar, tapi dua laporan langsung berbohong:

LaporanYang munculKenyataannya
Deposit Tersimpan di Supplieruang parkir di suppliertidak ada supplier mana pun
Kewajiban Titipan Pelanggantitipan pelanggantidak ada pelanggan mana pun

Keduanya masuk mini-neraca Posisi Keuangan, jadi aset dan kewajiban sama-sama menggelembung.

10.2 Caranya — dua catatan, keduanya berstatus Digunakan

Contoh: memindahkan Rp 50.000.000 dari Pusat ke Cabang Medan, 11 Agustus.

IsianCatatan 1 — keluar dari PusatCatatan 2 — masuk ke Medan
TipeKeluarMasuk
RekeningPUSAT BANK MANDIRIMMB CABANG MEDAN
PihakMMB CABANG MEDANPUSAT BANK MANDIRI
Nominal50.000.00050.000.000
StatusDigunakanDigunakan
KeteranganPINDAH KAS INTERNAL — ke rekening Cabang Medan 1080501277777. Bukan deposit supplier.PINDAH KAS INTERNAL — dari rekening Pusat 1080508555555. Bukan titipan pelanggan.
Yang membuatnya bekerja: dari empat label status deposit, hanya Dibatalkan yang mempengaruhi saldo (lihat §5). Sementara kedua laporan di atas menyaring Aktif secara harfiah.

10.3 Hasilnya

TempatMuncul?Benar?
Saldo Pusat−50 jtya
Saldo Cabang Medan+50 jtya
Total kas perusahaantidak berubahya
Rekening Koran kedua rekeningtercatat di keduanyaya — memang di sinilah tempatnya
Deposit Tersimpan di Suppliertidak munculya
Kewajiban Titipan Pelanggantidak munculya
Halaman Deposit — kartu Total Masuk/Keluarikut terjumlahagak menyesatkan

10.4 Tiga jebakan

  1. Kolom Pihak TIDAK BOLEH memuat kata "Kastomo". Sistem menghitung cicilan modal Kastomo dengan mencocokkan nama — setiap Deposit Keluar yang kolom Pihak-nya mengandung "kastomo" dianggap pengembalian modal. Salah tulis di situ mengurangi sisa utang modal Rp 105 juta secara palsu, tanpa peringatan apa pun.
  2. Statusnya harus Digunakan, bukan Aktif. Lupa = dua laporan di 10.1 langsung berbohong, diam-diam.
  3. Deposit Masuk membakar satu nomor kwitansi. Nomornya diambil dari counter yang sama dengan kwitansi pembayaran pelanggan dan pembayaran komisi — jadi tiap pindah kas memakai satu nomor kwitansi untuk sesuatu yang bukan kwitansi.

10.5 Kapan cara ini harus diganti

Layak untuk sesekali. Kalau uang mulai rutin berpindah antar-rekening, cara ini tidak layak dipertahankan: tiga jebakan yang semuanya bergantung ingatan orang, ditambah nomor kwitansi yang terbakar tiap kali.

Rencana: bangun fitur Transfer Antar-Rekening yang sebenarnya setelah tutup buku Agustus — satu form, satu catatan, saldo kedua rekening bergerak sekaligus, tanpa menyentuh laporan supplier/titipan dan tanpa memakai nomor kwitansi.
Dokumen internal MMB Travel Pusat · semua perubahan data tercatat otomatis di Audit Log · versi 11 Agustus 2026