@memoarchitect/ontology 0.8.22 → 0.10.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/README.md +1 -1
  2. package/examples/connected-patient-monitor/memo.package.yaml +3 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  4. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  5. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
  6. package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +11 -9
  8. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  9. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
  10. package/examples/functional-logical-physical/memo.package.yaml +3 -0
  11. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +9 -7
  12. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  13. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
  14. package/examples/gpca-pump/memo.identity.yaml +2179 -0
  15. package/examples/gpca-pump/memo.package.yaml +3 -0
  16. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  17. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  18. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  19. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  20. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  21. package/examples/gpca-pump/model/catalog/gpca_context.sysml +27 -23
  22. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +15 -15
  23. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  24. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  25. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +146 -180
  26. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  27. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
  28. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  29. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  30. package/examples/gpca-pump/model/catalog/gpca_system.sysml +21 -33
  31. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -11
  32. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  33. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  34. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +7 -7
  35. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +7 -7
  36. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +6 -7
  37. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +7 -8
  38. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +6 -6
  39. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +6 -6
  40. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +6 -6
  41. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +8 -9
  42. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +6 -6
  43. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +6 -6
  44. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +6 -6
  45. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +6 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +7 -7
  47. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +6 -6
  48. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +6 -6
  49. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +8 -9
  50. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +6 -6
  51. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -7
  52. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +6 -7
  53. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +6 -6
  54. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +6 -6
  55. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +6 -7
  56. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +6 -6
  57. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +8 -9
  58. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +6 -7
  59. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +6 -6
  60. package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
  61. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +10 -8
  62. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  63. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
  64. package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
  65. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +7 -5
  66. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  67. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
  68. package/examples/multidimensional-layers/memo.package.yaml +3 -0
  69. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  70. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  71. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
  72. package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
  73. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  74. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  75. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
  76. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
  77. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  78. package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
  79. package/examples/reusable-instrument/memo.package.yaml +3 -0
  80. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  81. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +23 -31
  82. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
  83. package/examples/ros-mobile-robot/memo.package.yaml +3 -0
  84. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  85. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  86. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +0 -1
  87. package/examples/software-only-medical-device/memo.package.yaml +3 -0
  88. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  89. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -9
  90. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
  91. package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
  92. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  93. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -69
  94. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
  95. package/examples/surgical-robot/memo.package.yaml +3 -0
  96. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  97. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  98. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
  99. package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
  100. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  101. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -11
  102. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -7
  103. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +4 -3
  104. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +3 -3
  105. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +17 -16
  106. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +9 -8
  107. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +4 -3
  108. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +3 -3
  109. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +4 -3
  110. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -9
  111. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  112. package/examples/temperature-alarm/memo.package.yaml +3 -0
  113. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  114. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +30 -29
  115. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
  116. package/examples/ui-screen-regions/memo.package.yaml +3 -0
  117. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  118. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  119. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  120. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  121. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  122. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  123. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  124. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  125. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
  126. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  127. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  128. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  129. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  130. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  131. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +6 -5
  132. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +6 -5
  133. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +6 -5
  134. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +4 -3
  135. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +4 -3
  136. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +4 -3
  137. package/extensions/aadl/memo.package.yaml +1 -1
  138. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  139. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  140. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  141. package/extensions/cloud/memo.package.yaml +1 -1
  142. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  143. package/extensions/container/memo.package.yaml +1 -1
  144. package/extensions/container/src/container_extension.sysml +2 -2
  145. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  146. package/extensions/messaging/memo.package.yaml +1 -1
  147. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  148. package/extensions/ros/memo.package.yaml +1 -1
  149. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  150. package/extensions/template/src/extension.sysml +3 -1
  151. package/methodologies/default/memo.package.yaml +1 -1
  152. package/methodologies/gpca/memo.package.yaml +1 -1
  153. package/ontology/memo.package.yaml +1 -1
  154. package/package.json +2 -2
  155. package/profile/memo.package.yaml +1 -1
  156. package/src/architecture/functional/behavior/memo_behavior.sysml +5 -5
  157. package/src/architecture/functional/functions/memo_functions.sysml +6 -6
  158. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  159. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  160. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +7 -7
  161. package/src/architecture/implementation/ui/memo_ui.sysml +8 -31
  162. package/src/architecture/logical/interfaces/memo_interfaces.sysml +4 -2
  163. package/src/architecture/logical/structure/memo_logical_structure.sysml +5 -5
  164. package/src/architecture/operational/activities/memo_activities.sysml +19 -28
  165. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -4
  166. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +7 -7
  167. package/src/architecture/operational/context/use_context/memo_use_context.sysml +5 -14
  168. package/src/architecture/operational/scenarios/memo_scenarios.sysml +12 -104
  169. package/src/architecture/operational/structure/memo_operational.sysml +42 -13
  170. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -12
  171. package/src/architecture/operational/workflows/memo_workflows.sysml +20 -42
  172. package/src/architecture/realization/deployment/memo_deployment.sysml +26 -19
  173. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  174. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  175. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  176. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  177. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  178. package/src/artifacts/standards/iec_60812.sysml +21 -22
  179. package/src/artifacts/standards/iec_62304.sysml +150 -169
  180. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  181. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  182. package/src/artifacts/standards/iso_13485.sysml +80 -89
  183. package/src/artifacts/standards/iso_14971.sysml +66 -73
  184. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  185. package/src/artifacts/templates/dhf/system/sad.md +3 -3
  186. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +2 -2
  187. package/src/assurance/human_factors/memo_human_factors.sysml +2 -2
  188. package/src/assurance/requirements/memo_requirements.sysml +2 -18
  189. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +1 -1
  190. package/src/assurance/safety_risk/memo_risk.sysml +12 -0
  191. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  192. package/src/core/common/memo_common.sysml +59 -55
  193. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  194. package/src/core/relationships/memo_relationships.sysml +29 -56
  195. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  196. package/src/methodology/core/memo_core.sysml +0 -10
  197. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  198. package/src/methodology/workflow/memo_workflow.sysml +5 -5
  199. package/src/rules/closure/closure_rules.sysml +22 -20
  200. package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
  201. package/src/rules/ontology/ontology_invariants.sysml +121 -48
  202. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  203. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +58 -57
  204. package/src/viewpoints/clinical/clinical_viewpoint.sysml +5 -4
  205. package/src/viewpoints/context/context_viewpoint.sysml +6 -5
  206. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +6 -5
  207. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +6 -6
  208. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +36 -4
  209. package/src/viewpoints/functional/functional_viewpoint.sysml +6 -5
  210. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +6 -5
  211. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +6 -5
  212. package/src/viewpoints/logical/logical_viewpoint.sysml +5 -4
  213. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +6 -5
  214. package/src/viewpoints/operational/operational_viewpoint.sysml +6 -5
  215. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +7 -6
  216. package/src/viewpoints/physical/physical_viewpoint.sysml +5 -4
  217. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +6 -5
  218. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +6 -5
  219. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  220. package/src/viewpoints/requirements/requirements_viewpoint.sysml +5 -4
  221. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +6 -5
  222. package/src/viewpoints/risk/risk_viewpoint.sysml +5 -4
  223. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +6 -5
  224. package/src/viewpoints/software/software_viewpoint.sysml +5 -4
  225. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +6 -5
  226. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +5 -4
  227. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  228. package/src/viewpoints/usability/usability_viewpoint.sysml +5 -4
  229. package/src/viewpoints/verification/verification_viewpoint.sysml +5 -4
  230. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +6 -5
  231. package/templates/connected-device/memo.package.yaml +2 -0
  232. package/templates/connected-device/model/catalog/project.sysml +3 -1
  233. package/templates/default/memo.package.yaml +2 -0
  234. package/templates/default/model/catalog/project.sysml +3 -1
  235. package/templates/infusion-pump/memo.package.yaml +2 -0
  236. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  237. package/templates/monitoring-device/memo.package.yaml +2 -0
  238. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  239. package/templates/samd/memo.package.yaml +2 -0
  240. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -3,46 +3,50 @@ package memo_examples_gpca_pump_gpca_context {
3
3
 
4
4
  private import memo_architecture_operational_context_actors::*;
5
5
  private import memo_architecture_operational_context_use_context::*;
6
+ private import memo_architecture_operational_structure::*;
6
7
  private import memo_assurance_requirements::*;
8
+ private import memo_assurance_safety_risk::*;
7
9
  private import memo_assurance_human_factors::*;
8
10
  private import memo_core_enumerations::*;
9
11
  private import memo_examples_gpca_pump_gpca_operational::*;
10
12
 
13
+ private import memo_core_common::*;
14
+ private import memo_core_common::MemoIdentity;
11
15
  // ── Intended use (ISO 14971 §5.2, IEC 62366-1) ──────────────
12
16
  part gpcaIntendedUse : IntendedUse {
13
- attribute :>> id = "IU-001";
17
+ @MemoIdentity { :>> providedId = "IU-001"; }
14
18
  attribute :>> name = "GPCA_IntendedUse";
15
- attribute :>> title = "GPCA Pump Intended Use";
16
- attribute :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics.";
19
+ @MemoIdentity { :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics."; }
17
20
  attribute :>> description = "The GPCA pump delivers a prescribed analgesic drug intravenously at a programmed basal rate, supplemented by square boluses delivered automatically at programmed intervals and by patient-requested bolus doses, subject to lockout intervals and maximum-dose limits.";
18
21
  attribute :>> indication = "Management of acute post-operative or chronic pain requiring titrated intravenous opioid analgesia.";
19
22
  attribute :>> contraindication = "Patients unable to comprehend or operate the bolus request mechanism; drugs without safe-value records in the hospital pharmacy database.";
20
23
  attribute :>> patientPopulation = "Adult in-patients under clinical supervision.";
21
24
  attribute :>> clinicalBenefit = "Timely, patient-titrated analgesia with lower total opioid consumption than fixed-schedule dosing.";
22
25
  attribute :>> regulatoryClassification = "FDA Class II infusion pump (21 CFR 880.5725); IEC 62304 software safety class C.";
23
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1-2.3 (GPCA overview, system functions, user characteristics)";
26
+ attribute :>> missionKind = "therapeutic device mission";
27
+ attribute :>> successCriteria = "Drug delivered per prescription; no overdose or undetected under-infusion; every hazardous condition annunciated within its alarm latency budget.";
28
+ attribute :>> operationalContext = "Acute-care hospital ward, fixed (non-ambulatory) location (UC-001).";
29
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1-2.3 (GPCA overview, system functions, user characteristics)"; }
24
30
  }
25
31
  part bolusByProxyMisuse : ReasonablyForeseeableMisuse {
26
- attribute :>> id = "RFM-001";
32
+ @MemoIdentity { :>> providedId = "RFM-001"; }
27
33
  attribute :>> name = "BolusRequestBySomeoneOtherThanPatient";
28
- attribute :>> title = "Bolus by proxy";
29
- attribute :>> shortDescription = "A caregiver or visitor presses the patient bolus control.";
34
+ @MemoIdentity { :>> shortDescription = "A caregiver or visitor presses the patient bolus control."; }
30
35
  attribute :>> description = "A person other than the patient activates the bolus request control, bypassing the intended patient self-limiting behavior.";
31
36
  attribute :>> misuseContext = "Patient-controlled analgesia in a supervised hospital setting.";
32
37
  attribute :>> foreseeableBasis = "Known PCA use pattern represented in the GPCA hazard analysis.";
33
38
  attribute :>> affectedUseContext = "UC-001";
34
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8; CITE-005: Open PCA ISO 14971 risk analysis, bolus-by-proxy event";
39
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8; CITE-005: Open PCA ISO 14971 risk analysis, bolus-by-proxy event"; }
35
40
  }
36
41
 
37
42
  // ── Use contexts ────────────────────────────────────────────
38
43
  part hospitalWardContext : UseContext {
39
- attribute :>> id = "UC-001";
44
+ @MemoIdentity { :>> providedId = "UC-001"; }
40
45
  attribute :>> name = "HospitalWardUseContext";
41
46
  attribute :>> careSetting = "acute-care hospital ward and post-anesthesia care unit";
42
47
  attribute :>> environment = "indoor clinical environment, mains power with battery backup, pole or bed-rail mounted";
43
48
  attribute :>> jurisdiction = "generic (FDA/EU reference model)";
44
49
  attribute :>> connectedUse = true;
45
- attribute :>> intendedUseReference = "IU-001";
46
50
  }
47
51
  // UC-002 (intra-hospital transport) removed: CriSys §2.4 states the
48
52
  // system is used in a fixed location and is not ambulatory.
@@ -50,7 +54,7 @@ package memo_examples_gpca_pump_gpca_context {
50
54
  // ── Actors ──────────────────────────────────────────────────
51
55
  part actorPatient : User {
52
56
  attribute :>> actorKind = ActorKind::patient;
53
- attribute :>> id = "ACT-001";
57
+ @MemoIdentity { :>> providedId = "ACT-001"; }
54
58
  attribute :>> name = "Patient";
55
59
  attribute :>> trainingLevel = "instructed by clinician on bolus request button only";
56
60
  attribute :>> description = "Receives the infusion and requests bolus doses via the patient pendant.";
@@ -58,7 +62,7 @@ package memo_examples_gpca_pump_gpca_context {
58
62
  }
59
63
  part actorNurse : User {
60
64
  attribute :>> actorKind = ActorKind::clinician;
61
- attribute :>> id = "ACT-002";
65
+ @MemoIdentity { :>> providedId = "ACT-002"; }
62
66
  attribute :>> name = "ClinicianNurse";
63
67
  attribute :>> trainingLevel = "trained clinical user; programs prescriptions and responds to alarms";
64
68
  attribute :>> description = "Loads the drug reservoir, programs and confirms the prescription, starts/stops therapy, and responds to alarms.";
@@ -69,7 +73,7 @@ package memo_examples_gpca_pump_gpca_context {
69
73
  }
70
74
  part actorPrescriber : User {
71
75
  attribute :>> actorKind = ActorKind::clinician;
72
- attribute :>> id = "ACT-003";
76
+ @MemoIdentity { :>> providedId = "ACT-003"; }
73
77
  attribute :>> name = "PrescribingPhysician";
74
78
  attribute :>> trainingLevel = "licensed prescriber";
75
79
  attribute :>> description = "Prescribes drug, concentration, basal rate, bolus volume, lockout interval, and maximum dose limits.";
@@ -77,7 +81,7 @@ package memo_examples_gpca_pump_gpca_context {
77
81
  }
78
82
  part actorPharmacist : User {
79
83
  attribute :>> actorKind = ActorKind::clinician;
80
- attribute :>> id = "ACT-004";
84
+ @MemoIdentity { :>> providedId = "ACT-004"; }
81
85
  attribute :>> name = "Pharmacist";
82
86
  attribute :>> trainingLevel = "licensed pharmacist";
83
87
  attribute :>> description = "Prepares the drug reservoir and verifies drug and concentration against the prescription.";
@@ -85,7 +89,7 @@ package memo_examples_gpca_pump_gpca_context {
85
89
  }
86
90
  part actorTechnician : User {
87
91
  attribute :>> actorKind = ActorKind::technician;
88
- attribute :>> id = "ACT-005";
92
+ @MemoIdentity { :>> providedId = "ACT-005"; }
89
93
  attribute :>> name = "BiomedicalTechnician";
90
94
  attribute :>> trainingLevel = "service-trained; authenticated service access";
91
95
  attribute :>> description = "Performs maintenance, battery replacement, and calibration through the service interface.";
@@ -94,43 +98,43 @@ package memo_examples_gpca_pump_gpca_context {
94
98
 
95
99
  // ── Foreseeable use errors (IEC 62366-1, AAMI TIR PCA) ──────
96
100
  part ueMisprogrammedRate : UseError {
97
- attribute :>> id = "UE-001";
101
+ @MemoIdentity { :>> providedId = "UE-001"; }
98
102
  attribute :>> name = "MisprogrammedInfusionParameters";
99
103
  attribute :>> errorCategory = UseErrorCategoryKind::actionCategory;
100
104
  attribute :>> taskReference = "OA-003: Program prescription";
101
105
  attribute :>> severity = SeverityKind::catastrophic;
102
106
  attribute :>> rootCauseType = "decimal-point / unit entry slip during prescription programming";
103
107
  attribute :>> description = "Clinician enters a basal rate or bolus volume an order of magnitude off (e.g. mg vs mL, misplaced decimal).";
104
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (incorrect dose settings)";
108
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (incorrect dose settings)"; }
105
109
  }
106
110
  part ueBolusByProxy : UseError {
107
- attribute :>> id = "UE-002";
111
+ @MemoIdentity { :>> providedId = "UE-002"; }
108
112
  attribute :>> name = "PCAByProxy";
109
113
  attribute :>> errorCategory = UseErrorCategoryKind::cognition;
110
114
  attribute :>> taskReference = "OA-005: Request patient bolus";
111
115
  attribute :>> severity = SeverityKind::catastrophic;
112
116
  attribute :>> rootCauseType = "family member or caregiver presses bolus button on behalf of a sedated patient";
113
117
  attribute :>> description = "Bolus doses requested by someone other than the patient defeat the inherent safety of patient-limited dosing.";
114
- attribute :>> sourceReference = "illustrative — no source";
118
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
115
119
  }
116
120
  part ueWrongDrugLoaded : UseError {
117
- attribute :>> id = "UE-003";
121
+ @MemoIdentity { :>> providedId = "UE-003"; }
118
122
  attribute :>> name = "WrongDrugOrConcentrationLoaded";
119
123
  attribute :>> errorCategory = UseErrorCategoryKind::cognition;
120
124
  attribute :>> taskReference = "OA-002: Load drug reservoir";
121
125
  attribute :>> severity = SeverityKind::catastrophic;
122
126
  attribute :>> rootCauseType = "reservoir containing wrong drug or concentration mounted without verification";
123
127
  attribute :>> description = "Loaded drug or concentration differs from the programmed prescription, so delivered dose differs from intended dose.";
124
- attribute :>> sourceReference = "illustrative — no source";
128
+ @MemoIdentity { :>> sourceReference = "illustrative — no source"; }
125
129
  }
126
130
  part ueAlarmDisregard : UseError {
127
- attribute :>> id = "UE-004";
131
+ @MemoIdentity { :>> providedId = "UE-004"; }
128
132
  attribute :>> name = "AlarmSilencedAndForgotten";
129
133
  attribute :>> errorCategory = UseErrorCategoryKind::memoryRecall;
130
134
  attribute :>> taskReference = "OA-006: Respond to alarm";
131
135
  attribute :>> severity = SeverityKind::serious;
132
136
  attribute :>> rootCauseType = "alarm silenced during high workload and the underlying condition never resolved";
133
137
  attribute :>> description = "Clinician silences an alarm and does not return to resolve the underlying condition (e.g. occlusion), interrupting therapy.";
134
- attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (attentional/memory failure)";
138
+ @MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (attentional/memory failure)"; }
135
139
  }
136
140
  }
@@ -15,8 +15,9 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
15
15
  private import memo_examples_gpca_pump_gpca_requirements::*;
16
16
  private import memo_examples_gpca_pump_gpca_verification::*;
17
17
 
18
+ private import memo_core_common::MemoIdentity;
18
19
  part therapyConfigurationAsset : CybersecurityAsset {
19
- attribute :>> id = "AST-CYB-001";
20
+ @MemoIdentity { :>> providedId = "AST-CYB-001"; }
20
21
  attribute :>> name = "TherapyConfigurationAsset";
21
22
  attribute :>> assetKind = AssetKind::configuration;
22
23
  attribute :>> confidentialityNeed = "medium";
@@ -28,7 +29,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
28
29
  }
29
30
 
30
31
  part patientEventLogAsset : CybersecurityAsset {
31
- attribute :>> id = "AST-CYB-002";
32
+ @MemoIdentity { :>> providedId = "AST-CYB-002"; }
32
33
  attribute :>> name = "PatientEventLogAsset";
33
34
  attribute :>> assetKind = AssetKind::auditRecord;
34
35
  attribute :>> confidentialityNeed = "high";
@@ -40,7 +41,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
40
41
  }
41
42
 
42
43
  part maintenancePortBoundary : TrustBoundary {
43
- attribute :>> id = "TB-001";
44
+ @MemoIdentity { :>> providedId = "TB-001"; }
44
45
  attribute :>> name = "MaintenancePortBoundary";
45
46
  attribute :>> boundaryType = "service-access";
46
47
  attribute :>> crossingConstraint = "Boundary between service tooling and therapy controller runtime.";
@@ -48,7 +49,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
48
49
  }
49
50
 
50
51
  part unauthorizedConfigChangeThreat : Threat {
51
- attribute :>> id = "TH-001";
52
+ @MemoIdentity { :>> providedId = "TH-001"; }
52
53
  attribute :>> name = "UnauthorizedTherapyConfigurationChange";
53
54
  attribute :>> driverKind = "cybersecurity";
54
55
  attribute :>> threatCategory = ThreatCategoryKind::tampering;
@@ -60,7 +61,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
60
61
  }
61
62
 
62
63
  part eventLogTamperingThreat : Threat {
63
- attribute :>> id = "TH-002";
64
+ @MemoIdentity { :>> providedId = "TH-002"; }
64
65
  attribute :>> name = "PatientEventLogTampering";
65
66
  attribute :>> driverKind = "cybersecurity";
66
67
  attribute :>> threatCategory = ThreatCategoryKind::repudiation;
@@ -72,7 +73,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
72
73
  }
73
74
 
74
75
  part weakServiceAuthentication : Vulnerability {
75
- attribute :>> id = "VULN-001";
76
+ @MemoIdentity { :>> providedId = "VULN-001"; }
76
77
  attribute :>> name = "WeakServiceAuthentication";
77
78
  attribute :>> weakness = "service mode relies on shared default credential";
78
79
  attribute :>> exploitability = "moderate";
@@ -81,17 +82,16 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
81
82
  attribute :>> cweReference = "CWE-798";
82
83
  }
83
84
 
84
- action tamperedConfigurationScenario : MemoScenario {
85
- attribute :>> id = "SCN-001";
85
+ action tamperedConfigurationScenario : OperativeScenario {
86
+ @MemoIdentity { :>> providedId = "SCN-001"; }
86
87
  attribute :>> name = "TamperedTherapyConfigurationScenario";
87
- attribute :>> scenarioKind = ScenarioKind::threat;
88
88
  attribute :>> description = "An attacker with local access to the maintenance port alters lockout or dose parameters, aiming to bypass safety limits; may enable unsafe therapy delivery or bypass safeguards.";
89
89
  attribute :>> actorDescription = "unauthorized actor with local access to the maintenance port";
90
90
  attribute :>> defaultCategory = ThreatCategoryKind::tampering;
91
91
  }
92
92
 
93
93
  part unsafeDoseCyberHazard : CyberHazard {
94
- attribute :>> id = "CHZ-001";
94
+ @MemoIdentity { :>> providedId = "CHZ-001"; }
95
95
  attribute :>> name = "UnsafeTherapyConfigurationHazard";
96
96
  attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
97
97
  attribute :>> foreseeable = true;
@@ -102,7 +102,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
102
102
  }
103
103
 
104
104
  part configurationTamperingRisk : CyberRisk {
105
- attribute :>> id = "CRISK-001";
105
+ @MemoIdentity { :>> providedId = "CRISK-001"; }
106
106
  attribute :>> name = "ConfigurationTamperingRisk";
107
107
  attribute :>> driverKind = "cyber risk";
108
108
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
@@ -116,7 +116,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
116
116
  }
117
117
 
118
118
  part strongServiceAuthentication : CyberMitigation {
119
- attribute :>> id = "CMIT-001";
119
+ @MemoIdentity { :>> providedId = "CMIT-001"; }
120
120
  attribute :>> name = "StrongServiceAuthenticationAndAudit";
121
121
  attribute :>> controlKind = RiskControlKind::protectiveMeasure;
122
122
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
@@ -127,7 +127,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
127
127
  }
128
128
 
129
129
  requirement reqAuthenticatedServiceAccess : SecurityRequirement {
130
- attribute :>> id = "SREQ-001";
130
+ @MemoIdentity { :>> providedId = "SREQ-001"; }
131
131
  attribute :>> name = "AuthenticatedServiceAccess";
132
132
  attribute :>> statement = "The system shall require authenticated and authorized service access before any therapy configuration parameter can be modified.";
133
133
  attribute :>> sourceKind = RequirementSourceKind::risk;
@@ -145,9 +145,9 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
145
145
  }
146
146
 
147
147
  verification vcAuthenticatedServiceAccess : VerificationCase {
148
- attribute :>> id = "CVER-001";
148
+ @MemoIdentity { :>> providedId = "CVER-001"; }
149
149
  attribute :>> name = "VerifyAuthenticatedServiceAccess";
150
- attribute :>> methodKind = VerificationMethodKind::test;
150
+ attribute :>> methodKind = MemoVerificationMethodKind::test;
151
151
  attribute :>> acceptanceCriteria = "Only authenticated and authorized service sessions may modify therapy configuration; all attempts are logged.";
152
152
  attribute :>> status = ElementStatusKind::approved;
153
153
 
@@ -4,6 +4,8 @@ package memo_examples_gpca_pump_gpca_formal_behavior {
4
4
  private import memo_architecture_functional_behavior::*;
5
5
  private import memo_core_enumerations::*;
6
6
 
7
+ private import memo_core_common::*;
8
+ private import memo_core_common::MemoIdentity;
7
9
  // ═════════════════════════════════════════════════════════════
8
10
  // Formal assume/guarantee properties translated 1:1 from the
9
11
  // CriSys AADL AGREE annexes (GPCA_SW.aadl composite contract;
@@ -13,161 +15,161 @@ package memo_examples_gpca_pump_gpca_formal_behavior {
13
15
  // guarantees zero flow.
14
16
  // ═════════════════════════════════════════════════════════════
15
17
  part gpcaSwContract : Contract {
16
- attribute :>> id = "CTR-000";
18
+ @MemoIdentity { :>> providedId = "CTR-000"; }
17
19
  attribute :>> name = "GpcaSwCompositeContract";
18
20
  attribute :>> contractScope = "GPCA_SW (composite, verified compositionally over the 8 subcomponents)";
19
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
21
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
20
22
  }
21
23
  part topLevelContract : Contract {
22
- attribute :>> id = "CTR-001";
24
+ @MemoIdentity { :>> providedId = "CTR-001"; }
23
25
  attribute :>> name = "TopLevelModeContract";
24
26
  attribute :>> contractScope = "Top_Level_Mode";
25
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Top_Level_Mode.aadl AGREE annex";
27
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Top_Level_Mode.aadl AGREE annex"; }
26
28
  }
27
29
  part infusionManagerContract : Contract {
28
- attribute :>> id = "CTR-002";
30
+ @MemoIdentity { :>> providedId = "CTR-002"; }
29
31
  attribute :>> name = "InfusionManagerContract";
30
32
  attribute :>> contractScope = "Infusion_Manager";
31
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Infusion_Manager.aadl AGREE annex";
33
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Infusion_Manager.aadl AGREE annex"; }
32
34
  }
33
35
  part alarmContract : Contract {
34
- attribute :>> id = "CTR-003";
36
+ @MemoIdentity { :>> providedId = "CTR-003"; }
35
37
  attribute :>> name = "AlarmContract";
36
38
  attribute :>> contractScope = "Alarm";
37
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Alarm.aadl AGREE annex";
39
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Alarm.aadl AGREE annex"; }
38
40
  }
39
41
 
40
42
  // ── Assumptions (GPCA_SW.aadl) ──────────────────────────────
41
43
  part assumeVtbiHighPositive : BehaviorProperty {
42
44
  attribute :>> propertyKind = BehaviorPropertyKind::assumption;
43
- attribute :>> id = "AP-002";
45
+ @MemoIdentity { :>> providedId = "AP-002"; }
44
46
  attribute :>> name = "VtbiHighPositive";
45
47
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
46
48
  attribute :>> formalExpression = "assume DB_IN.VTBI_High > 0";
47
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
49
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
48
50
  }
49
51
  part assumeEmptyReservoirPositive : BehaviorProperty {
50
52
  attribute :>> propertyKind = BehaviorPropertyKind::assumption;
51
- attribute :>> id = "AP-003";
53
+ @MemoIdentity { :>> providedId = "AP-003"; }
52
54
  attribute :>> name = "EmptyReservoirConstPositive";
53
55
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
54
56
  attribute :>> formalExpression = "assume CONST_IN.Empty_Reservoir > 0";
55
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
57
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
56
58
  }
57
59
  part assumeValidPrescriptionSaved : BehaviorProperty {
58
60
  attribute :>> propertyKind = BehaviorPropertyKind::assumption;
59
- attribute :>> id = "AP-001";
61
+ @MemoIdentity { :>> providedId = "AP-001"; }
60
62
  attribute :>> name = "ValidPrescriptionSavedBeforeTherapy";
61
63
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
62
64
  attribute :>> formalExpression = "assume a saved prescription is available before infusion initiation";
63
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 7)";
65
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 7)"; }
64
66
  }
65
67
 
66
68
  // ── Guarantees (GPCA_SW.aadl AGREE annex, 1:1) ──────────────
67
69
  part guaranteeExclusiveMode : BehaviorProperty {
68
70
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
69
- attribute :>> id = "GP-001";
71
+ @MemoIdentity { :>> providedId = "GP-001"; }
70
72
  attribute :>> name = "ModeRange";
71
73
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
72
74
  attribute :>> formalExpression = "guarantee mode_range: GPCA_SW_OUT.Current_System_Mode in {0, 1, 2, 3, 4, 6, 7, 8} (source enumeration omits 5)";
73
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 1)";
75
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 1)"; }
74
76
  }
75
77
  part guaranteeOffMode : BehaviorProperty {
76
78
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
77
- attribute :>> id = "GP-004";
79
+ @MemoIdentity { :>> providedId = "GP-004"; }
78
80
  attribute :>> name = "NotStartImpliesModeZero";
79
81
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
80
82
  attribute :>> formalExpression = "guarantee not(OP_CMD_IN.System_Start) => GPCA_SW_OUT.Current_System_Mode = 0";
81
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
83
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
82
84
  }
83
85
  part guaranteeInitialStart : BehaviorProperty {
84
86
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
85
- attribute :>> id = "GP-005";
87
+ @MemoIdentity { :>> providedId = "GP-005"; }
86
88
  attribute :>> name = "InitialSystemStartImpliesModeOne";
87
89
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
88
90
  attribute :>> formalExpression = "guarantee sys_initial and OP_CMD_IN.System_Start => GPCA_SW_OUT.Current_System_Mode = 1";
89
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4 allocation: TLM System_Start -> System_On; IM System_On -> mode 1)";
91
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4 allocation: TLM System_Start -> System_On; IM System_On -> mode 1)"; }
90
92
  }
91
93
  part guaranteeOffToOn : BehaviorProperty {
92
94
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
93
- attribute :>> id = "GP-006";
95
+ @MemoIdentity { :>> providedId = "GP-006"; }
94
96
  attribute :>> name = "OffToOnImpliesModeOne";
95
97
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
96
98
  attribute :>> formalExpression = "guarantee not(sys_initial) and pre(GPCA_SW_OUT.Current_System_Mode) = 0 and OP_CMD_IN.System_Start => GPCA_SW_OUT.Current_System_Mode = 1";
97
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4)";
99
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4)"; }
98
100
  }
99
101
  part guaranteeEmptyReservoirNoFlow : BehaviorProperty {
100
102
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
101
- attribute :>> id = "GP-007";
103
+ @MemoIdentity { :>> providedId = "GP-007"; }
102
104
  attribute :>> name = "EmptyReservoirImpliesNoFlow";
103
105
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
104
106
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and pre(Current_System_Mode) > 1 and GPCA_SW_OUT.Reservoir_Volume < CONST_IN.Empty_Reservoir) => GPCA_SW_OUT.Commanded_Flow_Rate = 0";
105
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 59 'Empty Reservoir')";
107
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 59 'Empty Reservoir')"; }
106
108
  }
107
109
  part guaranteeVtbiKvo : BehaviorProperty {
108
110
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
109
- attribute :>> id = "GP-008";
111
+ @MemoIdentity { :>> providedId = "GP-008"; }
110
112
  attribute :>> name = "OverVtbiImpliesFlowAtMostKvo";
111
113
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
112
114
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and pre(Current_System_Mode) > 1 and GPCA_SW_OUT.Volume_Infused > DB_IN.VTBI_High) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
113
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (over-infusion => keep-vein-open, not zero)";
115
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (over-infusion => keep-vein-open, not zero)"; }
114
116
  }
