Core Concepts
Four ideas explain almost everything surprising about this module. Learn them once here and the applet pages stop being a list of screens.
1. FINAL is the only moment that matters
Every sales document has a posting status. DRAFT means nothing has happened: the document is editable, the ledger has not heard of it, and no stock has moved. FINAL is the event. In a single call BigLedger generates the running number, posts the journal, queues the stock movement, fires the webhook and queues the e-Invoice submission. VOID reverses whatever FINAL did and records a reason.
Two consequences people meet the hard way:
- Nothing stands between a person and FINAL except having the applet installed. There is no sign-off step (see §4).
- The work FINAL starts runs in background processors, not inside the button press. On a busy day a stock line or a journal can appear a moment after the document does. It is not instant, and a page that says “instantly” is wrong.
2. Most sales documents post nothing
Two numbers on each document type decide its effect: the amount signum (does money move, and in which direction) and the quantity signum (does stock move, and in which direction). They are carried on every line the document writes. A zero means nothing happens.
| Document | Amount | Quantity | Effect at FINAL |
|---|---|---|---|
| Sales Inquiry | 0 | 0 | Record only |
| Sales Quotation | 0 | 0 | Record only — and it does not reduce availability |
| Sales Order | 0 | 0 | No ledger, no stock ledger. Reduces available stock (§3) |
| Sales Invoice | +1 | −1 | Receivable raised, stock out, cost of sales posted |
| Sales Return | −1 | +1 | Sale reversed through Sales Return, stock back in |
| Sales Credit Note | −1 | 0 | Sale reversed. No stock movement, no cost reversal |
| Sales Debit Note | +1 | 0 | Extra charge, no stock movement |
| Sales Refund Note | −1 | +1 | Invoice entries reversed, stock back in |
| Sales GIN | 0 | 0 | Record only — see the warning below |
The retail cash bill — the Point of Sale module’s one document — is +1 / −1 like the invoice, and the reports and commission runs in this module count it alongside invoices.
3. Stock balance and stock availability are different numbers
Balance is what the stock ledger says you physically hold. It changes only when a document with a non-zero quantity signum reaches FINAL.
Availability is what you can still promise. It is the balance, less the quantity on open documents that will consume it, less anything explicitly reserved. Open FINAL sales orders and sales invoices are what the availability service subtracts; quotations are not in the calculation at all.
So “available is lower than balance” is normal and usually means open sales orders. Close or void the lines that will never ship.
Reservation is opt-in, and it is a separate applet
There is no hard and soft allocation. A sales order line may hold a reservation over specific quantities, serials or bins; you see it on the Reserved Stock tab, it shows who reserved it, and voiding the order releases it. That is an action somebody takes, not a state a FINAL order enters.
The reservation record has its own statuses — TMP, DRAFT, RESERVED, RELEASED — documented on the Stock Reservation applet page, along with a known defect in the bin-pinned path. Treat a reservation as a note to your colleagues, not as a lock the system enforces.
4. Nothing here is approved, and the credit limit does not stop anyone
BigLedger’s document-approval engine exists, but it covers three document types only — Purchase Order, Purchase Requisition and Stock Requisition — it is off until a tenant configures it, and even when configured it causes FINAL rather than gating it. No sales document consults it. Treat any diagram showing a sales order “awaiting approval” as wrong. A discount on a line is released by a permission, not by a routed request.
Credit limit behaves the same way. Switching on the credit-limit filter shows the customer’s
available credit — limit, less receivable balance, less open amounts. It does not block FINAL.
The only hard stop on a customer is the blacklist, which rejects a sales invoice, sales order
or outbound delivery order with ENTITY_BLACKLISTED. It is not checked on quotations, returns,
credit notes or debit notes.
5. How a sale is reversed — pick the right document
flowchart TD
Q{"What went wrong?"}
Q -->|"The whole invoice was a mistake<br/>and nothing has moved yet"| V["VOID the invoice<br/>(reverses everything)"]
Q -->|"Goods are coming back"| R["Sales Return<br/>stock in, sale reversed"]
Q -->|"Price or charge was wrong,<br/>no goods move"| CN["Sales Credit Note<br/>no stock effect"]
Q -->|"We undercharged"| DN["Sales Debit Note"]
Q -->|"Money back and goods back"| RN["Sales Refund Note"]
Two traps worth knowing before you need them:
- A credit note does not put stock back. Its quantity signum is 0. If the goods returned, you need a Sales Return or a Refund Note as well, or your shelf and your ledger will disagree.
- When e-Invoice is switched on, the VOID button disappears from a Sales Refund Note and the Cancellation tab replaces it; and a return that has already been submitted to LHDN cannot be voided until the e-Invoice side is dealt with.