@memoarchitect/ontology 0.8.24 → 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 (182) hide show
  1. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  2. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  3. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +9 -7
  4. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  5. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +8 -6
  6. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  7. package/examples/gpca-pump/memo.identity.yaml +2179 -0
  8. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  9. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  10. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  11. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  12. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  13. package/examples/gpca-pump/model/catalog/gpca_context.sysml +22 -20
  14. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -13
  15. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  16. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  17. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +121 -125
  18. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  19. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
  20. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  21. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  22. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -14
  23. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -8
  24. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  25. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  26. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +6 -4
  27. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +5 -3
  28. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +5 -3
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +5 -3
  30. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +5 -3
  31. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +5 -3
  32. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +5 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +5 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +5 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +5 -3
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +5 -3
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +5 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +5 -3
  39. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +5 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +5 -3
  41. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -3
  42. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +5 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -3
  44. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +5 -3
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +5 -3
  47. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +5 -3
  48. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +5 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +6 -4
  50. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -3
  51. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +5 -3
  52. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +9 -7
  53. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  54. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +6 -4
  55. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  56. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  57. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  58. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  59. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  60. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
  61. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
  62. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  63. package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
  64. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  65. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +17 -16
  66. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  67. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  68. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  69. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +10 -8
  70. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  71. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +51 -51
  72. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  73. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  74. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  75. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -8
  76. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -5
  77. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -1
  78. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -1
  79. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -1
  80. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +8 -6
  81. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +3 -1
  82. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -1
  83. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +3 -1
  84. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +11 -7
  85. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  86. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  87. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +27 -22
  88. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  89. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  90. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  91. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  92. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  93. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  94. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  95. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  96. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
  97. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  98. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  99. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  100. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  101. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  102. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +5 -3
  103. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +5 -3
  104. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +5 -3
  105. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +3 -1
  106. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +3 -1
  107. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +3 -1
  108. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  109. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  110. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  111. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  112. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  113. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  114. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  115. package/extensions/template/src/extension.sysml +3 -1
  116. package/package.json +2 -2
  117. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  118. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  119. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  120. package/src/architecture/implementation/ui/memo_ui.sysml +0 -23
  121. package/src/architecture/logical/interfaces/memo_interfaces.sysml +3 -1
  122. package/src/architecture/operational/context/use_context/memo_use_context.sysml +3 -11
  123. package/src/architecture/operational/scenarios/memo_scenarios.sysml +0 -10
  124. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -11
  125. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -20
  126. package/src/architecture/realization/deployment/memo_deployment.sysml +16 -9
  127. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  128. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  129. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  130. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  131. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  132. package/src/artifacts/standards/iec_60812.sysml +21 -22
  133. package/src/artifacts/standards/iec_62304.sysml +150 -169
  134. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  135. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  136. package/src/artifacts/standards/iso_13485.sysml +80 -89
  137. package/src/artifacts/standards/iso_14971.sysml +66 -73
  138. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  139. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  140. package/src/core/common/memo_common.sysml +50 -50
  141. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  142. package/src/core/relationships/memo_relationships.sysml +22 -49
  143. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  144. package/src/methodology/core/memo_core.sysml +0 -10
  145. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  146. package/src/rules/closure/closure_rules.sysml +22 -20
  147. package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
  148. package/src/rules/ontology/ontology_invariants.sysml +106 -33
  149. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  150. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -28
  151. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  152. package/src/viewpoints/context/context_viewpoint.sysml +5 -3
  153. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +5 -3
  154. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  155. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -16
  156. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  157. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +5 -3
  158. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +5 -3
  159. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -2
  160. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +5 -3
  161. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  162. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +5 -3
  163. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -2
  164. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +5 -3
  165. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +5 -3
  166. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  167. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -2
  168. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +5 -3
  169. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -2
  170. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +5 -3
  171. package/src/viewpoints/software/software_viewpoint.sysml +4 -2
  172. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +5 -3
  173. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -2
  174. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  175. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -2
  176. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  177. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +5 -3
  178. package/templates/connected-device/model/catalog/project.sysml +3 -1
  179. package/templates/default/model/catalog/project.sysml +3 -1
  180. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  181. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  182. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -5,9 +5,10 @@ package memo_examples_gpca_pump_gpca_risk {
5
5
  private import memo_core_common::Citation;
6
6
  private import memo_core_enumerations::*;
7
7
 
8
+ private import memo_core_common::MemoIdentity;
8
9
  // ── Source corpus citations (verified 2026-07-05, extended 2026-07-08) ──
9
10
  part citeCriSysSysReq : Citation {
10
- attribute :>> id = "CITE-001";
11
+ @MemoIdentity { :>> providedId = "CITE-001"; }
11
12
  attribute :>> name = "CriSysGpcaSystemRequirements";
12
13
  attribute :>> source = "System Requirements: Generic Patient Controlled Analgesic Infusion (GPCA) System, draft — Murugesan, Rayadurgam, Heimdahl, University of Minnesota";
13
14
  attribute :>> section = "Ch.2 system description; Ch.3 interfaces (I 1-I 11, data dictionary); Ch.4 behavioral requirements (mode tree, REQ 1-86, REQ 59 notification table); Ch.5 non-behavioral; App. A.4 constants";
@@ -15,7 +16,7 @@ package memo_examples_gpca_pump_gpca_risk {
15
16
  attribute :>> year = "2013";
16
17
  }
17
18
  part citeCriSysAadl : Citation {
18
- attribute :>> id = "CITE-002";
19
+ @MemoIdentity { :>> providedId = "CITE-002"; }
19
20
  attribute :>> name = "CriSysGpcaAadlModel";
20
21
  attribute :>> source = "GPCA System Architectural Model v2.0 (AADL packages, AGREE contracts, ModelDocumentation.pdf) — University of Minnesota CriSys";
21
22
  attribute :>> section = "8 software subcomponents + port topology + AGREE contracts";
@@ -23,7 +24,7 @@ package memo_examples_gpca_pump_gpca_risk {
23
24
  attribute :>> year = "undated";
24
25
  }
25
26
  part citeCriSysVerification : Citation {
26
- attribute :>> id = "CITE-003";
27
+ @MemoIdentity { :>> providedId = "CITE-003"; }
27
28
  attribute :>> name = "CriSysGpcaVerification";
28
29
  attribute :>> source = "GPCA compositional verification package (AGREE properties, Simulink/Stateflow models) — University of Minnesota CriSys";
29
30
  attribute :>> section = "Full package";
@@ -31,7 +32,7 @@ package memo_examples_gpca_pump_gpca_risk {
31
32
  attribute :>> year = "undated";
32
33
  }
33
34
  part citeGipHazardAnalysis : Citation {
34
- attribute :>> id = "CITE-004";
35
+ @MemoIdentity { :>> providedId = "CITE-004"; }
35
36
  attribute :>> name = "GipHazardAnalysis";
36
37
  attribute :>> source = "Generic Infusion Pump Hazard Analysis and Safety Requirements Version 1.0 — Arney, Jetley, Jones, Lee, Ray, Sokolsky, Zhang; University of Pennsylvania / FDA OSEL (Tech Report MS-CIS-08-31)";
37
38
  attribute :>> section = "§2.1 hazard categories; §2.2 alarms and alerts; §2.3 pump checks; §2.4.1-2.4.8 hazard tables (HID rows: cause, action, mitigated-by, safety requirement); §3 safety requirements";
@@ -39,7 +40,7 @@ package memo_examples_gpca_pump_gpca_risk {
39
40
  attribute :>> year = "2009";
40
41
  }
41
42
  part citeOpenPcaPump : Citation {
42
- attribute :>> id = "CITE-005";
43
+ @MemoIdentity { :>> providedId = "CITE-005"; }
43
44
  attribute :>> name = "OpenPcaPumpArtifacts";
44
45
  attribute :>> source = "Model-based Risk Analysis for an Open-Source PCA Pump using the AADL Error Modeling Annex — Thiagarajan, Larson, Hatcliff, Zhang; Kansas State University SAnToS Lab (Open PCA Pump project ISO 14971 risk analysis)";
45
46
  attribute :>> section = "§4 Table 1 (harm / hazardous situation / hazard / initiating cause for the two primary hazards: opioid over-infusion, air embolism); Fig. 3 ISO 14971 causality chain; §5 harm and cause instances";
@@ -47,7 +48,7 @@ package memo_examples_gpca_pump_gpca_risk {
47
48
  attribute :>> year = "undated";
48
49
  }
49
50
  part citeGiipTaxonomy : Citation {
50
- attribute :>> id = "CITE-006";
51
+ @MemoIdentity { :>> providedId = "CITE-006"; }
51
52
  attribute :>> name = "FdaGiipHazardTaxonomy";
52
53
  attribute :>> source = "A Hazard Analysis for a Generic Insulin Infusion Pump — Zhang, Jones et al., Journal of Diabetes Science and Technology (structure template only; insulin-pump content, not GPCA)";
53
54
  attribute :>> section = "Table 1 hazardous-situation taxonomy; Tables 2-9 cause-source tables (operational, software, hardware, physical, electrical, biological/chemical, use, environmental) forming cause -> hazardous situation -> harm causal trees";
@@ -55,7 +56,7 @@ package memo_examples_gpca_pump_gpca_risk {
55
56
  attribute :>> year = "2010";
56
57
  }
57
58
  part citeGpcaHazardDoc : Citation {
58
- attribute :>> id = "CITE-007";
59
+ @MemoIdentity { :>> providedId = "CITE-007"; }
59
60
  attribute :>> name = "FdaGpcaHazardAnalysisDoc";
60
61
  attribute :>> source = "The Generic Patient Controlled Analgesia Pump Hazard Analysis (GPCA Model ver. 0.9) — FDA OSEL GIP project working document (Jetley); GPCA specialization of the GIP v1.0 hazard tables, retrieved from the archived GIP project site";
61
62
  attribute :>> section = "System domain; pump components; hazard tables: Operational HID 1.1-1.27, Environmental 2.1-2.13, Electrical 3.1-3.11, Hardware 4.1-4.13, Software 5.1-5.12, Mechanical 6.1-6.6, Biological/Chemical 7.1-7.2, Use 8.1-8.14";
@@ -63,7 +64,7 @@ package memo_examples_gpca_pump_gpca_risk {
63
64
  attribute :>> year = "2009";
64
65
  }
65
66
  part citeGpcaSafetyReqDoc : Citation {
66
- attribute :>> id = "CITE-008";
67
+ @MemoIdentity { :>> providedId = "CITE-008"; }
67
68
  attribute :>> name = "FdaGpcaSafetyRequirementsDoc";
68
69
  attribute :>> source = "Safety Requirements for the Generic Patient Controlled Analgesia Pump (GPCA Model ver. 0.9) — FDA OSEL GIP project working document (Jetley), retrieved from the archived GIP project site";
69
70
  attribute :>> section = "Infusion Control (flow rate + KVO, flow rate accuracy, VTBI, bolus dose, drug reservoir, pump suspend, reverse delivery, air-in-line alarm, occlusion alarm); User Interface (tamper resistance, confirmation); Error Handling; POST; Power; Dose Error Reduction (drug library hard/soft limits); System Environment";
@@ -72,7 +73,7 @@ package memo_examples_gpca_pump_gpca_risk {
72
73
  }
73
74
 
74
75
  part citeCriSysSoftwareBehavior : Citation {
75
- attribute :>> id = "CITE-009";
76
+ @MemoIdentity { :>> providedId = "CITE-009"; }
76
77
  attribute :>> name = "CriSysGpcaSoftwareBehaviorModel";
77
78
  attribute :>> source = "PCA Pump Software Model (Simulink/Stateflow) — University of Minnesota CriSys";
78
79
  attribute :>> section = "Infusion Pump Software Model Stateflow chart";
@@ -82,31 +83,31 @@ package memo_examples_gpca_pump_gpca_risk {
82
83
 
83
84
  // ── Shared risk matrix ───────────────────────────────────────────
84
85
  part riskMatrix : RiskMatrix {
85
- attribute :>> id = "RMX-001";
86
+ @MemoIdentity { :>> providedId = "RMX-001"; }
86
87
  attribute :>> name = "StandardRiskMatrix";
87
88
  attribute :>> probabilityScaleDefinition = "Remote, Occasional, Probable";
88
89
  attribute :>> severityScaleDefinition = "Minor, Serious, Catastrophic";
89
90
  attribute :>> riskLevelMapping = "matrix based";
90
91
  attribute :>> acceptabilityThresholds = "High unacceptable";
91
- attribute :>> sourceReference = "illustrative — no source";
92
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
92
93
  }
93
94
  part programmedDoseCharacteristic : SafetyRelatedCharacteristic {
94
- attribute :>> id = "SRC-001";
95
+ @MemoIdentity { :>> providedId = "SRC-001"; }
95
96
  attribute :>> name = "ProgrammedDoseAndFlowLimits";
96
97
  attribute :>> characteristic = "Programmable basal rate, bolus volume, lockout interval, and maximum dose";
97
98
  attribute :>> safetyImpact = "Incorrect values or failed enforcement can expose the patient to over-infusion or under-infusion.";
98
99
  attribute :>> normalUseRelevant = true;
99
100
  attribute :>> faultConditionRelevant = true;
100
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), prescription and bolus parameters; CITE-004: GIP Hazard Analysis v1.0";
101
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), prescription and bolus parameters; CITE-004: GIP Hazard Analysis v1.0"; }
101
102
  }
102
103
  part analgesiaBenefit : Benefit {
103
- attribute :>> id = "BEN-001";
104
+ @MemoIdentity { :>> providedId = "BEN-001"; }
104
105
  attribute :>> name = "PatientTitratedAnalgesiaBenefit";
105
106
  attribute :>> beneficialOutcome = "Timely pain relief using patient-titrated opioid delivery within prescribed limits.";
106
107
  attribute :>> beneficiary = "patient";
107
108
  attribute :>> clinicalSignificance = "Improved pain management with lower total opioid consumption than fixed-schedule dosing.";
108
109
  attribute :>> supportingEvidence = "IU-001 intended-use clinical benefit and applicable clinical evidence.";
109
- attribute :>> sourceReference = "IU-001";
110
+ @MemoIdentity { :>> sourceReference = "IU-001"; }
110
111
  }
111
112
 
112
113
  // ═══ HZ-001: Opioid over-infusion ═══════════════════════════════
@@ -114,66 +115,66 @@ package memo_examples_gpca_pump_gpca_risk {
114
115
  // operational-hazard rows HID 1.1-1.3. Causal tree per GIIP
115
116
  // pattern: categorized causes converge on the hazard.
116
117
  part overdoseHazard : Hazard {
117
- attribute :>> id = "HZ-001";
118
+ @MemoIdentity { :>> providedId = "HZ-001"; }
118
119
  attribute :>> name = "OpioidOverInfusion";
119
120
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
120
121
  attribute :>> severity = SeverityKind::catastrophic;
121
122
  attribute :>> foreseeable = true;
122
123
  attribute :>> description = "Drug delivered at a rate above the prescription (overinfusion).";
123
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 Operational Hazards HID 1.1-1.3 (overinfusion); CITE-005: Open PCA ISO 14971 risk analysis, §4 (primary hazard: opioid over-infusion)";
124
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 Operational Hazards HID 1.1-1.3 (overinfusion); CITE-005: Open PCA ISO 14971 risk analysis, §4 (primary hazard: opioid over-infusion)"; }
124
125
  }
125
126
  part causeFlowRateTooHigh : HazardCause {
126
- attribute :>> id = "CAUSE-001";
127
+ @MemoIdentity { :>> providedId = "CAUSE-001"; }
127
128
  attribute :>> name = "ProgrammedFlowRateTooHigh";
128
129
  attribute :>> causeSource = CauseSourceKind::operational;
129
130
  attribute :>> contributingFactors = "Programmed value not checked against drug-database hard limits";
130
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.1 (programmed flow rate too high; mitigated by drug library)";
131
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.1 (programmed flow rate too high; mitigated by drug library)"; }
131
132
  }
132
133
  part causeFrequentBolus : HazardCause {
133
- attribute :>> id = "CAUSE-002";
134
+ @MemoIdentity { :>> providedId = "CAUSE-002"; }
134
135
  attribute :>> name = "BolusRequestsTooFrequent";
135
136
  attribute :>> causeSource = CauseSourceKind::usageCause;
136
137
  attribute :>> contributingFactors = "Patient bolus button pressed too often, or pressed by someone other than the patient (bolus by proxy)";
137
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.2 (dose limit exceeded due to too many bolus requests); CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (bolus button pressed too frequent) and §5 (TooSoonPress, ThirdPartyPress error types)";
138
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.2 (dose limit exceeded due to too many bolus requests); CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (bolus button pressed too frequent) and §5 (TooSoonPress, ThirdPartyPress error types)"; }
138
139
  }
139
140
  part causeBolusVolumeTooHigh : HazardCause {
140
- attribute :>> id = "CAUSE-003";
141
+ @MemoIdentity { :>> providedId = "CAUSE-003"; }
141
142
  attribute :>> name = "ProgrammedBolusVolumeTooHigh";
142
143
  attribute :>> causeSource = CauseSourceKind::operational;
143
144
  attribute :>> contributingFactors = "Bolus volume or drug concentration programmed above safe limits";
144
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.3 ((programmed) bolus volume/concentration too high; mitigated by drug library)";
145
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.3 ((programmed) bolus volume/concentration too high; mitigated by drug library)"; }
145
146
  }
146
147
  part causePumpCalibration : HazardCause {
147
- attribute :>> id = "CAUSE-004";
148
+ @MemoIdentity { :>> providedId = "CAUSE-004"; }
148
149
  attribute :>> name = "IncorrectPumpCalibrationOrMotorRunaway";
149
150
  attribute :>> causeSource = CauseSourceKind::hardware;
150
151
  attribute :>> contributingFactors = "Uncalibrated pumping mechanism or motor-driver fault drives flow above the commanded rate";
151
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (incorrect pump calibration) and §5 (calibration_over error source on drug_outlet); CITE-004: §2.4.1 HID 1.21 (increased pump speed)";
152
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (incorrect pump calibration) and §5 (calibration_over error source on drug_outlet); CITE-004: §2.4.1 HID 1.21 (increased pump speed)"; }
152
153
  }
153
154
  part seqFrequentBolus : SequenceOfEvents {
154
- attribute :>> id = "SEQ-001";
155
+ @MemoIdentity { :>> providedId = "SEQ-001"; }
155
156
  attribute :>> name = "RepeatedBolusOverDeliverySequence";
156
157
  attribute :>> initiatingEvent = "Repeated patient bolus presses over time propagate through button-press detection and control logic to increased motor flow commands";
157
158
  attribute :>> contributingFactors = "Lockout or max-dose filtering fails or is misconfigured";
158
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 (bottom-up causality walk of Fig. 3, right side); CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (REQ 25/26 lockout and max-dose filtering)";
159
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 (bottom-up causality walk of Fig. 3, right side); CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (REQ 25/26 lockout and max-dose filtering)"; }
159
160
  }
160
161
  part hsExcessInfusion : HazardousSituation {
161
- attribute :>> id = "HS-001";
162
+ @MemoIdentity { :>> providedId = "HS-001"; }
162
163
  attribute :>> name = "PatientExposedToOpioidOverDelivery";
163
164
  attribute :>> exposedPersons = "patient";
164
165
  attribute :>> operatingCondition = "ACTIVE therapy; opioid infused while the patient's respiration is deteriorating";
165
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (infusing opioid when patient's respiration is deteriorating) and §6 (OverInfusion hazardous-situation instance)";
166
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (infusing opioid when patient's respiration is deteriorating) and §6 (OverInfusion hazardous-situation instance)"; }
166
167
  }
167
168
  part harmRespiratoryDepression : Harm {
168
- attribute :>> id = "HM-001";
169
+ @MemoIdentity { :>> providedId = "HM-001"; }
169
170
  attribute :>> name = "RespiratoryDepression";
170
171
  attribute :>> clinicalImpact = "respiratory depression progressing to cardiac arrest";
171
172
  attribute :>> reversibility = "potentially irreversible";
172
173
  attribute :>> severity = SeverityKind::catastrophic;
173
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (harm: cardiac arrest) and §5 (H1 respiratory depression, severity catastrophic)";
174
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (harm: cardiac arrest) and §5 (H1 respiratory depression, severity catastrophic)"; }
174
175
  }
175
176
  part riskBefore : Risk {
176
- attribute :>> id = "RISK-B-001";
177
+ @MemoIdentity { :>> providedId = "RISK-B-001"; }
177
178
  attribute :>> name = "OverInfusionInitialRisk";
178
179
  attribute :>> driverKind = "risk";
179
180
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
@@ -183,18 +184,18 @@ package memo_examples_gpca_pump_gpca_risk {
183
184
  attribute :>> estimationBasis = "mode and bolus hazard analysis";
184
185
  attribute :>> analysisContext = "patient bolus and active mode control";
185
186
  attribute :>> foreseeableMisuseIncluded = true;
186
- attribute :>> sourceReference = "illustrative — no source";
187
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
187
188
  }
188
189
  part lockoutControl : RiskControlMeasure {
189
- attribute :>> id = "RC-001";
190
+ @MemoIdentity { :>> providedId = "RC-001"; }
190
191
  attribute :>> name = "LockoutAndMaxDoseEnforcement";
191
192
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
192
193
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
193
194
  attribute :>> verificationStatus = "planned";
194
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 (REQ 25/26 — model REQ-CS-25/26: ignore bolus requests during lockout or past max doses per hour); CITE-002: CriSys AADL v2.0, GPCA_SW AGREE lockout guarantee (model GP-002)";
195
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 (REQ 25/26 — model REQ-CS-25/26: ignore bolus requests during lockout or past max doses per hour); CITE-002: CriSys AADL v2.0, GPCA_SW AGREE lockout guarantee (model GP-002)"; }
195
196
  }
196
197
  part riskAfter : ResidualRisk {
197
- attribute :>> id = "RISK-A-001";
198
+ @MemoIdentity { :>> providedId = "RISK-A-001"; }
198
199
  attribute :>> name = "OverInfusionResidualRisk";
199
200
  attribute :>> driverKind = "risk";
200
201
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
@@ -202,78 +203,78 @@ package memo_examples_gpca_pump_gpca_risk {
202
203
  attribute :>> riskLevel = CriticalityKind::medium;
203
204
  attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
204
205
  attribute :>> benefitRiskRequired = false;
205
- attribute :>> sourceReference = "illustrative — no source";
206
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
206
207
  }
207
208
 
208
209
  // ═══ HZ-002: Under-infusion / therapy interruption ══════════════
209
210
  part underdoseHazard : Hazard {
210
- attribute :>> id = "HZ-002";
211
+ @MemoIdentity { :>> providedId = "HZ-002"; }
211
212
  attribute :>> name = "UnderInfusion";
212
213
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
213
214
  attribute :>> severity = SeverityKind::serious;
214
215
  attribute :>> foreseeable = true;
215
216
  attribute :>> description = "Delivered dose falls below prescription (underinfusion).";
216
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 Operational Hazards HID 1.5-1.10 (underinfusion); CITE-005: Open PCA ISO 14971 risk analysis, §5 (under-infusion captured as functional-safety hazard)";
217
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 Operational Hazards HID 1.5-1.10 (underinfusion); CITE-005: Open PCA ISO 14971 risk analysis, §5 (under-infusion captured as functional-safety hazard)"; }
217
218
  }
218
219
  part causeOcclusion : HazardCause {
219
- attribute :>> id = "CAUSE-005";
220
+ @MemoIdentity { :>> providedId = "CAUSE-005"; }
220
221
  attribute :>> name = "LineOcclusion";
221
222
  attribute :>> causeSource = CauseSourceKind::operational;
222
223
  attribute :>> contributingFactors = "Supply-side or patient-side occlusion; kinked or clamped administration set";
223
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.7 (occlusion, supply side and patient side; mitigated by flow sensor)";
224
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.7 (occlusion, supply side and patient side; mitigated by flow sensor)"; }
224
225
  }
225
226
  part causeReservoirEmpty : HazardCause {
226
- attribute :>> id = "CAUSE-006";
227
+ @MemoIdentity { :>> providedId = "CAUSE-006"; }
227
228
  attribute :>> name = "ReservoirEmptyOrLow";
228
229
  attribute :>> causeSource = CauseSourceKind::operational;
229
230
  attribute :>> contributingFactors = "Reservoir exhausted during therapy without timely replacement";
230
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.8/1.9 (reservoir empty, reservoir low; mitigated by flow sensor and drug library)";
231
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.8/1.9 (reservoir empty, reservoir low; mitigated by flow sensor and drug library)"; }
231
232
  }
232
233
  part causeAirInLine : HazardCause {
233
- attribute :>> id = "CAUSE-007";
234
+ @MemoIdentity { :>> providedId = "CAUSE-007"; }
234
235
  attribute :>> name = "AirInLine";
235
236
  attribute :>> causeSource = CauseSourceKind::operational;
236
237
  attribute :>> contributingFactors = "Air enters the administration set and displaces drug delivery";
237
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.6 (underinfusion: air in line) and HID 1.27 (air bubble introduced in blood stream; mitigated by flow sensor)";
238
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.6 (underinfusion: air in line) and HID 1.27 (air bubble introduced in blood stream; mitigated by flow sensor)"; }
238
239
  }
239
240
  part causePumpMechanismFails : HazardCause {
240
- attribute :>> id = "CAUSE-008";
241
+ @MemoIdentity { :>> providedId = "CAUSE-008"; }
241
242
  attribute :>> name = "PumpMotorFailsToStroke";
242
243
  attribute :>> causeSource = CauseSourceKind::mechanical;
243
244
  attribute :>> contributingFactors = "Motor failure or mechanism unable to stroke stops infusion";
244
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.6 Mechanical Hazards HID 6.6 (pump stops infusion: pump motor fails, pump unable to stroke; mitigated by flow sensor)";
245
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.6 Mechanical Hazards HID 6.6 (pump stops infusion: pump motor fails, pump unable to stroke; mitigated by flow sensor)"; }
245
246
  }
246
247
  part causeFlowRateTooLow : HazardCause {
247
- attribute :>> id = "CAUSE-009";
248
+ @MemoIdentity { :>> providedId = "CAUSE-009"; }
248
249
  attribute :>> name = "ProgrammedFlowRateTooLow";
249
250
  attribute :>> causeSource = CauseSourceKind::operational;
250
251
  attribute :>> contributingFactors = "Programmed value below therapeutic range and not caught by drug-database limits";
251
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.5 (programmed flow rate too low; mitigated by drug library)";
252
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.5 (programmed flow rate too low; mitigated by drug library)"; }
252
253
  }
253
254
  part seqOcclusion : SequenceOfEvents {
254
- attribute :>> id = "SEQ-002";
255
+ @MemoIdentity { :>> providedId = "SEQ-002"; }
255
256
  attribute :>> name = "UndetectedOcclusionSequence";
256
257
  attribute :>> initiatingEvent = "Downstream line kinked or clamped during active therapy";
257
258
  attribute :>> contributingFactors = "Occlusion not detected or alarm not annunciated; post-occlusion bolus released when the occlusion clears";
258
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (occlusion); CITE-008: GPCA Safety Requirements (2009), Occlusion alarm (stop and alarm within max delay; bounded post-occlusion bolus volume)";
259
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (occlusion); CITE-008: GPCA Safety Requirements (2009), Occlusion alarm (stop and alarm within max delay; bounded post-occlusion bolus volume)"; }
259
260
  }
260
261
  part hsInterruptedTherapy : HazardousSituation {
261
- attribute :>> id = "HS-002";
262
+ @MemoIdentity { :>> providedId = "HS-002"; }
262
263
  attribute :>> name = "PatientReceivingLessThanPrescribedDose";
263
264
  attribute :>> exposedPersons = "patient";
264
265
  attribute :>> operatingCondition = "ACTIVE therapy with blocked, exhausted, or failed fluid path";
265
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.5-1.10 (underinfusion)";
266
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.5-1.10 (underinfusion)"; }
266
267
  }
267
268
  part harmUntreatedPain : Harm {
268
- attribute :>> id = "HM-002";
269
+ @MemoIdentity { :>> providedId = "HM-002"; }
269
270
  attribute :>> name = "UntreatedPainAndClinicalDeterioration";
270
271
  attribute :>> clinicalImpact = "uncontrolled pain, delayed recovery, post-occlusion bolus injury";
271
272
  attribute :>> reversibility = "reversible with intervention";
272
273
  attribute :>> severity = SeverityKind::serious;
273
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 (underinfusion rows); CITE-008: GPCA Safety Requirements (2009), Flow rate accuracy (underinfusion alarm)";
274
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 (underinfusion rows); CITE-008: GPCA Safety Requirements (2009), Flow rate accuracy (underinfusion alarm)"; }
274
275
  }
275
276
  part riskBeforeUnderdose : Risk {
276
- attribute :>> id = "RISK-B-002";
277
+ @MemoIdentity { :>> providedId = "RISK-B-002"; }
277
278
  attribute :>> name = "UnderInfusionInitialRisk";
278
279
  attribute :>> driverKind = "risk";
279
280
  attribute :>> probabilityEstimate = ProbabilityKind::probable;
@@ -283,26 +284,26 @@ package memo_examples_gpca_pump_gpca_risk {
283
284
  attribute :>> estimationBasis = "occlusion and reservoir exhaustion frequency in ward use";
284
285
  attribute :>> analysisContext = "fluid path monitoring during active therapy";
285
286
  attribute :>> foreseeableMisuseIncluded = true;
286
- attribute :>> sourceReference = "illustrative — no source";
287
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
287
288
  }
288
289
  part occlusionAlarmControl : RiskControlMeasure {
289
- attribute :>> id = "RC-003";
290
+ @MemoIdentity { :>> providedId = "RC-003"; }
290
291
  attribute :>> name = "OcclusionDetectionAndKvoPause";
291
292
  attribute :>> controlKind = RiskControlKind::alarm;
292
293
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
293
294
  attribute :>> verificationStatus = "planned";
294
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (occlusion); CITE-008: GPCA Safety Requirements (2009), Occlusion alarm; CITE-002: CriSys AADL v2.0, AGREE occlusion => flow <= KVO (model GP-010; model extension REQ-X-04)";
295
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (occlusion); CITE-008: GPCA Safety Requirements (2009), Occlusion alarm; CITE-002: CriSys AADL v2.0, AGREE occlusion => flow <= KVO (model GP-010; model extension REQ-X-04)"; }
295
296
  }
296
297
  part reservoirMonitorControl : RiskControlMeasure {
297
- attribute :>> id = "RC-004";
298
+ @MemoIdentity { :>> providedId = "RC-004"; }
298
299
  attribute :>> name = "ReservoirEmptyDetectionAndAlarm";
299
300
  attribute :>> controlKind = RiskControlKind::monitoring;
300
301
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
301
302
  attribute :>> verificationStatus = "planned";
302
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 23 — model REQ-CS-23: empty-reservoir pause) and §4.3 REQ 59 (Empty Reservoir row); CITE-002: CriSys AADL v2.0, AGREE empty reservoir => no flow (model GP-007); CITE-004: §2.2 Alarms (empty reservoir) and Alerts (low reservoir)";
303
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 23 — model REQ-CS-23: empty-reservoir pause) and §4.3 REQ 59 (Empty Reservoir row); CITE-002: CriSys AADL v2.0, AGREE empty reservoir => no flow (model GP-007); CITE-004: §2.2 Alarms (empty reservoir) and Alerts (low reservoir)"; }
303
304
  }
304
305
  part riskAfterUnderdose : ResidualRisk {
305
- attribute :>> id = "RISK-A-002";
306
+ @MemoIdentity { :>> providedId = "RISK-A-002"; }
306
307
  attribute :>> name = "UnderInfusionResidualRisk";
307
308
  attribute :>> driverKind = "risk";
308
309
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
@@ -310,65 +311,65 @@ package memo_examples_gpca_pump_gpca_risk {
310
311
  attribute :>> riskLevel = CriticalityKind::medium;
311
312
  attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
312
313
  attribute :>> benefitRiskRequired = false;
313
- attribute :>> sourceReference = "illustrative — no source";
314
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
314
315
  }
315
316
 
316
317
  // ═══ HZ-003: Air embolism ═══════════════════════════════════════
317
318
  // Primary hazard 2 of the Open PCA ISO 14971 analysis.
318
319
  part airEmbolismHazard : Hazard {
319
- attribute :>> id = "HZ-003";
320
+ @MemoIdentity { :>> providedId = "HZ-003"; }
320
321
  attribute :>> name = "AirEmbolism";
321
322
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
322
323
  attribute :>> severity = SeverityKind::catastrophic;
323
324
  attribute :>> foreseeable = true;
324
325
  attribute :>> description = "Air infused into the patient line above the clinically tolerable volume.";
325
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (primary hazard: air embolism); CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.27 (air bubble introduced in blood stream); CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21)";
326
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (primary hazard: air embolism); CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.27 (air bubble introduced in blood stream); CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21)"; }
326
327
  }
327
328
  part causeImproperPriming : HazardCause {
328
- attribute :>> id = "CAUSE-010";
329
+ @MemoIdentity { :>> providedId = "CAUSE-010"; }
329
330
  attribute :>> name = "InappropriatePriming";
330
331
  attribute :>> causeSource = CauseSourceKind::usageCause;
331
332
  attribute :>> contributingFactors = "Infusion continued after set primed incompletely";
332
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (continue infusion after inappropriate priming); CITE-004: §2.4.1 HID 1.24 (failure to prime: air in line)";
333
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (continue infusion after inappropriate priming); CITE-004: §2.4.1 HID 1.24 (failure to prime: air in line)"; }
333
334
  }
334
335
  part causeTubingLeak : HazardCause {
335
- attribute :>> id = "CAUSE-011";
336
+ @MemoIdentity { :>> providedId = "CAUSE-011"; }
336
337
  attribute :>> name = "TubingLeakageAdmitsAir";
337
338
  attribute :>> causeSource = CauseSourceKind::mechanical;
338
339
  attribute :>> contributingFactors = "Infusion continued under tubing leakage";
339
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (continue infusion under tubing leakage)";
340
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (continue infusion under tubing leakage)"; }
340
341
  }
341
342
  part causeAirSensorSilent : HazardCause {
342
- attribute :>> id = "CAUSE-012";
343
+ @MemoIdentity { :>> providedId = "CAUSE-012"; }
343
344
  attribute :>> name = "AirSensorFailureSuppressesAlarm";
344
345
  attribute :>> causeSource = CauseSourceKind::hardware;
345
346
  attribute :>> contributingFactors = "Air sensor failed, disabled, or threshold miscalibrated so air passes undetected";
346
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.4 Hardware Hazards HID 4.13 (failure to alarm: sensor failure)";
347
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.4 Hardware Hazards HID 4.13 (failure to alarm: sensor failure)"; }
347
348
  }
348
349
  part seqAirInLine : SequenceOfEvents {
349
- attribute :>> id = "SEQ-003";
350
+ @MemoIdentity { :>> providedId = "SEQ-003"; }
350
351
  attribute :>> name = "AirEntersLineSequence";
351
352
  attribute :>> initiatingEvent = "Infusion continues after inappropriate priming, with an empty reservoir, or under tubing leakage";
352
353
  attribute :>> contributingFactors = "Air-in-line detection failed or thresholds miscalibrated";
353
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (initiating causes for air embolism); CITE-004: §2.2 Alarms (air-in-line)";
354
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (initiating causes for air embolism); CITE-004: §2.2 Alarms (air-in-line)"; }
354
355
  }
355
356
  part hsAirTowardPatient : HazardousSituation {
356
- attribute :>> id = "HS-003";
357
+ @MemoIdentity { :>> providedId = "HS-003"; }
357
358
  attribute :>> name = "AirInfusedIntoPatientBloodStream";
358
359
  attribute :>> exposedPersons = "patient";
359
360
  attribute :>> operatingCondition = "ACTIVE therapy with air in the administration set";
360
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (infusing air bubbles into the patient's blood stream)";
361
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (infusing air bubbles into the patient's blood stream)"; }
361
362
  }
362
363
  part harmAirEmbolism : Harm {
363
- attribute :>> id = "HM-003";
364
+ @MemoIdentity { :>> providedId = "HM-003"; }
364
365
  attribute :>> name = "TissueOrOrganDamage";
365
366
  attribute :>> clinicalImpact = "tissue or organ damage from vascular air embolism, potentially fatal";
366
367
  attribute :>> reversibility = "potentially irreversible";
367
368
  attribute :>> severity = SeverityKind::catastrophic;
368
- attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (harm: tissue or organ damage)";
369
+ @MemoIdentity { :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (harm: tissue or organ damage)"; }
369
370
  }
370
371
  part riskBeforeAir : Risk {
371
- attribute :>> id = "RISK-B-003";
372
+ @MemoIdentity { :>> providedId = "RISK-B-003"; }
372
373
  attribute :>> name = "AirEmbolismInitialRisk";
373
374
  attribute :>> driverKind = "risk";
374
375
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
@@ -378,18 +379,18 @@ package memo_examples_gpca_pump_gpca_risk {
378
379
  attribute :>> estimationBasis = "reservoir exhaustion and priming error frequency";
379
380
  attribute :>> analysisContext = "fluid path integrity during active therapy";
380
381
  attribute :>> foreseeableMisuseIncluded = true;
381
- attribute :>> sourceReference = "illustrative — no source";
382
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
382
383
  }
383
384
  part airDetectionControl : RiskControlMeasure {
384
- attribute :>> id = "RC-002";
385
+ @MemoIdentity { :>> providedId = "RC-002"; }
385
386
  attribute :>> name = "AirInLineDetectionAndKvoPause";
386
387
  attribute :>> controlKind = RiskControlKind::protectiveMeasure;
387
388
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
388
389
  attribute :>> verificationStatus = "planned";
389
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21 — model REQ-CS-21: air-embolism pause on single or cumulative bubble volume); CITE-002: CriSys AADL v2.0, AGREE air-in-line => flow <= KVO (model GP-009); CITE-008: GPCA Safety Requirements (2009), Air-in-line alarm";
390
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21 — model REQ-CS-21: air-embolism pause on single or cumulative bubble volume); CITE-002: CriSys AADL v2.0, AGREE air-in-line => flow <= KVO (model GP-009); CITE-008: GPCA Safety Requirements (2009), Air-in-line alarm"; }
390
391
  }
391
392
  part riskAfterAir : ResidualRisk {
392
- attribute :>> id = "RISK-A-003";
393
+ @MemoIdentity { :>> providedId = "RISK-A-003"; }
393
394
  attribute :>> name = "AirEmbolismResidualRisk";
394
395
  attribute :>> driverKind = "risk";
395
396
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
@@ -397,70 +398,70 @@ package memo_examples_gpca_pump_gpca_risk {
397
398
  attribute :>> riskLevel = CriticalityKind::medium;
398
399
  attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
399
400
  attribute :>> benefitRiskRequired = false;
400
- attribute :>> sourceReference = "illustrative — no source";
401
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
401
402
  }
402
403
 
403
404
  // ═══ HZ-004: Incorrect therapy programmed (use error) ═══════════
404
405
  part wrongDoseHazard : Hazard {
405
- attribute :>> id = "HZ-004";
406
+ @MemoIdentity { :>> providedId = "HZ-004"; }
406
407
  attribute :>> name = "IncorrectDrugOrDoseProgrammed";
407
408
  attribute :>> hazardType = HazardTypeKind::useError;
408
409
  attribute :>> severity = SeverityKind::catastrophic;
409
410
  attribute :>> foreseeable = true;
410
411
  attribute :>> description = "Prescription programmed or reservoir loaded so delivered therapy differs from the intended prescription.";
411
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards and §2.4.1 HID 1.25 (prescription/dosage values out of default range); CITE-007: GPCA Hazard Analysis doc (2009), Use Hazards HID 8.6/8.10/8.14";
412
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards and §2.4.1 HID 1.25 (prescription/dosage values out of default range); CITE-007: GPCA Hazard Analysis doc (2009), Use Hazards HID 8.6/8.10/8.14"; }
412
413
  }
413
414
  part causeWrongPrescriptionEntered : HazardCause {
414
- attribute :>> id = "CAUSE-013";
415
+ @MemoIdentity { :>> providedId = "CAUSE-013"; }
415
416
  attribute :>> name = "IncorrectPrescriptionEntered";
416
417
  attribute :>> causeSource = CauseSourceKind::usageCause;
417
418
  attribute :>> contributingFactors = "Attentional failure during prescription entry";
418
- attribute :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.10 (attentional failure: incorrect prescription entered)";
419
+ @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.10 (attentional failure: incorrect prescription entered)"; }
419
420
  }
420
421
  part causeWrongDoseUnits : HazardCause {
421
- attribute :>> id = "CAUSE-014";
422
+ @MemoIdentity { :>> providedId = "CAUSE-014"; }
422
423
  attribute :>> name = "IncorrectDoseUnits";
423
424
  attribute :>> causeSource = CauseSourceKind::usageCause;
424
425
  attribute :>> contributingFactors = "Incorrect units used for dose parameters (e.g., ml/hr instead of mcg/hr)";
425
- attribute :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.14 (incorrect dose mode; mitigated by barcode scanner)";
426
+ @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.14 (incorrect dose mode; mitigated by barcode scanner)"; }
426
427
  }
427
428
  part causeWrongDrugLoaded : HazardCause {
428
- attribute :>> id = "CAUSE-015";
429
+ @MemoIdentity { :>> providedId = "CAUSE-015"; }
429
430
  attribute :>> name = "WrongPrescriptionOrDrugConcentration";
430
431
  attribute :>> causeSource = CauseSourceKind::usageCause;
431
432
  attribute :>> contributingFactors = "Incorrect prescription given to patient; incorrect drug concentration specified; look-alike packaging";
432
- attribute :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.6 (incorrect prescription; incorrect drug library) and §2.4.1 HID 1.4 (incorrect drug concentration specified; mitigated by barcode scanner)";
433
+ @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.6 (incorrect prescription; incorrect drug library) and §2.4.1 HID 1.4 (incorrect drug concentration specified; mitigated by barcode scanner)"; }
433
434
  }
434
435
  part causeSettingsChangedInadvertently : HazardCause {
435
- attribute :>> id = "CAUSE-016";
436
+ @MemoIdentity { :>> providedId = "CAUSE-016"; }
436
437
  attribute :>> name = "SettingsChangedInadvertently";
437
438
  attribute :>> causeSource = CauseSourceKind::usageCause;
438
439
  attribute :>> contributingFactors = "User or patient changes infusion settings inadvertently during therapy";
439
- attribute :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.7/8.8 (user/patient change infusion settings inadvertently; mitigated by drug library)";
440
+ @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.7/8.8 (user/patient change infusion settings inadvertently; mitigated by drug library)"; }
440
441
  }
441
442
  part causePumpRevertsToDefaults : HazardCause {
442
- attribute :>> id = "CAUSE-017";
443
+ @MemoIdentity { :>> providedId = "CAUSE-017"; }
443
444
  attribute :>> name = "PumpRevertsToDefaultDoseValues";
444
445
  attribute :>> causeSource = CauseSourceKind::software;
445
446
  attribute :>> contributingFactors = "Programmed dose set incorrectly; inappropriate reset to default values";
446
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.5 Software Hazards HID 5.11 (pump reverts to default dose values; mitigated by drug library)";
447
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.5 Software Hazards HID 5.11 (pump reverts to default dose values; mitigated by drug library)"; }
447
448
  }
448
449
  part seqMisprogram : SequenceOfEvents {
449
- attribute :>> id = "SEQ-004";
450
+ @MemoIdentity { :>> providedId = "SEQ-004"; }
450
451
  attribute :>> name = "MisprogrammingSequence";
451
452
  attribute :>> initiatingEvent = "Prescription entered with wrong value, units, or drug and accepted for delivery";
452
453
  attribute :>> contributingFactors = "Safe-value check against the pharmacy database skipped or unavailable; confirmation bypassed";
453
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.25 (prescription/dosage values fall out of default value range; mitigated by drug library and barcode scanner)";
454
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.25 (prescription/dosage values fall out of default value range; mitigated by drug library and barcode scanner)"; }
454
455
  }
455
456
  part hsWrongTherapy : HazardousSituation {
456
- attribute :>> id = "HS-004";
457
+ @MemoIdentity { :>> providedId = "HS-004"; }
457
458
  attribute :>> name = "PatientReceivingUnintendedTherapy";
458
459
  attribute :>> exposedPersons = "patient";
459
460
  attribute :>> operatingCondition = "therapy started from an unverified prescription";
460
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.25 and §2.4.8 Use Hazards (incorrect therapy rows)";
461
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.25 and §2.4.8 Use Hazards (incorrect therapy rows)"; }
461
462
  }
462
463
  part riskBeforeWrongDose : Risk {
463
- attribute :>> id = "RISK-B-004";
464
+ @MemoIdentity { :>> providedId = "RISK-B-004"; }
464
465
  attribute :>> name = "MisprogrammingInitialRisk";
465
466
  attribute :>> driverKind = "risk";
466
467
  attribute :>> probabilityEstimate = ProbabilityKind::probable;
@@ -470,18 +471,18 @@ package memo_examples_gpca_pump_gpca_risk {
470
471
  attribute :>> estimationBasis = "published PCA misprogramming incident rates";
471
472
  attribute :>> analysisContext = "prescription entry and reservoir loading tasks";
472
473
  attribute :>> foreseeableMisuseIncluded = true;
473
- attribute :>> sourceReference = "illustrative — no source";
474
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
474
475
  }
475
476
  part drugLibraryControl : RiskControlMeasure {
476
- attribute :>> id = "RC-005";
477
+ @MemoIdentity { :>> providedId = "RC-005"; }
477
478
  attribute :>> name = "DrugDatabaseLimitsAndConfirmation";
478
479
  attribute :>> controlKind = RiskControlKind::plausibilityCheck;
479
480
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
480
481
  attribute :>> verificationStatus = "planned";
481
- attribute :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), Dose Error Reduction (drug library hard/soft limits, re-entry and confirmation prompts) and User Interface (two-step setting changes, confirmation); CITE-001: CriSys GPCA System Requirements (2013), Ch.3 Pharmacy DB interface (safe-value lookup)";
482
+ @MemoIdentity { :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), Dose Error Reduction (drug library hard/soft limits, re-entry and confirmation prompts) and User Interface (two-step setting changes, confirmation); CITE-001: CriSys GPCA System Requirements (2013), Ch.3 Pharmacy DB interface (safe-value lookup)"; }
482
483
  }
483
484
  part riskAfterWrongDose : ResidualRisk {
484
- attribute :>> id = "RISK-A-004";
485
+ @MemoIdentity { :>> providedId = "RISK-A-004"; }
485
486
  attribute :>> name = "MisprogrammingResidualRisk";
486
487
  attribute :>> driverKind = "risk";
487
488
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
@@ -489,49 +490,49 @@ package memo_examples_gpca_pump_gpca_risk {
489
490
  attribute :>> riskLevel = CriticalityKind::medium;
490
491
  attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
491
492
  attribute :>> benefitRiskRequired = true;
492
- attribute :>> sourceReference = "illustrative — no source";
493
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
493
494
  }
494
495
 
495
496
  // ═══ HZ-005: Free flow ══════════════════════════════════════════
496
497
  part freeFlowHazard : Hazard {
497
- attribute :>> id = "HZ-005";
498
+ @MemoIdentity { :>> providedId = "HZ-005"; }
498
499
  attribute :>> name = "GravityFreeFlow";
499
500
  attribute :>> hazardType = HazardTypeKind::mechanicalFailure;
500
501
  attribute :>> severity = SeverityKind::catastrophic;
501
502
  attribute :>> foreseeable = true;
502
503
  attribute :>> description = "Unregulated gravity flow of drug when the set is disengaged from the pumping mechanism.";
503
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (improper flow: free flow of drug; mitigated by flow sensor)";
504
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (improper flow: free flow of drug; mitigated by flow sensor)"; }
504
505
  }
505
506
  part causeSetDisengaged : HazardCause {
506
- attribute :>> id = "CAUSE-018";
507
+ @MemoIdentity { :>> providedId = "CAUSE-018"; }
507
508
  attribute :>> name = "AdministrationSetDisengaged";
508
509
  attribute :>> causeSource = CauseSourceKind::mechanical;
509
510
  attribute :>> contributingFactors = "Set removed or loaded improperly with reservoir above patient level";
510
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (free flow of drug) and §2.2 Alerts (infusion set not loaded properly)";
511
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (free flow of drug) and §2.2 Alerts (infusion set not loaded properly)"; }
511
512
  }
512
513
  part causeDoorOpenedDuringInfusion : HazardCause {
513
- attribute :>> id = "CAUSE-019";
514
+ @MemoIdentity { :>> providedId = "CAUSE-019"; }
514
515
  attribute :>> name = "DoorOpenedDuringInfusion";
515
516
  attribute :>> causeSource = CauseSourceKind::environmental;
516
517
  attribute :>> contributingFactors = "Panel/door opened during infusion, or infusion started when door open";
517
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.2 Environmental Hazards HID 2.9 (panel/door opened during infusion; alert and log)";
518
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.2 Environmental Hazards HID 2.9 (panel/door opened during infusion; alert and log)"; }
518
519
  }
519
520
  part seqFreeFlow : SequenceOfEvents {
520
- attribute :>> id = "SEQ-005";
521
+ @MemoIdentity { :>> providedId = "SEQ-005"; }
521
522
  attribute :>> name = "SetDisengagedSequence";
522
523
  attribute :>> initiatingEvent = "Door opened / set removed with reservoir above patient level";
523
524
  attribute :>> contributingFactors = "Anti-free-flow protection absent, defeated, or failed";
524
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 and §2.4.2 HID 2.9";
525
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 and §2.4.2 HID 2.9"; }
525
526
  }
526
527
  part hsFreeFlow : HazardousSituation {
527
- attribute :>> id = "HS-005";
528
+ @MemoIdentity { :>> providedId = "HS-005"; }
528
529
  attribute :>> name = "PatientConnectedToUnregulatedFluidPath";
529
530
  attribute :>> exposedPersons = "patient";
530
531
  attribute :>> operatingCondition = "set change or door open with line still connected";
531
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (free flow of drug)";
532
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (free flow of drug)"; }
532
533
  }
533
534
  part riskBeforeFreeFlow : Risk {
534
- attribute :>> id = "RISK-B-005";
535
+ @MemoIdentity { :>> providedId = "RISK-B-005"; }
535
536
  attribute :>> name = "FreeFlowInitialRisk";
536
537
  attribute :>> driverKind = "risk";
537
538
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
@@ -541,26 +542,26 @@ package memo_examples_gpca_pump_gpca_risk {
541
542
  attribute :>> estimationBasis = "set-change frequency and historic free-flow incidents";
542
543
  attribute :>> analysisContext = "reservoir and set handling during therapy";
543
544
  attribute :>> foreseeableMisuseIncluded = true;
544
- attribute :>> sourceReference = "illustrative — no source";
545
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
545
546
  }
546
547
  part freeFlowValveControl : RiskControlMeasure {
547
- attribute :>> id = "RC-006";
548
+ @MemoIdentity { :>> providedId = "RC-006"; }
548
549
  attribute :>> name = "AdministrationSetFreeFlowPrevention";
549
550
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
550
551
  attribute :>> implementationKind = RiskControlImplementationKind::hardwareDesign;
551
552
  attribute :>> verificationStatus = "planned";
552
- attribute :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), User Interface (the administration set should be designed to prevent compromising patient safety or causing an unacceptable flow error); CITE-004: §2.4.1 HID 1.13 (free-flow detection via flow sensor, safety requirement 1.2.2)";
553
+ @MemoIdentity { :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), User Interface (the administration set should be designed to prevent compromising patient safety or causing an unacceptable flow error); CITE-004: §2.4.1 HID 1.13 (free-flow detection via flow sensor, safety requirement 1.2.2)"; }
553
554
  }
554
555
  part doorInterlockControl : RiskControlMeasure {
555
- attribute :>> id = "RC-009";
556
+ @MemoIdentity { :>> providedId = "RC-009"; }
556
557
  attribute :>> name = "DoorOpenDeliveryInhibit";
557
558
  attribute :>> controlKind = RiskControlKind::interlock;
558
559
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
559
560
  attribute :>> verificationStatus = "planned";
560
- attribute :>> sourceReference = "CITE-002: CriSys AADL v2.0, AGREE door open => flow <= KVO (model GP-011); CITE-004: §2.4.2 HID 2.8/2.9 (panel/door opened during infusion: alert and stop); model extension REQ-X-05";
561
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys AADL v2.0, AGREE door open => flow <= KVO (model GP-011); CITE-004: §2.4.2 HID 2.8/2.9 (panel/door opened during infusion: alert and stop); model extension REQ-X-05"; }
561
562
  }
562
563
  part riskAfterFreeFlow : ResidualRisk {
563
- attribute :>> id = "RISK-A-005";
564
+ @MemoIdentity { :>> providedId = "RISK-A-005"; }
564
565
  attribute :>> name = "FreeFlowResidualRisk";
565
566
  attribute :>> driverKind = "risk";
566
567
  attribute :>> probabilityEstimate = ProbabilityKind::improbable;
@@ -568,42 +569,42 @@ package memo_examples_gpca_pump_gpca_risk {
568
569
  attribute :>> riskLevel = CriticalityKind::medium;
569
570
  attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
570
571
  attribute :>> benefitRiskRequired = false;
571
- attribute :>> sourceReference = "illustrative — no source";
572
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
572
573
  }
573
574
 
574
575
  // ═══ HZ-006: Reverse delivery ═══════════════════════════════════
575
576
  part reverseDeliveryHazard : Hazard {
576
- attribute :>> id = "HZ-006";
577
+ @MemoIdentity { :>> providedId = "HZ-006"; }
577
578
  attribute :>> name = "ReverseDelivery";
578
579
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
579
580
  attribute :>> severity = SeverityKind::serious;
580
581
  attribute :>> foreseeable = true;
581
582
  attribute :>> description = "Drug or body fluid drawn backwards through the administration set (bleed back / reflux).";
582
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.14 (improper flow: bleed back, reflux within device); CITE-008: GPCA Safety Requirements (2009), Reverse delivery (continuous reverse delivery shall not be possible, from IEC 601-2-24); CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22)";
583
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.14 (improper flow: bleed back, reflux within device); CITE-008: GPCA Safety Requirements (2009), Reverse delivery (continuous reverse delivery shall not be possible, from IEC 601-2-24); CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22)"; }
583
584
  }
584
585
  part causeBleedBack : HazardCause {
585
- attribute :>> id = "CAUSE-020";
586
+ @MemoIdentity { :>> providedId = "CAUSE-020"; }
586
587
  attribute :>> name = "BleedBackRefluxWithinDevice";
587
588
  attribute :>> causeSource = CauseSourceKind::operational;
588
589
  attribute :>> contributingFactors = "Pressure gradient or mechanism fault reverses flow through the set";
589
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.14 (bleed back; reflux within device; mitigated by flow sensor, safety requirement 1.8)";
590
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.14 (bleed back; reflux within device; mitigated by flow sensor, safety requirement 1.8)"; }
590
591
  }
591
592
  part seqReverseDelivery : SequenceOfEvents {
592
- attribute :>> id = "SEQ-006";
593
+ @MemoIdentity { :>> providedId = "SEQ-006"; }
593
594
  attribute :>> name = "SustainedReverseFlowSequence";
594
595
  attribute :>> initiatingEvent = "Reflux within the device draws drug or blood back through the administration set";
595
596
  attribute :>> contributingFactors = "Reverse flow undetected; continuous episode or cumulative episodes exceed the permitted duration limits";
596
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22: continuous and cumulative reverse-delivery duration limits, App. A.4 Rev_Delivery constants); CITE-004: §2.4.1 HID 1.14";
597
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22: continuous and cumulative reverse-delivery duration limits, App. A.4 Rev_Delivery constants); CITE-004: §2.4.1 HID 1.14"; }
597
598
  }
598
599
  part hsReverseFlow : HazardousSituation {
599
- attribute :>> id = "HS-006";
600
+ @MemoIdentity { :>> providedId = "HS-006"; }
600
601
  attribute :>> name = "PatientLineFlowReversed";
601
602
  attribute :>> exposedPersons = "patient";
602
603
  attribute :>> operatingCondition = "THERAPY with reverse flow past the continuous or cumulative duration limits";
603
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22); CITE-008: GPCA Safety Requirements (2009), Reverse delivery";
604
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22); CITE-008: GPCA Safety Requirements (2009), Reverse delivery"; }
604
605
  }
605
606
  part riskBeforeReverse : Risk {
606
- attribute :>> id = "RISK-B-006";
607
+ @MemoIdentity { :>> providedId = "RISK-B-006"; }
607
608
  attribute :>> name = "ReverseDeliveryInitialRisk";
608
609
  attribute :>> driverKind = "risk";
609
610
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
@@ -613,26 +614,26 @@ package memo_examples_gpca_pump_gpca_risk {
613
614
  attribute :>> estimationBasis = "reflux behavior of pumping mechanisms under adverse pressure gradients";
614
615
  attribute :>> analysisContext = "fluid path integrity during active therapy";
615
616
  attribute :>> foreseeableMisuseIncluded = true;
616
- attribute :>> sourceReference = "illustrative — no source";
617
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
617
618
  }
618
619
  part reverseDeliveryPauseControl : RiskControlMeasure {
619
- attribute :>> id = "RC-010";
620
+ @MemoIdentity { :>> providedId = "RC-010"; }
620
621
  attribute :>> name = "ReverseDeliveryDetectionAndPause";
621
622
  attribute :>> controlKind = RiskControlKind::alarm;
622
623
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
623
624
  attribute :>> verificationStatus = "planned";
624
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22 — model REQ-CS-22: transition to PAUSED and REQ 59 'Reverse Delivery' actions, model NOTIF-04); CITE-004: §2.4.1 HID 1.14 (flow sensor)";
625
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22 — model REQ-CS-22: transition to PAUSED and REQ 59 'Reverse Delivery' actions, model NOTIF-04); CITE-004: §2.4.1 HID 1.14 (flow sensor)"; }
625
626
  }
626
627
  part antiRefluxDesignControl : RiskControlMeasure {
627
- attribute :>> id = "RC-011";
628
+ @MemoIdentity { :>> providedId = "RC-011"; }
628
629
  attribute :>> name = "ContinuousReverseDeliveryPrevention";
629
630
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
630
631
  attribute :>> implementationKind = RiskControlImplementationKind::hardwareDesign;
631
632
  attribute :>> verificationStatus = "planned";
632
- attribute :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), Reverse delivery (during normal use and/or single fault condition, continuous reverse delivery shall not be possible; from IEC 601-2-24)";
633
+ @MemoIdentity { :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), Reverse delivery (during normal use and/or single fault condition, continuous reverse delivery shall not be possible; from IEC 601-2-24)"; }
633
634
  }
634
635
  part riskAfterReverse : ResidualRisk {
635
- attribute :>> id = "RISK-A-006";
636
+ @MemoIdentity { :>> providedId = "RISK-A-006"; }
636
637
  attribute :>> name = "ReverseDeliveryResidualRisk";
637
638
  attribute :>> driverKind = "risk";
638
639
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
@@ -640,49 +641,49 @@ package memo_examples_gpca_pump_gpca_risk {
640
641
  attribute :>> riskLevel = CriticalityKind::medium;
641
642
  attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
642
643
  attribute :>> benefitRiskRequired = false;
643
- attribute :>> sourceReference = "illustrative — no source";
644
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
644
645
  }
645
646
 
646
647
  // ═══ HZ-007: VTBI over-infusion ═════════════════════════════════
647
648
  part vtbiOverInfusionHazard : Hazard {
648
- attribute :>> id = "HZ-007";
649
+ @MemoIdentity { :>> providedId = "HZ-007"; }
649
650
  attribute :>> name = "VtbiOverInfusion";
650
651
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
651
652
  attribute :>> severity = SeverityKind::catastrophic;
652
653
  attribute :>> foreseeable = true;
653
654
  attribute :>> description = "Total volume infused exceeds the prescribed or drug-database maximum VTBI (volume to be infused).";
654
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20: Over Infusion VTBI); CITE-008: GPCA Safety Requirements (2009), VTBI (range and increments) and Dose Error Reduction (hard/soft VTBI limits); CITE-004/CITE-007: Use Hazards HID 8.1 (overfill: incorrect fill volume specified)";
655
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20: Over Infusion VTBI); CITE-008: GPCA Safety Requirements (2009), VTBI (range and increments) and Dose Error Reduction (hard/soft VTBI limits); CITE-004/CITE-007: Use Hazards HID 8.1 (overfill: incorrect fill volume specified)"; }
655
656
  }
656
657
  part causeVtbiTooHigh : HazardCause {
657
- attribute :>> id = "CAUSE-021";
658
+ @MemoIdentity { :>> providedId = "CAUSE-021"; }
658
659
  attribute :>> name = "IncorrectVtbiOrFillVolumeSpecified";
659
660
  attribute :>> causeSource = CauseSourceKind::usageCause;
660
661
  attribute :>> contributingFactors = "Overfill: incorrect fill volume or VTBI specified at programming time";
661
- attribute :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.1 (overfill: incorrect fill volume specified; mitigated by barcode scanner)";
662
+ @MemoIdentity { :>> sourceReference = "CITE-004/CITE-007: GIP/GPCA hazard analysis (2009), Use Hazards HID 8.1 (overfill: incorrect fill volume specified; mitigated by barcode scanner)"; }
662
663
  }
663
664
  part causeStaleDrugLibrary : HazardCause {
664
- attribute :>> id = "CAUSE-022";
665
+ @MemoIdentity { :>> providedId = "CAUSE-022"; }
665
666
  attribute :>> name = "IncorrectOrOutdatedDrugLibraryLimits";
666
667
  attribute :>> causeSource = CauseSourceKind::software;
667
668
  attribute :>> contributingFactors = "Incorrect drug library or old version leaves VTBI limits wrong or missing";
668
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.5 Software Hazards HID 5.6 (incorrect dose administered: incorrect drug library, old version of drug library)";
669
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.5 Software Hazards HID 5.6 (incorrect dose administered: incorrect drug library, old version of drug library)"; }
669
670
  }
670
671
  part seqVtbiExceeded : SequenceOfEvents {
671
- attribute :>> id = "SEQ-007";
672
+ @MemoIdentity { :>> providedId = "SEQ-007"; }
672
673
  attribute :>> name = "VtbiCeilingExceededSequence";
673
674
  attribute :>> initiatingEvent = "Volume infused accumulates past the drug-database maximum VTBI during THERAPY";
674
675
  attribute :>> contributingFactors = "Infusion-complete transition missed; VTBI limit misprogrammed or outdated";
675
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20) and §4.1.6 (REQ 28: infusion complete at prescribed duration or maximum VTBI)";
676
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20) and §4.1.6 (REQ 28: infusion complete at prescribed duration or maximum VTBI)"; }
676
677
  }
677
678
  part hsVtbiExceeded : HazardousSituation {
678
- attribute :>> id = "HS-007";
679
+ @MemoIdentity { :>> providedId = "HS-007"; }
679
680
  attribute :>> name = "PatientReceivingVolumeBeyondPrescribedVtbi";
680
681
  attribute :>> exposedPersons = "patient";
681
682
  attribute :>> operatingCondition = "ACTIVE therapy continuing past the prescribed total volume";
682
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20: actual volume infused exceeds the drug-database maximum VTBI)";
683
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20: actual volume infused exceeds the drug-database maximum VTBI)"; }
683
684
  }
684
685
  part riskBeforeVtbi : Risk {
685
- attribute :>> id = "RISK-B-007";
686
+ @MemoIdentity { :>> providedId = "RISK-B-007"; }
686
687
  attribute :>> name = "VtbiOverInfusionInitialRisk";
687
688
  attribute :>> driverKind = "risk";
688
689
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
@@ -692,26 +693,26 @@ package memo_examples_gpca_pump_gpca_risk {
692
693
  attribute :>> estimationBasis = "programming error rates for volume-based dose settings";
693
694
  attribute :>> analysisContext = "prescription entry and long-running therapy volume accounting";
694
695
  attribute :>> foreseeableMisuseIncluded = true;
695
- attribute :>> sourceReference = "illustrative — no source";
696
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
696
697
  }
697
698
  part vtbiLimitPauseControl : RiskControlMeasure {
698
- attribute :>> id = "RC-012";
699
+ @MemoIdentity { :>> providedId = "RC-012"; }
699
700
  attribute :>> name = "VtbiCeilingPauseAtKvo";
700
701
  attribute :>> controlKind = RiskControlKind::alarm;
701
702
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
702
703
  attribute :>> verificationStatus = "planned";
703
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20 — model REQ-CS-20: transition to PAUSED and REQ 59 'Over Infusion VTBI' actions, model NOTIF-06); CITE-002: CriSys AADL v2.0, AGREE over-VTBI => flow <= KVO (model GP-008)";
704
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20 — model REQ-CS-20: transition to PAUSED and REQ 59 'Over Infusion VTBI' actions, model NOTIF-06); CITE-002: CriSys AADL v2.0, AGREE over-VTBI => flow <= KVO (model GP-008)"; }
704
705
  }
705
706
  part infusionCompleteControl : RiskControlMeasure {
706
- attribute :>> id = "RC-013";
707
+ @MemoIdentity { :>> providedId = "RC-013"; }
707
708
  attribute :>> name = "InfusionCompleteStopAtVtbi";
708
709
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
709
710
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
710
711
  attribute :>> verificationStatus = "planned";
711
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6 (REQ 28 — model REQ-CS-28: transition to IDLE when total volume infused reaches the programmed prescription maximum VTBI)";
712
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6 (REQ 28 — model REQ-CS-28: transition to IDLE when total volume infused reaches the programmed prescription maximum VTBI)"; }
712
713
  }
713
714
  part riskAfterVtbi : ResidualRisk {
714
- attribute :>> id = "RISK-A-007";
715
+ @MemoIdentity { :>> providedId = "RISK-A-007"; }
715
716
  attribute :>> name = "VtbiOverInfusionResidualRisk";
716
717
  attribute :>> driverKind = "risk";
717
718
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
@@ -719,32 +720,32 @@ package memo_examples_gpca_pump_gpca_risk {
719
720
  attribute :>> riskLevel = CriticalityKind::medium;
720
721
  attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
721
722
  attribute :>> benefitRiskRequired = false;
722
- attribute :>> sourceReference = "illustrative — no source";
723
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
723
724
  }
724
725
 
725
726
  // ── Cross-cutting platform controls ─────────────────────────────
726
727
  part watchdogControl : RiskControlMeasure {
727
- attribute :>> id = "RC-007";
728
+ @MemoIdentity { :>> providedId = "RC-007"; }
728
729
  attribute :>> name = "HardwareWatchdogSafeState";
729
730
  attribute :>> controlKind = RiskControlKind::protectiveMeasure;
730
731
  attribute :>> implementationKind = RiskControlImplementationKind::hardwareDesign;
731
732
  attribute :>> verificationStatus = "planned";
732
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (watchdog alarm) and §2.3 Pump Checks (watchdog interrupt tests); CITE-008: GPCA Safety Requirements (2009), POST (watchdog test)";
733
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (watchdog alarm) and §2.3 Pump Checks (watchdog interrupt tests); CITE-008: GPCA Safety Requirements (2009), POST (watchdog test)"; }
733
734
  }
734
735
  part flowCrossCheckControl : RiskControlMeasure {
735
- attribute :>> id = "RC-008";
736
+ @MemoIdentity { :>> providedId = "RC-008"; }
736
737
  attribute :>> name = "IndependentFlowCrossCheck";
737
738
  attribute :>> controlKind = RiskControlKind::monitoring;
738
739
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
739
740
  attribute :>> verificationStatus = "planned";
740
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.2/1.10/1.16 (flow sensor mitigation); CITE-008: GPCA Safety Requirements (2009), Flow rate accuracy (over-infusion and under-infusion alarms from flow sensor comparison)";
741
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.2/1.10/1.16 (flow sensor mitigation); CITE-008: GPCA Safety Requirements (2009), Flow rate accuracy (over-infusion and under-infusion alarms from flow sensor comparison)"; }
741
742
  }
742
743
 
743
744
  part residualEval : OverallResidualRiskEvaluation {
744
- attribute :>> id = "RREV-001";
745
+ @MemoIdentity { :>> providedId = "RREV-001"; }
745
746
  attribute :>> name = "OverallResidualRiskEvaluation";
746
747
  attribute :>> conclusion = "Residual risk across opioid over-infusion, under-infusion, air embolism, misprogramming, free flow, reverse delivery, and VTBI over-infusion is acceptable given lockout and max-dose enforcement, KVO-pause alarm semantics for air/occlusion/VTBI/reverse-delivery conditions, drug-database limit checking with confirmation, administration-set free-flow prevention, door interlock, watchdog safe state, and independent flow cross-check, each with planned verification.";
747
748
  attribute :>> reviewer = "Safety review";
748
- attribute :>> sourceReference = "illustrative — no source";
749
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
749
750
  }
750
751
  }