Procurement

Purchase orders in any currency, goods receipt against the order, supplier invoices with three-way matching, supplier payments, returns, and debit notes. Landed cost rolls up with the FX rate fixed at receipt.

In this module
  • Multi-currency purchase orders
  • Goods receipt against the order
  • Three-way invoice match
  • Landed cost with FX fixed at receipt

Procurement is the other half of Inventory. A purchase order commits to a supplier, a goods receipt turns that commitment into stock, and a supplier invoice turns it into a payable — each step referencing the one before it.

What is in it

  • Purchase orders in USD, AFN, PKR, INR, or any currency you configure
  • Goods receipt against the order, with the receiving warehouse and bin on every line
  • Three-way match: order, receipt, invoice — a mismatch blocks the payable
  • Supplier payments, supplier returns, and debit notes

The exchange rate is snapshotted when the goods are received and never recomputed. A rate that moves next week does not silently restate last week purchase cost.

Module shape

How Procurement fits the rest of the system

Bounded

The module owns its tables and its service interface. Other modules reach in only through services and async events — never SQL.

Test-vector verified

Every domain rule has two implementations — Dart and Java — and a single shared test vector. CI fails on any divergence.

Audit-logged

Every command writes an entry to the append-only audit log with a chain hash. The daily verifier proves the log has not been tampered with.