@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
@@ -6,6 +6,8 @@ package memo_examples_gpca_pump_gpca_requirements {
6
6
  private import memo_assurance_requirements_needs::*;
7
7
  private import memo_core_enumerations::*;
8
8
 
9
+ private import memo_core_common::*;
10
+ private import memo_core_common::MemoIdentity;
9
11
  // ═════════════════════════════════════════════════════════════
10
12
  // GPCA requirements layer.
11
13
  //
@@ -26,205 +28,205 @@ package memo_examples_gpca_pump_gpca_requirements {
26
28
  // ── Stakeholder needs ───────────────────────────────────────
27
29
  requirement needSafeTherapy : Need {
28
30
  attribute :>> needKind = NeedKind::'stakeholder';
29
- attribute :>> id = "NEED-001"; attribute :>> name = "SafePatientControlledTherapy";
31
+ @MemoIdentity { :>> providedId = "NEED-001"; } attribute :>> name = "SafePatientControlledTherapy";
30
32
  attribute :>> statement = "The device shall support safe patient controlled analgesic infusion therapy.";
31
33
  attribute :>> priority = "high";
32
34
  }
33
35
  requirement needEffectiveAnalgesia : Need {
34
36
  attribute :>> needKind = NeedKind::'stakeholder';
35
- attribute :>> id = "NEED-002"; attribute :>> name = "EffectivePainManagement";
37
+ @MemoIdentity { :>> providedId = "NEED-002"; } attribute :>> name = "EffectivePainManagement";
36
38
  attribute :>> statement = "The device shall deliver the prescribed basal and bolus doses accurately so the patient receives effective analgesia.";
37
39
  attribute :>> priority = "high";
38
40
  }
39
41
  requirement needTimelyAlarms : Need {
40
42
  attribute :>> needKind = NeedKind::'stakeholder';
41
- attribute :>> id = "NEED-003"; attribute :>> name = "TimelyAlarmNotification";
43
+ @MemoIdentity { :>> providedId = "NEED-003"; } attribute :>> name = "TimelyAlarmNotification";
42
44
  attribute :>> statement = "Clinicians shall be notified promptly and unambiguously of any condition that interrupts or endangers therapy.";
43
45
  attribute :>> priority = "high";
44
46
  }
45
47
  requirement needAuditableRecord : Need {
46
48
  attribute :>> needKind = NeedKind::'stakeholder';
47
- attribute :>> id = "NEED-004"; attribute :>> name = "AuditableTherapyRecord";
49
+ @MemoIdentity { :>> providedId = "NEED-004"; } attribute :>> name = "AuditableTherapyRecord";
48
50
  attribute :>> statement = "All delivered doses, alarms, and prescription changes shall be reviewable after the fact.";
49
51
  attribute :>> priority = "medium";
50
52
  }
51
53
 
52
54
  // ── System constants (CriSys App. A.4; I 8; Ch.5) ───────────
53
55
  part constMaxRateofFlowChange : SystemConstant {
54
- attribute :>> id = "CONST-01"; attribute :>> name = "Max_Rateof_Flow_Change";
56
+ @MemoIdentity { :>> providedId = "CONST-01"; } attribute :>> name = "Max_Rateof_Flow_Change";
55
57
  attribute :>> symbol = "Max_Rateof_Flow_Change_const";
56
58
  attribute :>> description = "Maximum rate of change of flow of drug in the hose.";
57
59
  attribute :>> unit = "ml/sec2"; attribute :>> valueType = "Numeric";
58
60
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
59
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
61
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
60
62
  }
61
63
  part constMaxModeChangeDuration : SystemConstant {
62
- attribute :>> id = "CONST-02"; attribute :>> name = "Max_Mode_Change_Duration";
64
+ @MemoIdentity { :>> providedId = "CONST-02"; } attribute :>> name = "Max_Mode_Change_Duration";
63
65
  attribute :>> symbol = "Max_Mode_Change_Duration_const";
64
66
  attribute :>> description = "Maximum time to be taken for mode transition.";
65
67
  attribute :>> unit = "sec"; attribute :>> valueType = "Time";
66
68
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
67
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
69
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
68
70
  }
69
71
  part constConfigWarningDuration : SystemConstant {
70
- attribute :>> id = "CONST-03"; attribute :>> name = "Config_Warning_Duration";
72
+ @MemoIdentity { :>> providedId = "CONST-03"; } attribute :>> name = "Config_Warning_Duration";
71
73
  attribute :>> symbol = "Config_Warning_Duration_const";
72
74
  attribute :>> description = "Recommended duration of prescription values configuration.";
73
75
  attribute :>> unit = "sec"; attribute :>> valueType = "Time";
74
76
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
75
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
77
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
76
78
  }
77
79
  part constMaxConfigDuration : SystemConstant {
78
- attribute :>> id = "CONST-04"; attribute :>> name = "Max_Config_Duration";
80
+ @MemoIdentity { :>> providedId = "CONST-04"; } attribute :>> name = "Max_Config_Duration";
79
81
  attribute :>> symbol = "Max_Config_Duration_const";
80
82
  attribute :>> description = "Maximum time allowed for configuration.";
81
83
  attribute :>> unit = "sec"; attribute :>> valueType = "Time";
82
84
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
83
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
85
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
84
86
  }
85
87
  part constMaxIdleDuration : SystemConstant {
86
- attribute :>> id = "CONST-05"; attribute :>> name = "Max_IDLE_Duration";
88
+ @MemoIdentity { :>> providedId = "CONST-05"; } attribute :>> name = "Max_IDLE_Duration";
87
89
  attribute :>> symbol = "Max_IDLE_Duration_const";
88
90
  attribute :>> description = "Maximum duration the system is allowed to be in IDLE mode continuously.";
89
91
  attribute :>> unit = "sec"; attribute :>> valueType = "Time";
90
92
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
91
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
93
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
92
94
  }
93
95
  part constMaxDurationUnderInfusion : SystemConstant {
94
- attribute :>> id = "CONST-06"; attribute :>> name = "Max_Duration_UnderInfusion";
96
+ @MemoIdentity { :>> providedId = "CONST-06"; } attribute :>> name = "Max_Duration_UnderInfusion";
95
97
  attribute :>> symbol = "Max_Duration_UnderInfusion_const";
96
98
  attribute :>> description = "Maximum cumulative duration the system can infuse below the respective mode's flow rate minus Tolerance_Min_const in any delta time interval.";
97
99
  attribute :>> unit = "sec"; attribute :>> valueType = "Time";
98
100
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
99
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
101
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
100
102
  }
101
103
  part constMaxDurationOverInfusion : SystemConstant {
102
- attribute :>> id = "CONST-07"; attribute :>> name = "Max_Duration_OverInfusion";
104
+ @MemoIdentity { :>> providedId = "CONST-07"; } attribute :>> name = "Max_Duration_OverInfusion";
103
105
  attribute :>> symbol = "Max_Duration_OverInfusion_const";
104
106
  attribute :>> description = "Maximum cumulative duration the system can infuse above the respective mode's flow rate plus Tolerance_Min_const in any delta time interval.";
105
107
  attribute :>> unit = "sec"; attribute :>> valueType = "Time";
106
108
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
107
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
109
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
108
110
  }
109
111
  part constLowReservoir : SystemConstant {
110
- attribute :>> id = "CONST-08"; attribute :>> name = "Low_Reservoir";
112
+ @MemoIdentity { :>> providedId = "CONST-08"; } attribute :>> name = "Low_Reservoir";
111
113
  attribute :>> symbol = "Low_Reservoir_const";
112
114
  attribute :>> description = "Volume in the drug reservoir that needs notification for Low Reservoir.";
113
115
  attribute :>> unit = "ml"; attribute :>> valueType = "Numeric";
114
116
  attribute :>> constantValue = ""; attribute :>> valueCondition = "should be greater than Empty_Reservoir_const";
115
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
117
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
116
118
  }
117
119
  part constEmptyReservoir : SystemConstant {
118
- attribute :>> id = "CONST-09"; attribute :>> name = "Empty_Reservoir";
120
+ @MemoIdentity { :>> providedId = "CONST-09"; } attribute :>> name = "Empty_Reservoir";
119
121
  attribute :>> symbol = "Empty_Reservoir_const";
120
122
  attribute :>> description = "Volume in the drug reservoir that needs notification for Empty Reservoir.";
121
123
  attribute :>> unit = "ml"; attribute :>> valueType = "Numeric";
122
124
  attribute :>> constantValue = ""; attribute :>> valueCondition = "should be greater than FlowRate_kvo_hd (as written in the source)";
123
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
125
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
124
126
  }
125
127
  part constSingleAirBubbleVolume : SystemConstant {
126
- attribute :>> id = "CONST-10"; attribute :>> name = "Single_AirBubble_Volume";
128
+ @MemoIdentity { :>> providedId = "CONST-10"; } attribute :>> name = "Single_AirBubble_Volume";
127
129
  attribute :>> symbol = "Single_AirBubble_Volume_const";
128
130
  attribute :>> description = "Maximum volume of a single air bubble that is safe to be infused.";
129
131
  attribute :>> unit = "ml"; attribute :>> valueType = "Numeric";
130
132
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
131
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
133
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
132
134
  }
133
135
  part constCumulativeAirBubbleVolume : SystemConstant {
134
- attribute :>> id = "CONST-11"; attribute :>> name = "Cumulative_AirBubble_Volume";
136
+ @MemoIdentity { :>> providedId = "CONST-11"; } attribute :>> name = "Cumulative_AirBubble_Volume";
135
137
  attribute :>> symbol = "Cumulative_AirBubble_Volume_const";
136
138
  attribute :>> description = "Maximum volume of air bubbles cumulatively in a delta time interval that is safe to be infused.";
137
139
  attribute :>> unit = "ml"; attribute :>> valueType = "Numeric";
138
140
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
139
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
141
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
140
142
  }
141
143
  part constRevDeliveryContinuousDuration : SystemConstant {
142
- attribute :>> id = "CONST-12"; attribute :>> name = "Rev_Delivery_Continuous_Duration";
144
+ @MemoIdentity { :>> providedId = "CONST-12"; } attribute :>> name = "Rev_Delivery_Continuous_Duration";
143
145
  attribute :>> symbol = "Rev_Delivery_Continuous_Duration_const";
144
146
  attribute :>> description = "Maximum duration the system is acceptable to be in reverse delivery continuously.";
145
147
  attribute :>> unit = "minutes"; attribute :>> valueType = "Time";
146
148
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
147
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
149
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
148
150
  }
149
151
  part constRevDeliveryCumulativeDuration : SystemConstant {
150
- attribute :>> id = "CONST-13"; attribute :>> name = "Rev_Delivery_Cumulative_Duration";
152
+ @MemoIdentity { :>> providedId = "CONST-13"; } attribute :>> name = "Rev_Delivery_Cumulative_Duration";
151
153
  attribute :>> symbol = "Rev_Delivery_Cumulative_Duration_const";
152
154
  attribute :>> description = "Maximum duration the system is acceptable to be in reverse delivery cumulatively in a delta time interval.";
153
155
  attribute :>> unit = "minutes"; attribute :>> valueType = "Time";
154
156
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
155
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
157
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
156
158
  }
157
159
  part constMaxPausedDuration : SystemConstant {
158
- attribute :>> id = "CONST-14"; attribute :>> name = "Max_PAUSED_Duration";
160
+ @MemoIdentity { :>> providedId = "CONST-14"; } attribute :>> name = "Max_PAUSED_Duration";
159
161
  attribute :>> symbol = "Max_PAUSED_Duration_const";
160
162
  attribute :>> description = "Maximum duration the system is allowed to be in PAUSED mode continuously.";
161
163
  attribute :>> unit = "sec"; attribute :>> valueType = "Time";
162
164
  attribute :>> constantValue = ""; attribute :>> valueCondition = "value left open by the source";
163
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
165
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
164
166
  }
165
167
  part constToleranceMax : SystemConstant {
166
- attribute :>> id = "CONST-15"; attribute :>> name = "Tolerance_Max";
168
+ @MemoIdentity { :>> providedId = "CONST-15"; } attribute :>> name = "Tolerance_Max";
167
169
  attribute :>> symbol = "Tolerance_Max_const";
168
170
  attribute :>> description = "Maximum acceptable variation in flow rate in any mode, specified as a percentage of the respective mode's flow rate.";
169
171
  attribute :>> unit = "%"; attribute :>> valueType = "Positive Integer";
170
172
  attribute :>> constantValue = "20 %"; attribute :>> valueCondition = "";
171
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
173
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
172
174
  }
173
175
  part constToleranceMin : SystemConstant {
174
- attribute :>> id = "CONST-16"; attribute :>> name = "Tolerance_Min";
176
+ @MemoIdentity { :>> providedId = "CONST-16"; } attribute :>> name = "Tolerance_Min";
175
177
  attribute :>> symbol = "Tolerance_Min_const";
176
178
  attribute :>> description = "Tolerance in flow rate variation that is acceptable for a certain duration of time (Max_Duration_OverInfusion_const, Max_Duration_UnderInfusion_const); computed like Tolerance_Max_const.";
177
179
  attribute :>> unit = "%"; attribute :>> valueType = "Positive Integer";
178
180
  attribute :>> constantValue = "5 %"; attribute :>> valueCondition = "";
179
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
181
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
180
182
  }
181
183
  part constAudioLevel : SystemConstant {
182
- attribute :>> id = "CONST-17"; attribute :>> name = "Audio_level";
184
+ @MemoIdentity { :>> providedId = "CONST-17"; } attribute :>> name = "Audio_level";
183
185
  attribute :>> symbol = "Audio_level_const";
184
186
  attribute :>> description = "Acceptable level of sound for audio notification. Interface spec I 8 states 50 db for 2 seconds per notification; the App. A.4 value cell is inconsistent in the source (lists '5 %').";
185
187
  attribute :>> unit = "decibels"; attribute :>> valueType = "Positive Integer";
186
188
  attribute :>> constantValue = "50 db for 2 seconds per notification"; attribute :>> valueCondition = "";
187
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.4 (I 8) and App. A.4";
189
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.4 (I 8) and App. A.4"; }
188
190
  }
189
191
  part constAudioEnableDuration : SystemConstant {
190
- attribute :>> id = "CONST-18"; attribute :>> name = "Audio_Enable_Duration";
192
+ @MemoIdentity { :>> providedId = "CONST-18"; } attribute :>> name = "Audio_Enable_Duration";
191
193
  attribute :>> symbol = "Audio_Enable_Duration_const";
192
194
  attribute :>> description = "Audio notification temporary silencing duration.";
193
195
  attribute :>> unit = "minutes"; attribute :>> valueType = "Positive Integer";
194
196
  attribute :>> constantValue = "30"; attribute :>> valueCondition = "";
195
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
197
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
196
198
  }
197
199
  part constLogInterval : SystemConstant {
198
- attribute :>> id = "CONST-19"; attribute :>> name = "Log_Interval";
200
+ @MemoIdentity { :>> providedId = "CONST-19"; } attribute :>> name = "Log_Interval";
199
201
  attribute :>> symbol = "Log_Interval_const";
200
202
  attribute :>> description = "Interval at which operational information should be recorded.";
201
203
  attribute :>> unit = "minutes"; attribute :>> valueType = "Positive Integer";
202
204
  attribute :>> constantValue = "5"; attribute :>> valueCondition = "";
203
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4";
205
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), App. A.4"; }
204
206
  }
205
207
  part constErrorLogRetention : SystemConstant {
206
- attribute :>> id = "CONST-20"; attribute :>> name = "Error_Log_Retention";
208
+ @MemoIdentity { :>> providedId = "CONST-20"; } attribute :>> name = "Error_Log_Retention";
207
209
  attribute :>> symbol = "Error_Log_Retention";
208
210
  attribute :>> description = "Duration for which the most recent error log data shall persist (REQ 85).";
209
211
  attribute :>> unit = "days"; attribute :>> valueType = "Time";
210
212
  attribute :>> constantValue = "30"; attribute :>> valueCondition = "";
211
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 85)";
213
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 85)"; }
212
214
  }
213
215
  part constOperationalLogRetention : SystemConstant {
214
- attribute :>> id = "CONST-21"; attribute :>> name = "Operational_Log_Retention";
216
+ @MemoIdentity { :>> providedId = "CONST-21"; } attribute :>> name = "Operational_Log_Retention";
215
217
  attribute :>> symbol = "Operational_Log_Retention";
216
218
  attribute :>> description = "Duration for which the most recent operational log data shall persist (REQ 85).";
217
219
  attribute :>> unit = "days"; attribute :>> valueType = "Time";
218
220
  attribute :>> constantValue = "15"; attribute :>> valueCondition = "";
219
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 85)";
221
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 85)"; }
220
222
  }
221
223
  part constPrescriptionPersistDuration : SystemConstant {
222
- attribute :>> id = "CONST-22"; attribute :>> name = "Prescription_Persist_Duration";
224
+ @MemoIdentity { :>> providedId = "CONST-22"; } attribute :>> name = "Prescription_Persist_Duration";
223
225
  attribute :>> symbol = "Prescription_Persist_Duration";
224
226
  attribute :>> description = "Duration for which the last saved prescription data shall persist (REQ 86).";
225
227
  attribute :>> unit = "days"; attribute :>> valueType = "Time";
226
228
  attribute :>> constantValue = "15"; attribute :>> valueCondition = "";
227
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 86)";
229
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 86)"; }
228
230
  }
