product_quote row projected for admin consumers. Internal numeric ids
are dropped in favour of the joined external ids. The route's external_id
is exposed as routeId (joined through product_route_version → product_route)
— the audit row pins to the version row, but admins reference routes by
their identity-row external_id. productName comes from the joined
product.external_id since the row's productId is an internal FK. The
four *VersionId columns stay numeric — they're internal version-row PKs
that the admin dashboard renders as deep links into the version-history
table; admin-only surface, not part of any public API.
product_quoterow projected for admin consumers. Internal numeric ids are dropped in favour of the joined external ids. The route's external_id is exposed asrouteId(joined throughproduct_route_version → product_route) — the audit row pins to the version row, but admins reference routes by their identity-row external_id.productNamecomes from the joinedproduct.external_idsince the row'sproductIdis an internal FK. The four*VersionIdcolumns stay numeric — they're internal version-row PKs that the admin dashboard renders as deep links into the version-history table; admin-only surface, not part of any public API.