@memoarchitect/ontology 0.6.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/README.md +1 -1
  2. package/examples/connected-patient-monitor/model/catalog/project.sysml +24 -0
  3. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  4. package/examples/connected-patient-monitor/model/{viewpoints → catalog/viewpoints/unassigned/views}/connected_patient_monitor_overview.sysml +1 -1
  5. package/examples/embedded-infusion-pump/model/catalog/project.sysml +24 -0
  6. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  7. package/examples/embedded-infusion-pump/model/{viewpoints → catalog/viewpoints/unassigned/views}/embedded_infusion_pump_overview.sysml +1 -1
  8. package/examples/extensions/clinical/memo.package.yaml +18 -9
  9. package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +10 -2
  10. package/examples/extensions/template/memo.package.yaml +17 -9
  11. package/examples/functional-logical-physical/model/catalog/project.sysml +24 -0
  12. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  13. package/examples/functional-logical-physical/model/{viewpoints → catalog/viewpoints/unassigned/views}/functional_logical_physical_overview.sysml +1 -1
  14. package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +148 -0
  15. package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +301 -0
  16. package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +229 -0
  17. package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +200 -0
  18. package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +188 -0
  19. package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +173 -0
  20. package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +180 -0
  21. package/examples/gpca-pump/analysis/Samples/README.md +37 -0
  22. package/examples/gpca-pump/gpca-pump.kpar +0 -0
  23. package/examples/gpca-pump/methodology/gpca_methodology.sysml +7 -8
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +89 -11
  25. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
  26. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +22 -12
  27. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +2 -2
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +8 -2
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +5 -5
  30. package/examples/gpca-pump/model/catalog/gpca_context.sysml +3 -8
  31. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
  32. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
  33. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +41 -11
  34. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +19 -8
  35. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +2 -2
  36. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1 -1
  37. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +10 -1
  38. package/examples/gpca-pump/model/catalog/gpca_system.sysml +34 -30
  39. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +59 -31
  40. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +1 -1
  41. package/examples/gpca-pump/model/catalog/project.sysml +21 -0
  42. package/examples/gpca-pump/model/catalog/viewpoints/context/viewpoint.sysml +8 -0
  43. package/examples/gpca-pump/model/{views → catalog/viewpoints/context/views}/context_system_context_view.sysml +3 -3
  44. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/viewpoint.sysml +8 -0
  45. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/cybersecurity_cybersecurity_view.sysml +3 -3
  46. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_cyber_assessment_view.sysml +4 -4
  47. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_threat_model_view.sysml +4 -4
  48. package/examples/gpca-pump/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  49. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_allocation_view.sysml +2 -2
  50. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_browser_view.sysml +3 -3
  51. package/examples/gpca-pump/model/catalog/viewpoints/logical/viewpoint.sysml +8 -0
  52. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/behavior_action_flow_view.sysml +3 -3
  53. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/document_architecture_description_view.sysml +7 -7
  54. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_device_interconnect_view.sysml +5 -5
  55. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_logical_architecture_view.sysml +3 -3
  56. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_mode_state_view.sysml +3 -3
  57. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_system_decomposition_view.sysml +3 -3
  58. package/examples/gpca-pump/model/catalog/viewpoints/operational/viewpoint.sysml +8 -0
  59. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_scenario_sequence_view.sysml +2 -2
  60. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +3 -3
  61. package/examples/gpca-pump/model/catalog/viewpoints/physical/viewpoint.sysml +8 -0
  62. package/examples/gpca-pump/model/{views → catalog/viewpoints/physical/views}/physical_physical_bom_view.sysml +2 -2
  63. package/examples/gpca-pump/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  64. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/document_dhf_index_view.sysml +6 -6
  65. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/requirements_requirements_trace_view.sysml +2 -2
  66. package/examples/gpca-pump/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  67. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_hazard_analysis_view.sysml +3 -3
  68. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +3 -3
  69. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +2 -2
  70. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_risk_chain_view.sysml +3 -3
  71. package/examples/gpca-pump/model/catalog/viewpoints/software/viewpoint.sysml +8 -0
  72. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/document_sdd_view.sysml +3 -3
  73. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +3 -3
  74. package/examples/gpca-pump/model/catalog/viewpoints/usability/viewpoint.sysml +8 -0
  75. package/examples/gpca-pump/model/{views → catalog/viewpoints/usability/views}/document_usability_view.sysml +4 -4
  76. package/examples/gpca-pump/model/catalog/viewpoints/verification/viewpoint.sysml +8 -0
  77. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/document_vv_view.sysml +3 -3
  78. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +2 -2
  79. package/examples/ivd-laboratory-system/model/catalog/project.sysml +24 -0
  80. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  81. package/examples/ivd-laboratory-system/model/{viewpoints → catalog/viewpoints/unassigned/views}/ivd_laboratory_system_overview.sysml +1 -1
  82. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +1 -0
  83. package/examples/manual-surgical-instrument/model/catalog/project.sysml +24 -0
  84. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  85. package/examples/manual-surgical-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/manual_surgical_instrument_overview.sysml +1 -1
  86. package/examples/multidimensional-layers/model/catalog/project.sysml +24 -0
  87. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  88. package/examples/multidimensional-layers/model/{viewpoints → catalog/viewpoints/unassigned/views}/multidimensional_layers_overview.sysml +1 -1
  89. package/examples/nested-architecture-dsm/README.md +49 -0
  90. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +174 -0
  91. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +183 -0
  92. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +53 -0
  93. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +89 -0
  94. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +90 -0
  95. package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
  96. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +49 -0
  97. package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
  98. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -6
  99. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  100. package/examples/reusable-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/reusable_instrument_overview.sysml +1 -1
  101. package/examples/software-only-medical-device/model/catalog/project.sysml +24 -0
  102. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  103. package/examples/software-only-medical-device/model/{viewpoints → catalog/viewpoints/unassigned/views}/software_only_medical_device_overview.sysml +1 -1
  104. package/examples/surgical-closure-workflow/model/catalog/project.sysml +24 -0
  105. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -19
  106. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  107. package/examples/surgical-closure-workflow/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_closure_workflow_overview.sysml +1 -1
  108. package/examples/surgical-robot/model/catalog/project.sysml +24 -0
  109. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +5 -3
  110. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  111. package/examples/surgical-robot/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_robot_overview.sysml +1 -1
  112. package/examples/sysml-diagram-samples/README.md +7 -0
  113. package/examples/sysml-diagram-samples/dhf/documents/DOC-HAR-001.md +11 -0
  114. package/examples/sysml-diagram-samples/memo.package.yaml +11 -5
  115. package/examples/sysml-diagram-samples/model/catalog/project.sysml +33 -0
  116. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  117. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/action_flow_view.sysml +18 -10
  118. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +4 -2
  119. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
  120. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/functional_flow_view.sysml +23 -20
  121. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/interconnection_view.sysml +17 -14
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
  123. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/operational_behaviour_view.sysml +23 -20
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +13 -0
  125. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/requirements_view.sysml +3 -1
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +51 -0
  127. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/state_transition_view.sysml +3 -1
  128. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/tree_view.sysml +3 -1
  129. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +3 -1
  130. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +93 -0
  131. package/examples/temperature-alarm/model/catalog/project.sysml +24 -0
  132. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +2 -1
  133. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  134. package/examples/temperature-alarm/model/{viewpoints → catalog/viewpoints/unassigned/views}/temperature_alarm_overview.sysml +1 -1
  135. package/examples/ui-screen-regions/README.md +117 -0
  136. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +60 -0
  137. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +189 -0
  138. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +61 -0
  139. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png +0 -0
  140. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png +0 -0
  141. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png +0 -0
  142. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +51 -0
  143. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +27 -0
  144. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +27 -0
  145. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +59 -0
  146. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +25 -0
  147. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +178 -0
  148. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +93 -0
  149. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +60 -0
  150. package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
  151. package/examples/ui-screen-regions/model/catalog/traces.sysml +276 -0
  152. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  153. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +62 -0
  154. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  155. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +62 -0
  156. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +62 -0
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/viewpoint.sysml +8 -0
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +57 -0
  160. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +52 -0
  161. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +54 -0
  162. package/memo.manifest.yaml +2 -0
  163. package/methodologies/default/memo.package.yaml +19 -9
  164. package/methodologies/gpca/memo.package.yaml +18 -9
  165. package/ontology/memo.package.yaml +23 -8
  166. package/package.json +1 -3
  167. package/profile/memo.package.yaml +18 -9
  168. package/src/architecture/decisions/memo_decisions.sysml +7 -0
  169. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  170. package/src/architecture/functional/functions/memo_functions.sysml +5 -12
  171. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +1 -3
  172. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +18 -5
  173. package/src/architecture/implementation/ui/memo_ui.sysml +210 -27
  174. package/src/architecture/logical/interfaces/memo_interfaces.sysml +1 -2
  175. package/src/architecture/logical/structure/memo_logical_structure.sysml +71 -15
  176. package/src/architecture/operational/activities/memo_activities.sysml +0 -1
  177. package/src/architecture/operational/scenarios/memo_scenarios.sysml +2 -2
  178. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -6
  179. package/src/{compliance/change/memo_change.sysml → artifacts/configuration_management/memo_configuration_management.sysml} +5 -3
  180. package/src/artifacts/core/memo_controlled_artifacts.sysml +33 -0
  181. package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
  182. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +1 -1
  183. package/src/assurance/human_factors/memo_human_factors.sysml +1 -1
  184. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +11 -0
  185. package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
  186. package/src/assurance/verification_validation/memo_assurance.sysml +1 -1
  187. package/src/core/annotations/memo_annotations.sysml +77 -0
  188. package/src/core/common/memo_common.sysml +20 -3
  189. package/src/core/consistency_rules/consistency_rules.sysml +7 -0
  190. package/src/core/dimensions/dimensions.sysml +5 -1
  191. package/src/core/enumerations/memo_enumerations.sysml +41 -6
  192. package/src/core/methodology_scope/methodology_scope.sysml +7 -15
  193. package/src/core/relationships/memo_relationships.sysml +4 -2
  194. package/src/memo_namespaces.sysml +97 -67
  195. package/src/methodology/core/memo_core.sysml +45 -2
  196. package/src/methodology/profiles/memo_profiles.sysml +30 -40
  197. package/src/methodology/workflow/memo_workflow.sysml +7 -2
  198. package/src/rules/closure/closure_rules.sysml +104 -31
  199. package/src/rules/coverage/coverage_rules.sysml +4 -256
  200. package/src/rules/crosslayer/cross_layer_rules.sysml +6 -15
  201. package/src/rules/lifecycle/lifecycle_rules.sysml +4 -39
  202. package/src/rules/ontology/ontology_invariants.sysml +38 -68
  203. package/src/rules/quantitative/quantitative_rules.sysml +8 -8
  204. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +7 -0
  205. package/src/viewpoints/clinical/clinical_viewpoint.sysml +3 -1
  206. package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
  207. package/src/viewpoints/context/context_viewpoint.sysml +3 -1
  208. package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
  209. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +3 -1
  210. package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view → views/cybersecurity_assessment_view}/cybersecurity_assessment_view.sysml +2 -2
  211. package/src/viewpoints/cybersecurity/{threat_model_view → views/threat_model_view}/threat_model_view.sysml +2 -2
  212. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -0
  213. package/src/viewpoints/functional/functional_viewpoint.sysml +3 -1
  214. package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +2 -2
  215. package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +2 -2
  216. package/src/viewpoints/logical/logical_viewpoint.sysml +3 -1
  217. package/src/viewpoints/logical/{logical_architecture_view → views/logical_architecture_view}/logical_architecture_view.sysml +2 -2
  218. package/src/viewpoints/operational/operational_viewpoint.sysml +3 -1
  219. package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +2 -2
  220. package/src/viewpoints/physical/physical_viewpoint.sysml +3 -1
  221. package/src/viewpoints/physical/{network_topology_view → views/network_topology_view}/network_topology_view.sysml +2 -2
  222. package/src/viewpoints/physical/{physical_bom_view → views/physical_bom_view}/physical_bom_view.sysml +2 -2
  223. package/src/viewpoints/rendering/memo_rendering.sysml +354 -0
  224. package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -1
  225. package/src/viewpoints/requirements/{requirements_traceability_view → views/requirements_traceability_view}/requirements_traceability_view.sysml +2 -2
  226. package/src/viewpoints/risk/risk_viewpoint.sysml +3 -1
  227. package/src/viewpoints/risk/{risk_chain_view → views/risk_chain_view}/risk_chain_view.sysml +2 -2
  228. package/src/viewpoints/software/software_viewpoint.sysml +3 -1
  229. package/src/viewpoints/software/{software_architecture_view → views/software_architecture_view}/software_architecture_view.sysml +2 -2
  230. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +28 -0
  231. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +23 -0
  232. package/src/viewpoints/usability/usability_viewpoint.sysml +3 -1
  233. package/src/viewpoints/usability/{usability_engineering_view → views/usability_engineering_view}/usability_engineering_view.sysml +2 -2
  234. package/src/viewpoints/verification/verification_viewpoint.sysml +3 -1
  235. package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +2 -2
  236. package/templates/connected-device/memo.package.yaml +11 -5
  237. package/templates/connected-device/model/catalog/project.sysml +28 -0
  238. package/templates/connected-device/syside.toml +1 -1
  239. package/templates/default/memo.package.yaml +11 -5
  240. package/templates/default/model/catalog/project.sysml +28 -0
  241. package/templates/default/syside.toml +1 -1
  242. package/templates/infusion-pump/memo.package.yaml +11 -5
  243. package/templates/infusion-pump/model/catalog/project.sysml +28 -0
  244. package/templates/infusion-pump/syside.toml +1 -1
  245. package/templates/monitoring-device/memo.package.yaml +11 -5
  246. package/templates/monitoring-device/model/catalog/project.sysml +28 -0
  247. package/templates/monitoring-device/syside.toml +1 -1
  248. package/templates/samd/memo.package.yaml +11 -5
  249. package/templates/samd/model/catalog/project.sysml +28 -0
  250. package/templates/samd/syside.toml +1 -1
  251. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +0 -3
  252. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +0 -3
  253. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +0 -3
  254. package/examples/gpca-pump/memo.config.yaml +0 -9
  255. package/examples/gpca-pump/methodology/gpca_scope.sysml +0 -25
  256. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +0 -3
  257. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +0 -3
  258. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +0 -4
  259. package/examples/reusable-instrument/model/reusable_instrument.sysml +0 -4
  260. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +0 -4
  261. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +0 -4
  262. package/examples/surgical-robot/model/surgical_robot.sysml +0 -4
  263. package/examples/temperature-alarm/model/temperature_alarm.sysml +0 -4
  264. package/ontology/memo.rendering.yaml +0 -84
  265. package/src/compliance/artifacts/memo_artifacts.sysml +0 -12
  266. package/src/compliance/document_views/memo_document_views.sysml +0 -7
  267. package/src/compliance/iso14971/risk_management_file.sysml +0 -16
  268. package/src/compliance/postmarket/memo_postmarket.sysml +0 -16
  269. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
  270. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +0 -0
  271. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +0 -0
  272. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +0 -0
  273. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +0 -0
  274. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +0 -0
  275. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +0 -0
  276. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +0 -0
  277. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +0 -0
  278. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +0 -0
  279. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +0 -0
  280. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +0 -0
  281. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +0 -0
  282. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +0 -0
  283. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +0 -0
  284. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.md +0 -0
  285. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/change-control.md +0 -0
  286. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/detailed-design.md +0 -0
  287. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +0 -0
  288. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +0 -0
  289. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +0 -0
  290. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +0 -0
  291. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +0 -0
  292. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/srs.md +0 -0
  293. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +0 -0
  294. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.md +0 -0
  295. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/formative-eval.md +0 -0
  296. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/summative-eval.md +0 -0
  297. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/task-analysis.md +0 -0
  298. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.md +0 -0
  299. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ui-spec.md +0 -0
  300. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/urra.md +0 -0
  301. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/use-spec.md +0 -0
  302. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fmea.md +0 -0
  303. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fta.md +0 -0
  304. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/har.md +0 -0
  305. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-benefit.md +0 -0
  306. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-matrix.md +0 -0
  307. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmp.md +0 -0
  308. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmr.md +0 -0
  309. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/approval-block.md +0 -0
  310. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/document-control-header.md +0 -0
  311. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/references-section.md +0 -0
  312. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/revision-history-table.md +0 -0
  313. /package/templates/connected-device/{src → model/catalog}/architecture/system.sysml +0 -0
  314. /package/templates/connected-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  315. /package/templates/connected-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  316. /package/templates/default/{src → model/catalog}/architecture/system.sysml +0 -0
  317. /package/templates/default/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  318. /package/templates/default/{src → model/catalog}/assurance/requirements.sysml +0 -0
  319. /package/templates/infusion-pump/{src → model/catalog}/architecture/system.sysml +0 -0
  320. /package/templates/infusion-pump/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  321. /package/templates/infusion-pump/{src → model/catalog}/assurance/requirements.sysml +0 -0
  322. /package/templates/monitoring-device/{src → model/catalog}/architecture/system.sysml +0 -0
  323. /package/templates/monitoring-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  324. /package/templates/monitoring-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  325. /package/templates/samd/{src → model/catalog}/architecture/system.sysml +0 -0
  326. /package/templates/samd/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  327. /package/templates/samd/{src → model/catalog}/assurance/requirements.sysml +0 -0