229
231
 
230
232
  // ── REQ 59 notification action table (20 notifications) ─────
@@ -234,1141 +236,1141 @@ package memo_examples_gpca_pump_gpca_requirements {
234
236
  // restriction: Inhibit All Infusion > Inhibit Square Bolus >
235
237
  // Inhibit Patient Bolus.
236
238
  part notifLowReservoir : NotificationSpec {
237
- attribute :>> id = "NOTIF-01"; attribute :>> name = "Low_Reservoir";
239
+ @MemoIdentity { :>> providedId = "NOTIF-01"; } attribute :>> name = "Low_Reservoir";
238
240
  attribute :>> priority = NotificationPriorityKind::high;
239
241
  attribute :>> visualNotification = true; attribute :>> audioNotification = false;
240
242
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = true;
241
243
  attribute :>> inhibitPatientBolus = true; attribute :>> stopBolus = true;
242
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
244
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
243
245
  }
244
246
  part notifEmptyReservoir : NotificationSpec {
245
- attribute :>> id = "NOTIF-02"; attribute :>> name = "Empty_Reservoir";
247
+ @MemoIdentity { :>> providedId = "NOTIF-02"; } attribute :>> name = "Empty_Reservoir";
246
248
  attribute :>> priority = NotificationPriorityKind::high;
247
249
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
248
250
  attribute :>> inhibitInfusion = true; attribute :>> inhibitSquareBolus = true;
249
251
  attribute :>> inhibitPatientBolus = true; attribute :>> stopBolus = true;
250
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
252
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
251
253
  }
252
254
  part notifAirEmbolism : NotificationSpec {
253
- attribute :>> id = "NOTIF-03"; attribute :>> name = "Air_embolism";
255
+ @MemoIdentity { :>> providedId = "NOTIF-03"; } attribute :>> name = "Air_embolism";
254
256
  attribute :>> priority = NotificationPriorityKind::high;
255
257
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
256
258
  attribute :>> inhibitInfusion = true; attribute :>> inhibitSquareBolus = true;
257
259
  attribute :>> inhibitPatientBolus = true; attribute :>> stopBolus = true;
258
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
260
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
259
261
  }
260
262
  part notifReverseDelivery : NotificationSpec {
261
- attribute :>> id = "NOTIF-04"; attribute :>> name = "Reverse_Delivery";
263
+ @MemoIdentity { :>> providedId = "NOTIF-04"; } attribute :>> name = "Reverse_Delivery";
262
264
  attribute :>> priority = NotificationPriorityKind::high;
263
265
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
264
266
  attribute :>> inhibitInfusion = true; attribute :>> inhibitSquareBolus = true;
265
267
  attribute :>> inhibitPatientBolus = true; attribute :>> stopBolus = true;
266
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
268
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
267
269
  }
268
270
  part notifOverInfusionFlowRate : NotificationSpec {
269
- attribute :>> id = "NOTIF-05"; attribute :>> name = "Over_Infusion_FlowRate";
271
+ @MemoIdentity { :>> providedId = "NOTIF-05"; } attribute :>> name = "Over_Infusion_FlowRate";
270
272
  attribute :>> priority = NotificationPriorityKind::high;
271
273
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
272
274
  attribute :>> inhibitInfusion = true; attribute :>> inhibitSquareBolus = true;
273
275
  attribute :>> inhibitPatientBolus = true; attribute :>> stopBolus = true;
274
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
276
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
275
277
  }
276
278
  part notifOverInfusionVtbi : NotificationSpec {
277
- attribute :>> id = "NOTIF-06"; attribute :>> name = "Over_Infusion_VTBI";
279
+ @MemoIdentity { :>> providedId = "NOTIF-06"; } attribute :>> name = "Over_Infusion_VTBI";
278
280
  attribute :>> priority = NotificationPriorityKind::high;
279
281
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
280
282
  attribute :>> inhibitInfusion = true; attribute :>> inhibitSquareBolus = true;
281
283
  attribute :>> inhibitPatientBolus = true; attribute :>> stopBolus = true;
282
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
284
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
283
285
  }
284
286
  part notifBolusExceeded : NotificationSpec {
285
- attribute :>> id = "NOTIF-07"; attribute :>> name = "Bolus_Exceeded";
287
+ @MemoIdentity { :>> providedId = "NOTIF-07"; } attribute :>> name = "Bolus_Exceeded";
286
288
  attribute :>> priority = NotificationPriorityKind::medium;
287
289
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
288
290
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
289
291
  attribute :>> inhibitPatientBolus = true; attribute :>> stopBolus = false;
290
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
292
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
291
293
  }
292
294
  part notifInfusionInhibited : NotificationSpec {
293
- attribute :>> id = "NOTIF-08"; attribute :>> name = "Infusion_Inhibited";
295
+ @MemoIdentity { :>> providedId = "NOTIF-08"; } attribute :>> name = "Infusion_Inhibited";
294
296
  attribute :>> priority = NotificationPriorityKind::medium;
295
297
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
296
298
  attribute :>> inhibitInfusion = true; attribute :>> inhibitSquareBolus = false;
297
299
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = true;
298
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
300
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
299
301
  }
300
302
  part notifInfusionManuallyInhibited : NotificationSpec {
301
- attribute :>> id = "NOTIF-09"; attribute :>> name = "Infusion_Manually_Inhibited";
303
+ @MemoIdentity { :>> providedId = "NOTIF-09"; } attribute :>> name = "Infusion_Manually_Inhibited";
302
304
  attribute :>> priority = NotificationPriorityKind::medium;
303
305
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
304
306
  attribute :>> inhibitInfusion = true; attribute :>> inhibitSquareBolus = false;
305
307
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = true;
306
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
308
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
307
309
  }
308
310
  part notifInfusionStoppedManually : NotificationSpec {
309
- attribute :>> id = "NOTIF-10"; attribute :>> name = "Infusion_Stopped_Manually";
311
+ @MemoIdentity { :>> providedId = "NOTIF-10"; } attribute :>> name = "Infusion_Stopped_Manually";
310
312
  attribute :>> priority = NotificationPriorityKind::medium;
311
313
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
312
314
  attribute :>> inhibitInfusion = true; attribute :>> inhibitSquareBolus = false;
313
315
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = true;
314
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
316
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
315
317
  }
316
318
  part notifUnderInfusionFlowRate : NotificationSpec {
317
- attribute :>> id = "NOTIF-11"; attribute :>> name = "Under_Infusion_FlowRate";
319
+ @MemoIdentity { :>> providedId = "NOTIF-11"; } attribute :>> name = "Under_Infusion_FlowRate";
318
320
  attribute :>> priority = NotificationPriorityKind::medium;
319
321
  attribute :>> visualNotification = true; attribute :>> audioNotification = false;
320
322
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
321
323
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
322
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
324
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
323
325
  }
324
326
  part notifUnderInfusionVtbi : NotificationSpec {
325
- attribute :>> id = "NOTIF-12"; attribute :>> name = "Under_Infusion_VTBI";
327
+ @MemoIdentity { :>> providedId = "NOTIF-12"; } attribute :>> name = "Under_Infusion_VTBI";
326
328
  attribute :>> priority = NotificationPriorityKind::medium;
327
329
  attribute :>> visualNotification = true; attribute :>> audioNotification = false;
328
330
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
329
331
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
330
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
332
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
331
333
  }
332
334
  part notifInfusionComplete : NotificationSpec {
333
- attribute :>> id = "NOTIF-13"; attribute :>> name = "Infusion_Complete";
335
+ @MemoIdentity { :>> providedId = "NOTIF-13"; } attribute :>> name = "Infusion_Complete";
334
336
  attribute :>> priority = NotificationPriorityKind::low;
335
337
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
336
338
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
337
339
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
338
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
340
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
339
341
  }
340
342
  part notifFrequentBolusRequests : NotificationSpec {
341
- attribute :>> id = "NOTIF-14"; attribute :>> name = "Frequent_Bolus_Requests";
343
+ @MemoIdentity { :>> providedId = "NOTIF-14"; } attribute :>> name = "Frequent_Bolus_Requests";
342
344
  attribute :>> priority = NotificationPriorityKind::low;
343
345
  attribute :>> visualNotification = true; attribute :>> audioNotification = false;
344
346
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
345
347
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
346
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
348
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
347
349
  }
348
350
  part notifIdleTime : NotificationSpec {
349
- attribute :>> id = "NOTIF-15"; attribute :>> name = "IDLE_Time";
351
+ @MemoIdentity { :>> providedId = "NOTIF-15"; } attribute :>> name = "IDLE_Time";
350
352
  attribute :>> priority = NotificationPriorityKind::low;
351
353
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
352
354
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
353
355
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
354
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
356
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
355
357
  }
356
358
  part notifPausedTime : NotificationSpec {
357
- attribute :>> id = "NOTIF-16"; attribute :>> name = "PAUSED_Time";
359
+ @MemoIdentity { :>> providedId = "NOTIF-16"; } attribute :>> name = "PAUSED_Time";
358
360
  attribute :>> priority = NotificationPriorityKind::low;
359
361
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
360
362
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
361
363
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
362
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
364
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
363
365
  }
364
366
  part notifConfigTime : NotificationSpec {
365
- attribute :>> id = "NOTIF-17"; attribute :>> name = "Config_Time";
367
+ @MemoIdentity { :>> providedId = "NOTIF-17"; } attribute :>> name = "Config_Time";
366
368
  attribute :>> priority = NotificationPriorityKind::low;
367
369
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
368
370
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
369
371
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
370
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
372
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
371
373
  }
372
374
  part notifValidationFailed : NotificationSpec {
373
- attribute :>> id = "NOTIF-18"; attribute :>> name = "Validation_Failed";
375
+ @MemoIdentity { :>> providedId = "NOTIF-18"; } attribute :>> name = "Validation_Failed";
374
376
  attribute :>> priority = NotificationPriorityKind::low;
375
377
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
376
378
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
377
379
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
378
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
380
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
379
381
  }
380
382
  part notifDrugSafeValueNotPresent : NotificationSpec {
381
- attribute :>> id = "NOTIF-19"; attribute :>> name = "Drug_safe_value_not_present";
383
+ @MemoIdentity { :>> providedId = "NOTIF-19"; } attribute :>> name = "Drug_safe_value_not_present";
382
384
  attribute :>> description = "Raised with the missing field names appended.";
383
385
  attribute :>> priority = NotificationPriorityKind::low;
384
386
  attribute :>> visualNotification = true; attribute :>> audioNotification = false;
385
387
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
386
388
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
387
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
389
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
388
390
  }
389
391
  part notifDrugDatabaseNotReachable : NotificationSpec {
390
- attribute :>> id = "NOTIF-20"; attribute :>> name = "Drug_database_not_reachable";
392
+ @MemoIdentity { :>> providedId = "NOTIF-20"; } attribute :>> name = "Drug_database_not_reachable";
391
393
  attribute :>> priority = NotificationPriorityKind::low;
392
394
  attribute :>> visualNotification = true; attribute :>> audioNotification = true;
393
395
  attribute :>> inhibitInfusion = false; attribute :>> inhibitSquareBolus = false;
394
396
  attribute :>> inhibitPatientBolus = false; attribute :>> stopBolus = false;
395
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table";
397
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 REQ 59 table"; }
396
398
  }
397
399
 
398
400
  // ═════ CriSys system requirements — §4.1.1 GPCA System ══════
399
401
  requirement reqCs01 : Requirement {
400
402
  attribute :>> requirementKind = RequirementKind::system;
401
- attribute :>> id = "REQ-CS-01"; attribute :>> name = "SingleActiveMode";
403
+ @MemoIdentity { :>> providedId = "REQ-CS-01"; } attribute :>> name = "SingleActiveMode";
402
404
  attribute :>> statement = "The system shall always be in only one of the following modes: OFF (default mode), IDLE, PAUSED, BASAL, SQUARE BOLUS or PATIENT BOLUS.";
403
405
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
404
406
  attribute :>> concernKind = ConcernKind::safety;
405
407
  attribute :>> status = ElementStatusKind::approved;
406
408
  attribute :>> acceptanceCriteria = "Mode output is always exactly one valid exclusive value.";
407
409
  attribute :>> subjectDescription = "GPCA system";
408
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 1)";
410
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 1)"; }
409
411
  }
410
412
  requirement reqCs02 : Requirement {
411
413
  attribute :>> requirementKind = RequirementKind::system;
412
- attribute :>> id = "REQ-CS-02"; attribute :>> name = "ModeChangeDurationWithoutFlowChange";
414
+ @MemoIdentity { :>> providedId = "REQ-CS-02"; } attribute :>> name = "ModeChangeDurationWithoutFlowChange";
413
415
  attribute :>> statement = "If there are mode transitions without change in flow rates between the two modes, the system shall transition within Max_Mode_Change_Duration_const.";
414
416
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
415
417
  attribute :>> concernKind = ConcernKind::performance;
416
418
  attribute :>> status = ElementStatusKind::approved;
417
419
  attribute :>> acceptanceCriteria = "transition time <= Max_Mode_Change_Duration_const";
418
420
  attribute :>> subjectDescription = "GPCA system";
419
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 2)";
421
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 2)"; }
420
422
  }
421
423
  requirement reqCs03 : Requirement {
422
424
  attribute :>> requirementKind = RequirementKind::system;
423
- attribute :>> id = "REQ-CS-03"; attribute :>> name = "ModeChangeFlowRamp";
425
+ @MemoIdentity { :>> providedId = "REQ-CS-03"; } attribute :>> name = "ModeChangeFlowRamp";
424
426
  attribute :>> statement = "If there are mode transitions with change in flow rates between the two modes, the system shall change from the current mode flow rate to the new mode flow rate at a rate not more than Max_Rateof_Flow_Change_const or within Max_Mode_Change_Duration_const, whichever achieves the new desired flow rate the quickest.";
425
427
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
426
428
  attribute :>> concernKind = ConcernKind::performance;
427
429
  attribute :>> status = ElementStatusKind::approved;
428
430
  attribute :>> acceptanceCriteria = "flow ramp rate <= Max_Rateof_Flow_Change_const OR transition time <= Max_Mode_Change_Duration_const (quickest wins)";
429
431
  attribute :>> subjectDescription = "GPCA system";
430
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 3)";
432
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.1 (REQ 3)"; }
431
433
  }
432
434
  requirement reqCs04 : Requirement {
433
435
  attribute :>> requirementKind = RequirementKind::system;
434
- attribute :>> id = "REQ-CS-04"; attribute :>> name = "OffToIdleOnSystemStart";
436
+ @MemoIdentity { :>> providedId = "REQ-CS-04"; } attribute :>> name = "OffToIdleOnSystemStart";
435
437
  attribute :>> statement = "The system shall transition from OFF mode to ON > IDLE mode when System_start_prog is commanded. At this transition, the variables in App. A.4 shall be set to their default values.";
436
438
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
437
439
  attribute :>> concernKind = ConcernKind::safety;
438
440
  attribute :>> status = ElementStatusKind::approved;
439
441
  attribute :>> acceptanceCriteria = "System_start_prog in OFF => mode = ON > IDLE and A.4 variables at defaults";
440
442
  attribute :>> subjectDescription = "GPCA system (OFF -> ON transition)";
441
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.2 (REQ 4)";
443
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.2 (REQ 4)"; }
442
444
  }
443
445
  requirement reqCs05 : Requirement {
444
446
  attribute :>> requirementKind = RequirementKind::system;
445
- attribute :>> id = "REQ-CS-05"; attribute :>> name = "OnToOffOnSystemStop";
447
+ @MemoIdentity { :>> providedId = "REQ-CS-05"; } attribute :>> name = "OnToOffOnSystemStop";
446
448
  attribute :>> statement = "While in ON mode, when System_stop_prog is commanded, the system shall stop infusion, cancel all notifications and transition to OFF mode.";
447
449
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
448
450
  attribute :>> concernKind = ConcernKind::safety;
449
451
  attribute :>> status = ElementStatusKind::approved;
450
452
  attribute :>> acceptanceCriteria = "System_stop_prog in ON => infusion stopped, active notifications cancelled, mode = OFF";
451
453
  attribute :>> subjectDescription = "GPCA system (ON -> OFF transition)";
452
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.2 (REQ 5)";
454
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.2 (REQ 5)"; }
453
455
  }
454
456
 
455
457
  // ── §4.1.2 OFF mode ─────────────────────────────────────────
456
458
  requirement reqCs06 : Requirement {
457
459
  attribute :>> requirementKind = RequirementKind::system;
458
- attribute :>> id = "REQ-CS-06"; attribute :>> name = "OffModeNoDelivery";
460
+ @MemoIdentity { :>> providedId = "REQ-CS-06"; } attribute :>> name = "OffModeNoDelivery";
459
461
  attribute :>> statement = "While in OFF mode, the system shall not deliver any drug.";
460
462
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
461
463
  attribute :>> concernKind = ConcernKind::safety;
462
464
  attribute :>> status = ElementStatusKind::approved;
463
465
  attribute :>> acceptanceCriteria = "FlowRate_output = 0";
464
466
  attribute :>> subjectDescription = "OFF mode";
465
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.2.1 (REQ 6)";
467
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.2.1 (REQ 6)"; }
466
468
  }
467
469
 
