@memoarchitect/ontology 0.7.0 → 0.8.24

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 (270) hide show
  1. package/README.md +4 -2
  2. package/examples/connected-patient-monitor/memo.package.yaml +3 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
  4. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
  5. package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
  6. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +8 -6
  7. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
  8. package/examples/functional-logical-physical/memo.package.yaml +3 -0
  9. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +6 -6
  10. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
  11. package/examples/gpca-pump/memo.package.yaml +3 -0
  12. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
  13. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
  14. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
  15. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
  16. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
  17. package/examples/gpca-pump/model/catalog/gpca_context.sysml +14 -3
  18. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +8 -5
  19. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
  20. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +97 -103
  21. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
  22. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
  23. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  24. package/examples/gpca-pump/model/catalog/gpca_system.sysml +17 -17
  25. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -334
  26. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
  27. package/examples/gpca-pump/model/catalog/project.sysml +5 -0
  28. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +2 -4
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +2 -4
  30. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +1 -4
  31. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +2 -5
  32. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +1 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +1 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +1 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -7
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +1 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +2 -4
  39. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +1 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +2 -4
  41. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +2 -4
  42. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +1 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -8
  44. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +1 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -6
  47. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
  48. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +1 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +2 -5
  50. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
  51. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +5 -6
  52. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -6
  53. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
  54. package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
  55. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +1 -1
  56. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
  57. package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
  58. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +4 -3
  59. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
  60. package/examples/multidimensional-layers/memo.package.yaml +3 -0
  61. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  62. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
  63. package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
  64. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
  65. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
  66. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
  67. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
  68. package/examples/reusable-instrument/memo.package.yaml +3 -0
  69. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +16 -23
  70. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
  71. package/examples/ros-mobile-robot/README.md +40 -0
  72. package/examples/ros-mobile-robot/memo.package.yaml +3 -0
  73. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  74. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  75. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  76. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +12 -0
  77. package/examples/software-only-medical-device/memo.package.yaml +3 -0
  78. package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
  79. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +12 -6
  80. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
  81. package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
  82. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +58 -75
  83. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
  84. package/examples/surgical-robot/memo.package.yaml +3 -0
  85. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
  86. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
  87. package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
  88. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -18
  89. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -11
  90. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +43 -68
  91. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +57 -68
  92. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +40 -70
  93. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +4 -8
  94. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +1 -20
  95. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +52 -84
  96. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +22 -33
  97. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +13 -10
  98. package/examples/temperature-alarm/memo.package.yaml +3 -0
  99. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -25
  100. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
  101. package/examples/ui-screen-regions/memo.package.yaml +3 -0
  102. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
  103. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
  104. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
  105. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
  106. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  107. package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
  108. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +2 -3
  109. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  110. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  111. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +1 -2
  112. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +1 -2
  113. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +1 -2
  114. package/extensions/LICENSES/MIT.txt +19 -0
  115. package/extensions/README.md +94 -0
  116. package/extensions/aadl/memo.package.yaml +18 -0
  117. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  118. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  119. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  120. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  121. package/extensions/cloud/memo.package.yaml +18 -0
  122. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  123. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  124. package/extensions/container/memo.package.yaml +18 -0
  125. package/extensions/container/src/container_extension.sysml +37 -0
  126. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  127. package/extensions/messaging/memo.package.yaml +18 -0
  128. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  129. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  130. package/extensions/ros/memo.package.yaml +18 -0
  131. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  132. package/extensions/ros/src/ros_extension.sysml +200 -0
  133. package/extensions/template/src/extension.sysml +37 -0
  134. package/memo.manifest.yaml +13 -2
  135. package/methodologies/default/memo.package.yaml +1 -1
  136. package/methodologies/gpca/memo.package.yaml +1 -1
  137. package/ontology/memo.package.yaml +1 -1
  138. package/package.json +5 -3
  139. package/profile/memo.package.yaml +1 -1
  140. package/src/architecture/decisions/memo_decisions.sysml +23 -2
  141. package/src/architecture/functional/behavior/memo_behavior.sysml +51 -23
  142. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  143. package/src/architecture/functional/functions/memo_functions.sysml +93 -36
  144. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +2 -2
  145. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
  146. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +40 -13
  147. package/src/architecture/implementation/ui/memo_ui.sysml +83 -43
  148. package/src/architecture/logical/interfaces/memo_interfaces.sysml +64 -12
  149. package/src/architecture/logical/structure/memo_logical_structure.sysml +26 -25
  150. package/src/architecture/operational/activities/memo_activities.sysml +27 -29
  151. package/src/architecture/operational/context/actors/memo_actors.sysml +8 -10
  152. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +16 -33
  153. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -17
  154. package/src/architecture/operational/scenarios/memo_scenarios.sysml +36 -84
  155. package/src/architecture/operational/structure/memo_operational.sysml +42 -13
  156. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -27
  157. package/src/architecture/operational/workflows/memo_workflows.sysml +45 -28
  158. package/src/architecture/realization/deployment/memo_deployment.sysml +115 -20
  159. package/src/architecture/realization/physical/memo_physical_architecture.sysml +29 -4
  160. package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
  161. package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
  162. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  163. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  164. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  165. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  166. package/src/artifacts/standards/iec_60812.sysml +51 -0
  167. package/src/artifacts/standards/iec_62304.sysml +210 -0
  168. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  169. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  170. package/src/artifacts/standards/iso_13485.sysml +113 -0
  171. package/src/artifacts/standards/iso_14971.sysml +94 -0
  172. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  173. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  174. package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
  175. package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
  176. package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
  177. package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
  178. package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
  179. package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
  180. package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
  181. package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
  182. package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
  183. package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
  184. package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
  185. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
  186. package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
  187. package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
  188. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
  189. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  190. package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
  191. package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
  192. package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
  193. package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
  194. package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
  195. package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
  196. package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
  197. package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
  198. package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
  199. package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
  200. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
  201. package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
  202. package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
  203. package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
  204. package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
  205. package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
  206. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  207. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  208. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  209. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  210. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +40 -21
  211. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  212. package/src/assurance/requirements/memo_requirements.sysml +7 -20
  213. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  214. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  215. package/src/assurance/safety_risk/memo_risk.sysml +90 -7
  216. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
  217. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  218. package/src/core/annotations/memo_annotations.sysml +25 -6
  219. package/src/core/common/memo_common.sysml +130 -21
  220. package/src/core/consistency_rules/consistency_rules.sysml +1 -1
  221. package/src/core/dimensions/dimensions.sysml +12 -0
  222. package/src/core/enumerations/memo_enumerations.sysml +60 -14
  223. package/src/core/relationships/memo_relationships.sysml +199 -196
  224. package/src/memo_namespaces.sysml +30 -0
  225. package/src/methodology/core/memo_core.sysml +24 -0
  226. package/src/methodology/profiles/memo_profiles.sysml +1 -1
  227. package/src/methodology/workflow/memo_workflow.sysml +5 -5
  228. package/src/rules/closure/closure_rules.sysml +20 -20
  229. package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
  230. package/src/rules/ontology/ontology_invariants.sysml +223 -11
  231. package/src/rules/quantitative/quantitative_rules.sysml +2 -2
  232. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +30 -30
  233. package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -3
  234. package/src/viewpoints/context/context_viewpoint.sysml +2 -3
  235. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +1 -2
  236. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -4
  237. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +46 -3
  238. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  239. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -3
  240. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -3
  241. package/src/viewpoints/logical/logical_viewpoint.sysml +1 -2
  242. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +1 -2
  243. package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
  244. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +2 -3
  245. package/src/viewpoints/physical/physical_viewpoint.sysml +1 -2
  246. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +1 -2
  247. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +1 -2
  248. package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
  249. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +1 -2
  250. package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
  251. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +1 -2
  252. package/src/viewpoints/software/software_viewpoint.sysml +1 -2
  253. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +1 -2
  254. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
  255. package/src/viewpoints/usability/usability_viewpoint.sysml +1 -2
  256. package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
  257. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -3
  258. package/templates/connected-device/memo.package.yaml +2 -0
  259. package/templates/default/memo.package.yaml +2 -0
  260. package/templates/infusion-pump/memo.package.yaml +2 -0
  261. package/templates/monitoring-device/memo.package.yaml +2 -0
  262. package/templates/samd/memo.package.yaml +2 -0
  263. package/examples/extensions/README.md +0 -16
  264. package/examples/extensions/template/src/extension.sysml +0 -15
  265. package/examples/gpca-pump/gpca-pump.kpar +0 -0
  266. /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
  267. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  268. /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
  269. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  270. /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
