@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
@@ -34,6 +34,8 @@ package memo_examples_gpca_pump_gpca_trace {
34
34
  private import memo_architecture_operational_use_cases::*;
35
35
  private import memo_architecture_operational_workflows::*;
36
36
  private import memo_architecture_realization_deployment::*;
37
+ private import memo_core_enumerations::DeploymentKind;
38
+ private import memo_core_common::MemoIdentity;
37
39
  private import memo_assurance_human_factors::*;
38
40
  private import memo_assurance_safety_risk::*;
39
41
  private import memo_assurance_safety_risk_analysis::*;
@@ -48,19 +50,20 @@ package memo_examples_gpca_pump_gpca_trace {
48
50
  connection connect actorPharmacist to entityPharmacy;
49
51
 
50
52
  // ── Fig 2.1 context flows (CriSys §2.1) ─────────────────────
51
- // Data flows
52
- flow from entityPrescription to actorNurse;
53
- flow from actorNurse to entityGpcaPump;
54
- flow from entityGpcaPump to actorNurse;
55
- flow from actorPatient to entityGpcaPump;
56
- flow from entityPharmacyDb to entityGpcaPump;
53
+ // Data exchanges: who exchanges data with whom (the figure names no item),
54
+ // so each is a connection from the source to the receiver.
55
+ connection entityPrescriptionToActorNurse connect entityPrescription to actorNurse;
56
+ connection actorNurseToEntityGpcaPump connect actorNurse to entityGpcaPump;
57
+ connection entityGpcaPumpToActorNurse connect entityGpcaPump to actorNurse;
58
+ connection actorPatientToEntityGpcaPump connect actorPatient to entityGpcaPump;
59
+ connection entityPharmacyDbToEntityGpcaPump connect entityPharmacyDb to entityGpcaPump;
57
60
  // Physical connections (drug path)
58
61
  connection connect source ::> entityDrugReservoir to target ::> entityGpcaPump;
59
62
  connection connect source ::> entityGpcaPump to target ::> entityNeedle;
60
63
  connection connect source ::> entityNeedle to target ::> actorPatient;
61
64
  connection connect source ::> entityPowerInfrastructure to target ::> entityGpcaPump;
62
65
  // Intended use and use context anchoring (no floating context nodes)
63
- connection : Governs { attribute :>> governKind = GovernKind::'use'; connect governor ::> gpcaIntendedUse to governedElement ::> entityGpcaPump; }
66
+ connection : Governs connect governor ::> gpcaIntendedUse to governedElement ::> entityGpcaPump { attribute :>> governKind = GovernKind::'use'; }
64
67
  connection : AppliesInContext connect useContext ::> hospitalWardContext to subjectElement ::> entityGpcaPump;
65
68
  connection : AppliesInContext connect useContext ::> hospitalWardContext to subjectElement ::> entityHospital;
66
69
 
@@ -77,10 +80,10 @@ package memo_examples_gpca_pump_gpca_trace {
77
80
  connection : DerivesFrom connect sourceDriver ::> oaRespondAlarm to targetRequirement ::> reqCs59;
78
81
 
79
82
  // ── Functional chains ───────────────────────────────────────
80
- // fcPatientBolus/fcAlarmStop already name every one of these functions
81
- // via their step chain (perform fcsBolusSense; ... ref :>> function =
82
- // fnAcquireSensors;) in gpca_system.sysml — InvolvesFunction was a
83
- // flattened restatement of that two-hop path, not new information.
83
+ // fcPatientBolus/fcAlarmStop already name every one of these functions:
84
+ // each step subsets the function it performs (`action fcsBolusSense :>
85
+ // fnAcquireSensors`) in gpca_system.sysml — InvolvesFunction was a
86
+ // flattened restatement of that, not new information.
84
87
  // fcStartup declares no steps, so its two functions are native `perform`
85
88
  // statements directly on fcStartup in gpca_system.sysml instead.
86
89
  #refinement dependency fcPatientBolus to ssBolusDuringBasal;
@@ -92,15 +95,17 @@ package memo_examples_gpca_pump_gpca_trace {
92
95
  // The nine refinement statements themselves live in gpca_operational.sysml,
93
96
  // inside wsRequestBolus's/wsRespondAlarm's own owning scope — the
94
97
  // `#refinement dependency ... to ...` shorthand's target end does not
95
- // accept a qualified path, and both steps are nested now.
98
+ // accept a qualified path, and the operative actions are nested.
96
99
 
97
100
  // ── Requirement derivation ──────────────────────────────────
98
101
  // MEMO extension requirements (REQ-X) derive from needs and risks.
102
+ // --8<-- [start:derives]
99
103
  connection : DerivesFrom connect sourceDriver ::> needSafeTherapy to targetRequirement ::> reqPost;
100
104
  connection : DerivesFrom connect sourceDriver ::> needEffectiveAnalgesia to targetRequirement ::> reqPumpAccuracy;
101
105
  connection : DerivesFrom connect sourceDriver ::> needEffectiveAnalgesia to targetRequirement ::> reqBatteryBackup;
102
106
  connection : DerivesFrom connect sourceDriver ::> needTimelyAlarms to targetRequirement ::> reqAlarmLoudness;
103
107
  connection : DerivesFrom connect sourceDriver ::> needAuditableRecord to targetRequirement ::> reqEventLogging;
108
+ // --8<-- [end:derives]
104
109
  connection : DerivesFrom connect sourceDriver ::> overdoseHazard to targetRequirement ::> reqCs25;
105
110
  connection : DerivesFrom connect sourceDriver ::> underdoseHazard to targetRequirement ::> reqOcclusion;
106
111
  connection : DerivesFrom connect sourceDriver ::> airEmbolismHazard to targetRequirement ::> reqCs21;
@@ -329,23 +334,43 @@ package memo_examples_gpca_pump_gpca_trace {
329
334
 
330
335
  // ── Function allocation ─────────────────────────────────────
331
336
  allocate fnAcquireSensors to gpcaDevice.gpcaDeviceSensors;
332
- allocate fnAcquireSensors to gpcaDevice.gpcaSoftware.systemStatus;
333
- allocate fnPresentStatus to gpcaDevice.gpcaSoftware.outputBus;
334
- allocate fnValidatePrescription to gpcaDevice.gpcaSoftware.config;
335
- allocate fnMonitorAlarm to gpcaDevice.gpcaSoftware.alarm;
337
+ allocate fnAcquireSensors to gpcaSoftware.systemStatus;
338
+ allocate fnPresentStatus to gpcaSoftware.outputBus;
339
+ allocate fnValidatePrescription to gpcaSoftware.config;
340
+ allocate fnMonitorAlarm to gpcaSoftware.alarm;
336
341
  allocate fnAnnunciate to audibleAlarm;
337
- allocate fnManageInfusion to gpcaDevice.gpcaSoftware.infusionMgr;
338
- allocate fnEnforceLimits to gpcaDevice.gpcaSoftware.infusionMgr;
342
+ allocate fnManageInfusion to gpcaSoftware.infusionMgr;
343
+ allocate fnEnforceLimits to gpcaSoftware.infusionMgr;
339
344
  allocate fnCommandPump to pumpMotorAssembly;
340
- allocate fnLogEvents to gpcaDevice.gpcaSoftware.logging;
341
- allocate fnManagePower to gpcaDevice.gpcaSoftware.systemMonitor;
345
+ allocate fnLogEvents to gpcaSoftware.logging;
346
+ allocate fnManagePower to gpcaSoftware.systemMonitor;
342
347
  allocate fnPresentStatus to operatorDisplay;
343
- allocate fnSelfTest to gpcaDevice.gpcaSoftware.systemMonitor;
348
+ allocate fnSelfTest to gpcaSoftware.systemMonitor;
344
349
  // ── Deployment, hosting, and interface realization ──────────
345
- allocation gpcaSoftwareDeployment : DeploysTo allocate gpcaDevice.gpcaSoftware to controllerBoard;
350
+ // Software reaches the hardware as a built image on the processor that
351
+ // runs it: modules build into the image, the image deploys to the MCU.
352
+ // This edge used to deploy the software system onto the circuit board,
353
+ // which DeploysTo's ends reject — a system is not a deployment unit and a
354
+ // board is not a processing node (mainController, hosted by the board).
355
+ // --8<-- [start:deployment]
356
+ part gpcaFirmwareImage : SoftwareDeploymentUnit {
357
+ @MemoIdentity { :>> providedId = "DU-001"; :>> label = "GPCAFirmwareImage"; }
358
+ attribute :>> unitKind = "firmware image";
359
+ attribute :>> version = "2.0";
360
+ }
361
+ allocation : BuildsInto allocate gpcaSoftware.tlm to gpcaFirmwareImage;
362
+ allocation : BuildsInto allocate gpcaSoftware.config to gpcaFirmwareImage;
363
+ allocation : BuildsInto allocate gpcaSoftware.alarm to gpcaFirmwareImage;
364
+ allocation : BuildsInto allocate gpcaSoftware.logging to gpcaFirmwareImage;
365
+ allocation : BuildsInto allocate gpcaSoftware.infusionMgr to gpcaFirmwareImage;
366
+ allocation : BuildsInto allocate gpcaSoftware.systemMonitor to gpcaFirmwareImage;
367
+ allocation gpcaSoftwareDeployment : DeploysTo allocate gpcaFirmwareImage to mainController {
368
+ attribute :>> deploymentKind = DeploymentKind::embedded;
369
+ }
346
370
  allocation : HostedBy allocate mainController to controllerBoard;
347
371
  #refinement dependency sensorInputInterface to hwSoftwareBus;
348
372
  #refinement dependency actuatorCommandInterface to pumpMotorDrive;
373
+ // --8<-- [end:deployment]
349
374
  connection : BindsToInterface connect portElement ::> portPatientPendant to boundInterface ::> bolusButtonLine;
350
375
  connection : BindsToInterface connect portElement ::> portMotorDrive to boundInterface ::> pumpMotorDrive;
351
376
  connection : BindsToInterface connect portElement ::> portSensorHarness to boundInterface ::> occlusionAnalogLine;
@@ -369,33 +394,33 @@ package memo_examples_gpca_pump_gpca_trace {
369
394
  // recorded exactly, at port granularity, as `bind` statements in
370
395
  // gpca_interfaces.sysml — so nothing is lost by not restating them
371
396
  // here in a granularity that cannot express them.
372
- flow from gpcaDevice.gpcaSoftware.tlm to gpcaDevice.gpcaSoftware.outputBus;
373
- flow from gpcaDevice.gpcaSoftware.infusionMgr to gpcaDevice.gpcaSoftware.systemStatus;
374
- flow from gpcaDevice.gpcaSoftware.tlm to gpcaDevice.gpcaSoftware.systemStatus;
375
- flow from gpcaDevice.gpcaSoftware.config to gpcaDevice.gpcaSoftware.systemStatus;
376
- flow from gpcaDevice.gpcaSoftware.systemStatus to gpcaDevice.gpcaSoftware.outputBus;
377
- flow from gpcaDevice.gpcaSoftware.infusionMgr to gpcaDevice.gpcaSoftware.alarm;
378
- flow from gpcaDevice.gpcaSoftware.tlm to gpcaDevice.gpcaSoftware.alarm;
379
- flow from gpcaDevice.gpcaSoftware.systemMonitor to gpcaDevice.gpcaSoftware.alarm;
380
- flow from gpcaDevice.gpcaSoftware.systemStatus to gpcaDevice.gpcaSoftware.alarm;
381
- flow from gpcaDevice.gpcaSoftware.config to gpcaDevice.gpcaSoftware.alarm;
382
- flow from gpcaDevice.gpcaSoftware.alarm to gpcaDevice.gpcaSoftware.outputBus;
383
- flow from gpcaDevice.gpcaSoftware.tlm to gpcaDevice.gpcaSoftware.config;
384
- flow from gpcaDevice.gpcaSoftware.systemStatus to gpcaDevice.gpcaSoftware.config;
385
- flow from gpcaDevice.gpcaSoftware.config to gpcaDevice.gpcaSoftware.outputBus;
386
- flow from gpcaDevice.gpcaSoftware.tlm to gpcaDevice.gpcaSoftware.infusionMgr;
387
- flow from gpcaDevice.gpcaSoftware.config to gpcaDevice.gpcaSoftware.infusionMgr;
388
- flow from gpcaDevice.gpcaSoftware.alarm to gpcaDevice.gpcaSoftware.infusionMgr;
389
- flow from gpcaDevice.gpcaSoftware.systemStatus to gpcaDevice.gpcaSoftware.infusionMgr;
390
- flow from gpcaDevice.gpcaSoftware.infusionMgr to gpcaDevice.gpcaSoftware.outputBus;
391
- flow from gpcaDevice.gpcaSoftware.tlm to gpcaDevice.gpcaSoftware.systemMonitor;
392
- flow from gpcaDevice.gpcaSoftware.systemMonitor to gpcaDevice.gpcaSoftware.outputBus;
393
- flow from gpcaDevice.gpcaSoftware.tlm to gpcaDevice.gpcaSoftware.logging;
394
- flow from gpcaDevice.gpcaSoftware.config to gpcaDevice.gpcaSoftware.logging;
395
- flow from gpcaDevice.gpcaSoftware.alarm to gpcaDevice.gpcaSoftware.logging;
396
- flow from gpcaDevice.gpcaSoftware.systemStatus to gpcaDevice.gpcaSoftware.logging;
397
- flow from gpcaDevice.gpcaSoftware.infusionMgr to gpcaDevice.gpcaSoftware.logging;
398
- flow from gpcaDevice.gpcaSoftware.logging to gpcaDevice.gpcaSoftware.outputBus;
397
+ flow tlmToOutputBus from gpcaSoftware.tlm to gpcaSoftware.outputBus;
398
+ flow infusionMgrToSystemStatus from gpcaSoftware.infusionMgr to gpcaSoftware.systemStatus;
399
+ flow tlmToSystemStatus from gpcaSoftware.tlm to gpcaSoftware.systemStatus;
400
+ flow configToSystemStatus from gpcaSoftware.config to gpcaSoftware.systemStatus;
401
+ flow systemStatusToOutputBus from gpcaSoftware.systemStatus to gpcaSoftware.outputBus;
402
+ flow infusionMgrToAlarm from gpcaSoftware.infusionMgr to gpcaSoftware.alarm;
403
+ flow tlmToAlarm from gpcaSoftware.tlm to gpcaSoftware.alarm;
404
+ flow systemMonitorToAlarm from gpcaSoftware.systemMonitor to gpcaSoftware.alarm;
405
+ flow systemStatusToAlarm from gpcaSoftware.systemStatus to gpcaSoftware.alarm;
406
+ flow configToAlarm from gpcaSoftware.config to gpcaSoftware.alarm;
407
+ flow alarmToOutputBus from gpcaSoftware.alarm to gpcaSoftware.outputBus;
408
+ flow tlmToConfig from gpcaSoftware.tlm to gpcaSoftware.config;
409
+ flow systemStatusToConfig from gpcaSoftware.systemStatus to gpcaSoftware.config;
410
+ flow configToOutputBus from gpcaSoftware.config to gpcaSoftware.outputBus;
411
+ flow tlmToInfusionMgr from gpcaSoftware.tlm to gpcaSoftware.infusionMgr;
412
+ flow configToInfusionMgr from gpcaSoftware.config to gpcaSoftware.infusionMgr;
413
+ flow alarmToInfusionMgr from gpcaSoftware.alarm to gpcaSoftware.infusionMgr;
414
+ flow systemStatusToInfusionMgr from gpcaSoftware.systemStatus to gpcaSoftware.infusionMgr;
415
+ flow infusionMgrToOutputBus from gpcaSoftware.infusionMgr to gpcaSoftware.outputBus;
416
+ flow tlmToSystemMonitor from gpcaSoftware.tlm to gpcaSoftware.systemMonitor;
417
+ flow systemMonitorToOutputBus from gpcaSoftware.systemMonitor to gpcaSoftware.outputBus;
418
+ flow tlmToLogging from gpcaSoftware.tlm to gpcaSoftware.logging;
419
+ flow configToLogging from gpcaSoftware.config to gpcaSoftware.logging;
420
+ flow alarmToLogging from gpcaSoftware.alarm to gpcaSoftware.logging;
421
+ flow systemStatusToLogging from gpcaSoftware.systemStatus to gpcaSoftware.logging;
422
+ flow infusionMgrToLogging from gpcaSoftware.infusionMgr to gpcaSoftware.logging;
423
+ flow loggingToOutputBus from gpcaSoftware.logging to gpcaSoftware.outputBus;
399
424
 
400
425
  // ── GPCA_SW boundary features (AADL GPCA_SW.aadl; CITE-002) ──
401
426
  // The seven top-level ports are features of GPCA_Software, so
@@ -409,13 +434,13 @@ package memo_examples_gpca_pump_gpca_trace {
409
434
  bind gpcaDevice.devDbIn = gpcaDevice.gpcaDeviceSensors.snsDbIn;
410
435
  bind gpcaDevice.devPresIn = gpcaDevice.gpcaDeviceSensors.snsPresIn;
411
436
  bind gpcaDevice.devPatientIn = gpcaDevice.gpcaDeviceSensors.snsPatientIn;
412
- flow from gpcaDevice.gpcaDeviceSensors.snsOpCmdOut to gpcaDevice.gpcaSoftware.portOpCmdIn;
413
- flow from gpcaDevice.gpcaDeviceSensors.snsPresOut to gpcaDevice.gpcaSoftware.portPresIn;
414
- flow from gpcaDevice.gpcaDeviceSensors.snsPatientOut to gpcaDevice.gpcaSoftware.portPatientIn;
415
- flow from gpcaDevice.gpcaDeviceSensors.snsSensorOut to gpcaDevice.gpcaSoftware.portSensorIn;
416
- flow from gpcaDevice.gpcaDeviceSensors.snsConstOut to gpcaDevice.gpcaSoftware.portConstIn;
417
- flow from gpcaDevice.gpcaDeviceSensors.snsDbOut to gpcaDevice.gpcaSoftware.portDbIn;
418
- flow from gpcaDevice.gpcaSoftware.portGpcaSwOut to gpcaDevice.gpcaActuators.actGpcaSwIn;
437
+ flow snsOpCmdOutToPortOpCmdIn from gpcaDevice.gpcaDeviceSensors.snsOpCmdOut to gpcaSoftware.portOpCmdIn;
438
+ flow snsPresOutToPortPresIn from gpcaDevice.gpcaDeviceSensors.snsPresOut to gpcaSoftware.portPresIn;
439
+ flow snsPatientOutToPortPatientIn from gpcaDevice.gpcaDeviceSensors.snsPatientOut to gpcaSoftware.portPatientIn;
440
+ flow snsSensorOutToPortSensorIn from gpcaDevice.gpcaDeviceSensors.snsSensorOut to gpcaSoftware.portSensorIn;
441
+ flow snsConstOutToPortConstIn from gpcaDevice.gpcaDeviceSensors.snsConstOut to gpcaSoftware.portConstIn;
442
+ flow snsDbOutToPortDbIn from gpcaDevice.gpcaDeviceSensors.snsDbOut to gpcaSoftware.portDbIn;
443
+ flow portGpcaSwOutToActGpcaSwIn from gpcaSoftware.portGpcaSwOut to gpcaDevice.gpcaActuators.actGpcaSwIn;
419
444
  bind gpcaDevice.gpcaActuators.actGpcaOut = gpcaDevice.devGpcaOut;
420
445
 
421
446
  // ── Risk chains (ISO 14971, GIIP causal-tree structure) ─────
@@ -429,15 +454,15 @@ package memo_examples_gpca_pump_gpca_trace {
429
454
  connection : TracesRisk connect sourceRiskElement ::> overdoseHazard to targetRiskElement ::> seqFrequentBolus;
430
455
  connection : TracesRisk connect sourceRiskElement ::> seqFrequentBolus to targetRiskElement ::> hsExcessInfusion;
431
456
  connection : TracesRisk connect sourceRiskElement ::> hsExcessInfusion to targetRiskElement ::> harmRespiratoryDepression;
432
- connection : TracesRisk connect sourceRiskElement ::> harmRespiratoryDepression to targetRiskElement ::> riskBefore;
457
+ connection : EstimatedFor connect risk ::> riskBefore to riskElement ::> harmRespiratoryDepression;
433
458
  connection : AssessedAgainst connect risk ::> riskBefore to riskMatrix ::> riskMatrix;
434
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> lockoutControl to mitigatedElement ::> overdoseHazard; }
435
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> drugLibraryControl to mitigatedElement ::> overdoseHazard; }
436
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> watchdogControl to mitigatedElement ::> overdoseHazard; }
437
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> flowCrossCheckControl to mitigatedElement ::> overdoseHazard; }
438
- connection : TracesRisk connect sourceRiskElement ::> lockoutControl to targetRiskElement ::> riskAfter;
459
+ connection : Mitigates connect control ::> lockoutControl to mitigatedElement ::> overdoseHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
460
+ connection : Mitigates connect control ::> drugLibraryControl to mitigatedElement ::> overdoseHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
461
+ connection : Mitigates connect control ::> watchdogControl to mitigatedElement ::> overdoseHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
462
+ connection : Mitigates connect control ::> flowCrossCheckControl to mitigatedElement ::> overdoseHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
463
+ connection : ReducedBy connect residualRisk ::> riskAfter to control ::> lockoutControl;
439
464
  connection : AssessedAgainst connect risk ::> riskAfter to riskMatrix ::> riskMatrix;
440
- connection : TracesRisk connect sourceRiskElement ::> residualEval to targetRiskElement ::> riskAfter;
465
+ connection : EvaluatedIn connect residualRisk ::> riskAfter to evaluation ::> residualEval;
441
466
  // HZ-002 under-infusion
442
467
  connection : TracesRisk connect sourceRiskElement ::> causeOcclusion to targetRiskElement ::> underdoseHazard;
443
468
  connection : TracesRisk connect sourceRiskElement ::> causeReservoirEmpty to targetRiskElement ::> underdoseHazard;
@@ -447,14 +472,14 @@ package memo_examples_gpca_pump_gpca_trace {
447
472
  connection : TracesRisk connect sourceRiskElement ::> underdoseHazard to targetRiskElement ::> seqOcclusion;
448
473
  connection : TracesRisk connect sourceRiskElement ::> seqOcclusion to targetRiskElement ::> hsInterruptedTherapy;
449
474
  connection : TracesRisk connect sourceRiskElement ::> hsInterruptedTherapy to targetRiskElement ::> harmUntreatedPain;
450
- connection : TracesRisk connect sourceRiskElement ::> harmUntreatedPain to targetRiskElement ::> riskBeforeUnderdose;
475
+ connection : EstimatedFor connect risk ::> riskBeforeUnderdose to riskElement ::> harmUntreatedPain;
451
476
  connection : AssessedAgainst connect risk ::> riskBeforeUnderdose to riskMatrix ::> riskMatrix;
452
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> occlusionAlarmControl to mitigatedElement ::> underdoseHazard; }
453
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> reservoirMonitorControl to mitigatedElement ::> underdoseHazard; }
454
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> flowCrossCheckControl to mitigatedElement ::> underdoseHazard; }
455
- connection : TracesRisk connect sourceRiskElement ::> occlusionAlarmControl to targetRiskElement ::> riskAfterUnderdose;
477
+ connection : Mitigates connect control ::> occlusionAlarmControl to mitigatedElement ::> underdoseHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
478
+ connection : Mitigates connect control ::> reservoirMonitorControl to mitigatedElement ::> underdoseHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
479
+ connection : Mitigates connect control ::> flowCrossCheckControl to mitigatedElement ::> underdoseHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
480
+ connection : ReducedBy connect residualRisk ::> riskAfterUnderdose to control ::> occlusionAlarmControl;
456
481
  connection : AssessedAgainst connect risk ::> riskAfterUnderdose to riskMatrix ::> riskMatrix;
457
- connection : TracesRisk connect sourceRiskElement ::> residualEval to targetRiskElement ::> riskAfterUnderdose;
482
+ connection : EvaluatedIn connect residualRisk ::> riskAfterUnderdose to evaluation ::> residualEval;
458
483
  // HZ-003 air embolism (shares the air-in-line and empty-reservoir causes)
459
484
  connection : TracesRisk connect sourceRiskElement ::> causeAirInLine to targetRiskElement ::> airEmbolismHazard;
460
485
  connection : TracesRisk connect sourceRiskElement ::> causeReservoirEmpty to targetRiskElement ::> airEmbolismHazard;
@@ -464,12 +489,12 @@ package memo_examples_gpca_pump_gpca_trace {
464
489
  connection : TracesRisk connect sourceRiskElement ::> airEmbolismHazard to targetRiskElement ::> seqAirInLine;
465
490
  connection : TracesRisk connect sourceRiskElement ::> seqAirInLine to targetRiskElement ::> hsAirTowardPatient;
466
491
  connection : TracesRisk connect sourceRiskElement ::> hsAirTowardPatient to targetRiskElement ::> harmAirEmbolism;
467
- connection : TracesRisk connect sourceRiskElement ::> harmAirEmbolism to targetRiskElement ::> riskBeforeAir;
492
+ connection : EstimatedFor connect risk ::> riskBeforeAir to riskElement ::> harmAirEmbolism;
468
493
  connection : AssessedAgainst connect risk ::> riskBeforeAir to riskMatrix ::> riskMatrix;
469
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> airDetectionControl to mitigatedElement ::> airEmbolismHazard; }
470
- connection : TracesRisk connect sourceRiskElement ::> airDetectionControl to targetRiskElement ::> riskAfterAir;
494
+ connection : Mitigates connect control ::> airDetectionControl to mitigatedElement ::> airEmbolismHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
495
+ connection : ReducedBy connect residualRisk ::> riskAfterAir to control ::> airDetectionControl;
471
496
  connection : AssessedAgainst connect risk ::> riskAfterAir to riskMatrix ::> riskMatrix;
472
- connection : TracesRisk connect sourceRiskElement ::> residualEval to targetRiskElement ::> riskAfterAir;
497
+ connection : EvaluatedIn connect residualRisk ::> riskAfterAir to evaluation ::> residualEval;
473
498
  // HZ-004 misprogramming / wrong drug
474
499
  connection : TracesRisk connect sourceRiskElement ::> causeWrongPrescriptionEntered to targetRiskElement ::> wrongDoseHazard;
475
500
  connection : TracesRisk connect sourceRiskElement ::> causeWrongDoseUnits to targetRiskElement ::> wrongDoseHazard;
@@ -479,56 +504,56 @@ package memo_examples_gpca_pump_gpca_trace {
479
504
  connection : TracesRisk connect sourceRiskElement ::> wrongDoseHazard to targetRiskElement ::> seqMisprogram;
480
505
  connection : TracesRisk connect sourceRiskElement ::> seqMisprogram to targetRiskElement ::> hsWrongTherapy;
481
506
  connection : TracesRisk connect sourceRiskElement ::> hsWrongTherapy to targetRiskElement ::> harmRespiratoryDepression;
482
- connection : TracesRisk connect sourceRiskElement ::> hsWrongTherapy to targetRiskElement ::> riskBeforeWrongDose;
507
+ connection : EstimatedFor connect risk ::> riskBeforeWrongDose to riskElement ::> hsWrongTherapy;
483
508
  connection : AssessedAgainst connect risk ::> riskBeforeWrongDose to riskMatrix ::> riskMatrix;
484
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> drugLibraryControl to mitigatedElement ::> wrongDoseHazard; }
485
- connection : TracesRisk connect sourceRiskElement ::> drugLibraryControl to targetRiskElement ::> riskAfterWrongDose;
509
+ connection : Mitigates connect control ::> drugLibraryControl to mitigatedElement ::> wrongDoseHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
510
+ connection : ReducedBy connect residualRisk ::> riskAfterWrongDose to control ::> drugLibraryControl;
486
511
  connection : AssessedAgainst connect risk ::> riskAfterWrongDose to riskMatrix ::> riskMatrix;
487
- connection : TracesRisk connect sourceRiskElement ::> residualEval to targetRiskElement ::> riskAfterWrongDose;
512
+ connection : EvaluatedIn connect residualRisk ::> riskAfterWrongDose to evaluation ::> residualEval;
488
513
  // HZ-005 free flow
489
514
  connection : TracesRisk connect sourceRiskElement ::> causeSetDisengaged to targetRiskElement ::> freeFlowHazard;
490
515
  connection : TracesRisk connect sourceRiskElement ::> causeDoorOpenedDuringInfusion to targetRiskElement ::> freeFlowHazard;
491
516
  connection : TracesRisk connect sourceRiskElement ::> freeFlowHazard to targetRiskElement ::> seqFreeFlow;
492
517
  connection : TracesRisk connect sourceRiskElement ::> seqFreeFlow to targetRiskElement ::> hsFreeFlow;
493
518
  connection : TracesRisk connect sourceRiskElement ::> hsFreeFlow to targetRiskElement ::> harmRespiratoryDepression;
494
- connection : TracesRisk connect sourceRiskElement ::> hsFreeFlow to targetRiskElement ::> riskBeforeFreeFlow;
519
+ connection : EstimatedFor connect risk ::> riskBeforeFreeFlow to riskElement ::> hsFreeFlow;
495
520
  connection : AssessedAgainst connect risk ::> riskBeforeFreeFlow to riskMatrix ::> riskMatrix;
496
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> freeFlowValveControl to mitigatedElement ::> freeFlowHazard; }
497
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> doorInterlockControl to mitigatedElement ::> freeFlowHazard; }
498
- connection : TracesRisk connect sourceRiskElement ::> freeFlowValveControl to targetRiskElement ::> riskAfterFreeFlow;
521
+ connection : Mitigates connect control ::> freeFlowValveControl to mitigatedElement ::> freeFlowHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
522
+ connection : Mitigates connect control ::> doorInterlockControl to mitigatedElement ::> freeFlowHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
523
+ connection : ReducedBy connect residualRisk ::> riskAfterFreeFlow to control ::> freeFlowValveControl;
499
524
  connection : AssessedAgainst connect risk ::> riskAfterFreeFlow to riskMatrix ::> riskMatrix;
