@memoarchitect/ontology 0.12.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/README.md +5 -3
  2. package/examples/connected-patient-monitor/memo.identity.yaml +34 -0
  3. package/examples/connected-patient-monitor/memo.package.yaml +3 -1
  4. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +17 -12
  5. package/examples/connected-patient-monitor/model/{catalog → methodology}/project.sysml +4 -5
  6. package/examples/embedded-infusion-pump/memo.package.yaml +3 -1
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +6 -6
  8. package/examples/embedded-infusion-pump/model/{catalog → methodology}/project.sysml +4 -5
  9. package/examples/functional-logical-physical/memo.identity.yaml +28 -0
  10. package/examples/functional-logical-physical/memo.package.yaml +3 -1
  11. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  12. package/examples/functional-logical-physical/model/{catalog → methodology}/project.sysml +4 -5
  13. package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +40 -139
  14. package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +38 -290
  15. package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +47 -217
  16. package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +50 -191
  17. package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +42 -181
  18. package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +40 -164
  19. package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +51 -172
  20. package/examples/gpca-pump/analysis/Samples/README.md +15 -9
  21. package/examples/gpca-pump/analysis/memo_model.py +243 -0
  22. package/examples/gpca-pump/memo.identity.yaml +521 -26
  23. package/examples/gpca-pump/memo.package.yaml +3 -1
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +56 -47
  25. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +51 -78
  26. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +359 -358
  27. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +9 -9
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +56 -69
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +44 -59
  30. package/examples/gpca-pump/model/catalog/gpca_context.sysml +23 -35
  31. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +33 -40
  32. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +62 -63
  33. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +362 -483
  34. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +45 -70
  35. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -12
  36. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +173 -169
  37. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +139 -225
  38. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +43 -47
  39. package/examples/gpca-pump/model/catalog/gpca_system.sysml +68 -65
  40. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +147 -116
  41. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +65 -91
  42. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +4 -6
  43. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +4 -6
  44. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +4 -6
  45. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +4 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +2 -4
  47. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +7 -6
  48. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +4 -6
  49. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -6
  50. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
  51. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +4 -6
  52. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +4 -6
  53. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +3 -5
  54. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +3 -5
  55. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +4 -6
  56. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +2 -4
  57. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -5
  58. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +2 -4
  59. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +4 -6
  60. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -6
  61. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
  62. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +4 -6
  63. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +4 -6
  64. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
  65. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -6
  66. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +3 -5
  67. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
  68. package/examples/gpca-pump/model/{catalog → methodology}/project.sysml +8 -6
  69. package/examples/ivd-laboratory-system/memo.package.yaml +3 -1
  70. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +12 -9
  71. package/examples/ivd-laboratory-system/model/{catalog → methodology}/project.sysml +4 -5
  72. package/examples/manual-surgical-instrument/memo.package.yaml +3 -1
  73. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +2 -6
  74. package/examples/manual-surgical-instrument/model/{catalog → methodology}/project.sysml +4 -5
  75. package/examples/multidimensional-layers/memo.package.yaml +3 -1
  76. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +2 -4
  77. package/examples/multidimensional-layers/model/{catalog → methodology}/project.sysml +4 -5
  78. package/examples/nested-architecture-dsm/memo.identity.yaml +93 -0
  79. package/examples/nested-architecture-dsm/memo.package.yaml +3 -1
  80. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +30 -30
  81. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +28 -28
  82. package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +2 -4
  83. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +4 -4
  84. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +7 -7
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +8 -8
  86. package/examples/nested-architecture-dsm/model/{catalog → methodology}/project.sysml +4 -5
  87. package/examples/reusable-instrument/memo.package.yaml +3 -1
  88. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -7
  89. package/examples/reusable-instrument/model/{catalog → methodology}/project.sysml +4 -5
  90. package/examples/robot-cell-family/README.md +34 -0
  91. package/examples/robot-cell-family/memo.identity.yaml +142 -0
  92. package/examples/robot-cell-family/memo.package.yaml +7 -0
  93. package/examples/robot-cell-family/model/methodology/project.sysml +30 -0
  94. package/examples/robot-cell-family/model/shared/shared.sysml +53 -0
  95. package/examples/robot-cell-family/model/sos/chains.sysml +36 -0
  96. package/examples/robot-cell-family/model/sos/icds.sysml +29 -0
  97. package/examples/robot-cell-family/model/sos/sos.sysml +31 -0
  98. package/examples/robot-cell-family/model/sos/use_cases.sysml +25 -0
  99. package/examples/robot-cell-family/model/systems/manipulation/manipulation_system.sysml +35 -0
  100. package/examples/robot-cell-family/model/systems/navigation/navigation_system.sysml +46 -0
  101. package/examples/robot-cell-family/model/systems/perception/perception_system.sysml +37 -0
  102. package/examples/robot-platform/memo.package.yaml +3 -0
  103. package/examples/robot-platform/model/platform.sysml +15 -0
  104. package/examples/ros-mobile-robot/README.md +5 -4
  105. package/examples/ros-mobile-robot/memo.identity.yaml +94 -0
  106. package/examples/ros-mobile-robot/memo.package.yaml +3 -1
  107. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +26 -29
  108. package/examples/ros-mobile-robot/model/{catalog → methodology}/project.sysml +8 -14
  109. package/examples/software-only-medical-device/memo.package.yaml +3 -1
  110. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +9 -10
  111. package/examples/software-only-medical-device/model/{catalog → methodology}/project.sysml +8 -9
  112. package/examples/surgical-closure-workflow/memo.package.yaml +3 -1
  113. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -26
  114. package/examples/surgical-closure-workflow/model/{catalog → methodology}/project.sysml +7 -5
  115. package/examples/surgical-robot/memo.package.yaml +3 -1
  116. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +14 -12
  117. package/examples/surgical-robot/model/{catalog → methodology}/project.sysml +4 -5
  118. package/examples/sysml-diagram-samples/README.md +1 -0
  119. package/examples/sysml-diagram-samples/memo.identity.yaml +675 -0
  120. package/examples/sysml-diagram-samples/memo.package.yaml +3 -1
  121. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +10 -20
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +7 -29
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +12 -36
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +13 -25
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +388 -0
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/drill_down_view.sysml +88 -0
  127. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +27 -36
  128. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +8 -21
  129. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +17 -65
  130. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +23 -32
  131. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +9 -22
  132. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +7 -22
  133. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +18 -34
  134. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +2 -9
  135. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -42
  136. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +11 -24
  137. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +9 -36
  138. package/examples/sysml-diagram-samples/model/methodology/project.sysml +40 -0
  139. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
  140. package/examples/temperature-alarm/memo.identity.yaml +6 -0
  141. package/examples/temperature-alarm/memo.package.yaml +3 -1
  142. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
  143. package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
  144. package/examples/ui-screen-regions/memo.identity.yaml +33 -0
  145. package/examples/ui-screen-regions/memo.package.yaml +3 -1
  146. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
  147. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
  148. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
  149. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
  150. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
  151. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
  152. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
  153. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
  154. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
  155. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
  156. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  160. package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
  161. package/extensions/README.md +65 -16
  162. package/extensions/aadl/memo.package.yaml +1 -1
  163. package/extensions/aadl/src/aadl_extension.sysml +5 -2
  164. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
  165. package/extensions/clinical/memo.package.yaml +1 -1
  166. package/extensions/clinical/src/clinical_extension.sysml +2 -0
  167. package/extensions/cloud/memo.package.yaml +1 -1
  168. package/extensions/container/memo.package.yaml +1 -1
  169. package/extensions/messaging/memo.package.yaml +1 -1
  170. package/extensions/messaging/src/messaging_extension.sysml +2 -2
  171. package/extensions/ros/memo.package.yaml +1 -1
  172. package/extensions/ros/src/ros_extension.sysml +25 -24
  173. package/extensions/template/memo.package.yaml +1 -1
  174. package/extensions/template/model/extension.sysml +25 -0
  175. package/memo.manifest.yaml +1 -7
  176. package/methodologies/default/memo.package.yaml +1 -1
  177. package/methodologies/gpca/memo.package.yaml +1 -1
  178. package/ontology/memo.package.yaml +1 -1
  179. package/package.json +6 -4
  180. package/profile/memo.package.yaml +1 -1
  181. package/src/architecture/decisions/memo_decisions.sysml +9 -2
  182. package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
  183. package/src/architecture/functional/functions/memo_functions.sysml +45 -31
  184. package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
  185. package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
  186. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
  187. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
  188. package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
  189. package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
  190. package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
  191. package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
  192. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
  193. package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
  194. package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
  195. package/src/architecture/operational/structure/memo_operational.sysml +5 -2
  196. package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
  197. package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
  198. package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
  199. package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
  200. package/src/architecture/variability/memo_variability.sysml +87 -0
  201. package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
  202. package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
  203. package/src/artifacts/standards/cfr_21_820.sysml +12 -24
  204. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
  205. package/src/artifacts/standards/iec_60601_1.sysml +16 -32
  206. package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
  207. package/src/artifacts/standards/iec_60812.sysml +4 -8
  208. package/src/artifacts/standards/iec_62304.sysml +607 -47
  209. package/src/artifacts/standards/iec_62366_1.sysml +12 -24
  210. package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
  211. package/src/artifacts/standards/iso_13485.sysml +12 -24
  212. package/src/artifacts/standards/iso_14971.sysml +118 -20
  213. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
  214. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
  215. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
  216. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
  217. package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
  218. package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
  219. package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
  220. package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
  221. package/src/artifacts/templates/dhf/system/sad.md +1 -1
  222. package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
  223. package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
  224. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
  225. package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
  226. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
  227. package/src/assurance/safety_risk/memo_risk.sysml +39 -1
  228. package/src/core/common/memo_common.sysml +51 -68
  229. package/src/core/enumerations/memo_enumerations.sysml +93 -9
  230. package/src/core/relationships/memo_relationships.sysml +17 -11
  231. package/src/core/relationships/memo_workspace_membership.sysml +284 -0
  232. package/src/core/semantics/semantics.sysml +58 -0
  233. package/src/core/terminology/terminology.sysml +7 -0
  234. package/src/memo_namespaces.sysml +6 -0
  235. package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
  236. package/src/methodology/core/memo_core.sysml +85 -29
  237. package/src/methodology/profiles/memo_profiles.sysml +217 -61
  238. package/src/methodology/workflow/memo_workflow.sysml +28 -0
  239. package/src/rules/closure/closure_rules.sysml +250 -4
  240. package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
  241. package/src/rules/ontology/ontology_invariants.sysml +288 -48
  242. package/src/rules/quantitative/quantitative_rules.sysml +4 -0
  243. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
  244. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -5
  245. package/src/viewpoints/context/context_viewpoint.sysml +4 -5
  246. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
  247. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -5
  248. package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
  249. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -5
  250. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -5
  251. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
  252. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
  253. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -5
  254. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
  255. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -5
  256. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
  257. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -5
  258. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
  259. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
  260. package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
  261. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -5
  262. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
  263. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -5
  264. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
  265. package/src/viewpoints/software/software_viewpoint.sysml +4 -5
  266. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
  267. package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +45 -36
  268. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -5
  269. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
  270. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -5
  271. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -5
  272. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
  273. package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
  274. package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
  275. package/templates/default/memo.package.yaml +6 -1
  276. package/templates/default/model/catalog/architecture/system.sysml +7 -3
  277. package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
  278. package/examples/sysml-diagram-samples/model/catalog/project.sysml +0 -26
  279. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
  280. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
  281. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
  282. package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
  283. package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
  284. package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
  285. package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
  286. package/extensions/container/src/methodology/container_methodology.sysml +0 -19
  287. package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
  288. package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
  289. package/extensions/template/src/extension.sysml +0 -39
  290. package/templates/connected-device/memo.package.yaml +0 -13
  291. package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
  292. package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
  293. package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
  294. package/templates/connected-device/model/catalog/project.sysml +0 -30
  295. package/templates/connected-device/package.json +0 -8
  296. package/templates/connected-device/syside.toml +0 -13
  297. package/templates/infusion-pump/memo.package.yaml +0 -13
  298. package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
  299. package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
  300. package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
  301. package/templates/infusion-pump/model/catalog/project.sysml +0 -30
  302. package/templates/infusion-pump/package.json +0 -8
  303. package/templates/infusion-pump/syside.toml +0 -13
  304. package/templates/monitoring-device/memo.package.yaml +0 -13
  305. package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
  306. package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
  307. package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
  308. package/templates/monitoring-device/model/catalog/project.sysml +0 -30
  309. package/templates/monitoring-device/package.json +0 -8
  310. package/templates/monitoring-device/syside.toml +0 -13
  311. package/templates/samd/memo.package.yaml +0 -13
  312. package/templates/samd/model/catalog/architecture/system.sysml +0 -5
  313. package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
  314. package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
  315. package/templates/samd/model/catalog/project.sysml +0 -30
  316. package/templates/samd/package.json +0 -8
  317. package/templates/samd/syside.toml +0 -13
