@oimlsmart/primmel-packages 0.16.0 → 0.17.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.
@@ -30,3 +30,39 @@ allowlist_entry {
30
30
  reason "Routing markers, not process ids: compile_test_report_pass / compile_test_report_fail name the verdict branches of test-report compilation."
31
31
  audit_ref "TODO.roadmap/40"
32
32
  }
33
+ allowlist_entry {
34
+ rule C134
35
+ match "evaluation_dimensions evaluation: field measurementPrinciple: the field name \"measurementPrinciple\" resolves to neither an is_dimension attribute_definition nor a classification dimension — the legacy camelCase convention (evaluation-dimension-references)"
36
+ reason "Legacy camelCase field id (pre-snake_case app config), kept stable for the classification form's stored answers; the enum facet carries the dimension resolution (measurement_principle)."
37
+ audit_ref "TODO.roadmap/40"
38
+ }
39
+ allowlist_entry {
40
+ rule C134
41
+ match "evaluation_dimensions evaluation: field instrumentCategory: the field name \"instrumentCategory\" resolves to neither an is_dimension attribute_definition nor a classification dimension — the legacy camelCase convention (evaluation-dimension-references)"
42
+ reason "Legacy camelCase field id (pre-snake_case app config), kept stable for the classification form's stored answers; the enum facet carries the dimension resolution (instrument_category)."
43
+ audit_ref "TODO.roadmap/40"
44
+ }
45
+ allowlist_entry {
46
+ rule C134
47
+ match "evaluation_dimensions evaluation: field powerSupply: the field name \"powerSupply\" resolves to neither an is_dimension attribute_definition nor a classification dimension — the legacy camelCase convention (evaluation-dimension-references)"
48
+ reason "Legacy camelCase field id (pre-snake_case app config), kept stable for the classification form's stored answers; the enum facet carries the dimension resolution (power_supply)."
49
+ audit_ref "TODO.roadmap/40"
50
+ }
51
+ allowlist_entry {
52
+ rule C134
53
+ match "evaluation_dimensions evaluation: field objectCapability: the field name \"objectCapability\" resolves to neither an is_dimension attribute_definition nor a classification dimension — the legacy camelCase convention (evaluation-dimension-references)"
54
+ reason "Legacy camelCase field id (pre-snake_case app config), kept stable for the classification form's stored answers; the enum facet carries the dimension resolution (object_capability)."
55
+ audit_ref "TODO.roadmap/40"
56
+ }
57
+ allowlist_entry {
58
+ rule C134
59
+ match "evaluation_dimensions evaluation: field scaleInterval: the field name \"scaleInterval\" resolves to neither an is_dimension attribute_definition nor a classification dimension — the legacy camelCase convention (evaluation-dimension-references)"
60
+ reason "Legacy camelCase field id (pre-snake_case app config), kept stable for the classification form's stored answers; the typed string field carries the declared scale interval d (no dimension to reference)."
61
+ audit_ref "TODO.roadmap/40"
62
+ }
63
+ allowlist_entry {
64
+ rule C134
65
+ match "evaluation_dimensions evaluation: field temperatureRange: the field name \"temperatureRange\" resolves to neither an is_dimension attribute_definition nor a classification dimension — the legacy camelCase convention (evaluation-dimension-references)"
66
+ reason "Legacy camelCase field id (pre-snake_case app config), kept stable for the classification form's stored answers; the typed string field carries the declared temperature range (no dimension to reference)."
67
+ audit_ref "TODO.roadmap/40"
68
+ }
@@ -0,0 +1,23 @@
1
+ # OIML R 129 — Calculation Context
2
+ # Variable bindings for the calculation engine. Each field names a
3
+ # computation input and where it is sourced from.
4
+ #
5
+ # Consumed by computation-context.service.ts to build the evaluation
6
+ # context for form calculations.
7
+ #
8
+ # Dimensions resolve from classification.<dimension_id>, parameters from
9
+ # parameters.<attribute_id> (delegation Sample -> Model -> Family,
10
+ # INV-10). indication / reference_dimension are runtime-bound form
11
+ # inputs.
12
+ calculation_context evaluation {
13
+ field measurement_principle { source classification.measurement_principle }
14
+ field instrument_category { source classification.instrument_category }
15
+ field power_supply { source classification.power_supply }
16
+ field object_capability { source classification.object_capability }
17
+ field d { source parameters.scale_interval }
18
+ field min_dimension { source parameters.min_dimension }
19
+ field max_dimension { source parameters.max_dimension }
20
+ field conversion_factor { source parameters.conversion_factor }
21
+ field mpe { source computed expression "1.0 * d" }
22
+ field fault_limit { source computed expression "1.0 * d" }
23
+ }
@@ -0,0 +1,57 @@
1
+ # OIML R 129 — Evaluation Dimensions
2
+ # Classification field schema for the evaluation context (application
3
+ # dimensions). Enum fields reference the classification dimensions of
4
+ # model/instrument.prl; the two string fields carry declared quantities
5
+ # captured on the application (scale interval d, temperature range).
6
+ #
7
+ # LEGACY NAMING: the field ids are camelCase (measurementPrinciple,
8
+ # instrumentCategory, powerSupply, objectCapability, scaleInterval,
9
+ # temperatureRange) — pre-snake_case app config, kept stable for the
10
+ # classification form's stored answers (C134 warns: a field id that is
11
+ # neither an is_dimension attribute nor a dimension id is a KNOWN
12
+ # allowlist entry here, not drift).
13
+ evaluation_dimensions evaluation {
14
+ label "Type of Testing"
15
+ field measurementPrinciple {
16
+ label "Measurement Principle"
17
+ enum measurement_principle
18
+ required true
19
+ editable false
20
+ setting MUST
21
+ }
22
+ field instrumentCategory {
23
+ label "Instrument Category"
24
+ enum instrument_category
25
+ required true
26
+ editable false
27
+ setting MUST
28
+ }
29
+ field powerSupply {
30
+ label "Power Supply"
31
+ enum power_supply
32
+ required true
33
+ editable false
34
+ setting MUST
35
+ }
36
+ field objectCapability {
37
+ label "Object Capability"
38
+ enum object_capability
39
+ required false
40
+ editable true
41
+ setting RECOMMEND
42
+ }
43
+ field scaleInterval {
44
+ label "Scale interval (d)"
45
+ type string
46
+ required true
47
+ editable true
48
+ setting MUST
49
+ }
50
+ field temperatureRange {
51
+ label "Temperature range"
52
+ type string
53
+ required false
54
+ editable true
55
+ setting MAY
56
+ }
57
+ }
@@ -36,3 +36,21 @@ allowlist_entry {
36
36
  reason "Routing markers, not process ids: accept_mtl_report / require_independent_tl name the manufacturer-test-lab acceptability branches (Scheme A)."
37
37
  audit_ref "TODO.roadmap/40"
38
38
  }
