@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.
Files changed (460) hide show
  1. package/AGENTS.md +60 -0
  2. package/LICENSE +21 -0
  3. package/README.md +68 -0
  4. package/acme-cgm-200/model/cgm200.prl +284 -0
  5. package/acme-cgm-200/model/r144-map.prl +337 -0
  6. package/acme-cgm-200/package.primmel +39 -0
  7. package/acme-cgm-system/model/cgm-system.prl +125 -0
  8. package/acme-cgm-system/model/r144-map.prl +75 -0
  9. package/acme-cgm-system/model/sample-line.prl +42 -0
  10. package/acme-cgm-system/package.primmel +23 -0
  11. package/acme-lc500/model/lc500.prl +218 -0
  12. package/acme-lc500/model/passport.prl +43 -0
  13. package/acme-lc500/model/r60-map.prl +161 -0
  14. package/acme-lc500/model/twin-cert-map.prl +114 -0
  15. package/acme-lc500/package.primmel +35 -0
  16. package/acme-md3xx/model/md350.prl +317 -0
  17. package/acme-md3xx/model/r129-map.prl +346 -0
  18. package/acme-md3xx/package.primmel +49 -0
  19. package/acme-rs180/model/r91-map.prl +234 -0
  20. package/acme-rs180/model/rs180.prl +236 -0
  21. package/acme-rs180/package.primmel +47 -0
  22. package/ims-demo/model/ims.prl +23 -0
  23. package/ims-demo/model/isms-map.prl +60 -0
  24. package/ims-demo/model/qms-map.prl +73 -0
  25. package/ims-demo/package.primmel +42 -0
  26. package/isms-ref/model/isms.prl +34 -0
  27. package/isms-ref/package.primmel +35 -0
  28. package/iso-iec-17000/package.primmel +8 -0
  29. package/iso-iec-17000/terminology.prl +268 -0
  30. package/iso-iec-17025/package.primmel +10 -0
  31. package/iso-iec-17025/specification/requirements/lab.prl +474 -0
  32. package/iso-iec-17025/terminology.prl +72 -0
  33. package/iso-iec-17065/package.primmel +10 -0
  34. package/iso-iec-17065/specification/requirements/body.prl +446 -0
  35. package/iso-iec-17065/terminology.prl +103 -0
  36. package/iso-iec-17067/package.primmel +10 -0
  37. package/iso-iec-17067/specification/requirements/scheme-content.prl +300 -0
  38. package/iso-iec-17067/terminology.prl +24 -0
  39. package/oiml-cs/package.primmel +10 -0
  40. package/oiml-cs/specification/discrepancies.prl +26 -0
  41. package/oiml-cs/specification/requirements/cs.prl +515 -0
  42. package/oiml-cs-dataspace/.primmel-allowlist.prl +25 -0
  43. package/oiml-cs-dataspace/package.primmel +9 -0
  44. package/oiml-cs-dataspace/specification/dataspace.prl +73 -0
  45. package/oiml-cs-dataspace/specification/policies.prl +68 -0
  46. package/oiml-integrated-ref/model/probe-pairing.prl +71 -0
  47. package/oiml-integrated-ref/package.primmel +10 -0
  48. package/oiml-r129/.primmel-allowlist.prl +2 -0
  49. package/oiml-r129/evaluation/processes.prl +152 -0
  50. package/oiml-r129/evaluation/workflow.prl +48 -0
  51. package/oiml-r129/execution/forms/admin/adjustments-modifications.prl +30 -0
  52. package/oiml-r129/execution/forms/admin/checklist.prl +70 -0
  53. package/oiml-r129/execution/forms/admin/configuration.prl +31 -0
  54. package/oiml-r129/execution/forms/admin/equipment-info.prl +27 -0
  55. package/oiml-r129/execution/forms/admin/general-info.prl +63 -0
  56. package/oiml-r129/execution/forms/admin/identification.prl +49 -0
  57. package/oiml-r129/execution/forms/admin/sample-selection.prl +30 -0
  58. package/oiml-r129/execution/forms/admin/summary-results.prl +50 -0
  59. package/oiml-r129/execution/forms/emc/bursts.prl +88 -0
  60. package/oiml-r129/execution/forms/emc/esd.prl +66 -0
  61. package/oiml-r129/execution/forms/emc/low-voltage-battery.prl +58 -0
  62. package/oiml-r129/execution/forms/emc/rf-immunity-conducted.prl +59 -0
  63. package/oiml-r129/execution/forms/emc/rf-immunity-radiated.prl +59 -0
  64. package/oiml-r129/execution/forms/emc/surge.prl +61 -0
  65. package/oiml-r129/execution/forms/emc/voltage-dips.prl +62 -0
  66. package/oiml-r129/execution/forms/emc/voltage-variation.prl +58 -0
  67. package/oiml-r129/execution/forms/env/damp-heat-cyclic.prl +43 -0
  68. package/oiml-r129/execution/forms/env/damp-heat-steady.prl +50 -0
  69. package/oiml-r129/execution/forms/env/static-temperatures.prl +61 -0
  70. package/oiml-r129/execution/forms/shared/headers.prl +86 -0
  71. package/oiml-r129/execution/forms/tests/acoustics.prl +44 -0
  72. package/oiml-r129/execution/forms/tests/ambient-light.prl +46 -0
  73. package/oiml-r129/execution/forms/tests/construction-examination.prl +46 -0
  74. package/oiml-r129/execution/forms/tests/examination-checklist.prl +51 -0
  75. package/oiml-r129/execution/forms/tests/object-shape.prl +43 -0
  76. package/oiml-r129/execution/forms/tests/orientation-position.prl +31 -0
  77. package/oiml-r129/execution/forms/tests/repeatability.prl +65 -0
  78. package/oiml-r129/execution/forms/tests/speed-movement.prl +59 -0
  79. package/oiml-r129/execution/forms/tests/surface-characteristics.prl +44 -0
  80. package/oiml-r129/execution/forms/tests/warm-up-time.prl +35 -0
  81. package/oiml-r129/execution/subforms/dimension-measurement.prl +93 -0
  82. package/oiml-r129/layers.prl +50 -0
  83. package/oiml-r129/model/attributes.prl +243 -0
  84. package/oiml-r129/model/behaviors.prl +79 -0
  85. package/oiml-r129/model/capabilities.prl +29 -0
  86. package/oiml-r129/model/characteristics.prl +8 -0
  87. package/oiml-r129/model/conditions.prl +23 -0
  88. package/oiml-r129/model/instrument.prl +67 -0
  89. package/oiml-r129/model/state.prl +22 -0
  90. package/oiml-r129/model/twin.prl +23 -0
  91. package/oiml-r129/package.primmel +15 -0
  92. package/oiml-r129/payload/application.yaml +40 -0
  93. package/oiml-r129/payload/conditions-common-test.yaml +8 -0
  94. package/oiml-r129/payload/formulas-variants.yaml +33 -0
  95. package/oiml-r129/payload/promises.yaml +102 -0
  96. package/oiml-r129/payload/sample-data.yaml +300 -0
  97. package/oiml-r129/references.prl +306 -0
  98. package/oiml-r129/sources-prd/coverage.json +59 -0
  99. package/oiml-r129/sources-prd/r129-1.sentences.json +4238 -0
  100. package/oiml-r129/sources-prd/r129-2.sentences.json +1139 -0
  101. package/oiml-r129/sources-prd/r129-3.sentences.json +3809 -0
  102. package/oiml-r129/sources-prd/r129-4.sentences.json +1227 -0
  103. package/oiml-r129/specification/calculations.prl +83 -0
  104. package/oiml-r129/specification/conformance/disturbance-tests.prl +212 -0
  105. package/oiml-r129/specification/conformance/effect-tests.prl +70 -0
  106. package/oiml-r129/specification/conformance/examinations.prl +83 -0
  107. package/oiml-r129/specification/conformance/metrological-tests.prl +178 -0
  108. package/oiml-r129/specification/formulas.prl +9 -0
  109. package/oiml-r129/specification/requirements/electronic.prl +46 -0
  110. package/oiml-r129/specification/requirements/metrological.prl +83 -0
  111. package/oiml-r129/specification/requirements/object-limitations.prl +99 -0
  112. package/oiml-r129/specification/requirements/software.prl +57 -0
  113. package/oiml-r129/specification/requirements/technical.prl +134 -0
  114. package/oiml-r129/specification/symbols.prl +187 -0
  115. package/oiml-r129/specification/tables.prl +74 -0
  116. package/oiml-r129/terminology.prl +415 -0
  117. package/oiml-r129/value-types.prl +40 -0
  118. package/oiml-r144/.primmel-allowlist.prl +2 -0
  119. package/oiml-r144/entities/instrument.prl +360 -0
  120. package/oiml-r144/entities/test-execution.prl +228 -0
  121. package/oiml-r144/entities/workflow.prl +2075 -0
  122. package/oiml-r144/evaluation/processes.prl +152 -0
  123. package/oiml-r144/evaluation/workflow.prl +48 -0
  124. package/oiml-r144/execution/forms/sec-3-report/03-01-laboratory-info.prl +19 -0
  125. package/oiml-r144/execution/forms/sec-3-report/03-02-test-location.prl +14 -0
  126. package/oiml-r144/execution/forms/sec-3-report/03-03-manufacturer-info.prl +18 -0
  127. package/oiml-r144/execution/forms/sec-3-report/03-04-applicant-info.prl +19 -0
  128. package/oiml-r144/execution/forms/sec-3-report/03-05-type-identification.prl +80 -0
  129. package/oiml-r144/execution/forms/sec-3-report/03-06-type-composition.prl +31 -0
  130. package/oiml-r144/execution/forms/sec-3-report/03-07-visual-examination.prl +46 -0
  131. package/oiml-r144/execution/forms/sec-3-report/03-08-test-conclusions.prl +46 -0
  132. package/oiml-r144/execution/forms/sec-3-report/03-09-general-conclusion.prl +19 -0
  133. package/oiml-r144/execution/forms/sec-3-report/03-10-responsible-persons.prl +27 -0
  134. package/oiml-r144/execution/forms/sec-tests/ambient-pressure-test.prl +59 -0
  135. package/oiml-r144/execution/forms/sec-tests/bursts-mains-test.prl +52 -0
  136. package/oiml-r144/execution/forms/sec-tests/bursts-signal-test.prl +55 -0
  137. package/oiml-r144/execution/forms/sec-tests/cold-test.prl +48 -0
  138. package/oiml-r144/execution/forms/sec-tests/cross-sensitivity-test.prl +92 -0
  139. package/oiml-r144/execution/forms/sec-tests/damp-heat-test.prl +50 -0
  140. package/oiml-r144/execution/forms/sec-tests/documentation-examination.prl +52 -0
  141. package/oiml-r144/execution/forms/sec-tests/drift-test.prl +83 -0
  142. package/oiml-r144/execution/forms/sec-tests/dry-heat-test.prl +53 -0
  143. package/oiml-r144/execution/forms/sec-tests/error-determination.prl +37 -0
  144. package/oiml-r144/execution/forms/sec-tests/esd-test.prl +53 -0
  145. package/oiml-r144/execution/forms/sec-tests/flow-spillover-test.prl +83 -0
  146. package/oiml-r144/execution/forms/sec-tests/leakproofness-test.prl +41 -0
  147. package/oiml-r144/execution/forms/sec-tests/low-battery-test.prl +48 -0
  148. package/oiml-r144/execution/forms/sec-tests/power-reduction-test.prl +49 -0
  149. package/oiml-r144/execution/forms/sec-tests/power-supply-test.prl +57 -0
  150. package/oiml-r144/execution/forms/sec-tests/repeatability-test.prl +60 -0
  151. package/oiml-r144/execution/forms/sec-tests/response-time-test.prl +43 -0
  152. package/oiml-r144/execution/forms/sec-tests/rf-emf-test.prl +47 -0
  153. package/oiml-r144/execution/forms/sec-tests/shock-test.prl +50 -0
  154. package/oiml-r144/execution/forms/sec-tests/surge-test.prl +52 -0
  155. package/oiml-r144/execution/forms/sec-tests/vibration-test.prl +58 -0
  156. package/oiml-r144/execution/forms/sec-tests/warm-up-time-test.prl +69 -0
  157. package/oiml-r144/execution/forms/shared/headers.prl +132 -0
  158. package/oiml-r144/execution/subforms/cgm-point.prl +99 -0
  159. package/oiml-r144/layers.prl +44 -0
  160. package/oiml-r144/model/attributes.prl +679 -0
  161. package/oiml-r144/model/behaviors.prl +117 -0
  162. package/oiml-r144/model/capabilities.prl +99 -0
  163. package/oiml-r144/model/characteristics.prl +27 -0
  164. package/oiml-r144/model/conditions.prl +46 -0
  165. package/oiml-r144/model/instrument.prl +85 -0
  166. package/oiml-r144/model/state.prl +18 -0
  167. package/oiml-r144/model/twin.prl +25 -0
  168. package/oiml-r144/package.primmel +15 -0
  169. package/oiml-r144/payload/application.yaml +80 -0
  170. package/oiml-r144/payload/attributes-pair-list.yaml +18 -0
  171. package/oiml-r144/payload/conditions-common-test.yaml +74 -0
  172. package/oiml-r144/payload/formulas-variants.yaml +32 -0
  173. package/oiml-r144/payload/promises.yaml +118 -0
  174. package/oiml-r144/payload/sample-data.yaml +643 -0
  175. package/oiml-r144/references.prl +594 -0
  176. package/oiml-r144/sources-prd/coverage.json +114 -0
  177. package/oiml-r144/sources-prd/r144-1.sentences.json +2797 -0
  178. package/oiml-r144/sources-prd/r144-2.sentences.json +1627 -0
  179. package/oiml-r144/sources-prd/r144-3.sentences.json +838 -0
  180. package/oiml-r144/specification/calculations.prl +123 -0
  181. package/oiml-r144/specification/conformance/examination.prl +87 -0
  182. package/oiml-r144/specification/conformance/performance-tests.prl +755 -0
  183. package/oiml-r144/specification/formulas.prl +37 -0
  184. package/oiml-r144/specification/reference-materials.prl +87 -0
  185. package/oiml-r144/specification/requirements/controls.prl +51 -0
  186. package/oiml-r144/specification/requirements/metrological.prl +299 -0
  187. package/oiml-r144/specification/requirements/report.prl +35 -0
  188. package/oiml-r144/specification/requirements/technical.prl +455 -0
  189. package/oiml-r144/specification/symbols.prl +357 -0
  190. package/oiml-r144/specification/tables.prl +95 -0
  191. package/oiml-r144/specification/test-point-sets.prl +15 -0
  192. package/oiml-r144/terminology.prl +308 -0
  193. package/oiml-r144/value-types.prl +49 -0
  194. package/oiml-r60/.primmel-allowlist.prl +2 -0
  195. package/oiml-r60/entities/workflow.prl +2079 -0
  196. package/oiml-r60/evaluation/processes.prl +152 -0
  197. package/oiml-r60/evaluation/workflow.prl +48 -0
  198. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-01-authority-info.prl +76 -0
  199. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-02-synopsis.prl +20 -0
  200. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-03-01-examinations.prl +27 -0
  201. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-03-02-a-performance-general.prl +81 -0
  202. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-03-02-b-performance-digital.prl +104 -0
  203. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-04-01-manufacturer.prl +21 -0
  204. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-04-02-applicant.prl +44 -0
  205. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-04-03-testing-laboratories.prl +69 -0
  206. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-05-load-cell-type-info.prl +83 -0
  207. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-06-accessories.prl +41 -0
  208. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-07-sample-selection.prl +71 -0
  209. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-01-general-info.prl +103 -0
  210. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-02-performance-info.prl +66 -0
  211. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-03-digital-info.prl +35 -0
  212. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-04-photographs.prl +12 -0
  213. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-05-documentation.prl +27 -0
  214. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-06-inscriptions.prl +126 -0
  215. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-07-model-range.prl +143 -0
  216. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-09-12-previous-tests.prl +26 -0
  217. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-01-force-generating-system.prl +89 -0
  218. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-02-weights.prl +61 -0
  219. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-03-temperature-chamber.prl +96 -0
  220. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-04-climate-chamber.prl +96 -0
  221. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-05-indicator.prl +92 -0
  222. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-06-terminal.prl +86 -0
  223. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-07-barometric-pressure-meter.prl +62 -0
  224. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-08-thermometer.prl +62 -0
  225. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-09-moisture-analyser.prl +62 -0
  226. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-10-additional-test-equipment.prl +69 -0
  227. package/oiml-r60/execution/forms/sec-4-evaluation-report/04-10-11-remarks.prl +11 -0
  228. package/oiml-r60/execution/forms/sec-4-evaluation-report/test-usage-matrix.prl +85 -0
  229. package/oiml-r60/execution/forms/sec-5-examination/documentation-examination.prl +53 -0
  230. package/oiml-r60/execution/forms/sec-5-examination/marking-examination.prl +104 -0
  231. package/oiml-r60/execution/forms/sec-5-examination/software-examination.prl +86 -0
  232. package/oiml-r60/execution/forms/sec-5-examination/suitability-examination.prl +56 -0
  233. package/oiml-r60/execution/forms/sec-6-performance-tests/barometric-pressure.prl +176 -0
  234. package/oiml-r60/execution/forms/sec-6-performance-tests/bursts.prl +129 -0
  235. package/oiml-r60/execution/forms/sec-6-performance-tests/conducted-emc.prl +170 -0
  236. package/oiml-r60/execution/forms/sec-6-performance-tests/creep-dr.prl +327 -0
  237. package/oiml-r60/execution/forms/sec-6-performance-tests/emc-susceptibility.prl +115 -0
  238. package/oiml-r60/execution/forms/sec-6-performance-tests/esd.prl +224 -0
  239. package/oiml-r60/execution/forms/sec-6-performance-tests/humidity-ch.prl +300 -0
  240. package/oiml-r60/execution/forms/sec-6-performance-tests/humidity-sh.prl +235 -0
  241. package/oiml-r60/execution/forms/sec-6-performance-tests/initial-tests.prl +129 -0
  242. package/oiml-r60/execution/forms/sec-6-performance-tests/load-cell-errors.prl +280 -0
  243. package/oiml-r60/execution/forms/sec-6-performance-tests/load-test.prl +29 -0
  244. package/oiml-r60/execution/forms/sec-6-performance-tests/performance-test-summary.prl +82 -0
  245. package/oiml-r60/execution/forms/sec-6-performance-tests/power-voltage.prl +166 -0
  246. package/oiml-r60/execution/forms/sec-6-performance-tests/repeatability.prl +189 -0
  247. package/oiml-r60/execution/forms/sec-6-performance-tests/short-time-power.prl +98 -0
  248. package/oiml-r60/execution/forms/sec-6-performance-tests/span-stability.prl +242 -0
  249. package/oiml-r60/execution/forms/sec-6-performance-tests/surge.prl +142 -0
  250. package/oiml-r60/execution/forms/sec-6-performance-tests/temperature-mdlo.prl +180 -0
  251. package/oiml-r60/execution/forms/sec-6-performance-tests/warm-up-time.prl +207 -0
  252. package/oiml-r60/execution/forms/shared/headers.prl +255 -0
  253. package/oiml-r60/execution/subforms/load-test-row.prl +55 -0
  254. package/oiml-r60/execution/subforms/test-procedures.prl +33 -0
  255. package/oiml-r60/layers.prl +46 -0
  256. package/oiml-r60/model/attributes.prl +642 -0
  257. package/oiml-r60/model/behaviors.prl +165 -0
  258. package/oiml-r60/model/capabilities.prl +57 -0
  259. package/oiml-r60/model/characteristics.prl +27 -0
  260. package/oiml-r60/model/conditions.prl +50 -0
  261. package/oiml-r60/model/instrument.prl +96 -0
  262. package/oiml-r60/model/processes.prl +54 -0
  263. package/oiml-r60/model/state.prl +22 -0
  264. package/oiml-r60/model/twin.prl +16 -0
  265. package/oiml-r60/package.primmel +16 -0
  266. package/oiml-r60/payload/annexes-part4.yaml +122 -0
  267. package/oiml-r60/payload/application.yaml +83 -0
  268. package/oiml-r60/payload/conditions-common-test.yaml +121 -0
  269. package/oiml-r60/payload/formulas-variants.yaml +55 -0
  270. package/oiml-r60/payload/promises.yaml +224 -0
  271. package/oiml-r60/payload/sample-data.yaml +5025 -0
  272. package/oiml-r60/payload/symbols-formula-notes.yaml +21 -0
  273. package/oiml-r60/references.prl +549 -0
  274. package/oiml-r60/sources-prd/coverage.json +740 -0
  275. package/oiml-r60/sources-prd/r60-1.sentences.json +2173 -0
  276. package/oiml-r60/sources-prd/r60-2.sentences.json +2961 -0
  277. package/oiml-r60/sources-prd/r60-3.sentences.json +4212 -0
  278. package/oiml-r60/sources-prd/r60-a.sentences.json +3361 -0
  279. package/oiml-r60/specification/calculations.prl +318 -0
  280. package/oiml-r60/specification/conformance/class-specific.prl +1120 -0
  281. package/oiml-r60/specification/conformance/electronic.prl +483 -0
  282. package/oiml-r60/specification/conformance/examination.prl +183 -0
  283. package/oiml-r60/specification/conformance/metrological.prl +478 -0
  284. package/oiml-r60/specification/constraints.prl +58 -0
  285. package/oiml-r60/specification/formulas-used.prl +43 -0
  286. package/oiml-r60/specification/formulas.prl +20 -0
  287. package/oiml-r60/specification/requirements/class-specific.prl +655 -0
  288. package/oiml-r60/specification/requirements/classification.prl +114 -0
  289. package/oiml-r60/specification/requirements/electronic.prl +222 -0
  290. package/oiml-r60/specification/requirements/metrological.prl +381 -0
  291. package/oiml-r60/specification/requirements/technical.prl +146 -0
  292. package/oiml-r60/specification/symbols.prl +599 -0
  293. package/oiml-r60/specification/tables.prl +182 -0
  294. package/oiml-r60/specification/test-sequences.prl +72 -0
  295. package/oiml-r60/terminology.prl +920 -0
  296. package/oiml-r60/value-types.prl +46 -0
  297. package/oiml-r91/.primmel-allowlist.prl +3 -0
  298. package/oiml-r91/entities/instrument.prl +359 -0
  299. package/oiml-r91/entities/workflow.prl +2075 -0
  300. package/oiml-r91/evaluation/processes.prl +152 -0
  301. package/oiml-r91/evaluation/workflow.prl +48 -0
  302. package/oiml-r91/execution/forms/evidence-file.prl +41 -0
  303. package/oiml-r91/execution/forms/report-evaluation/appraisal.prl +30 -0
  304. package/oiml-r91/execution/forms/report-evaluation/checklist-summary.prl +43 -0
  305. package/oiml-r91/execution/forms/report-evaluation/checklist.prl +76 -0
  306. package/oiml-r91/execution/forms/report-evaluation/configuration-samples.prl +22 -0
  307. package/oiml-r91/execution/forms/report-evaluation/corrective-actions.prl +24 -0
  308. package/oiml-r91/execution/forms/report-evaluation/descriptions.prl +47 -0
  309. package/oiml-r91/execution/forms/report-evaluation/evaluation-identification.prl +219 -0
  310. package/oiml-r91/execution/forms/report-evaluation/test-report-summary.prl +33 -0
  311. package/oiml-r91/execution/forms/report-general/adjustments.prl +12 -0
  312. package/oiml-r91/execution/forms/report-general/alignment-aiming.prl +17 -0
  313. package/oiml-r91/execution/forms/report-general/checking-facility.prl +17 -0
  314. package/oiml-r91/execution/forms/report-general/configuration.prl +12 -0
  315. package/oiml-r91/execution/forms/report-general/identification.prl +216 -0
  316. package/oiml-r91/execution/forms/report-general/indications-controls.prl +17 -0
  317. package/oiml-r91/execution/forms/report-general/sealing.prl +21 -0
  318. package/oiml-r91/execution/forms/report-general/software-description.prl +26 -0
  319. package/oiml-r91/execution/forms/report-general/summary-environmental.prl +35 -0
  320. package/oiml-r91/execution/forms/report-general/summary-tests.prl +35 -0
  321. package/oiml-r91/execution/forms/report-general/test-equipment.prl +36 -0
  322. package/oiml-r91/execution/forms/report-general/test-interface.prl +16 -0
  323. package/oiml-r91/execution/forms/report-tests/01-01-field-test.prl +84 -0
  324. package/oiml-r91/execution/forms/report-tests/01-02-statistical-analysis.prl +76 -0
  325. package/oiml-r91/execution/forms/report-tests/01-03-image-evidence.prl +30 -0
  326. package/oiml-r91/execution/forms/report-tests/02-01-dynamic-performance.prl +92 -0
  327. package/oiml-r91/execution/forms/report-tests/02-02-speed-linearity.prl +23 -0
  328. package/oiml-r91/execution/forms/report-tests/02-03-distance-linearity.prl +67 -0
  329. package/oiml-r91/execution/forms/report-tests/02-04-angle-linearity.prl +59 -0
  330. package/oiml-r91/execution/forms/report-tests/03-01-dry-heat-operating.prl +38 -0
  331. package/oiml-r91/execution/forms/report-tests/03-02-dry-heat-storage.prl +48 -0
  332. package/oiml-r91/execution/forms/report-tests/03-03-cold-operating.prl +40 -0
  333. package/oiml-r91/execution/forms/report-tests/03-04-cold-storage.prl +48 -0
  334. package/oiml-r91/execution/forms/report-tests/03-05-damp-heat-cyclic.prl +40 -0
  335. package/oiml-r91/execution/forms/report-tests/03-06-water.prl +48 -0
  336. package/oiml-r91/execution/forms/report-tests/03-07-sand-and-dust.prl +48 -0
  337. package/oiml-r91/execution/forms/report-tests/03-08-salt-mist.prl +48 -0
  338. package/oiml-r91/execution/forms/report-tests/03-09-vibration-random.prl +40 -0
  339. package/oiml-r91/execution/forms/report-tests/03-10-mechanical-shock.prl +48 -0
  340. package/oiml-r91/execution/forms/report-tests/03-11-dc-mains-voltage-variation.prl +40 -0
  341. package/oiml-r91/execution/forms/report-tests/03-12-ripple-on-dc-mains.prl +47 -0
  342. package/oiml-r91/execution/forms/report-tests/03-13-ac-mains-voltage-variation.prl +40 -0
  343. package/oiml-r91/execution/forms/report-tests/03-14-ac-mains-frequency-variation.prl +40 -0
  344. package/oiml-r91/execution/forms/report-tests/03-15-dc-mains-voltage-dips.prl +46 -0
  345. package/oiml-r91/execution/forms/report-tests/03-16-ac-mains-voltage-dips.prl +46 -0
  346. package/oiml-r91/execution/forms/report-tests/03-17-ac-mains-frequency-harmonics.prl +47 -0
  347. package/oiml-r91/execution/forms/report-tests/03-18-vlf-lf-disturbances.prl +46 -0
  348. package/oiml-r91/execution/forms/report-tests/03-19-bursts-ac-dc-mains.prl +44 -0
  349. package/oiml-r91/execution/forms/report-tests/03-20-surges-ac-dc-mains.prl +45 -0
  350. package/oiml-r91/execution/forms/report-tests/03-21-bursts-signal-lines.prl +45 -0
  351. package/oiml-r91/execution/forms/report-tests/03-22-surges-signal-lines.prl +46 -0
  352. package/oiml-r91/execution/forms/report-tests/03-23-ac-mains-magnetic-field.prl +45 -0
  353. package/oiml-r91/execution/forms/report-tests/03-24-conducted-rf-common-mode.prl +46 -0
  354. package/oiml-r91/execution/forms/report-tests/03-25-rf-electromagnetic-fields.prl +49 -0
  355. package/oiml-r91/execution/forms/report-tests/03-26-electrostatic-discharges.prl +47 -0
  356. package/oiml-r91/execution/forms/report-tests/03-27-internal-battery-low-voltage.prl +40 -0
  357. package/oiml-r91/execution/forms/report-tests/03-28-road-vehicle-battery.prl +40 -0
  358. package/oiml-r91/execution/forms/report-tests/03-29-transient-supply-lines.prl +47 -0
  359. package/oiml-r91/execution/forms/report-tests/03-30-transient-other-lines.prl +45 -0
  360. package/oiml-r91/execution/forms/report-tests/03-31-battery-cranking.prl +45 -0
  361. package/oiml-r91/execution/forms/report-tests/03-32-load-dump.prl +47 -0
  362. package/oiml-r91/execution/forms/report-tests/03-33-acceleration.prl +66 -0
  363. package/oiml-r91/execution/forms/report-tests/03-34-further-influence.prl +60 -0
  364. package/oiml-r91/execution/forms/report-tests/03-35-installation-alignment.prl +29 -0
  365. package/oiml-r91/execution/forms/report-tests/04-01-doppler-radar.prl +43 -0
  366. package/oiml-r91/execution/forms/report-tests/04-02-range-finding.prl +42 -0
  367. package/oiml-r91/execution/forms/report-tests/04-03-average-speed.prl +41 -0
  368. package/oiml-r91/execution/forms/report-tests/04-04-fixed-distance.prl +40 -0
  369. package/oiml-r91/execution/forms/report-tests/04-05-image-based.prl +41 -0
  370. package/oiml-r91/execution/forms/report-tests/04-06-across-road.prl +42 -0
  371. package/oiml-r91/execution/forms/report-tests/05-01-moving-field-test.prl +29 -0
  372. package/oiml-r91/execution/forms/report-tests/05-02-ego-field-test.prl +57 -0
  373. package/oiml-r91/execution/forms/report-tests/05-03-moving-traffic-simulation.prl +31 -0
  374. package/oiml-r91/execution/forms/report-tests/06-01-software-general.prl +25 -0
  375. package/oiml-r91/execution/forms/report-tests/06-02-software-protection.prl +25 -0
  376. package/oiml-r91/execution/forms/report-tests/06-03-software-hardware-support.prl +24 -0
  377. package/oiml-r91/execution/forms/report-tests/06-04-software-separation.prl +25 -0
  378. package/oiml-r91/execution/forms/report-tests/06-05-software-maintenance.prl +24 -0
  379. package/oiml-r91/execution/forms/report-tests/07-general-remarks.prl +11 -0
  380. package/oiml-r91/execution/forms/shared/header-a.prl +63 -0
  381. package/oiml-r91/execution/subforms/software-matrix-row.prl +30 -0
  382. package/oiml-r91/execution/subforms/speed-measurement-row.prl +38 -0
  383. package/oiml-r91/layers.prl +46 -0
  384. package/oiml-r91/model/artifacts.prl +29 -0
  385. package/oiml-r91/model/attributes.prl +698 -0
  386. package/oiml-r91/model/behaviors.prl +142 -0
  387. package/oiml-r91/model/capabilities.prl +88 -0
  388. package/oiml-r91/model/characteristics.prl +27 -0
  389. package/oiml-r91/model/conditions.prl +37 -0
  390. package/oiml-r91/model/instrument.prl +147 -0
  391. package/oiml-r91/model/state.prl +22 -0
  392. package/oiml-r91/model/twin.prl +17 -0
  393. package/oiml-r91/package.primmel +14 -0
  394. package/oiml-r91/payload/application.yaml +201 -0
  395. package/oiml-r91/payload/conditions-common-test.yaml +19 -0
  396. package/oiml-r91/payload/promises.yaml +142 -0
  397. package/oiml-r91/payload/sample-data.yaml +464 -0
  398. package/oiml-r91/references.prl +72 -0
  399. package/oiml-r91/sources-prd/coverage.json +106 -0
  400. package/oiml-r91/sources-prd/r91-1.sentences.json +4696 -0
  401. package/oiml-r91/sources-prd/r91-2.sentences.json +2067 -0
  402. package/oiml-r91/sources-prd/r91-3.sentences.json +5210 -0
  403. package/oiml-r91/sources-prd/r91-4.sentences.json +474 -0
  404. package/oiml-r91/specification/calculations.prl +26 -0
  405. package/oiml-r91/specification/conformance/influence-disturbance.prl +1792 -0
  406. package/oiml-r91/specification/conformance/metrological.prl +906 -0
  407. package/oiml-r91/specification/formulas.prl +10 -0
  408. package/oiml-r91/specification/requirements/class-specific.prl +308 -0
  409. package/oiml-r91/specification/requirements/metrological.prl +176 -0
  410. package/oiml-r91/specification/requirements/technical.prl +173 -0
  411. package/oiml-r91/specification/symbols.prl +323 -0
  412. package/oiml-r91/specification/tables.prl +136 -0
  413. package/oiml-r91/terminology.prl +535 -0
  414. package/oiml-r91/value-types.prl +26 -0
  415. package/oiml-smart-core/entities/comments.prl +101 -0
  416. package/oiml-smart-core/entities/cs-operations.prl +492 -0
  417. package/oiml-smart-core/entities/cs-participants.prl +470 -0
  418. package/oiml-smart-core/entities/engagement.prl +323 -0
  419. package/oiml-smart-core/entities/instrument.prl +359 -0
  420. package/oiml-smart-core/entities/module-b.prl +214 -0
  421. package/oiml-smart-core/entities/operated-schemes.prl +141 -0
  422. package/oiml-smart-core/entities/parties.prl +429 -0
  423. package/oiml-smart-core/entities/payment-records.prl +92 -0
  424. package/oiml-smart-core/entities/verification.prl +187 -0
  425. package/oiml-smart-core/entities/workflow.prl +2075 -0
  426. package/oiml-smart-core/evaluation/roles.prl +65 -0
  427. package/oiml-smart-core/evaluation/state-machines.prl +1157 -0
  428. package/oiml-smart-core/package.primmel +10 -0
  429. package/oiml-smart-core/specification/competence-kinds.prl +64 -0
  430. package/oiml-smart-core/specification/constraints.prl +40 -0
  431. package/oiml-smart-core/specification/invariants.prl +90 -0
  432. package/oiml-smart-core/specification/predicates.prl +116 -0
  433. package/oiml-smart-module-emc-disturbances/package.primmel +10 -0
  434. package/oiml-smart-module-env-iec60068/package.primmel +10 -0
  435. package/oiml-smart-module-examination-docs/package.primmel +10 -0
  436. package/oiml-smart-module-reference-materials/package.primmel +10 -0
  437. package/oiml-smart-module-report-headers/package.primmel +10 -0
  438. package/oiml-smart-module-software-d31/package.primmel +10 -0
  439. package/oiml-smart-module-specimen-governance/entities/test-execution.prl +228 -0
  440. package/oiml-smart-module-specimen-governance/package.primmel +10 -0
  441. package/oiml-twin-cert/documents/tw-1/document.yaml +454 -0
  442. package/oiml-twin-cert/evaluation/roles.prl +15 -0
  443. package/oiml-twin-cert/execution/forms/probe-creep.prl +179 -0
  444. package/oiml-twin-cert/execution/forms/probe.prl +99 -0
  445. package/oiml-twin-cert/execution/forms/static-conformance.prl +50 -0
  446. package/oiml-twin-cert/model/attributes.prl +243 -0
  447. package/oiml-twin-cert/model/behaviors.prl +8 -0
  448. package/oiml-twin-cert/model/characteristics.prl +18 -0
  449. package/oiml-twin-cert/model/monitors.prl +16 -0
  450. package/oiml-twin-cert/package.primmel +16 -0
  451. package/oiml-twin-cert/specification/conformance/twin-fidelity.prl +176 -0
  452. package/oiml-twin-cert/specification/requirements/twin-fidelity.prl +137 -0
  453. package/oiml-twin-cert/specification/symbols.prl +36 -0
  454. package/oiml-twin-cert/terminology.prl +8 -0
  455. package/oimlsmart-primmel-packages-0.1.0.tgz +0 -0
  456. package/package.json +17 -0
  457. package/qms-ref/model/qms.prl +31 -0
  458. package/qms-ref/package.primmel +38 -0
  459. package/quarry-belt-scale/model/ops.prl +115 -0
  460. package/quarry-belt-scale/package.primmel +36 -0
