@memoarchitect/ontology 0.8.24 → 0.11.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 (203) hide show
  1. package/README.md +1 -1
  2. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  3. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  4. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +9 -7
  5. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  6. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +8 -6
  7. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  8. package/examples/gpca-pump/memo.identity.yaml +2185 -0
  9. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  10. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  11. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  12. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  13. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  14. package/examples/gpca-pump/model/catalog/gpca_context.sysml +29 -24
  15. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -13
  16. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  17. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  18. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +121 -125
  19. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  20. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +390 -388
  21. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  22. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  23. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -14
  24. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -8
  25. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  26. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  27. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +6 -4
  28. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +5 -3
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +5 -3
  30. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +5 -3
  31. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +5 -3
  32. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +5 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +5 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +5 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +5 -3
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +5 -3
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +5 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +5 -3
  39. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +5 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +5 -3
  41. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +5 -3
  42. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +5 -3
  44. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -3
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +5 -3
  47. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +5 -3
  48. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +5 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +5 -3
  50. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +6 -4
  51. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -3
  52. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +5 -3
  53. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +9 -7
  54. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  55. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +6 -4
  56. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  57. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  58. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  59. package/examples/nested-architecture-dsm/memo.identity.yaml +181 -0
  60. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  61. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  62. package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +34 -0
  63. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +11 -6
  64. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +16 -14
  65. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  66. package/examples/nested-architecture-dsm/model/catalog/project.sysml +4 -1
  67. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  68. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +17 -16
  69. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  70. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  71. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  72. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +10 -8
  73. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  74. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +54 -51
  75. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  76. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  77. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  78. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -8
  79. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -5
  80. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -1
  81. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -1
  82. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -1
  83. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +11 -9
  84. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +3 -1
  85. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -1
  86. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +3 -1
  87. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +11 -7
  88. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  89. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  90. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +27 -22
  91. package/examples/ui-screen-regions/memo.identity.yaml +205 -0
  92. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  93. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  94. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  95. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  96. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  97. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  98. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  99. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  100. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +26 -24
  101. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  102. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  103. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  104. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  105. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  106. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +5 -3
  107. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +5 -3
  108. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +5 -3
  109. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +3 -1
  110. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +3 -1
  111. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +3 -1
  112. package/extensions/aadl/memo.package.yaml +1 -1
  113. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  114. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  115. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  116. package/extensions/cloud/memo.package.yaml +1 -1
  117. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  118. package/extensions/container/memo.package.yaml +1 -1
  119. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  120. package/extensions/messaging/memo.package.yaml +1 -1
  121. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  122. package/extensions/ros/memo.package.yaml +1 -1
  123. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  124. package/extensions/template/src/extension.sysml +3 -1
  125. package/methodologies/default/memo.package.yaml +1 -1
  126. package/methodologies/gpca/memo.package.yaml +1 -1
  127. package/ontology/memo.package.yaml +1 -1
  128. package/package.json +2 -2
  129. package/profile/memo.package.yaml +1 -1
  130. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  131. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  132. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  133. package/src/architecture/implementation/ui/memo_ui.sysml +0 -23
  134. package/src/architecture/logical/interfaces/memo_interfaces.sysml +3 -1
  135. package/src/architecture/operational/context/use_context/memo_use_context.sysml +3 -11
  136. package/src/architecture/operational/scenarios/memo_scenarios.sysml +1 -12
  137. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -11
  138. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -20
  139. package/src/architecture/realization/deployment/memo_deployment.sysml +16 -9
  140. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  141. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  142. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  143. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  144. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  145. package/src/artifacts/standards/iec_60812.sysml +21 -22
  146. package/src/artifacts/standards/iec_62304.sysml +150 -169
  147. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  148. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  149. package/src/artifacts/standards/iso_13485.sysml +80 -89
  150. package/src/artifacts/standards/iso_14971.sysml +66 -73
  151. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  152. package/src/artifacts/templates/dhf/iec-60601/hrs.md +6 -6
  153. package/src/artifacts/templates/dhf/iec-62304/srs.md +10 -10
  154. package/src/artifacts/templates/dhf/system/syrs.md +6 -6
  155. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +0 -1
  156. package/src/assurance/human_factors/memo_human_factors.sysml +0 -1
  157. package/src/assurance/requirements/memo_requirements.sysml +20 -16
  158. package/src/assurance/requirements/needs/memo_needs.sysml +33 -5
  159. package/src/assurance/safety_risk/memo_risk.sysml +20 -0
  160. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  161. package/src/core/common/memo_common.sysml +50 -50
  162. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  163. package/src/core/relationships/memo_relationships.sysml +22 -49
  164. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  165. package/src/methodology/core/memo_core.sysml +0 -10
  166. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  167. package/src/rules/closure/closure_rules.sysml +58 -22
  168. package/src/rules/crosslayer/cross_layer_rules.sysml +5 -3
  169. package/src/rules/ontology/ontology_invariants.sysml +119 -35
  170. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  171. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -28
  172. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  173. package/src/viewpoints/context/context_viewpoint.sysml +5 -3
  174. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +5 -3
  175. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  176. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -16
  177. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  178. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +5 -3
  179. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +5 -3
  180. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -2
  181. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +5 -3
  182. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  183. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +5 -3
  184. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -2
  185. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +5 -3
  186. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +5 -3
  187. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  188. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -2
  189. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +5 -3
  190. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -2
  191. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +5 -3
  192. package/src/viewpoints/software/software_viewpoint.sysml +4 -2
  193. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +5 -3
  194. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -2
  195. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  196. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -2
  197. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  198. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +5 -3
  199. package/templates/connected-device/model/catalog/project.sysml +3 -1
  200. package/templates/default/model/catalog/project.sysml +3 -1
  201. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  202. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  203. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -7,6 +7,7 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
7
7
  private import memo_examples_gpca_pump_gpca_system::*;
