Resolved bankId — joined through product_route_version → vendor → bank. Reflects what the resolver actually picked. null when the
route's vendor is non-bank (e.g. cfx).
The pinned matcher criteria the resolver evaluated against.
Reconstructed fee template — per-receiver line items.
The caller's bankId hint, if any (narrows route selection). Audit
row column; distinct from the resolved bankId above.
Earliest settle-by date. null on pre-migration rows (column was
added 2026-05-11); service rebuild uses the current product config
to recompute as a fallback.
Snapshot of providerFeeVisible at quote time.
Concrete amounts. null when the original input was amount-less.
Numeric FKs to the pinned version rows, exposed so callers that need
deep version-row context (admin diff views, the quote() replay
rebuild) can resolve them without re-querying the audit row.
Limit-violation breakdown. Non-null iff outcome === 'LIMIT_EXCEEDED'.
Customer-scoped projection of a
product_quoteaudit row. Mirrors the fields needed by both audit-trail readers (admin dashboards, customer receipts) and thequote()idempotency-replay path: every field needed to rebuild the original quote'sQuoteOutputfrom the row alone is here.Internal numeric ids and FKs are dropped in favour of external IDs.
feesis the per-receiver fee snapshot reconstructed from the tier- tagged columns (cfx_*,customer_*,provider_*).inputAmountis the discriminated union the caller originally passed (or null for fee-only quotes).