entity

Parameter Value Group

A reusable ordered set of ParameterValues applied as a template. Owned by bim-ontology; product-marketplace reads it. No lifecycle, no events, no authoring endpoint yet.

Entity(Aggregate Root)Status: Implemented in api-v1Aggregate Root

Purpose

A parameter value group is a reusable ordered set of ParameterValues applied as a template. Rather than restating the same twelve finish options on every product model, a steward authors the set once and applies the group.

The templates collection is what makes it a template rather than a plain list: each entry pairs a member value with the ParameterKey it stands in for, so applying the group answers “which value for which key” instead of just “which values”.

ParameterKey.parameterValueGroupIds holds the bindings from the key side.

Airtable tables parameter_value_groups and parameter_value_group_items.

Ownership boundary with Product Marketplace

Owned here, alongside ParameterValue. The aggregate lives in bim-ontology/core/domain/parameter-value-group/; there is no product-marketplace equivalent. Product Marketplace’s CatalogReadUseCases.ts imports ParameterValueGroup from @modules/bim-ontology and exposes a read route over it.

No lifecycle

No lifecycle, no mutators, and no domain events. create and rehydrate are the only entry points and both run the same validation; every field is readonly on the constructed instance.

Invariants

  • name is required and non-empty after trimming (ParameterValueGroupDomainError).
  • Every template’s value must belong to its group. templates is checked against the parameterValueIds membership set; a template naming a non-member is refused.

Two gaps are worth naming because they are load-bearing if authoring is ever added. Nothing enforces uniqueness of parameterValueIds, so a duplicate member is accepted. And the Airtable read adapter always rehydrates with templates: [] — the parameter_value_group_items rows are not mapped into the aggregate today, so the template invariant is vacuously satisfied on every read from Airtable. parameter_value_group_items does carry displayOrder, valueUnits, description, and model columns that the aggregate has no representation for.

Domain Events

None.

OpenAPI Operations

There is no authoring endpoint. The only surface is the read, over the product-marketplace internal catalog-read routes:

Groups are authored directly in Airtable today, and MUTATION_ROUTING.md does not list a routed mutation for either table.

ADRs

The platform series lives in docs/adr/07_Architectural_Decision_Records.md. The per-file series is separate and the numbers collide — see docs/adr/README.md.

ADRDecision
Platform ADR-0048domain_id is the public identifier; never a rec… id in a payload
Per-file ADR-0006Canonical parameter keys and values with per-level junctions
Per-file ADR-0008Where a configurable product’s option universe comes from
Per-file ADR-0009Parameter table base placement and cross-base sync