@oimlsmart/primmel-packages 0.21.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.
@@ -0,0 +1,74 @@
1
+ # oiml-r129 — lab selection criteria (kernel 1.14.0's lab_selection_criterion, TODO.roadmap/40 family G): the parameter→capability matching register the test-design linker resolves.
2
+ lab_selection_criterion accreditation-scope {
3
+ weight required
4
+ parameter_type dimension
5
+ label "Accreditation scope"
6
+ description "Lab must be OIML-accredited for R 129 multi-dimensional measuring instruments"
7
+ match {
8
+ operator has_capability
9
+ required_capability "accredited-r129"
10
+ }
11
+ }
12
+ lab_selection_criterion dimensional-references {
13
+ weight required
14
+ parameter_type operational
15
+ label "Dimensional test objects"
16
+ description "Every R 129 type evaluation measures test objects of known dimensions covering the measuring range (R 129-2, Annex A) — the lab must hold traceable dimensional references (gauge blocks / calibrated test objects) and declare the \"dimensional-testing\" capability."
17
+ match {
18
+ operator has_capability
19
+ required_capability "dimensional-testing"
20
+ }
21
+ }
22
+ lab_selection_criterion climatic-chamber {
23
+ weight required
24
+ parameter_type operational
25
+ label "Climatic testing capability"
26
+ description "Every R 129 type evaluation includes static temperature stages and damp-heat tests (R 129-2, Annex A per IEC 60068-2-1/-2-2/-2-30/-2-78). The lab must declare the \"climatic-testing\" capability."
27
+ match {
28
+ operator has_capability
29
+ required_capability "climatic-testing"
30
+ }
31
+ }
32
+ lab_selection_criterion emc-testing {
33
+ weight required
34
+ parameter_type operational
35
+ label "EMC testing capability"
36
+ description "Every R 129 type evaluation includes the disturbance suite (ESD, RF immunity — R 129-2, Annex A per IEC 61000-4-2/-4-3/-4-6; mains-powered instruments also dips, bursts and surges). The lab must declare the \"emc-testing\" capability."
37
+ match {
38
+ operator has_capability
39
+ required_capability "emc-testing"
40
+ }
41
+ }
42
+ lab_selection_criterion conveyor-facility {
43
+ weight required
44
+ parameter_type dimension
45
+ label "Conveyor test facility"
46
+ description "Automatic instruments are tested over the declared measuring-speed range (R 129-2, Annex A, speed of movement) — the lab must provide a conveyor or equivalent relative-movement facility and declare the \"conveyor-testing\" capability."
47
+ applies_when { model_field instrument_category in { automatic } }
48
+ match {
49
+ operator has_capability
50
+ required_capability "conveyor-testing"
51
+ }
52
+ }
53
+ lab_selection_criterion optical-effects {
54
+ weight preferred
55
+ parameter_type dimension
56
+ label "Ambient light test facility"
57
+ description "Optical instruments are tested under varying ambient light (R 129-2, Annex A: 100 lx to 1500 lx) — the lab should declare the \"light-effects-testing\" capability."
58
+ applies_when { model_field measurement_principle in { optical } }
59
+ match {
60
+ operator has_capability
61
+ required_capability "light-effects-testing"
62
+ }
63
+ }
64
+ lab_selection_criterion acoustic-effects {
65
+ weight preferred
66
+ parameter_type dimension
67
+ label "Acoustic test facility"
68
+ description "Acoustic instruments are tested at sound levels up to 100 dB (R 129-2, Annex A) — the lab should declare the \"acoustic-effects-testing\" capability."
69
+ applies_when { model_field measurement_principle in { acoustic } }
70
+ match {
71
+ operator has_capability
72
+ required_capability "acoustic-effects-testing"
73
+ }
74
+ }
@@ -0,0 +1,33 @@
1
+ # oiml-r129 — sample selection rules + specimen governance (kernel 1.14.0's sample_selection_rule + specimen_governance_rule, TODO.roadmap/40 family G).
2
+ sample_selection_rule definitive-type-per-model {
3
+ step "sampling"
4
+ rule "For each MeasuringInstrumentModel in the application scope, select at least one unit which represents the definitive type"
5
+ rationale "R 129 defines no group level and no presumption of compliance across models, so every model in scope contributes a representative unit (R 129-4, 1.4 — sample selection lives in the type evaluation report format)."
6
+ applicability "always"
7
+ selector "ONE UNIT PER model_id (representative of the definitive type)"
8
+ test_kind full_evaluation
9
+ }
10
+ sample_selection_rule power-supply-coverage {
11
+ step "sampling"
12
+ rule "Where the application spans models with different power supplies, ensure each power supply kind is covered — the mains voltage tests and the low-battery test apply per configuration (R 129-2, Annex A, Table A.1)"
13
+ rationale "The power supply determines which electrical tests apply: AC mains (voltage variation, dips, bursts, surges), battery (low voltage); evidence must exist for every supply configuration in scope."
14
+ applicability "distinct(model.power_supply).length > 1"
15
+ selector "GROUP BY power_supply KEEP >= 1 unit EACH"
16
+ test_kind full_evaluation
17
+ }
18
+ sample_selection_rule instrument-category-coverage {
19
+ step "sampling"
20
+ rule "Where the application spans both automatic and semi-automatic models, ensure each category is covered — the speed-of-movement test applies only to automatic units"
21
+ rationale "R 129-2, Annex A applies the speed of movement test to automatic instruments only; a semi-automatic unit cannot supply that evidence for an automatic model."
22
+ applicability "distinct(model.instrument_category).length > 1"
23
+ selector "GROUP BY instrument_category KEEP >= 1 unit EACH"
24
+ test_kind full_evaluation
25
+ }
26
+ sample_selection_rule worst-case-rating-pick {
27
+ step "sampling"
28
+ rule "Within a model, prefer the unit whose declared ratings are most demanding on the test program (widest measuring range Max − Min, smallest scale interval d, highest speed_max)"
29
+ rationale "Practical severity ordering — tests exercise the widest claims made for the type."
30
+ applicability "samples_per_model.length > 1"
31
+ selector "ORDER BY (max_dimension - min_dimension) DESC, scale_interval ASC, speed_max DESC LIMIT 1"
32
+ test_kind full_evaluation
33
+ }
@@ -0,0 +1,123 @@
1
+ # oiml-r144 — lab selection criteria (kernel 1.14.0's lab_selection_criterion, TODO.roadmap/40 family G): the parameter→capability matching register the test-design linker resolves.
2
+ lab_selection_criterion accreditation-scope {
3
+ weight required
4
+ parameter_type dimension
5
+ label "Accreditation scope"
6
+ description "Lab must be OIML-accredited for R 144 gas analytical systems covering the measured components"
7
+ match {
8
+ operator capability_prefix_match
9
+ required_capability_prefix "accredited-r144-"
10
+ model_field measurand_components
11
+ }
12
+ }
13
+ lab_selection_criterion cgm-infrastructure {
14
+ weight required
15
+ parameter_type dimension
16
+ label "Calibration gas mixture infrastructure"
17
+ description "Lab must hold (or have traceable access to) certified CGMs for every measured component — composition uncertainty ≤ 2 % of the certified value (R 144-1, A.2.3), uncertainty/MPE ratio ≤ 1:3 (R 144-1, 7.2.2.2). Labs declare capabilities like \"cgm-co\", \"cgm-no\", \"cgm-no2\"."
18
+ applies_when { model_field measurand_components not_null true }
19
+ match {
20
+ operator capability_from_field
21
+ required_capability_prefix "cgm-"
22
+ model_field measurand_components
23
+ }
24
+ }
25
+ lab_selection_criterion climatic-chamber {
26
+ weight required
27
+ parameter_type operational
28
+ label "Climatic testing capability"
29
+ description "Every R 144 type evaluation includes dry heat (40 °C), cold (5 °C) and damp heat (30 °C / 85 % RH) tests (R 144-2, 1.5–1.7). The lab must declare the \"climatic-testing\" capability."
30
+ match {
31
+ operator has_capability
32
+ required_capability "climatic-testing"
33
+ }
34
+ }
35
+ lab_selection_criterion emc-testing {
36
+ weight required
37
+ parameter_type operational
38
+ label "EMC testing capability"
39
+ description "Every gas analytical system undergoes the disturbance suite (voltage dips, bursts, surges, ESD, radiated RF — R 144-2, 1.12–1.17). The lab must declare the \"emc-testing\" capability."
40
+ match {
41
+ operator has_capability
42
+ required_capability "emc-testing"
43
+ }
44
+ }
45
+ lab_selection_criterion extractive-testing {
46
+ weight required
47
+ parameter_type dimension
48
+ label "Extractive sampling test capability"
49
+ description "Extractive systems require the gas handling tests (flow spillover R 144-2, 1.21; leakproofness R 144-2, 1.22 per IEC 60068-2-17) and heated-line/probe infrastructure. The lab must declare the \"extractive-testing\" capability."
50
+ applies_when { model_field sampling_approach in { extractive } }
51
+ match {
52
+ operator has_capability
53
+ required_capability "extractive-testing"
54
+ }
55
+ }
56
+ lab_selection_criterion battery-testing {
57
+ weight required
58
+ parameter_type dimension
59
+ label "Battery test capability"
60
+ description "Battery-powered systems require the low battery voltage test (R 144-2, 1.18). The lab must declare the \"battery-testing\" capability."
61
+ applies_when { model_field power_supply in { battery ac-and-battery } }
62
+ match {
63
+ operator has_capability
64
+ required_capability "battery-testing"
65
+ }
66
+ }
67
+ lab_selection_criterion vibration-testing {
68
+ weight required
69
+ parameter_type operational
70
+ label "Vibration test capability"
71
+ description "Every R 144 type evaluation includes the random vibration test (R 144-2, 1.11.1, minimum OIML D 11 level 1). The lab must declare the \"vibration-testing\" capability."
72
+ match {
73
+ operator has_capability
74
+ required_capability "vibration-testing"
75
+ }
76
+ }
77
+ lab_selection_criterion long-duration-testing {
78
+ weight preferred
79
+ parameter_type operational
80
+ label "Long-duration test capacity"
81
+ description "The drift test occupies the system for 7 days (R 144-2, 1.3) and the damp heat test for 2 days (R 144-2, 1.7); labs with long-duration bench capacity schedule more efficiently."
82
+ match {
83
+ operator has_capability
84
+ required_capability "long-duration-testing"
85
+ }
86
+ }
87
+ lab_selection_criterion capacity {
88
+ weight preferred
89
+ parameter_type operational
90
+ label "Current capacity"
91
+ description "Lab bandwidth to take on work within the schedule"
92
+ match {
93
+ operator always_pass
94
+ }
95
+ }
96
+ lab_selection_criterion geography {
97
+ weight preferred
98
+ parameter_type operational
99
+ label "Geographic proximity"
100
+ description "Proximity to manufacturer or IA (large installed systems are costly to ship)"
101
+ match {
102
+ operator always_pass
103
+ }
104
+ }
105
+ lab_selection_criterion previous-experience {
106
+ weight preferred
107
+ parameter_type operational
108
+ label "Previous experience"
109
+ description "Labs experienced with this manufacturer are more efficient"
110
+ match {
111
+ operator always_pass
112
+ }
113
+ }
114
+ lab_selection_criterion mtl-relationship {
115
+ weight preferred
116
+ parameter_type operational
117
+ label "MTL relationship"
118
+ description "Scheme A: manufacturer test lab co-assignment"
119
+ match {
120
+ operator has_capability
121
+ required_capability "manufacturer-test-lab"
122
+ }
123
+ }
@@ -0,0 +1,47 @@
1
+ # oiml-r144 — sample selection rules + specimen governance (kernel 1.14.0's sample_selection_rule + specimen_governance_rule, TODO.roadmap/40 family G).
2
+ sample_selection_rule 7.1.2-definitive-type-per-model {
3
+ step "7.1.2"
4
+ rule "For each MeasuringInstrumentModel in the application scope, select at least one unit which represents the definitive type"
5
+ rationale "R 144-1, 7.1.2: type evaluation shall be carried out on at least one unit, which represents the definitive type. R 144 defines no group level and no presumption of compliance across models, so every model in scope contributes a representative unit."
6
+ applicability "always"
7
+ selector "ONE UNIT PER model_id (representative of the definitive type)"
8
+ test_kind full_evaluation
9
+ }
10
+ sample_selection_rule component-coverage {
11
+ step "7.1.2"
12
+ rule "Where the family spans models with different measurand_components sets, ensure every measured component (CO, NO, NO2, NOx) declared by any model is covered by at least one selected unit"
13
+ rationale "The measured components determine which measuring ranges (R 144-1, 4.2) and which CGM suites (R 144-1, A.1.4) apply; evidence must exist for every component in the application scope. (Set-valued semantics: union of component coverage, not composite configurations — see TODO.refactor/06.)"
14
+ applicability "distinct(model.measurand_components).length > 1"
15
+ selector "UNION(model.measurand_components) COVERED-BY selected units"
16
+ test_kind full_evaluation
17
+ }
18
+ sample_selection_rule sampling-approach-coverage {
19
+ step "7.1.2"
20
+ rule "Where the application spans both extractive and in-situ models, ensure each sampling approach is covered — the gas handling tests (flow spillover, leakproofness) apply only to extractive units"
21
+ rationale "R 144-2, 1.21–1.22 apply to the gas handling system; an in-situ unit cannot supply that evidence for an extractive model."
22
+ applicability "distinct(model.sampling_approach).length > 1"
23
+ selector "GROUP BY sampling_approach KEEP >= 1 unit EACH"
24
+ test_kind full_evaluation
25
+ }
26
+ sample_selection_rule worst-case-rating-pick {
27
+ step "7.1.2"
28
+ rule "Within a model, prefer the unit whose declared ratings are most demanding on the test program (widest measuring range, shortest declared response_time, longest warm_up_time)"
29
+ rationale "Practical severity ordering — tests exercise the widest claims made for the type."
30
+ applicability "samples_per_model.length > 1"
31
+ selector "ORDER BY (range_max - range_min) DESC, response_time ASC, warm_up_time DESC LIMIT 1"
32
+ test_kind full_evaluation
33
+ }
34
+ sample_selection_rule practical-minimum {
35
+ rule "Total selected samples must be >= 1 (the application must yield at least one testable unit — R 144-1, 7.1.2 'at least one unit')"
36
+ rationale "Sanity check"
37
+ applicability "always"
38
+ selector "selected.length >= 1"
39
+ post "If 0, the application has no testable unit — reject application"
40
+ }
41
+ sample_selection_rule practical-maximum {
42
+ rule "Total selected samples should not exceed 3 without IA review (one per model is the norm; duplicates only for configuration coverage or witness redundancy)"
43
+ rationale "Practical logistics limit — the full program includes a 7-day drift test per unit (R 144-2, 1.3)"
44
+ applicability "always"
45
+ selector "selected.length <= 3"
46
+ post "If > 3, IA reviews and may consolidate (e.g. drop duplicate configurations)"
47
+ }
@@ -0,0 +1,95 @@
1
+ # oiml-r60 — lab selection criteria (kernel 1.14.0's lab_selection_criterion, TODO.roadmap/40 family G): the parameter→capability matching register the test-design linker resolves.
2
+ lab_selection_criterion accreditation-scope {
3
+ weight required
4
+ parameter_type dimension
5
+ label "Accreditation scope"
6
+ description "Lab must be OIML-accredited for the accuracy class"
7
+ match {
8
+ operator capability_prefix_match
9
+ required_capability_prefix "accredited-class-"
10
+ model_field accuracy_class
11
+ }
12
+ }
13
+ lab_selection_criterion humidity-testing {
14
+ weight required
15
+ parameter_type dimension
16
+ label "Humidity testing capability"
17
+ description "CH and SH load cells require humidity testing. NH does not. The lab must declare the \"humidity-testing\" capability."
18
+ applies_when { model_field humidity_symbol in { CH SH } }
19
+ match {
20
+ operator has_capability
21
+ required_capability "humidity-testing"
22
+ }
23
+ }
24
+ lab_selection_criterion emc-testing {
25
+ weight required
26
+ parameter_type dimension
27
+ label "EMC testing capability"
28
+ description "Electronic load cells (analogue-active, digital) require EMC tests (bursts, surge, ESD, conducted EMC, power variation). The lab must declare the \"emc-testing\" capability."
29
+ applies_when { model_field technology in { analogue-active digital } }
30
+ match {
31
+ operator has_capability
32
+ required_capability "emc-testing"
33
+ }
34
+ }
35
+ lab_selection_criterion construction-fixtures {
36
+ weight required
37
+ parameter_type parameter
38
+ label "Construction fixture capability"
39
+ description "Lab must have fixtures compatible with the load cell construction type. Does NOT change the test program — a Class C bending-beam gets the same tests as a Class C shear-beam — but the physical mounting differs. The lab declares capabilities like \"construction-bending-beam\", \"construction-shear-beam\"."
40
+ applies_when { model_field construction_type not_null true }
41
+ match {
42
+ operator capability_from_field
43
+ required_capability_prefix "construction-"
44
+ model_field construction_type
45
+ }
46
+ }
47
+ lab_selection_criterion emax-range {
48
+ weight required
49
+ parameter_type parameter
50
+ label "Emax range capability"
51
+ description "Lab must have a deadweight machine covering the model's E_max. Labs declare capability tiers like \"emax-up-to-500kg\", \"emax-up-to-50t\", \"emax-up-to-500t\"."
52
+ applies_when { model_field e_max not_null true }
53
+ match {
54
+ operator capability_covers_value
55
+ required_capability_prefix "emax-up-to-"
56
+ model_field e_max
57
+ }
58
+ }
59
+ lab_selection_criterion capacity {
60
+ weight preferred
61
+ parameter_type operational
62
+ label "Current capacity"
63
+ description "Lab bandwidth to take on work within the schedule"
64
+ match {
65
+ operator always_pass
66
+ }
67
+ }
68
+ lab_selection_criterion geography {
69
+ weight preferred
70
+ parameter_type operational
71
+ label "Geographic proximity"
72
+ description "Proximity to manufacturer or IA"
73
+ match {
74
+ operator always_pass
75
+ }
76
+ }
77
+ lab_selection_criterion previous-experience {
78
+ weight preferred
79
+ parameter_type operational
80
+ label "Previous experience"
81
+ description "Labs experienced with this manufacturer are more efficient"
82
+ match {
83
+ operator always_pass
84
+ }
85
+ }
86
+ lab_selection_criterion mtl-relationship {
87
+ weight preferred
88
+ parameter_type operational
89
+ label "MTL relationship"
90
+ description "Scheme A: manufacturer test lab co-assignment"
91
+ match {
92
+ operator has_capability
93
+ required_capability "manufacturer-test-lab"
94
+ }
95
+ }
@@ -0,0 +1,100 @@
1
+ # oiml-r60 — sample selection rules + specimen governance (kernel 1.14.0's sample_selection_rule + specimen_governance_rule, TODO.roadmap/40 family G).
2
+ sample_selection_rule D.2.2-smallest-per-group {
3
+ step "D.2.2"
4
+ rule "For each MeasuringInstrumentModelGroup, identify the model with the smallest e_max"
5
+ rationale "R 60-2 §2.4.3: for any group, the smallest capacity load cell in the group shall always be selected for test (unless covered by a selected cell with better characteristics per §2.4.1/§2.4.2)."
6
+ applicability "always"
7
+ selector "MIN(e_max) GROUP BY group_id"
8
+ test_kind full_evaluation
9
+ }
10
+ sample_selection_rule D.2.3-merit-walk {
11
+ step "D.2.3"
12
+ rule "Begin with the group with the best metrological characteristics (highest accuracy_class > highest n_lc > lowest v_min). Within that group, walk capacities from smallest to largest. Select the next capacity that is between 5× and 10× the previously selected capacity. When no capacity meets this criterion, select the smallest capacity exceeding 10×."
13
+ rationale "R 60-2 §2.4.4 (5–10× capacity ratio rule)"
14
+ applicability "always"
15
+ selector "GROUPS SORTED BY (accuracy_class DESC, n_lc DESC, v_min ASC) THEN WITHIN GROUP: e_max ASC PICK WHERE previous.e_max * 5 <= e_max <= previous.e_max * 10 OR (no match) MIN(e_max) WHERE e_max > previous.e_max * 10"
16
+ test_kind full_evaluation
17
+ }
18
+ sample_selection_rule D.2.4-D.2.5-remaining-groups {
19
+ step "D.2.4"
20
+ rule "Repeat Step 2 for each remaining group in merit order"
21
+ rationale "R 60-2 §2.4.3–§2.4.4"
22
+ applicability "groups.length > 1"
23
+ selector "FOR each remaining group IN merit order: apply D.2.3-merit-walk"
24
+ test_kind full_evaluation
25
+ }
26
+ sample_selection_rule D.2.6-deduplicate-capacity {
27
+ step "D.2.6"
28
+ rule "Compare load cells of the same capacity from different groups. For each capacity, retain only the one with the highest accuracy class, highest n_lc, and lowest v_min. Others of the same capacity are presumed to comply (R 60-2 §2.4.6)."
29
+ rationale "R 60-2 §2.4.1 — same capacity across groups: test only the most onerous"
30
+ applicability "always"
31
+ selector "GROUP BY e_max KEEP ONE WITH MAX(accuracy_class), MAX(n_lc), MIN(v_min)"
32
+ test_kind deduplicate
33
+ }
34
+ sample_selection_rule D.2.6-partial-evaluation-flags {
35
+ step "D.2.6"
36
+ rule "If a non-selected load cell of the same capacity has lower v_min or higher y than the selected one, flag for partial evaluation: - Lower v_min or higher y → additional temperature-MDLO + barometric pressure tests - Higher y → additional creep and DR tests"
37
+ rationale "R 60-2 §2.4.6 — cross-group characteristic coverage"
38
+ applicability "selected.length > 0"
39
+ selector "WHERE same_e_max(non_selected, selected) AND (non_selected.v_min < selected.v_min OR non_selected.y > selected.y)"
40
+ test_kind partial_evaluation
41
+ additional_tests { temperature_mdlo "Triggered by lower v_min or higher y" barometric_pressure "Triggered by lower v_min or higher y" creep_dr "Triggered by higher y only" }
42
+ }
43
+ sample_selection_rule D.2.7-humidity-sample {
44
+ step "D.2.7"
45
+ rule "Select the load cell with the most severe characteristics for humidity testing (highest n_lc or lowest v_min)"
46
+ rationale "R 60-2 §2.4.5"
47
+ applicability "any group has humidity_symbol = CH OR SH"
48
+ selector "ORDER BY n_lc DESC, v_min ASC LIMIT 1"
49
+ test_kind humidity
50
+ single_sample true
51
+ }
52
+ sample_selection_rule D.2.8-digital-additional {
53
+ step "D.2.8"
54
+ rule "For analogue-active load cells with non-differing active electronics and digital load cells with a non-differing digital converter, all applicable tests shall be performed on the load cell with the minimum µV/v_min input to the analogue-to-digital converter (adc_input_per_v_min = rated_output × excitation / n_LC)."
55
+ rationale "R 60-2 §2.4.6 (minimum µV/v_min selector; supersedes the former n_lc/v_min severity ordering, which only coincided with the source rule by correlation)"
56
+ applicability "family.technology = analogue-active OR digital"
57
+ selector "ORDER BY adc_input_per_v_min ASC LIMIT 1"
58
+ test_kind digital_additional
59
+ single_sample true
60
+ }
61
+ sample_selection_rule practical-minimum {
62
+ rule "Total selected samples must be >= 1 (the family must yield at least one testable cell)"
63
+ rationale "Sanity check"
64
+ applicability "always"
65
+ selector "selected.length >= 1"
66
+ post "If 0, the family has no testable load cells — reject application"
67
+ }
68
+ sample_selection_rule practical-maximum {
69
+ rule "Total selected samples should not exceed 6 without IA review"
70
+ rationale "Practical logistics limit"
71
+ applicability "always"
72
+ selector "selected.length <= 6"
73
+ post "If > 6, IA reviews and may consolidate (e.g., drop mid-range duplicates)"
74
+ }
75
+ sample_selection_rule deemed-to-comply-extension {
76
+ rule "Load cells of the same family with a capacity in between the capacities tested, and those above the largest capacity tested but not over 5 times the largest capacity tested, may be included in the certificate and are deemed to fulfil the requirements — provided there is no change of measurement principle or construction material (e.g. bending beam to shear beam, stainless steel replacing aluminium)."
77
+ rationale "R 60-2, 2.4.2 (certificate extension without additional testing)"
78
+ applicability "family has tested capacities spanning the applied range"
79
+ selector "certify WHERE (min_tested <= e_max <= max_tested) OR (e_max <= 5 * max_tested)"
80
+ post "Mark covered models as deemed-to-comply in the certificate scope"
81
+ }
82
+ specimen_governance_rule unit-continuity {
83
+ rule "All accuracy and influence tests, including the span stability test for digital load cells, shall be performed on the SAME unit. Disturbance tests on digital load cells may be carried out (simultaneously) on not more than two additional load cells."
84
+ rationale "R 60-2, 2.4"
85
+ applicability "always"
86
+ constraint "test_runs.group_by(test_kind).all { |g| g.unit_id = same_unit } unless test_kind = disturbance_digital"
87
+ post "Violations invalidate the affected runs (not a fail — see preconditions, task 08)"
88
+ }
89
+ specimen_governance_rule modification-retest {
90
+ rule "If a specimen fails a specific test as a result of the design of the type and has to be modified, the applicant shall modify ALL specimens supplied for test; the other submitted specimens shall then be re-tested — a repeat of the specific test or a complete re-test depending on the modification."
91
+ rationale "R 60-2, 2.3"
92
+ applicability "a test fails on a design defect"
93
+ post "re-test required; scope (specific vs complete) decided by the issuing authority"
94
+ }
95
+ specimen_governance_rule repair-vs-modification {
96
+ rule "If a specimen experiences malfunction or breakage necessitating repair, the applicant shall verify whether it is an incident or requires a design modification; in the latter case the modification applies to ALL specimens and the documentation is updated accordingly. If the issuing authority has reason to believe a modification or repair could change test outcomes, those tests shall be repeated and the reason recorded in the test report."
97
+ rationale "R 60-2, 2.3"
98
+ applicability "a specimen is repaired during evaluation"
99
+ post "IA decides repetition; repetition reason is mandatory in the report"
100
+ }
@@ -0,0 +1,111 @@
1
+ # oiml-r91 — lab selection criteria (kernel 1.14.0's lab_selection_criterion, TODO.roadmap/40 family G): the parameter→capability matching register the test-design linker resolves.
2
+ lab_selection_criterion accreditation-scope {
3
+ weight required
4
+ parameter_type dimension
5
+ label "Accreditation scope"
6
+ description "Lab must be OIML-accredited for speed meters of the model's working principle (category tests differ per principle, R 91-2, 7.1–7.5)"
7
+ match {
8
+ operator capability_prefix_match
9
+ required_capability_prefix "accredited-r91-"
10
+ model_field working_principle
11
+ }
12
+ }
13
+ lab_selection_criterion field-test-sites {
14
+ weight required
15
+ parameter_type dimension
16
+ label "Field-test site access"
17
+ description "The metrological field test (R 91-2, 4) requires real-traffic sites: a motorway with at least two lanes per driving direction with regular overtaking and a road with opposite-direction traffic (4.2). Applies to every speed meter (stationary meters and moving meters in stationary mode). The lab must declare the \"field-test-sites\" capability."
18
+ match {
19
+ operator has_capability
20
+ required_capability "field-test-sites"
21
+ }
22
+ }
23
+ lab_selection_criterion moving-field-test-vehicles {
24
+ weight required
25
+ parameter_type dimension
26
+ label "Moving field-test vehicles"
27
+ description "Moving field tests (R 91-2, 7.7.1/7.7.2) require a test vehicle and a reference vehicle carrying a reference (ego) speed meter within the 7.7.1/7.7.2 uncertainty budgets. The lab must declare the \"moving-field-test-vehicles\" capability."
28
+ applies_when { model_field mode_of_use in { moving } }
29
+ match {
30
+ operator has_capability
31
+ required_capability "moving-field-test-vehicles"
32
+ }
33
+ }
34
+ lab_selection_criterion traffic-simulator {
35
+ weight required
36
+ parameter_type dimension
37
+ label "Validated traffic simulator"
38
+ description "Laboratory tests (R 91-2, 5) need a traffic simulator (5.2: validated against a road measurement series, uncertainty within the simulator budget 0.2 km/h / 0.2 %). The lab must declare the \"traffic-simulator\" capability."
39
+ match {
40
+ operator has_capability
41
+ required_capability "traffic-simulator"
42
+ }
43
+ }
44
+ lab_selection_criterion d11-environmental-equipment {
45
+ weight required
46
+ parameter_type dimension
47
+ label "OIML D 11 environmental test equipment"
48
+ description "The influence factor and disturbance rows (R 91-2, 6.1 Tables 1–2) require OIML D 11 climatic/mechanical/electromagnetic test equipment at the severities of the family's declared environment classes (R 91-1, 6.17.1–6.17.3). The lab must declare the \"d11-environmental-equipment\" capability."
49
+ match {
50
+ operator has_capability
51
+ required_capability "d11-environmental-equipment"
52
+ }
53
+ }
54
+ lab_selection_criterion software-examination-d31 {
55
+ weight required
56
+ parameter_type dimension
57
+ label "OIML D 31 software examination"
58
+ description "Software examinations (R 91-2, 8) are performed at D 31 examination level A with AD/VFTM/VFTSw evaluation methods. The lab must declare the \"software-examination-d31\" capability."
59
+ match {
60
+ operator has_capability
61
+ required_capability "software-examination-d31"
62
+ }
63
+ }
64
+ lab_selection_criterion image-evidence-evaluation {
65
+ weight required
66
+ parameter_type dimension
67
+ label "Image-evidence evaluation"
68
+ description "Image-based and camera-equipped meters require image-evidence assignment evaluation (R 91-2, 4.8; R 91-1, 6.14). The lab must declare the \"image-evidence-evaluation\" capability."
69
+ applies_when { model_field working_principle in { image-based average-speed } }
70
+ match {
71
+ operator has_capability
72
+ required_capability "image-evidence-evaluation"
73
+ }
74
+ }
75
+ lab_selection_criterion capacity {
76
+ weight preferred
77
+ parameter_type operational
78
+ label "Current capacity"
79
+ description "Lab bandwidth to take on work within the schedule (field tests are weather/traffic dependent)"
80
+ match {
81
+ operator always_pass
82
+ }
83
+ }
84
+ lab_selection_criterion geography {
85
+ weight preferred
86
+ parameter_type operational
87
+ label "Geographic proximity"
88
+ description "Proximity to manufacturer, IA, or suitable field-test sites"
89
+ match {
90
+ operator always_pass
91
+ }
92
+ }
93
+ lab_selection_criterion previous-experience {
94
+ weight preferred
95
+ parameter_type operational
96
+ label "Previous experience"
97
+ description "Labs experienced with this manufacturer or working principle are more efficient"
98
+ match {
99
+ operator always_pass
100
+ }
101
+ }
102
+ lab_selection_criterion mtl-relationship {
103
+ weight preferred
104
+ parameter_type operational
105
+ label "MTL relationship"
106
+ description "Scheme A: manufacturer test lab co-assignment"
107
+ match {
108
+ operator has_capability
109
+ required_capability "manufacturer-test-lab"
110
+ }
111
+ }
@@ -0,0 +1,34 @@
1
+ # oiml-r91 — sample selection rules + specimen governance (kernel 1.14.0's sample_selection_rule + specimen_governance_rule, TODO.roadmap/40 family G).
2
+ sample_selection_rule minimum-one-eut {
3
+ rule "Type evaluation is performed on at least one EUT which represents the definitive type; the applicant supplies at least one production EUT"
4
+ rationale "R 91-1, 8.1.2 paragraphs 1/3"
5
+ applicability "always"
6
+ selector "selected.length >= 1"
7
+ post "If 0, no type evaluation can start — reject the application"
8
+ }
9
+ sample_selection_rule simultaneous-euts {
10
+ rule "The testing laboratory may carry out different tests simultaneously on two or three EUTs, ensuring that ALL submitted instruments conform to type"
11
+ rationale "R 91-1, 8.1.2 paragraph 4"
12
+ applicability "selected.length > 1"
13
+ selector "selected.length <= 3"
14
+ post "With 2-3 EUTs the laboratory must ensure every submitted instrument conforms; otherwise repeat on a single EUT"
15
+ }
16
+ sample_selection_rule no-adjustment-after-start {
17
+ rule "The EUT may be adjusted before type approval testing begins; thereafter NO adjustment is performed until all type approval testing is complete"
18
+ rationale "R 91-1, 8.1.2 last paragraph"
19
+ applicability "always"
20
+ post "An adjustment after testing starts invalidates the affected completed runs (re-test required)"
21
+ }
22
+ specimen_governance_rule eut-continuity {
23
+ rule "All accuracy and influence tests shall be performed on the SAME EUT. Disturbance tests may be performed on ONE more additional EUT, which shall also be submitted beforehand to the accuracy tests."
24
+ rationale "R 91-1, 8.1.2 paragraph 5"
25
+ applicability "always"
26
+ constraint "test_runs.group_by(test_kind).all { |g| g.unit_id = same_unit } unless test_kind = disturbance"
27
+ post "Violations invalidate the affected runs (not a fail — see preconditions)"
28
+ }
29
+ specimen_governance_rule modification-retest {
30
+ rule "If an EUT does not pass a specific test and as a result has to be modified or repaired, the applicant shall carry out this modification to ALL EUTs supplied for testing. If the testing laboratory cannot exclude that the modification has a negative influence on tests that already had a positive result, these tests shall be repeated."
31
+ rationale "R 91-1, 8.1.2 paragraphs 6-7"
32
+ applicability "a test fails on a design defect"
33
+ post "re-test required for the affected tests; scope decided by the testing laboratory and recorded in the test report"
34
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oimlsmart/primmel-packages",
3
- "version": "0.21.0",
3
+ "version": "0.22.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": {