@@ -1,4 +1,4 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_context {
1
+ package memo_examples_gpca_pump_gpca_context {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_architecture_operational_context_actors::*;
@@ -13,7 +13,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
13
13
  attribute :>> name = "GPCA_IntendedUse";
14
14
  attribute :>> title = "GPCA Pump Intended Use";
15
15
  attribute :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics.";
16
- attribute :>> longDescription = "The GPCA pump delivers a prescribed analgesic drug intravenously at a programmed basal rate, supplemented by square boluses delivered automatically at programmed intervals and by patient-requested bolus doses, subject to lockout intervals and maximum-dose limits.";
16
+ attribute :>> description = "The GPCA pump delivers a prescribed analgesic drug intravenously at a programmed basal rate, supplemented by square boluses delivered automatically at programmed intervals and by patient-requested bolus doses, subject to lockout intervals and maximum-dose limits.";
17
17
  attribute :>> indication = "Management of acute post-operative or chronic pain requiring titrated intravenous opioid analgesia.";
18
18
  attribute :>> contraindication = "Patients unable to comprehend or operate the bolus request mechanism; drugs without safe-value records in the hospital pharmacy database.";
19
19
  attribute :>> patientPopulation = "Adult in-patients under clinical supervision.";
@@ -26,7 +26,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
26
26
  attribute :>> name = "BolusRequestBySomeoneOtherThanPatient";
27
27
  attribute :>> title = "Bolus by proxy";
28
28
  attribute :>> shortDescription = "A caregiver or visitor presses the patient bolus control.";
29
- attribute :>> longDescription = "A person other than the patient activates the bolus request control, bypassing the intended patient self-limiting behavior.";
29
+ attribute :>> description = "A person other than the patient activates the bolus request control, bypassing the intended patient self-limiting behavior.";
30
30
  attribute :>> misuseContext = "Patient-controlled analgesia in a supervised hospital setting.";
31
31
  attribute :>> foreseeableBasis = "Known PCA use pattern represented in the GPCA hazard analysis.";
32
32
  attribute :>> affectedUseContext = "UC-001";
@@ -51,7 +51,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
51
51
  attribute :>> actorKind = ActorKind::patient;
52
52
  attribute :>> id = "ACT-001";
53
53
  attribute :>> name = "Patient";
54
- attribute :>> actorKind = ActorKind::patient;
55
54
  attribute :>> trainingLevel = "instructed by clinician on bolus request button only";
56
55
  attribute :>> description = "Receives the infusion and requests bolus doses via the patient pendant.";
57
56
  }
@@ -59,7 +58,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
59
58
  attribute :>> actorKind = ActorKind::clinician;
60
59
  attribute :>> id = "ACT-002";
61
60
  attribute :>> name = "ClinicianNurse";
62
- attribute :>> actorKind = ActorKind::clinician;
63
61
  attribute :>> trainingLevel = "trained clinical user; programs prescriptions and responds to alarms";
64
62
  attribute :>> description = "Loads the drug reservoir, programs and confirms the prescription, starts/stops therapy, and responds to alarms.";
65
63
  }
