# Vercy AI instruction - YAML 1.2 (JSON-compatible) { "vercy": "1.0-draft", "publication": { "status": "published", "adjudicationStatus": "reviewable-draft", "publishableCanonical": false, "generatedAt": "2026-09-03T06:25:10Z", "synthesisSha256": "475fb02226ca16d27063e05fa7978fad00aea5f1358e511f90f162302306ee16", "providerMode": "single-provider-waiver", "providers": [ "Claude" ], "waivedProviders": [ "Grok" ] }, "metaModel": { "id": "WM-XCT-025", "registryId": "vr.wm-xct-025", "name": "Observable Result Fields", "version": "0.3.0-research.1", "previousVersions": [], "entryKind": "mixin", "family": "World Models", "category": "Cross-cutting context", "industry": [ "Cross-industry" ], "domain": [ "XCT.OBS" ], "tags": [ "observable", "result", "fields", "xct.obs" ], "status": "published" }, "canonicalUrl": "https://ver.cy/models/wm-xct-025-observable-result-fields/", "sourceUrl": "https://github.com/ver-cy/world-models/tree/feat/mega-model-registry/research/runs/wm-xct-025", "model": { "registry_id": "vr.wm-xct-025", "model_id": "WM-XCT-025", "name": "Observable Result Fields", "entry_kind": "mixin", "purpose": "Provide a reusable, format-neutral field group for expressing an observation or measurement result — measurand binding, value, unit and quantity kind, method reference, uncertainty, limits, time anchoring, state, provenance and disclosure class — so that any host record can carry an interpretable, comparable result without forking metrology semantics.", "scope_statement": "This mixin defines the fields that make a reported value interpretable and comparable, and the rules that govern them. It attaches to a host record (registered parent WM-MAT-008 and any other adopting host) and carries references into vocabularies, procedures, devices, samples, access policy and conformity-decision models without reproducing their lifecycles. Storage and interface (JSON, RDF, Markdown, Git, MCP, MongoDB) are projections of these semantics, never their definition.", "in_scope": [ "Measurand and observed-property binding, including specified conditions and property class (quantity, ordinal, nominal)", "Value representation: scalar, coded, ordinal, boolean, range, ratio, component/tuple and reference to an external series", "Unit code and code-system binding, quantity kind, dimensional commensurability, canonical expression alongside the as-reported value", "Numeric precision, declared resolution and rounding rules", "Reference to the procedure or method and the subject-specific parameters and influence quantities that qualify the value", "Uncertainty statement: components, evaluation type, distribution, combined standard uncertainty, coverage factor and coverage probability", "Detection and quantitation limits, comparator operators and censored values", "Phenomenon (event) time, result time and ingestion time, validity window and aggregation period", "Result status, supersession and amendment linkage; coded absence of a value", "Derivation and assertion lineage, evidence references and digests", "Sensitivity classification, redaction signalling and retention class recorded as references" ], "out_of_scope": [ "The observation act, sampling activity and their scheduling (owned by an observation/event model)", "Sensor, device and platform registration, calibration execution and certificate issuance", "Minting, deprecation or maintenance of unit codes, quantity kinds and conversion factor tables", "Authoring, validation studies and approval lifecycle of procedures and methods", "Feature-of-interest, sample and specimen definition and custody", "Numerical propagation of distributions through a measurement model (performed by the producing measurement system)", "Conformity assessment, acceptance decisions, guard banding and pass/fail rules", "Access evaluation, enforcement, audit-trail storage and physical disposition execution", "Time-series, coverage and statistical dataset storage, indexing and compression", "Laboratory accreditation, quality-management and competence claims", "Alerting, clinical or operational decision support acting on a result" ], "boundary_notes": [ { "neighbor": "Observation act / event model (sosa:Observation, OMS Observation)", "distinction": "The act carries exactly one result; this mixin defines the result payload's fields and their interpretation rules. It does not own the act, its sampling features, its stimulus or its scheduling.", "source_refs": [ "SRC-001", "SRC-002" ] }, { "neighbor": "Sensor, device and calibration record model", "distinction": "This mixin carries an observer/device reference and a calibration record reference plus a validity-at-observation check. Device lifecycle, calibration execution and certificate issuance stay with that model.", "source_refs": [ "SRC-002", "SRC-009" ] }, { "neighbor": "Unit and quantity-kind vocabulary registry (UCUM, QUDT, UN/CEFACT Rec 20)", "distinction": "This mixin pins a code system version and cites codes, quantity kinds and conversion factors by reference. Code minting, deprecation and factor maintenance are the registry's.", "source_refs": [ "SRC-005", "SRC-008", "SRC-011" ] }, { "neighbor": "Procedure and method catalogue", "distinction": "This mixin carries a method identifier, version and subject-specific parameter overrides. Method authoring, validation studies and approval remain in the catalogue.", "source_refs": [ "SRC-001", "SRC-006" ] }, { "neighbor": "Conformity assessment / decision-rule model", "distinction": "Interpretation flags and a reference to an applied reference interval are carried here as context; acceptance, pass/fail and guard-band decisions and their records belong to the decision model.", "source_refs": [ "SRC-012", "SRC-006" ] }, { "neighbor": "Feature-of-interest, sample and specimen model", "distinction": "Referenced only, to anchor what the value is about; sample identity, hierarchy and custody are not modelled here.", "source_refs": [ "SRC-001" ] }, { "neighbor": "Access policy, audit and retention model of the adopting Dimension", "distinction": "As FHIR separates Observation from its security and audit resources, this mixin records a sensitivity class, a policy reference and a retention class only; evaluation, enforcement, audit-trail storage and disposition execution are external.", "source_refs": [ "SRC-006" ] }, { "neighbor": "Time-series / statistical dataset model (SensorThings Datastream, FHIR SampledData)", "distinction": "When the result is a large series the mixin holds a reference plus the fields needed to interpret it; series storage, windowing and aggregation infrastructure are external.", "source_refs": [ "SRC-009", "SRC-007" ] } ] }, "sources": [ { "id": "SRC-001", "title": "OGC Abstract Specification Topic 20: Observations, Measurements and Samples (OGC 20-082r4) / ISO 19156:2023", "organization": "Open Geospatial Consortium and ISO/TC 211", "url": "https://www.ogc.org/standards/om/", "version_or_date": "Version 3.0; ISO 19156:2023", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Normative conceptual schema in which an observation applies a procedure to estimate a property of a feature of interest and produces a result whose type and scale must be consistent with the observed property." }, { "id": "SRC-002", "title": "Semantic Sensor Network Ontology (SSN/SOSA)", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/vocab-ssn/", "version_or_date": "W3C Recommendation 19 October 2017 (link errors corrected 08 December 2017)", "source_type": "ontology", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Defines Observation, Result, hasResult, hasSimpleResult, observedProperty, madeBySensor, usedProcedure, resultTime and phenomenonTime, and flags unit-of-measure handling as an open modelling question." }, { "id": "SRC-003", "title": "JCGM 100:2008 Evaluation of measurement data — Guide to the expression of uncertainty in measurement (GUM 1995 with minor corrections)", "organization": "Joint Committee for Guides in Metrology / BIPM", "url": "https://www.bipm.org/documents/20126/2071204/JCGM_100_2008_E.pdf", "version_or_date": "JCGM 100:2008 (E), September 2008", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Source for standard, combined standard and expanded uncertainty, Type A and Type B evaluation, coverage factor k and level of confidence, and the clause 7 requirements for reporting a measurement result." }, { "id": "SRC-004", "title": "JCGM 200:2012 International Vocabulary of Metrology — Basic and general concepts and associated terms (VIM), clause 2.9 measurement result", "organization": "Joint Committee for Guides in Metrology / BIPM", "url": "https://jcgm.bipm.org/vim/en/2.9.html", "version_or_date": "3rd edition, 2012 (online VIM browser)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Defines a measurement result as a set of quantity values attributed to a measurand together with any other available relevant information, and anchors measured quantity value (2.10), measurement uncertainty (2.26), accuracy (2.13), trueness (2.14) and precision (2.15)." }, { "id": "SRC-005", "title": "The Unified Code for Units of Measure (UCUM)", "organization": "Regenstrief Institute, Inc. and the UCUM Organization", "url": "https://ucum.org/ucum", "version_or_date": "Version 2.2, released 17 June 2024", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Machine-processable unit code system with precisely defined semantics, an open (non-enumerable) code space and a requirement that semantically equivalent expressions be detectable — the basis for the unit code and code-system fields." }, { "id": "SRC-006", "title": "HL7 FHIR Release 5 — Observation resource", "organization": "Health Level Seven International", "url": "https://hl7.org/fhir/observation.html", "version_or_date": "FHIR v5.0.0 (R5); Observation normative since v4.0.0", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Cross-domain precedent for value[x] polymorphism, dataAbsentReason, interpretation, referenceRange, method, device, effective[x], issued, component and a status lifecycle including amended and entered-in-error." }, { "id": "SRC-007", "title": "HL7 FHIR Release 5 — Data Types (Quantity, Range, Ratio, SampledData)", "organization": "Health Level Seven International", "url": "https://www.hl7.org/fhir/datatypes.html", "version_or_date": "FHIR v5.0.0 (R5)", "source_type": "schema", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Defines Quantity as value + comparator + human-readable unit + system + code, and states that decimal precision is significant (0.010 differs from 0.01) and must be preserved — the basis for the comparator and precision rules." }, { "id": "SRC-008", "title": "QUDT — Quantities, Units, Dimensions and Data Types Ontologies", "organization": "QUDT.org", "url": "https://www.qudt.org/", "version_or_date": "Release 2.1 (site content generated 16 December 2025)", "source_type": "ontology", "primary_source": true, "authority_tier": 3, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Supplies the quantity triad (quantity kind, unit, quantity value), dimension vectors and conversion multiplier/offset used for commensurability checking and canonical expression." }, { "id": "SRC-009", "title": "OGC SensorThings API Part 1: Sensing Version 1.1 (OGC 18-088)", "organization": "Open Geospatial Consortium", "url": "https://docs.ogc.org/is/18-088/18-088.html", "version_or_date": "Version 1.1, approved 26 November 2020", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Implementation-level evidence for phenomenonTime, result, resultTime, resultQuality, validTime and parameters on an Observation, and for unitOfMeasurement (name, symbol, definition) bound at Datastream rather than per observation." }, { "id": "SRC-010", "title": "PROV-O: The PROV Ontology", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/prov-o/", "version_or_date": "W3C Recommendation 30 April 2013", "source_type": "ontology", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Entity/Activity/Agent with wasGeneratedBy, wasDerivedFrom, wasAttributedTo, wasAssociatedWith, used and generatedAtTime — the alignment target for derivation and assertion lineage fields." }, { "id": "SRC-011", "title": "The International System of Units (SI Brochure)", "organization": "Bureau International des Poids et Mesures (BIPM)", "url": "https://www.bipm.org/en/publications/si-brochure", "version_or_date": "9th edition, 2019 (with updates)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Authoritative basis for expressing a quantity value as a number times a unit and for unit symbol and numerical value conventions underpinning the value/unit split." }, { "id": "SRC-012", "title": "JCGM Publications: Guides in Metrology (JCGM 100, 101, 102, GUM-1:2023, GUM-6, JCGM 106:2012, JCGM 200)", "organization": "Joint Committee for Guides in Metrology / BIPM", "url": "https://www.bipm.org/en/committees/jc/jcgm/publications", "version_or_date": "Publication index accessed 3 September 2026; JCGM 106:2012", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Confirms the current JCGM guide set and that the role of measurement uncertainty in conformity assessment is a separate guide (JCGM 106:2012), supporting the exclusion of acceptance decisions from this mixin." }, { "id": "SRC-013", "title": "Procedures for Detection and Quantitation Documents (Definition and Procedure for the Determination of the Method Detection Limit, Revision 2, EPA 821-R-16-006)", "organization": "United States Environmental Protection Agency", "url": "https://www.epa.gov/cwa-methods/procedures-detection-and-quantitation-documents", "version_or_date": "MDL Revision 2, December 2016 (40 CFR part 136 appendix B)", "source_type": "public-authority", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-09-03T09:20:00Z", "relevance": "Regulatory precedent that a detection limit is a determined, method-specific quantity that must accompany reported values — grounding the detection/quantitation limit and censoring fields; explicitly US Clean Water Act scoped." } ], "structure": { "bundles": [ { "id": "result-semantics", "name": "Result Semantics and Host Binding", "description": "What the reported value is about, how it is shaped, and how the field group attaches to a host record.", "rationale": "OMS requires the result type and scale to be consistent with the observed property, and SOSA binds a result to exactly one observed property and feature of interest; a reusable field group is uninterpretable unless that binding and its host attachment are fixed first.", "source_refs": [ "SRC-001", "SRC-002", "SRC-004" ], "layers": [ { "id": "measurand-definition", "name": "Measurand and Observed Property", "description": "Identification of the property observed, the entity it belongs to, and the specification detail that makes the value interpretable.", "source_refs": [ "SRC-001", "SRC-002", "SRC-004" ], "findings": [ { "id": "measurand-and-observed-property", "name": "Measurand binding and specification", "description": "A value is meaningless without the property it quantifies, the entity that property belongs to, and the conditions under which it was specified; VIM treats a result as quantity values attributed to a measurand plus all other relevant information.", "source_refs": [ "SRC-004", "SRC-001", "SRC-002" ], "questions": [ { "id": "q-measurand-what", "text": "Which observable property, under which specified conditions, does this value quantify?", "kind": "definition", "answer_data": [ "observed property code and code system", "measurand specification text or reference", "stated conditions such as temperature, matrix or orientation" ] }, { "id": "q-measurand-subject", "text": "Which feature of interest or sample does the result apply to, and is that the ultimate or a proximate subject?", "kind": "relationship", "answer_data": [ "feature-of-interest reference", "sample or specimen reference", "proximate versus ultimate subject flag" ] }, { "id": "q-measurand-class", "text": "Is the observed property a quantity, an ordinal property or a nominal property?", "kind": "classification", "answer_data": [ "property class code", "scale type", "permissible value domain reference" ] }, { "id": "q-measurand-minimum", "text": "Below which set of measurand descriptors must the value be rejected as uninterpretable?", "kind": "requirement", "answer_data": [ "required descriptor list per profile", "rejection rule", "handling of legacy records missing descriptors" ] } ], "data_elements": [ { "id": "observed-property-code", "name": "Observed property code", "description": "Governed code identifying the property observed.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-001", "SRC-002" ] }, { "id": "measurand-specification", "name": "Measurand specification", "description": "Narrative or referenced specification of the measurand including conditions of measurement.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004" ] }, { "id": "feature-of-interest-ref", "name": "Feature of interest reference", "description": "Reference to the entity or sample whose property was observed; the entity itself is modelled elsewhere.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-002" ] }, { "id": "property-class", "name": "Property class", "description": "Whether the property is a quantity, an ordinal property or a nominal property.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-004" ] } ], "artifacts": [], "inline_only_rationale": "These descriptors are inline reference fields on the host record. The property vocabulary and the feature-of-interest record are owned by referenced sibling models, so this finding produces no artifact of its own." } ] }, { "id": "value-representation", "name": "Value Representation", "description": "The permitted shapes of a result value and how their precision and structure survive storage and exchange.", "source_refs": [ "SRC-006", "SRC-007", "SRC-002" ], "findings": [ { "id": "value-kind-and-datatype", "name": "Value kind and primitive carriage", "description": "FHIR carries thirteen value[x] alternatives and SOSA offers both a simple literal result and a structured Result object; a reusable field group must fix which shape a host property uses and how the primitive is carried.", "source_refs": [ "SRC-006", "SRC-007", "SRC-002" ], "questions": [ { "id": "q-value-shape", "text": "Which value representation is used for this property, and is that choice fixed for the host record type?", "kind": "classification", "answer_data": [ "value representation kind code", "profile constraint fixing the kind", "permitted alternatives" ] }, { "id": "q-value-precision-carriage", "text": "How is the primitive value carried so that its declared decimal precision survives storage and re-encoding?", "kind": "interoperability", "answer_data": [ "numeric carriage type (decimal string versus binary float)", "trailing-zero preservation rule", "encoding notes per projection" ] }, { "id": "q-value-identity", "text": "What makes two recorded values of this property the same value for deduplication?", "kind": "identity", "answer_data": [ "equality rule over value, unit and precision", "canonical digest inputs", "tolerance policy or its explicit absence" ] }, { "id": "q-value-prohibited", "text": "Which value representations are prohibited for this property, and on what grounds?", "kind": "constraint", "answer_data": [ "prohibited kinds list", "justification reference", "validation error code" ] } ], "data_elements": [ { "id": "result-value-slot", "name": "Result value", "description": "The polymorphic value slot whose concrete shape is fixed by the binding profile.", "value_kind": "other", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006", "SRC-002" ] }, { "id": "value-representation-kind", "name": "Value representation kind", "description": "Code naming the concrete shape used (quantity, coded, boolean, range, ratio, series reference and so on).", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-006" ] }, { "id": "value-precision-declaration", "name": "Declared precision", "description": "Explicit statement of the significant digits carried by the value as reported.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] } ], "artifacts": [], "inline_only_rationale": "The value slot and its declared shape are inline scalar fields of the host record; nothing here is a separable, independently identified object, so declaring an artifact would misrepresent the storage semantics." }, { "id": "structured-and-ordinal-results", "name": "Structured, coded and referenced results", "description": "Composite observations (components), bounded results (range, ratio), ordinal and nominal codes, and results too large to embed all need declared structure and ordering.", "source_refs": [ "SRC-006", "SRC-007", "SRC-009", "SRC-004" ], "questions": [ { "id": "q-structured-components", "text": "When one observation yields several correlated components, how are they grouped, coded and ordered?", "kind": "composition", "answer_data": [ "component code per part", "grouping and ordering rule", "correlation note between components" ] }, { "id": "q-structured-codeset", "text": "How is a coded or ordinal result bound to its permissible value set and to a defined ordering?", "kind": "classification", "answer_data": [ "value set reference and version", "ordering declaration for ordinal values", "rule forbidding arithmetic on ordinal codes" ] }, { "id": "q-structured-range", "text": "How is a result expressed as a range or ratio distinguished from a point value carrying uncertainty?", "kind": "definition", "answer_data": [ "range or ratio field structure", "inclusivity of bounds", "rule separating a range from an uncertainty interval" ] }, { "id": "q-structured-series", "text": "Which reference carries a result held as a large series or waveform outside the record?", "kind": "relationship", "answer_data": [ "series or datastream reference", "sampling interval and interval unit", "offset and origin declaration" ] } ], "data_elements": [ { "id": "result-components", "name": "Result components", "description": "Ordered set of coded component values belonging to one observation.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "value-set-ref", "name": "Permissible value set reference", "description": "Reference to the governed code list and version constraining a coded or ordinal result.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "series-ref", "name": "External series reference", "description": "Reference to a series, waveform or datastream carrying the result payload.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009", "SRC-007" ] } ], "artifacts": [], "inline_only_rationale": "Components and bounds are inline structured fields, and a series is carried as a reference into a dataset model that owns the payload; the mixin therefore holds pointers and interpretation fields rather than artifacts." } ] }, { "id": "host-binding", "name": "Host Attachment", "description": "How the field group is mixed into a host record type without collision or ownership ambiguity.", "source_refs": [ "SRC-002", "SRC-006" ], "findings": [ { "id": "mixin-attachment-contract", "name": "Mixin attachment contract", "description": "As a mixin, the group has no standalone record; its attachment point, cardinality, mandatory subset and namespace must be declared per host record type.", "source_refs": [ "SRC-002", "SRC-006", "SRC-009" ], "questions": [ { "id": "q-host-attach-point", "text": "Where in the host record is the field group attached, and with what cardinality?", "kind": "composition", "answer_data": [ "attachment path in the host structure", "cardinality (single, repeating, per component)", "nesting rule for component results" ] }, { "id": "q-host-mandatory", "text": "Which fields of the group are mandatory for every host, and which are profile-optional?", "kind": "requirement", "answer_data": [ "core mandatory field list", "profile-optional field list", "profile identifier and version" ] }, { "id": "q-host-owner", "text": "Which party owns the host record and is therefore accountable for the embedded result fields?", "kind": "ownership", "answer_data": [ "host record owner reference", "field-group steward reference", "escalation path for disputed values" ] }, { "id": "q-host-collision", "text": "How is a name collision between group fields and pre-existing host fields resolved?", "kind": "exception", "answer_data": [ "namespace prefix rule", "collision detection check", "migration procedure for legacy host fields" ] } ], "data_elements": [ { "id": "host-record-ref", "name": "Host record reference", "description": "Identifier of the record instance carrying the field group.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-002" ] }, { "id": "binding-profile-id", "name": "Binding profile identifier", "description": "Versioned identifier of the profile that fixes value kinds, unit systems and mandatory fields for the host.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-006" ] }, { "id": "field-namespace-prefix", "name": "Field namespace prefix", "description": "Dimension-scoped prefix applied to group fields to prevent host collisions.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-005" ] } ], "artifacts": [], "inline_only_rationale": "The attachment contract is expressed as inline configuration on the host record type plus a reference to the binding profile artifact declared under the alignment finding; duplicating that artifact here would create two owners for one object." } ] } ] }, { "id": "quantity-and-unit", "name": "Quantity, Unit and Numeric Expression", "description": "Binding a numeric value to a unit code, a quantity kind and a declared precision, and expressing it canonically without losing the reported form.", "rationale": "The SI expresses a quantity value as a number times a unit, UCUM supplies machine-processable codes with defined semantics, and QUDT supplies quantity kinds, dimension vectors and conversion factors; a result field group must bind all three or values cannot be compared.", "source_refs": [ "SRC-011", "SRC-005", "SRC-008" ], "layers": [ { "id": "unit-binding", "name": "Unit and Quantity Kind Binding", "description": "Which unit code system is pinned, and how the unit is proved commensurable with the property's quantity kind.", "source_refs": [ "SRC-005", "SRC-008", "SRC-007" ], "findings": [ { "id": "unit-code-and-code-system", "name": "Unit code and code system pinning", "description": "FHIR separates a human-readable unit from a system-plus-code pair; UCUM's code space is open, so the code system and its version must be pinned rather than assumed.", "source_refs": [ "SRC-005", "SRC-007", "SRC-009" ], "questions": [ { "id": "q-unit-system", "text": "Which unit code system is used, and which version of it is pinned to this result?", "kind": "provenance", "answer_data": [ "code system URI", "code system version", "pinning decision reference" ] }, { "id": "q-unit-required", "text": "Is a unit mandatory for this property, and what is recorded when the quantity is dimensionless?", "kind": "constraint", "answer_data": [ "unit-required flag per property", "dimensionless declaration code", "rejection rule for missing units" ] }, { "id": "q-unit-label-separation", "text": "How is a human-readable unit label prevented from being processed as the machine-readable unit code?", "kind": "interoperability", "answer_data": [ "separate label and code fields", "rule that the label is never authoritative", "validation check for label-only records" ] }, { "id": "q-unit-authority", "text": "Which authority may approve a unit code that this model will accept?", "kind": "authority", "answer_data": [ "accepted code system list", "local extension approval rule", "reference to the unit registry model" ] } ], "data_elements": [ { "id": "unit-code", "name": "Unit code", "description": "Machine-processable unit code drawn from the pinned code system.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-005", "SRC-007" ] }, { "id": "unit-code-system", "name": "Unit code system", "description": "URI of the code system from which the unit code is drawn.", "value_kind": "identifier", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "unit-code-system-version", "name": "Unit code system version", "description": "Version of the unit code system pinned at the time the record was created.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-005" ] }, { "id": "unit-display-label", "name": "Unit display label", "description": "Human-readable unit rendering, never authoritative for processing.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007", "SRC-009" ] } ], "artifacts": [], "inline_only_rationale": "Unit binding fields are inline codes plus a reference to the externally governed code system; the code system itself is owned by the referenced unit registry model and must not be copied into a local artifact." }, { "id": "quantity-kind-and-dimensional-consistency", "name": "Quantity kind and dimensional consistency", "description": "OMS requires the result scale to suit the observed property; QUDT's dimension vectors make that check computable rather than editorial.", "source_refs": [ "SRC-001", "SRC-008", "SRC-011" ], "questions": [ { "id": "q-qk-declared", "text": "Which quantity kind and dimension vector does the observed property require?", "kind": "measurement", "answer_data": [ "quantity kind reference", "dimension vector", "source of the requirement" ] }, { "id": "q-qk-check", "text": "What check proves that the recorded unit is commensurable with the declared quantity kind?", "kind": "validation", "answer_data": [ "dimension comparison result", "check timestamp and executing component", "failure disposition" ] }, { "id": "q-qk-offset-units", "text": "How are scaled or offset units such as degrees Celsius handled so that arithmetic is not corrupted?", "kind": "constraint", "answer_data": [ "offset flag on the unit", "rule barring naive ratio arithmetic", "registry-declared multiplier and offset" ] }, { "id": "q-qk-missing", "text": "What is recorded when a unit resolves but the property declares no quantity kind?", "kind": "exception", "answer_data": [ "unverified-commensurability marker", "escalation to the property vocabulary owner", "downstream usability flag" ] } ], "data_elements": [ { "id": "quantity-kind-ref", "name": "Quantity kind reference", "description": "Reference to the governed quantity kind expected for the property.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-008" ] }, { "id": "dimension-vector", "name": "Dimension vector", "description": "Dimensional signature used to test commensurability.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-008" ] }, { "id": "commensurability-verdict", "name": "Commensurability verdict", "description": "Stored outcome of the unit-to-quantity-kind check.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-008" ] } ], "artifacts": [], "inline_only_rationale": "The quantity kind and dimension vector are references into QUDT-style vocabularies and the verdict is a stored inline validation outcome; no separable document is produced by this finding." } ] }, { "id": "numeric-expression", "name": "Numeric Expression and Canonical Form", "description": "Precision, rounding, and the relationship between the as-reported value and any canonical-unit expression.", "source_refs": [ "SRC-007", "SRC-008", "SRC-011" ], "findings": [ { "id": "numeric-precision-and-rounding", "name": "Precision, resolution and rounding", "description": "FHIR states that decimal precision is significant and must be preserved; resolution of the method is distinct from uncertainty and must not be conflated with it.", "source_refs": [ "SRC-007", "SRC-003", "SRC-004" ], "questions": [ { "id": "q-num-sigdigits", "text": "How many significant digits are carried, and does trailing-zero precision survive a round trip?", "kind": "quality", "answer_data": [ "significant digit count", "trailing-zero preservation evidence", "round-trip test result" ] }, { "id": "q-num-resolution", "text": "What is the declared instrument or method resolution, and how does it differ from the stated uncertainty?", "kind": "measurement", "answer_data": [ "reported resolution as a quantity", "source of the resolution value", "explicit note distinguishing it from uncertainty" ] }, { "id": "q-num-rounding", "text": "Which rounding rule applies when the value is presented or re-encoded at lower precision?", "kind": "process", "answer_data": [ "rounding rule code", "rule application point", "record of whether rounding was applied" ] }, { "id": "q-num-typelimits", "text": "Which numeric type limits apply to stored values, including range and decimal versus binary representation?", "kind": "constraint", "answer_data": [ "permitted numeric type", "range and exponent bounds", "overflow and underflow handling" ] } ], "data_elements": [ { "id": "numeric-value", "name": "Numeric value", "description": "The reported number, carried so that declared precision is preserved.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007", "SRC-011" ] }, { "id": "significant-digits", "name": "Significant digits", "description": "Count of significant digits in the reported number.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "reported-resolution", "name": "Reported resolution", "description": "Smallest change the producing method or instrument can distinguish, expressed as a quantity.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004" ] }, { "id": "rounding-rule", "name": "Rounding rule", "description": "Named rule governing presentation or re-encoding at reduced precision.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] } ], "artifacts": [], "inline_only_rationale": "Precision and rounding are properties of the inline numeric field and of the profile that governs it; they have no independent existence as an object and therefore no artifact." }, { "id": "canonical-form-and-conversion", "name": "As-reported value and canonical expression", "description": "Comparison across records often needs a canonical unit, but the as-reported value must remain authoritative and the conversion must be attributable.", "source_refs": [ "SRC-008", "SRC-011", "SRC-005" ], "questions": [ { "id": "q-canon-retain", "text": "Is the as-reported value retained unchanged alongside any canonical-unit expression?", "kind": "provenance", "answer_data": [ "as-reported value and unit", "canonical value and unit", "flag marking the canonical form as derived" ] }, { "id": "q-canon-factor", "text": "Which conversion factor and which registry version were applied to produce the canonical expression?", "kind": "process", "answer_data": [ "conversion multiplier and offset", "registry reference and version", "conversion timestamp" ] }, { "id": "q-canon-authoritative", "text": "Which form is authoritative for comparison and aggregation queries?", "kind": "decision", "answer_data": [ "declared authoritative form", "query guidance", "consequence when the two disagree" ] }, { "id": "q-canon-refuse", "text": "Under which conditions must a conversion be refused rather than performed?", "kind": "exception", "answer_data": [ "incommensurable unit case", "offset-unit ratio case", "unresolvable code case and its handling" ] } ], "data_elements": [ { "id": "as-reported-expression", "name": "As-reported expression", "description": "The value and unit exactly as supplied by the producing system.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-011" ] }, { "id": "canonical-expression", "name": "Canonical expression", "description": "Derived value and unit in the profile's canonical unit, labelled as derived.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-008" ] }, { "id": "conversion-factor-ref", "name": "Conversion factor reference", "description": "Reference to the registry entry supplying the multiplier and offset used.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-008" ] }, { "id": "conversion-applied-at", "name": "Conversion applied at", "description": "Time the canonical expression was computed, distinct from phenomenon and result time.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002" ] } ], "artifacts": [], "inline_only_rationale": "Both expressions and the conversion provenance are inline fields plus a reference into the unit registry; the conversion factor table is owned by that registry and is deliberately not reproduced here." } ] } ] }, { "id": "method-and-traceability", "name": "Method, Conditions and Metrological Traceability", "description": "The procedure that produced the value, the conditions that qualify it, and the chain that makes it traceable and attributable.", "rationale": "OMS makes the procedure an explicit association of every observation and SOSA links an observation to a re-usable procedure; VIM makes traceability a documented chain of calibrations. Without these references a value cannot be compared or defended.", "source_refs": [ "SRC-001", "SRC-002", "SRC-004" ], "layers": [ { "id": "procedure-reference", "name": "Procedure Reference and Conditions", "description": "Citation of the method and the subject-specific parameters and influence quantities that qualify the value.", "source_refs": [ "SRC-001", "SRC-002", "SRC-009" ], "findings": [ { "id": "method-and-procedure-reference", "name": "Method and procedure reference", "description": "The mixin cites the procedure, algorithm or process chain and its version; authoring and approval of that procedure belong to the method catalogue.", "source_refs": [ "SRC-001", "SRC-002", "SRC-006" ], "questions": [ { "id": "q-method-which", "text": "Which procedure, method or algorithm produced this result, and by which identifier is it cited?", "kind": "provenance", "answer_data": [ "procedure identifier and namespace", "procedure kind (instrument, algorithm, process chain)", "catalogue reference" ] }, { "id": "q-method-version", "text": "Which version or revision of the cited method applies to this specific result?", "kind": "identity", "answer_data": [ "method version string", "effective date range of that version", "resolution rule when unversioned" ] }, { "id": "q-method-unknown", "text": "Is the method reference mandatory, and what is recorded when the method is unknown or proprietary?", "kind": "requirement", "answer_data": [ "mandatory flag per profile", "unknown-method marker code", "proprietary-method disclosure status" ] }, { "id": "q-method-comparability", "text": "Which results for the same property may be compared across different methods?", "kind": "interoperability", "answer_data": [ "method equivalence declaration reference", "known bias between methods", "non-comparability warning" ] } ], "data_elements": [ { "id": "procedure-ref", "name": "Procedure reference", "description": "Identifier of the procedure or method used.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-002" ] }, { "id": "procedure-version", "name": "Procedure version", "description": "Version or revision of the cited procedure applicable to this result.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "method-disclosure-status", "name": "Method disclosure status", "description": "Whether the method is public, restricted, proprietary or unknown.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] } ], "artifacts": [], "inline_only_rationale": "Only the reference, version and disclosure status are held here. The method document, its validation study and its approval lifecycle are owned by the referenced procedure catalogue and must not be duplicated as a local artifact." }, { "id": "observation-conditions-and-parameters", "name": "Conditions and qualifying parameters", "description": "SensorThings carries structured parameters on an observation and OMS allows observation parameters; influence quantities that change interpretation must travel with the value.", "source_refs": [ "SRC-009", "SRC-001", "SRC-004" ], "questions": [ { "id": "q-cond-named", "text": "Which named parameters qualify this result and must accompany it to keep it meaningful?", "kind": "composition", "answer_data": [ "parameter name and code system", "parameter value with unit", "mandatory-parameter list per property" ] }, { "id": "q-cond-influence", "text": "How are influence quantities such as ambient conditions recorded against the value?", "kind": "measurement", "answer_data": [ "influence quantity code and value", "whether a correction was applied for it", "reference to the correction basis" ] }, { "id": "q-cond-override", "text": "Which parameter values are subject-specific overrides of the referenced method's defaults?", "kind": "constraint", "answer_data": [ "overridden parameter list", "default value from the method", "authorisation for the override" ] }, { "id": "q-cond-missing", "text": "How is a required but unrecorded condition flagged on the result?", "kind": "exception", "answer_data": [ "missing-condition flag", "effect on completeness verdict", "remediation path" ] } ], "data_elements": [ { "id": "result-parameter-set", "name": "Result parameter set", "description": "Named parameters and influence quantities qualifying the result.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-009", "SRC-001" ] }, { "id": "correction-applied-flag", "name": "Correction applied indicator", "description": "Whether a correction for a stated influence quantity has been applied to the value.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004" ] } ], "artifacts": [], "inline_only_rationale": "Qualifying parameters are inline name-value structures on the result; they are subject-specific bindings of method defaults rather than independently governed objects, so no artifact is warranted." } ] }, { "id": "traceability-chain", "name": "Traceability and Responsible Parties", "description": "References that let a consumer judge whether the value is metrologically anchored and who stands behind it.", "source_refs": [ "SRC-004", "SRC-002", "SRC-012" ], "findings": [ { "id": "traceability-and-calibration-reference", "name": "Traceability and calibration reference", "description": "VIM defines traceability as a documented unbroken chain of calibrations; the mixin carries the reference and a validity check, never the calibration process.", "source_refs": [ "SRC-004", "SRC-012", "SRC-009" ], "questions": [ { "id": "q-trace-reference", "text": "To which metrological reference is the value traceable, and through which documented chain?", "kind": "authority", "answer_data": [ "metrological reference identifier", "chain description or reference", "stating party" ] }, { "id": "q-trace-calibration-validity", "text": "Which calibration record applies, and was it valid at the moment of observation?", "kind": "temporal", "answer_data": [ "calibration record reference", "calibration validity interval", "validity verdict at phenomenon time" ] }, { "id": "q-trace-absent", "text": "What is recorded when no traceability chain exists for the observed property?", "kind": "exception", "answer_data": [ "no-traceability marker", "reason code", "effect on comparability" ] }, { "id": "q-trace-evidence", "text": "Which evidence supports the traceability statement without asserting laboratory accreditation?", "kind": "evidence", "answer_data": [ "evidence reference list", "explicit non-accreditation disclaimer", "evidence verification status" ] } ], "data_elements": [ { "id": "metrological-reference", "name": "Metrological reference", "description": "The reference (standard, certified material or stated reference) to which the value is traceable.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004" ] }, { "id": "calibration-record-ref", "name": "Calibration record reference", "description": "Reference to the calibration record held by the device or calibration model.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009", "SRC-004" ] }, { "id": "traceability-claim-status", "name": "Traceability claim status", "description": "Whether traceability is claimed, partially documented, absent or not applicable.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004" ] } ], "artifacts": [], "inline_only_rationale": "Calibration certificates and accreditation scopes are records of the calibration and accreditation models; this finding stores only their references and a status, so producing an artifact here would claim ownership it does not have." }, { "id": "observing-agent-and-device-reference", "name": "Observer and accountable organisation", "description": "SOSA allows a sensor to be a device, a human or a computational process; a defensible result identifies the observer and the organisation accountable for it.", "source_refs": [ "SRC-002", "SRC-006", "SRC-010" ], "questions": [ { "id": "q-observer-identity", "text": "Which device, sensor or human observer made the observation, and how is it identified?", "kind": "identity", "answer_data": [ "observer reference and identifier scheme", "observer kind code", "serial or instance identifier where applicable" ] }, { "id": "q-observer-org", "text": "Which organisation is accountable for the reported value?", "kind": "ownership", "answer_data": [ "organisation reference", "role of that organisation", "contact or escalation reference" ] }, { "id": "q-observer-algorithmic", "text": "How is a result distinguished when the observer is an algorithm rather than a physical sensor?", "kind": "classification", "answer_data": [ "observer kind value for computational processes", "model or software version reference", "note on estimated versus directly sensed values" ] }, { "id": "q-observer-undisclosed", "text": "What is recorded when the observing device may not be disclosed to a consumer?", "kind": "privacy", "answer_data": [ "redaction marker for the observer field", "disclosure basis reference", "substitute description at a coarser granularity" ] } ], "data_elements": [ { "id": "observer-ref", "name": "Observer reference", "description": "Reference to the device, sensor, process or person that made the observation.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002" ] }, { "id": "observer-kind", "name": "Observer kind", "description": "Whether the observer is a device, a human, or a computational process.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002" ] }, { "id": "responsible-organisation-ref", "name": "Responsible organisation reference", "description": "Organisation accountable for the reported value.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010", "SRC-006" ] } ], "artifacts": [], "inline_only_rationale": "Observers and organisations are entities of the device registry and party model; this finding carries references and a kind code only and deliberately produces no local record of those entities." } ] } ] }, { "id": "uncertainty-and-quality", "name": "Uncertainty, Limits and Qualification", "description": "How doubt about the value is expressed, how limits and censoring are recorded, and what interpretation context travels with the result.", "rationale": "The GUM requires a reported result to state its uncertainty, its evaluation basis and, for expanded uncertainty, the coverage factor and level of confidence; regulators additionally require detection limits to be determined and reported. These are the fields that make a value defensible.", "source_refs": [ "SRC-003", "SRC-004", "SRC-013" ], "layers": [ { "id": "uncertainty-statement", "name": "Uncertainty Statement", "description": "Components and their evaluation basis, and the summary statement published with the value.", "source_refs": [ "SRC-003", "SRC-004", "SRC-012" ], "findings": [ { "id": "uncertainty-components-and-evaluation-type", "name": "Uncertainty components and evaluation type", "description": "The GUM distinguishes Type A evaluation by statistical analysis of repeated observations from Type B evaluation by other means; each component's distribution and degrees of freedom shape the combined result.", "source_refs": [ "SRC-003", "SRC-004", "SRC-012" ], "questions": [ { "id": "q-unc-components", "text": "Which uncertainty components contribute to this result, and what does each represent?", "kind": "measurement", "answer_data": [ "component label and source quantity", "component standard uncertainty", "sensitivity coefficient where stated" ] }, { "id": "q-unc-typeab", "text": "Was each component evaluated by statistical analysis of repeated observations or by other means?", "kind": "classification", "answer_data": [ "Type A or Type B designation per component", "basis description for Type B components", "number of repeated observations for Type A" ] }, { "id": "q-unc-distribution", "text": "Which probability distribution and degrees of freedom are assumed for each component?", "kind": "constraint", "answer_data": [ "assumed distribution code", "degrees of freedom or effective degrees of freedom", "justification reference" ] }, { "id": "q-unc-negligible", "text": "How is uncertainty judged negligible recorded so that it is not read as unknown?", "kind": "exception", "answer_data": [ "explicit negligibility declaration", "reason and threshold used", "declaring agent reference" ] } ], "data_elements": [ { "id": "uncertainty-component", "name": "Uncertainty component", "description": "One contributing component with its standard uncertainty and evaluation basis.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "evaluation-type", "name": "Evaluation type", "description": "Type A or Type B designation for a component.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "assumed-distribution", "name": "Assumed distribution", "description": "Probability distribution assumed for a component.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "degrees-of-freedom", "name": "Degrees of freedom", "description": "Degrees of freedom or effective degrees of freedom supporting the coverage factor.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] } ], "artifacts": [], "inline_only_rationale": "Components are inline structured fields on the result; the fuller budget document, when one exists, is declared once as an artifact under the supporting-evidence finding rather than duplicated here." }, { "id": "expanded-uncertainty-and-coverage", "name": "Reported uncertainty and coverage statement", "description": "GUM clause 7 requires a reported result to identify whether the stated uncertainty is standard, combined or expanded, and for expanded uncertainty to state the coverage factor and the level of confidence.", "source_refs": [ "SRC-003", "SRC-004", "SRC-012" ], "questions": [ { "id": "q-unc-kind", "text": "Is the reported uncertainty a standard, a combined standard or an expanded uncertainty?", "kind": "definition", "answer_data": [ "uncertainty type code", "symbol used in the published statement", "relation to the components recorded" ] }, { "id": "q-unc-coverage", "text": "Which coverage factor and coverage probability accompany an expanded uncertainty?", "kind": "quality", "answer_data": [ "coverage factor value", "coverage probability or level of confidence", "basis for choosing the factor" ] }, { "id": "q-unc-basis", "text": "In which unit is the uncertainty expressed, and is it absolute or relative?", "kind": "constraint", "answer_data": [ "uncertainty unit code", "absolute or relative indicator", "commensurability check with the value unit" ] }, { "id": "q-unc-publish-gate", "text": "Which uncertainty statement must be present before the result may be published as final?", "kind": "requirement", "answer_data": [ "required statement elements", "gate check outcome", "waiver record where a profile permits one" ] } ], "data_elements": [ { "id": "uncertainty-value", "name": "Uncertainty value", "description": "The reported uncertainty as a quantity, absolute or relative.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "uncertainty-type", "name": "Uncertainty type", "description": "Standard, combined standard or expanded uncertainty.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "coverage-factor", "name": "Coverage factor", "description": "Multiplier k applied to the combined standard uncertainty.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "coverage-probability", "name": "Coverage probability", "description": "Level of confidence associated with the expanded uncertainty interval.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] } ], "artifacts": [], "inline_only_rationale": "The published uncertainty statement is a small set of inline fields that must travel with the value in every projection; separating it into an artifact would let a consumer read the value without the doubt attached to it." } ] }, { "id": "limits-and-censoring", "name": "Limits and Censored Values", "description": "Detection and quantitation limits and the recording of values that fall outside a measurable range.", "source_refs": [ "SRC-013", "SRC-007", "SRC-006" ], "findings": [ { "id": "detection-limits-and-censored-values", "name": "Detection limits and censored values", "description": "Regulators require a determined, method-specific detection limit, and FHIR carries a comparator on a Quantity; together they let a below-limit result be recorded without being mistaken for zero.", "source_refs": [ "SRC-013", "SRC-007", "SRC-006" ], "questions": [ { "id": "q-lim-which", "text": "Which detection or quantitation limit applies to this result, and how was it determined?", "kind": "measurement", "answer_data": [ "detection limit as a quantity", "quantitation or reporting limit", "determination procedure reference" ] }, { "id": "q-lim-below", "text": "How is a value below the limit recorded so that it is not read as zero or as a measured number?", "kind": "constraint", "answer_data": [ "censoring marker", "limit value carried with the record", "prohibition on record-level substitution" ] }, { "id": "q-lim-comparator", "text": "Which comparator operator is carried with a bounded value, and is the bound inclusive?", "kind": "definition", "answer_data": [ "comparator symbol", "inclusivity of the bound", "unit of the bound" ] }, { "id": "q-lim-aggregation", "text": "Which handling rule is permitted when censored values are aggregated downstream?", "kind": "process", "answer_data": [ "permitted handling or substitution rule", "requirement to disclose the rule applied", "consumer warning text" ] } ], "data_elements": [ { "id": "detection-limit", "name": "Detection limit", "description": "Method-specific limit below which the analyte or signal is not reliably distinguished from background.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-013" ] }, { "id": "quantitation-limit", "name": "Quantitation limit", "description": "Limit above the detection limit at which a value may be reported as a number.", "value_kind": "quantity", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-013" ] }, { "id": "censoring-operator", "name": "Censoring operator", "description": "Comparator carried with a bounded value, such as less-than or greater-than-or-equal.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "censoring-basis", "name": "Censoring basis", "description": "Why the value is censored and against which limit.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-013" ] } ], "artifacts": [], "inline_only_rationale": "Limits and comparators are inline fields that qualify the value directly; the study that determined a limit is owned by the method catalogue and is referenced, not stored here." } ] }, { "id": "quality-qualification", "name": "Interpretation and Reference Context", "description": "Flags, quality assessments and reference intervals carried with the value, stopping short of any acceptance decision.", "source_refs": [ "SRC-006", "SRC-009", "SRC-012" ], "findings": [ { "id": "interpretation-and-reference-context", "name": "Interpretation flags and reference context", "description": "FHIR carries interpretation codes and reference ranges, and SensorThings carries resultQuality; these are context that supports a reader, not a conformity decision, which JCGM 106 treats as a separate discipline.", "source_refs": [ "SRC-006", "SRC-009", "SRC-012" ], "questions": [ { "id": "q-interp-flags", "text": "Which qualitative interpretation flags are attached to the value, and from which code set?", "kind": "classification", "answer_data": [ "interpretation code and code system", "flag applicability scope", "who applied the flag" ] }, { "id": "q-interp-range", "text": "Which reference interval or threshold set was applied, and to which population or specification does it belong?", "kind": "relationship", "answer_data": [ "reference range reference and version", "applicable population or specification", "range bounds and inclusivity" ] }, { "id": "q-interp-not-decision", "text": "How is an interpretation kept distinct from a formal conformity or acceptance decision?", "kind": "decision", "answer_data": [ "explicit non-decision marker on the flag", "reference to the decision model that owns acceptance", "consumer guidance text" ] }, { "id": "q-interp-quality", "text": "Which quality assessment outcomes are carried with the result and which are only referenced?", "kind": "quality", "answer_data": [ "inline quality assessment codes", "referenced quality report identifier", "assessment method reference" ] } ], "data_elements": [ { "id": "interpretation-code", "name": "Interpretation code", "description": "Coded qualitative reading of the value such as high, low or normal.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "reference-range-ref", "name": "Reference range reference", "description": "Reference to the interval or threshold set applied when interpreting the value.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "result-quality-assessment", "name": "Result quality assessment", "description": "Coded quality outcomes attached to the result, as distinct from uncertainty.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-009" ] } ], "artifacts": [], "inline_only_rationale": "Flags and quality codes are inline annotations, and reference intervals belong to the specification or decision model that defines them; recording an artifact here would imply this model owns acceptance criteria, which it does not." } ] } ] }, { "id": "temporal-and-state", "name": "Temporal Anchoring and Result State", "description": "When the value applies, when it was produced and ingested, how long it stays valid, and how its record state changes.", "rationale": "OMS and SOSA separate phenomenon time from result time, SensorThings adds validTime, and FHIR defines a status lifecycle including amended and entered-in-error; time and state fields determine whether a value may be used at all.", "source_refs": [ "SRC-001", "SRC-002", "SRC-009", "SRC-006" ], "layers": [ { "id": "time-anchoring", "name": "Time Anchoring", "description": "Separate anchors for the phenomenon, the result and the record, plus validity and aggregation windows.", "source_refs": [ "SRC-002", "SRC-009", "SRC-001" ], "findings": [ { "id": "event-time-and-result-time", "name": "Phenomenon time, result time and ingestion time", "description": "SOSA defines phenomenon time as the time the result applies to the feature of interest and result time as the instant the activity completed; the time the record entered a store is a third, distinct anchor.", "source_refs": [ "SRC-002", "SRC-009", "SRC-006" ], "questions": [ { "id": "q-time-phenomenon", "text": "When did the observed phenomenon occur, as distinct from when the result was produced?", "kind": "temporal", "answer_data": [ "phenomenon time instant or interval", "result time instant", "rule when only one is known" ] }, { "id": "q-time-ingest", "text": "When was the result record first ingested and made available to consumers?", "kind": "provenance", "answer_data": [ "ingestion timestamp", "issuing or availability timestamp", "source system that stamped it" ] }, { "id": "q-time-format", "text": "Which timestamp format, precision and offset are required on each time field?", "kind": "constraint", "answer_data": [ "RFC 3339 profile with seconds", "required explicit offset or Z", "rejection rule for offset-free local times" ] }, { "id": "q-time-ordering", "text": "How are results ordered when phenomenon time and result time disagree?", "kind": "decision", "answer_data": [ "declared ordering key per use case", "tie-breaking rule", "handling of retrospective results" ] } ], "data_elements": [ { "id": "phenomenon-time", "name": "Phenomenon time", "description": "Instant the result applies to the feature of interest.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002" ] }, { "id": "phenomenon-period", "name": "Phenomenon period", "description": "Interval the result applies to when the phenomenon is not instantaneous.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002", "SRC-009" ] }, { "id": "result-time", "name": "Result time", "description": "Instant the observation activity completed and the result became available.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-002", "SRC-009" ] }, { "id": "ingestion-time", "name": "Ingestion time", "description": "Instant the result record entered the adopting store.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] } ], "artifacts": [], "inline_only_rationale": "Time anchors are inline scalar fields that must be inseparable from the value; representing them as artifacts would permit a value to circulate without its temporal context." }, { "id": "validity-window-and-aggregation-period", "name": "Validity window and aggregation period", "description": "SensorThings carries validTime for the period a result is valid; a value may also be a statistic over an interval rather than an instantaneous reading, which changes its meaning entirely.", "source_refs": [ "SRC-009", "SRC-001", "SRC-007" ], "questions": [ { "id": "q-valid-window", "text": "For which period is the result asserted to remain valid?", "kind": "temporal", "answer_data": [ "valid-time start and end", "basis for the window", "behaviour when the window is open-ended" ] }, { "id": "q-valid-instant-or-statistic", "text": "Does the value represent an instantaneous reading or a statistic computed over an interval?", "kind": "classification", "answer_data": [ "instantaneous or aggregated indicator", "statistic type where aggregated", "sample count where relevant" ] }, { "id": "q-valid-aggregation", "text": "Which aggregation function and sampling period produced an interval-based value?", "kind": "measurement", "answer_data": [ "aggregation function code", "aggregation period as a duration", "sampling interval and completeness" ] }, { "id": "q-valid-lapse", "text": "What happens to a result once its validity window has lapsed?", "kind": "lifecycle", "answer_data": [ "state change on lapse", "consumer-facing expiry signal", "retention treatment after lapse" ] } ], "data_elements": [ { "id": "valid-time-window", "name": "Valid time window", "description": "Start and end of the period for which the result is asserted valid.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "aggregation-function", "name": "Aggregation function", "description": "Statistic applied when the value summarises an interval.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "aggregation-period", "name": "Aggregation period", "description": "Duration over which the statistic was computed.", "value_kind": "duration", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009", "SRC-007" ] } ], "artifacts": [], "inline_only_rationale": "Validity and aggregation descriptors are inline qualifiers of the value; the underlying series that was aggregated is owned by the dataset model and is referenced rather than embedded." } ] }, { "id": "result-state", "name": "Result State and Absence", "description": "Lifecycle status, supersession of corrected values, and coded absence when no value exists.", "source_refs": [ "SRC-006", "SRC-010" ], "findings": [ { "id": "result-status-and-supersession", "name": "Status, amendment and supersession", "description": "FHIR defines a status lifecycle from registered and preliminary through final, amended and entered-in-error; a corrected result must link to what it replaces rather than overwrite it.", "source_refs": [ "SRC-006", "SRC-010" ], "questions": [ { "id": "q-state-status", "text": "Which lifecycle status does the result record carry, and which transitions are permitted from it?", "kind": "lifecycle", "answer_data": [ "status code and code system", "permitted transition set", "terminal states" ] }, { "id": "q-state-supersede", "text": "How is a corrected result linked to the value it replaces without deleting the earlier record?", "kind": "state", "answer_data": [ "supersession reference", "amendment reason", "version identifier of both records" ] }, { "id": "q-state-authority", "text": "Who is authorised to promote a result to final or to amend a finalised value?", "kind": "authority", "answer_data": [ "authorised role list", "acting agent reference", "authorisation evidence reference" ] }, { "id": "q-state-history", "text": "How long must superseded result versions remain retrievable?", "kind": "retention", "answer_data": [ "retention class for superseded versions", "policy reference owning the period", "retrieval interface expectation" ] } ], "data_elements": [ { "id": "result-status", "name": "Result status", "description": "Lifecycle status of the result record.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-006" ] }, { "id": "supersedes-ref", "name": "Supersedes reference", "description": "Reference to the result version this record replaces.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006", "SRC-010" ] }, { "id": "status-changed-at", "name": "Status changed at", "description": "Time of the most recent status transition.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "amendment-reason", "name": "Amendment reason", "description": "Stated reason for an amendment, correction or withdrawal.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] } ], "artifacts": [], "inline_only_rationale": "Status and supersession are inline record fields; the authorisation policy that governs who may transition them is owned by the access model and is referenced rather than restated as a local artifact." }, { "id": "absent-result-and-nil-reason", "name": "Coded absence of a value", "description": "FHIR requires a coded dataAbsentReason when no value is present; absence must be distinguishable from zero, from an empty string and from a censored value.", "source_refs": [ "SRC-006", "SRC-007", "SRC-001" ], "questions": [ { "id": "q-absent-reason", "text": "When no value is present, which coded reason explains the absence?", "kind": "definition", "answer_data": [ "absence reason code and code system", "free-text elaboration where permitted", "recording agent" ] }, { "id": "q-absent-vs-zero", "text": "How is an absent result distinguished from a value of zero, an empty string and a censored value?", "kind": "constraint", "answer_data": [ "distinct field for absence", "prohibition on sentinel numeric values", "cross-check with the censoring operator" ] }, { "id": "q-absent-blocking", "text": "Which absence reasons block downstream use and which are merely informational?", "kind": "validation", "answer_data": [ "blocking reason list", "downstream usability flag", "consumer handling guidance" ] }, { "id": "q-absent-validity", "text": "Is a record with no value still a valid result record, and under what conditions?", "kind": "requirement", "answer_data": [ "validity conditions for valueless records", "mandatory accompanying fields", "profile-specific exceptions" ] } ], "data_elements": [ { "id": "data-absent-reason", "name": "Data absent reason", "description": "Coded explanation for the absence of a value.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "absence-blocking-flag", "name": "Absence blocking indicator", "description": "Whether the absence prevents downstream use of the record.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] } ], "artifacts": [], "inline_only_rationale": "Absence is expressed as an inline coded field replacing the value; the code list itself is externally governed and referenced, so this finding creates no artifact." } ] } ] }, { "id": "provenance-and-evidence", "name": "Provenance, Derivation and Evidence", "description": "Where the value came from, what was applied to it, who asserts it, and what substantiates it.", "rationale": "PROV-O supplies wasDerivedFrom, wasAttributedTo and wasGeneratedBy, and VIM distinguishes an uncorrected indication from a corrected result; without lineage and evidence a reported value cannot be reproduced or defended.", "source_refs": [ "SRC-010", "SRC-004", "SRC-003" ], "layers": [ { "id": "derivation-lineage", "name": "Derivation and Assertion", "description": "Prior values, corrections applied, and the distinction between measuring and asserting a result.", "source_refs": [ "SRC-010", "SRC-004" ], "findings": [ { "id": "derivation-and-assertion-lineage", "name": "Derivation, correction and assertion", "description": "A reported value is often a corrected or derived quantity; PROV-O separates the entity's derivation from the agent to which it is attributed, and VIM notes that a result may be an indication, an uncorrected result or a corrected result.", "source_refs": [ "SRC-010", "SRC-004", "SRC-003" ], "questions": [ { "id": "q-prov-derived", "text": "From which prior values or raw indications was this result derived?", "kind": "provenance", "answer_data": [ "derived-from references", "derivation activity reference", "depth of the retained chain" ] }, { "id": "q-prov-corrections", "text": "Which corrections were applied, and is the uncorrected indication retained?", "kind": "process", "answer_data": [ "correction list with basis", "uncorrected value where retained", "order of application" ] }, { "id": "q-prov-asserter", "text": "Which agent asserts this result record, as distinct from the agent that performed the measurement?", "kind": "ownership", "answer_data": [ "asserting agent reference", "measuring agent reference", "attribution timestamp" ] }, { "id": "q-prov-reproducible", "text": "Which derivation steps must be reproducible for the result to be defensible?", "kind": "evidence", "answer_data": [ "required reproducible step list", "inputs retained for each step", "software or model version references" ] } ], "data_elements": [ { "id": "derived-from-ref", "name": "Derived-from reference", "description": "Reference to a prior value or raw indication this result was derived from.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-010" ] }, { "id": "correction-record", "name": "Correction record", "description": "Correction applied to the indication, with its basis.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-004", "SRC-003" ] }, { "id": "asserting-agent-ref", "name": "Asserting agent reference", "description": "Agent responsible for asserting the result record.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010" ] } ], "artifacts": [], "inline_only_rationale": "Lineage is expressed as inline references and correction descriptors that align to PROV-O; the provenance graph store and the agent registry are separate models and their records are not reproduced here." } ] }, { "id": "evidence-retention", "name": "Supporting Evidence", "description": "The captured records and budget documents that substantiate a reported value.", "source_refs": [ "SRC-003", "SRC-009", "SRC-006" ], "findings": [ { "id": "supporting-evidence-records", "name": "Evidence backing the reported value", "description": "Raw captures and uncertainty budgets exist as separable objects with their own media, identity and integrity requirements, and are bound to the result by reference and digest.", "source_refs": [ "SRC-003", "SRC-009", "SRC-006", "SRC-010" ], "questions": [ { "id": "q-evid-which", "text": "Which raw or intermediate records substantiate the reported value?", "kind": "evidence", "answer_data": [ "evidence reference list with media type", "capture system reference", "relationship of each item to the value" ] }, { "id": "q-evid-integrity", "text": "How is an evidence item bound to exactly one result record and verified as unaltered?", "kind": "security", "answer_data": [ "content digest and algorithm", "binding reference on the result", "verification outcome and time" ] }, { "id": "q-evid-retention", "text": "How long must supporting evidence be kept relative to the result itself?", "kind": "retention", "answer_data": [ "retention class for evidence", "policy reference owning the period", "behaviour when evidence expires before the result" ] }, { "id": "q-evid-release", "text": "Which evidence may be released to a consumer not permitted to see the raw capture?", "kind": "access", "answer_data": [ "release tier per evidence item", "derived or redacted substitute", "disclosure basis reference" ] } ], "data_elements": [ { "id": "evidence-ref", "name": "Evidence reference", "description": "Reference to an artifact substantiating the result.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-010" ] }, { "id": "evidence-digest", "name": "Evidence digest", "description": "Cryptographic digest of the referenced evidence with its algorithm named.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "evidence-media-type", "name": "Evidence media type", "description": "Media type or form of the referenced evidence item.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-009" ] } ], "artifacts": [ { "id": "raw-observation-record", "name": "Raw observation record", "description": "The instrument-native or acquisition-native capture that backs the reported value, retained unmodified.", "media_or_form": [ "instrument-native binary capture", "waveform or spectrum series", "image or scan", "tabular reading log" ], "serial": true, "identity_strategy": "Master-system record identifier issued by the acquiring system where one exists; otherwise a ULID assigned by the adopting Dimension, always accompanied by a content digest that supplements but never replaces the identifier.", "source_refs": [ "SRC-009", "SRC-002" ] }, { "id": "uncertainty-budget-statement", "name": "Uncertainty budget statement", "description": "Enumeration of uncertainty components, their evaluation types, distributions and sensitivity coefficients, and the combined result they support.", "media_or_form": [ "structured budget table", "narrative technical document" ], "serial": false, "identity_strategy": "Governed document identifier issued by the producing laboratory or the adopting Dimension, with an explicit version pinned to the result record; no date component is used as the identifier.", "source_refs": [ "SRC-003", "SRC-012" ] } ], "inline_only_rationale": null } ] } ] }, { "id": "interoperability-and-disclosure", "name": "Interoperability, Profiling and Disclosure", "description": "How the field group aligns to external standards, projects into exchange encodings, and carries disclosure constraints.", "rationale": "The aligned standards disagree on where units live, how absence is coded and how time is typed; a reusable field group must record those conflicts, pin code-system versions and declare what is lost in each projection, while leaving enforcement to the access model.", "source_refs": [ "SRC-001", "SRC-002", "SRC-006", "SRC-009" ], "layers": [ { "id": "profile-and-alignment", "name": "Alignment and Versioning", "description": "Which external standards are mapped, what is claimed, and how code-system change is handled.", "source_refs": [ "SRC-001", "SRC-002", "SRC-005", "SRC-006" ], "findings": [ { "id": "alignment-and-code-system-versioning", "name": "Standard alignment and code-system versioning", "description": "Alignment to OMS, SOSA/SSN, SensorThings, FHIR, UCUM and QUDT is a mapping rather than a conformance claim; each mapped code system evolves independently and must be version-pinned per record.", "source_refs": [ "SRC-001", "SRC-002", "SRC-005", "SRC-006", "SRC-008" ], "questions": [ { "id": "q-align-targets", "text": "Which external standards is this field group mapped to, and is conformance claimed or only mapped?", "kind": "interoperability", "answer_data": [ "alignment target list with versions", "claim status per target", "evidence supporting any conformance claim" ] }, { "id": "q-align-version-change", "text": "How is a code-system version change handled for results already recorded?", "kind": "lifecycle", "answer_data": [ "version pin retained on existing records", "re-binding or migration decision", "deprecated code handling" ] }, { "id": "q-align-conflicts", "text": "Where do the aligned standards conflict, and which local rule prevails?", "kind": "constraint", "answer_data": [ "conflict register entries", "local resolution rule per conflict", "affected fields" ] }, { "id": "q-align-profile", "text": "Which profile declares the permitted value kinds, unit systems and uncertainty conventions for a given host?", "kind": "definition", "answer_data": [ "profile identifier and version", "host record types it governs", "approval reference" ] } ], "data_elements": [ { "id": "alignment-target", "name": "Alignment target", "description": "External standard or vocabulary this field group is mapped to.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-001", "SRC-002" ] }, { "id": "conformance-claim-status", "name": "Conformance claim status", "description": "Whether conformance is claimed with evidence, mapped only, or explicitly not claimed.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001" ] }, { "id": "code-system-version-pin", "name": "Code system version pin", "description": "Version of each referenced code system fixed at record creation.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-005", "SRC-008" ] } ], "artifacts": [ { "id": "result-binding-profile", "name": "Result binding profile", "description": "Machine-readable declaration of which fields, value kinds, unit code systems, absence codes and uncertainty conventions apply to a given host record type, together with the alignment and conflict register.", "media_or_form": [ "structured profile declaration", "tabular field binding table", "conflict register entry set" ], "serial": false, "identity_strategy": "Profile identifier issued in the adopting Dimension's namespace with an explicit semantic version; identifiers carry no date component and never encode the pinned code-system versions.", "source_refs": [ "SRC-006", "SRC-005", "SRC-001" ] } ], "inline_only_rationale": null } ] }, { "id": "exchange-and-disclosure", "name": "Exchange and Disclosure", "description": "Projection into target encodings and the sensitivity constraints that travel with a value.", "source_refs": [ "SRC-001", "SRC-002", "SRC-006", "SRC-009" ], "findings": [ { "id": "exchange-projection-and-round-trip", "name": "Projection and round-trip fidelity", "description": "The same result must project into OMS, SOSA/SSN, SensorThings and FHIR shapes; each projection loses something (for example SensorThings binds the unit at Datastream level, not per observation) and that loss must be declared rather than discovered.", "source_refs": [ "SRC-009", "SRC-001", "SRC-002", "SRC-007" ], "questions": [ { "id": "q-proj-targets", "text": "Which target encodings must the field group project into without semantic loss?", "kind": "interoperability", "answer_data": [ "target encoding list", "mapping version per target", "fields required by each target" ] }, { "id": "q-proj-loss", "text": "Which fields are lost or approximated in each projection, and is that loss declared to consumers?", "kind": "quality", "answer_data": [ "lossy field list per target", "declaration mechanism", "consumer warning text" ] }, { "id": "q-proj-roundtrip", "text": "How is round-trip equivalence of a projected result verified?", "kind": "validation", "answer_data": [ "round-trip test definition", "equivalence criteria including precision", "test result and date of last run" ] }, { "id": "q-proj-digest", "text": "Which canonical form is hashed to detect a changed result payload?", "kind": "security", "answer_data": [ "canonical form definition", "digest algorithm", "fields included in and excluded from the digest" ] } ], "data_elements": [ { "id": "projection-target", "name": "Projection target", "description": "Named exchange encoding the result is projected into.", "value_kind": "code", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-001", "SRC-009" ] }, { "id": "lossy-field-list", "name": "Lossy field list", "description": "Fields lost or approximated for a given projection target.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "payload-digest", "name": "Payload digest", "description": "Digest over the canonical form used to detect payload change.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] } ], "artifacts": [], "inline_only_rationale": "Projections are derived views computed on demand and are never records of authority; the mapping definitions live in the binding profile artifact already declared under the alignment finding." }, { "id": "sensitivity-and-disclosure-classification", "name": "Sensitivity classification and redaction signalling", "description": "A value may be more sensitive than its host record; the mixin classifies and signals redaction so that a consumer never mistakes a redacted result for a complete one, while all evaluation stays with the access model.", "source_refs": [ "SRC-006", "SRC-010" ], "questions": [ { "id": "q-sens-class", "text": "Which sensitivity classification applies to the value, and does it differ from the host record's classification?", "kind": "privacy", "answer_data": [ "sensitivity classification code", "host classification for comparison", "reason for any divergence" ] }, { "id": "q-sens-redact", "text": "Which parts of the field group may be redacted while leaving the result usable?", "kind": "access", "answer_data": [ "redactable field list", "minimum usable field set", "coarsened substitute such as a band or interpretation code" ] }, { "id": "q-sens-basis", "text": "Which legal or contractual basis restricts disclosure of this value?", "kind": "authority", "answer_data": [ "policy or legal basis reference", "jurisdiction where applicable", "expiry or review date of the restriction" ] }, { "id": "q-sens-signal", "text": "How is a redacted result signalled so that consumers do not treat it as complete?", "kind": "exception", "answer_data": [ "redaction indicator field", "redaction reason code", "completeness verdict downgrade" ] } ], "data_elements": [ { "id": "sensitivity-classification", "name": "Sensitivity classification", "description": "Classification code governing disclosure of the value.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "redaction-applied", "name": "Redaction applied indicator", "description": "Whether any part of the field group has been redacted in this representation.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "disclosure-basis-ref", "name": "Disclosure basis reference", "description": "Reference to the policy, contract or legal basis restricting disclosure.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010", "SRC-006" ] } ], "artifacts": [], "inline_only_rationale": "Only a classification code, a redaction signal and a policy reference are held here. Policy documents, access evaluation and audit records belong to the referenced access model, so this finding must not materialise an artifact of its own." } ] } ] } ] }, "functions": [ { "id": "bind-result-fields", "name": "Bind result fields to a host record type", "description": "Attaches the field group to a host record type under a named, versioned binding profile that fixes value kinds, unit code systems, mandatory fields and namespace prefix.", "inputs": [ "host record type identifier", "binding profile identifier and version", "mandatory field selection" ], "outputs": [ "bound field group definition on the host type", "binding validation report" ], "preconditions": [ "Host record type is registered and its owner is named", "Profile pins unit code system and permissible value sets" ], "effects": [ "Host records of that type accept and validate the field group", "Namespace prefix is reserved so group fields cannot collide with host-native fields" ], "source_refs": [ "SRC-002", "SRC-006" ] }, { "id": "validate-unit-quantity-consistency", "name": "Validate unit against quantity kind", "description": "Checks that the recorded unit code resolves in the pinned code system and that its dimension is commensurable with the declared quantity kind of the observed property.", "inputs": [ "unit code and code system version", "declared quantity kind or dimensionless declaration", "numeric value" ], "outputs": [ "commensurability verdict", "dimension comparison detail", "rejection reason when inconsistent" ], "preconditions": [ "Unit code resolves in the pinned code system", "Observed property declares a quantity kind or is explicitly dimensionless" ], "effects": [ "Inconsistent records are rejected at creation and the verdict is stored with the record", "Unresolvable unit codes quarantine the record rather than coercing a unit" ], "source_refs": [ "SRC-005", "SRC-008", "SRC-011" ] }, { "id": "record-canonical-expression", "name": "Record a canonical-unit expression", "description": "Stores a derived canonical-unit expression alongside the unchanged as-reported value, using a conversion factor resolved from the referenced unit registry.", "inputs": [ "as-reported value and unit", "target canonical unit", "conversion multiplier and offset resolved from the unit registry" ], "outputs": [ "canonical expression labelled as derived", "conversion provenance record" ], "preconditions": [ "Units are commensurable", "Conversion factor carries a registry reference and version" ], "effects": [ "The as-reported value remains authoritative and unmodified", "Offset units are converted only with the registry-declared offset, and ratio arithmetic on them is refused" ], "source_refs": [ "SRC-008", "SRC-011" ] }, { "id": "assemble-uncertainty-statement", "name": "Assemble and check an uncertainty statement", "description": "Assembles the GUM-shaped uncertainty statement from declared components and checks it for completeness and internal consistency; numerical propagation through the measurement model is performed by the producing measurement system, not by this model.", "inputs": [ "declared components with evaluation type and distribution", "combined standard uncertainty supplied by the producing system", "coverage factor and coverage probability" ], "outputs": [ "complete uncertainty statement", "consistency findings such as missing type, factor or coverage probability" ], "preconditions": [ "Uncertainty is expressed in a unit commensurable with the value or declared as relative" ], "effects": [ "An expanded uncertainty lacking a stated coverage factor and probability is flagged incomplete", "Negligible uncertainty is recorded as an explicit declaration with a reason rather than left silent" ], "source_refs": [ "SRC-003", "SRC-004" ] }, { "id": "assert-reporting-completeness", "name": "Assert reporting completeness", "description": "Evaluates a result record against the mandatory descriptor set of its binding profile before the record may be promoted to a final, publishable state.", "inputs": [ "result record", "applicable binding profile" ], "outputs": [ "completeness verdict", "list of missing mandatory descriptors" ], "preconditions": [ "Profile declares the mandatory descriptor set for the host property" ], "effects": [ "Records failing completeness cannot be promoted to final status", "The verdict and its RFC 3339 timestamp are stored with the record" ], "source_refs": [ "SRC-003", "SRC-001", "SRC-006" ] }, { "id": "record-absent-or-censored-value", "name": "Record an absent or censored value", "description": "Records a coded absence reason, or a bounded value with its comparator and the applicable limit, without substituting a numeric sentinel.", "inputs": [ "absence reason code or censoring operator", "applicable detection or quantitation limit", "code system reference and version" ], "outputs": [ "result record with coded absence or bounded value", "downstream usability flag" ], "preconditions": [ "Absence and censoring code sets are pinned in the binding profile" ], "effects": [ "No numeric substitution is applied at record level", "Consumers can distinguish absent, zero, and below-limit values" ], "source_refs": [ "SRC-006", "SRC-007", "SRC-013" ] }, { "id": "supersede-result", "name": "Supersede a result with a corrected version", "description": "Creates a new result version linked to the record it replaces, with an amendment reason and status transition, leaving the prior version retrievable.", "inputs": [ "existing result record identifier and expected digest", "corrected field set", "amendment reason", "acting agent reference" ], "outputs": [ "new result version", "supersession link", "status transition record" ], "preconditions": [ "Acting agent holds the authority declared for the transition", "Prior version digest matches the expected value" ], "effects": [ "The prior version remains retrievable and is marked superseded", "Value, unit, uncertainty, measurand and time-anchor changes never mutate a version in place" ], "source_refs": [ "SRC-006", "SRC-010" ] }, { "id": "project-to-exchange-profile", "name": "Project a result into an exchange profile", "description": "Emits the field group into a registered target encoding and reports every field lost or approximated by that mapping.", "inputs": [ "result record in canonical form", "target profile such as OMS, SOSA/SSN, SensorThings or FHIR" ], "outputs": [ "projected representation", "declared loss report" ], "preconditions": [ "Target profile mapping is registered with its version" ], "effects": [ "Declared precision and unit code system are preserved or the loss is reported", "Projections remain derived views and never become the record of authority" ], "source_refs": [ "SRC-001", "SRC-002", "SRC-009", "SRC-006" ] }, { "id": "assess-comparability", "name": "Assess comparability of results", "description": "Advisory check of whether two or more result records may be directly compared, based on measurand specification, unit commensurability, method reference and time anchors.", "inputs": [ "two or more result records", "comparability criteria from the binding profile" ], "outputs": [ "comparability verdict with blocking reasons" ], "preconditions": [ "Each record declares measurand, unit, method reference and time anchors" ], "effects": [ "Records differing in measurand specification or method are flagged as not directly comparable", "The verdict is advisory context only and is never an acceptance, conformity or pass/fail decision" ], "source_refs": [ "SRC-004", "SRC-003", "SRC-012" ] }, { "id": "verify-evidence-binding", "name": "Verify evidence binding and integrity", "description": "Re-computes and compares the digest of each referenced evidence item and records the verification outcome against the result.", "inputs": [ "evidence references with recorded digests and algorithms", "retrieved evidence content" ], "outputs": [ "verification outcome per evidence item", "unverified-evidence flag on the result" ], "preconditions": [ "Each evidence reference carries a digest and a named algorithm", "Consumer holds read access to the evidence tier" ], "effects": [ "A digest mismatch marks the evidence unverified and blocks a completeness assertion", "The recorded value is never altered by a verification failure" ], "source_refs": [ "SRC-003", "SRC-010" ] } ], "composition": [ { "target": "WM-MAT-008 (registered parent model)", "relation": "CHILD", "purpose": "This field group is registered as a child of WM-MAT-008 and supplies the result payload fields its property records carry; the parent owns the record type, its subject and its lifecycle.", "required": true, "source_refs": [ "SRC-001", "SRC-002" ] }, { "target": "Host record models adopting the field group (any model carrying observed or measured properties)", "relation": "MIX-IN", "purpose": "Hosts embed the group under a versioned binding profile; the host owns the record, its identity and its access class, while this model owns only the field semantics and their validation rules.", "required": true, "source_refs": [ "SRC-002", "SRC-006" ] }, { "target": "Unit and quantity-kind vocabulary registry (UCUM, QUDT, UN/CEFACT Rec 20)", "relation": "REFERENCE", "purpose": "Supplies unit codes, quantity kinds, dimension vectors and conversion factors. This model pins a code-system version and cites codes; it never mints, deprecates or maintains them and holds no local copy of the conversion tables.", "required": true, "source_refs": [ "SRC-005", "SRC-008", "SRC-011" ] }, { "target": "Observed-property and observable vocabulary registry", "relation": "REFERENCE", "purpose": "Supplies the observed-property codes and their expected quantity kinds and permissible value sets; this model carries the code, the code system and the version pin only.", "required": true, "source_refs": [ "SRC-002", "SRC-006" ] }, { "target": "Procedure and method catalogue model", "relation": "REFERENCE", "purpose": "Supplies method identity, versions, defaults and validation studies. This model carries the reference, the version and subject-specific parameter overrides, and never reproduces method authoring or approval lifecycle.", "required": false, "source_refs": [ "SRC-001", "SRC-006" ] }, { "target": "Sensor, device and calibration record model", "relation": "REFERENCE", "purpose": "Supplies observer identity and calibration records. This model carries the reference and a validity-at-observation check; device lifecycle, calibration execution and certificate issuance remain with the target.", "required": false, "source_refs": [ "SRC-002", "SRC-009" ] }, { "target": "Feature-of-interest, sample and specimen model", "relation": "REFERENCE", "purpose": "Anchors what the value is about. This model carries the reference and a proximate-versus-ultimate subject flag, not sample identity, hierarchy or custody.", "required": false, "source_refs": [ "SRC-001" ] }, { "target": "Agent, party and organisation identity model", "relation": "REFERENCE", "purpose": "Supplies observer, asserter and accountable-organisation identities; this model carries references and role codes only.", "required": false, "source_refs": [ "SRC-010" ] }, { "target": "Access policy, audit and retention model of the adopting Dimension", "relation": "REFERENCE", "purpose": "Receives the sensitivity classification, retention class and policy reference recorded here and owns policy evaluation, enforcement, audit-trail storage and disposition execution. This model supplies audit event content but never evaluates, enforces or stores the trail.", "required": true, "source_refs": [ "SRC-006" ] }, { "target": "Time-series and statistical dataset model", "relation": "REFERENCE", "purpose": "Holds series and waveform payloads that a result may point to; this model carries the series reference plus the sampling and aggregation descriptors needed to interpret it.", "required": false, "source_refs": [ "SRC-009", "SRC-007" ] }, { "target": "Conformity assessment and decision-rule model", "relation": "REFERENCE", "purpose": "Consumes values, uncertainties and limits to make acceptance decisions under a decision rule; this model supplies inputs and interpretation context and never records the conformity decision or its guard bands.", "required": false, "source_refs": [ "SRC-012" ] }, { "target": "JCGM measurement uncertainty framework (GUM JCGM 100:2008 and VIM JCGM 200:2012)", "relation": "ALIGN", "purpose": "Field names and semantics for measurand, measured quantity value, standard, combined and expanded uncertainty, evaluation type, coverage factor and coverage probability follow GUM and VIM terminology; this is a documented mapping, not a conformance claim.", "required": true, "source_refs": [ "SRC-003", "SRC-004" ] }, { "target": "OGC/ISO Observations, Measurements and Samples and W3C SOSA/SSN", "relation": "ALIGN", "purpose": "Observed property, procedure, feature of interest, phenomenon time and result time map to OMS and SOSA constructs so that a hosted result can be exposed as an observation result without re-modelling the observation act.", "required": true, "source_refs": [ "SRC-001", "SRC-002", "SRC-009" ] }, { "target": "HL7 FHIR Observation and Quantity datatype", "relation": "ALIGN", "purpose": "Value polymorphism, comparator, absence coding, interpretation, component structure and status lifecycle map to FHIR equivalents for cross-domain exchange; FHIR resource-level security and audit semantics are explicitly not adopted.", "required": false, "source_refs": [ "SRC-006", "SRC-007" ] }, { "target": "W3C PROV-O provenance vocabulary", "relation": "ALIGN", "purpose": "Derivation, attribution and generation-time fields map to wasDerivedFrom, wasAttributedTo, wasAssociatedWith and generatedAtTime; the provenance graph store and its query semantics remain external.", "required": false, "source_refs": [ "SRC-010" ] } ], "serviceLayers": { "dimension": { "owner_package_requirements": [ "The adopting Dimension names one accountable steward for the field group and one owner for each host binding profile, recorded with contact and escalation paths.", "The owner package pins the unit code system and version, the observed-property vocabulary, absence and interpretation code sets, and the uncertainty conventions before any host record is created.", "The owner package declares which sibling models supply units, observed properties, procedures, devices, features of interest, provenance and access policy, and forbids forking those vocabularies locally.", "Changes to mandatory fields, value sets or unit pins are versioned and announced through the model registry before host records are migrated, with a stated compatibility class." ], "namespace_guidance": "Field names are carried under a Dimension-scoped namespace such as `.observable-result.*` so the group can be mixed into any host without colliding with host-native fields. Externally governed codes keep their own IRIs and code-system URIs and are never re-minted locally; local extension codes, where a profile permits them, sit in a clearly separated extension namespace and are marked non-interoperable.", "registry_links": [ "Registry entry vr.wm-xct-025 (WM-XCT-025, nav path NAV.XCT.OBS, domain tag XCT.OBS)", "Registered parent WM-MAT-008, which hosts this field group on its property records", "Unit and quantity-kind registries referenced but not owned: UCUM, QUDT and UN/CEFACT Recommendation 20", "Alignment registers for OGC/ISO OMS, W3C SOSA/SSN, OGC SensorThings API and HL7 FHIR Observation" ] }, "canon_and_patch": { "canonicalization_rules": [ "Canonical form orders fields lexicographically by fully qualified field name, preserves the as-reported numeric literal including trailing zeros, and writes unit codes exactly as defined by the pinned code system including case.", "Time values are canonicalised to RFC 3339 with at least whole seconds and an explicit offset; a literal `Z` is preserved rather than rewritten to `+00:00`.", "Absent optional fields are omitted rather than encoded as an explicit null, so that digests stay stable across projections and storage engines.", "Derived fields such as the canonical-unit expression are excluded from the payload digest and recomputed on read." ], "patch_rules": [ "A change to value, unit, uncertainty, measurand, method reference or time anchors is never an in-place patch: it creates a new version linked by supersession with an amendment reason.", "Non-semantic changes such as display labels or narrative interpretation text are applied in place with an updated modification timestamp and the acting agent reference.", "Every patch submits the prior canonical digest so that concurrent modification is detected and rejected rather than silently merged.", "Adding a code-system version pin to a record that lacked one is recorded as a provenance annotation, not as a correction of the value." ], "compatibility_rules": [ "Adding an optional field, adding an interpretation code or adding a projection target is backward compatible.", "Making a field mandatory, narrowing a value set, changing the pinned unit code system or altering canonicalisation is a breaking change requiring a new binding profile major version.", "Consumers must ignore unknown optional fields and must never infer a unit, a coverage factor or a code system when the corresponding field is absent.", "A record created under an earlier profile version keeps that pin; it is re-bound only through an explicit, logged migration." ] }, "artifact_rules": { "identity_priority": [ "Authoritative master-system identifier issued by the system of record that produced the artifact or result, such as the laboratory or acquisition system record identifier.", "Governed global identifier or IRI from a normative registry, used where the object is externally governed, such as unit codes, observed-property codes and procedure identifiers.", "UUID or ULID assigned by the adopting Dimension where neither of the above exists; a content digest may accompany it but never substitutes for it.", "A timestamp, file name, sequence position or the value itself is never used as an identifier." ], "timestamp_rule": "All time values use RFC 3339 with at least whole seconds and an explicit UTC offset or a trailing `Z`; local times without an offset are rejected at creation. Event time (phenomenon time, the time the result applies to the feature of interest) is recorded separately from observation and ingestion time (result time, when the observing activity completed, and the time the record entered the store) whenever the two can differ, and neither may be inferred from the other. Sub-second precision is permitted and preserved when supplied.", "serial_naming_rule": "Serial artifacts such as raw observation records are named `----`, where the sequence is a monotonic counter assigned by the acquiring system. The name carries no date component, no unit, no measured value and no status, and the sequence must not be read as ordering by phenomenon time.", "integrity_rule": "Every artifact carries a cryptographic content digest with its algorithm named; the digest is recorded on the referencing result and re-verified on read. A mismatch marks the evidence unverified and blocks any completeness assertion or promotion to final status, but never alters or withdraws the recorded value, which is corrected only through an explicit supersession." }, "policies": [ "A numeric result is never published without a unit or an explicit dimensionless declaration; a value whose unit cannot be resolved in the pinned code system is quarantined rather than coerced to a nearest match.", "Uncertainty is either stated with its type and, when expanded, its coverage factor and coverage probability, or explicitly declared negligible with a reason; silence about uncertainty is treated as an incomplete result rather than as zero doubt.", "Values below a detection or quantitation limit are recorded with a comparator and the limit value and are never substituted with zero, a half-limit value or a blank at record level; any substitution is a downstream, disclosed transformation.", "The as-reported value and unit are authoritative; canonical-unit expressions, projections and aggregates are derived views that may be recomputed but never overwrite the reported form.", "This model classifies and references access, retention and conformity-decision context but performs no policy evaluation, enforcement, disposition or acceptance decision; those remain with the referenced sibling models and the adopting Dimension." ], "crud": { "read": [ "Reads return the value together with its unit, measurand reference, time anchors and uncertainty statement as one indivisible set; partial reads that drop the unit, the measurand or the absence reason are prohibited.", "Canonical-unit expressions, interpretations and aggregates are returned as clearly labelled derived fields alongside, never in place of, the as-reported value.", "Reads of restricted values return a redaction indicator and a coarsened substitute where the profile permits one, so a consumer can never mistake a redacted result for a complete one." ], "create": [ "Creation requires the measurand reference, a value or a coded absence reason, a unit or dimensionless declaration for quantitative properties, a result time, and either a method reference or an explicit unknown-method marker.", "Creation runs the unit-to-quantity-kind commensurability check and rejects failing records; the verdict, its timestamp and the pinned code-system versions are stored with the record.", "Creation records phenomenon time separately from result time and ingestion time whenever those differ, each in RFC 3339 with an explicit offset." ], "update": [ "Semantic changes create a new version with a supersession link, an amendment reason and an acting agent reference; the superseded version stays retrievable for its retention period.", "Status transitions follow the declared status model, are permitted only to authorised roles, and record the actor and the transition timestamp.", "Re-binding a record to a newer code-system version is an explicit, logged migration and is never applied implicitly on read or write." ], "delete": [ "Result records are not hard-deleted by default. Withdrawal sets status to entered-in-error and retains a tombstone carrying the identifier, the supersession chain, the withdrawal reason and the withdrawing agent, while suppressing the value from ordinary reads.", "Retention periods, legal holds and physical disposition are owned by the adopting Dimension's retention and access-policy models; this model records only the retention class, the disposition decision reference and the tombstone, and never schedules or executes destruction.", "Where a privacy erasure obligation requires removal of the value itself, the value, evidence references and digests are redacted in place while the identifier, supersession chain and redaction reason are preserved for referential integrity; the erasure decision and its execution belong to the referenced access and retention model.", "Supporting evidence artifacts follow their own retention class, which may be shorter or longer than the result's; when evidence is disposed of before the result, the result is marked evidence-unavailable rather than being deleted." ] }, "roles": [ { "name": "Field-group steward", "responsibilities": [ "Maintains the field definitions, mandatory sets and canonicalisation rules", "Owns the alignment and conflict register and decides breaking-change classification", "Approves new binding profiles and their versions" ] }, { "name": "Host record owner", "responsibilities": [ "Accountable for correct population of the group within their record type", "Selects and keeps current the binding profile for that record type", "Resolves collisions between group fields and host-native fields" ] }, { "name": "Measurement authority", "responsibilities": [ "Approves uncertainty conventions, coverage factor defaults and negligibility thresholds", "Approves the pinned unit code system, canonical units and traceability claim rules", "Reviews detection and quantitation limit sources for each property" ] }, { "name": "Result asserter", "responsibilities": [ "Submits and finalises result records and is accountable for the reported value", "States amendment reasons and supersession links for corrections", "Declares absence, censoring and negligible-uncertainty cases explicitly" ] }, { "name": "Interoperability reviewer", "responsibilities": [ "Maintains projection mappings and the declared loss report per target", "Reviews code-system version changes and their effect on existing records", "Runs and records round-trip equivalence tests" ] } ], "access": { "default_rule": "Result fields inherit the host record's access classification by default; the field group grants no visibility of its own and never widens the host's classification.", "scopes": [ "bundle", "layer", "finding", "artifact" ], "exceptions": [ "Raw observation artifacts may carry a stricter classification than the derived value; permission to read a value never implies permission to read the raw capture that backs it.", "Sensitive measurands, such as person-level health properties or location-derived quantities, may be exposed only as an interpretation code or a banded range while the numeric value stays restricted.", "Embargoed results may be withheld until a release time while their existence, measurand and time anchors remain visible.", "Uncertainty budgets and method parameters may be restricted where the method is proprietary, in which case the result must carry a proprietary-method disclosure status." ], "audit_requirements": [ "Every read of a restricted numeric value, every amendment or supersession, and every redaction produces an audit event carrying actor, purpose, scope, record identifier and an RFC 3339 timestamp; this model supplies the event content and neither stores, queries nor evaluates the audit trail.", "Every access decision references the governing policy identifier and version; this model records the reference only and makes no determination.", "Digest verification outcomes for evidence artifacts are recorded against the result so that an unverified evidence chain is visible to any consumer permitted to read the result." ] }, "agents_bootstrap": { "filename": "AGENTS.md", "required_fields": [ "Name", "Type", "Specification URL", "Storage type URL", "Interface URL", "Processes URL", "Registry ID", "Version and compatibility class", "Owner and steward contact", "Binding profile URL" ], "read_order": [ "AGENTS.md — Name, Type, Registry ID and the four resource URLs", "Specification URL — scope, boundaries, field definitions and the exclusive artifact rule", "Storage type URL — persistence, canonicalisation and digest rules regardless of engine (file, Git, MongoDB or graph)", "Interface URL — how records are read, created, superseded and projected, including redaction signalling", "Processes URL — creation, completeness assertion, amendment, supersession, withdrawal and migration procedures", "Binding profile URL — the host-specific value kinds, unit pins, code sets and uncertainty conventions", "Referenced sibling model bootstraps for units, observed properties, procedures, devices and access policy" ] } }, "coverage": { "claim": "This audit covers WM-XCT-025 \"Observable Result Fields\" as delivered: its scope and boundary notes, 7 bundles / 16 layers / 25 findings / 100 questions / 3 artifacts / 10 functions, service layers, coverage checklist, declared gaps, omissions, conflicts and regional assumptions, checked against the frozen registry record (vr.wm-xct-025, entry_kind mixin, parent WM-MAT-008, status candidate, review_state boundary-review-required), the frozen relationship contract (empty) and the frozen legacy source (none registered). It is a no-tools desk audit: no URL, version pin, normative-status claim or external vocabulary was verified live, the paywalled ISO/IEC 17025 clause remains unverified by design, and the two self-declared gaps (cross-domain limit determination, measurement scale type) were not closed. No claim of universal or domain-complete coverage is made, and single-provider mode means no independent corroboration of the model's structure exists.", "confidence": "medium", "checklist": [ { "dimension": "identity", "status": "covered", "notes": "Identity priority names the authoritative master-system identifier first, then governed IRIs, then Dimension-assigned UUID/ULID; value equality for deduplication is defined over value, unit and precision. As a mixin the group has no standalone record identity — it inherits the host's, which is stated in the attachment contract." }, { "dimension": "lifecycle", "status": "covered", "notes": "Result status, permitted transitions, amendment, supersession and withdrawal are modelled (FHIR-aligned), with authority for transitions referenced to the access model. The lifecycle of referenced methods, devices and unit codes is explicitly excluded." }, { "dimension": "relationships", "status": "covered", "notes": "References to feature of interest, procedure, observer, organisation, calibration record, series, reference range and prior values are all typed and bounded; fourteen composition links state what each target owns." }, { "dimension": "temporal", "status": "covered", "notes": "Phenomenon time, result time and ingestion time are separate fields with an RFC 3339 offset requirement; validity windows and aggregation periods are distinguished from instantaneous readings." }, { "dimension": "provenance", "status": "covered", "notes": "Derivation, correction, asserting agent and generation time align to PROV-O; conversion provenance and code-system version pins are recorded per record. The provenance graph store remains external." }, { "dimension": "ownership", "status": "covered", "notes": "Host record owner, responsible organisation, asserting agent and field-group steward are distinguished, and the host owns the record while this model owns only field semantics." }, { "dimension": "validation", "status": "covered", "notes": "Commensurability checking, reporting completeness, round-trip equivalence and evidence digest verification are defined as functions whose verdicts are stored with the record." }, { "dimension": "access", "status": "covered", "notes": "Sensitivity classification, redaction signalling, disclosure basis reference and four scope levels are defined; evaluation, enforcement and audit-trail storage are explicitly delegated to the referenced access model." }, { "dimension": "retention and deletion", "status": "covered", "notes": "Default is no hard delete: withdrawal produces a tombstone with identifier, supersession chain and reason. Retention periods, legal hold, erasure execution and physical disposition are owned by the adopting Dimension's retention and access-policy models; evidence retention may diverge from result retention." }, { "dimension": "interoperability", "status": "covered", "notes": "Alignments to OMS, SOSA/SSN, SensorThings, FHIR, UCUM, QUDT and PROV-O are recorded as mappings with a conflict register and per-target declared loss; no conformance is claimed without evidence." }, { "dimension": "units and dimensionality", "status": "covered", "notes": "Unit code plus code system plus version pin, quantity kind, dimension vector and offset-unit handling are modelled; the unit registry itself is referenced, not reproduced." }, { "dimension": "uncertainty statement", "status": "covered", "notes": "GUM components, Type A/B evaluation, distribution, degrees of freedom, combined and expanded uncertainty, coverage factor and coverage probability are all fields, with an explicit negligibility declaration." }, { "dimension": "limits and censoring", "status": "gap", "notes": "Only a US Clean Water Act primary source (EPA MDL Revision 2) was verifiable live for how a detection limit is determined. Cross-domain limit conventions (IUPAC, ISO 11843, clinical limit of blank/detection/quantitation) were not verified against primary text, so the limit-determination semantics are marked a gap rather than presented as canonical." }, { "dimension": "measurement scale type", "status": "gap", "notes": "VIM covers nominal properties and OMS requires the scale to suit the property, but no verified primary source supplies a cross-domain field for scale type (nominal, ordinal, interval, ratio) or for permitted arithmetic on ordinal codes. The property-class field is provisional." }, { "dimension": "security", "status": "covered", "notes": "Content digests with named algorithms, payload digests over canonical form, concurrency detection via prior-digest submission and evidence verification outcomes are specified; key management and transport security are out of scope." }, { "dimension": "process and events", "status": "covered", "notes": "Creation, completeness assertion, canonical expression, supersession, projection, comparability assessment and evidence verification are functions with preconditions and effects; the observing activity itself is not modelled here." } ], "known_omissions": [ "Numerical propagation of distributions through a measurement model (GUM Supplements 1 and 2) is deliberately excluded; only the resulting statement is carried.", "Correlation and covariance between components or between multiple output quantities are not modelled, so multivariate results are carried as components without a covariance structure.", "Spatial reference semantics for geometry-valued results (CRS, axis order, positional uncertainty) are not modelled and would need a geospatial sibling model.", "Reference material and certified value semantics are referenced through traceability but not modelled as fields.", "Rounding and significant-figure rules are named but no normative rounding algorithm is mandated, because no single cross-domain primary source was verified.", "Currency, monetary and legal-metrology-specific value semantics are not addressed.", "Localisation of decimal separators, digit grouping and unit rendering for human display is left to presentation layers." ], "conflicts": [ "SOSA offers hasSimpleResult, a bare literal with no unit, while OMS requires the result scale to be consistent with the observed property. This model forbids a bare numeric literal for quantitative properties and requires a unit or an explicit dimensionless declaration.", "SensorThings binds unitOfMeasurement at the Datastream, not at the Observation, so a projected result may lose its per-record unit. This model records the unit per result and declares the loss in the SensorThings projection.", "SOSA types resultTime as xsd:dateTime, which permits local times with no offset. This model requires an explicit offset or Z and rejects offset-free values, diverging from what SOSA alone allows.", "FHIR carries a comparator on Quantity but has no first-class GUM uncertainty structure, while GUM requires the uncertainty type, coverage factor and coverage probability to be stated. Mapping to FHIR therefore requires extensions and is declared lossy.", "UCUM, QUDT and UN/CEFACT Recommendation 20 disagree on codes and coverage for the same units, so no single code system can be assumed; the code system and version must be pinned per record.", "VIM treats a measurement result as a set of quantity values plus all relevant information, whereas most implementation schemas carry a single value plus attributes. This model follows the implementation shape and treats the fuller VIM sense as satisfied by the field group as a whole.", "ISO/IEC 17025 clause 7.8 reporting requirements could not be verified against primary text (paywalled), so no claim about test report conformance is made anywhere in this model." ], "regional_assumptions": [ "Detection and quantitation limit semantics are grounded in a United States Clean Water Act procedure; other jurisdictions and disciplines use different determinations and reporting thresholds.", "The SI is internationally adopted, but legal metrology, mandatory units and permitted non-SI units are set regionally, so a profile may need region-specific unit pins.", "The privacy erasure path assumes some adopting Dimensions operate under a GDPR-like regime with a right to erasure; where no such obligation exists, the tombstone-only path applies.", "UCUM and LOINC-style vocabularies are strongest in North American healthcare; other regions and domains may pin different observed-property vocabularies.", "Decimal separator, digit grouping and unit symbol rendering conventions vary by locale and are treated as presentation, never as record semantics." ], "adversarial_checks": [ "Boundary test against the composition ledger: every bundle, layer, finding and function was compared with each relation rationale. Method authoring, device calibration execution, unit code minting, conformity decisions, provenance graph storage, series storage and access enforcement each appear only as a reference, an out_of_scope entry or a boundary note, never as a local capability. The comparability function explicitly disclaims acceptance-decision ownership and the audit requirement explicitly disclaims trail storage and evaluation.", "Counterexample search for a value that the field group cannot express: a qualitative culture identification (a nominal property with no unit), a censored trace result below a detection limit, an aggregated hourly mean, a blood-pressure pair as components, and a waveform held externally were each traced through the fields. All are expressible, but the nominal case relies on the property-class field, which is marked a gap for lack of a verified primary source.", "Normative-versus-practice separation: coverage factor k=2 for roughly 95 percent confidence is common practice and is recorded as a profile default, not as a requirement; the GUM requirement is that the factor and the level of confidence be stated, which is what the model mandates.", "Artifact-rule audit: exactly two findings declare artifacts (three artifacts total, with inline_only_rationale null) and the remaining twenty-three declare an empty artifacts array with a substantive rationale; no finding populates both. Artifacts were rejected where the object is owned by a referenced model, notably calibration certificates and access policies.", "Identity discipline: no identifier in this model contains a date-like component, no timestamp is used as an identifier, and the serial naming rule excludes dates, units, values and status from artifact names. The value itself is explicitly excluded from being an identifier.", "Duplication check against the parent: WM-MAT-008 owns the record type, its subject and its lifecycle; this model adds only result fields and their validation, and does not restate host identity, host access class or host retention.", "Falsifiability check: two checklist dimensions are recorded as gaps and one alignment (ISO/IEC 17025) is recorded as unverifiable rather than asserted, so no claim of complete or universal coverage is made." ] }, "researchAdjudication": { "providerMode": "single-provider-waiver", "activeProviders": [ "claude" ], "waivedProviders": [ "grok" ], "providerPolicy": { "contract_version": "1.0.0", "mode": "single-provider-waiver", "effective_at": "2026-08-29T09:06:27Z", "scope": "Queued subject-model research from WM-XCT-013 onward", "active_providers": [ "claude" ], "waived_providers": [ { "provider": "grok", "authorized_by": "repository owner", "authorized_at": "2026-08-29T09:06:27Z", "reason": "The repository owner explicitly instructed the research queue to continue without Grok after repeated structured-output failures." } ], "review_rule": "Claude-only results require a separate no-tools adversarial audit and remain reviewable drafts with a visible single-provider hold." }, "boundaryDecision": { "entry_kind": "mixin", "status": "accepted", "rationale": "Two distinct axes must not be collapsed. The frozen registry classifies the RECORD plane (record_plane world-model, registry_id vr.wm-xct-025, origin claude-plus-gap-audit, status candidate, review_state boundary-review-required); a record-plane value never determines the subject-model kind. On the SUBJECT axis the registry's 'mixin' is coincidentally also a valid schema enum value, and it is independently the most defensible kind: the subject declares no standalone record, defines an attachment point, cardinality, mandatory subset and namespace per host, is hosted by registered parent WM-MAT-008 plus any adopting host, is governed by a versioned binding profile artifact, and carries a namespace guidance (.observable-result.*) whose only purpose is collision-free embedding. 'entity' was the serious rival, because the pack carries a status lifecycle, supersession, tombstone, full CRUD and retention language that reads like an owned record; it is rejected because those verbs operate on the host record the group is embedded in, and the pack's own duplication check states WM-MAT-008 owns the record type, subject and lifecycle while this model adds only result fields and their validation. 'pattern' is rejected as too weak: the group fixes mandatory fields, canonicalisation, digest scope and blocking validation gates, not merely a recurring shape. 'aggregate' is rejected because a mixin has no aggregate root of its own. Acceptance is conditional: the synthesizer must restate every record-lifecycle verb (create, supersede, withdraw, tombstone, retain, delete) as a host-scoped obligation the group qualifies, and must state explicitly whether a field-group instance is separately identified and versioned or shares the host identifier." }, "decisions": [ { "concept": "Entry kind 'mixin' on the subject axis", "disposition": "accepted with condition", "rationale": "Scope statement, attachment-contract finding, binding-profile artifact and namespace guidance are all coherent only under a mixin reading, and the frozen registry value happens to be a valid schema kind. Condition: record-plane and subject-plane classification must be stated separately in the published spec so the coincidence is not read as derivation." }, { "concept": "Aggregate root of the subject model", "disposition": "accepted as the host record, not the field group", "rationale": "A mixin has no root of its own. The pack states the host owns record identity, access class and retention, but crud.delete, patch_rules and supersede-result speak of 'result records' with their own identifier and supersession chain. The synthesizer must rewrite those as host-scoped obligations rather than an independent record lifecycle." }, { "concept": "Identity of a field-group instance", "disposition": "deferred", "rationale": "The checklist says the group inherits host identity, yet tombstones retain 'the identifier, the supersession chain' and patch rules version the value independently. No question in the 100 asks whether the group instance is separately identified or who mints that identifier. This must be answered before the identity dimension can stay marked covered." }, { "concept": "Claim of 'fourteen composition links' in the relationships checklist", "disposition": "rejected as unsupported", "rationale": "The frozen relationship contract is an empty array and the registry record has empty contains_ids, aligned_model_ids and relations_ref. Eight boundary notes exist, not fourteen typed links. The count must be deleted or the links materialised in the contract; an uncorroborated count is exactly the kind of claim a waived second provider would have caught." }, { "concept": "Parent relation to WM-MAT-008", "disposition": "accepted as registry-asserted only", "rationale": "parent_ids names WM-MAT-008 and the scope statement calls it the registered parent host, but the relationship contract carries nothing. The hosted-by relation is the model's single load-bearing composition claim and must be written into the contract before status advances past candidate." }, { "concept": "access.scopes = bundle / layer / finding / artifact", "disposition": "rejected as subject-plane scopes", "rationale": "Those four are research-record planes describing this world-model document, not planes of the modelled result data. Subject-plane scopes should be host record, field-group instance, individual field or value, and evidence artifact. As written the access section grants scopes over the specification rather than over results." }, { "concept": "Indivisible read set versus restricted uncertainty", "disposition": "accepted with amendment", "rationale": "crud.read requires value, unit, measurand, time anchors and uncertainty to return as one indivisible set, while access.exceptions permits uncertainty budgets and method parameters to be restricted for proprietary methods. The indivisible set must be redefined to include an explicit restricted-uncertainty marker so the two rules stop contradicting each other." }, { "concept": "Privacy erasure in place versus the never-in-place patch rule", "disposition": "accepted with a required named exception", "rationale": "patch_rules state a change to value is never an in-place patch, yet crud.delete redacts the value, evidence references and digests in place under an erasure obligation. The exception must be named in patch_rules, and the fate of the pre-erasure canonical digest decided explicitly: retaining it preserves integrity verification but may itself be the identifying residue erasure targets." }, { "concept": "Serial artifact naming embedding an observed-property code and sequence", "disposition": "accepted with condition", "rationale": "identity_priority forbids sequence position and governed codes from acting as identifiers, and forbids identifiers encoding pinned code-system versions, yet serial_naming_rule builds names from host id, observed-property code and sequence. artifact_rules must state normatively that this serial name is a display and ordering label and never an identifier, and must pin or slot-key the code component." }, { "concept": "Artifact discipline: 3 artifacts on 2 findings, 23 inline-only rationales", "disposition": "accepted", "rationale": "Recounted against the delivered structure: supporting-evidence-records carries two artifacts, alignment-and-code-system-versioning carries one, both with null inline_only_rationale, and the remaining twenty-three findings carry empty arrays with substantive rationales. No finding populates both. The self-reported adversarial artifact audit is accurate." }, { "concept": "SRC-012 JCGM publication index cited as a tier-1 primary source", "disposition": "rejected in that role", "rationale": "A publication index page accessed on 3 September 2026 is a locator, not normative text, yet it backs clause-level claims about uncertainty reporting and about conformity assessment being a separate discipline. Replace with clause-anchored citations to JCGM 106:2012 and the relevant GUM documents, or downgrade its primary_source flag." }, { "concept": "SRC-008 QUDT (authority tier 3) anchoring a blocking commensurability check", "disposition": "accepted with condition", "rationale": "validate-unit-quantity-consistency rejects records at creation on the strength of a dimension vector, and the highest-authority backing for that rejection should be the SI Brochure and VIM. QUDT should be cited as the computable encoding of that requirement, with the dimension-vector field marked vocabulary-dependent and version-pinned." }, { "concept": "bind-result-fields citing the FHIR Observation resource page for a profiling capability", "disposition": "rejected as source support", "rationale": "Attaching a versioned field group to a host type is a profiling and conformance mechanism, not something the Observation resource page establishes. Either cite FHIR conformance and profiling material, or declare the binding mechanism Vercy-internal and make no external support claim for it." }, { "concept": "record-canonical-expression without a refusal precondition", "disposition": "accepted with condition", "rationale": "The model asks q-canon-refuse and q-qk-offset-units, and policies forbid coercion, but the function itself carries no precondition. Offset and non-ratio scales such as degrees Celsius, and ordinal or nominal properties, are precisely where a silent conversion corrupts arithmetic. The refusal condition must be stated on the function, not only asked in a question." }, { "concept": "Missing code-system migration and redaction-emission functions", "disposition": "deferred", "rationale": "crud.update and compatibility_rules both mandate an explicit logged migration for a code-system re-pin, and crud.read mandates redaction indicators and coarsened substitutes, but neither obligation has a corresponding function among the ten. Single-provider mode forbids adding functions here, so this is logged for the next revision rather than patched now." }, { "concept": "Retention questions phrased as durations", "disposition": "accepted with condition", "rationale": "q-state-history and q-evid-retention ask how long records must be kept, while the model delegates retention periods, legal holds and disposition entirely to the adopting Dimension and records only a retention class. Restate both as retention-class selection questions so the model does not appear to set periods it disclaims owning." }, { "concept": "ISO/IEC 17025 clause 7.8 recorded as unverifiable rather than asserted", "disposition": "accepted verbatim", "rationale": "Declining to claim test-report conformance because the primary text is paywalled is correct falsifiability discipline and is the strongest single signal that the pack was not padded. Preserve the disclaimer unchanged in every published artifact rather than softening it to an alignment claim." } ], "publicationHolds": [ "Live source and version verification hold: none of the thirteen source URLs, version pins or status claims were checked by this audit. Before publication, verify live and date-stamp at minimum UCUM 2.2 dated 17 June 2024, FHIR R5 Observation and the claim that Observation has been normative since R4, OGC 20-082r4 / OMS 3.0 and its ISO 19156:2023 alignment, SSN/SOSA as still the current Recommendation, QUDT 2.1 (whose stated date is a site-generation date, not a release date), SensorThings 1.1, and the JCGM documents cited through the publication index.", "Single-provider hold: publish only as a reviewable draft carrying a visible notice that independent second-provider review was waived by the repository owner on 2026-08-29T09:06:27Z after repeated Grok structured-output failures, that this Claude-only result received a no-tools adversarial audit rather than corroboration, and that entry_kind, boundary and artifact decisions rest on a single provider's structure with no cross-check.", "Relationship hold: the checklist claim of fourteen composition links is unsupported by the frozen relationship contract, which is empty, and the WM-MAT-008 hosting relation exists only in the registry record. Either materialise the links and the parent relation in the contract or remove the count before publication.", "Aggregate-root hold: record-lifecycle language (create, supersede, withdraw, tombstone, retain, hard-delete) must be rewritten as host-scoped obligations, and the question of whether a field-group instance carries its own identifier and version must be answered, before the identity and lifecycle checklist dimensions may remain marked covered.", "Registry-state hold: the frozen record is status candidate with review_state boundary-review-required. Record this adversarial audit as the boundary review, keep status at candidate, and do not advance review_state until the source-verification, relationship and aggregate-root holds are cleared.", "Independent second-provider review was explicitly waived by the repository owner; this Claude-only result remains a reviewable draft." ], "deferredResearch": [ "Close the declared limits-and-censoring gap: verify cross-domain detection and quantitation limit determination against primary text from IUPAC, ISO 11843 and clinical limit-of-blank / detection / quantitation conventions, so the semantics do not rest solely on a United States Clean Water Act procedure.", "Close the declared measurement-scale-type gap: find a verifiable cross-domain primary source for scale type (nominal, ordinal, interval, ratio) and for permitted arithmetic on ordinal codes; the nominal-property counterexample in the pack's own adversarial check depends on this provisional field.", "Obtain licensed access to ISO/IEC 17025 clause 7.8 to confirm that the deliberate non-claim about test-report conformance remains correct and that no mandatory reporting element is silently missing from the mandatory descriptor set.", "Decide whether correlation and covariance between uncertainty components or output quantities belong in this field group at all, or wholly in the producing measurement system, and record the decision rather than leaving multivariate results as components with no covariance structure.", "Re-verify whether SSN/SOSA has moved beyond the 2017 Recommendation in a way that changes resultTime typing, since the model's divergence on offset-free timestamps is stated as a conflict against that specific version.", "Resolve the two missing functions in a later revision: an explicit code-system re-pin migration function required by crud.update and compatibility_rules, and a redaction-emission function required by crud.read, neither of which could be added under single-provider rules.", "Determine whether a normative rounding algorithm can be sourced at all, or whether the current 'named but not mandated' position is permanent; the pack leaves rounding unresolved for lack of a verified cross-domain source while still requiring trailing-zero precision to survive round trips." ] }, "statistics": { "sources": 13, "bundles": 7, "layers": 16, "findings": 25, "questions": 100, "artifacts": 3, "functions": 10 } }