@oimlsmart/primmel-packages 0.13.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,150 @@
1
+ # OIML R 91 — the manufacturer promise register (TODO.model-content/03):
2
+ # claims on characteristics and behavior that evaluation verifies and the
3
+ # certificate prints as promises-as-verified (the same doctrine as R 60's
4
+ # set — 02-subjects.md §2.3; 15-model-supply-chain.md §15.2). The
5
+ # certificate's characteristic list GENERATES from this set
6
+ # (browser/src/services/certificate.service.ts certificateCharacteristics()).
7
+ #
8
+ # PROVENANCE (the content-provenance rule): every promise cites the clause
9
+ # its claimed characteristic is defined at (R 91-1:2025 — the clause the
10
+ # model's own attribute/dimension declaration carries). R 91-1, 6.15.1
11
+ # makes the metrological class a MANDATORY certificate indication ("The
12
+ # OIML certificate shall indicate the class of the instrument"); the
13
+ # remaining rows print when available (obligation: optional). Composite
14
+ # interval rows bind their boundary attribute pair (`attributes`) and
15
+ # target the quantity/behavior the interval bounds (R 60's
16
+ # temperature_range pattern).
17
+ promise_set SpeedMeter {
18
+ promise metrological_class {
19
+ target metrological_class
20
+ statement "The type holds its declared metrological class (A or B) for moving measurements."
21
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "6.15.1" }
22
+ certificate {
23
+ dimension metrological_class
24
+ type string
25
+ label "Metrological class for moving measurements (R 91-1, 6.15.1)"
26
+ obligation mandatory
27
+ }
28
+ }
29
+ promise mode_of_use {
30
+ target mode_of_use
31
+ statement "The type operates in its declared mode of use (stationary / moving)."
32
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "5.1" }
33
+ certificate {
34
+ dimension mode_of_use
35
+ type string
36
+ label "Mode of use (stationary / moving)"
37
+ obligation optional
38
+ }
39
+ }
40
+ promise working_principle {
41
+ target working_principle
42
+ statement "The type measures speed by its declared working principle."
43
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "5.3" }
44
+ certificate {
45
+ dimension working_principle
46
+ type string
47
+ label "Working principle"
48
+ obligation optional
49
+ }
50
+ }
51
+ promise installation_principle {
52
+ target installation_principle
53
+ statement "The type installs by its declared principle (mobile / fixed / portable)."
54
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "5.2" }
55
+ certificate {
56
+ dimension installation_principle
57
+ type string
58
+ label "Installation (mobile / fixed / portable)"
59
+ obligation optional
60
+ }
61
+ }
62
+ promise triggering {
63
+ target triggering
64
+ statement "The type triggers its measurements as declared (manual / automatic)."
65
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "5.4" }
66
+ certificate {
67
+ dimension triggering
68
+ type string
69
+ label "Triggering (manual / automatic)"
70
+ obligation optional
71
+ }
72
+ }
73
+ promise cosine_compensation {
74
+ target cosine_compensation
75
+ statement "The type compensates the cosine error for its declared road orientation (along- / across-the-road)."
76
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "5.5" }
77
+ certificate {
78
+ dimension cosine_compensation
79
+ type string
80
+ label "Road orientation (along- / across-the-road)"
81
+ obligation optional
82
+ }
83
+ }
84
+ promise speed_interval {
85
+ target v
86
+ statement "The speed measuring interval the type is certified over (km/h)."
87
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "6.1" }
88
+ certificate {
89
+ attributes { speed_interval_min speed_interval_max }
90
+ type string
91
+ label "Speed measuring interval (km/h)"
92
+ obligation optional
93
+ }
94
+ }
95
+ promise distance_interval {
96
+ target d
97
+ statement "The distance measuring interval the type is certified over (m)."
98
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "6.17" }
99
+ certificate {
100
+ attributes { distance_interval_min distance_interval_max }
101
+ type string
102
+ label "Distance measuring interval (m)"
103
+ obligation optional
104
+ }
105
+ }
106
+ promise angle_interval {
107
+ target alpha
108
+ statement "The measurement angle interval the type is certified over (°)."
109
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "6.17" }
110
+ certificate {
111
+ attributes { angle_interval_min angle_interval_max }
112
+ type string
113
+ label "Angle interval (°)"
114
+ obligation optional
115
+ }
116
+ }
117
+ promise operating_temp_range {
118
+ target temperature-effect
119
+ statement "The type holds its metrological performance across the rated operating temperature range (T_min…T_max)."
120
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "6.16" }
121
+ certificate {
122
+ attributes { operating_temp_min operating_temp_max }
123
+ type string
124
+ label "Rated temperature range (°C)"
125
+ obligation optional
126
+ }
127
+ }
128
+ promise supply_voltage {
129
+ target supply_voltage_dc
130
+ statement "The DC supply voltage rating the type operates at."
131
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "6.16" }
132
+ certificate {
133
+ attribute supply_voltage_dc
134
+ type string
135
+ label "Supply voltage (V)"
136
+ obligation optional
137
+ }
138
+ }
139
+ promise software_version {
140
+ target software_version
141
+ statement "The certificate identifies the type's legally relevant software by its declared version."
142
+ source { doc "urn:oiml:pub:r:91-1:2025" clause "7.10.1" }
143
+ certificate {
144
+ attribute software_version
145
+ type string
146
+ label "Legally relevant software identification (R 91-1, 7.10.1; R 91-4 identification block)"
147
+ obligation optional
148
+ }
149
+ }
150
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oimlsmart/primmel-packages",
3
- "version": "0.13.0",
3
+ "version": "0.15.0",
4
4
  "description": "The OIML SMART platform's authoritative model content: every Recommendation, the OIML-CS scheme, the CASCO foundations, the shared modules, and the product/program reference packages as Primmel (.prl) packages — the single source of truth the platform's data trees regenerate from. Consumed by the smart monorepo (oimlsmart/smart) at a pinned version (TODO.repos/02).",