500
- connection : TracesRisk connect sourceRiskElement ::> residualEval to targetRiskElement ::> riskAfterFreeFlow;
525
+ connection : EvaluatedIn connect residualRisk ::> riskAfterFreeFlow to evaluation ::> residualEval;
501
526
  // HZ-006 reverse delivery (CriSys REQ 22; GIP HID 1.14)
502
527
  connection : TracesRisk connect sourceRiskElement ::> causeBleedBack to targetRiskElement ::> reverseDeliveryHazard;
503
528
  connection : TracesRisk connect sourceRiskElement ::> reverseDeliveryHazard to targetRiskElement ::> seqReverseDelivery;
504
529
  connection : TracesRisk connect sourceRiskElement ::> seqReverseDelivery to targetRiskElement ::> hsReverseFlow;
505
530
  connection : TracesRisk connect sourceRiskElement ::> hsReverseFlow to targetRiskElement ::> harmUntreatedPain;
506
- connection : TracesRisk connect sourceRiskElement ::> harmUntreatedPain to targetRiskElement ::> riskBeforeReverse;
531
+ connection : EstimatedFor connect risk ::> riskBeforeReverse to riskElement ::> harmUntreatedPain;
507
532
  connection : AssessedAgainst connect risk ::> riskBeforeReverse to riskMatrix ::> riskMatrix;