468
470
  // ── §4.1.3 ON mode ──────────────────────────────────────────
469
471
  requirement reqCs07 : Requirement {
470
472
  attribute :>> requirementKind = RequirementKind::system;
471
- attribute :>> id = "REQ-CS-07"; attribute :>> name = "InfusionRequiresSavedPrescription";
473
+ @MemoIdentity { :>> providedId = "REQ-CS-07"; } attribute :>> name = "InfusionRequiresSavedPrescription";
472
474
  attribute :>> statement = "While in ON mode, the system shall allow initiation of infusion only when a saved prescription is available.";
473
475
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
474
476
  attribute :>> concernKind = ConcernKind::safety;
475
477
  attribute :>> status = ElementStatusKind::approved;
476
478
  attribute :>> acceptanceCriteria = "Infusion initiation is rejected when no saved prescription exists.";
477
479
  attribute :>> subjectDescription = "ON mode";
478
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 7)";
480
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 7)"; }
479
481
  }
480
482
  requirement reqCs08 : Requirement {
481
483
  attribute :>> requirementKind = RequirementKind::system;
482
- attribute :>> id = "REQ-CS-08"; attribute :>> name = "AllowDataConfigurationInOn";
484
+ @MemoIdentity { :>> providedId = "REQ-CS-08"; } attribute :>> name = "AllowDataConfigurationInOn";
483
485
  attribute :>> statement = "While in ON mode, the system shall allow configuring (DataConfig_prog) new or saved prescription data and reservoir initial volume, as described in the Data Configuration Requirements (§4.2).";
484
486
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
485
487
  attribute :>> concernKind = ConcernKind::usability;
486
488
  attribute :>> status = ElementStatusKind::approved;
487
489
  attribute :>> acceptanceCriteria = "DataConfig_prog is accepted in ON mode and enters the §4.2 configuration flow.";
488
490
  attribute :>> subjectDescription = "ON mode";
489
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 8)";
491
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 8)"; }
490
492
  }
491
493
  requirement reqCs09 : Requirement {
492
494
  attribute :>> requirementKind = RequirementKind::system;
493
- attribute :>> id = "REQ-CS-09"; attribute :>> name = "PrescriptionDisplayAndConfirm";
495
+ @MemoIdentity { :>> providedId = "REQ-CS-09"; } attribute :>> name = "PrescriptionDisplayAndConfirm";
494
496
  attribute :>> statement = "While in ON mode, if Infusion_initiate_prog, the system shall display the saved prescription values and allow the clinician to confirm the prescription with another Infusion_initiate_prog.";
495
497
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
496
498
  attribute :>> concernKind = ConcernKind::usability;
497
499
  attribute :>> status = ElementStatusKind::approved;
498
500
  attribute :>> acceptanceCriteria = "First Infusion_initiate_prog displays saved values; therapy starts only after a second Infusion_initiate_prog.";
499
501
  attribute :>> subjectDescription = "ON mode";
500
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 9)";
502
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 9)"; }
501
503
  }
502
504
  requirement reqCs10 : Requirement {
503
505
  attribute :>> requirementKind = RequirementKind::system;
504
- attribute :>> id = "REQ-CS-10"; attribute :>> name = "AllowNotificationsInOn";
506
+ @MemoIdentity { :>> providedId = "REQ-CS-10"; } attribute :>> name = "AllowNotificationsInOn";
505
507
  attribute :>> statement = "While in ON mode, the system shall allow visual and audio notification as described in §4.3.";
506
508
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
507
509
  attribute :>> concernKind = ConcernKind::safety;
508
510
  attribute :>> status = ElementStatusKind::approved;
509
511
  attribute :>> acceptanceCriteria = "Notification behaviors of §4.3 are available whenever the system is in ON mode.";
510
512
  attribute :>> subjectDescription = "ON mode";
511
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 10)";
513
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 10)"; }
512
514
  }
513
515
  requirement reqCs11 : Requirement {
514
516
  attribute :>> requirementKind = RequirementKind::system;
515
- attribute :>> id = "REQ-CS-11"; attribute :>> name = "AllowLoggingInOn";
517
+ @MemoIdentity { :>> providedId = "REQ-CS-11"; } attribute :>> name = "AllowLoggingInOn";
516
518
  attribute :>> statement = "While in ON mode, the system shall allow logging as described in §4.4.";
517
519
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
518
520
  attribute :>> concernKind = ConcernKind::regulatory;
519
521
  attribute :>> status = ElementStatusKind::approved;
520
522
  attribute :>> acceptanceCriteria = "Log behaviors of §4.4 are available whenever the system is in ON mode.";
521
523
  attribute :>> subjectDescription = "ON mode";
522
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 11)";
524
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 11)"; }
523
525
  }
524
526
  requirement reqCs12 : Requirement {
525
527
  attribute :>> requirementKind = RequirementKind::system;
526
- attribute :>> id = "REQ-CS-12"; attribute :>> name = "ConfirmedInitiateStartsBasal";
528
+ @MemoIdentity { :>> providedId = "REQ-CS-12"; } attribute :>> name = "ConfirmedInitiateStartsBasal";
527
529
  attribute :>> statement = "While in ON mode, when the second Infusion_initiate_prog is commanded as per REQ 9 and Inhibited_Infusion_macro = FALSE, the system shall reset Actual_Infusion_Duration_macro = 0 and Actual_Volume_Infused_macro = 0 and shall transition to ON > THERAPY > ACTIVE > BASAL mode.";
528
530
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
529
531
  attribute :>> concernKind = ConcernKind::safety;
530
532
  attribute :>> status = ElementStatusKind::approved;
531
533
  attribute :>> acceptanceCriteria = "Actual_Infusion_Duration_macro = 0 AND Actual_Volume_Infused_macro = 0 AND mode = ON > THERAPY > ACTIVE > BASAL";
532
534
  attribute :>> subjectDescription = "ON mode transitions";
533
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.2 (REQ 12)";
535
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.2 (REQ 12)"; }
534
536
  }
535
537
  requirement reqCs13 : Requirement {
536
538
  attribute :>> requirementKind = RequirementKind::system;
537
- attribute :>> id = "REQ-CS-13"; attribute :>> name = "ConfirmedInitiateWhileInhibitedPauses";
539
+ @MemoIdentity { :>> providedId = "REQ-CS-13"; } attribute :>> name = "ConfirmedInitiateWhileInhibitedPauses";
538
540
  attribute :>> statement = "While in ON mode, when the second Infusion_initiate_prog is commanded as per REQ 9 and Inhibited_Infusion_macro = TRUE, the system shall reset Actual_Infusion_Duration_macro = 0 and Actual_Volume_Infused_macro = 0, shall transition to ON > THERAPY > PAUSED mode and perform actions as described in REQ 59 for 'Infusion Inhibited'.";
539
541
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
540
542
  attribute :>> concernKind = ConcernKind::safety;
541
543
  attribute :>> status = ElementStatusKind::approved;
542
544
  attribute :>> acceptanceCriteria = "Inhibited_Infusion_macro = TRUE => mode = ON > THERAPY > PAUSED and 'Infusion Inhibited' actions taken";
543
545
  attribute :>> subjectDescription = "ON mode transitions";
544
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.2 (REQ 13)";
546
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.2 (REQ 13)"; }
545
547
  }
546
548
 
547
549
  // ── §4.1.4 ON > IDLE mode ───────────────────────────────────
548
550
  requirement reqCs14 : Requirement {
549
551
  attribute :>> requirementKind = RequirementKind::system;
550
- attribute :>> id = "REQ-CS-14"; attribute :>> name = "IdleModeNoDelivery";
552
+ @MemoIdentity { :>> providedId = "REQ-CS-14"; } attribute :>> name = "IdleModeNoDelivery";
551
553
  attribute :>> statement = "While in IDLE mode, the system shall not deliver any drug.";
552
554
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
553
555
  attribute :>> concernKind = ConcernKind::safety;
554
556
  attribute :>> status = ElementStatusKind::approved;
555
557
  attribute :>> acceptanceCriteria = "FlowRate_output = 0";
556
558
  attribute :>> subjectDescription = "ON > IDLE mode";
557
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 14)";
559
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 14)"; }
558
560
  }
559
561
  requirement reqCs15 : Requirement {
560
562
  attribute :>> requirementKind = RequirementKind::system;
561
- attribute :>> id = "REQ-CS-15"; attribute :>> name = "IdleTimeNotification";
563
+ @MemoIdentity { :>> providedId = "REQ-CS-15"; } attribute :>> name = "IdleTimeNotification";
562
564
  attribute :>> statement = "While in IDLE mode for more than Max_IDLE_Duration_const, the system shall take actions as defined in REQ 59 for 'IDLE Time'.";
563
565
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
564
566
  attribute :>> concernKind = ConcernKind::safety;
565
567
  attribute :>> status = ElementStatusKind::approved;
566
568
  attribute :>> acceptanceCriteria = "time in IDLE > Max_IDLE_Duration_const => 'IDLE Time' actions taken";
567
569
  attribute :>> subjectDescription = "ON > IDLE mode";
568
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 15)";
570
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 15)"; }
569
571
  }
570
572
 
571
573
  // ── §4.1.5 ON > THERAPY mode ────────────────────────────────
572
574
  requirement reqCs16 : Requirement {
573
575
  attribute :>> requirementKind = RequirementKind::system;
574
- attribute :>> id = "REQ-CS-16"; attribute :>> name = "TherapyDeliveryWithinTolerance";
576
+ @MemoIdentity { :>> providedId = "REQ-CS-16"; } attribute :>> name = "TherapyDeliveryWithinTolerance";
575
577
  attribute :>> statement = "While in THERAPY mode, the system shall deliver the drug as per the respective sub-mode's programmed flow rate, FlowRate_Mode_macro, within a tolerance of Tolerance_Max_const.";
576
578
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
577
579
  attribute :>> concernKind = ConcernKind::safety;
578
580
  attribute :>> status = ElementStatusKind::approved;
579
581
  attribute :>> acceptanceCriteria = "FlowRate_output < FlowRate_Mode_macro + Tolerance_Max_const";
580
582
  attribute :>> subjectDescription = "ON > THERAPY mode";
581
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 16)";
583
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 16)"; }
582
584
  }
583
585
  requirement reqCs17 : Requirement {
584
586
  attribute :>> requirementKind = RequirementKind::system;
585
- attribute :>> id = "REQ-CS-17"; attribute :>> name = "UnderInfusionFlowRateNotification";
587
+ @MemoIdentity { :>> providedId = "REQ-CS-17"; } attribute :>> name = "UnderInfusionFlowRateNotification";
586
588
  attribute :>> statement = "While in THERAPY mode, the system shall take actions as defined in REQ 59 for 'Under Infusion FlowRate' if the output flow rate falls below the mode flow rate beyond the tolerance windows.";
587
589
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
588
590
  attribute :>> concernKind = ConcernKind::safety;
589
591
  attribute :>> status = ElementStatusKind::approved;
590
592
  attribute :>> acceptanceCriteria = "FlowRate_output < FlowRate_Mode_macro - Tolerance_Min_const for more than Max_Duration_UnderInfusion_const OR FlowRate_output < FlowRate_Mode_macro - Tolerance_Max_const OR FlowRate_output < FlowRate_lo_hd";
591
593
  attribute :>> subjectDescription = "ON > THERAPY mode";
592
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 17)";
594
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 17)"; }
593
595
  }
594
596
  requirement reqCs18 : Requirement {
595
597
  attribute :>> requirementKind = RequirementKind::system;
596
- attribute :>> id = "REQ-CS-18"; attribute :>> name = "LowReservoirNotification";
598
+ @MemoIdentity { :>> providedId = "REQ-CS-18"; } attribute :>> name = "LowReservoirNotification";
597
599
  attribute :>> statement = "While in THERAPY mode, when the current volume of drug in the reservoir is less than Low_Reservoir_const, the system shall perform the actions defined in REQ 59 for 'Low Reservoir'.";
598
600
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
599
601
  attribute :>> concernKind = ConcernKind::safety;
600
602
  attribute :>> status = ElementStatusKind::approved;
601
603
  attribute :>> acceptanceCriteria = "reservoir volume < Low_Reservoir_const => 'Low Reservoir' actions taken";
602
604
  attribute :>> subjectDescription = "ON > THERAPY mode";
603
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 18)";
605
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.1 (REQ 18)"; }
604
606
  }
605
607
  requirement reqCs19 : Requirement {
606
608
  attribute :>> requirementKind = RequirementKind::system;
607
- attribute :>> id = "REQ-CS-19"; attribute :>> name = "OverInfusionFlowRatePause";
609
+ @MemoIdentity { :>> providedId = "REQ-CS-19"; } attribute :>> name = "OverInfusionFlowRatePause";
608
610
  attribute :>> statement = "While in THERAPY mode, the system shall transition to PAUSED mode and perform the actions described in REQ 59 for 'Over Infusion FlowRate' if the output flow rate exceeds the mode flow rate beyond the tolerance windows.";
609
611
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
610
612
  attribute :>> concernKind = ConcernKind::safety;
611
613
  attribute :>> status = ElementStatusKind::approved;
612
614
  attribute :>> acceptanceCriteria = "FlowRate_output > FlowRate_Mode_macro + Tolerance_Min_const for more than Max_Duration_OverInfusion_const OR FlowRate_output > FlowRate_Mode_macro + Tolerance_Max_const OR FlowRate_output > FlowRate_hi_hd";
613
615
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
614
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 19)";
616
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 19)"; }
615
617
  }
616
618
  requirement reqCs20 : Requirement {
617
619
  attribute :>> requirementKind = RequirementKind::system;
618
- attribute :>> id = "REQ-CS-20"; attribute :>> name = "OverInfusionVtbiPause";
620
+ @MemoIdentity { :>> providedId = "REQ-CS-20"; } attribute :>> name = "OverInfusionVtbiPause";
619
621
  attribute :>> statement = "While in THERAPY mode, the system shall transition to PAUSED mode and take the actions described in REQ 59 for 'Over Infusion VTBI' if the actual volume infused exceeds the drug-database maximum VTBI.";
620
622
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
621
623
  attribute :>> concernKind = ConcernKind::safety;
622
624
  attribute :>> status = ElementStatusKind::approved;
623
625
  attribute :>> acceptanceCriteria = "Actual_Volume_Infused_macro > VTBI_hi_hd";
624
626
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
625
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20)";
627
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20)"; }
626
628
  }
627
629
  requirement reqCs21 : Requirement {
628
630
  attribute :>> requirementKind = RequirementKind::system;
629
- attribute :>> id = "REQ-CS-21"; attribute :>> name = "AirEmbolismPause";
631
+ @MemoIdentity { :>> providedId = "REQ-CS-21"; } attribute :>> name = "AirEmbolismPause";
630
632
  attribute :>> statement = "While in THERAPY mode, the system shall transition to PAUSED mode and perform the actions defined in REQ 59 for 'Air embolism' if an air bubble of a volume larger than Single_AirBubble_Volume_const flows through the hose, or the sum of volume of all air bubbles flowing through the hose exceeds Cumulative_AirBubble_Volume_const for the same time interval defined for Cumulative_AirBubble_Volume_const.";
631
633
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
632
634
  attribute :>> concernKind = ConcernKind::safety;
633
635
  attribute :>> status = ElementStatusKind::approved;
634
636
  attribute :>> acceptanceCriteria = "single bubble volume > Single_AirBubble_Volume_const OR cumulative bubble volume > Cumulative_AirBubble_Volume_const";
635
637
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
636
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21)";
638
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21)"; }
637
639
  }
638
640
  requirement reqCs22 : Requirement {
639
641
  attribute :>> requirementKind = RequirementKind::system;
640
- attribute :>> id = "REQ-CS-22"; attribute :>> name = "ReverseDeliveryPause";
642
+ @MemoIdentity { :>> providedId = "REQ-CS-22"; } attribute :>> name = "ReverseDeliveryPause";
641
643
  attribute :>> statement = "While in THERAPY mode, the system shall transition to PAUSED mode and perform actions defined in REQ 59 for 'Reverse Delivery' if there is continuous reverse delivery for more than Rev_Delivery_Continuous_Duration_const, or the cumulative time of all reverse delivery episodes exceeds Rev_Delivery_Cumulative_Duration_const.";
642
644
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
643
645
  attribute :>> concernKind = ConcernKind::safety;
644
646
  attribute :>> status = ElementStatusKind::approved;
645
647
  attribute :>> acceptanceCriteria = "continuous reverse delivery > Rev_Delivery_Continuous_Duration_const OR cumulative reverse delivery > Rev_Delivery_Cumulative_Duration_const";
646
648
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
647
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22)";
649
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22)"; }
648
650
  }
649
651
  requirement reqCs23 : Requirement {
650
652
  attribute :>> requirementKind = RequirementKind::system;
651
- attribute :>> id = "REQ-CS-23"; attribute :>> name = "EmptyReservoirPause";
653
+ @MemoIdentity { :>> providedId = "REQ-CS-23"; } attribute :>> name = "EmptyReservoirPause";
652
654
  attribute :>> statement = "While in THERAPY mode and if the volume of drug in the reservoir is less than Empty_Reservoir_const, the system shall transition to PAUSED mode and perform actions as listed in REQ 59 for 'Empty Reservoir'.";
653
655
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
654
656
  attribute :>> concernKind = ConcernKind::safety;
655
657
  attribute :>> status = ElementStatusKind::approved;
656
658
  attribute :>> acceptanceCriteria = "reservoir volume < Empty_Reservoir_const => mode = PAUSED and 'Empty Reservoir' actions taken";
657
659
  attribute :>> subjectDescription = "ON > THERAPY mode transitions";
658
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 23)";
660
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 23)"; }
659
661
  }
