Model Parameter
L2 junction binding a canonical ParameterKey to a ProductModel; MTO allowable values and ranges live here.
Purpose
Model parameters are the level-2 junction and the MTO source of truth for allowable values and ranges (ADR-0007, ADR-0008). Made-to-order products store their option universe here; stock/predefined-variant products derive displayed options from variant_parameters instead of duplicating values on the model.
Ranges use linked quantity_values with min/max roles rather than range columns on the junction.
This junction belongs to product-marketplace. The key and values it references do not — ParameterKey and ParameterValue are owned by BIM Ontology.
ModelParameterScope is not ParameterUsage
scopes uses ModelParameterScope — variant_option, spec, pricing, bim, manufacturing — which is a different vocabulary from the bim-ontology ParameterUsage set (variant_option, product_spec, bim_parameter, mfg_takeoff, qto_takeoff). Only variant_option is spelled the same in both. The two overlap conceptually and do not correspond term for term; do not translate one into the other.
scopes (plural) is the multi-select source of truth. The singular scope input is @deprecated; rehydrate prefers scopes when non-empty, falls back to wrapping scope in a one-element array, and otherwise leaves the set empty.
Invariants
- Each junction pairs exactly one product model with one canonical parameter key.
- Allowed values reference canonical
ParameterValuerecords. - Stock scrape persistence does not write
model_parameters(deferred MTO migration in PARAM-S7).
The aggregate itself validates nothing today: ModelParameter.rehydrate is the only entry point and it applies defaults rather than checks. The invariants above are enforced by the application layer and by the Airtable schema, not by the domain object.
Related Ports
ForManagingProductModelsForCreatingScrapedParameterGraph
OpenAPI Operations
No dedicated REST endpoint today; populated during MTO migration (PARAM-S7) and model authoring workflows.