508
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> reverseDeliveryPauseControl to mitigatedElement ::> reverseDeliveryHazard; }
509
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> antiRefluxDesignControl to mitigatedElement ::> reverseDeliveryHazard; }
510
- connection : TracesRisk connect sourceRiskElement ::> reverseDeliveryPauseControl to targetRiskElement ::> riskAfterReverse;
533
+ connection : Mitigates connect control ::> reverseDeliveryPauseControl to mitigatedElement ::> reverseDeliveryHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
534
+ connection : Mitigates connect control ::> antiRefluxDesignControl to mitigatedElement ::> reverseDeliveryHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
535
+ connection : ReducedBy connect residualRisk ::> riskAfterReverse to control ::> reverseDeliveryPauseControl;
511
536
  connection : AssessedAgainst connect risk ::> riskAfterReverse to riskMatrix ::> riskMatrix;
512
- connection : TracesRisk connect sourceRiskElement ::> residualEval to targetRiskElement ::> riskAfterReverse;
537
+ connection : EvaluatedIn connect residualRisk ::> riskAfterReverse to evaluation ::> residualEval;
513
538
  // HZ-007 VTBI over-infusion (CriSys REQ 20/28; GIP use hazard 8.1)
514
539
  connection : TracesRisk connect sourceRiskElement ::> causeVtbiTooHigh to targetRiskElement ::> vtbiOverInfusionHazard;
