@memoarchitect/ontology 0.4.6 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +7 -6
  2. package/examples/connected-patient-monitor/README.md +7 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +70 -0
  4. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +3 -0
  5. package/examples/connected-patient-monitor/model/viewpoints/connected_patient_monitor_overview.sysml +6 -0
  6. package/examples/embedded-infusion-pump/README.md +7 -0
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +66 -0
  8. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +3 -0
  9. package/examples/embedded-infusion-pump/model/viewpoints/embedded_infusion_pump_overview.sysml +6 -0
  10. package/examples/extensions/README.md +16 -0
  11. package/examples/extensions/clinical/memo.package.yaml +9 -0
  12. package/examples/extensions/clinical/src/clinical_extension.sysml +3 -0
  13. package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +14 -0
  14. package/examples/extensions/clinical/src/procedures/memo_clinical_procedures.sysml +16 -0
  15. package/examples/extensions/template/memo.package.yaml +9 -0
  16. package/examples/extensions/template/src/extension.sysml +15 -0
  17. package/examples/functional-logical-physical/README.md +7 -0
  18. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +50 -0
  19. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +3 -0
  20. package/examples/functional-logical-physical/model/viewpoints/functional_logical_physical_overview.sysml +6 -0
  21. package/examples/gpca-pump/README.md +26 -0
  22. package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +1 -1
  23. package/examples/gpca-pump/memo.config.yaml +2 -2
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +1 -1
  25. package/examples/gpca-pump/methodology/gpca_scope.sysml +2 -2
  26. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
  27. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +10 -10
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +17 -6
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +11 -11
  30. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +35 -22
  31. package/examples/gpca-pump/model/catalog/gpca_context.sysml +25 -6
  32. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
  33. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +29 -15
  34. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +293 -169
  35. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +145 -27
  36. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +1 -1
  37. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +210 -105
  38. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +66 -69
  39. package/examples/gpca-pump/model/catalog/gpca_system.sysml +43 -76
  40. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +73 -70
  41. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +27 -27
  42. package/examples/gpca-pump/model/views/context_system_context_view.sysml +2 -2
  43. package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +2 -2
  44. package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +2 -2
  45. package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +1 -1
  46. package/examples/gpca-pump/model/views/document_rmf_view.sysml +2 -2
  47. package/examples/gpca-pump/model/views/document_sdd_view.sysml +2 -2
  48. package/examples/gpca-pump/model/views/document_threat_model_view.sysml +1 -1
  49. package/examples/gpca-pump/model/views/document_usability_view.sysml +1 -1
  50. package/examples/gpca-pump/model/views/document_vv_view.sysml +1 -1
  51. package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +1 -1
  52. package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +1 -1
  53. package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +1 -1
  54. package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +1 -1
  55. package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +1 -1
  56. package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +1 -1
  57. package/examples/gpca-pump/model/views/operational_use_case_view.sysml +6 -6
  58. package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +1 -1
  59. package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +1 -1
  60. package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +2 -2
  61. package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +1 -1
  62. package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +1 -1
  63. package/examples/ivd-laboratory-system/README.md +7 -0
  64. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +58 -0
  65. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +3 -0
  66. package/examples/ivd-laboratory-system/model/viewpoints/ivd_laboratory_system_overview.sysml +6 -0
  67. package/examples/manual-surgical-instrument/README.md +7 -0
  68. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +41 -0
  69. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +3 -0
  70. package/examples/manual-surgical-instrument/model/viewpoints/manual_surgical_instrument_overview.sysml +6 -0
  71. package/examples/multidimensional-layers/README.md +7 -0
  72. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +51 -0
  73. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +4 -0
  74. package/examples/multidimensional-layers/model/viewpoints/multidimensional_layers_overview.sysml +13 -0
  75. package/examples/reusable-instrument/README.md +7 -0
  76. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +71 -0
  77. package/examples/reusable-instrument/model/reusable_instrument.sysml +4 -0
  78. package/examples/reusable-instrument/model/viewpoints/reusable_instrument_overview.sysml +13 -0
  79. package/examples/software-only-medical-device/README.md +7 -0
  80. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +62 -0
  81. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +4 -0
  82. package/examples/software-only-medical-device/model/viewpoints/software_only_medical_device_overview.sysml +13 -0
  83. package/examples/surgical-closure-workflow/README.md +8 -0
  84. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +151 -0
  85. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +4 -0
  86. package/examples/surgical-closure-workflow/model/viewpoints/surgical_closure_workflow_overview.sysml +13 -0
  87. package/examples/surgical-robot/README.md +7 -0
  88. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +58 -0
  89. package/examples/surgical-robot/model/surgical_robot.sysml +4 -0
  90. package/examples/surgical-robot/model/viewpoints/surgical_robot_overview.sysml +13 -0
  91. package/examples/sysml-diagram-samples/README.md +32 -0
  92. package/examples/sysml-diagram-samples/memo.package.yaml +5 -0
  93. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/action_flow_view.sysml +22 -4
  94. package/examples/sysml-diagram-samples/model/samples/context_view.sysml +55 -0
  95. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/functional_flow_view.sysml +17 -6
  96. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/interconnection_view.sysml +4 -3
  97. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/operational_behaviour_view.sysml +32 -42
  98. package/examples/sysml-diagram-samples/model/samples/requirements_view.sysml +63 -0
  99. package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +109 -0
  100. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/tree_view.sysml +3 -3
  101. package/examples/sysml-diagram-samples/model/samples/use_case_view.sysml +81 -0
  102. package/examples/temperature-alarm/README.md +7 -0
  103. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +140 -0
  104. package/examples/temperature-alarm/model/temperature_alarm.sysml +4 -0
  105. package/examples/temperature-alarm/model/viewpoints/temperature_alarm_overview.sysml +13 -0
  106. package/memo.manifest.yaml +12 -4
  107. package/methodologies/default/memo.package.yaml +1 -1
  108. package/methodologies/gpca/memo.package.yaml +4 -4
  109. package/ontology/memo.package.yaml +1 -1
  110. package/ontology/memo.rendering.yaml +37 -0
  111. package/package.json +19 -11
  112. package/profile/memo.package.yaml +3 -3
  113. package/src/architecture/decisions/memo_decisions.sysml +1 -1
  114. package/src/architecture/{behavior → functional/behavior}/memo_behavior.sysml +12 -11
  115. package/src/architecture/{constraints → functional/constraints}/memo_constraints.sysml +2 -2
  116. package/src/architecture/functional/functions/memo_functions.sysml +81 -0
  117. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +46 -0
  118. package/src/architecture/implementation/hardware/electrical/memo_hardware_electrical.sysml +36 -0
  119. package/src/architecture/implementation/hardware/fluidic/memo_hardware_fluidic.sysml +14 -0
  120. package/src/architecture/implementation/hardware/mechanical/memo_hardware_mechanical.sysml +14 -0
  121. package/src/architecture/implementation/hardware/optical/memo_hardware_optical.sysml +11 -0
  122. package/src/architecture/implementation/hardware/sensing/memo_hardware_sensing.sysml +17 -0
  123. package/src/architecture/implementation/hardware/structure/memo_hardware_structure.sysml +12 -0
  124. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +70 -0
  125. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +80 -0
  126. package/src/architecture/implementation/ui/memo_ui.sysml +159 -0
  127. package/src/architecture/logical/interfaces/memo_interfaces.sysml +102 -0
  128. package/src/architecture/logical/structure/memo_logical_structure.sysml +150 -0
  129. package/src/architecture/operational/activities/memo_activities.sysml +86 -0
  130. package/src/architecture/operational/context/actors/memo_actors.sysml +38 -0
  131. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +64 -0
  132. package/src/architecture/operational/context/use_context/memo_use_context.sysml +53 -0
  133. package/src/architecture/operational/scenarios/memo_scenarios.sysml +116 -0
  134. package/src/architecture/operational/structure/memo_operational.sysml +31 -0
  135. package/src/architecture/operational/use_cases/memo_use_cases.sysml +67 -0
  136. package/src/architecture/operational/workflows/memo_workflows.sysml +126 -0
  137. package/src/architecture/realization/deployment/memo_deployment.sysml +90 -0
  138. package/src/architecture/{physical → realization/physical}/memo_physical_architecture.sysml +12 -1
  139. package/src/artifacts/definitions/memo_artifact_definitions.sysml +1 -1
  140. package/src/{architecture → assurance}/cybersecurity/memo_cybersecurity.sysml +14 -10
  141. package/src/assurance/human_factors/memo_human_factors.sysml +50 -0
  142. package/src/{architecture → assurance}/requirements/memo_requirements.sysml +45 -21
  143. package/src/assurance/requirements/needs/memo_needs.sysml +43 -0
  144. package/src/{architecture → assurance/safety_risk}/analysis/memo_fmea.sysml +13 -13
  145. package/src/{architecture/risk → assurance/safety_risk}/memo_arch_risk.sysml +2 -2
  146. package/src/{architecture/risk → assurance/safety_risk}/memo_risk.sysml +25 -16
  147. package/src/assurance/verification_validation/memo_assurance.sysml +49 -0
  148. package/src/compliance/artifacts/memo_artifacts.sysml +1 -1
  149. package/src/compliance/change/memo_change.sysml +2 -2
  150. package/src/compliance/dhf-templates/21cfr820/design-input.md +1 -1
  151. package/src/compliance/dhf-templates/21cfr820/design-validation.md +1 -1
  152. package/src/compliance/dhf-templates/21cfr820/user-needs.md +2 -2
  153. package/src/compliance/dhf-templates/iec-62366/urra.md +1 -1
  154. package/src/compliance/dhf-templates/iso-14971/fmea.md +1 -1
  155. package/src/compliance/dhf-templates/iso-14971/har.md +4 -4
  156. package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +1 -1
  157. package/src/compliance/dhf-templates/iso-14971/rmp.md +1 -1
  158. package/src/compliance/dhf-templates/iso-14971/rmr.md +1 -1
  159. package/src/compliance/iso14971/risk_management_file.sysml +1 -1
  160. package/src/compliance/postmarket/memo_postmarket.sysml +2 -2
  161. package/src/core/common/memo_common.sysml +123 -14
  162. package/src/core/consistency_rules/consistency_rules.sysml +2 -2
  163. package/src/core/dimensions/dimensions.sysml +45 -24
  164. package/src/core/enumerations/memo_enumerations.sysml +11 -16
  165. package/src/core/methodology_scope/methodology_scope.sysml +10 -28
  166. package/src/core/relationships/memo_relationships.sysml +178 -146
  167. package/src/core/stdlib/{collections.sysml → collections/collections.sysml} +1 -1
  168. package/src/core/stdlib/{functions.sysml → functions/functions.sysml} +1 -1
  169. package/src/core/stdlib/{scalars.sysml → scalars/scalars.sysml} +1 -1
  170. package/src/core/stdlib/{time.sysml → time/time.sysml} +1 -1
  171. package/src/core/terminology/terminology.sysml +35 -0
  172. package/src/memo_namespaces.sysml +247 -302
  173. package/src/methodology/{memo_core.sysml → core/memo_core.sysml} +19 -13
  174. package/src/methodology/{memo_gates.sysml → gates/memo_gates.sysml} +1 -1
  175. package/src/methodology/{memo_patterns.sysml → patterns/memo_patterns.sysml} +1 -1
  176. package/src/methodology/{memo_profiles.sysml → profiles/memo_profiles.sysml} +27 -35
  177. package/src/methodology/{memo_workflow.sysml → workflow/memo_workflow.sysml} +1 -1
  178. package/src/rules/closure/closure_rules.sysml +11 -11
  179. package/src/rules/coverage/coverage_rules.sysml +8 -8
  180. package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
  181. package/src/rules/lifecycle/lifecycle_rules.sysml +1 -1
  182. package/src/rules/ontology/ontology_invariants.sysml +133 -0
  183. package/src/rules/quantitative/quantitative_rules.sysml +2 -2
  184. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +189 -0
  185. package/src/viewpoints/clinical/clinical_viewpoint.sysml +0 -1
  186. package/src/viewpoints/context/context_viewpoint.sysml +1 -2
  187. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -2
  188. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +8 -8
  189. package/src/viewpoints/functional/{function_allocation_view.sysml → function_allocation_view/function_allocation_view.sysml} +1 -1
  190. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  191. package/src/viewpoints/functional/{system_functional_tree_view.sysml → system_functional_tree_view/system_functional_tree_view.sysml} +1 -1
  192. package/src/viewpoints/logical/logical_viewpoint.sysml +0 -1
  193. package/src/viewpoints/operational/operational_viewpoint.sysml +1 -2
  194. package/src/viewpoints/operational/{use_case_view.sysml → use_case_view/use_case_view.sysml} +1 -1
  195. package/src/viewpoints/physical/physical_viewpoint.sysml +0 -1
  196. package/src/viewpoints/requirements/{requirements_traceability_view.sysml → requirements_traceability_view/requirements_traceability_view.sysml} +1 -1
  197. package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
  198. package/src/viewpoints/risk/{risk_chain_view.sysml → risk_chain_view/risk_chain_view.sysml} +2 -2
  199. package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
  200. package/src/viewpoints/software/{software_architecture_view.sysml → software_architecture_view/software_architecture_view.sysml} +1 -1
  201. package/src/viewpoints/software/software_viewpoint.sysml +1 -2
  202. package/src/viewpoints/usability/usability_viewpoint.sysml +0 -1
  203. package/src/viewpoints/verification/verification_viewpoint.sysml +0 -1
  204. package/templates/connected-device/memo.package.yaml +5 -0
  205. package/templates/connected-device/src/architecture/system.sysml +5 -0
  206. package/templates/connected-device/src/artifacts/artifacts.sysml +5 -0
  207. package/templates/connected-device/src/assurance/requirements.sysml +7 -0
  208. package/templates/default/memo.package.yaml +5 -0
  209. package/templates/default/src/architecture/system.sysml +7 -0
  210. package/templates/default/src/artifacts/artifacts.sysml +5 -0
  211. package/templates/default/src/assurance/requirements.sysml +8 -0
  212. package/templates/infusion-pump/memo.package.yaml +5 -0
  213. package/templates/infusion-pump/src/architecture/system.sysml +5 -0
  214. package/templates/infusion-pump/src/artifacts/artifacts.sysml +5 -0
  215. package/templates/infusion-pump/src/assurance/requirements.sysml +7 -0
  216. package/templates/monitoring-device/memo.package.yaml +5 -0
  217. package/templates/monitoring-device/src/architecture/system.sysml +5 -0
  218. package/templates/monitoring-device/src/artifacts/artifacts.sysml +5 -0
  219. package/templates/monitoring-device/src/assurance/requirements.sysml +7 -0
  220. package/templates/samd/memo.package.yaml +5 -0
  221. package/templates/samd/src/architecture/system.sysml +5 -0
  222. package/templates/samd/src/artifacts/artifacts.sysml +5 -0
  223. package/templates/samd/src/assurance/requirements.sysml +7 -0
  224. package/examples/gpca-pump/model/samples/README.md +0 -24
  225. package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +0 -9
  226. package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +0 -99
  227. package/profile/archetypes.yaml +0 -36
  228. package/profile/templates/connected-device/starter.sysml +0 -8
  229. package/profile/templates/infusion-pump/starter.sysml +0 -8
  230. package/profile/templates/monitoring-device/starter.sysml +0 -8
  231. package/profile/templates/samd/starter.sysml +0 -8
  232. package/src/architecture/assurance/memo_assurance.sysml +0 -29
  233. package/src/architecture/context/memo_context.sysml +0 -58
  234. package/src/architecture/functions/memo_functions.sysml +0 -30
  235. package/src/architecture/hardware_structure/memo_hardware_structure.sysml +0 -15
  236. package/src/architecture/interfaces/memo_interfaces.sysml +0 -103
  237. package/src/architecture/logical_structure/memo_logical_structure.sysml +0 -10
  238. package/src/architecture/operational/memo_operational.sysml +0 -51
  239. package/src/architecture/software_structure/memo_software_structure.sysml +0 -44
  240. package/src/architecture/system/memo_system_analysis.sysml +0 -54
  241. package/src/artifacts/clinical_safety_report.sysml +0 -12
  242. package/src/artifacts/cybersecurity_assessment_report.sysml +0 -12
  243. package/src/artifacts/design_change_log.sysml +0 -12
  244. package/src/artifacts/design_history_file_index.sysml +0 -12
  245. package/src/artifacts/design_input_plan.sysml +0 -12
  246. package/src/artifacts/design_output_plan.sysml +0 -12
  247. package/src/artifacts/evidence_record.sysml +0 -12
  248. package/src/artifacts/failure_mode_effects_analysis.sysml +0 -12
  249. package/src/artifacts/hazard_analysis_report.sysml +0 -12
  250. package/src/artifacts/labeling_specification.sysml +0 -12
  251. package/src/artifacts/requirements_specification.sysml +0 -12
  252. package/src/artifacts/requirements_traceability_matrix.sysml +0 -12
  253. package/src/artifacts/risk_management_plan.sysml +0 -12
  254. package/src/artifacts/software_design_description.sysml +0 -12
  255. package/src/artifacts/software_development_plan.sysml +0 -12
  256. package/src/artifacts/soup_list.sysml +0 -12
  257. package/src/artifacts/system_architecture_description.sysml +0 -12
  258. package/src/artifacts/test_protocol.sysml +0 -12
  259. package/src/artifacts/test_report.sysml +0 -12
  260. package/src/artifacts/threat_model_report.sysml +0 -12
  261. package/src/artifacts/usability_engineering_report.sysml +0 -12
  262. package/src/medical_device_library.sysml +0 -100
  263. package/template/memo.package.yaml +0 -5
  264. package/template/src/catalog/starter.sysml +0 -12
  265. package/template/src/documents/.gitkeep +0 -1
  266. package/template/src/views/.gitkeep +0 -1
  267. /package/src/methodology/{memo_archetypes.sysml → archetypes/memo_archetypes.sysml} +0 -0
  268. /package/src/methodology/{memo_rules.sysml → rules/memo_rules.sysml} +0 -0
  269. /package/src/methodology/{memo_viewpoints.sysml → viewpoints/memo_viewpoints.sysml} +0 -0
  270. /package/src/viewpoints/clinical/{clinical_evidence_view.sysml → clinical_evidence_view/clinical_evidence_view.sysml} +0 -0
  271. /package/src/viewpoints/context/{system_context_view.sysml → system_context_view/system_context_view.sysml} +0 -0
  272. /package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view.sysml → cybersecurity_assessment_view/cybersecurity_assessment_view.sysml} +0 -0
  273. /package/src/viewpoints/cybersecurity/{threat_model_view.sysml → threat_model_view/threat_model_view.sysml} +0 -0
  274. /package/src/viewpoints/logical/{logical_architecture_view.sysml → logical_architecture_view/logical_architecture_view.sysml} +0 -0
  275. /package/src/viewpoints/physical/{network_topology_view.sysml → network_topology_view/network_topology_view.sysml} +0 -0
  276. /package/src/viewpoints/physical/{physical_bom_view.sysml → physical_bom_view/physical_bom_view.sysml} +0 -0
  277. /package/src/viewpoints/usability/{usability_engineering_view.sysml → usability_engineering_view/usability_engineering_view.sysml} +0 -0
  278. /package/src/viewpoints/verification/{verification_coverage_view.sysml → verification_coverage_view/verification_coverage_view.sysml} +0 -0