@@ -67,7 +65,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
67
65
  attribute :>> actorKind = ActorKind::clinician;
68
66
  attribute :>> id = "ACT-003";
69
67
  attribute :>> name = "PrescribingPhysician";
70
- attribute :>> actorKind = ActorKind::clinician;
71
68
  attribute :>> trainingLevel = "licensed prescriber";
72
69
  attribute :>> description = "Prescribes drug, concentration, basal rate, bolus volume, lockout interval, and maximum dose limits.";
73
70
  }
@@ -75,7 +72,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
75
72
  attribute :>> actorKind = ActorKind::clinician;
76
73
  attribute :>> id = "ACT-004";
77
74
  attribute :>> name = "Pharmacist";
78
- attribute :>> actorKind = ActorKind::clinician;
79
75
  attribute :>> trainingLevel = "licensed pharmacist";
80
76
  attribute :>> description = "Prepares the drug reservoir and verifies drug and concentration against the prescription.";
81
77
  }
@@ -83,7 +79,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
83
79
  attribute :>> actorKind = ActorKind::technician;
84
80
  attribute :>> id = "ACT-005";
85
81
  attribute :>> name = "BiomedicalTechnician";
86
- attribute :>> actorKind = ActorKind::technician;
87
82
  attribute :>> trainingLevel = "service-trained; authenticated service access";