515
540
  connection : TracesRisk connect sourceRiskElement ::> causeStaleDrugLibrary to targetRiskElement ::> vtbiOverInfusionHazard;
516
541
  connection : TracesRisk connect sourceRiskElement ::> vtbiOverInfusionHazard to targetRiskElement ::> seqVtbiExceeded;
517
542
  connection : TracesRisk connect sourceRiskElement ::> seqVtbiExceeded to targetRiskElement ::> hsVtbiExceeded;
518
543
  connection : TracesRisk connect sourceRiskElement ::> hsVtbiExceeded to targetRiskElement ::> harmRespiratoryDepression;
519
- connection : TracesRisk connect sourceRiskElement ::> harmRespiratoryDepression to targetRiskElement ::> riskBeforeVtbi;
544
+ connection : EstimatedFor connect risk ::> riskBeforeVtbi to riskElement ::> harmRespiratoryDepression;
520
545
  connection : AssessedAgainst connect risk ::> riskBeforeVtbi to riskMatrix ::> riskMatrix;
521
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> vtbiLimitPauseControl to mitigatedElement ::> vtbiOverInfusionHazard; }
522
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> infusionCompleteControl to mitigatedElement ::> vtbiOverInfusionHazard; }
523
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> drugLibraryControl to mitigatedElement ::> vtbiOverInfusionHazard; }
524
- connection : TracesRisk connect sourceRiskElement ::> vtbiLimitPauseControl to targetRiskElement ::> riskAfterVtbi;
546
+ connection : Mitigates connect control ::> vtbiLimitPauseControl to mitigatedElement ::> vtbiOverInfusionHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
547
+ connection : Mitigates connect control ::> infusionCompleteControl to mitigatedElement ::> vtbiOverInfusionHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
548
+ connection : Mitigates connect control ::> drugLibraryControl to mitigatedElement ::> vtbiOverInfusionHazard { attribute :>> mitigationKind = MitigationKind::hazard; }
549
+ connection : ReducedBy connect residualRisk ::> riskAfterVtbi to control ::> vtbiLimitPauseControl;
525
550
  connection : AssessedAgainst connect risk ::> riskAfterVtbi to riskMatrix ::> riskMatrix;
