@oimlsmart/primmel-packages 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,300 +0,0 @@
1
- # OIML R 129 Sample Data — 1 evaluation flow
2
- # Modelled on data/r144/sample-data.yaml's shape:
3
- # MeasuringInstrumentModelFamily -> MeasuringInstrumentModel
4
- # -> MeasuringInstrumentSample (NO groups — R 129 defines no group level)
5
- # plus workflow entities (Application, TestRequest, TestReport, EvaluationReport,
6
- # Certificate) with re-typed FKs (model_family_id, model_ids, sample_ids,
7
- # model_id). standard_id is oiml-r129 on every record.
8
- # classification maps use dimension ids (measurement_principle,
9
- # instrument_category, power_supply, object_capability) with dimension enum
10
- # values; parameters maps use attribute ids with { value, unit? } entries
11
- # (QuantityValue, INV-1).
12
- #
13
- # Flow 1 (ported from the legacy data/oiml-r129 flow sample-nl1-ds500):
14
- # ACME Dynamics B.V. MD-3D-500 — optical / automatic / AC mains conveyor
15
- # instrument for rectangular parcels (laser triangulation), d = 1 cm,
16
- # Min 10 cm / Max 250 cm, +5/+40 °C — the full program: all mains voltage
17
- # tests, ESD + RF immunity, ambient light, and the speed-of-movement test.
18
- standard: oiml-r129
19
- description: >
20
- One OIML R 129 type evaluation flow for a multi-dimensional measuring
21
- instrument: 1 manufacturer -> 1 model family -> 1 model -> 1 physical
22
- sample (the unit representing the definitive type), then application ->
23
- test_request -> test_report -> evaluation -> certificate. Modelled on an
24
- ETL Certin (EX2) reference certificate.
25
-
26
- flows:
27
- # ════════════════════════════════════════════════════════════════════
28
- # FLOW 1 — ACME Dynamics B.V. MD-3D-500 (optical, automatic, AC mains)
29
- # ════════════════════════════════════════════════════════════════════
30
- - name: "EX2/ETL — ACME Dynamics MD-3D-500"
31
- id_prefix: sample-nl1-ds500
32
- party:
33
- laboratory_id: "11"
34
- authority_id: EX2
35
- subject:
36
- manufacturer:
37
- id: mfr-dymes
38
- standard_id: oiml-r129
39
- company: "ACME Dynamics B.V."
40
- street: "Merkurstraat 12"
41
- city: "Dordrecht"
42
- postalCode: "3316 TH"
43
- country: "Netherlands"
44
- phone: "+31 78 632 4500"
45
- created: "2023-11-01"
46
- modified: "2024-03-20"
47
- family:
48
- id: fam-dymscale-3d
49
- standard_id: oiml-r129
50
- family_designation: "MD-3D Series"
51
- manufacturer_id: mfr-dymes
52
- classification:
53
- measurement_principle: optical
54
- parameters:
55
- temperature_min: { value: 5, unit: degC }
56
- temperature_max: { value: 40, unit: degC }
57
- created: "2023-11-01"
58
- modified: "2024-03-20"
59
- models:
60
- - id: mod-dymscale-3d-500
61
- standard_id: oiml-r129
62
- model_designation: "MD-3D-500"
63
- manufacturer_id: mfr-dymes
64
- family_id: fam-dymscale-3d
65
- classification:
66
- instrument_category: automatic
67
- power_supply: ac-mains
68
- object_capability: rectangular-only
69
- parameters:
70
- scale_interval: { value: 1, unit: cm }
71
- min_dimension: { value: 10, unit: cm }
72
- max_dimension: { value: 250, unit: cm }
73
- conversion_factor: { value: 5000, unit: cm3/kg }
74
- speed_min: { value: 0.5, unit: m/s }
75
- speed_max: { value: 2.0, unit: m/s }
76
- nominal_voltage: { value: 230, unit: V }
77
- capabilities: [multi-dimensional-measuring-instrument, automatic-operation]
78
- created: "2023-11-01"
79
- modified: "2024-03-20"
80
- samples:
81
- - id: smp-dymscale-001
82
- standard_id: oiml-r129
83
- serial_number: "DS500-2023-0081"
84
- model_id: mod-dymscale-3d-500
85
- manufacturer_id: mfr-dymes
86
- application_id: app-acme-md3d
87
- status: TESTING_COMPLETE
88
- condition: NEW
89
- custody_events:
90
- - { date: "2024-01-22", type: RECEIVED, actor: "ETL Test Laboratory", notes: "Sample received from manufacturer" }
91
- - { date: "2024-03-08", type: TESTING_COMPLETE, actor: "ETL Test Laboratory", notes: "Type evaluation tests complete" }
92
- - { date: "2024-03-20", type: RETURNED, actor: "EX2", notes: "Sample returned to manufacturer after certificate issue" }
93
- created: "2024-01-15"
94
- modified: "2024-03-20"
95
- application:
96
- id: app-acme-md3d
97
- standard_id: oiml-r129
98
- application_number: "EX-ACM-2024-MD3D"
99
- date_of_application: "2024-01-20"
100
- status: ACCEPTED
101
- applicant:
102
- company: "ACME Dynamics B.V."
103
- representative: "Ir. Jeroen van Dam"
104
- address: "Merkurstraat 12, 3316 TH Dordrecht, Netherlands"
105
- contact: "+31 78 632 4500"
106
- reference: "DY-2024-3D500"
107
- date_of_application: "2024-01-20"
108
- application_number: "EX-ACM-2024-MD3D"
109
- authorisedByManufacturer: true
110
- noConcurrentApplication: true
111
- model_family_id: fam-dymscale-3d
112
- model_ids: [mod-dymscale-3d-500]
113
- sample_ids: [smp-dymscale-001]
114
- documentation:
115
- - { name: "Technical documentation", description: "Complete technical file per R 129-2, 1.2", submitted: true, reference: "TD-DS500-2024" }
116
- - { name: "Drawings", description: "Measuring-frame and conveyor drawings", submitted: true }
117
- - { name: "Operating manual", description: "MD-3D-500 operating manual EN/NL", submitted: true }
118
- - { name: "Software documentation", description: "Firmware v3.2.1 information (R 129-2, 1.2.2)", submitted: true }
119
- submitted_date: "2024-01-20"
120
- reviewed_date: "2024-02-05"
121
- reviewer: "ETL Certification"
122
- review_notes: "Complete documentation. Optical laser-triangulation frame over conveyor; rectangular parcels only; firmware v3.2.1."
123
- test_request:
124
- id: trq-dymscale-01
125
- standard_id: oiml-r129
126
- request_number: "TRQ-NL-DY-2024-001-01"
127
- application_id: app-acme-md3d
128
- requesting_authority_id: EX2
129
- assigned_laboratory_id: "11"
130
- status: COMPLETED
131
- scheme: A
132
- issued_date: "2024-02-08"
133
- issued_by: "ETL Certification"
134
- test_conditions:
135
- temperature_range: "+5/+40"
136
- supply_voltage: "230 V AC, 50 Hz"
137
- assignments:
138
- - { id: asg-ds500-identification-001, form_id: identification, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
139
- - { id: asg-ds500-general-info-001, form_id: general-info, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
140
- - { id: asg-ds500-equipment-info-001, form_id: equipment-info, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
141
- - { id: asg-ds500-configuration-001, form_id: configuration, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
142
- - { id: asg-ds500-sample-selection-001, form_id: sample-selection, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
143
- - { id: asg-ds500-adjustments-modifications-001, form_id: adjustments-modifications, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
144
- - { id: asg-ds500-warm-up-time-001, form_id: warm-up-time, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
145
- - { id: asg-ds500-repeatability-001, form_id: repeatability, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
146
- - { id: asg-ds500-static-temperatures-001, form_id: static-temperatures, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
147
- - { id: asg-ds500-damp-heat-steady-001, form_id: damp-heat-steady, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
148
- - { id: asg-ds500-voltage-variation-001, form_id: voltage-variation, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
149
- - { id: asg-ds500-voltage-dips-001, form_id: voltage-dips, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
150
- - { id: asg-ds500-bursts-001, form_id: bursts, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
151
- - { id: asg-ds500-esd-001, form_id: esd, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
152
- - { id: asg-ds500-surge-001, form_id: surge, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
153
- - { id: asg-ds500-rf-immunity-radiated-001, form_id: rf-immunity-radiated, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
154
- - { id: asg-ds500-rf-immunity-conducted-001, form_id: rf-immunity-conducted, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
155
- - { id: asg-ds500-damp-heat-cyclic-001, form_id: damp-heat-cyclic, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
156
- - { id: asg-ds500-ambient-light-001, form_id: ambient-light, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
157
- - { id: asg-ds500-construction-examination-001, form_id: construction-examination, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
158
- - { id: asg-ds500-object-shape-001, form_id: object-shape, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
159
- - { id: asg-ds500-surface-characteristics-001, form_id: surface-characteristics, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
160
- - { id: asg-ds500-orientation-position-001, form_id: orientation-position, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
161
- - { id: asg-ds500-speed-movement-001, form_id: speed-movement, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
162
- - { id: asg-ds500-summary-results-001, form_id: summary-results, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
163
- - { id: asg-ds500-checklist-001, form_id: checklist, sample_id: smp-dymscale-001, model_id: mod-dymscale-3d-500, status: COMPLETED }
164
- test_report:
165
- id: trp-acme-md3d
166
- standard_id: oiml-r129
167
- report_number: "NMI-TR-2024-R129-001"
168
- test_request_id: trq-dymscale-01
169
- application_id: app-acme-md3d
170
- laboratory_id: "11"
171
- model_family_id: fam-dymscale-3d
172
- sample_ids: [smp-dymscale-001]
173
- status: ACCEPTED
174
- evaluator: "ETL Test Laboratory"
175
- submitted_date: "2024-03-10"
176
- forms:
177
- - identification
178
- - general-info
179
- - equipment-info
180
- - configuration
181
- - sample-selection
182
- - adjustments-modifications
183
- - warm-up-time
184
- - repeatability
185
- - static-temperatures
186
- - damp-heat-steady
187
- - voltage-variation
188
- - voltage-dips
189
- - bursts
190
- - esd
191
- - surge
192
- - rf-immunity-radiated
193
- - rf-immunity-conducted
194
- - damp-heat-cyclic
195
- - ambient-light
196
- - construction-examination
197
- - object-shape
198
- - surface-characteristics
199
- - orientation-position
200
- - speed-movement
201
- - summary-results
202
- - checklist
203
- form_default_result: PASS
204
- form_overrides:
205
- warm-up-time:
206
- measurements:
207
- - { condition: "0 min", test_object_id: "TO-MIN (10.0 × 10.0 × 10.0 cm)", indication_l: 10.0, error_l: 0.0, indication_w: 10.0, error_w: 0.0, indication_h: 10.1, error_h: 0.1, reference_l: 10.0, reference_w: 10.0, reference_h: 10.0, mpe: 1.0, pass_fail: true }
208
- - { condition: "5 min", test_object_id: "TO-MIN (10.0 × 10.0 × 10.0 cm)", indication_l: 10.0, error_l: 0.0, indication_w: 10.0, error_w: 0.0, indication_h: 10.0, error_h: 0.0, reference_l: 10.0, reference_w: 10.0, reference_h: 10.0, mpe: 1.0, pass_fail: true }
209
- - { condition: "15 min", test_object_id: "TO-MAX (240.0 × 120.0 × 100.0 cm)", indication_l: 240.1, error_l: 0.1, indication_w: 120.0, error_w: 0.0, indication_h: 100.0, error_h: 0.0, reference_l: 240.0, reference_w: 120.0, reference_h: 100.0, mpe: 1.0, pass_fail: true }
210
- - { condition: "30 min", test_object_id: "TO-MAX (240.0 × 120.0 × 100.0 cm)", indication_l: 240.0, error_l: 0.0, indication_w: 120.0, error_w: 0.0, indication_h: 100.0, error_h: 0.0, reference_l: 240.0, reference_w: 120.0, reference_h: 100.0, mpe: 1.0, pass_fail: true }
211
- within_mpe: true
212
- repeatability:
213
- conversion_factor: 5000
214
- conveyor_speed: 90
215
- measurements:
216
- - { condition: "Run 1", test_object_id: "TO-3 (60.0 × 40.0 × 30.0 cm)", indication_l: 60.0, error_l: 0.0, indication_w: 40.0, error_w: 0.0, indication_h: 30.0, error_h: 0.0, reference_l: 60.0, reference_w: 40.0, reference_h: 30.0, mpe: 1.0, pass_fail: true }
217
- - { condition: "Run 2", test_object_id: "TO-3 (60.0 × 40.0 × 30.0 cm)", indication_l: 60.1, error_l: 0.1, indication_w: 40.0, error_w: 0.0, indication_h: 30.0, error_h: 0.0, reference_l: 60.0, reference_w: 40.0, reference_h: 30.0, mpe: 1.0, pass_fail: true }
218
- - { condition: "Run 3", test_object_id: "TO-3 (60.0 × 40.0 × 30.0 cm)", indication_l: 60.0, error_l: 0.0, indication_w: 40.1, error_w: 0.1, indication_h: 30.0, error_h: 0.0, reference_l: 60.0, reference_w: 40.0, reference_h: 30.0, mpe: 1.0, pass_fail: true }
219
- calculated_quantities_correct: true
220
- within_mpe_and_calculated: true
221
- static-temperatures:
222
- severity: 40
223
- temperature_low: 5
224
- measurements:
225
- - { condition: "Initial reference 20 °C", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
226
- - { condition: "High temperature 40 °C", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.1, error_l: 0.1, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
227
- - { condition: "Low temperature 5 °C", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.1, error_w: 0.1, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
228
- - { condition: "Return reference 20 °C", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
229
- influence_verdict: true
230
- voltage-variation:
231
- nominal_voltage: 230
232
- measurements:
233
- - { condition: "Nominal 230 V", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
234
- - { condition: "Nominal +10 % (253 V)", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.1, error_h: 0.1, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
235
- - { condition: "Nominal −15 % (195.5 V)", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.1, error_l: 0.1, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
236
- disturbance_verdict: true
237
- esd:
238
- severity: { contact_voltage_kv: 6, air_voltage_kv: 8, discharge_network: "150 pF via 330 Ω", polarity: both }
239
- measurements:
240
- - { condition: "Baseline", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
241
- - { condition: "Direct — contact 6 kV", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
242
- - { condition: "Indirect — air 8 kV (coupling plane)", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.1, error_l: 0.1, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
243
- fault_detected: false
244
- disturbance_verdict: true
245
- speed-movement:
246
- speed_min: 0.5
247
- speed_max: 2.0
248
- measurements:
249
- - { condition: "V_min 0.5 m/s", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
250
- - { condition: "V_max 2.0 m/s", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.1, error_l: 0.1, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
251
- within_mpe: true
252
- ambient-light:
253
- measurements:
254
- - { condition: "Reference 300 lx", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
255
- - { condition: "100 lx", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.0, error_h: 0.0, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
256
- - { condition: "1500 lx", test_object_id: "TO-4 (100.0 × 60.0 × 40.0 cm)", indication_l: 100.0, error_l: 0.0, indication_w: 60.0, error_w: 0.0, indication_h: 40.1, error_h: 0.1, reference_l: 100.0, reference_w: 60.0, reference_h: 40.0, mpe: 1.0, pass_fail: true }
257
- within_mpe: true
258
- evaluation:
259
- id: eva-acme-md3d
260
- standard_id: oiml-r129
261
- application_id: app-acme-md3d
262
- authority_id: EX2
263
- test_report_ids: [trp-acme-md3d]
264
- model_id: mod-dymscale-3d-500
265
- reviewer_name: "ETL Certification"
266
- review_date: "2024-03-15"
267
- overall_decision: APPROVED
268
- conditions:
269
- - "The instrument shall be operated within the temperature range +5 °C to +40 °C."
270
- - "The optical path shall be kept clean; the measuring frame shall be inspected per the maintenance schedule."
271
- - "The instrument shall be calibrated at intervals not exceeding 12 months."
272
- review_notes: "All tests passed within the maximum permissible errors; no significant faults under disturbances. Type evaluation satisfactory."
273
- certificate:
274
- id: crt-acme-md3d
275
- standard_id: oiml-r129
276
- model_family_id: fam-dymscale-3d
277
- evaluation_id: eva-acme-md3d
278
- test_report_ids: [trp-acme-md3d]
279
- status: ACTIVE
280
- certificate_number: "R129/2020-A-EX2-24.01"
281
- scheme: A
282
- edition_year: 2020
283
- oiml_member_state: NETHERLANDS
284
- issue_date: "2024-03-20"
285
- expiry_date: "2029-03-20"
286
- periodicity_years: 5
287
- type_description: "Multi-dimensional measuring instrument for rectangular parcels: optical (laser triangulation) measuring frame over conveyor, automatic operation, AC mains supply. Measuring range 10–250 cm per axis, scale interval 1 cm, measuring speed 0.5–2.0 m/s, dimensional weight with F = 5000 cm³/kg."
288
- test_reports:
289
- - { report_number: "NMI-TR-2024-R129-001", date: "2024-03-10", pages: 48 }
290
- conditions:
291
- - "The instrument shall be operated within the temperature range +5 °C to +40 °C."
292
- - "The optical path shall be kept clean; the measuring frame shall be inspected per the maintenance schedule."
293
- - "The instrument shall be calibrated at intervals not exceeding 12 months."
294
- classifications:
295
- - { label: "Optical/Automatic", characteristics: { measurement_principle: optical, instrument_category: automatic, power_supply: ac-mains, object_capability: rectangular-only, scale_interval: "1 cm", min_dimension: "10 cm", max_dimension: "250 cm", speed_range: "0.5–2.0 m/s", temperature_range: "+5/+40 °C" } }
296
- revisions: []
297
- json_data:
298
- standard: "OIML R 129:2020"
299
- certificate_number: "R129/2020-A-EX2-24.01"
300
- scheme: A