invoice_numberstring nullable required
canonical_status'not_submitted' | 'submitting' | 'submitted' | 'approved' | 'scheduled' | 'paid' | 'rejected' | 'disputed' | 'on_hold' | 'cancelled' | 'unknown' required
Canonical, MECE invoice status normalized across portals — the dashboard's
at-a-glance state. Derived from the raw portal status (preferred) with the coarse
SubmissionState as fallback (see stuut.core.ap_portal.normalize). Portal facts
only: submit pre-flight results live on the separate submit_gate axis.
state'submitted' | 'approved' | 'rejected' | 'pending' required
Coarse, normalized invoice lifecycle from a sweep/submit.
invoice_statusstring nullable required
routing_statusstring nullable required
customerstring nullable required
referencestring nullable required
amountstring nullable required
currencystring nullable required
invoice_datestring date nullable required
po_referencestring nullable required
reject_reason'po_mismatch' | 'missing_required_field' | 'invalid_tax' | 'duplicate_invoice' | 'unknown_customer' | 'invalid_date' | 'transmission_failed' | 'not_stated' | 'other' | 'po_line_mismatch' | 'receipt_pending' | 'disallowed_charge' | 'invoice_data_error' | 'prerequisite_document' | 'wrong_channel' | 'po_closed' required
Closed reject taxonomy — remediation routes by code, not string-match.
Buckets group rejections by what fixes them: missing fields/attachments into
MISSING_REQUIRED_FIELD; tax errors and missing tax docs into INVALID_TAX.
reject_reason_textstring nullable required
submit_gate'ok' | 'needs_review' | 'blocked' required
Submit pre-flight gate for one invoice — can we submit it right now? Computed
from the field-mapping + PO/order checks (see stuut.core.ap_portal.preview) and
persisted so the dashboard can flag "needs a fix before submit" without re-running a
preview. A separate axis from APPortalInvoiceStatus (what the portal reports
about the invoice).
submit_gate_reasonstring nullable required
payload_idstring nullable required
provider'kehe' | 'taulia' | 'coupa' | 'ariba' | 'meijer' | 'kroger' | 'walgreens' | 'albertsons' | 'target' | 'heb' | 'heb_sidm' | 'c_and_s' | 'walmart' | 'walmart_highradius' | 'cvs' | 'cvs_sap' | 'cvs_image_silo' | 'kroger_supplier_connect' | 'kroger_claimtrax' | 'kroger_verigon' | 'servicetitan' | 'sandbox' | 'generic' required
Supported AP Portal providers.
ap_portal_account_idstring required
invoice_idstring nullable required
synced_atstring date-time required
net_totalstring decimal nullable required
tax_totalstring decimal nullable required
gross_totalstring decimal nullable required
paid_amountstring decimal nullable required
payment_statusstring nullable required
payment_termstring nullable required
payment_datestring date nullable required
due_datestring date nullable required
status_changed_atstring date-time nullable required