Integrasi Penjualan, Piutang Usaha & Pengakuan Pendapatan
Integrasi antara modul Penjualan (Sales Order v2 & POS Toko) dengan modul Akuntansi menjalankan siklus Order-to-Cash (O2C) secara otomatis tanpa intervensi manual. Setiap perubahan status transaksi penjualan segera menghasilkan entri jurnal ganda (double-entry) yang menjaga keseimbangan mutlak antara nilai persediaan barang, piutang pelanggan, kas, dan omzet penjualan.
1. Diagram Siklus Order-to-Cash (O2C)
2. Pengakuan Piutang & Pendapatan (JournalService.postSalesInvoice)
Saat pesanan penjualan dikonfirmasi (SalesOrder berpindah ke stage Confirmed) atau saat kasir menyelesaikan checkout POS:
A. Formula Keseimbangan Transaksi
Sistem memisahkan nilai penjualan barang sebelum pajak dengan kewajiban pajak pertambahan nilai:
Grand Total (Debet Piutang) = Untaxed Total (Pendapatan) + Tax Total (PPN Keluaran)
B. Struktur Entri Jurnal Penjualan:
- Debet:
1200 Piutang Usaha(sebesargrandTotal/ total kotor tagihan). - Kredit:
4000 Pendapatan Penjualan(sebesaruntaxedTotal/ nilai bersih omzet). - Kredit:
2000 PPN Keluaran(sebesartaxTotal/ jika transaksi dikenakan pajak PPN).
Jika pesanan dibebaskan dari pajak (taxTotal == 0), sistem secara otomatis hanya mencatat pasangan 2 baris: Debet Piutang Usaha (1200) dan Kredit Pendapatan Penjualan (4000) dalam jumlah yang persis seimbang.
3. Pengakuan HPP saat Pengiriman Barang (JournalService.postCogs)
Prinsip akuntansi penandingan beban dan pendapatan (Matching Principle) mewajibkan Harga Pokok Penjualan (HPP) diakui pada saat barang fisik telah diserahkan dari gudang kepada pelanggan.
Mekanisme Eksekusi:
- Saat pesanan disiapkan dan dikirim, sistem menerbitkan dokumen pengeluaran gudang (
StockPickingbertipeOUTGOING). - Staf gudang melakukan Pick, Pack, dan menekan tombol Validasi Pengiriman (Done).
- Service akuntansi membaca seluruh mutasi barang (
StockMove) di dalam picking tersebut dan menghitung total modal pokok:
Total HPP = Sum(unitCost x qtyBase)
Struktur Entri Jurnal HPP:
- Debet:
5000 HPP / Beban Pokok Penjualan(sebesar total biaya perolehan barang). - Kredit:
1300 Persediaan Barang Dagangan(sebesar total biaya perolehan barang).
Efek langsung dari jurnal ini:
- Nilai aset persediaan barang dagangan di Neraca berkurang.
- Beban pokok penjualan di Laporan Laba Rugi bertambah, sehingga Laba Kotor (Gross Profit) perusahaan terhitung secara akurat.
4. Pelunasan Piutang Usaha (Payment IN)
Ketika pelanggan melakukan pembayaran (baik tunai langsung di kasir POS, transfer bank atas invoice B2B, maupun setoran bertahap):
A. Formulir Pembayaran (Payment Direction IN)
Staf keuangan atau kasir mencatat bukti pembayaran dengan atribut:
- Nomor Faktur Terkait: Relasi ke
salesOrderId. - Rekening Penerima (
paymentAccountId): Kas toko (1000) atau Rekening Bank (1101). - Nominal Bayar (
amount): Jumlah rupiah yang diterima.
B. Struktur Entri Jurnal Pembayaran:
- Debet:
1000 Kas/1101 Bank BCA(Aset kas bertambah). - Kredit:
1200 Piutang Usaha(Aset piutang berkurang).
C. Pembaruan Akumulasi Tagihan Penjualan:
Secara instan, sistem memperbarui status keuangan pada lembar SalesOrder:
amountPaid (baru) = amountPaid (lama) + amount (pembayaran)
balanceDue = grandTotal - amountPaid
Nilai Saldo Tagihan (balanceDue) | Status Pelunasan (paymentStatus) | Keterangan Operasional |
|---|---|---|
balanceDue == grandTotal | UNPAID | Belum ada pembayaran yang diterima sama sekali. |
0 < balanceDue < grandTotal | PARTIAL | Pembayaran uang muka (DP) atau cicilan sebagian. Tagihan masih menyisakan saldo piutang. |
balanceDue == 0 | PAID | Tagihan telah lunas sepenuhnya. |
5. Pembatalan Pesanan & Pembalikan Jurnal Otomatis (JournalService.postSalesOrderCancel)
Sistem menerapkan proteksi ketat ketika pesanan penjualan yang telah dikonfirmasi perlu dibatalkan (Sales Order Cancellation).
A. Kondisi yang Memungkinkan Pembatalan:
Pesanan dapat dibatalkan hanya jika barang belum dikirim keluar gudang (tidak ada StockPicking pengiriman yang telah berstatus Done).
B. Prosedur Pembalikan Jurnal Otomatis:
Ketika Sales Order dibatalkan, JournalService.postSalesOrderCancel memeriksa keberadaan jurnal penjualan terdahulu:
- Jika invoice penjualan sebelumnya telah terposting, sistem menerbitkan jurnal pembalik (reversal journal) baru dengan tipe sumber
SalesOrderCancelyang terikat pada nomor SO yang sama. - Entri jurnal pembalik:
- Debet:
4000 Pendapatan Penjualan(sebesar omzet sebelum pajak yang dibatalkan). - Debet:
2000 PPN Keluaran(sebesar kewajiban pajak yang dibatalkan). - Kredit:
1200 Piutang Usaha(menghapuskan seluruh saldo piutang fiktif atas pesanan yang batal).
- Debet:
Melalui mekanisme assertBranchMutable, sistem melarang keras pengubahan cabang (branchId) pada pesanan penjualan setelah jurnal akuntansi pertamanya terposting. Aturan ini memastikan pendapatan dan piutang tidak tercatat di cabang A sementara pembatalannya tercatat di cabang B.