@memoarchitect/ontology 0.13.2 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) 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 -357
  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 -90
  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 +459 -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 +5 -5
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +10 -13
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +11 -7
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +63 -8
  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 +25 -25
  128. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +6 -6
  129. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +15 -17
  130. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +21 -21
  131. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +7 -7
  132. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +5 -5
  133. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +14 -14
  134. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +16 -17
  135. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +9 -9
  136. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +7 -14
  137. package/examples/sysml-diagram-samples/model/{catalog → methodology}/project.sysml +5 -5
  138. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
  139. package/examples/temperature-alarm/memo.identity.yaml +6 -0
  140. package/examples/temperature-alarm/memo.package.yaml +3 -1
  141. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
  142. package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
  143. package/examples/ui-screen-regions/memo.identity.yaml +33 -0
  144. package/examples/ui-screen-regions/memo.package.yaml +3 -1
  145. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
  146. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
  147. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
  148. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
  149. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
  150. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
  151. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
  152. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
  153. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
  154. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
  155. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
  156. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  159. package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
  160. package/extensions/README.md +65 -16
  161. package/extensions/aadl/memo.package.yaml +1 -1
  162. package/extensions/aadl/src/aadl_extension.sysml +5 -2
  163. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
  164. package/extensions/clinical/memo.package.yaml +1 -1
  165. package/extensions/clinical/src/clinical_extension.sysml +2 -0
  166. package/extensions/cloud/memo.package.yaml +1 -1
  167. package/extensions/container/memo.package.yaml +1 -1
  168. package/extensions/messaging/memo.package.yaml +1 -1
  169. package/extensions/messaging/src/messaging_extension.sysml +2 -2
  170. package/extensions/ros/memo.package.yaml +1 -1
  171. package/extensions/ros/src/ros_extension.sysml +25 -24
  172. package/extensions/template/memo.package.yaml +1 -1
  173. package/extensions/template/model/extension.sysml +25 -0
  174. package/memo.manifest.yaml +1 -7
  175. package/methodologies/default/memo.package.yaml +1 -1
  176. package/methodologies/gpca/memo.package.yaml +1 -1
  177. package/ontology/memo.package.yaml +1 -1
  178. package/package.json +6 -4
  179. package/profile/memo.package.yaml +1 -1
  180. package/src/architecture/decisions/memo_decisions.sysml +9 -2
  181. package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
  182. package/src/architecture/functional/functions/memo_functions.sysml +45 -31
  183. package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
  184. package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
  185. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
  186. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
  187. package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
  188. package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
  189. package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
  190. package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
  191. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
  192. package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
  193. package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
  194. package/src/architecture/operational/structure/memo_operational.sysml +5 -2
  195. package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
  196. package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
  197. package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
  198. package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
  199. package/src/architecture/variability/memo_variability.sysml +87 -0
  200. package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
  201. package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
  202. package/src/artifacts/standards/cfr_21_820.sysml +12 -24
  203. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
  204. package/src/artifacts/standards/iec_60601_1.sysml +16 -32
  205. package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
  206. package/src/artifacts/standards/iec_60812.sysml +4 -8
  207. package/src/artifacts/standards/iec_62304.sysml +607 -47
  208. package/src/artifacts/standards/iec_62366_1.sysml +12 -24
  209. package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
  210. package/src/artifacts/standards/iso_13485.sysml +12 -24
  211. package/src/artifacts/standards/iso_14971.sysml +118 -20
  212. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
  213. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
  214. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
  215. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
  216. package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
  217. package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
  218. package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
  219. package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
  220. package/src/artifacts/templates/dhf/system/sad.md +1 -1
  221. package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
  222. package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
  223. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
  224. package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
  225. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
  226. package/src/assurance/safety_risk/memo_risk.sysml +39 -1
  227. package/src/core/common/memo_common.sysml +61 -68
  228. package/src/core/enumerations/memo_enumerations.sysml +93 -9
  229. package/src/core/relationships/memo_relationships.sysml +17 -11
  230. package/src/core/relationships/memo_workspace_membership.sysml +284 -0
  231. package/src/core/semantics/semantics.sysml +58 -0
  232. package/src/core/terminology/terminology.sysml +7 -0
  233. package/src/memo_namespaces.sysml +6 -0
  234. package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
  235. package/src/methodology/core/memo_core.sysml +85 -29
  236. package/src/methodology/profiles/memo_profiles.sysml +217 -61
  237. package/src/methodology/workflow/memo_workflow.sysml +28 -0
  238. package/src/rules/closure/closure_rules.sysml +250 -4
  239. package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
  240. package/src/rules/ontology/ontology_invariants.sysml +288 -48
  241. package/src/rules/quantitative/quantitative_rules.sysml +4 -0
  242. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
  243. package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -3
  244. package/src/viewpoints/context/context_viewpoint.sysml +2 -3
  245. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
  246. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -3
  247. package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
  248. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +0 -4
  249. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  250. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
  251. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
  252. package/src/viewpoints/logical/logical_viewpoint.sysml +2 -3
  253. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
  254. package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
  255. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
  256. package/src/viewpoints/physical/physical_viewpoint.sysml +2 -3
  257. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
  258. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
  259. package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
  260. package/src/viewpoints/requirements/requirements_viewpoint.sysml +2 -3
  261. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
  262. package/src/viewpoints/risk/risk_viewpoint.sysml +2 -3
  263. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
  264. package/src/viewpoints/software/software_viewpoint.sysml +2 -3
  265. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
  266. package/src/viewpoints/stakeholders_concerns/memo_stakeholders_concerns.sysml +11 -29
  267. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
  268. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
  269. package/src/viewpoints/usability/usability_viewpoint.sysml +2 -3
  270. package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
  271. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
  272. package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
  273. package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
  274. package/templates/default/memo.package.yaml +6 -1
  275. package/templates/default/model/catalog/architecture/system.sysml +7 -3
  276. package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
  277. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
  278. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
  279. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
  280. package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
  281. package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
  282. package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
  283. package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
  284. package/extensions/container/src/methodology/container_methodology.sysml +0 -19
  285. package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
  286. package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
  287. package/extensions/template/src/extension.sysml +0 -39
  288. package/templates/connected-device/memo.package.yaml +0 -13
  289. package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
  290. package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
  291. package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
  292. package/templates/connected-device/model/catalog/project.sysml +0 -30
  293. package/templates/connected-device/package.json +0 -8
  294. package/templates/connected-device/syside.toml +0 -13
  295. package/templates/infusion-pump/memo.package.yaml +0 -13
  296. package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
  297. package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
  298. package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
  299. package/templates/infusion-pump/model/catalog/project.sysml +0 -30
  300. package/templates/infusion-pump/package.json +0 -8
  301. package/templates/infusion-pump/syside.toml +0 -13
  302. package/templates/monitoring-device/memo.package.yaml +0 -13
  303. package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
  304. package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
  305. package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
  306. package/templates/monitoring-device/model/catalog/project.sysml +0 -30
  307. package/templates/monitoring-device/package.json +0 -8
  308. package/templates/monitoring-device/syside.toml +0 -13
  309. package/templates/samd/memo.package.yaml +0 -13
  310. package/templates/samd/model/catalog/architecture/system.sysml +0 -5
  311. package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
  312. package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
  313. package/templates/samd/model/catalog/project.sysml +0 -30
  314. package/templates/samd/package.json +0 -8
  315. package/templates/samd/syside.toml +0 -13