526
- connection : TracesRisk connect sourceRiskElement ::> residualEval to targetRiskElement ::> riskAfterVtbi;
551
+ connection : EvaluatedIn connect residualRisk ::> riskAfterVtbi to evaluation ::> residualEval;
527
552
  // Use errors feeding the risk chains (IEC 62366-1 §5.3)
528
- connection : TracesRisk connect sourceRiskElement ::> ueMisprogrammedRate to targetRiskElement ::> seqMisprogram;
529
- connection : TracesRisk connect sourceRiskElement ::> ueWrongDrugLoaded to targetRiskElement ::> seqMisprogram;
530
- connection : TracesRisk connect sourceRiskElement ::> ueBolusByProxy to targetRiskElement ::> causeFrequentBolus;
531
- connection : TracesRisk connect sourceRiskElement ::> ueAlarmDisregard to targetRiskElement ::> seqOcclusion;
553
+ connection : Causes connect cause ::> ueMisprogrammedRate to effect ::> seqMisprogram { attribute :>> causeKind = CauseKind::useErrorLeadsToHazard; }
554
+ connection : Causes connect cause ::> ueWrongDrugLoaded to effect ::> seqMisprogram { attribute :>> causeKind = CauseKind::useErrorLeadsToHazard; }
555
+ connection : Causes connect cause ::> ueBolusByProxy to effect ::> causeFrequentBolus { attribute :>> causeKind = CauseKind::useErrorLeadsToHazard; }
556
+ connection : Causes connect cause ::> ueAlarmDisregard to effect ::> seqOcclusion { attribute :>> causeKind = CauseKind::useErrorLeadsToHazard; }
532
557
 
