POS → Inventory → Journal flow
How a cashier transaction automatically creates a journal and COGS entry.
One of esaFiskaly's central promises: cashier operations automatically become bookkeeping and tax, with no manual accounting in between.
This page walks the path from clicking "Pay" at the POS to a balanced journal showing up in the general ledger.
Five-step pipeline
Every step happens inside a single database transaction — if any step fails, all steps roll back. There is no half-applied state.
Step by step
- 1
- 2
Cashier scans/taps items → picks a payment method (Cash, QRIS, card) → clicks Pay.
- 3
- 4
For each item sold, stock is reduced under the configured costing method (FIFO or weighted-average). The module also computes per-line COGS based on the running average cost.
- 5
- 6
The system creates two journals simultaneously:
- 7
Sales journal
- 8
Dr. Cash / QRIS Receivable 25,000 Cr. Revenue 22,523 Cr. Output VAT 2,477 - 9
COGS journal
- 10
Dr. Cost of Goods Sold 8,500 Cr. Merchandise Inventory 8,500 - 11
- 12
- PKP with PPN: Output VAT is recorded as a liability.
- Final UMKM 0.5%: cumulative POS turnover becomes the DPP for end-of-month Final tax.
- 13
- 14
- Cash: lands directly in the Cash account.
- QRIS: lands in QRIS Receivable; reconciled when funds settle to the bank (1–3 business days).
- Card: lands in Payment Gateway Receivable; reconciled when funds settle.
POS UI placeholder
What happens automatically after
- Low stock → Dashboard notification
- Cashier shift → shift close produces a daily summary
- QRIS settlement → auto-match when the bank statement is imported
- Month-end → POS turnover feeds the DPP for Final PPh / PPN
Error handling
| Scenario | System behaviour |
|---|---|
| Negative stock | Transaction rejected (unless Allow Negative Stock is enabled) |
| Unmapped COA account | Journal posting rejected with explicit error |
| PPN computed but tenant non-PKP | Rejected with configuration error |
| Mid-pipeline failure | All steps roll back |