660
662
 
661
663
  // ── §4.1.6 ON > THERAPY > ACTIVE mode ───────────────────────
662
664
  requirement reqCs24 : Requirement {
663
665
  attribute :>> requirementKind = RequirementKind::system;
664
- attribute :>> id = "REQ-CS-24"; attribute :>> name = "SquareBolusAutoSchedule";
666
+ @MemoIdentity { :>> providedId = "REQ-CS-24"; } attribute :>> name = "SquareBolusAutoSchedule";
665
667
  attribute :>> statement = "While in ACTIVE mode, the system shall schedule to start a SQUARE BOLUS every Interval_sbolus_prog and end after Duration_sbolus_prog during the Duration_total_prog.";
666
668
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
667
669
  attribute :>> concernKind = ConcernKind::safety;
668
670
  attribute :>> status = ElementStatusKind::approved;
669
671
  attribute :>> acceptanceCriteria = "Square boluses are auto-scheduled by the system every Interval_sbolus_prog for Duration_sbolus_prog; no external trigger is required.";
670
672
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode";
671
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 24)";
673
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 24)"; }
672
674
  }
673
675
  requirement reqCs25 : Requirement {
674
676
  attribute :>> requirementKind = RequirementKind::system;
675
- attribute :>> id = "REQ-CS-25"; attribute :>> name = "IgnorePatientBolusRequestConditions";
677
+ @MemoIdentity { :>> providedId = "REQ-CS-25"; } attribute :>> name = "IgnorePatientBolusRequestConditions";
676
678
  attribute :>> statement = "While in ACTIVE mode, when BolusRequest_prog, the system shall ignore the patient bolus request (BolusRequest_prog = FALSE) if: (1) Inhibited_Infusion_macro = TRUE, OR (2) Inhibited_PatientBolus_macro = TRUE, OR (3) the interval between the most recent PATIENT BOLUS mode end time and the current BolusRequest_prog time violates LockOutPeriod_pbolus_prog, OR (4) the total number of delivered patient boluses for the current prescription violates the programmed maximum number of patient boluses, OR (5) the system is currently in PATIENT BOLUS mode.";
677
679
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
678
680
  attribute :>> concernKind = ConcernKind::safety;
679
681
  attribute :>> status = ElementStatusKind::approved;
680
682
  attribute :>> acceptanceCriteria = "Source formal conditions: (3) (BolusRequest_prog time - most recent PATIENT BOLUS end time) > LockOutPeriod_pbolus_prog; (4) sum of occurrences of all PATIENT BOLUS modes > NumberMax_pbolus_prog (source prose and formal expressions are inconsistent; transcribed as written).";
681
683
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode";
682
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 25)";
684
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 25)"; }
683
685
  }
684
686
  requirement reqCs26 : Requirement {
685
687
  attribute :>> requirementKind = RequirementKind::system;
686
- attribute :>> id = "REQ-CS-26"; attribute :>> name = "FrequentBolusRequestsNotification";
688
+ @MemoIdentity { :>> providedId = "REQ-CS-26"; } attribute :>> name = "FrequentBolusRequestsNotification";
687
689
  attribute :>> statement = "While in ACTIVE mode, the system shall perform the actions described in REQ 59 for 'Frequent Bolus Requests' if the condition described in REQ 25.3 or REQ 25.5 occurs.";
688
690
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
689
691
  attribute :>> concernKind = ConcernKind::safety;
690
692
  attribute :>> status = ElementStatusKind::approved;
691
693
  attribute :>> acceptanceCriteria = "REQ 25 condition 3 or 5 => 'Frequent Bolus Requests' actions taken";
692
694
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode";
693
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 26)";
695
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 26)"; }
694
696
  }
695
697
  requirement reqCs27 : Requirement {
696
698
  attribute :>> requirementKind = RequirementKind::system;
697
- attribute :>> id = "REQ-CS-27"; attribute :>> name = "BolusExceededNotification";
699
+ @MemoIdentity { :>> providedId = "REQ-CS-27"; } attribute :>> name = "BolusExceededNotification";
698
700
  attribute :>> statement = "While in ACTIVE mode, the system shall perform the actions described in REQ 59 for 'Bolus Exceeded' if the condition described in REQ 25.4 occurs.";
699
701
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
700
702
  attribute :>> concernKind = ConcernKind::safety;
701
703
  attribute :>> status = ElementStatusKind::approved;
702
704
  attribute :>> acceptanceCriteria = "REQ 25 condition 4 => 'Bolus Exceeded' actions taken";
703
705
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode";
704
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 27)";
706
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 27)"; }
705
707
  }
706
708
  requirement reqCs28 : Requirement {
707
709
  attribute :>> requirementKind = RequirementKind::system;
708
- attribute :>> id = "REQ-CS-28"; attribute :>> name = "InfusionCompleteToIdle";
710
+ @MemoIdentity { :>> providedId = "REQ-CS-28"; } attribute :>> name = "InfusionCompleteToIdle";
709
711
  attribute :>> statement = "While in ACTIVE mode, the system shall transition to IDLE and perform actions described in REQ 59 for 'Infusion Complete' if the actual duration of infusion is greater than or equal to the programmed prescription total duration, or the total volume infused is greater than or equal to the programmed prescription maximum VTBI.";
710
712
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
711
713
  attribute :>> concernKind = ConcernKind::safety;
712
714
  attribute :>> status = ElementStatusKind::approved;
713
715
  attribute :>> acceptanceCriteria = "Actual_Infusion_Duration_macro >= Duration_total_prog OR Actual_Volume_Infused_macro >= VTBI_total_prog";
714
716
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
715
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 28)";
717
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 28)"; }
716
718
  }
717
719
  requirement reqCs29 : Requirement {
718
720
  attribute :>> requirementKind = RequirementKind::system;
719
- attribute :>> id = "REQ-CS-29"; attribute :>> name = "ManualInhibitToPaused";
721
+ @MemoIdentity { :>> providedId = "REQ-CS-29"; } attribute :>> name = "ManualInhibitToPaused";
720
722
  attribute :>> statement = "While in ACTIVE mode, when Infusion_inhibit_prog, the system shall transition to PAUSED mode and perform actions described in REQ 59 for 'Infusion Manually Inhibited'.";
721
723
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
722
724
  attribute :>> concernKind = ConcernKind::safety;
723
725
  attribute :>> status = ElementStatusKind::approved;
724
726
  attribute :>> acceptanceCriteria = "Infusion_inhibit_prog => mode = PAUSED and 'Infusion Manually Inhibited' actions taken";
725
727
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
726
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 29)";
728
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 29)"; }
727
729
  }
728
730
  requirement reqCs30 : Requirement {
729
731
  attribute :>> requirementKind = RequirementKind::system;
730
- attribute :>> id = "REQ-CS-30"; attribute :>> name = "AllInhibitedToPaused";
732
+ @MemoIdentity { :>> providedId = "REQ-CS-30"; } attribute :>> name = "AllInhibitedToPaused";
731
733
  attribute :>> statement = "While in ACTIVE mode, when Inhibited_Infusion_macro = TRUE, Inhibited_Bolus_macro = TRUE and Inhibited_PatientBolus_macro = TRUE, the system shall transition to PAUSED mode.";
732
734
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
733
735
  attribute :>> concernKind = ConcernKind::safety;
734
736
  attribute :>> status = ElementStatusKind::approved;
735
737
  attribute :>> acceptanceCriteria = "Inhibited_Infusion_macro AND Inhibited_Bolus_macro AND Inhibited_PatientBolus_macro => mode = PAUSED";
736
738
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
737
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 30)";
739
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 30)"; }
738
740
  }
739
741
  requirement reqCs31 : Requirement {
740
742
  attribute :>> requirementKind = RequirementKind::system;
741
- attribute :>> id = "REQ-CS-31"; attribute :>> name = "BasalToSquareBolus";
743
+ @MemoIdentity { :>> providedId = "REQ-CS-31"; } attribute :>> name = "BasalToSquareBolus";
742
744
  attribute :>> statement = "While in BASAL mode, when SQUARE BOLUS is initiated as described in REQ 24, the system shall transition to SQUARE BOLUS mode if (1) Inhibited_Bolus_macro = FALSE, AND (2) Inhibited_Infusion_macro = FALSE, AND (3) either there is no BolusRequest_prog, or there is a BolusRequest_prog and at least one of the conditions listed in REQ 25 is true.";
743
745
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
744
746
  attribute :>> concernKind = ConcernKind::safety;
745
747
  attribute :>> status = ElementStatusKind::approved;
746
748
  attribute :>> acceptanceCriteria = "NOT Inhibited_Bolus_macro AND NOT Inhibited_Infusion_macro AND (no BolusRequest_prog OR a REQ 25 ignore condition holds)";
747
749
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
748
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 31)";
750
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 31)"; }
749
751
  }
750
752
  requirement reqCs32 : Requirement {
751
753
  attribute :>> requirementKind = RequirementKind::system;
752
- attribute :>> id = "REQ-CS-32"; attribute :>> name = "BasalToPatientBolus";
754
+ @MemoIdentity { :>> providedId = "REQ-CS-32"; } attribute :>> name = "BasalToPatientBolus";
753
755
  attribute :>> statement = "While in BASAL mode, the system shall transition to PATIENT BOLUS mode when BolusRequest_prog and none of the conditions listed in REQ 25 are true.";
754
756
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
755
757
  attribute :>> concernKind = ConcernKind::safety;
756
758
  attribute :>> status = ElementStatusKind::approved;
757
759
  attribute :>> acceptanceCriteria = "BolusRequest_prog AND no REQ 25 ignore condition holds => mode = PATIENT BOLUS";
758
760
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
759
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 32)";
761
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 32)"; }
760
762
  }
761
763
  requirement reqCs33 : Requirement {
762
764
  attribute :>> requirementKind = RequirementKind::system;
763
- attribute :>> id = "REQ-CS-33"; attribute :>> name = "SquareBolusToPatientBolus";
765
+ @MemoIdentity { :>> providedId = "REQ-CS-33"; } attribute :>> name = "SquareBolusToPatientBolus";
764
766
  attribute :>> statement = "While in SQUARE BOLUS mode, the system shall transition to PATIENT BOLUS mode if BolusRequest_prog and none of the conditions listed in REQ 25 are true.";
765
767
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
766
768
  attribute :>> concernKind = ConcernKind::safety;
767
769
  attribute :>> status = ElementStatusKind::approved;
768
770
  attribute :>> acceptanceCriteria = "BolusRequest_prog AND no REQ 25 ignore condition holds => mode = PATIENT BOLUS";
769
771
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
770
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 33)";
772
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 33)"; }
771
773
  }
772
774
  requirement reqCs34 : Requirement {
773
775
  attribute :>> requirementKind = RequirementKind::system;
774
- attribute :>> id = "REQ-CS-34"; attribute :>> name = "SquareBolusToBasal";
776
+ @MemoIdentity { :>> providedId = "REQ-CS-34"; } attribute :>> name = "SquareBolusToBasal";
775
777
  attribute :>> statement = "While in SQUARE BOLUS mode, if Inhibited_Bolus_macro = TRUE or the SQUARE BOLUS is scheduled to end (as described in REQ 24), the system shall transition to BASAL mode if (1) Inhibited_Infusion_macro = FALSE, AND (2) there is no BolusRequest_prog, or BolusRequest_prog and at least one of the conditions listed in REQ 25 is true.";
776
778
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
777
779
  attribute :>> concernKind = ConcernKind::safety;
778
780
  attribute :>> status = ElementStatusKind::approved;
779
781
  attribute :>> acceptanceCriteria = "(Inhibited_Bolus_macro OR scheduled end) AND NOT Inhibited_Infusion_macro AND (no BolusRequest_prog OR a REQ 25 ignore condition holds) => mode = BASAL";
780
782
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
781
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 34)";
783
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 34)"; }
782
784
  }
783
785
  requirement reqCs35 : Requirement {
784
786
  attribute :>> requirementKind = RequirementKind::system;
785
- attribute :>> id = "REQ-CS-35"; attribute :>> name = "PatientBolusToBasal";
787
+ @MemoIdentity { :>> providedId = "REQ-CS-35"; } attribute :>> name = "PatientBolusToBasal";
786
788
  attribute :>> statement = "While in PATIENT BOLUS mode, when Inhibited_PatientBolus_macro = TRUE or the total duration in the current PATIENT BOLUS mode is greater than or equal to Duration_pbolus_prog, the system shall stop the PATIENT BOLUS delivery and transition to BASAL mode if (1) Inhibited_Infusion_macro = FALSE, AND (2) no SQUARE BOLUS is scheduled to be in progress at the time of transition, OR (3) a SQUARE BOLUS is scheduled to be in progress at the time of transition and Inhibited_Bolus_macro = TRUE.";
787
789
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
788
790
  attribute :>> concernKind = ConcernKind::safety;
789
791
  attribute :>> status = ElementStatusKind::approved;
790
792
  attribute :>> acceptanceCriteria = "(Inhibited_PatientBolus_macro OR patient-bolus duration >= Duration_pbolus_prog) AND NOT Inhibited_Infusion_macro AND (no square bolus scheduled OR (square bolus scheduled AND Inhibited_Bolus_macro)) => mode = BASAL";
791
793
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
792
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 35)";
794
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 35)"; }
793
795
  }
794
796
  requirement reqCs36 : Requirement {
795
797
  attribute :>> requirementKind = RequirementKind::system;
796
- attribute :>> id = "REQ-CS-36"; attribute :>> name = "PatientBolusToSquareBolus";
798
+ @MemoIdentity { :>> providedId = "REQ-CS-36"; } attribute :>> name = "PatientBolusToSquareBolus";
797
799
  attribute :>> statement = "While in PATIENT BOLUS mode, when Inhibited_PatientBolus_macro = TRUE or the total duration in the current PATIENT BOLUS mode is greater than or equal to Duration_pbolus_prog, the system shall stop the PATIENT BOLUS delivery and transition to SQUARE BOLUS mode if (1) Inhibited_Infusion_macro = FALSE, AND (2) a SQUARE BOLUS is scheduled to be in progress at the time of transition, AND (3) Inhibited_Bolus_macro = FALSE.";
798
800
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
799
801
  attribute :>> concernKind = ConcernKind::safety;
800
802
  attribute :>> status = ElementStatusKind::approved;
801
803
  attribute :>> acceptanceCriteria = "(Inhibited_PatientBolus_macro OR patient-bolus duration >= Duration_pbolus_prog) AND NOT Inhibited_Infusion_macro AND square bolus scheduled AND NOT Inhibited_Bolus_macro => mode = SQUARE BOLUS";
802
804
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
803
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 36)";
805
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 36)"; }
804
806
  }
805
807
  requirement reqCs37 : Requirement {
806
808
  attribute :>> requirementKind = RequirementKind::system;
807
- attribute :>> id = "REQ-CS-37"; attribute :>> name = "BasalToPauseOnInhibit";
809
+ @MemoIdentity { :>> providedId = "REQ-CS-37"; } attribute :>> name = "BasalToPauseOnInhibit";
808
810
  attribute :>> statement = "While in BASAL mode, if Inhibited_Infusion_macro = TRUE, the system shall transition to PAUSE mode.";
809
811
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
810
812
  attribute :>> concernKind = ConcernKind::safety;
811
813
  attribute :>> status = ElementStatusKind::approved;
812
814
  attribute :>> acceptanceCriteria = "Inhibited_Infusion_macro => mode = PAUSED";
813
815
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
814
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 37)";
816
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 37)"; }
815
817
  }
816
818
  requirement reqCs38 : Requirement {
817
819
  attribute :>> requirementKind = RequirementKind::system;
818
- attribute :>> id = "REQ-CS-38"; attribute :>> name = "PatientBolusToPauseOnInhibit";
820
+ @MemoIdentity { :>> providedId = "REQ-CS-38"; } attribute :>> name = "PatientBolusToPauseOnInhibit";
819
821
  attribute :>> statement = "While in PATIENT BOLUS mode, the system shall transition to PAUSE mode if Inhibited_PatientBolus_macro = TRUE and Inhibited_Infusion_macro = TRUE.";
820
822
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
821
823
  attribute :>> concernKind = ConcernKind::safety;
822
824
  attribute :>> status = ElementStatusKind::approved;
823
825
  attribute :>> acceptanceCriteria = "Inhibited_PatientBolus_macro AND Inhibited_Infusion_macro => mode = PAUSED";
824
826
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
825
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 38)";
827
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 38)"; }
826
828
  }
827
829
  requirement reqCs39 : Requirement {
828
830
  attribute :>> requirementKind = RequirementKind::system;
829
- attribute :>> id = "REQ-CS-39"; attribute :>> name = "SquareBolusToPauseOnInhibit";
831
+ @MemoIdentity { :>> providedId = "REQ-CS-39"; } attribute :>> name = "SquareBolusToPauseOnInhibit";
830
832
  attribute :>> statement = "While in SQUARE BOLUS mode, the system shall transition to PAUSE mode if Inhibited_Bolus_macro = TRUE and Inhibited_Infusion_macro = TRUE.";
831
833
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
832
834
  attribute :>> concernKind = ConcernKind::safety;
833
835
  attribute :>> status = ElementStatusKind::approved;
834
836
  attribute :>> acceptanceCriteria = "Inhibited_Bolus_macro AND Inhibited_Infusion_macro => mode = PAUSED";
835
837
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE mode transitions";
836
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 39)";
838
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 39)"; }
837
839
  }