@@ -7,326 +7,331 @@ package memo_examples_gpca_pump_gpca_architecture {
7
7
  private import memo_architecture_logical_structure::*;
8
8
  private import memo_architecture_logical_interfaces::*;
9
9
  private import memo_architecture_realization_physical::*;
10
+ private import memo_architecture_realization_deployment::*;
10
11
  private import memo_core_relationships::*;
11
12
  private import memo_core_enumerations::*;
12
13
  private import memo_core_common::*;
13
14
  private import memo_core_dimensions::*;
14
15
 
15
16
  private import memo_core_common::MemoIdentity;
16
- // ── Logical components ──────────────────────────────────────
17
- part lcTherapyControl : LogicalComponent {
18
- @MemoIdentity { :>> providedId = "LC-001"; }
19
- attribute :>> name = "TherapyControlSubsystem";
20
- attribute :>> responsibility = "Owns therapy state, prescription execution, and dose limiting.";
21
- attribute :>> decompositionLevel = "subsystem";
22
- attribute :>> safetyPartition = "safety-critical partition";
23
- }
24
- part lcSafetyMonitoring : LogicalComponent {
25
- @MemoIdentity { :>> providedId = "LC-002"; }
26
- attribute :>> name = "SafetyMonitoringSubsystem";
27
- attribute :>> responsibility = "Detects exceptional conditions and drives the pump to a safe state.";
28
- attribute :>> decompositionLevel = "subsystem";
29
- attribute :>> safetyPartition = "safety-critical partition";
30
- }
31
- part lcOperatorInterface : LogicalComponent {
32
- @MemoIdentity { :>> providedId = "LC-003"; }
33
- attribute :>> name = "OperatorInterfaceSubsystem";
34
- attribute :>> responsibility = "Prescription entry, status display, and alarm annunciation to users.";
35
- attribute :>> decompositionLevel = "subsystem";
36
- attribute :>> safetyPartition = "interference-free from therapy control";
37
- }
38
- part lcDrugDelivery : LogicalComponent {
39
- @MemoIdentity { :>> providedId = "LC-004"; }
40
- attribute :>> name = "DrugDeliverySubsystem";
41
- attribute :>> responsibility = "Fluid path: reservoir, tubing, pump mechanism, and delivery sensors.";
42
- attribute :>> decompositionLevel = "subsystem";
43
- attribute :>> safetyPartition = "safety-critical partition";
17
+ part def GpcaPumpSystem specializes memo_architecture_logical_structure::System {
18
+ attribute :>> systemBoundaryDescription = "The general-purpose infusion pump: its logical decomposition; the device hardware and software realize it.";
19
+ // ── Logical components ──────────────────────────────────────
20
+ part lcTherapyControl : LogicalComponent {
21
+ @MemoIdentity { :>> providedId = "LC-001"; :>> label = "TherapyControlSubsystem"; }
22
+ attribute :>> responsibility = "Owns therapy state, prescription execution, and dose limiting.";
23
+ attribute :>> decompositionLevel = "subsystem";
24
+ attribute :>> safetyPartition = "safety-critical partition";
25
+ }
26
+ part lcSafetyMonitoring : LogicalComponent {
27
+ @MemoIdentity { :>> providedId = "LC-002"; :>> label = "SafetyMonitoringSubsystem"; }
28
+ attribute :>> responsibility = "Detects exceptional conditions and drives the pump to a safe state.";
29
+ attribute :>> decompositionLevel = "subsystem";
30
+ attribute :>> safetyPartition = "safety-critical partition";
31
+ }
32
+ part lcOperatorInterface : LogicalComponent {
33
+ @MemoIdentity { :>> providedId = "LC-003"; :>> label = "OperatorInterfaceSubsystem"; }
34
+ attribute :>> responsibility = "Prescription entry, status display, and alarm annunciation to users.";
35
+ attribute :>> decompositionLevel = "subsystem";
36
+ attribute :>> safetyPartition = "interference-free from therapy control";
37
+ }
38
+ part lcDrugDelivery : LogicalComponent {
39
+ @MemoIdentity { :>> providedId = "LC-004"; :>> label = "DrugDeliverySubsystem"; }
40
+ attribute :>> responsibility = "Fluid path: reservoir, tubing, pump mechanism, and delivery sensors.";
41
+ attribute :>> decompositionLevel = "subsystem";
42
+ attribute :>> safetyPartition = "safety-critical partition";
43
+ }
44
+ part lcPowerSubsystem : LogicalComponent {
45
+ @MemoIdentity { :>> providedId = "LC-005"; :>> label = "PowerSubsystem"; }
46
+ attribute :>> responsibility = "Mains and battery power management with depletion warning.";
47
+ attribute :>> decompositionLevel = "subsystem";
48
+ attribute :>> safetyPartition = "supporting partition";
49
+ }
50
+
51
+ // Native SysML message: the safety monitor's alarm notification is a flow
52
+ // between the two logical components, not an opaque InteractionMessage.
53
+ message alarmNotification of LogicalExchangeItem from lcSafetyMonitoring to lcOperatorInterface;
44
54
  }
45
- part lcPowerSubsystem : LogicalComponent {
46
- @MemoIdentity { :>> providedId = "LC-005"; }
47
- attribute :>> name = "PowerSubsystem";
48
- attribute :>> responsibility = "Mains and battery power management with depletion warning.";
49
- attribute :>> decompositionLevel = "subsystem";
50
- attribute :>> safetyPartition = "supporting partition";
55
+
56
+ part gpcaPump : GpcaPumpSystem {
57
+ @MemoIdentity { :>> providedId = "SYS-001"; :>> label = "GPCA Infusion Pump"; }
51
58
  }
52
59
 
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;
60
+ // The logical architecture is realized by the product architecture, as a whole: the pump is
61
+ // realized by the device boundary (the AADL GPCA_Device) and by the software deployed onto it
62
+ // (GPCA_SW). Logical and product structures stay separate; this allocation joins them.
63
+ allocation deviceRealizesPump : RealizedBy allocate gpcaPump to gpcaDevice;
64
+ allocation softwareRealizesPump : RealizedBy allocate gpcaPump to gpcaSoftware;
56
65
 
57
66
  // ── Device (UMN AADL architectural model) ───────────────────
58
67
  // The AADL top-level `GPCA_Device` system. GPCA_Device.Impl declares only
59
- // GPCA_HW_Sensors, GPCA_SW, and GPCA_HW_Actuators as subcomponents.
68
+ // GPCA_HW_Sensors, GPCA_SW, and GPCA_HW_Actuators as subcomponents; the two
69
+ // hardware wrappers are nested here and GPCA_SW is deployed onto it (see
70
+ // gpcaSoftware below).
60
71
  part gpcaDevice : PhysicalAssembly {
61
72
  @MemoIdentity { :>> providedId = "HW-000"; }
62
- attribute :>> name = "GPCA_Device";
63
- attribute :>> responsibility = "AADL device boundary containing the sensor wrapper, GPCA software, and actuator wrapper.";
73
+ attribute :>> responsibility = "AADL device boundary containing the sensor and actuator wrappers; the GPCA software is deployed onto it.";
64
74
  attribute :>> safetyRole = "device boundary carrying the intended use and the risk-control architecture";
65
75
  attribute :>> partNumber = "GPCA-DEV-001";
66
76
 
67
- in port devOpCmdIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-01"; } attribute :>> name = "OP_CMD_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
68
- in port devDbIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-02"; } attribute :>> name = "DB_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
69
- in port devPresIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-03"; } attribute :>> name = "PRES_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
70
- in port devPatientIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-04"; } attribute :>> name = "PATIENT_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
71
- out port devGpcaOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-05"; } attribute :>> name = "GPCA_OUT"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
77
+ in port devOpCmdIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-01"; :>> label = "OP_CMD_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
78
+ in port devDbIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-02"; :>> label = "DB_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
79
+ in port devPresIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-03"; :>> label = "PRES_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
80
+ in port devPatientIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-04"; :>> label = "PATIENT_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
81
+ out port devGpcaOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-DEV-05"; :>> label = "GPCA_OUT"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_Device.aadl"; } }
72
82
 
73
83
  part gpcaDeviceSensors : HardwareAssembly {
74
- @MemoIdentity { :>> providedId = "HW-001"; }
75
- attribute :>> name = "GPCA_HW_Sensors";
84
+ @MemoIdentity { :>> providedId = "HW-001"; :>> label = "GPCA_HW_Sensors"; }
76
85
  attribute :>> responsibility = "Map inputs to software-visible signals.";
77
86
  attribute :>> safetyRole = "input acquisition";
78
87
 
79
- in port snsOpCmdIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-01"; } attribute :>> name = "OP_CMD_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
80
- in port snsDbIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-02"; } attribute :>> name = "DB_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
81
- in port snsPresIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-03"; } attribute :>> name = "PRES_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
82
- in port snsPatientIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-04"; } attribute :>> name = "PATIENT_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
83
- out port snsOpCmdOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-05"; } attribute :>> name = "OP_CMD_OUT"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
84
- out port snsPresOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-06"; } attribute :>> name = "PRES_OUT"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
85
- out port snsPatientOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-07"; } attribute :>> name = "PATIENT_OUT"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
86
- out port snsSensorOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-08"; } attribute :>> name = "SENSOR_OUT"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
87
- out port snsConstOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-09"; } attribute :>> name = "CONST_OUT"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
88
- out port snsDbOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-10"; } attribute :>> name = "DB_OUT"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
88
+ in port snsOpCmdIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-01"; :>> label = "OP_CMD_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
89
+ in port snsDbIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-02"; :>> label = "DB_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
90
+ in port snsPresIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-03"; :>> label = "PRES_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
91
+ in port snsPatientIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-04"; :>> label = "PATIENT_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
92
+ out port snsOpCmdOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-05"; :>> label = "OP_CMD_OUT"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
93
+ out port snsPresOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-06"; :>> label = "PRES_OUT"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
94
+ out port snsPatientOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-07"; :>> label = "PATIENT_OUT"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
95
+ out port snsSensorOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-08"; :>> label = "SENSOR_OUT"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
96
+ out port snsConstOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-09"; :>> label = "CONST_OUT"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
97
+ out port snsDbOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-SNS-10"; :>> label = "DB_OUT"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; } }
89
98
  }
90
99
 
91
100
  part gpcaActuators : HardwareAssembly {
92
- @MemoIdentity { :>> providedId = "HW-002"; }
93
- attribute :>> name = "GPCA_HW_Actuators";
101
+ @MemoIdentity { :>> providedId = "HW-002"; :>> label = "GPCA_HW_Actuators"; }
94
102
  attribute :>> responsibility = "Expose software outputs to physical outputs.";
95
103
  attribute :>> safetyRole = "actuation and operator output";
96
104
 
97
- in port actGpcaSwIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-ACT-01"; } attribute :>> name = "GPCA_SW_IN"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; } }
98
- out port actGpcaOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-ACT-02"; } attribute :>> name = "GPCA_OUT"; @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; } }
105
+ in port actGpcaSwIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-ACT-01"; :>> label = "GPCA_SW_IN"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; } }
106
+ out port actGpcaOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-ACT-02"; :>> label = "GPCA_OUT"; } @MemoIdentity { :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; } }
99
107
  }
108
+ }
100
109
 
101
- part gpcaSoftware : SoftwareSystem {
102
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
116
- }
117
- in port portPresIn : SoftwarePort {
118
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
123
- }
124
- in port portPatientIn : SoftwarePort {
125
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
130
- }
131
- in port portSensorIn : SoftwarePort {
132
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
137
- }
138
- in port portConstIn : SoftwarePort {
139
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
144
- }
145
- in port portDbIn : SoftwarePort {
146
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
151
- }
152
- out port portGpcaSwOut : SoftwarePort {
153
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
158
- }
159
-
160
- part tlm : SoftwareModule {
161
- @MemoIdentity { :>> providedId = "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 { @MemoIdentity { :>> providedId = "PORT-TLM-01"; } attribute :>> name = "CONST_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; } }
168
- in port portTlmOpCmdIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-TLM-02"; } attribute :>> name = "OP_CMD_IN"; attribute :>> portKind = InterfaceKind::control; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; } }
169
- out port portTlmTlmModeOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-TLM-03"; } attribute :>> name = "TLM_MODE_OUT"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; } }
170
- }
110
+ // ── Software (UMN AADL architectural model) ─────────────────
111
+ // AADL's GPCA_Device.Impl lists GPCA_SW as a subcomponent beside the
112
+ // sensor and actuator wrappers. MEMO does not nest it there: gpcaDevice is
113
+ // a PhysicalAssembly, and software on hardware is DEPLOYMENT, which
114
+ // gpcaSoftwareDeployment (gpca_trace) records: the firmware image deploys
115
+ // to mainController, which controllerBoard hosts. A
116
+ // physical assembly containing the software system says the same thing a
117
+ // second time as containment, which CR-ONT-079 rejects. The AADL port
118
+ // wiring is unchanged: the sensor-to-software and software-to-actuator
119
+ // flows were always written at package level.
120
+ part gpcaSoftware : SoftwareSystem {
121
+ @MemoIdentity { :>> providedId = "SWS-001"; }
122
+ attribute :>> version = "2.0";
123
+ attribute :>> lifecycleState = LifecycleStateKind::development;
124
+ attribute :>> safetyClass = SafetyClassKind::C;
125
+ attribute :>> complexity = ComplexityKind::high;
126
+ attribute :>> operatingSystem = "synchronous data-flow execution; AADL immediate port semantics (source specifies no timing)";
171
127
 
172
- part config : SoftwareModule {
173
- @MemoIdentity { :>> providedId = "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 { @MemoIdentity { :>> providedId = "PORT-CFG-01"; } attribute :>> name = "CONFIG_OUT"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
180
- in port portConfigConstIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-02"; } attribute :>> name = "CONST_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
181
- in port portConfigDbIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-03"; } attribute :>> name = "DB_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
182
- in port portConfigOpCmdIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-04"; } attribute :>> name = "OP_CMD_IN"; attribute :>> portKind = InterfaceKind::control; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
183
- in port portConfigPresIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-05"; } attribute :>> name = "PRES_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
184
- in port portConfigSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-06"; } attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
185
- in port portConfigTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-07"; } attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
128
+ in port portOpCmdIn : SoftwarePort {
129
+ @MemoIdentity { :>> providedId = "PORT-01"; :>> label = "OP_CMD_IN"; }
130
+ doc /* Operator commands (System_Start/Stop, Infusion_Initiate/Inhibit, Notification_Cancel, Disable/Enable_Audio, DataConfig) from the data entry interface (I 2). */
131
+ attribute :>> portKind = InterfaceKind::control;
132
+ attribute :>> dataTypeName = "DATATYPES::Operator_Commands.Impl";
133
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
186
134
  }
187
-
188
- part alarm : SoftwareModule {
189
- @MemoIdentity { :>> providedId = "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 { @MemoIdentity { :>> providedId = "PORT-ALM-01"; } attribute :>> name = "ALARM_OUT"; attribute :>> portKind = InterfaceKind::notification; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
196
- in port portAlarmConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-02"; } attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
197
- in port portAlarmConstIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-03"; } attribute :>> name = "CONST_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
198
- in port portAlarmDbIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-04"; } attribute :>> name = "DB_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
199
- in port portAlarmImIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-05"; } attribute :>> name = "IM_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
200
- in port portAlarmOpCmdIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-06"; } attribute :>> name = "OP_CMD_IN"; attribute :>> portKind = InterfaceKind::control; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
201
- in port portAlarmSensorIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-07"; } attribute :>> name = "SENSOR_IN"; attribute :>> portKind = InterfaceKind::digitalSignal; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
202
- in port portAlarmSysMonIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-08"; } attribute :>> name = "SYS_MON_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
203
- in port portAlarmSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-09"; } attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
204
- in port portAlarmTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-10"; } attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
135
+ in port portPresIn : SoftwarePort {
136
+ @MemoIdentity { :>> providedId = "PORT-02"; :>> label = "PRES_IN"; }
137
+ doc /* Prescription data entry fields (I 1, 13 fields PatientID_prog..NumberMax_pbolus_prog). */
138
+ attribute :>> portKind = InterfaceKind::data;
139
+ attribute :>> dataTypeName = "DATATYPES::Prescription_Inputs.Impl";
140
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
205
141
  }
206
-
207
- part logging : SoftwareModule {
208
- @MemoIdentity { :>> providedId = "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 { @MemoIdentity { :>> providedId = "PORT-LOG-01"; } attribute :>> name = "ALARM_IN"; attribute :>> portKind = InterfaceKind::notification; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
215
- in port portLogConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-02"; } attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
216
- in port portLogImIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-03"; } attribute :>> name = "IM_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
217
- out port portLogLogOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-04"; } attribute :>> name = "LOG_OUT"; attribute :>> portKind = InterfaceKind::logging; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
218
- in port portLogSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-05"; } attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
219
- in port portLogTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-06"; } attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
142
+ in port portPatientIn : SoftwarePort {
143
+ @MemoIdentity { :>> providedId = "PORT-03"; :>> label = "PATIENT_IN"; }
144
+ doc /* Patient bolus request (I 4, BolusRequest_prog). */
145
+ attribute :>> portKind = InterfaceKind::userInteraction;
146
+ attribute :>> dataTypeName = "DATATYPES::Patient_Inputs.Impl";
147
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
220
148
  }
221
-
222
- part infusionMgr : SoftwareModule {
223
- @MemoIdentity { :>> providedId = "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 { @MemoIdentity { :>> providedId = "PORT-IM-01"; } attribute :>> name = "ALARM_IN"; attribute :>> portKind = InterfaceKind::notification; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
230
- in port portImConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-02"; } attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
231
- out port portImImOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-03"; } attribute :>> name = "IM_OUT"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
232
- in port portImOpCmdIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-04"; } attribute :>> name = "OP_CMD_IN"; attribute :>> portKind = InterfaceKind::control; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
233
- in port portImPatientIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-05"; } attribute :>> name = "PATIENT_IN"; attribute :>> portKind = InterfaceKind::userInteraction; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
234
- in port portImSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-06"; } attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
235
- in port portImTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-07"; } attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
149
+ in port portSensorIn : SoftwarePort {
150
+ @MemoIdentity { :>> providedId = "PORT-04"; :>> label = "SENSOR_IN"; }
151
+ doc /* Device sensor inputs (air-in-line, occlusion, door, reservoir, flow). */
152
+ attribute :>> portKind = InterfaceKind::digitalSignal;
153
+ attribute :>> dataTypeName = "DATATYPES::Device_Sensor_Inputs.Impl";
154
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
155
+ }
156
+ in port portConstIn : SoftwarePort {
157
+ @MemoIdentity { :>> providedId = "PORT-05"; :>> label = "CONST_IN"; }
158
+ doc /* Device configuration constants (App. A.4 values such as Empty_Reservoir, tolerances). */
159
+ attribute :>> portKind = InterfaceKind::data;
160
+ attribute :>> dataTypeName = "DATATYPES::Device_Configuration_Inputs.Impl";
161
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
162
+ }
163
+ in port portDbIn : SoftwarePort {
164
+ @MemoIdentity { :>> providedId = "PORT-06"; :>> label = "DB_IN"; }
165
+ doc /* Hospital pharmacy database safe values (I 9-I 11); realizes SI-005 HospitalPharmacyDatabaseInterface. */
166
+ attribute :>> portKind = InterfaceKind::data;
167
+ attribute :>> dataTypeName = "DATATYPES::Drug_Database_Inputs.Impl";
168
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
169
+ }
170
+ out port portGpcaSwOut : SoftwarePort {
171
+ @MemoIdentity { :>> providedId = "PORT-07"; :>> label = "GPCA_SW_OUT"; }
172
+ doc /* Aggregated software output vector (Current_System_Mode, Commanded_Flow_Rate, notifications, prescription echo, status). */
173
+ attribute :>> portKind = InterfaceKind::data;
174
+ attribute :>> dataTypeName = "DATATYPES::GPCA_SW_Outputs.Impl";
175
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (GPCA_SW.Impl)"; }
236
176
  }
237
177
 
238
- part systemMonitor : SoftwareModule {
239
- @MemoIdentity { :>> providedId = "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;
178
+ part tlm : SoftwareModule {
179
+ @MemoIdentity { :>> providedId = "SW-001"; :>> label = "Top_Level_Mode"; }
180
+ attribute :>> responsibility = "Ensure system ON/OFF behavior and startup/shutdown checks.";
181
+ attribute :>> safetyClass = SafetyClassKind::C;
182
+ attribute :>> complexity = ComplexityKind::medium;
244
183
 
245
- out port portSysMonSysMonOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-MON-01"; } attribute :>> name = "SYS_MON_OUT"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_MON)"; } }
246
- in port portSysMonTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-MON-02"; } attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_MON)"; } }
247
- }
184
+ in port portTlmConstIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-TLM-01"; :>> label = "CONST_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; } }
185
+ in port portTlmOpCmdIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-TLM-02"; :>> label = "OP_CMD_IN"; } attribute :>> portKind = InterfaceKind::control; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; } }
186
+ out port portTlmTlmModeOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-TLM-03"; :>> label = "TLM_MODE_OUT"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (TLM)"; } }
187
+ }
248
188
 
249
- part systemStatus : SoftwareModule {
250
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/System_Status.aadl"; }
256
-
257
- in port portSysStatConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-01"; } attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
258
- in port portSysStatConstIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-02"; } attribute :>> name = "CONST_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
259
- in port portSysStatImIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-03"; } attribute :>> name = "IM_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
260
- in port portSysStatSensorIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-04"; } attribute :>> name = "SENSOR_IN"; attribute :>> portKind = InterfaceKind::digitalSignal; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
261
- out port portSysStatSysStatOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-05"; } attribute :>> name = "SYS_STAT_OUT"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
262
- in port portSysStatTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-06"; } attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
263
- }
189
+ part config : SoftwareModule {
190
+ @MemoIdentity { :>> providedId = "SW-002"; }
191
+ attribute :>> responsibility = "Prescription entry, drug-library limit checking, confirmation, and persistent storage.";
192
+ attribute :>> safetyClass = SafetyClassKind::C;
193
+ attribute :>> complexity = ComplexityKind::high;
264
194
 
265
- part outputBus : SoftwareModule {
266
- @MemoIdentity { :>> providedId = "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
- @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/OutputBus.aadl"; }
272
-
273
- in port portOutputAlarmIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-01"; } attribute :>> name = "ALARM_IN"; attribute :>> portKind = InterfaceKind::notification; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
274
- in port portOutputConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-02"; } attribute :>> name = "CONFIG_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
275
- out port portOutputGpcaSwOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-03"; } attribute :>> name = "GPCA_SW_OUT"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
276
- in port portOutputImIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-04"; } attribute :>> name = "IM_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
277
- in port portOutputLogIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-05"; } attribute :>> name = "LOG_IN"; attribute :>> portKind = InterfaceKind::logging; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
278
- in port portOutputSysMonIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-06"; } attribute :>> name = "SYS_MON_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
279
- in port portOutputSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-07"; } attribute :>> name = "SYS_STAT_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
280
- in port portOutputTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-08"; } attribute :>> name = "TLM_MODE_IN"; attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
281
- }
282
- }
195
+ out port portConfigConfigOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-01"; :>> label = "CONFIG_OUT"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
196
+ in port portConfigConstIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-02"; :>> label = "CONST_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
197
+ in port portConfigDbIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-03"; :>> label = "DB_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
198
+ in port portConfigOpCmdIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-04"; :>> label = "OP_CMD_IN"; } attribute :>> portKind = InterfaceKind::control; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
199
+ in port portConfigPresIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-05"; :>> label = "PRES_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
200
+ in port portConfigSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-06"; :>> label = "SYS_STAT_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
201
+ in port portConfigTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-CFG-07"; :>> label = "TLM_MODE_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (CONFIG)"; } }
202
+ }
203
+
204
+ part alarm : SoftwareModule {
205
+ @MemoIdentity { :>> providedId = "SW-003"; }
206
+ attribute :>> responsibility = "Monitor and notify exceptional conditions.";
207
+ attribute :>> safetyClass = SafetyClassKind::C;
208
+ attribute :>> complexity = ComplexityKind::high;
209
+
210
+ out port portAlarmAlarmOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-01"; :>> label = "ALARM_OUT"; } attribute :>> portKind = InterfaceKind::notification; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
211
+ in port portAlarmConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-02"; :>> label = "CONFIG_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
212
+ in port portAlarmConstIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-03"; :>> label = "CONST_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
213
+ in port portAlarmDbIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-04"; :>> label = "DB_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
214
+ in port portAlarmImIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-05"; :>> label = "IM_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
215
+ in port portAlarmOpCmdIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-06"; :>> label = "OP_CMD_IN"; } attribute :>> portKind = InterfaceKind::control; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
216
+ in port portAlarmSensorIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-07"; :>> label = "SENSOR_IN"; } attribute :>> portKind = InterfaceKind::digitalSignal; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
217
+ in port portAlarmSysMonIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-08"; :>> label = "SYS_MON_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
218
+ in port portAlarmSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-09"; :>> label = "SYS_STAT_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
219
+ in port portAlarmTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-ALM-10"; :>> label = "TLM_MODE_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (ALARM)"; } }
220
+ }
221
+
222
+ part logging : SoftwareModule {
223
+ @MemoIdentity { :>> providedId = "SW-004"; }
224
+ attribute :>> responsibility = "Append-only event log of doses, mode changes, alarms, and configuration changes.";
225
+ attribute :>> safetyClass = SafetyClassKind::B;
226
+ attribute :>> complexity = ComplexityKind::medium;
227
+
228
+ in port portLogAlarmIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-01"; :>> label = "ALARM_IN"; } attribute :>> portKind = InterfaceKind::notification; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
229
+ in port portLogConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-02"; :>> label = "CONFIG_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
230
+ in port portLogImIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-03"; :>> label = "IM_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
231
+ out port portLogLogOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-04"; :>> label = "LOG_OUT"; } attribute :>> portKind = InterfaceKind::logging; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
232
+ in port portLogSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-05"; :>> label = "SYS_STAT_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
233
+ in port portLogTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-LOG-06"; :>> label = "TLM_MODE_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (LOG)"; } }
234
+ }
235
+
236
+ part infusionMgr : SoftwareModule {
237
+ @MemoIdentity { :>> providedId = "SW-005"; :>> label = "Infusion_Manager"; }
238
+ attribute :>> responsibility = "Handle drug infusion commands and therapy parameters.";
239
+ attribute :>> safetyClass = SafetyClassKind::C;
240
+ attribute :>> complexity = ComplexityKind::high;
241
+
242
+ in port portImAlarmIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-01"; :>> label = "ALARM_IN"; } attribute :>> portKind = InterfaceKind::notification; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
243
+ in port portImConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-02"; :>> label = "CONFIG_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
244
+ out port portImImOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-03"; :>> label = "IM_OUT"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
245
+ in port portImOpCmdIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-04"; :>> label = "OP_CMD_IN"; } attribute :>> portKind = InterfaceKind::control; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
246
+ in port portImPatientIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-05"; :>> label = "PATIENT_IN"; } attribute :>> portKind = InterfaceKind::userInteraction; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
247
+ in port portImSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-06"; :>> label = "SYS_STAT_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
248
+ in port portImTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-IM-07"; :>> label = "TLM_MODE_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (IM)"; } }
249
+ }
250
+
251
+ part systemMonitor : SoftwareModule {
252
+ @MemoIdentity { :>> providedId = "SW-006"; }
253
+ attribute :>> responsibility = "POST, periodic CPU/RAM/ROM checks, watchdog kicking, and battery supervision.";
254
+ attribute :>> safetyClass = SafetyClassKind::C;
255
+ attribute :>> complexity = ComplexityKind::medium;
256
+
257
+ out port portSysMonSysMonOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-MON-01"; :>> label = "SYS_MON_OUT"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_MON)"; } }
258
+ in port portSysMonTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-MON-02"; :>> label = "TLM_MODE_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_MON)"; } }
259
+ }
260
+
261
+ part systemStatus : SoftwareModule {
262
+ @MemoIdentity { :>> providedId = "SW-007"; }
263
+ attribute :>> responsibility = "Maintain the shared system status vector (Reservoir_Volume, Volume_Infused, Reservoir_Empty, In_Therapy) consumed by Alarm, Config, and Infusion_Manager.";
264
+ attribute :>> safetyClass = SafetyClassKind::C;
265
+ attribute :>> complexity = ComplexityKind::medium;
266
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/System_Status.aadl"; }
267
+
268
+ in port portSysStatConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-01"; :>> label = "CONFIG_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
269
+ in port portSysStatConstIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-02"; :>> label = "CONST_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
270
+ in port portSysStatImIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-03"; :>> label = "IM_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
271
+ in port portSysStatSensorIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-04"; :>> label = "SENSOR_IN"; } attribute :>> portKind = InterfaceKind::digitalSignal; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
272
+ out port portSysStatSysStatOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-05"; :>> label = "SYS_STAT_OUT"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
273
+ in port portSysStatTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-STAT-06"; :>> label = "TLM_MODE_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (SYS_STAT)"; } }
274
+ }
275
+
276
+ part outputBus : SoftwareModule {
277
+ @MemoIdentity { :>> providedId = "SW-008"; }
278
+ attribute :>> responsibility = "Aggregate all subsystem outputs into the single GPCA_SW_OUT output vector (mode, commanded flow rate, notifications, prescription echo, status).";
279
+ attribute :>> safetyClass = SafetyClassKind::C;
280
+ attribute :>> complexity = ComplexityKind::low;
281
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/OutputBus.aadl"; }
282
+
283
+ in port portOutputAlarmIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-01"; :>> label = "ALARM_IN"; } attribute :>> portKind = InterfaceKind::notification; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
284
+ in port portOutputConfigIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-02"; :>> label = "CONFIG_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
285
+ out port portOutputGpcaSwOut : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-03"; :>> label = "GPCA_SW_OUT"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
286
+ in port portOutputImIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-04"; :>> label = "IM_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
287
+ in port portOutputLogIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-05"; :>> label = "LOG_IN"; } attribute :>> portKind = InterfaceKind::logging; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
288
+ in port portOutputSysMonIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-06"; :>> label = "SYS_MON_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
289
+ in port portOutputSysStatIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-07"; :>> label = "SYS_STAT_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
290
+ in port portOutputTlmModeIn : SoftwarePort { @MemoIdentity { :>> providedId = "PORT-OUT-08"; :>> label = "TLM_MODE_IN"; } attribute :>> portKind = InterfaceKind::data; @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_SW.aadl (OUTPUT)"; } }
291
+ }
283
292
  }