115
117
  part guaranteeAirInLineKvo : BehaviorProperty {
116
118
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
117
- attribute :>> id = "GP-009";
119
+ @MemoIdentity { :>> providedId = "GP-009"; }
118
120
  attribute :>> name = "AirInLineImpliesFlowAtMostKvo";
119
121
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
120
122
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Air_In_Line) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
121
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 21 'Air embolism')";
123
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 21 'Air embolism')"; }
122
124
  }
123
125
  part guaranteeOcclusionKvo : BehaviorProperty {
124
126
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
125
- attribute :>> id = "GP-010";
127
+ @MemoIdentity { :>> providedId = "GP-010"; }
126
128
  attribute :>> name = "OcclusionImpliesFlowAtMostKvo";
127
129
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
128
130
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Occlusion) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
129
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
131
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
130
132
  }
131
133
  part guaranteeDoorOpenKvo : BehaviorProperty {
132
134
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
133
- attribute :>> id = "GP-011";
135
+ @MemoIdentity { :>> providedId = "GP-011"; }
134
136
  attribute :>> name = "DoorOpenImpliesFlowAtMostKvo";
135
137
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
136
138
  attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Door_Open) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
137
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
139
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
138
140
  }
139
141
  part guaranteeAlarmStopsSameStep : BehaviorProperty {
140
142
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
141
- attribute :>> id = "GP-003";
143
+ @MemoIdentity { :>> providedId = "GP-003"; }
142
144
  attribute :>> name = "SameStepAlarmKvoGuarantee";
143
145
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
144
146
  attribute :>> formalExpression = "guarantee an infusion-inhibiting notification in a step implies Commanded_Flow_Rate <= Flow_Rate_KVO in the same step (ALARM_OUT -> IM.ALARM_IN is an immediate connection)";
145
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) with the flow <= KVO guarantees above";
147
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) with the flow <= KVO guarantees above"; }
146
148
  }