533
558
  // ── FMEA and fault tree integration ─────────────────────────
534
559
  // Was `AnalyzedBy`: a zero-attribute edge from an element to the
@@ -539,23 +564,23 @@ package memo_examples_gpca_pump_gpca_trace {
539
564
  connection : HasFailureMode connect element ::> occlusionSensor to failureMode ::> fmOcclusionDrift;
540
565
  connection : HasFailureMode connect element ::> bolusButton to failureMode ::> fmStuckBolusButton;
541
566
  connection : HasFailureMode connect element ::> batteryPack to failureMode ::> fmBatteryEarlyDepletion;
542
- connection : Causes { attribute :>> causeKind = CauseKind::failureCausesEffect; connect cause ::> fmMotorRunaway to effect ::> feOverdose; }
543
- connection : Causes { attribute :>> causeKind = CauseKind::failureCausesEffect; connect cause ::> fmStuckBolusButton to effect ::> feOverdose; }
544
- connection : Causes { attribute :>> causeKind = CauseKind::failureCausesEffect; connect cause ::> fmAirSensorSilent to effect ::> feAirDelivered; }
545
- connection : Causes { attribute :>> causeKind = CauseKind::failureCausesEffect; connect cause ::> fmOcclusionDrift to effect ::> feTherapyInterrupted; }
546
- connection : Causes { attribute :>> causeKind = CauseKind::failureCausedBy; connect cause ::> fcMotorDriverFault to effect ::> fmMotorRunaway; }
547
- connection : Causes { attribute :>> causeKind = CauseKind::failureCausedBy; connect cause ::> fcTransducerAging to effect ::> fmAirSensorSilent; }
548
- connection : Causes { attribute :>> causeKind = CauseKind::failureCausedBy; connect cause ::> fcPendantAbuse to effect ::> fmStuckBolusButton; }
567
+ connection : Causes connect cause ::> fmMotorRunaway to effect ::> feOverdose { attribute :>> causeKind = CauseKind::failureCausesEffect; }
568
+ connection : Causes connect cause ::> fmStuckBolusButton to effect ::> feOverdose { attribute :>> causeKind = CauseKind::failureCausesEffect; }
569
+ connection : Causes connect cause ::> fmAirSensorSilent to effect ::> feAirDelivered { attribute :>> causeKind = CauseKind::failureCausesEffect; }
570
+ connection : Causes connect cause ::> fmOcclusionDrift to effect ::> feTherapyInterrupted { attribute :>> causeKind = CauseKind::failureCausesEffect; }
571
+ connection : Causes connect cause ::> fcMotorDriverFault to effect ::> fmMotorRunaway { attribute :>> causeKind = CauseKind::failureCausedBy; }
572
+ connection : Causes connect cause ::> fcTransducerAging to effect ::> fmAirSensorSilent { attribute :>> causeKind = CauseKind::failureCausedBy; }
573
+ connection : Causes connect cause ::> fcPendantAbuse to effect ::> fmStuckBolusButton { attribute :>> causeKind = CauseKind::failureCausedBy; }
549
574
  connection : DetectedBy connect failureMode ::> fmMotorRunaway to detectionMethod ::> dmFlowCrossCheck;
550
575
  connection : DetectedBy connect failureMode ::> fmAirSensorSilent to detectionMethod ::> dmPostSensorCheck;
551
576
  connection : DetectedBy connect failureMode ::> fmStuckBolusButton to detectionMethod ::> dmStuckInputMonitor;
552
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::fmeaAction; connect control ::> fmeaActionAirSensor to mitigatedElement ::> fmAirSensorSilent; }
553
- connection : Causes { attribute :>> causeKind = CauseKind::contributesToHazard; connect cause ::> fmMotorRunaway to effect ::> overdoseHazard; }
554
- connection : Causes { attribute :>> causeKind = CauseKind::contributesToHazard; connect cause ::> fmStuckBolusButton to effect ::> overdoseHazard; }
555
- connection : Causes { attribute :>> causeKind = CauseKind::contributesToHazard; connect cause ::> fmAirSensorSilent to effect ::> airEmbolismHazard; }
556
- connection : Causes { attribute :>> causeKind = CauseKind::contributesToHazard; connect cause ::> fmOcclusionDrift to effect ::> underdoseHazard; }
557
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::failureMode; connect control ::> flowCrossCheckControl to mitigatedElement ::> fmMotorRunaway; }
558
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::failureMode; connect control ::> lockoutControl to mitigatedElement ::> fmStuckBolusButton; }
577
+ connection : Mitigates connect control ::> fmeaActionAirSensor to mitigatedElement ::> fmAirSensorSilent { attribute :>> mitigationKind = MitigationKind::fmeaAction; }
578
+ connection : Causes connect cause ::> fmMotorRunaway to effect ::> overdoseHazard { attribute :>> causeKind = CauseKind::contributesToHazard; }
579
+ connection : Causes connect cause ::> fmStuckBolusButton to effect ::> overdoseHazard { attribute :>> causeKind = CauseKind::contributesToHazard; }
580
+ connection : Causes connect cause ::> fmAirSensorSilent to effect ::> airEmbolismHazard { attribute :>> causeKind = CauseKind::contributesToHazard; }
581
+ connection : Causes connect cause ::> fmOcclusionDrift to effect ::> underdoseHazard { attribute :>> causeKind = CauseKind::contributesToHazard; }
582
+ connection : Mitigates connect control ::> flowCrossCheckControl to mitigatedElement ::> fmMotorRunaway { attribute :>> mitigationKind = MitigationKind::failureMode; }
583
+ connection : Mitigates connect control ::> lockoutControl to mitigatedElement ::> fmStuckBolusButton { attribute :>> mitigationKind = MitigationKind::failureMode; }
559
584
  connection : InputToGate connect input ::> fteMotorRunaway to gate ::> ftgMotorAnd;