88
83
  attribute :>> description = "Performs maintenance, battery replacement, and calibration through the service interface.";
89
84
  }
@@ -1,4 +1,4 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_cybersecurity {
1
+ package memo_examples_gpca_pump_gpca_cybersecurity {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_assurance_cybersecurity::*;
@@ -7,10 +7,10 @@ package memo_examples_gpca_pump_model_catalog_gpca_cybersecurity {
7
7
  private import memo_assurance_verification_validation::*;
8
8
  private import memo_core_enumerations::*;
9
9
  private import memo_core_relationships::*;
10
- private import memo_examples_gpca_pump_model_catalog_gpca_architecture::*;
11
- private import memo_examples_gpca_pump_model_catalog_gpca_risk::*;
12
- private import memo_examples_gpca_pump_model_catalog_gpca_requirements::*;
13
- private import memo_examples_gpca_pump_model_catalog_gpca_verification::*;
10
+ private import memo_examples_gpca_pump_gpca_architecture::*;
11
+ private import memo_examples_gpca_pump_gpca_risk::*;
12
+ private import memo_examples_gpca_pump_gpca_requirements::*;
13
+ private import memo_examples_gpca_pump_gpca_verification::*;
14
14
 
15
15
  part therapyConfigurationAsset : CybersecurityAsset {
16
16
  attribute :>> id = "AST-CYB-001";
@@ -78,7 +78,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_cybersecurity {
78
78
  attribute :>> cweReference = "CWE-798";
79
79
  }
80
80
 
81
- part tamperedConfigurationScenario : ThreatScenario {
81
+ action tamperedConfigurationScenario : ThreatScenario {
82
82
  attribute :>> id = "SCN-001";
83
83
  attribute :>> name = "TamperedTherapyConfigurationScenario";
84
84
  attribute :>> description = "An attacker with local access to the maintenance port alters lockout or dose parameters, aiming to bypass safety limits; may enable unsafe therapy delivery or bypass safeguards.";
@@ -1,4 +1,4 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
1
+ package memo_examples_gpca_pump_gpca_formal_behavior {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_architecture_functional_behavior::*;
@@ -42,7 +42,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
42
42
  attribute :>> propertyKind = BehaviorPropertyKind::assumption;
43
43
  attribute :>> id = "AP-002";
44
44
  attribute :>> name = "VtbiHighPositive";
45
- attribute :>> propertyKind = BehaviorPropertyKind::assumption;
46
45
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
47
46
  attribute :>> formalExpression = "assume DB_IN.VTBI_High > 0";
48
47
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
@@ -51,7 +50,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
51
50
  attribute :>> propertyKind = BehaviorPropertyKind::assumption;
52
51
  attribute :>> id = "AP-003";
53
52
  attribute :>> name = "EmptyReservoirConstPositive";
54
- attribute :>> propertyKind = BehaviorPropertyKind::assumption;
55
53
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
56
54
  attribute :>> formalExpression = "assume CONST_IN.Empty_Reservoir > 0";
57
55
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
@@ -60,7 +58,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
60
58
  attribute :>> propertyKind = BehaviorPropertyKind::assumption;
61
59
  attribute :>> id = "AP-001";
62
60
  attribute :>> name = "ValidPrescriptionSavedBeforeTherapy";
63
- attribute :>> propertyKind = BehaviorPropertyKind::assumption;
64
61
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
65
62
  attribute :>> formalExpression = "assume a saved prescription is available before infusion initiation";
66
63
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 7)";
@@ -71,7 +68,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
71
68
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
72
69
  attribute :>> id = "GP-001";
73
70
  attribute :>> name = "ModeRange";
74
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
75
71
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
76
72
  attribute :>> formalExpression = "guarantee mode_range: GPCA_SW_OUT.Current_System_Mode in {0, 1, 2, 3, 4, 6, 7, 8} (source enumeration omits 5)";
77
73
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 1)";
@@ -80,7 +76,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
80
76
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
81
77
  attribute :>> id = "GP-004";
82
78
  attribute :>> name = "NotStartImpliesModeZero";
83
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
84
79
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
85
80
  attribute :>> formalExpression = "guarantee not(OP_CMD_IN.System_Start) => GPCA_SW_OUT.Current_System_Mode = 0";
86
81
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
@@ -89,7 +84,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
89
84
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
90
85
  attribute :>> id = "GP-005";
91
86
  attribute :>> name = "InitialSystemStartImpliesModeOne";
92
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
93
87
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
94
88
  attribute :>> formalExpression = "guarantee sys_initial and OP_CMD_IN.System_Start => GPCA_SW_OUT.Current_System_Mode = 1";
95
89
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4 allocation: TLM System_Start -> System_On; IM System_On -> mode 1)";
@@ -98,7 +92,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
98
92
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
99
93
  attribute :>> id = "GP-006";
100
94
  attribute :>> name = "OffToOnImpliesModeOne";
101
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
102
95
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
103
96
  attribute :>> formalExpression = "guarantee not(sys_initial) and pre(GPCA_SW_OUT.Current_System_Mode) = 0 and OP_CMD_IN.System_Start => GPCA_SW_OUT.Current_System_Mode = 1";
104
97
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4)";
@@ -107,7 +100,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
107
100
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
108
101
  attribute :>> id = "GP-007";
109
102
  attribute :>> name = "EmptyReservoirImpliesNoFlow";
110
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
111
103
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
112
104
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and pre(Current_System_Mode) > 1 and GPCA_SW_OUT.Reservoir_Volume < CONST_IN.Empty_Reservoir) => GPCA_SW_OUT.Commanded_Flow_Rate = 0";
113
105
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 59 'Empty Reservoir')";
@@ -116,7 +108,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
116
108
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
117
109
  attribute :>> id = "GP-008";
118
110
  attribute :>> name = "OverVtbiImpliesFlowAtMostKvo";
119
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
120
111
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
121
112
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and pre(Current_System_Mode) > 1 and GPCA_SW_OUT.Volume_Infused > DB_IN.VTBI_High) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
122
113
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (over-infusion => keep-vein-open, not zero)";
@@ -125,7 +116,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
125
116
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
126
117
  attribute :>> id = "GP-009";
127
118
  attribute :>> name = "AirInLineImpliesFlowAtMostKvo";