@@ -0,0 +1,2075 @@
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
+ }
1362
+
1363
+ class ApplicantInfo#data {
1364
+ helper { true }
1365
+ company: string {
1366
+ modality SHALL
1367
+ }
1368
+ address: string {
1369
+ modality SHALL
1370
+ }
1371
+ contact_person: string [0..1] {
1372
+ modality MAY
1373
+ }
1374
+ email: string [0..1] {
1375
+ modality MAY
1376
+ }
1377
+ phone: string [0..1] {
1378
+ modality MAY
1379
+ }
1380
+ }
1381
+
1382
+ class AuthorisedRep#data {
1383
+ helper { true }
1384
+ name: string {
1385
+ modality SHALL
1386
+ }
1387
+ address: string {
1388
+ modality SHALL
1389
+ }
1390
+ }
1391
+
1392
+ class ApplicationDocument#data {
1393
+ helper { true }
1394
+ name: string {
1395
+ modality SHALL
1396
+ }
1397
+ description: string {
1398
+ modality SHALL
1399
+ }
1400
+ submitted: boolean {
1401
+ modality SHALL
1402
+ }
1403
+ reference: string [0..1] {
1404
+ modality MAY
1405
+ }
1406
+ size: integer [0..1] {
1407
+ modality MAY
1408
+ definition "Blob slot (TODO.adoption/03): the stored file's size in bytes — set with blob_key, absent in the file-name-only posture"
1409
+ }
1410
+ type: string [0..1] {
1411
+ modality MAY
1412
+ definition "Blob slot: the stored file's MIME content type"
1413
+ }
1414
+ blob_key: string [0..1] {
1415
+ modality MAY
1416
+ 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)"
1417
+ }
1418
+ sha256: string [0..1] {
1419
+ modality MAY
1420
+ definition "Blob slot: the SHA-256 hex digest of the stored bytes — the download path re-verifies it"
1421
+ }
1422
+ uploaded_by: string [0..1] {
1423
+ modality MAY
1424
+ definition "Blob slot provenance: who uploaded the file (the display name)"
1425
+ }
1426
+ uploaded_at: datetime [0..1] {
1427
+ modality MAY
1428
+ definition "Blob slot provenance: when the file was uploaded"
1429
+ }
1430
+ }
1431
+
1432
+ class DocumentRef#data {
1433
+ helper { true }
1434
+ document_type: string {
1435
+ modality SHALL
1436
+ }
1437
+ reference: string [0..1] {
1438
+ modality MAY
1439
+ }
1440
+ description: string [0..1] {
1441
+ modality MAY
1442
+ }
1443
+ size: integer [0..1] {
1444
+ modality MAY
1445
+ definition "Blob slot (TODO.adoption/03): the stored file's size in bytes — set with blob_key, absent in the file-name-only posture"
1446
+ }
1447
+ type: string [0..1] {
1448
+ modality MAY
1449
+ definition "Blob slot: the stored file's MIME content type"
1450
+ }
1451
+ blob_key: string [0..1] {
1452
+ modality MAY
1453
+ 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)"
1454
+ }
1455
+ sha256: string [0..1] {
1456
+ modality MAY
1457
+ definition "Blob slot: the SHA-256 hex digest of the stored bytes — the download path re-verifies it"
1458
+ }
1459
+ uploaded_by: string [0..1] {
1460
+ modality MAY
1461
+ definition "Blob slot provenance: who uploaded the file (the display name)"
1462
+ }
1463
+ uploaded_at: datetime [0..1] {
1464
+ modality MAY
1465
+ definition "Blob slot provenance: when the file was uploaded"
1466
+ }
1467
+ }
1468
+
1469
+ class SampleInfo#data {
1470
+ helper { true }
1471
+ sample_count: integer [0..1] {
1472
+ modality MAY
1473
+ }
1474
+ sample_details: text [0..1] {
1475
+ modality MAY
1476
+ }
1477
+ }
1478
+
1479
+ class SampleRequest#data {
1480
+ 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)." }
1481
+ helper { true }
1482
+ routing: enum {
1483
+ modality SHALL
1484
+ 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"
1485
+ enum_values { to_ia to_each_tl }
1486
+ }
1487
+ count: integer {
1488
+ modality SHALL
1489
+ definition "Samples requested per in-scope model"
1490
+ }
1491
+ model_ids: reference(MeasuringInstrumentModel) [0..*] {
1492
+ modality MAY
1493
+ definition "The models the requested samples must cover; absent = the application's whole declared scope"
1494
+ on_delete nullify
1495
+ required false
1496
+ }
1497
+ laboratory_ids: reference(TestLaboratory) [0..*] {
1498
+ modality MAY
1499
+ definition "The receiving laboratories when routing is to_each_tl"
1500
+ on_delete nullify
1501
+ required false
1502
+ }
1503
+ particulars: text [0..1] {
1504
+ modality MAY
1505
+ definition "Deadline, conditions, shipping instructions for the applicant"
1506
+ }
1507
+ requested_by: string [0..1] {
1508
+ modality MAY
1509
+ definition "The IA officer who issued the request (audit provenance)"
1510
+ }
1511
+ requested_at: datetime [0..1] {
1512
+ modality MAY
1513
+ }
1514
+ }
1515
+
1516
+ class PreviousTestReportRef#data {
1517
+ helper { true }
1518
+ report_number: string {
1519
+ modality SHALL
1520
+ }
1521
+ issuing_authority: string [0..1] {
1522
+ modality MAY
1523
+ }
1524
+ date: date [0..1] {
1525
+ modality MAY
1526
+ }
1527
+ relevant_scope: text [0..1] {
1528
+ modality MAY
1529
+ }
1530
+ }
1531
+
1532
+ class FeeAcceptance#data {
1533
+ helper { true }
1534
+ application_fee_accepted: boolean [0..1] {
1535
+ modality MAY
1536
+ }
1537
+ evaluation_fee_accepted: boolean [0..1] {
1538
+ modality MAY
1539
+ }
1540
+ }
1541
+
1542
+ class IAReviewResult#data {
1543
+ description { "IA review outcome per PD-05 §4.2" }
1544
+ helper { true }
1545
+ fee_estimate: reference(FeeEstimate) [0..1] {
1546
+ modality MAY
1547
+ }
1548
+ sample_count_required: integer [0..1] {
1549
+ modality MAY
1550
+ definition "Number of samples required (PD-05 §4.2)"
1551
+ }
1552
+ estimated_timeline: string [0..1] {
1553
+ modality MAY
1554
+ }
1555
+ decision_date: date [0..1] {
1556
+ modality MAY
1557
+ }
1558
+ decision_letter: text [0..1] {
1559
+ modality MAY
1560
+ definition "Written decision (acceptance or refusal)"
1561
+ }
1562
+ refusal_reason: text [0..1] {
1563
+ modality MAY
1564
+ definition "Required if decision is REJECTED (PD-05 §4.2.2)"
1565
+ }
1566
+ }
1567
+
1568
+ class FeeEstimate#data {
1569
+ helper { true }
1570
+ application_fee: number [0..1] {
1571
+ modality MAY
1572
+ unit "EUR"
1573
+ }
1574
+ evaluation_fee_estimate: number [0..1] {
1575
+ modality MAY
1576
+ unit "EUR"
1577
+ }
1578
+ currency: string [0..1] {
1579
+ modality MAY
1580
+ }
1581
+ }
1582
+
1583
+ class TestReportFormRef#data {
1584
+ helper { true }
1585
+ form_id: string {
1586
+ modality SHALL
1587
+ }
1588
+ instance_id: string [0..1] {
1589
+ modality MAY
1590
+ }
1591
+ source: string {
1592
+ modality SHALL
1593
+ default "base"
1594
+ }
1595
+ country: string [0..1] {
1596
+ modality MAY
1597
+ }
1598
+ required: boolean {
1599
+ modality SHALL
1600
+ }
1601
+ }
1602
+
1603
+ class FormOmission#data {
1604
+ 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.\"" }
1605
+ helper { true }
1606
+ id: string {
1607
+ modality SHALL
1608
+ }
1609
+ test_report_id: reference(TestReport) {
1610
+ modality SHALL
1611
+ on_delete cascade
1612
+ required true
1613
+ }
1614
+ form_id: string {
1615
+ modality SHALL
1616
+ definition "R 60-3 form identifier being omitted (e.g. 'humidity-sh')"
1617
+ }
1618
+ reason: text {
1619
+ modality SHALL
1620
+ definition "Justification, e.g. 'Not applicable — CH humidity class, SH test not required'"
1621
+ }
1622
+ decided_by: enum {
1623
+ modality SHALL
1624
+ definition "Who decided the form doesn't apply"
1625
+ enum_values { ia test_lab }
1626
+ }
1627
+ decided_at: datetime {
1628
+ modality SHALL
1629
+ }
1630
+ }
1631
+
1632
+ class ArtifactInstance#data {
1633
+ 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)." }
1634
+ helper { true }
1635
+ id: string {
1636
+ modality SHALL
1637
+ }
1638
+ of: string {
1639
+ modality SHALL
1640
+ definition "Artifact definition id (model/artifacts.yaml artifact_definitions[].id)"
1641
+ }
1642
+ produced_at: datetime [0..1] {
1643
+ modality MAY
1644
+ definition "When the instrument produced the artifact"
1645
+ }
1646
+ by: string [0..1] {
1647
+ modality MAY
1648
+ definition "Producer id — the sample/instrument that produced the artifact"
1649
+ }
1650
+ content: map<field_id, QuantityValue> {
1651
+ modality SHALL
1652
+ definition "Contract field id → value entry ({ value, unit? }); a numeric value populating a quantity-kind-typed field carries a unit of that kind"
1653
+ }
1654
+ links: string[] [0..*] {
1655
+ modality MAY
1656
+ definition "Run/assignment/report ids the instance is linked to; per_measurement definitions must link ≥1 (linker rule artifact-presence)"
1657
+ }
1658
+ }
1659
+
1660
+ class FormDetermination#data {
1661
+ helper { true }
1662
+ form_id: string {
1663
+ modality SHALL
1664
+ }
1665
+ decision: enum {
1666
+ modality SHALL
1667
+ enum_values { PASS FAIL CONDITIONAL NOT_REVIEWED }
1668
+ }
1669
+ notes: text {
1670
+ modality SHALL
1671
+ }
1672
+ reviewed_date: date {
1673
+ modality SHALL
1674
+ }
1675
+ field_determinations: reference(FieldDetermination) [0..*] {
1676
+ modality MAY
1677
+ }
1678
+ }
1679
+
1680
+ class FieldDetermination#data {
1681
+ helper { true }
1682
+ decision: enum {
1683
+ modality SHALL
1684
+ enum_values { PASS FAIL CONDITIONAL NOT_REVIEWED }
1685
+ }
1686
+ notes: text {
1687
+ modality SHALL
1688
+ }
1689
+ }
1690
+
1691
+ class TestEvaluationReportRef#data {
1692
+ helper { true }
1693
+ report_number: string {
1694
+ modality SHALL
1695
+ }
1696
+ date: date {
1697
+ modality SHALL
1698
+ }
1699
+ pages: integer [0..1] {
1700
+ modality MAY
1701
+ }
1702
+ }
1703
+
1704
+ class CertificateClassification#data {
1705
+ helper { true }
1706
+ label: string {
1707
+ modality SHALL
1708
+ }
1709
+ characteristics: object {
1710
+ modality SHALL
1711
+ }
1712
+ }
1713
+
1714
+ class CertificateRevision#data {
1715
+ helper { true }
1716
+ revision: integer {
1717
+ modality SHALL
1718
+ }
1719
+ date: date {
1720
+ modality SHALL
1721
+ }
1722
+ description: text {
1723
+ modality SHALL
1724
+ }
1725
+ changes: reference(RevisionChange) [0..*] {
1726
+ modality MAY
1727
+ }
1728
+ modifies_type: boolean [0..1] {
1729
+ modality MAY
1730
+ definition "The revision modifies the certified type (PD-05 §8.1.3) — triggers the §8.1.4 retest-list obligation"
1731
+ }
1732
+ corrects_error: boolean [0..1] {
1733
+ modality MAY
1734
+ definition "The revision corrects an error (PD-05 §8.1.5) — the previous registered copy is marked SUPERSEDED on registration"
1735
+ }
1736
+ retest_list: reference(RetestItem) [0..*] {
1737
+ modality MAY
1738
+ definition "The IA-determined list of tests and examinations performed on the modified instrument (PD-05 §8.1.4) — mandatory when modifies_type"
1739
+ }
1740
+ }
1741
+
1742
+ class RetestItem#data {
1743
+ 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." }
1744
+ helper { true }
1745
+ test_id: string {
1746
+ modality SHALL
1747
+ definition "Conformance-test id (or free identification of the examination)"
1748
+ }
1749
+ reason: text {
1750
+ modality SHALL
1751
+ }
1752
+ report_ref: string [0..1] {
1753
+ modality MAY
1754
+ definition "The test report evidencing the performed retest (PD-05 §8.1.3 references)"
1755
+ }
1756
+ }
1757
+
1758
+ class AppliedAnr#data {
1759
+ 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." }
1760
+ helper { true }
1761
+ anr: text {
1762
+ modality SHALL
1763
+ definition "The additional national requirement (verbatim from the Declaration's additional_national_requirements)"
1764
+ }
1765
+ for_participant_id: string {
1766
+ modality SHALL
1767
+ definition "The Utilizer/Associate whose Declaration lists the ANR"
1768
+ }
1769
+ declaration_id: string [0..1] {
1770
+ modality MAY
1771
+ definition "The Declaration record the ANR was taken from"
1772
+ }
1773
+ country: string [0..1] {
1774
+ modality MAY
1775
+ definition "TODO.adoption/11 — the targeted market (Application.anr_countries token) this ANR belongs to, snapshotted at application time"
1776
+ }
1777
+ tier: enum [0..1] {
1778
+ modality MAY
1779
+ definition "TODO.adoption/11 — the declaring AnrDeclaration's content tier at application time (the coverage history keeps both forms' provenance across a later promotion)"
1780
+ enum_values { tier_1 tier_2 }
1781
+ }
1782
+ coverage: enum [0..1] {
1783
+ modality MAY
1784
+ 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"
1785
+ enum_values { evaluated not_evaluated }
1786
+ }
1787
+ not_evaluated_reason: text [0..1] {
1788
+ modality MAY
1789
+ definition "Mandatory when coverage = not_evaluated — the recorded reason the ANR is not evaluated in this evaluation"
1790
+ }
1791
+ results_in: enum [0..1] {
1792
+ modality MAY
1793
+ definition "Where the ANR results are reported (PD-05 §5.4.2) — set at discharge"
1794
+ enum_values { separate_report oiml_test_report }
1795
+ }
1796
+ discharged: boolean [0..1] {
1797
+ modality MAY
1798
+ definition "The ANR tests were conducted and reported (§5.3.2/§5.4.2) — the §5.6.3 letter validates discharged ANRs"
1799
+ }
1800
+ }
1801
+
1802
+ class RevisionChange#data {
1803
+ helper { true }
1804
+ field: string {
1805
+ modality SHALL
1806
+ }
1807
+ old_value: any {
1808
+ modality MAY
1809
+ }
1810
+ new_value: any {
1811
+ modality MAY
1812
+ }
1813
+ }
1814
+
1815
+ class BIMLRegistration#data {
1816
+ helper { true }
1817
+ submitted_date: date [0..1] {
1818
+ modality MAY
1819
+ }
1820
+ registered_date: date [0..1] {
1821
+ modality MAY
1822
+ }
1823
+ registration_number: string [0..1] {
1824
+ modality MAY
1825
+ }
1826
+ }
1827
+
1828
+ class Fees#data {
1829
+ helper { true }
1830
+ application_fee: number [0..1] {
1831
+ modality MAY
1832
+ }
1833
+ evaluation_fee: number [0..1] {
1834
+ modality MAY
1835
+ }
1836
+ registration_fee: number [0..1] {
1837
+ modality MAY
1838
+ }
1839
+ currency: string [0..1] {
1840
+ modality MAY
1841
+ }
1842
+ paid_date: date [0..1] {
1843
+ modality MAY
1844
+ }
1845
+ invoice_number: string [0..1] {
1846
+ modality MAY
1847
+ }
1848
+ }
1849
+
1850
+ class Withdrawal#data {
1851
+ helper { true }
1852
+ date: date {
1853
+ modality SHALL
1854
+ }
1855
+ reason: text {
1856
+ modality SHALL
1857
+ }
1858
+ requested_by: enum {
1859
+ modality SHALL
1860
+ enum_values { ia manufacturer biml }
1861
+ }
1862
+ reported_to_biml: boolean {
1863
+ modality SHALL
1864
+ }
1865
+ }
1866
+
1867
+ class Suspension#data {
1868
+ helper { true }
1869
+ date: date {
1870
+ modality SHALL
1871
+ }
1872
+ reason: text {
1873
+ modality SHALL
1874
+ }
1875
+ lift_date: date [0..1] {
1876
+ modality MAY
1877
+ }
1878
+ }
1879
+
1880
+ class Investigation#data {
1881
+ helper { true }
1882
+ date: date {
1883
+ modality SHALL
1884
+ }
1885
+ evidence: text {
1886
+ modality SHALL
1887
+ }
1888
+ status: enum {
1889
+ modality SHALL
1890
+ enum_values { open resolved deregistered }
1891
+ }
1892
+ outcome: text [0..1] {
1893
+ modality MAY
1894
+ }
1895
+ resolved_date: date [0..1] {
1896
+ modality MAY
1897
+ 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)"
1898
+ }
1899
+ reported_to_biml: boolean {
1900
+ modality SHALL
1901
+ }
1902
+ }
1903
+
1904
+ class EditionChange#data {
1905
+ description { "Edition-change workflow per PD-05 §8.3" }
1906
+ helper { true }
1907
+ previous_edition: integer {
1908
+ modality SHALL
1909
+ definition "Year of the previous edition"
1910
+ }
1911
+ new_edition: integer {
1912
+ modality SHALL
1913
+ }
1914
+ additional_tests_required: boolean {
1915
+ modality SHALL
1916
+ }
1917
+ additional_tests_description: text [0..1] {
1918
+ modality MAY
1919
+ }
1920
+ new_evaluation_report_id: reference(EvaluationReport) [0..1] {
1921
+ modality MAY
1922
+ on_delete nullify
1923
+ required false
1924
+ }
1925
+ }
1926
+
1927
+ class OwnershipTransfer#data {
1928
+ helper { true }
1929
+ from: reference(ApplicantInfo) {
1930
+ modality SHALL
1931
+ }
1932
+ to: reference(ApplicantInfo) {
1933
+ modality SHALL
1934
+ }
1935
+ transfer_date: date {
1936
+ modality SHALL
1937
+ }
1938
+ verified_by: string {
1939
+ modality SHALL
1940
+ }
1941
+ }
1942
+
1943
+ class ManufacturerInfo#data {
1944
+ helper { true }
1945
+ company: string {
1946
+ modality SHALL
1947
+ }
1948
+ address: string {
1949
+ modality SHALL
1950
+ }
1951
+ }
1952
+
1953
+ class DocumentationFileRef#data {
1954
+ helper { true }
1955
+ reference_number: string {
1956
+ modality SHALL
1957
+ }
1958
+ date: date {
1959
+ modality SHALL
1960
+ }
1961
+ pages: integer {
1962
+ modality SHALL
1963
+ }
1964
+ }
1965
+
1966
+ class ANRCompliance#data {
1967
+ helper { true }
1968
+ country: string {
1969
+ modality SHALL
1970
+ }
1971
+ decision: enum {
1972
+ modality SHALL
1973
+ 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"
1974
+ enum_values { APPROVED REJECTED CONDITIONALLY_APPROVED NOT_EVALUATED PENDING }
1975
+ }
1976
+ forms: string[] [0..*] {
1977
+ modality MAY
1978
+ }
1979
+ notes: text [0..1] {
1980
+ modality MAY
1981
+ }
1982
+ items: reference(ANRComplianceItem) [0..*] {
1983
+ modality MAY
1984
+ definition "TODO.adoption/11 — the per-ANR coverage detail (evaluated with its evidence forms / not_evaluated with its reason)"
1985
+ }
1986
+ }
1987
+
1988
+ class ANRComplianceItem#data {
1989
+ 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)." }
1990
+ helper { true }
1991
+ anr: text {
1992
+ modality SHALL
1993
+ definition "The applied requirement (snapshot at application time)"
1994
+ }
1995
+ declaration_id: string [0..1] {
1996
+ modality MAY
1997
+ definition "The AnrDeclaration the ANR was resolved from"
1998
+ }
1999
+ tier: enum [0..1] {
2000
+ modality MAY
2001
+ enum_values { tier_1 tier_2 }
2002
+ }
2003
+ coverage: enum {
2004
+ modality SHALL
2005
+ enum_values { evaluated not_evaluated }
2006
+ }
2007
+ reason: text [0..1] {
2008
+ modality MAY
2009
+ definition "The recorded bypass reason (mandatory on not_evaluated)"
2010
+ }
2011
+ forms: string[] [0..*] {
2012
+ modality MAY
2013
+ definition "The evidence form ids the coverage was evaluated through (the ANR test forms on the application's test reports)"
2014
+ }
2015
+ }
2016
+
2017
+ class IASignatory#data {
2018
+ helper { true }
2019
+ name: string {
2020
+ modality SHALL
2021
+ }
2022
+ address: string {
2023
+ modality SHALL
2024
+ }
2025
+ responsible_person: string {
2026
+ modality SHALL
2027
+ }
2028
+ }
2029
+
2030
+ class Signatory#data {
2031
+ helper { true }
2032
+ name: string {
2033
+ modality SHALL
2034
+ }
2035
+ position: string {
2036
+ modality SHALL
2037
+ }
2038
+ date: date {
2039
+ modality SHALL
2040
+ }
2041
+ }
2042
+
2043
+ class FieldChange#data {
2044
+ helper { true }
2045
+ field: string {
2046
+ modality SHALL
2047
+ }
2048
+ old_value: any {
2049
+ modality MAY
2050
+ }
2051
+ new_value: any {
2052
+ modality MAY
2053
+ }
2054
+ }
2055
+
2056
+ class ApprovalRecord#data {
2057
+ helper { true }
2058
+ approver_role: string {
2059
+ modality SHALL
2060
+ }
2061
+ approver_name: string {
2062
+ modality SHALL
2063
+ }
2064
+ decision: enum {
2065
+ modality SHALL
2066
+ enum_values { APPROVED REJECTED CONDITIONALLY_APPROVED }
2067
+ }
2068
+ decision_date: datetime {
2069
+ modality SHALL
2070
+ }
2071
+ notes: string [0..1] {
2072
+ modality MAY
2073
+ }
2074
+ }
2075
+