838
840
 
839
841
  // ── §4.1.7–4.1.9 BASAL / SQUARE BOLUS / PATIENT BOLUS ───────
840
842
  requirement reqCs40 : Requirement {
841
843
  attribute :>> requirementKind = RequirementKind::system;
842
- attribute :>> id = "REQ-CS-40"; attribute :>> name = "BasalDeliveryRate";
844
+ @MemoIdentity { :>> providedId = "REQ-CS-40"; } attribute :>> name = "BasalDeliveryRate";
843
845
  attribute :>> statement = "While in BASAL mode, the system shall deliver the drug at a flow rate FlowRate_basal_prog with a variation up to Tolerance_Max_const.";
844
846
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
845
847
  attribute :>> concernKind = ConcernKind::safety;
846
848
  attribute :>> status = ElementStatusKind::approved;
847
849
  attribute :>> acceptanceCriteria = "FlowRate_output within Tolerance_Max_const of FlowRate_basal_prog";
848
850
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE > BASAL mode";
849
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7.1 (REQ 40)";
851
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7.1 (REQ 40)"; }
850
852
  }
851
853
  requirement reqCs41 : Requirement {
852
854
  attribute :>> requirementKind = RequirementKind::system;
853
- attribute :>> id = "REQ-CS-41"; attribute :>> name = "SquareBolusDeliveryRate";
855
+ @MemoIdentity { :>> providedId = "REQ-CS-41"; } attribute :>> name = "SquareBolusDeliveryRate";
854
856
  attribute :>> statement = "While in SQUARE BOLUS mode, the system shall deliver the drug at a flow rate FlowRate_sbolus_prog with a variation up to Tolerance_Max_const.";
855
857
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
856
858
  attribute :>> concernKind = ConcernKind::safety;
857
859
  attribute :>> status = ElementStatusKind::approved;
858
860
  attribute :>> acceptanceCriteria = "FlowRate_output within Tolerance_Max_const of FlowRate_sbolus_prog";
859
861
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE > SQUARE BOLUS mode";
860
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8.1 (REQ 41)";
862
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8.1 (REQ 41)"; }
861
863
  }
862
864
  requirement reqCs42 : Requirement {
863
865
  attribute :>> requirementKind = RequirementKind::system;
864
- attribute :>> id = "REQ-CS-42"; attribute :>> name = "PatientBolusDeliveryRate";
866
+ @MemoIdentity { :>> providedId = "REQ-CS-42"; } attribute :>> name = "PatientBolusDeliveryRate";
865
867
  attribute :>> statement = "While in PATIENT BOLUS mode, the system shall deliver the drug at a flow rate FlowRate_pbolus_prog with a variation up to Tolerance_Max_const.";
866
868
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
867
869
  attribute :>> concernKind = ConcernKind::safety;
868
870
  attribute :>> status = ElementStatusKind::approved;
869
871
  attribute :>> acceptanceCriteria = "FlowRate_output within Tolerance_Max_const of FlowRate_pbolus_prog";
870
872
  attribute :>> subjectDescription = "ON > THERAPY > ACTIVE > PATIENT BOLUS mode";
871
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9.1 (REQ 42)";
873
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9.1 (REQ 42)"; }
872
874
  }
873
875
 
874
876
  // ── §4.1.10 ON > THERAPY > PAUSED mode ──────────────────────
875
877
  requirement reqCs43 : Requirement {
876
878
  attribute :>> requirementKind = RequirementKind::system;
877
- attribute :>> id = "REQ-CS-43"; attribute :>> name = "PausedKvoDelivery";
879
+ @MemoIdentity { :>> providedId = "REQ-CS-43"; } attribute :>> name = "PausedKvoDelivery";
878
880
  attribute :>> statement = "While in PAUSED mode, the system shall allow drug infusion at a flow rate FlowRate_kvo_hd with a variation up to Tolerance_Max_const, to keep the vein open when infusion is paused.";
879
881
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
880
882
  attribute :>> concernKind = ConcernKind::safety;
881
883
  attribute :>> status = ElementStatusKind::approved;
882
884
  attribute :>> acceptanceCriteria = "FlowRate_Mode_macro = FlowRate_kvo_hd; FlowRate_output within Tolerance_Max_const of FlowRate_kvo_hd (KVO flow, not zero)";
883
885
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode";
884
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 43)";
886
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 43)"; }
885
887
  }
886
888
  requirement reqCs44 : Requirement {
887
889
  attribute :>> requirementKind = RequirementKind::system;
888
- attribute :>> id = "REQ-CS-44"; attribute :>> name = "PausedTimeNotification";
890
+ @MemoIdentity { :>> providedId = "REQ-CS-44"; } attribute :>> name = "PausedTimeNotification";
889
891
  attribute :>> statement = "While in PAUSED mode for more than Max_PAUSED_Duration_const, the system shall perform actions as described in REQ 59 for 'PAUSED Time'.";
890
892
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
891
893
  attribute :>> concernKind = ConcernKind::safety;
892
894
  attribute :>> status = ElementStatusKind::approved;
893
895
  attribute :>> acceptanceCriteria = "time in PAUSED > Max_PAUSED_Duration_const => 'PAUSED Time' actions taken";
894
896
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode";
895
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 44)";
897
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 44)"; }
896
898
  }
897
899
  requirement reqCs45 : Requirement {
898
900
  attribute :>> requirementKind = RequirementKind::system;
899
- attribute :>> id = "REQ-CS-45"; attribute :>> name = "PausedInitiateWhileInhibitedNoTransition";
901
+ @MemoIdentity { :>> providedId = "REQ-CS-45"; } attribute :>> name = "PausedInitiateWhileInhibitedNoTransition";
900
902
  attribute :>> statement = "While in PAUSED mode, when Infusion_initiate_prog and Inhibited_Infusion_macro = TRUE, the system shall not perform any transition.";
901
903
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
902
904
  attribute :>> concernKind = ConcernKind::safety;
903
905
  attribute :>> status = ElementStatusKind::approved;
904
906
  attribute :>> acceptanceCriteria = "Infusion_initiate_prog AND Inhibited_Infusion_macro => mode unchanged";
905
907
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode";
906
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)";
908
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)"; }
907
909
  }
908
910
  requirement reqCs46 : Requirement {
909
911
  attribute :>> requirementKind = RequirementKind::system;
910
- attribute :>> id = "REQ-CS-46"; attribute :>> name = "PausedResumeToBasal";
912
+ @MemoIdentity { :>> providedId = "REQ-CS-46"; } attribute :>> name = "PausedResumeToBasal";
911
913
  attribute :>> statement = "While in PAUSED mode, when Infusion_initiate_prog and Inhibited_Infusion_macro = FALSE, the system shall transition to ON > THERAPY > ACTIVE > BASAL mode.";
912
914
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
913
915
  attribute :>> concernKind = ConcernKind::safety;
914
916
  attribute :>> status = ElementStatusKind::approved;
915
917
  attribute :>> acceptanceCriteria = "Infusion_initiate_prog AND NOT Inhibited_Infusion_macro => mode = ON > THERAPY > ACTIVE > BASAL";
916
918
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode transitions";
917
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.2 (REQ 46)";
919
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.2 (REQ 46)"; }
918
920
  }
919
921
  requirement reqCs47 : Requirement {
920
922
  attribute :>> requirementKind = RequirementKind::system;
921
- attribute :>> id = "REQ-CS-47"; attribute :>> name = "PausedInhibitToIdle";
923
+ @MemoIdentity { :>> providedId = "REQ-CS-47"; } attribute :>> name = "PausedInhibitToIdle";
922
924
  attribute :>> statement = "While in PAUSED mode, when Infusion_inhibit_prog, the system shall transition to ON > IDLE mode and perform actions as described in REQ 59 for 'Infusion Stopped Manually'.";
923
925
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
924
926
  attribute :>> concernKind = ConcernKind::safety;
925
927
  attribute :>> status = ElementStatusKind::approved;
926
928
  attribute :>> acceptanceCriteria = "Infusion_inhibit_prog => mode = ON > IDLE and 'Infusion Stopped Manually' actions taken";
927
929
  attribute :>> subjectDescription = "ON > THERAPY > PAUSED mode transitions";
928
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.2 (REQ 47)";
930
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.2 (REQ 47)"; }
929
931
  }
930
932
 
931
933
  // ═════ §4.2 Data Configuration Requirements ═════════════════
932
934
  requirement reqCs48 : Requirement {
933
935
  attribute :>> requirementKind = RequirementKind::system;
934
- attribute :>> id = "REQ-CS-48"; attribute :>> name = "DisplaySavedPrescriptionOnConfig";
936
+ @MemoIdentity { :>> providedId = "REQ-CS-48"; } attribute :>> name = "DisplaySavedPrescriptionOnConfig";
935
937
  attribute :>> statement = "When in ON mode, if DataConfig_prog as described in REQ 8, the system shall display the saved prescription and reservoir initial volume values or their default values (if there are no saved prescription and reservoir initial volume values) in the order listed in §3.1.1 and §3.1.3.";
936
938
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
937
939
  attribute :>> concernKind = ConcernKind::usability;
938
940
  attribute :>> status = ElementStatusKind::approved;
939
941
  attribute :>> acceptanceCriteria = "Displayed values equal saved values (or defaults) in the interface-specified order.";
940
942
  attribute :>> subjectDescription = "Data configuration";
941
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 48)";
943
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 48)"; }
942
944
  }
943
945
  requirement reqCs49 : Requirement {
944
946
  attribute :>> requirementKind = RequirementKind::system;
945
- attribute :>> id = "REQ-CS-49"; attribute :>> name = "EditValuesOneAtATime";
947
+ @MemoIdentity { :>> providedId = "REQ-CS-49"; } attribute :>> name = "EditValuesOneAtATime";
946
948
  attribute :>> statement = "When the prescription and reservoir initial volume data are displayed as described in REQ 48, the system shall allow editing the values one at a time in the order they are displayed.";
947
949
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
948
950
  attribute :>> concernKind = ConcernKind::usability;
949
951
  attribute :>> status = ElementStatusKind::approved;
950
952
  attribute :>> acceptanceCriteria = "Exactly one value is editable at a time, in display order.";
951
953
  attribute :>> subjectDescription = "Data configuration";
952
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 49)";
954
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 49)"; }
953
955
  }
954
956
  requirement reqCs50 : Requirement {
955
957
  attribute :>> requirementKind = RequirementKind::system;
956
- attribute :>> id = "REQ-CS-50"; attribute :>> name = "AllowInitiateWithNewValues";
958
+ @MemoIdentity { :>> providedId = "REQ-CS-50"; } attribute :>> name = "AllowInitiateWithNewValues";
957
959
  attribute :>> statement = "When the values are modified as described in REQ 49, the system shall allow infusion initiation with the new set of values (Infusion_initiate_prog).";
958
960
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
959
961
  attribute :>> concernKind = ConcernKind::usability;
960
962
  attribute :>> status = ElementStatusKind::approved;
961
963
  attribute :>> acceptanceCriteria = "Infusion_initiate_prog is accepted with the modified value set.";
962
964
  attribute :>> subjectDescription = "Data configuration";
963
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 50)";
965
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 50)"; }
964
966
  }
965
967
  requirement reqCs51 : Requirement {
966
968
  attribute :>> requirementKind = RequirementKind::system;
967
- attribute :>> id = "REQ-CS-51"; attribute :>> name = "ValidateValuesOnInitiate";
969
+ @MemoIdentity { :>> providedId = "REQ-CS-51"; } attribute :>> name = "ValidateValuesOnInitiate";
968
970
  attribute :>> statement = "When Infusion_initiate_prog as described in REQ 50, the system shall validate if all the values are consistent with the conditions specified in their respective Type Condition fields in §3.1.1 and §3.1.3.";
969
971
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
970
972
  attribute :>> concernKind = ConcernKind::safety;
971
973
  attribute :>> status = ElementStatusKind::approved;
972
974
  attribute :>> acceptanceCriteria = "Every entered value satisfies its Type Condition constraints before saving.";
973
975
  attribute :>> subjectDescription = "Data configuration";
974
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 51)";
976
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 51)"; }
975
977
  }
976
978
  requirement reqCs52 : Requirement {
977
979
  attribute :>> requirementKind = RequirementKind::system;
978
- attribute :>> id = "REQ-CS-52"; attribute :>> name = "DrugDatabaseNotReachable";
980
+ @MemoIdentity { :>> providedId = "REQ-CS-52"; } attribute :>> name = "DrugDatabaseNotReachable";
979
981
  attribute :>> statement = "When the system is validating data as described in REQ 51, if the system is unable to access the drug database safe values, the system shall not save the values and perform actions as described in REQ 59 for 'Drug database not reachable'.";
980
982
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
981
983
  attribute :>> concernKind = ConcernKind::safety;
982
984
  attribute :>> status = ElementStatusKind::approved;
983
985
  attribute :>> acceptanceCriteria = "Database unreachable => values not saved and 'Drug database not reachable' actions taken";
984
986
  attribute :>> subjectDescription = "Data configuration";
985
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 52)";
987
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 52)"; }
986
988
  }
987
989
  requirement reqCs53 : Requirement {
988
990
  attribute :>> requirementKind = RequirementKind::system;
989
- attribute :>> id = "REQ-CS-53"; attribute :>> name = "DrugSafeValueNotPresent";
991
+ @MemoIdentity { :>> providedId = "REQ-CS-53"; } attribute :>> name = "DrugSafeValueNotPresent";
990
992
  attribute :>> statement = "When the system is validating data as described in REQ 51, if any of the drug database safe values listed in §3.5 is not present, the system shall not perform the validation with respect to that missing field, perform actions as described in REQ 59 for 'Drug safe value not present' and continue validation.";
991
993
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
992
994
  attribute :>> concernKind = ConcernKind::safety;
993
995
  attribute :>> status = ElementStatusKind::approved;
994
996
  attribute :>> acceptanceCriteria = "Missing safe value => that field's validation skipped, 'Drug safe value not present' actions taken, validation continues";
995
997
  attribute :>> subjectDescription = "Data configuration";
996
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 53)";
998
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 53)"; }
997
999
  }
998
1000
  requirement reqCs54 : Requirement {
999
1001
  attribute :>> requirementKind = RequirementKind::system;
1000
- attribute :>> id = "REQ-CS-54"; attribute :>> name = "SaveValidatedPrescription";
1002
+ @MemoIdentity { :>> providedId = "REQ-CS-54"; } attribute :>> name = "SaveValidatedPrescription";
1001
1003
  attribute :>> statement = "If there are no notifications from REQ 51 and REQ 52, the system shall save the prescription values, clear all the notifications previously generated by REQ 51, REQ 52 and REQ 53 if any, and allow initiate infusion with the new values as described in REQ 9.";
1002
1004
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1003
1005
  attribute :>> concernKind = ConcernKind::safety;
1004
1006
  attribute :>> status = ElementStatusKind::approved;
1005
1007
  attribute :>> acceptanceCriteria = "Validation clean => values saved, prior validation notifications cleared, initiation enabled per REQ 9.";
1006
1008
  attribute :>> subjectDescription = "Data configuration";
1007
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 54)";
1009
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 54)"; }
1008
1010
  }
1009
1011
  requirement reqCs55 : Requirement {
1010
1012
  attribute :>> requirementKind = RequirementKind::system;
1011
- attribute :>> id = "REQ-CS-55"; attribute :>> name = "RejectInvalidPrescription";
1013
+ @MemoIdentity { :>> providedId = "REQ-CS-55"; } attribute :>> name = "RejectInvalidPrescription";
1012
1014
  attribute :>> statement = "If REQ 51 or REQ 52 had generated a notification, the system shall not save the prescription values, allow the clinician to edit the values of the fields as described in REQ 49 and then repeat steps from REQ 50 until all validations are passed as described in REQ 54.";
1013
1015
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1014
1016
  attribute :>> concernKind = ConcernKind::safety;
1015
1017
  attribute :>> status = ElementStatusKind::approved;
1016
1018
  attribute :>> acceptanceCriteria = "Validation notification present => values not saved; edit-and-revalidate loop until clean.";
1017
1019
  attribute :>> subjectDescription = "Data configuration";
1018
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 55)";
1020
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 55)"; }
1019
1021
  }
1020
1022
  requirement reqCs56 : Requirement {
1021
1023
  attribute :>> requirementKind = RequirementKind::system;
1022
- attribute :>> id = "REQ-CS-56"; attribute :>> name = "RemainInModeDuringConfig";
1024
+ @MemoIdentity { :>> providedId = "REQ-CS-56"; } attribute :>> name = "RemainInModeDuringConfig";
1023
1025
  attribute :>> statement = "While data configuration is in progress, the system shall remain in its current mode with the currently active prescription values, until infusion is initiated with the new prescription values as described in REQ 54.";
1024
1026
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1025
1027
  attribute :>> concernKind = ConcernKind::safety;
1026
1028
  attribute :>> status = ElementStatusKind::approved;
1027
1029
  attribute :>> acceptanceCriteria = "Mode and active prescription are unchanged during configuration.";
1028
1030
  attribute :>> subjectDescription = "Data configuration";
1029
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 56)";
1031
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 56)"; }
1030
1032
  }