@@ -1,7 +1,8 @@
1
1
  package memo_examples_gpca_pump_model_catalog_gpca_requirements {
2
2
  private import ScalarValues::*;
3
3
 
4
- private import memo_architecture_requirements::*;
4
+ private import memo_assurance_requirements::*;
5
+ private import memo_assurance_requirements_needs::*;
5
6
  private import memo_core_enumerations::*;
6
7
 
7
8
  // ═════════════════════════════════════════════════════════════
@@ -22,22 +23,26 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
22
23
  // ═════════════════════════════════════════════════════════════
23
24
 
24
25
  // ── Stakeholder needs ───────────────────────────────────────
25
- requirement needSafeTherapy : StakeholderNeed {
26
+ requirement needSafeTherapy : Need {
27
+ attribute :>> needKind = NeedKind::stakeholder;
26
28
  attribute :>> id = "NEED-001"; attribute :>> name = "SafePatientControlledTherapy";
27
29
  attribute :>> statement = "The device shall support safe patient controlled analgesic infusion therapy.";
28
30
  attribute :>> priority = "high";
29
31
  }
30
- requirement needEffectiveAnalgesia : StakeholderNeed {
32
+ requirement needEffectiveAnalgesia : Need {
33
+ attribute :>> needKind = NeedKind::stakeholder;
31
34
  attribute :>> id = "NEED-002"; attribute :>> name = "EffectivePainManagement";
32
35
  attribute :>> statement = "The device shall deliver the prescribed basal and bolus doses accurately so the patient receives effective analgesia.";
33
36
  attribute :>> priority = "high";
34
37
  }
35
- requirement needTimelyAlarms : StakeholderNeed {
38
+ requirement needTimelyAlarms : Need {
39
+ attribute :>> needKind = NeedKind::stakeholder;
36
40
  attribute :>> id = "NEED-003"; attribute :>> name = "TimelyAlarmNotification";
37
41
  attribute :>> statement = "Clinicians shall be notified promptly and unambiguously of any condition that interrupts or endangers therapy.";
38
42
  attribute :>> priority = "high";
39
43
  }
40
- requirement needAuditableRecord : StakeholderNeed {
44
+ requirement needAuditableRecord : Need {
45
+ attribute :>> needKind = NeedKind::stakeholder;
41
46
  attribute :>> id = "NEED-004"; attribute :>> name = "AuditableTherapyRecord";
42
47
  attribute :>> statement = "All delivered doses, alarms, and prescription changes shall be reviewable after the fact.";
43
48
  attribute :>> priority = "medium";
@@ -390,7 +395,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
390
395
  }
391
396
 
392
397
  // ═════ CriSys system requirements — §4.1.1 GPCA System ══════
393
- requirement reqCs01 : SystemRequirement {
398
+ requirement reqCs01 : Requirement {
399
+ attribute :>> requirementKind = RequirementKind::system;
394
400
  attribute :>> id = "REQ-CS-01"; attribute :>> name = "SingleActiveMode";
395
401
  attribute :>> statement = "The system shall always be in only one of the following modes: OFF (default mode), IDLE, PAUSED, BASAL, SQUARE BOLUS or PATIENT BOLUS.";
396
402
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -400,7 +406,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
400
406
  attribute :>> subjectDescription = "GPCA system";
401
407
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 1)";
402
408
  }
403
- requirement reqCs02 : SystemRequirement {
409
+ requirement reqCs02 : Requirement {
410
+ attribute :>> requirementKind = RequirementKind::system;
404
411
  attribute :>> id = "REQ-CS-02"; attribute :>> name = "ModeChangeDurationWithoutFlowChange";
405
412
  attribute :>> statement = "If there are mode transitions without change in flow rates between the two modes, the system shall transition within Max_Mode_Change_Duration_const.";
406
413
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -410,7 +417,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
410
417
  attribute :>> subjectDescription = "GPCA system";
411
418
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 2)";
412
419
  }
413
- requirement reqCs03 : SystemRequirement {
420
+ requirement reqCs03 : Requirement {
421
+ attribute :>> requirementKind = RequirementKind::system;
414
422
  attribute :>> id = "REQ-CS-03"; attribute :>> name = "ModeChangeFlowRamp";
415
423
  attribute :>> statement = "If there are mode transitions with change in flow rates between the two modes, the system shall change from the current mode flow rate to the new mode flow rate at a rate not more than Max_Rateof_Flow_Change_const or within Max_Mode_Change_Duration_const, whichever achieves the new desired flow rate the quickest.";
416
424
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -420,7 +428,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
420
428
  attribute :>> subjectDescription = "GPCA system";
421
429
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 3)";
422
430
  }
423
- requirement reqCs04 : SystemRequirement {
431
+ requirement reqCs04 : Requirement {
432
+ attribute :>> requirementKind = RequirementKind::system;
424
433
  attribute :>> id = "REQ-CS-04"; attribute :>> name = "OffToIdleOnSystemStart";
425
434
  attribute :>> statement = "The system shall transition from OFF mode to ON > IDLE mode when System_start_prog is commanded. At this transition, the variables in App. A.4 shall be set to their default values.";
426
435
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -430,7 +439,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
430
439
  attribute :>> subjectDescription = "GPCA system (OFF -> ON transition)";
431
440
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.2 (REQ 4)";
432
441
  }
433
- requirement reqCs05 : SystemRequirement {
442
+ requirement reqCs05 : Requirement {
443
+ attribute :>> requirementKind = RequirementKind::system;
434
444
  attribute :>> id = "REQ-CS-05"; attribute :>> name = "OnToOffOnSystemStop";
435
445
  attribute :>> statement = "While in ON mode, when System_stop_prog is commanded, the system shall stop infusion, cancel all notifications and transition to OFF mode.";
436
446
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -442,7 +452,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
442
452
  }
443
453
 
444
454
  // ── §4.1.2 OFF mode ─────────────────────────────────────────
445
- requirement reqCs06 : SystemRequirement {
455
+ requirement reqCs06 : Requirement {
456
+ attribute :>> requirementKind = RequirementKind::system;
446
457
  attribute :>> id = "REQ-CS-06"; attribute :>> name = "OffModeNoDelivery";
447
458
  attribute :>> statement = "While in OFF mode, the system shall not deliver any drug.";
448
459
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -454,7 +465,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
454
465
  }
455
466
 
456
467
  // ── §4.1.3 ON mode ──────────────────────────────────────────
457
- requirement reqCs07 : SystemRequirement {
468
+ requirement reqCs07 : Requirement {
469
+ attribute :>> requirementKind = RequirementKind::system;
458
470
  attribute :>> id = "REQ-CS-07"; attribute :>> name = "InfusionRequiresSavedPrescription";
459
471
  attribute :>> statement = "While in ON mode, the system shall allow initiation of infusion only when a saved prescription is available.";
460
472
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -464,7 +476,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
464
476
  attribute :>> subjectDescription = "ON mode";
465
477
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 7)";
466
478
  }
467
- requirement reqCs08 : SystemRequirement {
479
+ requirement reqCs08 : Requirement {
480
+ attribute :>> requirementKind = RequirementKind::system;
468
481
  attribute :>> id = "REQ-CS-08"; attribute :>> name = "AllowDataConfigurationInOn";
469
482
  attribute :>> statement = "While in ON mode, the system shall allow configuring (DataConfig_prog) new or saved prescription data and reservoir initial volume, as described in the Data Configuration Requirements (§4.2).";
470
483
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -474,7 +487,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
474
487
  attribute :>> subjectDescription = "ON mode";
475
488
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 8)";
476
489
  }
477
- requirement reqCs09 : SystemRequirement {
490
+ requirement reqCs09 : Requirement {
491
+ attribute :>> requirementKind = RequirementKind::system;
478
492
  attribute :>> id = "REQ-CS-09"; attribute :>> name = "PrescriptionDisplayAndConfirm";
479
493
  attribute :>> statement = "While in ON mode, if Infusion_initiate_prog, the system shall display the saved prescription values and allow the clinician to confirm the prescription with another Infusion_initiate_prog.";
480
494
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -484,7 +498,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
484
498
  attribute :>> subjectDescription = "ON mode";
485
499
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 9)";
486
500
  }
487
- requirement reqCs10 : SystemRequirement {
501
+ requirement reqCs10 : Requirement {
502
+ attribute :>> requirementKind = RequirementKind::system;
488
503
  attribute :>> id = "REQ-CS-10"; attribute :>> name = "AllowNotificationsInOn";
489
504
  attribute :>> statement = "While in ON mode, the system shall allow visual and audio notification as described in §4.3.";
490
505
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -494,7 +509,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
494
509
  attribute :>> subjectDescription = "ON mode";
495
510
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 10)";
496
511
  }
497
- requirement reqCs11 : SystemRequirement {
512
+ requirement reqCs11 : Requirement {
513
+ attribute :>> requirementKind = RequirementKind::system;
498
514
  attribute :>> id = "REQ-CS-11"; attribute :>> name = "AllowLoggingInOn";
499
515
  attribute :>> statement = "While in ON mode, the system shall allow logging as described in §4.4.";
500
516
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -504,7 +520,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
504
520
  attribute :>> subjectDescription = "ON mode";
505
521
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 11)";
506
522
  }
507
- requirement reqCs12 : SystemRequirement {
523
+ requirement reqCs12 : Requirement {
524
+ attribute :>> requirementKind = RequirementKind::system;
508
525
  attribute :>> id = "REQ-CS-12"; attribute :>> name = "ConfirmedInitiateStartsBasal";
509
526
  attribute :>> statement = "While in ON mode, when the second Infusion_initiate_prog is commanded as per REQ 9 and Inhibited_Infusion_macro = FALSE, the system shall reset Actual_Infusion_Duration_macro = 0 and Actual_Volume_Infused_macro = 0 and shall transition to ON > THERAPY > ACTIVE > BASAL mode.";
510
527
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -514,7 +531,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
514
531
  attribute :>> subjectDescription = "ON mode transitions";
515
532
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.2 (REQ 12)";
516
533
  }
517
- requirement reqCs13 : SystemRequirement {
534
+ requirement reqCs13 : Requirement {
535
+ attribute :>> requirementKind = RequirementKind::system;
518
536
  attribute :>> id = "REQ-CS-13"; attribute :>> name = "ConfirmedInitiateWhileInhibitedPauses";
519
537
  attribute :>> statement = "While in ON mode, when the second Infusion_initiate_prog is commanded as per REQ 9 and Inhibited_Infusion_macro = TRUE, the system shall reset Actual_Infusion_Duration_macro = 0 and Actual_Volume_Infused_macro = 0, shall transition to ON > THERAPY > PAUSED mode and perform actions as described in REQ 59 for 'Infusion Inhibited'.";
520
538
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -526,7 +544,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
526
544
  }
527
545
 
528
546
  // ── §4.1.4 ON > IDLE mode ───────────────────────────────────
529
- requirement reqCs14 : SystemRequirement {
547
+ requirement reqCs14 : Requirement {
548
+ attribute :>> requirementKind = RequirementKind::system;
530
549
  attribute :>> id = "REQ-CS-14"; attribute :>> name = "IdleModeNoDelivery";
531
550
  attribute :>> statement = "While in IDLE mode, the system shall not deliver any drug.";
532
551
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -536,7 +555,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
536
555
  attribute :>> subjectDescription = "ON > IDLE mode";
537
556
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 14)";
538
557
  }
539
- requirement reqCs15 : SystemRequirement {
558
+ requirement reqCs15 : Requirement {
559
+ attribute :>> requirementKind = RequirementKind::system;
540
560
  attribute :>> id = "REQ-CS-15"; attribute :>> name = "IdleTimeNotification";
541
561
  attribute :>> statement = "While in IDLE mode for more than Max_IDLE_Duration_const, the system shall take actions as defined in REQ 59 for 'IDLE Time'.";
542
562
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -548,7 +568,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
548
568
  }
549
569
 
550
570
  // ── §4.1.5 ON > THERAPY mode ────────────────────────────────
551
- requirement reqCs16 : SystemRequirement {
571
+ requirement reqCs16 : Requirement {
572
+ attribute :>> requirementKind = RequirementKind::system;
552
573
  attribute :>> id = "REQ-CS-16"; attribute :>> name = "TherapyDeliveryWithinTolerance";
553
574
  attribute :>> statement = "While in THERAPY mode, the system shall deliver the drug as per the respective sub-mode's programmed flow rate, FlowRate_Mode_macro, within a tolerance of Tolerance_Max_const.";
554
575
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -558,7 +579,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
558
579
  attribute :>> subjectDescription = "ON > THERAPY mode";
559
580
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 16)";
560
581
  }
561
- requirement reqCs17 : SystemRequirement {
582
+ requirement reqCs17 : Requirement {
583
+ attribute :>> requirementKind = RequirementKind::system;
562
584
  attribute :>> id = "REQ-CS-17"; attribute :>> name = "UnderInfusionFlowRateNotification";
563
585
  attribute :>> statement = "While in THERAPY mode, the system shall take actions as defined in REQ 59 for 'Under Infusion FlowRate' if the output flow rate falls below the mode flow rate beyond the tolerance windows.";
564
586
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -568,7 +590,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
568
590
  attribute :>> subjectDescription = "ON > THERAPY mode";
569
591
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 17)";
570
592
  }
571
- requirement reqCs18 : SystemRequirement {
593
+ requirement reqCs18 : Requirement {
594
+ attribute :>> requirementKind = RequirementKind::system;
572
595
  attribute :>> id = "REQ-CS-18"; attribute :>> name = "LowReservoirNotification";
573
596
  attribute :>> statement = "While in THERAPY mode, when the current volume of drug in the reservoir is less than Low_Reservoir_const, the system shall perform the actions defined in REQ 59 for 'Low Reservoir'.";
574
597
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -578,7 +601,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
578
601
  attribute :>> subjectDescription = "ON > THERAPY mode";
579
602
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 18)";
580
603
  }
581
- requirement reqCs19 : SystemRequirement {
604
+ requirement reqCs19 : Requirement {
605
+ attribute :>> requirementKind = RequirementKind::system;
582
606
  attribute :>> id = "REQ-CS-19"; attribute :>> name = "OverInfusionFlowRatePause";
583
607
  attribute :>> statement = "While in THERAPY mode, the system shall transition to PAUSED mode and perform the actions described in REQ 59 for 'Over Infusion FlowRate' if the output flow rate exceeds the mode flow rate beyond the tolerance windows.";
584
608
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -588,7 +612,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
588
612
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
589
613
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 19)";
590
614
  }
591
- requirement reqCs20 : SystemRequirement {
615
+ requirement reqCs20 : Requirement {
616
+ attribute :>> requirementKind = RequirementKind::system;
592
617
  attribute :>> id = "REQ-CS-20"; attribute :>> name = "OverInfusionVtbiPause";
593
618
  attribute :>> statement = "While in THERAPY mode, the system shall transition to PAUSED mode and take the actions described in REQ 59 for 'Over Infusion VTBI' if the actual volume infused exceeds the drug-database maximum VTBI.";
594
619
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -598,7 +623,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
598
623
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
599
624
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20)";
600
625
  }
601
- requirement reqCs21 : SystemRequirement {
626
+ requirement reqCs21 : Requirement {
627
+ attribute :>> requirementKind = RequirementKind::system;
602
628
  attribute :>> id = "REQ-CS-21"; attribute :>> name = "AirEmbolismPause";
603
629
  attribute :>> statement = "While in THERAPY mode, the system shall transition to PAUSED mode and perform the actions defined in REQ 59 for 'Air embolism' if an air bubble of a volume larger than Single_AirBubble_Volume_const flows through the hose, or the sum of volume of all air bubbles flowing through the hose exceeds Cumulative_AirBubble_Volume_const for the same time interval defined for Cumulative_AirBubble_Volume_const.";
604
630
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -608,7 +634,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
608
634
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
609
635
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21)";
610
636
  }
611
- requirement reqCs22 : SystemRequirement {
637
+ requirement reqCs22 : Requirement {
638
+ attribute :>> requirementKind = RequirementKind::system;
612
639
  attribute :>> id = "REQ-CS-22"; attribute :>> name = "ReverseDeliveryPause";
613
640
  attribute :>> statement = "While in THERAPY mode, the system shall transition to PAUSED mode and perform actions defined in REQ 59 for 'Reverse Delivery' if there is continuous reverse delivery for more than Rev_Delivery_Continuous_Duration_const, or the cumulative time of all reverse delivery episodes exceeds Rev_Delivery_Cumulative_Duration_const.";
614
641
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -618,7 +645,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
618
645
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
619
646
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22)";
620
647
  }
621
- requirement reqCs23 : SystemRequirement {
648
+ requirement reqCs23 : Requirement {
649
+ attribute :>> requirementKind = RequirementKind::system;
622
650
  attribute :>> id = "REQ-CS-23"; attribute :>> name = "EmptyReservoirPause";
623
651
  attribute :>> statement = "While in THERAPY mode and if the volume of drug in the reservoir is less than Empty_Reservoir_const, the system shall transition to PAUSED mode and perform actions as listed in REQ 59 for 'Empty Reservoir'.";
624
652
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -630,7 +658,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
630
658
  }
631
659
 
632
660
  // ── §4.1.6 ON > THERAPY > ACTIVE mode ───────────────────────
633
- requirement reqCs24 : SystemRequirement {
661
+ requirement reqCs24 : Requirement {
662
+ attribute :>> requirementKind = RequirementKind::system;
634
663
  attribute :>> id = "REQ-CS-24"; attribute :>> name = "SquareBolusAutoSchedule";
635
664
  attribute :>> statement = "While in ACTIVE mode, the system shall schedule to start a SQUARE BOLUS every Interval_sbolus_prog and end after Duration_sbolus_prog during the Duration_total_prog.";
636
665
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -640,7 +669,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
640
669
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode";
641
670
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 24)";
642
671
  }
643
- requirement reqCs25 : SystemRequirement {
672
+ requirement reqCs25 : Requirement {
673
+ attribute :>> requirementKind = RequirementKind::system;
644
674
  attribute :>> id = "REQ-CS-25"; attribute :>> name = "IgnorePatientBolusRequestConditions";
645
675
  attribute :>> statement = "While in ACTIVE mode, when BolusRequest_prog, the system shall ignore the patient bolus request (BolusRequest_prog = FALSE) if: (1) Inhibited_Infusion_macro = TRUE, OR (2) Inhibited_PatientBolus_macro = TRUE, OR (3) the interval between the most recent PATIENT BOLUS mode end time and the current BolusRequest_prog time violates LockOutPeriod_pbolus_prog, OR (4) the total number of delivered patient boluses for the current prescription violates the programmed maximum number of patient boluses, OR (5) the system is currently in PATIENT BOLUS mode.";
646
676
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -650,7 +680,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
650
680
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode";
651
681
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 25)";
652
682
  }
653
- requirement reqCs26 : SystemRequirement {
683
+ requirement reqCs26 : Requirement {
684
+ attribute :>> requirementKind = RequirementKind::system;
654
685
  attribute :>> id = "REQ-CS-26"; attribute :>> name = "FrequentBolusRequestsNotification";
655
686
  attribute :>> statement = "While in ACTIVE mode, the system shall perform the actions described in REQ 59 for 'Frequent Bolus Requests' if the condition described in REQ 25.3 or REQ 25.5 occurs.";
656
687
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -660,7 +691,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
660
691
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode";
661
692
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 26)";
662
693
  }
663
- requirement reqCs27 : SystemRequirement {
694
+ requirement reqCs27 : Requirement {
695
+ attribute :>> requirementKind = RequirementKind::system;
664
696
  attribute :>> id = "REQ-CS-27"; attribute :>> name = "BolusExceededNotification";
665
697
  attribute :>> statement = "While in ACTIVE mode, the system shall perform the actions described in REQ 59 for 'Bolus Exceeded' if the condition described in REQ 25.4 occurs.";
666
698
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -670,7 +702,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
670
702
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode";
671
703
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 27)";
672
704
  }
673
- requirement reqCs28 : SystemRequirement {
705
+ requirement reqCs28 : Requirement {
706
+ attribute :>> requirementKind = RequirementKind::system;
674
707
  attribute :>> id = "REQ-CS-28"; attribute :>> name = "InfusionCompleteToIdle";
675
708
  attribute :>> statement = "While in ACTIVE mode, the system shall transition to IDLE and perform actions described in REQ 59 for 'Infusion Complete' if the actual duration of infusion is greater than or equal to the programmed prescription total duration, or the total volume infused is greater than or equal to the programmed prescription maximum VTBI.";
676
709
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -680,7 +713,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
680
713
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
681
714
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 28)";
682
715
  }
683
- requirement reqCs29 : SystemRequirement {
716
+ requirement reqCs29 : Requirement {
717
+ attribute :>> requirementKind = RequirementKind::system;
684
718
  attribute :>> id = "REQ-CS-29"; attribute :>> name = "ManualInhibitToPaused";
685
719
  attribute :>> statement = "While in ACTIVE mode, when Infusion_inhibit_prog, the system shall transition to PAUSED mode and perform actions described in REQ 59 for 'Infusion Manually Inhibited'.";
686
720
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -690,7 +724,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
690
724
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
691
725
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 29)";
692
726
  }
693
- requirement reqCs30 : SystemRequirement {
727
+ requirement reqCs30 : Requirement {
728
+ attribute :>> requirementKind = RequirementKind::system;
694
729
  attribute :>> id = "REQ-CS-30"; attribute :>> name = "AllInhibitedToPaused";
695
730
  attribute :>> statement = "While in ACTIVE mode, when Inhibited_Infusion_macro = TRUE, Inhibited_Bolus_macro = TRUE and Inhibited_PatientBolus_macro = TRUE, the system shall transition to PAUSED mode.";
696
731
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -700,7 +735,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
700
735
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
701
736
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 30)";
702
737
  }
703
- requirement reqCs31 : SystemRequirement {
738
+ requirement reqCs31 : Requirement {
739
+ attribute :>> requirementKind = RequirementKind::system;
704
740
  attribute :>> id = "REQ-CS-31"; attribute :>> name = "BasalToSquareBolus";
705
741
  attribute :>> statement = "While in BASAL mode, when SQUARE BOLUS is initiated as described in REQ 24, the system shall transition to SQUARE BOLUS mode if (1) Inhibited_Bolus_macro = FALSE, AND (2) Inhibited_Infusion_macro = FALSE, AND (3) either there is no BolusRequest_prog, or there is a BolusRequest_prog and at least one of the conditions listed in REQ 25 is true.";
706
742
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -710,7 +746,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
710
746
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
711
747
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 31)";
712
748
  }
713
- requirement reqCs32 : SystemRequirement {
749
+ requirement reqCs32 : Requirement {
750
+ attribute :>> requirementKind = RequirementKind::system;
714
751
  attribute :>> id = "REQ-CS-32"; attribute :>> name = "BasalToPatientBolus";
715
752
  attribute :>> statement = "While in BASAL mode, the system shall transition to PATIENT BOLUS mode when BolusRequest_prog and none of the conditions listed in REQ 25 are true.";
716
753
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -720,7 +757,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
720
757
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
721
758
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 32)";
722
759
  }
723
- requirement reqCs33 : SystemRequirement {
760
+ requirement reqCs33 : Requirement {
761
+ attribute :>> requirementKind = RequirementKind::system;
724
762
  attribute :>> id = "REQ-CS-33"; attribute :>> name = "SquareBolusToPatientBolus";
725
763
  attribute :>> statement = "While in SQUARE BOLUS mode, the system shall transition to PATIENT BOLUS mode if BolusRequest_prog and none of the conditions listed in REQ 25 are true.";
726
764
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -730,7 +768,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
730
768
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
731
769
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 33)";
732
770
  }
733
- requirement reqCs34 : SystemRequirement {
771
+ requirement reqCs34 : Requirement {
772
+ attribute :>> requirementKind = RequirementKind::system;
734
773
  attribute :>> id = "REQ-CS-34"; attribute :>> name = "SquareBolusToBasal";
735
774
  attribute :>> statement = "While in SQUARE BOLUS mode, if Inhibited_Bolus_macro = TRUE or the SQUARE BOLUS is scheduled to end (as described in REQ 24), the system shall transition to BASAL mode if (1) Inhibited_Infusion_macro = FALSE, AND (2) there is no BolusRequest_prog, or BolusRequest_prog and at least one of the conditions listed in REQ 25 is true.";
736
775
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -740,7 +779,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
740
779
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
741
780
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 34)";
742
781
  }
743
- requirement reqCs35 : SystemRequirement {
782
+ requirement reqCs35 : Requirement {
783
+ attribute :>> requirementKind = RequirementKind::system;
744
784
  attribute :>> id = "REQ-CS-35"; attribute :>> name = "PatientBolusToBasal";
745
785
  attribute :>> statement = "While in PATIENT BOLUS mode, when Inhibited_PatientBolus_macro = TRUE or the total duration in the current PATIENT BOLUS mode is greater than or equal to Duration_pbolus_prog, the system shall stop the PATIENT BOLUS delivery and transition to BASAL mode if (1) Inhibited_Infusion_macro = FALSE, AND (2) no SQUARE BOLUS is scheduled to be in progress at the time of transition, OR (3) a SQUARE BOLUS is scheduled to be in progress at the time of transition and Inhibited_Bolus_macro = TRUE.";
746
786
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -750,7 +790,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
750
790
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
751
791
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 35)";
752
792
  }
753
- requirement reqCs36 : SystemRequirement {
793
+ requirement reqCs36 : Requirement {
794
+ attribute :>> requirementKind = RequirementKind::system;
754
795
  attribute :>> id = "REQ-CS-36"; attribute :>> name = "PatientBolusToSquareBolus";
755
796
  attribute :>> statement = "While in PATIENT BOLUS mode, when Inhibited_PatientBolus_macro = TRUE or the total duration in the current PATIENT BOLUS mode is greater than or equal to Duration_pbolus_prog, the system shall stop the PATIENT BOLUS delivery and transition to SQUARE BOLUS mode if (1) Inhibited_Infusion_macro = FALSE, AND (2) a SQUARE BOLUS is scheduled to be in progress at the time of transition, AND (3) Inhibited_Bolus_macro = FALSE.";
756
797
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -760,7 +801,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
760
801
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
761
802
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 36)";
762
803
  }
763
- requirement reqCs37 : SystemRequirement {
804
+ requirement reqCs37 : Requirement {
805
+ attribute :>> requirementKind = RequirementKind::system;
764
806
  attribute :>> id = "REQ-CS-37"; attribute :>> name = "BasalToPauseOnInhibit";
765
807
  attribute :>> statement = "While in BASAL mode, if Inhibited_Infusion_macro = TRUE, the system shall transition to PAUSE mode.";
766
808
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -770,7 +812,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
770
812
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
771
813
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 37)";
772
814
  }
773
- requirement reqCs38 : SystemRequirement {
815
+ requirement reqCs38 : Requirement {
816
+ attribute :>> requirementKind = RequirementKind::system;
774
817
  attribute :>> id = "REQ-CS-38"; attribute :>> name = "PatientBolusToPauseOnInhibit";
775
818
  attribute :>> statement = "While in PATIENT BOLUS mode, the system shall transition to PAUSE mode if Inhibited_PatientBolus_macro = TRUE and Inhibited_Infusion_macro = TRUE.";
776
819
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -780,7 +823,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
780
823
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
781
824
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 38)";
782
825
  }
783
- requirement reqCs39 : SystemRequirement {
826
+ requirement reqCs39 : Requirement {
827
+ attribute :>> requirementKind = RequirementKind::system;
784
828
  attribute :>> id = "REQ-CS-39"; attribute :>> name = "SquareBolusToPauseOnInhibit";
785
829
  attribute :>> statement = "While in SQUARE BOLUS mode, the system shall transition to PAUSE mode if Inhibited_Bolus_macro = TRUE and Inhibited_Infusion_macro = TRUE.";
786
830
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -792,7 +836,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
792
836
  }
793
837
 
794
838
  // ── §4.1.7–4.1.9 BASAL / SQUARE BOLUS / PATIENT BOLUS ───────
795
- requirement reqCs40 : SystemRequirement {
839
+ requirement reqCs40 : Requirement {
840
+ attribute :>> requirementKind = RequirementKind::system;
796
841
  attribute :>> id = "REQ-CS-40"; attribute :>> name = "BasalDeliveryRate";
797
842
  attribute :>> statement = "While in BASAL mode, the system shall deliver the drug at a flow rate FlowRate_basal_prog with a variation up to Tolerance_Max_const.";
798
843
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -802,7 +847,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
802
847
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE > BASAL mode";
803
848
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7.1 (REQ 40)";
804
849
  }
805
- requirement reqCs41 : SystemRequirement {
850
+ requirement reqCs41 : Requirement {
851
+ attribute :>> requirementKind = RequirementKind::system;
806
852
  attribute :>> id = "REQ-CS-41"; attribute :>> name = "SquareBolusDeliveryRate";
807
853
  attribute :>> statement = "While in SQUARE BOLUS mode, the system shall deliver the drug at a flow rate FlowRate_sbolus_prog with a variation up to Tolerance_Max_const.";
808
854
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -812,7 +858,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
812
858
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE > SQUARE BOLUS mode";
813
859
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8.1 (REQ 41)";
814
860
  }
815
- requirement reqCs42 : SystemRequirement {
861
+ requirement reqCs42 : Requirement {
862
+ attribute :>> requirementKind = RequirementKind::system;
816
863
  attribute :>> id = "REQ-CS-42"; attribute :>> name = "PatientBolusDeliveryRate";
817
864
  attribute :>> statement = "While in PATIENT BOLUS mode, the system shall deliver the drug at a flow rate FlowRate_pbolus_prog with a variation up to Tolerance_Max_const.";
818
865
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -824,7 +871,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
824
871
  }
825
872
 
826
873
  // ── §4.1.10 ON > THERAPY > PAUSED mode ──────────────────────
827
- requirement reqCs43 : SystemRequirement {
874
+ requirement reqCs43 : Requirement {
875
+ attribute :>> requirementKind = RequirementKind::system;
828
876
  attribute :>> id = "REQ-CS-43"; attribute :>> name = "PausedKvoDelivery";
829
877
  attribute :>> statement = "While in PAUSED mode, the system shall allow drug infusion at a flow rate FlowRate_kvo_hd with a variation up to Tolerance_Max_const, to keep the vein open when infusion is paused.";
830
878
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -834,7 +882,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
834
882
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode";
835
883
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 43)";
836
884
  }
837
- requirement reqCs44 : SystemRequirement {
885
+ requirement reqCs44 : Requirement {
886
+ attribute :>> requirementKind = RequirementKind::system;
838
887
  attribute :>> id = "REQ-CS-44"; attribute :>> name = "PausedTimeNotification";
839
888
  attribute :>> statement = "While in PAUSED mode for more than Max_PAUSED_Duration_const, the system shall perform actions as described in REQ 59 for 'PAUSED Time'.";
840
889
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -844,7 +893,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
844
893
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode";
845
894
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 44)";
846
895
  }
847
- requirement reqCs45 : SystemRequirement {
896
+ requirement reqCs45 : Requirement {
897
+ attribute :>> requirementKind = RequirementKind::system;
848
898
  attribute :>> id = "REQ-CS-45"; attribute :>> name = "PausedInitiateWhileInhibitedNoTransition";
849
899
  attribute :>> statement = "While in PAUSED mode, when Infusion_initiate_prog and Inhibited_Infusion_macro = TRUE, the system shall not perform any transition.";
850
900
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -854,7 +904,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
854
904
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode";
855
905
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)";
856
906
  }
857
- requirement reqCs46 : SystemRequirement {
907
+ requirement reqCs46 : Requirement {
908
+ attribute :>> requirementKind = RequirementKind::system;
858
909
  attribute :>> id = "REQ-CS-46"; attribute :>> name = "PausedResumeToBasal";
859
910
  attribute :>> statement = "While in PAUSED mode, when Infusion_initiate_prog and Inhibited_Infusion_macro = FALSE, the system shall transition to ON > THERAPY > ACTIVE > BASAL mode.";
860
911
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -864,7 +915,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
864
915
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode transitions";
865
916
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.2 (REQ 46)";
866
917
  }
867
- requirement reqCs47 : SystemRequirement {
918
+ requirement reqCs47 : Requirement {
919
+ attribute :>> requirementKind = RequirementKind::system;
868
920
  attribute :>> id = "REQ-CS-47"; attribute :>> name = "PausedInhibitToIdle";
869
921
  attribute :>> statement = "While in PAUSED mode, when Infusion_inhibit_prog, the system shall transition to ON > IDLE mode and perform actions as described in REQ 59 for 'Infusion Stopped Manually'.";
870
922
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -876,7 +928,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
876
928
  }
877
929
 
878
930
  // ═════ §4.2 Data Configuration Requirements ═════════════════
879
- requirement reqCs48 : SystemRequirement {
931
+ requirement reqCs48 : Requirement {
932
+ attribute :>> requirementKind = RequirementKind::system;
880
933
  attribute :>> id = "REQ-CS-48"; attribute :>> name = "DisplaySavedPrescriptionOnConfig";
881
934
  attribute :>> statement = "When in ON mode, if DataConfig_prog as described in REQ 8, the system shall display the saved prescription and reservoir initial volume values or their default values (if there are no saved prescription and reservoir initial volume values) in the order listed in §3.1.1 and §3.1.3.";
882
935
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -886,7 +939,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
886
939
  attribute :>> subjectDescription = "Data configuration";
887
940
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 48)";
888
941
  }
889
- requirement reqCs49 : SystemRequirement {
942
+ requirement reqCs49 : Requirement {
943
+ attribute :>> requirementKind = RequirementKind::system;
890
944
  attribute :>> id = "REQ-CS-49"; attribute :>> name = "EditValuesOneAtATime";
891
945
  attribute :>> statement = "When the prescription and reservoir initial volume data are displayed as described in REQ 48, the system shall allow editing the values one at a time in the order they are displayed.";
892
946
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -896,7 +950,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
896
950
  attribute :>> subjectDescription = "Data configuration";
897
951
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 49)";
898
952
  }
899
- requirement reqCs50 : SystemRequirement {
953
+ requirement reqCs50 : Requirement {
954
+ attribute :>> requirementKind = RequirementKind::system;
900
955
  attribute :>> id = "REQ-CS-50"; attribute :>> name = "AllowInitiateWithNewValues";
901
956
  attribute :>> statement = "When the values are modified as described in REQ 49, the system shall allow infusion initiation with the new set of values (Infusion_initiate_prog).";
902
957
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -906,7 +961,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
906
961
  attribute :>> subjectDescription = "Data configuration";
907
962
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 50)";
908
963
  }
909
- requirement reqCs51 : SystemRequirement {
964
+ requirement reqCs51 : Requirement {
965
+ attribute :>> requirementKind = RequirementKind::system;
910
966
  attribute :>> id = "REQ-CS-51"; attribute :>> name = "ValidateValuesOnInitiate";
911
967
  attribute :>> statement = "When Infusion_initiate_prog as described in REQ 50, the system shall validate if all the values are consistent with the conditions specified in their respective Type Condition fields in §3.1.1 and §3.1.3.";
912
968
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -916,7 +972,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
916
972
  attribute :>> subjectDescription = "Data configuration";
917
973
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 51)";
918
974
  }
919
- requirement reqCs52 : SystemRequirement {
975
+ requirement reqCs52 : Requirement {
976
+ attribute :>> requirementKind = RequirementKind::system;
920
977
  attribute :>> id = "REQ-CS-52"; attribute :>> name = "DrugDatabaseNotReachable";
921
978
  attribute :>> statement = "When the system is validating data as described in REQ 51, if the system is unable to access the drug database safe values, the system shall not save the values and perform actions as described in REQ 59 for 'Drug database not reachable'.";
922
979
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -926,7 +983,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
926
983
  attribute :>> subjectDescription = "Data configuration";
927
984
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 52)";
928
985
  }
929
- requirement reqCs53 : SystemRequirement {
986
+ requirement reqCs53 : Requirement {
987
+ attribute :>> requirementKind = RequirementKind::system;
930
988
  attribute :>> id = "REQ-CS-53"; attribute :>> name = "DrugSafeValueNotPresent";
931
989
  attribute :>> statement = "When the system is validating data as described in REQ 51, if any of the drug database safe values listed in §3.5 is not present, the system shall not perform the validation with respect to that missing field, perform actions as described in REQ 59 for 'Drug safe value not present' and continue validation.";
932
990
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -936,7 +994,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
936
994
  attribute :>> subjectDescription = "Data configuration";
937
995
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 53)";
938
996
  }
939
- requirement reqCs54 : SystemRequirement {
997
+ requirement reqCs54 : Requirement {
998
+ attribute :>> requirementKind = RequirementKind::system;
940
999
  attribute :>> id = "REQ-CS-54"; attribute :>> name = "SaveValidatedPrescription";
941
1000
  attribute :>> statement = "If there are no notifications from REQ 51 and REQ 52, the system shall save the prescription values, clear all the notifications previously generated by REQ 51, REQ 52 and REQ 53 if any, and allow initiate infusion with the new values as described in REQ 9.";
942
1001
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -946,7 +1005,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
946
1005
  attribute :>> subjectDescription = "Data configuration";
947
1006
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 54)";
948
1007
  }
949
- requirement reqCs55 : SystemRequirement {
1008
+ requirement reqCs55 : Requirement {
1009
+ attribute :>> requirementKind = RequirementKind::system;
950
1010
  attribute :>> id = "REQ-CS-55"; attribute :>> name = "RejectInvalidPrescription";
951
1011
  attribute :>> statement = "If REQ 51 or REQ 52 had generated a notification, the system shall not save the prescription values, allow the clinician to edit the values of the fields as described in REQ 49 and then repeat steps from REQ 50 until all validations are passed as described in REQ 54.";
952
1012
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -956,7 +1016,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
956
1016
  attribute :>> subjectDescription = "Data configuration";
957
1017
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 55)";
958
1018
  }
959
- requirement reqCs56 : SystemRequirement {
1019
+ requirement reqCs56 : Requirement {
1020
+ attribute :>> requirementKind = RequirementKind::system;
960
1021
  attribute :>> id = "REQ-CS-56"; attribute :>> name = "RemainInModeDuringConfig";
961
1022
  attribute :>> statement = "While data configuration is in progress, the system shall remain in its current mode with the currently active prescription values, until infusion is initiated with the new prescription values as described in REQ 54.";
962
1023
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -966,7 +1027,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
966
1027
  attribute :>> subjectDescription = "Data configuration";
967
1028
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 56)";
968
1029
  }
969
- requirement reqCs57 : SystemRequirement {
1030
+ requirement reqCs57 : Requirement {
1031
+ attribute :>> requirementKind = RequirementKind::system;
970
1032
  attribute :>> id = "REQ-CS-57"; attribute :>> name = "ConfigWarningNotification";
971
1033
  attribute :>> statement = "When the clinician has attempted to configure the data for more than Config_Warning_Duration_const continuously, the system shall perform actions as described in REQ 59 for 'Config Time'.";
972
1034
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -976,7 +1038,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
976
1038
  attribute :>> subjectDescription = "Data configuration";
977
1039
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 57)";
978
1040
  }
979
- requirement reqCs58 : SystemRequirement {
1041
+ requirement reqCs58 : Requirement {
1042
+ attribute :>> requirementKind = RequirementKind::system;
980
1043
  attribute :>> id = "REQ-CS-58"; attribute :>> name = "MaxConfigDurationClears";
981
1044
  attribute :>> statement = "When the clinician has attempted to configure the data for more than Max_Config_Duration_const continuously, the system shall clear all unsaved prescription values and shall perform actions as described in REQ 59 for 'Unsaved Configuration Cleared'.";
982
1045
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -988,7 +1051,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
988
1051
  }
989
1052
 
990
1053
  // ═════ §4.3 Notification Requirements ═══════════════════════
991
- requirement reqCs59 : SystemRequirement {
1054
+ requirement reqCs59 : Requirement {
1055
+ attribute :>> requirementKind = RequirementKind::system;
992
1056
  attribute :>> id = "REQ-CS-59"; attribute :>> name = "NotificationActionTable";
993
1057
  attribute :>> statement = "The system shall perform all the actions listed in the notification action table for the respective notification. The table defines, for each of the 20 notifications, its priority (High/Med/Low) and the actions Visual, Audio, Inhibit Infusion, Inhibit Square Bolus, Inhibit Patient Bolus, and Stop Bolus. Notification requirements have higher precedence over all other requirements in the system.";
994
1058
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -998,7 +1062,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
998
1062
  attribute :>> subjectDescription = "Notification handling (see NOTIF-01..NOTIF-20)";
999
1063
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 59)";
1000
1064
  }
1001
- requirement reqCs60 : SystemRequirement {
1065
+ requirement reqCs60 : Requirement {
1066
+ attribute :>> requirementKind = RequirementKind::system;
1002
1067
  attribute :>> id = "REQ-CS-60"; attribute :>> name = "HighestPriorityActionsFirst";
1003
1068
  attribute :>> statement = "When more than one notification having different priorities occurs at the same time, the system shall take actions listed for the highest priority notification.";
1004
1069
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1008,7 +1073,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1008
1073
  attribute :>> subjectDescription = "Notification precedence";
1009
1074
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 60)";
1010
1075
  }
1011
- requirement reqCs61 : SystemRequirement {
1076
+ requirement reqCs61 : Requirement {
1077
+ attribute :>> requirementKind = RequirementKind::system;
1012
1078
  attribute :>> id = "REQ-CS-61"; attribute :>> name = "MostRestrictiveSamePriority";
1013
1079
  attribute :>> statement = "When more than one notification having same priorities and different set of actions occurs at the same time, the system shall take actions listed for the most restrictive notification.";
1014
1080
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1018,7 +1084,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1018
1084
  attribute :>> subjectDescription = "Notification precedence";
1019
1085
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 61)";
1020
1086
  }
1021
- requirement reqCs62 : SystemRequirement {
1087
+ requirement reqCs62 : Requirement {
1088
+ attribute :>> requirementKind = RequirementKind::system;
1022
1089
  attribute :>> id = "REQ-CS-62"; attribute :>> name = "MostRestrictiveTieBreak";
1023
1090
  attribute :>> statement = "When more than one notification having same priorities and same set of actions occurs at the same time, the system will take actions for the notification that has the most restrictive actions as listed in REQ 59.";
1024
1091
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1028,7 +1095,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1028
1095
  attribute :>> subjectDescription = "Notification precedence";
1029
1096
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 62)";
1030
1097
  }
1031
- requirement reqCs63 : SystemRequirement {
1098
+ requirement reqCs63 : Requirement {
1099
+ attribute :>> requirementKind = RequirementKind::system;
1032
1100
  attribute :>> id = "REQ-CS-63"; attribute :>> name = "EscalateToMoreRestrictive";
1033
1101
  attribute :>> statement = "While a low priority or less restrictive notification is in effect and a higher priority or more restrictive same-priority notification occurs, the system shall take actions for the high priority or more restrictive notification as listed in REQ 59.";
1034
1102
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1038,7 +1106,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1038
1106
  attribute :>> subjectDescription = "Notification precedence";
1039
1107
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 63)";
1040
1108
  }
1041
- requirement reqCs64 : SystemRequirement {
1109
+ requirement reqCs64 : Requirement {
1110
+ attribute :>> requirementKind = RequirementKind::system;
1042
1111
  attribute :>> id = "REQ-CS-64"; attribute :>> name = "LowPriorityListedOnly";
1043
1112
  attribute :>> statement = "While a high priority notification is in effect and a low priority notification occurs, the system shall only add the notification to the active notification list and shall not take any other actions for the low priority notification.";
1044
1113
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1048,7 +1117,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1048
1117
  attribute :>> subjectDescription = "Notification precedence";
1049
1118
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 64)";
1050
1119
  }
1051
- requirement reqCs65 : SystemRequirement {
1120
+ requirement reqCs65 : Requirement {
1121
+ attribute :>> requirementKind = RequirementKind::system;
1052
1122
  attribute :>> id = "REQ-CS-65"; attribute :>> name = "CancelNotificationsOneAtATime";
1053
1123
  attribute :>> statement = "The system shall allow the clinician to cancel the active notifications, starting from the first in the list, one at a time (Notification_cancel_prog).";
1054
1124
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1058,7 +1128,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1058
1128
  attribute :>> subjectDescription = "Notification cancellation";
1059
1129
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 65)";
1060
1130
  }
1061
- requirement reqCs66 : SystemRequirement {
1131
+ requirement reqCs66 : Requirement {
1132
+ attribute :>> requirementKind = RequirementKind::system;
1062
1133
  attribute :>> id = "REQ-CS-66"; attribute :>> name = "CancelClearsRestrictions";
1063
1134
  attribute :>> statement = "When Notification_cancel_prog for a notification, the system shall cancel and clear the restrictions for that notification: Inhibited_Infusion_macro = FALSE, Inhibited_Bolus_macro = FALSE, Inhibited_PatientBolus_macro = FALSE, and cancel and clear the corresponding audio notification.";
1064
1135
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1068,7 +1139,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1068
1139
  attribute :>> subjectDescription = "Notification cancellation";
1069
1140
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 66)";
1070
1141
  }
1071
- requirement reqCs67 : SystemRequirement {
1142
+ requirement reqCs67 : Requirement {
1143
+ attribute :>> requirementKind = RequirementKind::system;
1072
1144
  attribute :>> id = "REQ-CS-67"; attribute :>> name = "NextNotificationAfterCancel";
1073
1145
  attribute :>> statement = "When Notification_cancel_prog for a notification, the system takes actions for the next active notification in order of priority and descending order of occurrence.";
1074
1146
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1080,7 +1152,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1080
1152
  }
1081
1153
 
1082
1154
  // ── §4.3.1 Visual notification ──────────────────────────────
1083
- requirement reqCs68 : SystemRequirement {
1155
+ requirement reqCs68 : Requirement {
1156
+ attribute :>> requirementKind = RequirementKind::system;
1084
1157
  attribute :>> id = "REQ-CS-68"; attribute :>> name = "DisplayActiveNotificationsOrdered";
1085
1158
  attribute :>> statement = "The system shall display all active notifications in order of priority and descending order of occurrence (Notification_Visual_output).";
1086
1159
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1090,7 +1163,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1090
1163
  attribute :>> subjectDescription = "Visual notification";
1091
1164
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 68)";
1092
1165
  }
1093
- requirement reqCs69 : SystemRequirement {
1166
+ requirement reqCs69 : Requirement {
1167
+ attribute :>> requirementKind = RequirementKind::system;
1094
1168
  attribute :>> id = "REQ-CS-69"; attribute :>> name = "DisplayNotificationNameAndTime";
1095
1169
  attribute :>> statement = "The system shall display the name of all the active notifications and the time of the occurrence.";
1096
1170
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1100,7 +1174,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1100
1174
  attribute :>> subjectDescription = "Visual notification";
1101
1175
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 69)";
1102
1176
  }
1103
- requirement reqCs70 : SystemRequirement {
1177
+ requirement reqCs70 : Requirement {
1178
+ attribute :>> requirementKind = RequirementKind::system;
1104
1179
  attribute :>> id = "REQ-CS-70"; attribute :>> name = "DisplaySimultaneousNotifications";
1105
1180
  attribute :>> statement = "When more than one notification occurs at the same time, the system shall display all the notifications as per REQ 68.";
1106
1181
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1110,7 +1185,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1110
1185
  attribute :>> subjectDescription = "Visual notification";
1111
1186
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 70)";
1112
1187
  }
1113
- requirement reqCs71 : SystemRequirement {
1188
+ requirement reqCs71 : Requirement {
1189
+ attribute :>> requirementKind = RequirementKind::system;
1114
1190
  attribute :>> id = "REQ-CS-71"; attribute :>> name = "RemoveCancelledNotificationFromList";
1115
1191
  attribute :>> statement = "When Notification_cancel_prog for a notification, the system shall remove the notification from the list and shall display the list of remaining notifications.";
1116
1192
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1122,7 +1198,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1122
1198
  }
1123
1199
 
1124
1200
  // ── §4.3.2 Audio notification ───────────────────────────────
1125
- requirement reqCs72 : SystemRequirement {
1201
+ requirement reqCs72 : Requirement {
1202
+ attribute :>> requirementKind = RequirementKind::system;
1126
1203
  attribute :>> id = "REQ-CS-72"; attribute :>> name = "AudibleSoundPerNotification";
1127
1204
  attribute :>> statement = "When each notification occurs that requires an audio alarm as listed in REQ 59, the system shall produce a single audible sound of Audio_level_const, unless the audio is disabled or silenced.";
1128
1205
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1132,7 +1209,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1132
1209
  attribute :>> subjectDescription = "Audio notification";
1133
1210
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 72)";
1134
1211
  }
1135
- requirement reqCs73 : SystemRequirement {
1212
+ requirement reqCs73 : Requirement {
1213
+ attribute :>> requirementKind = RequirementKind::system;
1136
1214
  attribute :>> id = "REQ-CS-73"; attribute :>> name = "AudioDisableSilenceEnable";
1137
1215
  attribute :>> statement = "The system shall allow the clinician to disable audible alarm, silence the alarm temporarily and enable a disabled or silenced alarm.";
1138
1216
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1142,7 +1220,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1142
1220
  attribute :>> subjectDescription = "Audio notification";
1143
1221
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 73)";
1144
1222
  }
1145
- requirement reqCs74 : SystemRequirement {
1223
+ requirement reqCs74 : Requirement {
1224
+ attribute :>> requirementKind = RequirementKind::system;
1146
1225
  attribute :>> id = "REQ-CS-74"; attribute :>> name = "NoAudioWhileDisabled";
1147
1226
  attribute :>> statement = "If Disable_audio_prog = 'PERM' or 'TEMP', the system shall not produce audible alarm until it is enabled (Disable_audio_prog = FALSE).";
1148
1227
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1152,7 +1231,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1152
1231
  attribute :>> subjectDescription = "Audio notification";
1153
1232
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 74)";
1154
1233
  }
1155
- requirement reqCs75 : SystemRequirement {
1234
+ requirement reqCs75 : Requirement {
1235
+ attribute :>> requirementKind = RequirementKind::system;
1156
1236
  attribute :>> id = "REQ-CS-75"; attribute :>> name = "TempSilenceAutoReenable";
1157
1237
  attribute :>> statement = "If Disable_audio_prog = 'TEMP', the system shall automatically enable it (Disable_audio_prog = FALSE) after Audio_Enable_Duration_const minutes.";
1158
1238
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1162,7 +1242,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1162
1242
  attribute :>> subjectDescription = "Audio notification";
1163
1243
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 75)";
1164
1244
  }
1165
- requirement reqCs76 : SystemRequirement {
1245
+ requirement reqCs76 : Requirement {
1246
+ attribute :>> requirementKind = RequirementKind::system;
1166
1247
  attribute :>> id = "REQ-CS-76"; attribute :>> name = "ReannunciateLongActiveNotifications";
1167
1248
  attribute :>> statement = "For every notification with audio alarm that is active for more than Audio_Enable_Duration_const minutes, the system shall produce audible sound as described in REQ 72.";
1168
1249
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1174,7 +1255,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1174
1255
  }
1175
1256
 
1176
1257
  // ═════ §4.4 Log Requirements ════════════════════════════════
1177
- requirement reqCs77 : SystemRequirement {
1258
+ requirement reqCs77 : Requirement {
1259
+ attribute :>> requirementKind = RequirementKind::system;
1178
1260
  attribute :>> id = "REQ-CS-77"; attribute :>> name = "LogWhileOn";
1179
1261
  attribute :>> statement = "The system shall log all the operational and error data when the system is in ON mode.";
1180
1262
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1184,7 +1266,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1184
1266
  attribute :>> subjectDescription = "Logging";
1185
1267
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 77)";
1186
1268
  }
1187
- requirement reqCs78 : SystemRequirement {
1269
+ requirement reqCs78 : Requirement {
1270
+ attribute :>> requirementKind = RequirementKind::system;
1188
1271
  attribute :>> id = "REQ-CS-78"; attribute :>> name = "OperationalLogContent";
1189
1272
  attribute :>> statement = "While in ON mode, every Log_Interval_const minutes or when a mode transition occurs, the system shall record the following information in an 'Operational log': (1) date in dd/MM/yy format, (2) time in HH:MM:SS GMT, (3) Patient ID, (4) prescription information, (5) current mode of the system, (6) current flow rate of the system.";
1190
1273
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1194,7 +1277,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1194
1277
  attribute :>> subjectDescription = "Logging";
1195
1278
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 78)";
1196
1279
  }
1197
- requirement reqCs79 : SystemRequirement {
1280
+ requirement reqCs79 : Requirement {
1281
+ attribute :>> requirementKind = RequirementKind::system;
1198
1282
  attribute :>> id = "REQ-CS-79"; attribute :>> name = "InfusionCompleteLogContent";
1199
1283
  attribute :>> statement = "When infusion is completed as per REQ 28, the system shall record the following information in addition to the information listed in REQ 78 in the 'Operational log': (1) total volume infused for that prescription, (2) total duration of infusion for that prescription (total duration in ACTIVE mode).";
1200
1284
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1204,7 +1288,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1204
1288
  attribute :>> subjectDescription = "Logging";
1205
1289
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 79)";
1206
1290
  }
1207
- requirement reqCs80 : SystemRequirement {
1291
+ requirement reqCs80 : Requirement {
1292
+ attribute :>> requirementKind = RequirementKind::system;
1208
1293
  attribute :>> id = "REQ-CS-80"; attribute :>> name = "ErrorLogContent";
1209
1294
  attribute :>> statement = "When any notification condition listed in REQ 59 occurs, the system shall record the following information in an error log: (1) date in dd/MM/yy format, (2) time in HH:MM:SS GMT, (3) notification description, (4) current mode of the system, (5) remaining drug volume.";
1210
1295
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1214,7 +1299,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1214
1299
  attribute :>> subjectDescription = "Logging";
1215
1300
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 80)";
1216
1301
  }
1217
- requirement reqCs81 : SystemRequirement {
1302
+ requirement reqCs81 : Requirement {
1303
+ attribute :>> requirementKind = RequirementKind::system;
1218
1304
  attribute :>> id = "REQ-CS-81"; attribute :>> name = "NotificationCancelLogContent";
1219
1305
  attribute :>> statement = "When a notification is cancelled as described in REQ 66, the system shall record the following information in the 'Operational log': (1) date in dd/MM/yy format, (2) time in HH:MM:SS GMT, (3) description of the notification cancelled.";
1220
1306
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1226,7 +1312,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1226
1312
  }
1227
1313
 
1228
1314
  // ═════ §4.5 Security Requirements ═══════════════════════════
1229
- requirement reqCs82 : SystemRequirement {
1315
+ requirement reqCs82 : Requirement {
1316
+ attribute :>> requirementKind = RequirementKind::system;
1230
1317
  attribute :>> id = "REQ-CS-82"; attribute :>> name = "AuthorizedCliniciansOnly";
1231
1318
  attribute :>> statement = "The system shall allow only authorized clinicians to configure the system.";
1232
1319
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1238,7 +1325,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1238
1325
  }
1239
1326
 
1240
1327
  // ═════ Ch.5 Non-Behavioral Requirements ═════════════════════
1241
- requirement reqCs83 : SystemRequirement {
1328
+ requirement reqCs83 : Requirement {
1329
+ attribute :>> requirementKind = RequirementKind::system;
1242
1330
  attribute :>> id = "REQ-CS-83"; attribute :>> name = "DropResistance";
1243
1331
  attribute :>> statement = "The system shall be unbreakable if it is dropped on a laminate floor from y m of height with no additional force than gravity.";
1244
1332
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1248,7 +1336,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1248
1336
  attribute :>> subjectDescription = "GPCA enclosure";
1249
1337
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 83)";
1250
1338
  }
1251
- requirement reqCs84 : SystemRequirement {
1339
+ requirement reqCs84 : Requirement {
1340
+ attribute :>> requirementKind = RequirementKind::system;
1252
1341
  attribute :>> id = "REQ-CS-84"; attribute :>> name = "WaterResistance";
1253
1342
  attribute :>> statement = "The system shall be waterproof to non-acidic liquid of less than x ml on any side of the pump for a maximum of 2 hours.";
1254
1343
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1258,7 +1347,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1258
1347
  attribute :>> subjectDescription = "GPCA enclosure";
1259
1348
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 84)";
1260
1349
  }
1261
- requirement reqCs85 : SystemRequirement {
1350
+ requirement reqCs85 : Requirement {
1351
+ attribute :>> requirementKind = RequirementKind::system;
1262
1352
  attribute :>> id = "REQ-CS-85"; attribute :>> name = "LogRetention";
1263
1353
  attribute :>> statement = "The system shall persist the most recent 30 days of error log data and 15 days of operational log data.";
1264
1354
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1268,7 +1358,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1268
1358
  attribute :>> subjectDescription = "Logging";
1269
1359
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 85)";
1270
1360
  }
1271
- requirement reqCs86 : SystemRequirement {
1361
+ requirement reqCs86 : Requirement {
1362
+ attribute :>> requirementKind = RequirementKind::system;
1272
1363
  attribute :>> id = "REQ-CS-86"; attribute :>> name = "PrescriptionRetention";
1273
1364
  attribute :>> statement = "The system shall persist the last saved prescription data for 15 days.";
1274
1365
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
@@ -1284,7 +1375,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1284
1375
  // methodology extends a source specification with risk-driven
1285
1376
  // and hardware requirements. sourceKind = extension segregates
1286
1377
  // them from the REQ-CS family.
1287
- requirement reqDrugLibraryLimits : SystemRequirement {
1378
+ requirement reqDrugLibraryLimits : Requirement {
1379
+ attribute :>> requirementKind = RequirementKind::system;
1288
1380
  attribute :>> id = "REQ-X-01"; attribute :>> name = "PrescriptionWithinDrugLibraryLimits";
1289
1381
  attribute :>> statement = "When a prescription parameter is entered, the system shall reject values outside drug-library hard limits and shall require explicit confirmation for values outside soft limits.";
1290
1382
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1302,7 +1394,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1302
1394
  attribute :>> conditionClause = "When a prescription parameter is entered";
1303
1395
  attribute :>> systemResponse = "reject hard-limit violations and require confirmation of soft-limit violations";
1304
1396
  }
1305
- requirement reqPost : SystemRequirement {
1397
+ requirement reqPost : Requirement {
1398
+ attribute :>> requirementKind = RequirementKind::system;
1306
1399
  attribute :>> id = "REQ-X-02"; attribute :>> name = "PowerOnSelfTest";
1307
1400
  attribute :>> statement = "On power-up, the system shall complete a self test of CPU, memory, watchdog, and safety sensors before permitting therapy, and shall remain locked out of therapy if any check fails.";
1308
1401
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1320,7 +1413,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1320
1413
  attribute :>> conditionClause = "On power-up";
1321
1414
  attribute :>> systemResponse = "complete POST before permitting therapy";
1322
1415
  }
1323
- requirement reqPowerLossRetention : SystemRequirement {
1416
+ requirement reqPowerLossRetention : Requirement {
1417
+ attribute :>> requirementKind = RequirementKind::system;
1324
1418
  attribute :>> id = "REQ-X-03"; attribute :>> name = "PrescriptionRetainedAcrossPowerLoss";
1325
1419
  attribute :>> statement = "If all power is lost, the system shall retain the confirmed prescription and event log, and on power restoration shall resume therapy only after clinician confirmation.";
1326
1420
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1338,7 +1432,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1338
1432
  attribute :>> conditionClause = "If all power is lost";
1339
1433
  attribute :>> systemResponse = "retain prescription and log; resume only after confirmation";
1340
1434
  }
1341
- requirement reqOcclusion : SoftwareRequirement {
1435
+ requirement reqOcclusion : Requirement {
1436
+ attribute :>> requirementKind = RequirementKind::software;
1342
1437
  attribute :>> id = "REQ-X-04"; attribute :>> name = "OcclusionDetectionAndAlarm";
1343
1438
  attribute :>> statement = "When downstream line pressure exceeds the occlusion threshold, the system shall pause infusion and raise a High-priority notification.";
1344
1439
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1352,7 +1447,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1352
1447
  attribute :>> guaranteeSummary = "no sustained pumping against a blocked line";
1353
1448
  attribute :>> sourceReference = "MEMO extension — occlusion sensing is not specified by the CriSys source (under-infusion flow rate, REQ-CS-17, is the source-level effect)";
1354
1449
  }
1355
- requirement reqDoorOpen : SoftwareRequirement {
1450
+ requirement reqDoorOpen : Requirement {
1451
+ attribute :>> requirementKind = RequirementKind::software;
1356
1452
  attribute :>> id = "REQ-X-05"; attribute :>> name = "DoorOpenPreventsDelivery";
1357
1453
  attribute :>> statement = "While the reservoir door is open or unlatched, the system shall not deliver drug and shall raise a Medium-priority notification if therapy was active.";
1358
1454
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1371,7 +1467,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1371
1467
  attribute :>> conditionClause = "While the reservoir door is open";
1372
1468
  attribute :>> systemResponse = "inhibit delivery and notify if therapy was active";
1373
1469
  }
1374
- requirement reqMaxHourlyDose : SoftwareRequirement {
1470
+ requirement reqMaxHourlyDose : Requirement {
1471
+ attribute :>> requirementKind = RequirementKind::software;
1375
1472
  attribute :>> id = "REQ-X-06"; attribute :>> name = "MaximumHourlyDoseEnforcement";
1376
1473
  attribute :>> statement = "The system shall not deliver more than the prescribed maximum drug volume in any sliding one-hour window, counting basal, patient bolus, and square bolus contributions.";
1377
1474
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1385,7 +1482,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1385
1482
  attribute :>> guaranteeSummary = "hourly dose ceiling never exceeded";
1386
1483
  attribute :>> sourceReference = "MEMO extension — sliding-window hourly limit is not specified by the CriSys source";
1387
1484
  }
1388
- requirement reqEventLogging : SoftwareRequirement {
1485
+ requirement reqEventLogging : Requirement {
1486
+ attribute :>> requirementKind = RequirementKind::software;
1389
1487
  attribute :>> id = "REQ-X-07"; attribute :>> name = "TamperEvidentTherapyLog";
1390
1488
  attribute :>> statement = "The system shall record therapy events in a timestamped, tamper-evident event log such that any modification of recorded entries is detectable.";
1391
1489
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1399,7 +1497,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1399
1497
  attribute :>> guaranteeSummary = "log tampering cannot go unnoticed";
1400
1498
  attribute :>> sourceReference = "MEMO extension — tamper evidence is not specified by the CriSys source (log content: REQ-CS-77..81)";
1401
1499
  }
1402
- requirement reqWatchdogSafeState : SoftwareRequirement {
1500
+ requirement reqWatchdogSafeState : Requirement {
1501
+ attribute :>> requirementKind = RequirementKind::software;
1403
1502
  attribute :>> id = "REQ-X-08"; attribute :>> name = "WatchdogForcesSafeState";
1404
1503
  attribute :>> statement = "If the software fails to service the hardware watchdog within its timeout, the system shall force pump output to zero flow and raise a continuous audible alarm.";
1405
1504
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1418,7 +1517,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1418
1517
  attribute :>> conditionClause = "If the watchdog is not serviced within its timeout";
1419
1518
  attribute :>> systemResponse = "force zero flow and continuous alarm";
1420
1519
  }
1421
- requirement reqStuckButton : SoftwareRequirement {
1520
+ requirement reqStuckButton : Requirement {
1521
+ attribute :>> requirementKind = RequirementKind::software;
1422
1522
  attribute :>> id = "REQ-X-09"; attribute :>> name = "StuckBolusButtonDetection";
1423
1523
  attribute :>> statement = "If the patient bolus button remains asserted for more than 60 seconds, the system shall treat the input as failed, ignore it, and raise a Medium-priority notification.";
1424
1524
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1432,7 +1532,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1432
1532
  attribute :>> guaranteeSummary = "a shorted pendant cannot request repeated boluses";
1433
1533
  attribute :>> sourceReference = "MEMO extension — stuck-input detection is not specified by the CriSys source";
1434
1534
  }
1435
- requirement reqFlowCrossCheck : SoftwareRequirement {
1535
+ requirement reqFlowCrossCheck : Requirement {
1536
+ attribute :>> requirementKind = RequirementKind::software;
1436
1537
  attribute :>> id = "REQ-X-10"; attribute :>> name = "CommandedVsMeasuredFlowCrossCheck";
1437
1538
  attribute :>> statement = "The system shall compare measured delivered flow against commanded flow using an independent flow sensor, and shall raise a High-priority notification and pause infusion when the deviation exceeds Tolerance_Min_const for more than Max_Duration_OverInfusion_const.";
1438
1539
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1446,7 +1547,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1446
1547
  attribute :>> guaranteeSummary = "over- and under-infusion detected independently of motor control";
1447
1548
  attribute :>> sourceReference = "MEMO extension — independent cross-check channel beyond CriSys REQ-CS-17/19 tolerance monitoring; thresholds reuse App. A.4 constants";
1448
1549
  }
1449
- requirement reqPumpAccuracy : HardwareRequirement {
1550
+ requirement reqPumpAccuracy : Requirement {
1551
+ attribute :>> requirementKind = RequirementKind::hardware;
1450
1552
  attribute :>> id = "REQ-X-11"; attribute :>> name = "DeliveryAccuracy";
1451
1553
  attribute :>> statement = "The pump mechanism shall deliver programmed volumes with an accuracy of plus or minus Tolerance_Min_const (5 percent) over the full rate range, so that the system-level flow tolerances of REQ-CS-16 are achievable.";
1452
1554
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1460,7 +1562,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1460
1562
  attribute :>> sourceReference = "MEMO extension — mechanism-level accuracy budget derived from App. A.4 Tolerance_Min_const";
1461
1563
  attribute :>> electricalSafetyRelevant = false;
1462
1564
  }
1463
- requirement reqAlarmLoudness : HardwareRequirement {
1565
+ requirement reqAlarmLoudness : Requirement {
1566
+ attribute :>> requirementKind = RequirementKind::hardware;
1464
1567
  attribute :>> id = "REQ-X-12"; attribute :>> name = "AlarmSoundPressureLevel";
1465
1568
  attribute :>> statement = "The audible annunciator shall produce notification tones at the sound level defined by Audio_level_const (50 db for 2 seconds per interface spec I 8), distinguishable by priority.";
1466
1569
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1474,7 +1577,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1474
1577
  attribute :>> sourceReference = "MEMO extension — hardware annunciator budget realizing CriSys I 8 / Audio_level_const";
1475
1578
  attribute :>> electricalSafetyRelevant = false;
1476
1579
  }
1477
- requirement reqBatteryBackup : HardwareRequirement {
1580
+ requirement reqBatteryBackup : Requirement {
1581
+ attribute :>> requirementKind = RequirementKind::hardware;
1478
1582
  attribute :>> id = "REQ-X-13"; attribute :>> name = "BatteryBackupDuration";
1479
1583
  attribute :>> statement = "The battery shall sustain nominal therapy and alarm annunciation for at least 4 hours after loss of mains power.";
1480
1584
  attribute :>> sourceKind = RequirementSourceKind::extension;
@@ -1488,7 +1592,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1488
1592
  attribute :>> sourceReference = "MEMO extension — power backup is not specified by the CriSys source";
1489
1593
  attribute :>> electricalSafetyRelevant = true;
1490
1594
  }
1491
- requirement reqFreeFlowPrevention : HardwareRequirement {
1595
+ requirement reqFreeFlowPrevention : Requirement {
1596
+ attribute :>> requirementKind = RequirementKind::hardware;
1492
1597
  attribute :>> id = "REQ-X-14"; attribute :>> name = "MechanicalFreeFlowPrevention";
1493
1598
  attribute :>> statement = "The fluid path shall include a mechanical anti-free-flow valve that blocks gravity flow whenever the administration set is disengaged from the pumping mechanism.";
1494
1599
  attribute :>> sourceKind = RequirementSourceKind::extension;