← Kembali ke aplikasi  ·  Panduan Peran →
MMB

SOP Keuangan

MMB Travel Pusat (Pekanbaru) & cabang under-control · panduan tim — angka di sistem selalu = kenyataan

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, muasasah)Deposit Keluarbukan Pengeluaran!
Gaji, listrik, air, internet, ATK, PBB, marketingPengeluaraninilah yang memotong laba
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
Cabang terima uang tunai dari pelangganInvoice → + Bayar, rekening Kas <Cabang>lihat bagian 12
Pindah uang antar rekening milik sendiri (termasuk setoran kas cabang)Deposit → tombol ⇄ Setoran Kaslihat bagian 10 & 12
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 Batal — pembayarannya 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 admin, hasil dilaporkan singkat ke Fajar.

Rekening jenis Kas <Cabang> (uang tunai yang dipegang cabang) tidak punya rekening koran — cocokkan saldonya dengan kas fisik / laporan cabang. Saldo yang menggantung lama = ada setoran yang belum jalan (lihat bagian 12).

4b Bukti transfer — semua uang yang bergerak punya jejaknya

Sejak 15 Agustus 2026 setiap jalur kas punya tempat menyimpan bukti: pembayaran invoice, deposit, setoran kas, komisi, pengeluaran, dan refund (dua yang terakhir baru — sebelumnya tidak ada tempatnya sama sekali).

Bukti tersimpan di penyimpanan berkas milik sistem sendiri (alamat /bukti/...), bukan tautan Google Drive/WhatsApp yang bisa mati. Sistem menolak alamat dari luar.

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 pimpinan (Fajar) → 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 dana bisa cair untuk kebutuhan yang sebenarnya sudah dibayar.

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

Sudah ditalangi uang pribadi Fajar 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 beberapa staf bisa sama besar, jadi beberapa baris gaji bernominal identik itu wajar — masing-masing untuk orang yang berbeda. Yang menentukan kembar atau tidak adalah Uraian-nya ("Gaji Andi" vs "Gaji Budi" = 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 Pengeluaran → Edit 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 Fajar, 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 Cabang & Medan — batas pencatatan

Cabang under-control (Makassar, Balikpapan, Yogyakarta, Cibubur, Pekalongan, Samarinda, Wonosobo) tidak punya pembukuan terpisah — semua transaksinya dicatat langsung di sistem ini:

MMB Medan BUKAN cabang. Medan adalah partner mandiri dengan sistem, rekening, dan pembukuan sendiri. Jangan pernah mencatat transaksi internal Medan di sistem ini, dan jangan memasukkan Medan ke daftar cabang. Kalau benar-benar ada uang berpindah antara Pusat dan Medan, catat seperti transaksi dengan pihak luar biasa (Deposit / Invoice / Refund sesuai kejadiannya) — bukan "pindah kas internal".

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, dana dicairkan 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 — laba bulan lalu jadi kelebihan catat, laba bulan pembayaran tergerus.
  6. Jalankan rekonsiliasi bank (bagian 4).
  7. Update label status deposit (bagian 5).
  8. Buka Laporan → periksa → unduh PDF + Excel → arsipkan & laporkan ke Fajar. Excel-nya sekaligus cadangan bulanan (bagian 9).
  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)

Data pusat hidup di Cloudflare D1 (database) dan R2 (berkas bukti) — tidak ada Spreadsheet. Pengaman utamanya D1 Time Travel: Cloudflare menyimpan riwayat perubahan database dan bisa memulihkannya ke titik waktu mana pun dalam 30 hari terakhir, otomatis, tanpa perlu dicek harian.

9.1 Lapisan cadangan

LapisanKapanIsi
D1 Time Travelotomatis, terus-menerusseluruh database, bisa dipulihkan ke titik waktu mana pun ≤ 30 hari
Ekspor .xlsx manualLaporan → Backup, minimal tiap tutup bulan (bagian 8 no. 8)seluruh data, bentuk Excel — simpan di tempat aman di luar Cloudflare
Audit Logotomatis, di dalam databasesetiap penulisan berikut isinya — bahan rekonstruksi manual

Ekspor XLSX rutin itu penting: dialah satu-satunya cadangan untuk kerusakan yang baru ketahuan lebih dari 30 hari kemudian.

9.2 Yang TIDAK ikut dipulihkan Time Travel

  1. Berkas bukti di R2 — database hanya menyimpan alamat /bukti/<folder>/<berkas>; berkasnya sendiri hidup di bucket mmb-pusat-berkas. R2 tidak punya time travel — jangan pernah menghapus isinya.
  2. Rahasia & setelan — kebijakan Cloudflare Access, variabel Cloudflare Pages.
  3. Kode — ada di GitHub (mmb-pusat-app), bukan di cadangan ini.
Penghitung nomor invoice/kwitansi TIDAK termasuk daftar ini — tersimpan di tabel penghitung di dalam database, ikut tercadangkan, dan pulih sendiri dari data kalau hilang.

