Receive, match, bill
The order is placed and sitting at "To Receive and Invoice". Two things now happen on their own schedules: the goods show up, and the supplier's bill shows up. They rarely arrive together, and Carbon is built around that fact: receiving and invoicing are separate posted steps that reconcile against the order, not against each other directly.
The line keeps score
A line tracks purchaseQuantity against two independent counters: quantityReceived and quantityInvoiced. The amounts still owed, quantityToReceive and quantityToInvoice, are computed for you. A line carries two flags, receivedComplete and invoicedComplete, and only when both are true is that line done.
Those two flags are exactly what the order's status rolls up. Receive everything and the order drops to "To Invoice"; bill everything and it drops to "To Receive"; once a line is both received and invoiced, it's "Completed". Receiving and billing move the same order along two separate axes.
Receive the goods
Create a receipt from the order and Carbon pre-fills it from the outstanding lines, linking each receipt line back to its purchase order line. The receipt opens at "Draft". And like a shipment, creating it changes nothing on hand.
is the event. Post the receipt and stock comes in through the item ledger as a Purchase Receipt, the order line's quantityReceived rises, receivedComplete flips once the full quantity is in, and the order advances. The receipt moves to "Posted".
Stock moves whether or not accounting is on.
Posting a receipt always updates inventory. The accounting entries are written only when accounting is enabled for the company: debit inventory or , credit the clearing account. Inventory and the general ledger advance on different switches.
Inspected parts land on hold, not on the shelf.
Receive an item flagged for inspection and its come in "On Hold", with an inbound inspection opened at "Pending" — received, but quarantined until quality clears them for use.
Buy by the box, stock by the each
Suppliers rarely sell in your stock unit. You might buy fasteners by the thousand-count box but stock and issue them as eaches. Every purchase order line carries a between the two units, so the price and quantity you agree with the supplier stay in their terms while inventory moves in yours.
Posting the receipt does the translation: the quantity the supplier shipped is converted through the factor before it lands in stock, while the line's received count stays in the purchase unit. You reconcile against the supplier in the unit you ordered, and the floor pulls stock in the unit it builds with. Neither side has to do the arithmetic in its head.
The supplier bill
When the invoice arrives, draw a purchase invoice from the order. Carbon keeps the lines that still have something to bill and opens the invoice at "Draft". Each invoice line links back to its purchase order line. And that is the only structural link in the chain.
There is, deliberately, no direct link from an invoice to a receipt. A receipt isn't even required before you bill: a direct invoice can create its own receipt as it posts. Carbon reconciles on the shared order line, not on a receipt-to-invoice match.
The match is on the order line, not a receipt record.
Order, receipt, and bill are reconciled through the quantities on their shared purchase order line. Posting the invoice clears the GR/IR accrual the receipt booked, at the receipt's cost, and books any difference between order price and bill to a purchase price-variance account.
Match and post
Posting the purchase invoice writes the payable side of the ledger, all gated on accounting being enabled: credit Accounts Payable, debit inventory or WIP, reverse the GR/IR clearing the receipt set up, and send any price difference to variance. It bumps each order line's quantityInvoiced, flips invoicedComplete, and recomputes the order's status. The invoice itself lands on "Open".
Note what posting does not do: it never marks the invoice "Paid". As on the sales side, payment in Carbon is field-based, a status and a paid date on the invoice, not a separate transaction. Voiding a posted invoice writes reversing entries rather than deleting it.
A posted bill is 'Open', awaiting payment.
Posting settles the accounting against the order and receipt; it doesn't disburse cash. The invoice waits at "Open" until it's marked paid, the deliberate act that records the outflow.
That's RFQ to bill end to end: one part shopped to several suppliers, ordered from the best, received into stock, and billed against the very same order line — the buy-side mirror of quote to cash, reconciled on the order, not on paperwork.