@oimlsmart/primmel-packages 0.14.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,97 @@
1
+ # OIML R 129 — 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: the classification at R 129-2,
10
+ # Annex A (measurement principle) and R 129-1, 2.1 (instrument category),
11
+ # the dimension/scale-interval quantities at R 129-1, 2.2.5 / 2.2.6 /
12
+ # 2.2.9, the rated temperature conditions at R 129-1, 4.2.1, and the
13
+ # measuring-speed bounds at R 129-1, 2.1.10 / 2.1.11. No R 129 clause
14
+ # makes a certificate indication mandatory, so every row prints when
15
+ # available (obligation: optional). Composite range rows bind their
16
+ # boundary attribute pair (`attributes`) and target the response behavior
17
+ # the range conditions (R 60's temperature_range pattern — the composite
18
+ # row targets the concept, never one boundary).
19
+ promise_set MultiDimensionalMeasuringInstrument {
20
+ promise measurement_principle {
21
+ target measurement_principle
22
+ statement "The measurement principle the instrument measures dimensions by."
23
+ source { doc "urn:oiml:pub:r:129-2:2020" clause "A" }
24
+ certificate {
25
+ dimension measurement_principle
26
+ type string
27
+ label "Measurement principle"
28
+ obligation optional
29
+ }
30
+ }
31
+ promise instrument_category {
32
+ target instrument_category
33
+ statement "The instrument's declared category (automatic / semi-automatic)."
34
+ source { doc "urn:oiml:pub:r:129-1:2020" clause "2.1" }
35
+ certificate {
36
+ dimension instrument_category
37
+ type string
38
+ label "Instrument category"
39
+ obligation optional
40
+ }
41
+ }
42
+ promise max_dimension {
43
+ target max_dimension
44
+ statement "Maximum dimension per axis the instrument measures up to."
45
+ source { doc "urn:oiml:pub:r:129-1:2020" clause "2.2.5" }
46
+ certificate {
47
+ attribute max_dimension
48
+ type string
49
+ label "Max dimension per axis"
50
+ obligation optional
51
+ }
52
+ }
53
+ promise min_dimension {
54
+ target min_dimension
55
+ statement "Minimum dimension per axis the instrument measures down to."
56
+ source { doc "urn:oiml:pub:r:129-1:2020" clause "2.2.6" }
57
+ certificate {
58
+ attribute min_dimension
59
+ type string
60
+ label "Min dimension per axis"
61
+ obligation optional
62
+ }
63
+ }
64
+ promise scale_interval {
65
+ target scale_interval
66
+ statement "Scale interval (d) of the instrument's indications."
67
+ source { doc "urn:oiml:pub:r:129-1:2020" clause "2.2.9" }
68
+ certificate {
69
+ attribute scale_interval
70
+ type string
71
+ label "Scale interval (d)"
72
+ obligation optional
73
+ }
74
+ }
75
+ promise temperature_range {
76
+ target temperature-response
77
+ statement "The type holds its metrological performance across the rated temperature range."
78
+ source { doc "urn:oiml:pub:r:129-1:2020" clause "4.2.1" }
79
+ certificate {
80
+ attributes { temperature_min temperature_max }
81
+ type string
82
+ label "Temperature range"
83
+ obligation optional
84
+ }
85
+ }
86
+ promise speed_range {
87
+ target speed-response
88
+ statement "The measuring speed range the conveyor runs within (V_min…V_max)."
89
+ source { doc "urn:oiml:pub:r:129-1:2020" clause "2.1.10" }
90
+ certificate {
91
+ attributes { speed_min speed_max }
92
+ type string
93
+ label "Measuring speed range"
94
+ obligation optional
95
+ }
96
+ }
97
+ }
@@ -0,0 +1,118 @@
1
+ # OIML R 144 — 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 144-1:2013): the channel
10
+ # classification at 1.1 (scope) / 2.1 (terminology), the per-component
11
+ # measuring ranges at 4.2, the rated operating conditions at 4.5.1, and
12
+ # the response/warm-up quantities at 2.12 / 2.11. No R 144 clause makes a
13
+ # certificate indication mandatory, so every row prints when available
14
+ # (obligation: optional). Composite range rows bind their boundary
15
+ # attribute pair (`attributes`) and target the measurand channel set the
16
+ # range is a facet of (R 60's temperature_range pattern — the composite
17
+ # row targets the concept, never one boundary).
18
+ promise_set GasAnalyticalSystem {
19
+ promise measurand_components {
20
+ target measurand_components
21
+ statement "The measurand components the analyzer determines — the certified channel set."
22
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "1.1" }
23
+ certificate {
24
+ dimension measurand_components
25
+ type string
26
+ label "Measured components"
27
+ obligation optional
28
+ }
29
+ }
30
+ promise measuring_principle {
31
+ target measuring_principle
32
+ statement "The measuring principle the analyzer's channels operate on."
33
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "1.1" }
34
+ certificate {
35
+ dimension measuring_principle
36
+ type string
37
+ label "Measuring principle"
38
+ obligation optional
39
+ }
40
+ }
41
+ promise sampling_approach {
42
+ target sampling_approach
43
+ statement "The sampling approach the analyzer draws the gas stream by."
44
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "2.1" }
45
+ certificate {
46
+ dimension sampling_approach
47
+ type string
48
+ label "Sampling approach"
49
+ obligation optional
50
+ }
51
+ }
52
+ promise co_range {
53
+ target measurand_components
54
+ statement "The CO measuring range the analyzer is certified over (volume fraction, ppm)."
55
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "4.2" }
56
+ certificate {
57
+ attributes { co_range_min co_range_max }
58
+ type string
59
+ label "CO measuring range (ppm)"
60
+ obligation optional
61
+ }
62
+ }
63
+ promise no_range {
64
+ target measurand_components
65
+ statement "The NO measuring range the analyzer is certified over (volume fraction, ppm)."
66
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "4.2" }
67
+ certificate {
68
+ attributes { no_range_min no_range_max }
69
+ type string
70
+ label "NO measuring range (ppm)"
71
+ obligation optional
72
+ }
73
+ }
74
+ promise no2_range {
75
+ target measurand_components
76
+ statement "The NO2 measuring range the analyzer is certified over (volume fraction, ppm)."
77
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "4.2" }
78
+ certificate {
79
+ attributes { no2_range_min no2_range_max }
80
+ type string
81
+ label "NO2 measuring range (ppm)"
82
+ obligation optional
83
+ }
84
+ }
85
+ promise response_time {
86
+ target response_time
87
+ statement "Response time t_90 the analyzer settles within after a step change of the measurand."
88
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "2.12" }
89
+ certificate {
90
+ attribute response_time
91
+ type string
92
+ label "Response time t_90"
93
+ obligation optional
94
+ }
95
+ }
96
+ promise warm_up_time {
97
+ target warm_up_time
98
+ statement "Warm-up time the analyzer requires before its indications hold."
99
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "2.11" }
100
+ certificate {
101
+ attribute warm_up_time
102
+ type string
103
+ label "Warm-up time"
104
+ obligation optional
105
+ }
106
+ }
107
+ promise rated_conditions {
108
+ target temperature-effect
109
+ statement "The type holds its metrological performance across the rated temperature range (t_min…t_max)."
110
+ source { doc "urn:oiml:pub:r:144-1:2013" clause "4.5.1" }
111
+ certificate {
112
+ attributes { t_min t_max }
113
+ type string
114
+ label "Rated temperature range"
115
+ obligation optional
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,220 @@
1
+ # OIML R 60 — the manufacturer promise register (TODO.roadmap/08 +
2
+ # TODO.model-content/03): first-class claims on characteristics and
3
+ # behavior — possibly envelope-shaped, possibly conditional — that
4
+ # evaluation verifies and the certificate prints as promises-as-verified
5
+ # (doctrine 02-subjects.md §2.3; 15-model-supply-chain.md §15.2). The
6
+ # certificate's characteristic list GENERATES from this set
7
+ # (browser/src/services/certificate.service.ts); each entry's
8
+ # `certificate` block is the print projection (R 60-4, Annex B).
9
+ #
10
+ # A promise is NOT a declared attribute value: a claim stated as one bare
11
+ # parameter value ("t_min = −10 °C") stays an `origin: declared` attribute
12
+ # (linter C44 promise-not-bare-value, NARROWED semantics: only a bare
13
+ # restatement — attribute target + bare quantity level, no conditions, no
14
+ # verification linkage — is rejected; a genuine claim ABOUT an attribute/
15
+ # dimension, conditioned or envelope/range or symbolic-level or verified,
16
+ # is legal and is exactly what this register does).
17
+ #
18
+ # TYPE ALIGNMENT (TODO.roadmap/08 deliverable 1): the smart-side
19
+ # `PromiseDecl` (browser/src/data/standards.ts) ≡ the kernel's
20
+ # SubjectPromise — id, target, level, conditions, statement, verified_by,
21
+ # source { doc, clause }, certificate { … }.
22
+ #
23
+ # APPLICATION-SIDE MAPPING (deliverable 4): an application's SOUGHT
24
+ # CLASSIFICATION reads as a promise set — the subject-chain classification
25
+ # maps the applicant declares are shape-compatible with the
26
+ # dimension-target/symbolic-level entries below, which evaluation verifies
27
+ # and the certificate prints as promises-as-verified.
28
+ promise_set LoadCell {
29
+ promise e_max_values {
30
+ target e_max
31
+ statement "Maximum capacity E_max per model — the rated capacities the family offers."
32
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.5.5" }
33
+ certificate {
34
+ attribute e_max
35
+ type string
36
+ label "E_max values"
37
+ obligation mandatory
38
+ }
39
+ }
40
+ promise accuracy_class {
41
+ target accuracy_class
42
+ statement "The type holds its declared accuracy class — the error characteristic stays within the class MPE."
43
+ verified_by { /req/metrological/mpe /conf/metrological-tests/measurement-error-repeatability-mdlo }
44
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "5.1.1" }
45
+ certificate {
46
+ dimension accuracy_class
47
+ type string
48
+ label "Accuracy class"
49
+ obligation mandatory
50
+ }
51
+ }
52
+ promise n_lc {
53
+ target n_lc
54
+ statement "Maximum number of load cell verification intervals into which the measuring range is divided."
55
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.5.8" }
56
+ certificate {
57
+ attribute n_lc
58
+ type integer
59
+ label "Number of verification intervals (n_LC)"
60
+ obligation mandatory
61
+ }
62
+ }
63
+ promise v_min {
64
+ target v_min
65
+ statement "Minimum load cell verification interval the type is certified down to."
66
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.5.11" }
67
+ certificate {
68
+ attribute v_min
69
+ type string
70
+ label "Minimum load cell verification interval (v_min)"
71
+ obligation mandatory
72
+ }
73
+ }
74
+ promise p_lc {
75
+ target p_lc
76
+ statement "Apportioning factor p_LC of the load cell for MPE calculations."
77
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.7.2" }
78
+ certificate {
79
+ attribute p_lc
80
+ type number
81
+ label "Apportioning factor (p_LC)"
82
+ obligation mandatory
83
+ }
84
+ }
85
+ promise e_min {
86
+ target e_min
87
+ statement "Minimum dead load E_min the load cell measures from."
88
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.5.9" }
89
+ certificate {
90
+ attribute e_min
91
+ type string
92
+ label "Minimum dead load (E_min)"
93
+ obligation optional
94
+ }
95
+ }
96
+ promise y_ratio {
97
+ target y
98
+ statement "Relative minimum load cell verification interval Y = E_max / v_min."
99
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.5.15" }
100
+ certificate {
101
+ attribute y
102
+ type integer
103
+ label "Relative v_min (Y)"
104
+ obligation optional
105
+ }
106
+ }
107
+ promise z_ratio {
108
+ target z
109
+ statement "Relative minimum dead load output return Z = E_max / (2·DR)."
110
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.5.14" }
111
+ certificate {
112
+ attribute z
113
+ type integer
114
+ label "Relative DR (Z)"
115
+ obligation optional
116
+ }
117
+ }
118
+ promise rated_output {
119
+ target rated_output
120
+ statement "Rated output per volt of excitation at maximum capacity, with tolerance."
121
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.5.3" }
122
+ certificate {
123
+ attribute rated_output
124
+ type string
125
+ label "Rated output"
126
+ obligation optional
127
+ }
128
+ }
129
+ promise excitation_maximum {
130
+ target excitation_maximum
131
+ statement "Maximum excitation voltage the load cell withstands."
132
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.4.2" }
133
+ certificate {
134
+ attribute excitation_maximum
135
+ type number
136
+ label "Maximum excitation voltage (V)"
137
+ obligation optional
138
+ }
139
+ }
140
+ promise input_impedance {
141
+ target input_impedance
142
+ statement "Electrical impedance across the excitation terminals, with tolerance."
143
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.4.2" }
144
+ certificate {
145
+ attribute input_impedance
146
+ type string
147
+ label "Input impedance (Ohm)"
148
+ obligation optional
149
+ }
150
+ }
151
+ promise temperature_range {
152
+ target temp-effect-sensitivity
153
+ statement "The type holds its metrological performance across the rated temperature range (T_min…T_max)."
154
+ verified_by { /req/metrological/temperature-limits /conf/metrological-tests/measurement-error-repeatability-mdlo }
155
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "5.6.1" }
156
+ certificate {
157
+ attributes { t_min t_max }
158
+ type string
159
+ label "Temperature rating (°C)"
160
+ obligation optional
161
+ }
162
+ }
163
+ promise safe_overload {
164
+ target safe_overload
165
+ statement "Safe overload the load cell withstands without permanent damage, relative to E_max."
166
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.5.16" }
167
+ certificate {
168
+ attribute safe_overload
169
+ type string
170
+ label "Safe overload, relative (%)"
171
+ obligation optional
172
+ }
173
+ }
174
+ promise accuracy_class_envelope {
175
+ target accuracy_class
176
+ level symbolic C6
177
+ conditions ocl{self.temperature >= rated.t_min and self.temperature <= rated.t_max}
178
+ statement "Holds accuracy class C6 across the rated temperature range −10…+40 °C."
179
+ verified_by { /req/metrological/mpe /conf/metrological-tests/measurement-error-repeatability-mdlo }
180
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "5.1.1" }
181
+ certificate {
182
+ type statement
183
+ label "Accuracy envelope"
184
+ obligation optional
185
+ }
186
+ }
187
+ promise cable_length {
188
+ target cable_length
189
+ statement "Integral cable length (the family specification set's cable details, R 60-1, 3.4.2 (e))."
190
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "3.4.2" }
191
+ certificate {
192
+ attribute cable_length
193
+ type quantity
194
+ label "Cable length"
195
+ obligation optional
196
+ }
197
+ }
198
+ promise additional_markings {
199
+ target additional_markings
200
+ statement "Markings on the load cell beyond the required set (manufacturer's optional markings)."
201
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "6" }
202
+ certificate {
203
+ attribute additional_markings
204
+ type string
205
+ label "Additional markings"
206
+ obligation optional
207
+ }
208
+ }
209
+ promise additional_characterisation {
210
+ target additional_characterisation
211
+ statement "Additional characterisation completing the classification (R 60-1, 5.1.5 (f), 5.1.6, 5.1.7)."
212
+ source { doc "urn:oiml:pub:r:60-1:2021" clause "5.1.5" }
213
+ certificate {
214
+ attribute additional_characterisation
215
+ type string
216
+ label "Additional characteristics"
217
+ obligation optional
218
+ }
219
+ }
220
+ }
@@ -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.14.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 }
@@ -1,142 +0,0 @@
1
- # OIML R 91 — MODEL LAYER: PROMISES (TODO.model-content/03)
2
- # -----------------------------------------------------------------------------
3
- # First-class manufacturer PROMISES for traffic speed meters: claims on
4
- # characteristics and behavior that evaluation verifies and the certificate
5
- # prints as promises-as-verified (the same doctrine as R 60's set —
6
- # primmel-oiml-smart/docs/primmel/02-subjects.md §2.3; 15-model-supply-
7
- # chain.md §15.2). The certificate's characteristic list is GENERATED from
8
- # this promise set (browser/src/services/certificate.service.ts
9
- # certificateCharacteristics()) — the rows below carry the print surface the
10
- # hand-maintained characteristics_template of evaluation/
11
- # certificate-template.yaml formerly restated (which keeps only
12
- # 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/r91/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 91-1:2025 — the clause the
26
- # model's own attribute/dimension declaration carries). R 91-1, 6.15.1 makes
27
- # the metrological class a MANDATORY certificate indication ("The OIML
28
- # certificate shall indicate the class of the instrument"); the remaining
29
- # rows print when available (obligation: optional). Composite interval rows
30
- # bind their boundary attribute pair (`certificate.attributes`) and target
31
- # the quantity/behavior the interval bounds (R 60's temperature_range
32
- # pattern).
33
- #
34
- # Schema: data/schemas/model.yaml ($defs/promise).
35
- ---
36
- promises:
37
-
38
- # ── R 91-1, 6.15.1 — the class indication is MANDATORY ───────────────
39
-
40
- - id: metrological_class
41
- target: metrological_class # classification dimension (model/instrument.yaml)
42
- statement:
43
- - spelling: eng-Latn
44
- value: "The type holds its declared metrological class (A or B) for moving measurements."
45
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "6.15.1" }
46
- certificate: { dimension: metrological_class, type: string, label: [{spelling: eng-Latn, value: "Metrological class for moving measurements (R 91-1, 6.15.1)"}], obligation: mandatory }
47
-
48
- # ── Classification (R 91-1, clause 5) ────────────────────────────────
49
-
50
- - id: mode_of_use
51
- target: mode_of_use
52
- statement:
53
- - spelling: eng-Latn
54
- value: "The type operates in its declared mode of use (stationary / moving)."
55
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "5.1" }
56
- certificate: { dimension: mode_of_use, type: string, label: [{spelling: eng-Latn, value: "Mode of use (stationary / moving)"}], obligation: optional }
57
-
58
- - id: working_principle
59
- target: working_principle
60
- statement:
61
- - spelling: eng-Latn
62
- value: "The type measures speed by its declared working principle."
63
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "5.3" }
64
- certificate: { dimension: working_principle, type: string, label: [{spelling: eng-Latn, value: "Working principle"}], obligation: optional }
65
-
66
- - id: installation_principle
67
- target: installation_principle
68
- statement:
69
- - spelling: eng-Latn
70
- value: "The type installs by its declared principle (mobile / fixed / portable)."
71
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "5.2" }
72
- certificate: { dimension: installation_principle, type: string, label: [{spelling: eng-Latn, value: "Installation (mobile / fixed / portable)"}], obligation: optional }
73
-
74
- - id: triggering
75
- target: triggering
76
- statement:
77
- - spelling: eng-Latn
78
- value: "The type triggers its measurements as declared (manual / automatic)."
79
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "5.4" }
80
- certificate: { dimension: triggering, type: string, label: [{spelling: eng-Latn, value: "Triggering (manual / automatic)"}], obligation: optional }
81
-
82
- - id: cosine_compensation
83
- target: cosine_compensation
84
- statement:
85
- - spelling: eng-Latn
86
- value: "The type compensates the cosine error for its declared road orientation (along- / across-the-road)."
87
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "5.5" }
88
- certificate: { dimension: cosine_compensation, type: string, label: [{spelling: eng-Latn, value: "Road orientation (along- / across-the-road)"}], obligation: optional }
89
-
90
- # ── Measuring intervals (R 91-1, 6.1 / 6.17) ─────────────────────────
91
-
92
- - id: speed_interval
93
- target: v # symbols.yaml — the speed quantity the interval bounds
94
- statement:
95
- - spelling: eng-Latn
96
- value: "The speed measuring interval the type is certified over (km/h)."
97
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "6.1" }
98
- certificate: { attributes: [speed_interval_min, speed_interval_max], type: string, label: [{spelling: eng-Latn, value: "Speed measuring interval (km/h)"}], obligation: optional }
99
-
100
- - id: distance_interval
101
- target: d # symbols.yaml — the distance-to-vehicle quantity
102
- statement:
103
- - spelling: eng-Latn
104
- value: "The distance measuring interval the type is certified over (m)."
105
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "6.17" }
106
- certificate: { attributes: [distance_interval_min, distance_interval_max], type: string, label: [{spelling: eng-Latn, value: "Distance measuring interval (m)"}], obligation: optional }
107
-
108
- - id: angle_interval
109
- target: alpha # symbols.yaml — the measurement angle quantity
110
- statement:
111
- - spelling: eng-Latn
112
- value: "The measurement angle interval the type is certified over (°)."
113
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "6.17" }
114
- certificate: { attributes: [angle_interval_min, angle_interval_max], type: string, label: [{spelling: eng-Latn, value: "Angle interval (°)"}], obligation: optional }
115
-
116
- # ── Rated operating conditions (R 91-1, 6.16) ────────────────────────
117
-
118
- - id: operating_temp_range
119
- target: temperature-effect # behaviors.yaml — the temperature influence response
120
- statement:
121
- - spelling: eng-Latn
122
- value: "The type holds its metrological performance across the rated operating temperature range (T_min…T_max)."
123
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "6.16" }
124
- certificate: { attributes: [operating_temp_min, operating_temp_max], type: string, label: [{spelling: eng-Latn, value: "Rated temperature range (°C)"}], obligation: optional }
125
-
126
- - id: supply_voltage
127
- target: supply_voltage_dc
128
- statement:
129
- - spelling: eng-Latn
130
- value: "The DC supply voltage rating the type operates at."
131
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "6.16" }
132
- certificate: { attribute: supply_voltage_dc, type: string, label: [{spelling: eng-Latn, value: "Supply voltage (V)"}], obligation: optional }
133
-
134
- # ── Legally relevant software (R 91-1, 7.10.1) ───────────────────────
135
-
136
- - id: software_version
137
- target: software_version
138
- statement:
139
- - spelling: eng-Latn
140
- value: "The certificate identifies the type's legally relevant software by its declared version."
141
- source: { doc: urn:oiml:pub:r:91-1:2025, clause: "7.10.1" }
142
- certificate: { attribute: software_version, type: string, label: [{spelling: eng-Latn, value: "Legally relevant software identification (R 91-1, 7.10.1; R 91-4 identification block)"}], obligation: optional }