1031
1033
  requirement reqCs57 : Requirement {
1032
1034
  attribute :>> requirementKind = RequirementKind::system;
1033
- attribute :>> id = "REQ-CS-57"; attribute :>> name = "ConfigWarningNotification";
1035
+ @MemoIdentity { :>> providedId = "REQ-CS-57"; } attribute :>> name = "ConfigWarningNotification";
1034
1036
  attribute :>> statement = "When the clinician has attempted to configure the data for more than Config_Warning_Duration_const continuously, the system shall perform actions as described in REQ 59 for 'Config Time'.";
1035
1037
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1036
1038
  attribute :>> concernKind = ConcernKind::usability;
1037
1039
  attribute :>> status = ElementStatusKind::approved;
1038
1040
  attribute :>> acceptanceCriteria = "continuous configuration time > Config_Warning_Duration_const => 'Config Time' actions taken";
1039
1041
  attribute :>> subjectDescription = "Data configuration";
1040
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 57)";
1042
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 57)"; }
1041
1043
  }
1042
1044
  requirement reqCs58 : Requirement {
1043
1045
  attribute :>> requirementKind = RequirementKind::system;
1044
- attribute :>> id = "REQ-CS-58"; attribute :>> name = "MaxConfigDurationClears";
1046
+ @MemoIdentity { :>> providedId = "REQ-CS-58"; } attribute :>> name = "MaxConfigDurationClears";
1045
1047
  attribute :>> statement = "When the clinician has attempted to configure the data for more than Max_Config_Duration_const continuously, the system shall clear all unsaved prescription values and shall perform actions as described in REQ 59 for 'Unsaved Configuration Cleared'.";
1046
1048
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1047
1049
  attribute :>> concernKind = ConcernKind::usability;
1048
1050
  attribute :>> status = ElementStatusKind::approved;
1049
1051
  attribute :>> acceptanceCriteria = "continuous configuration time > Max_Config_Duration_const => unsaved values cleared ('Unsaved Configuration Cleared' is referenced by the source but absent from the REQ 59 table — a documented source inconsistency).";
1050
1052
  attribute :>> subjectDescription = "Data configuration";
1051
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 58)";
1053
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.2 (REQ 58)"; }
1052
1054
  }
1053
1055
 
1054
1056
  // ═════ §4.3 Notification Requirements ═══════════════════════
1055
1057
  requirement reqCs59 : Requirement {
1056
1058
  attribute :>> requirementKind = RequirementKind::system;
1057
- attribute :>> id = "REQ-CS-59"; attribute :>> name = "NotificationActionTable";
1059
+ @MemoIdentity { :>> providedId = "REQ-CS-59"; } attribute :>> name = "NotificationActionTable";
1058
1060
  attribute :>> statement = "The system shall perform all the actions listed in the notification action table for the respective notification. The table defines, for each of the 20 notifications, its priority (High/Med/Low) and the actions Visual, Audio, Inhibit Infusion, Inhibit Square Bolus, Inhibit Patient Bolus, and Stop Bolus. Notification requirements have higher precedence over all other requirements in the system.";
1059
1061
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1060
1062
  attribute :>> concernKind = ConcernKind::safety;
1061
1063
  attribute :>> status = ElementStatusKind::approved;
1062
1064
  attribute :>> acceptanceCriteria = "For every raised notification, the actions equal the NOTIF-01..NOTIF-20 table row: Inhibit Infusion => Inhibited_Infusion_macro = TRUE; Inhibit Square Bolus => Inhibited_Bolus_macro = TRUE; Inhibit Patient Bolus => Inhibited_PatientBolus_macro = TRUE; Stop Bolus => stop all boluses in progress.";
1063
1065
  attribute :>> subjectDescription = "Notification handling (see NOTIF-01..NOTIF-20)";
1064
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 59)";
1066
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 59)"; }
1065
1067
  }
1066
1068
  requirement reqCs60 : Requirement {
1067
1069
  attribute :>> requirementKind = RequirementKind::system;
1068
- attribute :>> id = "REQ-CS-60"; attribute :>> name = "HighestPriorityActionsFirst";
1070
+ @MemoIdentity { :>> providedId = "REQ-CS-60"; } attribute :>> name = "HighestPriorityActionsFirst";
1069
1071
  attribute :>> statement = "When more than one notification having different priorities occurs at the same time, the system shall take actions listed for the highest priority notification.";
1070
1072
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1071
1073
  attribute :>> concernKind = ConcernKind::safety;
1072
1074
  attribute :>> status = ElementStatusKind::approved;
1073
1075
  attribute :>> acceptanceCriteria = "Simultaneous notifications with different priorities => actions of the highest priority notification are taken.";
1074
1076
  attribute :>> subjectDescription = "Notification precedence";
1075
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 60)";
1077
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 60)"; }
1076
1078
  }
1077
1079
  requirement reqCs61 : Requirement {
1078
1080
  attribute :>> requirementKind = RequirementKind::system;
1079
- attribute :>> id = "REQ-CS-61"; attribute :>> name = "MostRestrictiveSamePriority";
1081
+ @MemoIdentity { :>> providedId = "REQ-CS-61"; } attribute :>> name = "MostRestrictiveSamePriority";
1080
1082
  attribute :>> statement = "When more than one notification having same priorities and different set of actions occurs at the same time, the system shall take actions listed for the most restrictive notification.";
1081
1083
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1082
1084
  attribute :>> concernKind = ConcernKind::safety;
1083
1085
  attribute :>> status = ElementStatusKind::approved;
1084
1086
  attribute :>> acceptanceCriteria = "Order of restriction: Inhibit All Infusion > Inhibit Square Bolus > Inhibit Patient Bolus.";
1085
1087
  attribute :>> subjectDescription = "Notification precedence";
1086
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 61)";
1088
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 61)"; }
1087
1089
  }
1088
1090
  requirement reqCs62 : Requirement {
1089
1091
  attribute :>> requirementKind = RequirementKind::system;
1090
- attribute :>> id = "REQ-CS-62"; attribute :>> name = "MostRestrictiveTieBreak";
1092
+ @MemoIdentity { :>> providedId = "REQ-CS-62"; } attribute :>> name = "MostRestrictiveTieBreak";
1091
1093
  attribute :>> statement = "When more than one notification having same priorities and same set of actions occurs at the same time, the system will take actions for the notification that has the most restrictive actions as listed in REQ 59.";
1092
1094
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1093
1095
  attribute :>> concernKind = ConcernKind::safety;
1094
1096
  attribute :>> status = ElementStatusKind::approved;
1095
1097
  attribute :>> acceptanceCriteria = "Tie on priority and actions => REQ 59 restriction ordering breaks the tie.";
1096
1098
  attribute :>> subjectDescription = "Notification precedence";
1097
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 62)";
1099
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 62)"; }
1098
1100
  }
1099
1101
  requirement reqCs63 : Requirement {
1100
1102
  attribute :>> requirementKind = RequirementKind::system;
1101
- attribute :>> id = "REQ-CS-63"; attribute :>> name = "EscalateToMoreRestrictive";
1103
+ @MemoIdentity { :>> providedId = "REQ-CS-63"; } attribute :>> name = "EscalateToMoreRestrictive";
1102
1104
  attribute :>> statement = "While a low priority or less restrictive notification is in effect and a higher priority or more restrictive same-priority notification occurs, the system shall take actions for the high priority or more restrictive notification as listed in REQ 59.";
1103
1105
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1104
1106
  attribute :>> concernKind = ConcernKind::safety;
1105
1107
  attribute :>> status = ElementStatusKind::approved;
1106
1108
  attribute :>> acceptanceCriteria = "In-effect notification is superseded by a higher-priority or more restrictive notification.";
1107
1109
  attribute :>> subjectDescription = "Notification precedence";
1108
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 63)";
1110
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 63)"; }
1109
1111
  }
1110
1112
  requirement reqCs64 : Requirement {
1111
1113
  attribute :>> requirementKind = RequirementKind::system;
1112
- attribute :>> id = "REQ-CS-64"; attribute :>> name = "LowPriorityListedOnly";
1114
+ @MemoIdentity { :>> providedId = "REQ-CS-64"; } attribute :>> name = "LowPriorityListedOnly";
1113
1115
  attribute :>> statement = "While a high priority notification is in effect and a low priority notification occurs, the system shall only add the notification to the active notification list and shall not take any other actions for the low priority notification.";
1114
1116
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1115
1117
  attribute :>> concernKind = ConcernKind::safety;
1116
1118
  attribute :>> status = ElementStatusKind::approved;
1117
1119
  attribute :>> acceptanceCriteria = "Lower-priority notification is listed but its actions are not taken while a higher-priority notification is in effect.";
1118
1120
  attribute :>> subjectDescription = "Notification precedence";
1119
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 64)";
1121
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 64)"; }
1120
1122
  }
1121
1123
  requirement reqCs65 : Requirement {
1122
1124
  attribute :>> requirementKind = RequirementKind::system;
1123
- attribute :>> id = "REQ-CS-65"; attribute :>> name = "CancelNotificationsOneAtATime";
1125
+ @MemoIdentity { :>> providedId = "REQ-CS-65"; } attribute :>> name = "CancelNotificationsOneAtATime";
1124
1126
  attribute :>> statement = "The system shall allow the clinician to cancel the active notifications, starting from the first in the list, one at a time (Notification_cancel_prog).";
1125
1127
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1126
1128
  attribute :>> concernKind = ConcernKind::usability;
1127
1129
  attribute :>> status = ElementStatusKind::approved;
1128
1130
  attribute :>> acceptanceCriteria = "Cancellation proceeds one notification at a time from the head of the list.";
1129
1131
  attribute :>> subjectDescription = "Notification cancellation";
1130
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 65)";
1132
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 65)"; }
1131
1133
  }
1132
1134
  requirement reqCs66 : Requirement {
1133
1135
  attribute :>> requirementKind = RequirementKind::system;
1134
- attribute :>> id = "REQ-CS-66"; attribute :>> name = "CancelClearsRestrictions";
1136
+ @MemoIdentity { :>> providedId = "REQ-CS-66"; } attribute :>> name = "CancelClearsRestrictions";
1135
1137
  attribute :>> statement = "When Notification_cancel_prog for a notification, the system shall cancel and clear the restrictions for that notification: Inhibited_Infusion_macro = FALSE, Inhibited_Bolus_macro = FALSE, Inhibited_PatientBolus_macro = FALSE, and cancel and clear the corresponding audio notification.";
1136
1138
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1137
1139
  attribute :>> concernKind = ConcernKind::safety;
1138
1140
  attribute :>> status = ElementStatusKind::approved;
1139
1141
  attribute :>> acceptanceCriteria = "After cancel: Inhibited_Infusion_macro = FALSE AND Inhibited_Bolus_macro = FALSE AND Inhibited_PatientBolus_macro = FALSE AND audio cleared for that notification.";
1140
1142
  attribute :>> subjectDescription = "Notification cancellation";
1141
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 66)";
1143
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 66)"; }
1142
1144
  }
1143
1145
  requirement reqCs67 : Requirement {
1144
1146
  attribute :>> requirementKind = RequirementKind::system;
1145
- attribute :>> id = "REQ-CS-67"; attribute :>> name = "NextNotificationAfterCancel";
1147
+ @MemoIdentity { :>> providedId = "REQ-CS-67"; } attribute :>> name = "NextNotificationAfterCancel";
1146
1148
  attribute :>> statement = "When Notification_cancel_prog for a notification, the system takes actions for the next active notification in order of priority and descending order of occurrence.";
1147
1149
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1148
1150
  attribute :>> concernKind = ConcernKind::safety;
1149
1151
  attribute :>> status = ElementStatusKind::approved;
1150
1152
  attribute :>> acceptanceCriteria = "After cancel, the next active notification (by priority, then recency) becomes the notification in effect.";
1151
1153
  attribute :>> subjectDescription = "Notification cancellation";
1152
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 67)";
1154
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 (REQ 67)"; }
1153
1155
  }
1154
1156
 
1155
1157
  // ── §4.3.1 Visual notification ──────────────────────────────
1156
1158
  requirement reqCs68 : Requirement {
1157
1159
  attribute :>> requirementKind = RequirementKind::system;
1158
- attribute :>> id = "REQ-CS-68"; attribute :>> name = "DisplayActiveNotificationsOrdered";
1160
+ @MemoIdentity { :>> providedId = "REQ-CS-68"; } attribute :>> name = "DisplayActiveNotificationsOrdered";
1159
1161
  attribute :>> statement = "The system shall display all active notifications in order of priority and descending order of occurrence (Notification_Visual_output).";
1160
1162
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1161
1163
  attribute :>> concernKind = ConcernKind::usability;
1162
1164
  attribute :>> status = ElementStatusKind::approved;
1163
1165
  attribute :>> acceptanceCriteria = "Notification_Visual_output lists active notifications ordered by priority, then most recent first.";
1164
1166
  attribute :>> subjectDescription = "Visual notification";
1165
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 68)";
1167
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 68)"; }
1166
1168
  }
1167
1169
  requirement reqCs69 : Requirement {
1168
1170
  attribute :>> requirementKind = RequirementKind::system;
1169
- attribute :>> id = "REQ-CS-69"; attribute :>> name = "DisplayNotificationNameAndTime";
1171
+ @MemoIdentity { :>> providedId = "REQ-CS-69"; } attribute :>> name = "DisplayNotificationNameAndTime";
1170
1172
  attribute :>> statement = "The system shall display the name of all the active notifications and the time of the occurrence.";
1171
1173
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1172
1174
  attribute :>> concernKind = ConcernKind::usability;
1173
1175
  attribute :>> status = ElementStatusKind::approved;
1174
1176
  attribute :>> acceptanceCriteria = "Every active notification is shown with name and occurrence time.";
1175
1177
  attribute :>> subjectDescription = "Visual notification";
1176
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 69)";
1178
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 69)"; }
1177
1179
  }
1178
1180
  requirement reqCs70 : Requirement {
1179
1181
  attribute :>> requirementKind = RequirementKind::system;
1180
- attribute :>> id = "REQ-CS-70"; attribute :>> name = "DisplaySimultaneousNotifications";
1182
+ @MemoIdentity { :>> providedId = "REQ-CS-70"; } attribute :>> name = "DisplaySimultaneousNotifications";
1181
1183
  attribute :>> statement = "When more than one notification occurs at the same time, the system shall display all the notifications as per REQ 68.";
1182
1184
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1183
1185
  attribute :>> concernKind = ConcernKind::usability;
1184
1186
  attribute :>> status = ElementStatusKind::approved;
1185
1187
  attribute :>> acceptanceCriteria = "Simultaneous notifications are all displayed in REQ 68 order.";
1186
1188
  attribute :>> subjectDescription = "Visual notification";
1187
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 70)";
1189
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 70)"; }
1188
1190
  }
1189
1191
  requirement reqCs71 : Requirement {
1190
1192
  attribute :>> requirementKind = RequirementKind::system;
1191
- attribute :>> id = "REQ-CS-71"; attribute :>> name = "RemoveCancelledNotificationFromList";
1193
+ @MemoIdentity { :>> providedId = "REQ-CS-71"; } attribute :>> name = "RemoveCancelledNotificationFromList";
1192
1194
  attribute :>> statement = "When Notification_cancel_prog for a notification, the system shall remove the notification from the list and shall display the list of remaining notifications.";
1193
1195
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1194
1196
  attribute :>> concernKind = ConcernKind::usability;
1195
1197
  attribute :>> status = ElementStatusKind::approved;
1196
1198
  attribute :>> acceptanceCriteria = "Cancelled notification disappears from the displayed list; remaining list stays displayed.";
1197
1199
  attribute :>> subjectDescription = "Visual notification";
1198
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 71)";
1200
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.1 (REQ 71)"; }
1199
1201
  }
1200
1202
 
1201
1203
  // ── §4.3.2 Audio notification ───────────────────────────────
1202
1204
  requirement reqCs72 : Requirement {
1203
1205
  attribute :>> requirementKind = RequirementKind::system;
1204
- attribute :>> id = "REQ-CS-72"; attribute :>> name = "AudibleSoundPerNotification";
1206
+ @MemoIdentity { :>> providedId = "REQ-CS-72"; } attribute :>> name = "AudibleSoundPerNotification";
1205
1207
  attribute :>> statement = "When each notification occurs that requires an audio alarm as listed in REQ 59, the system shall produce a single audible sound of Audio_level_const, unless the audio is disabled or silenced.";
1206
1208
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1207
1209
  attribute :>> concernKind = ConcernKind::safety;
1208
1210
  attribute :>> status = ElementStatusKind::approved;
1209
1211
  attribute :>> acceptanceCriteria = "Audio-flagged notification => one audible sound at Audio_level_const (50 db for 2 seconds per I 8) unless Disable_audio_prog is set.";
1210
1212
  attribute :>> subjectDescription = "Audio notification";
1211
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 72)";
1213
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 72)"; }
1212
1214
  }
