The CASCO Foundation
Delegation to ISO/IEC 17000/17065/17025/17067, and the facet trio that makes it machine-checkable.
In this chapter: why the OIML-CS is defined by delegation to the ISO/IEC CASCO corpus, 17000’s vocabulary, 17065’s certification-body model, 17025’s laboratory model, 17067’s scheme taxonomy, and the facet trio that makes the delegation machine-checkable:
activity_kind,segregation:,scheme_type:.
2.1 Why the scheme is defined by delegation
B 18:2025 does not define competence. It points: “OIML Issuing Authorities are required to demonstrate their competence through compliance with ISO/IEC 17065” (§5.2); “Test Laboratories … through compliance [with] ISO/IEC 17025” (§5.3). The scheme’s vocabulary is ISO/IEC 17000’s; its shape as a product certification scheme is ISO/IEC 17067’s. The OIML-CS is what it delegates to.
A model of the scheme has two ways to honour that. The wrong way is
restating: copy the 17065 clause-7 process into the scheme package, copy
the 17025 equipment clauses into the TL pipeline. That is the
copy-residue failure mode, the cross-standard census found exactly this
anti-pattern between rec packages (byte-identical files, including
copies wrong for the copying rec), and it is what uses composition
exists to kill (Volume I, chapter 8). The right way is the one the
standard itself uses: the CASCO documents are modelled once, as their
own reference packages, and the scheme package references them ,
composition for structure, facets for the joins.
So the foundation is four packages under data/, each kind: core,
each clause-referenced to its standard, each the only home of its
content (MECE, grep-proven):
| Package | Standard | What it contributes | Numbers |
|---|---|---|---|
data/iso-iec-17000/ |
ISO/IEC 17000:2020 | the conformity-assessment vocabulary + the functional-approach activity taxonomy as a register of classifiable kinds | 36 terms; 22 activity archetypes |
data/iso-iec-17065/ |
ISO/IEC 17065:2012 | the product-certification-body model the IA’s competence delegates to (B 18 §5.2) | 13 terms; 31 provisions (12 /body + 19 /process); the clause-7 functional approach as 11 abstract processes |
data/iso-iec-17025/ |
ISO/IEC 17025:2017 | the laboratory-competence model the TL delegates to (B 18 §5.3; application guidance in OIML D 30) | 9 terms; 33 provisions (12 /lab resource + 21 /process); the clause-7 test lifecycle as abstract processes |
data/iso-iec-17067/ |
ISO/IEC 17067:2013 | the scheme taxonomy: types 1a–6 as a machine-queryable register + the §6.5.1 scheme-content checklist | 3 terms; 7 scheme types; 22 checklist provisions |
Composition order is load-bearing: 17000 composes first into every
rec (its register resolves everyone else’s activity_kind tags), then
17065, 17025, 17067 (requires: [iso-iec-17000] each), then oiml-cs
(requires: all four), then core. A rec’s uses: reads the whole
stack: [iso-iec-17000, iso-iec-17065, iso-iec-17025, iso-iec-17067, oiml-cs, core, module-…].
2.2 The facet trio
Delegation by reference answers “where does the content live?”. Three
facets answer the follow-up questions a machine will ask, what kind of
activity is this process? whose hands must stay off which case? what
kind of scheme is this?, each against a register, each checked by a
linker rule (mirrored as a primmel check rule):
| Facet | Declared on | Resolves against | Doctrine | Linker / check |
|---|---|---|---|---|
activity_kind: […] |
abstract processes | the 17000 activity-archetype register (structure key activity_archetypes) |
classification, never inheritance | R23 / C58 |
segregation: […] |
abstract processes | the process’s own pipeline (pair members are process ids) | declared constraints, never prose | R24 / C59 |
scheme_type: <id> |
a scheme’s own layer.yaml |
the 17067 scheme-type register (structure key scheme_types) |
a scheme classifies itself | checkUses |
The shared doctrine: classification, never inheritance. A process
tagged activity_kind: [testing] does not subclass a testing class;
it holds a reference into a register, resolvable when the register is
in scope and silent when it is not (classification is opt-in per
composition). Registers stay scheme-agnostic; schemes stay
register-thin. The sections below take the three facets in turn.
2.3 activity_kind: the kind of activity
ISO/IEC 17000:2020’s functional approach (its informative Annex A) names
the functions every conformity-assessment activity realizes: selection
→ determination → review, decision and attestation. The package turns
that taxonomy into a register, evaluation/activity-archetypes.yaml,
22 entries {id, label, clause, definition, parent?}, single-sourced
in the 17000 layer so every composed tree resolves the same ids.
Two register disciplines matter:
parentrecords only what the standard states. Testing, inspection, audit, validation, verification and peer assessment are types of determination (A.3.2); declaration, certification and accreditation are types of attestation (A.4.3); representative sampling belongs to the selection function (A.2). Clause 8’s title (“terms relating to surveillance”) is a grouping, not a type-of relation, suspension, withdrawal, appeal, complaint stay top-level. The register is the standard’s taxonomy, not an editor’s.- Multi-kind is deliberate. ISO/IEC 17065 3.3 defines evaluation
as “combination of the selection and determination functions”, so
the scheme’s
evaluationprocess is tagged[selection, determination], and the register’s job is to make that honest, not to force a single parent.
The consumer proof is the scheme’s own process model (chapter 4):
application is [selection] (A.2, the applicant collects the
information the determination needs), testing is [testing],
decision is [decision], issue is [certification] (7.6, the
certificate is third-party attestation), biml_registration is
[attestation] (registration completes attestation; it issues no new
statement, so not certification). One deliberate non-tag is documented
in the file header. Every id resolves (R23); an unknown kind is an
error; the register’s own parent references are resolved within the
register.
2.4 segregation:: the hands that must stay off this case
ISO/IEC 17065’s clause 7 carries the certification world’s core integrity rules: the reviewer shall not have been involved in the evaluation (7.5.1); the decider shall not have been involved in the evaluation (7.6.2); complaint resolution shall be independent of the case’s activities (7.13.5); consultancy creates a barred relation, for two years where the standard fixes a period (7.13.6, 4.2.10). These are non-involvement constraints over personnel sets, per case, and the package models them as first-class structured declarations:
segregation:
- id: review_not_evaluation
kind: case_personnel_disjoint
clause: "7.5.1"
pair: [review, evaluation]
statement: >
Within one certification case, the personnel assigned to the
review share no member with the personnel assigned to evaluation.
Why a new facet instead of the existing invariants: block? Three
reasons, each disqualifying on its own:
- Invariant strings are never parsed. The toolchain loads them as opaque documentation; no gate could ever fail on one. A segregation rule written as an invariant would be mechanically inert, and a rule that cannot fail is not a rule.
- The shape does not fit. Invariants quantify over one process’s own signature records at completion. Segregation is a cross-process relation over personnel sets, relative to one case, and 7.13.6 is additionally temporal (a two-year bar after a relation ends).
- Roles are the wrong member type. In the consuming scheme, one
role (
issuing_authority) legitimately binds evaluation, review and decision, role-level disjointness is unsatisfiable and unfaithful. The 17065 norms quantify over process involvement, so pair members are abstract-process ids, and the reserved tokencase_personnelnames the case-relative personnel set of 7.13.5.
Two kinds cover the standard’s shapes: case_personnel_disjoint
(exactly two distinct pair members, the reviewer/decider rules) and
consultancy_bar (barred relations, period only where the standard
fixes one). Declaration well-formedness is linker-checked (R24/C59);
per-assignment runtime enforcement is the platform’s (chapter 5).
2.5 scheme_type:, the scheme classifies itself
ISO/IEC 17067’s clause 5 defines the product-certification scheme types: 1a, 1b, 2, 3, 4, 5, 6, differing in whether determination includes sampling, what attestation issues (a type certificate, a batch certificate, a mark licence), and whether surveillance applies. B 18:2025 §1.3 classifies the OIML-CS: Scheme 1a per ISO/IEC 17067 (5.3.2).
The package models the taxonomy as a structured register
(specification/scheme-types.yaml): the seven named types with
verbatim-faithful descriptions, the type-specific sampling facets, the
attestation_object enum, and the Table-1 activity facets
(determination II a–e, attestation V a–d, surveillance VI a–d), plus
the 5.3.1 surveillance-presence query: types 1a/1b require no
surveillance.
Then the doctrine: a scheme classifies itself, in its own manifest. The oiml-cs layer declares
# data/oiml-cs/layer.yaml
scheme_type: type_1a
, never a classification record inside the 17067 package. A foundation
package naming its consumer would invert the composition; the taxonomy
stays scheme-agnostic, and the consuming layer holds the one id.
checkUses resolves the declared id against a scheme-type register
composed earlier in the uses list and fails the composition
otherwise, the declaration is checkable, or it is nothing.
The declaration pays off mechanically: coverage gates read it to discharge the type-conditioned provisions. Type 1a ⇒ the §6.5.1 o) surveillance item and the Table-1 VI content are N/A, with 5.3.1 as the justification, and the gate re-checks that justification against the register: a surveillance named gap fails the moment the declared type requires surveillance, a mark-ownership gap fails the moment the type licenses marks (chapter 7). The scheme’s self-knowledge is data, and the audit consumes it.
2.6 What the delegation looks like composed
Composed into a rec, the foundation is invisible to the app, the
effective tree contains one copy of each register, and every
activity_kind id in the scheme’s processes resolves. The visible edges
are the three delegation points the standard itself declares:
- IA competence,
framework/participants.yaml:delegates_to: iso-iec-17065(§5.2). The 17065 package’s clause-7 functional approach (application 7.2 → application review 7.3 → evaluation 7.4 → review 7.5 → decision 7.6 → attestation 7.7/7.8 → surveillance 7.9, plus changes 7.10, termination 7.11, records 7.12, complaints 7.13) is the process taxonomy the scheme’s pipelines are classified against; its/bodyprovisions are verified by assessment of the body, its/processprovisions bind the abstract processes. - TL competence,
delegates_to: iso-iec-17025(§5.3). The 17025 package carries the clause-6 resource provisions (personnel 6.2, equipment 6.4 incl. the 6.4.13 a–h record items, metrological traceability 6.5 + Annex A) and the clause-7 test lifecycle (request review 7.1 through reporting 7.8, plus the off-sequence technical records, complaint handling, nonconforming work). Its two same-namedfunctional-approach.yamlfiles union by id with 17065’s in composed trees, the process ids are deliberately disjoint (17025’s complaint process iscomplaint_handling). Two documented collisions live in the headers: 17025’s verification (3.8, the VIM sense) vs 17000’s 6.6 (the conformity-assessment sense). - Scheme shape,
scheme_type: type_1aagainst the 17067 register, with the 22-item scheme-content checklist as the audit target of chapter 7.
And the delegation is bidirectionally useful: a laboratory maps its
own SOPs, equipment and personnel registers to the 17025 provisions in a
.prm (the lab-to-17025.prm pilot, Volume III, chapter 10), so the
same foundation package serves the scheme’s competence delegation and
the lab’s own conformity demonstration. One content, one home, many
references.
2.7 Grammar sketch (illustrative v3 syntax)
# ── the foundation registers classify, consumers reference ──
package iso-iec-17000 {
register activity_archetypes {
archetype testing { clause "6.2" parent determination }
archetype certification{ clause "7.6" parent attestation }
archetype complaint { clause "8.7" } # top-level: clause 8 groups, not types
}
}
package oiml-cs {
uses [iso-iec-17000, iso-iec-17065, iso-iec-17025, iso-iec-17067]
scheme_type type_1a # B 18:2025 §1.3 — self-classification
process evaluation {
activity_kind [selection, determination] # 17065 3.3 — multi-kind deliberate
}
process review {
activity_kind [review]
segregation [{
kind case_personnel_disjoint
clause "17065:7.5.1"
pair [review, evaluation] # process ids, never roles
}]
}
}
2.8 Validation rules
- every
activity_kindid resolves against the composed register when one is in scope (R23/C58; silent when not, classification is opt-in); the register’sparentreferences resolve within the register; - every
segregation:entry is well-formed (R24/C59): a known kind,case_personnel_disjointnaming exactly two distinct pair members, pair members resolving to abstract-process ids,periodonly where the standard fixes one; - a
scheme_type:id resolves against a scheme-type register composed earlier in theuseslist (checkUsesfails the composition otherwise); - MECE: 17000/17065/17025/17067 content lives only in its own package ,
the scheme package references via facets and
delegates_to, and a grep for ISO provision text insidedata/oiml-cs/returns nothing; - clause anchors follow the standards’ own numbering (17000’s Annex-A functions cited as A.2/A.3, they are functional-approach concepts, not numbered terms).
2.9 Summary
- The OIML-CS is defined by delegation: competence to 17065/17025 (B 18 §5.2/§5.3), vocabulary to 17000, scheme shape to 17067. The model mirrors the standard: four foundation packages, referenced never restated.
activity_kindclassifies processes against the 22-entry 17000 register, multi-kind by design,parentonly where the standard states a type-of.segregation:makes non-involvement machine-checkable, cross-process personnel-set constraints that invariant strings could never enforce; pair members are process ids, never roles.scheme_type:lets a scheme classify itself in its own manifest ,type_1afor the OIML-CS, and the coverage gates consume the classification mechanically.
Next: Chapter 3, The documents corpus: the twelve governing documents, eleven of them as per-document modules, and what each contributes.