5
5
  "type": "module",
6
6
  "repository": {
@@ -12,6 +12,6 @@
12
12
  },
13
13
  "license": "MIT",
14
14
  "devDependencies": {
15
- "@primmel/primmel": "^1.17.0"
15
+ "@primmel/primmel": "^1.17.1"
16
16
  }
17
17
  }
@@ -1,102 +0,0 @@
1
- # OIML R 129 — MODEL LAYER: PROMISES (TODO.model-content/03)
2
- # -----------------------------------------------------------------------------
3
- # First-class manufacturer PROMISES for multi-dimensional measuring
4
- # instruments: claims on characteristics and behavior that evaluation
5
- # verifies and the certificate prints as promises-as-verified (the same
6
- # doctrine as R 60's set — primmel-oiml-smart/docs/primmel/02-subjects.md
7
- # §2.3; 15-model-supply-chain.md §15.2). R 129 had NO promise set before
8
- # this wave — this register is authored from scratch, its certificate print
9
- # rows carrying the surface the hand-maintained characteristics_template of
10
- # evaluation/certificate-template.yaml formerly restated (which keeps only
11
- # number_format and dimension_labels). The certificate's characteristic
12
- # list is GENERATED from this promise set (browser/src/services/
13
- # certificate.service.ts certificateCharacteristics()).
14
- #
15
- # PACKAGE HOME: this file is the package payload `payload/promises.yaml` —
16
- # the promise set is AUTHORED here, in the package, and regenerate-data
17
- # emits data/r129/model/promises.yaml VERBATIM (the generated fileHeader +
18
- # these raw bytes; the documented codec exclusion, same class as
19
- # payload/sample-data.yaml). The kernel's SubjectPromise carries no
20
- # certificate print-projection field yet — the projection's first-class PRL
21
- # home is the recorded primmel-ts kernel-minor follow-up; when it ships,
22
- # this payload migrates to `promises.prl` and the promise CONTENT rides
23
- # over unchanged.
24
- #
25
- # PROVENANCE (the content-provenance rule): every promise cites the clause
26
- # its claimed characteristic is defined at (the clause the model's own
27
- # attribute/dimension declaration carries): the classification at R 129-2,
28
- # Annex A (measurement principle) and R 129-1, 2.1 (instrument category),
29
- # the dimension/scale-interval quantities at R 129-1, 2.2.5 / 2.2.6 /
30
- # 2.2.9, the rated temperature conditions at R 129-1, 4.2.1, and the
31
- # measuring-speed bounds at R 129-1, 2.1.10 / 2.1.11. No R 129 clause makes
32
- # a certificate indication mandatory, so every row prints when available
33
- # (obligation: optional). Composite range rows bind their boundary
34
- # attribute pair (`certificate.attributes`) and target the response
35
- # behavior the range conditions (R 60's temperature_range pattern — the
36
- # composite row targets the concept, never one boundary).
37
- #
38
- # Schema: data/schemas/model.yaml ($defs/promise).
39
- ---
40
- promises:
41
-
42
- # ── Classification (R 129-2, Annex A / R 129-1, 2.1) ─────────────────
43
-
44
- - id: measurement_principle
45
- target: measurement_principle # classification dimension (model/instrument.yaml)
46
- statement:
47
- - spelling: eng-Latn
48
- value: "The measurement principle the instrument measures dimensions by."
49
- source: { doc: urn:oiml:pub:r:129-2:2020, clause: "A" }
50
- certificate: { dimension: measurement_principle, type: string, label: [{spelling: eng-Latn, value: "Measurement principle"}], obligation: optional }
51
-
52
- - id: instrument_category
53
- target: instrument_category
54
- statement:
55
- - spelling: eng-Latn
56
- value: "The instrument's declared category (automatic / semi-automatic)."
57
- source: { doc: urn:oiml:pub:r:129-1:2020, clause: "2.1" }
58
- certificate: { dimension: instrument_category, type: string, label: [{spelling: eng-Latn, value: "Instrument category"}], obligation: optional }
59
-
60
- # ── Measuring-range definition quantities (R 129-1, 2.2.5–2.2.9) ─────
61
-
62
- - id: max_dimension
63
- target: max_dimension
64
- statement:
65
- - spelling: eng-Latn
66
- value: "Maximum dimension per axis the instrument measures up to."
67
- source: { doc: urn:oiml:pub:r:129-1:2020, clause: "2.2.5" }
68
- certificate: { attribute: max_dimension, type: string, label: [{spelling: eng-Latn, value: "Max dimension per axis"}], obligation: optional }
69
-
70
- - id: min_dimension
71
- target: min_dimension
72
- statement:
73
- - spelling: eng-Latn
74
- value: "Minimum dimension per axis the instrument measures down to."
75
- source: { doc: urn:oiml:pub:r:129-1:2020, clause: "2.2.6" }
76
- certificate: { attribute: min_dimension, type: string, label: [{spelling: eng-Latn, value: "Min dimension per axis"}], obligation: optional }
77
-
78
- - id: scale_interval
79
- target: scale_interval
80
- statement:
81
- - spelling: eng-Latn
82
- value: "Scale interval (d) of the instrument's indications."
83
- source: { doc: urn:oiml:pub:r:129-1:2020, clause: "2.2.9" }
84
- certificate: { attribute: scale_interval, type: string, label: [{spelling: eng-Latn, value: "Scale interval (d)"}], obligation: optional }
85
-
86
- # ── Rated operating conditions (R 129-1, 4.2.1 / 2.1.10–2.1.11) ──────
87
-
88
- - id: temperature_range
89
- target: temperature-response # behaviors.yaml — the temperature influence response
90
- statement:
91
- - spelling: eng-Latn
92
- value: "The type holds its metrological performance across the rated temperature range."
93
- source: { doc: urn:oiml:pub:r:129-1:2020, clause: "4.2.1" }
94
- certificate: { attributes: [temperature_min, temperature_max], type: string, label: [{spelling: eng-Latn, value: "Temperature range"}], obligation: optional }
95
-
96
- - id: speed_range
97
- target: speed-response # behaviors.yaml — the measuring-speed response
98
- statement:
99
- - spelling: eng-Latn
100
- value: "The measuring speed range the conveyor runs within (V_min…V_max)."
101
- source: { doc: urn:oiml:pub:r:129-1:2020, clause: "2.1.10" }
102
- certificate: { attributes: [speed_min, speed_max], type: string, label: [{spelling: eng-Latn, value: "Measuring speed range"}], obligation: optional }
@@ -1,118 +0,0 @@
1
- # OIML R 144 — MODEL LAYER: PROMISES (TODO.model-content/03)
2
- # -----------------------------------------------------------------------------
3
- # First-class manufacturer PROMISES for gas analyzers (measuring CO, NO and
4
- # NO2 volume fractions): claims on characteristics and behavior that
5
- # evaluation verifies and the certificate prints as promises-as-verified
6
- # (the same doctrine as R 60's set — primmel-oiml-smart/docs/primmel/
7
- # 02-subjects.md §2.3; 15-model-supply-chain.md §15.2). The certificate's
8
- # characteristic list is GENERATED from this promise set
9
- # (browser/src/services/certificate.service.ts certificateCharacteristics())
10
- # — the rows below carry the print surface the hand-maintained
11
- # characteristics_template of evaluation/certificate-template.yaml formerly
12
- # restated (which keeps only number_format and dimension_labels).
13
- #
14
- # PACKAGE HOME: this file is the package payload `payload/promises.yaml` —
15
- # the promise set is AUTHORED here, in the package, and regenerate-data
16
- # emits data/r144/model/promises.yaml VERBATIM (the generated fileHeader +
17
- # these raw bytes; the documented codec exclusion, same class as
18
- # payload/sample-data.yaml). The kernel's SubjectPromise carries no
19
- # certificate print-projection field yet — the projection's first-class PRL
20
- # home is the recorded primmel-ts kernel-minor follow-up; when it ships,
21
- # this payload migrates to `promises.prl` and the promise CONTENT rides
22
- # over unchanged.
23
- #
24
- # PROVENANCE (the content-provenance rule): every promise cites the clause
25
- # its claimed characteristic is defined at (R 144-1:2013 — the clause the
26
- # model's own attribute/dimension declaration carries): the channel
27
- # classification at 1.1 (scope) / 2.1 (terminology), the per-component
28
- # measuring ranges at 4.2, the rated operating conditions at 4.5.1, and
29
- # the response/warm-up quantities at 2.12 / 2.11. No R 144 clause makes a
30
- # certificate indication mandatory, so every row prints when available
31
- # (obligation: optional). Composite range rows bind their boundary
32
- # attribute pair (`certificate.attributes`) and target the measurand
33
- # channel set the range is a facet of (R 60's temperature_range pattern —
34
- # the composite row targets the concept, never one boundary).
35
- #
36
- # Schema: data/schemas/model.yaml ($defs/promise).
37
- ---
38
- promises:
39
-
40
- # ── Channel classification (R 144-1, 1.1 / 2.1) ──────────────────────
41
-
42
- - id: measurand_components
43
- target: measurand_components # classification dimension (model/instrument.yaml)
44
- statement:
45
- - spelling: eng-Latn
46
- value: "The measurand components the analyzer determines — the certified channel set."
47
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "1.1" }
48
- certificate: { dimension: measurand_components, type: string, label: [{spelling: eng-Latn, value: "Measured components"}], obligation: optional }
49
-
50
- - id: measuring_principle
51
- target: measuring_principle
52
- statement:
53
- - spelling: eng-Latn
54
- value: "The measuring principle the analyzer's channels operate on."
55
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "1.1" }
56
- certificate: { dimension: measuring_principle, type: string, label: [{spelling: eng-Latn, value: "Measuring principle"}], obligation: optional }
57
-
58
- - id: sampling_approach
59
- target: sampling_approach
60
- statement:
61
- - spelling: eng-Latn
62
- value: "The sampling approach the analyzer draws the gas stream by."
63
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "2.1" }
64
- certificate: { dimension: sampling_approach, type: string, label: [{spelling: eng-Latn, value: "Sampling approach"}], obligation: optional }
65
-
66
- # ── Measuring ranges per component (R 144-1, 4.2) ────────────────────
67
-
68
- - id: co_range
69
- target: measurand_components # the range is a facet of the CO channel
70
- statement:
71
- - spelling: eng-Latn
72
- value: "The CO measuring range the analyzer is certified over (volume fraction, ppm)."
73
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "4.2" }
74
- certificate: { attributes: [co_range_min, co_range_max], type: string, label: [{spelling: eng-Latn, value: "CO measuring range (ppm)"}], obligation: optional }
75
-
76
- - id: no_range
77
- target: measurand_components # the range is a facet of the NO channel
78
- statement:
79
- - spelling: eng-Latn
80
- value: "The NO measuring range the analyzer is certified over (volume fraction, ppm)."
81
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "4.2" }
82
- certificate: { attributes: [no_range_min, no_range_max], type: string, label: [{spelling: eng-Latn, value: "NO measuring range (ppm)"}], obligation: optional }
83
-
84
- - id: no2_range
85
- target: measurand_components # the range is a facet of the NO2 channel
86
- statement:
87
- - spelling: eng-Latn
88
- value: "The NO2 measuring range the analyzer is certified over (volume fraction, ppm)."
89
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "4.2" }
90
- certificate: { attributes: [no2_range_min, no2_range_max], type: string, label: [{spelling: eng-Latn, value: "NO2 measuring range (ppm)"}], obligation: optional }
91
-
92
- # ── Dynamic response (R 144-1, 2.12 / 2.11) ──────────────────────────
93
-
94
- - id: response_time
95
- target: response_time
96
- statement:
97
- - spelling: eng-Latn
98
- value: "Response time t_90 the analyzer settles within after a step change of the measurand."
99
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "2.12" }
100
- certificate: { attribute: response_time, type: string, label: [{spelling: eng-Latn, value: "Response time t_90"}], obligation: optional }
101
-
102
- - id: warm_up_time
103
- target: warm_up_time
104
- statement:
105
- - spelling: eng-Latn
106
- value: "Warm-up time the analyzer requires before its indications hold."
107
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "2.11" }
108
- certificate: { attribute: warm_up_time, type: string, label: [{spelling: eng-Latn, value: "Warm-up time"}], obligation: optional }
109
-
110
- # ── Rated operating conditions (R 144-1, 4.5.1) ──────────────────────
111
-
112
- - id: rated_conditions
113
- target: temperature-effect # behaviors.yaml — the temperature influence response
114
- statement:
115
- - spelling: eng-Latn
116
- value: "The type holds its metrological performance across the rated temperature range (t_min…t_max)."
117
- source: { doc: urn:oiml:pub:r:144-1:2013, clause: "4.5.1" }
118
- certificate: { attributes: [t_min, t_max], type: string, label: [{spelling: eng-Latn, value: "Rated temperature range"}], obligation: optional }
@@ -1,224 +0,0 @@
1
- # OIML R 60 — MODEL LAYER: PROMISES (TODO.roadmap/08)
2
- # -----------------------------------------------------------------------------
3
- # First-class manufacturer PROMISES: claims on characteristics and behavior —
4
- # possibly envelope-shaped, possibly conditional — that evaluation verifies
5
- # and the certificate prints as promises-as-verified (doctrine
6
- # primmel-oiml-smart/docs/primmel/02-subjects.md §2.3, the IS catalog;
7
- # 15-model-supply-chain.md §15.2, promises-as-verified).
8
- #
9
- # A promise is NOT a declared attribute value: a claim stated as one bare
10
- # parameter value ("t_min = −10 °C") stays an `origin: declared` attribute.
11
- # primmel-ts linter C44 promise-not-bare-value enforces the distinctness —
12
- # NARROWED semantics: it rejects only promises that merely RESTATE a bare
13
- # declared value (attribute target + bare quantity level, no conditions, no
14
- # verification linkage). Targeting an attribute/dimension with a genuine
15
- # claim ABOUT it — conditioned, envelope/range, symbolic level, or verified
16
- # — is legal, and is exactly what this file does. The promises below
17
- # therefore never RESTATE a value: they cite the characteristic/behavior/
18
- # attribute/dimension the claim is about (`target`), and the certificate
19
- # print projection (`certificate:`) declares which declared attribute /
20
- # classification dimension the verified claim reads its exhibited value from
21
- # (the IS/HAS duality citation — the certificate prints the exhibited dual).
22
- #
23
- # PACKAGE HOME (TODO.model-content/03 — the payload-verbatim class): this
24
- # file is the package payload `payload/promises.yaml` — the promise set is
25
- # AUTHORED here, in the package, and regenerate-data emits
26
- # data/r60/model/promises.yaml VERBATIM (the generated fileHeader + these
27
- # raw bytes; the documented codec exclusion, same class as
28
- # payload/sample-data.yaml). The kernel's SubjectPromise carries no
29
- # certificate print-projection field yet — the projection's first-class PRL
30
- # home (`promises.prl` with a `certificate { … }` block) is the recorded
31
- # primmel-ts kernel-minor follow-up; when it ships, this payload migrates to
32
- # the PRL surface and the promise CONTENT rides over unchanged.
33
- #
34
- # TYPE ALIGNMENT (TODO.roadmap/08 deliverable 1): `PromiseDecl` (smart,
35
- # browser/src/data/standards.ts) ≡ primmel-ts `SubjectPromise` at the TYPE
36
- # level only — id, target, level, conditions (OCL over dimensions/
37
- # conditions), statement, verified_by (requirement/test ids — when absent,
38
- # verification derives from the requirement/test bindings of the same
39
- # target), source { doc, clause }. The YAML level shape ({ kind:
40
- # quantity|range|symbolic, … }) and primmel's `PromiseLevel` are
41
- # CONCEPTUALLY aligned (quantity/range/symbolic); no YAML↔PRL converter
42
- # for promises exists yet.
43
- # The `certificate:` block is the smart-side print projection (Annex B):
44
- # the certificate's characteristic list is GENERATED from this promise set
45
- # (browser/src/services/certificate.service.ts), replacing the formerly
46
- # hand-maintained characteristics_template rows of
47
- # evaluation/certificate-template.yaml (which keeps only number_format and
48
- # dimension_labels).
49
- #
50
- # APPLICATION-SIDE MAPPING (light formalization — deliverable 4): an
51
- # application's SOUGHT CLASSIFICATION reads as a promise set — the
52
- # subject-chain classification maps the applicant declares (family/group/
53
- # model `classification`, the Application model_family_id + model_ids matrix)
54
- # are the applicant's claims about what the type IS, shape-compatible with
55
- # the entries below (dimension targets with symbolic levels), which
56
- # evaluation then verifies and the certificate prints as promises-as-verified.
57
- # Application.dimensions (deprecated free-form map) corresponds 1:1 to
58
- # promise entries with `level: { kind: symbolic, value: <dimension-value> }`
59
- # on the dimension target. A full application-matrix migration is NOT in
60
- # scope — this note + the type alignment is the formalization.
61
- #
62
- # Schema: data/schemas/model.yaml ($defs/promise).
63
- ---
64
- promises:
65
-
66
- # ── Annex B mandatory supplement (R 60-4, Annex B) ──────────────────
67
-
68
- - id: e_max_values
69
- target: e_max # symbols.yaml / attributes.yaml id
70
- statement:
71
- - spelling: eng-Latn
72
- value: "Maximum capacity E_max per model — the rated capacities the family offers."
73
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.5.5" }
74
- certificate: { attribute: e_max, type: string, label: [{spelling: eng-Latn, value: "E_max values"}], obligation: mandatory }
75
-
76
- - id: accuracy_class
77
- target: accuracy_class # classification dimension (model/instrument.yaml)
78
- statement:
79
- - spelling: eng-Latn
80
- value: "The type holds its declared accuracy class — the error characteristic stays within the class MPE."
81
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "5.1.1" }
82
- verified_by:
83
- - /req/metrological/mpe # R 60-1, 5.3
84
- - /conf/metrological-tests/measurement-error-repeatability-mdlo # R 60-2, 2.10.1
85
- certificate: { dimension: accuracy_class, type: string, label: [{spelling: eng-Latn, value: "Accuracy class"}], obligation: mandatory }
86
-
87
- - id: n_lc
88
- target: n_lc
89
- statement:
90
- - spelling: eng-Latn
91
- value: "Maximum number of load cell verification intervals into which the measuring range is divided."
92
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.5.8" }
93
- certificate: { attribute: n_lc, type: integer, label: [{spelling: eng-Latn, value: "Number of verification intervals (n_LC)"}], obligation: mandatory }
94
-
95
- - id: v_min
96
- target: v_min
97
- statement:
98
- - spelling: eng-Latn
99
- value: "Minimum load cell verification interval the type is certified down to."
100
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.5.11" }
101
- certificate: { attribute: v_min, type: string, label: [{spelling: eng-Latn, value: "Minimum load cell verification interval (v_min)"}], obligation: mandatory }
102
-
103
- - id: p_lc
104
- target: p_lc
105
- statement:
106
- - spelling: eng-Latn
107
- value: "Apportioning factor p_LC of the load cell for MPE calculations."
108
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.7.2" }
109
- certificate: { attribute: p_lc, type: number, label: [{spelling: eng-Latn, value: "Apportioning factor (p_LC)"}], obligation: mandatory }
110
-
111
- # ── Annex B Table B.1 technical data (additional pages, informative) ──
112
-
113
- - id: e_min
114
- target: e_min
115
- statement:
116
- - spelling: eng-Latn
117
- value: "Minimum dead load E_min the load cell measures from."
118
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.5.9" }
119
- certificate: { attribute: e_min, type: string, label: [{spelling: eng-Latn, value: "Minimum dead load (E_min)"}], obligation: optional }
120
-
121
- - id: y_ratio
122
- target: "y"
123
- statement:
124
- - spelling: eng-Latn
125
- value: "Relative minimum load cell verification interval Y = E_max / v_min."
126
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.5.15" }
127
- certificate: { attribute: "y", type: integer, label: [{spelling: eng-Latn, value: "Relative v_min (Y)"}], obligation: optional }
128
-
129
- - id: z_ratio
130
- target: z
131
- statement:
132
- - spelling: eng-Latn
133
- value: "Relative minimum dead load output return Z = E_max / (2·DR)."
134
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.5.14" }
135
- certificate: { attribute: z, type: integer, label: [{spelling: eng-Latn, value: "Relative DR (Z)"}], obligation: optional }
136
-
137
- - id: rated_output
138
- target: rated_output
139
- statement:
140
- - spelling: eng-Latn
141
- value: "Rated output per volt of excitation at maximum capacity, with tolerance."
142
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.5.3" }
143
- certificate: { attribute: rated_output, type: string, label: [{spelling: eng-Latn, value: "Rated output"}], obligation: optional }
144
-
145
- - id: excitation_maximum
146
- target: excitation_maximum
147
- statement:
148
- - spelling: eng-Latn
149
- value: "Maximum excitation voltage the load cell withstands."
150
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.4.2" }
151
- certificate: { attribute: excitation_maximum, type: number, label: [{spelling: eng-Latn, value: "Maximum excitation voltage (V)"}], obligation: optional }
152
-
153
- - id: input_impedance
154
- target: input_impedance
155
- statement:
156
- - spelling: eng-Latn
157
- value: "Electrical impedance across the excitation terminals, with tolerance."
158
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.4.2" }
159
- certificate: { attribute: input_impedance, type: string, label: [{spelling: eng-Latn, value: "Input impedance (Ohm)"}], obligation: optional }
160
-
161
- - id: temperature_range
162
- target: temp-effect-sensitivity # behaviors.yaml — the temperature influence response
163
- statement:
164
- - spelling: eng-Latn
165
- value: "The type holds its metrological performance across the rated temperature range (T_min…T_max)."
166
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "5.6.1" }
167
- verified_by:
168
- - /req/metrological/temperature-limits # R 60-1, 5.6.1
169
- - /conf/metrological-tests/measurement-error-repeatability-mdlo # R 60-2, 2.10.1 (temperature runs)
170
- certificate: { attributes: [t_min, t_max], type: string, label: [{spelling: eng-Latn, value: "Temperature rating (°C)"}], obligation: optional }
171
-
172
- - id: safe_overload
173
- target: safe_overload
174
- statement:
175
- - spelling: eng-Latn
176
- value: "Safe overload the load cell withstands without permanent damage, relative to E_max."
177
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.5.16" }
178
- certificate: { attribute: safe_overload, type: string, label: [{spelling: eng-Latn, value: "Safe overload, relative (%)"}], obligation: optional }
179
-
180
- # ── Envelope claim (TODO.roadmap/08 deliverable d) ───────────────────
181
- # A CONDITIONED promise a bare parameter value cannot express: not
182
- # "t_min = −10 °C" (one declared value) but "class C6 HOLDS ACROSS the
183
- # rated range −10…+40 °C" — a level claimed over an envelope, gated by
184
- # conditions (OCL over the designed condition tiers). It prints as a
185
- # statement row: the certificate block binds no attribute/dimension, so
186
- # the projection renders the claim text itself (see
187
- # certificate.service.ts renderPromiseClaim).
188
- - id: accuracy_class_envelope
189
- target: accuracy_class
190
- level: { kind: symbolic, value: C6 }
191
- conditions: "ocl{self.temperature >= rated.t_min and self.temperature <= rated.t_max}"
192
- statement:
193
- - spelling: eng-Latn
194
- value: "Holds accuracy class C6 across the rated temperature range −10…+40 °C."
195
- verified_by:
196
- - /req/metrological/mpe # R 60-1, 5.3
197
- - /conf/metrological-tests/measurement-error-repeatability-mdlo # R 60-2, 2.10.1
198
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "5.1.1" }
199
- certificate: { type: statement, label: [{spelling: eng-Latn, value: "Accuracy envelope"}], obligation: optional }
200
-
201
- # ── The G1 optional defining-data fields (TODO.deploying/01) ────────
202
- - id: cable_length
203
- target: cable_length
204
- statement:
205
- - spelling: eng-Latn
206
- value: "Integral cable length (the family specification set's cable details, R 60-1, 3.4.2 (e))."
207
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "3.4.2" }
208
- certificate: { attribute: cable_length, type: quantity, label: [{spelling: eng-Latn, value: "Cable length"}], obligation: optional }
209
-
210
- - id: additional_markings
211
- target: additional_markings
212
- statement:
213
- - spelling: eng-Latn
214
- value: "Markings on the load cell beyond the required set (manufacturer's optional markings)."
215
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "6" }
216
- certificate: { attribute: additional_markings, type: string, label: [{spelling: eng-Latn, value: "Additional markings"}], obligation: optional }
217
-
218
- - id: additional_characterisation
219
- target: additional_characterisation
220
- statement:
221
- - spelling: eng-Latn
222
- value: "Additional characterisation completing the classification (R 60-1, 5.1.5 (f), 5.1.6, 5.1.7)."
223
- source: { doc: urn:oiml:pub:r:60-1:2021, clause: "5.1.5" }
224
- certificate: { attribute: additional_characterisation, type: string, label: [{spelling: eng-Latn, value: "Additional characteristics"}], obligation: optional }