@oimlsmart/primmel-packages 0.1.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.
- package/AGENTS.md +60 -0
- package/LICENSE +21 -0
- package/README.md +68 -0
- package/acme-cgm-200/model/cgm200.prl +284 -0
- package/acme-cgm-200/model/r144-map.prl +337 -0
- package/acme-cgm-200/package.primmel +39 -0
- package/acme-cgm-system/model/cgm-system.prl +125 -0
- package/acme-cgm-system/model/r144-map.prl +75 -0
- package/acme-cgm-system/model/sample-line.prl +42 -0
- package/acme-cgm-system/package.primmel +23 -0
- package/acme-lc500/model/lc500.prl +218 -0
- package/acme-lc500/model/passport.prl +43 -0
- package/acme-lc500/model/r60-map.prl +161 -0
- package/acme-lc500/model/twin-cert-map.prl +114 -0
- package/acme-lc500/package.primmel +35 -0
- package/acme-md3xx/model/md350.prl +317 -0
- package/acme-md3xx/model/r129-map.prl +346 -0
- package/acme-md3xx/package.primmel +49 -0
- package/acme-rs180/model/r91-map.prl +234 -0
- package/acme-rs180/model/rs180.prl +236 -0
- package/acme-rs180/package.primmel +47 -0
- package/ims-demo/model/ims.prl +23 -0
- package/ims-demo/model/isms-map.prl +60 -0
- package/ims-demo/model/qms-map.prl +73 -0
- package/ims-demo/package.primmel +42 -0
- package/isms-ref/model/isms.prl +34 -0
- package/isms-ref/package.primmel +35 -0
- package/iso-iec-17000/package.primmel +8 -0
- package/iso-iec-17000/terminology.prl +268 -0
- package/iso-iec-17025/package.primmel +10 -0
- package/iso-iec-17025/specification/requirements/lab.prl +474 -0
- package/iso-iec-17025/terminology.prl +72 -0
- package/iso-iec-17065/package.primmel +10 -0
- package/iso-iec-17065/specification/requirements/body.prl +446 -0
- package/iso-iec-17065/terminology.prl +103 -0
- package/iso-iec-17067/package.primmel +10 -0
- package/iso-iec-17067/specification/requirements/scheme-content.prl +300 -0
- package/iso-iec-17067/terminology.prl +24 -0
- package/oiml-cs/package.primmel +10 -0
- package/oiml-cs/specification/discrepancies.prl +26 -0
- package/oiml-cs/specification/requirements/cs.prl +515 -0
- package/oiml-cs-dataspace/.primmel-allowlist.prl +25 -0
- package/oiml-cs-dataspace/package.primmel +9 -0
- package/oiml-cs-dataspace/specification/dataspace.prl +73 -0
- package/oiml-cs-dataspace/specification/policies.prl +68 -0
- package/oiml-integrated-ref/model/probe-pairing.prl +71 -0
- package/oiml-integrated-ref/package.primmel +10 -0
- package/oiml-r129/.primmel-allowlist.prl +2 -0
- package/oiml-r129/evaluation/processes.prl +152 -0
- package/oiml-r129/evaluation/workflow.prl +48 -0
- package/oiml-r129/execution/forms/admin/adjustments-modifications.prl +30 -0
- package/oiml-r129/execution/forms/admin/checklist.prl +70 -0
- package/oiml-r129/execution/forms/admin/configuration.prl +31 -0
- package/oiml-r129/execution/forms/admin/equipment-info.prl +27 -0
- package/oiml-r129/execution/forms/admin/general-info.prl +63 -0
- package/oiml-r129/execution/forms/admin/identification.prl +49 -0
- package/oiml-r129/execution/forms/admin/sample-selection.prl +30 -0
- package/oiml-r129/execution/forms/admin/summary-results.prl +50 -0
- package/oiml-r129/execution/forms/emc/bursts.prl +88 -0
- package/oiml-r129/execution/forms/emc/esd.prl +66 -0
- package/oiml-r129/execution/forms/emc/low-voltage-battery.prl +58 -0
- package/oiml-r129/execution/forms/emc/rf-immunity-conducted.prl +59 -0
- package/oiml-r129/execution/forms/emc/rf-immunity-radiated.prl +59 -0
- package/oiml-r129/execution/forms/emc/surge.prl +61 -0
- package/oiml-r129/execution/forms/emc/voltage-dips.prl +62 -0
- package/oiml-r129/execution/forms/emc/voltage-variation.prl +58 -0
- package/oiml-r129/execution/forms/env/damp-heat-cyclic.prl +43 -0
- package/oiml-r129/execution/forms/env/damp-heat-steady.prl +50 -0
- package/oiml-r129/execution/forms/env/static-temperatures.prl +61 -0
- package/oiml-r129/execution/forms/shared/headers.prl +86 -0
- package/oiml-r129/execution/forms/tests/acoustics.prl +44 -0
- package/oiml-r129/execution/forms/tests/ambient-light.prl +46 -0
- package/oiml-r129/execution/forms/tests/construction-examination.prl +46 -0
- package/oiml-r129/execution/forms/tests/examination-checklist.prl +51 -0
- package/oiml-r129/execution/forms/tests/object-shape.prl +43 -0
- package/oiml-r129/execution/forms/tests/orientation-position.prl +31 -0
- package/oiml-r129/execution/forms/tests/repeatability.prl +65 -0
- package/oiml-r129/execution/forms/tests/speed-movement.prl +59 -0
- package/oiml-r129/execution/forms/tests/surface-characteristics.prl +44 -0
- package/oiml-r129/execution/forms/tests/warm-up-time.prl +35 -0
- package/oiml-r129/execution/subforms/dimension-measurement.prl +93 -0
- package/oiml-r129/layers.prl +50 -0
- package/oiml-r129/model/attributes.prl +243 -0
- package/oiml-r129/model/behaviors.prl +79 -0
- package/oiml-r129/model/capabilities.prl +29 -0
- package/oiml-r129/model/characteristics.prl +8 -0
- package/oiml-r129/model/conditions.prl +23 -0
- package/oiml-r129/model/instrument.prl +67 -0
- package/oiml-r129/model/state.prl +22 -0
- package/oiml-r129/model/twin.prl +23 -0
- package/oiml-r129/package.primmel +15 -0
- package/oiml-r129/payload/application.yaml +40 -0
- package/oiml-r129/payload/conditions-common-test.yaml +8 -0
- package/oiml-r129/payload/formulas-variants.yaml +33 -0
- package/oiml-r129/payload/promises.yaml +102 -0
- package/oiml-r129/payload/sample-data.yaml +300 -0
- package/oiml-r129/references.prl +306 -0
- package/oiml-r129/sources-prd/coverage.json +59 -0
- package/oiml-r129/sources-prd/r129-1.sentences.json +4238 -0
- package/oiml-r129/sources-prd/r129-2.sentences.json +1139 -0
- package/oiml-r129/sources-prd/r129-3.sentences.json +3809 -0
- package/oiml-r129/sources-prd/r129-4.sentences.json +1227 -0
- package/oiml-r129/specification/calculations.prl +83 -0
- package/oiml-r129/specification/conformance/disturbance-tests.prl +212 -0
- package/oiml-r129/specification/conformance/effect-tests.prl +70 -0
- package/oiml-r129/specification/conformance/examinations.prl +83 -0
- package/oiml-r129/specification/conformance/metrological-tests.prl +178 -0
- package/oiml-r129/specification/formulas.prl +9 -0
- package/oiml-r129/specification/requirements/electronic.prl +46 -0
- package/oiml-r129/specification/requirements/metrological.prl +83 -0
- package/oiml-r129/specification/requirements/object-limitations.prl +99 -0
- package/oiml-r129/specification/requirements/software.prl +57 -0
- package/oiml-r129/specification/requirements/technical.prl +134 -0
- package/oiml-r129/specification/symbols.prl +187 -0
- package/oiml-r129/specification/tables.prl +74 -0
- package/oiml-r129/terminology.prl +415 -0
- package/oiml-r129/value-types.prl +40 -0
- package/oiml-r144/.primmel-allowlist.prl +2 -0
- package/oiml-r144/entities/instrument.prl +360 -0
- package/oiml-r144/entities/test-execution.prl +228 -0
- package/oiml-r144/entities/workflow.prl +2075 -0
- package/oiml-r144/evaluation/processes.prl +152 -0
- package/oiml-r144/evaluation/workflow.prl +48 -0
- package/oiml-r144/execution/forms/sec-3-report/03-01-laboratory-info.prl +19 -0
- package/oiml-r144/execution/forms/sec-3-report/03-02-test-location.prl +14 -0
- package/oiml-r144/execution/forms/sec-3-report/03-03-manufacturer-info.prl +18 -0
- package/oiml-r144/execution/forms/sec-3-report/03-04-applicant-info.prl +19 -0
- package/oiml-r144/execution/forms/sec-3-report/03-05-type-identification.prl +80 -0
- package/oiml-r144/execution/forms/sec-3-report/03-06-type-composition.prl +31 -0
- package/oiml-r144/execution/forms/sec-3-report/03-07-visual-examination.prl +46 -0
- package/oiml-r144/execution/forms/sec-3-report/03-08-test-conclusions.prl +46 -0
- package/oiml-r144/execution/forms/sec-3-report/03-09-general-conclusion.prl +19 -0
- package/oiml-r144/execution/forms/sec-3-report/03-10-responsible-persons.prl +27 -0
- package/oiml-r144/execution/forms/sec-tests/ambient-pressure-test.prl +59 -0
- package/oiml-r144/execution/forms/sec-tests/bursts-mains-test.prl +52 -0
- package/oiml-r144/execution/forms/sec-tests/bursts-signal-test.prl +55 -0
- package/oiml-r144/execution/forms/sec-tests/cold-test.prl +48 -0
- package/oiml-r144/execution/forms/sec-tests/cross-sensitivity-test.prl +92 -0
- package/oiml-r144/execution/forms/sec-tests/damp-heat-test.prl +50 -0
- package/oiml-r144/execution/forms/sec-tests/documentation-examination.prl +52 -0
- package/oiml-r144/execution/forms/sec-tests/drift-test.prl +83 -0
- package/oiml-r144/execution/forms/sec-tests/dry-heat-test.prl +53 -0
- package/oiml-r144/execution/forms/sec-tests/error-determination.prl +37 -0
- package/oiml-r144/execution/forms/sec-tests/esd-test.prl +53 -0
- package/oiml-r144/execution/forms/sec-tests/flow-spillover-test.prl +83 -0
- package/oiml-r144/execution/forms/sec-tests/leakproofness-test.prl +41 -0
- package/oiml-r144/execution/forms/sec-tests/low-battery-test.prl +48 -0
- package/oiml-r144/execution/forms/sec-tests/power-reduction-test.prl +49 -0
- package/oiml-r144/execution/forms/sec-tests/power-supply-test.prl +57 -0
- package/oiml-r144/execution/forms/sec-tests/repeatability-test.prl +60 -0
- package/oiml-r144/execution/forms/sec-tests/response-time-test.prl +43 -0
- package/oiml-r144/execution/forms/sec-tests/rf-emf-test.prl +47 -0
- package/oiml-r144/execution/forms/sec-tests/shock-test.prl +50 -0
- package/oiml-r144/execution/forms/sec-tests/surge-test.prl +52 -0
- package/oiml-r144/execution/forms/sec-tests/vibration-test.prl +58 -0
- package/oiml-r144/execution/forms/sec-tests/warm-up-time-test.prl +69 -0
- package/oiml-r144/execution/forms/shared/headers.prl +132 -0
- package/oiml-r144/execution/subforms/cgm-point.prl +99 -0
- package/oiml-r144/layers.prl +44 -0
- package/oiml-r144/model/attributes.prl +679 -0
- package/oiml-r144/model/behaviors.prl +117 -0
- package/oiml-r144/model/capabilities.prl +99 -0
- package/oiml-r144/model/characteristics.prl +27 -0
- package/oiml-r144/model/conditions.prl +46 -0
- package/oiml-r144/model/instrument.prl +85 -0
- package/oiml-r144/model/state.prl +18 -0
- package/oiml-r144/model/twin.prl +25 -0
- package/oiml-r144/package.primmel +15 -0
- package/oiml-r144/payload/application.yaml +80 -0
- package/oiml-r144/payload/attributes-pair-list.yaml +18 -0
- package/oiml-r144/payload/conditions-common-test.yaml +74 -0
- package/oiml-r144/payload/formulas-variants.yaml +32 -0
- package/oiml-r144/payload/promises.yaml +118 -0
- package/oiml-r144/payload/sample-data.yaml +643 -0
- package/oiml-r144/references.prl +594 -0
- package/oiml-r144/sources-prd/coverage.json +114 -0
- package/oiml-r144/sources-prd/r144-1.sentences.json +2797 -0
- package/oiml-r144/sources-prd/r144-2.sentences.json +1627 -0
- package/oiml-r144/sources-prd/r144-3.sentences.json +838 -0
- package/oiml-r144/specification/calculations.prl +123 -0
- package/oiml-r144/specification/conformance/examination.prl +87 -0
- package/oiml-r144/specification/conformance/performance-tests.prl +755 -0
- package/oiml-r144/specification/formulas.prl +37 -0
- package/oiml-r144/specification/reference-materials.prl +87 -0
- package/oiml-r144/specification/requirements/controls.prl +51 -0
- package/oiml-r144/specification/requirements/metrological.prl +299 -0
- package/oiml-r144/specification/requirements/report.prl +35 -0
- package/oiml-r144/specification/requirements/technical.prl +455 -0
- package/oiml-r144/specification/symbols.prl +357 -0
- package/oiml-r144/specification/tables.prl +95 -0
- package/oiml-r144/specification/test-point-sets.prl +15 -0
- package/oiml-r144/terminology.prl +308 -0
- package/oiml-r144/value-types.prl +49 -0
- package/oiml-r60/.primmel-allowlist.prl +2 -0
- package/oiml-r60/entities/workflow.prl +2079 -0
- package/oiml-r60/evaluation/processes.prl +152 -0
- package/oiml-r60/evaluation/workflow.prl +48 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-01-authority-info.prl +76 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-02-synopsis.prl +20 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-03-01-examinations.prl +27 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-03-02-a-performance-general.prl +81 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-03-02-b-performance-digital.prl +104 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-04-01-manufacturer.prl +21 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-04-02-applicant.prl +44 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-04-03-testing-laboratories.prl +69 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-05-load-cell-type-info.prl +83 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-06-accessories.prl +41 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-07-sample-selection.prl +71 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-01-general-info.prl +103 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-02-performance-info.prl +66 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-03-digital-info.prl +35 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-04-photographs.prl +12 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-05-documentation.prl +27 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-06-inscriptions.prl +126 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-07-model-range.prl +143 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-12-previous-tests.prl +26 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-01-force-generating-system.prl +89 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-02-weights.prl +61 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-03-temperature-chamber.prl +96 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-04-climate-chamber.prl +96 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-05-indicator.prl +92 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-06-terminal.prl +86 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-07-barometric-pressure-meter.prl +62 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-08-thermometer.prl +62 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-09-moisture-analyser.prl +62 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-10-additional-test-equipment.prl +69 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-11-remarks.prl +11 -0
- package/oiml-r60/execution/forms/sec-4-evaluation-report/test-usage-matrix.prl +85 -0
- package/oiml-r60/execution/forms/sec-5-examination/documentation-examination.prl +53 -0
- package/oiml-r60/execution/forms/sec-5-examination/marking-examination.prl +104 -0
- package/oiml-r60/execution/forms/sec-5-examination/software-examination.prl +86 -0
- package/oiml-r60/execution/forms/sec-5-examination/suitability-examination.prl +56 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/barometric-pressure.prl +176 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/bursts.prl +129 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/conducted-emc.prl +170 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/creep-dr.prl +327 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/emc-susceptibility.prl +115 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/esd.prl +224 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/humidity-ch.prl +300 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/humidity-sh.prl +235 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/initial-tests.prl +129 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/load-cell-errors.prl +280 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/load-test.prl +29 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/performance-test-summary.prl +82 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/power-voltage.prl +166 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/repeatability.prl +189 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/short-time-power.prl +98 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/span-stability.prl +242 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/surge.prl +142 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/temperature-mdlo.prl +180 -0
- package/oiml-r60/execution/forms/sec-6-performance-tests/warm-up-time.prl +207 -0
- package/oiml-r60/execution/forms/shared/headers.prl +255 -0
- package/oiml-r60/execution/subforms/load-test-row.prl +55 -0
- package/oiml-r60/execution/subforms/test-procedures.prl +33 -0
- package/oiml-r60/layers.prl +46 -0
- package/oiml-r60/model/attributes.prl +642 -0
- package/oiml-r60/model/behaviors.prl +165 -0
- package/oiml-r60/model/capabilities.prl +57 -0
- package/oiml-r60/model/characteristics.prl +27 -0
- package/oiml-r60/model/conditions.prl +50 -0
- package/oiml-r60/model/instrument.prl +96 -0
- package/oiml-r60/model/processes.prl +54 -0
- package/oiml-r60/model/state.prl +22 -0
- package/oiml-r60/model/twin.prl +16 -0
- package/oiml-r60/package.primmel +16 -0
- package/oiml-r60/payload/annexes-part4.yaml +122 -0
- package/oiml-r60/payload/application.yaml +83 -0
- package/oiml-r60/payload/conditions-common-test.yaml +121 -0
- package/oiml-r60/payload/formulas-variants.yaml +55 -0
- package/oiml-r60/payload/promises.yaml +224 -0
- package/oiml-r60/payload/sample-data.yaml +5025 -0
- package/oiml-r60/payload/symbols-formula-notes.yaml +21 -0
- package/oiml-r60/references.prl +549 -0
- package/oiml-r60/sources-prd/coverage.json +740 -0
- package/oiml-r60/sources-prd/r60-1.sentences.json +2173 -0
- package/oiml-r60/sources-prd/r60-2.sentences.json +2961 -0
- package/oiml-r60/sources-prd/r60-3.sentences.json +4212 -0
- package/oiml-r60/sources-prd/r60-a.sentences.json +3361 -0
- package/oiml-r60/specification/calculations.prl +318 -0
- package/oiml-r60/specification/conformance/class-specific.prl +1120 -0
- package/oiml-r60/specification/conformance/electronic.prl +483 -0
- package/oiml-r60/specification/conformance/examination.prl +183 -0
- package/oiml-r60/specification/conformance/metrological.prl +478 -0
- package/oiml-r60/specification/constraints.prl +58 -0
- package/oiml-r60/specification/formulas-used.prl +43 -0
- package/oiml-r60/specification/formulas.prl +20 -0
- package/oiml-r60/specification/requirements/class-specific.prl +655 -0
- package/oiml-r60/specification/requirements/classification.prl +114 -0
- package/oiml-r60/specification/requirements/electronic.prl +222 -0
- package/oiml-r60/specification/requirements/metrological.prl +381 -0
- package/oiml-r60/specification/requirements/technical.prl +146 -0
- package/oiml-r60/specification/symbols.prl +599 -0
- package/oiml-r60/specification/tables.prl +182 -0
- package/oiml-r60/specification/test-sequences.prl +72 -0
- package/oiml-r60/terminology.prl +920 -0
- package/oiml-r60/value-types.prl +46 -0
- package/oiml-r91/.primmel-allowlist.prl +3 -0
- package/oiml-r91/entities/instrument.prl +359 -0
- package/oiml-r91/entities/workflow.prl +2075 -0
- package/oiml-r91/evaluation/processes.prl +152 -0
- package/oiml-r91/evaluation/workflow.prl +48 -0
- package/oiml-r91/execution/forms/evidence-file.prl +41 -0
- package/oiml-r91/execution/forms/report-evaluation/appraisal.prl +30 -0
- package/oiml-r91/execution/forms/report-evaluation/checklist-summary.prl +43 -0
- package/oiml-r91/execution/forms/report-evaluation/checklist.prl +76 -0
- package/oiml-r91/execution/forms/report-evaluation/configuration-samples.prl +22 -0
- package/oiml-r91/execution/forms/report-evaluation/corrective-actions.prl +24 -0
- package/oiml-r91/execution/forms/report-evaluation/descriptions.prl +47 -0
- package/oiml-r91/execution/forms/report-evaluation/evaluation-identification.prl +219 -0
- package/oiml-r91/execution/forms/report-evaluation/test-report-summary.prl +33 -0
- package/oiml-r91/execution/forms/report-general/adjustments.prl +12 -0
- package/oiml-r91/execution/forms/report-general/alignment-aiming.prl +17 -0
- package/oiml-r91/execution/forms/report-general/checking-facility.prl +17 -0
- package/oiml-r91/execution/forms/report-general/configuration.prl +12 -0
- package/oiml-r91/execution/forms/report-general/identification.prl +216 -0
- package/oiml-r91/execution/forms/report-general/indications-controls.prl +17 -0
- package/oiml-r91/execution/forms/report-general/sealing.prl +21 -0
- package/oiml-r91/execution/forms/report-general/software-description.prl +26 -0
- package/oiml-r91/execution/forms/report-general/summary-environmental.prl +35 -0
- package/oiml-r91/execution/forms/report-general/summary-tests.prl +35 -0
- package/oiml-r91/execution/forms/report-general/test-equipment.prl +36 -0
- package/oiml-r91/execution/forms/report-general/test-interface.prl +16 -0
- package/oiml-r91/execution/forms/report-tests/01-01-field-test.prl +84 -0
- package/oiml-r91/execution/forms/report-tests/01-02-statistical-analysis.prl +76 -0
- package/oiml-r91/execution/forms/report-tests/01-03-image-evidence.prl +30 -0
- package/oiml-r91/execution/forms/report-tests/02-01-dynamic-performance.prl +92 -0
- package/oiml-r91/execution/forms/report-tests/02-02-speed-linearity.prl +23 -0
- package/oiml-r91/execution/forms/report-tests/02-03-distance-linearity.prl +67 -0
- package/oiml-r91/execution/forms/report-tests/02-04-angle-linearity.prl +59 -0
- package/oiml-r91/execution/forms/report-tests/03-01-dry-heat-operating.prl +38 -0
- package/oiml-r91/execution/forms/report-tests/03-02-dry-heat-storage.prl +48 -0
- package/oiml-r91/execution/forms/report-tests/03-03-cold-operating.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/03-04-cold-storage.prl +48 -0
- package/oiml-r91/execution/forms/report-tests/03-05-damp-heat-cyclic.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/03-06-water.prl +48 -0
- package/oiml-r91/execution/forms/report-tests/03-07-sand-and-dust.prl +48 -0
- package/oiml-r91/execution/forms/report-tests/03-08-salt-mist.prl +48 -0
- package/oiml-r91/execution/forms/report-tests/03-09-vibration-random.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/03-10-mechanical-shock.prl +48 -0
- package/oiml-r91/execution/forms/report-tests/03-11-dc-mains-voltage-variation.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/03-12-ripple-on-dc-mains.prl +47 -0
- package/oiml-r91/execution/forms/report-tests/03-13-ac-mains-voltage-variation.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/03-14-ac-mains-frequency-variation.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/03-15-dc-mains-voltage-dips.prl +46 -0
- package/oiml-r91/execution/forms/report-tests/03-16-ac-mains-voltage-dips.prl +46 -0
- package/oiml-r91/execution/forms/report-tests/03-17-ac-mains-frequency-harmonics.prl +47 -0
- package/oiml-r91/execution/forms/report-tests/03-18-vlf-lf-disturbances.prl +46 -0
- package/oiml-r91/execution/forms/report-tests/03-19-bursts-ac-dc-mains.prl +44 -0
- package/oiml-r91/execution/forms/report-tests/03-20-surges-ac-dc-mains.prl +45 -0
- package/oiml-r91/execution/forms/report-tests/03-21-bursts-signal-lines.prl +45 -0
- package/oiml-r91/execution/forms/report-tests/03-22-surges-signal-lines.prl +46 -0
- package/oiml-r91/execution/forms/report-tests/03-23-ac-mains-magnetic-field.prl +45 -0
- package/oiml-r91/execution/forms/report-tests/03-24-conducted-rf-common-mode.prl +46 -0
- package/oiml-r91/execution/forms/report-tests/03-25-rf-electromagnetic-fields.prl +49 -0
- package/oiml-r91/execution/forms/report-tests/03-26-electrostatic-discharges.prl +47 -0
- package/oiml-r91/execution/forms/report-tests/03-27-internal-battery-low-voltage.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/03-28-road-vehicle-battery.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/03-29-transient-supply-lines.prl +47 -0
- package/oiml-r91/execution/forms/report-tests/03-30-transient-other-lines.prl +45 -0
- package/oiml-r91/execution/forms/report-tests/03-31-battery-cranking.prl +45 -0
- package/oiml-r91/execution/forms/report-tests/03-32-load-dump.prl +47 -0
- package/oiml-r91/execution/forms/report-tests/03-33-acceleration.prl +66 -0
- package/oiml-r91/execution/forms/report-tests/03-34-further-influence.prl +60 -0
- package/oiml-r91/execution/forms/report-tests/03-35-installation-alignment.prl +29 -0
- package/oiml-r91/execution/forms/report-tests/04-01-doppler-radar.prl +43 -0
- package/oiml-r91/execution/forms/report-tests/04-02-range-finding.prl +42 -0
- package/oiml-r91/execution/forms/report-tests/04-03-average-speed.prl +41 -0
- package/oiml-r91/execution/forms/report-tests/04-04-fixed-distance.prl +40 -0
- package/oiml-r91/execution/forms/report-tests/04-05-image-based.prl +41 -0
- package/oiml-r91/execution/forms/report-tests/04-06-across-road.prl +42 -0
- package/oiml-r91/execution/forms/report-tests/05-01-moving-field-test.prl +29 -0
- package/oiml-r91/execution/forms/report-tests/05-02-ego-field-test.prl +57 -0
- package/oiml-r91/execution/forms/report-tests/05-03-moving-traffic-simulation.prl +31 -0
- package/oiml-r91/execution/forms/report-tests/06-01-software-general.prl +25 -0
- package/oiml-r91/execution/forms/report-tests/06-02-software-protection.prl +25 -0
- package/oiml-r91/execution/forms/report-tests/06-03-software-hardware-support.prl +24 -0
- package/oiml-r91/execution/forms/report-tests/06-04-software-separation.prl +25 -0
- package/oiml-r91/execution/forms/report-tests/06-05-software-maintenance.prl +24 -0
- package/oiml-r91/execution/forms/report-tests/07-general-remarks.prl +11 -0
- package/oiml-r91/execution/forms/shared/header-a.prl +63 -0
- package/oiml-r91/execution/subforms/software-matrix-row.prl +30 -0
- package/oiml-r91/execution/subforms/speed-measurement-row.prl +38 -0
- package/oiml-r91/layers.prl +46 -0
- package/oiml-r91/model/artifacts.prl +29 -0
- package/oiml-r91/model/attributes.prl +698 -0
- package/oiml-r91/model/behaviors.prl +142 -0
- package/oiml-r91/model/capabilities.prl +88 -0
- package/oiml-r91/model/characteristics.prl +27 -0
- package/oiml-r91/model/conditions.prl +37 -0
- package/oiml-r91/model/instrument.prl +147 -0
- package/oiml-r91/model/state.prl +22 -0
- package/oiml-r91/model/twin.prl +17 -0
- package/oiml-r91/package.primmel +14 -0
- package/oiml-r91/payload/application.yaml +201 -0
- package/oiml-r91/payload/conditions-common-test.yaml +19 -0
- package/oiml-r91/payload/promises.yaml +142 -0
- package/oiml-r91/payload/sample-data.yaml +464 -0
- package/oiml-r91/references.prl +72 -0
- package/oiml-r91/sources-prd/coverage.json +106 -0
- package/oiml-r91/sources-prd/r91-1.sentences.json +4696 -0
- package/oiml-r91/sources-prd/r91-2.sentences.json +2067 -0
- package/oiml-r91/sources-prd/r91-3.sentences.json +5210 -0
- package/oiml-r91/sources-prd/r91-4.sentences.json +474 -0
- package/oiml-r91/specification/calculations.prl +26 -0
- package/oiml-r91/specification/conformance/influence-disturbance.prl +1792 -0
- package/oiml-r91/specification/conformance/metrological.prl +906 -0
- package/oiml-r91/specification/formulas.prl +10 -0
- package/oiml-r91/specification/requirements/class-specific.prl +308 -0
- package/oiml-r91/specification/requirements/metrological.prl +176 -0
- package/oiml-r91/specification/requirements/technical.prl +173 -0
- package/oiml-r91/specification/symbols.prl +323 -0
- package/oiml-r91/specification/tables.prl +136 -0
- package/oiml-r91/terminology.prl +535 -0
- package/oiml-r91/value-types.prl +26 -0
- package/oiml-smart-core/entities/comments.prl +101 -0
- package/oiml-smart-core/entities/cs-operations.prl +492 -0
- package/oiml-smart-core/entities/cs-participants.prl +470 -0
- package/oiml-smart-core/entities/engagement.prl +323 -0
- package/oiml-smart-core/entities/instrument.prl +359 -0
- package/oiml-smart-core/entities/module-b.prl +214 -0
- package/oiml-smart-core/entities/operated-schemes.prl +141 -0
- package/oiml-smart-core/entities/parties.prl +429 -0
- package/oiml-smart-core/entities/payment-records.prl +92 -0
- package/oiml-smart-core/entities/verification.prl +187 -0
- package/oiml-smart-core/entities/workflow.prl +2075 -0
- package/oiml-smart-core/evaluation/roles.prl +65 -0
- package/oiml-smart-core/evaluation/state-machines.prl +1157 -0
- package/oiml-smart-core/package.primmel +10 -0
- package/oiml-smart-core/specification/competence-kinds.prl +64 -0
- package/oiml-smart-core/specification/constraints.prl +40 -0
- package/oiml-smart-core/specification/invariants.prl +90 -0
- package/oiml-smart-core/specification/predicates.prl +116 -0
- package/oiml-smart-module-emc-disturbances/package.primmel +10 -0
- package/oiml-smart-module-env-iec60068/package.primmel +10 -0
- package/oiml-smart-module-examination-docs/package.primmel +10 -0
- package/oiml-smart-module-reference-materials/package.primmel +10 -0
- package/oiml-smart-module-report-headers/package.primmel +10 -0
- package/oiml-smart-module-software-d31/package.primmel +10 -0
- package/oiml-smart-module-specimen-governance/entities/test-execution.prl +228 -0
- package/oiml-smart-module-specimen-governance/package.primmel +10 -0
- package/oiml-twin-cert/documents/tw-1/document.yaml +454 -0
- package/oiml-twin-cert/evaluation/roles.prl +15 -0
- package/oiml-twin-cert/execution/forms/probe-creep.prl +179 -0
- package/oiml-twin-cert/execution/forms/probe.prl +99 -0
- package/oiml-twin-cert/execution/forms/static-conformance.prl +50 -0
- package/oiml-twin-cert/model/attributes.prl +243 -0
- package/oiml-twin-cert/model/behaviors.prl +8 -0
- package/oiml-twin-cert/model/characteristics.prl +18 -0
- package/oiml-twin-cert/model/monitors.prl +16 -0
- package/oiml-twin-cert/package.primmel +16 -0
- package/oiml-twin-cert/specification/conformance/twin-fidelity.prl +176 -0
- package/oiml-twin-cert/specification/requirements/twin-fidelity.prl +137 -0
- package/oiml-twin-cert/specification/symbols.prl +36 -0
- package/oiml-twin-cert/terminology.prl +8 -0
- package/oimlsmart-primmel-packages-0.1.0.tgz +0 -0
- package/package.json +17 -0
- package/qms-ref/model/qms.prl +31 -0
- package/qms-ref/package.primmel +38 -0
- package/quarry-belt-scale/model/ops.prl +115 -0
- package/quarry-belt-scale/package.primmel +36 -0
|
@@ -0,0 +1,2079 @@
|
|
|
1
|
+
class Application#data {
|
|
2
|
+
store { applications }
|
|
3
|
+
indexes { manufacturer_id status standard_id model_family_id }
|
|
4
|
+
id: string {
|
|
5
|
+
modality SHALL
|
|
6
|
+
}
|
|
7
|
+
standard_id: string {
|
|
8
|
+
modality SHALL
|
|
9
|
+
}
|
|
10
|
+
application_number: string {
|
|
11
|
+
modality SHALL
|
|
12
|
+
}
|
|
13
|
+
date_of_application: date {
|
|
14
|
+
modality SHALL
|
|
15
|
+
}
|
|
16
|
+
status: enum {
|
|
17
|
+
modality SHALL
|
|
18
|
+
definition "Includes sample-receipt steps per TODO.UPGRADE/01 and the ia_requests_changes/applicant_resubmits loop (CHANGES_REQUESTED) per state-machines.yaml; COMPLETED is the Evaluation Project's settled terminal (the demo-flows program's completion gate: the ia_marks_completed hop declares the completion_settled guard — the transition refuses while specification/constraints.prl's settling constraints stand violated)"
|
|
19
|
+
enum_values { DRAFT SUBMITTED SAMPLES_REQUESTED SAMPLES_RECEIVED UNDER_REVIEW CHANGES_REQUESTED ACCEPTED REJECTED WITHDRAWN COMPLETED }
|
|
20
|
+
}
|
|
21
|
+
model_family_id: reference(MeasuringInstrumentModelFamily) [0..1] {
|
|
22
|
+
modality MAY
|
|
23
|
+
definition "The instrument family this application covers (matrix model)"
|
|
24
|
+
on_delete restrict
|
|
25
|
+
required false
|
|
26
|
+
}
|
|
27
|
+
model_ids: reference(MeasuringInstrumentModel) [0..*] {
|
|
28
|
+
modality MAY
|
|
29
|
+
definition "In-scope matrix members the applicant declares"
|
|
30
|
+
on_delete nullify
|
|
31
|
+
required false
|
|
32
|
+
}
|
|
33
|
+
sample_ids: reference(MeasuringInstrumentSample) [0..*] {
|
|
34
|
+
modality MAY
|
|
35
|
+
definition "Physical samples logged against this application"
|
|
36
|
+
on_delete nullify
|
|
37
|
+
required false
|
|
38
|
+
}
|
|
39
|
+
applicant: reference(ApplicantInfo) {
|
|
40
|
+
modality SHALL
|
|
41
|
+
}
|
|
42
|
+
authorised_representative: reference(AuthorisedRep) [0..1] {
|
|
43
|
+
modality MAY
|
|
44
|
+
}
|
|
45
|
+
no_concurrent_application: boolean [0..1] {
|
|
46
|
+
modality MAY
|
|
47
|
+
}
|
|
48
|
+
instrument_id: reference(MeasuringInstrumentModel) [0..1] {
|
|
49
|
+
modality MAY
|
|
50
|
+
definition "DEPRECATED — legacy single-model link (was required pre-matrix). Use model_family_id + model_ids."
|
|
51
|
+
on_delete restrict
|
|
52
|
+
deprecated true
|
|
53
|
+
required false
|
|
54
|
+
}
|
|
55
|
+
manufacturer_id: reference(Manufacturer) {
|
|
56
|
+
modality SHALL
|
|
57
|
+
on_delete restrict
|
|
58
|
+
required true
|
|
59
|
+
}
|
|
60
|
+
model: string [0..1] {
|
|
61
|
+
modality MAY
|
|
62
|
+
definition "DEPRECATED — legacy model name string. Use model_ids / MeasuringInstrumentModel.model_designation."
|
|
63
|
+
deprecated true
|
|
64
|
+
}
|
|
65
|
+
type_designation: string [0..1] {
|
|
66
|
+
modality MAY
|
|
67
|
+
}
|
|
68
|
+
description: text [0..1] {
|
|
69
|
+
modality MAY
|
|
70
|
+
}
|
|
71
|
+
operation_description: text [0..1] {
|
|
72
|
+
modality MAY
|
|
73
|
+
}
|
|
74
|
+
dimensions: object [0..1] {
|
|
75
|
+
modality MAY
|
|
76
|
+
definition "DEPRECATED — legacy free-form dimension selections. Dimensions now live on the subject chain classification maps."
|
|
77
|
+
deprecated true
|
|
78
|
+
}
|
|
79
|
+
manufacturer_documentation: reference(DocumentRef) [0..*] {
|
|
80
|
+
modality MAY
|
|
81
|
+
}
|
|
82
|
+
agreement_evidence: reference(DocumentRef) [0..*] {
|
|
83
|
+
modality MAY
|
|
84
|
+
definition "The negotiation-evidence facility (the demo-flows program, DEMO_FLOWS/00): the IA↔applicant fee negotiation (and the IA↔TL negotiation) runs OUTSIDE the system, but the parties keep the EVIDENCE of agreement on the project's record — the contract/agreement document uploads to the document store against the project (the owning entity's visibility cone governs exactly the parties' read; ISO/IEC 17065:2012, 4.1.2 the legally enforceable agreement), marked as the agreement's evidence with the store's attested SHA-256, and every upload journals an audit event. The project anchor (this field) is the certification flow's record; the engagement's ConsultingAgreement documents stay the pre-application funnel's anchor (TODO.federation/02) — both cones honest."
|
|
85
|
+
}
|
|
86
|
+
sample_information: reference(SampleInfo) [0..1] {
|
|
87
|
+
modality MAY
|
|
88
|
+
}
|
|
89
|
+
sample_request: reference(SampleRequest) [0..1] {
|
|
90
|
+
modality MAY
|
|
91
|
+
definition "The IA's outstanding or answered sample request (PD-05 §4.3) — recorded when the application enters SAMPLES_REQUESTED; the applicant ships against it (manufacturer_ships per sample), receipt is logged by the receiver"
|
|
92
|
+
}
|
|
93
|
+
previous_test_reports: reference(PreviousTestReportRef) [0..*] {
|
|
94
|
+
modality MAY
|
|
95
|
+
definition "Previous evaluation reports for abbreviated testing (PD-05 §4.3.3)"
|
|
96
|
+
}
|
|
97
|
+
scheme: enum [0..1] {
|
|
98
|
+
modality MAY
|
|
99
|
+
enum_values { A B }
|
|
100
|
+
}
|
|
101
|
+
operated_scheme_id: string [0..1] {
|
|
102
|
+
modality MAY
|
|
103
|
+
definition "TODO.adoption/05: the certification scheme this application seeks certification under: the id of an OperatedScheme record; absent reads as the built-in OIML-CS scheme (oiml-cs). The TEP runs per scheme; the issued certificate carries the scheme forward"
|
|
104
|
+
}
|
|
105
|
+
issuing_authority_id: reference(IssuingAuthority) [0..1] {
|
|
106
|
+
modality MAY
|
|
107
|
+
on_delete nullify
|
|
108
|
+
required false
|
|
109
|
+
}
|
|
110
|
+
laboratory_id: reference(TestLaboratory) [0..1] {
|
|
111
|
+
modality MAY
|
|
112
|
+
on_delete nullify
|
|
113
|
+
required false
|
|
114
|
+
}
|
|
115
|
+
anr_countries: string[] [0..*] {
|
|
116
|
+
modality MAY
|
|
117
|
+
}
|
|
118
|
+
applied_anrs: reference(AppliedAnr) [0..*] {
|
|
119
|
+
modality MAY
|
|
120
|
+
definition "Scheme A (PD-05 §5.1.4): the additional national requirement tests the applicant applies for, on the basis of the ANRs listed in a Utilizer/Associate OIML-CS Declaration; discharged at evaluation (§5.3.2/§5.4.2) and validated by the IA's letter to the BIML (§5.6.3)."
|
|
121
|
+
}
|
|
122
|
+
fee_acceptance: reference(FeeAcceptance) [0..1] {
|
|
123
|
+
modality MAY
|
|
124
|
+
}
|
|
125
|
+
ia_review_result: reference(IAReviewResult) [0..1] {
|
|
126
|
+
modality MAY
|
|
127
|
+
definition "IA review outcome per PD-05 §4.2"
|
|
128
|
+
}
|
|
129
|
+
documentation: reference(ApplicationDocument) [1..*] {
|
|
130
|
+
modality SHALL
|
|
131
|
+
}
|
|
132
|
+
submitted_date: datetime [0..1] {
|
|
133
|
+
modality MAY
|
|
134
|
+
}
|
|
135
|
+
reviewed_date: datetime [0..1] {
|
|
136
|
+
modality MAY
|
|
137
|
+
}
|
|
138
|
+
completed_date: datetime [0..1] {
|
|
139
|
+
modality MAY
|
|
140
|
+
definition "When the Evaluation Project was marked COMPLETED (the ia_marks_completed hop — the completion gate's settling conditions all held: every fee marked paid, every sample's custody closed, every review thread resolved, the reports finalized, the certificate issued and registered)"
|
|
141
|
+
}
|
|
142
|
+
reviewer: string [0..1] {
|
|
143
|
+
modality MAY
|
|
144
|
+
}
|
|
145
|
+
review_notes: text [0..1] {
|
|
146
|
+
modality MAY
|
|
147
|
+
}
|
|
148
|
+
rejection_reason: text [0..1] {
|
|
149
|
+
modality MAY
|
|
150
|
+
definition "Required if status is REJECTED (PD-05 §4.2.2)"
|
|
151
|
+
}
|
|
152
|
+
engagement_id: reference(Engagement) [0..1] {
|
|
153
|
+
modality MAY
|
|
154
|
+
definition "The pre-application engagement this application converted from (TODO.federation/02 — the NMI profile's white-gloves phase); absent on direct portal applications"
|
|
155
|
+
on_delete nullify
|
|
156
|
+
required false
|
|
157
|
+
}
|
|
158
|
+
entered_by: string [0..1] {
|
|
159
|
+
modality MAY
|
|
160
|
+
definition "The officer who entered the application on the applicant's behalf (TODO.federation/03 — the NMI profile's white-gloves path; ISO/IEC 17065:2012, 7.2 — the body obtains the application information from the client). Absent on a self-served portal application; the audit events carry the full actor record."
|
|
161
|
+
}
|
|
162
|
+
on_behalf_of: reference(Manufacturer) [0..1] {
|
|
163
|
+
modality MAY
|
|
164
|
+
definition "The applicant organization the application was entered on behalf of (TODO.federation/03) — equals manufacturer_id on a white-gloves entry; absent on a self-served one. The entered_by + on_behalf_of pair is the white-gloves provenance marker."
|
|
165
|
+
on_delete nullify
|
|
166
|
+
required false
|
|
167
|
+
}
|
|
168
|
+
applicant_org_id: string [0..1] {
|
|
169
|
+
modality MAY
|
|
170
|
+
definition "The applicant ACCOUNT's organization id (TODO.register/02): the OP-minted org id the application belongs to, bound at creation — the self-served portal entry stamps the session's active org (the server stamps it again at the write, never trusting the client), the white-gloves entry carries the picked applicant org. The certificate issued from this application carries the same org id as its holder-org descriptor (json_data.holder_org), the federation registration package transports it, and the hub's register attributes the registered certificate to it. Absent on pre-program and records-mode rows — the hub's one-time claim act attributes those by holder-name match with estate-admin confirmation."
|
|
171
|
+
}
|
|
172
|
+
test_report_id: reference(TestReport) [0..1] {
|
|
173
|
+
modality MAY
|
|
174
|
+
on_delete nullify
|
|
175
|
+
required false
|
|
176
|
+
}
|
|
177
|
+
evaluation_report_id: reference(EvaluationReport) [0..1] {
|
|
178
|
+
modality MAY
|
|
179
|
+
on_delete nullify
|
|
180
|
+
required false
|
|
181
|
+
}
|
|
182
|
+
certificate_id: reference(Certificate) [0..1] {
|
|
183
|
+
modality MAY
|
|
184
|
+
on_delete nullify
|
|
185
|
+
required false
|
|
186
|
+
}
|
|
187
|
+
origin: enum [0..1] {
|
|
188
|
+
modality MAY
|
|
189
|
+
definition "How this record came to exist: platform_workflow (the DEFAULT — an absent origin reads as platform_workflow) or registered_offline (TODO.adoption/02 — records mode: the underlying act was performed offline, in the files-and-folders practice the conformity map's section 5 names (docs/adoption/cspd-conformity-map.md, gaps G1/G7/G8/G10), and is registered after the fact by a named officer; a registered_offline record never masquerades as platform-tested and claims no test-run evidence it does not hold)"
|
|
190
|
+
enum_values { platform_workflow registered_offline }
|
|
191
|
+
}
|
|
192
|
+
created: datetime {
|
|
193
|
+
modality SHALL
|
|
194
|
+
}
|
|
195
|
+
modified: datetime {
|
|
196
|
+
modality SHALL
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
class RunEvaluation#data {
|
|
201
|
+
description { "The IA's per-test-run evaluation mark (TODO.deploying/08 — finer grain than the TR determination): one run of one test report marked approve/reject with the evaluator's provenance. A rejected run's form instance is excluded from the TR determination's pass basis — the rejection is recorded with its reason, never silently dropped. Embedded on EvaluationReport.run_evaluations." }
|
|
202
|
+
helper { true }
|
|
203
|
+
test_run_id: reference(TestRun) {
|
|
204
|
+
modality SHALL
|
|
205
|
+
on_delete cascade
|
|
206
|
+
required true
|
|
207
|
+
}
|
|
208
|
+
test_report_id: reference(TestReport) {
|
|
209
|
+
modality SHALL
|
|
210
|
+
definition "The TestReport the run belongs to (denormalized for query)"
|
|
211
|
+
on_delete cascade
|
|
212
|
+
required true
|
|
213
|
+
}
|
|
214
|
+
mark: enum {
|
|
215
|
+
modality SHALL
|
|
216
|
+
enum_values { approve reject }
|
|
217
|
+
}
|
|
218
|
+
comment: text [0..1] {
|
|
219
|
+
modality MAY
|
|
220
|
+
definition "The rejection reason (required on reject); an optional note on approve"
|
|
221
|
+
}
|
|
222
|
+
evaluated_by: string {
|
|
223
|
+
modality SHALL
|
|
224
|
+
definition "The IA evaluator (audit provenance)"
|
|
225
|
+
}
|
|
226
|
+
evaluated_at: datetime {
|
|
227
|
+
modality SHALL
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
class FieldVerdict#data {
|
|
232
|
+
description { "The IA's per-field verdict inside a reviewed test-report section (TODO.cs-e2e/08): only the fields the form schema marks with requirement references (targets) carry one. Embedded on SectionVerdict.field_verdicts." }
|
|
233
|
+
helper { true }
|
|
234
|
+
field: string {
|
|
235
|
+
modality SHALL
|
|
236
|
+
definition "The field name within the section's form schema"
|
|
237
|
+
}
|
|
238
|
+
requirement_refs: string[] [0..*] {
|
|
239
|
+
modality MAY
|
|
240
|
+
definition "The field's requirement targets (denormalized from the form schema at verdict time)"
|
|
241
|
+
}
|
|
242
|
+
verdict: enum {
|
|
243
|
+
modality SHALL
|
|
244
|
+
enum_values { pass fail not_evaluated }
|
|
245
|
+
}
|
|
246
|
+
remarks: text [0..1] {
|
|
247
|
+
modality MAY
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
class SectionVerdict#data {
|
|
252
|
+
description { "The IA's verdict on one section of a reviewed TestReport (TODO.cs-e2e/08): one form instance (one report-format section filled for one sample) marked pass/fail/not_evaluated with remarks and the reviewer's provenance. Maps into the evaluation report's verdict summary (R 60-3 §4.3): the examination sections (R 60-3 §5) roll to §4.3.1, the performance sections (R 60-3 §6) to §4.3.2 per temperature point (from the run context). Embedded on TestReportReview.sections." }
|
|
253
|
+
helper { true }
|
|
254
|
+
form_id: string {
|
|
255
|
+
modality SHALL
|
|
256
|
+
definition "The form (the report's section) this verdict covers"
|
|
257
|
+
}
|
|
258
|
+
form_instance_id: reference(FormInstance) [0..1] {
|
|
259
|
+
modality MAY
|
|
260
|
+
definition "The evidence instance under review (one per form × sample)"
|
|
261
|
+
on_delete cascade
|
|
262
|
+
required false
|
|
263
|
+
}
|
|
264
|
+
sample_id: reference(MeasuringInstrumentSample) [0..1] {
|
|
265
|
+
modality MAY
|
|
266
|
+
definition "The sample the section's evidence belongs to (denormalized from the instance)"
|
|
267
|
+
on_delete nullify
|
|
268
|
+
required false
|
|
269
|
+
}
|
|
270
|
+
section_ref: string [0..1] {
|
|
271
|
+
modality MAY
|
|
272
|
+
definition "The report-format clause of the section (the form schema's section, e.g. 'R 60-3, 5.4')"
|
|
273
|
+
}
|
|
274
|
+
verdict: enum {
|
|
275
|
+
modality SHALL
|
|
276
|
+
enum_values { pass fail not_evaluated }
|
|
277
|
+
}
|
|
278
|
+
remarks: text [0..1] {
|
|
279
|
+
modality MAY
|
|
280
|
+
definition "The reviewer's remarks (expected with a fail, optional otherwise)"
|
|
281
|
+
}
|
|
282
|
+
field_verdicts: reference(FieldVerdict) [0..*] {
|
|
283
|
+
modality MAY
|
|
284
|
+
definition "The per-field verdicts on the schema's requirement-referenced fields (targets)"
|
|
285
|
+
on_delete cascade
|
|
286
|
+
}
|
|
287
|
+
reviewed_by: string {
|
|
288
|
+
modality SHALL
|
|
289
|
+
definition "The IA reviewer (audit provenance)"
|
|
290
|
+
}
|
|
291
|
+
reviewed_at: datetime {
|
|
292
|
+
modality SHALL
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
class TestReportReview#data {
|
|
297
|
+
description { "The IA's section-by-section review of one submitted TestReport (TODO.cs-e2e/08): the per-section verdicts (with per-field verdicts on requirement-referenced fields), the TR decision with its reason once every section carries a verdict, and the reviewer's provenance. Embedded on EvaluationReport.test_report_reviews — the same store as the per-run marks (one store, no fork). The decision walks the test_report machine (ia_accepts / ia_rejects) and sets the Level-1 admissibility determination; the section verdicts map into the evaluation report's verdict summary (R 60-3 §4.3)." }
|
|
298
|
+
helper { true }
|
|
299
|
+
test_report_id: reference(TestReport) {
|
|
300
|
+
modality SHALL
|
|
301
|
+
on_delete cascade
|
|
302
|
+
required true
|
|
303
|
+
}
|
|
304
|
+
sections: reference(SectionVerdict) [0..*] {
|
|
305
|
+
modality MAY
|
|
306
|
+
definition "One verdict per reviewed section (form instance); the TR decision opens only when every section of the report carries one"
|
|
307
|
+
on_delete cascade
|
|
308
|
+
}
|
|
309
|
+
decision: enum [0..1] {
|
|
310
|
+
modality MAY
|
|
311
|
+
definition "The TR decision — absent while the review is open"
|
|
312
|
+
enum_values { ACCEPTED REJECTED }
|
|
313
|
+
}
|
|
314
|
+
reason: text [0..1] {
|
|
315
|
+
modality MAY
|
|
316
|
+
definition "The decision's reason (mandatory on reject)"
|
|
317
|
+
}
|
|
318
|
+
started_by: string {
|
|
319
|
+
modality SHALL
|
|
320
|
+
definition "The IA reviewer who opened the review (the ia_starts_review walk)"
|
|
321
|
+
}
|
|
322
|
+
started_at: datetime {
|
|
323
|
+
modality SHALL
|
|
324
|
+
}
|
|
325
|
+
decided_by: string [0..1] {
|
|
326
|
+
modality MAY
|
|
327
|
+
}
|
|
328
|
+
decided_at: datetime [0..1] {
|
|
329
|
+
modality MAY
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
class TestRequest#data {
|
|
334
|
+
store { testRequests }
|
|
335
|
+
description { "IA-issued request to a test laboratory. The atomic unit of test work is the TestAssignment (one per form × sample pair). The IA explicitly chooses which (form, sample) tuples each lab performs — different labs may be assigned different tests on the same model, or the same test on different samples. One Application typically produces multiple TestRequests (one per lab)." }
|
|
336
|
+
indexes { application_id assigned_laboratory_id requesting_authority_id status test_report_id standard_id }
|
|
337
|
+
id: string {
|
|
338
|
+
modality SHALL
|
|
339
|
+
}
|
|
340
|
+
standard_id: string {
|
|
341
|
+
modality SHALL
|
|
342
|
+
}
|
|
343
|
+
request_number: string {
|
|
344
|
+
modality SHALL
|
|
345
|
+
definition "Unique within the parent Application (e.g. 'TR-ACME-2024-001-01')"
|
|
346
|
+
}
|
|
347
|
+
application_id: reference(Application) {
|
|
348
|
+
modality SHALL
|
|
349
|
+
on_delete cascade
|
|
350
|
+
required true
|
|
351
|
+
}
|
|
352
|
+
requesting_authority_id: reference(IssuingAuthority) {
|
|
353
|
+
modality SHALL
|
|
354
|
+
on_delete restrict
|
|
355
|
+
required true
|
|
356
|
+
}
|
|
357
|
+
assigned_laboratory_id: reference(TestLaboratory) {
|
|
358
|
+
modality SHALL
|
|
359
|
+
on_delete restrict
|
|
360
|
+
required true
|
|
361
|
+
}
|
|
362
|
+
assignments: reference(TestAssignment) [1..*] {
|
|
363
|
+
modality SHALL
|
|
364
|
+
definition "Explicit (form_id, sample_id) tuples this lab must perform. Replaces the cross-product of required_forms × sample_ids — the IA chooses precisely which tests on which samples go to this lab. Different labs can be assigned different subsets."
|
|
365
|
+
on_delete cascade
|
|
366
|
+
}
|
|
367
|
+
sample_ids: reference(MeasuringInstrumentSample) [0..*] {
|
|
368
|
+
modality MAY
|
|
369
|
+
definition "Derived from assignments[].sample_id (denormalized for query)"
|
|
370
|
+
on_delete nullify
|
|
371
|
+
required false
|
|
372
|
+
}
|
|
373
|
+
required_forms: string[] [0..*] {
|
|
374
|
+
modality MAY
|
|
375
|
+
definition "Derived from assignments[].form_id (denormalized for query)"
|
|
376
|
+
}
|
|
377
|
+
model_ids: reference(MeasuringInstrumentModel) [0..*] {
|
|
378
|
+
modality MAY
|
|
379
|
+
definition "Derived from assignments[].model_id (denormalized)"
|
|
380
|
+
on_delete nullify
|
|
381
|
+
required false
|
|
382
|
+
}
|
|
383
|
+
test_conditions: object {
|
|
384
|
+
modality SHALL
|
|
385
|
+
definition "Ambient conditions, schedule, special instructions"
|
|
386
|
+
}
|
|
387
|
+
test_program_id: string [0..1] {
|
|
388
|
+
modality MAY
|
|
389
|
+
definition "Reference to a pre-defined test program (e.g. 'R60-full-class-C')"
|
|
390
|
+
}
|
|
391
|
+
special_instructions: text [0..1] {
|
|
392
|
+
modality MAY
|
|
393
|
+
}
|
|
394
|
+
anr_countries: string[] [0..*] {
|
|
395
|
+
modality MAY
|
|
396
|
+
definition "ANR countries (PD-05 §5.1.4) this request applies to"
|
|
397
|
+
}
|
|
398
|
+
scheme: enum {
|
|
399
|
+
modality SHALL
|
|
400
|
+
definition "PD-05 §5.3 scheme (A = with MTL, B = independent lab only)"
|
|
401
|
+
enum_values { A B }
|
|
402
|
+
}
|
|
403
|
+
includes_mtl: boolean [0..1] {
|
|
404
|
+
modality MAY
|
|
405
|
+
definition "Scheme A: lab is the manufacturer's own lab (MTL)"
|
|
406
|
+
}
|
|
407
|
+
status: enum {
|
|
408
|
+
modality SHALL
|
|
409
|
+
definition "The dispatch lifecycle (the `test_request` state machine): DRAFT → ISSUED → ACCEPTED_BY_LAB → IN_PROGRESS → COMPLETED, with the optional commercial leg ISSUED → QUOTED → ACCEPTED_BY_LAB (TODO.adoption/07: a laboratory that quotes responds with a quotation; the Issuing Authority accepts or declines; laboratories that do not quote accept directly, the quote step is never forced)"
|
|
410
|
+
enum_values { DRAFT ISSUED QUOTED ACCEPTED_BY_LAB IN_PROGRESS COMPLETED WITHDRAWN REJECTED_BY_LAB }
|
|
411
|
+
}
|
|
412
|
+
issued_date: datetime [0..1] {
|
|
413
|
+
modality MAY
|
|
414
|
+
}
|
|
415
|
+
quotation_id: reference(Quotation) [0..1] {
|
|
416
|
+
modality MAY
|
|
417
|
+
definition "The laboratory's current quotation against this request (TODO.adoption/07's quote leg); a re-quotation supersedes the previous one, never edits it in place"
|
|
418
|
+
on_delete nullify
|
|
419
|
+
required false
|
|
420
|
+
}
|
|
421
|
+
quoted_date: datetime [0..1] {
|
|
422
|
+
modality MAY
|
|
423
|
+
definition "When the laboratory issued its quotation (the ISSUED → QUOTED hop)"
|
|
424
|
+
}
|
|
425
|
+
accepted_date: datetime [0..1] {
|
|
426
|
+
modality MAY
|
|
427
|
+
}
|
|
428
|
+
started_date: datetime [0..1] {
|
|
429
|
+
modality MAY
|
|
430
|
+
}
|
|
431
|
+
completed_date: datetime [0..1] {
|
|
432
|
+
modality MAY
|
|
433
|
+
}
|
|
434
|
+
withdrawn_date: datetime [0..1] {
|
|
435
|
+
modality MAY
|
|
436
|
+
}
|
|
437
|
+
withdrawn_reason: text [0..1] {
|
|
438
|
+
modality MAY
|
|
439
|
+
}
|
|
440
|
+
test_report_id: reference(TestReport) [0..1] {
|
|
441
|
+
modality MAY
|
|
442
|
+
definition "Primary TestReport issued by the lab against this request"
|
|
443
|
+
on_delete nullify
|
|
444
|
+
required false
|
|
445
|
+
}
|
|
446
|
+
parent_request_ids: reference(TestRequest) [0..*] {
|
|
447
|
+
modality MAY
|
|
448
|
+
definition "For re-tests or amended requests, the prior request(s)"
|
|
449
|
+
on_delete nullify
|
|
450
|
+
required false
|
|
451
|
+
}
|
|
452
|
+
issued_by: string {
|
|
453
|
+
modality SHALL
|
|
454
|
+
definition "IA staff member who issued the request"
|
|
455
|
+
}
|
|
456
|
+
accepted_by: string [0..1] {
|
|
457
|
+
modality MAY
|
|
458
|
+
definition "Lab staff member who accepted the request"
|
|
459
|
+
}
|
|
460
|
+
created: datetime {
|
|
461
|
+
modality SHALL
|
|
462
|
+
}
|
|
463
|
+
modified: datetime {
|
|
464
|
+
modality SHALL
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
class TestAssignment#data {
|
|
469
|
+
store { testAssignments }
|
|
470
|
+
description { "The atomic unit of test work: one R 60-3 form performed on one sample (which belongs to one model). The IA explicitly creates these tuples when dispatching a TestRequest — different labs may receive different subsets of (form, sample) pairs even for the same Application. Each assignment produces zero or one FormInstance when the lab completes the work." }
|
|
471
|
+
indexes { test_request_id sample_id model_id laboratory_id form_id status application_id }
|
|
472
|
+
id: string {
|
|
473
|
+
modality SHALL
|
|
474
|
+
}
|
|
475
|
+
test_request_id: reference(TestRequest) {
|
|
476
|
+
modality SHALL
|
|
477
|
+
on_delete cascade
|
|
478
|
+
required true
|
|
479
|
+
}
|
|
480
|
+
application_id: reference(Application) {
|
|
481
|
+
modality SHALL
|
|
482
|
+
definition "Denormalized from TestRequest for query efficiency"
|
|
483
|
+
on_delete restrict
|
|
484
|
+
required true
|
|
485
|
+
}
|
|
486
|
+
form_id: string {
|
|
487
|
+
modality SHALL
|
|
488
|
+
definition "R 60-3 form identifier (e.g. 'load-test')"
|
|
489
|
+
}
|
|
490
|
+
sample_id: reference(MeasuringInstrumentSample) {
|
|
491
|
+
modality SHALL
|
|
492
|
+
definition "Specific physical sample this test is performed on"
|
|
493
|
+
on_delete restrict
|
|
494
|
+
required true
|
|
495
|
+
}
|
|
496
|
+
model_id: reference(MeasuringInstrumentModel) {
|
|
497
|
+
modality SHALL
|
|
498
|
+
definition "Denormalized from sample_id.model_id for query efficiency"
|
|
499
|
+
on_delete restrict
|
|
500
|
+
required true
|
|
501
|
+
}
|
|
502
|
+
laboratory_id: reference(TestLaboratory) {
|
|
503
|
+
modality SHALL
|
|
504
|
+
definition "Denormalized from TestRequest.assigned_laboratory_id"
|
|
505
|
+
on_delete restrict
|
|
506
|
+
required true
|
|
507
|
+
}
|
|
508
|
+
origin: enum [0..1] {
|
|
509
|
+
modality MAY
|
|
510
|
+
definition "Who put this test on the lab's bench: ia_assigned (the IA's dispatch — the DEFAULT; absent reads as ia_assigned) or lab_added (the laboratory performs an additional test of its own initiative, TODO.deploying/06); lab-added work is flagged, never silently merged with the IA-assigned set"
|
|
511
|
+
enum_values { ia_assigned lab_added }
|
|
512
|
+
}
|
|
513
|
+
status: enum {
|
|
514
|
+
modality SHALL
|
|
515
|
+
definition "Lifecycle: PENDING (lab not yet started) → ACCEPTED (lab acknowledged) → IN_PROGRESS → COMPLETED (FormInstance submitted) | OMITTED (lab cannot perform, with reason) | FAILED (attempted but could not complete)"
|
|
516
|
+
enum_values { PENDING ACCEPTED IN_PROGRESS COMPLETED OMITTED FAILED }
|
|
517
|
+
}
|
|
518
|
+
form_instance_id: reference(FormInstance) [0..1] {
|
|
519
|
+
modality MAY
|
|
520
|
+
definition "Filled in when the lab completes this assignment"
|
|
521
|
+
on_delete nullify
|
|
522
|
+
required false
|
|
523
|
+
}
|
|
524
|
+
omit_reason: text [0..1] {
|
|
525
|
+
modality MAY
|
|
526
|
+
definition "Required when status=OMITTED (e.g. equipment unavailable)"
|
|
527
|
+
}
|
|
528
|
+
assigned_date: datetime {
|
|
529
|
+
modality SHALL
|
|
530
|
+
}
|
|
531
|
+
accepted_date: datetime [0..1] {
|
|
532
|
+
modality MAY
|
|
533
|
+
}
|
|
534
|
+
started_date: datetime [0..1] {
|
|
535
|
+
modality MAY
|
|
536
|
+
}
|
|
537
|
+
completed_date: datetime [0..1] {
|
|
538
|
+
modality MAY
|
|
539
|
+
}
|
|
540
|
+
notes: text [0..1] {
|
|
541
|
+
modality MAY
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
class TestReport#data {
|
|
546
|
+
store { testReports }
|
|
547
|
+
description { "Test lab's submission. Per user correction (2026-07-02): one TestReport per model family/group being tested. If a lab tests multiple groups, they produce multiple TestReports. The TestReport declares which MeasuringInstrumentModelGroup(s) and MeasuringInstrumentSample(s) it covers. Within each report, the lab fills in R 60-3 Test Report Forms. If a particular TRF doesn't apply to the group being tested, the lab marks it as omitted with a justification (form_omissions)." }
|
|
548
|
+
indexes { laboratory_id status standard_id test_request_id application_id model_family_id model_group_id }
|
|
549
|
+
id: string {
|
|
550
|
+
modality SHALL
|
|
551
|
+
}
|
|
552
|
+
standard_id: string {
|
|
553
|
+
modality SHALL
|
|
554
|
+
}
|
|
555
|
+
application_id: reference(Application) [0..1] {
|
|
556
|
+
modality MAY
|
|
557
|
+
definition "Denormalized for query. Authoritative lineage: TestRequest → Application."
|
|
558
|
+
on_delete restrict
|
|
559
|
+
required false
|
|
560
|
+
}
|
|
561
|
+
test_request_id: reference(TestRequest) [0..1] {
|
|
562
|
+
modality MAY
|
|
563
|
+
definition "Originating TestRequest (the IA dispatch that produced this report)"
|
|
564
|
+
on_delete nullify
|
|
565
|
+
required false
|
|
566
|
+
}
|
|
567
|
+
model_family_id: reference(MeasuringInstrumentModelFamily) [0..1] {
|
|
568
|
+
modality MAY
|
|
569
|
+
definition "Which family this report covers"
|
|
570
|
+
on_delete restrict
|
|
571
|
+
required false
|
|
572
|
+
}
|
|
573
|
+
model_group_id: reference(MeasuringInstrumentModelGroup) [0..1] {
|
|
574
|
+
modality MAY
|
|
575
|
+
definition "Which MeasuringInstrumentModelGroup this report covers. Per user: \"1 test report for each model family/group that needs to be tested.\" When null, the report covers the entire family."
|
|
576
|
+
on_delete restrict
|
|
577
|
+
required false
|
|
578
|
+
}
|
|
579
|
+
instrument_id: reference(MeasuringInstrumentModel) {
|
|
580
|
+
modality SHALL
|
|
581
|
+
definition "Primary model under test (kept from the legacy declaration; matrix coverage is via sample_ids)"
|
|
582
|
+
on_delete restrict
|
|
583
|
+
required true
|
|
584
|
+
}
|
|
585
|
+
laboratory_id: reference(TestLaboratory) {
|
|
586
|
+
modality SHALL
|
|
587
|
+
on_delete restrict
|
|
588
|
+
required true
|
|
589
|
+
}
|
|
590
|
+
sample_ids: reference(MeasuringInstrumentSample) [0..*] {
|
|
591
|
+
modality SHALL
|
|
592
|
+
definition "Physical samples covered by this report. Each sample belongs to a specific model within the group. The same sample can appear in multiple FormInstances (one per test/TRF)."
|
|
593
|
+
on_delete restrict
|
|
594
|
+
required true
|
|
595
|
+
}
|
|
596
|
+
dimensions: object {
|
|
597
|
+
modality SHALL
|
|
598
|
+
definition "Dimension snapshot of the tested group at report time (classification context for calculations)"
|
|
599
|
+
}
|
|
600
|
+
definition_versions: object [0..1] {
|
|
601
|
+
modality MAY
|
|
602
|
+
definition "INV-8 pin (version pinning — every definition executed in D2 is version-pinned in the TestReport): the definition versions this report's D2 execution used, captured at issuance before the report goes immutable. Shape: { standard: the standard edition URN whose definition corpus (requirements, verdict quantities, constraints, form schemas) was in force; forms: { <form_id>: the executed form-schema identifier, propagated from the completing TestRuns' method_version pins } }. D3 re-evaluation records these pins into its verdict snapshots so the chain stays auditable. Absent when no run-backed evidence pins anything (an assumed edition is never written); a form executed under two different schema versions drops its key — honest absence beats a false pin."
|
|
603
|
+
}
|
|
604
|
+
required_forms: string[] [1..*] {
|
|
605
|
+
modality SHALL
|
|
606
|
+
definition "R 60-3 form identifiers the lab should complete for this group"
|
|
607
|
+
}
|
|
608
|
+
form_instances: reference(FormInstance) [0..*] {
|
|
609
|
+
modality SHALL
|
|
610
|
+
definition "FormInstances bundled by this report (was string[] of ids; re-typed per the FK graph, one-to-many cascade)"
|
|
611
|
+
on_delete cascade
|
|
612
|
+
}
|
|
613
|
+
form_omissions: reference(FormOmission) [0..*] {
|
|
614
|
+
modality MAY
|
|
615
|
+
definition "Forms that don't apply to the group being tested, with justification. Per user: \"If the IA or test lab decides that a particular TRF doesn't need to be filled for a model family/group, then they should have a way to specify that.\""
|
|
616
|
+
on_delete cascade
|
|
617
|
+
}
|
|
618
|
+
forms: reference(TestReportFormRef) [0..*] {
|
|
619
|
+
modality MAY
|
|
620
|
+
}
|
|
621
|
+
artifact_instances: reference(ArtifactInstance) [0..*] {
|
|
622
|
+
modality MAY
|
|
623
|
+
definition "Artifact instances linked as evidence (TODO.roadmap/09) — produced outputs OF THE INSTRUMENT conforming to the standard's model/artifacts.yaml definitions (e.g. R 91's enforcement evidence file). Seeded from sample-data.yaml test_report.artifact_instances; captured at runtime in the lab report composer. A report covering an artifact-producing test must link ≥1 instance of each produced definition (linker rule artifact-presence)."
|
|
624
|
+
}
|
|
625
|
+
anr_countries: string[] [0..*] {
|
|
626
|
+
modality MAY
|
|
627
|
+
}
|
|
628
|
+
status: enum {
|
|
629
|
+
modality SHALL
|
|
630
|
+
definition "DRAFT → SUBMITTED → UNDER_REVIEW → ACCEPTED | REJECTED; CONSULTATION is the review period (the demo-flows program's flow 04, step 4): the IA opens it from UNDER_REVIEW, the project's participants comment (entities/comments.prl's threads), and the terminal decisions gate on consultation_resolved — the threads resolve before the finalization completes"
|
|
631
|
+
enum_values { DRAFT SUBMITTED UNDER_REVIEW CONSULTATION ACCEPTED REJECTED }
|
|
632
|
+
}
|
|
633
|
+
evaluator: string {
|
|
634
|
+
modality SHALL
|
|
635
|
+
}
|
|
636
|
+
signature_date: date [0..1] {
|
|
637
|
+
modality MAY
|
|
638
|
+
definition "Date of signature by authorizing person (PD-05 §4.4.3 r)"
|
|
639
|
+
}
|
|
640
|
+
test_location: string [0..1] {
|
|
641
|
+
modality MAY
|
|
642
|
+
definition "Place of testing (PD-05 §4.4.3 j)"
|
|
643
|
+
}
|
|
644
|
+
includes_mtl_results: boolean [0..1] {
|
|
645
|
+
modality MAY
|
|
646
|
+
definition "Whether this report includes results from a Manufacturer Test Lab (Scheme A, PD-05 §5.3.1 b) — the MTL flag the §5.5.4 prominent-statement and §5.5.5 own-Declaration checks key on"
|
|
647
|
+
}
|
|
648
|
+
supervising_ia_id: reference(IssuingAuthority) [0..1] {
|
|
649
|
+
modality MAY
|
|
650
|
+
definition "MTL reports only — the Issuing Authority exercising controlled supervision over the Manufacturer Test Laboratory (PD-04, 7.1); must equal the IA utilising the report (PD-05 §5.5.5)"
|
|
651
|
+
on_delete nullify
|
|
652
|
+
required false
|
|
653
|
+
}
|
|
654
|
+
test_period_start: date [0..1] {
|
|
655
|
+
modality MAY
|
|
656
|
+
definition "First day of the reported testing (the test dates of the PD-05 §4.4.3 report content) — records mode (TODO.adoption/02) carries the offline report's test period; platform-run reports pin their evidence dates per test run"
|
|
657
|
+
}
|
|
658
|
+
test_period_end: date [0..1] {
|
|
659
|
+
modality MAY
|
|
660
|
+
definition "Last day of the reported testing (TODO.adoption/02)"
|
|
661
|
+
}
|
|
662
|
+
origin: enum [0..1] {
|
|
663
|
+
modality MAY
|
|
664
|
+
definition "How this record came to exist: platform_workflow (the DEFAULT — an absent origin reads as platform_workflow) or registered_offline (TODO.adoption/02 — records mode: the laboratory performed and issued this report offline and registered it after the fact; a registered_offline report never masquerades as platform-run and claims no test-run evidence it does not hold)"
|
|
665
|
+
enum_values { platform_workflow registered_offline }
|
|
666
|
+
}
|
|
667
|
+
created: datetime {
|
|
668
|
+
modality SHALL
|
|
669
|
+
}
|
|
670
|
+
modified: datetime {
|
|
671
|
+
modality SHALL
|
|
672
|
+
}
|
|
673
|
+
submitted_date: datetime [0..1] {
|
|
674
|
+
modality MAY
|
|
675
|
+
}
|
|
676
|
+
attachments: reference(DocumentRef) [0..*] {
|
|
677
|
+
modality MAY
|
|
678
|
+
definition "Files attached to the report (the signed report PDF, raw data exports, instrument photographs) — blob-backed when the document store is bound, file-name references otherwise (TODO.adoption/03)"
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
class FormInstance#data {
|
|
683
|
+
store { formInstances }
|
|
684
|
+
indexes { form_id standard_id test_report_id sample_id laboratory_id }
|
|
685
|
+
id: string {
|
|
686
|
+
modality SHALL
|
|
687
|
+
}
|
|
688
|
+
standard_id: string {
|
|
689
|
+
modality SHALL
|
|
690
|
+
}
|
|
691
|
+
form_id: string {
|
|
692
|
+
modality SHALL
|
|
693
|
+
}
|
|
694
|
+
test_report_id: reference(TestReport) {
|
|
695
|
+
modality SHALL
|
|
696
|
+
definition "Owning TestReport — form is one row in this report"
|
|
697
|
+
on_delete cascade
|
|
698
|
+
required true
|
|
699
|
+
}
|
|
700
|
+
test_request_id: reference(TestRequest) [0..1] {
|
|
701
|
+
modality MAY
|
|
702
|
+
definition "Originating TestRequest (denormalized from TestReport)"
|
|
703
|
+
on_delete nullify
|
|
704
|
+
required false
|
|
705
|
+
}
|
|
706
|
+
application_id: reference(Application) [0..1] {
|
|
707
|
+
modality MAY
|
|
708
|
+
definition "Originating Application (denormalized for query)"
|
|
709
|
+
on_delete nullify
|
|
710
|
+
required false
|
|
711
|
+
}
|
|
712
|
+
sample_id: reference(MeasuringInstrumentSample) {
|
|
713
|
+
modality SHALL
|
|
714
|
+
definition "Which sample this form was filled in for"
|
|
715
|
+
on_delete restrict
|
|
716
|
+
required true
|
|
717
|
+
}
|
|
718
|
+
laboratory_id: reference(TestLaboratory) {
|
|
719
|
+
modality SHALL
|
|
720
|
+
definition "Lab that authored this form (PD-05 §4.4.3 b)"
|
|
721
|
+
on_delete restrict
|
|
722
|
+
required true
|
|
723
|
+
}
|
|
724
|
+
values: object {
|
|
725
|
+
modality SHALL
|
|
726
|
+
definition "Typed record validated against form schema data class"
|
|
727
|
+
}
|
|
728
|
+
computed_values: object {
|
|
729
|
+
modality SHALL
|
|
730
|
+
definition "DERIVED measurement results from OCL evaluation"
|
|
731
|
+
}
|
|
732
|
+
result: enum {
|
|
733
|
+
modality SHALL
|
|
734
|
+
enum_values { PASS FAIL NA PENDING }
|
|
735
|
+
}
|
|
736
|
+
status: enum {
|
|
737
|
+
modality SHALL
|
|
738
|
+
definition "Authoring + IA review state — see state machine"
|
|
739
|
+
enum_values { DRAFT IN_PROGRESS SUBMITTED LOCKED ACCEPTED REJECTED }
|
|
740
|
+
}
|
|
741
|
+
source: string [0..1] {
|
|
742
|
+
modality MAY
|
|
743
|
+
}
|
|
744
|
+
country: string [0..1] {
|
|
745
|
+
modality MAY
|
|
746
|
+
}
|
|
747
|
+
entity_type: string [0..1] {
|
|
748
|
+
modality MAY
|
|
749
|
+
definition "DEPRECATED — use test_report_id. Polymorphic link retained for migration."
|
|
750
|
+
deprecated true
|
|
751
|
+
}
|
|
752
|
+
entity_id: string [0..1] {
|
|
753
|
+
modality MAY
|
|
754
|
+
definition "DEPRECATED — use test_report_id. Polymorphic link retained for migration."
|
|
755
|
+
deprecated true
|
|
756
|
+
}
|
|
757
|
+
abbreviated: boolean [0..1] {
|
|
758
|
+
modality MAY
|
|
759
|
+
definition "Whether this test was abbreviated per PD-05 §4.3.3"
|
|
760
|
+
}
|
|
761
|
+
abbreviation_justification: text [0..1] {
|
|
762
|
+
modality MAY
|
|
763
|
+
definition "Justification for abbreviated/omitted test (PD-05 §4.3.3)"
|
|
764
|
+
}
|
|
765
|
+
previous_report_ref: reference(PreviousTestReportRef) [0..1] {
|
|
766
|
+
modality MAY
|
|
767
|
+
definition "Reference to previous test report for abbreviated testing"
|
|
768
|
+
}
|
|
769
|
+
created: datetime {
|
|
770
|
+
modality SHALL
|
|
771
|
+
}
|
|
772
|
+
modified: datetime {
|
|
773
|
+
modality SHALL
|
|
774
|
+
}
|
|
775
|
+
evaluator: string {
|
|
776
|
+
modality SHALL
|
|
777
|
+
definition "Test lab evaluator name (PD-05 §4.4.3)"
|
|
778
|
+
}
|
|
779
|
+
supervisor: string [0..1] {
|
|
780
|
+
modality MAY
|
|
781
|
+
definition "Test lab supervisor name"
|
|
782
|
+
}
|
|
783
|
+
ia_reviewer: string [0..1] {
|
|
784
|
+
modality MAY
|
|
785
|
+
definition "IA reviewer who recorded the per-form determination"
|
|
786
|
+
}
|
|
787
|
+
submitted_at: datetime [0..1] {
|
|
788
|
+
modality MAY
|
|
789
|
+
}
|
|
790
|
+
locked_at: datetime [0..1] {
|
|
791
|
+
modality MAY
|
|
792
|
+
definition "When the parent TestReport was issued (form became immutable)"
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
class EvaluationReport#data {
|
|
797
|
+
store { evaluationReports }
|
|
798
|
+
indexes { authority_id standard_id application_id }
|
|
799
|
+
id: string {
|
|
800
|
+
modality SHALL
|
|
801
|
+
}
|
|
802
|
+
standard_id: string {
|
|
803
|
+
modality SHALL
|
|
804
|
+
}
|
|
805
|
+
application_id: reference(Application) {
|
|
806
|
+
modality SHALL
|
|
807
|
+
definition "Originating Application (declared by the FK graph; denormalized for query)"
|
|
808
|
+
on_delete restrict
|
|
809
|
+
required true
|
|
810
|
+
}
|
|
811
|
+
test_report_id: reference(TestReport) [0..1] {
|
|
812
|
+
modality MAY
|
|
813
|
+
definition "DEPRECATED — primary test report kept for backward compatibility. Use test_report_ids."
|
|
814
|
+
on_delete nullify
|
|
815
|
+
deprecated true
|
|
816
|
+
required false
|
|
817
|
+
}
|
|
818
|
+
test_report_ids: reference(TestReport) [1..*] {
|
|
819
|
+
modality SHALL
|
|
820
|
+
definition "All OIML test reports included (PD-05 §4.5.1 k)"
|
|
821
|
+
on_delete restrict
|
|
822
|
+
required true
|
|
823
|
+
}
|
|
824
|
+
instrument_id: reference(MeasuringInstrumentModel) {
|
|
825
|
+
modality SHALL
|
|
826
|
+
definition "Primary model evaluated (kept from the legacy declaration; per-model verdicts live in model_evaluations)"
|
|
827
|
+
on_delete restrict
|
|
828
|
+
required true
|
|
829
|
+
}
|
|
830
|
+
authority_id: reference(IssuingAuthority) {
|
|
831
|
+
modality SHALL
|
|
832
|
+
on_delete restrict
|
|
833
|
+
required true
|
|
834
|
+
}
|
|
835
|
+
form_determinations: reference(FormDetermination) [0..*] {
|
|
836
|
+
modality SHALL
|
|
837
|
+
}
|
|
838
|
+
run_evaluations: reference(RunEvaluation) [0..*] {
|
|
839
|
+
modality MAY
|
|
840
|
+
definition "The IA's per-test-run marks (TODO.deploying/08) — a rejected run's form instance is excluded from the pass basis; the ER finalize gate requires every run of every included TR marked"
|
|
841
|
+
on_delete cascade
|
|
842
|
+
}
|
|
843
|
+
test_report_reviews: reference(TestReportReview) [0..*] {
|
|
844
|
+
modality MAY
|
|
845
|
+
definition "The IA's section-by-section reviews of the included TestReports (TODO.cs-e2e/08) — the section verdicts roll up to the per-report decision and map into the evaluation report's verdict summary (R 60-3 §4.3)"
|
|
846
|
+
on_delete cascade
|
|
847
|
+
}
|
|
848
|
+
test_report_determinations: reference(TestReportDetermination) [0..*] {
|
|
849
|
+
modality SHALL
|
|
850
|
+
definition "Admissibility gate. One per TestReport in test_report_ids[]."
|
|
851
|
+
on_delete cascade
|
|
852
|
+
}
|
|
853
|
+
model_evaluations: reference(ModelEvaluation) [0..*] {
|
|
854
|
+
modality SHALL
|
|
855
|
+
definition "Per-model technical synthesis across accepted TestReports. Required for finalization — family-level decision derives from these. Per TODO.UPGRADE/13."
|
|
856
|
+
on_delete cascade
|
|
857
|
+
}
|
|
858
|
+
status: enum [0..1] {
|
|
859
|
+
modality MAY
|
|
860
|
+
definition "Workflow position on the declared evaluation_report machine (evaluation/state-machines.prl): DRAFT → IN_REVIEW → ALL_TR_REVIEWED → APPROVED | REJECTED | CONDITIONALLY_APPROVED, with the CONSULTATION review period between ALL_TR_REVIEWED and the terminal decision (the demo-flows program's flow 04: the project's participants comment on the report, the consultation_resolved guard gates the terminal hops), and ia_reopens back to IN_REVIEW. Owned by the walker (walkTransition) — services route every lifecycle move through the machine, never assign it (gap D8, the task-61 punt closed). DISTINCT from overall_decision, the JUDGMENT axis: the terminal transitions SET the matching decision via their declared cascades, never the reverse. Optional for pre-D8 instances — an absent status reads as the machine's initial DRAFT (the task-61 walker idiom)."
|
|
861
|
+
enum_values { DRAFT IN_REVIEW ALL_TR_REVIEWED CONSULTATION APPROVED REJECTED CONDITIONALLY_APPROVED }
|
|
862
|
+
}
|
|
863
|
+
overall_decision: enum {
|
|
864
|
+
modality SHALL
|
|
865
|
+
enum_values { PENDING APPROVED REJECTED CONDITIONALLY_APPROVED }
|
|
866
|
+
}
|
|
867
|
+
conditions: string[] [0..*] {
|
|
868
|
+
modality SHALL
|
|
869
|
+
}
|
|
870
|
+
review_notes: text {
|
|
871
|
+
modality SHALL
|
|
872
|
+
}
|
|
873
|
+
reviewer_name: string {
|
|
874
|
+
modality SHALL
|
|
875
|
+
}
|
|
876
|
+
supervisor_name: string [0..1] {
|
|
877
|
+
modality MAY
|
|
878
|
+
definition "Supervising evaluator per PD-05 §4.5"
|
|
879
|
+
}
|
|
880
|
+
review_date: date {
|
|
881
|
+
modality SHALL
|
|
882
|
+
}
|
|
883
|
+
finalized_at: datetime [0..1] {
|
|
884
|
+
modality MAY
|
|
885
|
+
}
|
|
886
|
+
finalized_by: string [0..1] {
|
|
887
|
+
modality MAY
|
|
888
|
+
}
|
|
889
|
+
certificate_id: reference(Certificate) [0..1] {
|
|
890
|
+
modality MAY
|
|
891
|
+
on_delete nullify
|
|
892
|
+
required false
|
|
893
|
+
}
|
|
894
|
+
anr_compliance: reference(ANRCompliance) [0..*] {
|
|
895
|
+
modality MAY
|
|
896
|
+
}
|
|
897
|
+
mtl_use_statement: text [0..1] {
|
|
898
|
+
modality MAY
|
|
899
|
+
definition "Scheme A (PD-05 §5.5.4): where OIML test reports from a Manufacturer Test Laboratory are utilised, the prominent statement at the beginning of the evaluation report identifying the respective tests and the MTL designation. Mandatory when any included test report carries includes_mtl_results."
|
|
900
|
+
}
|
|
901
|
+
test_period_start: date [0..1] {
|
|
902
|
+
modality MAY
|
|
903
|
+
definition "First day of the evaluated testing — records mode (TODO.adoption/02) registers the offline evaluation's test period; platform-run evaluations pin their evidence per included test report"
|
|
904
|
+
}
|
|
905
|
+
test_period_end: date [0..1] {
|
|
906
|
+
modality MAY
|
|
907
|
+
definition "Last day of the evaluated testing (TODO.adoption/02)"
|
|
908
|
+
}
|
|
909
|
+
origin: enum [0..1] {
|
|
910
|
+
modality MAY
|
|
911
|
+
definition "How this record came to exist: platform_workflow (the DEFAULT — an absent origin reads as platform_workflow) or registered_offline (TODO.adoption/02 — records mode: the type evaluation was performed offline and is registered after the fact by a named IA officer; a registered_offline report never masquerades as platform-evaluated and claims no test-run evidence it does not hold)"
|
|
912
|
+
enum_values { platform_workflow registered_offline }
|
|
913
|
+
}
|
|
914
|
+
created: datetime {
|
|
915
|
+
modality SHALL
|
|
916
|
+
}
|
|
917
|
+
modified: datetime {
|
|
918
|
+
modality SHALL
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
class TestReportDetermination#data {
|
|
923
|
+
store { testReportDeterminations }
|
|
924
|
+
description { "IA's per-TestReport decision within an EvaluationReport. One EvaluationReport contains one TestReportDetermination per entry in test_report_ids[] (PD-05 §4.5). The aggregate of these determines overall_decision." }
|
|
925
|
+
indexes { evaluation_report_id test_report_id }
|
|
926
|
+
id: string {
|
|
927
|
+
modality SHALL
|
|
928
|
+
}
|
|
929
|
+
evaluation_report_id: reference(EvaluationReport) {
|
|
930
|
+
modality SHALL
|
|
931
|
+
on_delete cascade
|
|
932
|
+
required true
|
|
933
|
+
}
|
|
934
|
+
test_report_id: reference(TestReport) {
|
|
935
|
+
modality SHALL
|
|
936
|
+
on_delete restrict
|
|
937
|
+
required true
|
|
938
|
+
}
|
|
939
|
+
decision: enum {
|
|
940
|
+
modality SHALL
|
|
941
|
+
enum_values { ACCEPTED REJECTED CONDITIONALLY_ACCEPTED }
|
|
942
|
+
}
|
|
943
|
+
reviewer_name: string {
|
|
944
|
+
modality SHALL
|
|
945
|
+
}
|
|
946
|
+
supervisor_name: string [0..1] {
|
|
947
|
+
modality MAY
|
|
948
|
+
}
|
|
949
|
+
review_date: date {
|
|
950
|
+
modality SHALL
|
|
951
|
+
}
|
|
952
|
+
notes: text [0..1] {
|
|
953
|
+
modality MAY
|
|
954
|
+
}
|
|
955
|
+
conditions: string[] [0..*] {
|
|
956
|
+
modality MAY
|
|
957
|
+
}
|
|
958
|
+
verdicts: reference(Verdict) [0..*] {
|
|
959
|
+
modality MAY
|
|
960
|
+
definition "Per-requirement verdict re-execution results (metamodel D3, TODO.new-paradigm/08): one Verdict per applicable requirement × sample in scope, computed by the verdict service from the report's bound facts and form computed values (embedded)."
|
|
961
|
+
on_delete cascade
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
|
|
965
|
+
class ModelEvaluation#data {
|
|
966
|
+
store { modelEvaluations }
|
|
967
|
+
description { "Per-model synthesis of accepted TestReports. Aggregates FormInstances across labs to determine if the model is fully tested (every required form has passing evidence from at least one lab). Lives on the parent EvaluationReport. Three-level synthesis per TODO.UPGRADE/13: TestReport → TestReportDetermination (admissibility gate) ModelEvaluation (per-model technical evaluation across labs) EvaluationReport (family-level aggregate)" }
|
|
968
|
+
indexes { evaluation_report_id model_id decision }
|
|
969
|
+
id: string {
|
|
970
|
+
modality SHALL
|
|
971
|
+
}
|
|
972
|
+
evaluation_report_id: reference(EvaluationReport) {
|
|
973
|
+
modality SHALL
|
|
974
|
+
on_delete cascade
|
|
975
|
+
required true
|
|
976
|
+
}
|
|
977
|
+
model_id: reference(MeasuringInstrumentModel) {
|
|
978
|
+
modality SHALL
|
|
979
|
+
on_delete restrict
|
|
980
|
+
required true
|
|
981
|
+
}
|
|
982
|
+
group_id: reference(MeasuringInstrumentModelGroup) [0..1] {
|
|
983
|
+
modality MAY
|
|
984
|
+
definition "Denormalized from model_id.group_id for filtering"
|
|
985
|
+
on_delete nullify
|
|
986
|
+
required false
|
|
987
|
+
}
|
|
988
|
+
required_form_ids: string[] [1..*] {
|
|
989
|
+
modality SHALL
|
|
990
|
+
definition "From the test program (e.g. R60-full-class-C: 11 forms)"
|
|
991
|
+
}
|
|
992
|
+
covered_form_ids: string[] [0..*] {
|
|
993
|
+
modality SHALL
|
|
994
|
+
definition "Forms with at least one passing FormInstance (derived)"
|
|
995
|
+
}
|
|
996
|
+
missing_form_ids: string[] [0..*] {
|
|
997
|
+
modality SHALL
|
|
998
|
+
definition "required_form_ids - covered_form_ids (derived)"
|
|
999
|
+
}
|
|
1000
|
+
contributor_test_report_ids: string[] [0..*] {
|
|
1001
|
+
modality SHALL
|
|
1002
|
+
definition "TestReports that provided evidence for this model (derived)"
|
|
1003
|
+
}
|
|
1004
|
+
contributor_lab_ids: string[] [0..*] {
|
|
1005
|
+
modality SHALL
|
|
1006
|
+
definition "Labs that contributed (derived from TestReports)"
|
|
1007
|
+
}
|
|
1008
|
+
decision: enum {
|
|
1009
|
+
modality SHALL
|
|
1010
|
+
definition "PASS: all required forms covered with no failures. FAIL: any FormInstance.result == FAIL. CONDITIONAL: covered but with non-passing evidence (e.g. ANR cases). INCOMPLETE: missing_form_ids is non-empty."
|
|
1011
|
+
enum_values { PASS FAIL CONDITIONAL INCOMPLETE }
|
|
1012
|
+
}
|
|
1013
|
+
reviewer_name: string {
|
|
1014
|
+
modality SHALL
|
|
1015
|
+
}
|
|
1016
|
+
review_date: date {
|
|
1017
|
+
modality SHALL
|
|
1018
|
+
}
|
|
1019
|
+
notes: text [0..1] {
|
|
1020
|
+
modality MAY
|
|
1021
|
+
}
|
|
1022
|
+
conditions: string[] [0..*] {
|
|
1023
|
+
modality MAY
|
|
1024
|
+
}
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
class Certificate#data {
|
|
1028
|
+
store { certificates }
|
|
1029
|
+
indexes { standard_id }
|
|
1030
|
+
id: string {
|
|
1031
|
+
modality SHALL
|
|
1032
|
+
}
|
|
1033
|
+
standard_id: string {
|
|
1034
|
+
modality SHALL
|
|
1035
|
+
}
|
|
1036
|
+
certificate_number: string {
|
|
1037
|
+
modality SHALL
|
|
1038
|
+
}
|
|
1039
|
+
scheme: enum {
|
|
1040
|
+
modality SHALL
|
|
1041
|
+
enum_values { A B }
|
|
1042
|
+
}
|
|
1043
|
+
operated_scheme_id: string [0..1] {
|
|
1044
|
+
modality MAY
|
|
1045
|
+
definition "TODO.adoption/05: the certification scheme this certificate is issued under: the id of an OperatedScheme record; absent reads as the built-in OIML-CS scheme (oiml-cs). Under any other scheme this is NOT an OIML-CS certificate: no Annex B number, no BIML registration, no OIML marking, no OIML-CS Declaration gate (the honest boundary)"
|
|
1046
|
+
}
|
|
1047
|
+
scheme_numbering: reference(SchemeNumbering) [0..1] {
|
|
1048
|
+
modality MAY
|
|
1049
|
+
definition "TODO.adoption/05: the mint context of a template-numbered certificate: the sequence, the issue year and the category code the number was minted from, so a revision re-renders the number with the revision token and the ORIGINAL issue year (the guide practice: the year in the number is the year of initial certification). Absent on an Annex-B-numbered (OIML-CS) certificate"
|
|
1050
|
+
required false
|
|
1051
|
+
}
|
|
1052
|
+
replaces_certificate_number: string [0..1] {
|
|
1053
|
+
modality MAY
|
|
1054
|
+
definition "TODO.adoption/05: the replacement lineage: a replacement certificate carries the replaced certificate's number, printed directly under its own number ('Replaces certificate no. ...' directly under the number, the conformity body's guide practice)"
|
|
1055
|
+
}
|
|
1056
|
+
edition_year: integer {
|
|
1057
|
+
modality SHALL
|
|
1058
|
+
}
|
|
1059
|
+
issuing_authority_id: reference(IssuingAuthority) {
|
|
1060
|
+
modality SHALL
|
|
1061
|
+
on_delete restrict
|
|
1062
|
+
required true
|
|
1063
|
+
}
|
|
1064
|
+
oiml_member_state: string {
|
|
1065
|
+
modality SHALL
|
|
1066
|
+
}
|
|
1067
|
+
applicant: reference(ApplicantInfo) {
|
|
1068
|
+
modality SHALL
|
|
1069
|
+
}
|
|
1070
|
+
manufacturer: reference(ManufacturerInfo) {
|
|
1071
|
+
modality SHALL
|
|
1072
|
+
}
|
|
1073
|
+
model_family_id: reference(MeasuringInstrumentModelFamily) {
|
|
1074
|
+
modality SHALL
|
|
1075
|
+
definition "Certified scope: the model family (renamed from instrumentModelFamilyId in the old FK graph)"
|
|
1076
|
+
on_delete restrict
|
|
1077
|
+
required true
|
|
1078
|
+
}
|
|
1079
|
+
type_designation: string {
|
|
1080
|
+
modality SHALL
|
|
1081
|
+
}
|
|
1082
|
+
type_description: text [0..1] {
|
|
1083
|
+
modality MAY
|
|
1084
|
+
}
|
|
1085
|
+
module_designation: string [0..1] {
|
|
1086
|
+
modality MAY
|
|
1087
|
+
}
|
|
1088
|
+
responsible_person: string [0..1] {
|
|
1089
|
+
modality MAY
|
|
1090
|
+
}
|
|
1091
|
+
evaluation_report_id: reference(EvaluationReport) [0..1] {
|
|
1092
|
+
modality MAY
|
|
1093
|
+
on_delete nullify
|
|
1094
|
+
required false
|
|
1095
|
+
}
|
|
1096
|
+
evaluation_report_ref: reference(TestEvaluationReportRef) [0..1] {
|
|
1097
|
+
modality MAY
|
|
1098
|
+
}
|
|
1099
|
+
documentation_file: reference(DocumentationFileRef) [0..1] {
|
|
1100
|
+
modality MAY
|
|
1101
|
+
}
|
|
1102
|
+
test_reports: reference(TestEvaluationReportRef) [1..*] {
|
|
1103
|
+
modality SHALL
|
|
1104
|
+
}
|
|
1105
|
+
classifications: reference(CertificateClassification) [1..*] {
|
|
1106
|
+
modality SHALL
|
|
1107
|
+
}
|
|
1108
|
+
result: enum {
|
|
1109
|
+
modality SHALL
|
|
1110
|
+
enum_values { APPROVED REJECTED REVOKED SUSPENDED }
|
|
1111
|
+
}
|
|
1112
|
+
status: enum [0..1] {
|
|
1113
|
+
modality MAY
|
|
1114
|
+
definition "DRAFT is the machine's initial (evaluation/state-machines.prl) — an issued certificate pre-registration-submission; the issuance gate walks initial → submit (task 61 reconciliation: the machine declared DRAFT, the enum did not — the service's tested behavior kept the machine)."
|
|
1115
|
+
enum_values { DRAFT PENDING_REGISTRATION ACTIVE EXPIRED WITHDRAWN SUSPENDED UNDER_INVESTIGATION }
|
|
1116
|
+
}
|
|
1117
|
+
issue_date: date {
|
|
1118
|
+
modality SHALL
|
|
1119
|
+
}
|
|
1120
|
+
expiry_date: date {
|
|
1121
|
+
modality SHALL
|
|
1122
|
+
}
|
|
1123
|
+
periodicity_years: integer {
|
|
1124
|
+
modality SHALL
|
|
1125
|
+
}
|
|
1126
|
+
conditions: string[] [0..*] {
|
|
1127
|
+
modality SHALL
|
|
1128
|
+
}
|
|
1129
|
+
anr_coverage: reference(ANRCompliance) [0..*] {
|
|
1130
|
+
modality MAY
|
|
1131
|
+
definition "TODO.adoption/11 — the Additional National Requirements coverage recorded on the certificate's content, per targeted country: covered (with the evidence forms) or not evaluated (the tier-0 bypass with its recorded reason) — never a silent gap. Snapshotted from the evaluation report's anr_compliance at issuance."
|
|
1132
|
+
}
|
|
1133
|
+
remarks: text [0..1] {
|
|
1134
|
+
modality MAY
|
|
1135
|
+
definition "Free-text remarks printed on the certificate (the OIML certificate format's optional remarks block), recorded at issuance"
|
|
1136
|
+
}
|
|
1137
|
+
biml_registration: reference(BIMLRegistration) [0..1] {
|
|
1138
|
+
modality MAY
|
|
1139
|
+
}
|
|
1140
|
+
fees: reference(Fees) [0..1] {
|
|
1141
|
+
modality MAY
|
|
1142
|
+
}
|
|
1143
|
+
withdrawal: reference(Withdrawal) [0..1] {
|
|
1144
|
+
modality MAY
|
|
1145
|
+
}
|
|
1146
|
+
suspension: reference(Suspension) [0..1] {
|
|
1147
|
+
modality MAY
|
|
1148
|
+
}
|
|
1149
|
+
investigation: reference(Investigation) [0..1] {
|
|
1150
|
+
modality MAY
|
|
1151
|
+
}
|
|
1152
|
+
edition_change: reference(EditionChange) [0..1] {
|
|
1153
|
+
modality MAY
|
|
1154
|
+
definition "Edition-change workflow per PD-05 §8.3"
|
|
1155
|
+
}
|
|
1156
|
+
parallel_to: string [0..1] {
|
|
1157
|
+
modality MAY
|
|
1158
|
+
}
|
|
1159
|
+
original_applicant: reference(ApplicantInfo) [0..1] {
|
|
1160
|
+
modality MAY
|
|
1161
|
+
}
|
|
1162
|
+
parallel_documentation_possessed: boolean [0..1] {
|
|
1163
|
+
modality MAY
|
|
1164
|
+
definition "Parallel issuance only (PD-05 §8.2.1): the new applicant possesses all the §4.1.2 technical documentation and the existing OIML type evaluation report — verified by the IA"
|
|
1165
|
+
}
|
|
1166
|
+
parallel_inquiry: text [0..1] {
|
|
1167
|
+
modality MAY
|
|
1168
|
+
definition "Parallel issuance only (PD-05 §8.2.2): the IA's validity inquiry (e.g. the original applicant's permission)"
|
|
1169
|
+
}
|
|
1170
|
+
ownership_transferred: reference(OwnershipTransfer) [0..1] {
|
|
1171
|
+
modality MAY
|
|
1172
|
+
}
|
|
1173
|
+
revisions: reference(CertificateRevision) [0..*] {
|
|
1174
|
+
modality SHALL
|
|
1175
|
+
}
|
|
1176
|
+
json_data: object {
|
|
1177
|
+
modality SHALL
|
|
1178
|
+
}
|
|
1179
|
+
origin: enum [0..1] {
|
|
1180
|
+
modality MAY
|
|
1181
|
+
definition "How this record came to exist: platform_workflow (the DEFAULT — an absent origin reads as platform_workflow) or registered_offline (TODO.adoption/02 — records mode: the certificate was issued offline and is registered for the record by a named IA officer; a registered_offline certificate is visually marked on every detail, print and register view and never claims platform test-run evidence)"
|
|
1182
|
+
enum_values { platform_workflow registered_offline }
|
|
1183
|
+
}
|
|
1184
|
+
created: datetime {
|
|
1185
|
+
modality SHALL
|
|
1186
|
+
}
|
|
1187
|
+
modified: datetime {
|
|
1188
|
+
modality SHALL
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
|
|
1192
|
+
class CertificateAnnex#data {
|
|
1193
|
+
store { certificateAnnexes }
|
|
1194
|
+
indexes { certificate_id }
|
|
1195
|
+
id: string {
|
|
1196
|
+
modality SHALL
|
|
1197
|
+
}
|
|
1198
|
+
certificate_id: reference(Certificate) {
|
|
1199
|
+
modality SHALL
|
|
1200
|
+
on_delete cascade
|
|
1201
|
+
required true
|
|
1202
|
+
}
|
|
1203
|
+
certificate_number: string {
|
|
1204
|
+
modality SHALL
|
|
1205
|
+
}
|
|
1206
|
+
member_state: string {
|
|
1207
|
+
modality SHALL
|
|
1208
|
+
}
|
|
1209
|
+
scheme: enum {
|
|
1210
|
+
modality SHALL
|
|
1211
|
+
enum_values { A B }
|
|
1212
|
+
}
|
|
1213
|
+
issuing_authority: reference(IASignatory) {
|
|
1214
|
+
modality SHALL
|
|
1215
|
+
}
|
|
1216
|
+
applicant: reference(ApplicantInfo) {
|
|
1217
|
+
modality SHALL
|
|
1218
|
+
}
|
|
1219
|
+
manufacturer: reference(ManufacturerInfo) {
|
|
1220
|
+
modality SHALL
|
|
1221
|
+
}
|
|
1222
|
+
correction: text {
|
|
1223
|
+
modality SHALL
|
|
1224
|
+
}
|
|
1225
|
+
signatory: reference(Signatory) {
|
|
1226
|
+
modality SHALL
|
|
1227
|
+
}
|
|
1228
|
+
created: datetime {
|
|
1229
|
+
modality SHALL
|
|
1230
|
+
}
|
|
1231
|
+
modified: datetime {
|
|
1232
|
+
modality SHALL
|
|
1233
|
+
}
|
|
1234
|
+
document: reference(DocumentRef) [0..1] {
|
|
1235
|
+
modality MAY
|
|
1236
|
+
definition "The signed annex document — blob-backed when the document store is bound, the reference alone otherwise (TODO.adoption/03)"
|
|
1237
|
+
}
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
class AuditEvent#data {
|
|
1241
|
+
store { auditEvents }
|
|
1242
|
+
indexes { entity_type timestamp standard_id }
|
|
1243
|
+
id: string {
|
|
1244
|
+
modality SHALL
|
|
1245
|
+
}
|
|
1246
|
+
timestamp: datetime {
|
|
1247
|
+
modality SHALL
|
|
1248
|
+
}
|
|
1249
|
+
standard_id: string {
|
|
1250
|
+
modality SHALL
|
|
1251
|
+
}
|
|
1252
|
+
entity_type: string {
|
|
1253
|
+
modality SHALL
|
|
1254
|
+
}
|
|
1255
|
+
entity_id: string {
|
|
1256
|
+
modality SHALL
|
|
1257
|
+
}
|
|
1258
|
+
action: string {
|
|
1259
|
+
modality SHALL
|
|
1260
|
+
}
|
|
1261
|
+
user_id: string [0..1] {
|
|
1262
|
+
modality MAY
|
|
1263
|
+
}
|
|
1264
|
+
user_name: string [0..1] {
|
|
1265
|
+
modality MAY
|
|
1266
|
+
}
|
|
1267
|
+
basis: string [0..1] {
|
|
1268
|
+
modality MAY
|
|
1269
|
+
definition "Why the event happened — the normative or operational ground (TODO.roadmap/55, BUG.R60-SSOT gap 11: every audit-relevant record carries actor + timestamp + basis; service-emitted events may ride metadata.basis, the declared record audit_event cascade carries this first-class field)"
|
|
1270
|
+
}
|
|
1271
|
+
changes: reference(FieldChange) [0..*] {
|
|
1272
|
+
modality MAY
|
|
1273
|
+
}
|
|
1274
|
+
metadata: object [0..1] {
|
|
1275
|
+
modality MAY
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
|
|
1279
|
+
class VerdictFact#data {
|
|
1280
|
+
description { "The observed fact a requirement's machine limit was evaluated against (metamodel D3, TODO.new-paradigm/08): the value resolved from the requirement's primary binds_to path (entity graph) or from the form computed values realising an observable symbol." }
|
|
1281
|
+
helper { true }
|
|
1282
|
+
name: string {
|
|
1283
|
+
modality SHALL
|
|
1284
|
+
definition "binds_to path (e.g. 'sample.test_context.d_max') or observable symbol id (e.g. 'e_l')"
|
|
1285
|
+
}
|
|
1286
|
+
value: reference(QuantityValue) {
|
|
1287
|
+
modality SHALL
|
|
1288
|
+
definition "Observed value — QuantityValue { value, unit? }, never a bare number (INV-1)"
|
|
1289
|
+
}
|
|
1290
|
+
source: string [0..1] {
|
|
1291
|
+
modality MAY
|
|
1292
|
+
definition "Evidence source: the entity path the value resolved from, or the form id/field path of the computed value"
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
class Verdict#data {
|
|
1297
|
+
description { "One per-requirement re-execution judgment (metamodel D3 Verdict, TODO.new-paradigm/08), embedded on TestReportDetermination.verdicts: the requirement's machine limit (OCL) evaluated against the bound facts (entity attributes + form computed values) → pass | fail | invalid | indeterminate. 'invalid' comes from a violated declaration-level CONSTRAINT (TODO.roadmap/51 — the subject's own validity rules, voiding the MEASUREMENT) or a violated test-validity precondition (TODO.refactor/08): both void, never count as an instrument failure. 'indeterminate' means missing evidence or an unevaluable expression (the reason is recorded in notes). An evaluator may override the computed outcome; the override is recorded, never silent." }
|
|
1298
|
+
helper { true }
|
|
1299
|
+
requirement_id: string {
|
|
1300
|
+
modality SHALL
|
|
1301
|
+
definition "Full requirement identifier (e.g. '/req/metrological/measuring-range-max')"
|
|
1302
|
+
}
|
|
1303
|
+
sample_id: reference(MeasuringInstrumentSample) {
|
|
1304
|
+
modality SHALL
|
|
1305
|
+
definition "The sample the bound facts belong to"
|
|
1306
|
+
}
|
|
1307
|
+
fact: reference(VerdictFact) {
|
|
1308
|
+
modality SHALL
|
|
1309
|
+
definition "The observed fact the limit was evaluated against"
|
|
1310
|
+
}
|
|
1311
|
+
limit: object {
|
|
1312
|
+
modality SHALL
|
|
1313
|
+
definition "Limit snapshot { expression, uses, inputs } — the OCL expression and every input value it was evaluated with"
|
|
1314
|
+
}
|
|
1315
|
+
outcome: enum {
|
|
1316
|
+
modality SHALL
|
|
1317
|
+
enum_values { pass fail invalid indeterminate }
|
|
1318
|
+
}
|
|
1319
|
+
modality: enum [0..1] {
|
|
1320
|
+
modality MAY
|
|
1321
|
+
definition "Modality of the requirement limit that produced this verdict (TODO.refactor/08, default shall): a failed should-verdict is an OBSERVATION in the evaluation report, never a pass/fail blocker"
|
|
1322
|
+
enum_values { shall should }
|
|
1323
|
+
}
|
|
1324
|
+
precondition_violations: string[] [0..1] {
|
|
1325
|
+
modality MAY
|
|
1326
|
+
definition "Ids of the violated conformance-test preconditions when outcome = invalid (ConformanceTest.preconditions, evaluated before the limit; a violated precondition voids the run)"
|
|
1327
|
+
}
|
|
1328
|
+
constraint_violations: string[] [0..1] {
|
|
1329
|
+
modality MAY
|
|
1330
|
+
definition "Ids of the violated subject-intrinsic constraints when outcome = invalid (specification/constraints.yaml, TODO.roadmap/51 — declaration-level validity rules evaluated BEFORE preconditions; a violated constraint voids the MEASUREMENT, never a fail)"
|
|
1331
|
+
}
|
|
1332
|
+
overridden: boolean [0..1] {
|
|
1333
|
+
modality MAY
|
|
1334
|
+
definition "True when an evaluator replaced the computed outcome"
|
|
1335
|
+
}
|
|
1336
|
+
override_note: text [0..1] {
|
|
1337
|
+
modality MAY
|
|
1338
|
+
definition "Mandatory justification for an override"
|
|
1339
|
+
}
|
|
1340
|
+
override_by: string [0..1] {
|
|
1341
|
+
modality MAY
|
|
1342
|
+
definition "Evaluator who applied the override"
|
|
1343
|
+
}
|
|
1344
|
+
override_at: datetime [0..1] {
|
|
1345
|
+
modality MAY
|
|
1346
|
+
definition "When the override was applied (ISO timestamp) — with override_by + override_note the override's audit carriers (TODO.roadmap/55, BUG.R60-SSOT gap 11: actor + timestamp + basis, the override is recorded, never silent)"
|
|
1347
|
+
}
|
|
1348
|
+
notes: text [0..1] {
|
|
1349
|
+
modality MAY
|
|
1350
|
+
definition "Why indeterminate (missing evidence, unevaluable expression), or other remarks"
|
|
1351
|
+
}
|
|
1352
|
+
channel_values: string[] [0..1] {
|
|
1353
|
+
modality MAY
|
|
1354
|
+
definition "Channel values (e.g. measurand components co/no/no2) this verdict's evidence covers, from the evidence form instances' component_under_test; per-channel requirements (TODO.refactor/06) need a passing verdict per value"
|
|
1355
|
+
}
|
|
1356
|
+
criterion: enum [0..1] {
|
|
1357
|
+
modality MAY
|
|
1358
|
+
definition "Verdict criterion (TODO.refactor/10; R 91-2, 6.1, OIML D 11-based): I/MPE — limit during the influence factor; D/NSFa — no significant fault AFTER the disturbance (manual intervention allowed, recorded); D/NSFd — no significant fault DURING the disturbance; n/a — observational. Stamped so evaluation reports distinguish fault-during from fault-after"
|
|
1359
|
+
enum_values { I/MPE D/NSFa D/NSFd n/a }
|
|
1360
|
+
}
|
|
1361
|
+
verdict_id: string [0..1] {
|
|
1362
|
+
modality MAY
|
|
1363
|
+
definition "Canonical VerdictQuantity id (TODO.refactor/04) when the requirement judges via limit.accepts — the per-observable key of the canonical verdict chain"
|
|
1364
|
+
}
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
class ApplicantInfo#data {
|
|
1368
|
+
helper { true }
|
|
1369
|
+
company: string {
|
|
1370
|
+
modality SHALL
|
|
1371
|
+
}
|
|
1372
|
+
address: string {
|
|
1373
|
+
modality SHALL
|
|
1374
|
+
}
|
|
1375
|
+
contact_person: string [0..1] {
|
|
1376
|
+
modality MAY
|
|
1377
|
+
}
|
|
1378
|
+
email: string [0..1] {
|
|
1379
|
+
modality MAY
|
|
1380
|
+
}
|
|
1381
|
+
phone: string [0..1] {
|
|
1382
|
+
modality MAY
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
|
|
1386
|
+
class AuthorisedRep#data {
|
|
1387
|
+
helper { true }
|
|
1388
|
+
name: string {
|
|
1389
|
+
modality SHALL
|
|
1390
|
+
}
|
|
1391
|
+
address: string {
|
|
1392
|
+
modality SHALL
|
|
1393
|
+
}
|
|
1394
|
+
}
|
|
1395
|
+
|
|
1396
|
+
class ApplicationDocument#data {
|
|
1397
|
+
helper { true }
|
|
1398
|
+
name: string {
|
|
1399
|
+
modality SHALL
|
|
1400
|
+
}
|
|
1401
|
+
description: string {
|
|
1402
|
+
modality SHALL
|
|
1403
|
+
}
|
|
1404
|
+
submitted: boolean {
|
|
1405
|
+
modality SHALL
|
|
1406
|
+
}
|
|
1407
|
+
reference: string [0..1] {
|
|
1408
|
+
modality MAY
|
|
1409
|
+
}
|
|
1410
|
+
size: integer [0..1] {
|
|
1411
|
+
modality MAY
|
|
1412
|
+
definition "Blob slot (TODO.adoption/03): the stored file's size in bytes — set with blob_key, absent in the file-name-only posture"
|
|
1413
|
+
}
|
|
1414
|
+
type: string [0..1] {
|
|
1415
|
+
modality MAY
|
|
1416
|
+
definition "Blob slot: the stored file's MIME content type"
|
|
1417
|
+
}
|
|
1418
|
+
blob_key: string [0..1] {
|
|
1419
|
+
modality MAY
|
|
1420
|
+
definition "Blob slot: the document-store key (<owner store>/<owner entity id>/<blob id>) — absent when no blob store is bound (the honest file-name-only fallback: reference carries the name, the bytes stay with the sender)"
|
|
1421
|
+
}
|
|
1422
|
+
sha256: string [0..1] {
|
|
1423
|
+
modality MAY
|
|
1424
|
+
definition "Blob slot: the SHA-256 hex digest of the stored bytes — the download path re-verifies it"
|
|
1425
|
+
}
|
|
1426
|
+
uploaded_by: string [0..1] {
|
|
1427
|
+
modality MAY
|
|
1428
|
+
definition "Blob slot provenance: who uploaded the file (the display name)"
|
|
1429
|
+
}
|
|
1430
|
+
uploaded_at: datetime [0..1] {
|
|
1431
|
+
modality MAY
|
|
1432
|
+
definition "Blob slot provenance: when the file was uploaded"
|
|
1433
|
+
}
|
|
1434
|
+
}
|
|
1435
|
+
|
|
1436
|
+
class DocumentRef#data {
|
|
1437
|
+
helper { true }
|
|
1438
|
+
document_type: string {
|
|
1439
|
+
modality SHALL
|
|
1440
|
+
}
|
|
1441
|
+
reference: string [0..1] {
|
|
1442
|
+
modality MAY
|
|
1443
|
+
}
|
|
1444
|
+
description: string [0..1] {
|
|
1445
|
+
modality MAY
|
|
1446
|
+
}
|
|
1447
|
+
size: integer [0..1] {
|
|
1448
|
+
modality MAY
|
|
1449
|
+
definition "Blob slot (TODO.adoption/03): the stored file's size in bytes — set with blob_key, absent in the file-name-only posture"
|
|
1450
|
+
}
|
|
1451
|
+
type: string [0..1] {
|
|
1452
|
+
modality MAY
|
|
1453
|
+
definition "Blob slot: the stored file's MIME content type"
|
|
1454
|
+
}
|
|
1455
|
+
blob_key: string [0..1] {
|
|
1456
|
+
modality MAY
|
|
1457
|
+
definition "Blob slot: the document-store key (<owner store>/<owner entity id>/<blob id>) — absent when no blob store is bound (the honest file-name-only fallback: reference carries the name, the bytes stay with the sender)"
|
|
1458
|
+
}
|
|
1459
|
+
sha256: string [0..1] {
|
|
1460
|
+
modality MAY
|
|
1461
|
+
definition "Blob slot: the SHA-256 hex digest of the stored bytes — the download path re-verifies it"
|
|
1462
|
+
}
|
|
1463
|
+
uploaded_by: string [0..1] {
|
|
1464
|
+
modality MAY
|
|
1465
|
+
definition "Blob slot provenance: who uploaded the file (the display name)"
|
|
1466
|
+
}
|
|
1467
|
+
uploaded_at: datetime [0..1] {
|
|
1468
|
+
modality MAY
|
|
1469
|
+
definition "Blob slot provenance: when the file was uploaded"
|
|
1470
|
+
}
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
class SampleInfo#data {
|
|
1474
|
+
helper { true }
|
|
1475
|
+
sample_count: integer [0..1] {
|
|
1476
|
+
modality MAY
|
|
1477
|
+
}
|
|
1478
|
+
sample_details: text [0..1] {
|
|
1479
|
+
modality MAY
|
|
1480
|
+
}
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
class SampleRequest#data {
|
|
1484
|
+
description { "The IA's request for physical samples against a submitted application (PD-05 §4.3): which models, how many samples of each, the routing (to the IA for onward dispatch, or directly to each named test laboratory), and free-text particulars (deadline, conditions, shipping instructions). Recorded on Application.sample_request when the IA fires ia_requests_samples; the stub samples it spawns carry the request through the custody chain (REQUESTED → IN_TRANSIT → RECEIVED)." }
|
|
1485
|
+
helper { true }
|
|
1486
|
+
routing: enum {
|
|
1487
|
+
modality SHALL
|
|
1488
|
+
definition "The sample-routing decision (PD-05 §4.3 — the IA's sample request carries it): send the samples to the IA (which dispatches them to its laboratories after receipt) or directly to each named test laboratory"
|
|
1489
|
+
enum_values { to_ia to_each_tl }
|
|
1490
|
+
}
|
|
1491
|
+
count: integer {
|
|
1492
|
+
modality SHALL
|
|
1493
|
+
definition "Samples requested per in-scope model"
|
|
1494
|
+
}
|
|
1495
|
+
model_ids: reference(MeasuringInstrumentModel) [0..*] {
|
|
1496
|
+
modality MAY
|
|
1497
|
+
definition "The models the requested samples must cover; absent = the application's whole declared scope"
|
|
1498
|
+
on_delete nullify
|
|
1499
|
+
required false
|
|
1500
|
+
}
|
|
1501
|
+
laboratory_ids: reference(TestLaboratory) [0..*] {
|
|
1502
|
+
modality MAY
|
|
1503
|
+
definition "The receiving laboratories when routing is to_each_tl"
|
|
1504
|
+
on_delete nullify
|
|
1505
|
+
required false
|
|
1506
|
+
}
|
|
1507
|
+
particulars: text [0..1] {
|
|
1508
|
+
modality MAY
|
|
1509
|
+
definition "Deadline, conditions, shipping instructions for the applicant"
|
|
1510
|
+
}
|
|
1511
|
+
requested_by: string [0..1] {
|
|
1512
|
+
modality MAY
|
|
1513
|
+
definition "The IA officer who issued the request (audit provenance)"
|
|
1514
|
+
}
|
|
1515
|
+
requested_at: datetime [0..1] {
|
|
1516
|
+
modality MAY
|
|
1517
|
+
}
|
|
1518
|
+
}
|
|
1519
|
+
|
|
1520
|
+
class PreviousTestReportRef#data {
|
|
1521
|
+
helper { true }
|
|
1522
|
+
report_number: string {
|
|
1523
|
+
modality SHALL
|
|
1524
|
+
}
|
|
1525
|
+
issuing_authority: string [0..1] {
|
|
1526
|
+
modality MAY
|
|
1527
|
+
}
|
|
1528
|
+
date: date [0..1] {
|
|
1529
|
+
modality MAY
|
|
1530
|
+
}
|
|
1531
|
+
relevant_scope: text [0..1] {
|
|
1532
|
+
modality MAY
|
|
1533
|
+
}
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
class FeeAcceptance#data {
|
|
1537
|
+
helper { true }
|
|
1538
|
+
application_fee_accepted: boolean [0..1] {
|
|
1539
|
+
modality MAY
|
|
1540
|
+
}
|
|
1541
|
+
evaluation_fee_accepted: boolean [0..1] {
|
|
1542
|
+
modality MAY
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
|
|
1546
|
+
class IAReviewResult#data {
|
|
1547
|
+
description { "IA review outcome per PD-05 §4.2" }
|
|
1548
|
+
helper { true }
|
|
1549
|
+
fee_estimate: reference(FeeEstimate) [0..1] {
|
|
1550
|
+
modality MAY
|
|
1551
|
+
}
|
|
1552
|
+
sample_count_required: integer [0..1] {
|
|
1553
|
+
modality MAY
|
|
1554
|
+
definition "Number of samples required (PD-05 §4.2)"
|
|
1555
|
+
}
|
|
1556
|
+
estimated_timeline: string [0..1] {
|
|
1557
|
+
modality MAY
|
|
1558
|
+
}
|
|
1559
|
+
decision_date: date [0..1] {
|
|
1560
|
+
modality MAY
|
|
1561
|
+
}
|
|
1562
|
+
decision_letter: text [0..1] {
|
|
1563
|
+
modality MAY
|
|
1564
|
+
definition "Written decision (acceptance or refusal)"
|
|
1565
|
+
}
|
|
1566
|
+
refusal_reason: text [0..1] {
|
|
1567
|
+
modality MAY
|
|
1568
|
+
definition "Required if decision is REJECTED (PD-05 §4.2.2)"
|
|
1569
|
+
}
|
|
1570
|
+
}
|
|
1571
|
+
|
|
1572
|
+
class FeeEstimate#data {
|
|
1573
|
+
helper { true }
|
|
1574
|
+
application_fee: number [0..1] {
|
|
1575
|
+
modality MAY
|
|
1576
|
+
unit "EUR"
|
|
1577
|
+
}
|
|
1578
|
+
evaluation_fee_estimate: number [0..1] {
|
|
1579
|
+
modality MAY
|
|
1580
|
+
unit "EUR"
|
|
1581
|
+
}
|
|
1582
|
+
currency: string [0..1] {
|
|
1583
|
+
modality MAY
|
|
1584
|
+
}
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1587
|
+
class TestReportFormRef#data {
|
|
1588
|
+
helper { true }
|
|
1589
|
+
form_id: string {
|
|
1590
|
+
modality SHALL
|
|
1591
|
+
}
|
|
1592
|
+
instance_id: string [0..1] {
|
|
1593
|
+
modality MAY
|
|
1594
|
+
}
|
|
1595
|
+
source: string {
|
|
1596
|
+
modality SHALL
|
|
1597
|
+
default "base"
|
|
1598
|
+
}
|
|
1599
|
+
country: string [0..1] {
|
|
1600
|
+
modality MAY
|
|
1601
|
+
}
|
|
1602
|
+
required: boolean {
|
|
1603
|
+
modality SHALL
|
|
1604
|
+
}
|
|
1605
|
+
}
|
|
1606
|
+
|
|
1607
|
+
class FormOmission#data {
|
|
1608
|
+
description { "Declares that a specific R 60-3 Test Report Form does not apply to the model group being tested in this TestReport, with justification. Per user (2026-07-02): \"If the IA or test lab decides that a particular TRF doesn't need to be filled for a model family/group, then they should have a way to specify that.\"" }
|
|
1609
|
+
helper { true }
|
|
1610
|
+
id: string {
|
|
1611
|
+
modality SHALL
|
|
1612
|
+
}
|
|
1613
|
+
test_report_id: reference(TestReport) {
|
|
1614
|
+
modality SHALL
|
|
1615
|
+
on_delete cascade
|
|
1616
|
+
required true
|
|
1617
|
+
}
|
|
1618
|
+
form_id: string {
|
|
1619
|
+
modality SHALL
|
|
1620
|
+
definition "R 60-3 form identifier being omitted (e.g. 'humidity-sh')"
|
|
1621
|
+
}
|
|
1622
|
+
reason: text {
|
|
1623
|
+
modality SHALL
|
|
1624
|
+
definition "Justification, e.g. 'Not applicable — CH humidity class, SH test not required'"
|
|
1625
|
+
}
|
|
1626
|
+
decided_by: enum {
|
|
1627
|
+
modality SHALL
|
|
1628
|
+
definition "Who decided the form doesn't apply"
|
|
1629
|
+
enum_values { ia test_lab }
|
|
1630
|
+
}
|
|
1631
|
+
decided_at: datetime {
|
|
1632
|
+
modality SHALL
|
|
1633
|
+
}
|
|
1634
|
+
}
|
|
1635
|
+
|
|
1636
|
+
class ArtifactInstance#data {
|
|
1637
|
+
description { "One produced artifact (TODO.roadmap/09, gap audit G2) — a HAS-level output OF THE INSTRUMENT conforming to an artifact definition of the standard's model/artifacts.yaml (the IS-level contract; e.g. R 91's enforcement evidence file, R 91-1 6.6/7.2.2/7.3), embedded in the TestReport it evidences. Distinct from an EvidenceRecord: the artifact is the instrument's own output, not the lab's record of the test (linker rule artifact-evidence-separation keeps the vocabularies apart). Content entries key on the definition's content-contract field ids; required (non-optional) fields must be populated (linker rule artifact-presence)." }
|
|
1638
|
+
helper { true }
|
|
1639
|
+
id: string {
|
|
1640
|
+
modality SHALL
|
|
1641
|
+
}
|
|
1642
|
+
of: string {
|
|
1643
|
+
modality SHALL
|
|
1644
|
+
definition "Artifact definition id (model/artifacts.yaml artifact_definitions[].id)"
|
|
1645
|
+
}
|
|
1646
|
+
produced_at: datetime [0..1] {
|
|
1647
|
+
modality MAY
|
|
1648
|
+
definition "When the instrument produced the artifact"
|
|
1649
|
+
}
|
|
1650
|
+
by: string [0..1] {
|
|
1651
|
+
modality MAY
|
|
1652
|
+
definition "Producer id — the sample/instrument that produced the artifact"
|
|
1653
|
+
}
|
|
1654
|
+
content: map<field_id, QuantityValue> {
|
|
1655
|
+
modality SHALL
|
|
1656
|
+
definition "Contract field id → value entry ({ value, unit? }); a numeric value populating a quantity-kind-typed field carries a unit of that kind"
|
|
1657
|
+
}
|
|
1658
|
+
links: string[] [0..*] {
|
|
1659
|
+
modality MAY
|
|
1660
|
+
definition "Run/assignment/report ids the instance is linked to; per_measurement definitions must link ≥1 (linker rule artifact-presence)"
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1664
|
+
class FormDetermination#data {
|
|
1665
|
+
helper { true }
|
|
1666
|
+
form_id: string {
|
|
1667
|
+
modality SHALL
|
|
1668
|
+
}
|
|
1669
|
+
decision: enum {
|
|
1670
|
+
modality SHALL
|
|
1671
|
+
enum_values { PASS FAIL CONDITIONAL NOT_REVIEWED }
|
|
1672
|
+
}
|
|
1673
|
+
notes: text {
|
|
1674
|
+
modality SHALL
|
|
1675
|
+
}
|
|
1676
|
+
reviewed_date: date {
|
|
1677
|
+
modality SHALL
|
|
1678
|
+
}
|
|
1679
|
+
field_determinations: reference(FieldDetermination) [0..*] {
|
|
1680
|
+
modality MAY
|
|
1681
|
+
}
|
|
1682
|
+
}
|
|
1683
|
+
|
|
1684
|
+
class FieldDetermination#data {
|
|
1685
|
+
helper { true }
|
|
1686
|
+
decision: enum {
|
|
1687
|
+
modality SHALL
|
|
1688
|
+
enum_values { PASS FAIL CONDITIONAL NOT_REVIEWED }
|
|
1689
|
+
}
|
|
1690
|
+
notes: text {
|
|
1691
|
+
modality SHALL
|
|
1692
|
+
}
|
|
1693
|
+
}
|
|
1694
|
+
|
|
1695
|
+
class TestEvaluationReportRef#data {
|
|
1696
|
+
helper { true }
|
|
1697
|
+
report_number: string {
|
|
1698
|
+
modality SHALL
|
|
1699
|
+
}
|
|
1700
|
+
date: date {
|
|
1701
|
+
modality SHALL
|
|
1702
|
+
}
|
|
1703
|
+
pages: integer [0..1] {
|
|
1704
|
+
modality MAY
|
|
1705
|
+
}
|
|
1706
|
+
}
|
|
1707
|
+
|
|
1708
|
+
class CertificateClassification#data {
|
|
1709
|
+
helper { true }
|
|
1710
|
+
label: string {
|
|
1711
|
+
modality SHALL
|
|
1712
|
+
}
|
|
1713
|
+
characteristics: object {
|
|
1714
|
+
modality SHALL
|
|
1715
|
+
}
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1718
|
+
class CertificateRevision#data {
|
|
1719
|
+
helper { true }
|
|
1720
|
+
revision: integer {
|
|
1721
|
+
modality SHALL
|
|
1722
|
+
}
|
|
1723
|
+
date: date {
|
|
1724
|
+
modality SHALL
|
|
1725
|
+
}
|
|
1726
|
+
description: text {
|
|
1727
|
+
modality SHALL
|
|
1728
|
+
}
|
|
1729
|
+
changes: reference(RevisionChange) [0..*] {
|
|
1730
|
+
modality MAY
|
|
1731
|
+
}
|
|
1732
|
+
modifies_type: boolean [0..1] {
|
|
1733
|
+
modality MAY
|
|
1734
|
+
definition "The revision modifies the certified type (PD-05 §8.1.3) — triggers the §8.1.4 retest-list obligation"
|
|
1735
|
+
}
|
|
1736
|
+
corrects_error: boolean [0..1] {
|
|
1737
|
+
modality MAY
|
|
1738
|
+
definition "The revision corrects an error (PD-05 §8.1.5) — the previous registered copy is marked SUPERSEDED on registration"
|
|
1739
|
+
}
|
|
1740
|
+
retest_list: reference(RetestItem) [0..*] {
|
|
1741
|
+
modality MAY
|
|
1742
|
+
definition "The IA-determined list of tests and examinations performed on the modified instrument (PD-05 §8.1.4) — mandatory when modifies_type"
|
|
1743
|
+
}
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1746
|
+
class RetestItem#data {
|
|
1747
|
+
description { "One entry of the §8.1.4 retest list: a test or examination the Issuing Authority determined must be performed on the modified instrument, with the reason it is required." }
|
|
1748
|
+
helper { true }
|
|
1749
|
+
test_id: string {
|
|
1750
|
+
modality SHALL
|
|
1751
|
+
definition "Conformance-test id (or free identification of the examination)"
|
|
1752
|
+
}
|
|
1753
|
+
reason: text {
|
|
1754
|
+
modality SHALL
|
|
1755
|
+
}
|
|
1756
|
+
report_ref: string [0..1] {
|
|
1757
|
+
modality MAY
|
|
1758
|
+
definition "The test report evidencing the performed retest (PD-05 §8.1.3 references)"
|
|
1759
|
+
}
|
|
1760
|
+
}
|
|
1761
|
+
|
|
1762
|
+
class AppliedAnr#data {
|
|
1763
|
+
description { "One additional national requirement test applied for under Scheme A (PD-05 §5.1.4): the ANR as listed in a Utilizer/Associate OIML-CS Declaration, with the results placement (§5.4.2 — a separate test report or the OIML test reports) recorded at discharge. TODO.adoption/11: populated at application time from the targeted countries' APPROVED AnrDeclaration records, snapshotting country/tier for provenance (a later tier promotion never rewrites the history); the tier-0 honest bypass marks coverage = not_evaluated with its reason — the certificate's ANR section reports it per country, never a silent gap." }
|
|
1764
|
+
helper { true }
|
|
1765
|
+
anr: text {
|
|
1766
|
+
modality SHALL
|
|
1767
|
+
definition "The additional national requirement (verbatim from the Declaration's additional_national_requirements)"
|
|
1768
|
+
}
|
|
1769
|
+
for_participant_id: string {
|
|
1770
|
+
modality SHALL
|
|
1771
|
+
definition "The Utilizer/Associate whose Declaration lists the ANR"
|
|
1772
|
+
}
|
|
1773
|
+
declaration_id: string [0..1] {
|
|
1774
|
+
modality MAY
|
|
1775
|
+
definition "The Declaration record the ANR was taken from"
|
|
1776
|
+
}
|
|
1777
|
+
country: string [0..1] {
|
|
1778
|
+
modality MAY
|
|
1779
|
+
definition "TODO.adoption/11 — the targeted market (Application.anr_countries token) this ANR belongs to, snapshotted at application time"
|
|
1780
|
+
}
|
|
1781
|
+
tier: enum [0..1] {
|
|
1782
|
+
modality MAY
|
|
1783
|
+
definition "TODO.adoption/11 — the declaring AnrDeclaration's content tier at application time (the coverage history keeps both forms' provenance across a later promotion)"
|
|
1784
|
+
enum_values { tier_1 tier_2 }
|
|
1785
|
+
}
|
|
1786
|
+
coverage: enum [0..1] {
|
|
1787
|
+
modality MAY
|
|
1788
|
+
definition "TODO.adoption/11 — the tier-0 honest bypass: not_evaluated marks the ANR as deliberately not evaluated in this evaluation (not_evaluated_reason is then mandatory); absent or evaluated = covered by the evaluation"
|
|
1789
|
+
enum_values { evaluated not_evaluated }
|
|
1790
|
+
}
|
|
1791
|
+
not_evaluated_reason: text [0..1] {
|
|
1792
|
+
modality MAY
|
|
1793
|
+
definition "Mandatory when coverage = not_evaluated — the recorded reason the ANR is not evaluated in this evaluation"
|
|
1794
|
+
}
|
|
1795
|
+
results_in: enum [0..1] {
|
|
1796
|
+
modality MAY
|
|
1797
|
+
definition "Where the ANR results are reported (PD-05 §5.4.2) — set at discharge"
|
|
1798
|
+
enum_values { separate_report oiml_test_report }
|
|
1799
|
+
}
|
|
1800
|
+
discharged: boolean [0..1] {
|
|
1801
|
+
modality MAY
|
|
1802
|
+
definition "The ANR tests were conducted and reported (§5.3.2/§5.4.2) — the §5.6.3 letter validates discharged ANRs"
|
|
1803
|
+
}
|
|
1804
|
+
}
|
|
1805
|
+
|
|
1806
|
+
class RevisionChange#data {
|
|
1807
|
+
helper { true }
|
|
1808
|
+
field: string {
|
|
1809
|
+
modality SHALL
|
|
1810
|
+
}
|
|
1811
|
+
old_value: any {
|
|
1812
|
+
modality MAY
|
|
1813
|
+
}
|
|
1814
|
+
new_value: any {
|
|
1815
|
+
modality MAY
|
|
1816
|
+
}
|
|
1817
|
+
}
|
|
1818
|
+
|
|
1819
|
+
class BIMLRegistration#data {
|
|
1820
|
+
helper { true }
|
|
1821
|
+
submitted_date: date [0..1] {
|
|
1822
|
+
modality MAY
|
|
1823
|
+
}
|
|
1824
|
+
registered_date: date [0..1] {
|
|
1825
|
+
modality MAY
|
|
1826
|
+
}
|
|
1827
|
+
registration_number: string [0..1] {
|
|
1828
|
+
modality MAY
|
|
1829
|
+
}
|
|
1830
|
+
}
|
|
1831
|
+
|
|
1832
|
+
class Fees#data {
|
|
1833
|
+
helper { true }
|
|
1834
|
+
application_fee: number [0..1] {
|
|
1835
|
+
modality MAY
|
|
1836
|
+
}
|
|
1837
|
+
evaluation_fee: number [0..1] {
|
|
1838
|
+
modality MAY
|
|
1839
|
+
}
|
|
1840
|
+
registration_fee: number [0..1] {
|
|
1841
|
+
modality MAY
|
|
1842
|
+
}
|
|
1843
|
+
currency: string [0..1] {
|
|
1844
|
+
modality MAY
|
|
1845
|
+
}
|
|
1846
|
+
paid_date: date [0..1] {
|
|
1847
|
+
modality MAY
|
|
1848
|
+
}
|
|
1849
|
+
invoice_number: string [0..1] {
|
|
1850
|
+
modality MAY
|
|
1851
|
+
}
|
|
1852
|
+
}
|
|
1853
|
+
|
|
1854
|
+
class Withdrawal#data {
|
|
1855
|
+
helper { true }
|
|
1856
|
+
date: date {
|
|
1857
|
+
modality SHALL
|
|
1858
|
+
}
|
|
1859
|
+
reason: text {
|
|
1860
|
+
modality SHALL
|
|
1861
|
+
}
|
|
1862
|
+
requested_by: enum {
|
|
1863
|
+
modality SHALL
|
|
1864
|
+
enum_values { ia manufacturer biml }
|
|
1865
|
+
}
|
|
1866
|
+
reported_to_biml: boolean {
|
|
1867
|
+
modality SHALL
|
|
1868
|
+
}
|
|
1869
|
+
}
|
|
1870
|
+
|
|
1871
|
+
class Suspension#data {
|
|
1872
|
+
helper { true }
|
|
1873
|
+
date: date {
|
|
1874
|
+
modality SHALL
|
|
1875
|
+
}
|
|
1876
|
+
reason: text {
|
|
1877
|
+
modality SHALL
|
|
1878
|
+
}
|
|
1879
|
+
lift_date: date [0..1] {
|
|
1880
|
+
modality MAY
|
|
1881
|
+
}
|
|
1882
|
+
}
|
|
1883
|
+
|
|
1884
|
+
class Investigation#data {
|
|
1885
|
+
helper { true }
|
|
1886
|
+
date: date {
|
|
1887
|
+
modality SHALL
|
|
1888
|
+
}
|
|
1889
|
+
evidence: text {
|
|
1890
|
+
modality SHALL
|
|
1891
|
+
}
|
|
1892
|
+
status: enum {
|
|
1893
|
+
modality SHALL
|
|
1894
|
+
enum_values { open resolved deregistered }
|
|
1895
|
+
}
|
|
1896
|
+
outcome: text [0..1] {
|
|
1897
|
+
modality MAY
|
|
1898
|
+
}
|
|
1899
|
+
resolved_date: date [0..1] {
|
|
1900
|
+
modality MAY
|
|
1901
|
+
definition "The date the investigation closed (status resolved/deregistered) — the closure hook the surveillance wiring reads to judge a certificate flag stale (an open escalation record never rewrites; the resolution event closes it, TODO.v2/13 item 7)"
|
|
1902
|
+
}
|
|
1903
|
+
reported_to_biml: boolean {
|
|
1904
|
+
modality SHALL
|
|
1905
|
+
}
|
|
1906
|
+
}
|
|
1907
|
+
|
|
1908
|
+
class EditionChange#data {
|
|
1909
|
+
description { "Edition-change workflow per PD-05 §8.3" }
|
|
1910
|
+
helper { true }
|
|
1911
|
+
previous_edition: integer {
|
|
1912
|
+
modality SHALL
|
|
1913
|
+
definition "Year of the previous edition"
|
|
1914
|
+
}
|
|
1915
|
+
new_edition: integer {
|
|
1916
|
+
modality SHALL
|
|
1917
|
+
}
|
|
1918
|
+
additional_tests_required: boolean {
|
|
1919
|
+
modality SHALL
|
|
1920
|
+
}
|
|
1921
|
+
additional_tests_description: text [0..1] {
|
|
1922
|
+
modality MAY
|
|
1923
|
+
}
|
|
1924
|
+
new_evaluation_report_id: reference(EvaluationReport) [0..1] {
|
|
1925
|
+
modality MAY
|
|
1926
|
+
on_delete nullify
|
|
1927
|
+
required false
|
|
1928
|
+
}
|
|
1929
|
+
}
|
|
1930
|
+
|
|
1931
|
+
class OwnershipTransfer#data {
|
|
1932
|
+
helper { true }
|
|
1933
|
+
from: reference(ApplicantInfo) {
|
|
1934
|
+
modality SHALL
|
|
1935
|
+
}
|
|
1936
|
+
to: reference(ApplicantInfo) {
|
|
1937
|
+
modality SHALL
|
|
1938
|
+
}
|
|
1939
|
+
transfer_date: date {
|
|
1940
|
+
modality SHALL
|
|
1941
|
+
}
|
|
1942
|
+
verified_by: string {
|
|
1943
|
+
modality SHALL
|
|
1944
|
+
}
|
|
1945
|
+
}
|
|
1946
|
+
|
|
1947
|
+
class ManufacturerInfo#data {
|
|
1948
|
+
helper { true }
|
|
1949
|
+
company: string {
|
|
1950
|
+
modality SHALL
|
|
1951
|
+
}
|
|
1952
|
+
address: string {
|
|
1953
|
+
modality SHALL
|
|
1954
|
+
}
|
|
1955
|
+
}
|
|
1956
|
+
|
|
1957
|
+
class DocumentationFileRef#data {
|
|
1958
|
+
helper { true }
|
|
1959
|
+
reference_number: string {
|
|
1960
|
+
modality SHALL
|
|
1961
|
+
}
|
|
1962
|
+
date: date {
|
|
1963
|
+
modality SHALL
|
|
1964
|
+
}
|
|
1965
|
+
pages: integer {
|
|
1966
|
+
modality SHALL
|
|
1967
|
+
}
|
|
1968
|
+
}
|
|
1969
|
+
|
|
1970
|
+
class ANRCompliance#data {
|
|
1971
|
+
helper { true }
|
|
1972
|
+
country: string {
|
|
1973
|
+
modality SHALL
|
|
1974
|
+
}
|
|
1975
|
+
decision: enum {
|
|
1976
|
+
modality SHALL
|
|
1977
|
+
definition "TODO.adoption/11 — PENDING: targeted, the evaluation has not concluded the coverage yet; NOT_EVALUATED is the tier-0 honest bypass: every ANR of the country was marked not evaluated in this evaluation (the per-ANR reasons ride items); never a silent gap"
|
|
1978
|
+
enum_values { APPROVED REJECTED CONDITIONALLY_APPROVED NOT_EVALUATED PENDING }
|
|
1979
|
+
}
|
|
1980
|
+
forms: string[] [0..*] {
|
|
1981
|
+
modality MAY
|
|
1982
|
+
}
|
|
1983
|
+
notes: text [0..1] {
|
|
1984
|
+
modality MAY
|
|
1985
|
+
}
|
|
1986
|
+
items: reference(ANRComplianceItem) [0..*] {
|
|
1987
|
+
modality MAY
|
|
1988
|
+
definition "TODO.adoption/11 — the per-ANR coverage detail (evaluated with its evidence forms / not_evaluated with its reason)"
|
|
1989
|
+
}
|
|
1990
|
+
}
|
|
1991
|
+
|
|
1992
|
+
class ANRComplianceItem#data {
|
|
1993
|
+
description { "TODO.adoption/11 — one applied ANR's coverage inside a country's ANRCompliance entry: the requirement snapshot, its declaration provenance and tier at application time, whether the evaluation covered it (with the evidence form ids) or bypassed it (with the recorded reason)." }
|
|
1994
|
+
helper { true }
|
|
1995
|
+
anr: text {
|
|
1996
|
+
modality SHALL
|
|
1997
|
+
definition "The applied requirement (snapshot at application time)"
|
|
1998
|
+
}
|
|
1999
|
+
declaration_id: string [0..1] {
|
|
2000
|
+
modality MAY
|
|
2001
|
+
definition "The AnrDeclaration the ANR was resolved from"
|
|
2002
|
+
}
|
|
2003
|
+
tier: enum [0..1] {
|
|
2004
|
+
modality MAY
|
|
2005
|
+
enum_values { tier_1 tier_2 }
|
|
2006
|
+
}
|
|
2007
|
+
coverage: enum {
|
|
2008
|
+
modality SHALL
|
|
2009
|
+
enum_values { evaluated not_evaluated }
|
|
2010
|
+
}
|
|
2011
|
+
reason: text [0..1] {
|
|
2012
|
+
modality MAY
|
|
2013
|
+
definition "The recorded bypass reason (mandatory on not_evaluated)"
|
|
2014
|
+
}
|
|
2015
|
+
forms: string[] [0..*] {
|
|
2016
|
+
modality MAY
|
|
2017
|
+
definition "The evidence form ids the coverage was evaluated through (the ANR test forms on the application's test reports)"
|
|
2018
|
+
}
|
|
2019
|
+
}
|
|
2020
|
+
|
|
2021
|
+
class IASignatory#data {
|
|
2022
|
+
helper { true }
|
|
2023
|
+
name: string {
|
|
2024
|
+
modality SHALL
|
|
2025
|
+
}
|
|
2026
|
+
address: string {
|
|
2027
|
+
modality SHALL
|
|
2028
|
+
}
|
|
2029
|
+
responsible_person: string {
|
|
2030
|
+
modality SHALL
|
|
2031
|
+
}
|
|
2032
|
+
}
|
|
2033
|
+
|
|
2034
|
+
class Signatory#data {
|
|
2035
|
+
helper { true }
|
|
2036
|
+
name: string {
|
|
2037
|
+
modality SHALL
|
|
2038
|
+
}
|
|
2039
|
+
position: string {
|
|
2040
|
+
modality SHALL
|
|
2041
|
+
}
|
|
2042
|
+
date: date {
|
|
2043
|
+
modality SHALL
|
|
2044
|
+
}
|
|
2045
|
+
}
|
|
2046
|
+
|
|
2047
|
+
class FieldChange#data {
|
|
2048
|
+
helper { true }
|
|
2049
|
+
field: string {
|
|
2050
|
+
modality SHALL
|
|
2051
|
+
}
|
|
2052
|
+
old_value: any {
|
|
2053
|
+
modality MAY
|
|
2054
|
+
}
|
|
2055
|
+
new_value: any {
|
|
2056
|
+
modality MAY
|
|
2057
|
+
}
|
|
2058
|
+
}
|
|
2059
|
+
|
|
2060
|
+
class ApprovalRecord#data {
|
|
2061
|
+
helper { true }
|
|
2062
|
+
approver_role: string {
|
|
2063
|
+
modality SHALL
|
|
2064
|
+
}
|
|
2065
|
+
approver_name: string {
|
|
2066
|
+
modality SHALL
|
|
2067
|
+
}
|
|
2068
|
+
decision: enum {
|
|
2069
|
+
modality SHALL
|
|
2070
|
+
enum_values { APPROVED REJECTED CONDITIONALLY_APPROVED }
|
|
2071
|
+
}
|
|
2072
|
+
decision_date: datetime {
|
|
2073
|
+
modality SHALL
|
|
2074
|
+
}
|
|
2075
|
+
notes: string [0..1] {
|
|
2076
|
+
modality MAY
|
|
2077
|
+
}
|
|
2078
|
+
}
|
|
2079
|
+
|