@memoarchitect/ontology 0.8.22 → 0.10.9

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 (240) hide show
  1. package/README.md +1 -1
  2. package/examples/connected-patient-monitor/memo.package.yaml +3 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  4. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  5. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
  6. package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +11 -9
  8. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  9. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
  10. package/examples/functional-logical-physical/memo.package.yaml +3 -0
  11. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +9 -7
  12. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  13. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
  14. package/examples/gpca-pump/memo.identity.yaml +2179 -0
  15. package/examples/gpca-pump/memo.package.yaml +3 -0
  16. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  17. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  18. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  19. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  20. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  21. package/examples/gpca-pump/model/catalog/gpca_context.sysml +27 -23
  22. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +15 -15
  23. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  24. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  25. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +146 -180
  26. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  27. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
  28. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  29. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  30. package/examples/gpca-pump/model/catalog/gpca_system.sysml +21 -33
  31. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -11
  32. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  33. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  34. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +7 -7
  35. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +7 -7
  36. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +6 -7
  37. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +7 -8
  38. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +6 -6
  39. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +6 -6
  40. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +6 -6
  41. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +8 -9
  42. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +6 -6
  43. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +6 -6
  44. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +6 -6
  45. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +6 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +7 -7
  47. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +6 -6
  48. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +6 -6
  49. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +8 -9
  50. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +6 -6
  51. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -7
  52. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +6 -7
  53. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +6 -6
  54. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +6 -6
  55. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +6 -7
  56. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +6 -6
  57. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +8 -9
  58. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +6 -7
  59. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +6 -6
  60. package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
  61. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +10 -8
  62. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  63. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
  64. package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
  65. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +7 -5
  66. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  67. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
  68. package/examples/multidimensional-layers/memo.package.yaml +3 -0
  69. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  70. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  71. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
  72. package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
  73. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  74. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  75. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
  76. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
  77. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  78. package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
  79. package/examples/reusable-instrument/memo.package.yaml +3 -0
  80. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  81. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +23 -31
  82. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
  83. package/examples/ros-mobile-robot/memo.package.yaml +3 -0
  84. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  85. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  86. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +0 -1
  87. package/examples/software-only-medical-device/memo.package.yaml +3 -0
  88. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  89. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -9
  90. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
  91. package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
  92. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  93. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -69
  94. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
  95. package/examples/surgical-robot/memo.package.yaml +3 -0
  96. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  97. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  98. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
  99. package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
  100. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  101. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -11
  102. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -7
  103. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +4 -3
  104. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +3 -3
  105. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +17 -16
  106. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +9 -8
  107. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +4 -3
  108. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +3 -3
  109. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +4 -3
  110. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -9
  111. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  112. package/examples/temperature-alarm/memo.package.yaml +3 -0
  113. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  114. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +30 -29
  115. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
  116. package/examples/ui-screen-regions/memo.package.yaml +3 -0
  117. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  118. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  119. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  120. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  121. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  122. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  123. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  124. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  125. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
  126. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  127. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  128. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  129. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  130. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  131. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +6 -5
  132. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +6 -5
  133. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +6 -5
  134. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +4 -3
  135. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +4 -3
  136. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +4 -3
  137. package/extensions/aadl/memo.package.yaml +1 -1
  138. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  139. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  140. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  141. package/extensions/cloud/memo.package.yaml +1 -1
  142. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  143. package/extensions/container/memo.package.yaml +1 -1
  144. package/extensions/container/src/container_extension.sysml +2 -2
  145. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  146. package/extensions/messaging/memo.package.yaml +1 -1
  147. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  148. package/extensions/ros/memo.package.yaml +1 -1
  149. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  150. package/extensions/template/src/extension.sysml +3 -1
  151. package/methodologies/default/memo.package.yaml +1 -1
  152. package/methodologies/gpca/memo.package.yaml +1 -1
  153. package/ontology/memo.package.yaml +1 -1
  154. package/package.json +2 -2
  155. package/profile/memo.package.yaml +1 -1
  156. package/src/architecture/functional/behavior/memo_behavior.sysml +5 -5
  157. package/src/architecture/functional/functions/memo_functions.sysml +6 -6
  158. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  159. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  160. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +7 -7
  161. package/src/architecture/implementation/ui/memo_ui.sysml +8 -31
  162. package/src/architecture/logical/interfaces/memo_interfaces.sysml +4 -2
  163. package/src/architecture/logical/structure/memo_logical_structure.sysml +5 -5
  164. package/src/architecture/operational/activities/memo_activities.sysml +19 -28
  165. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -4
  166. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +7 -7
  167. package/src/architecture/operational/context/use_context/memo_use_context.sysml +5 -14
  168. package/src/architecture/operational/scenarios/memo_scenarios.sysml +12 -104
  169. package/src/architecture/operational/structure/memo_operational.sysml +42 -13
  170. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -12
  171. package/src/architecture/operational/workflows/memo_workflows.sysml +20 -42
  172. package/src/architecture/realization/deployment/memo_deployment.sysml +26 -19
  173. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  174. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  175. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  176. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  177. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  178. package/src/artifacts/standards/iec_60812.sysml +21 -22
  179. package/src/artifacts/standards/iec_62304.sysml +150 -169
  180. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  181. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  182. package/src/artifacts/standards/iso_13485.sysml +80 -89
  183. package/src/artifacts/standards/iso_14971.sysml +66 -73
  184. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  185. package/src/artifacts/templates/dhf/system/sad.md +3 -3
  186. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +2 -2
  187. package/src/assurance/human_factors/memo_human_factors.sysml +2 -2
  188. package/src/assurance/requirements/memo_requirements.sysml +2 -18
  189. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +1 -1
  190. package/src/assurance/safety_risk/memo_risk.sysml +12 -0
  191. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  192. package/src/core/common/memo_common.sysml +59 -55
  193. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  194. package/src/core/relationships/memo_relationships.sysml +29 -56
  195. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  196. package/src/methodology/core/memo_core.sysml +0 -10
  197. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  198. package/src/methodology/workflow/memo_workflow.sysml +5 -5
  199. package/src/rules/closure/closure_rules.sysml +22 -20
  200. package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
  201. package/src/rules/ontology/ontology_invariants.sysml +121 -48
  202. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  203. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +58 -57
  204. package/src/viewpoints/clinical/clinical_viewpoint.sysml +5 -4
  205. package/src/viewpoints/context/context_viewpoint.sysml +6 -5
  206. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +6 -5
  207. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +6 -6
  208. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +36 -4
  209. package/src/viewpoints/functional/functional_viewpoint.sysml +6 -5
  210. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +6 -5
  211. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +6 -5
  212. package/src/viewpoints/logical/logical_viewpoint.sysml +5 -4
  213. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +6 -5
  214. package/src/viewpoints/operational/operational_viewpoint.sysml +6 -5
  215. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +7 -6
  216. package/src/viewpoints/physical/physical_viewpoint.sysml +5 -4
  217. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +6 -5
  218. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +6 -5
  219. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  220. package/src/viewpoints/requirements/requirements_viewpoint.sysml +5 -4
  221. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +6 -5
  222. package/src/viewpoints/risk/risk_viewpoint.sysml +5 -4
  223. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +6 -5
  224. package/src/viewpoints/software/software_viewpoint.sysml +5 -4
  225. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +6 -5
  226. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +5 -4
  227. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  228. package/src/viewpoints/usability/usability_viewpoint.sysml +5 -4
  229. package/src/viewpoints/verification/verification_viewpoint.sysml +5 -4
  230. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +6 -5
  231. package/templates/connected-device/memo.package.yaml +2 -0
  232. package/templates/connected-device/model/catalog/project.sysml +3 -1
  233. package/templates/default/memo.package.yaml +2 -0
  234. package/templates/default/model/catalog/project.sysml +3 -1
  235. package/templates/infusion-pump/memo.package.yaml +2 -0
  236. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  237. package/templates/monitoring-device/memo.package.yaml +2 -0
  238. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  239. package/templates/samd/memo.package.yaml +2 -0
  240. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -12,23 +12,25 @@ package memo_examples_gpca_pump_gpca_operational {
12
12
  private import memo_examples_gpca_pump_gpca_system::*;
13
13
  private import memo_core_relationships::*;
14
14
 
15
+ private import memo_core_common::*;
16
+ private import memo_core_common::MemoIdentity;
15
17
  // ── Operational entities beyond the human actors ────────────
16
18
  part entityPharmacy : OperationalEntity {
17
- attribute :>> id = "OE-001";
19
+ @MemoIdentity { :>> providedId = "OE-001"; }
18
20
  attribute :>> name = "HospitalPharmacy";
19
21
  attribute :>> entityKind = OperationalEntityKind::externalSystem;
20
22
  attribute :>> operationalDomain = "medication management";
21
23
  attribute :>> responsibility = "Prepares labeled drug reservoirs and maintains the hospital pharmacy database of drug safe values.";
22
24
  }
23
25
  part entityPowerInfrastructure : OperationalEntity {
24
- attribute :>> id = "OE-002";
26
+ @MemoIdentity { :>> providedId = "OE-002"; }
25
27
  attribute :>> name = "WardPowerInfrastructure";
26
28
  attribute :>> entityKind = OperationalEntityKind::environmentalEntity;
27
29
  attribute :>> operationalDomain = "facility power";
28
30
  attribute :>> responsibility = "Provides mains power; outages are a foreseeable operational condition.";
29
31
  }
30
32
  part entityGpcaPump : OperationalEntity {
31
- attribute :>> id = "OE-003";
33
+ @MemoIdentity { :>> providedId = "OE-003"; }
32
34
  attribute :>> name = "GPCA_Pump";
33
35
  attribute :>> entityKind = OperationalEntityKind::device;
34
36
  attribute :>> operationalDomain = "patient-controlled analgesia therapy";
@@ -37,105 +39,105 @@ package memo_examples_gpca_pump_gpca_operational {
37
39
 
38
40
  // ── External entities per CriSys Fig 2.1 ────────────────────
39
41
  part entityPharmacyDb : OperationalEntity {
40
- attribute :>> id = "OE-004";
42
+ @MemoIdentity { :>> providedId = "OE-004"; }
41
43
  attribute :>> name = "HospitalPharmacyDatabase";
42
44
  attribute :>> entityKind = OperationalEntityKind::externalSystem;
43
45
  attribute :>> operationalDomain = "medication safety data";
44
46
  attribute :>> responsibility = "Repository of drug information from manufacturers; stores the safe value ranges for all drugs usable for infusion, retrieved by the GPCA for the programmed drug.";
45
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1 and §3.5";
47
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1 and §3.5"; }
46
48
  }
47
49
  part entityDrugReservoir : OperationalEntity {
48
- attribute :>> id = "OE-005";
50
+ @MemoIdentity { :>> providedId = "OE-005"; }
49
51
  attribute :>> name = "DrugReservoir";
50
52
  attribute :>> entityKind = OperationalEntityKind::device;
51
53
  attribute :>> operationalDomain = "drug storage";
52
54
  attribute :>> responsibility = "Apparatus storing the liquid analgesic drug to be infused; filled according to the prescription and connected to the GPCA by the clinician.";
53
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1";
55
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1"; }
54
56
  }
55
57
  part entityNeedle : OperationalEntity {
56
- attribute :>> id = "OE-006";
58
+ @MemoIdentity { :>> providedId = "OE-006"; }
57
59
  attribute :>> name = "InfusionNeedle";
58
60
  attribute :>> entityKind = OperationalEntityKind::device;
59
61
  attribute :>> operationalDomain = "drug delivery path";
60
62
  attribute :>> responsibility = "Intravenous needle inserted into the patient by the clinician and connected to the GPCA standard CCC connection point (I 5) to infuse the drug.";
61
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1 and §3.3 (I 5)";
63
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1 and §3.3 (I 5)"; }
62
64
  }
63
65
  part entityPrescription : OperationalEntity {
64
- attribute :>> id = "OE-007";
66
+ @MemoIdentity { :>> providedId = "OE-007"; }
65
67
  attribute :>> name = "Prescription";
66
68
  attribute :>> entityKind = OperationalEntityKind::informationArtifact;
67
69
  attribute :>> operationalDomain = "plan of care";
68
70
  attribute :>> responsibility = "Instructions governing the plan of care for an individual patient: the drug to be infused and all administration details; provided by a certified medical practitioner.";
69
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1";
71
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1"; }
70
72
  }
71
73
  part entityHospital : OperationalEntity {
72
- attribute :>> id = "OE-008";
74
+ @MemoIdentity { :>> providedId = "OE-008"; }
73
75
  attribute :>> name = "Hospital";
74
76
  attribute :>> entityKind = OperationalEntityKind::environmentalEntity;
75
77
  attribute :>> operationalDomain = "care environment boundary";
76
78
  attribute :>> responsibility = "Environment boundary: fixed (non-ambulatory) usage location with authorized clinicians and the pharmacy database holding drug safe values.";
77
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.4";
79
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.4"; }
78
80
  }
79
81
 
80
82
  // ── Operational activities (therapy lifecycle) ──────────────
81
- action oaPrescribe : OperationalActivity {
82
- attribute :>> id = "OA-001";
83
+ action oaPrescribe : OperativeAction {
84
+ @MemoIdentity { :>> providedId = "OA-001"; }
83
85
  attribute :>> name = "PrescribeTherapy";
84
86
  attribute :>> trigger = "patient requires titrated analgesia";
85
87
  attribute :>> preCondition = "patient assessed; drug has safe-value records in the hospital pharmacy database";
86
88
  attribute :>> postCondition = "prescription with basal rate, bolus volume, lockout, and max dose limits exists";
87
89
  attribute :>> criticality = CriticalityKind::high;
88
90
  }
89
- action oaLoadReservoir : OperationalActivity {
90
- attribute :>> id = "OA-002";
91
+ action oaLoadReservoir : OperativeAction {
92
+ @MemoIdentity { :>> providedId = "OA-002"; }
91
93
  attribute :>> name = "LoadDrugReservoir";
92
94
  attribute :>> trigger = "prescription issued or reservoir empty";
93
95
  attribute :>> preCondition = "labeled reservoir prepared by pharmacy";
94
96
  attribute :>> postCondition = "reservoir mounted, door closed and latched";
95
97
  attribute :>> criticality = CriticalityKind::high;
96
98
  }
97
- action oaProgram : OperationalActivity {
98
- attribute :>> id = "OA-003";
99
+ action oaProgram : OperativeAction {
100
+ @MemoIdentity { :>> providedId = "OA-003"; }
99
101
  attribute :>> name = "ProgramPrescription";
100
102
  attribute :>> trigger = "reservoir loaded";
101
103
  attribute :>> preCondition = "pump in IDLE; clinician authenticated by key or code";
102
104
  attribute :>> postCondition = "prescription entered, checked against pharmacy-database safe values (I 9-I 11), and confirmed by second review";
103
105
  attribute :>> criticality = CriticalityKind::catastrophic;
104
106
  }
105
- action oaStartTherapy : OperationalActivity {
106
- attribute :>> id = "OA-004";
107
+ action oaStartTherapy : OperativeAction {
108
+ @MemoIdentity { :>> providedId = "OA-004"; }
107
109
  attribute :>> name = "StartInfusion";
108
110
  attribute :>> trigger = "prescription confirmed";
109
111
  attribute :>> preCondition = "confirmed prescription saved; no active alarm";
110
112
  attribute :>> postCondition = "basal infusion running";
111
113
  attribute :>> criticality = CriticalityKind::catastrophic;
112
114
  }
113
- action oaRequestBolus : OperationalActivity {
114
- attribute :>> id = "OA-005";
115
+ action oaRequestBolus : OperativeAction {
116
+ @MemoIdentity { :>> providedId = "OA-005"; }
115
117
  attribute :>> name = "RequestPatientBolus";
116
118
  attribute :>> trigger = "patient presses bolus request button";
117
119
  attribute :>> preCondition = "therapy active";
118
120
  attribute :>> postCondition = "bolus delivered, or request ignored when lockout or max-dose limits apply";
119
121
  attribute :>> criticality = CriticalityKind::catastrophic;
120
122
  }
121
- action oaRespondAlarm : OperationalActivity {
122
- attribute :>> id = "OA-006";
123
+ action oaRespondAlarm : OperativeAction {
124
+ @MemoIdentity { :>> providedId = "OA-006"; }
123
125
  attribute :>> name = "RespondToAlarm";
124
126
  attribute :>> trigger = "audible or visual alarm annunciated";
125
127
  attribute :>> preCondition = "alarm condition raised by the pump";
126
128
  attribute :>> postCondition = "cause resolved and therapy resumed, or therapy stopped";
127
129
  attribute :>> criticality = CriticalityKind::catastrophic;
128
130
  }
129
- action oaReviewLog : OperationalActivity {
130
- attribute :>> id = "OA-007";
131
+ action oaReviewLog : OperativeAction {
132
+ @MemoIdentity { :>> providedId = "OA-007"; }
131
133
  attribute :>> name = "ReviewEventLog";
132
134
  attribute :>> trigger = "shift change, incident review, or dose audit";
133
135
  attribute :>> preCondition = "event log populated during therapy";
134
136
  attribute :>> postCondition = "delivered doses and alarm history reviewed";
135
137
  attribute :>> criticality = CriticalityKind::medium;
136
138
  }
137
- action oaMaintain : OperationalActivity {
138
- attribute :>> id = "OA-008";
139
+ action oaMaintain : OperativeAction {
140
+ @MemoIdentity { :>> providedId = "OA-008"; }
139
141
  attribute :>> name = "MaintainDevice";
140
142
  attribute :>> trigger = "scheduled maintenance or fault";
141
143
  attribute :>> preCondition = "pump out of clinical use; technician authenticated";
@@ -148,7 +150,7 @@ package memo_examples_gpca_pump_gpca_operational {
148
150
  // several workflows, each of which owns multiple selected scenarios.
149
151
  use case ucDeliverPcaTherapy : UseCase {
150
152
  attribute :>> useCaseKind = UseCaseKind::clinical;
151
- attribute :>> id = "UC-001";
153
+ @MemoIdentity { :>> providedId = "UC-001"; }
152
154
  attribute :>> name = "DeliverPatientControlledAnalgesia";
153
155
  attribute :>> goalStatement = "Deliver prescribed analgesia safely while allowing patient-controlled bolus requests within configured limits.";
154
156
  attribute :>> trigger = "A clinician starts prescribed patient-controlled analgesia therapy.";
@@ -169,8 +171,6 @@ package memo_examples_gpca_pump_gpca_operational {
169
171
  attribute :>> entryCondition = "A valid prescription and prepared reservoir are available.";
170
172
  attribute :>> completionCondition = "Therapy is started with confirmed prescription limits.";
171
173
 
172
- action wsProgram : WorkflowStep { ref :>> performedActivity = oaProgram; }
173
- action wsStart : WorkflowStep { ref :>> performedActivity = oaStartTherapy; }
174
174
  }
175
175
  action wfManageActiveTherapy : OperationalWorkflow {
176
176
  attribute :>> name = "ManageActiveTherapy";
@@ -178,16 +178,44 @@ package memo_examples_gpca_pump_gpca_operational {
178
178
  attribute :>> entryCondition = "Basal therapy is active.";
179
179
  attribute :>> completionCondition = "A bolus is handled or active therapy continues safely.";
180
180
 
181
- action wsRequestBolus : WorkflowStep { ref :>> performedActivity = oaRequestBolus; }
182
181
  // Refinement targets a nested step by its local name — the shorthand's
183
182
  // `to` end does not accept a qualified path — so this is written
184
183
  // inside wsRequestBolus's own owning scope rather than at package
185
184
  // level.
186
- #refinement dependency fcsBolusSense to wsRequestBolus;
187
- #refinement dependency fcsBolusValidate to wsRequestBolus;
188
- #refinement dependency fcsBolusCommand to wsRequestBolus;
189
- #refinement dependency fcsBolusActuate to wsRequestBolus;
190
- #refinement dependency fcsBolusLog to wsRequestBolus;
185
+ #refinement dependency fcsBolusSense to oaRequestBolus;
186
+ #refinement dependency fcsBolusValidate to oaRequestBolus;
187
+ #refinement dependency fcsBolusCommand to oaRequestBolus;
188
+ #refinement dependency fcsBolusActuate to oaRequestBolus;
189
+ #refinement dependency fcsBolusLog to oaRequestBolus;
190
+ action osNominalTherapy : OperativeScenario {
191
+ @MemoIdentity { :>> providedId = "OS-001"; }
192
+ attribute :>> name = "NominalTherapySession";
193
+ attribute :>> preCondition = "prescription issued, reservoir loaded";
194
+ attribute :>> postCondition = "therapy completed and stopped by clinician";
195
+ attribute :>> pathSummary = "Prescribe > load reservoir > program and confirm > start basal > patient boluses within limits > stop therapy > review log.";
196
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.2 Main GPCA System Functions"; }
197
+
198
+ action oaCompleteNominalTherapy : OperativeAction {
199
+ attribute :>> name = "CompleteNominalTherapy";
200
+ action deliverWithinLimits; action recordTherapyEvent;
201
+ first start then deliverWithinLimits; first deliverWithinLimits then recordTherapyEvent; first recordTherapyEvent then done;
202
+ }
203
+ }
204
+ action osLockoutBolus : OperativeScenario {
205
+ attribute :>> scenarioKind = ScenarioKind::alternate;
206
+ @MemoIdentity { :>> providedId = "OS-002"; }
207
+ attribute :>> name = "BolusRequestDuringLockout";
208
+ attribute :>> preCondition = "basal infusion active; lockout interval running";
209
+ attribute :>> postCondition = "request ignored, logged; basal continues unchanged";
210
+ attribute :>> pathSummary = "Patient presses bolus button during lockout > infusion manager rejects request > event logged > no additional drug delivered.";
211
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (lockout requirements)"; }
212
+
213
+ action oaRejectBolusDuringLockout : OperativeAction {
214
+ attribute :>> name = "RejectBolusDuringLockout";
215
+ action checkLockout; action rejectAndLog;
216
+ first start then checkLockout; first checkLockout then rejectAndLog; first rejectAndLog then done;
217
+ }
218
+ }
191
219
  }
192
220
  action wfRespondToTherapyAlarm : OperationalWorkflow {
193
221
  attribute :>> name = "RespondToTherapyAlarm";
@@ -195,27 +223,83 @@ package memo_examples_gpca_pump_gpca_operational {
195
223
  attribute :>> entryCondition = "A therapy alarm or degraded condition is detected.";
196
224
  attribute :>> completionCondition = "The pump is safe and the clinician has resolved or escalated the condition.";
197
225
 
198
- action wsRespondAlarm : WorkflowStep { ref :>> performedActivity = oaRespondAlarm; }
199
- #refinement dependency fcsAlarmSense to wsRespondAlarm;
200
- #refinement dependency fcsAlarmEvaluate to wsRespondAlarm;
201
- #refinement dependency fcsAlarmStopInfusion to wsRespondAlarm;
202
- #refinement dependency fcsAlarmAnnunciate to wsRespondAlarm;
226
+ #refinement dependency fcsAlarmSense to oaRespondAlarm;
227
+ #refinement dependency fcsAlarmEvaluate to oaRespondAlarm;
228
+ #refinement dependency fcsAlarmStopInfusion to oaRespondAlarm;
229
+ #refinement dependency fcsAlarmAnnunciate to oaRespondAlarm;
230
+ action osOcclusionAlarm : OperativeScenario {
231
+ attribute :>> scenarioKind = ScenarioKind::alternate;
232
+ @MemoIdentity { :>> providedId = "OS-003"; }
233
+ attribute :>> name = "OcclusionDetectedDuringInfusion";
234
+ attribute :>> preCondition = "therapy active; downstream line becomes blocked";
235
+ attribute :>> postCondition = "infusion paused, alarm annunciated, clinician clears occlusion and resumes";
236
+ attribute :>> pathSummary = "Occlusion sensor exceeds pressure threshold > alarm raised same step > infusion paused > audible and visual annunciation > clinician resolves and resumes.";
237
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms and Alerts (occlusion)"; }
238
+
239
+ action oaRespondToOcclusion : OperativeAction {
240
+ attribute :>> name = "RespondToOcclusion";
241
+ action pauseInfusion; action annunciateOcclusion; action resolveAndResume;
242
+ first start then pauseInfusion; first pauseInfusion then annunciateOcclusion; first annunciateOcclusion then resolveAndResume; first resolveAndResume then done;
243
+ }
244
+ }
245
+ action osAirInLine : OperativeScenario {
246
+ attribute :>> scenarioKind = ScenarioKind::alternate;
247
+ @MemoIdentity { :>> providedId = "OS-004"; }
248
+ attribute :>> name = "AirInLineDetected";
249
+ attribute :>> preCondition = "therapy active; air bubble enters tubing";
250
+ attribute :>> postCondition = "infusion stopped before air reaches patient; alarm annunciated";
251
+ attribute :>> pathSummary = "Air-in-line sensor detects bubble above threshold > transition to PAUSED (KVO flow) > High-priority Air embolism notification > clinician re-primes line and restarts.";
252
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Air embolism)"; }
253
+
254
+ action oaRespondToAirInLine : OperativeAction {
255
+ attribute :>> name = "RespondToAirInLine";
256
+ action stopOrKvo; action annunciateAir; action reprimeAndRestart;
257
+ first start then stopOrKvo; first stopOrKvo then annunciateAir; first annunciateAir then reprimeAndRestart; first reprimeAndRestart then done;
258
+ }
259
+ }
260
+ action osEmptyReservoir : OperativeScenario {
261
+ attribute :>> scenarioKind = ScenarioKind::alternate;
262
+ @MemoIdentity { :>> providedId = "OS-005"; }
263
+ attribute :>> name = "ReservoirEmptyDuringTherapy";
264
+ attribute :>> preCondition = "therapy active; reservoir volume reaches empty threshold";
265
+ attribute :>> postCondition = "infusion stopped, alarm raised, reservoir replaced";
266
+ attribute :>> pathSummary = "Reservoir-empty condition detected > transition to PAUSED (KVO flow) > High-priority Empty Reservoir notification > clinician loads new reservoir > therapy resumed with saved prescription.";
267
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Empty Reservoir)"; }
268
+
269
+ action oaReplaceEmptyReservoir : OperativeAction {
270
+ attribute :>> name = "ReplaceEmptyReservoir";
271
+ action stopAndAnnunciate; action replaceReservoir; action resumeTherapy;
272
+ first start then stopAndAnnunciate; first stopAndAnnunciate then replaceReservoir; first replaceReservoir then resumeTherapy; first resumeTherapy then done;
273
+ }
274
+ }
275
+ action osPowerLoss : OperativeScenario {
276
+ attribute :>> scenarioKind = ScenarioKind::alternate;
277
+ @MemoIdentity { :>> providedId = "OS-006"; }
278
+ attribute :>> name = "MainsPowerLossAndRecovery";
279
+ attribute :>> preCondition = "therapy active on mains power";
280
+ attribute :>> postCondition = "therapy continues on battery; prescription preserved across full power loss";
281
+ attribute :>> pathSummary = "Mains lost > battery takes over with notification > if battery depletes, pump stops safely > on power restore, saved prescription recovered and therapy resumed only after clinician confirmation.";
282
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.3 Electrical Hazards (battery failure)"; }
283
+
284
+ action oaRecoverAfterPowerLoss : OperativeAction {
285
+ attribute :>> name = "RecoverAfterPowerLoss";
286
+ action switchToBattery; action restorePrescription; action confirmRestart;
287
+ first start then switchToBattery; first switchToBattery then restorePrescription; first restorePrescription then confirmRestart; first confirmRestart then done;
288
+ }
289
+ }
203
290
  }
204
- connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfPrepareAndStartTherapy to supported ::> ucDeliverPcaTherapy; }
205
- connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfManageActiveTherapy to supported ::> ucDeliverPcaTherapy; }
206
- connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfRespondToTherapyAlarm to supported ::> ucDeliverPcaTherapy; }
207
291
 
208
292
 
209
293
  // ── Operational capabilities ────────────────────────────────
210
294
  part ocTitratedAnalgesia : OperationalCapability {
211
- attribute :>> id = "OC-001";
295
+ @MemoIdentity { :>> providedId = "OC-001"; }
212
296
  attribute :>> name = "DeliverTitratedAnalgesia";
213
297
  attribute :>> capabilityLevel = "primary";
214
298
  attribute :>> preCondition = "confirmed prescription and loaded reservoir";
215
299
  attribute :>> postCondition = "drug delivered within prescribed limits at all times";
216
300
  }
217
301
  part ocFailSafeTherapy : OperationalCapability {
218
- attribute :>> id = "OC-002";
302
+ @MemoIdentity { :>> providedId = "OC-002"; }
219
303
  attribute :>> name = "FailSafeTherapyManagement";
220
304
  attribute :>> capabilityLevel = "safety";
221
305
  attribute :>> preCondition = "any single failure or foreseeable misuse";
@@ -223,140 +307,22 @@ package memo_examples_gpca_pump_gpca_operational {
223
307
  }
224
308
 
225
309
  // ── Operational scenarios ───────────────────────────────────
226
- action osNominalTherapy : MemoScenario {
227
- attribute :>> id = "OS-001";
228
- attribute :>> name = "NominalTherapySession";
229
- attribute :>> scenarioKind = ScenarioKind::operative;
230
- attribute :>> variantKind = ScenarioVariantKind::nominal;
231
- attribute :>> operationalCondition = OperationalConditionKind::normal;
232
- attribute :>> preCondition = "prescription issued, reservoir loaded";
233
- attribute :>> postCondition = "therapy completed and stopped by clinician";
234
- attribute :>> pathSummary = "Prescribe > load reservoir > program and confirm > start basal > patient boluses within limits > stop therapy > review log.";
235
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.2 Main GPCA System Functions";
236
- ref :>> parentWorkflow = wfManageActiveTherapy;
237
- ref :>> parentUseCase = ucDeliverPcaTherapy;
238
- ref :>> activities = oaCompleteNominalTherapy;
239
-
240
- action oaCompleteNominalTherapy : OperationalActivity {
241
- attribute :>> name = "CompleteNominalTherapy";
242
- action deliverWithinLimits; action recordTherapyEvent;
243
- first start then deliverWithinLimits; first deliverWithinLimits then recordTherapyEvent; first recordTherapyEvent then done;
244
- }
245
- }
246
- action osLockoutBolus : MemoScenario {
247
- attribute :>> id = "OS-002";
248
- attribute :>> name = "BolusRequestDuringLockout";
249
- attribute :>> scenarioKind = ScenarioKind::operative;
250
- attribute :>> variantKind = ScenarioVariantKind::alternate;
251
- attribute :>> variationPoint = "patient bolus request during the nominal therapy lockout interval";
252
- attribute :>> operationalCondition = OperationalConditionKind::foreseeableMisuse;
253
- attribute :>> preCondition = "basal infusion active; lockout interval running";
254
- attribute :>> postCondition = "request ignored, logged; basal continues unchanged";
255
- attribute :>> pathSummary = "Patient presses bolus button during lockout > infusion manager rejects request > event logged > no additional drug delivered.";
256
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (lockout requirements)";
257
- ref :>> parentWorkflow = wfManageActiveTherapy;
258
- ref :>> parentUseCase = ucDeliverPcaTherapy;
259
- ref :>> baseScenario = osNominalTherapy;
260
- ref :>> activities = oaRejectBolusDuringLockout;
310
+ #refinement dependency wfManageActiveTherapy::osNominalTherapy to ucDeliverPcaTherapy;
311
+ #refinement dependency wfManageActiveTherapy::osLockoutBolus to ucDeliverPcaTherapy;
312
+ #refinement dependency wfRespondToTherapyAlarm::osOcclusionAlarm to ucDeliverPcaTherapy;
313
+ #refinement dependency wfRespondToTherapyAlarm::osAirInLine to ucDeliverPcaTherapy;
314
+ #refinement dependency wfRespondToTherapyAlarm::osEmptyReservoir to ucDeliverPcaTherapy;
315
+ #refinement dependency wfRespondToTherapyAlarm::osPowerLoss to ucDeliverPcaTherapy;
261
316
 
262
- action oaRejectBolusDuringLockout : OperationalActivity {
263
- attribute :>> name = "RejectBolusDuringLockout";
264
- action checkLockout; action rejectAndLog;
265
- first start then checkLockout; first checkLockout then rejectAndLog; first rejectAndLog then done;
266
- }
267
- }
268
- action osOcclusionAlarm : MemoScenario {
269
- attribute :>> id = "OS-003";
270
- attribute :>> name = "OcclusionDetectedDuringInfusion";
271
- attribute :>> scenarioKind = ScenarioKind::operative;
272
- attribute :>> variantKind = ScenarioVariantKind::exception;
273
- attribute :>> variationPoint = "occlusion detected while nominal infusion is active";
274
- attribute :>> operationalCondition = OperationalConditionKind::degraded;
275
- attribute :>> preCondition = "therapy active; downstream line becomes blocked";
276
- attribute :>> postCondition = "infusion paused, alarm annunciated, clinician clears occlusion and resumes";
277
- attribute :>> pathSummary = "Occlusion sensor exceeds pressure threshold > alarm raised same step > infusion paused > audible and visual annunciation > clinician resolves and resumes.";
278
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms and Alerts (occlusion)";
279
- ref :>> parentWorkflow = wfRespondToTherapyAlarm;
280
- ref :>> parentUseCase = ucDeliverPcaTherapy;
281
- ref :>> baseScenario = osNominalTherapy;
282
- ref :>> activities = oaRespondToOcclusion;
317
+ // ── Operational trace relations ─────────────────────────────
318
+ connection : RealizesUseCase connect realizingWorkflow ::> wfPrepareAndStartTherapy to realizedUseCase ::> ucDeliverPcaTherapy;
319
+ connection : RealizesUseCase connect realizingWorkflow ::> wfManageActiveTherapy to realizedUseCase ::> ucDeliverPcaTherapy;
320
+ connection : RealizesUseCase connect realizingWorkflow ::> wfRespondToTherapyAlarm to realizedUseCase ::> ucDeliverPcaTherapy;
321
+ connection : EnablesUseCase connect enablingCapability ::> ocTitratedAnalgesia to enabledUseCase ::> ucDeliverPcaTherapy;
322
+ connection : EnablesUseCase connect enablingCapability ::> ocFailSafeTherapy to enabledUseCase ::> ucDeliverPcaTherapy;
323
+ connection : RequiresCapability connect requiringIntendedUse ::> gpcaIntendedUse to requiredCapability ::> ocTitratedAnalgesia;
324
+ connection : RequiresCapability connect requiringIntendedUse ::> gpcaIntendedUse to requiredCapability ::> ocFailSafeTherapy;
283
325
 
284
- action oaRespondToOcclusion : OperationalActivity {
285
- attribute :>> name = "RespondToOcclusion";
286
- action pauseInfusion; action annunciateOcclusion; action resolveAndResume;
287
- first start then pauseInfusion; first pauseInfusion then annunciateOcclusion; first annunciateOcclusion then resolveAndResume; first resolveAndResume then done;
288
- }
289
- }
290
- action osAirInLine : MemoScenario {
291
- attribute :>> id = "OS-004";
292
- attribute :>> name = "AirInLineDetected";
293
- attribute :>> scenarioKind = ScenarioKind::operative;
294
- attribute :>> variantKind = ScenarioVariantKind::exception;
295
- attribute :>> variationPoint = "air-in-line detected while nominal infusion is active";
296
- attribute :>> operationalCondition = OperationalConditionKind::degraded;
297
- attribute :>> preCondition = "therapy active; air bubble enters tubing";
298
- attribute :>> postCondition = "infusion stopped before air reaches patient; alarm annunciated";
299
- attribute :>> pathSummary = "Air-in-line sensor detects bubble above threshold > transition to PAUSED (KVO flow) > High-priority Air embolism notification > clinician re-primes line and restarts.";
300
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Air embolism)";
301
- ref :>> parentWorkflow = wfRespondToTherapyAlarm;
302
- ref :>> parentUseCase = ucDeliverPcaTherapy;
303
- ref :>> baseScenario = osNominalTherapy;
304
- ref :>> activities = oaRespondToAirInLine;
305
326
 
306
- action oaRespondToAirInLine : OperationalActivity {
307
- attribute :>> name = "RespondToAirInLine";
308
- action stopOrKvo; action annunciateAir; action reprimeAndRestart;
309
- first start then stopOrKvo; first stopOrKvo then annunciateAir; first annunciateAir then reprimeAndRestart; first reprimeAndRestart then done;
310
- }
311
- }
312
- action osEmptyReservoir : MemoScenario {
313
- attribute :>> id = "OS-005";
314
- attribute :>> name = "ReservoirEmptyDuringTherapy";
315
- attribute :>> scenarioKind = ScenarioKind::operative;
316
- attribute :>> variantKind = ScenarioVariantKind::exception;
317
- attribute :>> variationPoint = "reservoir-empty threshold reached during nominal therapy";
318
- attribute :>> operationalCondition = OperationalConditionKind::degraded;
319
- attribute :>> preCondition = "therapy active; reservoir volume reaches empty threshold";
320
- attribute :>> postCondition = "infusion stopped, alarm raised, reservoir replaced";
321
- attribute :>> pathSummary = "Reservoir-empty condition detected > transition to PAUSED (KVO flow) > High-priority Empty Reservoir notification > clinician loads new reservoir > therapy resumed with saved prescription.";
322
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Empty Reservoir)";
323
- ref :>> parentWorkflow = wfRespondToTherapyAlarm;
324
- ref :>> parentUseCase = ucDeliverPcaTherapy;
325
- ref :>> baseScenario = osNominalTherapy;
326
- ref :>> activities = oaReplaceEmptyReservoir;
327
-
328
- action oaReplaceEmptyReservoir : OperationalActivity {
329
- attribute :>> name = "ReplaceEmptyReservoir";
330
- action stopAndAnnunciate; action replaceReservoir; action resumeTherapy;
331
- first start then stopAndAnnunciate; first stopAndAnnunciate then replaceReservoir; first replaceReservoir then resumeTherapy; first resumeTherapy then done;
332
- }
333
- }
334
- action osPowerLoss : MemoScenario {
335
- attribute :>> id = "OS-006";
336
- attribute :>> name = "MainsPowerLossAndRecovery";
337
- attribute :>> scenarioKind = ScenarioKind::operative;
338
- attribute :>> variantKind = ScenarioVariantKind::recovery;
339
- attribute :>> variationPoint = "mains supply lost during nominal therapy";
340
- attribute :>> operationalCondition = OperationalConditionKind::degraded;
341
- attribute :>> preCondition = "therapy active on mains power";
342
- attribute :>> postCondition = "therapy continues on battery; prescription preserved across full power loss";
343
- attribute :>> pathSummary = "Mains lost > battery takes over with notification > if battery depletes, pump stops safely > on power restore, saved prescription recovered and therapy resumed only after clinician confirmation.";
344
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.3 Electrical Hazards (battery failure)";
345
- ref :>> parentWorkflow = wfRespondToTherapyAlarm;
346
- ref :>> parentUseCase = ucDeliverPcaTherapy;
347
- ref :>> baseScenario = osNominalTherapy;
348
- ref :>> activities = oaRecoverAfterPowerLoss;
349
327
 
350
- action oaRecoverAfterPowerLoss : OperationalActivity {
351
- attribute :>> name = "RecoverAfterPowerLoss";
352
- action switchToBattery; action restorePrescription; action confirmRestart;
353
- first start then switchToBattery; first switchToBattery then restorePrescription; first restorePrescription then confirmRestart; first confirmRestart then done;
354
- }
355
- }
356
- #refinement dependency osNominalTherapy to ucDeliverPcaTherapy;
357
- #refinement dependency osLockoutBolus to ucDeliverPcaTherapy;
358
- #refinement dependency osOcclusionAlarm to ucDeliverPcaTherapy;
359
- #refinement dependency osAirInLine to ucDeliverPcaTherapy;
360
- #refinement dependency osEmptyReservoir to ucDeliverPcaTherapy;
361
- #refinement dependency osPowerLoss to ucDeliverPcaTherapy;
362
328
  }
@@ -4,8 +4,10 @@ package memo_examples_gpca_pump_gpca_physical {
4
4
  private import memo_architecture_realization_physical::*;
5
5
  private import memo_core_enumerations::*;
6
6
 
7
+ private import memo_core_common::*;
8
+ private import memo_core_common::MemoIdentity;
7
9
  part mainController : ProcessingNode {
8
- attribute :>> id = "PN-001";
10
+ @MemoIdentity { :>> providedId = "PN-001"; }
9
11
  attribute :>> name = "MainControllerMCU";
10
12
  attribute :>> nodeKind = ProcessingNodeKind::microcontroller;
11
13
  attribute :>> processorArchitecture = "ARM Cortex-M4, lockstep-capable";
@@ -16,31 +18,31 @@ package memo_examples_gpca_pump_gpca_physical {
16
18
  }
17
19
 
18
20
  in port portSensorHarness : PhysicalPort {
19
- attribute :>> id = "PP-001";
21
+ @MemoIdentity { :>> providedId = "PP-001"; }
20
22
  attribute :>> name = "SensorHarnessConnector";
21
23
  attribute :>> portKind = InterfaceKind::digitalSignal;
22
24
  attribute :>> connectorType = "keyed 12-pin locking header";
23
25
  }
24
26
  out port portMotorDrive : PhysicalPort {
25
- attribute :>> id = "PP-002";
27
+ @MemoIdentity { :>> providedId = "PP-002"; }
26
28
  attribute :>> name = "MotorDriveConnector";
27
29
  attribute :>> portKind = InterfaceKind::digitalSignal;
28
30
  attribute :>> connectorType = "keyed 6-pin locking header with enable interlock";
29
31
  }
30
32
  in port portPatientPendant : PhysicalPort {
31
- attribute :>> id = "PP-003";
33
+ @MemoIdentity { :>> providedId = "PP-003"; }
32
34
  attribute :>> name = "PatientPendantJack";
33
35
  attribute :>> portKind = InterfaceKind::digitalSignal;
34
36
  attribute :>> connectorType = "latching 3.5 mm pendant jack";
35
37
  }
36
38
  inout port portServiceAccess : PhysicalPort {
37
- attribute :>> id = "PP-004";
39
+ @MemoIdentity { :>> providedId = "PP-004"; }
38
40
  attribute :>> name = "ServiceMaintenancePort";
39
41
  attribute :>> portKind = InterfaceKind::api;
40
42
  attribute :>> connectorType = "covered UART/USB service connector";
41
43
  }
42
44
  in port portMainsInlet : PhysicalPort {
43
- attribute :>> id = "PP-005";
45
+ @MemoIdentity { :>> providedId = "PP-005"; }
44
46
  attribute :>> name = "MainsPowerInlet";
45
47
  attribute :>> portKind = InterfaceKind::power;
46
48
  attribute :>> connectorType = "IEC 60320 C8 inlet";