8
8
  private import memo_examples_gpca_pump_gpca_architecture::*;
9
9
 
10
+ private import memo_core_common::MemoIdentity;
10
11
  // ═════════════════════════════════════════════════════════════
11
12
  // GPCA mode machine per CriSys Ch.4 Fig 4.1 mode hierarchy:
12
13
  // OFF, ON { IDLE, THERAPY { PAUSED, ACTIVE { BASAL,
@@ -23,108 +24,108 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
23
24
  // outside this compact mode view.
24
25
  // ═════════════════════════════════════════════════════════════
25
26
  state topLevelModeMachine : StateMachine {
26
- attribute :>> id = "BM-001";
27
+ @MemoIdentity { :>> providedId = "BM-001"; }
27
28
  attribute :>> name = "TopLevelModeMachine";
28
29
  attribute :>> machineKind = "hierarchical state machine";
29
30
  attribute :>> executionSemantics = "single-step synchronous; sub-modes inherit all parent-mode requirements";
30
31
  attribute fidelityScope = "Requirements-derived therapy mode hierarchy; partial abstraction of CITE-009, not a state-for-state Stateflow transcription";
31
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1; CITE-009: CriSys PCA Pump Software Model";
32
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1; CITE-009: CriSys PCA Pump Software Model"; }
32
33
 
33
34
  // ── Mode states (Fig 4.1) ───────────────────────────
34
35
  state modeOFF : MemoState {
35
- attribute :>> id = "MODE-000";
36
+ @MemoIdentity { :>> providedId = "MODE-000"; }
36
37
  attribute :>> stateKind = StateKind::mode;
37
38
  attribute :>> name = "OFF";
38
39
  attribute :>> modeKind = "top (default)";
39
40
  attribute :>> description = "No functionality; the GPCA is turned off. FlowRate_output = 0 (REQ 6).";
40
41
  attribute :>> entryCondition = "System_stop_prog commanded while ON (REQ 5); default mode";
41
42
  attribute :>> exitCondition = "System_start_prog commanded (REQ 4)";
42
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.2";
43
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.2"; }
43
44
  }
44
45
 
45
46
  state modeON : MemoState {
46
- attribute :>> id = "MODE-001";
47
+ @MemoIdentity { :>> providedId = "MODE-001"; }
47
48
  attribute :>> stateKind = StateKind::mode;
48
49
  attribute :>> name = "ON";
49
50
  attribute :>> modeKind = "operational parent";
50
51
  attribute :>> description = "Topmost operational mode: prescription configuration (REQ 8), infusion initiation gating (REQ 7, 9), notification (REQ 10) and logging (REQ 11) are available.";
51
52
  attribute :>> entryCondition = "System_start_prog from OFF; A.4 variables set to defaults (REQ 4)";
52
53
  attribute :>> exitCondition = "System_stop_prog: stop infusion, cancel all notifications (REQ 5)";
53
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3";
54
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3"; }
54
55
 
55
56
  state modeIDLE : MemoState {
56
- attribute :>> id = "MODE-002";
57
+ @MemoIdentity { :>> providedId = "MODE-002"; }
57
58
  attribute :>> stateKind = StateKind::mode;
58
59
  attribute :>> name = "ON.IDLE";
59
60
  attribute :>> modeKind = "idle";
60
61
  attribute :>> description = "Default sub-mode on entry to ON; no infusion, FlowRate_output = 0 (REQ 14); prescription set-up happens here. 'IDLE Time' actions after Max_IDLE_Duration_const (REQ 15).";
61
62
  attribute :>> entryCondition = "OFF -> ON transition (REQ 4); infusion complete (REQ 28); PAUSED inhibit (REQ 47)";
62
63
  attribute :>> exitCondition = "confirmed second Infusion_initiate_prog (REQ 12/13)";
63
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4";
64
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4"; }
64
65
  }
65
66
 
66
67
  state modeTHERAPY : MemoState {
67
- attribute :>> id = "MODE-003";
68
+ @MemoIdentity { :>> providedId = "MODE-003"; }
68
69
  attribute :>> stateKind = StateKind::mode;
69
70
  attribute :>> name = "ON.THERAPY";
70
71
  attribute :>> modeKind = "therapy parent";
71
72
  attribute :>> description = "Parent of all drug-delivering sub-modes. Delivers FlowRate_Mode_macro within Tolerance_Max_const (REQ 16); monitors under-infusion (REQ 17), low reservoir (REQ 18), over-infusion, VTBI, air, reverse delivery, empty reservoir (REQ 19-23).";
72
73
  attribute :>> entryCondition = "infusion initiated (REQ 12/13)";
73
74
  attribute :>> exitCondition = "infusion complete to IDLE (REQ 28); manual stop from PAUSED (REQ 47); system stop (REQ 5)";
74
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5";
75
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5"; }
75
76
 
76
77
  state modePAUSED : MemoState {
77
- attribute :>> id = "MODE-004";
78
+ @MemoIdentity { :>> providedId = "MODE-004"; }
78
79
  attribute :>> stateKind = StateKind::mode;
79
80
  attribute :>> name = "ON.THERAPY.PAUSED";
80
81
  attribute :>> modeKind = "paused (KVO delivery)";
81
82
  attribute :>> description = "Infusion paused by notification actions or manual inhibit. FlowRate_Mode_macro = FlowRate_kvo_hd — keep-vein-open flow within Tolerance_Max_const, NOT zero (REQ 43). 'PAUSED Time' actions after Max_PAUSED_Duration_const (REQ 44). Infusion_initiate_prog while Inhibited_Infusion_macro = TRUE causes no transition (REQ 45).";
82
83
  attribute :>> entryCondition = "REQ 19-23 alarm transitions, REQ 29 manual inhibit, REQ 30 all-inhibited, REQ 37-39 sub-mode inhibits, REQ 13 initiate-while-inhibited";
83
84
  attribute :>> exitCondition = "Infusion_initiate_prog with Inhibited_Infusion_macro = FALSE (REQ 46); Infusion_inhibit_prog to IDLE (REQ 47)";
84
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10 (REQ 43-47)";
85
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10 (REQ 43-47)"; }
85
86
  }
86
87
 
87
88
  state modeACTIVE : MemoState {
88
- attribute :>> id = "MODE-005";
89
+ @MemoIdentity { :>> providedId = "MODE-005"; }
89
90
  attribute :>> stateKind = StateKind::mode;
90
91
  attribute :>> name = "ON.THERAPY.ACTIVE";
91
92
  attribute :>> modeKind = "active parent";
92
93
  attribute :>> description = "Actual infusion through BASAL, SQUARE BOLUS or PATIENT BOLUS. Only mode where a patient bolus may be requested (REQ 25). Square boluses are scheduled automatically every Interval_sbolus_prog for Duration_sbolus_prog (REQ 24). Actual_Infusion_Duration_macro accumulates here.";
93
94
  attribute :>> entryCondition = "infusion initiated (REQ 12) or resumed (REQ 46)";
94
95
  attribute :>> exitCondition = "infusion complete (REQ 28); PAUSED via REQ 29/30/37-39";
95
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6";
96
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6"; }
96
97
 
97
98
  state modeBASAL : MemoState {
98
- attribute :>> id = "MODE-006";
99
+ @MemoIdentity { :>> providedId = "MODE-006"; }
99
100
  attribute :>> stateKind = StateKind::mode;
100
101
  attribute :>> name = "ON.THERAPY.ACTIVE.BASAL";
101
102
  attribute :>> modeKind = "active-basal";
102
103
  attribute :>> description = "Constant-rate delivery at FlowRate_basal_prog within Tolerance_Max_const (REQ 40). FlowRate_Mode_macro = FlowRate_basal_prog.";
103
104
  attribute :>> entryCondition = "infusion initiated/resumed (REQ 12/46); square bolus ended (REQ 34); patient bolus ended (REQ 35)";
104
105
  attribute :>> exitCondition = "scheduled square bolus (REQ 31); patient bolus granted (REQ 32); Inhibited_Infusion_macro (REQ 37)";
105
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7";
106
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7"; }
106
107
  }
107
108
 
108
109
  state modeSQUARE : MemoState {
109
- attribute :>> id = "MODE-007";
110
+ @MemoIdentity { :>> providedId = "MODE-007"; }
110
111
  attribute :>> stateKind = StateKind::mode;
111
112
  attribute :>> name = "ON.THERAPY.ACTIVE.SQUARE_BOLUS";
112
113
  attribute :>> modeKind = "active-square-bolus (auto-scheduled)";
113
114
  attribute :>> description = "Prescribed extra delivery at FlowRate_sbolus_prog within Tolerance_Max_const (REQ 41). Auto-initiates at the prescribed frequency and ends after the prescribed duration — no external trigger (§4.1.8, REQ 24). FlowRate_Mode_macro = FlowRate_sbolus_prog.";
114
115
  attribute :>> entryCondition = "scheduled start per REQ 24 with REQ 31 guards; patient bolus end with square scheduled (REQ 36)";
115
116
  attribute :>> exitCondition = "scheduled end or Inhibited_Bolus_macro (REQ 34); patient bolus granted (REQ 33); inhibits (REQ 39)";
116
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8";
117
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8"; }
117
118
  }
118
119
 
119
120
  state modePBOLUS : MemoState {
120
- attribute :>> id = "MODE-008";
121
+ @MemoIdentity { :>> providedId = "MODE-008"; }
121
122
  attribute :>> stateKind = StateKind::mode;
122
123
  attribute :>> name = "ON.THERAPY.ACTIVE.PATIENT_BOLUS";
123
124
  attribute :>> modeKind = "active-patient-bolus";
124
125
  attribute :>> description = "Patient-requested delivery at FlowRate_pbolus_prog within Tolerance_Max_const (REQ 42). Granted only when no REQ 25 ignore condition holds. FlowRate_Mode_macro = FlowRate_pbolus_prog.";
125
126
  attribute :>> entryCondition = "BolusRequest_prog with no REQ 25 ignore condition (REQ 32/33)";
126
127
  attribute :>> exitCondition = "Inhibited_PatientBolus_macro or duration >= Duration_pbolus_prog (REQ 35/36); inhibits (REQ 38)";
127
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9";
128
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9"; }
128
129
  }
129
130
  }
130
131
  }
@@ -330,22 +331,22 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
330
331
  // The individual configurations remain ordinary model elements, so their
331
332
  // active mode is navigable as well as visible in the choice-point edge.
332
333
  part basalConfiguration : ModeConfiguration {
333
- attribute :>> id = "CFG-001";
334
+ @MemoIdentity { :>> providedId = "CFG-001"; }
334
335
  attribute :>> name = "BasalTherapyConfiguration";
335
336
  ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modeBASAL;
336
337
  }
337
338
  part squareBolusConfiguration : ModeConfiguration {
338
- attribute :>> id = "CFG-002";
339
+ @MemoIdentity { :>> providedId = "CFG-002"; }
339
340
  attribute :>> name = "SquareBolusConfiguration";
340
341
  ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modeSQUARE;
341
342
  }
342
343
  part patientBolusConfiguration : ModeConfiguration {
343
- attribute :>> id = "CFG-003";
344
+ @MemoIdentity { :>> providedId = "CFG-003"; }
344
345
  attribute :>> name = "PatientBolusConfiguration";
345
346
  ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modePBOLUS;
346
347
  }
347
348
  part pausedConfiguration : ModeConfiguration {
348
- attribute :>> id = "CFG-004";
349
+ @MemoIdentity { :>> providedId = "CFG-004"; }
349
350
  attribute :>> name = "PausedKvoConfiguration";
350
351
  ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modePAUSED;
351
352
  }
@@ -358,59 +359,59 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
358
359
 
359
360
  // ── Behavior properties and timing constraints ──────────────
360
361
  part propAlarmStopsSameStep : BehaviorProperty {
361
- attribute :>> id = "BP-002";
362
+ @MemoIdentity { :>> providedId = "BP-002"; }
362
363
  attribute :>> name = "AlarmResponseSameStepKvo";
363
364
  attribute :>> propertyKind = BehaviorPropertyKind::safetyProperty;
364
365
  attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
365
366
  attribute :>> formalExpression = "ALARM.ALARM_OUT -> IM.ALARM_IN is an AADL immediate connection: when an infusion-inhibiting notification asserts, Infusion_Manager limits Commanded_Flow_Rate <= FlowRate_kvo_hd in the same execution step";
366
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) and AGREE flow <= KVO guarantees";
367
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) and AGREE flow <= KVO guarantees"; }
367
368
  }
