Lewati ke konten utama

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 (sebesar grandTotal / total kotor tagihan).
  • Kredit: 4000 Pendapatan Penjualan (sebesar untaxedTotal / nilai bersih omzet).
  • Kredit: 2000 PPN Keluaran (sebesar taxTotal / jika transaksi dikenakan pajak PPN).
Validasi Pajak Otomatis

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:

  1. Saat pesanan disiapkan dan dikirim, sistem menerbitkan dokumen pengeluaran gudang (StockPicking bertipe OUTGOING).
  2. Staf gudang melakukan Pick, Pack, dan menekan tombol Validasi Pengiriman (Done).
  3. 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 == grandTotalUNPAIDBelum ada pembayaran yang diterima sama sekali.
0 < balanceDue < grandTotalPARTIALPembayaran uang muka (DP) atau cicilan sebagian. Tagihan masih menyisakan saldo piutang.
balanceDue == 0PAIDTagihan 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:

  1. Jika invoice penjualan sebelumnya telah terposting, sistem menerbitkan jurnal pembalik (reversal journal) baru dengan tipe sumber SalesOrderCancel yang terikat pada nomor SO yang sama.
  2. 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).
Penguncian Cabang Transaksi (Branch Lock)

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.