@oimlsmart/primmel-packages 0.1.0 → 0.2.1
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.
- package/oiml-r60/l10n.fra-Latn.prl +58 -0
- package/oiml-r60/package.primmel +1 -0
- package/oiml-r60/payload/sample-data.yaml +11 -136
- package/oiml-r79/execution/forms/label-examination.prl +32 -0
- package/oiml-r79/model/attributes.prl +39 -0
- package/oiml-r79/package.primmel +15 -0
- package/oiml-r79/specification/conformance/label-examination.prl +39 -0
- package/oiml-r79/specification/requirements/labeling.prl +20 -0
- package/oiml-r79/specification/requirements/practices.prl +61 -0
- package/oiml-r79/specification/requirements/units.prl +59 -0
- package/oiml-r79/specification/tables.prl +69 -0
- package/oiml-r79/terminology.prl +52 -0
- package/package.json +2 -2
- package/oimlsmart-primmel-packages-0.1.0.tgz +0 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# l10n.fra-Latn.prl — the package's fra-Latn alternates (TODO.v2/10). Kernel `text`
|
|
2
|
+
# blocks only; the default spelling stays inline in the source files, a
|
|
3
|
+
# translation rides alongside it, never instead (docs/spelling-codes.md).
|
|
4
|
+
# Rebuilt by build-prl-package (the SSOT app-config projection leg) — the
|
|
5
|
+
# committed copy and this emission are byte-compared.
|
|
6
|
+
|
|
7
|
+
text r60-3/table-6.3-6.4.name {
|
|
8
|
+
spell fra-Latn "Essai de charge"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
text r60-3/table-6.3-6.4.fields.electronics_power_voltage.label {
|
|
12
|
+
spell fra-Latn "Tension d'alimentation"
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
text r60-3/table-6.3-6.4.fields.test_loads.label {
|
|
16
|
+
spell fra-Latn "Mesurages de la charge d'essai"
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
text r60-3/form-6.11.name {
|
|
20
|
+
spell fra-Latn "Temps de préchauffage"
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
text r60-3/form-6.11.fields.overall_result.true_label {
|
|
24
|
+
spell fra-Latn "Conforme"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
text r60-3/form-6.11.fields.overall_result.false_label {
|
|
28
|
+
spell fra-Latn "Non conforme"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
text load-test-row.fields.test_load.label {
|
|
32
|
+
spell fra-Latn "Charge d'essai"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
text load-test-row.fields.direction.label {
|
|
36
|
+
spell fra-Latn "Sens"
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
text load-test-row.fields.runs.label {
|
|
40
|
+
spell fra-Latn "Séries"
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
text load-test-row.fields.runs.fields.indication.label {
|
|
44
|
+
spell fra-Latn "Indication"
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
text load-test-row.fields.runs.fields.time.label {
|
|
48
|
+
spell fra-Latn "Heure"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
text load-test-row.fields.average_indication.label {
|
|
52
|
+
spell fra-Latn "Moyenne"
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
text load-test-row.fields.repeatability_error.label {
|
|
56
|
+
spell fra-Latn "Erreur de répétabilité"
|
|
57
|
+
}
|
|
58
|
+
|
package/oiml-r60/package.primmel
CHANGED
|
@@ -11,6 +11,7 @@ package {
|
|
|
11
11
|
validity { from 2021-01-01 }
|
|
12
12
|
status current
|
|
13
13
|
default_spelling eng-Latn
|
|
14
|
+
spellings { eng-Latn fra-Latn }
|
|
14
15
|
description "Metrological regulation for load cells — requirements, test procedures, and test report forms."
|
|
15
16
|
source { collection "sources/r060/collection.yml" parts { 1 2 3 } }
|
|
16
17
|
}
|
|
@@ -4510,8 +4510,8 @@ participants:
|
|
|
4510
4510
|
oiml_code: EX1
|
|
4511
4511
|
country: "Example Member State"
|
|
4512
4512
|
# DEMO_FLOWS/01 — the registry-carried logo (the IA cards render it;
|
|
4513
|
-
#
|
|
4514
|
-
# shows both postures honestly).
|
|
4513
|
+
# the three TLs below carry their own marks; XX1 below carries none and
|
|
4514
|
+
# rides the derived monogram, so the demo shows both postures honestly).
|
|
4515
4515
|
logo: /orgs/ex1.svg
|
|
4516
4516
|
address: { street: "1 Scheme Avenue", city: "Demoville", country: "Example Member State", postal_code: "DL-100" }
|
|
4517
4517
|
contact: { person: "Ms. Emily Irving", email: "office@eia.example.org", phone: "+100 555 0101" }
|
|
@@ -4525,6 +4525,7 @@ participants:
|
|
|
4525
4525
|
kind: test-laboratory
|
|
4526
4526
|
name: "Example Test Laboratory"
|
|
4527
4527
|
short_name: "ETL"
|
|
4528
|
+
logo: /orgs/etl.svg
|
|
4528
4529
|
lab_kind: independent
|
|
4529
4530
|
oiml_id: 21
|
|
4530
4531
|
parent_oiml_code: EX1
|
|
@@ -4569,6 +4570,7 @@ participants:
|
|
|
4569
4570
|
kind: test-laboratory
|
|
4570
4571
|
name: "ACME Test Laboratory"
|
|
4571
4572
|
short_name: "ACME-TL"
|
|
4573
|
+
logo: /orgs/acme-tl.svg
|
|
4572
4574
|
lab_kind: manufacturer_test_lab
|
|
4573
4575
|
parent_manufacturer_id: mfr-acme
|
|
4574
4576
|
oiml_id: 990
|
|
@@ -4604,6 +4606,7 @@ participants:
|
|
|
4604
4606
|
kind: test-laboratory
|
|
4605
4607
|
name: "Example MTL GmbH"
|
|
4606
4608
|
short_name: "EMTL"
|
|
4609
|
+
logo: /orgs/mtl-rhein.svg
|
|
4607
4610
|
lab_kind: independent
|
|
4608
4611
|
oiml_id: 1991
|
|
4609
4612
|
parent_oiml_code: EX1
|
|
@@ -4824,9 +4827,10 @@ participants:
|
|
|
4824
4827
|
status: ACTIVE
|
|
4825
4828
|
decision_date: "2026-06-30"
|
|
4826
4829
|
notes: "Manufacturer's Test Laboratory under the controlled supervision of XX1 (PD-04, 7.1)."
|
|
4827
|
-
#
|
|
4828
|
-
#
|
|
4829
|
-
#
|
|
4830
|
+
# A Utilizer admission (PD-09) — admitted to Scheme B. Participation
|
|
4831
|
+
# cases register DIRECTLY (the scheme operator's registration act);
|
|
4832
|
+
# the ballot pipeline is modelled (data/core state machines, B 18:2025
|
|
4833
|
+
# §11) but not operated by the platform.
|
|
4830
4834
|
- id: app-ut-ng
|
|
4831
4835
|
kind: utilizer_admission
|
|
4832
4836
|
applicant_organization_id: ut-wmd-ng
|
|
@@ -4836,8 +4840,9 @@ participants:
|
|
|
4836
4840
|
scope:
|
|
4837
4841
|
- { category: load-cells, schemes: [scheme_b] }
|
|
4838
4842
|
mc_electorate: 5
|
|
4839
|
-
status:
|
|
4843
|
+
status: ACTIVE
|
|
4840
4844
|
submitted_by: "A. Okonkwo"
|
|
4845
|
+
decision_date: "2026-07-12"
|
|
4841
4846
|
|
|
4842
4847
|
competence_evidence:
|
|
4843
4848
|
- id: ev-ia-de1
|
|
@@ -4873,136 +4878,6 @@ participants:
|
|
|
4873
4878
|
team: ["L. Moreau (LME)", "A. Fitzgerald (MSE, team leader)"]
|
|
4874
4879
|
notes: "Peer assessment of the MTL including the PD-04, 7.1 controlled-supervision arrangements with XX1."
|
|
4875
4880
|
|
|
4876
|
-
approval_votes:
|
|
4877
|
-
- id: vote-rc-de1
|
|
4878
|
-
application_id: app-ia-de1
|
|
4879
|
-
organ: review_committee
|
|
4880
|
-
kind: rc_recommendation
|
|
4881
|
-
voter: "RC rapporteur (K. Tanaka)"
|
|
4882
|
-
ballot: in_favour
|
|
4883
|
-
cast_at: "2022-11-20T10:00:00.000Z"
|
|
4884
|
-
- id: vote-mc-de1-1
|
|
4885
|
-
application_id: app-ia-de1
|
|
4886
|
-
organ: management_committee
|
|
4887
|
-
kind: mc_ballot
|
|
4888
|
-
voter: "DE"
|
|
4889
|
-
member_state: "Germany"
|
|
4890
|
-
ballot: in_favour
|
|
4891
|
-
cast_at: "2022-12-10T15:00:00.000Z"
|
|
4892
|
-
- id: vote-mc-de1-2
|
|
4893
|
-
application_id: app-ia-de1
|
|
4894
|
-
organ: management_committee
|
|
4895
|
-
kind: mc_ballot
|
|
4896
|
-
voter: "NL"
|
|
4897
|
-
member_state: "Netherlands"
|
|
4898
|
-
ballot: in_favour
|
|
4899
|
-
cast_at: "2022-12-10T15:00:00.000Z"
|
|
4900
|
-
- id: vote-mc-de1-3
|
|
4901
|
-
application_id: app-ia-de1
|
|
4902
|
-
organ: management_committee
|
|
4903
|
-
kind: mc_ballot
|
|
4904
|
-
voter: "CH"
|
|
4905
|
-
member_state: "Switzerland"
|
|
4906
|
-
ballot: in_favour
|
|
4907
|
-
cast_at: "2022-12-10T15:00:00.000Z"
|
|
4908
|
-
- id: vote-mc-de1-4
|
|
4909
|
-
application_id: app-ia-de1
|
|
4910
|
-
organ: management_committee
|
|
4911
|
-
kind: mc_ballot
|
|
4912
|
-
voter: "FR"
|
|
4913
|
-
member_state: "France"
|
|
4914
|
-
ballot: in_favour
|
|
4915
|
-
cast_at: "2022-12-10T15:00:00.000Z"
|
|
4916
|
-
- id: vote-mc-de1-5
|
|
4917
|
-
application_id: app-ia-de1
|
|
4918
|
-
organ: management_committee
|
|
4919
|
-
kind: mc_ballot
|
|
4920
|
-
voter: "JP"
|
|
4921
|
-
member_state: "Japan"
|
|
4922
|
-
ballot: in_favour
|
|
4923
|
-
cast_at: "2022-12-10T15:00:00.000Z"
|
|
4924
|
-
- id: vote-rc-xx1
|
|
4925
|
-
application_id: app-ia-xx1
|
|
4926
|
-
organ: review_committee
|
|
4927
|
-
kind: rc_recommendation
|
|
4928
|
-
voter: "RC rapporteur (K. Tanaka)"
|
|
4929
|
-
ballot: in_favour
|
|
4930
|
-
cast_at: "2026-06-15T10:00:00.000Z"
|
|
4931
|
-
- id: vote-mc-xx1-1
|
|
4932
|
-
application_id: app-ia-xx1
|
|
4933
|
-
organ: management_committee
|
|
4934
|
-
kind: mc_ballot
|
|
4935
|
-
voter: "DE"
|
|
4936
|
-
member_state: "Germany"
|
|
4937
|
-
ballot: in_favour
|
|
4938
|
-
cast_at: "2026-06-30T15:00:00.000Z"
|
|
4939
|
-
- id: vote-mc-xx1-2
|
|
4940
|
-
application_id: app-ia-xx1
|
|
4941
|
-
organ: management_committee
|
|
4942
|
-
kind: mc_ballot
|
|
4943
|
-
voter: "NL"
|
|
4944
|
-
member_state: "Netherlands"
|
|
4945
|
-
ballot: in_favour
|
|
4946
|
-
cast_at: "2026-06-30T15:00:00.000Z"
|
|
4947
|
-
- id: vote-mc-xx1-3
|
|
4948
|
-
application_id: app-ia-xx1
|
|
4949
|
-
organ: management_committee
|
|
4950
|
-
kind: mc_ballot
|
|
4951
|
-
voter: "CH"
|
|
4952
|
-
member_state: "Switzerland"
|
|
4953
|
-
ballot: in_favour
|
|
4954
|
-
cast_at: "2026-06-30T15:00:00.000Z"
|
|
4955
|
-
- id: vote-mc-xx1-4
|
|
4956
|
-
application_id: app-ia-xx1
|
|
4957
|
-
organ: management_committee
|
|
4958
|
-
kind: mc_ballot
|
|
4959
|
-
voter: "FR"
|
|
4960
|
-
member_state: "France"
|
|
4961
|
-
ballot: in_favour
|
|
4962
|
-
cast_at: "2026-06-30T15:00:00.000Z"
|
|
4963
|
-
- id: vote-mc-xx1-5
|
|
4964
|
-
application_id: app-ia-xx1
|
|
4965
|
-
organ: management_committee
|
|
4966
|
-
kind: mc_ballot
|
|
4967
|
-
voter: "JP"
|
|
4968
|
-
member_state: "Japan"
|
|
4969
|
-
ballot: abstain
|
|
4970
|
-
reason: "No national position on the new applicant yet."
|
|
4971
|
-
cast_at: "2026-06-30T15:00:00.000Z"
|
|
4972
|
-
# The in-flight Utilizer admission: RC recommendation + 3 of 5 ballots.
|
|
4973
|
-
- id: vote-rc-ut-ng
|
|
4974
|
-
application_id: app-ut-ng
|
|
4975
|
-
organ: review_committee
|
|
4976
|
-
kind: rc_recommendation
|
|
4977
|
-
voter: "RC rapporteur (K. Tanaka)"
|
|
4978
|
-
ballot: in_favour
|
|
4979
|
-
cast_at: "2026-07-05T10:00:00.000Z"
|
|
4980
|
-
- id: vote-mc-ut-ng-1
|
|
4981
|
-
application_id: app-ut-ng
|
|
4982
|
-
organ: management_committee
|
|
4983
|
-
kind: mc_ballot
|
|
4984
|
-
voter: "DE"
|
|
4985
|
-
member_state: "Germany"
|
|
4986
|
-
ballot: in_favour
|
|
4987
|
-
cast_at: "2026-07-12T15:00:00.000Z"
|
|
4988
|
-
- id: vote-mc-ut-ng-2
|
|
4989
|
-
application_id: app-ut-ng
|
|
4990
|
-
organ: management_committee
|
|
4991
|
-
kind: mc_ballot
|
|
4992
|
-
voter: "NL"
|
|
4993
|
-
member_state: "Netherlands"
|
|
4994
|
-
ballot: in_favour
|
|
4995
|
-
cast_at: "2026-07-12T15:00:00.000Z"
|
|
4996
|
-
- id: vote-mc-ut-ng-3
|
|
4997
|
-
application_id: app-ut-ng
|
|
4998
|
-
organ: management_committee
|
|
4999
|
-
kind: mc_ballot
|
|
5000
|
-
voter: "BR"
|
|
5001
|
-
member_state: "Brazil"
|
|
5002
|
-
ballot: abstain
|
|
5003
|
-
reason: "Awaiting the outcome of the national stakeholder consultation."
|
|
5004
|
-
cast_at: "2026-07-12T15:00:00.000Z"
|
|
5005
|
-
|
|
5006
4881
|
# The per-category scheme state (B 18:2025 clause 15): load-cells
|
|
5007
4882
|
# transitioned to Scheme A in 2020; traffic-speed-meters (R 91:2025) is
|
|
5008
4883
|
# in Scheme B with its two-year window elapsed on 2026-07-01 — the
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
form r79-label-examination/record {
|
|
2
|
+
name "Label examination record"
|
|
3
|
+
description "The permanent record of a quantity-declaration review: the label as read, and the outcome of each Annex A / 6.1 check."
|
|
4
|
+
field declaration_text : string {
|
|
5
|
+
required true
|
|
6
|
+
bind model.attributes.quantity_declaration_text
|
|
7
|
+
}
|
|
8
|
+
field declaration_unit : string {
|
|
9
|
+
required true
|
|
10
|
+
bind model.attributes.quantity_declaration_unit
|
|
11
|
+
}
|
|
12
|
+
field measure_type : string {
|
|
13
|
+
required true
|
|
14
|
+
bind model.attributes.measure_type
|
|
15
|
+
}
|
|
16
|
+
field nominal_quantity : number {
|
|
17
|
+
required true
|
|
18
|
+
bind model.attributes.nominal_quantity_value
|
|
19
|
+
}
|
|
20
|
+
field unit_is_table_a1_symbol : boolean {
|
|
21
|
+
required true
|
|
22
|
+
}
|
|
23
|
+
field unit_is_table_a2_choice : boolean {
|
|
24
|
+
required true
|
|
25
|
+
}
|
|
26
|
+
field no_ambiguous_expression : boolean {
|
|
27
|
+
required true
|
|
28
|
+
}
|
|
29
|
+
field label_not_misleading : boolean {
|
|
30
|
+
required true
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
attribute_definition quantity_declaration_text {
|
|
2
|
+
name "Quantity declaration text"
|
|
3
|
+
definition "The text of the quantity declaration as it appears on the prepackage label, against which the Annex A.1.3 prohibition of ambiguous expressions is checked."
|
|
4
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-A.1.3"
|
|
5
|
+
value_type string
|
|
6
|
+
origin measured
|
|
7
|
+
scope model
|
|
8
|
+
category metrological
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
attribute_definition quantity_declaration_unit {
|
|
12
|
+
name "Quantity declaration unit"
|
|
13
|
+
definition "The unit of measurement symbol used in the quantity declaration (checked against Table A.1 and, with the measure type and quantity, Table A.2)."
|
|
14
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-A.1"
|
|
15
|
+
value_type string
|
|
16
|
+
origin measured
|
|
17
|
+
scope model
|
|
18
|
+
category metrological
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
attribute_definition measure_type {
|
|
22
|
+
name "Type of measurement"
|
|
23
|
+
definition "The type of measurement the quantity declaration expresses (volume-liquid, volume-cubic, mass, length or area), selecting the row family of Table A.2."
|
|
24
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-A.1.4"
|
|
25
|
+
value_type string
|
|
26
|
+
origin measured
|
|
27
|
+
scope model
|
|
28
|
+
category metrological
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
attribute_definition nominal_quantity_value {
|
|
32
|
+
name "Nominal quantity value"
|
|
33
|
+
definition "The declared nominal quantity of product in the prepackage (the q of Table A.2's unit-choice bands), in the base unit of its measure type."
|
|
34
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-2.5"
|
|
35
|
+
value_type number
|
|
36
|
+
origin measured
|
|
37
|
+
scope model
|
|
38
|
+
category metrological
|
|
39
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package {
|
|
2
|
+
id oiml-r79
|
|
3
|
+
kind rec
|
|
4
|
+
title "OIML R 79:2015 — R 79 package"
|
|
5
|
+
version "2015"
|
|
6
|
+
editions { 2015 }
|
|
7
|
+
baseUrn "urn:oiml:pub:r:79:2015"
|
|
8
|
+
uses { oiml-smart-core }
|
|
9
|
+
requires { core }
|
|
10
|
+
validity { from 2015-01-01 }
|
|
11
|
+
status current
|
|
12
|
+
default_spelling eng-Latn
|
|
13
|
+
description "Labeling requirements for prepackages — identity of the product, declaration of responsibility, and quantity declarations; units of measurement and symbols (mandatory Annex A), misleading practices, and the informative type-size models of Annex B. Authored from the corpus draft whose sections 3–5.5 are heading-only (content pending upstream); sections 5.6, 6 and Annexes A/B are complete and carried here in full."
|
|
14
|
+
source { collection "sources/r79/collection.yml" }
|
|
15
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
conformance_class /conf/label-examination {
|
|
2
|
+
title "Label examination"
|
|
3
|
+
name "Label examination for prepackages"
|
|
4
|
+
target /req/units
|
|
5
|
+
subject "prepackage label"
|
|
6
|
+
description "Examination of the quantity declaration on a prepackage label against the unit and expression rules of R 79 Annex A (A.1, A.1.3, A.1.4) and the misleading-information prohibition of 6.1. All checks are documentation/string examinations of the label as presented — no instrument testing is involved."
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
conformance_test /conf/label-examination/quantity-declaration-review {
|
|
10
|
+
name "Quantity declaration review"
|
|
11
|
+
purpose "Verify that the quantity declaration's unit is a Table A.1 symbol, is the Table A.2 unit for the measure type and nominal quantity, and that the declaration text carries none of the prohibited ambiguous expressions."
|
|
12
|
+
method "Read the quantity declaration as presented on the principal display panel: record the declaration text, the unit symbol, the type of measurement and the nominal quantity value; evaluate the four checks (unit is a Table A.1 symbol; unit is permitted by Table A.2 for the recorded type and quantity; no 'approximately'/'standard'/'when packed' in the declaration; no misleading information on the label per 6.1)."
|
|
13
|
+
type Inspection
|
|
14
|
+
kind performance
|
|
15
|
+
reference { doc "urn:oiml:pub:r:79:2015" clause "A.1" }
|
|
16
|
+
reference { doc "urn:oiml:pub:r:79:2015" clause "A.1.3" }
|
|
17
|
+
reference { doc "urn:oiml:pub:r:79:2015" clause "A.1.4" }
|
|
18
|
+
reference { doc "urn:oiml:pub:r:79:2015" clause "6.1" }
|
|
19
|
+
targets { /req/units/symbols-table /req/units/choice-of-units /req/units/no-ambiguous-expressions /req/practices/no-misleading-information }
|
|
20
|
+
result_forms { record }
|
|
21
|
+
variables {
|
|
22
|
+
variable quantity_declaration_text { type string source measured description "The quantity declaration text as presented" }
|
|
23
|
+
variable quantity_declaration_unit { type string source measured description "The unit symbol used in the declaration" }
|
|
24
|
+
variable measure_type { type string source measured description "Type of measurement (volume-liquid, volume-cubic, mass, length, area)" }
|
|
25
|
+
variable nominal_quantity_value { type number source measured description "Declared nominal quantity in the measure type's base unit" }
|
|
26
|
+
}
|
|
27
|
+
procedure {
|
|
28
|
+
1 "Record the declaration text, unit symbol, measure type and nominal quantity from the principal display panel" outputs { quantity_declaration_text quantity_declaration_unit measure_type nominal_quantity_value }
|
|
29
|
+
2 "Evaluate the four checks against Tables A.1/A.2 and the A.1.3/6.1 prohibitions"
|
|
30
|
+
}
|
|
31
|
+
acceptance_criteria {
|
|
32
|
+
type composite
|
|
33
|
+
pass_if "ocl{not quantity_declaration_text.matches('(?i).*(approximately|standard|when packed).*') and unit_symbols.symbols->exists(s | s = quantity_declaration_unit) and unit_choice_by_quantity.permits(measure_type, nominal_quantity_value, quantity_declaration_unit)"
|
|
34
|
+
criterion symbols { target /req/units/symbols-table pass_if "ocl{unit_symbols.symbols->exists(s | s = quantity_declaration_unit)}" description "The declared unit is a Table A.1 symbol" }
|
|
35
|
+
criterion unit_choice { target /req/units/choice-of-units pass_if "ocl{unit_choice_by_quantity.permits(measure_type, nominal_quantity_value, quantity_declaration_unit)}" description "The unit is Table A.2's unit for the measure type and quantity" }
|
|
36
|
+
criterion no_ambiguous { target /req/units/no-ambiguous-expressions pass_if "ocl{not quantity_declaration_text.matches('(?i).*(approximately|standard|when packed).*')}" description "No prohibited ambiguous expression in the declaration" }
|
|
37
|
+
criterion not_misleading { target /req/practices/no-misleading-information pass_if "ocl{not quantity_declaration_text.matches('(?i).*(approximately|standard|when packed).*')}" description "The label carries no ambiguous statement likely to mislead (6.1 read with A.1.3)" }
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
requirement_class /req/labeling {
|
|
2
|
+
title "Presentation of information"
|
|
3
|
+
name "Presentation of information on the prepackage label"
|
|
4
|
+
description "Legibility, prominence and placement of quantity declarations (R 79, 5.6)."
|
|
5
|
+
subject "prepackage label"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
requirement /req/labeling/quantity-declaration-prominence {
|
|
9
|
+
name "Quantity declarations prominent and legible"
|
|
10
|
+
statement "Quantity declarations shall appear in easily legible boldface type or print that contrasts conspicuously with the background and with other information on the prepackage, and are so positioned on the principal display panel as to make them conspicuous and easy to read and understand."
|
|
11
|
+
verification { method definitional }
|
|
12
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-5.6.1"
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
requirement /req/labeling/blown-molded-declarations {
|
|
16
|
+
name "Blown, embossed or molded declarations"
|
|
17
|
+
statement "When the quantity declaration is blown, embossed or molded on the surface of the prepackage, then all other required label information shall be provided elsewhere on the surface or on a label so as to be conspicuous and easy to read and understand."
|
|
18
|
+
verification { method definitional }
|
|
19
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-5.6.2"
|
|
20
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
requirement_class /req/practices {
|
|
2
|
+
title "Misleading practices"
|
|
3
|
+
name "Provisions against misleading prepackages"
|
|
4
|
+
description "Information, fill level, packing-material design, duplication and free-quantity rules that prevent a purchaser from being misled about quantity or identity (R 79, 6)."
|
|
5
|
+
subject "prepackage"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
requirement /req/practices/no-misleading-information {
|
|
9
|
+
name "No misleading information"
|
|
10
|
+
statement "The label on a prepackage shall not contain any information or ambiguous statements likely to mislead a purchaser. This includes the ambiguous expressions prohibited in Annex A, A.1.3."
|
|
11
|
+
binds_to { model.attributes.quantity_declaration_text }
|
|
12
|
+
limit {
|
|
13
|
+
expression "ocl{not model.attributes.quantity_declaration_text.matches('(?i).*(approximately|standard|when packed).*')}"
|
|
14
|
+
notes "The Annex A.1.3 prohibition, machine-checkable against the declared quantity text: 'approximately', 'standard' and 'when packed' shall not appear as part of the quantity declaration."
|
|
15
|
+
uses { model.attributes.quantity_declaration_text }
|
|
16
|
+
}
|
|
17
|
+
verification { method test }
|
|
18
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-6.1"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
requirement /req/practices/fill-level {
|
|
22
|
+
name "Fill level not misleading"
|
|
23
|
+
statement "A prepackage shall be filled in such a manner that a purchaser may not reasonably be misled with respect to the quantity of the product it contains, taking into consideration any recognized and accepted production practices that may be necessary for the manufacturer or packer."
|
|
24
|
+
verification { method definitional }
|
|
25
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-6.2.1"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
requirement /req/practices/no-excessive-slack-fill {
|
|
29
|
+
name "No excessive non-functional slack fill"
|
|
30
|
+
statement "If a purchaser cannot fully view the product in a prepackage, it shall be considered to be filled, and shall be misleading if it contains excessive non-functional slack fill that is not required by any production process. Slack fill necessary for product protection, machine requirements, unavoidable product settling during shipping and handling, or a packaging function inherent in the nature of the product and clearly communicated to consumers is not regarded as misleading."
|
|
31
|
+
verification { method definitional }
|
|
32
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-6.2.2"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
requirement /req/practices/aerosol-fill-level {
|
|
36
|
+
name "Aerosol dispenser fill level"
|
|
37
|
+
statement "The fill level of aerosol dispensers shall be in accordance with national legislation or recognized industry standards specified in national legislation."
|
|
38
|
+
verification { method definitional }
|
|
39
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-6.2.3"
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
requirement /req/practices/packing-material-design {
|
|
43
|
+
name "Design and display of packing material"
|
|
44
|
+
statement "Prepackages shall be manufactured, constructed or displayed in such a manner as to reasonably prevent a purchaser from being misled with respect to the quantity or identity of product contained therein. A prepackage shall not have a false bottom, sidewalls, lid or covering, or be otherwise so constructed or filled, wholly or partially, that may deceive the purchaser. Concave bottoms may be justified for safety reasons."
|
|
45
|
+
verification { method definitional }
|
|
46
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-6.3"
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
requirement /req/practices/duplication-of-information {
|
|
50
|
+
name "Duplication on multiple principal display panels"
|
|
51
|
+
statement "If a prepackage has more than one principal display panel the product identity and the quantity declaration shall appear on each principal display panel in accordance with the requirements of this Recommendation."
|
|
52
|
+
verification { method definitional }
|
|
53
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-6.4"
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
requirement /req/practices/free-quantities {
|
|
57
|
+
name "Additional or free quantities"
|
|
58
|
+
statement "Unless the packer declares that the free quantity is included in the nominal quantity, any such declaration shall be made in a manner which will reasonably prevent a purchaser from being misled with respect to the total quantity."
|
|
59
|
+
verification { method definitional }
|
|
60
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-6.5"
|
|
61
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
requirement_class /req/units {
|
|
2
|
+
title "Units of measurement and symbols"
|
|
3
|
+
name "Units and symbols for quantity declarations (Annex A, mandatory)"
|
|
4
|
+
description "Permissible units and symbols, their spacing, accompanying phrases, prohibited ambiguous expressions, and the unit chosen by measure type and quantity (R 79, Annex A)."
|
|
5
|
+
subject "quantity declaration"
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
requirement /req/units/symbols-table {
|
|
9
|
+
name "Units expressed in words or symbols"
|
|
10
|
+
statement "Units of measurement shall be expressed in either words or symbols as provided by Table A.1. Neither a period nor the letter 's' shall be used after any of the symbols."
|
|
11
|
+
binds_to { model.attributes.quantity_declaration_unit }
|
|
12
|
+
limit {
|
|
13
|
+
expression "ocl{unit_symbols.symbols->exists(s | s = quantity_declaration_unit)}"
|
|
14
|
+
notes "The declared unit must be one of Table A.1's symbols (mg, g, kg, t, mL, cL, L, μm, mm, cm, m, mm2, cm2, dm2, m2, cm3, dm3, m3)."
|
|
15
|
+
uses { model.attributes.quantity_declaration_unit table:unit_symbols }
|
|
16
|
+
}
|
|
17
|
+
verification { method test }
|
|
18
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-A.1"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
requirement /req/units/spacing {
|
|
22
|
+
name "Single space between number and unit"
|
|
23
|
+
statement "A single space shall be used to separate the number from the unit of measurement."
|
|
24
|
+
verification { method definitional }
|
|
25
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-A.1.1"
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
requirement /req/units/phrases {
|
|
29
|
+
name "Accompanying phrases"
|
|
30
|
+
statement "Appropriate phrases such as 'content', 'contents', 'quantity', 'mass', 'weight', 'net', 'net mass', 'net weight', 'net contents' or 'net quantity' may be used in connection with the quantity declaration in accordance with national legislation, appearing either before or after the quantity declaration. The words 'drained' or 'drained weight' shall only be used as described in 5.2."
|
|
31
|
+
verification { method definitional }
|
|
32
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-A.1.2"
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
requirement /req/units/no-ambiguous-expressions {
|
|
36
|
+
name "No ambiguous expressions"
|
|
37
|
+
statement "Ambiguous expressions such as 'approximately' or 'standard' or 'when packed' shall not be used as part of the quantity declaration."
|
|
38
|
+
binds_to { model.attributes.quantity_declaration_text }
|
|
39
|
+
limit {
|
|
40
|
+
expression "ocl{not model.attributes.quantity_declaration_text.matches('(?i).*(approximately|standard|when packed).*')}"
|
|
41
|
+
notes "Machine-checkable string prohibition over the quantity declaration text (Annex A.1.3, referenced by 6.1)."
|
|
42
|
+
uses { model.attributes.quantity_declaration_text }
|
|
43
|
+
}
|
|
44
|
+
verification { method test }
|
|
45
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-A.1.3"
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
requirement /req/units/choice-of-units {
|
|
49
|
+
name "Choice of unit by measure type and quantity"
|
|
50
|
+
statement "The unit used depends on the type of measurement and the nominal quantity of product, as indicated in Table A.2: volume (liquids) below 1000 mL in mL or cL, from 1000 mL in L; volume-cubic (solids) up to 1000 cm3 in cm3 or mL, from 1 dm3 to below 1000 dm3 in dm3 or L, from 1000 dm3 in m3; mass below 1 g in mg, from 1 g to below 1000 g in g, from 1000 g in kg or t; length below 1 mm in μm or mm, from 1 mm to below 100 cm in mm or cm, from 100 cm in m; area below 100 cm2 in mm2 or cm2, from 1 dm2 to below 100 dm2 in dm2, from 1 m2 in m2."
|
|
51
|
+
binds_to { model.attributes.measure_type model.attributes.nominal_quantity_value model.attributes.quantity_declaration_unit }
|
|
52
|
+
limit {
|
|
53
|
+
expression "ocl{unit_choice_by_quantity.permits(measure_type, nominal_quantity_value, quantity_declaration_unit)}"
|
|
54
|
+
notes "Table A.2 as a lookup: given the measure type and the nominal quantity value, the declared unit must be among the table's permitted units for that band."
|
|
55
|
+
uses { model.attributes.measure_type model.attributes.nominal_quantity_value model.attributes.quantity_declaration_unit table:unit_choice_by_quantity }
|
|
56
|
+
}
|
|
57
|
+
verification { method test }
|
|
58
|
+
ref derives-from "urn:oiml:pub:r:79:2015#clause-A.1.4"
|
|
59
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
table unit_symbols {
|
|
2
|
+
description "Units of measurement and their symbols (R 79, Table A.1)"
|
|
3
|
+
columns {
|
|
4
|
+
unit: string
|
|
5
|
+
symbol: string
|
|
6
|
+
}
|
|
7
|
+
data {
|
|
8
|
+
"milligram" "mg"
|
|
9
|
+
"gram" "g"
|
|
10
|
+
"kilogram" "kg"
|
|
11
|
+
"tonne" "t"
|
|
12
|
+
"millilitre" "mL"
|
|
13
|
+
"centilitre" "cL"
|
|
14
|
+
"litre" "L"
|
|
15
|
+
"micrometre" "μm"
|
|
16
|
+
"millimetre" "mm"
|
|
17
|
+
"centimetre" "cm"
|
|
18
|
+
"metre" "m"
|
|
19
|
+
"square millimetre" "mm2"
|
|
20
|
+
"square centimetre" "cm2"
|
|
21
|
+
"square decimetre" "dm2"
|
|
22
|
+
"square metre" "m2"
|
|
23
|
+
"cubic centimetre" "cm3"
|
|
24
|
+
"cubic decimetre" "dm3"
|
|
25
|
+
"cubic metre" "m3"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
table unit_choice_by_quantity {
|
|
30
|
+
description "The correct unit by type of measurement and quantity of product (R 79, Table A.2; q is the nominal quantity)."
|
|
31
|
+
columns {
|
|
32
|
+
measure_type: string
|
|
33
|
+
band_min: string "the band's inclusive lower bound, '-' for open-ended below"
|
|
34
|
+
band_max: string "the band's exclusive upper bound, '-' for open-ended above"
|
|
35
|
+
units: string
|
|
36
|
+
}
|
|
37
|
+
data {
|
|
38
|
+
"volume-liquid" "-" "1000 mL" "mL|cL"
|
|
39
|
+
"volume-liquid" "1000 mL" "-" "L"
|
|
40
|
+
"volume-cubic" "-" "1000 cm3" "cm3|mL"
|
|
41
|
+
"volume-cubic" "1 dm3" "1000 dm3" "dm3|L"
|
|
42
|
+
"volume-cubic" "1000 dm3" "-" "m3"
|
|
43
|
+
"mass" "-" "1 g" "mg"
|
|
44
|
+
"mass" "1 g" "1000 g" "g"
|
|
45
|
+
"mass" "1000 g" "-" "kg|t"
|
|
46
|
+
"length" "-" "1 mm" "μm|mm"
|
|
47
|
+
"length" "1 mm" "100 cm" "mm|cm"
|
|
48
|
+
"length" "100 cm" "-" "m"
|
|
49
|
+
"area" "-" "100 cm2" "mm2|cm2"
|
|
50
|
+
"area" "1 dm2" "100 dm2" "dm2"
|
|
51
|
+
"area" "1 m2" "-" "m2"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
table type_size_usa {
|
|
56
|
+
description "Minimum height of numbers and letters for quantity declarations by area of the principal display panel — the USA model (R 79, Annex B, Table B.1; INFORMATIVE: a national example, not an OIML requirement)."
|
|
57
|
+
columns {
|
|
58
|
+
panel_area_band: string
|
|
59
|
+
min_height_printed_mm: number "mm"
|
|
60
|
+
min_height_blowmolded_mm: number "mm"
|
|
61
|
+
}
|
|
62
|
+
data {
|
|
63
|
+
"A ≤ 32 cm2" 1.6 3.2
|
|
64
|
+
"32 < A ≤ 161 cm2" 3.2 4.8
|
|
65
|
+
"161 < A ≤ 645 cm2" 4.8 6.4
|
|
66
|
+
"645 < A ≤ 2581 cm2" 6.4 7.9
|
|
67
|
+
"2581 cm2 < A" 12.7 14.3
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
term label {
|
|
2
|
+
label "label"
|
|
3
|
+
definition "written, printed, or graphic matter affixed to, applied to, attached to, blown into, formed or molded into, embossed on, appearing upon, included in, belonging to, or accompanying a prepackage containing any product for purposes of branding, identifying, or giving any information with respect to the product or to the contents of the prepackage"
|
|
4
|
+
section "2.1"
|
|
5
|
+
source "urn:oiml:pub:r:79:2015#clause-2.1"
|
|
6
|
+
language "en"
|
|
7
|
+
form_type "fullForm"
|
|
8
|
+
part_of_speech "noun"
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
term medium {
|
|
12
|
+
label "medium"
|
|
13
|
+
definition "fluid that is put in the prepackage together with the product, either separated from, in or surrounding the product, and that is intended to be left over after use of the product, except for items naturally in the product"
|
|
14
|
+
section "2.2"
|
|
15
|
+
note "For the purpose of this Recommendation 'fluid' includes either liquid, semi-liquid or frozen liquids, or a gas or a mixture of gasses, whether below, at or above atmospheric pressure, or a combination of both. 'Use' includes consumption. A medium is sometimes also referred to as 'liquid packing medium'. A medium can be separated from the product by the measuring procedures in OIML R 87, and includes the liquid mediums of CODEX STAN 1-1985 (drained weight) and the ice-glaze of CODEX standards on ice-glazed foods."
|
|
16
|
+
source "urn:oiml:pub:r:79:2015#clause-2.2"
|
|
17
|
+
language "en"
|
|
18
|
+
form_type "fullForm"
|
|
19
|
+
part_of_speech "noun"
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
term misleading-prepackage {
|
|
23
|
+
label "misleading prepackage"
|
|
24
|
+
definition "prepackage that is made, formed, presented, marked or filled in any way that may mislead a consumer about the quantity of product that it contains"
|
|
25
|
+
section "2.3"
|
|
26
|
+
source "urn:oiml:pub:r:79:2015#clause-2.3"
|
|
27
|
+
language "en"
|
|
28
|
+
form_type "fullForm"
|
|
29
|
+
part_of_speech "noun"
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
term net-quantity {
|
|
33
|
+
label "net quantity"
|
|
34
|
+
definition "quantity of the identified product in the prepackage exclusive of packing material"
|
|
35
|
+
section "2.4"
|
|
36
|
+
note "Includes wrappers and any other material packed with such product. Relates to specifications on a prepackage; the actual quantity in an individual prepackage is governed by OIML R 87."
|
|
37
|
+
source "urn:oiml:pub:r:79:2015#clause-2.4"
|
|
38
|
+
language "en"
|
|
39
|
+
form_type "fullForm"
|
|
40
|
+
part_of_speech "noun"
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
term nominal-quantity {
|
|
44
|
+
label "nominal quantity"
|
|
45
|
+
definition "quantity of product in a prepackage declared on the label"
|
|
46
|
+
section "2.5"
|
|
47
|
+
note "In some national legislation referred to as 'net quantity', 'net contents', 'net mass' or 'net volume'. Relates to specifications on a prepackage; procedures for inspection lots are provided in OIML R 87."
|
|
48
|
+
source "urn:oiml:pub:r:79:2015#clause-2.5"
|
|
49
|
+
language "en"
|
|
50
|
+
form_type "fullForm"
|
|
51
|
+
part_of_speech "noun"
|
|
52
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oimlsmart/primmel-packages",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
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.
|
|
15
|
+
"@primmel/primmel": "^1.10.0"
|
|
16
16
|
}
|
|
17
17
|
}
|
|
Binary file
|