Northstar training policy v1 — synthetic, fixed for every fixture in this pack.
Scope: create a review packet, never approve or pay an invoice.
P1: Invoice tenant must equal the trusted case tenant. A mismatch is exception/tenant_mismatch.
P2: Repeated field labels are ambiguous: exception/conflicting_fields.
P3: Total must be a nonnegative finite amount with no more than two decimal places in this GBP/USD fixture. An absent or invalid value gives needs_information/missing_or_invalid_total. Missing Currency or PO gives needs_information/missing_currency or missing_po_id. Collect all missing-field reasons.
P4: Look up the exact PO ID within the trusted tenant. No match gives needs_information/missing_po; multiple matches give exception/duplicate_po.
P5: A missing or invalid order limit gives needs_information/invalid_po_limit.
P6: Invoice and order currency must match exactly; otherwise exception/currency_mismatch. No currency conversion.
P7: Total above order limit gives exception/over_limit. Equality or a lower total gives ready_for_review/within_limit.
Precedence: evaluate P1 to P7 in order; stop at the first applicable result, except collect missing-field reasons together under P3.
Evidence: always cite invoice and policy; cite purchase-orders.csv if a matching order row was found. An empty search is a logged lookup result, not evidence that an order can never exist.
All invoices in this exercise use this fixed policy. Effective-date selection is an extension and must be evaluated separately.