9.3 Keadaan A — salah input / data rusak sebagian (paling sering)

Jangan buru-buru memulihkan database. Sistem append-only: koreksi resmi = void + input ulang / edit (bagian 2, bagian 6). Audit Log merekam setiap penulisan berikut isinya, jadi baris yang dirusak bisa direkonstruksi tangan tanpa menyentuh database.

9.4 Keadaan B — kerusakan besar (perlu pemulihan database)

Dikerjakan pemegang akses teknis (owner), dari komputer yang sudah terpasang wrangler:

  1. Berhenti dulu. Umumkan ke tim: jangan input transaksi sampai selesai — pemulihan mengembalikan SELURUH database ke titik waktu itu, dan transaksi sesudahnya hilang (harus diinput ulang).
  2. Lihat titik pulih yang tersedia: wrangler d1 time-travel info mmb-pusat-keuangan
  3. Pulihkan: wrangler d1 time-travel restore mmb-pusat-keuangan --timestamp=<waktu sebelum kerusakan>
  4. Input ulang transaksi yang terjadi setelah titik pulih (sumber: Audit Log bila masih terbaca, ekspor XLSX terakhir, bukti fisik / chat tim).
  5. Lanjut ke 9.5.

Kerusakan baru ketahuan setelah lebih dari 30 hari? Time Travel tidak menjangkaunya — andalkan ekspor XLSX terakhir + Audit Log, dan rekonstruksi lewat mekanisme input resmi.

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 diarsipkan (bagian 8 no. 8). 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 transaksi lama berlampiran → klik buktinya → pastikan masih terbuka (menguji R2).
  6. Catat tanggal & sebab pemulihan di catatan tim (Audit Log otomatis merekam sisanya).

10 Pindah kas antar-rekening sendiri — tombol ⇄ Setoran Kas

Memindahkan uang antar rekening milik sendiri — termasuk setoran tunai cabang ke rekening pusat (bagian 12) — dicatat lewat halaman Deposit → tombol ⇄ Setoran Kas: satu form, sistem menulis sepasang deposit berstatus Digunakan otomatis (keluar dari rekening asal, masuk ke rekening tujuan), tanpa membakar nomor kwitansi.

Jangan mencatatnya manual 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. Tombol Setoran Kas memakai status Digunakan justru untuk menghindari itu: dari empat label status deposit, hanya Dibatalkan yang dikeluarkan dari saldo (bagian 5), sementara kedua laporan di atas hanya menyaring yang Aktif — jadi saldonya tetap bergerak tanpa mengotori laporan mana pun.

Ciri pemakaiannya benar: saldo rekening asal −X, rekening tujuan +X, total kas perusahaan tidak berubah, kedua baris muncul di Rekening Koran masing-masing rekening — dan tidak muncul di laporan supplier/titipan.

Salah pencet / salah nominal? Batalkan (void) kedua baris pasangannya — jangan salah satu saja — lalu ulangi dari form.

11 Pencatatan PAKET (khusus Pusat)

Paket umroh punya banyak komponen biaya yang angka pastinya baru ketahuan belakangan. Jangan merinci modal per komponen — pakainya begini:

  1. Satu baris item per paket. Kategori Paket Umroh, deskripsi bebas ("Paket Umroh 12 Hari — hotel + tiket + visa + transport"), pax × harga jual per pax.
  2. Modal = ESTIMASI HPP per pax, satu angka — angka yang dipakai waktu menentukan harga jual. Jangan isi 0 lalu dibiarkan: laba kotor akan tampak sebesar omzet.
  3. Biaya riil dicatat saat uang keluar: bayar supplier/muasasah → Deposit Keluar dengan nomor invoice di kolom Referensi (laporan Kewajiban Supplier otomatis mencocokkan estimasi vs realisasi per paket); biaya umum → Pengeluaran.
  4. Setelah biaya final (grup berangkat): Edit invoice → perbarui angka modal ke riil, sebelum periode ditutup buku. Laba per paket & KPI PIC jadi akurat.
Dua kacamata: laporan kas menjawab "uangnya ke mana"; invoice menjawab "untung berapa per paket & siapa belum lunas".

12 Uang CASH di cabang (khusus Pusat)

Cabang under-control (Makassar, Balikpapan, dst. — bukan Medan, Medan partner mandiri) kadang menerima tunai lalu menyetorkannya ke rekening pusat:

  1. Terima cash → Invoice → + Bayar, metode Cash, rekening tujuan Kas <Cabang> (buat sekali di Master Rekening). Kwitansi bisa langsung dicetak; saldo "Kas <Cabang>" = uang yang masih dipegang cabang.
  2. Cabang setor/transfer → halaman Deposit → tombol ⇄ Setoran Kas → dari Kas <Cabang> ke rekening pusat.
  3. Saldo "Kas <Cabang>" yang menggantung lama = ada setoran yang belum jalan — tagih.
Dokumen internal MMB Travel Pusat · semua perubahan data tercatat otomatis di Audit Log · versi 15 Agustus 2026