Expected shape
{
"pos": [{
"po":"8138", "company":"Rikkel Corp US", "vendor":"Xiamen Yamat",
"goods":"6oz White Paper Cups", "units":216000, "value":52400,
"ordered_date":"2026-06-02",
"requested_on":"2026-07-12", "requested_on_original":"2026-07-05",
"requested_revisions":1,
"cargo_ready_date":"2026-07-16",
"booked_date":"2026-07-21", "booking_ref":"AF-2026-4471",
"expected_delivery":"2026-09-01", "expected_delivery_original":"2026-08-24",
"expected_revisions":1,
"received_date":null, "received_qty":0,
"container":"FFAU1381877", "combined":false,
"last_updated":"2026-07-24"
}],
"containers": [{
"name":"FFAU1381877", "vendor":"Xiamen Yamat", "pos":["8116","8117"],
"shipped_on":"2026-07-17", "record_created":"2026-07-16",
"etd":null, "atd":null, "eta":"2026-08-04", "ata":null,
"exited_port":null, "empty_due":null, "empty_returned":null,
"lfd":null, "telex_release":false, "cbm":61.53
}]
}
One PO sits on exactly one container; a container carries many POs.
A PO referencing two containers is flagged as a data error, not merged.
booked_date is the Always Forwarding booking, before any container number.
Two penalty clocks, tracked separately:
lfd demurrage — box at the terminal, not yet collected
empty_due detention — box with us, empty not yet returned
Stage is derived, never read from PO Status.
Original promise dates come from the change log's first value.