128
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
129
119
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
130
120
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Air_In_Line) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
131
121
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 21 'Air embolism')";
@@ -134,7 +124,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
134
124
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
135
125
  attribute :>> id = "GP-010";
136
126
  attribute :>> name = "OcclusionImpliesFlowAtMostKvo";
137
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
138
127
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
139
128
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Occlusion) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
140
129
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
@@ -143,7 +132,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
143
132
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
144
133
  attribute :>> id = "GP-011";
145
134
  attribute :>> name = "DoorOpenImpliesFlowAtMostKvo";
146
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
147
135
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
148
136
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Door_Open) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
149
137
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
@@ -152,7 +140,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
152
140
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
153
141
  attribute :>> id = "GP-003";
154
142
  attribute :>> name = "SameStepAlarmKvoGuarantee";
155
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
156
143
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
157
144
  attribute :>> formalExpression = "guarantee an infusion-inhibiting notification in a step implies Commanded_Flow_Rate <= Flow_Rate_KVO in the same step (ALARM_OUT -> IM.ALARM_IN is an immediate connection)";
158
145
  attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) with the flow <= KVO guarantees above";
@@ -161,7 +148,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
161
148
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
162
149
  attribute :>> id = "GP-002";
163
150
  attribute :>> name = "LockoutGuarantee";
164
- attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
165
151
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
166
152
  attribute :>> formalExpression = "guarantee a BolusRequest_prog inside the LockOutPeriod_pbolus_prog window is ignored and no PATIENT BOLUS is initiated";
167
153
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 25.3, REQ 26)";
@@ -1,10 +1,12 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
1
+ package memo_examples_gpca_pump_gpca_interfaces {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_architecture_logical_interfaces::*;
5
+ private import memo_architecture_realization_physical::*;
5
6
  private import memo_architecture_functional_functions::*;
6
- private import memo_examples_gpca_pump_model_catalog_gpca_architecture::*;
7
- private import memo_examples_gpca_pump_model_catalog_gpca_behavior_subsystems::*;
7
+ private import memo_core_common::*;
8
+ private import memo_examples_gpca_pump_gpca_architecture::*;
9
+ private import memo_examples_gpca_pump_gpca_behavior_subsystems::*;
8
10
  private import memo_core_enumerations::*;
9
11
  private import memo_core_dimensions::*;
10
12
  abstract interface def SensorDataInterface :> DataInterface {
@@ -12,7 +14,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
12
14
  attribute :>> protocolSemantics = "flow, air, occlusion, door, battery, cpu, memory, pump state";
13
15
  }
14
16
  port def SensorInputPort :> SensorPort {
15
- attribute :>> direction = DirectionKind::input;
17
+ in item sensorData : MemoExchangeItem;
16
18
  attribute :>> interfaceType = "SensorDataInterface";
17
19
  attribute :>> sensorDomain = "physiological and device state";
18
20
  }
@@ -53,7 +55,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
53
55
  attribute :>> name = "HW_SW_DataBus";
54
56
  attribute :>> interfaceKind = InterfaceKind::digitalSignal;
55
57
  attribute :>> protocol = "immediate data port mapping";
56
- attribute :>> directionality = DirectionKind::bidirectional;
58
+ attribute :>> directionality = DirectionKind::inputOutput;
57
59
  attribute :>> bandwidth = "implementation-defined";
58
60
  attribute :>> timingConstraint = "same execution step where required";
59
61
  attribute :>> electricalStandard = "logical/AADL";
@@ -149,7 +151,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
149
151
  attribute :>> id = "SI-005";
150
152
  attribute :>> name = "HospitalPharmacyDatabaseInterface";
151
153
  attribute :>> interfaceKind = InterfaceKind::data;
152
- attribute :>> direction = DirectionKind::bidirectional;
154
+ attribute :>> direction = DirectionKind::inputOutput;
153
155
  attribute :>> protocol = "CriSys I 9, I 10, I 11";
154
156
  attribute :>> protocolSemantics = "Retrieves the safe-value set (concentration, VTBI, flow rate, bolus interval/count, KVO rate) where DrugName_hd = DrugName_prog; resets to defaults when no record matches";
155
157
  attribute :>> interactionPattern = "query/response safe-value lookup";
@@ -572,7 +574,10 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
572
574
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.5 Hospital Pharmacy Database Interface";
573
575
  }
574
576
 
575
- // ── Device-boundary exchanges (GPCA_Device.aadl level) ─────
577
+ // ── MEMO functional-to-physical allocation abstractions ────
578
+ // These four exchanges summarize requirements-derived physical design
579
+ // intent. They are not the named port connections in GPCA_Device.aadl;
580
+ // the exact AADL feature topology is authored below and in gpca_trace.
576
581
  part exSensorVector : ComponentExchange {
577
582
  attribute :>> id = "CE-001";
578
583
  attribute :>> name = "SensorStatusVectorExchange";
@@ -584,7 +589,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
584
589
  ref :>> allocatedExchanges = lfSensorAcquisition;
585
590
  attribute :>> direction = DirectionKind::input;
586
591
  attribute :>> timingSemantics = "immediate (same-step delivery, Communication_Properties::Timing => immediate)";
587
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_Device.aadl";
592
+ attribute :>> sourceReference = "MEMO design extension allocated from LF-001; not a GPCA_Device.aadl connection";
588
593
  }
589
594
  part exFlowCommand : ComponentExchange {
590
595
  attribute :>> id = "CE-002";
@@ -597,7 +602,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
597
602
  ref :>> allocatedExchanges = lfFlowCommand;
598
603
  attribute :>> direction = DirectionKind::output;
599
604
  attribute :>> timingSemantics = "immediate (same-step delivery, Communication_Properties::Timing => immediate)";
600
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_Device.aadl";
605
+ attribute :>> sourceReference = "MEMO design extension allocated from LF-002; not a GPCA_Device.aadl connection";
601
606
  }
602
607
  part exAlarmAnnunciation : ComponentExchange {
603
608
  attribute :>> id = "CE-003";
@@ -610,7 +615,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
610
615
  ref :>> allocatedExchanges = lfAlarmSignal;
611
616
  attribute :>> direction = DirectionKind::output;
612
617
  attribute :>> timingSemantics = "immediate (same-step delivery, Communication_Properties::Timing => immediate)";
613
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_Device.aadl";
618
+ attribute :>> sourceReference = "MEMO design extension allocated from LF-003; not a GPCA_Device.aadl connection";
614
619
  }
615
620
  part exPrescriptionEntry : ComponentExchange {
616
621
  attribute :>> id = "CE-004";
@@ -623,9 +628,34 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
623
628
  ref :>> allocatedExchanges = lfPrescriptionEntry;
624
629
  attribute :>> direction = DirectionKind::input;
625
630
  attribute :>> timingSemantics = "immediate (same-step delivery, Communication_Properties::Timing => immediate)";
626
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, packages/GPCA_Device.aadl";
631
+ attribute :>> sourceReference = "MEMO design extension allocated from LF-004; not a GPCA_Device.aadl connection";
627
632
  }
628
633
 