560
585
  connection : InputToGate connect input ::> fteCrossCheckFails to gate ::> ftgMotorAnd;
561
586
  connection : InputToGate connect input ::> fteLockoutFault to gate ::> ftgBolusAnd;
@@ -563,15 +588,15 @@ package memo_examples_gpca_pump_gpca_trace {
563
588
  connection : InputToGate connect input ::> ftgMotorAnd to gate ::> ftgOverdoseOr;
564
589
  connection : InputToGate connect input ::> ftgBolusAnd to gate ::> ftgOverdoseOr;
565
590
  connection : ProducesEvent connect gate ::> ftgOverdoseOr to eventElement ::> fteOverdoseTop;
566
- connection : Causes { attribute :>> causeKind = CauseKind::leadsToHazard; connect cause ::> fteOverdoseTop to effect ::> overdoseHazard; }
567
- connection : Causes { attribute :>> causeKind = CauseKind::originatesFrom; connect cause ::> pumpMotorAssembly to effect ::> fteMotorRunaway; }
568
- connection : Causes { attribute :>> causeKind = CauseKind::originatesFrom; connect cause ::> bolusButton to effect ::> fteStuckButtonUndetected; }
591
+ connection : Causes connect cause ::> fteOverdoseTop to effect ::> overdoseHazard { attribute :>> causeKind = CauseKind::leadsToHazard; }
592
+ connection : Causes connect cause ::> pumpMotorAssembly to effect ::> fteMotorRunaway { attribute :>> causeKind = CauseKind::originatesFrom; }
593
+ connection : Causes connect cause ::> bolusButton to effect ::> fteStuckButtonUndetected { attribute :>> causeKind = CauseKind::originatesFrom; }
569
594
  connection : ContainsEvent connect cutSet ::> mcsMotorPath to eventElement ::> fteMotorRunaway;
570
595
  connection : ContainsEvent connect cutSet ::> mcsMotorPath to eventElement ::> fteCrossCheckFails;
571
596
  connection : ContainsEvent connect cutSet ::> mcsBolusPath to eventElement ::> fteLockoutFault;
572
597
  connection : ContainsEvent connect cutSet ::> mcsBolusPath to eventElement ::> fteStuckButtonUndetected;
573
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::cutSet; connect control ::> flowCrossCheckControl to mitigatedElement ::> mcsMotorPath; }
574
- connection : Mitigates { attribute :>> mitigationKind = MitigationKind::cutSet; connect control ::> lockoutControl to mitigatedElement ::> mcsBolusPath; }
598
+ connection : Mitigates connect control ::> flowCrossCheckControl to mitigatedElement ::> mcsMotorPath { attribute :>> mitigationKind = MitigationKind::cutSet; }
599
+ connection : Mitigates connect control ::> lockoutControl to mitigatedElement ::> mcsBolusPath { attribute :>> mitigationKind = MitigationKind::cutSet; }
575
600
 