284
293
 
285
294
  // ── Hardware: aggregates (UMN AADL architectural model) ─────
286
295
  // ── Hardware: sensor suite ──────────────────────────────────
287
296
  part airInLineSensor : HardwareAssembly {
288
297
  @MemoIdentity { :>> providedId = "HW-006"; }
289
- attribute :>> name = "AirInLineSensor";
290
298
  attribute :>> responsibility = "Ultrasonic detection of air bubbles in the delivery tubing.";
291
299
  attribute :>> safetyRole = "detects air embolism precursor; feeds High-priority Air embolism notification";
292
300
  attribute :>> partNumber = "GPCA-SNS-AIR";
293
301
  attribute :>> mtbfHours = "150000";
294
302
  }
295
303
  part occlusionSensor : HardwareAssembly {
296
- @MemoIdentity { :>> providedId = "HW-007"; }
297
- attribute :>> name = "OcclusionPressureSensor";
304
+ @MemoIdentity { :>> providedId = "HW-007"; :>> label = "OcclusionPressureSensor"; }
305
+ out port portOcclusionOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-OCC-01"; :>> label = "OCCLUSION_PRESSURE_OUT"; } }
298
306
  attribute :>> responsibility = "Measures downstream line pressure to detect occlusion.";
299
307
  attribute :>> safetyRole = "detects blocked line (under-infusion, post-occlusion bolus)";
300
308
  attribute :>> partNumber = "GPCA-SNS-OCC";
301
309
  attribute :>> mtbfHours = "150000";
302
310
  }