147
149
  part guaranteeLockoutPreventsBolus : BehaviorProperty {
148
150
  attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
149
- attribute :>> id = "GP-002";
151
+ @MemoIdentity { :>> providedId = "GP-002"; }
150
152
  attribute :>> name = "LockoutGuarantee";
151
153
  attribute :>> languageKind = PropertyLanguageKind::agreeLike;
152
154
  attribute :>> formalExpression = "guarantee a BolusRequest_prog inside the LockOutPeriod_pbolus_prog window is ignored and no PATIENT BOLUS is initiated";
153
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 25.3, REQ 26)";
155
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 25.3, REQ 26)"; }
154
156
  }
155
157
 
156
158
  // ── Temporal properties over the mode machine ───────────────
157
159
  part temporalNoInvalidTransition : BehaviorProperty {
158
- attribute :>> id = "BP-010";
160
+ @MemoIdentity { :>> providedId = "BP-010"; }
159
161
  attribute :>> name = "NoInvalidTransition";
160
162
  attribute :>> propertyKind = BehaviorPropertyKind::temporalProperty;
161
163
  attribute :>> languageKind = PropertyLanguageKind::ltlLike;
162
164
  attribute :>> formalExpression = "G(mode transitions follow only the edges of the Fig 4.1 hierarchy as constrained by REQ 4-5, 12-13, 19-23, 28-39, 46-47)";
163
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1";
165
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1"; }
164
166
  }
165
167
  part temporalPauseOnCriticalAlarm : BehaviorProperty {
166
- attribute :>> id = "BP-011";
168
+ @MemoIdentity { :>> providedId = "BP-011"; }
167
169
  attribute :>> name = "PauseAtKvoOnInhibitingNotification";
168
170
  attribute :>> propertyKind = BehaviorPropertyKind::safetyProperty;
169
171
  attribute :>> languageKind = PropertyLanguageKind::ltlLike;
170
172
  attribute :>> formalExpression = "G(infusion_inhibiting_notification -> X (mode = PAUSED and Commanded_Flow_Rate <= Flow_Rate_KVO))";
171
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 19-23) and §4.1.10.1 (REQ 43)";
173
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 19-23) and §4.1.10.1 (REQ 43)"; }
172
174
  }
173
175
  }