39
+ allowlist_entry {
40
+ rule C133
41
+ match "calculation_context evaluation: field mpe: expression identifier \"measured_value\" is not a field of this context — a runtime-bound input (declare it as a field or bind it at runtime) (calculation-context-references)"
42
+ reason "measured_value is the runtime-bound form input (the CGM reference value at the test point) the evaluation context binds at run time — the mpe expression's free identifier is deliberate (the register header documents it); never drift."
43
+ audit_ref "TODO.roadmap/40"
44
+ }
45
+ allowlist_entry {
46
+ rule C133
47
+ match "calculation_context evaluation: field mpe_verification: expression identifier \"measured_value\" is not a field of this context — a runtime-bound input (declare it as a field or bind it at runtime) (calculation-context-references)"
48
+ reason "measured_value is the runtime-bound form input (the CGM reference value at the test point) the evaluation context binds at run time — the mpe_verification expression's free identifier is deliberate (the register header documents it); never drift."
49
+ audit_ref "TODO.roadmap/40"
50
+ }
51
+ allowlist_entry {
52
+ rule C133
53
+ match "calculation_context evaluation: field repeatability_limit: expression identifier \"measured_value\" is not a field of this context — a runtime-bound input (declare it as a field or bind it at runtime) (calculation-context-references)"
54
+ reason "measured_value is the runtime-bound form input (the CGM reference value at the test point) the evaluation context binds at run time — the repeatability_limit expression's free identifier is deliberate (the register header documents it); never drift."
55
+ audit_ref "TODO.roadmap/40"
56
+ }
@@ -0,0 +1,32 @@
1
+ # OIML R 144 — Calculation Context
2
+ # Variable bindings for the calculation engine. Each field names a
3
+ # computation input and where it is sourced from.
4
+ #
5
+ # Consumed by computation-context.service.ts to build the evaluation
6
+ # context for form calculations.
7
+ #
8
+ # Dimensions resolve from classification.<dimension_id>, parameters from
9
+ # parameters.<attribute_id> (delegation Sample -> Model -> Group ->
10
+ # Family, INV-10). measured_value / x_ref are runtime-bound form inputs
11
+ # (the CGM reference value at the test point) — C133 warns on the free
12
+ # identifiers, KNOWN allowlist entries (runtime-bound, never drift).
13
+ calculation_context evaluation {
14
+ field measurand_components { source classification.measurand_components }
15
+ field measuring_principle { source classification.measuring_principle }
16
+ field sampling_approach { source classification.sampling_approach }
17
+ field adjustment_means { source classification.adjustment_means }
18
+ field power_supply { source classification.power_supply }
19
+ field co_range_min { source parameters.co_range_min }
20
+ field co_range_max { source parameters.co_range_max }
21
+ field no_range_min { source parameters.no_range_min }
22
+ field no_range_max { source parameters.no_range_max }
23
+ field no2_range_min { source parameters.no2_range_min }
24
+ field no2_range_max { source parameters.no2_range_max }
25
+ field response_time { source parameters.response_time }
26
+ field warm_up_time { source parameters.warm_up_time }
27
+ field t_min { source parameters.t_min }
28
+ field t_max { source parameters.t_max }
29
+ field mpe { source computed expression "max(2, 0.05 * abs(measured_value))" }
30
+ field mpe_verification { source computed expression "max(5, 0.10 * abs(measured_value))" }
31
+ field repeatability_limit { source computed expression "max(2, 0.05 * abs(measured_value)) / 3" }
32
+ }
@@ -0,0 +1,47 @@
1
+ # OIML R 144 — Evaluation Dimensions
2
+ # Classification field schema for the evaluation context. The
3
+ # measurand_components field is the per-channel axis (`multiple true` —
4
+ # the instrument measures several gas components, one channel each); the
5
+ # channel declaration itself lives on the instrument register
6
+ # (model/instrument.prl `per_channel measurand_components`, the kernel's
7
+ # Instrument.perChannel — the single home, deliberately NOT a facet of
8
+ # this construct).
9
+ evaluation_dimensions evaluation {
10
+ label "Type of Testing"
11
+ field measurand_components {
12
+ label "Measurand Components"
13
+ enum measurand_components
14
+ required true
15
+ editable false
16
+ setting MUST
17
+ multiple true
18
+ }
19
+ field measuring_principle {
20
+ label "Measuring Principle"
21
+ enum measuring_principle
22
+ required true
23
+ editable false
24
+ setting MUST
25
+ }
26
+ field sampling_approach {
27
+ label "Sampling Approach"
28
+ enum sampling_approach
29
+ required true
30
+ editable false
31
+ setting MUST
32
+ }
33
+ field adjustment_means {
34
+ label "Adjustment Means"
35
+ enum adjustment_means
36
+ required true
37
+ editable true
38
+ setting RECOMMEND
39
+ }
40
+ field power_supply {
41
+ label "Power Supply"
42
+ enum power_supply
43
+ required false
44
+ editable true
45
+ setting MAY
46
+ }
47
+ }
@@ -1,6 +1,7 @@
1
1
  instrument GasAnalyticalSystem {
2
2
  extends MeasuringInstrumentModel
3
3
  measurand_kind volume-fraction
4
+ per_channel measurand_components
4
5
  definition "Assembly to carry out specified gas analytical measurements (ISO 7504:2001). In this Recommendation, a system that continuously measures the volume fraction of CO (carbon monoxide), NO (nitrogen monoxide), NO2 (nitrogen dioxide), or the sum of nitrogen oxides (NOx), or measures only CO or only NO and NO2, or NOx, by analyzing the gas samples taken directly from the smokestack or gas pipe in industry."
5
6
  note "A GasAnalyticalSystem MODEL is what gets type-evaluated and approved; physical units are MeasuringInstrumentSample instances of that Model (INV-10 delegation: Sample -> Model -> Family). The system includes a means for sampling and sample preparation (extractive sampling), a gas analyzer (R 144-1, 2.4 — the core measuring unit), zero/span adjustment means, data accumulation/processing/storage, control means, interfaces, and gas/electric communication lines."
6
7
  ref derives-from "urn:oiml:pub:r:144-1:2013#clause-2.1"
@@ -42,3 +42,9 @@ allowlist_entry {
42
42
  reason "The edges cover exactly the humidity classes R 60 prescribes a damp-heat test for (CH cyclic, SH steady-state); NH / unclassed instruments deliberately match NO edge (no humidity test applies), and unlike r129/r144's skip_* arms this gateway authors no no-op target for a default to point at."
43
43
  audit_ref "TODO.roadmap/40"
44
44
  }
45
+ allowlist_entry {
46
+ rule C133
47
+ match "calculation_context evaluation: field v_min: expression identifier \"f\" is not a field of this context — a runtime-bound input (declare it as a field or bind it at runtime) (calculation-context-references)"
48
+ reason "`f` is the runtime-bound form input (conversion_factor_f) the evaluation context binds at run time — the v_min expression's free identifier is deliberate (the register header documents it); never drift."
49
+ audit_ref "TODO.roadmap/40"
50
+ }
@@ -0,0 +1,22 @@
1
+ # OIML R 60 — Calculation Context
2
+ # Variable bindings for the calculation engine. Each field names a
3
+ # computation input and where it is sourced from.
4
+ #
5
+ # Consumed by computation-context.service.ts to build the evaluation
6
+ # context for form calculations.
7
+ #
8
+ # Variable names are keyed to attribute ids (model/attributes.prl) and
9
+ # sources point to the subject chain of entities/instrument.yaml —
10
+ # dimensions resolve from classification.<dimension_id>, parameters from
11
+ # parameters.<attribute_id> (delegation Sample -> Model -> Group ->
12
+ # Family, INV-10). `f` remains a runtime-bound form input
13
+ # (conversion_factor_f), as before — C133 warns on the free identifier,
14
+ # a KNOWN allowlist entry (runtime-bound, never drift).
15
+ calculation_context evaluation {
16
+ field accuracy_class { source classification.accuracy_class }
17
+ field p_lc { source parameters.p_lc }
18
+ field e_max { source parameters.e_max }
19
+ field e_min { source parameters.e_min }
20
+ field n_lc { source parameters.n_lc }
21
+ field v_min { source computed expression "(e_max - e_min) / (n_lc * f)" }
22
+ }
@@ -0,0 +1,56 @@
1
+ # OIML R 60 — Evaluation Dimensions
2
+ # Classification field schema for the evaluation context. These fields
3
+ # populate the dimension selector on the classification form and seed
4
+ # the calculation context.
5
+ #
6
+ # Field names are the four is_dimension attribute ids of
7
+ # model/attributes.prl (technology, accuracy_class, humidity_symbol,
8
+ # load_type); each field's `enum` references the classification
9
+ # dimension of model/instrument.prl that supplies its value space.
10
+ # Numeric parameter inputs formerly declared here (n_LC, p_LC,
11
+ # temperatureRange) are no longer form fields — their values resolve
12
+ # from the subject chain parameter maps (parameters.n_lc,
13
+ # parameters.p_lc, parameters.t_min / parameters.t_max); see
14
+ # evaluation/calculation-context.prl.
15
+ #
16
+ # Each field declares:
17
+ # - name — dimension attribute id (is_dimension: true)
18
+ # - label — UI label
19
+ # - type — integer | number | string | text | boolean | date
20
+ # (parse-enforced)
21
+ # - enum — references a dimension from model/instrument.prl
22
+ # - required — whether the user must set this field
23
+ # - editable — whether the field is locked once set
24
+ # - setting — MUST | SHALL | RECOMMEND | SHOULD | MAY | OPTIONAL
25
+ # (parse-enforced; MMEL importance)
26
+ evaluation_dimensions evaluation {
27
+ label "Type of Testing"
28
+ field technology {
29
+ label "Technology"
30
+ enum technology
31
+ required true
32
+ editable false
33
+ setting MUST
34
+ }
35
+ field accuracy_class {
36
+ label "Accuracy Class"
37
+ enum accuracy_class
38
+ required true
39
+ editable false
40
+ setting MUST
41
+ }
42
+ field humidity_symbol {
43
+ label "Humidity Symbol"
44
+ enum humidity_class
45
+ required true
46
+ editable false
47
+ setting MUST
48
+ }
49
+ field load_type {
50
+ label "Load Type"
51
+ enum load_type
52
+ required false
53
+ editable true
54
+ setting MAY
55
+ }
56
+ }
@@ -0,0 +1,14 @@
1
+ # OIML R 91 — Calculation Context (TODO.roadmap/19)
2
+ # Variable bindings for the calculation engine: where each computation
3
+ # input is sourced from (subject-chain paths — classification.<dimension>
4
+ # or parameters.<attribute>, delegated Sample → Model → Group → Family,
5
+ # INV-10).
6
+ #
7
+ # metrological_class: the A/B moving class keys the moving MPE lookup
8
+ # (lookupMPE(reference_speed, metrological_class, 1.0)).
9
+ # fault_limit: the group-scope fault limit of R 91-1, 6.18.1
10
+ # (abs(fault) <= group.parameters.fault_limit).
11
+ calculation_context evaluation {
12
+ field metrological_class { source classification.metrological_class }
13
+ field fault_limit { source parameters.fault_limit }
14
+ }
@@ -0,0 +1,73 @@
1
+ # OIML R 91 — Evaluation Dimensions (TODO.roadmap/19)
2
+ # Classification field schema for the evaluation context: the dimension
3
+ # selector and the calculation-context seed. Field names are the
4
+ # classification-dimension ids of model/instrument.prl (the five category
5
+ # axes of R 91-1, clause 5, the A/B moving class of 6.15.1, and the OIML
6
+ # D 11 environment classes of 6.17.1–6.17.3 that condition test
7
+ # severities).
8
+ evaluation_dimensions evaluation {
9
+ label "Type of Testing"
10
+ field mode_of_use {
11
+ label "Mode of use"
12
+ enum mode_of_use
13
+ required true
14
+ editable false
15
+ setting MUST
16
+ }
17
+ field working_principle {
18
+ label "Working principle"
19
+ enum working_principle
20
+ required true
21
+ editable false
22
+ setting MUST
23
+ }
24
+ field installation_principle {
25
+ label "Principle of installation"
26
+ enum installation_principle
27
+ required true
28
+ editable false
29
+ setting MUST
30
+ }
31
+ field triggering {
32
+ label "Triggering and camera"
33
+ enum triggering
34
+ required true
35
+ editable false
36
+ setting MUST
37
+ }
38
+ field cosine_compensation {
39
+ label "Cosine error compensation"
40
+ enum cosine_compensation
41
+ required true
42
+ editable false
43
+ setting MUST
44
+ }
45
+ field metrological_class {
46
+ label "Class of moving speed meter (A/B — mandatory for moving measurements, R 91-1, 6.15.1)"
47
+ enum metrological_class
48
+ required false
49
+ editable true
50
+ setting MAY
51
+ }
52
+ field climatic_environment_class {
53
+ label "Climatic environment class"
54
+ enum climatic_environment_class
55
+ required true
56
+ editable false
57
+ setting MUST
58
+ }
59
+ field mechanical_environment_class {
60
+ label "Mechanical environment class"
61
+ enum mechanical_environment_class
62
+ required true
63
+ editable false
64
+ setting MUST
65
+ }
66
+ field electromagnetic_environment_class {
67
+ label "Electromagnetic environment class"
68
+ enum electromagnetic_environment_class
69
+ required true
70
+ editable false
71
+ setting MUST
72
+ }
73
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oimlsmart/primmel-packages",
3
- "version": "0.16.0",
3
+ "version": "0.17.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": {