1213
1215
  requirement reqCs73 : Requirement {
1214
1216
  attribute :>> requirementKind = RequirementKind::system;
1215
- attribute :>> id = "REQ-CS-73"; attribute :>> name = "AudioDisableSilenceEnable";
1217
+ @MemoIdentity { :>> providedId = "REQ-CS-73"; } attribute :>> name = "AudioDisableSilenceEnable";
1216
1218
  attribute :>> statement = "The system shall allow the clinician to disable audible alarm, silence the alarm temporarily and enable a disabled or silenced alarm.";
1217
1219
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1218
1220
  attribute :>> concernKind = ConcernKind::usability;
1219
1221
  attribute :>> status = ElementStatusKind::approved;
1220
1222
  attribute :>> acceptanceCriteria = "Notification_Audio_output = FALSE if Disable_audio_prog = 'PERM' (disabled) or 'TEMP' (silenced); Notification_Audio_output = TRUE if Disable_audio_prog = FALSE.";
1221
1223
  attribute :>> subjectDescription = "Audio notification";
1222
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 73)";
1224
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 73)"; }
1223
1225
  }
1224
1226
  requirement reqCs74 : Requirement {
1225
1227
  attribute :>> requirementKind = RequirementKind::system;
1226
- attribute :>> id = "REQ-CS-74"; attribute :>> name = "NoAudioWhileDisabled";
1228
+ @MemoIdentity { :>> providedId = "REQ-CS-74"; } attribute :>> name = "NoAudioWhileDisabled";
1227
1229
  attribute :>> statement = "If Disable_audio_prog = 'PERM' or 'TEMP', the system shall not produce audible alarm until it is enabled (Disable_audio_prog = FALSE).";
1228
1230
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1229
1231
  attribute :>> concernKind = ConcernKind::usability;
1230
1232
  attribute :>> status = ElementStatusKind::approved;
1231
1233
  attribute :>> acceptanceCriteria = "No audible alarm while Disable_audio_prog is 'PERM' or 'TEMP'.";
1232
1234
  attribute :>> subjectDescription = "Audio notification";
1233
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 74)";
1235
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 74)"; }
1234
1236
  }
1235
1237
  requirement reqCs75 : Requirement {
1236
1238
  attribute :>> requirementKind = RequirementKind::system;
1237
- attribute :>> id = "REQ-CS-75"; attribute :>> name = "TempSilenceAutoReenable";
1239
+ @MemoIdentity { :>> providedId = "REQ-CS-75"; } attribute :>> name = "TempSilenceAutoReenable";
1238
1240
  attribute :>> statement = "If Disable_audio_prog = 'TEMP', the system shall automatically enable it (Disable_audio_prog = FALSE) after Audio_Enable_Duration_const minutes.";
1239
1241
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1240
1242
  attribute :>> concernKind = ConcernKind::safety;
1241
1243
  attribute :>> status = ElementStatusKind::approved;
1242
1244
  attribute :>> acceptanceCriteria = "Temporary silence expires after Audio_Enable_Duration_const (30) minutes.";
1243
1245
  attribute :>> subjectDescription = "Audio notification";
1244
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 75)";
1246
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 75)"; }
1245
1247
  }
1246
1248
  requirement reqCs76 : Requirement {
1247
1249
  attribute :>> requirementKind = RequirementKind::system;
1248
- attribute :>> id = "REQ-CS-76"; attribute :>> name = "ReannunciateLongActiveNotifications";
1250
+ @MemoIdentity { :>> providedId = "REQ-CS-76"; } attribute :>> name = "ReannunciateLongActiveNotifications";
1249
1251
  attribute :>> statement = "For every notification with audio alarm that is active for more than Audio_Enable_Duration_const minutes, the system shall produce audible sound as described in REQ 72.";
1250
1252
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1251
1253
  attribute :>> concernKind = ConcernKind::safety;
1252
1254
  attribute :>> status = ElementStatusKind::approved;
1253
1255
  attribute :>> acceptanceCriteria = "Audio-flagged notification active > Audio_Enable_Duration_const minutes => REQ 72 sound re-produced.";
1254
1256
  attribute :>> subjectDescription = "Audio notification";
1255
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 76)";
1257
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3.2 (REQ 76)"; }
1256
1258
  }
1257
1259
 
1258
1260
  // ═════ §4.4 Log Requirements ════════════════════════════════
1259
1261
  requirement reqCs77 : Requirement {
1260
1262
  attribute :>> requirementKind = RequirementKind::system;
1261
- attribute :>> id = "REQ-CS-77"; attribute :>> name = "LogWhileOn";
1263
+ @MemoIdentity { :>> providedId = "REQ-CS-77"; } attribute :>> name = "LogWhileOn";
1262
1264
  attribute :>> statement = "The system shall log all the operational and error data when the system is in ON mode.";
1263
1265
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1264
1266
  attribute :>> concernKind = ConcernKind::regulatory;
1265
1267
  attribute :>> status = ElementStatusKind::approved;
1266
1268
  attribute :>> acceptanceCriteria = "Operational log and error log are recorded whenever the system is in ON mode.";
1267
1269
  attribute :>> subjectDescription = "Logging";
1268
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 77)";
1270
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 77)"; }
1269
1271
  }
1270
1272
  requirement reqCs78 : Requirement {
1271
1273
  attribute :>> requirementKind = RequirementKind::system;
1272
- attribute :>> id = "REQ-CS-78"; attribute :>> name = "OperationalLogContent";
1274
+ @MemoIdentity { :>> providedId = "REQ-CS-78"; } attribute :>> name = "OperationalLogContent";
1273
1275
  attribute :>> statement = "While in ON mode, every Log_Interval_const minutes or when a mode transition occurs, the system shall record the following information in an 'Operational log': (1) date in dd/MM/yy format, (2) time in HH:MM:SS GMT, (3) Patient ID, (4) prescription information, (5) current mode of the system, (6) current flow rate of the system.";
1274
1276
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1275
1277
  attribute :>> concernKind = ConcernKind::regulatory;
1276
1278
  attribute :>> status = ElementStatusKind::approved;
1277
1279
  attribute :>> acceptanceCriteria = "Operational log entries appear every Log_Interval_const (5) minutes and on every mode transition, with all six fields.";
1278
1280
  attribute :>> subjectDescription = "Logging";
1279
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 78)";
1281
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 78)"; }
1280
1282
  }
1281
1283
  requirement reqCs79 : Requirement {
1282
1284
  attribute :>> requirementKind = RequirementKind::system;
1283
- attribute :>> id = "REQ-CS-79"; attribute :>> name = "InfusionCompleteLogContent";
1285
+ @MemoIdentity { :>> providedId = "REQ-CS-79"; } attribute :>> name = "InfusionCompleteLogContent";
1284
1286
  attribute :>> statement = "When infusion is completed as per REQ 28, the system shall record the following information in addition to the information listed in REQ 78 in the 'Operational log': (1) total volume infused for that prescription, (2) total duration of infusion for that prescription (total duration in ACTIVE mode).";
1285
1287
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1286
1288
  attribute :>> concernKind = ConcernKind::regulatory;
1287
1289
  attribute :>> status = ElementStatusKind::approved;
1288
1290
  attribute :>> acceptanceCriteria = "Infusion-complete log entry includes total volume infused and total ACTIVE-mode duration.";
1289
1291
  attribute :>> subjectDescription = "Logging";
1290
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 79)";
1292
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 79)"; }
1291
1293
  }
1292
1294
  requirement reqCs80 : Requirement {
1293
1295
  attribute :>> requirementKind = RequirementKind::system;
1294
- attribute :>> id = "REQ-CS-80"; attribute :>> name = "ErrorLogContent";
1296
+ @MemoIdentity { :>> providedId = "REQ-CS-80"; } attribute :>> name = "ErrorLogContent";
1295
1297
  attribute :>> statement = "When any notification condition listed in REQ 59 occurs, the system shall record the following information in an error log: (1) date in dd/MM/yy format, (2) time in HH:MM:SS GMT, (3) notification description, (4) current mode of the system, (5) remaining drug volume.";
1296
1298
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1297
1299
  attribute :>> concernKind = ConcernKind::regulatory;
1298
1300
  attribute :>> status = ElementStatusKind::approved;
1299
1301
  attribute :>> acceptanceCriteria = "Every REQ 59 notification produces an error log entry with all five fields.";
1300
1302
  attribute :>> subjectDescription = "Logging";
1301
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 80)";
1303
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 80)"; }
1302
1304
  }
1303
1305
  requirement reqCs81 : Requirement {
1304
1306
  attribute :>> requirementKind = RequirementKind::system;
1305
- attribute :>> id = "REQ-CS-81"; attribute :>> name = "NotificationCancelLogContent";
1307
+ @MemoIdentity { :>> providedId = "REQ-CS-81"; } attribute :>> name = "NotificationCancelLogContent";
1306
1308
  attribute :>> statement = "When a notification is cancelled as described in REQ 66, the system shall record the following information in the 'Operational log': (1) date in dd/MM/yy format, (2) time in HH:MM:SS GMT, (3) description of the notification cancelled.";
1307
1309
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1308
1310
  attribute :>> concernKind = ConcernKind::regulatory;
1309
1311
  attribute :>> status = ElementStatusKind::approved;
1310
1312
  attribute :>> acceptanceCriteria = "Every notification cancellation produces an operational log entry with all three fields.";
1311
1313
  attribute :>> subjectDescription = "Logging";
1312
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 81)";
1314
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.4 (REQ 81)"; }
1313
1315
  }
1314
1316
 
1315
1317
  // ═════ §4.5 Security Requirements ═══════════════════════════
1316
1318
  requirement reqCs82 : Requirement {
1317
1319
  attribute :>> requirementKind = RequirementKind::system;
1318
- attribute :>> id = "REQ-CS-82"; attribute :>> name = "AuthorizedCliniciansOnly";
1320
+ @MemoIdentity { :>> providedId = "REQ-CS-82"; } attribute :>> name = "AuthorizedCliniciansOnly";
1319
1321
  attribute :>> statement = "The system shall allow only authorized clinicians to configure the system.";
1320
1322
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1321
1323
  attribute :>> concernKind = ConcernKind::cybersecurity;
1322
1324
  attribute :>> status = ElementStatusKind::approved;
1323
1325
  attribute :>> acceptanceCriteria = "Configuration is rejected for unauthorized users.";
1324
1326
  attribute :>> subjectDescription = "System configuration access";
1325
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.5 (REQ 82)";
1327
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.5 (REQ 82)"; }
1326
1328
  }
1327
1329
 
1328
1330
  // ═════ Ch.5 Non-Behavioral Requirements ═════════════════════
1329
1331
  requirement reqCs83 : Requirement {
1330
1332
  attribute :>> requirementKind = RequirementKind::system;
1331
- attribute :>> id = "REQ-CS-83"; attribute :>> name = "DropResistance";
1333
+ @MemoIdentity { :>> providedId = "REQ-CS-83"; } attribute :>> name = "DropResistance";
1332
1334
  attribute :>> statement = "The system shall be unbreakable if it is dropped on a laminate floor from y m of height with no additional force than gravity.";
1333
1335
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1334
1336
  attribute :>> concernKind = ConcernKind::reliability;
1335
1337
  attribute :>> status = ElementStatusKind::approved;
1336
1338
  attribute :>> acceptanceCriteria = "Drop from height y m (value left open by the source) onto laminate floor causes no breakage.";
1337
1339
  attribute :>> subjectDescription = "GPCA enclosure";
1338
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 83)";
1340
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 83)"; }
1339
1341
  }
1340
1342
  requirement reqCs84 : Requirement {
1341
1343
  attribute :>> requirementKind = RequirementKind::system;
1342
- attribute :>> id = "REQ-CS-84"; attribute :>> name = "WaterResistance";
1344
+ @MemoIdentity { :>> providedId = "REQ-CS-84"; } attribute :>> name = "WaterResistance";
1343
1345
  attribute :>> statement = "The system shall be waterproof to non-acidic liquid of less than x ml on any side of the pump for a maximum of 2 hours.";
1344
1346
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1345
1347
  attribute :>> concernKind = ConcernKind::reliability;
1346
1348
  attribute :>> status = ElementStatusKind::approved;
1347
1349
  attribute :>> acceptanceCriteria = "Exposure to < x ml (value left open by the source) non-acidic liquid for up to 2 hours causes no ingress failure.";
1348
1350
  attribute :>> subjectDescription = "GPCA enclosure";
1349
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 84)";
1351
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 84)"; }
1350
1352
  }
1351
1353
  requirement reqCs85 : Requirement {
1352
1354
  attribute :>> requirementKind = RequirementKind::system;
1353
- attribute :>> id = "REQ-CS-85"; attribute :>> name = "LogRetention";
1355
+ @MemoIdentity { :>> providedId = "REQ-CS-85"; } attribute :>> name = "LogRetention";
1354
1356
  attribute :>> statement = "The system shall persist the most recent 30 days of error log data and 15 days of operational log data.";
1355
1357
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1356
1358
  attribute :>> concernKind = ConcernKind::regulatory;
1357
1359
  attribute :>> status = ElementStatusKind::approved;
1358
1360
  attribute :>> acceptanceCriteria = "error log retention >= Error_Log_Retention (30 days); operational log retention >= Operational_Log_Retention (15 days)";
1359
1361
  attribute :>> subjectDescription = "Logging";
1360
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 85)";
1362
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 85)"; }
1361
1363
  }
1362
1364
  requirement reqCs86 : Requirement {
1363
1365
  attribute :>> requirementKind = RequirementKind::system;
1364
- attribute :>> id = "REQ-CS-86"; attribute :>> name = "PrescriptionRetention";
1366
+ @MemoIdentity { :>> providedId = "REQ-CS-86"; } attribute :>> name = "PrescriptionRetention";
1365
1367
  attribute :>> statement = "The system shall persist the last saved prescription data for 15 days.";
1366
1368
  attribute :>> sourceKind = RequirementSourceKind::sourceDocument;
1367
1369
  attribute :>> concernKind = ConcernKind::regulatory;
1368
1370
  attribute :>> status = ElementStatusKind::approved;
1369
1371
  attribute :>> acceptanceCriteria = "saved prescription retention >= Prescription_Persist_Duration (15 days)";
1370
1372
  attribute :>> subjectDescription = "Prescription storage";
1371
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 86)";
1373
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §5.1 (REQ 86)"; }
1372
1374
  }
1373
1375
 
1374
1376
  // ═════ MEMO extension requirements (REQ-X) ══════════════════
@@ -1378,7 +1380,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1378
1380
  // them from the REQ-CS family.
1379
1381
  requirement reqDrugLibraryLimits : Requirement {
1380
1382
  attribute :>> requirementKind = RequirementKind::system;
1381
- attribute :>> id = "REQ-X-01"; attribute :>> name = "PrescriptionWithinDrugLibraryLimits";
1383
+ @MemoIdentity { :>> providedId = "REQ-X-01"; } attribute :>> name = "PrescriptionWithinDrugLibraryLimits";
1382
1384
  attribute :>> statement = "When a prescription parameter is entered, the system shall reject values outside drug-library hard limits and shall require explicit confirmation for values outside soft limits.";
1383
1385
  attribute :>> sourceKind = RequirementSourceKind::extension;
1384
1386
  attribute :>> concernKind = ConcernKind::safety;
@@ -1388,7 +1390,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1388
1390
  attribute :>> actorDescription = "clinician";
1389
1391
  attribute :>> assumptionSummary = "drug library installed and current";
1390
1392
  attribute :>> guaranteeSummary = "no out-of-range prescription can be activated";
1391
- attribute :>> sourceReference = "MEMO extension — hard/soft limit discipline beyond CriSys §4.2 validation (REQ-CS-51..55)";
1393
+ @MemoIdentity { :>> sourceReference = "MEMO extension — hard/soft limit discipline beyond CriSys §4.2 validation (REQ-CS-51..55)"; }
1392
1394
  attribute :>> notation = RequirementNotationKind::ears;
1393
1395
  attribute :>> earsPattern = EarsPatternKind::eventDriven;
1394
1396
  attribute :>> obligation = ObligationKind::shall;
@@ -1397,7 +1399,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1397
1399
  }
1398
1400
  requirement reqPost : Requirement {
1399
1401
  attribute :>> requirementKind = RequirementKind::system;
1400
- attribute :>> id = "REQ-X-02"; attribute :>> name = "PowerOnSelfTest";
1402
+ @MemoIdentity { :>> providedId = "REQ-X-02"; } attribute :>> name = "PowerOnSelfTest";
1401
1403
  attribute :>> statement = "On power-up, the system shall complete a self test of CPU, memory, watchdog, and safety sensors before permitting therapy, and shall remain locked out of therapy if any check fails.";
1402
1404
  attribute :>> sourceKind = RequirementSourceKind::extension;
1403
1405
  attribute :>> concernKind = ConcernKind::safety;
@@ -1407,7 +1409,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1407
1409
  attribute :>> actorDescription = "clinician";
1408
1410
  attribute :>> assumptionSummary = "hardware supports built-in test";
1409
1411
  attribute :>> guaranteeSummary = "no therapy on a device that failed self test";
1410
- attribute :>> sourceReference = "MEMO extension — POST is not specified by the CriSys source";
1412
+ @MemoIdentity { :>> sourceReference = "MEMO extension — POST is not specified by the CriSys source"; }
1411
1413
  attribute :>> notation = RequirementNotationKind::ears;
1412
1414
  attribute :>> earsPattern = EarsPatternKind::eventDriven;
1413
1415
  attribute :>> obligation = ObligationKind::shall;
@@ -1416,7 +1418,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1416
1418
  }