368
369
  part propPausedNoResumeWhileInhibited : BehaviorProperty {
369
- attribute :>> id = "BP-004";
370
+ @MemoIdentity { :>> providedId = "BP-004"; }
370
371
  attribute :>> name = "PausedNoTransitionWhileInhibited";
371
372
  attribute :>> propertyKind = BehaviorPropertyKind::stateInvariant;
372
373
  attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
373
374
  attribute :>> formalExpression = "in PAUSED: Infusion_initiate_prog AND Inhibited_Infusion_macro = TRUE => mode unchanged";
374
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)";
375
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)"; }
375
376
  }
376
377
  part propModeTimeoutActions : BehaviorProperty {
377
- attribute :>> id = "BP-005";
378
+ @MemoIdentity { :>> providedId = "BP-005"; }
378
379
  attribute :>> name = "IdleAndPausedTimeoutActions";
379
380
  attribute :>> propertyKind = BehaviorPropertyKind::transitionRule;
380
381
  attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
381
382
  attribute :>> formalExpression = "time in IDLE > Max_IDLE_Duration_const => REQ 59 'IDLE Time' actions; time in PAUSED > Max_PAUSED_Duration_const => REQ 59 'PAUSED Time' actions (notification actions, not mode transitions)";
382
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 15) and §4.1.10.1 (REQ 44)";
383
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 15) and §4.1.10.1 (REQ 44)"; }
383
384
  }
