Order to Cash
The sales document chain from quotation to customer payment โ each step's status, its stock and GL effect, and how Norma automates it.
Order-to-cash (O2C) is the customer-facing sales process โ how a company turns an enquiry into shipped goods and, finally, into cash in the bank. For most small-and-medium businesses running SAP Business One it is the most important flow in the system, because it is where revenue is earned and where working capital is tied up. It is a chain of documents created in a fixed order, each one recording a distinct business fact and each one carrying a specific effect on inventory and on the general ledger. Understanding the flow means knowing which document comes next and what each one does โ describing the process is always an explanation, never an instruction to create a document.
The document chain
The chain runs from a non-binding offer, through a firm commitment, to the physical shipment, the legal bill, and the receipt of money. Each document normally references the one before it, so quantities and balances stay reconciled and the whole path is traceable.
flowchart TD
OPP([Opportunity]) -->|accepted| SQ[Sales Quotation]
SQ -->|confirmed| SO[Sales Order]
SO -->|goods ship| DEL[Delivery]
SO -->|billing| ARI[A/R Invoice]
DEL -->|triggers| ARI
ARI -->|customer pays| IP[Incoming Payment]
IP -->|matched| BR[Bank Reconciliation]
style OPP fill:#f0f0f0,stroke:#999
style SQ fill:#dbeafe,stroke:#3b82f6
style SO fill:#dbeafe,stroke:#3b82f6
style DEL fill:#dcfce7,stroke:#16a34a
style ARI fill:#fef9c3,stroke:#ca8a04
style IP fill:#fef9c3,stroke:#ca8a04
style BR fill:#f0f0f0,stroke:#999The opportunity and the quotation are optional pre-sales steps. The sales order is the commitment; the delivery and the A/R invoice are where inventory and accounting actually move; the incoming payment closes the loop and feeds bank reconciliation.
What each document does
Each step in the chain touches inventory, accounting, both, or neither. Knowing which is the key to reading the flow correctly.
| Document | Inventory effect | Accounting effect | Required? |
|---|---|---|---|
| Opportunity | None | None | No |
| Sales Quotation | None | None | No |
| Sales Order | May commit stock (reserved, not yet shipped) | None | Depends |
| Delivery | Reduces stock | Posts COGS (if perpetual inventory on) | Yes (if shipping physical goods) |
| A/R Invoice | None (delivery already posted) | Debit Customer / Credit Revenue + Tax | Yes |
| Incoming Payment | None | Debit Bank / Credit Customer | Yes |
| Bank Reconciliation | None | Matches bank statement to payment | Yes (for closing books) |
The single most important rule this table encodes: inventory moves at the delivery, not at the invoice. A company that bills without delivering has recognised revenue while its stock records still show goods it no longer holds.
Document status transitions
Every sales document moves through a small set of states. A quotation, an order, and a delivery all follow the same lifecycle, though an approval stage only appears when an approval procedure is configured for that document, value, or customer.
stateDiagram-v2
[*] --> Draft: user creates
Draft --> PendingApproval: approval rule triggered
PendingApproval --> Open: approved
PendingApproval --> Rejected: rejected
Open --> Closed: fully delivered / invoiced
Open --> Cancelled: user cancels
Draft --> Open: no approval neededAn Open document still has work to do โ quantities remain to be delivered or invoiced. A document becomes Closed only when it is fully consumed by the next document in the chain, or when a user explicitly closes it. A Cancelled document is voided; unlike a deletion, a cancellation is preserved for audit.
Key business rules
Sales Quotation. A non-binding price offer to the customer. It reserves no stock and posts nothing to the ledger. It can be copied to a sales order in one step, and it expires after its validity date. Its purpose is to let a customer see a price before anyone commits.
Sales Order. The commitment to deliver. Depending on configuration it may commit (reserve) stock, which then shows as “committed” on stock reports even though the goods have not physically moved. A sales order cannot be deleted once a delivery is based on it โ it must be cancelled. It can be delivered in parts, so one order may spawn several deliveries.
Delivery. The physical shipment. It reduces inventory immediately and, when perpetual inventory is active, posts the cost of goods sold: debit Cost of Goods Sold, credit Inventory. The warehouse on each delivery line decides which stock location is drawn down. A delivery can consolidate lines from one or several sales orders.
A/R Invoice. The billing document โ the legal claim on the customer. It posts debit Accounts Receivable, credit Revenue, credit Tax Payable. It is normally based on a delivery (so it inherits already-shipped quantities), but for services it can be raised directly from a sales order with no delivery at all. An A/R Credit Memo reverses an invoice, returning stock and unwinding the receivable.
Incoming Payment. Records the customer’s money. It posts debit Bank/Cash, credit Accounts Receivable, and can be applied across one or many open invoices. A partial payment leaves the invoice open for the remaining balance.
The journal entries
Perpetual inventory means two of these steps post to the ledger automatically. A concrete example โ a โฌ1,000 sale of goods that cost โฌ600, at 17% VAT โ makes the pattern clear.
When: Delivery posted (perpetual inventory)
DR Cost of Goods Sold 600
CR Inventory 600When: A/R Invoice posted for โฌ1,000 + 17% VAT
DR Accounts Receivable (customer) 1,170
CR Revenue 1,000
CR VAT Payable 170When: Incoming Payment of โฌ1,170 received
DR Bank Account 1,170
CR Accounts Receivable (customer) 1,170Read top to bottom, the three entries show inventory leaving the balance sheet as an expense, a receivable being created and revenue earned, and finally the receivable being converted to cash. Nothing is posted twice: the invoice does not touch inventory because the delivery already did.
Service invoice flow (no delivery)
Companies that bill time, subscriptions, or other non-stock services have no goods to ship, so the delivery step disappears entirely.
Sales Order (optional)
โ A/R Invoice directly (no Delivery needed)
โ Incoming PaymentThe A/R invoice is raised straight from the order (or from nothing), inventory is untouched, and only the revenue-and-receivable entry posts. On the invoice this is the difference between an Items document and a Service document.
Common mistakes in this flow
These are the errors that most often corrupt the sales records. Each one breaks the reconciliation the chain is designed to protect.
| Mistake | Consequence |
|---|---|
| Creating an A/R Invoice without a Delivery | Inventory not reduced; stock count wrong |
| Wrong warehouse on the Delivery | Stock reduced from the wrong location |
| Posting an Incoming Payment to the wrong G/L account | Bank reconciliation fails |
| Re-keying Quotation โ Order โ Delivery by hand | Data inconsistency, no traceability |
| Issuing an A/R Invoice before goods ship | Revenue recognised too early |
How Norma automates the flow
Norma treats this flow as two distinct kinds of work โ reading it and advancing it โ and holds them to different safety bars.
Reading the flow. Norma answers questions about the sales pipeline by calling
read-only connector tools against the Service Layer. list_sales_orders,
get_sales_order, list_deliveries, get_delivery, list_ar_invoices,
get_ar_invoice, and get_order_backlog retrieve the documents and their status;
get_order_to_cash_cycle measures how long the chain takes end to end;
get_delivery_summary, get_revenue_monthly, get_revenue_quarterly,
get_revenue_annual, and get_gross_margin roll the documents up into the numbers
finance actually asks for. Because these tools only read, they run without a review
gate โ an answer can never change SAP.
Advancing the flow. Creating a document is a write, and every write is gated.
Norma drafts the payload for a step โ create_quotation, create_sales_order,
create_delivery, create_invoice, create_ar_downpayment, or a corrective
create_return / create_credit_memo โ and posts it to the connector, which
targets the Service Layer create path /b1s/v1/<Docs> (for example
/b1s/v1/Orders or /b1s/v1/DeliveryNotes). No such write reaches SAP until a
human reviews and approves the drafted document. When Norma chains steps, it sets
the base-document reference on each new document (BaseType / BaseEntry /
BaseLine) so the order-to-delivery-to-invoice links are preserved exactly as a
manual clerk copying documents forward would create them โ keeping the flow
reconciled and fully traceable.