1417
1419
  requirement reqPowerLossRetention : Requirement {
1418
1420
  attribute :>> requirementKind = RequirementKind::system;
1419
- attribute :>> id = "REQ-X-03"; attribute :>> name = "PrescriptionRetainedAcrossPowerLoss";
1421
+ @MemoIdentity { :>> providedId = "REQ-X-03"; } attribute :>> name = "PrescriptionRetainedAcrossPowerLoss";
1420
1422
  attribute :>> statement = "If all power is lost, the system shall retain the confirmed prescription and event log, and on power restoration shall resume therapy only after clinician confirmation.";
1421
1423
  attribute :>> sourceKind = RequirementSourceKind::extension;
1422
1424
  attribute :>> concernKind = ConcernKind::safety;
@@ -1426,7 +1428,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1426
1428
  attribute :>> actorDescription = "clinician";
1427
1429
  attribute :>> assumptionSummary = "non-volatile storage available";
1428
1430
  attribute :>> guaranteeSummary = "no silent loss or silent resumption of therapy";
1429
- attribute :>> sourceReference = "MEMO extension — power-loss behavior is not specified by the CriSys source";
1431
+ @MemoIdentity { :>> sourceReference = "MEMO extension — power-loss behavior is not specified by the CriSys source"; }
1430
1432
  attribute :>> notation = RequirementNotationKind::ears;
1431
1433
  attribute :>> earsPattern = EarsPatternKind::unwantedBehavior;
1432
1434
  attribute :>> obligation = ObligationKind::shall;
@@ -1435,7 +1437,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1435
1437
  }
1436
1438
  requirement reqOcclusion : Requirement {
1437
1439
  attribute :>> requirementKind = RequirementKind::software;
1438
- attribute :>> id = "REQ-X-04"; attribute :>> name = "OcclusionDetectionAndAlarm";
1440
+ @MemoIdentity { :>> providedId = "REQ-X-04"; } attribute :>> name = "OcclusionDetectionAndAlarm";
1439
1441
  attribute :>> statement = "When downstream line pressure exceeds the occlusion threshold, the system shall pause infusion and raise a High-priority notification.";
1440
1442
  attribute :>> sourceKind = RequirementSourceKind::extension;
1441
1443
  attribute :>> concernKind = ConcernKind::safety;
@@ -1446,11 +1448,11 @@ package memo_examples_gpca_pump_gpca_requirements {
1446
1448
  attribute :>> actorDescription = "patient";
1447
1449
  attribute :>> assumptionSummary = "pressure sensor calibrated";
1448
1450
  attribute :>> guaranteeSummary = "no sustained pumping against a blocked line";
1449
- attribute :>> sourceReference = "MEMO extension — occlusion sensing is not specified by the CriSys source (under-infusion flow rate, REQ-CS-17, is the source-level effect)";
1451
+ @MemoIdentity { :>> sourceReference = "MEMO extension — occlusion sensing is not specified by the CriSys source (under-infusion flow rate, REQ-CS-17, is the source-level effect)"; }
1450
1452
  }
1451
1453
  requirement reqDoorOpen : Requirement {
1452
1454
  attribute :>> requirementKind = RequirementKind::software;
1453
- attribute :>> id = "REQ-X-05"; attribute :>> name = "DoorOpenPreventsDelivery";
1455
+ @MemoIdentity { :>> providedId = "REQ-X-05"; } attribute :>> name = "DoorOpenPreventsDelivery";
1454
1456
  attribute :>> statement = "While the reservoir door is open or unlatched, the system shall not deliver drug and shall raise a Medium-priority notification if therapy was active.";
1455
1457
  attribute :>> sourceKind = RequirementSourceKind::extension;
1456
1458
  attribute :>> concernKind = ConcernKind::safety;
@@ -1461,7 +1463,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1461
1463
  attribute :>> actorDescription = "clinician";
1462
1464
  attribute :>> assumptionSummary = "door sensor operational";
1463
1465
  attribute :>> guaranteeSummary = "no delivery with an unsecured fluid path";
1464
- attribute :>> sourceReference = "MEMO extension — door interlock is not specified by the CriSys source";
1466
+ @MemoIdentity { :>> sourceReference = "MEMO extension — door interlock is not specified by the CriSys source"; }
1465
1467
  attribute :>> notation = RequirementNotationKind::ears;
1466
1468
  attribute :>> earsPattern = EarsPatternKind::stateDriven;
1467
1469
  attribute :>> obligation = ObligationKind::shall;
@@ -1470,7 +1472,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1470
1472
  }
1471
1473
  requirement reqMaxHourlyDose : Requirement {
1472
1474
  attribute :>> requirementKind = RequirementKind::software;
1473
- attribute :>> id = "REQ-X-06"; attribute :>> name = "MaximumHourlyDoseEnforcement";
1475
+ @MemoIdentity { :>> providedId = "REQ-X-06"; } attribute :>> name = "MaximumHourlyDoseEnforcement";
1474
1476
  attribute :>> statement = "The system shall not deliver more than the prescribed maximum drug volume in any sliding one-hour window, counting basal, patient bolus, and square bolus contributions.";
1475
1477
  attribute :>> sourceKind = RequirementSourceKind::extension;
1476
1478
  attribute :>> concernKind = ConcernKind::safety;
@@ -1481,11 +1483,11 @@ package memo_examples_gpca_pump_gpca_requirements {
1481
1483
  attribute :>> actorDescription = "patient";
1482
1484
  attribute :>> assumptionSummary = "delivered volume measurable per step";
1483
1485
  attribute :>> guaranteeSummary = "hourly dose ceiling never exceeded";
1484
- attribute :>> sourceReference = "MEMO extension — sliding-window hourly limit is not specified by the CriSys source";
1486
+ @MemoIdentity { :>> sourceReference = "MEMO extension — sliding-window hourly limit is not specified by the CriSys source"; }
1485
1487
  }
1486
1488
  requirement reqEventLogging : Requirement {
1487
1489
  attribute :>> requirementKind = RequirementKind::software;
1488
- attribute :>> id = "REQ-X-07"; attribute :>> name = "TamperEvidentTherapyLog";
1490
+ @MemoIdentity { :>> providedId = "REQ-X-07"; } attribute :>> name = "TamperEvidentTherapyLog";
1489
1491
  attribute :>> statement = "The system shall record therapy events in a timestamped, tamper-evident event log such that any modification of recorded entries is detectable.";
1490
1492
  attribute :>> sourceKind = RequirementSourceKind::extension;
1491
1493
  attribute :>> concernKind = ConcernKind::regulatory;
@@ -1496,11 +1498,11 @@ package memo_examples_gpca_pump_gpca_requirements {
1496
1498
  attribute :>> actorDescription = "clinician and auditor";
1497
1499
  attribute :>> assumptionSummary = "real-time clock available";
1498
1500
  attribute :>> guaranteeSummary = "log tampering cannot go unnoticed";
1499
- attribute :>> sourceReference = "MEMO extension — tamper evidence is not specified by the CriSys source (log content: REQ-CS-77..81)";
1501
+ @MemoIdentity { :>> sourceReference = "MEMO extension — tamper evidence is not specified by the CriSys source (log content: REQ-CS-77..81)"; }
1500
1502
  }
1501
1503
  requirement reqWatchdogSafeState : Requirement {
1502
1504
  attribute :>> requirementKind = RequirementKind::software;
1503
- attribute :>> id = "REQ-X-08"; attribute :>> name = "WatchdogForcesSafeState";
1505
+ @MemoIdentity { :>> providedId = "REQ-X-08"; } attribute :>> name = "WatchdogForcesSafeState";
1504
1506
  attribute :>> statement = "If the software fails to service the hardware watchdog within its timeout, the system shall force pump output to zero flow and raise a continuous audible alarm.";
1505
1507
  attribute :>> sourceKind = RequirementSourceKind::extension;
1506
1508
  attribute :>> concernKind = ConcernKind::safety;
@@ -1511,7 +1513,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1511
1513
  attribute :>> actorDescription = "clinician";
1512
1514
  attribute :>> assumptionSummary = "watchdog electrically independent of CPU";
1513
1515
  attribute :>> guaranteeSummary = "runaway software cannot keep pumping";
1514
- attribute :>> sourceReference = "MEMO extension — watchdog behavior is not specified by the CriSys source";
1516
+ @MemoIdentity { :>> sourceReference = "MEMO extension — watchdog behavior is not specified by the CriSys source"; }
1515
1517
  attribute :>> notation = RequirementNotationKind::ears;
1516
1518
  attribute :>> earsPattern = EarsPatternKind::unwantedBehavior;
1517
1519
  attribute :>> obligation = ObligationKind::shall;
@@ -1520,7 +1522,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1520
1522
  }
1521
1523
  requirement reqStuckButton : Requirement {
1522
1524
  attribute :>> requirementKind = RequirementKind::software;
1523
- attribute :>> id = "REQ-X-09"; attribute :>> name = "StuckBolusButtonDetection";
1525
+ @MemoIdentity { :>> providedId = "REQ-X-09"; } attribute :>> name = "StuckBolusButtonDetection";
1524
1526
  attribute :>> statement = "If the patient bolus button remains asserted for more than 60 seconds, the system shall treat the input as failed, ignore it, and raise a Medium-priority notification.";
1525
1527
  attribute :>> sourceKind = RequirementSourceKind::extension;
1526
1528
  attribute :>> concernKind = ConcernKind::safety;
@@ -1531,11 +1533,11 @@ package memo_examples_gpca_pump_gpca_requirements {
1531
1533
  attribute :>> actorDescription = "patient";
1532
1534
  attribute :>> assumptionSummary = "button sampled every step";
1533
1535
  attribute :>> guaranteeSummary = "a shorted pendant cannot request repeated boluses";
1534
- attribute :>> sourceReference = "MEMO extension — stuck-input detection is not specified by the CriSys source";
1536
+ @MemoIdentity { :>> sourceReference = "MEMO extension — stuck-input detection is not specified by the CriSys source"; }
1535
1537
  }
1536
1538
  requirement reqFlowCrossCheck : Requirement {
1537
1539
  attribute :>> requirementKind = RequirementKind::software;
1538
- attribute :>> id = "REQ-X-10"; attribute :>> name = "CommandedVsMeasuredFlowCrossCheck";
1540
+ @MemoIdentity { :>> providedId = "REQ-X-10"; } attribute :>> name = "CommandedVsMeasuredFlowCrossCheck";
1539
1541
  attribute :>> statement = "The system shall compare measured delivered flow against commanded flow using an independent flow sensor, and shall raise a High-priority notification and pause infusion when the deviation exceeds Tolerance_Min_const for more than Max_Duration_OverInfusion_const.";
1540
1542
  attribute :>> sourceKind = RequirementSourceKind::extension;
1541
1543
  attribute :>> concernKind = ConcernKind::safety;
@@ -1546,11 +1548,11 @@ package memo_examples_gpca_pump_gpca_requirements {
1546
1548
  attribute :>> actorDescription = "patient";
1547
1549
  attribute :>> assumptionSummary = "independent flow sensor available";
1548
1550
  attribute :>> guaranteeSummary = "over- and under-infusion detected independently of motor control";
1549
- attribute :>> sourceReference = "MEMO extension — independent cross-check channel beyond CriSys REQ-CS-17/19 tolerance monitoring; thresholds reuse App. A.4 constants";
1551
+ @MemoIdentity { :>> sourceReference = "MEMO extension — independent cross-check channel beyond CriSys REQ-CS-17/19 tolerance monitoring; thresholds reuse App. A.4 constants"; }
1550
1552
  }
1551
1553
  requirement reqPumpAccuracy : Requirement {
1552
1554
  attribute :>> requirementKind = RequirementKind::hardware;
1553
- attribute :>> id = "REQ-X-11"; attribute :>> name = "DeliveryAccuracy";
1555
+ @MemoIdentity { :>> providedId = "REQ-X-11"; } attribute :>> name = "DeliveryAccuracy";
1554
1556
  attribute :>> statement = "The pump mechanism shall deliver programmed volumes with an accuracy of plus or minus Tolerance_Min_const (5 percent) over the full rate range, so that the system-level flow tolerances of REQ-CS-16 are achievable.";
1555
1557
  attribute :>> sourceKind = RequirementSourceKind::extension;
1556
1558
  attribute :>> concernKind = ConcernKind::performance;
@@ -1560,12 +1562,12 @@ package memo_examples_gpca_pump_gpca_requirements {
1560
1562
  attribute :>> actorDescription = "patient";
1561
1563
  attribute :>> assumptionSummary = "approved administration set used";
1562
1564
  attribute :>> guaranteeSummary = "dose accuracy within labeling";
1563
- attribute :>> sourceReference = "MEMO extension — mechanism-level accuracy budget derived from App. A.4 Tolerance_Min_const";
1565
+ @MemoIdentity { :>> sourceReference = "MEMO extension — mechanism-level accuracy budget derived from App. A.4 Tolerance_Min_const"; }
1564
1566
  attribute :>> electricalSafetyRelevant = false;
1565
1567
  }
1566
1568
  requirement reqAlarmLoudness : Requirement {
1567
1569
  attribute :>> requirementKind = RequirementKind::hardware;
1568
- attribute :>> id = "REQ-X-12"; attribute :>> name = "AlarmSoundPressureLevel";
1570
+ @MemoIdentity { :>> providedId = "REQ-X-12"; } attribute :>> name = "AlarmSoundPressureLevel";
1569
1571
  attribute :>> statement = "The audible annunciator shall produce notification tones at the sound level defined by Audio_level_const (50 db for 2 seconds per interface spec I 8), distinguishable by priority.";
1570
1572
  attribute :>> sourceKind = RequirementSourceKind::extension;
1571
1573
  attribute :>> concernKind = ConcernKind::usability;
@@ -1575,12 +1577,12 @@ package memo_examples_gpca_pump_gpca_requirements {
1575
1577
  attribute :>> actorDescription = "clinician";
1576
1578
  attribute :>> assumptionSummary = "ward ambient noise per IEC 60601-1-8 baseline";
1577
1579
  attribute :>> guaranteeSummary = "alarms audible at the ward station";
1578
- attribute :>> sourceReference = "MEMO extension — hardware annunciator budget realizing CriSys I 8 / Audio_level_const";
1580
+ @MemoIdentity { :>> sourceReference = "MEMO extension — hardware annunciator budget realizing CriSys I 8 / Audio_level_const"; }
1579
1581
  attribute :>> electricalSafetyRelevant = false;
1580
1582
  }
1581
1583
  requirement reqBatteryBackup : Requirement {
1582
1584
  attribute :>> requirementKind = RequirementKind::hardware;
1583
- attribute :>> id = "REQ-X-13"; attribute :>> name = "BatteryBackupDuration";
1585
+ @MemoIdentity { :>> providedId = "REQ-X-13"; } attribute :>> name = "BatteryBackupDuration";
1584
1586
  attribute :>> statement = "The battery shall sustain nominal therapy and alarm annunciation for at least 4 hours after loss of mains power.";
1585
1587
  attribute :>> sourceKind = RequirementSourceKind::extension;
1586
1588
  attribute :>> concernKind = ConcernKind::reliability;
@@ -1590,12 +1592,12 @@ package memo_examples_gpca_pump_gpca_requirements {
1590
1592
  attribute :>> actorDescription = "clinician";
1591
1593
  attribute :>> assumptionSummary = "battery within service life";
1592
1594
  attribute :>> guaranteeSummary = "transport and outage continuity";
1593
- attribute :>> sourceReference = "MEMO extension — power backup is not specified by the CriSys source";
1595
+ @MemoIdentity { :>> sourceReference = "MEMO extension — power backup is not specified by the CriSys source"; }
1594
1596
  attribute :>> electricalSafetyRelevant = true;
1595
1597
  }
1596
1598
  requirement reqFreeFlowPrevention : Requirement {
1597
1599
  attribute :>> requirementKind = RequirementKind::hardware;
1598
- attribute :>> id = "REQ-X-14"; attribute :>> name = "MechanicalFreeFlowPrevention";
1600
+ @MemoIdentity { :>> providedId = "REQ-X-14"; } attribute :>> name = "MechanicalFreeFlowPrevention";
1599
1601
  attribute :>> statement = "The fluid path shall include a mechanical anti-free-flow valve that blocks gravity flow whenever the administration set is disengaged from the pumping mechanism.";
1600
1602
  attribute :>> sourceKind = RequirementSourceKind::extension;
1601
1603
  attribute :>> concernKind = ConcernKind::safety;
@@ -1605,7 +1607,7 @@ package memo_examples_gpca_pump_gpca_requirements {
1605
1607
  attribute :>> actorDescription = "patient";
1606
1608
  attribute :>> assumptionSummary = "approved administration set used";
1607
1609
  attribute :>> guaranteeSummary = "free-flow overdose mechanically impossible";
1608
- attribute :>> sourceReference = "MEMO extension — mechanical free-flow protection is not specified by the CriSys source";
1610
+ @MemoIdentity { :>> sourceReference = "MEMO extension — mechanical free-flow protection is not specified by the CriSys source"; }
1609
1611
  attribute :>> electricalSafetyRelevant = false;
1610
1612
  }
1611
1613
  }