@oimlsmart/primmel-packages 0.20.0 → 0.22.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.
@@ -1,464 +0,0 @@
1
- # OIML R 91 Sample Data — evidence-file artifact instance flow (TODO.roadmap/09)
2
- # + the clause-8 verification pilot (TODO.roadmap/21)
3
- # -----------------------------------------------------------------------------
4
- # Flow 1 (sample-r91-evf): one type-evaluation flow for a stationary
5
- # doppler-radar speed meter, exercising the ARTIFACT chain of
6
- # model/artifacts.yaml:
7
- # /conf/examinations/evidence-file-examination
8
- # produces_artifacts: [enforcement-evidence-file] (the IS contract)
9
- # test_report.artifact_instances (the HAS evidence)
10
- # — one evidence-file instance the INSTRUMENT produced, linked as
11
- # evidence to the examination assignment and this report.
12
- # MECE: the instance carries the instrument's 7.3 a–l content; the report
13
- # form (execution/forms/evidence-file.yaml) carries only the lab's
14
- # examination record — no artifact content is duplicated into evidence
15
- # shapes (linker rule artifact-evidence-separation).
16
- #
17
- # Flow 2 (sample-r91-vfy): the R 91-1, clause 8 verification pilot — one
18
- # sample lifecycle: a moving doppler-radar speed meter (class B) with type
19
- # evaluation complete, then INITIAL VERIFICATION passed with verdicts and
20
- # marks (8.2.4) and the securing state set on the sample (7.13). The
21
- # re-verification triggers of evaluation/verification.yaml fire against
22
- # this seed in src/__tests__/verification.test.ts.
23
- # -----------------------------------------------------------------------------
24
- standard: oiml-r91
25
- description: >
26
- Minimal OIML R 91 type evaluation flow seeding the artifact-instance chain
27
- (TODO.roadmap/09): one stationary doppler-radar speed meter whose
28
- evidence-file examination links one enforcement-evidence-file artifact
29
- instance. Removing the instance fails validation (linker rule
30
- artifact-presence) — this flow is the positive proof.
31
-
32
- flows:
33
- - name: "EX1 — ACME Speed Systems RS-180 (evidence file)"
34
- id_prefix: sample-r91-evf
35
- party:
36
- laboratory_id: "21"
37
- authority_id: EX1
38
- subject:
39
- manufacturer:
40
- id: mfr-truspeed
41
- standard_id: oiml-r91
42
- company: "ACME Speed Systems GmbH"
43
- street: "Messweg 7"
44
- city: "Braunschweig"
45
- postalCode: "38100"
46
- country: "Germany"
47
- phone: "+49 531 000-0"
48
- created: "2026-01-15"
49
- modified: "2026-06-01"
50
- family:
51
- id: fam-acme-rs180
52
- standard_id: oiml-r91
53
- family_designation: "RS-180"
54
- manufacturer_id: mfr-truspeed
55
- classification:
56
- installation_principle: mobile
57
- working_principle: doppler-radar
58
- triggering: automatic
59
- climatic_environment_class: H2
60
- mechanical_environment_class: M2
61
- parameters:
62
- operating_temp_min: { value: -20, unit: degC }
63
- operating_temp_max: { value: 60, unit: degC }
64
- created: "2026-01-15"
65
- modified: "2026-06-01"
66
- groups:
67
- - id: grp-acme-rs180-a
68
- standard_id: oiml-r91
69
- family_id: fam-acme-rs180
70
- manufacturer_id: mfr-truspeed
71
- group_label: "A"
72
- classification: { metrological_class: A }
73
- created: "2026-01-15"
74
- modified: "2026-06-01"
75
- models:
76
- - id: mod-acme-rs180-st-a
77
- standard_id: oiml-r91
78
- model_designation: "RS-180 (stationary, class A)"
79
- manufacturer_id: mfr-truspeed
80
- family_id: fam-acme-rs180
81
- group_id: grp-acme-rs180-a
82
- classification:
83
- mode_of_use: stationary
84
- cosine_compensation: along-the-road
85
- created: "2026-01-15"
86
- modified: "2026-06-01"
87
- samples:
88
- - id: smp-acme-rs180-001
89
- standard_id: oiml-r91
90
- serial_number: "TS9000-4815"
91
- model_id: mod-acme-rs180-st-a
92
- manufacturer_id: mfr-truspeed
93
- application_id: app-acme-rs180
94
- status: TESTING_COMPLETE
95
- condition: NEW
96
- custody_events:
97
- - { date: "2026-03-01", type: RECEIVED, actor: "Example Test Laboratory", notes: "Sample received from manufacturer" }
98
- - { date: "2026-09-15", type: TESTING_COMPLETE, actor: "Example Test Laboratory", notes: "Type evaluation examinations complete" }
99
- created: "2026-01-15"
100
- modified: "2026-09-15"
101
- application:
102
- id: app-acme-rs180
103
- standard_id: oiml-r91
104
- application_number: "DE-TS-2026-0911"
105
- date_of_application: "2026-01-15"
106
- status: ACCEPTED
107
- applicant:
108
- company: "ACME Speed Systems GmbH"
109
- representative: "Dr. Ada Verkehr"
110
- address: "Messweg 7, 38100 Braunschweig, Germany"
111
- noConcurrentApplication: true
112
- model_family_id: fam-acme-rs180
113
- model_ids: [mod-acme-rs180-st-a]
114
- sample_ids: [smp-acme-rs180-001]
115
- documentation:
116
- - { name: "Technical documentation", description: "Complete technical file", submitted: true, reference: "TD-TS9000-2026" }
117
- - { name: "Evidence file format specification", description: "Manufacturer's evidence-file format and security description (R 91-1, 7.3/7.4)", submitted: true }
118
- submitted_date: "2026-01-15"
119
- reviewed_date: "2026-02-15"
120
- reviewer: "Example TL Department 5.2"
121
- review_notes: "Complete documentation received. Application accepted for type evaluation."
122
- test_request:
123
- id: trq-acme-rs180-01
124
- standard_id: oiml-r91
125
- request_number: "TRQ-DE-TS-2026-0911-01"
126
- application_id: app-acme-rs180
127
- requesting_authority_id: EX1
128
- assigned_laboratory_id: "21"
129
- status: COMPLETED
130
- scheme: A
131
- issued_date: "2026-03-01"
132
- issued_by: "Example TL Department 5.2"
133
- assignments:
134
- - { id: asg-ts9000-evidence-file-001, form_id: evidence-file, sample_id: smp-acme-rs180-001, model_id: mod-acme-rs180-st-a, status: COMPLETED }
135
- test_report:
136
- id: trp-acme-rs180
137
- standard_id: oiml-r91
138
- report_number: "ETL-5.2-2026-TR-0911"
139
- test_request_id: trq-acme-rs180-01
140
- application_id: app-acme-rs180
141
- laboratory_id: "21"
142
- model_family_id: fam-acme-rs180
143
- model_group_id: grp-acme-rs180-a
144
- sample_ids: [smp-acme-rs180-001]
145
- status: ACCEPTED
146
- evaluator: "Example Test Laboratory"
147
- submitted_date: "2026-09-15"
148
- forms:
149
- - evidence-file
150
- form_default_result: PASS
151
- artifact_instances:
152
- - id: evf-ts9000-0042
153
- of: enforcement-evidence-file
154
- produced_at: "2026-09-15T10:14:00Z"
155
- by: smp-acme-rs180-001
156
- content:
157
- measurement_timestamp: { value: "2026-09-15T10:14:00Z" }
158
- measurement_location: { value: "A12, km 114.2, lane 2 (test site)" }
159
- measurement_id: { value: "SEQ-2026-09-15-0042" }
160
- measured_speed: { value: 137, unit: km/h }
161
- driving_direction: { value: "approaching" }
162
- speed_limit: { value: 100, unit: km/h }
163
- type_designation: { value: "RS-180" }
164
- instrument_serial_number: { value: "TS9000-4815" }
165
- image_evidence: { value: "evf-2026-09-15-0042.jpg" }
166
- vehicle_identification_aids: { value: "lane indicator: lane 2; crosshair on the front plate" }
167
- site_alignment_parameters: { value: "site A12 km 114.2; antenna angle 25 deg; cosine compensation along-the-road" }
168
- links:
169
- - asg-ts9000-evidence-file-001
170
- - trp-acme-rs180
171
- evaluation:
172
- id: eva-acme-rs180
173
- standard_id: oiml-r91
174
- application_id: app-acme-rs180
175
- authority_id: EX1
176
- test_report_ids: [trp-acme-rs180]
177
- model_id: mod-acme-rs180-st-a
178
- reviewer_name: "Example TL Department 5.2"
179
- review_date: "2026-10-01"
180
- overall_decision: APPROVED
181
- review_notes: "Evidence-file examination satisfactory; artifact instance conforms to the 7.3 a–l content contract."
182
- certificate:
183
- id: crt-acme-rs180
184
- standard_id: oiml-r91
185
- model_family_id: fam-acme-rs180
186
- evaluation_id: eva-acme-rs180
187
- test_report_ids: [trp-acme-rs180]
188
- status: ACTIVE
189
- certificate_number: "R91/2025-A-EX1-26.01"
190
- scheme: A
191
- edition_year: 2025
192
- oiml_member_state: GERMANY
193
- issue_date: "2026-11-01"
194
- expiry_date: "2031-11-01"
195
- periodicity_years: 5
196
- type_description: "Stationary doppler-radar speed meter for automatic enforcement measurements, metrological class A."
197
- test_reports:
198
- - { report_number: "ETL-5.2-2026-TR-0911", date: "2026-09-15", pages: 18 }
199
- classifications:
200
- - { label: A, characteristics: { mode_of_use: stationary, working_principle: doppler-radar, triggering: automatic, installation_principle: mobile } }
201
- json_data:
202
- standard: "OIML R 91:2025"
203
- certificate_number: "R91/2025-A-EX1-26.01"
204
- scheme: A
205
- # ── Verification pilot (TODO.roadmap/21, gap audit G1) ────────────────
206
- # One sample lifecycle through the R 91-1, clause 8 verification pathway:
207
- # a MOVING doppler-radar speed meter (class B) with its type evaluation
208
- # complete, then INITIAL VERIFICATION (8.2) passed with verdicts and
209
- # marks (8.2.4) and the securing state set on the sample (7.13) — the
210
- # verification record rides the new verificationRecords store, the
211
- # sample carries verification_state VERIFIED + seals. The
212
- # re-verification triggers of evaluation/verification.yaml (the 1-year
213
- # validity timer and the 6.15.3 Note 2 tyre-change signal — ego meters
214
- # are why the pilot subject is a MOVING meter) are proven against this
215
- # seed by src/__tests__/verification.test.ts: the mpe-stationary verdict
216
- # below is recomputed by the shared verdict machinery
217
- # (services/verdict.service.ts over sample.test_context v/v_ref/
218
- # reference_speed) and must agree byte-for-byte in outcome and fact.
219
- - name: "EX1 — ACME Speed Instruments RS-500M (verification pilot)"
220
- id_prefix: sample-r91-vfy
221
- party:
222
- laboratory_id: "21"
223
- authority_id: EX1
224
- subject:
225
- manufacturer:
226
- id: mfr-patrolgauge
227
- standard_id: oiml-r91
228
- company: "ACME Speed Instruments BV"
229
- street: "Radarweg 12"
230
- city: "Delft"
231
- postalCode: "2628 AB"
232
- country: "Netherlands"
233
- phone: "+31 15 000-00"
234
- created: "2026-01-20"
235
- modified: "2026-06-01"
236
- family:
237
- id: fam-acme-rs500
238
- standard_id: oiml-r91
239
- family_designation: "RS-500"
240
- manufacturer_id: mfr-patrolgauge
241
- classification:
242
- installation_principle: mobile
243
- working_principle: doppler-radar
244
- triggering: automatic
245
- climatic_environment_class: H2
246
- mechanical_environment_class: M2
247
- parameters:
248
- operating_temp_min: { value: -20, unit: degC }
249
- operating_temp_max: { value: 60, unit: degC }
250
- created: "2026-01-20"
251
- modified: "2026-06-01"
252
- groups:
253
- - id: grp-acme-rs500-b
254
- standard_id: oiml-r91
255
- family_id: fam-acme-rs500
256
- manufacturer_id: mfr-patrolgauge
257
- group_label: "B"
258
- classification: { metrological_class: B }
259
- created: "2026-01-20"
260
- modified: "2026-06-01"
261
- models:
262
- - id: mod-acme-rs500-mv-b
263
- standard_id: oiml-r91
264
- model_designation: "RS-500M (moving, class B)"
265
- manufacturer_id: mfr-patrolgauge
266
- family_id: fam-acme-rs500
267
- group_id: grp-acme-rs500-b
268
- classification:
269
- mode_of_use: moving
270
- cosine_compensation: along-the-road
271
- created: "2026-01-20"
272
- modified: "2026-06-01"
273
- samples:
274
- - id: smp-acme-rs500-001
275
- standard_id: oiml-r91
276
- serial_number: "PG500M-0007"
277
- model_id: mod-acme-rs500-mv-b
278
- manufacturer_id: mfr-patrolgauge
279
- application_id: app-acme-rs500
280
- status: TESTING_COMPLETE
281
- condition: NEW
282
- custody_events:
283
- - { date: "2026-03-10", type: RECEIVED, actor: "Example Test Laboratory", notes: "Sample received from manufacturer" }
284
- - { date: "2026-09-20", type: TESTING_COMPLETE, actor: "Example Test Laboratory", notes: "Type evaluation examinations complete" }
285
- test_context:
286
- # The verification field accuracy test's bound facts (8.2.2) —
287
- # the verdict service recomputes the mpe-stationary verdict
288
- # from these (v − v_ref = 1.2 km/h ≤ 3 km/h MPE at 100 km/h).
289
- v: { value: 101.2, unit: km/h }
290
- v_ref: { value: 100, unit: km/h }
291
- reference_speed: { value: 100, unit: km/h }
292
- verification_state: VERIFIED
293
- seals:
294
- - id: seal-adjustment-pg500-001
295
- protects: "adjustment means (R 91-1, 7.13 a)"
296
- means: "mechanical seal"
297
- location: "housing, adjustment screw cover"
298
- status: INTACT
299
- set_by: sample-r91-vfy-ver-initial
300
- set_at: "2026-10-01T09:30:00Z"
301
- created: "2026-01-20"
302
- modified: "2026-10-01"
303
- application:
304
- id: app-acme-rs500
305
- standard_id: oiml-r91
306
- application_number: "DE-PG-2026-1017"
307
- date_of_application: "2026-01-20"
308
- status: ACCEPTED
309
- applicant:
310
- company: "ACME Speed Instruments BV"
311
- representative: "Ir. Sanne Visser"
312
- address: "Radarweg 12, 2628 AB Delft, Netherlands"
313
- noConcurrentApplication: true
314
- model_family_id: fam-acme-rs500
315
- model_ids: [mod-acme-rs500-mv-b]
316
- sample_ids: [smp-acme-rs500-001]
317
- documentation:
318
- - { name: "Technical documentation", description: "Complete technical file incl. ego-meter description (6.15.3)", submitted: true, reference: "TD-PG500M-2026" }
319
- - { name: "Evidence file format specification", description: "Manufacturer's evidence-file format and security description (R 91-1, 7.3/7.4)", submitted: true }
320
- submitted_date: "2026-01-20"
321
- reviewed_date: "2026-02-20"
322
- reviewer: "Example TL Department 5.2"
323
- review_notes: "Complete documentation received. Application accepted for type evaluation."
324
- test_request:
325
- id: trq-acme-rs500-01
326
- standard_id: oiml-r91
327
- request_number: "TRQ-DE-PG-2026-1017-01"
328
- application_id: app-acme-rs500
329
- requesting_authority_id: EX1
330
- assigned_laboratory_id: "21"
331
- status: COMPLETED
332
- scheme: A
333
- issued_date: "2026-03-10"
334
- issued_by: "Example TL Department 5.2"
335
- assignments:
336
- - { id: asg-pg500-evidence-file-001, form_id: evidence-file, sample_id: smp-acme-rs500-001, model_id: mod-acme-rs500-mv-b, status: COMPLETED }
337
- test_report:
338
- id: trp-acme-rs500
339
- standard_id: oiml-r91
340
- report_number: "ETL-5.2-2026-TR-1017"
341
- test_request_id: trq-acme-rs500-01
342
- application_id: app-acme-rs500
343
- laboratory_id: "21"
344
- model_family_id: fam-acme-rs500
345
- model_group_id: grp-acme-rs500-b
346
- sample_ids: [smp-acme-rs500-001]
347
- status: ACCEPTED
348
- evaluator: "Example Test Laboratory"
349
- submitted_date: "2026-09-20"
350
- forms:
351
- - evidence-file
352
- form_default_result: PASS
353
- artifact_instances:
354
- - id: evf-pg500-0007
355
- of: enforcement-evidence-file
356
- produced_at: "2026-09-20T14:02:00Z"
357
- by: smp-acme-rs500-001
358
- content:
359
- measurement_timestamp: { value: "2026-09-20T14:02:00Z" }
360
- measurement_location: { value: "A13, km 88.4, lane 1 (test site)" }
361
- measurement_id: { value: "SEQ-2026-09-20-0007" }
362
- measured_speed: { value: 128, unit: km/h }
363
- driving_direction: { value: "approaching" }
364
- speed_limit: { value: 100, unit: km/h }
365
- type_designation: { value: "RS-500M" }
366
- instrument_serial_number: { value: "PG500M-0007" }
367
- image_evidence: { value: "evf-2026-09-20-0007.jpg" }
368
- vehicle_identification_aids: { value: "lane indicator: lane 1; crosshair on the front plate" }
369
- site_alignment_parameters: { value: "site A13 km 88.4; antenna angle 25 deg; cosine compensation along-the-road" }
370
- recorded_ego_speed: { value: 97.5, unit: km/h }
371
- links:
372
- - asg-pg500-evidence-file-001
373
- - trp-acme-rs500
374
- evaluation:
375
- id: eva-acme-rs500
376
- standard_id: oiml-r91
377
- application_id: app-acme-rs500
378
- authority_id: EX1
379
- test_report_ids: [trp-acme-rs500]
380
- model_id: mod-acme-rs500-mv-b
381
- reviewer_name: "Example TL Department 5.2"
382
- review_date: "2026-09-25"
383
- overall_decision: APPROVED
384
- review_notes: "Type evaluation complete; approved for moving enforcement measurements, class B."
385
- certificate:
386
- id: crt-acme-rs500
387
- standard_id: oiml-r91
388
- model_family_id: fam-acme-rs500
389
- evaluation_id: eva-acme-rs500
390
- test_report_ids: [trp-acme-rs500]
391
- status: ACTIVE
392
- certificate_number: "R91/2025-A-EX1-26.02"
393
- scheme: A
394
- edition_year: 2025
395
- oiml_member_state: GERMANY
396
- issue_date: "2026-09-30"
397
- expiry_date: "2031-09-30"
398
- periodicity_years: 5
399
- type_description: "Moving doppler-radar speed meter with ego speed meter for patrol-vehicle enforcement, metrological class B."
400
- test_reports:
401
- - { report_number: "ETL-5.2-2026-TR-1017", date: "2026-09-20", pages: 21 }
402
- classifications:
403
- - { label: B, characteristics: { mode_of_use: moving, working_principle: doppler-radar, triggering: automatic, installation_principle: mobile } }
404
- json_data:
405
- standard: "OIML R 91:2025"
406
- certificate_number: "R91/2025-A-EX1-26.02"
407
- scheme: A
408
- verification:
409
- records:
410
- # ── Initial verification (R 91-1, 8.2), passed and marked ─────
411
- # Tests (8.2.2): the field accuracy tests for a moving meter — the
412
- # moving field test and the ego-meter field test (a subset of the
413
- # initial-verification process's test set). Verdicts over the
414
- # 8.2.3 assessment scope; the mpe-stationary verdict is recomputed
415
- # by the shared verdict machinery in verification.test.ts.
416
- - id: sample-r91-vfy-ver-initial
417
- kind: initial
418
- process_id: initial-verification
419
- status: MARKED
420
- outcome: pass
421
- # Seeded verdicts cover the testable scope of 8.2.3(a) (the two field
422
- # accuracy tests): mpe-stationary (re-derived by verification.test.ts)
423
- # and mpe-moving (asserted structurally). The 8.2.3(b) inspection items
424
- # (ego-speed, sealing-inscriptions) are inspection-verified, not
425
- # test-verdicts — deliberately out of the seeded verdict list.
426
- tests:
427
- - /conf/field/moving-field-test
428
- - /conf/field/ego-field-test
429
- verdicts:
430
- - requirement_id: /req/metrological/mpe-stationary
431
- fact: { name: speed_error, value: { value: 1.2, unit: km/h }, source: verdict-registry }
432
- limit:
433
- verdict: speed_error
434
- op: lte
435
- limit: "ocl{lookupMPE(reference_speed, 'stationary', 1.0)}"
436
- inputs: { v: 101.2, v_ref: 100, reference_speed: 100 }
437
- outcome: pass
438
- modality: shall
439
- - requirement_id: /req/category-moving/mpe-moving
440
- fact: { name: speed_error, value: { value: 1.2, unit: km/h }, source: verdict-registry }
441
- limit:
442
- expression: "ocl{abs(speed_error) <= lookupMPE(reference_speed, metrological_class, 1.0)}"
443
- uses: [ speed_error, reference_speed, metrological_class ]
444
- inputs: { speed_error: 1.2, reference_speed: 100, metrological_class: B }
445
- outcome: pass
446
- modality: shall
447
- marks:
448
- - id: mark-de-2026-0042
449
- mark: "DE verification mark 2026"
450
- location: "housing front plate (R 91-1, 7.14)"
451
- clause: "8.2.4"
452
- applied_at: "2026-10-01T09:30:00Z"
453
- applied_by: "Example TL Verification Officer"
454
- laboratory_id: "21"
455
- authority: "Example TL (metrological authority)"
456
- equipment:
457
- - { id: ref-speed-meter-01, cal_cert: "ETL-Cal-2026-1187" }
458
- assessed_by: "Example TL Verification Officer"
459
- assessed_date: "2026-10-01"
460
- valid_until: "2027-10-01"
461
- certificate_number: "DE-VER-2026-0042"
462
- trigger_event: scheduled
463
- created: "2026-10-01"
464
- modified: "2026-10-01"