576
601
  // ── Verification coverage (IEC 62304 §5.7) ──────────────────
577
602
 
@@ -639,6 +664,12 @@ package memo_examples_gpca_pump_gpca_trace {
639
664
  connection : TestedByUsability connect uiElementOrTask ::> ueWrongDrugLoaded to usabilityTest ::> valSummativeUsability;
640
665
  connection : TestedByUsability connect uiElementOrTask ::> ueAlarmDisregard to usabilityTest ::> valSummativeUsability;
641
666
  connection : TestedByUsability connect uiElementOrTask ::> oaProgram to usabilityTest ::> valSummativeUsability;
667
+ // VAL-002's acceptance criteria name UE-001..UE-004, and each of those is
668
+ // committed during one task (CommitsUseError, gpca_context). Only the
669
+ // programming task was linked; the other three are the same evaluation.
670
+ connection : TestedByUsability connect uiElementOrTask ::> oaRequestBolus to usabilityTest ::> valSummativeUsability;
671
+ connection : TestedByUsability connect uiElementOrTask ::> oaLoadReservoir to usabilityTest ::> valSummativeUsability;
672
+ connection : TestedByUsability connect uiElementOrTask ::> oaRespondAlarm to usabilityTest ::> valSummativeUsability;
642
673
 
643
674
  // ── Evidence production and document inclusion ──────────────
644
675
  connection : ProducesEvidence connect producer ::> vcLockout to producedEvidence ::> evidenceLockout;