384
385
  part propLockoutTimerMonotonic : BehaviorProperty {
385
- attribute :>> id = "BP-003";
386
+ @MemoIdentity { :>> providedId = "BP-003"; }
386
387
  attribute :>> name = "LockoutTimerNeverShortened";
387
388
  attribute :>> propertyKind = BehaviorPropertyKind::stateInvariant;
388
389
  attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
389
390
  attribute :>> formalExpression = "lockout_remaining decreases only with elapsed time; no input path resets it early";
390
- attribute :>> sourceReference = "MEMO extension — supports the REQ 25.3 lockout ignore condition; invariant not stated by the source";
391
+ @MemoIdentity { :>> sourceReference = "MEMO extension — supports the REQ 25.3 lockout ignore condition; invariant not stated by the source"; }
391
392
  }
392
393
  part tcAlarmLatency : TimingConstraint {
393
- attribute :>> id = "TC-001";
394
+ @MemoIdentity { :>> providedId = "TC-001"; }
394
395
  attribute :>> name = "AlarmToSafeStateLatency";
395
396
  attribute :>> constraintKind = TimingConstraintKind::latency;
396
397
  attribute :>> minMs = "0";
397
398
  attribute :>> maxMs = "20";
398
399
  ref :>> referenceElement = fcAlarmStop;
399
- attribute :>> verificationMethod = VerificationMethodKind::modelChecking;
400
- attribute :>> sourceReference = "MEMO extension — illustrative wall-clock budget; the source specifies synchronous same-step (immediate) semantics with no timing figures";
400
+ attribute :>> verificationMethod = MemoVerificationMethodKind::modelChecking;
401
+ @MemoIdentity { :>> sourceReference = "MEMO extension — illustrative wall-clock budget; the source specifies synchronous same-step (immediate) semantics with no timing figures"; }
401
402
  }
402
403
  part tcBolusResponse : TimingConstraint {
403
- attribute :>> id = "TC-002";
404
+ @MemoIdentity { :>> providedId = "TC-002"; }
404
405
  attribute :>> name = "BolusRequestResponseLatency";
405
406
  attribute :>> constraintKind = TimingConstraintKind::latency;
406
407
  attribute :>> minMs = "0";
407
408
  attribute :>> maxMs = "100";
408
409
  ref :>> referenceElement = fcPatientBolus;
409
- attribute :>> verificationMethod = VerificationMethodKind::test;
410
- attribute :>> sourceReference = "MEMO extension — illustrative wall-clock budget; not specified by the source";
410
+ attribute :>> verificationMethod = MemoVerificationMethodKind::test;
411
+ @MemoIdentity { :>> sourceReference = "MEMO extension — illustrative wall-clock budget; not specified by the source"; }
411
412
  }
412
413
  part tcWatchdogTimeout : TimingConstraint {
413
- attribute :>> id = "TC-003";
414
+ @MemoIdentity { :>> providedId = "TC-003"; }
414
415
  attribute :>> name = "WatchdogTimeout";
415
416
  attribute :>> constraintKind = TimingConstraintKind::deadline;
416
417
  attribute :>> minMs = "40";
@@ -420,7 +421,7 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
420
421
  // `referenceElement` is a MemoPart; a requirement is a requirement def
421
422
  // and does not conform to it — that link is REQ-X-08's own trace.
422
423
  ref :>> referenceElement = gpcaDevice.gpcaSoftware.systemMonitor;
423
- attribute :>> verificationMethod = VerificationMethodKind::test;
424
- attribute :>> sourceReference = "MEMO extension — supports extension requirement REQ-X-08; watchdog not specified by the source";
424
+ attribute :>> verificationMethod = MemoVerificationMethodKind::test;
425
+ @MemoIdentity { :>> sourceReference = "MEMO extension — supports extension requirement REQ-X-08; watchdog not specified by the source"; }
425
426
  }
