Skip to content
User Manual · Chapter 4 — Procurement

Received but not invoiced — the GRNI story

Goods and invoices travel at different speeds. Without GRNI, the gap between them is a quiet lie in the books: the warehouse is fuller, the ledger knows nothing, and the month the invoice finally lands in takes a cost that belongs to the month the goods arrived. With the GRNI switch on (0.6), the receipt itself closes the gap. Posting a goods receipt records the stock and a matching liability — we hold it, we owe for it, the invoice has not arrived — in a dedicated received-not-invoiced account. The moment goods land, the books tell the truth about owing for them.

When the purchase invoice comes, it is matched to the receipts it clears: the explicit link first, where the invoice names its receipts — the normal [Standard] path — and any remainder oldest-first, within matching of the same currency only. The liability the receipt recorded is cleared by exactly what the invoice charges. If the invoice's price differs from the receipt's, the difference posts openly to a price-difference account; if the exchange rate moved between receipt and invoice, that difference posts openly to an exchange-difference account. Nothing is absorbed silently into stock or margin.

The working surface is the Received Not Invoiced (GRNI Aging) report (§4.9): every receipt still waiting for its invoice, aged, totalling the liability itself. A GRNI balance that only grows is a process telling you something — invoices going astray, suppliers billing late, receipts nobody invoices against — and this report is where you work it down.

Snapshot: portal-v0-2026-11-10