@@ -8,64 +8,56 @@ package memo_examples_gpca_pump_gpca_risk {
8
8
  private import memo_core_common::MemoIdentity;
9
9
  // ── Source corpus citations (verified 2026-07-05, extended 2026-07-08) ──
10
10
  part citeCriSysSysReq : Citation {
11
- @MemoIdentity { :>> providedId = "CITE-001"; }
12
- attribute :>> name = "CriSysGpcaSystemRequirements";
11
+ @MemoIdentity { :>> providedId = "CITE-001"; :>> label = "CriSysGpcaSystemRequirements"; }
13
12
  attribute :>> source = "System Requirements: Generic Patient Controlled Analgesic Infusion (GPCA) System, draft — Murugesan, Rayadurgam, Heimdahl, University of Minnesota";
14
13
  attribute :>> section = "Ch.2 system description; Ch.3 interfaces (I 1-I 11, data dictionary); Ch.4 behavioral requirements (mode tree, REQ 1-86, REQ 59 notification table); Ch.5 non-behavioral; App. A.4 constants";
15
14
  attribute :>> uri = "https://crisys.cs.umn.edu/downloads/gpca/SystemRequirements.pdf";
16
15
  attribute :>> year = "2013";
17
16
  }
18
17
  part citeCriSysAadl : Citation {
19
- @MemoIdentity { :>> providedId = "CITE-002"; }
20
- attribute :>> name = "CriSysGpcaAadlModel";
18
+ @MemoIdentity { :>> providedId = "CITE-002"; :>> label = "CriSysGpcaAadlModel"; }
21
19
  attribute :>> source = "GPCA System Architectural Model v2.0 (AADL packages, AGREE contracts, ModelDocumentation.pdf) — University of Minnesota CriSys";
22
20
  attribute :>> section = "8 software subcomponents + port topology + AGREE contracts";
23
21
  attribute :>> uri = "https://crisys.cs.umn.edu/downloads/gpca/AADL.zip";
24
22
  attribute :>> year = "undated";
25
23
  }
26
24
  part citeCriSysVerification : Citation {
27
- @MemoIdentity { :>> providedId = "CITE-003"; }
28
- attribute :>> name = "CriSysGpcaVerification";
25
+ @MemoIdentity { :>> providedId = "CITE-003"; :>> label = "CriSysGpcaVerification"; }
29
26
  attribute :>> source = "GPCA compositional verification package (AGREE properties, Simulink/Stateflow models) — University of Minnesota CriSys";
30
27
  attribute :>> section = "Full package";
31
28
  attribute :>> uri = "https://crisys.cs.umn.edu/downloads/gpca/Verification.zip";
32
29
  attribute :>> year = "undated";
33
30
  }
34
31
  part citeGipHazardAnalysis : Citation {
35
- @MemoIdentity { :>> providedId = "CITE-004"; }
36
- attribute :>> name = "GipHazardAnalysis";
32
+ @MemoIdentity { :>> providedId = "CITE-004"; :>> label = "GipHazardAnalysis"; }
37
33
  attribute :>> source = "Generic Infusion Pump Hazard Analysis and Safety Requirements Version 1.0 — Arney, Jetley, Jones, Lee, Ray, Sokolsky, Zhang; University of Pennsylvania / FDA OSEL (Tech Report MS-CIS-08-31)";
38
34
  attribute :>> section = "§2.1 hazard categories; §2.2 alarms and alerts; §2.3 pump checks; §2.4.1-2.4.8 hazard tables (HID rows: cause, action, mitigated-by, safety requirement); §3 safety requirements";
39
35
  attribute :>> uri = "https://repository.upenn.edu/cis_reports/893/";
40
36
  attribute :>> year = "2009";
41
37
  }
42
38
  part citeOpenPcaPump : Citation {
43
- @MemoIdentity { :>> providedId = "CITE-005"; }
44
- attribute :>> name = "OpenPcaPumpArtifacts";
39
+ @MemoIdentity { :>> providedId = "CITE-005"; :>> label = "OpenPcaPumpArtifacts"; }
45
40
  attribute :>> source = "Model-based Risk Analysis for an Open-Source PCA Pump using the AADL Error Modeling Annex — Thiagarajan, Larson, Hatcliff, Zhang; Kansas State University SAnToS Lab (Open PCA Pump project ISO 14971 risk analysis)";
46
41
  attribute :>> section = "§4 Table 1 (harm / hazardous situation / hazard / initiating cause for the two primary hazards: opioid over-infusion, air embolism); Fig. 3 ISO 14971 causality chain; §5 harm and cause instances";
47
42
  attribute :>> uri = "https://awas.sireum.org/_static/awas-ISO14971-risk-analysis.pdf";
48
43
  attribute :>> year = "undated";
49
44
  }
50
45
  part citeGiipTaxonomy : Citation {
51
- @MemoIdentity { :>> providedId = "CITE-006"; }
52
- attribute :>> name = "FdaGiipHazardTaxonomy";
46
+ @MemoIdentity { :>> providedId = "CITE-006"; :>> label = "FdaGiipHazardTaxonomy"; }
53
47
  attribute :>> source = "A Hazard Analysis for a Generic Insulin Infusion Pump — Zhang, Jones et al., Journal of Diabetes Science and Technology (structure template only; insulin-pump content, not GPCA)";
54
48
  attribute :>> section = "Table 1 hazardous-situation taxonomy; Tables 2-9 cause-source tables (operational, software, hardware, physical, electrical, biological/chemical, use, environmental) forming cause -> hazardous situation -> harm causal trees";
55
49
  attribute :>> uri = "https://pmc.ncbi.nlm.nih.gov/articles/PMC2864162/";
56
50
  attribute :>> year = "2010";
57
51
  }
58
52
  part citeGpcaHazardDoc : Citation {
59
- @MemoIdentity { :>> providedId = "CITE-007"; }
60
- attribute :>> name = "FdaGpcaHazardAnalysisDoc";
53
+ @MemoIdentity { :>> providedId = "CITE-007"; :>> label = "FdaGpcaHazardAnalysisDoc"; }
61
54
  attribute :>> source = "The Generic Patient Controlled Analgesia Pump Hazard Analysis (GPCA Model ver. 0.9) — FDA OSEL GIP project working document (Jetley); GPCA specialization of the GIP v1.0 hazard tables, retrieved from the archived GIP project site";
62
55
  attribute :>> section = "System domain; pump components; hazard tables: Operational HID 1.1-1.27, Environmental 2.1-2.13, Electrical 3.1-3.11, Hardware 4.1-4.13, Software 5.1-5.12, Mechanical 6.1-6.6, Biological/Chemical 7.1-7.2, Use 8.1-8.14";
63
56
  attribute :>> uri = "https://web.archive.org/web/20111121142920/http://rtg.cis.upenn.edu/gip-docs/Hazard_Analysis_GPCA.doc";
64
57
  attribute :>> year = "2009";
65
58
  }
66
59
  part citeGpcaSafetyReqDoc : Citation {
67
- @MemoIdentity { :>> providedId = "CITE-008"; }
68
- attribute :>> name = "FdaGpcaSafetyRequirementsDoc";
60
+ @MemoIdentity { :>> providedId = "CITE-008"; :>> label = "FdaGpcaSafetyRequirementsDoc"; }
69
61
  attribute :>> source = "Safety Requirements for the Generic Patient Controlled Analgesia Pump (GPCA Model ver. 0.9) — FDA OSEL GIP project working document (Jetley), retrieved from the archived GIP project site";
70
62
  attribute :>> section = "Infusion Control (flow rate + KVO, flow rate accuracy, VTBI, bolus dose, drug reservoir, pump suspend, reverse delivery, air-in-line alarm, occlusion alarm); User Interface (tamper resistance, confirmation); Error Handling; POST; Power; Dose Error Reduction (drug library hard/soft limits); System Environment";
71
63
  attribute :>> uri = "https://web.archive.org/web/20120124081510/http://rtg.cis.upenn.edu/gip-docs/Safety_Requirements_GPCA.doc";
@@ -73,8 +65,7 @@ package memo_examples_gpca_pump_gpca_risk {
73
65
  }
74
66
 
75
67
  part citeCriSysSoftwareBehavior : Citation {
76
- @MemoIdentity { :>> providedId = "CITE-009"; }
77
- attribute :>> name = "CriSysGpcaSoftwareBehaviorModel";
68
+ @MemoIdentity { :>> providedId = "CITE-009"; :>> label = "CriSysGpcaSoftwareBehaviorModel"; }
78
69
  attribute :>> source = "PCA Pump Software Model (Simulink/Stateflow) — University of Minnesota CriSys";
79
70
  attribute :>> section = "Infusion Pump Software Model Stateflow chart";
80
71
  attribute :>> uri = "https://crisys.cs.umn.edu/downloads/gpca/PCA_Pump_SoftwareModel.mdl";
@@ -83,8 +74,7 @@ package memo_examples_gpca_pump_gpca_risk {
83
74
 
84
75
  // ── Shared risk matrix ───────────────────────────────────────────
85
76
  part riskMatrix : RiskMatrix {
86
- @MemoIdentity { :>> providedId = "RMX-001"; }
87
- attribute :>> name = "StandardRiskMatrix";
77
+ @MemoIdentity { :>> providedId = "RMX-001"; :>> label = "StandardRiskMatrix"; }
88
78
  attribute :>> probabilityScaleDefinition = "Remote, Occasional, Probable";
89
79
  attribute :>> severityScaleDefinition = "Minor, Serious, Catastrophic";
90
80
  attribute :>> riskLevelMapping = "matrix based";
@@ -92,8 +82,7 @@ package memo_examples_gpca_pump_gpca_risk {
92
82
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
93
83
  }
94
84
  part programmedDoseCharacteristic : SafetyRelatedCharacteristic {
95
- @MemoIdentity { :>> providedId = "SRC-001"; }
96
- attribute :>> name = "ProgrammedDoseAndFlowLimits";
85
+ @MemoIdentity { :>> providedId = "SRC-001"; :>> label = "ProgrammedDoseAndFlowLimits"; }
97
86
  attribute :>> characteristic = "Programmable basal rate, bolus volume, lockout interval, and maximum dose";
98
87
  attribute :>> safetyImpact = "Incorrect values or failed enforcement can expose the patient to over-infusion or under-infusion.";
99
88
  attribute :>> normalUseRelevant = true;
@@ -101,8 +90,7 @@ package memo_examples_gpca_pump_gpca_risk {
101
90
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), prescription and bolus parameters; CITE-004: GIP Hazard Analysis v1.0"; }
102
91
  }
103
92
  part analgesiaBenefit : Benefit {
104
- @MemoIdentity { :>> providedId = "BEN-001"; }
105
- attribute :>> name = "PatientTitratedAnalgesiaBenefit";
93
+ @MemoIdentity { :>> providedId = "BEN-001"; :>> label = "PatientTitratedAnalgesiaBenefit"; }
106
94
  attribute :>> beneficialOutcome = "Timely pain relief using patient-titrated opioid delivery within prescribed limits.";
107
95
  attribute :>> beneficiary = "patient";
108
96
  attribute :>> clinicalSignificance = "Improved pain management with lower total opioid consumption than fixed-schedule dosing.";
@@ -114,68 +102,59 @@ package memo_examples_gpca_pump_gpca_risk {
114
102
  // Primary hazard 1 of the Open PCA ISO 14971 analysis; GIP
115
103
  // operational-hazard rows HID 1.1-1.3. Causal tree per GIIP
116
104
  // pattern: categorized causes converge on the hazard.
117
- part overdoseHazard : Hazard {
118
- @MemoIdentity { :>> providedId = "HZ-001"; }
119
- attribute :>> name = "OpioidOverInfusion";
105
+ item overdoseHazard : Hazard {
106
+ @MemoIdentity { :>> providedId = "HZ-001"; :>> label = "OpioidOverInfusion"; }
120
107
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
121
108
  attribute :>> severity = SeverityKind::catastrophic;
122
109
  attribute :>> foreseeable = true;
123
- attribute :>> description = "Drug delivered at a rate above the prescription (overinfusion).";
110
+ doc /* Drug delivered at a rate above the prescription (overinfusion). */
124
111
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 Operational Hazards HID 1.1-1.3 (overinfusion); CITE-005: Open PCA ISO 14971 risk analysis, §4 (primary hazard: opioid over-infusion)"; }
125
112
  }
126
- part causeFlowRateTooHigh : HazardCause {
127
- @MemoIdentity { :>> providedId = "CAUSE-001"; }
128
- attribute :>> name = "ProgrammedFlowRateTooHigh";
113
+ item causeFlowRateTooHigh : HazardCause {
114
+ @MemoIdentity { :>> providedId = "CAUSE-001"; :>> label = "ProgrammedFlowRateTooHigh"; }
129
115
  attribute :>> causeSource = CauseSourceKind::operational;
130
116
  attribute :>> contributingFactors = "Programmed value not checked against drug-database hard limits";
131
117
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.1 (programmed flow rate too high; mitigated by drug library)"; }
132
118
  }
133
- part causeFrequentBolus : HazardCause {
134
- @MemoIdentity { :>> providedId = "CAUSE-002"; }
135
- attribute :>> name = "BolusRequestsTooFrequent";
119
+ item causeFrequentBolus : HazardCause {
120
+ @MemoIdentity { :>> providedId = "CAUSE-002"; :>> label = "BolusRequestsTooFrequent"; }
136
121
  attribute :>> causeSource = CauseSourceKind::usageCause;
137
122
  attribute :>> contributingFactors = "Patient bolus button pressed too often, or pressed by someone other than the patient (bolus by proxy)";
138
123
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.2 (dose limit exceeded due to too many bolus requests); CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (bolus button pressed too frequent) and §5 (TooSoonPress, ThirdPartyPress error types)"; }
139
124
  }
140
- part causeBolusVolumeTooHigh : HazardCause {
141
- @MemoIdentity { :>> providedId = "CAUSE-003"; }
142
- attribute :>> name = "ProgrammedBolusVolumeTooHigh";
125
+ item causeBolusVolumeTooHigh : HazardCause {
126
+ @MemoIdentity { :>> providedId = "CAUSE-003"; :>> label = "ProgrammedBolusVolumeTooHigh"; }
143
127
  attribute :>> causeSource = CauseSourceKind::operational;
144
128
  attribute :>> contributingFactors = "Bolus volume or drug concentration programmed above safe limits";
145
129
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.3 ((programmed) bolus volume/concentration too high; mitigated by drug library)"; }
146
130
  }
147
- part causePumpCalibration : HazardCause {
148
- @MemoIdentity { :>> providedId = "CAUSE-004"; }
149
- attribute :>> name = "IncorrectPumpCalibrationOrMotorRunaway";
131
+ item causePumpCalibration : HazardCause {
132
+ @MemoIdentity { :>> providedId = "CAUSE-004"; :>> label = "IncorrectPumpCalibrationOrMotorRunaway"; }
150
133
  attribute :>> causeSource = CauseSourceKind::hardware;
151
134
  attribute :>> contributingFactors = "Uncalibrated pumping mechanism or motor-driver fault drives flow above the commanded rate";
152
135
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (incorrect pump calibration) and §5 (calibration_over error source on drug_outlet); CITE-004: §2.4.1 HID 1.21 (increased pump speed)"; }
153
136
  }
154
- part seqFrequentBolus : SequenceOfEvents {
155
- @MemoIdentity { :>> providedId = "SEQ-001"; }
156
- attribute :>> name = "RepeatedBolusOverDeliverySequence";
137
+ item seqFrequentBolus : SequenceOfEvents {
138
+ @MemoIdentity { :>> providedId = "SEQ-001"; :>> label = "RepeatedBolusOverDeliverySequence"; }
157
139
  attribute :>> initiatingEvent = "Repeated patient bolus presses over time propagate through button-press detection and control logic to increased motor flow commands";
158
140
  attribute :>> contributingFactors = "Lockout or max-dose filtering fails or is misconfigured";
159
141
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 (bottom-up causality walk of Fig. 3, right side); CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (REQ 25/26 lockout and max-dose filtering)"; }
160
142
  }
161
- part hsExcessInfusion : HazardousSituation {
162
- @MemoIdentity { :>> providedId = "HS-001"; }
163
- attribute :>> name = "PatientExposedToOpioidOverDelivery";
143
+ item hsExcessInfusion : HazardousSituation {
144
+ @MemoIdentity { :>> providedId = "HS-001"; :>> label = "PatientExposedToOpioidOverDelivery"; }
164
145
  attribute :>> exposedPersons = "patient";
165
146
  attribute :>> operatingCondition = "ACTIVE therapy; opioid infused while the patient's respiration is deteriorating";
166
147
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (infusing opioid when patient's respiration is deteriorating) and §6 (OverInfusion hazardous-situation instance)"; }
167
148
  }
168
- part harmRespiratoryDepression : Harm {
169
- @MemoIdentity { :>> providedId = "HM-001"; }
170
- attribute :>> name = "RespiratoryDepression";
149
+ item harmRespiratoryDepression : Harm {
150
+ @MemoIdentity { :>> providedId = "HM-001"; :>> label = "RespiratoryDepression"; }
171
151
  attribute :>> clinicalImpact = "respiratory depression progressing to cardiac arrest";
172
152
  attribute :>> reversibility = "potentially irreversible";
173
153
  attribute :>> severity = SeverityKind::catastrophic;
174
154
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (harm: cardiac arrest) and §5 (H1 respiratory depression, severity catastrophic)"; }
175
155
  }
176
156
  part riskBefore : Risk {
177
- @MemoIdentity { :>> providedId = "RISK-B-001"; }
178
- attribute :>> name = "OverInfusionInitialRisk";
157
+ @MemoIdentity { :>> providedId = "RISK-B-001"; :>> label = "OverInfusionInitialRisk"; }
179
158
  attribute :>> driverKind = "risk";
180
159
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
181
160
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -187,16 +166,14 @@ package memo_examples_gpca_pump_gpca_risk {
187
166
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
188
167
  }
189
168
  part lockoutControl : RiskControlMeasure {
190
- @MemoIdentity { :>> providedId = "RC-001"; }
191
- attribute :>> name = "LockoutAndMaxDoseEnforcement";
169
+ @MemoIdentity { :>> providedId = "RC-001"; :>> label = "LockoutAndMaxDoseEnforcement"; }
192
170
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
193
171
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
194
172
  attribute :>> verificationStatus = "planned";
195
173
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 (REQ 25/26 — model REQ-CS-25/26: ignore bolus requests during lockout or past max doses per hour); CITE-002: CriSys AADL v2.0, GPCA_SW AGREE lockout guarantee (model GP-002)"; }
196
174
  }
197
175
  part riskAfter : ResidualRisk {
198
- @MemoIdentity { :>> providedId = "RISK-A-001"; }
199
- attribute :>> name = "OverInfusionResidualRisk";
176
+ @MemoIdentity { :>> providedId = "RISK-A-001"; :>> label = "OverInfusionResidualRisk"; }
200
177
  attribute :>> driverKind = "risk";
201
178
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
202
179
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -207,75 +184,65 @@ package memo_examples_gpca_pump_gpca_risk {
207
184
  }
208
185
 
209
186
  // ═══ HZ-002: Under-infusion / therapy interruption ══════════════
210
- part underdoseHazard : Hazard {
211
- @MemoIdentity { :>> providedId = "HZ-002"; }
212
- attribute :>> name = "UnderInfusion";
187
+ item underdoseHazard : Hazard {
188
+ @MemoIdentity { :>> providedId = "HZ-002"; :>> label = "UnderInfusion"; }
213
189
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
214
190
  attribute :>> severity = SeverityKind::serious;
215
191
  attribute :>> foreseeable = true;
216
- attribute :>> description = "Delivered dose falls below prescription (underinfusion).";
192
+ doc /* Delivered dose falls below prescription (underinfusion). */
217
193
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 Operational Hazards HID 1.5-1.10 (underinfusion); CITE-005: Open PCA ISO 14971 risk analysis, §5 (under-infusion captured as functional-safety hazard)"; }
218
194
  }
219
- part causeOcclusion : HazardCause {
220
- @MemoIdentity { :>> providedId = "CAUSE-005"; }
221
- attribute :>> name = "LineOcclusion";
195
+ item causeOcclusion : HazardCause {
196
+ @MemoIdentity { :>> providedId = "CAUSE-005"; :>> label = "LineOcclusion"; }
222
197
  attribute :>> causeSource = CauseSourceKind::operational;
223
198
  attribute :>> contributingFactors = "Supply-side or patient-side occlusion; kinked or clamped administration set";
224
199
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.7 (occlusion, supply side and patient side; mitigated by flow sensor)"; }
225
200
  }
226
- part causeReservoirEmpty : HazardCause {
227
- @MemoIdentity { :>> providedId = "CAUSE-006"; }
228
- attribute :>> name = "ReservoirEmptyOrLow";
201
+ item causeReservoirEmpty : HazardCause {
202
+ @MemoIdentity { :>> providedId = "CAUSE-006"; :>> label = "ReservoirEmptyOrLow"; }
229
203
  attribute :>> causeSource = CauseSourceKind::operational;
230
204
  attribute :>> contributingFactors = "Reservoir exhausted during therapy without timely replacement";
231
205
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.8/1.9 (reservoir empty, reservoir low; mitigated by flow sensor and drug library)"; }
232
206
  }
233
- part causeAirInLine : HazardCause {
234
- @MemoIdentity { :>> providedId = "CAUSE-007"; }
235
- attribute :>> name = "AirInLine";
207
+ item causeAirInLine : HazardCause {
208
+ @MemoIdentity { :>> providedId = "CAUSE-007"; :>> label = "AirInLine"; }
236
209
  attribute :>> causeSource = CauseSourceKind::operational;
237
210
  attribute :>> contributingFactors = "Air enters the administration set and displaces drug delivery";
238
211
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.6 (underinfusion: air in line) and HID 1.27 (air bubble introduced in blood stream; mitigated by flow sensor)"; }
239
212
  }
240
- part causePumpMechanismFails : HazardCause {
241
- @MemoIdentity { :>> providedId = "CAUSE-008"; }
242
- attribute :>> name = "PumpMotorFailsToStroke";
213
+ item causePumpMechanismFails : HazardCause {
214
+ @MemoIdentity { :>> providedId = "CAUSE-008"; :>> label = "PumpMotorFailsToStroke"; }
243
215
  attribute :>> causeSource = CauseSourceKind::mechanical;
244
216
  attribute :>> contributingFactors = "Motor failure or mechanism unable to stroke stops infusion";
245
217
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.6 Mechanical Hazards HID 6.6 (pump stops infusion: pump motor fails, pump unable to stroke; mitigated by flow sensor)"; }
246
218
  }
247
- part causeFlowRateTooLow : HazardCause {
248
- @MemoIdentity { :>> providedId = "CAUSE-009"; }
249
- attribute :>> name = "ProgrammedFlowRateTooLow";
219
+ item causeFlowRateTooLow : HazardCause {
220
+ @MemoIdentity { :>> providedId = "CAUSE-009"; :>> label = "ProgrammedFlowRateTooLow"; }
250
221
  attribute :>> causeSource = CauseSourceKind::operational;
251
222
  attribute :>> contributingFactors = "Programmed value below therapeutic range and not caught by drug-database limits";
252
223
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.5 (programmed flow rate too low; mitigated by drug library)"; }
253
224
  }
254
- part seqOcclusion : SequenceOfEvents {
255
- @MemoIdentity { :>> providedId = "SEQ-002"; }
256
- attribute :>> name = "UndetectedOcclusionSequence";
225
+ item seqOcclusion : SequenceOfEvents {
226
+ @MemoIdentity { :>> providedId = "SEQ-002"; :>> label = "UndetectedOcclusionSequence"; }
257
227
  attribute :>> initiatingEvent = "Downstream line kinked or clamped during active therapy";
258
228
  attribute :>> contributingFactors = "Occlusion not detected or alarm not annunciated; post-occlusion bolus released when the occlusion clears";
259
229
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (occlusion); CITE-008: GPCA Safety Requirements (2009), Occlusion alarm (stop and alarm within max delay; bounded post-occlusion bolus volume)"; }
260
230
  }
261
- part hsInterruptedTherapy : HazardousSituation {
262
- @MemoIdentity { :>> providedId = "HS-002"; }
263
- attribute :>> name = "PatientReceivingLessThanPrescribedDose";
231
+ item hsInterruptedTherapy : HazardousSituation {
232
+ @MemoIdentity { :>> providedId = "HS-002"; :>> label = "PatientReceivingLessThanPrescribedDose"; }
264
233
  attribute :>> exposedPersons = "patient";
265
234
  attribute :>> operatingCondition = "ACTIVE therapy with blocked, exhausted, or failed fluid path";
266
235
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.5-1.10 (underinfusion)"; }
267
236
  }
268
- part harmUntreatedPain : Harm {
269
- @MemoIdentity { :>> providedId = "HM-002"; }
270
- attribute :>> name = "UntreatedPainAndClinicalDeterioration";
237
+ item harmUntreatedPain : Harm {
238
+ @MemoIdentity { :>> providedId = "HM-002"; :>> label = "UntreatedPainAndClinicalDeterioration"; }
271
239
  attribute :>> clinicalImpact = "uncontrolled pain, delayed recovery, post-occlusion bolus injury";
272
240
  attribute :>> reversibility = "reversible with intervention";
273
241
  attribute :>> severity = SeverityKind::serious;
274
242
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 (underinfusion rows); CITE-008: GPCA Safety Requirements (2009), Flow rate accuracy (underinfusion alarm)"; }
275
243
  }
276
244
  part riskBeforeUnderdose : Risk {
277
- @MemoIdentity { :>> providedId = "RISK-B-002"; }
278
- attribute :>> name = "UnderInfusionInitialRisk";
245
+ @MemoIdentity { :>> providedId = "RISK-B-002"; :>> label = "UnderInfusionInitialRisk"; }
279
246
  attribute :>> driverKind = "risk";
280
247
  attribute :>> probabilityEstimate = ProbabilityKind::probable;
281
248
  attribute :>> severityEstimate = SeverityKind::serious;
@@ -287,24 +254,21 @@ package memo_examples_gpca_pump_gpca_risk {
287
254
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
288
255
  }
289
256
  part occlusionAlarmControl : RiskControlMeasure {
290
- @MemoIdentity { :>> providedId = "RC-003"; }
291
- attribute :>> name = "OcclusionDetectionAndKvoPause";
257
+ @MemoIdentity { :>> providedId = "RC-003"; :>> label = "OcclusionDetectionAndKvoPause"; }
292
258
  attribute :>> controlKind = RiskControlKind::alarm;
293
259
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
294
260
  attribute :>> verificationStatus = "planned";
295
261
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (occlusion); CITE-008: GPCA Safety Requirements (2009), Occlusion alarm; CITE-002: CriSys AADL v2.0, AGREE occlusion => flow <= KVO (model GP-010; model extension REQ-X-04)"; }
296
262
  }
297
263
  part reservoirMonitorControl : RiskControlMeasure {
298
- @MemoIdentity { :>> providedId = "RC-004"; }
299
- attribute :>> name = "ReservoirEmptyDetectionAndAlarm";
264
+ @MemoIdentity { :>> providedId = "RC-004"; :>> label = "ReservoirEmptyDetectionAndAlarm"; }
300
265
  attribute :>> controlKind = RiskControlKind::monitoring;
301
266
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
302
267
  attribute :>> verificationStatus = "planned";
303
268
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 23 — model REQ-CS-23: empty-reservoir pause) and §4.3 REQ 59 (Empty Reservoir row); CITE-002: CriSys AADL v2.0, AGREE empty reservoir => no flow (model GP-007); CITE-004: §2.2 Alarms (empty reservoir) and Alerts (low reservoir)"; }
304
269
  }
305
270
  part riskAfterUnderdose : ResidualRisk {
306
- @MemoIdentity { :>> providedId = "RISK-A-002"; }
307
- attribute :>> name = "UnderInfusionResidualRisk";
271
+ @MemoIdentity { :>> providedId = "RISK-A-002"; :>> label = "UnderInfusionResidualRisk"; }
308
272
  attribute :>> driverKind = "risk";
309
273
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
310
274
  attribute :>> severityEstimate = SeverityKind::serious;
@@ -316,61 +280,53 @@ package memo_examples_gpca_pump_gpca_risk {
316
280
 
317
281
  // ═══ HZ-003: Air embolism ═══════════════════════════════════════
318
282
  // Primary hazard 2 of the Open PCA ISO 14971 analysis.
319
- part airEmbolismHazard : Hazard {
320
- @MemoIdentity { :>> providedId = "HZ-003"; }
321
- attribute :>> name = "AirEmbolism";
283
+ item airEmbolismHazard : Hazard {
284
+ @MemoIdentity { :>> providedId = "HZ-003"; :>> label = "AirEmbolism"; }
322
285
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
323
286
  attribute :>> severity = SeverityKind::catastrophic;
324
287
  attribute :>> foreseeable = true;
325
- attribute :>> description = "Air infused into the patient line above the clinically tolerable volume.";
288
+ doc /* Air infused into the patient line above the clinically tolerable volume. */
326
289
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (primary hazard: air embolism); CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.27 (air bubble introduced in blood stream); CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21)"; }
327
290
  }
328
- part causeImproperPriming : HazardCause {
329
- @MemoIdentity { :>> providedId = "CAUSE-010"; }
330
- attribute :>> name = "InappropriatePriming";
291
+ item causeImproperPriming : HazardCause {
292
+ @MemoIdentity { :>> providedId = "CAUSE-010"; :>> label = "InappropriatePriming"; }
331
293
  attribute :>> causeSource = CauseSourceKind::usageCause;
332
294
  attribute :>> contributingFactors = "Infusion continued after set primed incompletely";
333
295
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (continue infusion after inappropriate priming); CITE-004: §2.4.1 HID 1.24 (failure to prime: air in line)"; }
334
296
  }
335
- part causeTubingLeak : HazardCause {
336
- @MemoIdentity { :>> providedId = "CAUSE-011"; }
337
- attribute :>> name = "TubingLeakageAdmitsAir";
297
+ item causeTubingLeak : HazardCause {
298
+ @MemoIdentity { :>> providedId = "CAUSE-011"; :>> label = "TubingLeakageAdmitsAir"; }
338
299
  attribute :>> causeSource = CauseSourceKind::mechanical;
339
300
  attribute :>> contributingFactors = "Infusion continued under tubing leakage";
340
301
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (continue infusion under tubing leakage)"; }
341
302
  }
342
- part causeAirSensorSilent : HazardCause {
343
- @MemoIdentity { :>> providedId = "CAUSE-012"; }
344
- attribute :>> name = "AirSensorFailureSuppressesAlarm";
303
+ item causeAirSensorSilent : HazardCause {
304
+ @MemoIdentity { :>> providedId = "CAUSE-012"; :>> label = "AirSensorFailureSuppressesAlarm"; }
345
305
  attribute :>> causeSource = CauseSourceKind::hardware;
346
306
  attribute :>> contributingFactors = "Air sensor failed, disabled, or threshold miscalibrated so air passes undetected";
347
307
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.4 Hardware Hazards HID 4.13 (failure to alarm: sensor failure)"; }
348
308
  }
349
- part seqAirInLine : SequenceOfEvents {
350
- @MemoIdentity { :>> providedId = "SEQ-003"; }
351
- attribute :>> name = "AirEntersLineSequence";
309
+ item seqAirInLine : SequenceOfEvents {
310
+ @MemoIdentity { :>> providedId = "SEQ-003"; :>> label = "AirEntersLineSequence"; }
352
311
  attribute :>> initiatingEvent = "Infusion continues after inappropriate priming, with an empty reservoir, or under tubing leakage";
353
312
  attribute :>> contributingFactors = "Air-in-line detection failed or thresholds miscalibrated";
354
313
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (initiating causes for air embolism); CITE-004: §2.2 Alarms (air-in-line)"; }
355
314
  }
356
- part hsAirTowardPatient : HazardousSituation {
357
- @MemoIdentity { :>> providedId = "HS-003"; }
358
- attribute :>> name = "AirInfusedIntoPatientBloodStream";
315
+ item hsAirTowardPatient : HazardousSituation {
316
+ @MemoIdentity { :>> providedId = "HS-003"; :>> label = "AirInfusedIntoPatientBloodStream"; }
359
317
  attribute :>> exposedPersons = "patient";
360
318
  attribute :>> operatingCondition = "ACTIVE therapy with air in the administration set";
361
319
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (infusing air bubbles into the patient's blood stream)"; }
362
320
  }
363
- part harmAirEmbolism : Harm {
364
- @MemoIdentity { :>> providedId = "HM-003"; }
365
- attribute :>> name = "TissueOrOrganDamage";
321
+ item harmAirEmbolism : Harm {
322
+ @MemoIdentity { :>> providedId = "HM-003"; :>> label = "TissueOrOrganDamage"; }
366
323
  attribute :>> clinicalImpact = "tissue or organ damage from vascular air embolism, potentially fatal";
367
324
  attribute :>> reversibility = "potentially irreversible";
368
325
  attribute :>> severity = SeverityKind::catastrophic;
369
326
  @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (harm: tissue or organ damage)"; }
370
327
  }
371
328
  part riskBeforeAir : Risk {
372
- @MemoIdentity { :>> providedId = "RISK-B-003"; }
373
- attribute :>> name = "AirEmbolismInitialRisk";
329
+ @MemoIdentity { :>> providedId = "RISK-B-003"; :>> label = "AirEmbolismInitialRisk"; }
374
330
  attribute :>> driverKind = "risk";
375
331
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
376
332
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -382,16 +338,14 @@ package memo_examples_gpca_pump_gpca_risk {
382
338
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
383
339
  }
384
340
  part airDetectionControl : RiskControlMeasure {
385
- @MemoIdentity { :>> providedId = "RC-002"; }
386
- attribute :>> name = "AirInLineDetectionAndKvoPause";
341
+ @MemoIdentity { :>> providedId = "RC-002"; :>> label = "AirInLineDetectionAndKvoPause"; }
387
342
  attribute :>> controlKind = RiskControlKind::protectiveMeasure;
388
343
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
389
344
  attribute :>> verificationStatus = "planned";
390
345
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21 — model REQ-CS-21: air-embolism pause on single or cumulative bubble volume); CITE-002: CriSys AADL v2.0, AGREE air-in-line => flow <= KVO (model GP-009); CITE-008: GPCA Safety Requirements (2009), Air-in-line alarm"; }
391
346
  }
392
347
  part riskAfterAir : ResidualRisk {
393
- @MemoIdentity { :>> providedId = "RISK-A-003"; }
394
- attribute :>> name = "AirEmbolismResidualRisk";
348
+ @MemoIdentity { :>> providedId = "RISK-A-003"; :>> label = "AirEmbolismResidualRisk"; }
395
349
  attribute :>> driverKind = "risk";
396
350
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
397
351
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -402,67 +356,58 @@ package memo_examples_gpca_pump_gpca_risk {
402
356
  }
403
357
 
404
358
  // ═══ HZ-004: Incorrect therapy programmed (use error) ═══════════
405
- part wrongDoseHazard : Hazard {
406
- @MemoIdentity { :>> providedId = "HZ-004"; }
407
- attribute :>> name = "IncorrectDrugOrDoseProgrammed";
359
+ item wrongDoseHazard : Hazard {
360
+ @MemoIdentity { :>> providedId = "HZ-004"; :>> label = "IncorrectDrugOrDoseProgrammed"; }
408
361
  attribute :>> hazardType = HazardTypeKind::useError;
409
362
  attribute :>> severity = SeverityKind::catastrophic;
410
363
  attribute :>> foreseeable = true;
411
- attribute :>> description = "Prescription programmed or reservoir loaded so delivered therapy differs from the intended prescription.";
364
+ doc /* Prescription programmed or reservoir loaded so delivered therapy differs from the intended prescription. */
412
365
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards and §2.4.1 HID 1.25 (prescription/dosage values out of default range); CITE-007: GPCA Hazard Analysis doc (2009), Use Hazards HID 8.6/8.10/8.14"; }
413
366
  }
414
- part causeWrongPrescriptionEntered : HazardCause {
415
- @MemoIdentity { :>> providedId = "CAUSE-013"; }
416
- attribute :>> name = "IncorrectPrescriptionEntered";
367
+ item causeWrongPrescriptionEntered : HazardCause {
368
+ @MemoIdentity { :>> providedId = "CAUSE-013"; :>> label = "IncorrectPrescriptionEntered"; }
417
369
  attribute :>> causeSource = CauseSourceKind::usageCause;
418
370
  attribute :>> contributingFactors = "Attentional failure during prescription entry";
419
371
  @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.10 (attentional failure: incorrect prescription entered)"; }
420
372
  }
421
- part causeWrongDoseUnits : HazardCause {
422
- @MemoIdentity { :>> providedId = "CAUSE-014"; }
423
- attribute :>> name = "IncorrectDoseUnits";
373
+ item causeWrongDoseUnits : HazardCause {
374
+ @MemoIdentity { :>> providedId = "CAUSE-014"; :>> label = "IncorrectDoseUnits"; }
424
375
  attribute :>> causeSource = CauseSourceKind::usageCause;
425
376
  attribute :>> contributingFactors = "Incorrect units used for dose parameters (e.g., ml/hr instead of mcg/hr)";
426
377
  @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.14 (incorrect dose mode; mitigated by barcode scanner)"; }
427
378
  }
428
- part causeWrongDrugLoaded : HazardCause {
429
- @MemoIdentity { :>> providedId = "CAUSE-015"; }
430
- attribute :>> name = "WrongPrescriptionOrDrugConcentration";
379
+ item causeWrongDrugLoaded : HazardCause {
380
+ @MemoIdentity { :>> providedId = "CAUSE-015"; :>> label = "WrongPrescriptionOrDrugConcentration"; }
431
381
  attribute :>> causeSource = CauseSourceKind::usageCause;
432
382
  attribute :>> contributingFactors = "Incorrect prescription given to patient; incorrect drug concentration specified; look-alike packaging";
433
383
  @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.6 (incorrect prescription; incorrect drug library) and §2.4.1 HID 1.4 (incorrect drug concentration specified; mitigated by barcode scanner)"; }
434
384
  }
435
- part causeSettingsChangedInadvertently : HazardCause {
436
- @MemoIdentity { :>> providedId = "CAUSE-016"; }
437
- attribute :>> name = "SettingsChangedInadvertently";
385
+ item causeSettingsChangedInadvertently : HazardCause {
386
+ @MemoIdentity { :>> providedId = "CAUSE-016"; :>> label = "SettingsChangedInadvertently"; }
438
387
  attribute :>> causeSource = CauseSourceKind::usageCause;
439
388
  attribute :>> contributingFactors = "User or patient changes infusion settings inadvertently during therapy";
440
389
  @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.7/8.8 (user/patient change infusion settings inadvertently; mitigated by drug library)"; }
441
390
  }
442
- part causePumpRevertsToDefaults : HazardCause {
443
- @MemoIdentity { :>> providedId = "CAUSE-017"; }
444
- attribute :>> name = "PumpRevertsToDefaultDoseValues";
391
+ item causePumpRevertsToDefaults : HazardCause {
392
+ @MemoIdentity { :>> providedId = "CAUSE-017"; :>> label = "PumpRevertsToDefaultDoseValues"; }
445
393
  attribute :>> causeSource = CauseSourceKind::software;
446
394
  attribute :>> contributingFactors = "Programmed dose set incorrectly; inappropriate reset to default values";
447
395
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.5 Software Hazards HID 5.11 (pump reverts to default dose values; mitigated by drug library)"; }
448
396
  }
449
- part seqMisprogram : SequenceOfEvents {
450
- @MemoIdentity { :>> providedId = "SEQ-004"; }
451
- attribute :>> name = "MisprogrammingSequence";
397
+ item seqMisprogram : SequenceOfEvents {
398
+ @MemoIdentity { :>> providedId = "SEQ-004"; :>> label = "MisprogrammingSequence"; }
452
399
  attribute :>> initiatingEvent = "Prescription entered with wrong value, units, or drug and accepted for delivery";
453
400
  attribute :>> contributingFactors = "Safe-value check against the pharmacy database skipped or unavailable; confirmation bypassed";
454
401
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.25 (prescription/dosage values fall out of default value range; mitigated by drug library and barcode scanner)"; }
455
402
  }
456
- part hsWrongTherapy : HazardousSituation {
457
- @MemoIdentity { :>> providedId = "HS-004"; }
458
- attribute :>> name = "PatientReceivingUnintendedTherapy";
403
+ item hsWrongTherapy : HazardousSituation {
404
+ @MemoIdentity { :>> providedId = "HS-004"; :>> label = "PatientReceivingUnintendedTherapy"; }
459
405
  attribute :>> exposedPersons = "patient";
460
406
  attribute :>> operatingCondition = "therapy started from an unverified prescription";
461
407
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.25 and §2.4.8 Use Hazards (incorrect therapy rows)"; }
462
408
  }
463
409
  part riskBeforeWrongDose : Risk {
464
- @MemoIdentity { :>> providedId = "RISK-B-004"; }
465
- attribute :>> name = "MisprogrammingInitialRisk";
410
+ @MemoIdentity { :>> providedId = "RISK-B-004"; :>> label = "MisprogrammingInitialRisk"; }
466
411
  attribute :>> driverKind = "risk";
467
412
  attribute :>> probabilityEstimate = ProbabilityKind::probable;
468
413
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -474,16 +419,14 @@ package memo_examples_gpca_pump_gpca_risk {
474
419
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
475
420
  }
476
421
  part drugLibraryControl : RiskControlMeasure {
477
- @MemoIdentity { :>> providedId = "RC-005"; }
478
- attribute :>> name = "DrugDatabaseLimitsAndConfirmation";
422
+ @MemoIdentity { :>> providedId = "RC-005"; :>> label = "DrugDatabaseLimitsAndConfirmation"; }
479
423
  attribute :>> controlKind = RiskControlKind::plausibilityCheck;
480
424
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
481
425
  attribute :>> verificationStatus = "planned";
482
426
  @MemoIdentity { :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), Dose Error Reduction (drug library hard/soft limits, re-entry and confirmation prompts) and User Interface (two-step setting changes, confirmation); CITE-001: CriSys GPCA System Requirements (2013), Ch.3 Pharmacy DB interface (safe-value lookup)"; }
483
427
  }
484
428
  part riskAfterWrongDose : ResidualRisk {
485
- @MemoIdentity { :>> providedId = "RISK-A-004"; }
486
- attribute :>> name = "MisprogrammingResidualRisk";
429
+ @MemoIdentity { :>> providedId = "RISK-A-004"; :>> label = "MisprogrammingResidualRisk"; }
487
430
  attribute :>> driverKind = "risk";
488
431
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
489
432
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -494,46 +437,40 @@ package memo_examples_gpca_pump_gpca_risk {
494
437
  }
495
438
 
496
439
  // ═══ HZ-005: Free flow ══════════════════════════════════════════
497
- part freeFlowHazard : Hazard {
498
- @MemoIdentity { :>> providedId = "HZ-005"; }
499
- attribute :>> name = "GravityFreeFlow";
440
+ item freeFlowHazard : Hazard {
441
+ @MemoIdentity { :>> providedId = "HZ-005"; :>> label = "GravityFreeFlow"; }
500
442
  attribute :>> hazardType = HazardTypeKind::mechanicalFailure;
501
443
  attribute :>> severity = SeverityKind::catastrophic;
502
444
  attribute :>> foreseeable = true;
503
- attribute :>> description = "Unregulated gravity flow of drug when the set is disengaged from the pumping mechanism.";
445
+ doc /* Unregulated gravity flow of drug when the set is disengaged from the pumping mechanism. */
504
446
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (improper flow: free flow of drug; mitigated by flow sensor)"; }
505
447
  }
506
- part causeSetDisengaged : HazardCause {
507
- @MemoIdentity { :>> providedId = "CAUSE-018"; }
508
- attribute :>> name = "AdministrationSetDisengaged";
448
+ item causeSetDisengaged : HazardCause {
449
+ @MemoIdentity { :>> providedId = "CAUSE-018"; :>> label = "AdministrationSetDisengaged"; }
509
450
  attribute :>> causeSource = CauseSourceKind::mechanical;
510
451
  attribute :>> contributingFactors = "Set removed or loaded improperly with reservoir above patient level";
511
452
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (free flow of drug) and §2.2 Alerts (infusion set not loaded properly)"; }
512
453
  }
513
- part causeDoorOpenedDuringInfusion : HazardCause {
514
- @MemoIdentity { :>> providedId = "CAUSE-019"; }
515
- attribute :>> name = "DoorOpenedDuringInfusion";
454
+ item causeDoorOpenedDuringInfusion : HazardCause {
455
+ @MemoIdentity { :>> providedId = "CAUSE-019"; :>> label = "DoorOpenedDuringInfusion"; }
516
456
  attribute :>> causeSource = CauseSourceKind::environmental;
517
457
  attribute :>> contributingFactors = "Panel/door opened during infusion, or infusion started when door open";
518
458
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.2 Environmental Hazards HID 2.9 (panel/door opened during infusion; alert and log)"; }
519
459
  }
520
- part seqFreeFlow : SequenceOfEvents {
521
- @MemoIdentity { :>> providedId = "SEQ-005"; }
522
- attribute :>> name = "SetDisengagedSequence";
460
+ item seqFreeFlow : SequenceOfEvents {
461
+ @MemoIdentity { :>> providedId = "SEQ-005"; :>> label = "SetDisengagedSequence"; }
523
462
  attribute :>> initiatingEvent = "Door opened / set removed with reservoir above patient level";
524
463
  attribute :>> contributingFactors = "Anti-free-flow protection absent, defeated, or failed";
525
464
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 and §2.4.2 HID 2.9"; }
526
465
  }
527
- part hsFreeFlow : HazardousSituation {
528
- @MemoIdentity { :>> providedId = "HS-005"; }
529
- attribute :>> name = "PatientConnectedToUnregulatedFluidPath";
466
+ item hsFreeFlow : HazardousSituation {
467
+ @MemoIdentity { :>> providedId = "HS-005"; :>> label = "PatientConnectedToUnregulatedFluidPath"; }
530
468
  attribute :>> exposedPersons = "patient";
531
469
  attribute :>> operatingCondition = "set change or door open with line still connected";
532
470
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (free flow of drug)"; }
533
471
  }
534
472
  part riskBeforeFreeFlow : Risk {
535
- @MemoIdentity { :>> providedId = "RISK-B-005"; }
536
- attribute :>> name = "FreeFlowInitialRisk";
473
+ @MemoIdentity { :>> providedId = "RISK-B-005"; :>> label = "FreeFlowInitialRisk"; }
537
474
  attribute :>> driverKind = "risk";
538
475
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
539
476
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -545,24 +482,21 @@ package memo_examples_gpca_pump_gpca_risk {
545
482
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
546
483
  }
547
484
  part freeFlowValveControl : RiskControlMeasure {
548
- @MemoIdentity { :>> providedId = "RC-006"; }
549
- attribute :>> name = "AdministrationSetFreeFlowPrevention";
485
+ @MemoIdentity { :>> providedId = "RC-006"; :>> label = "AdministrationSetFreeFlowPrevention"; }
550
486
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
551
487
  attribute :>> implementationKind = RiskControlImplementationKind::hardwareDesign;
552
488
  attribute :>> verificationStatus = "planned";
553
489
  @MemoIdentity { :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), User Interface (the administration set should be designed to prevent compromising patient safety or causing an unacceptable flow error); CITE-004: §2.4.1 HID 1.13 (free-flow detection via flow sensor, safety requirement 1.2.2)"; }
554
490
  }
555
491
  part doorInterlockControl : RiskControlMeasure {
556
- @MemoIdentity { :>> providedId = "RC-009"; }
557
- attribute :>> name = "DoorOpenDeliveryInhibit";
492
+ @MemoIdentity { :>> providedId = "RC-009"; :>> label = "DoorOpenDeliveryInhibit"; }
558
493
  attribute :>> controlKind = RiskControlKind::interlock;
559
494
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
560
495
  attribute :>> verificationStatus = "planned";
561
496
  @MemoIdentity { :>> sourceReference = "CITE-002: CriSys AADL v2.0, AGREE door open => flow <= KVO (model GP-011); CITE-004: §2.4.2 HID 2.8/2.9 (panel/door opened during infusion: alert and stop); model extension REQ-X-05"; }
562
497
  }
563
498
  part riskAfterFreeFlow : ResidualRisk {
564
- @MemoIdentity { :>> providedId = "RISK-A-005"; }
565
- attribute :>> name = "FreeFlowResidualRisk";
499
+ @MemoIdentity { :>> providedId = "RISK-A-005"; :>> label = "FreeFlowResidualRisk"; }
566
500
  attribute :>> driverKind = "risk";
567
501
  attribute :>> probabilityEstimate = ProbabilityKind::improbable;
568
502
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -573,39 +507,34 @@ package memo_examples_gpca_pump_gpca_risk {
573
507
  }
574
508
 
575
509
  // ═══ HZ-006: Reverse delivery ═══════════════════════════════════
576
- part reverseDeliveryHazard : Hazard {
577
- @MemoIdentity { :>> providedId = "HZ-006"; }
578
- attribute :>> name = "ReverseDelivery";
510
+ item reverseDeliveryHazard : Hazard {
511
+ @MemoIdentity { :>> providedId = "HZ-006"; :>> label = "ReverseDelivery"; }
579
512
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
580
513
  attribute :>> severity = SeverityKind::serious;
581
514
  attribute :>> foreseeable = true;
582
- attribute :>> description = "Drug or body fluid drawn backwards through the administration set (bleed back / reflux).";
515
+ doc /* Drug or body fluid drawn backwards through the administration set (bleed back / reflux). */
583
516
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.14 (improper flow: bleed back, reflux within device); CITE-008: GPCA Safety Requirements (2009), Reverse delivery (continuous reverse delivery shall not be possible, from IEC 601-2-24); CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22)"; }
584
517
  }
585
- part causeBleedBack : HazardCause {
586
- @MemoIdentity { :>> providedId = "CAUSE-020"; }
587
- attribute :>> name = "BleedBackRefluxWithinDevice";
518
+ item causeBleedBack : HazardCause {
519
+ @MemoIdentity { :>> providedId = "CAUSE-020"; :>> label = "BleedBackRefluxWithinDevice"; }
588
520
  attribute :>> causeSource = CauseSourceKind::operational;
589
521
  attribute :>> contributingFactors = "Pressure gradient or mechanism fault reverses flow through the set";
590
522
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.14 (bleed back; reflux within device; mitigated by flow sensor, safety requirement 1.8)"; }
591
523
  }
592
- part seqReverseDelivery : SequenceOfEvents {
593
- @MemoIdentity { :>> providedId = "SEQ-006"; }
594
- attribute :>> name = "SustainedReverseFlowSequence";
524
+ item seqReverseDelivery : SequenceOfEvents {
525
+ @MemoIdentity { :>> providedId = "SEQ-006"; :>> label = "SustainedReverseFlowSequence"; }
595
526
  attribute :>> initiatingEvent = "Reflux within the device draws drug or blood back through the administration set";
596
527
  attribute :>> contributingFactors = "Reverse flow undetected; continuous episode or cumulative episodes exceed the permitted duration limits";
597
528
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22: continuous and cumulative reverse-delivery duration limits, App. A.4 Rev_Delivery constants); CITE-004: §2.4.1 HID 1.14"; }
598
529
  }
599
- part hsReverseFlow : HazardousSituation {
600
- @MemoIdentity { :>> providedId = "HS-006"; }
601
- attribute :>> name = "PatientLineFlowReversed";
530
+ item hsReverseFlow : HazardousSituation {
531
+ @MemoIdentity { :>> providedId = "HS-006"; :>> label = "PatientLineFlowReversed"; }
602
532
  attribute :>> exposedPersons = "patient";
603
533
  attribute :>> operatingCondition = "THERAPY with reverse flow past the continuous or cumulative duration limits";
604
534
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22); CITE-008: GPCA Safety Requirements (2009), Reverse delivery"; }
605
535
  }
606
536
  part riskBeforeReverse : Risk {
607
- @MemoIdentity { :>> providedId = "RISK-B-006"; }
608
- attribute :>> name = "ReverseDeliveryInitialRisk";
537
+ @MemoIdentity { :>> providedId = "RISK-B-006"; :>> label = "ReverseDeliveryInitialRisk"; }
609
538
  attribute :>> driverKind = "risk";
610
539
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
611
540
  attribute :>> severityEstimate = SeverityKind::serious;
@@ -617,24 +546,21 @@ package memo_examples_gpca_pump_gpca_risk {
617
546
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
618
547
  }
619
548
  part reverseDeliveryPauseControl : RiskControlMeasure {
620
- @MemoIdentity { :>> providedId = "RC-010"; }
621
- attribute :>> name = "ReverseDeliveryDetectionAndPause";
549
+ @MemoIdentity { :>> providedId = "RC-010"; :>> label = "ReverseDeliveryDetectionAndPause"; }
622
550
  attribute :>> controlKind = RiskControlKind::alarm;
623
551
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
624
552
  attribute :>> verificationStatus = "planned";
625
553
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22 — model REQ-CS-22: transition to PAUSED and REQ 59 'Reverse Delivery' actions, model NOTIF-04); CITE-004: §2.4.1 HID 1.14 (flow sensor)"; }
626
554
  }
627
555
  part antiRefluxDesignControl : RiskControlMeasure {
628
- @MemoIdentity { :>> providedId = "RC-011"; }
629
- attribute :>> name = "ContinuousReverseDeliveryPrevention";
556
+ @MemoIdentity { :>> providedId = "RC-011"; :>> label = "ContinuousReverseDeliveryPrevention"; }
630
557
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
631
558
  attribute :>> implementationKind = RiskControlImplementationKind::hardwareDesign;
632
559
  attribute :>> verificationStatus = "planned";
633
560
  @MemoIdentity { :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), Reverse delivery (during normal use and/or single fault condition, continuous reverse delivery shall not be possible; from IEC 601-2-24)"; }
634
561
  }
635
562
  part riskAfterReverse : ResidualRisk {
636
- @MemoIdentity { :>> providedId = "RISK-A-006"; }
637
- attribute :>> name = "ReverseDeliveryResidualRisk";
563
+ @MemoIdentity { :>> providedId = "RISK-A-006"; :>> label = "ReverseDeliveryResidualRisk"; }
638
564
  attribute :>> driverKind = "risk";
639
565
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
640
566
  attribute :>> severityEstimate = SeverityKind::serious;
@@ -645,46 +571,40 @@ package memo_examples_gpca_pump_gpca_risk {
645
571
  }
646
572
 
647
573
  // ═══ HZ-007: VTBI over-infusion ═════════════════════════════════
648
- part vtbiOverInfusionHazard : Hazard {
649
- @MemoIdentity { :>> providedId = "HZ-007"; }
650
- attribute :>> name = "VtbiOverInfusion";
574
+ item vtbiOverInfusionHazard : Hazard {
575
+ @MemoIdentity { :>> providedId = "HZ-007"; :>> label = "VtbiOverInfusion"; }
651
576
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
652
577
  attribute :>> severity = SeverityKind::catastrophic;
653
578
  attribute :>> foreseeable = true;
654
- attribute :>> description = "Total volume infused exceeds the prescribed or drug-database maximum VTBI (volume to be infused).";
579
+ doc /* Total volume infused exceeds the prescribed or drug-database maximum VTBI (volume to be infused). */
655
580
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20: Over Infusion VTBI); CITE-008: GPCA Safety Requirements (2009), VTBI (range and increments) and Dose Error Reduction (hard/soft VTBI limits); CITE-004/CITE-007: Use Hazards HID 8.1 (overfill: incorrect fill volume specified)"; }
656
581
  }
657
- part causeVtbiTooHigh : HazardCause {
658
- @MemoIdentity { :>> providedId = "CAUSE-021"; }
659
- attribute :>> name = "IncorrectVtbiOrFillVolumeSpecified";
582
+ item causeVtbiTooHigh : HazardCause {
583
+ @MemoIdentity { :>> providedId = "CAUSE-021"; :>> label = "IncorrectVtbiOrFillVolumeSpecified"; }
660
584
  attribute :>> causeSource = CauseSourceKind::usageCause;
661
585
  attribute :>> contributingFactors = "Overfill: incorrect fill volume or VTBI specified at programming time";
662
586
  @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.1 (overfill: incorrect fill volume specified; mitigated by barcode scanner)"; }
663
587
  }
664
- part causeStaleDrugLibrary : HazardCause {
665
- @MemoIdentity { :>> providedId = "CAUSE-022"; }
666
- attribute :>> name = "IncorrectOrOutdatedDrugLibraryLimits";
588
+ item causeStaleDrugLibrary : HazardCause {
589
+ @MemoIdentity { :>> providedId = "CAUSE-022"; :>> label = "IncorrectOrOutdatedDrugLibraryLimits"; }
667
590
  attribute :>> causeSource = CauseSourceKind::software;
668
591
  attribute :>> contributingFactors = "Incorrect drug library or old version leaves VTBI limits wrong or missing";
669
592
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.5 Software Hazards HID 5.6 (incorrect dose administered: incorrect drug library, old version of drug library)"; }
670
593
  }
671
- part seqVtbiExceeded : SequenceOfEvents {
672
- @MemoIdentity { :>> providedId = "SEQ-007"; }
673
- attribute :>> name = "VtbiCeilingExceededSequence";
594
+ item seqVtbiExceeded : SequenceOfEvents {
595
+ @MemoIdentity { :>> providedId = "SEQ-007"; :>> label = "VtbiCeilingExceededSequence"; }
674
596
  attribute :>> initiatingEvent = "Volume infused accumulates past the drug-database maximum VTBI during THERAPY";
675
597
  attribute :>> contributingFactors = "Infusion-complete transition missed; VTBI limit misprogrammed or outdated";
676
598
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20) and §4.1.6 (REQ 28: infusion complete at prescribed duration or maximum VTBI)"; }
677
599
  }
678
- part hsVtbiExceeded : HazardousSituation {
679
- @MemoIdentity { :>> providedId = "HS-007"; }
680
- attribute :>> name = "PatientReceivingVolumeBeyondPrescribedVtbi";
600
+ item hsVtbiExceeded : HazardousSituation {
601
+ @MemoIdentity { :>> providedId = "HS-007"; :>> label = "PatientReceivingVolumeBeyondPrescribedVtbi"; }
681
602
  attribute :>> exposedPersons = "patient";
682
603
  attribute :>> operatingCondition = "ACTIVE therapy continuing past the prescribed total volume";
683
604
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20: actual volume infused exceeds the drug-database maximum VTBI)"; }
684
605
  }
685
606
  part riskBeforeVtbi : Risk {
686
- @MemoIdentity { :>> providedId = "RISK-B-007"; }
687
- attribute :>> name = "VtbiOverInfusionInitialRisk";
607
+ @MemoIdentity { :>> providedId = "RISK-B-007"; :>> label = "VtbiOverInfusionInitialRisk"; }
688
608
  attribute :>> driverKind = "risk";
689
609
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
690
610
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -696,24 +616,21 @@ package memo_examples_gpca_pump_gpca_risk {
696
616
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
697
617
  }
698
618
  part vtbiLimitPauseControl : RiskControlMeasure {
699
- @MemoIdentity { :>> providedId = "RC-012"; }
700
- attribute :>> name = "VtbiCeilingPauseAtKvo";
619
+ @MemoIdentity { :>> providedId = "RC-012"; :>> label = "VtbiCeilingPauseAtKvo"; }
701
620
  attribute :>> controlKind = RiskControlKind::alarm;
702
621
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
703
622
  attribute :>> verificationStatus = "planned";
704
623
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20 — model REQ-CS-20: transition to PAUSED and REQ 59 'Over Infusion VTBI' actions, model NOTIF-06); CITE-002: CriSys AADL v2.0, AGREE over-VTBI => flow <= KVO (model GP-008)"; }
705
624
  }
706
625
  part infusionCompleteControl : RiskControlMeasure {
707
- @MemoIdentity { :>> providedId = "RC-013"; }
708
- attribute :>> name = "InfusionCompleteStopAtVtbi";
626
+ @MemoIdentity { :>> providedId = "RC-013"; :>> label = "InfusionCompleteStopAtVtbi"; }
709
627
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
710
628
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
711
629
  attribute :>> verificationStatus = "planned";
712
630
  @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6 (REQ 28 — model REQ-CS-28: transition to IDLE when total volume infused reaches the programmed prescription maximum VTBI)"; }
713
631
  }
714
632
  part riskAfterVtbi : ResidualRisk {
715
- @MemoIdentity { :>> providedId = "RISK-A-007"; }
716
- attribute :>> name = "VtbiOverInfusionResidualRisk";
633
+ @MemoIdentity { :>> providedId = "RISK-A-007"; :>> label = "VtbiOverInfusionResidualRisk"; }
717
634
  attribute :>> driverKind = "risk";
718
635
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
719
636
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -725,16 +642,14 @@ package memo_examples_gpca_pump_gpca_risk {
725
642
 
726
643
  // ── Cross-cutting platform controls ─────────────────────────────
727
644
  part watchdogControl : RiskControlMeasure {
728
- @MemoIdentity { :>> providedId = "RC-007"; }
729
- attribute :>> name = "HardwareWatchdogSafeState";
645
+ @MemoIdentity { :>> providedId = "RC-007"; :>> label = "HardwareWatchdogSafeState"; }
730
646
  attribute :>> controlKind = RiskControlKind::protectiveMeasure;
731
647
  attribute :>> implementationKind = RiskControlImplementationKind::hardwareDesign;
732
648
  attribute :>> verificationStatus = "planned";
733
649
  @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (watchdog alarm) and §2.3 Pump Checks (watchdog interrupt tests); CITE-008: GPCA Safety Requirements (2009), POST (watchdog test)"; }
734
650
  }
735
651
  part flowCrossCheckControl : RiskControlMeasure {
736
- @MemoIdentity { :>> providedId = "RC-008"; }
737
- attribute :>> name = "IndependentFlowCrossCheck";
652
+ @MemoIdentity { :>> providedId = "RC-008"; :>> label = "IndependentFlowCrossCheck"; }
738
653
  attribute :>> controlKind = RiskControlKind::monitoring;
739
654
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
740
655
  attribute :>> verificationStatus = "planned";
@@ -742,8 +657,7 @@ package memo_examples_gpca_pump_gpca_risk {
742
657
  }
743
658
 
744
659
  part residualEval : OverallResidualRiskEvaluation {
745
- @MemoIdentity { :>> providedId = "RREV-001"; }
746
- attribute :>> name = "OverallResidualRiskEvaluation";
660
+ @MemoIdentity { :>> providedId = "RREV-001"; :>> label = "OverallResidualRiskEvaluation"; }
747
661
  attribute :>> conclusion = "Residual risk across opioid over-infusion, under-infusion, air embolism, misprogramming, free flow, reverse delivery, and VTBI over-infusion is acceptable given lockout and max-dose enforcement, KVO-pause alarm semantics for air/occlusion/VTBI/reverse-delivery conditions, drug-database limit checking with confirmation, administration-set free-flow prevention, door interlock, watchdog safe state, and independent flow cross-check, each with planned verification.";
748
662
  attribute :>> reviewer = "Safety review";
749
663
  @MemoIdentity { :>> sourceReference = "illustrative — no source"; }