## TL;DR

Partial fulfillment is normal: track PO lines by remaining open quantity, match each partial invoice against cumulative receipts, and close PO lines only when fully received and billed. Keep a running ledger per PO line so the fifth partial invoice still matches correctly.

## Steps

1. Maintain open quantity per PO line: ordered minus received.
   Expected: A live ledger.
2. Match each partial invoice against cumulative receipts for its lines.
   Expected: Correct partial matching.
3. Update open quantities after each match.
   Expected: The ledger stays current.
4. Close PO lines when received and billed quantities agree.
   Expected: Clean PO hygiene.
5. Flag invoices that exceed remaining open quantity.
   Expected: Overbilling caught on partials too.

## When to use

- Split deliveries
- Progress billing
- Blanket order releases

## When not to use

- Single complete shipments
- Service contracts
- Non-PO invoices

## Compatibility

ERP-agnostic.

## Variant phrasings

### partial invoice PO matching

### split shipment invoice

### progress billing AP

## Root cause

POs describe a total commitment fulfilled over time. Matching must be cumulative and line-level, or later partials match against already-consumed quantities.

## Edge cases

- Final partials often include adjustments; expect variance on the last one
- Substitutions across lines need buyer approval before matching
- Retainage on progress billing is a separate hold, not a mismatch

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_f4Eltyn6SQb79yS7XH7Ofg
