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 is not posted here — month-end processing does that |
| Sales Return | −1 | +1 | Sale reversed through Sales Return, stock back in |
| Sales Credit Note | −1 | 0 | Sale reversed. No stock movement |
| 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.
Which receivable account the +1 lands on is decided by the customer’s AR/AP type, not by the
document: sell to an entity typed AP_TRADE — a supplier you also sell to — and the invoice debits
the creditor account, netting against what you owe them (see
Who you trade with).
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, and it shows who reserved it. Voiding the order does not release it — none of the jobs a void starts touches a reservation — so whoever voids the order releases its reservations in the Stock Reservation applet as well, or the stock stays held. Holding stock 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 is close to the same. Switching on the credit-limit filter makes the Sales Order and
Sales Invoice screens work out the customer’s available credit (limit, less what they owe this
company, less open delivery-queue amounts) and refuse FINAL when it is used up. It is a check in the
screen, not on the server: a document that arrives any other way, a cash bill and a delivery order are
never measured, and no figure adds up what the customer owes the whole group. The only hard stop on
the server is the blacklist, which rejects a sales invoice, sales order, cash bill or outbound
delivery order with ENTITY_BLACKLISTED. It is not checked on quotations, returns, credit notes or
debit notes. The person who decides credit has three guides of their own:
Deciding on Credit,
Stopping Supply to a Customer and
Chasing Overdue Accounts.
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’s edit screen and the Cancellation tab replaces it. The refusal goes further than the button: while e-Invoice is enabled for the company, a sales return, refund note, invoice, credit note or debit note cannot be voided from any Void button or through the void API, whether or not it has been submitted to LHDN (why). The one route to a void is the e-invoice cancellation’s Void original document, which voids the document once LHDN accepts the cancellation; after the 72-hour window the correction is a credit note (Cancelling and correcting a validated e-invoice).