@@ -1,11 +1,17 @@
1
1
  package memo_examples_gpca_pump_gpca_architecture {
2
+ private import memo_examples_gpca_pump_gpca_requirements::*;
3
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirements_view::*;
2
4
  private import ScalarValues::*;
3
5
 
4
6
  private import memo_architecture_implementation_hardware_structure::*;
5
7
  private import memo_architecture_implementation_software_structure::*;
6
8
  private import memo_architecture_logical_structure::*;
9
+ private import memo_architecture_logical_interfaces::*;
10
+ private import memo_architecture_realization_physical::*;
7
11
  private import memo_core_relationships::*;
8
12
  private import memo_core_enumerations::*;
13
+ private import memo_core_common::*;
14
+ private import memo_core_dimensions::*;
9
15
 
10
16
  // ── Logical components ──────────────────────────────────────
11
17
  part lcTherapyControl : LogicalComponent {
@@ -44,6 +50,10 @@ package memo_examples_gpca_pump_gpca_architecture {
44
50
  attribute :>> safetyPartition = "supporting partition";
45
51
  }
46
52
 
53
+ // Native SysML message: the safety monitor's alarm notification is a flow
54
+ // between the two logical components, not an opaque InteractionMessage.
55
+ message alarmNotification of LogicalExchangeItem from lcSafetyMonitoring to lcOperatorInterface;
56
+
47
57
  // ── Device (UMN AADL architectural model) ───────────────────
48
58
  // The AADL top-level `GPCA_Device` system. GPCA_Device.Impl declares only
49
59
  // GPCA_HW_Sensors, GPCA_SW, and GPCA_HW_Actuators as subcomponents.
@@ -53,22 +63,226 @@ package memo_examples_gpca_pump_gpca_architecture {
53
63
  attribute :>> responsibility = "AADL device boundary containing the sensor wrapper, GPCA software, and actuator wrapper.";
54
64
  attribute :>> safetyRole = "device boundary carrying the intended use and the risk-control architecture";
55
65
  attribute :>> partNumber = "GPCA-DEV-001";
56
- }
57
66
 
58
- // ── Hardware: aggregates (UMN AADL architectural model) ─────
59
- part gpcaDeviceSensors : HardwareAssembly {
60
- attribute :>> id = "HW-001";
61
- attribute :>> name = "GPCA_HW_Sensors";
62
- attribute :>> responsibility = "Map inputs to software-visible signals.";
63
- attribute :>> safetyRole = "input acquisition";
64
- }
65
- part gpcaActuators : HardwareAssembly {
66
- attribute :>> id = "HW-002";
67
- attribute :>> name = "GPCA_HW_Actuators";
68
- attribute :>> responsibility = "Expose software outputs to physical outputs.";
69
- attribute :>> safetyRole = "actuation and operator output";
67
+ in port devOpCmdIn : PhysicalPort { attribute :>> id = "PORT-DEV-01"; attribute :>> name = "OP_CMD_IN"; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
68
+ in port devDbIn : PhysicalPort { attribute :>> id = "PORT-DEV-02"; attribute :>> name = "DB_IN"; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
69
+ in port devPresIn : PhysicalPort { attribute :>> id = "PORT-DEV-03"; attribute :>> name = "PRES_IN"; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
70
+ in port devPatientIn : PhysicalPort { attribute :>> id = "PORT-DEV-04"; attribute :>> name = "PATIENT_IN"; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
71
+ out port devGpcaOut : PhysicalPort { attribute :>> id = "PORT-DEV-05"; attribute :>> name = "GPCA_OUT"; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
72
+
73
+ part gpcaDeviceSensors : HardwareAssembly {
74
+ attribute :>> id = "HW-001";
75
+ attribute :>> name = "GPCA_HW_Sensors";
76
+ attribute :>> responsibility = "Map inputs to software-visible signals.";
77
+ attribute :>> safetyRole = "input acquisition";
78
+
79
+ in port snsOpCmdIn : PhysicalPort { attribute :>> id = "PORT-SNS-01"; attribute :>> name = "OP_CMD_IN"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
80
+ in port snsDbIn : PhysicalPort { attribute :>> id = "PORT-SNS-02"; attribute :>> name = "DB_IN"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
81
+ in port snsPresIn : PhysicalPort { attribute :>> id = "PORT-SNS-03"; attribute :>> name = "PRES_IN"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
82
+ in port snsPatientIn : PhysicalPort { attribute :>> id = "PORT-SNS-04"; attribute :>> name = "PATIENT_IN"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
83
+ out port snsOpCmdOut : PhysicalPort { attribute :>> id = "PORT-SNS-05"; attribute :>> name = "OP_CMD_OUT"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
84
+ out port snsPresOut : PhysicalPort { attribute :>> id = "PORT-SNS-06"; attribute :>> name = "PRES_OUT"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
85
+ out port snsPatientOut : PhysicalPort { attribute :>> id = "PORT-SNS-07"; attribute :>> name = "PATIENT_OUT"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
86
+ out port snsSensorOut : PhysicalPort { attribute :>> id = "PORT-SNS-08"; attribute :>> name = "SENSOR_OUT"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
87
+ out port snsConstOut : PhysicalPort { attribute :>> id = "PORT-SNS-09"; attribute :>> name = "CONST_OUT"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
88
+ out port snsDbOut : PhysicalPort { attribute :>> id = "PORT-SNS-10"; attribute :>> name = "DB_OUT"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
89
+ }
90
+
91
+ part gpcaActuators : HardwareAssembly {
92
+ attribute :>> id = "HW-002";
93
+ attribute :>> name = "GPCA_HW_Actuators";
94
+ attribute :>> responsibility = "Expose software outputs to physical outputs.";
95
+ attribute :>> safetyRole = "actuation and operator output";
96
+
97
+ in port actGpcaSwIn : PhysicalPort { attribute :>> id = "PORT-ACT-01"; attribute :>> name = "GPCA_SW_IN"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; }
98
+ out port actGpcaOut : PhysicalPort { attribute :>> id = "PORT-ACT-02"; attribute :>> name = "GPCA_OUT"; attribute :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; }
99
+ }
100
+
101
+ part gpcaSoftware : SoftwareSystem {
102
+ attribute :>> id = "SWS-001";
103
+ attribute :>> name = "GPCA_Software";
104
+ attribute :>> version = "2.0";
105
+ attribute :>> lifecycleState = LifecycleStateKind::development;
106
+ attribute :>> safetyClass = SafetyClassKind::C;
107
+ attribute :>> complexity = ComplexityKind::high;
108
+ attribute :>> operatingSystem = "synchronous data-flow execution; AADL immediate port semantics (source specifies no timing)";
109
+
110
+ in port portOpCmdIn : SoftwarePort {
111
+ attribute :>> id = "PORT-01"; attribute :>> name = "OP_CMD_IN";
112
+ attribute :>> description = "Operator commands (System_Start/Stop, Infusion_Initiate/Inhibit, Notification_Cancel, Disable/Enable_Audio, DataConfig) from the data entry interface (I 2).";
113
+ attribute :>> portKind = InterfaceKind::control;
114
+ attribute :>> dataTypeName = "DATATYPES::Operator_Commands.Impl";
115
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)";
116
+ }
117
+ in port portPresIn : SoftwarePort {
118
+ attribute :>> id = "PORT-02"; attribute :>> name = "PRES_IN";
119
+ attribute :>> description = "Prescription data entry fields (I 1, 13 fields PatientID_prog..NumberMax_pbolus_prog).";
120
+ attribute :>> portKind = InterfaceKind::data;
121
+ attribute :>> dataTypeName = "DATATYPES::Prescription_Inputs.Impl";
122
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)";
123
+ }
124
+ in port portPatientIn : SoftwarePort {
125
+ attribute :>> id = "PORT-03"; attribute :>> name = "PATIENT_IN";
126
+ attribute :>> description = "Patient bolus request (I 4, BolusRequest_prog).";
127
+ attribute :>> portKind = InterfaceKind::userInteraction;
128
+ attribute :>> dataTypeName = "DATATYPES::Patient_Inputs.Impl";
129
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)";
130
+ }
131
+ in port portSensorIn : SoftwarePort {
132
+ attribute :>> id = "PORT-04"; attribute :>> name = "SENSOR_IN";
133
+ attribute :>> description = "Device sensor inputs (air-in-line, occlusion, door, reservoir, flow).";
134
+ attribute :>> portKind = InterfaceKind::digitalSignal;
135
+ attribute :>> dataTypeName = "DATATYPES::Device_Sensor_Inputs.Impl";
136
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)";
137
+ }
138
+ in port portConstIn : SoftwarePort {
139
+ attribute :>> id = "PORT-05"; attribute :>> name = "CONST_IN";
140
+ attribute :>> description = "Device configuration constants (App. A.4 values such as Empty_Reservoir, tolerances).";
141
+ attribute :>> portKind = InterfaceKind::data;
142
+ attribute :>> dataTypeName = "DATATYPES::Device_Configuration_Inputs.Impl";
143
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)";
144
+ }
145
+ in port portDbIn : SoftwarePort {
146
+ attribute :>> id = "PORT-06"; attribute :>> name = "DB_IN";
147
+ attribute :>> description = "Hospital pharmacy database safe values (I 9-I 11); realizes SI-005 HospitalPharmacyDatabaseInterface.";
148
+ attribute :>> portKind = InterfaceKind::data;
149
+ attribute :>> dataTypeName = "DATATYPES::Drug_Database_Inputs.Impl";
150
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)";
151
+ }
152
+ out port portGpcaSwOut : SoftwarePort {
153
+ attribute :>> id = "PORT-07"; attribute :>> name = "GPCA_SW_OUT";
154
+ attribute :>> description = "Aggregated software output vector (Current_System_Mode, Commanded_Flow_Rate, notifications, prescription echo, status).";
155
+ attribute :>> portKind = InterfaceKind::data;
156
+ attribute :>> dataTypeName = "DATATYPES::GPCA_SW_Outputs.Impl";
157
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)";
158
+ }
159
+
160
+ part tlm : SoftwareModule {
161
+ attribute :>> id = "SW-001";
162
+ attribute :>> name = "Top_Level_Mode";
163
+ attribute :>> responsibility = "Ensure system ON/OFF behavior and startup/shutdown checks.";
164
+ attribute :>> safetyClass = SafetyClassKind::C;
165
+ attribute :>> complexity = ComplexityKind::medium;
166
+
167
+ in port portTlmConstIn : SoftwarePort { attribute :>> id = "PORT-TLM-01"; attribute :>> name = "CONST_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; }
168
+ in port portTlmOpCmdIn : SoftwarePort { attribute :>> id = "PORT-TLM-02"; attribute :>> name = "OP_CMD_IN"; attribute :>> portKind = InterfaceKind::control; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; }
169
+ out port portTlmTlmModeOut : SoftwarePort { attribute :>> id = "PORT-TLM-03"; attribute :>> name = "TLM_MODE_OUT"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; }
170
+ }
171
+
172
+ part config : SoftwareModule {
173
+ attribute :>> id = "SW-002";
174
+ attribute :>> name = "Config";
175
+ attribute :>> responsibility = "Prescription entry, drug-library limit checking, confirmation, and persistent storage.";
176
+ attribute :>> safetyClass = SafetyClassKind::C;
177
+ attribute :>> complexity = ComplexityKind::high;
178
+
179
+ out port portConfigConfigOut : SoftwarePort { attribute :>> id = "PORT-CFG-01"; attribute :>> name = "CONFIG_OUT"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; }
180
+ in port portConfigConstIn : SoftwarePort { attribute :>> id = "PORT-CFG-02"; attribute :>> name = "CONST_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; }
181
+ in port portConfigDbIn : SoftwarePort { attribute :>> id = "PORT-CFG-03"; attribute :>> name = "DB_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; }
182
+ in port portConfigOpCmdIn : SoftwarePort { attribute :>> id = "PORT-CFG-04"; attribute :>> name = "OP_CMD_IN"; attribute :>> portKind = InterfaceKind::control; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; }
183
+ in port portConfigPresIn : SoftwarePort { attribute :>> id = "PORT-CFG-05"; attribute :>> name = "PRES_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; }
184
+ in port portConfigSysStatIn : SoftwarePort { attribute :>> id = "PORT-CFG-06"; attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; }
185
+ in port portConfigTlmModeIn : SoftwarePort { attribute :>> id = "PORT-CFG-07"; attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; }
186
+ }
187
+
188
+ part alarm : SoftwareModule {
189
+ attribute :>> id = "SW-003";
190
+ attribute :>> name = "Alarm";
191
+ attribute :>> responsibility = "Monitor and notify exceptional conditions.";
192
+ attribute :>> safetyClass = SafetyClassKind::C;
193
+ attribute :>> complexity = ComplexityKind::high;
194
+
195
+ out port portAlarmAlarmOut : SoftwarePort { attribute :>> id = "PORT-ALM-01"; attribute :>> name = "ALARM_OUT"; attribute :>> portKind = InterfaceKind::notification; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
196
+ in port portAlarmConfigIn : SoftwarePort { attribute :>> id = "PORT-ALM-02"; attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
197
+ in port portAlarmConstIn : SoftwarePort { attribute :>> id = "PORT-ALM-03"; attribute :>> name = "CONST_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
198
+ in port portAlarmDbIn : SoftwarePort { attribute :>> id = "PORT-ALM-04"; attribute :>> name = "DB_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
199
+ in port portAlarmImIn : SoftwarePort { attribute :>> id = "PORT-ALM-05"; attribute :>> name = "IM_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
200
+ in port portAlarmOpCmdIn : SoftwarePort { attribute :>> id = "PORT-ALM-06"; attribute :>> name = "OP_CMD_IN"; attribute :>> portKind = InterfaceKind::control; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
201
+ in port portAlarmSensorIn : SoftwarePort { attribute :>> id = "PORT-ALM-07"; attribute :>> name = "SENSOR_IN"; attribute :>> portKind = InterfaceKind::digitalSignal; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
202
+ in port portAlarmSysMonIn : SoftwarePort { attribute :>> id = "PORT-ALM-08"; attribute :>> name = "SYS_MON_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
203
+ in port portAlarmSysStatIn : SoftwarePort { attribute :>> id = "PORT-ALM-09"; attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
204
+ in port portAlarmTlmModeIn : SoftwarePort { attribute :>> id = "PORT-ALM-10"; attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; }
205
+ }
206
+
207
+ part logging : SoftwareModule {
208
+ attribute :>> id = "SW-004";
209
+ attribute :>> name = "Logging";
210
+ attribute :>> responsibility = "Append-only event log of doses, mode changes, alarms, and configuration changes.";
211
+ attribute :>> safetyClass = SafetyClassKind::B;
212
+ attribute :>> complexity = ComplexityKind::medium;
213
+
214
+ in port portLogAlarmIn : SoftwarePort { attribute :>> id = "PORT-LOG-01"; attribute :>> name = "ALARM_IN"; attribute :>> portKind = InterfaceKind::notification; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; }
215
+ in port portLogConfigIn : SoftwarePort { attribute :>> id = "PORT-LOG-02"; attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; }
216
+ in port portLogImIn : SoftwarePort { attribute :>> id = "PORT-LOG-03"; attribute :>> name = "IM_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; }
217
+ out port portLogLogOut : SoftwarePort { attribute :>> id = "PORT-LOG-04"; attribute :>> name = "LOG_OUT"; attribute :>> portKind = InterfaceKind::logging; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; }
218
+ in port portLogSysStatIn : SoftwarePort { attribute :>> id = "PORT-LOG-05"; attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; }
219
+ in port portLogTlmModeIn : SoftwarePort { attribute :>> id = "PORT-LOG-06"; attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; }
220
+ }
221
+
222
+ part infusionMgr : SoftwareModule {
223
+ attribute :>> id = "SW-005";
224
+ attribute :>> name = "Infusion_Manager";
225
+ attribute :>> responsibility = "Handle drug infusion commands and therapy parameters.";
226
+ attribute :>> safetyClass = SafetyClassKind::C;
227
+ attribute :>> complexity = ComplexityKind::high;
228
+
229
+ in port portImAlarmIn : SoftwarePort { attribute :>> id = "PORT-IM-01"; attribute :>> name = "ALARM_IN"; attribute :>> portKind = InterfaceKind::notification; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; }
230
+ in port portImConfigIn : SoftwarePort { attribute :>> id = "PORT-IM-02"; attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; }
231
+ out port portImImOut : SoftwarePort { attribute :>> id = "PORT-IM-03"; attribute :>> name = "IM_OUT"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; }
232
+ in port portImOpCmdIn : SoftwarePort { attribute :>> id = "PORT-IM-04"; attribute :>> name = "OP_CMD_IN"; attribute :>> portKind = InterfaceKind::control; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; }
233
+ in port portImPatientIn : SoftwarePort { attribute :>> id = "PORT-IM-05"; attribute :>> name = "PATIENT_IN"; attribute :>> portKind = InterfaceKind::userInteraction; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; }
234
+ in port portImSysStatIn : SoftwarePort { attribute :>> id = "PORT-IM-06"; attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; }
235
+ in port portImTlmModeIn : SoftwarePort { attribute :>> id = "PORT-IM-07"; attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; }
236
+ }
237
+
238
+ part systemMonitor : SoftwareModule {
239
+ attribute :>> id = "SW-006";
240
+ attribute :>> name = "System_Monitor";
241
+ attribute :>> responsibility = "POST, periodic CPU/RAM/ROM checks, watchdog kicking, and battery supervision.";
242
+ attribute :>> safetyClass = SafetyClassKind::C;
243
+ attribute :>> complexity = ComplexityKind::medium;
244
+
245
+ out port portSysMonSysMonOut : SoftwarePort { attribute :>> id = "PORT-MON-01"; attribute :>> name = "SYS_MON_OUT"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_MON)"; }
246
+ in port portSysMonTlmModeIn : SoftwarePort { attribute :>> id = "PORT-MON-02"; attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_MON)"; }
247
+ }
248
+
249
+ part systemStatus : SoftwareModule {
250
+ attribute :>> id = "SW-007";
251
+ attribute :>> name = "System_Status";
252
+ attribute :>> responsibility = "Maintain the shared system status vector (Reservoir_Volume, Volume_Infused, Reservoir_Empty, In_Therapy) consumed by Alarm, Config, and Infusion_Manager.";
253
+ attribute :>> safetyClass = SafetyClassKind::C;
254
+ attribute :>> complexity = ComplexityKind::medium;
255
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/System_Status.aadl";
256
+
257
+ in port portSysStatConfigIn : SoftwarePort { attribute :>> id = "PORT-STAT-01"; attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; }
258
+ in port portSysStatConstIn : SoftwarePort { attribute :>> id = "PORT-STAT-02"; attribute :>> name = "CONST_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; }
259
+ in port portSysStatImIn : SoftwarePort { attribute :>> id = "PORT-STAT-03"; attribute :>> name = "IM_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; }
260
+ in port portSysStatSensorIn : SoftwarePort { attribute :>> id = "PORT-STAT-04"; attribute :>> name = "SENSOR_IN"; attribute :>> portKind = InterfaceKind::digitalSignal; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; }
261
+ out port portSysStatSysStatOut : SoftwarePort { attribute :>> id = "PORT-STAT-05"; attribute :>> name = "SYS_STAT_OUT"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; }
262
+ in port portSysStatTlmModeIn : SoftwarePort { attribute :>> id = "PORT-STAT-06"; attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; }
263
+ }
264
+
265
+ part outputBus : SoftwareModule {
266
+ attribute :>> id = "SW-008";
267
+ attribute :>> name = "OutputBus";
268
+ attribute :>> responsibility = "Aggregate all subsystem outputs into the single GPCA_SW_OUT output vector (mode, commanded flow rate, notifications, prescription echo, status).";
269
+ attribute :>> safetyClass = SafetyClassKind::C;
270
+ attribute :>> complexity = ComplexityKind::low;
271
+ attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/OutputBus.aadl";
272
+
273
+ in port portOutputAlarmIn : SoftwarePort { attribute :>> id = "PORT-OUT-01"; attribute :>> name = "ALARM_IN"; attribute :>> portKind = InterfaceKind::notification; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; }
274
+ in port portOutputConfigIn : SoftwarePort { attribute :>> id = "PORT-OUT-02"; attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; }
275
+ out port portOutputGpcaSwOut : SoftwarePort { attribute :>> id = "PORT-OUT-03"; attribute :>> name = "GPCA_SW_OUT"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; }
276
+ in port portOutputImIn : SoftwarePort { attribute :>> id = "PORT-OUT-04"; attribute :>> name = "IM_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; }
277
+ in port portOutputLogIn : SoftwarePort { attribute :>> id = "PORT-OUT-05"; attribute :>> name = "LOG_IN"; attribute :>> portKind = InterfaceKind::logging; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; }
278
+ in port portOutputSysMonIn : SoftwarePort { attribute :>> id = "PORT-OUT-06"; attribute :>> name = "SYS_MON_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; }
279
+ in port portOutputSysStatIn : SoftwarePort { attribute :>> id = "PORT-OUT-07"; attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; }
280
+ in port portOutputTlmModeIn : SoftwarePort { attribute :>> id = "PORT-OUT-08"; attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; }
281
+ }
282
+ }
70
283
  }
71
284
 
285
+ // ── Hardware: aggregates (UMN AADL architectural model) ─────
72
286
  // ── Hardware: sensor suite ──────────────────────────────────
73
287
  part airInLineSensor : HardwareAssembly {
74
288
  attribute :>> id = "HW-006";
@@ -191,92 +405,120 @@ package memo_examples_gpca_pump_gpca_architecture {
191
405
  attribute :>> partNumber = "GPCA-MECH-ENC";
192
406
  }
193
407
 
194
- // ── Software system and components (UMN behavioral model) ───
195
- part gpcaSoftware : SoftwareSystem {
196
- attribute :>> id = "SWS-001";
197
- attribute :>> name = "GPCA_Software";
198
- attribute :>> version = "2.0";
199
- attribute :>> lifecycleState = LifecycleStateKind::development;
200
- attribute :>> safetyClass = SafetyClassKind::C;
201
- attribute :>> complexity = ComplexityKind::high;
202
- attribute :>> operatingSystem = "synchronous data-flow execution; AADL immediate port semantics (source specifies no timing)";
203
- }
204
- part tlm : SoftwareModule {
205
- attribute :>> id = "SW-001";
206
- attribute :>> name = "Top_Level_Mode";
207
- attribute :>> responsibility = "Ensure system ON/OFF behavior and startup/shutdown checks.";
208
- attribute :>> safetyClass = SafetyClassKind::C;
209
- attribute :>> complexity = ComplexityKind::medium;
210
- }
211
- part config : SoftwareModule {
212
- attribute :>> id = "SW-002";
213
- attribute :>> name = "Config";
214
- attribute :>> responsibility = "Prescription entry, drug-library limit checking, confirmation, and persistent storage.";
215
- attribute :>> safetyClass = SafetyClassKind::C;
216
- attribute :>> complexity = ComplexityKind::high;
217
- }
218
- part alarm : SoftwareModule {
219
- attribute :>> id = "SW-003";
220
- attribute :>> name = "Alarm";
221
- attribute :>> responsibility = "Monitor and notify exceptional conditions.";
222
- attribute :>> safetyClass = SafetyClassKind::C;
223
- attribute :>> complexity = ComplexityKind::high;
224
- }
225
- part logging : SoftwareModule {
226
- attribute :>> id = "SW-004";
227
- attribute :>> name = "Logging";
228
- attribute :>> responsibility = "Append-only event log of doses, mode changes, alarms, and configuration changes.";
229
- attribute :>> safetyClass = SafetyClassKind::B;
230
- attribute :>> complexity = ComplexityKind::medium;
231
- }
232
- part infusionMgr : SoftwareModule {
233
- attribute :>> id = "SW-005";
234
- attribute :>> name = "Infusion_Manager";
235
- attribute :>> responsibility = "Handle drug infusion commands and therapy parameters.";
236
- attribute :>> safetyClass = SafetyClassKind::C;
237
- attribute :>> complexity = ComplexityKind::high;
238
- }
239
- part systemMonitor : SoftwareModule {
240
- attribute :>> id = "SW-006";
241
- attribute :>> name = "System_Monitor";
242
- attribute :>> responsibility = "POST, periodic CPU/RAM/ROM checks, watchdog kicking, and battery supervision.";
243
- attribute :>> safetyClass = SafetyClassKind::C;
244
- attribute :>> complexity = ComplexityKind::medium;
245
- }
246
- part systemStatus : SoftwareModule {
247
- attribute :>> id = "SW-007";
248
- attribute :>> name = "System_Status";
249
- attribute :>> responsibility = "Maintain the shared system status vector (Reservoir_Volume, Volume_Infused, Reservoir_Empty, In_Therapy) consumed by Alarm, Config, and Infusion_Manager.";
250
- attribute :>> safetyClass = SafetyClassKind::C;
251
- attribute :>> complexity = ComplexityKind::medium;
252
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/System_Status.aadl";
253
- }
254
- part outputBus : SoftwareModule {
255
- attribute :>> id = "SW-008";
256
- attribute :>> name = "OutputBus";
257
- attribute :>> responsibility = "Aggregate all subsystem outputs into the single GPCA_SW_OUT output vector (mode, commanded flow rate, notifications, prescription echo, status).";
258
- attribute :>> safetyClass = SafetyClassKind::C;
259
- attribute :>> complexity = ComplexityKind::low;
260
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/OutputBus.aadl";
261
- }
262
-
263
408
  // ── Structural composition ──────────────────────────────────
264
409
  // Device level (GPCA_Device.aadl): the assemblies and the software system
265
- // the device is built from.
266
- connection : Composes connect parent ::> gpcaDevice to child ::> gpcaDeviceSensors;
267
- connection : Composes connect parent ::> gpcaDevice to child ::> gpcaActuators;
268
- connection : Composes connect parent ::> gpcaDevice to child ::> gpcaSoftware;
269
-
270
- // The physical parts below are MEMO design extensions derived from system
271
- // requirements and hazard analysis, not subcomponents in the published
272
- // AADL packages. They intentionally remain outside this AADL composition
273
- // until a project authority defines their interfaces and ownership.
274
- connection : Composes connect parent ::> gpcaSoftware to child ::> tlm;
275
- connection : Composes connect parent ::> gpcaSoftware to child ::> config;
276
- connection : Composes connect parent ::> gpcaSoftware to child ::> alarm;
277
- connection : Composes connect parent ::> gpcaSoftware to child ::> logging;
278
- connection : Composes connect parent ::> gpcaSoftware to child ::> infusionMgr;
279
- connection : Composes connect parent ::> gpcaSoftware to child ::> systemMonitor;
280
- connection : Composes connect parent ::> gpcaSoftware to child ::> systemStatus;
281
- connection : Composes connect parent ::> gpcaSoftware to child ::> outputBus;
410
+ // are nested directly in gpcaDevice's body above, native containment
411
+ // instead of a Composes edge. The software modules (MEMO design
412
+ // extensions derived from system requirements and hazard analysis, not
413
+ // subcomponents in the published AADL packages) are nested the same way,
414
+ // inside gpcaSoftware's own body.
415
+ satisfy reqCs01 by gpcaDevice.gpcaSoftware.tlm;
416
+ satisfy reqCs01 by gpcaDevice.gpcaSoftware.outputBus;
417
+ satisfy reqCs18 by gpcaDevice.gpcaSoftware.systemStatus;
418
+ satisfy reqCs23 by gpcaDevice.gpcaSoftware.systemStatus;
419
+ satisfy reqCs25 by gpcaDevice.gpcaSoftware.infusionMgr;
420
+ satisfy reqCs19 by gpcaDevice.gpcaSoftware.alarm;
421
+ satisfy reqDrugLibraryLimits by gpcaDevice.gpcaSoftware.config;
422
+ satisfy reqCs09 by gpcaDevice.gpcaSoftware.config;
423
+ satisfy reqPowerLossRetention by gpcaDevice.gpcaSoftware.config;
424
+ satisfy reqPost by gpcaDevice.gpcaSoftware.systemMonitor;
425
+ satisfy reqWatchdogSafeState by gpcaDevice.gpcaSoftware.systemMonitor;
426
+ satisfy reqWatchdogSafeState by controllerBoard;
427
+ satisfy reqCs59 by gpcaDevice.gpcaSoftware.alarm;
428
+ satisfy reqCs72 by audibleAlarm;
429
+ satisfy reqCs73 by gpcaDevice.gpcaSoftware.alarm;
430
+ satisfy reqCs75 by gpcaDevice.gpcaSoftware.alarm;
431
+ satisfy reqCs21 by airInLineSensor;
432
+ satisfy reqCs21 by gpcaDevice.gpcaSoftware.alarm;
433
+ satisfy reqOcclusion by occlusionSensor;
434
+ satisfy reqOcclusion by gpcaDevice.gpcaSoftware.alarm;
435
+ satisfy reqCs23 by reservoirSensor;
436
+ satisfy reqCs23 by gpcaDevice.gpcaSoftware.infusionMgr;
437
+ satisfy reqDoorOpen by doorSensor;
438
+ satisfy reqDoorOpen by gpcaDevice.gpcaSoftware.infusionMgr;
439
+ satisfy reqMaxHourlyDose by gpcaDevice.gpcaSoftware.infusionMgr;
440
+ satisfy reqStuckButton by gpcaDevice.gpcaSoftware.infusionMgr;
441
+ satisfy reqFlowCrossCheck by flowSensor;
442
+ satisfy reqFlowCrossCheck by gpcaDevice.gpcaSoftware.alarm;
443
+ satisfy reqCs77 by gpcaDevice.gpcaSoftware.logging;
444
+ satisfy reqCs78 by gpcaDevice.gpcaSoftware.logging;
445
+ satisfy reqEventLogging by gpcaDevice.gpcaSoftware.logging;
446
+ satisfy reqCs02 by gpcaDevice.gpcaSoftware.tlm;
447
+ satisfy reqCs03 by gpcaDevice.gpcaSoftware.infusionMgr;
448
+ satisfy reqCs04 by gpcaDevice.gpcaSoftware.tlm;
449
+ satisfy reqCs05 by gpcaDevice.gpcaSoftware.tlm;
450
+ satisfy reqCs06 by gpcaDevice.gpcaSoftware.infusionMgr;
451
+ satisfy reqCs07 by gpcaDevice.gpcaSoftware.tlm;
452
+ satisfy reqCs08 by gpcaDevice.gpcaSoftware.config;
453
+ satisfy reqCs10 by gpcaDevice.gpcaSoftware.alarm;
454
+ satisfy reqCs11 by gpcaDevice.gpcaSoftware.logging;
455
+ satisfy reqCs12 by gpcaDevice.gpcaSoftware.tlm;
456
+ satisfy reqCs13 by gpcaDevice.gpcaSoftware.tlm;
457
+ satisfy reqCs14 by gpcaDevice.gpcaSoftware.infusionMgr;
458
+ satisfy reqCs15 by gpcaDevice.gpcaSoftware.alarm;
459
+ satisfy reqCs16 by gpcaDevice.gpcaSoftware.infusionMgr;
460
+ satisfy reqCs17 by gpcaDevice.gpcaSoftware.alarm;
461
+ satisfy reqCs18 by gpcaDevice.gpcaSoftware.alarm;
462
+ satisfy reqCs20 by gpcaDevice.gpcaSoftware.alarm;
463
+ satisfy reqCs22 by gpcaDevice.gpcaSoftware.alarm;
464
+ satisfy reqCs24 by gpcaDevice.gpcaSoftware.infusionMgr;
465
+ satisfy reqCs26 by gpcaDevice.gpcaSoftware.alarm;
466
+ satisfy reqCs27 by gpcaDevice.gpcaSoftware.alarm;
467
+ satisfy reqCs28 by gpcaDevice.gpcaSoftware.tlm;
468
+ satisfy reqCs29 by gpcaDevice.gpcaSoftware.tlm;
469
+ satisfy reqCs30 by gpcaDevice.gpcaSoftware.tlm;
470
+ satisfy reqCs31 by gpcaDevice.gpcaSoftware.tlm;
471
+ satisfy reqCs32 by gpcaDevice.gpcaSoftware.tlm;
472
+ satisfy reqCs33 by gpcaDevice.gpcaSoftware.tlm;
473
+ satisfy reqCs34 by gpcaDevice.gpcaSoftware.tlm;
474
+ satisfy reqCs35 by gpcaDevice.gpcaSoftware.tlm;
475
+ satisfy reqCs36 by gpcaDevice.gpcaSoftware.tlm;
476
+ satisfy reqCs37 by gpcaDevice.gpcaSoftware.tlm;
477
+ satisfy reqCs38 by gpcaDevice.gpcaSoftware.tlm;
478
+ satisfy reqCs39 by gpcaDevice.gpcaSoftware.tlm;
479
+ satisfy reqCs40 by gpcaDevice.gpcaSoftware.infusionMgr;
480
+ satisfy reqCs41 by gpcaDevice.gpcaSoftware.infusionMgr;
481
+ satisfy reqCs42 by gpcaDevice.gpcaSoftware.infusionMgr;
482
+ satisfy reqCs43 by gpcaDevice.gpcaSoftware.infusionMgr;
483
+ satisfy reqCs44 by gpcaDevice.gpcaSoftware.alarm;
484
+ satisfy reqCs45 by gpcaDevice.gpcaSoftware.tlm;
485
+ satisfy reqCs46 by gpcaDevice.gpcaSoftware.tlm;
486
+ satisfy reqCs47 by gpcaDevice.gpcaSoftware.tlm;
487
+ satisfy reqCs48 by gpcaDevice.gpcaSoftware.config;
488
+ satisfy reqCs49 by gpcaDevice.gpcaSoftware.config;
489
+ satisfy reqCs50 by gpcaDevice.gpcaSoftware.config;
490
+ satisfy reqCs51 by gpcaDevice.gpcaSoftware.config;
491
+ satisfy reqCs52 by gpcaDevice.gpcaSoftware.config;
492
+ satisfy reqCs53 by gpcaDevice.gpcaSoftware.config;
493
+ satisfy reqCs54 by gpcaDevice.gpcaSoftware.config;
494
+ satisfy reqCs55 by gpcaDevice.gpcaSoftware.config;
495
+ satisfy reqCs56 by gpcaDevice.gpcaSoftware.config;
496
+ satisfy reqCs57 by gpcaDevice.gpcaSoftware.config;
497
+ satisfy reqCs58 by gpcaDevice.gpcaSoftware.config;
498
+ satisfy reqCs60 by gpcaDevice.gpcaSoftware.alarm;
499
+ satisfy reqCs61 by gpcaDevice.gpcaSoftware.alarm;
500
+ satisfy reqCs62 by gpcaDevice.gpcaSoftware.alarm;
501
+ satisfy reqCs63 by gpcaDevice.gpcaSoftware.alarm;
502
+ satisfy reqCs64 by gpcaDevice.gpcaSoftware.alarm;
503
+ satisfy reqCs65 by gpcaDevice.gpcaSoftware.alarm;
504
+ satisfy reqCs66 by gpcaDevice.gpcaSoftware.alarm;
505
+ satisfy reqCs67 by gpcaDevice.gpcaSoftware.alarm;
506
+ satisfy reqCs68 by gpcaDevice.gpcaSoftware.alarm;
507
+ satisfy reqCs69 by gpcaDevice.gpcaSoftware.alarm;
508
+ satisfy reqCs70 by gpcaDevice.gpcaSoftware.alarm;
509
+ satisfy reqCs71 by gpcaDevice.gpcaSoftware.alarm;
510
+ satisfy reqCs74 by gpcaDevice.gpcaSoftware.alarm;
511
+ satisfy reqCs76 by gpcaDevice.gpcaSoftware.alarm;
512
+ satisfy reqCs79 by gpcaDevice.gpcaSoftware.logging;
513
+ satisfy reqCs80 by gpcaDevice.gpcaSoftware.logging;
514
+ satisfy reqCs81 by gpcaDevice.gpcaSoftware.logging;
515
+ satisfy reqCs82 by gpcaDevice.gpcaSoftware.config;
516
+ satisfy reqCs83 by enclosure;
517
+ satisfy reqCs84 by enclosure;
518
+ satisfy reqCs85 by gpcaDevice.gpcaSoftware.logging;
519
+ satisfy reqCs86 by gpcaDevice.gpcaSoftware.config;
520
+ satisfy reqPumpAccuracy by pumpMotorAssembly;
521
+ satisfy reqAlarmLoudness by audibleAlarm;
522
+ satisfy reqBatteryBackup by batteryPack;
523
+ satisfy reqFreeFlowPrevention by antiFreeFlowValve;
282
524
  }
@@ -3,6 +3,9 @@ package memo_examples_gpca_pump_gpca_behavior_actions {
3
3
  private import memo_examples_gpca_pump_gpca_architecture::*;
4
4
 
5
5
  private import memo_architecture_functional_behavior::*;
6
+ private import memo_core_common::*;
7
+ private import memo_core_relationships::*;
8
+ private import memo_examples_gpca_pump_gpca_behavior_subsystems::*;
6
9
  private import memo_architecture_logical_interfaces::*;
7
10
  private import memo_core_enumerations::*;
8
11
 
@@ -33,27 +36,27 @@ package memo_examples_gpca_pump_gpca_behavior_actions {
33
36
  attribute :>> itemKind = InterfaceItemKind::'event';
34
37
  }
35
38
 
36
- action def AcquireSensorData {
39
+ action def AcquireSensorData :> FunctionalAction {
37
40
  out sensorStatus : SensorStatusVector;
38
41
  }
39
- action def EvaluateAlarmConditions {
42
+ action def EvaluateAlarmConditions :> FunctionalAction {
40
43
  in sensorStatus : SensorStatusVector;
41
44
  out alarmSignal : AlarmSignal;
42
45
  }
43
- action def EnforceDoseLimits {
46
+ action def EnforceDoseLimits :> FunctionalAction {
44
47
  in bolusRequest : BolusRequestSignal;
45
48
  out authorizedBolus : BolusRequestSignal;
46
49
  }
47
- action def ComputeFlowCommand {
50
+ action def ComputeFlowCommand :> FunctionalAction {
48
51
  in alarmSignal : AlarmSignal;
49
52
  in authorizedBolus : BolusRequestSignal;
50
53
  out flowCommand : FlowCommand;
51
54
  }
52
- action def ActuatePumpMotor {
55
+ action def ActuatePumpMotor :> FunctionalAction {
53
56
  in flowCommand : FlowCommand;
54
57
  out actuation : FlowCommand;
55
58
  }
56
- action def LogTherapyEvent {
59
+ action def LogTherapyEvent :> FunctionalAction {
57
60
  in actuation : FlowCommand;
58
61
  out eventRecord : TherapyEventRecord;
59
62
  }
@@ -83,10 +86,21 @@ package memo_examples_gpca_pump_gpca_behavior_actions {
83
86
  }
84
87
 
85
88
  // ── Swimlane allocation to the logical architecture ─────────
86
- allocate infusionDeliveryFlow.acquireSensors to gpcaDeviceSensors;
87
- allocate infusionDeliveryFlow.evaluateAlarms to alarm;
88
- allocate infusionDeliveryFlow.enforceLimits to infusionMgr;
89
- allocate infusionDeliveryFlow.computeFlow to infusionMgr;
89
+ allocate infusionDeliveryFlow.acquireSensors to gpcaDevice.gpcaDeviceSensors;
90
+ allocate infusionDeliveryFlow.evaluateAlarms to gpcaDevice.gpcaSoftware.alarm;
91
+ allocate infusionDeliveryFlow.enforceLimits to gpcaDevice.gpcaSoftware.infusionMgr;
92
+ allocate infusionDeliveryFlow.computeFlow to gpcaDevice.gpcaSoftware.infusionMgr;
90
93
  allocate infusionDeliveryFlow.actuateMotor to pumpMotorAssembly;
91
- allocate infusionDeliveryFlow.logEvent to logging;
94
+ allocate infusionDeliveryFlow.logEvent to gpcaDevice.gpcaSoftware.logging;
95
+
96
+ // ── Functional decomposition and component allocation ───────
97
+ // FUNC-001 "AcquireSensorData" is what the SYSTEM is answerable for.
98
+ // Decomposing it names who is answerable for each piece: the flowmeter for
99
+ // the flow rate, the air detector for air in line, the sensor subassembly
100
+ // for the aggregated vector — native nesting in gpca_behavior_subsystems.
101
+ // AllocatedTo carries the ownership, a different statement from
102
+ // containment, which is what CR-ONT-075 keeps apart.
103
+ allocate fnAcquireSensors.cfnMeasureFlowRate to flowSensor;
104
+ allocate fnAcquireSensors.cfnDetectAirInLine to airInLineSensor;
105
+ allocate fnAcquireSensors.cfnAggregateSensorStatus to gpcaDevice.gpcaDeviceSensors;
92
106
  }