Display names for the external ids referenced by this route's matcher AND the vendor matcher above — both render together, so both resolve into one map. See matcherReferencesSql.
Composed route display name: ${productName} · ${vendorName}.
Human display name from product.name (NOT NULL).
The vendor's system-owned physics matcher, AND-ed with this route's own
matcher at resolve time. "ALWAYS" when the vendor is unconstrained.
Projected here so admin surfaces can render it without a second query —
the same reason vendorName rides along.
Human display name from product_vendor.name (NOT NULL).
Admin-tier view of a route = identity columns + the routing fields from the current version (matcher + label + per-route fee and limit ceilings)
idis the identity row's external id.Vendor metadata (bank linkage) is NOT surfaced here — it belongs to the vendor domain. Consumers that need it fetch the vendor separately via
ProductVendorAdminService.get({ id: route.vendor }). Keeping the route surface free of vendor identity ensures a vendor edit doesn't silently change the shape of every route.