Identity and Provenance
Module B: Manufacturer, SoftwareComponent, Marking, Sealing, CalibrationRecord, Certificate.
In this chapter: Module B, everything that names things beyond the subject chain itself: the manufacturer, legally-relevant software, markings, sealing, calibration events, and the certificate. Plus the module’s dependency rule and the one sanctioned cycle in the metamodel.
4.1 What Module B is for
The subject chain (Chapter 2) says what an instrument is; Module B says
whose it is, what software it runs, how it is marked and sealed,
when it was calibrated, and what conformity it has earned. In the
metamodel’s own words: “Everything that NAMES things beyond the subject
chain itself … The subject chain lives in instrument-description; this
module’s artifacts reference it” (oiml-core-ontology.yaml ,
identity-provenance).
In kernel terms, Module B realizes the IS provenance aspect, the
pedigree of the subject: manufacturer, source clauses, supersedes chains,
legally-relevant software identity, plus the legally-relevant identity
artifacts (markings, seals) and the conformity artifact (the
certificate). Seven classes, all ● in the metamodel (v0.6.1, the
v0.6.1 line added VerificationMark):
| Class | What it names | Anchors to |
|---|---|---|
| Manufacturer | the responsible organization | , |
| SoftwareComponent | legally-relevant software of a Model | C (Model), OIML D 31 |
| Marking | datasheet/inscription of a Model | C (Model) |
| Sealing | protection against unauthorized modification | C (Model), D1 (Recommendation) |
| CalibrationRecord | one calibration event | C (Sample), A (TraceabilityChain) |
| Certificate | the conformity artifact | C (Model/Sample), D1, D3 |
| VerificationMark | the mark applied to a Sample after a passed verification (OIML V 1:2022, 3.04) | C (Sample), D3 (Verification) |
4.2 The dependency rule and the sanctioned cycle
Module B is the one place where the metamodel relaxes its own
acyclicity, and says so explicitly (oiml-core-ontology.yaml ,
dependencyRules):
identity-provenance depends on A and C, its artifacts NAME subjects (Model/Sample) defined in C. The C → B back-edge (
Model.manufacturer) is the only sanctioned cycle.
The logic: a Certificate must reference the Model it certifies, a
CalibrationRecord the Sample it calibrates, a Marking the Model it
inscribes, so B points at C. But an instrument that cannot name its
manufacturer is not legally identifiable, so C points back at B,
exactly twice: MeasuringInstrumentModelFamily.manufacturer and
MeasuringInstrumentModel.manufacturer. Those two references are the
whole cycle, and they are sanctioned because the alternative, duplicating
organization data inside C, is worse than the cycle. Every other
cross-module edge follows the strict law (Chapter 0, six-modules
diagram).
And one flow rule closes the loop with the conformity modules:
Certificates flow one way: D3 issues → B stores → C displays via Marking.
D3’s TypeApprovalDecision issues the certificate (Chapter 7); B is where
the artifact lives (§4.8); C surfaces it, Model.typeApprovalRef is
“filled after D3 approval”, and the instrument’s marking is the legal
display channel. No module ever writes backwards.
4.3 Manufacturer
Manufacturer:
id, legalName # required
address, trademark # optional
Deliberately thin: “an organization responsible for the instrument”. Its
weight comes from being the target of the sanctioned back-edge, every
Family and every Model references one, and from being the party the
EvaluationReport is issuedTo (D3). In the running system it is a stored
entity (data/r60/entities/parties.yaml, Manufacturer, “metamodel
Module B Manufacturer”), alongside the other workflow parties (issuing
authorities, test laboratories, including manufacturer-owned labs,
flagged lab_kind: manufacturer_test_lab with a mandatory parent
reference). Chapter 8 develops the full party model.
4.4 SoftwareComponent, the D 31 identity
Modern instruments are part software, and legal metrology needs to know which software it approved. OIML D 31 supplies the concepts; Module B supplies the record:
SoftwareComponent:
model: ref C.MeasuringInstrumentModel # required
version: string # required
legallyRelevant: boolean # required
checksum: string
identificationMethod: string
The decisive field is legallyRelevant: only legally-relevant software
falls under type-approval control, a change to it is a change to the
type; a change to anything else is not. version, checksum and
identificationMethod make the identity checkable at examination time.
In the anatomy this is provenance at the software layer: the kernel’s IS
provenance aspect lists “legally-relevant software identity” explicitly.
R 60 surfaces it as the model-scope attribute software_identification
(Chapter 2, §2.8); the D 31 test family (separation of legally-relevant
parts, software identification, fault detection) is one of the planned
shared modules (software-d31, Chapter 10).
4.5 Marking
Marking:
model: ref C.MeasuringInstrumentModel
items: [ { content, location } ]
nameplateSpec: string
A marking is the datasheet/inscription of a Model: not just what must
be written but where, the location is legally positioned (a
nameplate, a non-removable surface, a software-displayed identification).
This is the display half of the certificate flow: the type-approval
designation an instrument bears is a marking item whose content traces to
a stored Certificate. Examination checks the instrument against its
Marking; the Recommendation’s marking requirements (D1) constrain what
items must contain.
4.6 Sealing
Sealing:
model: ref C.MeasuringInstrumentModel
seals: [ { protects, means, location } ]
requiredBy: ref D1.Recommendation
Sealing is “means protecting against unauthorized modification,
readjustment, removal of parts or software” (VIML 2.20). Each seal record
says what it protects (a component, an adjustment, the software), by
what means (physical seal, electronic seal, password), and where.
The optional requiredBy reference closes the loop with D1: sealing
requirements live in the Recommendation; the Sealing record is the
design that answers them, which is why B may reference D1 here even
though its stated dependencies are A and C: the reference is to the
requirement that mandates the seal, a naming relation, not a bind.
4.7 CalibrationRecord
CalibrationRecord:
sample: ref C.MeasuringInstrumentSample # required
date, lab, certificate # required
result, traceability, nextDue # optional
One calibration event for one Sample, note the level: calibration
happens to units, so the anchor is the Sample, not the Model. The
traceability reference is Module A’s TraceabilityChain (Chapter 1,
§1.7): the record claims not just that the unit was calibrated but
through which chain to the SI. nextDue is where the metamodel meets
the calendar, calibration is recurrent, and the record carries the
validity window that subsequent verification will check.
The entity home in the running system (● smart ce10a43, task 55):
Marking, Sealing and CalibrationRecord are stored Core entities
(data/core/entities/module-b.yaml, authored as
primmel-packages/oiml-smart-core/entities/module-b.prl; workspace
stores land by migration v22), each with its lifecycle machine in
data/core/evaluation/state-machines.yaml:
DRAFT → AFFIXED → INSPECTED → SUPERSEDED
SUPERSEDED is reachable from every state, and the superseded_by
reference chains the replacement, the VerificationRecord supersede
discipline applied to the identity artifacts; history is kept,
superseded records stop participating. The R 60 pilot seeds the
certified HLCi flow (data/r60/sample-data.yaml) with anchors verified
against R 60-1: the mandatory marking set (6.2.1, a laser-engraved
data plate, non-removable without damage), the class and load-type
designations (6.2.4), and the firmware sealing (6.1), each carried to
INSPECTED with affixed-by/at and inspected-by/at provenance on record.
4.8 Certificate, the conformity artifact
Certificate:
id, kind: CertificateKind # type-approval | verification | calibration
subject: ref C.Model | C.Sample # required
issuingBody: string
basisRecommendation: ref D1.Recommendation
evaluationRef: ref D3.TypeEvaluation | D3.TypeApprovalDecision
issueDate, validUntil
The certificate is the artifact conformity assessment exists to produce , “issued by D3, stored here”. Three fields tell its whole story:
kindandsubjecttogether encode the level of the act. A type-approval certificate has a Model as subject (type approval certifies the type, never an individual unit, Chapter 2, §2.5); verification and calibration certificates have Samples.basisRecommendationnames the requirement set it certifies against.evaluationRefis the traceability spine of the judgment: the certificate points back to the TypeEvaluation or TypeApprovalDecision that justified it, so the chain certificate → decision → evaluation → verdicts → evidence is walkable in both directions (INV-5’s re-runnability, applied to the artifact itself).
In the running system the certificate is a workflow entity with an annex
(data/r60/entities/workflow.yaml, Certificate, CertificateAnnex), its
scope is the application’s family × class matrix (or the amended outcome
of a conditional evaluation), and its number and dimension labels come
from the certificate template (data/r60/evaluation/certificate-template.yaml
, number_format: "{shortName}/{edition}-{scheme}-{authority}-{year2}. {seq}", dimension_labels pattern {accuracy_class}{n_lc_thousands} ,
the C6 group label of Chapter 2 surfacing on the legal document). On
approval, Model.typeApprovalRef is filled: the sanctioned flow D3 → B →
C, completed.
A note on the passport (Volume I, Chapter 14 ○): the model-native passport is the public projection of this identity layer, manufacturer, software identity, markings, served from the instrument’s endpoint. It is not a certificate. The Certificate remains the legal artifact: issued by D3, basis-bound, spine-walkable. The passport projects what the instrument is; the certificate attests what it has earned.
4.9 Grammar sketch (illustrative v3 syntax)
manufacturer ACME {
legal_name "ACME Wägetechnik GmbH"
trademark "ACME"
}
software lc_firmware on model ACME_LC_500 { # OIML D 31 identity
version "3.2.1" legally_relevant true
checksum "sha256:9f2c…" identification_method "menu 4.1 display"
}
marking for ACME_LC_500 {
item { content "Type ACME-LC-500, C6" location nameplate } # R 60: /req/technical/mandatory-markings
item { content "Type-approval DE-26-041" location nameplate } # <- D3 issued, B stored
item { content "E_max = 500 kg" location datasheet }
}
sealing for ACME_LC_500 { # required_by is optional — the D1 requirement that mandates it
seal { protects "calibration jumper" means physical_wire location housing_cover }
seal { protects "legally-relevant software" means checksum_display location menu_4_1 }
}
calibration_record for sample SN_0042 {
date 2026-03-14 lab "Blefuscu Central Laboratory 1.12" certificate "BCL-26-11843"
traceability chain { primary -> reference -> working -> SN_0042 }
next_due 2028-03-14
}
certificate DE_26_041 {
kind type_approval # -> subject is a Model, never a unit
subject model ACME_LC_500
basis /rec/r60-2021
evaluation type_approval_decision TAD-2026-118 # judgment spine
issued_by "OIML issuing authority"
issue_date 2026-06-30 valid_until 2036-06-30
}
4.10 Validation rules
- The sanctioned cycle is the only cycle. C may reference B only via
Family.manufacturer/Model.manufacturer; every other cross-module edge obeys the dependency law (A ← everything; D1 binds A+C; D2 on D1+C+A; D3 on D1+D2). - Anchor discipline. SoftwareComponent, Marking and Sealing anchor to
a Model; CalibrationRecord anchors to a Sample; a Certificate’s subject
level must match its
kind(type-approval → Model; verification/calibration → Sample). - Reference resolution.
Sealing.requiredByandCertificate.basisRecommendationresolve to a D1 Recommendation;Certificate.evaluationRefresolves to a D3 TypeEvaluation or TypeApprovalDecision;CalibrationRecord.traceabilityresolves to a Module A TraceabilityChain. - One-way certificate flow. Certificates are created only by a D3
decision, stored only in B, surfaced in C only via
typeApprovalRefand Marking items, never authored inside C or D1. - Legal relevance is explicit.
SoftwareComponent.legallyRelevantand every Marking item’slocationare required, an unlocated marking or an unclassified software component is a schema error, not a gap to fill later.
4.11 Summary
- Module B names what the chain cannot: manufacturer, legally-relevant software, markings, seals, calibrations, certificates, the IS provenance aspect, realized. Marking, Sealing and CalibrationRecord are stored entities with DRAFT→AFFIXED→INSPECTED→SUPERSEDED lifecycle machines (● task 55), piloted in R 60 against R 60-1 6.1/6.2.1/6.2.4.
- B depends on A and C because its artifacts name subjects; the C→B manufacturer back-edge is the metamodel’s only sanctioned cycle.
- Sealing answers a D1 requirement (VIML 2.20); marking carries content and legal location; calibration records the Sample-level event with its traceability chain.
- The certificate’s kind and subject level agree by construction
(type-approval → Model); its
evaluationRefkeeps the judgment spine walkable. - Certificates flow one way: D3 issues → B stores → C displays via
Marking and
typeApprovalRef.
Next: Chapter 5, Specification: Module D1 , requirements as constraints bound to the subject, and conformance tests as operations on it.