# Vercy AI instruction - YAML 1.2 (JSON-compatible) { "vercy": "1.0-draft", "publication": { "status": "published", "adjudicationStatus": "reviewable-draft", "publishableCanonical": false, "generatedAt": "2026-08-23T03:14:41Z", "synthesisSha256": "8672e6ca2404422f41ebdae9e319b5767fbbfeb6b117c1a707a05ff6f739cf9f", "providerMode": "dual-provider", "providers": [ "Claude", "Grok" ], "waivedProviders": [] }, "metaModel": { "id": "WM-XCT-020", "registryId": "vr.wm-xct-020", "name": "Classification Binding", "version": "0.3.0-research.1", "previousVersions": [], "entryKind": "pattern", "family": "World Models", "category": "Cross-cutting context", "industry": [ "Cross-industry" ], "domain": [ "XCT.CLS" ], "tags": [ "classification", "binding", "xct.cls" ], "status": "published" }, "canonicalUrl": "https://ver.cy/models/wm-xct-020-classification-binding/", "sourceUrl": "https://github.com/ver-cy/world-models/tree/feat/mega-model-registry/research/runs/wm-xct-020", "model": { "registry_id": "vr.wm-xct-020", "model_id": "WM-XCT-020", "name": "Classification Binding", "entry_kind": "pattern", "purpose": "Provide a format-neutral, reusable pattern for the governed act of binding a subject to one or more terms drawn from an identified, versioned classification scheme, carrying the authority, method, evidence, strength, validity and lifecycle of that assertion so that an agent can create, inspect, validate, migrate and retire bindings without inspecting the classified subject's own model.", "scope_statement": "This model covers the binding relationship itself: the reified assertion 'subject S is classified as term T of scheme C at version V, for role R, asserted by agent A at time t, valid over interval I, with strength/obligation B and evidence E'. It covers both the design-time binding specification (which scheme and value space may be used in a given slot, at what conformance strength) and the instance-time binding assertion (which term was actually applied, by whom, on what basis). It does NOT define the internal structure, terms, hierarchy, publication or maintenance of any classification scheme, nor the mapping tables between schemes; those belong to composable sibling models that this pattern references. The pattern is storage- and interface-neutral: RDF/SKOS triples, FHIR Coding/CodeableConcept, SDMX code references, JSON documents, Markdown front matter, MongoDB documents and MCP tool payloads are projections of the same semantics.", "in_scope": [ "Reified binding assertions linking a subject (or a specific part/aspect of a subject) to one or more scheme terms", "Design-time binding declarations for a slot or context, including permitted value space and conformance strength (required, extensible, preferred, example)", "Identity of the binding, of the referenced scheme, of the scheme version and of the term, including canonical URI and notation references", "Assignment provenance: responsible agent, method or algorithm and version, coding index or rule applied, and assignment time", "Authority to assert, jurisdiction and legal or administrative binding force, including validity periods, annulment, revocation and appeal", "Temporal frames: subject-state/event time, assertion time, observation or ingestion time, and validity interval, all in RFC 3339", "Lifecycle states of a binding and permitted transitions, including supersession, correction, dispute, retraction and withdrawal", "Confidence, uncertainty and coding quality measurement (verification, dual coding, agreement, error rate, acceptance thresholds)", "Validation rules that decide whether a binding is well-formed and conformant against its declared specification", "Handling of residual, unclassifiable, deprecated and uncoded cases, including text fallback and candidate-term feedback", "Bindings derived from cross-scheme mappings or from scheme-version correspondence, and the marking of their derived status", "Access, sensitivity, retention and erasure of bindings, including bindings that are themselves sensitive personal data" ], "out_of_scope": [ "The internal content and structure of a classification scheme: its terms, labels, hierarchy, levels, notation patterns, publication status and maintenance workflow", "Authoring and governance of correspondence tables or concept mappings between schemes or between scheme versions", "The subject entity's own domain model, attributes and lifecycle", "Party, agent and organisation identity management beyond referencing an agent identifier", "Training, evaluation and deployment of the machine-learning models that may produce automated bindings", "Access-control policy evaluation engines and credential management", "Free-text folksonomy tagging where no governed scheme or term identifier exists", "Physical security-marking rendering rules (banner lines, portion marks) for confidentiality labels", "Full-text search indexing and relevance ranking derived from classifications", "Statistical estimation or aggregation performed on classified data" ], "boundary_notes": [ { "neighbor": "Classification Scheme / Code List model (sibling)", "distinction": "The scheme model owns terms, notations, levels, coverage properties and version publication (skos:ConceptScheme, xkos:ClassificationLevel, SDMX Codelist, FHIR CodeSystem). Classification Binding owns only the reference to a scheme term plus the assertion wrapped around it; it must never redefine or cache scheme semantics as authoritative.", "source_refs": [ "SRC-001", "SRC-004", "SRC-006", "SRC-012" ] }, { "neighbor": "Concept Mapping / Correspondence model (sibling)", "distinction": "Mapping relations between terms in different schemes or scheme versions (skos:exactMatch/closeMatch/broadMatch, xkos:ConceptAssociation, xkos:Correspondence, ISO 25964-2 equivalence types) belong to the mapping model. Classification Binding only records that a given binding was derived through such a mapping and with what fidelity.", "source_refs": [ "SRC-001", "SRC-006", "SRC-013" ] }, { "neighbor": "Ontological typing (rdf:type / owl:Class membership)", "distinction": "Binding a subject to a scheme term is subject indexing or categorisation, not formal class membership. The SKOS Primer explicitly directs subject indexing through dcterms:subject to a skos:Concept rather than treating concepts as OWL classes, and notes OWL-DL prevents treating SKOS concepts as classes. Bindings therefore carry no entailment about the subject's ontological type.", "source_refs": [ "SRC-001", "SRC-014", "SRC-015" ] }, { "neighbor": "Generic Provenance / Assertion model (mix-in)", "distinction": "PROV-O supplies the general vocabulary for who generated what, when and using which plan. Classification Binding specialises that pattern for classification and adds classification-specific facets (strength, role, rank, residual handling); it must not fork a competing generic provenance vocabulary.", "source_refs": [ "SRC-007" ] }, { "neighbor": "Coded property value (a single element's coded value)", "distinction": "A coded value fills an attribute slot of the subject (e.g. a unit of measure); a classification binding categorises the subject or a defined aspect of it. Both may serialise as a FHIR Coding, so the distinction is carried by the declared binding role and slot, not by the wire format.", "source_refs": [ "SRC-002", "SRC-003" ] }, { "neighbor": "Security marking / confidentiality label", "distinction": "Confidentiality labelling is a specialisation of this pattern (a term from a governed marking scheme bound to a resource) but adds enforcement, propagation and downgrade rules. Model it as an EXTEND of Classification Binding rather than duplicating the base pattern.", "source_refs": [ "SRC-002", "SRC-010" ] }, { "neighbor": "Administrative decision / ruling model", "distinction": "Where a binding has legal effect (for example an EU Binding Tariff Information decision under the Union Customs Code), the decision document, its holder, its appeal route and its EU-wide force belong to a decision model. Classification Binding references that decision as the authority for the binding and mirrors only its validity window and status.", "source_refs": [ "SRC-009" ] }, { "neighbor": "Metadata registry item classification (ISO/IEC 11179)", "distinction": "ISO/IEC 11179 classifies registry items (data elements, value domains, concepts) using registered classification schemes. That is an application of this pattern to metadata items; the registry's own administration model (registration status, stewardship) is out of scope here.", "source_refs": [ "SRC-011" ] } ] }, "sources": [ { "id": "SRC-001", "title": "SKOS Simple Knowledge Organization System Reference", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/skos-reference/", "version_or_date": "W3C Recommendation, 18 August 2009 (REC-skos-reference-20090818)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Normative vocabulary for concepts, concept schemes, skos:inScheme, skos:notation, hierarchical relations and mapping relations (exactMatch, closeMatch, broadMatch, narrowMatch, relatedMatch); states that no formal disjointness is declared between skos:Concept and owl:Class and that a concept scheme boundary cannot be closed." }, { "id": "SRC-002", "title": "FHIR R5 — Using Codes in Resources (Terminology Module)", "organization": "Health Level Seven International (HL7)", "url": "https://hl7.org/fhir/terminologies.html", "version_or_date": "FHIR Release 5, v5.0.0, published 26 March 2023", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Defines terminology binding as a design-time rule attaching an element definition to a value set, the four binding strengths (required, extensible, preferred, example) with SHALL-level obligations, and the requirement that bindings to externally defined value sets specify a value set version, expressed as url|version." }, { "id": "SRC-003", "title": "FHIR R5 — Data Types (Coding, CodeableConcept)", "organization": "Health Level Seven International (HL7)", "url": "https://hl7.org/fhir/datatypes.html", "version_or_date": "FHIR Release 5, v5.0.0, 26 March 2023", "source_type": "schema", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Normative structure of an instance-level coded reference: Coding.system, Coding.version, Coding.code, Coding.display, and Coding.userSelected ('Indicates that this coding was chosen by a user directly'); CodeableConcept.coding 0..* plus CodeableConcept.text as the human-language representation, supporting multi-scheme bindings and uncoded text fallback." }, { "id": "SRC-004", "title": "FHIR R5 — CodeSystem Resource", "organization": "Health Level Seven International (HL7)", "url": "https://hl7.org/fhir/codesystem.html", "version_or_date": "FHIR Release 5, v5.0.0, 26 March 2023", "source_type": "schema", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Supplies CodeSystem.status (draft|active|retired|unknown), CodeSystem.versionNeeded signifying that a code system does not commit to concept permanence across versions, caseSensitive and compositional flags, and standard concept properties such as deprecationDate and notSelectable — the basis for deprecated-term and version-drift handling in bindings." }, { "id": "SRC-005", "title": "FHIR R5 — Using Code Systems (canonical code system URIs)", "organization": "Health Level Seven International (HL7)", "url": "https://hl7.org/fhir/terminologies-systems.html", "version_or_date": "FHIR Release 5, v5.0.0, 26 March 2023", "source_type": "registry", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Registry mapping scheme names to canonical URIs (e.g. SNOMED CT http://snomed.info/sct, LOINC http://loinc.org) and the rule that specified URIs SHALL be used in preference to any other identifying mechanism — direct support for URI-first scheme identity in bindings." }, { "id": "SRC-006", "title": "XKOS — An SKOS extension for representing statistical classifications", "organization": "DDI Alliance", "url": "https://rdf-vocabulary.ddialliance.org/xkos.html", "version_or_date": "XKOS specification, published 2014, revised through 2019", "source_type": "ontology", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Adds ClassificationLevel with depth, numberOfLevels, organizedBy and notationPattern; coverage predicates covers, coversExhaustively, coversMutuallyExclusively; version succession via belongsTo, follows, supersedes, variant; and ConceptAssociation/Correspondence for m-to-n mappings used to migrate bindings across scheme versions." }, { "id": "SRC-007", "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 (REC-prov-o-20130430)", "source_type": "ontology", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Generic provenance constructs reused for assignment provenance: Entity, Activity, Agent, wasAttributedTo, wasGeneratedBy, generatedAtTime, invalidatedAtTime, used, wasDerivedFrom, Plan/hadPlan and the qualified-influence pattern for recording role and detail of an attribution." }, { "id": "SRC-008", "title": "Web Annotation Data Model", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/annotation-model/", "version_or_date": "W3C Recommendation, 23 February 2017", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Normative reified assertion pattern (Annotation with body and target), purpose/motivation values including tagging, classifying, identifying and assessing, SpecificResource for binding to a part or aspect of a target, and the explicit separation of creator/created (intellectual agent) from generator/generated (software serialisation)." }, { "id": "SRC-009", "title": "EU Binding Tariff Information (BTI)", "organization": "European Commission, Directorate-General for Taxation and Customs Union", "url": "https://taxation-customs.ec.europa.eu/customs/common-customs-tariff-cct/tariff-classification-goods/eu-binding-tariff-information-bti_en", "version_or_date": "Union Customs Code Regulation (EU) No 952/2013, Articles 22–37, applicable from 1 May 2016; page accessed 2026-08-23", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Real-world normative case of a legally binding classification decision: binding on all EU customs administrations and on the holder, valid throughout the EU, generally valid for three years, annulled where based on inaccurate or incomplete information, revoked or ceasing to be valid on nomenclature change, CJEU rulings or WCO decisions — grounds authority, validity window and revocation semantics." }, { "id": "SRC-010", "title": "Regulation (EU) 2016/679 (General Data Protection Regulation)", "organization": "European Parliament and Council of the European Union", "url": "https://eur-lex.europa.eu/eli/reg/2016/679/oj/eng", "version_or_date": "27 April 2016; CELEX 32016R0679; ELI http://data.europa.eu/eli/reg/2016/679/oj", "source_type": "legislation", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Article 4(4) defines profiling as automated processing evaluating personal aspects; Article 9(1) prohibits processing of special categories (racial or ethnic origin, political opinions, religion, trade union membership, genetic and health data, sex life, criminal convictions) absent a condition; Article 22 constrains decisions based solely on automated processing; Article 16 grants rectification — all directly applicable when the subject of a binding is a natural person." }, { "id": "SRC-011", "title": "ISO/IEC TR 11179-2:2019 Information technology — Metadata registries (MDR) — Part 2: Classification", "organization": "ISO/IEC JTC 1/SC 32", "url": "https://www.iso.org/standard/74570.html", "version_or_date": "Edition 2, published 2019", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Per the ISO catalogue abstract, any metadata item can be made a Classifiable_Item so that it can be classified, and the document describes registering classification schemes and using them to classify registered items in a metadata registry; ISO/IEC 11179-3:2023 Clause 10 carries the classification metamodel. Establishes classification as a separable relation over arbitrary registered items." }, { "id": "SRC-012", "title": "SDMX Standards (Section 2 — Information Model)", "organization": "SDMX (Statistical Data and Metadata eXchange) Sponsoring Institutions", "url": "https://sdmx.org/standards/", "version_or_date": "SDMX 3.1, May 2025 (SDMX 3.0, September 2021)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Statistical information model in which Codelists/Codes enumerate concept representations, Hierarchy is a maintainable artefact referencing codes from one or more codelists, and Hierarchy Association allows a hierarchy to be attached to any identifiable artefact — evidence that the scheme, its hierarchy and the association to a subject are separately maintained artefacts." }, { "id": "SRC-013", "title": "ISO 25964 — the international standard for thesauri and interoperability with other vocabularies", "organization": "National Information Standards Organization (NISO), secretariat for ISO TC46/SC9", "url": "https://www.niso.org/schemas/iso25964", "version_or_date": "Part 1 published 2011; Part 2 published 2013; NISO-hosted data model and XML schema", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Part 2 defines equivalence mappings with exact, inexact and partial refinements plus hierarchical and associative mappings — the fidelity vocabulary needed when a binding is derived from a cross-vocabulary mapping rather than asserted directly." }, { "id": "SRC-014", "title": "DCMI Metadata Terms", "organization": "Dublin Core Metadata Initiative (DCMI)", "url": "https://www.dublincore.org/specifications/dublin-core/dcmi-terms/", "version_or_date": "2020-01-20", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "dcterms:subject ('a topic of the resource') with the recommendation to use non-literal values from controlled vocabularies; the Vocabulary Encoding Scheme concept (an enumerated set of resources used to categorise values, e.g. DDC, LCSH, MeSH) and dcam:memberOf — the minimal cross-domain form of a classification binding and its declared value space." }, { "id": "SRC-015", "title": "SKOS Simple Knowledge Organization System Primer", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/skos-primer/", "version_or_date": "W3C Working Group Note, 18 August 2009", "source_type": "standard", "primary_source": true, "authority_tier": 2, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "Non-normative but first-party guidance separating subject indexing (link a resource to a skos:Concept via dcterms:subject) from formal class membership, noting OWL-DL prevents treating SKOS concepts as OWL classes; also documents skos:notation as a syntax-encoded literal and the documentation notes (scopeNote, historyNote, changeNote) used to justify coding decisions." }, { "id": "SRC-016", "title": "Best Practice Guidelines for Developing International Statistical Classifications", "organization": "United Nations Statistics Division / Expert Group on International Statistical Classifications", "url": "https://unstats.un.org/unsd/classifications/bestpractices/Best_practice_Oct_2022.pdf", "version_or_date": "October 2022 edition", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T09:00:00Z", "relevance": "States that mutual exclusivity is mandatory for all statistical classifications and that an international statistical classification should be exhaustive for all values the variable can take for the primary units it classifies — the source of the exhaustiveness and mutual-exclusivity obligations that constrain binding multiplicity." }, { "id": "SRC-017", "title": "FHIR R5 Using Codes in Resources (Terminologies)", "organization": "HL7 International", "url": "https://hl7.org/FHIR/terminologies.html", "version_or_date": "FHIR v5.0.0, Release 5 STU, current published version accessed 2026-08-23", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T16:12:00Z", "relevance": "Normative separation of code system, value set and binding; system-plus-code uniqueness; binding strengths required, extensible, preferred and example; URI allocation for systems." }, { "id": "SRC-018", "title": "FHIR R5 Datatypes — Coding and CodeableConcept", "organization": "HL7 International", "url": "https://hl7.org/fhir/R5/datatypes.html", "version_or_date": "FHIR v5.0.0, Release 5, current published version accessed 2026-08-23", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T16:20:00Z", "relevance": "Normative instance shape for a coded binding: system, version, code, display, userSelected, and CodeableConcept coding list plus user text." }, { "id": "SRC-019", "title": "ISO/IEC 11179-1:2023 Information technology — Metadata registries (MDR) — Part 1: Framework", "organization": "ISO/IEC JTC 1/SC 32", "url": "https://www.iso.org/obp/ui/en/?_escaped_fragment_=iso:std:78914:en", "version_or_date": "ISO/IEC 11179-1:2023 (fourth edition)", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T16:18:00Z", "relevance": "Normative definitions of classification scheme and classification scheme item, sourced from ISO/IEC 11179-3:2023, and registry identification, provenance and quality goals for classified items." }, { "id": "SRC-020", "title": "DCMI Metadata Terms", "organization": "Dublin Core Metadata Initiative (DCMI)", "url": "https://www.dublincore.org/specifications/dublin-core/dcmi-terms/2020-01-20/", "version_or_date": "DCMI Recommendation, Date Issued 2020-01-20", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T16:14:00Z", "relevance": "Authoritative subject and type properties, vocabulary encoding schemes, and recommended practice to identify subjects by URI from a controlled vocabulary." }, { "id": "SRC-021", "title": "Data Catalog Vocabulary (DCAT) - Version 3", "organization": "World Wide Web Consortium (W3C)", "url": "https://www.w3.org/TR/vocab-dcat-3/", "version_or_date": "W3C Recommendation 22 August 2024", "source_type": "standard", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T16:16:00Z", "relevance": "Normative thematic classification of catalogued resources via dcat:theme (subproperty of dcterms:subject), catalog themeTaxonomy, distinction from dcterms:type and dcat:keyword, and SKOS concept-scheme usage notes." }, { "id": "SRC-022", "title": "ISO 19115-1 schema documentation for MD_Keywords and MD_KeywordClass (mri 1.3.0)", "organization": "ISO/TC 211 Geographic information/Geomatics", "url": "https://schemas.isotc211.org/19115/-1/mri/1.3.0/mri", "version_or_date": "ISO 19115-1 mri schema 1.3.0, schema repository accessed 2026-08-23", "source_type": "schema", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T16:05:00Z", "relevance": "Normative geospatial metadata structures for keywords, thesaurus citation, keyword type, keyword class bound to an ontology, and topic-category codes used as high-level classification." }, { "id": "SRC-023", "title": "Generic Statistical Information Model (version 2.0): User Guide", "organization": "United Nations Economic Commission for Europe (UNECE)", "url": "https://unece.org/statistics/publications/generic-statistical-information-model-version-20-user-guide", "version_or_date": "GSIM version 2.0, published November 2024", "source_type": "public-authority", "primary_source": true, "authority_tier": 1, "accessed_at": "2026-08-23T16:08:00Z", "relevance": "International statistical reference model for Statistical Classification, Classification Item, levels, series, versions and correspondence, including assignment of mutually exclusive categories to variables." } ], "structure": { "bundles": [ { "id": "binding-foundation", "name": "Binding Foundation, Boundary and Identity", "description": "Establishes what a classification binding is as an information object, what it is not, what it may be attached to, and how the binding, the scheme, the scheme version and the term are each identified.", "rationale": "Every downstream concern (validation, provenance, migration, erasure) depends on the binding being a first-class addressable object with stable identity and a defended boundary against ontological typing and against the scheme model itself. W3C and HL7 both provide reified or explicitly separated constructs for this.", "source_refs": [ "SRC-001", "SRC-003", "SRC-005", "SRC-008", "SRC-011", "SRC-015" ], "layers": [ { "id": "binding-nature", "name": "Nature and Boundary of a Binding", "description": "The reified-assertion character of a binding, its separation from ontological typing, and the range of things a binding may attach to.", "source_refs": [ "SRC-008", "SRC-011", "SRC-015" ], "findings": [ { "id": "binding-as-reified-assertion", "name": "Binding as a Reified Assertion", "description": "A classification binding is a first-class n-ary assertion (subject, scheme, version, term, role, agent, time, basis), not a bare property value. Reification is required because the same subject-term pair may be asserted repeatedly by different agents, at different times, with different authority and different validity, and each such assertion must remain independently addressable, contestable and retractable.", "source_refs": [ "SRC-007", "SRC-008", "SRC-003" ], "questions": [ { "id": "q-binding-def", "text": "What minimum tuple constitutes one binding assertion, and which components are mandatory versus optional?", "kind": "definition", "answer_data": [ "Ordered list of required components (subject reference, scheme reference, scheme version, term reference, role)", "Optional components with defaults", "Rule for when a change to a component creates a new binding rather than an update" ] }, { "id": "q-binding-vs-value", "text": "When must a coded value be recorded as a full binding record rather than as an inline coded attribute of the subject?", "kind": "decision", "answer_data": [ "Decision criteria (contestability, authority, validity window, audit obligation)", "List of slots that mandate full binding records", "Escalation rule for promoting an inline value to a binding record" ] }, { "id": "q-binding-multiplicity-same-pair", "text": "May two distinct binding records hold the same subject, scheme and term at the same time, and if so what distinguishes them?", "kind": "identity", "answer_data": [ "Uniqueness constraint expression over the natural key", "Distinguishing attributes (asserting agent, role, validity interval, authority)", "Conflict resolution or coexistence policy" ] }, { "id": "q-binding-addressability", "text": "How is an individual binding addressed and cited by an external system without dereferencing the subject?", "kind": "interoperability", "answer_data": [ "Binding identifier form (IRI, UUID, ULID)", "Resolution endpoint or lookup key", "Citation string format" ] } ], "data_elements": [ { "id": "de-binding-id", "name": "Binding identifier", "description": "Stable identifier for the binding assertion itself, independent of subject and term identifiers.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-008" ] }, { "id": "de-subject-ref", "name": "Subject reference", "description": "Reference to the entity, part or aspect being classified.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-008", "SRC-011" ] }, { "id": "de-term-ref", "name": "Term reference", "description": "Reference to the scheme term applied, by canonical URI and/or notation.", "value_kind": "reference", "cardinality": "1..n", "required": true, "source_refs": [ "SRC-001", "SRC-003" ] }, { "id": "de-binding-record-shape", "name": "Binding record shape", "description": "The reified assertion object carrying all components of one binding.", "value_kind": "object", "cardinality": "1", "required": true, "source_refs": [ "SRC-007", "SRC-008" ] } ], "artifacts": [ { "id": "art-binding-record", "name": "Binding record", "description": "The canonical serialisation of one reified binding assertion, carrying subject, scheme, version, term, role, provenance, validity and status.", "media_or_form": [ "JSON document", "RDF graph (Web Annotation or PROV shape)", "row in a relational or document store", "YAML front matter block" ], "serial": false, "identity_strategy": "Governed IRI minted by the adopting Dimension where a master system exists; otherwise a UUIDv4 or ULID assigned at creation. Never keyed on assertion date.", "source_refs": [ "SRC-007", "SRC-008" ] } ], "inline_only_rationale": null }, { "id": "classification-vs-typing-boundary", "name": "Classification Versus Ontological Typing", "description": "Binding a subject to a scheme term is subject indexing or categorisation and carries no entailment that the subject is an instance of a formal class. The SKOS Primer directs subject indexing through dcterms:subject to a skos:Concept and notes that OWL-DL prevents treating SKOS concepts as OWL classes; conflating the two produces unsound inference and unsafe schema migration.", "source_refs": [ "SRC-001", "SRC-014", "SRC-015", "SRC-011" ], "questions": [ { "id": "q-typing-entailment", "text": "Does this binding license any inference about the subject's type, and if not how is that non-entailment recorded?", "kind": "classification", "answer_data": [ "Entailment policy flag (indexing-only versus type-asserting)", "Reasoner configuration note", "Explicit statement of what may not be inferred" ] }, { "id": "q-typing-dual-use", "text": "Where a scheme term is also published as a formal class, which reading governs the binding?", "kind": "constraint", "answer_data": [ "Declared reading for the slot", "Reference to the scheme's own punning or dual-declaration statement", "Fallback rule when the scheme is silent" ] }, { "id": "q-typing-hierarchy-propagation", "text": "Is a binding to a narrower term to be treated as also binding the subject to broader terms?", "kind": "relationship", "answer_data": [ "Propagation policy (none, transitive closure at query time, materialised)", "Whether broaderTransitive is available in the scheme", "Materialisation refresh rule if applicable" ] } ], "data_elements": [ { "id": "de-entailment-mode", "name": "Entailment mode", "description": "Declares whether the binding is indexing-only or asserts formal type membership.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-015" ] }, { "id": "de-hierarchy-propagation", "name": "Hierarchy propagation policy", "description": "Whether broader terms are implied by a binding to a narrower term, and how implication is computed.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001" ] } ], "artifacts": [], "inline_only_rationale": "This finding produces policy flags carried on the binding record and on the slot declaration; it generates no separate artifact of its own." }, { "id": "subject-and-scope-of-application", "name": "Subject and Scope of Application", "description": "What a binding attaches to: a whole entity, a specific part or aspect (Web Annotation SpecificResource), a registered metadata item (ISO/IEC 11179 Classifiable_Item), a dataset or an identifiable artefact in a statistical model (SDMX Hierarchy Association). The scope must be explicit because the same term applied to a whole versus a part means different things.", "source_refs": [ "SRC-008", "SRC-011", "SRC-012" ], "questions": [ { "id": "q-subject-granularity", "text": "At what granularity does this binding apply: whole subject, a named part, a time slice, or an aspect?", "kind": "composition", "answer_data": [ "Granularity code", "Selector or path expression identifying the part or aspect", "Aspect label where the binding characterises only one facet" ] }, { "id": "q-subject-eligibility", "text": "Which subject kinds are eligible for binding under this slot, and which are explicitly excluded?", "kind": "constraint", "answer_data": [ "Eligible subject type list", "Exclusion list with reasons", "Reference to the scheme's stated coverage or unit of classification" ] }, { "id": "q-subject-unit-match", "text": "Does the subject correspond to the statistical or classificatory unit the scheme was designed to classify?", "kind": "validation", "answer_data": [ "Declared unit of classification for the scheme", "Match assessment result", "Deviation note where a proxy unit is used" ] } ], "data_elements": [ { "id": "de-subject-scope", "name": "Subject scope", "description": "Granularity and selector describing the exact part or aspect of the subject that is classified.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-008" ] }, { "id": "de-classification-unit", "name": "Unit of classification", "description": "The unit type the scheme is designed to classify, as declared by the scheme.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-016", "SRC-012" ] } ], "artifacts": [], "inline_only_rationale": "Scope is a structured field on the binding record (a selector plus aspect label); no independently stored artifact is warranted." } ] }, { "id": "binding-identity", "name": "Identity of Binding, Scheme, Version and Term", "description": "Identifier rules for each identity-bearing component of a binding, and the rule that display labels are never identity.", "source_refs": [ "SRC-003", "SRC-005", "SRC-001" ], "findings": [ { "id": "binding-identifier-and-keys", "name": "Binding Identifier and Natural Key", "description": "The binding needs both a surrogate identifier and a declared natural key so that repeated ingestion is idempotent. Identity priority is: identifier from the authoritative master system that owns the binding; else a governed global IRI; else a UUID or ULID minted by the adopting Dimension. Dates are never identifiers.", "source_refs": [ "SRC-005", "SRC-008", "SRC-009" ], "questions": [ { "id": "q-key-authority", "text": "Which system is the master of record for this binding's identifier, and what identifier form does it issue?", "kind": "ownership", "answer_data": [ "Master system name and reference", "Identifier form and syntax", "Fallback minting rule when no master exists" ] }, { "id": "q-key-natural", "text": "What natural key makes repeated ingestion of the same binding idempotent?", "kind": "identity", "answer_data": [ "Ordered natural key component list", "Normalisation rules applied before comparison", "Behaviour on natural-key collision" ] }, { "id": "q-key-external-ref", "text": "Which external identifiers of the same binding must be carried alongside the internal one?", "kind": "interoperability", "answer_data": [ "External identifier list with issuing authority", "Namespace or system URI per identifier", "Precedence order for conflict" ] } ], "data_elements": [ { "id": "de-binding-natural-key", "name": "Binding natural key", "description": "Normalised composite key used for idempotent upsert of a binding.", "value_kind": "text", "cardinality": "1", "required": true, "source_refs": [ "SRC-005" ] }, { "id": "de-external-binding-ids", "name": "External binding identifiers", "description": "Identifiers for the same binding issued by external authoritative systems, each with its issuing namespace.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-009" ] } ], "artifacts": [], "inline_only_rationale": "Identifiers and keys are fields of the binding record artifact already declared under binding-as-reified-assertion; a separate artifact would duplicate it." }, { "id": "scheme-and-term-reference-identity", "name": "Scheme, Version and Term Reference Identity", "description": "A binding must reference the scheme by canonical URI rather than by name, pin the scheme version used at assignment time, and carry the term by its identifier or notation. FHIR requires specified code system URIs to be used in preference to any other identifying mechanism, records Coding.version as the code system version used when choosing the code, and treats Coding.display as a rendering, not identity.", "source_refs": [ "SRC-003", "SRC-005", "SRC-001", "SRC-002" ], "questions": [ { "id": "q-scheme-uri", "text": "What is the canonical URI of the scheme, and which registry governs it?", "kind": "identity", "answer_data": [ "Canonical scheme URI", "Governing registry or publisher reference", "Alternate identifiers such as OIDs with their authority" ] }, { "id": "q-version-pin", "text": "Which scheme version was in force when the term was selected, and is the binding version-pinned or version-floating?", "kind": "provenance", "answer_data": [ "Scheme version string as published", "Pinning mode (pinned, floating, latest-at-read)", "Version resolution rule when the source omits a version" ] }, { "id": "q-term-notation-vs-uri", "text": "Is the term carried by URI, by notation, or by both, and how is a notation resolved to a term?", "kind": "interoperability", "answer_data": [ "Term URI", "Notation literal and its notation datatype or pattern", "Resolution procedure and the level at which the notation is unique" ] }, { "id": "q-display-drift", "text": "How is a stored display label reconciled when the scheme later changes that label?", "kind": "quality", "answer_data": [ "Display label snapshot with capture time", "Reconciliation policy (refresh, retain historical, flag drift)", "Assertion that display is never used for matching" ] } ], "data_elements": [ { "id": "de-scheme-uri", "name": "Scheme canonical URI", "description": "Governed URI identifying the classification scheme or code system.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-005" ] }, { "id": "de-scheme-version", "name": "Scheme version", "description": "Version of the scheme in force when the term was selected.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002", "SRC-003" ] }, { "id": "de-term-notation", "name": "Term notation", "description": "Symbolic code for the term within the scheme, with its notation datatype where declared.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-006" ] }, { "id": "de-display-snapshot", "name": "Display label snapshot", "description": "Human-readable label captured at binding time; never used as an identity or matching key.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] } ], "artifacts": [], "inline_only_rationale": "These are reference fields on the binding record; the scheme and term objects themselves are owned by the sibling Classification Scheme model and must not be materialised here as authoritative artifacts." }, { "id": "lexical-form-and-language", "name": "Display, user text and language", "description": "FHIR Coding.display is the representation defined by the system; CodeableConcept.text is the human language representation selected or uttered by the user. Computation on display alone is unsafe. SKOS separates prefLabel, altLabel and hiddenLabel with language tags. DCMI prefers a URI for subject but allows a literal if needed.", "source_refs": [ "SRC-001", "SRC-018", "SRC-020" ], "questions": [ { "id": "lexical-form-and-language-q01", "text": "What display string does the referenced scheme define for this item, in which language, and is it the scheme’s recommended display?", "kind": "definition", "answer_data": [ "display", "language_tag", "display_source" ] }, { "id": "lexical-form-and-language-q02", "text": "What text did the user or agent enter as the intended meaning, and does it stand alone without a code?", "kind": "evidence", "answer_data": [ "concept_text", "text_language", "text_only_flag" ] }, { "id": "lexical-form-and-language-q03", "text": "Are preferred labels unique per language within the scheme, and has any process treated display text as a computable identifier?", "kind": "quality", "answer_data": [ "pref_label", "language_tag", "integrity_violation" ] }, { "id": "lexical-form-and-language-q04", "text": "If no code is present, is a literal subject or keyword recorded, and is it preferred to be aligned later to a controlled vocabulary URI?", "kind": "interoperability", "answer_data": [ "literal_value", "alignment_candidate_uri", "alignment_status" ] } ], "data_elements": [ { "id": "lexical-form-and-language-data01", "name": "Scheme display", "description": "Human-readable representation defined by the scheme.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-018" ] }, { "id": "lexical-form-and-language-data02", "name": "User or agent concept text", "description": "Text as seen, selected or uttered, representing intended meaning.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-018" ] }, { "id": "lexical-form-and-language-data03", "name": "Preferred label", "description": "SKOS preferred lexical label with language tag.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-001" ] }, { "id": "lexical-form-and-language-data04", "name": "Language tag", "description": "BCP 47 language tag for display or text.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-018" ] } ], "artifacts": [], "inline_only_rationale": "Labels and user text are inline lexical data on the binding; scheme-wide label integrity is enforced by the scheme sibling model." } ] } ] }, { "id": "binding-specification", "name": "Binding Specification (Design Time)", "description": "The declaration, before any instance exists, of which scheme and which subset of it may be used in a given slot or context, at what conformance strength, and with what multiplicity and completeness obligations.", "rationale": "HL7 FHIR treats a binding as a design-time rule attaching an element definition to a value set with an explicit strength, and DCMI's Vocabulary Encoding Scheme performs the same role cross-domain. Without an explicit specification layer, validation and conformance claims have nothing to test against.", "source_refs": [ "SRC-002", "SRC-014", "SRC-016" ], "layers": [ { "id": "slot-declaration", "name": "Slot Declaration and Permitted Value Space", "description": "Declaring the classification slot, its context, and the exact set of terms permitted in it.", "source_refs": [ "SRC-002", "SRC-014", "SRC-006" ], "findings": [ { "id": "binding-slot-declaration", "name": "Binding Slot Declaration", "description": "A binding slot names a classification role in a context (subject type, purpose, jurisdiction, process step) and declares the scheme or value space that fills it, mirroring FHIR's ElementDefinition.binding with name, strength, value set reference and description, and DCMI's association of a property with a Vocabulary Encoding Scheme.", "source_refs": [ "SRC-002", "SRC-014", "SRC-012" ], "questions": [ { "id": "q-slot-name", "text": "What is the slot's stable name, the subject type it applies to, and the decision it feeds?", "kind": "definition", "answer_data": [ "Slot identifier and human name", "Applicable subject type list", "Downstream decision or report the slot supports" ] }, { "id": "q-slot-scheme-choice", "text": "Which scheme fills this slot, and on what documented basis was it chosen over alternatives?", "kind": "authority", "answer_data": [ "Selected scheme URI and version constraint", "Alternatives considered with rejection reasons", "Approving body and approval date" ] }, { "id": "q-slot-context-variation", "text": "Does the permitted scheme vary by jurisdiction, tenant or process step, and how is the applicable variant resolved at runtime?", "kind": "constraint", "answer_data": [ "Context dimensions that vary the binding", "Variant table keyed by context", "Default and resolution precedence" ] } ], "data_elements": [ { "id": "de-slot-id", "name": "Binding slot identifier", "description": "Stable name of the classification slot within a context.", "value_kind": "identifier", "cardinality": "1", "required": true, "source_refs": [ "SRC-002" ] }, { "id": "de-slot-context", "name": "Slot context", "description": "Subject type, jurisdiction, tenant and process step in which the slot applies.", "value_kind": "object", "cardinality": "1", "required": true, "source_refs": [ "SRC-002" ] }, { "id": "de-slot-purpose", "name": "Slot purpose statement", "description": "Documented reason the slot exists and the decision it feeds.", "value_kind": "text", "cardinality": "1", "required": true, "source_refs": [ "SRC-014" ] } ], "artifacts": [ { "id": "art-binding-profile", "name": "Binding slot profile", "description": "A machine-readable profile declaring all binding slots for a subject type: slot names, contexts, referenced value spaces, strengths, cardinalities and validation rules.", "media_or_form": [ "structured profile document", "schema or shape definition (SHACL, JSON Schema, FHIR StructureDefinition)", "registry entry" ], "serial": true, "identity_strategy": "Canonical profile URI plus a version segment; each published revision is an immutable version identified as profileURI|version, following the FHIR url|version convention.", "source_refs": [ "SRC-002" ] } ], "inline_only_rationale": null }, { "id": "permitted-value-space", "name": "Permitted Value Space", "description": "The exact set of terms admissible in a slot: a whole scheme, an enumerated subset, a computed selection, a restriction to a specific classification level, or a restriction to selectable leaf terms. XKOS levels with notationPattern, SDMX hierarchies over one or more codelists, and FHIR value set expansions all express this restriction.", "source_refs": [ "SRC-002", "SRC-006", "SRC-012", "SRC-004" ], "questions": [ { "id": "q-vs-definition", "text": "How is the permitted term set defined: by enumeration, by scheme subtree, by level, or by a computed rule?", "kind": "constraint", "answer_data": [ "Definition method", "Inclusion and exclusion rules", "Reference to the source value set or subtree" ] }, { "id": "q-vs-level-leaf", "text": "Are non-leaf or non-selectable terms permitted, and at which classification level must the term sit?", "kind": "constraint", "answer_data": [ "Required level or depth", "Leaf-only flag", "Handling of terms marked notSelectable" ] }, { "id": "q-vs-expansion", "text": "Is a point-in-time expansion of the permitted set captured, and when is it refreshed?", "kind": "temporal", "answer_data": [ "Expansion snapshot with capture timestamp", "Refresh trigger and cadence", "Behaviour when the live scheme and the snapshot diverge" ] }, { "id": "q-vs-multi-scheme", "text": "May the slot draw terms from more than one scheme simultaneously?", "kind": "composition", "answer_data": [ "Permitted scheme list", "Per-scheme role or precedence", "Rule against redundant equivalent codings" ] } ], "data_elements": [ { "id": "de-value-space-ref", "name": "Permitted value space reference", "description": "Reference to the value set, subtree, level or computed selection that bounds the slot.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-002" ] }, { "id": "de-level-constraint", "name": "Level or depth constraint", "description": "Required classification level or depth for terms used in the slot.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] }, { "id": "de-selectability-rule", "name": "Selectability rule", "description": "Whether non-selectable or abstract grouping terms may be bound.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004" ] } ], "artifacts": [ { "id": "art-value-space-expansion", "name": "Value space expansion snapshot", "description": "A dated, immutable enumeration of the terms admissible in a slot at a point in time, used for offline validation and for reproducing historical validation outcomes.", "media_or_form": [ "enumerated code list file", "value set expansion document", "cached lookup table" ], "serial": true, "identity_strategy": "Value space URI plus scheme version plus RFC 3339 expansion timestamp; content digest recorded for integrity.", "source_refs": [ "SRC-002", "SRC-004" ] } ], "inline_only_rationale": null }, { "id": "value-set-slot-binding-reference", "name": "Value set applied to a slot", "description": "A terminology binding names the value set whose expansion is the allowed or suggested set of codes for an element. The value-set canonical URL is not the code-system URL. Additional bindings may tighten the main binding in a context.", "source_refs": [ "SRC-017" ], "questions": [ { "id": "value-set-slot-binding-reference-q01", "text": "Which value-set canonical URL is bound to this element or slot, and is it version-pinned?", "kind": "identity", "answer_data": [ "value_set_canonical", "value_set_version", "pinned_flag" ] }, { "id": "value-set-slot-binding-reference-q02", "text": "Is the bound object a value set rather than a code system, and which code systems does that value set draw from?", "kind": "composition", "answer_data": [ "value_set_canonical", "drawn_code_systems" ] }, { "id": "value-set-slot-binding-reference-q03", "text": "Are additional bindings defined for particular usage contexts, and what is each additional binding’s purpose?", "kind": "constraint", "answer_data": [ "additional_binding", "purpose_code", "usage_context" ] }, { "id": "value-set-slot-binding-reference-q04", "text": "What human-readable description states the intent of this element binding for implementers?", "kind": "definition", "answer_data": [ "binding_description", "element_path" ] } ], "data_elements": [ { "id": "value-set-slot-binding-reference-data01", "name": "Value set canonical URL", "description": "Canonical identifier of the bound value set, optionally with version.", "value_kind": "identifier", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-017" ] }, { "id": "value-set-slot-binding-reference-data02", "name": "Bound element path", "description": "Path of the element or attribute to which the value set is bound.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-017" ] }, { "id": "value-set-slot-binding-reference-data03", "name": "Additional bindings", "description": "Context-specific extra bindings with purpose codes.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-017" ] } ], "artifacts": [ { "id": "value-set-slot-binding-reference-artifact01", "name": "Element binding specification", "description": "The binding fragment of an element definition, profile or application profile that applies a value set and strength to a slot.", "media_or_form": [ "ElementDefinition.binding", "application-profile", "structure-definition" ], "serial": true, "identity_strategy": "Canonical URL of the StructureDefinition or profile plus element path; version of the profiling artefact.", "source_refs": [ "SRC-017" ] } ], "inline_only_rationale": null } ] }, { "id": "conformance-obligation", "name": "Conformance Obligation and Multiplicity", "description": "How strictly a slot's value space must be honoured, and how many terms may or must be bound.", "source_refs": [ "SRC-002", "SRC-016", "SRC-006" ], "findings": [ { "id": "binding-strength", "name": "Binding Strength", "description": "The conformance obligation attached to a slot. FHIR defines four strengths: required (data SHALL contain a value from the expansion), extensible (SHALL use a value set code if any code applies, otherwise an alternate code or text), preferred (encouraged but not required for conformance) and example (illustrative only). Strength determines validation severity and whether text fallback is legitimate.", "source_refs": [ "SRC-002" ], "questions": [ { "id": "q-strength-value", "text": "What binding strength applies to this slot, and what validation severity does each strength map to?", "kind": "requirement", "answer_data": [ "Strength code (required, extensible, preferred, example)", "Mapped validation severity (error, warning, information)", "Justification for the chosen strength" ] }, { "id": "q-strength-extensible-test", "text": "Under an extensible binding, what test decides that no code in the value set can apply?", "kind": "decision", "answer_data": [ "Documented adequacy test", "Reviewer or algorithm responsible for the judgement", "Record of the negative determination" ] }, { "id": "q-strength-local-override", "text": "May a local profile tighten or loosen the inherited strength, and what governance approves that?", "kind": "authority", "answer_data": [ "Permitted derivation directions", "Approval body and change process", "Record of the inherited versus effective strength" ] } ], "data_elements": [ { "id": "de-binding-strength", "name": "Binding strength", "description": "Conformance obligation for the slot's value space.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-002" ] }, { "id": "de-strength-severity-map", "name": "Strength to severity mapping", "description": "Mapping from each strength to the validation outcome severity applied by the validator.", "value_kind": "object", "cardinality": "1", "required": true, "source_refs": [ "SRC-002" ] } ], "artifacts": [], "inline_only_rationale": "Strength is a declared field of the binding slot profile artifact; it has no independent artifact." }, { "id": "multiplicity-and-completeness", "name": "Multiplicity, Exhaustiveness and Mutual Exclusivity", "description": "How many terms may be bound in a slot and whether the term set must be exhaustive and mutually exclusive. The UNSD guidelines state that mutual exclusivity is mandatory for statistical classifications and that a classification should be exhaustive for the values the variable can take for its primary units; multi-label domains deliberately relax exclusivity and must say so explicitly.", "source_refs": [ "SRC-016", "SRC-006", "SRC-002" ], "questions": [ { "id": "q-mult-cardinality", "text": "What minimum and maximum number of terms may be bound in this slot?", "kind": "constraint", "answer_data": [ "Cardinality expression", "Mandatory-classification flag", "Behaviour when the subject cannot be classified at all" ] }, { "id": "q-mult-exclusivity", "text": "Is the term set mutually exclusive at the applicable level, and is multi-labelling permitted?", "kind": "constraint", "answer_data": [ "Mutual-exclusivity declaration for the scheme level", "Multi-label permission flag", "Rule forbidding simultaneous ancestor and descendant bindings, if any" ] }, { "id": "q-mult-primacy", "text": "When several terms are bound, how is the primary or governing term determined?", "kind": "decision", "answer_data": [ "Rank or primacy field semantics", "Tie-breaking rule", "Consumer guidance on which term to use for aggregation" ] } ], "data_elements": [ { "id": "de-slot-cardinality", "name": "Slot cardinality", "description": "Permitted number of bound terms in the slot.", "value_kind": "text", "cardinality": "1", "required": true, "source_refs": [ "SRC-002" ] }, { "id": "de-exclusivity-flag", "name": "Mutual exclusivity declaration", "description": "Whether the permitted terms are mutually exclusive at the level used.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-016", "SRC-006" ] }, { "id": "de-term-rank", "name": "Term rank", "description": "Ordinal or primacy marker distinguishing a governing term from secondary terms in a multi-term binding.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] } ], "artifacts": [], "inline_only_rationale": "Multiplicity and exclusivity are constraint fields of the binding slot profile and rank is a field of the binding record; neither requires a separate artifact." } ] } ] }, { "id": "binding-assertion", "name": "Binding Assertion (Instance Time)", "description": "The actual applied binding: which term was chosen, in what role, by what origin, and what happens when no term fits.", "rationale": "FHIR separates the design-time binding from the instance Coding, and the Web Annotation model supplies purpose values (tagging, classifying, identifying, assessing) that distinguish what an applied term is doing. Residual and uncoded cases are the commonest real-world failure surface and must be modelled, not left implicit.", "source_refs": [ "SRC-002", "SRC-003", "SRC-008", "SRC-016" ], "layers": [ { "id": "assertion-content", "name": "Applied Term, Role and Origin", "description": "What the applied term asserts, and where the assertion came from.", "source_refs": [ "SRC-003", "SRC-008" ], "findings": [ { "id": "asserted-term-and-role", "name": "Applied Term and Binding Role", "description": "The applied term plus the role it plays. Web Annotation distinguishes purposes such as tagging, classifying, identifying and assessing; the same term applied for identification, categorisation or evaluation carries different obligations. Post-coordinated expressions (permitted where a code system declares itself compositional) must be flagged because they are not simple term references.", "source_refs": [ "SRC-008", "SRC-003", "SRC-004" ], "questions": [ { "id": "q-role-purpose", "text": "What role does this applied term play: classifying, identifying, assessing or tagging?", "kind": "classification", "answer_data": [ "Role code drawn from a governed role vocabulary", "Slot the role satisfies", "Consumer semantics for each role" ] }, { "id": "q-role-postcoordination", "text": "Is the applied value a simple term reference or a post-coordinated expression, and does the scheme permit expressions?", "kind": "constraint", "answer_data": [ "Expression flag", "Scheme compositional-grammar declaration", "Expression syntax and normalisation rule" ] }, { "id": "q-role-qualifiers", "text": "What qualifiers modify the applied term (negation, suspected, historical, laterality, degree)?", "kind": "constraint", "answer_data": [ "Qualifier vocabulary reference", "Applied qualifier values", "Rule preventing qualifiers from silently changing term meaning" ] } ], "data_elements": [ { "id": "de-binding-role", "name": "Binding role", "description": "Purpose the applied term serves within the binding.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-008" ] }, { "id": "de-expression-flag", "name": "Post-coordination flag", "description": "Marks the applied value as a compositional expression rather than a single term reference.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003", "SRC-004" ] }, { "id": "de-qualifiers", "name": "Applied qualifiers", "description": "Qualifier terms modifying the meaning of the applied term.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-003" ] } ], "artifacts": [], "inline_only_rationale": "Role, expression flag and qualifiers are fields of the binding record; no separate stored artifact is justified." }, { "id": "origin-of-binding-assertion", "name": "Origin of the Assertion", "description": "Whether the term was chosen directly by a person, produced by a rule or model, inherited from a related subject, or derived through a mapping. FHIR's Coding.userSelected marks codings chosen by a user directly off a pick list, and Web Annotation separates creator/created from generator/generated; both distinctions must survive into the binding record because they change how much trust and how much rectification obligation the binding carries.", "source_refs": [ "SRC-003", "SRC-008", "SRC-007", "SRC-010" ], "questions": [ { "id": "q-origin-kind", "text": "Was this term selected directly by a person, produced automatically, inherited, or derived from a mapping?", "kind": "provenance", "answer_data": [ "Origin code (user-selected, automated, inherited, mapping-derived, imported)", "userSelected equivalent boolean", "Source binding reference where inherited or derived" ] }, { "id": "q-origin-automated-decision", "text": "If produced automatically about a natural person, does the binding feed a decision based solely on automated processing?", "kind": "privacy", "answer_data": [ "Automated-decision flag", "Legal basis or exception relied upon", "Human-review route and contact point" ] }, { "id": "q-origin-software", "text": "Which software serialised or generated this binding, distinct from the agent responsible for its content?", "kind": "provenance", "answer_data": [ "Generator software identifier and version", "Generation timestamp in RFC 3339", "Responsible content agent, recorded separately" ] } ], "data_elements": [ { "id": "de-origin-kind", "name": "Origin kind", "description": "How the applied term came to be bound.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-003", "SRC-008" ] }, { "id": "de-user-selected", "name": "User-selected flag", "description": "Whether a person chose this term directly rather than a system supplying it.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "de-generator", "name": "Generator", "description": "Software agent that produced or serialised the binding, recorded separately from the responsible content agent.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-008" ] } ], "artifacts": [], "inline_only_rationale": "Origin is captured in fields of the binding record and, for automated origins, in the assignment-provenance artifact declared elsewhere in this model." }, { "id": "classification-facet-axis", "name": "Classification role, facet and multiplicity", "description": "A binding has a role or facet: topical theme, type/genre, ISO 19115 keyword type, statistical variable coding, or local primary/secondary rank. DCAT allows multiple themes. GSIM statistical classifications used as variable domains are typically mutually exclusive and exhaustive. ISO 19115 topic categories explicitly overlap and the user is asked to pick the most appropriate. These rules conflict and must be recorded as policy on the slot, not assumed globally.", "source_refs": [ "SRC-020", "SRC-021", "SRC-022", "SRC-023" ], "questions": [ { "id": "classification-facet-axis-q01", "text": "What facet or role does this binding play (subject/theme, type/genre, place, discipline, taxon, statistical variable, or other keyword type)?", "kind": "classification", "answer_data": [ "facet_code", "facet_scheme", "keyword_type" ] }, { "id": "classification-facet-axis-q02", "text": "Is this the primary classification for the facet, a secondary class, or an unordered additional theme?", "kind": "relationship", "answer_data": [ "rank_or_role", "primary_flag", "order_index" ] }, { "id": "classification-facet-axis-q03", "text": "Does the slot allow multiple simultaneous classes, require mutual exclusivity, or require a single most-appropriate class despite known overlap?", "kind": "constraint", "answer_data": [ "multiplicity_policy", "exclusivity_flag", "overlap_note" ] }, { "id": "classification-facet-axis-q04", "text": "If both a type/genre and a subject/theme are recorded, are they separate bindings rather than one overloaded code?", "kind": "decision", "answer_data": [ "type_binding_id", "theme_binding_id", "separation_flag" ] } ], "data_elements": [ { "id": "classification-facet-axis-data01", "name": "Classification facet", "description": "Role of the binding (theme, type, place, statistical domain, and so on).", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-020", "SRC-022" ] }, { "id": "classification-facet-axis-data02", "name": "Primary classification flag", "description": "Whether this assignment is the primary class for the facet.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-021" ] }, { "id": "classification-facet-axis-data03", "name": "Multiplicity policy", "description": "Whether the slot is single-valued, multi-valued, mutually exclusive, or overlap-tolerant.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-021", "SRC-023" ] }, { "id": "classification-facet-axis-data04", "name": "Keyword type", "description": "ISO 19115 MD_KeywordTypeCode when the binding is a geospatial keyword.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-022" ] } ], "artifacts": [], "inline_only_rationale": "Role, rank and multiplicity are attributes of the binding and of the slot policy, stored inline." } ] }, { "id": "residual-and-gap", "name": "Residual, Unclassifiable and Uncoded Cases", "description": "How the pattern behaves when no admissible term fits, when the fit is a residual category, or when only free text is available.", "source_refs": [ "SRC-002", "SRC-003", "SRC-016" ], "findings": [ { "id": "residual-and-unclassifiable-handling", "name": "Residual and Unclassifiable Handling", "description": "Exhaustive schemes achieve exhaustiveness partly through residual 'not elsewhere classified' or 'other' categories. A binding must distinguish a deliberate residual classification from an unknown, a not-applicable, a refused and a not-yet-attempted state, because these have different downstream consequences for aggregation and for follow-up.", "source_refs": [ "SRC-016", "SRC-002", "SRC-006" ], "questions": [ { "id": "q-residual-distinct", "text": "How are residual, unknown, not-applicable, refused and not-yet-classified states distinguished in the record?", "kind": "state", "answer_data": [ "Enumerated non-substantive state codes", "Rule that a residual scheme term is not the same as an absent binding", "Aggregation guidance per state" ] }, { "id": "q-residual-followup", "text": "Does a residual or unknown binding create a follow-up obligation, and with what deadline?", "kind": "process", "answer_data": [ "Follow-up obligation flag", "Deadline or review interval", "Responsible role" ] }, { "id": "q-residual-coverage", "text": "Does the scheme claim exhaustive coverage of the subject population, and what happens when it demonstrably does not?", "kind": "quality", "answer_data": [ "Scheme coverage declaration", "Observed uncovered-case rate", "Escalation route to scheme governance" ] } ], "data_elements": [ { "id": "de-nonsubstantive-state", "name": "Non-substantive binding state", "description": "Code distinguishing residual, unknown, not-applicable, refused and not-yet-classified outcomes.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-016", "SRC-002" ] }, { "id": "de-followup-due", "name": "Follow-up due", "description": "Date by which a provisional or residual binding must be revisited.", "value_kind": "date", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] } ], "artifacts": [], "inline_only_rationale": "Residual handling is expressed through enumerated state fields on the binding record and through follow-up tasks owned by a process model outside this pattern." }, { "id": "uncoded-text-fallback", "name": "Uncoded Text Fallback and Candidate Terms", "description": "Under extensible, preferred or example strengths, an implementation may legitimately record an alternate code or free text. FHIR's CodeableConcept.text is defined as the human-language representation as seen, selected or uttered by the user, sitting alongside zero or more codings. Uncoded text is also the primary evidence stream for proposing new scheme terms.", "source_refs": [ "SRC-002", "SRC-003" ], "questions": [ { "id": "q-text-legitimacy", "text": "Under which strengths is uncoded text a conformant outcome rather than a validation failure?", "kind": "requirement", "answer_data": [ "Strength-to-fallback permission table", "Required justification when text is used", "Validator severity for each case" ] }, { "id": "q-text-provenance", "text": "Is the recorded text the user's original wording or a system-generated rendering of a code?", "kind": "provenance", "answer_data": [ "Text origin flag", "Original wording preserved verbatim", "Rule against overwriting user wording with a code display" ] }, { "id": "q-text-candidate", "text": "How does recurring uncoded text become a proposal for a new scheme term?", "kind": "process", "answer_data": [ "Frequency threshold for candidacy", "Proposal route to the scheme maintainer", "Status tracking of submitted candidate terms" ] } ], "data_elements": [ { "id": "de-uncoded-text", "name": "Uncoded text", "description": "Free-text representation of the intended concept where no admissible term applies.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "de-text-origin", "name": "Text origin", "description": "Whether the text is user-authored or system-rendered from a code.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] }, { "id": "de-candidate-term-ref", "name": "Candidate term proposal reference", "description": "Reference to a proposal submitted to the scheme maintainer arising from uncoded text.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-016" ] } ], "artifacts": [ { "id": "art-candidate-term-log", "name": "Candidate term log", "description": "Accumulated record of uncoded texts and alternate codes observed against a slot, with frequencies, exemplars and submission status, used as evidence for scheme change requests.", "media_or_form": [ "tabular log", "issue tracker export", "structured report" ], "serial": true, "identity_strategy": "Slot identifier plus reporting period; each period's log is immutable once closed and identified by slot URI plus RFC 3339 period end.", "source_refs": [ "SRC-002", "SRC-016" ] } ], "inline_only_rationale": null } ] } ] }, { "id": "authority-provenance-evidence", "name": "Authority, Provenance, Evidence and Quality", "description": "Who was entitled to assert the binding, how it was produced, what justifies it, how certain it is, and how coding quality is measured.", "rationale": "PROV-O supplies the general attribution and plan constructs; the EU BTI regime demonstrates that classification decisions can carry formal legal force with holders, validity, annulment and revocation; UNSD guidance and FHIR strength rules make coding quality a measurable, governable property rather than an assumption.", "source_refs": [ "SRC-007", "SRC-009", "SRC-015", "SRC-016", "SRC-010" ], "layers": [ { "id": "assignment-provenance", "name": "Assignment Provenance and Evidence", "description": "The activity, agent, plan and supporting material behind an assignment.", "source_refs": [ "SRC-007", "SRC-015" ], "findings": [ { "id": "assignment-actor-and-method", "name": "Assignment Actor, Activity and Method", "description": "Every binding is generated by an activity attributed to an agent that may have followed a plan. PROV-O supplies wasAttributedTo, wasGeneratedBy, generatedAtTime, used and hadPlan; for classification the plan is typically a coding index, a decision rule set, a general interpretative rule, or a model version. Method identity must be versioned so that a past assignment can be reproduced.", "source_refs": [ "SRC-007", "SRC-008", "SRC-009" ], "questions": [ { "id": "q-actor-agent", "text": "Which agent is responsible for this binding's content, and in what capacity did they act?", "kind": "ownership", "answer_data": [ "Agent identifier and type (person, organisation, software)", "Role or capacity in the assignment", "Delegation chain where the agent acted for another" ] }, { "id": "q-actor-method", "text": "Which coding method, rule set, coding index or model version produced the assignment?", "kind": "process", "answer_data": [ "Method identifier and version", "Method type (manual, rule-based, statistical, hybrid)", "Reproducibility note and required inputs" ] }, { "id": "q-actor-inputs", "text": "Which inputs did the assignment activity consume, and are they retained for re-derivation?", "kind": "provenance", "answer_data": [ "Input references with content digests", "Retention state of each input", "Re-derivation feasibility statement" ] }, { "id": "q-actor-time", "text": "At what instant did the assignment activity complete, and in which time zone was it recorded?", "kind": "temporal", "answer_data": [ "Assignment timestamp in RFC 3339 with seconds and explicit offset or Z", "Recording system clock source", "Separate ingestion timestamp where the binding was imported" ] } ], "data_elements": [ { "id": "de-assigning-agent", "name": "Assigning agent", "description": "Agent responsible for the content of the binding.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-007" ] }, { "id": "de-method-ref", "name": "Assignment method reference", "description": "Versioned identifier of the coding method, rule set, index or model used.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "de-assignment-time", "name": "Assignment time", "description": "RFC 3339 instant at which the assignment activity completed.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-007", "SRC-008" ] }, { "id": "de-assignment-inputs", "name": "Assignment inputs", "description": "References with digests to the materials the assignment activity consumed.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-007" ] } ], "artifacts": [ { "id": "art-assignment-provenance-record", "name": "Assignment provenance record", "description": "Structured record of the assignment activity: agent, capacity, method and version, inputs used, plan followed, and completion time, sufficient to reproduce or audit the assignment.", "media_or_form": [ "PROV-shaped graph", "structured provenance document", "append-only log entry" ], "serial": false, "identity_strategy": "Derived from the binding identifier plus an activity identifier; UUID or ULID where no upstream activity identifier exists.", "source_refs": [ "SRC-007" ] } ], "inline_only_rationale": null }, { "id": "evidence-and-justification", "name": "Evidence and Justification", "description": "The material and reasoning that support the chosen term: source documents, measurements, applied interpretative rules, and a rationale note. SKOS documentation notes (scopeNote, historyNote, changeNote) show the same need at scheme level; at binding level the rationale is what makes a contested classification defensible.", "source_refs": [ "SRC-015", "SRC-009", "SRC-007" ], "questions": [ { "id": "q-evidence-basis", "text": "What concrete evidence supports the chosen term, and where is each item held?", "kind": "evidence", "answer_data": [ "Evidence item list with type and reference", "Storage location and access route", "Digest or version for each item" ] }, { "id": "q-evidence-rule", "text": "Which interpretative rules or scheme notes were applied in reaching the term?", "kind": "authority", "answer_data": [ "Applied rule identifiers with the issuing authority", "Relevant scheme scope or explanatory notes cited", "Order in which rules were applied" ] }, { "id": "q-evidence-rationale", "text": "What is the human-readable rationale, and is it sufficient for an independent reviewer to reach the same term?", "kind": "quality", "answer_data": [ "Rationale text", "Reviewer reproducibility assessment", "Known weaknesses or assumptions stated" ] } ], "data_elements": [ { "id": "de-evidence-items", "name": "Evidence items", "description": "References to documents, measurements or observations supporting the binding.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "de-applied-rules", "name": "Applied interpretative rules", "description": "Identifiers of the classification rules or explanatory notes applied.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-009", "SRC-015" ] }, { "id": "de-rationale", "name": "Rationale", "description": "Human-readable justification for the chosen term.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-015" ] } ], "artifacts": [ { "id": "art-classification-dossier", "name": "Classification dossier", "description": "Bundle of evidence, applied rules and rationale assembled for a binding that is contested, legally consequential or subject to audit.", "media_or_form": [ "document bundle", "structured evidence package with manifest", "case file" ], "serial": false, "identity_strategy": "Binding identifier plus dossier sequence; where a regulator issues a case reference, that reference takes precedence as the master identifier.", "source_refs": [ "SRC-009" ] } ], "inline_only_rationale": null } ] }, { "id": "authority-and-effect", "name": "Authority and Legal Effect", "description": "Entitlement to assert, jurisdictional reach, binding force and the routes by which a binding may be challenged or undone.", "source_refs": [ "SRC-009", "SRC-010" ], "findings": [ { "id": "assignment-authority-and-legal-effect", "name": "Assignment Authority and Legal Effect", "description": "Bindings differ sharply in force. An EU Binding Tariff Information decision is binding on all EU customs administrations and on the holder, is generally valid for three years, may be annulled where it was issued on inaccurate or incomplete information, and may be revoked or cease to be valid following nomenclature change, CJEU rulings or WCO decisions. Most bindings carry no such force; the model must record which regime applies rather than assuming one.", "source_refs": [ "SRC-009", "SRC-010" ], "questions": [ { "id": "q-authority-entitlement", "text": "Who is entitled to assert a binding in this slot, and what qualification or delegation is required?", "kind": "authority", "answer_data": [ "Authorised role list", "Qualification, accreditation or delegation evidence", "Separation-of-duties rule where review is required" ] }, { "id": "q-authority-force", "text": "What force does the binding carry: advisory, internally binding, contractually binding, or legally binding on third parties?", "kind": "authority", "answer_data": [ "Force code", "Instrument conferring the force with article reference", "Parties bound and jurisdictional reach" ] }, { "id": "q-authority-challenge", "text": "By what route may the binding be challenged, and with what effect on its validity while under challenge?", "kind": "exception", "answer_data": [ "Challenge or appeal route and deadline", "Suspensive effect statement", "Outcome states and their consequences" ] }, { "id": "q-authority-undo", "text": "What distinguishes annulment, revocation and cessation of validity for this binding?", "kind": "lifecycle", "answer_data": [ "Definition and trigger for each undo mode", "Retroactivity of each mode", "Effect on downstream decisions already taken" ] } ], "data_elements": [ { "id": "de-authority-ref", "name": "Authority reference", "description": "The instrument, decision or delegation under which the binding was asserted.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "de-binding-force", "name": "Binding force", "description": "Degree to which the binding constrains parties (advisory, internal, contractual, legal).", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-009" ] }, { "id": "de-jurisdiction", "name": "Jurisdictional reach", "description": "Territories, organisations or parties over which the binding has effect.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "de-undo-mode", "name": "Undo mode", "description": "Whether the binding ended by annulment, revocation, expiry or cessation of validity.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] } ], "artifacts": [ { "id": "art-binding-decision", "name": "Classification decision instrument", "description": "The formal decision document conferring legal or administrative force on a binding, naming the holder, the goods or subject, the applied term, the reasons, the validity period and the appeal route.", "media_or_form": [ "official decision document", "signed determination", "registry entry in a public decision database" ], "serial": true, "identity_strategy": "Decision reference issued by the deciding authority is the master identifier; the model stores it verbatim and never re-mints it.", "source_refs": [ "SRC-009" ] } ], "inline_only_rationale": null }, { "id": "scheme-custodianship-and-jurisdiction", "name": "Authority, ownership and jurisdiction", "description": "FHIR routes external code-system URIs through HL7 Terminology Authority where listed. Statistical classifications such as ISIC have UN custodianship; regional schemes (NACE, NAICS) apply in particular jurisdictions. ISO/IEC 11179 registration records stewardship of classified items. Ownership of the binding record is the adopting Dimension’s data owner, which is not necessarily the scheme maintainer.", "source_refs": [ "SRC-017", "SRC-019", "SRC-023" ], "questions": [ { "id": "scheme-custodianship-and-jurisdiction-q01", "text": "Who is the custodial authority of the referenced scheme, and is the URI the one authorised by that authority or by a naming system such as HL7 THO/HTA?", "kind": "authority", "answer_data": [ "custodian", "authorised_uri", "naming_system" ] }, { "id": "scheme-custodianship-and-jurisdiction-q02", "text": "Which party owns this binding record in the adopting Dimension, and who may update or withdraw it?", "kind": "ownership", "answer_data": [ "owner_party", "steward_role", "update_rights" ] }, { "id": "scheme-custodianship-and-jurisdiction-q03", "text": "In which jurisdiction or statistical territory is this classification valid (for example NAICS versus NACE versus ISIC)?", "kind": "spatial", "answer_data": [ "jurisdiction_code", "territory_name", "applicable_scheme" ] }, { "id": "scheme-custodianship-and-jurisdiction-q04", "text": "Is this assignment an official legal or statistical coding, a community convention, or a local convenience class?", "kind": "authority", "answer_data": [ "official_status", "legal_instrument_ref" ] } ], "data_elements": [ { "id": "scheme-custodianship-and-jurisdiction-data01", "name": "Scheme custodian", "description": "Organisation that maintains the scheme.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-017", "SRC-023" ] }, { "id": "scheme-custodianship-and-jurisdiction-data02", "name": "Binding owner", "description": "Party that owns the binding record in the Dimension.", "value_kind": "reference", "cardinality": "1", "required": true, "source_refs": [ "SRC-019" ] }, { "id": "scheme-custodianship-and-jurisdiction-data03", "name": "Jurisdiction", "description": "Territory or statistical area in which the scheme applies.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023" ] }, { "id": "scheme-custodianship-and-jurisdiction-data04", "name": "Official status", "description": "Whether the assignment is official, community or local.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-023" ] } ], "artifacts": [ { "id": "scheme-custodianship-and-jurisdiction-artifact01", "name": "Scheme authorisation or official coding notice", "description": "Evidence that a scheme URI is authorised or that an assignment is an official coding for a jurisdiction.", "media_or_form": [ "naming-system", "legal-notice", "custodian-register-extract" ], "serial": true, "identity_strategy": "Custodian register identifier or legal instrument identifier; dates of effect are timestamps, not identifiers.", "source_refs": [ "SRC-017", "SRC-023" ] } ], "inline_only_rationale": null } ] }, { "id": "confidence-and-quality", "name": "Confidence and Coding Quality", "description": "Per-binding uncertainty and population-level coding quality measurement.", "source_refs": [ "SRC-016", "SRC-007", "SRC-002" ], "findings": [ { "id": "confidence-and-uncertainty", "name": "Confidence and Uncertainty", "description": "Automated and inferred bindings carry uncertainty that must be recorded explicitly, including the score, its scale and semantics, whether it is calibrated, the acceptance threshold applied, and the runner-up candidates considered. No consulted standard mandates a confidence field, so its semantics must be locally defined and declared rather than assumed comparable across systems.", "source_refs": [ "SRC-007", "SRC-016" ], "questions": [ { "id": "q-conf-scale", "text": "What is the confidence value, on what scale, and does it represent a calibrated probability?", "kind": "measurement", "answer_data": [ "Score value and numeric scale", "Calibration statement and calibration method", "Producing method and version" ] }, { "id": "q-conf-threshold", "text": "What acceptance threshold was applied, and what happens to assignments below it?", "kind": "decision", "answer_data": [ "Threshold value and its owner", "Routing for sub-threshold cases (human review, residual, reject)", "Threshold change history" ] }, { "id": "q-conf-alternatives", "text": "Which alternative terms were considered and rejected, and are they retained?", "kind": "evidence", "answer_data": [ "Ranked candidate list with scores", "Retention decision for candidates", "Rejection reasons where recorded" ] } ], "data_elements": [ { "id": "de-confidence", "name": "Confidence score", "description": "Numeric confidence in the applied term, with a declared scale.", "value_kind": "number", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "de-confidence-semantics", "name": "Confidence semantics", "description": "Declared scale, calibration status and interpretation rule for the confidence score.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "de-candidate-terms", "name": "Candidate terms considered", "description": "Ranked alternatives evaluated during assignment with their scores.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-007" ] } ], "artifacts": [], "inline_only_rationale": "Confidence is an inline numeric field with an accompanying semantics declaration held on the method definition; the candidate list is inline data on the binding record." }, { "id": "coding-quality-measurement", "name": "Coding Quality Measurement", "description": "Population-level assessment of whether bindings in a slot are correct: verification sampling, independent dual coding and agreement, error rate against a reference standard, and acceptance thresholds. This is the evidence base for claiming that a body of bindings is fit for the decisions it feeds.", "source_refs": [ "SRC-016", "SRC-002" ], "questions": [ { "id": "q-quality-method", "text": "How is coding accuracy for this slot measured, over what sample and against what reference standard?", "kind": "measurement", "answer_data": [ "Measurement method (dual coding, expert re-coding, audit sample)", "Sampling frame, size and selection rule", "Reference standard definition" ] }, { "id": "q-quality-thresholds", "text": "What accuracy or agreement level is required, and what happens when it is not met?", "kind": "quality", "answer_data": [ "Threshold values per metric", "Remediation actions on breach", "Escalation owner and deadline" ] }, { "id": "q-quality-cadence", "text": "How often is quality re-measured, and what triggers an unscheduled measurement?", "kind": "process", "answer_data": [ "Regular cadence", "Trigger events (scheme version change, method change, volume spike)", "Last and next measurement dates" ] } ], "data_elements": [ { "id": "de-quality-metric", "name": "Coding quality metric", "description": "Named accuracy or agreement metric with its measured value and measurement period.", "value_kind": "object", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-016" ] }, { "id": "de-quality-threshold", "name": "Quality acceptance threshold", "description": "Minimum acceptable value for a quality metric on a slot.", "value_kind": "number", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-016" ] } ], "artifacts": [ { "id": "art-coding-quality-report", "name": "Coding quality report", "description": "Periodic report on binding accuracy for a slot: sample design, metrics, agreement statistics, error taxonomy, breaches and remediation actions.", "media_or_form": [ "structured report", "tabular metrics dataset", "published quality statement" ], "serial": true, "identity_strategy": "Slot identifier plus measurement period; report identifier is slot URI plus RFC 3339 period start and end, immutable once issued.", "source_refs": [ "SRC-016" ] } ], "inline_only_rationale": null } ] } ] }, { "id": "time-and-lifecycle", "name": "Time, Scheme Drift and Lifecycle", "description": "The several distinct clocks a binding runs on, how scheme evolution invalidates or migrates bindings, and the states a binding passes through.", "rationale": "FHIR's CodeSystem.versionNeeded explicitly signals that code systems may not commit to concept permanence across versions; XKOS models version succession and correspondences; the BTI regime shows validity windows ending on nomenclature change. Time and drift are therefore normative concerns, not implementation detail.", "source_refs": [ "SRC-004", "SRC-006", "SRC-009", "SRC-007" ], "layers": [ { "id": "temporal-frames", "name": "Temporal Frames and Scheme Drift", "description": "Separating subject-state time, assertion time and validity, and handling scheme evolution.", "source_refs": [ "SRC-007", "SRC-004", "SRC-006" ], "findings": [ { "id": "temporal-frames-of-a-binding", "name": "Temporal Frames of a Binding", "description": "At least four distinct times matter and must not be collapsed: the time of the subject state that justifies the term; the time the assertion was made; the time the assertion was observed, ingested or recorded by this system; and the interval over which the binding is asserted to hold. All are recorded in RFC 3339 with seconds and an explicit offset or Z.", "source_refs": [ "SRC-007", "SRC-008", "SRC-009" ], "questions": [ { "id": "q-time-frames", "text": "Which temporal frames are recorded for this binding, and what does each mean?", "kind": "temporal", "answer_data": [ "Named time fields with definitions", "Which fields are mandatory for the slot", "Rule forbidding reuse of one field for another meaning" ] }, { "id": "q-time-validity", "text": "Over what interval does the binding assert that the subject bears the term?", "kind": "temporal", "answer_data": [ "Validity start and end in RFC 3339", "Open-ended interval convention", "Default validity where the source supplies none" ] }, { "id": "q-time-ingestion", "text": "How is the ingestion or observation time recorded separately from the original assertion time on import?", "kind": "provenance", "answer_data": [ "Ingestion timestamp field", "Source assertion timestamp preserved verbatim", "Timezone normalisation rule and original offset retention" ] }, { "id": "q-time-retroactive", "text": "May a binding be asserted with retroactive or future validity, and who approves that?", "kind": "constraint", "answer_data": [ "Retroactive and prospective permission flags", "Approval requirement", "Effect on already-published downstream aggregates" ] } ], "data_elements": [ { "id": "de-subject-state-time", "name": "Subject state time", "description": "Instant or interval of the subject state that the term characterises.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "de-valid-from", "name": "Valid from", "description": "RFC 3339 start of the interval over which the binding holds.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "de-valid-to", "name": "Valid to", "description": "RFC 3339 end of the interval over which the binding holds; absent means open-ended.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "de-recorded-at", "name": "Recorded at", "description": "RFC 3339 instant at which this system observed or ingested the binding.", "value_kind": "timestamp", "cardinality": "1", "required": true, "source_refs": [ "SRC-007", "SRC-008" ] } ], "artifacts": [], "inline_only_rationale": "Temporal frames are fields on the binding record; separating them into an artifact would fragment the assertion it belongs to." }, { "id": "scheme-version-drift-and-migration", "name": "Scheme Version Drift and Migration", "description": "Schemes are revised, terms are deprecated, split, merged or retired, and FHIR's CodeSystem.versionNeeded signals that a code system may not commit to concept permanence across versions. XKOS models version succession (follows, supersedes, variant) and correspondences for m-to-n mapping; migration must be an explicit, auditable operation that preserves the original binding rather than overwriting it.", "source_refs": [ "SRC-004", "SRC-006", "SRC-009", "SRC-016" ], "questions": [ { "id": "q-drift-detection", "text": "How is it detected that a bound term has been deprecated, split, merged or retired in a newer scheme version?", "kind": "state", "answer_data": [ "Detection mechanism and cadence", "Term status source (concept status, deprecation date, retirement note)", "Affected-binding inventory" ] }, { "id": "q-drift-policy", "text": "What is the policy for bindings whose term is no longer valid: freeze, migrate, or invalidate?", "kind": "lifecycle", "answer_data": [ "Policy per drift type (deprecation, split, merge, retirement)", "Whether historical bindings remain readable in their original version", "Authority approving the policy" ] }, { "id": "q-drift-split-merge", "text": "When a term splits into several successors, how is the single correct successor chosen?", "kind": "decision", "answer_data": [ "Disambiguation rule or additional evidence required", "Escalation to human review", "Marking of unresolved splits" ] }, { "id": "q-drift-continuity", "text": "How is time-series or reporting continuity preserved across a scheme revision?", "kind": "interoperability", "answer_data": [ "Dual-coded period definition", "Correspondence table reference and version", "Break-in-series disclosure statement" ] } ], "data_elements": [ { "id": "de-term-status", "name": "Bound term status", "description": "Current status of the bound term in the referenced scheme version (active, deprecated, retired, split, merged).", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004" ] }, { "id": "de-version-needed", "name": "Version-needed flag", "description": "Whether the scheme declares that a version must be supplied because concept permanence is not guaranteed.", "value_kind": "boolean", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-004" ] }, { "id": "de-migration-ref", "name": "Migration reference", "description": "Reference to the migration run and correspondence entry that produced a successor binding.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006" ] } ], "artifacts": [ { "id": "art-migration-run-report", "name": "Scheme migration run report", "description": "Record of a bulk migration of bindings from one scheme version to another: source and target versions, correspondence table used, counts by outcome, unresolved splits, and manual interventions.", "media_or_form": [ "structured run report", "tabular outcome dataset", "audit log bundle" ], "serial": true, "identity_strategy": "Source version plus target version plus RFC 3339 run start timestamp; run identifier is a ULID assigned at run start to preserve ordering.", "source_refs": [ "SRC-006", "SRC-016" ] } ], "inline_only_rationale": null } ] }, { "id": "lifecycle-and-change", "name": "Lifecycle States and Change Handling", "description": "The states a binding occupies, the permitted transitions, and how corrections, disputes and retractions are handled without losing history.", "source_refs": [ "SRC-007", "SRC-009", "SRC-010" ], "findings": [ { "id": "binding-lifecycle-states", "name": "Binding Lifecycle States", "description": "A binding moves through declared states such as proposed, asserted, verified, disputed, superseded, expired, revoked and withdrawn. Transitions must be enumerated and guarded; PROV-O's invalidatedAtTime marks the end of an entity's applicability and the BTI regime supplies concrete end states (expiry, annulment, revocation, cessation of validity).", "source_refs": [ "SRC-007", "SRC-009" ], "questions": [ { "id": "q-state-enum", "text": "What is the closed set of lifecycle states, and what does each mean for a consumer?", "kind": "state", "answer_data": [ "State enumeration with definitions", "Consumer behaviour per state (use, ignore, warn)", "Terminal state list" ] }, { "id": "q-state-transitions", "text": "Which transitions are permitted, who may trigger each, and what evidence must accompany them?", "kind": "lifecycle", "answer_data": [ "Transition matrix with guards", "Authorised role per transition", "Required evidence or reason code" ] }, { "id": "q-state-effective", "text": "How does a state change interact with the validity interval and with already-published downstream data?", "kind": "temporal", "answer_data": [ "Whether state change closes the validity interval", "Retroactivity rule", "Downstream notification obligation" ] } ], "data_elements": [ { "id": "de-binding-status", "name": "Binding status", "description": "Current lifecycle state of the binding.", "value_kind": "code", "cardinality": "1", "required": true, "source_refs": [ "SRC-007", "SRC-009" ] }, { "id": "de-status-reason", "name": "Status reason", "description": "Coded reason accompanying the current state, especially for disputed, revoked or withdrawn.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] }, { "id": "de-invalidated-at", "name": "Invalidated at", "description": "RFC 3339 instant at which the binding ceased to be applicable.", "value_kind": "timestamp", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] } ], "artifacts": [], "inline_only_rationale": "State and reason are fields on the binding record; the transition history is carried by the binding change log artifact declared in the adjacent finding." }, { "id": "supersession-correction-and-dispute", "name": "Supersession, Correction and Dispute", "description": "Distinguishing a correction of an erroneous binding from a legitimate reclassification following a genuine change in the subject, and providing a route for a party to contest a binding. GDPR Article 16 gives data subjects the right to rectification of inaccurate personal data, which for a person-classifying binding is a hard requirement rather than a preference.", "source_refs": [ "SRC-010", "SRC-009", "SRC-007" ], "questions": [ { "id": "q-supersede-kind", "text": "Is this change a correction of an error or a reclassification following a real change in the subject?", "kind": "decision", "answer_data": [ "Change kind code", "Effective date of the change and whether it is retroactive", "Whether the prior binding remains historically true" ] }, { "id": "q-supersede-chain", "text": "How is the supersession chain recorded so that a consumer can reconstruct the binding history?", "kind": "provenance", "answer_data": [ "supersedes and supersededBy references", "Ordering rule for concurrent changes", "Query pattern for as-at reconstruction" ] }, { "id": "q-supersede-dispute", "text": "How does an affected party register a dispute, and what does the binding look like while disputed?", "kind": "exception", "answer_data": [ "Dispute intake route and required information", "Disputed-state semantics for consumers", "Resolution deadline and outcome recording" ] }, { "id": "q-supersede-rectification", "text": "Where the subject is a natural person, how is a rectification request received, decided and propagated?", "kind": "privacy", "answer_data": [ "Rectification request handling procedure and legal deadline", "Decision record with reasons", "Downstream recipient notification list" ] } ], "data_elements": [ { "id": "de-supersedes-ref", "name": "Supersedes reference", "description": "Reference to the binding this one replaces.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-007" ] }, { "id": "de-change-kind", "name": "Change kind", "description": "Whether the replacement is a correction, a reclassification, a migration or a revocation.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009", "SRC-010" ] }, { "id": "de-dispute-ref", "name": "Dispute reference", "description": "Reference to an open or resolved dispute or rectification request concerning the binding.", "value_kind": "reference", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-010" ] } ], "artifacts": [ { "id": "art-binding-change-log", "name": "Binding change log", "description": "Append-only record of every state transition, correction, supersession, dispute and revocation affecting a binding, with actor, reason, timestamp and prior value.", "media_or_form": [ "append-only event log", "audit table", "versioned document history" ], "serial": true, "identity_strategy": "Binding identifier plus monotonically increasing sequence number; each entry additionally bears a ULID for global ordering across bindings.", "source_refs": [ "SRC-007", "SRC-010" ] } ], "inline_only_rationale": null } ] } ] }, { "id": "validation-interop-protection", "name": "Validation, Interoperability and Protection", "description": "Deciding whether a binding is conformant, detecting contradictions, deriving and exchanging bindings across systems, and protecting bindings that are sensitive.", "rationale": "FHIR supplies testable conformance semantics, ISO 25964-2 and SKOS supply mapping fidelity vocabulary, and GDPR makes protection of person-classifying bindings a legal obligation. Together these close the loop from specification to operation.", "source_refs": [ "SRC-002", "SRC-001", "SRC-013", "SRC-010" ], "layers": [ { "id": "validation-and-consistency", "name": "Validation and Consistency", "description": "Rules that decide conformance of a single binding and consistency across a set of bindings.", "source_refs": [ "SRC-002", "SRC-004", "SRC-016" ], "findings": [ { "id": "binding-validation-rules", "name": "Binding Validation Rules", "description": "A binding is validated against its slot specification: the scheme URI must resolve and be permitted, the version must be resolvable, the term must be a member of the permitted value space in that version, level and selectability constraints must hold, cardinality must be satisfied, and the outcome severity must follow the declared binding strength.", "source_refs": [ "SRC-002", "SRC-004", "SRC-006" ], "questions": [ { "id": "q-val-checks", "text": "What is the ordered set of checks a validator runs, and which are blocking?", "kind": "validation", "answer_data": [ "Ordered check list with identifiers", "Blocking versus advisory designation", "Severity derived from binding strength" ] }, { "id": "q-val-unresolvable", "text": "What happens when the scheme or version cannot be resolved at validation time?", "kind": "exception", "answer_data": [ "Offline fallback using an expansion snapshot", "Provisional acceptance rule and re-validation trigger", "Failure mode and error code" ] }, { "id": "q-val-deprecated", "text": "Is a binding to a deprecated or retired term a validation error, a warning, or acceptable for historical records?", "kind": "constraint", "answer_data": [ "Policy by binding age and status", "Distinction between new assertions and stored history", "Remediation deadline where applicable" ] }, { "id": "q-val-evidence", "text": "Is the validation outcome retained as evidence, and for how long?", "kind": "evidence", "answer_data": [ "Validation result record structure", "Validator identity and version", "Retention period for validation evidence" ] } ], "data_elements": [ { "id": "de-validation-outcome", "name": "Validation outcome", "description": "Result of validating a binding against its slot specification, with per-check severity.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002" ] }, { "id": "de-validator-version", "name": "Validator identity and version", "description": "The validating component and rule-set version that produced the outcome.", "value_kind": "identifier", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-002" ] } ], "artifacts": [ { "id": "art-validation-report", "name": "Binding validation report", "description": "Machine-readable outcome of validating one or many bindings, listing each check, its severity, the offending value and the rule that failed.", "media_or_form": [ "structured outcome document", "issue list", "CI or pipeline report" ], "serial": true, "identity_strategy": "Validation run ULID plus target binding or batch identifier; report references the validator version and the value space expansion used.", "source_refs": [ "SRC-002" ] } ], "inline_only_rationale": null }, { "id": "conflict-and-consistency-detection", "name": "Conflict and Consistency Detection", "description": "Detecting contradictions across a set of bindings on the same subject: mutually exclusive terms bound simultaneously where the scheme level declares exclusivity, ancestor and descendant terms bound as if independent, equivalent codings from different schemes that disagree, and duplicate assertions from competing authorities.", "source_refs": [ "SRC-016", "SRC-006", "SRC-001", "SRC-013" ], "questions": [ { "id": "q-conflict-types", "text": "Which conflict types are detected, and how is each defined precisely?", "kind": "validation", "answer_data": [ "Conflict type catalogue with detection predicates", "Scope of comparison (same slot, same subject, across schemes)", "Known false-positive patterns" ] }, { "id": "q-conflict-precedence", "text": "When two authorities assert incompatible bindings, which prevails and on what recorded basis?", "kind": "authority", "answer_data": [ "Precedence rule ordered by authority tier and recency", "Tie-breaking procedure", "Record of the losing assertion and why it lost" ] }, { "id": "q-conflict-crossscheme", "text": "How is a cross-scheme disagreement assessed given that mappings may be inexact?", "kind": "interoperability", "answer_data": [ "Mapping fidelity of the comparison path", "Threshold below which disagreement is not asserted", "Escalation for genuine contradictions" ] } ], "data_elements": [ { "id": "de-conflict-record", "name": "Conflict record", "description": "Detected inconsistency between bindings, with type, participants and resolution state.", "value_kind": "object", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-016" ] }, { "id": "de-precedence-basis", "name": "Precedence basis", "description": "Recorded reason one competing binding prevails over another.", "value_kind": "text", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-009" ] } ], "artifacts": [], "inline_only_rationale": "Conflicts surface as entries within the validation report artifact and as status changes on the affected binding records; a distinct artifact would duplicate both." } ] }, { "id": "interoperability", "name": "Derivation and Exchange", "description": "Bindings produced by mapping, and the projection of bindings into exchange formats without semantic loss.", "source_refs": [ "SRC-001", "SRC-013", "SRC-003", "SRC-012" ], "findings": [ { "id": "mapping-derived-bindings", "name": "Mapping-Derived Bindings", "description": "A binding may be produced by translating an existing binding through a mapping. SKOS provides exactMatch, closeMatch, broadMatch, narrowMatch and relatedMatch; ISO 25964-2 refines equivalence into exact, inexact and partial and adds hierarchical and associative mappings; XKOS ConceptAssociation supports m-to-n. Derived bindings must be marked as derived, must cite the mapping and its version, and must carry the fidelity of the mapping path so consumers do not treat them as original assertions.", "source_refs": [ "SRC-001", "SRC-013", "SRC-006" ], "questions": [ { "id": "q-map-source", "text": "Which source binding and which mapping entry, at which mapping version, produced this binding?", "kind": "provenance", "answer_data": [ "Source binding reference", "Mapping table identifier and version", "Mapping entry identifier" ] }, { "id": "q-map-fidelity", "text": "What is the fidelity of the mapping used, and what information was lost?", "kind": "quality", "answer_data": [ "Fidelity code (exact, close, broader, narrower, inexact, partial)", "Loss description", "Whether the derivation is reversible" ] }, { "id": "q-map-chaining", "text": "May derived bindings be chained through multiple mappings, and how does fidelity degrade along the chain?", "kind": "constraint", "answer_data": [ "Maximum chain length permitted", "Fidelity composition rule", "Prohibition on presenting a chained result as an exact match" ] }, { "id": "q-map-status", "text": "How is a derived binding distinguished from an original assertion in every projection?", "kind": "interoperability", "answer_data": [ "Derived flag and its representation in each exchange format", "Rule against setting user-selected on derived codings", "Consumer guidance for derived values" ] } ], "data_elements": [ { "id": "de-derived-flag", "name": "Derived flag", "description": "Marks the binding as produced by mapping rather than asserted directly.", "value_kind": "boolean", "cardinality": "1", "required": true, "source_refs": [ "SRC-001", "SRC-013" ] }, { "id": "de-mapping-ref", "name": "Mapping reference", "description": "Identifier and version of the mapping table and entry used.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-006", "SRC-013" ] }, { "id": "de-mapping-fidelity", "name": "Mapping fidelity", "description": "Declared closeness of the mapping relation used in the derivation.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-013" ] } ], "artifacts": [ { "id": "art-derivation-record", "name": "Binding derivation record", "description": "Record linking a derived binding to its source binding, the mapping artefact and entry, the fidelity of the relation and the derivation activity.", "media_or_form": [ "structured derivation entry", "PROV wasDerivedFrom assertion", "log record" ], "serial": false, "identity_strategy": "Derived binding identifier plus source binding identifier plus mapping version; no independent minting required.", "source_refs": [ "SRC-007", "SRC-013" ] } ], "inline_only_rationale": null }, { "id": "exchange-projection-and-round-trip", "name": "Exchange Projection and Round-Trip Fidelity", "description": "The same binding may be projected as a FHIR Coding or CodeableConcept, an RDF triple with dcterms:subject to a skos:Concept, an SDMX code reference within a hierarchy association, a JSON object, a Markdown front-matter field or a MongoDB document. Most projections are lossy: a bare Coding cannot carry status, validity interval, authority or dispute state. Each projection must declare which fields survive and how a round trip is reconstructed.", "source_refs": [ "SRC-003", "SRC-001", "SRC-012", "SRC-014" ], "questions": [ { "id": "q-proj-targets", "text": "Which exchange projections are supported, and what is the field mapping for each?", "kind": "interoperability", "answer_data": [ "Projection target list", "Field-by-field mapping table per target", "Extension mechanism used for fields with no native slot" ] }, { "id": "q-proj-loss", "text": "Which binding fields are lost in each projection, and how is that loss disclosed to the consumer?", "kind": "quality", "answer_data": [ "Lossy field list per projection", "Disclosure mechanism (profile note, link to full record)", "Reference back to the canonical binding record" ] }, { "id": "q-proj-roundtrip", "text": "Can a binding be reconstructed from a projection, and what canonical form is used for comparison?", "kind": "validation", "answer_data": [ "Round-trip test definition", "Canonical serialisation rules used for comparison", "Known non-round-trippable cases" ] } ], "data_elements": [ { "id": "de-projection-profile", "name": "Projection profile", "description": "Named mapping from the binding record to a specific exchange format, with lossy-field disclosure.", "value_kind": "object", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-003", "SRC-001" ] }, { "id": "de-canonical-form", "name": "Canonical form reference", "description": "Reference to the canonical serialisation used for digests and round-trip comparison.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-003" ] } ], "artifacts": [ { "id": "art-projection-manifest", "name": "Projection manifest", "description": "Declaration of every supported exchange projection for bindings: target format, version, field mapping, lossy fields, extension usage and round-trip test status.", "media_or_form": [ "mapping specification document", "machine-readable transform definition", "conformance statement" ], "serial": true, "identity_strategy": "Manifest URI plus semantic version; each published version is immutable and carries a content digest.", "source_refs": [ "SRC-003", "SRC-012" ] } ], "inline_only_rationale": null }, { "id": "parallel-codings-and-translation-set", "name": "Translations, mappings and uncoded text", "description": "A CodeableConcept may carry several Codings as translations of one concept plus text. SKOS mapping properties and GSIM correspondence tables relate items across schemes and are referenced, not duplicated. Uncoded text or dcat:keyword remains a valid degraded form when a URI is not feasible, with recommended later alignment.", "source_refs": [ "SRC-001", "SRC-018", "SRC-020", "SRC-021", "SRC-023" ], "questions": [ { "id": "parallel-codings-and-translation-set-q01", "text": "Which additional codings are translations of the same concept, and which coding is user-selected or preferred for exchange?", "kind": "interoperability", "answer_data": [ "coding_list", "user_selected_coding", "preferred_coding" ] }, { "id": "parallel-codings-and-translation-set-q02", "text": "What mapping or correspondence, if any, justifies treating two items from different schemes as comparable on this subject?", "kind": "relationship", "answer_data": [ "mapping_type", "source_concept", "target_concept", "correspondence_ref" ] }, { "id": "parallel-codings-and-translation-set-q03", "text": "If only a free-text keyword or literal subject is present, what controlled-vocabulary alignment is planned and who owns that gap?", "kind": "interoperability", "answer_data": [ "literal_keyword", "target_scheme", "alignment_owner", "alignment_status" ] }, { "id": "parallel-codings-and-translation-set-q04", "text": "When projecting to DCAT, is dcat:theme used for KOS concepts and dcat:keyword for literals, without assuming a fixed OWL range for theme?", "kind": "interoperability", "answer_data": [ "theme_iris", "keyword_literals", "projection_notes" ] } ], "data_elements": [ { "id": "parallel-codings-and-translation-set-data01", "name": "Additional codings", "description": "Translation or equivalent Coding entries for the same concept.", "value_kind": "collection", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-018" ] }, { "id": "parallel-codings-and-translation-set-data02", "name": "Mapping or correspondence reference", "description": "Reference to a SKOS mapping or GSIM correspondence used as justification.", "value_kind": "reference", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-001", "SRC-023" ] }, { "id": "parallel-codings-and-translation-set-data03", "name": "Uncoded keyword or literal subject", "description": "Literal used when a concept URI is not available.", "value_kind": "text", "cardinality": "0..n", "required": false, "source_refs": [ "SRC-020", "SRC-021" ] } ], "artifacts": [ { "id": "parallel-codings-and-translation-set-artifact01", "name": "Coding translation set", "description": "Bundle of equivalent or translated Codings for one concept on one subject, with optional mapping references.", "media_or_form": [ "CodeableConcept", "coding-set" ], "serial": false, "identity_strategy": "The parent binding master identifier; member codings are identified by system plus code, not by display.", "source_refs": [ "SRC-018" ] } ], "inline_only_rationale": null } ] }, { "id": "protection", "name": "Sensitivity, Access, Retention and Erasure", "description": "Treating the binding itself as potentially sensitive data with access, retention and deletion obligations.", "source_refs": [ "SRC-010", "SRC-009" ], "findings": [ { "id": "sensitive-binding-access-and-erasure", "name": "Sensitive Binding Access, Retention and Erasure", "description": "A binding can be more sensitive than the subject it describes. Classifying a natural person by health, ethnicity, religion, trade union membership, sex life or criminal convictions engages GDPR Article 9; automated classification of persons is profiling under Article 4(4) and may engage Article 22. Access, retention and erasure must therefore be governed at binding granularity, and erasure must not silently destroy the audit trail that legal or statistical obligations require.", "source_refs": [ "SRC-010", "SRC-009", "SRC-007" ], "questions": [ { "id": "q-prot-sensitivity", "text": "Does this binding constitute a special category of personal data or otherwise heightened-risk information?", "kind": "privacy", "answer_data": [ "Sensitivity determination with the category engaged", "Lawful basis and Article 9 condition relied upon", "Data protection impact assessment reference where required" ] }, { "id": "q-prot-access", "text": "Who may read this binding, and is read access narrower than access to the subject record?", "kind": "access", "answer_data": [ "Permitted reader roles and purposes", "Field-level masking rules", "Break-glass procedure and its logging requirement" ] }, { "id": "q-prot-retention", "text": "How long is the binding retained after it is superseded or revoked, and under what obligation?", "kind": "retention", "answer_data": [ "Retention period with the legal or business obligation cited", "Trigger that starts the retention clock", "Disposition action at end of period" ] }, { "id": "q-prot-erasure", "text": "When a binding must be erased, what remains, and how is the audit trail preserved without re-identifying the subject?", "kind": "exception", "answer_data": [ "Tombstone content specification", "Fields destroyed versus fields retained", "Propagation of erasure to derived bindings and downstream recipients" ] } ], "data_elements": [ { "id": "de-sensitivity-class", "name": "Sensitivity classification", "description": "Sensitivity level and special-category determination for the binding itself.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010" ] }, { "id": "de-access-scope", "name": "Access scope", "description": "Roles, purposes and conditions under which the binding may be read.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010" ] }, { "id": "de-retention-rule", "name": "Retention rule", "description": "Retention period and disposition action with the obligation that justifies it.", "value_kind": "object", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010", "SRC-009" ] }, { "id": "de-erasure-state", "name": "Erasure state", "description": "Whether the binding is live, tombstoned or fully destroyed, with the erasure timestamp.", "value_kind": "code", "cardinality": "0..1", "required": false, "source_refs": [ "SRC-010" ] } ], "artifacts": [ { "id": "art-erasure-tombstone", "name": "Erasure tombstone", "description": "Minimal residual record proving that a binding existed and was erased, holding the binding identifier, erasure authority, RFC 3339 erasure time and propagation status, without the erased content.", "media_or_form": [ "tombstone record", "audit log entry", "deletion certificate" ], "serial": false, "identity_strategy": "Retains the original binding identifier as its key so references do not dangle; carries no subject-identifying payload.", "source_refs": [ "SRC-010" ] } ], "inline_only_rationale": null } ] } ] } ] }, "functions": [ { "id": "declare-binding-slot", "name": "Declare binding slot", "description": "Register a classification slot for a subject type and context, naming the permitted value space, binding strength, cardinality and validation rules.", "inputs": [ "Slot name and context", "Scheme or value space reference", "Proposed binding strength and cardinality" ], "outputs": [ "Published binding slot profile version", "Registry entry for the slot" ], "preconditions": [ "Referenced scheme exists and is resolvable", "Approving authority identified", "Purpose statement recorded" ], "effects": [ "Slot becomes validatable", "Prior profile version marked superseded", "Consumers notified of the new profile version" ], "source_refs": [ "SRC-002", "SRC-014" ] }, { "id": "resolve-scheme-version", "name": "Resolve scheme and version", "description": "Resolve a scheme reference to a canonical URI and a concrete version, applying the slot's pinning mode and recording the resolution for reproducibility.", "inputs": [ "Scheme reference or name", "Requested or implied version", "Resolution time" ], "outputs": [ "Canonical scheme URI and resolved version", "Resolution provenance entry" ], "preconditions": [ "Scheme registry reachable or an expansion snapshot available" ], "effects": [ "Binding becomes version-pinned", "Unresolvable references raise a validation exception" ], "source_refs": [ "SRC-005", "SRC-002", "SRC-004" ] }, { "id": "propose-binding", "name": "Propose binding", "description": "Create a binding assertion in proposed state, capturing subject scope, term, role, origin, method, confidence and evidence.", "inputs": [ "Subject reference and scope", "Candidate term or expression", "Origin, method and evidence" ], "outputs": [ "Binding record in proposed state", "Assignment provenance record" ], "preconditions": [ "Slot declared", "Asserting agent authorised for the slot" ], "effects": [ "Binding identifier minted", "Validation scheduled" ], "source_refs": [ "SRC-003", "SRC-007", "SRC-008" ] }, { "id": "validate-binding", "name": "Validate binding", "description": "Run the ordered conformance checks for a binding against its slot profile and the resolved value space expansion, returning per-check severity derived from binding strength.", "inputs": [ "Binding record", "Binding slot profile version", "Value space expansion" ], "outputs": [ "Validation report with per-check outcomes", "Overall conformance verdict" ], "preconditions": [ "Scheme version resolved or snapshot available", "Validator version recorded" ], "effects": [ "Blocking failures prevent commitment", "Warnings recorded against the binding", "Validation evidence retained" ], "source_refs": [ "SRC-002", "SRC-004" ] }, { "id": "commit-binding", "name": "Commit binding", "description": "Move a validated binding to asserted or verified state, setting its validity interval and recording the responsible authority.", "inputs": [ "Validated binding record", "Validity interval", "Authority reference" ], "outputs": [ "Committed binding record", "Change log entry" ], "preconditions": [ "No blocking validation failures", "Committing agent authorised", "Separation of duties satisfied where review is required" ], "effects": [ "Binding becomes visible to consumers", "Conflicting active bindings flagged for resolution" ], "source_refs": [ "SRC-002", "SRC-009" ] }, { "id": "detect-binding-conflicts", "name": "Detect binding conflicts", "description": "Scan the set of active bindings on a subject for exclusivity violations, ancestor and descendant overlaps, cross-scheme disagreements and competing-authority duplicates.", "inputs": [ "Active binding set for a subject", "Scheme exclusivity and hierarchy declarations", "Mapping fidelity data" ], "outputs": [ "Conflict records with type and participants", "Precedence recommendation" ], "preconditions": [ "Scheme level exclusivity declarations available" ], "effects": [ "Affected bindings flagged", "Resolution task raised with an owner" ], "source_refs": [ "SRC-016", "SRC-006", "SRC-013" ] }, { "id": "derive-binding-via-mapping", "name": "Derive binding via mapping", "description": "Produce a binding in a target scheme from an existing binding by applying a versioned mapping entry, carrying the fidelity of the relation.", "inputs": [ "Source binding", "Mapping table identifier and version", "Target scheme and version" ], "outputs": [ "Derived binding marked as derived", "Derivation record with fidelity" ], "preconditions": [ "Mapping covers the source term", "Chain length within the declared limit" ], "effects": [ "Derived flag set and user-selected never set", "Fidelity loss disclosed to consumers" ], "source_refs": [ "SRC-001", "SRC-013", "SRC-006" ] }, { "id": "migrate-bindings-across-scheme-versions", "name": "Migrate bindings across scheme versions", "description": "Bulk-transform bindings from one scheme version to a successor version using a correspondence table, preserving originals and reporting unresolved splits.", "inputs": [ "Source and target scheme versions", "Correspondence table version", "Binding population selector" ], "outputs": [ "Successor bindings", "Migration run report", "Unresolved split queue" ], "preconditions": [ "Correspondence table published and versioned", "Migration policy approved" ], "effects": [ "Original bindings retained and marked superseded", "Time-series break disclosed where continuity is affected" ], "source_refs": [ "SRC-006", "SRC-004", "SRC-016" ] }, { "id": "supersede-or-correct-binding", "name": "Supersede or correct binding", "description": "Replace an existing binding, distinguishing correction of an error from reclassification following a real change in the subject, and linking the supersession chain.", "inputs": [ "Existing binding reference", "Replacement binding content", "Change kind and reason" ], "outputs": [ "New binding record", "Updated supersession chain", "Change log entry" ], "preconditions": [ "Acting agent authorised", "Effective date determined" ], "effects": [ "Prior binding closed with invalidation time", "Downstream recipients notified where required" ], "source_refs": [ "SRC-007", "SRC-010" ] }, { "id": "revoke-binding", "name": "Revoke or annul binding", "description": "End a binding's applicability by annulment, revocation, expiry or cessation of validity, recording the mode, its retroactivity and the deciding authority.", "inputs": [ "Binding reference", "Undo mode and legal or business trigger", "Deciding authority" ], "outputs": [ "Binding in terminal state with reason", "Notification to bound parties" ], "preconditions": [ "Authority competent to end the binding", "Trigger evidenced" ], "effects": [ "Binding no longer relied upon from the effective time", "Decisions taken in reliance flagged for review" ], "source_refs": [ "SRC-009" ] }, { "id": "measure-coding-quality", "name": "Measure coding quality", "description": "Sample bindings for a slot, re-code independently against a reference standard, compute agreement and error metrics and compare against acceptance thresholds.", "inputs": [ "Slot identifier and measurement period", "Sample design", "Reference standard" ], "outputs": [ "Coding quality report", "Threshold breach list" ], "preconditions": [ "Sufficient binding volume", "Independent coders or reference available" ], "effects": [ "Remediation tasks raised on breach", "Method or threshold review triggered" ], "source_refs": [ "SRC-016", "SRC-002" ] }, { "id": "project-binding", "name": "Project binding to exchange form", "description": "Serialise a binding into a declared exchange projection, applying the field mapping and disclosing lossy fields with a reference back to the canonical record.", "inputs": [ "Binding record", "Target projection profile" ], "outputs": [ "Projected representation", "Loss disclosure and canonical record reference" ], "preconditions": [ "Projection profile published", "Round-trip test status known" ], "effects": [ "Consumers receive a conformant representation", "Non-round-trippable cases explicitly flagged" ], "source_refs": [ "SRC-003", "SRC-001", "SRC-012" ] }, { "id": "erase-binding", "name": "Erase or tombstone binding", "description": "Destroy a binding's content under a legal or policy obligation while retaining a tombstone that preserves referential integrity and the audit trail.", "inputs": [ "Binding reference", "Erasure authority and legal basis", "Propagation scope" ], "outputs": [ "Tombstone record", "Propagation report to derived bindings and recipients" ], "preconditions": [ "No overriding retention obligation, or an approved exemption recorded", "Erasure authority verified" ], "effects": [ "Binding content irrecoverable", "Derived bindings re-evaluated or erased", "Erasure logged with RFC 3339 timestamp" ], "source_refs": [ "SRC-010" ] }, { "id": "query-subjects-by-classification", "name": "Query subjects by classification", "description": "Find classifiable subjects that have active bindings to a given item, including optional broader-closure if the scheme supplies hierarchy and policy allows inference.", "inputs": [ "scheme URI", "code or concept IRI", "optional facet filter", "optional effective time", "broader-closure flag" ], "outputs": [ "subject identifiers", "binding identifiers" ], "preconditions": [ "Query uses system plus code or concept IRI, not display text.", "Broader closure is used only when the scheme’s hierarchical relations are in scope and authorised." ], "effects": [ "Returns current assignments without rewriting historical bindings." ], "source_refs": [ "SRC-001", "SRC-021" ] }, { "id": "align-uncoded-text", "name": "Align uncoded text to a scheme item", "description": "Propose or apply a controlled concept URI or code for a literal subject or keyword.", "inputs": [ "literal text", "target scheme", "optional mapping evidence", "reviewer" ], "outputs": [ "coded binding or alignment proposal" ], "preconditions": [ "Literal exists.", "Target scheme is authorised for the facet." ], "effects": [ "Degraded keyword form is upgraded or a tracked gap remains with an owner." ], "source_refs": [ "SRC-020", "SRC-021", "SRC-022" ] }, { "id": "record-translation-coding", "name": "Record translation or mapped coding", "description": "Add an additional Coding as a translation of the same concept, or attach a reference to a correspondence that justifies a cross-scheme code.", "inputs": [ "existing binding", "additional system and code", "mapping or correspondence reference", "userSelected flag" ], "outputs": [ "updated coding list" ], "preconditions": [ "Additional coding identifies a concept in its own scheme.", "Mapping type is recorded when schemes differ." ], "effects": [ "CodeableConcept-style multiple encodings are available for interoperability.", "Preferred or user-selected coding is explicit." ], "source_refs": [ "SRC-001", "SRC-018", "SRC-023" ] } ], "composition": [ { "target": "Classification Scheme / Code List model (sibling; not yet registered)", "relation": "REFERENCE", "purpose": "Supplies the authoritative scheme, its terms, notations, levels, coverage declarations, term statuses and version history that a binding references but must never redefine.", "required": true, "source_refs": [ "SRC-001", "SRC-004", "SRC-006", "SRC-012" ] }, { "target": "Concept Mapping / Correspondence Table model (sibling; not yet registered)", "relation": "REFERENCE", "purpose": "Supplies versioned mapping entries and their fidelity so that derived bindings and cross-version migrations can cite a governed mapping rather than an ad hoc translation.", "required": false, "source_refs": [ "SRC-001", "SRC-006", "SRC-013" ] }, { "target": "Provenance and Attribution model (sibling; PROV-shaped)", "relation": "MIX-IN", "purpose": "Provides the generic agent, activity, plan, generation and invalidation constructs that the assignment-provenance layer specialises for classification.", "required": true, "source_refs": [ "SRC-007" ] }, { "target": "Agent / Party identity model (sibling; not yet registered)", "relation": "REFERENCE", "purpose": "Resolves asserting agents, generators, holders of decisions and dispute parties to governed identifiers without duplicating party management here.", "required": true, "source_refs": [ "SRC-007", "SRC-009" ] }, { "target": "Temporal Validity Interval pattern (sibling; not yet registered)", "relation": "MIX-IN", "purpose": "Supplies consistent RFC 3339 interval semantics, open-ended interval conventions and as-at query behaviour shared with other governed assertions.", "required": true, "source_refs": [ "SRC-007", "SRC-009" ] }, { "target": "Identifier Assignment pattern (sibling; not yet registered)", "relation": "MIX-IN", "purpose": "Applies the identity priority rule (master-system identifier, then governed IRI, then UUID or ULID) uniformly to bindings, decisions, profiles and reports.", "required": true, "source_refs": [ "SRC-005", "SRC-009" ] }, { "target": "Administrative Decision / Ruling model (sibling; not yet registered)", "relation": "REFERENCE", "purpose": "Holds the full decision instrument, holder, reasoning and appeal record where a binding carries legal force; the binding mirrors only status and validity.", "required": false, "source_refs": [ "SRC-009" ] }, { "target": "Access Control Policy model (sibling; not yet registered)", "relation": "REFERENCE", "purpose": "Evaluates the access scope declared on sensitive bindings; this model declares the scope but does not implement enforcement.", "required": false, "source_refs": [ "SRC-010" ] }, { "target": "Retention and Disposition Schedule model (sibling; not yet registered)", "relation": "REFERENCE", "purpose": "Supplies retention periods and disposition actions cited by the binding retention rule and by erasure tombstones.", "required": false, "source_refs": [ "SRC-010" ] }, { "target": "Security Marking / Confidentiality Label model (sibling; not yet registered)", "relation": "EXTEND", "purpose": "Specialises this pattern for enforcement-bearing labels, adding propagation, downgrade and marking-rendering rules that the base pattern deliberately omits.", "required": false, "source_refs": [ "SRC-002", "SRC-010" ] }, { "target": "W3C SKOS Reference (skos:Concept, skos:inScheme, mapping relations)", "relation": "ALIGN", "purpose": "External alignment target for RDF projections and for mapping-relation vocabulary; alignment is asserted, conformance is not claimed without a passing round-trip test.", "required": false, "source_refs": [ "SRC-001", "SRC-015" ] }, { "target": "HL7 FHIR R5 Coding / CodeableConcept and ElementDefinition.binding", "relation": "ALIGN", "purpose": "External alignment target for healthcare exchange and for binding-strength semantics; the FHIR Coding projection is lossy and must be marked as such.", "required": false, "source_refs": [ "SRC-002", "SRC-003" ] }, { "target": "W3C Web Annotation Data Model (Annotation, purpose, creator/generator)", "relation": "ALIGN", "purpose": "External alignment target for the reified-assertion shape, purpose vocabulary and the creator versus generator separation.", "required": false, "source_refs": [ "SRC-008" ] }, { "target": "ISO/IEC 11179 Metadata Registry (Classifiable_Item, classification schemes)", "relation": "ALIGN", "purpose": "Alignment for applying this pattern to registered metadata items so that data elements and value domains can be classified with the same machinery.", "required": false, "source_refs": [ "SRC-011" ] } ], "serviceLayers": { "dimension": { "owner_package_requirements": [ "Each adopting Dimension names a single accountable owner for the Classification Binding package, distinct from the owners of the referenced scheme packages, and records that owner in AGENTS.md.", "The Dimension publishes its binding slot profiles as versioned artifacts and declares, for every slot, the scheme, permitted value space, binding strength, cardinality and validation severity mapping.", "The Dimension declares which schemes it treats as authoritative, which are mirrored as expansion snapshots, and the refresh cadence and staleness tolerance for each mirror.", "The Dimension records, per slot, whether subjects may be natural persons and, where they may, the applicable lawful basis, special-category condition and rectification procedure.", "The Dimension declares its identifier minting policy for bindings, profiles, reports and tombstones in line with the identity priority rule." ], "namespace_guidance": "Bindings live in a namespace owned by the classifying Dimension, never in the scheme publisher's namespace. Use a stable base such as {dimension-base}/classification-binding/{slot}/{binding-id} for binding records and {dimension-base}/classification-binding/profile/{slot}|{version} for slot profiles. Scheme and term identifiers are always carried verbatim in the publisher's namespace and are never rewritten, prefixed or normalised into a local namespace; where a local alias is unavoidable it is recorded as an alias with the canonical URI retained.", "registry_links": [ "vr.wm-xct-020 is the registry entry for this pattern; sibling entries for the Classification Scheme and Concept Mapping models must be created before this pattern can be marked production-ready, since both are currently unregistered.", "Scheme canonical URIs are resolved against the publisher's registry (for example the HL7 code system URI list) and mirrored in a Dimension-level scheme registry that records URI, publisher, version history and mirror freshness.", "Each binding slot profile is registered with its canonical URI plus version so that a validation outcome can name the exact profile version it was judged against." ] }, "canon_and_patch": { "canonicalization_rules": [ "Canonical form is a normalised object graph, not a file format: keys sorted lexicographically, no insignificant whitespace, Unicode NFC, and empty or null-valued optional fields omitted rather than emitted as null.", "All instants are RFC 3339 with seconds and an explicit offset or Z; the original offset from the source is preserved and any normalisation to UTC is recorded alongside rather than replacing the original.", "Scheme URIs, term URIs and notations are compared byte-for-byte after IRI normalisation only; case folding and label-based matching are prohibited, and display labels are excluded from the canonical digest.", "Version-specific references use the publisher's own convention where one exists (for example url|version) and are otherwise expressed as an explicit scheme URI plus version field pair.", "Derived and inherited bindings canonicalise identically to asserted ones except that the derived flag and mapping reference participate in the digest." ], "patch_rules": [ "Committed bindings are never mutated in place. A change is expressed as a new binding record linked by a supersedes reference, with a change kind distinguishing correction from reclassification.", "Only pre-commitment records in proposed state may be patched, and every patch is recorded in the binding change log with actor, timestamp and prior value.", "A patch may never change the subject reference, the scheme URI or the binding identifier; changing any of these creates a new binding and closes the old one.", "Erasure is not a patch: it produces a tombstone through the erase-binding function and is subject to a separate authority check.", "Bulk migrations patch nothing; they emit successor bindings and a migration run report, leaving originals intact and marked superseded." ], "compatibility_rules": [ "Tightening a binding strength, narrowing a permitted value space, or reducing a slot's maximum cardinality is a breaking change requiring a major profile version and a migration plan for non-conformant existing bindings.", "Adding a new optional slot, widening a value space, or relaxing strength from required toward preferred is a minor version change, but existing bindings must not be silently re-validated as failing.", "Adding fields to the binding record is minor only if consumers that ignore unknown fields still reach the same conformance verdict; otherwise it is breaking.", "A change in the referenced scheme version is never automatically compatible: the version-drift policy for the slot decides whether existing bindings are frozen, migrated or invalidated.", "Alignment with an external standard may be asserted only where a round-trip projection test passes; otherwise the alignment is recorded as partial with the failing fields enumerated." ] }, "artifact_rules": { "identity_priority": [ "Identifier issued by the authoritative master system for the artifact, used verbatim (for example a customs authority's decision reference for a classification decision instrument).", "Governed global identifier or IRI in a namespace the Dimension controls, for artifacts the Dimension itself originates (binding records, slot profiles, projection manifests).", "UUIDv4 or ULID minted by the adopting Dimension where neither of the above exists; ULID is preferred for serial artifacts because it preserves creation ordering.", "A date, period label, filename or display label is never an identifier; periods and versions may qualify an identifier but may not constitute one." ], "timestamp_rule": "All timestamps are RFC 3339 with seconds and an explicit UTC offset or Z. Event or subject-state time, assertion time, ingestion or observation time, validity start and end, and invalidation time are recorded in separate fields and are never conflated; when a source supplies only a date, that is stored as a date-typed value with an explicit note rather than being widened to a fabricated instant.", "serial_naming_rule": "Serial artifacts are named by a stable subject key plus a monotonic qualifier: slot or scheme identifier, then version or RFC 3339 period boundary, then a sequence number where more than one instance can share a period. Example shapes are {slot-uri}|{profile-version} for slot profiles, {slot-uri}@{period-start}_{period-end} for quality reports and {source-version}->{target-version}@{run-start} for migration run reports. Sequence numbers never restart and gaps are recorded rather than closed.", "integrity_rule": "Every published artifact carries a content digest computed over its canonical form, the identifier and version of the producing component, and the identifiers of the artifacts it depended on (slot profile version, value space expansion, mapping version, validator version). Immutable artifacts are write-once and any correction is a new version referencing the prior digest; tombstones retain the identifier and digest of the erased artifact without its content." }, "policies": [ "A binding may never be asserted against a scheme version that cannot be resolved or reconstructed from a retained expansion snapshot; unresolvable references are validation failures, not warnings.", "Derived, inherited and mapping-produced bindings must be marked as such in every projection and must never carry a user-selected marker or be presented as original assertions.", "Bindings whose subject is a natural person and whose term reveals a special category of personal data are access-restricted by default and require a recorded lawful basis before assertion.", "History is preserved by default: superseded, revoked and expired bindings are retained with their reasons unless an overriding erasure obligation applies, in which case a tombstone remains.", "No conformance claim to an external standard is published without a passing round-trip projection test; partial alignments are published as partial with the failing fields enumerated.", "Binding strength governs validation severity, not data acceptance: a preferred or example binding that is violated is recorded and reported, never silently discarded.", "Default: a coded binding SHALL include a code-system or concept-scheme URI; value-set URLs SHALL NOT be stored as system.", "Default: membership in a required binding is tested against a recorded value-set expansion; display-only matching is prohibited.", "Historical bindings are retained after supersession for the Dimension retention period unless a recorded erasure exception applies.", "Sensitive classification bindings (health, personal characteristics, restricted topics) are confidential by default and are not security-label substitutes." ], "crud": { "read": [ "Read a single binding by identifier, returning the full record including status, validity, provenance and sensitivity classification.", "Read the active binding set for a subject as at a supplied RFC 3339 instant, honouring validity intervals and lifecycle state.", "Read the binding history for a subject and slot, including superseded, revoked and tombstoned entries where the caller is authorised.", "Read a binding slot profile version and its associated value space expansion for offline validation." ], "create": [ "Create a proposed binding through propose-binding, minting an identifier and an assignment provenance record.", "Create a derived binding through derive-binding-via-mapping, with the derived flag and fidelity set.", "Create a binding slot profile version through declare-binding-slot, subject to approval by the named authority.", "Bulk-create successor bindings through migrate-bindings-across-scheme-versions, always alongside a migration run report." ], "update": [ "Update a proposed binding's content before commitment, logging actor, timestamp and prior value.", "Update lifecycle state through guarded transitions only (commit, verify, dispute, expire, revoke, withdraw).", "Update non-semantic caches such as the display label snapshot, which is excluded from the canonical digest.", "Semantic change to a committed binding is prohibited; it is expressed as supersession through supersede-or-correct-binding." ], "delete": [ "Hard deletion of a committed binding is prohibited by default; the normal terminal operations are expiry, revocation and withdrawal.", "Erasure under a legal obligation is performed through erase-binding, leaving a tombstone that preserves the identifier, erasure authority and RFC 3339 erasure time.", "Erasure propagates to bindings derived from the erased binding and to declared downstream recipients, with the propagation outcome recorded.", "Proposed bindings that were never committed may be deleted outright, provided the change log entry recording their existence and deletion is retained." ] }, "roles": [ { "name": "Binding steward", "responsibilities": [ "Owns binding slot profiles for a subject domain: their scheme choice, value space, strength and cardinality.", "Approves version-drift policy and migration plans for the slots they own.", "Adjudicates conflicts and precedence between competing bindings." ] }, { "name": "Classifier (human or automated)", "responsibilities": [ "Asserts bindings within their authorised slots, recording origin, method, evidence and confidence.", "Escalates cases where no admissible term applies rather than forcing a residual term.", "Submits recurring uncoded texts as candidate-term proposals." ] }, { "name": "Terminology liaison", "responsibilities": [ "Maintains scheme registrations, canonical URIs, mirrored expansions and their freshness.", "Tracks scheme releases, deprecations and correspondence tables and notifies affected stewards.", "Represents the Dimension to scheme publishers when proposing new or amended terms." ] }, { "name": "Quality auditor", "responsibilities": [ "Designs and runs coding quality measurement for each slot and publishes the quality report.", "Verifies that validation evidence and provenance are sufficient to reproduce past assignments.", "Raises remediation on threshold breaches and verifies closure." ] }, { "name": "Data protection officer or privacy reviewer", "responsibilities": [ "Determines whether bindings in a slot constitute special-category or heightened-risk data and records the lawful basis.", "Approves access scopes, retention rules and erasure decisions for person-classifying bindings.", "Oversees rectification and automated-decision review routes and their deadlines." ] }, { "name": "Decision authority", "responsibilities": [ "Issues, annuls and revokes bindings that carry legal or contractual force, and records the instrument conferring that force.", "Determines jurisdictional reach and validity periods for such bindings.", "Handles challenges and appeals and records their outcome and retroactivity." ] } ], "access": { "default_rule": "Read access to a binding is no wider than read access to its subject, and is narrowed further where the binding itself is classified as sensitive. Write access is slot-scoped and role-scoped: a principal may assert only in slots for which their role is listed as authorised, and commitment of high-force bindings requires a second, distinct principal.", "scopes": [ "bundle", "layer", "finding", "artifact" ], "exceptions": [ "Break-glass read of restricted person-classifying bindings for urgent legitimate purposes, requiring a recorded justification, a named approver and mandatory post-hoc review.", "Aggregate or statistical read of bindings without subject identifiers, permitted at a broader scope where a documented disclosure-control method (suppression or perturbation thresholds) is applied.", "Regulator or auditor read of the full binding record, change log and dossier for bindings within their remit, without the subject's consent where a legal mandate applies.", "Automated validator and migration processes may read value space expansions and binding metadata at scale while being denied access to sensitive term values, operating on hashed or tokenised term references where the slot is restricted.", "Erasure and tombstone records remain readable to compliance roles after the underlying binding content is destroyed.", "Subject data owner may read bindings on their own subject.", "Lawful statistical or clinical users may read specified facets under recorded purpose limitation.", "Public catalog projections may publish non-sensitive dcat:theme IRIs without exposing provenance of automated classifiers." ], "audit_requirements": [ "Every read of a binding classified as sensitive is logged with principal, purpose, RFC 3339 timestamp and the authorising rule or break-glass approval.", "Every lifecycle transition, supersession, revocation, migration and erasure is logged immutably with actor, reason, prior value and timestamp.", "Validation runs record the validator version, slot profile version and value space expansion used, so that a historical verdict can be reproduced.", "Audit logs are retained at least as long as the bindings they describe, survive erasure of binding content, and are themselves access-controlled and tamper-evident.", "Log create, supersede, translate, validate and delete with agent, RFC 3339 event time and observation time.", "Log access to sensitive bindings.", "Retain validation reports for the same period as the binding they attest." ] }, "agents_bootstrap": { "filename": "AGENTS.md", "required_fields": [ "Name", "Type", "Specification URL", "Storage type URL", "Interface URL", "Processes URL", "Owner and accountable contact", "Identifier minting policy and namespace base", "Authoritative scheme registry URL and mirror freshness policy", "Binding slot profile registry URL", "Sensitivity and lawful-basis declaration for person-classifying slots", "Alignment status per external standard with round-trip test results" ], "read_order": [ "AGENTS.md: identify the model, its type, and the specification, storage, interface and process endpoints before any operation.", "Specification: read the Classification Binding model definition, scope and boundary notes to confirm that the intended operation belongs to this model and not to the sibling Classification Scheme or Concept Mapping models.", "Binding slot profile registry: resolve the slot for the subject type and context, and read its scheme, permitted value space, strength, cardinality and validation rules.", "Scheme registry and value space expansion: resolve the canonical scheme URI and the concrete version, or load the retained expansion snapshot if operating offline.", "Processes: read the create, validate, commit, supersede, migrate and erase procedures, including required approvals and separation of duties.", "Access and sensitivity declaration: confirm the caller's authorisation for the slot and whether the slot is person-classifying before reading or asserting.", "Interface: bind to the concrete storage and transport projection last, since it is a projection of the semantics and never a source of them." ] } }, "coverage": { "claim": "Covers the reified classification-binding assertion plus its design-time slot specification, evidenced across health terminology (FHIR R5), knowledge organisation (SKOS/XKOS/ISO 25964), statistical classification (UNSD, SDMX, UNECE GSIM), cataloguing (DCMI, DCAT 3, ISO 19115 keywords), metadata registries (ISO/IEC 11179), provenance (PROV-O, Web Annotation) and legally binding rulings (EU BTI, GDPR). Alignment is claimed, not conformance to any cited standard. Scheme-internal structure, value-set composition and correspondence tables are delegated to unregistered sibling models; confidence semantics, non-EU ruling regimes, case-sensitivity rules and multi-domain profile validation remain open. No claim of universal completeness is made.", "confidence": "medium", "checklist": [ { "dimension": "identity", "status": "covered", "notes": "Binding identifier plus natural key, scheme canonical URI (FHIR: specified URIs SHALL be used in preference to any other identifying mechanism), version pinning, term URI versus notation, and the explicit rule that display labels and dates are never identity. Identity priority is restated in artifact_rules." }, { "dimension": "lifecycle", "status": "covered", "notes": "Enumerated states with guarded transitions, invalidation time from PROV-O, and four distinct end modes grounded in the BTI regime (expiry, annulment, revocation, cessation of validity). Correction versus reclassification is separated explicitly." }, { "dimension": "relationships", "status": "covered", "notes": "Subject-to-term binding, supersession chains, derivation from mappings, hierarchy propagation policy, and cross-scheme equivalence via SKOS mapping relations and ISO 25964-2 equivalence refinements." }, { "dimension": "temporal", "status": "covered", "notes": "Four separated frames (subject-state, assertion, ingestion/observation, validity interval) with RFC 3339 and explicit offset required; retroactive and prospective assertion is governed rather than assumed." }, { "dimension": "provenance", "status": "covered", "notes": "PROV-O agent/activity/plan constructs, method and version identity for reproducibility, FHIR userSelected and Web Annotation creator-versus-generator separation, and input digests for re-derivation." }, { "dimension": "ownership", "status": "covered", "notes": "Six roles with responsibilities, slot stewardship, decision authority for legally binding classifications, and the requirement that the binding namespace is owned by the classifying Dimension and never by the scheme publisher." }, { "dimension": "validation", "status": "covered", "notes": "Ordered check list, severity derived from FHIR binding strength, offline validation against a dated expansion snapshot, deprecated-term policy, and conflict detection using scheme-declared mutual exclusivity." }, { "dimension": "access", "status": "covered", "notes": "Default rule narrower than subject access, four declared scopes, five exception classes including break-glass and regulator access, and four audit requirements including reproducibility of historical validation verdicts." }, { "dimension": "retention and deletion", "status": "covered", "notes": "History-preserving default, retention rule citing its obligation, erasure through tombstones that retain identifier and digest but not content, and propagation of erasure to derived bindings and downstream recipients." }, { "dimension": "interoperability", "status": "covered", "notes": "Projection manifest with per-format field mapping and lossy-field disclosure, round-trip test as the precondition for any conformance claim, and four external alignment targets recorded as ALIGN rather than conformance." }, { "dimension": "authority and legal effect", "status": "covered", "notes": "Grounded in the EU BTI regime: binding on all EU customs administrations and on the holder, generally three years' validity, annulment for inaccurate or incomplete information, revocation on nomenclature change, CJEU rulings or WCO decisions." }, { "dimension": "measurement and quality", "status": "covered", "notes": "Per-binding confidence with declared scale and calibration status, plus population-level coding quality measurement with sampling, agreement, thresholds and remediation." }, { "dimension": "privacy", "status": "covered", "notes": "GDPR Article 9 special categories, Article 4(4) profiling, Article 22 automated decision-making and Article 16 rectification are each mapped to specific questions and data elements." }, { "dimension": "residual and unclassifiable cases", "status": "covered", "notes": "Residual scheme terms are distinguished from unknown, not-applicable, refused and not-yet-classified states, with follow-up obligations and a candidate-term feedback path to scheme governance." }, { "dimension": "spatial", "status": "not-applicable", "notes": "Location is relevant only as jurisdictional reach of an authority, which is covered under authority. Geospatial classification of places is a subject-model concern, not a property of the binding pattern; no primary source supports adding a spatial layer here." }, { "dimension": "confidence semantics interoperability", "status": "gap", "notes": "No consulted primary source standardises a confidence field for classification assignments. The model therefore requires confidence semantics to be locally declared and warns that scores are not comparable across systems; this node is marked as a gap rather than presented as canonical." } ], "known_omissions": [ "The sibling Classification Scheme and Concept Mapping models are unregistered, so the required REFERENCE composition links point to named but non-existent registry entries; this pattern cannot be marked production-ready until they exist.", "ISO/IEC TR 11179-2:2019 and ISO/IEC 11179-3:2023 are paywalled. Support is drawn from the publicly visible ISO catalogue abstract (Classifiable_Item, registering classification schemes to classify registered items) and not from the normative text; clause-level obligations were not verified.", "The UNSD Best Practice Guidelines PDF and the SDMX Section 2 Information Model PDF could not be machine-parsed in this session. Claims from them are limited to statements confirmed through indexed excerpts and the SDMX standards landing page; deeper obligations were not verified.", "No primary source was found that standardises confidence, calibration or acceptance thresholds for classification assignments; that node is declared a gap.", "Inter-annotator agreement statistics are referenced generically; no specific normative metric (for example a named kappa variant) is prescribed, because no consulted authority mandates one for classification binding.", "Post-coordinated expression grammars are acknowledged via FHIR's compositional flag but their syntax, normalisation and equivalence testing are left to the scheme model.", "Non-EU legal regimes for binding classification rulings (for example US Customs binding rulings or WCO advance rulings in other jurisdictions) were not examined; the authority layer is generalised from a single, well-documented EU regime.", "Machine-readable serialisation of the binding record in any specific format is deliberately absent, consistent with the format-neutrality requirement.", "XKOS (DDI Alliance SKOS extension for statistical classifications) is widely cited for levels, correspondence and ruling notes, but the W3C TR URL returned 404 during this run; GSIM 2.0 is used as the statistical primary instead.", "ISO/IEC 11179-3:2023 Classification package classes (Classification_Scheme, Classification_Scheme_Item, item_classification) are cited via Part 1 terms sourced from Part 3; the full Part 3 metamodel text was not retrieved.", "ISO 25964 thesaurus model, UN/CEFACT CCTS classification, GS1 GPC and SNOMED CT compositional grammar are not developed as first-class findings.", "No primary standard retrieved here defines calibrated confidence for machine-learned classification; confidence is marked locally defined.", "Negative classification (explicit not-this-class), part-versus-whole classification, and legal determination artefacts (court or regulator classification orders) lack primary support in the retrieved sources.", "OWL class assertion versus SKOS tagging is bounded but not fully mapped to description-logic instance checking." ], "conflicts": [ "SKOS states that no formal disjointness is declared between skos:Concept and owl:Class, while the SKOS Primer notes that OWL-DL prevents treating SKOS concepts as OWL classes. The model resolves this by requiring an explicit entailment-mode field per binding rather than assuming either reading.", "FHIR requires bindings to externally defined value sets to specify a value set version, whereas SKOS and DCMI place no version obligation on a concept scheme reference and DCMI permits literal values from controlled vocabularies. The model adopts the stricter FHIR position for required-strength slots and records version-pinning mode explicitly for the rest.", "FHIR's CodeSystem.versionNeeded acknowledges that code systems may not commit to concept permanence across versions, while UNSD guidance treats mutual exclusivity as mandatory and stable within a classification. A binding that was valid and exclusive under one version can become ambiguous under the next; the model handles this through explicit version-drift policy rather than assuming stability.", "SKOS exactMatch is transitive, which permits inference chains across schemes, while ISO 25964-2 distinguishes exact from inexact and partial equivalence and gives no transitivity licence for the weaker relations. The model caps mapping-chain length and requires composed fidelity to be recorded rather than relying on transitive closure.", "GDPR Article 16 rectification and Article 17 erasure pull toward destroying inaccurate person-classifying bindings, while audit, statistical and legal-decision obligations pull toward retaining full history. The model resolves this with tombstones plus a required record of the overriding obligation, and flags that the balance is jurisdiction-specific.", "SKOS explicitly states that a concept scheme's boundary cannot be closed, whereas FHIR required bindings assume a closed, expandable value set. The model therefore requires a dated expansion snapshot for any required-strength slot rather than relying on the scheme itself to be closed.", "GSIM and UN statistical practice treat categories as mutually exclusive and exhaustive; DCAT allows multiple themes and SKOS allows polyhierarchy. Slot policy must choose; neither rule is universal.", "FHIR concept identity is system URI plus code (version when needed); SKOS and DCMI prefer a concept URI; ISO/IEC 11179 uses registry identifiers. All three are aligned, not merged.", "FHIR allows omitting code-system version when meaning is stable; GSIM treats each Statistical Classification version as a distinct object.", "dcterms:type (nature/genre) versus dcterms:subject / dcat:theme (topic) are different facets; collapsing them loses DCAT and DCMI distinctions.", "DCAT 3 dropped an explicit OWL range on dcat:theme; earlier DCAT text ranged theme to skos:Concept. Implementations must not claim a closed range.", "ISO 19115 MD_TopicCategoryCode documents overlaps among high-level categories; that contradicts exclusivity assumptions from statistical classifications.", "The English word binding in FHIR means an element constraint; classification in ISO 11179 means an assignment. This model unions both and keeps them as distinct layers so they are not collapsed." ], "regional_assumptions": [ "The authority, legal-effect and revocation semantics are generalised from the EU Union Customs Code BTI regime (Regulation (EU) No 952/2013, applicable from 1 May 2016). Other jurisdictions issue binding classification rulings with different validity periods, revocation triggers and appeal routes; adopters outside the EU must substitute their own instrument.", "Privacy obligations are derived from GDPR and therefore assume an EU or EU-aligned regime. Jurisdictions without a special-category concept, without a general rectification right, or with different automated-decision rules will need a different sensitivity determination and erasure policy.", "Exhaustiveness and mutual-exclusivity obligations follow UN Statistics Division guidance for international statistical classifications; multi-label operational taxonomies, product tagging schemes and machine-learning label sets routinely and legitimately violate mutual exclusivity, which is why the model makes exclusivity a declared property rather than an assumption.", "Canonical scheme URI identification follows the FHIR terminology convention, which is authoritative in healthcare but only conventional elsewhere; other domains use OIDs, URNs or registry codes, and the model accommodates these as alternate identifiers with a recorded authority.", "Language and label handling assumes multilingual schemes are possible but does not prescribe a language-negotiation rule; adopters in multilingual jurisdictions must declare one.", "HL7 Terminology Authority and terminology.hl7.org URI allocation apply to FHIR-centric health code systems and are not a global naming authority for ISIC, NACE, NAICS or ISO 19115 topic categories.", "NACE is the usual activity classification in the EU; NAICS in the USMCA area; ISIC is the UN reference. Jurisdiction must be explicit on economic-activity bindings.", "INSPIRE implementing rules in Europe constrain how ISO 19115 keywords and controlled vocabularies appear in spatial metadata; they are a regional profile, not the core pattern.", "Lexical language tags follow BCP 47 as used by SKOS and FHIR; no single official language is assumed.", "UNECE GSIM 2.0 (November 2024) is taken as the current statistical information-model authority; national adaptations of GSIM item-change types may differ." ], "adversarial_checks": [ "Counterexample sought for treating a binding as a simple property value: the EU BTI regime shows a classification carrying a holder, a three-year validity, EU-wide binding force, annulment and revocation routes and an appeal path. A bare property value cannot represent any of that, so reification is retained as necessary rather than ornamental.", "Counterexample sought for assuming classification implies typing: the SKOS Primer directs subject indexing through dcterms:subject to a skos:Concept and notes OWL-DL prevents treating SKOS concepts as OWL classes. The tempting shortcut of modelling a binding as rdf:type was therefore rejected, and an explicit entailment-mode field was added instead.", "Counterexample sought for assuming scheme terms are stable: FHIR's CodeSystem.versionNeeded explicitly signals that a code system may not commit to concept permanence across versions, and XKOS models supersession and variants. Version pinning and an explicit drift policy were therefore made mandatory rather than optional.", "Counterexample sought for assuming mutual exclusivity: UNSD makes exclusivity mandatory for statistical classifications, but document tagging, product categorisation and multi-label machine learning routinely bind several overlapping terms at once. Exclusivity was demoted from an invariant to a declared, scheme-sourced property.", "Counterexample sought for assuming the wire format carries the semantics: a FHIR Coding cannot express lifecycle state, validity interval, authority, confidence or dispute status. This falsified any design that treats Coding, a SKOS triple or an SDMX code reference as the model, and forced the projection manifest with explicit lossy-field disclosure.", "Attractive but unsupported structure rejected: a 'classification confidence' layer with standardised scales and thresholds was drafted and cut back to a locally declared, non-comparable field, because no consulted primary source standardises such semantics. It is recorded as a gap rather than presented as canonical.", "Attractive but unsupported structure rejected: a mapping-authoring layer (defining correspondence entries, their approval and their publication) was drafted and removed, because SKOS, XKOS and ISO 25964-2 all locate mapping ownership in a vocabulary or correspondence artefact, not in the assertion that consumes it. It became a REFERENCE composition link instead.", "Boundary stress-tested against security marking: confidentiality labels fit the binding shape but add enforcement, propagation and downgrade obligations with no support in any consulted classification source. They were modelled as an EXTEND rather than absorbed, to avoid overreaching the pattern's evidence base.", "Could this model be only FHIR Coding? No. Coding is the instance payload; the pattern also covers element binding strength, ISO 11179 classifiable-item association, DCAT themes, geospatial keywords and statistical variable coding.", "Could this duplicate a Concept Scheme model? No. Schemes, hierarchies and editorial notes are referenced siblings; this pattern is the assignment and the slot constraint.", "Could Identifier absorb this pattern because both use system plus a token? No. FHIR distinguishes Identifier.value from Coding.code; using dates or display as identifiers is forbidden.", "Could security classification absorb this pattern? No. Sensitivity of a subject-matter code is an access concern; TLP/CUI labels are out of scope.", "Does uncoded text break the model? No. DCMI and DCAT allow literals and keywords as degraded forms with recommended later URI alignment.", "Does dual-running during ISIC or similar revisions contradict a single-class invariant? It contradicts GSIM exclusivity at a point in time unless policy allows a transition window; that window is an explicit lifecycle case, not an unstated default.", "Is universal completeness claimed? No. XKOS, full ISO 11179-3, post-coordination grammars and ML confidence remain documented gaps." ] }, "researchAdjudication": { "providerMode": "dual-provider", "activeProviders": [ "claude", "grok" ], "waivedProviders": [], "providerPolicy": {}, "boundaryDecision": { "entry_kind": "pattern", "status": "accepted", "rationale": "Both providers independently converge on entry_kind=pattern with the same registry_id, and both draw the same outer boundary: the model owns the reified assertion binding a subject to a scheme term plus the slot-level constraint that governs which terms may fill it, while scheme-internal structure, value-set composition and cross-scheme correspondence stay in sibling models. The base retains Claude's explicit two-plane split (design-time Binding Specification vs instance-time Binding Assertion), which keeps the FHIR sense of 'binding' (element constraint) and the ISO/IEC 11179 sense (item classification) separated rather than collapsed — the union Grok flags as its own hardest boundary risk. It is format-neutral and composable, so neither an entity/domain model nor a service; no split, reclassification or merge is warranted." }, "decisions": [ { "concept": "Base provider selection", "disposition": "Claude as base", "rationale": "Claude carries eight source-referenced boundary notes, explicit in/out-of-scope lists, and a clean two-plane structure separating design-time slot specification from instance-time assertion. Grok's bundles mix element-binding policy with instance facet/role and fold translations, access and retention into one layer. Boundary clarity, not the 27-vs-15 finding count, decides it." }, { "concept": "Entry kind", "disposition": "pattern, accepted without split", "rationale": "Both providers independently assigned pattern for the same registry_id and drew the same outer boundary; no evidence in either pack supports splitting the design-time constraint into a separate registry entry, and both explicitly reject absorbing scheme-internal structure." }, { "concept": "Design-time versus instance-time separation", "disposition": "Retained from base", "rationale": "Grok's own conflict list names the FHIR sense of 'binding' (element constraint) versus the ISO/IEC 11179 sense (item assignment) as the model's central ambiguity. Claude's bundle split already keeps them distinct, so the union is safe to carry forward." }, { "concept": "Value set versus code system as the bound object", "disposition": "Accepted from Grok into slot-declaration", "rationale": "A real implementation trap the base never states: the value-set canonical URL is not the code-system URL, and additional bindings may tighten a main binding per context. Directly evidenced in FHIR R5 terminologies." }, { "concept": "Lexical form, display and language tagging", "disposition": "Accepted from Grok into binding-identity", "rationale": "The base's own regional assumptions concede that language and label handling is unprescribed. SKOS label types with BCP 47 tags and the FHIR display-versus-text distinction fill a genuine hole and reinforce the existing rule that labels are not identity." }, { "concept": "Facet axis: type/genre versus subject/theme", "disposition": "Accepted from Grok into assertion-content, deduplicated on merge", "rationale": "DCMI, DCAT 3 and ISO 19115 evidence a facet dimension orthogonal to the base's Web Annotation motivation axis. Only the facet and primary-versus-additional content is imported; the multiplicity and exclusivity content is already held by multiplicity-and-completeness." }, { "concept": "Scheme custodianship and jurisdictional applicability", "disposition": "Accepted from Grok into authority-and-effect", "rationale": "Resolves the providers' spatial-dimension disagreement without inventing a spatial layer: jurisdiction enters as reach of an authority and scheme applicability (NACE/NAICS/ISIC), which is exactly how the base said the dimension would be handled but never modelled." }, { "concept": "Parallel codings as translations of one concept", "disposition": "Accepted from Grok into interoperability, deduplicated on merge", "rationale": "Distinct from mapping-derived bindings: several codings on one assertion with one preferred for exchange. The uncoded-text half of the source finding is dropped because uncoded-text-fallback already covers it." }, { "concept": "Membership, case-sensitivity and integrity checks", "disposition": "Rejected as duplicative; case-sensitivity deferred", "rationale": "Grok's finding overlaps the base's binding-validation-rules almost entirely. The only novel content — case-sensitive comparison of system URIs and code-system-declared code case sensitivity — is question-scale, and additions here are finding-scale only. Deferred rather than duplicated." }, { "concept": "Scheme version pinning and concept permanence", "disposition": "Rejected as duplicative; GSIM change typology deferred", "rationale": "The base already covers version pinning, versionNeeded, drift detection and migration policy. Only GSIM's virtual-versus-real change typology is new, which does not justify a second overlapping finding in the same layer." }, { "concept": "Assignment lifecycle with dual-running transition", "disposition": "Rejected as duplicative; dual-running deferred", "rationale": "Duplicates binding-lifecycle-states and temporal-frames-of-a-binding. The dual-coding transition window during a scheme revision is a genuine gap in the base's freeze/migrate/invalidate policy but belongs as a question on scheme-version-drift-and-migration, not as a competing lifecycle finding." }, { "concept": "Scheme reference and item-code identity findings", "disposition": "Rejected as duplicative", "rationale": "Both are covered by the base's scheme-and-term-reference-identity (canonical URI, version pin, notation versus URI) and asserted-term-and-role (post-coordination flag). Importing them would fork identity rules across two layers." }, { "concept": "Classifier, method and confidence finding", "disposition": "Rejected as duplicative", "rationale": "The base splits the same content across assignment-actor-and-method, evidence-and-justification and confidence-and-uncertainty with stronger PROV-O grounding. Grok's version adds only a review step, which the base holds in coding-quality-measurement." }, { "concept": "Subject reference finding", "disposition": "Rejected as duplicative", "rationale": "The base's subject-and-scope-of-application already covers granularity, eligibility and statistical-unit match with Web Annotation and ISO/IEC 11179 evidence; Grok's subject-kind enumeration adds no governed structure." }, { "concept": "Security and confidentiality labels", "disposition": "Kept outside the pattern as an EXTEND target", "rationale": "The two providers differ only in phrasing: the base models marking schemes as an EXTEND with enforcement and downgrade rules excluded, Grok excludes them outright. Neither absorbs enforcement, so the base's boundary note stands and access control on subject-matter bindings remains in scope." }, { "concept": "Mapping and correspondence ownership", "disposition": "REFERENCE to sibling model, not owned", "rationale": "SKOS, XKOS, ISO 25964-2 and GSIM all locate mapping ownership in a correspondence artefact. Both providers independently reached this; the base records only derived status and fidelity." }, { "concept": "Confidence semantics", "disposition": "Retained as a declared gap, no standardised layer", "rationale": "No source in either pack standardises calibration or acceptance thresholds for classification assignments. Both providers marked it a gap; publishing it as canonical structure would overstate the evidence." }, { "concept": "Function set additions", "disposition": "Three accepted, one rejected", "rationale": "Retrieval by classification, uncoded-text alignment and translation recording are operations the base lacks. Grok's supersede-or-dual-run is rejected because its supersession half duplicates the base and its dual-run half has no accepted supporting finding." } ], "publicationHolds": [ "Source verification hold: every accepted source URL must be re-fetched live and version-pinned before publication, including canonicalising the two FHIR R5 URL variants (hl7.org/fhir/terminologies.html versus hl7.org/FHIR/terminologies.html; datatypes.html versus R5/datatypes.html) and adopting the dated DCMI 2020-01-20 URL over the undated latest URL.", "Paywalled ISO normative text hold: ISO/IEC TR 11179-2:2019, ISO/IEC 11179-1:2023 and its Part 3 classification package, and ISO 25964-1/-2 were cited from catalogue abstracts, Part 1 terms or NISO-hosted material. Clause-level obligations are unverified and no conformance-sounding claim may be published against them.", "Unparsed primary-source hold: the UNSD Best Practice Guidelines PDF and the SDMX Section 2 Information Model PDF could not be machine-parsed in the base run; exhaustiveness, mutual-exclusivity and SDMX hierarchy claims must be re-verified against parsed text before publication.", "Multi-profile validation hold: the pattern is validated against health terminology, EU customs rulings, EU statistics and cataloguing profiles only. At least one non-EU legal ruling regime and one commercial product-taxonomy or multi-label machine-learning profile must be run before any general-applicability claim.", "Sibling dependency hold: the Classification Scheme, Value Set and Mapping/Correspondence models are unregistered, so REFERENCE composition links point at non-existent registry entries. The entry may publish as a research draft but not as production-ready.", "Evidence-gap disclosure hold: confidence semantics, calibration and acceptance thresholds must be published as an explicit declared gap with a non-comparability warning, never as canonical structure.", "XKOS citation hold: one provider reported a 404 on a W3C-hosted XKOS URL while the base cites the DDI Alliance URL; the surviving citation must be confirmed live and its revision date pinned." ], "deferredResearch": [ "Case-sensitivity rules for comparison: system URIs compared case-sensitively versus code-system-declared code case sensitivity, to be folded as questions into binding-validation-rules rather than as a duplicate validation finding.", "GSIM virtual-versus-real item change typology (code or name change versus semantic change, combination, split, deletion, creation) and the dual-running/dual-coding transition window, to be folded as questions into scheme-version-drift-and-migration.", "Non-EU binding classification ruling regimes (US CBP binding rulings, WCO advance rulings and equivalents) to de-regionalise the authority-and-legal-effect layer, which currently generalises from the EU BTI regime alone.", "Post-coordinated expression grammars (for example SNOMED CT compositional grammar): syntax, normalisation and equivalence testing, and where the boundary with the scheme sibling model falls.", "Negative classification (explicit assertion that a subject is not in a class) and part-versus-whole classification, both flagged by one provider as lacking primary support in retrieved sources.", "Language negotiation and BCP 47 label selection policy for multilingual schemes, which the base explicitly declines to prescribe.", "Inter-annotator agreement metrics: whether any authority mandates a specific kappa variant or agreement statistic for classification coding quality, since neither provider found one." ] }, "statistics": { "sources": 23, "bundles": 6, "layers": 14, "findings": 32, "questions": 112, "artifacts": 17, "functions": 16 } }