634
+ // ── GPCA_Device and hardware-subsystem ports (AADL, 1:1) ───
635
+ // The published AADL hardware packages are interface wrappers: they do
636
+ // not decompose into the individual physical parts modelled elsewhere in
637
+ // this MEMO example. These features and their connections are therefore
638
+ // kept exact and separate from that extended physical design content.
639
+ part devOpCmdIn : PhysicalPort { attribute :>> id = "PORT-DEV-01"; attribute :>> name = "OP_CMD_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
640
+ part devDbIn : PhysicalPort { attribute :>> id = "PORT-DEV-02"; attribute :>> name = "DB_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
641
+ part devPresIn : PhysicalPort { attribute :>> id = "PORT-DEV-03"; attribute :>> name = "PRES_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
642
+ part devPatientIn : PhysicalPort { attribute :>> id = "PORT-DEV-04"; attribute :>> name = "PATIENT_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
643
+ part devGpcaOut : PhysicalPort { attribute :>> id = "PORT-DEV-05"; attribute :>> name = "GPCA_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
644
+
645
+ part snsOpCmdIn : PhysicalPort { attribute :>> id = "PORT-SNS-01"; attribute :>> name = "OP_CMD_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
646
+ part snsDbIn : PhysicalPort { attribute :>> id = "PORT-SNS-02"; attribute :>> name = "DB_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
647
+ part snsPresIn : PhysicalPort { attribute :>> id = "PORT-SNS-03"; attribute :>> name = "PRES_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
648
+ part snsPatientIn : PhysicalPort { attribute :>> id = "PORT-SNS-04"; attribute :>> name = "PATIENT_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
649
+ part snsOpCmdOut : PhysicalPort { attribute :>> id = "PORT-SNS-05"; attribute :>> name = "OP_CMD_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
650
+ part snsPresOut : PhysicalPort { attribute :>> id = "PORT-SNS-06"; attribute :>> name = "PRES_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
651
+ part snsPatientOut : PhysicalPort { attribute :>> id = "PORT-SNS-07"; attribute :>> name = "PATIENT_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
652
+ part snsSensorOut : PhysicalPort { attribute :>> id = "PORT-SNS-08"; attribute :>> name = "SENSOR_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
653
+ part snsConstOut : PhysicalPort { attribute :>> id = "PORT-SNS-09"; attribute :>> name = "CONST_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
654
+ part snsDbOut : PhysicalPort { attribute :>> id = "PORT-SNS-10"; attribute :>> name = "DB_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
655
+
656
+ part actGpcaSwIn : PhysicalPort { attribute :>> id = "PORT-ACT-01"; attribute :>> name = "GPCA_SW_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; }
657
+ part actGpcaOut : PhysicalPort { attribute :>> id = "PORT-ACT-02"; attribute :>> name = "GPCA_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; }
658
+
629
659
  // ── GPCA_SW top-level ports (AADL GPCA_SW.aadl features) ────
630
660
  part portOpCmdIn : SoftwarePort {
631
661
  attribute :>> id = "PORT-01"; attribute :>> name = "OP_CMD_IN";
@@ -1,4 +1,4 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_operational {
1
+ package memo_examples_gpca_pump_gpca_operational {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_architecture_operational_structure::*;
@@ -7,7 +7,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
7
7
  private import memo_architecture_operational_use_cases::*;
8
8
  private import memo_architecture_operational_workflows::*;
9
9
  private import memo_core_enumerations::*;
10
- private import memo_examples_gpca_pump_model_catalog_gpca_context::*;
10
+ private import memo_examples_gpca_pump_gpca_context::*;
11
+ private import memo_core_relationships::*;
11
12
 
12
13
  // ── Operational entities beyond the human actors ────────────
13
14
  part entityPharmacy : OperationalEntity {
@@ -234,7 +235,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
234
235
  }
235
236
 
236
237
  // ── Operational scenarios ───────────────────────────────────
237
- part osNominalTherapy : OperativeScenario {
238
+ action osNominalTherapy : OperativeScenario {
238
239
  attribute :>> id = "OS-001";
239
240
  attribute :>> name = "NominalTherapySession";
240
241
  attribute :>> variantKind = ScenarioVariantKind::nominal;
@@ -247,10 +248,11 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
247
248
  ref :>> parentUseCase = ucDeliverPcaTherapy;
248
249
  ref :>> activities = oaCompleteNominalTherapy;
249
250
  }
250
- part osLockoutBolus : OperativeScenario {
251
+ action osLockoutBolus : OperativeScenario {
251
252
  attribute :>> id = "OS-002";
252
253
  attribute :>> name = "BolusRequestDuringLockout";
253
254
  attribute :>> variantKind = ScenarioVariantKind::alternate;
255
+ attribute :>> variationPoint = "patient bolus request during the nominal therapy lockout interval";
254
256
  attribute :>> operationalCondition = OperationalConditionKind::foreseeableMisuse;
255
257
  attribute :>> preCondition = "basal infusion active; lockout interval running";
256
258
  attribute :>> postCondition = "request ignored, logged; basal continues unchanged";
@@ -258,12 +260,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
258
260
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (lockout requirements)";
259
261
  ref :>> parentWorkflow = wfManageActiveTherapy;
260
262
  ref :>> parentUseCase = ucDeliverPcaTherapy;
263
+ ref :>> baseScenario = osNominalTherapy;
261
264
  ref :>> activities = oaRejectBolusDuringLockout;
262
265
  }
263
- part osOcclusionAlarm : OperativeScenario {
266
+ action osOcclusionAlarm : OperativeScenario {
264
267
  attribute :>> id = "OS-003";
265
268
  attribute :>> name = "OcclusionDetectedDuringInfusion";
266
269
  attribute :>> variantKind = ScenarioVariantKind::exception;
270
+ attribute :>> variationPoint = "occlusion detected while nominal infusion is active";
267
271
  attribute :>> operationalCondition = OperationalConditionKind::degraded;
268
272
  attribute :>> preCondition = "therapy active; downstream line becomes blocked";
269
273
  attribute :>> postCondition = "infusion paused, alarm annunciated, clinician clears occlusion and resumes";
@@ -271,12 +275,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
271
275
  attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms and Alerts (occlusion)";
272
276
  ref :>> parentWorkflow = wfRespondToTherapyAlarm;
273
277
  ref :>> parentUseCase = ucDeliverPcaTherapy;
278
+ ref :>> baseScenario = osNominalTherapy;
274
279
  ref :>> activities = oaRespondToOcclusion;
275
280
  }
276
- part osAirInLine : OperativeScenario {
281
+ action osAirInLine : OperativeScenario {
277
282
  attribute :>> id = "OS-004";
278
283
  attribute :>> name = "AirInLineDetected";
279
284
  attribute :>> variantKind = ScenarioVariantKind::exception;
285
+ attribute :>> variationPoint = "air-in-line detected while nominal infusion is active";
280
286
  attribute :>> operationalCondition = OperationalConditionKind::degraded;
281
287
  attribute :>> preCondition = "therapy active; air bubble enters tubing";
282
288
  attribute :>> postCondition = "infusion stopped before air reaches patient; alarm annunciated";
@@ -284,12 +290,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
284
290
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Air embolism)";
285
291
  ref :>> parentWorkflow = wfRespondToTherapyAlarm;
286
292
  ref :>> parentUseCase = ucDeliverPcaTherapy;
293
+ ref :>> baseScenario = osNominalTherapy;
287
294
  ref :>> activities = oaRespondToAirInLine;
288
295
  }
289
- part osEmptyReservoir : OperativeScenario {
296
+ action osEmptyReservoir : OperativeScenario {
290
297
  attribute :>> id = "OS-005";
291
298
  attribute :>> name = "ReservoirEmptyDuringTherapy";
292
299
  attribute :>> variantKind = ScenarioVariantKind::exception;
300
+ attribute :>> variationPoint = "reservoir-empty threshold reached during nominal therapy";
293
301
  attribute :>> operationalCondition = OperationalConditionKind::degraded;
294
302
  attribute :>> preCondition = "therapy active; reservoir volume reaches empty threshold";
295
303
  attribute :>> postCondition = "infusion stopped, alarm raised, reservoir replaced";
@@ -297,12 +305,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
297
305
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Empty Reservoir)";
298
306
  ref :>> parentWorkflow = wfRespondToTherapyAlarm;
299
307
  ref :>> parentUseCase = ucDeliverPcaTherapy;
308
+ ref :>> baseScenario = osNominalTherapy;
300
309
  ref :>> activities = oaReplaceEmptyReservoir;
301
310
  }
302
- part osPowerLoss : OperativeScenario {
311
+ action osPowerLoss : OperativeScenario {
303
312
  attribute :>> id = "OS-006";
304
313
  attribute :>> name = "MainsPowerLossAndRecovery";
305
314
  attribute :>> variantKind = ScenarioVariantKind::recovery;
315
+ attribute :>> variationPoint = "mains supply lost during nominal therapy";
306
316
  attribute :>> operationalCondition = OperationalConditionKind::degraded;
307
317
  attribute :>> preCondition = "therapy active on mains power";
308
318
  attribute :>> postCondition = "therapy continues on battery; prescription preserved across full power loss";
@@ -310,6 +320,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
310
320
  attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.3 Electrical Hazards (battery failure)";
311
321
  ref :>> parentWorkflow = wfRespondToTherapyAlarm;
312
322
  ref :>> parentUseCase = ucDeliverPcaTherapy;
323
+ ref :>> baseScenario = osNominalTherapy;
313
324
  ref :>> activities = oaRecoverAfterPowerLoss;
314
325
  }
315
326
  connection : Realizes connect realizing ::> osNominalTherapy to realized ::> ucDeliverPcaTherapy;
@@ -1,4 +1,4 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_physical {
1
+ package memo_examples_gpca_pump_gpca_physical {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_architecture_realization_physical::*;
@@ -41,7 +41,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_physical {
41
41
  attribute :>> name = "ServiceMaintenancePort";
42
42
  attribute :>> portKind = InterfaceKind::api;
43
43
  attribute :>> connectorType = "covered UART/USB service connector";
44
- attribute :>> direction = DirectionKind::bidirectional;
44
+ attribute :>> direction = DirectionKind::inputOutput;
45
45
  }
46
46
  part portMainsInlet : PhysicalPort {
47
47
  attribute :>> id = "PP-005";
@@ -1,4 +1,4 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_requirements {
1
+ package memo_examples_gpca_pump_gpca_requirements {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_assurance_requirements::*;
@@ -1,4 +1,4 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_risk {
1
+ package memo_examples_gpca_pump_gpca_risk {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_assurance_safety_risk::*;
@@ -71,6 +71,15 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
71
71
  attribute :>> year = "2009";
72
72
  }
73
73
 
74
+ part citeCriSysSoftwareBehavior : Citation {
75
+ attribute :>> id = "CITE-009";
76
+ attribute :>> name = "CriSysGpcaSoftwareBehaviorModel";
77
+ attribute :>> source = "PCA Pump Software Model (Simulink/Stateflow) — University of Minnesota CriSys";
78
+ attribute :>> section = "Infusion Pump Software Model Stateflow chart";
79
+ attribute :>> uri = "https://crisys.cs.umn.edu/downloads/gpca/PCA_Pump_SoftwareModel.mdl";
80
+ attribute :>> year = "undated";
81
+ }
82
+
74
83
  // ── Shared risk matrix ───────────────────────────────────────────
75
84
  part riskMatrix : RiskMatrix {
76
85
  attribute :>> id = "RMX-001";
@@ -1,10 +1,13 @@
1
- package memo_examples_gpca_pump_model_catalog_gpca_system {
1
+ package memo_examples_gpca_pump_gpca_system {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_architecture_functional_functions::*;
5
- private import memo_examples_gpca_pump_model_catalog_gpca_behavior_subsystems::*;
5
+ private import memo_examples_gpca_pump_gpca_behavior_subsystems::*;
6
6
  private import memo_architecture_operational_scenarios::*;
7
7
  private import memo_core_enumerations::*;
8
+ private import memo_architecture_operational_structure::*;
9
+ private import memo_architecture_operational_use_cases::*;
10
+ private import memo_core_common::*;
8
11
 
9
12
  part gpcaMission : Mission {
10
13
  attribute :>> id = "MSN-001";
@@ -21,68 +24,69 @@ package memo_examples_gpca_pump_model_catalog_gpca_system {
21
24
  attribute :>> id = "FC-001";
22
25
  attribute :>> name = "PatientBolusChain";
23
26
  attribute :>> flowCategory = FunctionalFlowKind::nominal;
24
- ref :>> startFunction = fnAcquireSensors;
25
- ref :>> endFunction = fnCommandPump;
26
27
  attribute :>> endToEndLatencyBudgetMs = "100";
27
28
  attribute :>> safetyRelevant = true;
28
29
  attribute :>> securityRelevant = false;
29
30
  attribute :>> description = "Bolus button press through lockout/max-dose check to pump actuation and logging.";
30
31
  }
31
- part fcsBolusSense : FunctionalFlowStep {
32
+ action fcsBolusSense : FunctionalFlowStep {
32
33
  attribute :>> id = "FCS-001"; attribute :>> name = "SenseBolusRequest";
33
- attribute :>> stepOrder = "1"; ref :>> function = fnAcquireSensors; ref :>> exchangedItem = ddBolusRequest;
34
+ ref :>> function = fnAcquireSensors; ref :>> exchangedItem = ddBolusRequest;
34
35
  }
35
- part fcsBolusValidate : FunctionalFlowStep {
36
+ action fcsBolusValidate : FunctionalFlowStep {
36
37
  attribute :>> id = "FCS-002"; attribute :>> name = "CheckLockoutAndMaxDose";
37
- attribute :>> stepOrder = "2"; ref :>> function = fnEnforceLimits; ref :>> exchangedItem = ddPrescription;
38
+ ref :>> function = fnEnforceLimits; ref :>> exchangedItem = ddPrescription;
38
39
  }
39
- part fcsBolusCommand : FunctionalFlowStep {
40
+ action fcsBolusCommand : FunctionalFlowStep {
40
41
  attribute :>> id = "FCS-003"; attribute :>> name = "CommandBolusFlow";
41
- attribute :>> stepOrder = "3"; ref :>> function = fnManageInfusion; ref :>> exchangedItem = cdFlowCommand;
42
+ ref :>> function = fnManageInfusion; ref :>> exchangedItem = cdFlowCommand;
42
43
  }
43
- part fcsBolusActuate : FunctionalFlowStep {
44
+ action fcsBolusActuate : FunctionalFlowStep {
44
45
  attribute :>> id = "FCS-004"; attribute :>> name = "ActuatePumpMotor";
45
- attribute :>> stepOrder = "4"; ref :>> function = fnCommandPump; ref :>> exchangedItem = cdFlowCommand;
46
+ ref :>> function = fnCommandPump; ref :>> exchangedItem = cdFlowCommand;
46
47
  }
47
- part fcsBolusLog : FunctionalFlowStep {
48
+ action fcsBolusLog : FunctionalFlowStep {
48
49
  attribute :>> id = "FCS-005"; attribute :>> name = "LogBolusOutcome";
49
- attribute :>> stepOrder = "5"; ref :>> function = fnLogEvents; ref :>> exchangedItem = ddEventRecord;
50
+ ref :>> function = fnLogEvents; ref :>> exchangedItem = ddEventRecord;
50
51
  }
52
+ first fcsBolusSense then fcsBolusValidate;
53
+ first fcsBolusValidate then fcsBolusCommand;
54
+ first fcsBolusCommand then fcsBolusActuate;
55
+ first fcsBolusActuate then fcsBolusLog;
51
56
 
52
57
  part fcAlarmStop : FunctionalFlow {
53
58
  attribute :>> id = "FC-002";
54
59
  attribute :>> name = "AlarmDetectionToSafeStateChain";
55
60
  attribute :>> flowCategory = FunctionalFlowKind::alarm;
56
- ref :>> startFunction = fnAcquireSensors;
57
- ref :>> endFunction = fnAnnunciate;
58
61
  attribute :>> endToEndLatencyBudgetMs = "20";
59
62
  attribute :>> safetyRelevant = true;
60
63
  attribute :>> securityRelevant = false;
61
64
  attribute :>> description = "Sensor condition through alarm evaluation to same-step transition to PAUSED (KVO flow, REQ 43) and annunciation.";
62
65
  }
63
- part fcsAlarmSense : FunctionalFlowStep {
66
+ action fcsAlarmSense : FunctionalFlowStep {
64
67
  attribute :>> id = "FCS-006"; attribute :>> name = "SenseAlarmCondition";
65
- attribute :>> stepOrder = "1"; ref :>> function = fnAcquireSensors; ref :>> exchangedItem = ddSensorVector;
68
+ ref :>> function = fnAcquireSensors; ref :>> exchangedItem = ddSensorVector;
66
69
  }
67
- part fcsAlarmEvaluate : FunctionalFlowStep {
70
+ action fcsAlarmEvaluate : FunctionalFlowStep {
68
71
  attribute :>> id = "FCS-007"; attribute :>> name = "EvaluateAlarmCondition";
69
- attribute :>> stepOrder = "2"; ref :>> function = fnMonitorAlarm; ref :>> exchangedItem = ddSensorVector;
72
+ ref :>> function = fnMonitorAlarm; ref :>> exchangedItem = ddSensorVector;
70
73
  }
71
- part fcsAlarmStopInfusion : FunctionalFlowStep {
74
+ action fcsAlarmStopInfusion : FunctionalFlowStep {
72
75
  attribute :>> id = "FCS-008"; attribute :>> name = "LimitFlowToKvoSameStep";
73
- attribute :>> stepOrder = "3"; ref :>> function = fnManageInfusion; ref :>> exchangedItem = cdAlarmSignal;
76
+ ref :>> function = fnManageInfusion; ref :>> exchangedItem = cdAlarmSignal;
74
77
  }
75
- part fcsAlarmAnnunciate : FunctionalFlowStep {
78
+ action fcsAlarmAnnunciate : FunctionalFlowStep {
76
79
  attribute :>> id = "FCS-009"; attribute :>> name = "AnnunciateAudibleVisual";
77
- attribute :>> stepOrder = "4"; ref :>> function = fnAnnunciate; ref :>> exchangedItem = cdAlarmSignal;
80
+ ref :>> function = fnAnnunciate; ref :>> exchangedItem = cdAlarmSignal;
78
81
  }
82
+ first fcsAlarmSense then fcsAlarmEvaluate;
83
+ first fcsAlarmEvaluate then fcsAlarmStopInfusion;
84
+ first fcsAlarmStopInfusion then fcsAlarmAnnunciate;
79
85
 
80
86
  part fcStartup : FunctionalFlow {
81
87
  attribute :>> id = "FC-003";
82
88
  attribute :>> name = "PowerOnSelfTestChain";
83
89
  attribute :>> flowCategory = FunctionalFlowKind::startup;
84
- ref :>> startFunction = fnManagePower;
85
- ref :>> endFunction = fnPresentStatus;
86
90
  attribute :>> endToEndLatencyBudgetMs = "5000";
87
91
  attribute :>> safetyRelevant = true;
88
92
  attribute :>> securityRelevant = false;
@@ -90,22 +94,22 @@ package memo_examples_gpca_pump_model_catalog_gpca_system {
90
94
  }
91
95
 
92
96
  // ── System scenarios ────────────────────────────────────────
93
- part ssBolusDuringBasal : FunctionalScenario {
97
+ action ssBolusDuringBasal : FunctionalScenario {
94
98
  attribute :>> id = "SS-001";
95
99
  attribute :>> name = "PatientBolusDuringBasal";
96
100
  attribute :>> variantKind = ScenarioVariantKind::nominal;
97
101
  attribute :>> operationalCondition = OperationalConditionKind::normal;
98
- attribute :>> sequenceDiagramRef = "VIEW-BHV-002";
99
102
  attribute :>> preCondition = "BASAL mode active; no REQ 25 ignore condition holds";
100
103
  attribute :>> postCondition = "PATIENT_BOLUS mode entered, bolus delivered, return to BASAL";
101
104
  }
102
- part ssAlarmPause : FunctionalScenario {
105
+ action ssAlarmPause : FunctionalScenario {
103
106
  attribute :>> id = "SS-002";
104
107
  attribute :>> name = "InhibitingNotificationPausesInfusion";
105
108
  attribute :>> variantKind = ScenarioVariantKind::exception;
109
+ attribute :>> variationPoint = "an infusion-inhibiting notification interrupts active therapy";
106
110
  attribute :>> operationalCondition = OperationalConditionKind::degraded;
107
- attribute :>> sequenceDiagramRef = "VIEW-BHV-002";
108
111
  attribute :>> preCondition = "any ACTIVE therapy mode; infusion-inhibiting notification detected (REQ 59)";
109
112
  attribute :>> postCondition = "PAUSED mode entered in same execution step at FlowRate_kvo_hd keep-vein-open flow; notification annunciated per REQ 59";
113
+ ref :>> baseScenario = ssBolusDuringBasal;
110
114
  }
111
115
  }