303
311
  part reservoirSensor : HardwareAssembly {
304
- @MemoIdentity { :>> providedId = "HW-008"; }
305
- attribute :>> name = "ReservoirVolumeSensor";
312
+ @MemoIdentity { :>> providedId = "HW-008"; :>> label = "ReservoirVolumeSensor"; }
306
313
  attribute :>> responsibility = "Reports remaining reservoir volume and empty condition.";
307
314
  attribute :>> safetyRole = "prevents dry pumping and undetected therapy interruption";
308
315
  attribute :>> partNumber = "GPCA-SNS-RSV";
309
316
  attribute :>> mtbfHours = "120000";
310
317
  }
311
318
  part doorSensor : HardwareAssembly {
312
- @MemoIdentity { :>> providedId = "HW-009"; }
313
- attribute :>> name = "DoorLatchSensor";
319
+ @MemoIdentity { :>> providedId = "HW-009"; :>> label = "DoorLatchSensor"; }
314
320
  attribute :>> responsibility = "Detects open reservoir door / unlatched pumping chamber.";
315
321
  attribute :>> safetyRole = "prevents free flow and tampering with the fluid path";
316
322
  attribute :>> partNumber = "GPCA-SNS-DOR";
317
323
  attribute :>> mtbfHours = "200000";
318
324
  }