426
427
  }
@@ -8,9 +8,10 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
8
8
  private import memo_assurance_requirements::*;
9
9
  private import memo_core_common::*;
10
10
 
11
+ private import memo_core_common::MemoIdentity;
11
12
  // ── Logical functions ───────────────────────────────────────
12
13
  action fnAcquireSensors : SystemFunction {
13
- attribute :>> id = "FUNC-001";
14
+ @MemoIdentity { :>> providedId = "FUNC-001"; }
14
15
  attribute :>> name = "AcquireSensorData";
15
16
  attribute :>> functionCategory = "sensing";
16
17
  attribute :>> trigger = "every 20 ms execution step";
@@ -27,7 +28,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
27
28
  // requires — a component function allocated nowhere is a
28
29
  // responsibility nobody has accepted.
29
30
  action cfnMeasureFlowRate : ComponentFunction {
30
- attribute :>> id = "CFUN-001";
31
+ @MemoIdentity { :>> providedId = "CFUN-001"; }
31
32
  attribute :>> name = "MeasureFlowRate";
32
33
  attribute :>> functionCategory = "sensing";
33
34
  attribute :>> actionKind = ActionKind::sense;
@@ -37,7 +38,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
37
38
  attribute :>> criticality = CriticalityKind::catastrophic;
38
39
  }
39
40
  action cfnDetectAirInLine : ComponentFunction {
40
- attribute :>> id = "CFUN-002";
41
+ @MemoIdentity { :>> providedId = "CFUN-002"; }
41
42
  attribute :>> name = "DetectAirInLine";
42
43
  attribute :>> functionCategory = "protection";
43
44
  attribute :>> actionKind = ActionKind::sense;
@@ -48,7 +49,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
48
49
  }
49
50
  // The subassembly case: a component function need not sit on a leaf part.
50
51
  action cfnAggregateSensorStatus : ComponentFunction {
51
- attribute :>> id = "CFUN-003";
52
+ @MemoIdentity { :>> providedId = "CFUN-003"; }
52
53
  attribute :>> name = "AggregateSensorStatus";
53
54
  attribute :>> functionCategory = "sensing";
54
55
  attribute :>> actionKind = ActionKind::transform;
@@ -60,7 +61,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
60
61
  }
61
62
 
62
63
  action fnValidatePrescription : SystemFunction {
63
- attribute :>> id = "FUNC-002";
64
+ @MemoIdentity { :>> providedId = "FUNC-002"; }
64
65
  attribute :>> name = "ValidatePrescription";
65
66
  attribute :>> functionCategory = "configuration";
66
67
  attribute :>> trigger = "prescription entry or edit";
@@ -69,7 +70,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
69
70
  attribute :>> criticality = CriticalityKind::catastrophic;
70
71
  }
71
72
  action fnMonitorAlarm : SystemFunction {
72
- attribute :>> id = "FUNC-003";
73
+ @MemoIdentity { :>> providedId = "FUNC-003"; }
73
74
  attribute :>> name = "MonitorExceptionalConditions";
74
75
  attribute :>> functionCategory = "alarm";
75
76
  attribute :>> trigger = "every 20 ms execution step";
@@ -78,7 +79,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
78
79
  attribute :>> criticality = CriticalityKind::catastrophic;
79
80
  }
80
81
  action fnAnnunciate : SystemFunction {
81
- attribute :>> id = "FUNC-004";
82
+ @MemoIdentity { :>> providedId = "FUNC-004"; }
82
83
  attribute :>> name = "AnnunciateAlarms";
83
84
  attribute :>> functionCategory = "alarm";
84
85
  attribute :>> trigger = "alarm raised, escalated, or cleared";
@@ -87,7 +88,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
87
88
  attribute :>> criticality = CriticalityKind::high;
88
89
  }
89
90
  action fnManageInfusion : SystemFunction {
90
- attribute :>> id = "FUNC-005";
91
+ @MemoIdentity { :>> providedId = "FUNC-005"; }
91
92
  attribute :>> name = "ManageInfusion";
92
93
  attribute :>> functionCategory = "infusion";
93
94
  attribute :>> trigger = "mode transitions and each execution step while therapy active";
@@ -96,7 +97,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
96
97
  attribute :>> criticality = CriticalityKind::catastrophic;
97
98
  }
98
99
  action fnEnforceLimits : SystemFunction {
99
- attribute :>> id = "FUNC-006";
100
+ @MemoIdentity { :>> providedId = "FUNC-006"; }
100
101
  attribute :>> name = "EnforceDoseLimits";
101
102
  attribute :>> functionCategory = "infusion";
102
103
  attribute :>> trigger = "patient bolus request or clinician square bolus command";
@@ -105,7 +106,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
105
106
  attribute :>> criticality = CriticalityKind::catastrophic;
106
107
  }
107
108
  action fnCommandPump : SystemFunction {
108
- attribute :>> id = "FUNC-007";
109
+ @MemoIdentity { :>> providedId = "FUNC-007"; }
109
110
  attribute :>> name = "CommandPumpMotor";
110
111
  attribute :>> functionCategory = "actuation";
111
112
  attribute :>> trigger = "flow command update";
@@ -114,7 +115,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
114
115
  attribute :>> criticality = CriticalityKind::catastrophic;
115
116
  }
116
117
  action fnLogEvents : SystemFunction {
117
- attribute :>> id = "FUNC-008";
118
+ @MemoIdentity { :>> providedId = "FUNC-008"; }
118
119
  attribute :>> name = "LogTherapyEvents";
119
120
  attribute :>> functionCategory = "logging";
120
121
  attribute :>> trigger = "dose delivered, mode change, alarm, or configuration change";
@@ -123,7 +124,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
123
124
  attribute :>> criticality = CriticalityKind::medium;
124
125
  }
125
126
  action fnManagePower : SystemFunction {
126
- attribute :>> id = "FUNC-009";
127
+ @MemoIdentity { :>> providedId = "FUNC-009"; }
127
128
  attribute :>> name = "ManagePower";
128
129
  attribute :>> functionCategory = "platform";
129
130
  attribute :>> trigger = "mains-loss signal or battery level change";
@@ -132,7 +133,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
132
133
  attribute :>> criticality = CriticalityKind::high;
133
134
  }
134
135
  action fnPresentStatus : SystemFunction {
135
- attribute :>> id = "FUNC-010";
136
+ @MemoIdentity { :>> providedId = "FUNC-010"; }
136
137
  attribute :>> name = "PresentStatus";
137
138
  attribute :>> functionCategory = "user-interface";
138
139
  attribute :>> trigger = "state or prescription change";
@@ -141,7 +142,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
141
142
  attribute :>> criticality = CriticalityKind::high;
142
143
  }
143
144
  action fnSelfTest : SystemFunction {
144
- attribute :>> id = "FUNC-011";
145
+ @MemoIdentity { :>> providedId = "FUNC-011"; }
145
146
  attribute :>> name = "ExecuteSelfTest";
146
147
  attribute :>> functionCategory = "platform";
147
148
  attribute :>> trigger = "power-on and periodic in-service checks";
@@ -152,7 +153,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
152
153
 
153
154
  // ── Logical flows ───────────────────────────────────────────
154
155
  part lfSensorAcquisition : FunctionalExchange {
155
- attribute :>> id = "LF-001";
156
+ @MemoIdentity { :>> providedId = "LF-001"; }
156
157
  attribute :>> name = "SensorAcquisitionFlow";
157
158
  attribute :>> flowKind = FlowKind::measurement;
158
159
  attribute :>> latencyBudgetMs = 20.0;
@@ -162,7 +163,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
162
163
  ref :>> targetFunction = fnMonitorAlarm;
163
164
  }
164
165
  part lfFlowCommand : FunctionalExchange {
165
- attribute :>> id = "LF-002";
166
+ @MemoIdentity { :>> providedId = "LF-002"; }
166
167
  attribute :>> name = "FlowCommandFlow";
167
168
  attribute :>> flowKind = FlowKind::command;
168
169
  attribute :>> latencyBudgetMs = 20.0;
@@ -172,7 +173,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
172
173
  ref :>> targetFunction = fnCommandPump;
173
174
  }
174
175
  part lfAlarmSignal : FunctionalExchange {
175
- attribute :>> id = "LF-003";
176
+ @MemoIdentity { :>> providedId = "LF-003"; }
176
177
  attribute :>> name = "AlarmSignalFlow";
177
178
  attribute :>> flowKind = FlowKind::alarm;
178
179
  attribute :>> latencyBudgetMs = 20.0;
@@ -182,7 +183,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
182
183
  ref :>> targetFunction = fnAnnunciate;
183
184
  }
184
185
  part lfPrescriptionEntry : FunctionalExchange {
185
- attribute :>> id = "LF-004";
186
+ @MemoIdentity { :>> providedId = "LF-004"; }
186
187
  attribute :>> name = "PrescriptionEntryFlow";
187
188
  attribute :>> flowKind = FlowKind::configuration;
188
189
  attribute :>> latencyBudgetMs = 500.0;
@@ -194,7 +195,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
194
195
  // ── Exchange item definitions ───────────────────────────────
195
196
  item ddPrescription : InterfaceItem {
196
197
  attribute :>> itemKind = InterfaceItemKind::data;
197
- attribute :>> id = "DD-001";
198
+ @MemoIdentity { :>> providedId = "DD-001"; }
198
199
  attribute :>> name = "PrescriptionRecord";
199
200
  attribute :>> semantics = "patient id, drug name, concentration, VTBI total, duration total, basal flow rate, square bolus rate/duration/interval, patient bolus rate/duration/lockout period, max boluses per hour (DD-005..DD-017)";
200
201
  attribute :>> unit = "ml/hr, ml, minutes, mg/ml, per hour";
@@ -205,11 +206,11 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
205
206
  attribute :>> integrityClass = "class C";
206
207
  attribute :>> confidentialityClass = "clinical";
207
208
  attribute :>> availabilityClass = "must survive power loss";
208
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.1.1 Prescription Data";
209
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.1.1 Prescription Data"; }
209
210
  }
210
211
  item ddBolusRequest : InterfaceItem {
211
212
  attribute :>> itemKind = InterfaceItemKind::data;
212
- attribute :>> id = "DD-002";
213
+ @MemoIdentity { :>> providedId = "DD-002"; }
213
214
  attribute :>> name = "BolusRequestSignal";
214
215
  attribute :>> semantics = "debounced patient pendant press event";
215
216
  attribute :>> encoding = "edge event with 50 ms debounce";
@@ -220,7 +221,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
220
221
  }
221
222
  item ddSensorVector : InterfaceItem {
222
223
  attribute :>> itemKind = InterfaceItemKind::data;
223
- attribute :>> id = "DD-003";
224
+ @MemoIdentity { :>> providedId = "DD-003"; }
224
225
  attribute :>> name = "SensorStatusVector";
225
226
  attribute :>> semantics = "air-in-line, occlusion pressure, reservoir volume, door state, flow measurement, battery level, CPU/memory status";
226
227
  attribute :>> encoding = "fixed-layout status word per 20 ms step";
@@ -231,7 +232,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
231
232
  }
232
233
  item ddEventRecord : InterfaceItem {
233
234
  attribute :>> itemKind = InterfaceItemKind::data;
234
- attribute :>> id = "DD-004";
235
+ @MemoIdentity { :>> providedId = "DD-004"; }
235
236
  attribute :>> name = "TherapyEventRecord";
236
237
  attribute :>> semantics = "timestamped dose, alarm, mode, and configuration events";
237
238
  attribute :>> encoding = "append-only sequenced records";
@@ -242,7 +243,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
242
243
  }
243
244
  item cdFlowCommand : InterfaceItem {
244
245
  attribute :>> itemKind = InterfaceItemKind::command;
245
- attribute :>> id = "CD-001";
246
+ @MemoIdentity { :>> providedId = "CD-001"; }
246
247
  attribute :>> name = "FlowCommand";
247
248
  attribute :>> controlType = "commanded flow rate with enable interlock";
248
249
  attribute :>> timeoutMs = 40.0;
@@ -250,7 +251,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
250
251
  }
251
252
  item cdAlarmSignal : InterfaceItem {
252
253
  attribute :>> itemKind = InterfaceItemKind::command;
253
- attribute :>> id = "CD-002";
254
+ @MemoIdentity { :>> providedId = "CD-002"; }
254
255
  attribute :>> name = "AlarmSignal";
255
256
  attribute :>> controlType = "priority-coded alarm assertion (level 1 stops infusion, level 2 warns)";
256
257
  attribute :>> timeoutMs = 20.0;
@@ -10,11 +10,13 @@ package memo_examples_gpca_pump_gpca_context {
10
10
  private import memo_core_enumerations::*;
11
11
  private import memo_examples_gpca_pump_gpca_operational::*;
12
12
 
13
+ private import memo_core_common::*;
14
+ private import memo_core_common::MemoIdentity;
13
15
  // ── Intended use (ISO 14971 §5.2, IEC 62366-1) ──────────────
14
16
  part gpcaIntendedUse : IntendedUse {
15
- attribute :>> id = "IU-001";
17
+ @MemoIdentity { :>> providedId = "IU-001"; }
16
18
  attribute :>> name = "GPCA_IntendedUse";
17
- attribute :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics.";
19
+ @MemoIdentity { :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics."; }
18
20
  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.";
19
21
  attribute :>> indication = "Management of acute post-operative or chronic pain requiring titrated intravenous opioid analgesia.";
20
22
  attribute :>> contraindication = "Patients unable to comprehend or operate the bolus request mechanism; drugs without safe-value records in the hospital pharmacy database.";
@@ -24,22 +26,22 @@ package memo_examples_gpca_pump_gpca_context {
24
26
  attribute :>> missionKind = "therapeutic device mission";
25
27
  attribute :>> successCriteria = "Drug delivered per prescription; no overdose or undetected under-infusion; every hazardous condition annunciated within its alarm latency budget.";
26
28
  attribute :>> operationalContext = "Acute-care hospital ward, fixed (non-ambulatory) location (UC-001).";
27
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1-2.3 (GPCA overview, system functions, user characteristics)";
29
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1-2.3 (GPCA overview, system functions, user characteristics)"; }
28
30
  }
29
31
  part bolusByProxyMisuse : ReasonablyForeseeableMisuse {
30
- attribute :>> id = "RFM-001";
32
+ @MemoIdentity { :>> providedId = "RFM-001"; }
31
33
  attribute :>> name = "BolusRequestBySomeoneOtherThanPatient";
32
- attribute :>> shortDescription = "A caregiver or visitor presses the patient bolus control.";
34
+ @MemoIdentity { :>> shortDescription = "A caregiver or visitor presses the patient bolus control."; }
33
35
  attribute :>> description = "A person other than the patient activates the bolus request control, bypassing the intended patient self-limiting behavior.";
34
36
  attribute :>> misuseContext = "Patient-controlled analgesia in a supervised hospital setting.";
35
37
  attribute :>> foreseeableBasis = "Known PCA use pattern represented in the GPCA hazard analysis.";
36
38
  attribute :>> affectedUseContext = "UC-001";
37
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8; CITE-005: Open PCA ISO 14971 risk analysis, bolus-by-proxy event";
39
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8; CITE-005: Open PCA ISO 14971 risk analysis, bolus-by-proxy event"; }
38
40
  }
39
41
 
40
42
  // ── Use contexts ────────────────────────────────────────────
41
43
  part hospitalWardContext : UseContext {
42
- attribute :>> id = "UC-001";
44
+ @MemoIdentity { :>> providedId = "UC-001"; }
43
45
  attribute :>> name = "HospitalWardUseContext";
44
46
  attribute :>> careSetting = "acute-care hospital ward and post-anesthesia care unit";
45
47
  attribute :>> environment = "indoor clinical environment, mains power with battery backup, pole or bed-rail mounted";
@@ -52,7 +54,7 @@ package memo_examples_gpca_pump_gpca_context {
52
54
  // ── Actors ──────────────────────────────────────────────────
53
55
  part actorPatient : User {
54
56
  attribute :>> actorKind = ActorKind::patient;
55
- attribute :>> id = "ACT-001";
57
+ @MemoIdentity { :>> providedId = "ACT-001"; }
56
58
  attribute :>> name = "Patient";
57
59
  attribute :>> trainingLevel = "instructed by clinician on bolus request button only";
58
60
  attribute :>> description = "Receives the infusion and requests bolus doses via the patient pendant.";
@@ -60,7 +62,7 @@ package memo_examples_gpca_pump_gpca_context {
60
62
  }
61
63
  part actorNurse : User {
62
64
  attribute :>> actorKind = ActorKind::clinician;
63
- attribute :>> id = "ACT-002";
65
+ @MemoIdentity { :>> providedId = "ACT-002"; }
64
66
  attribute :>> name = "ClinicianNurse";
65
67
  attribute :>> trainingLevel = "trained clinical user; programs prescriptions and responds to alarms";
66
68
  attribute :>> description = "Loads the drug reservoir, programs and confirms the prescription, starts/stops therapy, and responds to alarms.";
@@ -71,7 +73,7 @@ package memo_examples_gpca_pump_gpca_context {
71
73
  }
72
74
  part actorPrescriber : User {
73
75
  attribute :>> actorKind = ActorKind::clinician;
74
- attribute :>> id = "ACT-003";
76
+ @MemoIdentity { :>> providedId = "ACT-003"; }
75
77
  attribute :>> name = "PrescribingPhysician";
76
78
  attribute :>> trainingLevel = "licensed prescriber";
77
79
  attribute :>> description = "Prescribes drug, concentration, basal rate, bolus volume, lockout interval, and maximum dose limits.";
@@ -79,7 +81,7 @@ package memo_examples_gpca_pump_gpca_context {
79
81
  }
80
82
  part actorPharmacist : User {
81
83
  attribute :>> actorKind = ActorKind::clinician;
82
- attribute :>> id = "ACT-004";
84
+ @MemoIdentity { :>> providedId = "ACT-004"; }
83
85
  attribute :>> name = "Pharmacist";
84
86
  attribute :>> trainingLevel = "licensed pharmacist";
85
87
  attribute :>> description = "Prepares the drug reservoir and verifies drug and concentration against the prescription.";
@@ -87,7 +89,7 @@ package memo_examples_gpca_pump_gpca_context {
87
89
  }
88
90
  part actorTechnician : User {
89
91
  attribute :>> actorKind = ActorKind::technician;
90
- attribute :>> id = "ACT-005";
92
+ @MemoIdentity { :>> providedId = "ACT-005"; }
91
93
  attribute :>> name = "BiomedicalTechnician";
92
94
  attribute :>> trainingLevel = "service-trained; authenticated service access";
93
95
  attribute :>> description = "Performs maintenance, battery replacement, and calibration through the service interface.";
@@ -96,43 +98,46 @@ package memo_examples_gpca_pump_gpca_context {
96
98
 
97
99
  // ── Foreseeable use errors (IEC 62366-1, AAMI TIR PCA) ──────
98
100
  part ueMisprogrammedRate : UseError {
99
- attribute :>> id = "UE-001";
101
+ @MemoIdentity { :>> providedId = "UE-001"; }
100
102
  attribute :>> name = "MisprogrammedInfusionParameters";
101
103
  attribute :>> errorCategory = UseErrorCategoryKind::actionCategory;
102
- attribute :>> taskReference = "OA-003: Program prescription";
103
104
  attribute :>> severity = SeverityKind::catastrophic;
104
105
  attribute :>> rootCauseType = "decimal-point / unit entry slip during prescription programming";
105
106
  attribute :>> description = "Clinician enters a basal rate or bolus volume an order of magnitude off (e.g. mg vs mL, misplaced decimal).";
106
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (incorrect dose settings)";
107
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (incorrect dose settings)"; }
107
108
  }
108
109
  part ueBolusByProxy : UseError {
109
- attribute :>> id = "UE-002";
110
+ @MemoIdentity { :>> providedId = "UE-002"; }
110
111
  attribute :>> name = "PCAByProxy";
111
112
  attribute :>> errorCategory = UseErrorCategoryKind::cognition;
112
- attribute :>> taskReference = "OA-005: Request patient bolus";
113
113
  attribute :>> severity = SeverityKind::catastrophic;
114
114
  attribute :>> rootCauseType = "family member or caregiver presses bolus button on behalf of a sedated patient";
115
115
  attribute :>> description = "Bolus doses requested by someone other than the patient defeat the inherent safety of patient-limited dosing.";
116
- attribute :>> sourceReference = "illustrative — no source";
116
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
117
117
  }
118
118
  part ueWrongDrugLoaded : UseError {
119
- attribute :>> id = "UE-003";
119
+ @MemoIdentity { :>> providedId = "UE-003"; }
120
120
  attribute :>> name = "WrongDrugOrConcentrationLoaded";
121
121
  attribute :>> errorCategory = UseErrorCategoryKind::cognition;
122
- attribute :>> taskReference = "OA-002: Load drug reservoir";
123
122
  attribute :>> severity = SeverityKind::catastrophic;
124
123
  attribute :>> rootCauseType = "reservoir containing wrong drug or concentration mounted without verification";
125
124
  attribute :>> description = "Loaded drug or concentration differs from the programmed prescription, so delivered dose differs from intended dose.";
126
- attribute :>> sourceReference = "illustrative — no source";
125
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
127
126
  }
128
127
  part ueAlarmDisregard : UseError {
129
- attribute :>> id = "UE-004";
128
+ @MemoIdentity { :>> providedId = "UE-004"; }
130
129
  attribute :>> name = "AlarmSilencedAndForgotten";
131
130
  attribute :>> errorCategory = UseErrorCategoryKind::memoryRecall;
132
- attribute :>> taskReference = "OA-006: Respond to alarm";
133
131
  attribute :>> severity = SeverityKind::serious;
134
132
  attribute :>> rootCauseType = "alarm silenced during high workload and the underlying condition never resolved";
135
133
  attribute :>> description = "Clinician silences an alarm and does not return to resolve the underlying condition (e.g. occlusion), interrupting therapy.";
136
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (attentional/memory failure)";
134
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (attentional/memory failure)"; }
137
135
  }
136
+ // Which task each use error is committed during (IEC 62366-1). This was
137
+ // a `taskReference` string naming the task by id and title; nothing could
138
+ // follow it, and CommitsUseError is what the ontology declares for it.
139
+ connection : CommitsUseError connect task ::> oaProgram to useError ::> ueMisprogrammedRate;
140
+ connection : CommitsUseError connect task ::> oaRequestBolus to useError ::> ueBolusByProxy;
141
+ connection : CommitsUseError connect task ::> oaLoadReservoir to useError ::> ueWrongDrugLoaded;
142
+ connection : CommitsUseError connect task ::> oaRespondAlarm to useError ::> ueAlarmDisregard;
138
143
  }