319
325
  part flowSensor : HardwareAssembly {
320
- @MemoIdentity { :>> providedId = "HW-010"; }
321
- attribute :>> name = "DeliveryFlowSensor";
326
+ @MemoIdentity { :>> providedId = "HW-010"; :>> label = "DeliveryFlowSensor"; }
322
327
  attribute :>> responsibility = "Independent measurement of delivered flow for cross-check against commanded flow.";
323
328
  attribute :>> safetyRole = "detects over/under-infusion independent of motor control";
324
329
  attribute :>> partNumber = "GPCA-SNS-FLW";
325
330
  attribute :>> mtbfHours = "100000";
326
331
  }
327
332
  part bolusButton : HardwareAssembly {
328
- @MemoIdentity { :>> providedId = "HW-011"; }
329
- attribute :>> name = "PatientBolusButton";
333
+ @MemoIdentity { :>> providedId = "HW-011"; :>> label = "PatientBolusButton"; }
334
+ out port portPendantOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-BOL-01"; :>> label = "PENDANT_OUT"; } }
330
335
  attribute :>> responsibility = "Debounced patient pendant switch for bolus requests.";
331
336
  attribute :>> safetyRole = "sole patient input; stuck-button detection required";
332
337
  attribute :>> partNumber = "GPCA-INP-BOL";
@@ -334,7 +339,7 @@ package memo_examples_gpca_pump_gpca_architecture {
334
339
  }
335
340
  part operatorKeypad : HardwareAssembly {
336
341
  @MemoIdentity { :>> providedId = "HW-012"; }
337
- attribute :>> name = "OperatorKeypad";
342
+ out port portPrescriptionOut : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-KEY-01"; :>> label = "PRESCRIPTION_OUT"; } @MemoIdentity { :>> sourceReference = "MEMO design extension; not a GPCA_Device.aadl feature: the boundary CE-004 (PrescriptionEntryExchange) leaves the keypad by"; } }
338
343
  attribute :>> responsibility = "Clinician input for prescription programming and alarm handling.";
339
344
  attribute :>> safetyRole = "prescription entry path; key-lock guarded";
340
345
  attribute :>> partNumber = "GPCA-INP-KEY";
@@ -343,7 +348,7 @@ package memo_examples_gpca_pump_gpca_architecture {
343
348
  // ── Hardware: actuator and output suite ─────────────────────
344
349
  part pumpMotorAssembly : HardwareAssembly {
345
350
  @MemoIdentity { :>> providedId = "HW-003"; }
346
- attribute :>> name = "PumpMotorAssembly";
351
+ in port portFlowCommandIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-PMP-01"; :>> label = "FLOW_CMD_IN"; } @MemoIdentity { :>> sourceReference = "MEMO design extension; not a GPCA_Device.aadl feature: the boundary CE-002 (FlowCommandExchange) reaches the pump motor by"; } }
347
352
  attribute :>> responsibility = "Peristaltic pump mechanism and stepper motor driving drug delivery.";
348
353
  attribute :>> safetyRole = "single point of drug delivery; rotation monitored by flow sensor";
349
354
  attribute :>> partNumber = "GPCA-ACT-PMP";
@@ -351,21 +356,19 @@ package memo_examples_gpca_pump_gpca_architecture {
351
356
  }
352
357
  part antiFreeFlowValve : HardwareAssembly {
353
358
  @MemoIdentity { :>> providedId = "HW-013"; }
354
- attribute :>> name = "AntiFreeFlowValve";
355
359
  attribute :>> responsibility = "Mechanical valve that blocks gravity free flow whenever the pumping chamber is disengaged.";
356
360
  attribute :>> safetyRole = "inherent safe design against free-flow overdose";
357
361
  attribute :>> partNumber = "GPCA-ACT-AFF";
358
362
  }
359
363
  part audibleAlarm : HardwareAssembly {
360
- @MemoIdentity { :>> providedId = "HW-004"; }
361
- attribute :>> name = "AudibleAlarmAnnunciator";
364
+ @MemoIdentity { :>> providedId = "HW-004"; :>> label = "AudibleAlarmAnnunciator"; }
365
+ in port portAlarmIn : PhysicalPort { @MemoIdentity { :>> providedId = "PORT-BZR-01"; :>> label = "ALARM_IN"; } @MemoIdentity { :>> sourceReference = "MEMO design extension; not a GPCA_Device.aadl feature: the boundary CE-003 (AlarmAnnunciationExchange) reaches the buzzer by"; } }
362
366
  attribute :>> responsibility = "Buzzer producing multi-priority alarm tones at or above 45 dB(A) at 1 m.";
363
367
  attribute :>> safetyRole = "primary alarm annunciation path";
364
368
  attribute :>> partNumber = "GPCA-ACT-BZR";
365
369
  }
366
370
  part operatorDisplay : HardwareAssembly {
367
371
  @MemoIdentity { :>> providedId = "HW-005"; }
368
- attribute :>> name = "OperatorDisplay";
369
372
  attribute :>> responsibility = "Displays mode, prescription, delivered dose, and alarm messages.";
370
373
  attribute :>> safetyRole = "visual alarm annunciation and prescription confirmation readback";
371
374
  attribute :>> partNumber = "GPCA-ACT-DSP";
@@ -373,8 +376,7 @@ package memo_examples_gpca_pump_gpca_architecture {
373
376
 
374
377
  // ── Hardware: platform ──────────────────────────────────────
375
378
  part controllerBoard : HardwareAssembly {
376
- @MemoIdentity { :>> providedId = "HW-014"; }
377
- attribute :>> name = "MainControllerBoard";
379
+ @MemoIdentity { :>> providedId = "HW-014"; :>> label = "MainControllerBoard"; }
378
380
  attribute :>> responsibility = "Hosts the microcontroller, memory, and hardware watchdog executing the GPCA software.";
379
381
  attribute :>> safetyRole = "computing platform; watchdog forces safe state on CPU hang";
380
382
  attribute :>> partNumber = "GPCA-PCB-MAIN";
@@ -382,15 +384,13 @@ package memo_examples_gpca_pump_gpca_architecture {
382
384
  }
383
385
  part batteryPack : HardwareAssembly {
384
386
  @MemoIdentity { :>> providedId = "HW-015"; }
385
- attribute :>> name = "BatteryPack";
386
387
  attribute :>> responsibility = "Rechargeable backup battery sustaining at least 4 hours of therapy.";
387
388
  attribute :>> safetyRole = "keeps therapy and alarms alive during mains loss";
388
389
  attribute :>> partNumber = "GPCA-PWR-BAT";
389
390
  attribute :>> mtbfHours = "20000";
390
391
  }
391
392
  part powerSupply : HardwareAssembly {
392
- @MemoIdentity { :>> providedId = "HW-016"; }
393
- attribute :>> name = "MainsPowerSupply";
393
+ @MemoIdentity { :>> providedId = "HW-016"; :>> label = "MainsPowerSupply"; }
394
394
  attribute :>> responsibility = "Medical-grade AC/DC supply with charger and mains-loss signal.";
395
395
  attribute :>> safetyRole = "isolation per IEC 60601-1; signals switchover to battery";
396
396
  attribute :>> partNumber = "GPCA-PWR-PSU";
@@ -398,125 +398,127 @@ package memo_examples_gpca_pump_gpca_architecture {
398
398
  attribute :>> ipRating = "IPX2";
399
399
  }
400
400
  part enclosure : HardwareAssembly {
401
- @MemoIdentity { :>> providedId = "HW-017"; }
402
- attribute :>> name = "DeviceEnclosure";
401
+ @MemoIdentity { :>> providedId = "HW-017"; :>> label = "DeviceEnclosure"; }
403
402
  attribute :>> responsibility = "Impact-resistant, liquid-ingress-protected housing for the pump.";
404
403
  attribute :>> safetyRole = "carries the drop and liquid-ingress requirements REQ-CS-83/84";
405
404
  attribute :>> partNumber = "GPCA-MECH-ENC";
406
405
  }
407
406
 
408
407
  // ── Structural composition ──────────────────────────────────
409
- // Device level (GPCA_Device.aadl): the assemblies and the software system
410
- // are nested directly in gpcaDevice's body above, native containment
411
- // instead of a Composes edge. The software modules (MEMO design
408
+ // Device level (GPCA_Device.aadl): the two assemblies are nested directly
409
+ // in gpcaDevice's body above, native containment instead of a Composes
410
+ // edge; the software system is a package-level part deployed onto the
411
+ // controller board. The software modules (MEMO design
412
412
  // extensions derived from system requirements and hazard analysis, not
413
413
  // subcomponents in the published AADL packages) are nested the same way,
414
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;
415
+ // --8<-- [start:satisfy]
416
+ satisfy reqCs01 by gpcaSoftware.tlm;
417
+ satisfy reqCs01 by gpcaSoftware.outputBus;
418
+ satisfy reqCs18 by gpcaSoftware.systemStatus;
419
+ satisfy reqCs23 by gpcaSoftware.systemStatus;
420
+ // --8<-- [end:satisfy]
421
+ satisfy reqCs25 by gpcaSoftware.infusionMgr;
422
+ satisfy reqCs19 by gpcaSoftware.alarm;
423
+ satisfy reqDrugLibraryLimits by gpcaSoftware.config;
424
+ satisfy reqCs09 by gpcaSoftware.config;
425
+ satisfy reqPowerLossRetention by gpcaSoftware.config;
426
+ satisfy reqPost by gpcaSoftware.systemMonitor;
427
+ satisfy reqWatchdogSafeState by gpcaSoftware.systemMonitor;
426
428
  satisfy reqWatchdogSafeState by controllerBoard;
427
- satisfy reqCs59 by gpcaDevice.gpcaSoftware.alarm;
429
+ satisfy reqCs59 by gpcaSoftware.alarm;
428
430
  satisfy reqCs72 by audibleAlarm;
429
- satisfy reqCs73 by gpcaDevice.gpcaSoftware.alarm;
430
- satisfy reqCs75 by gpcaDevice.gpcaSoftware.alarm;
431
+ satisfy reqCs73 by gpcaSoftware.alarm;
432
+ satisfy reqCs75 by gpcaSoftware.alarm;
431
433
  satisfy reqCs21 by airInLineSensor;
432
- satisfy reqCs21 by gpcaDevice.gpcaSoftware.alarm;
434
+ satisfy reqCs21 by gpcaSoftware.alarm;
433
435
  satisfy reqOcclusion by occlusionSensor;
434
- satisfy reqOcclusion by gpcaDevice.gpcaSoftware.alarm;
436
+ satisfy reqOcclusion by gpcaSoftware.alarm;
435
437
  satisfy reqCs23 by reservoirSensor;
436
- satisfy reqCs23 by gpcaDevice.gpcaSoftware.infusionMgr;
438
+ satisfy reqCs23 by gpcaSoftware.infusionMgr;
437
439
  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;
440
+ satisfy reqDoorOpen by gpcaSoftware.infusionMgr;
441
+ satisfy reqMaxHourlyDose by gpcaSoftware.infusionMgr;
442
+ satisfy reqStuckButton by gpcaSoftware.infusionMgr;
441
443
  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;
444
+ satisfy reqFlowCrossCheck by gpcaSoftware.alarm;
445
+ satisfy reqCs77 by gpcaSoftware.logging;
446
+ satisfy reqCs78 by gpcaSoftware.logging;
447
+ satisfy reqEventLogging by gpcaSoftware.logging;
448
+ satisfy reqCs02 by gpcaSoftware.tlm;
449
+ satisfy reqCs03 by gpcaSoftware.infusionMgr;
450
+ satisfy reqCs04 by gpcaSoftware.tlm;
451
+ satisfy reqCs05 by gpcaSoftware.tlm;
452
+ satisfy reqCs06 by gpcaSoftware.infusionMgr;
453
+ satisfy reqCs07 by gpcaSoftware.tlm;
454
+ satisfy reqCs08 by gpcaSoftware.config;
455
+ satisfy reqCs10 by gpcaSoftware.alarm;
456
+ satisfy reqCs11 by gpcaSoftware.logging;
457
+ satisfy reqCs12 by gpcaSoftware.tlm;
458
+ satisfy reqCs13 by gpcaSoftware.tlm;
459
+ satisfy reqCs14 by gpcaSoftware.infusionMgr;
460
+ satisfy reqCs15 by gpcaSoftware.alarm;
461
+ satisfy reqCs16 by gpcaSoftware.infusionMgr;
462
+ satisfy reqCs17 by gpcaSoftware.alarm;
463
+ satisfy reqCs18 by gpcaSoftware.alarm;
464
+ satisfy reqCs20 by gpcaSoftware.alarm;
465
+ satisfy reqCs22 by gpcaSoftware.alarm;
466
+ satisfy reqCs24 by gpcaSoftware.infusionMgr;
467
+ satisfy reqCs26 by gpcaSoftware.alarm;
468
+ satisfy reqCs27 by gpcaSoftware.alarm;
469
+ satisfy reqCs28 by gpcaSoftware.tlm;
470
+ satisfy reqCs29 by gpcaSoftware.tlm;
471
+ satisfy reqCs30 by gpcaSoftware.tlm;
472
+ satisfy reqCs31 by gpcaSoftware.tlm;
473
+ satisfy reqCs32 by gpcaSoftware.tlm;
474
+ satisfy reqCs33 by gpcaSoftware.tlm;
475
+ satisfy reqCs34 by gpcaSoftware.tlm;
476
+ satisfy reqCs35 by gpcaSoftware.tlm;
477
+ satisfy reqCs36 by gpcaSoftware.tlm;
478
+ satisfy reqCs37 by gpcaSoftware.tlm;
479
+ satisfy reqCs38 by gpcaSoftware.tlm;
480
+ satisfy reqCs39 by gpcaSoftware.tlm;
481
+ satisfy reqCs40 by gpcaSoftware.infusionMgr;
482
+ satisfy reqCs41 by gpcaSoftware.infusionMgr;
483
+ satisfy reqCs42 by gpcaSoftware.infusionMgr;
484
+ satisfy reqCs43 by gpcaSoftware.infusionMgr;
485
+ satisfy reqCs44 by gpcaSoftware.alarm;
486
+ satisfy reqCs45 by gpcaSoftware.tlm;
487
+ satisfy reqCs46 by gpcaSoftware.tlm;
488
+ satisfy reqCs47 by gpcaSoftware.tlm;
489
+ satisfy reqCs48 by gpcaSoftware.config;
490
+ satisfy reqCs49 by gpcaSoftware.config;
491
+ satisfy reqCs50 by gpcaSoftware.config;
492
+ satisfy reqCs51 by gpcaSoftware.config;
493
+ satisfy reqCs52 by gpcaSoftware.config;
494
+ satisfy reqCs53 by gpcaSoftware.config;
495
+ satisfy reqCs54 by gpcaSoftware.config;
496
+ satisfy reqCs55 by gpcaSoftware.config;
497
+ satisfy reqCs56 by gpcaSoftware.config;
498
+ satisfy reqCs57 by gpcaSoftware.config;
499
+ satisfy reqCs58 by gpcaSoftware.config;
500
+ satisfy reqCs60 by gpcaSoftware.alarm;
501
+ satisfy reqCs61 by gpcaSoftware.alarm;
502
+ satisfy reqCs62 by gpcaSoftware.alarm;
503
+ satisfy reqCs63 by gpcaSoftware.alarm;
504
+ satisfy reqCs64 by gpcaSoftware.alarm;
505
+ satisfy reqCs65 by gpcaSoftware.alarm;
506
+ satisfy reqCs66 by gpcaSoftware.alarm;
507
+ satisfy reqCs67 by gpcaSoftware.alarm;
508
+ satisfy reqCs68 by gpcaSoftware.alarm;
509
+ satisfy reqCs69 by gpcaSoftware.alarm;
510
+ satisfy reqCs70 by gpcaSoftware.alarm;
511
+ satisfy reqCs71 by gpcaSoftware.alarm;
512
+ satisfy reqCs74 by gpcaSoftware.alarm;
513
+ satisfy reqCs76 by gpcaSoftware.alarm;
514
+ satisfy reqCs79 by gpcaSoftware.logging;
515
+ satisfy reqCs80 by gpcaSoftware.logging;
516
+ satisfy reqCs81 by gpcaSoftware.logging;
517
+ satisfy reqCs82 by gpcaSoftware.config;
516
518
  satisfy reqCs83 by enclosure;
517
519
  satisfy reqCs84 by enclosure;
518
- satisfy reqCs85 by gpcaDevice.gpcaSoftware.logging;
519
- satisfy reqCs86 by gpcaDevice.gpcaSoftware.config;
520
+ satisfy reqCs85 by gpcaSoftware.logging;
521
+ satisfy reqCs86 by gpcaSoftware.config;
520
522
  satisfy reqPumpAccuracy by pumpMotorAssembly;
521
523
  satisfy reqAlarmLoudness by audibleAlarm;
522
524
  satisfy reqBatteryBackup by batteryPack;