@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
@@ -7,6 +7,7 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
7
7
  private import memo_examples_gpca_pump_gpca_system::*;
8
8
  private import memo_examples_gpca_pump_gpca_architecture::*;
9
9
 
10
+ private import memo_core_common::MemoIdentity;
10
11
  // ═════════════════════════════════════════════════════════════
11
12
  // GPCA mode machine per CriSys Ch.4 Fig 4.1 mode hierarchy:
12
13
  // OFF, ON { IDLE, THERAPY { PAUSED, ACTIVE { BASAL,
@@ -23,108 +24,108 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
23
24
  // outside this compact mode view.
24
25
  // ═════════════════════════════════════════════════════════════
25
26
  state topLevelModeMachine : StateMachine {
26
- attribute :>> id = "BM-001";
27
+ @MemoIdentity { :>> providedId = "BM-001"; }
27
28
  attribute :>> name = "TopLevelModeMachine";
28
29
  attribute :>> machineKind = "hierarchical state machine";
29
30
  attribute :>> executionSemantics = "single-step synchronous; sub-modes inherit all parent-mode requirements";
30
31
  attribute fidelityScope = "Requirements-derived therapy mode hierarchy; partial abstraction of CITE-009, not a state-for-state Stateflow transcription";
31
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1; CITE-009: CriSys PCA Pump Software Model";
32
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1; CITE-009: CriSys PCA Pump Software Model"; }
32
33
 
33
34
  // ── Mode states (Fig 4.1) ───────────────────────────
34
35
  state modeOFF : MemoState {
35
- attribute :>> id = "MODE-000";
36
+ @MemoIdentity { :>> providedId = "MODE-000"; }
36
37
  attribute :>> stateKind = StateKind::mode;
37
38
  attribute :>> name = "OFF";
38
39
  attribute :>> modeKind = "top (default)";
39
40
  attribute :>> description = "No functionality; the GPCA is turned off. FlowRate_output = 0 (REQ 6).";
40
41
  attribute :>> entryCondition = "System_stop_prog commanded while ON (REQ 5); default mode";
41
42
  attribute :>> exitCondition = "System_start_prog commanded (REQ 4)";
42
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.2";
43
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.2"; }
43
44
  }
44
45
 
45
46
  state modeON : MemoState {
46
- attribute :>> id = "MODE-001";
47
+ @MemoIdentity { :>> providedId = "MODE-001"; }
47
48
  attribute :>> stateKind = StateKind::mode;
48
49
  attribute :>> name = "ON";
49
50
  attribute :>> modeKind = "operational parent";
50
51
  attribute :>> description = "Topmost operational mode: prescription configuration (REQ 8), infusion initiation gating (REQ 7, 9), notification (REQ 10) and logging (REQ 11) are available.";
51
52
  attribute :>> entryCondition = "System_start_prog from OFF; A.4 variables set to defaults (REQ 4)";
52
53
  attribute :>> exitCondition = "System_stop_prog: stop infusion, cancel all notifications (REQ 5)";
53
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3";
54
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3"; }
54
55
 
55
56
  state modeIDLE : MemoState {
56
- attribute :>> id = "MODE-002";
57
+ @MemoIdentity { :>> providedId = "MODE-002"; }
57
58
  attribute :>> stateKind = StateKind::mode;
58
59
  attribute :>> name = "ON.IDLE";
59
60
  attribute :>> modeKind = "idle";
60
61
  attribute :>> description = "Default sub-mode on entry to ON; no infusion, FlowRate_output = 0 (REQ 14); prescription set-up happens here. 'IDLE Time' actions after Max_IDLE_Duration_const (REQ 15).";
61
62
  attribute :>> entryCondition = "OFF -> ON transition (REQ 4); infusion complete (REQ 28); PAUSED inhibit (REQ 47)";
62
63
  attribute :>> exitCondition = "confirmed second Infusion_initiate_prog (REQ 12/13)";
63
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4";
64
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4"; }
64
65
  }
65
66
 
66
67
  state modeTHERAPY : MemoState {
67
- attribute :>> id = "MODE-003";
68
+ @MemoIdentity { :>> providedId = "MODE-003"; }
68
69
  attribute :>> stateKind = StateKind::mode;
69
70
  attribute :>> name = "ON.THERAPY";
70
71
  attribute :>> modeKind = "therapy parent";
71
72
  attribute :>> description = "Parent of all drug-delivering sub-modes. Delivers FlowRate_Mode_macro within Tolerance_Max_const (REQ 16); monitors under-infusion (REQ 17), low reservoir (REQ 18), over-infusion, VTBI, air, reverse delivery, empty reservoir (REQ 19-23).";
72
73
  attribute :>> entryCondition = "infusion initiated (REQ 12/13)";
73
74
  attribute :>> exitCondition = "infusion complete to IDLE (REQ 28); manual stop from PAUSED (REQ 47); system stop (REQ 5)";
74
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5";
75
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5"; }
75
76
 
76
77
  state modePAUSED : MemoState {
77
- attribute :>> id = "MODE-004";
78
+ @MemoIdentity { :>> providedId = "MODE-004"; }
78
79
  attribute :>> stateKind = StateKind::mode;
79
80
  attribute :>> name = "ON.THERAPY.PAUSED";
80
81
  attribute :>> modeKind = "paused (KVO delivery)";
81
82
  attribute :>> description = "Infusion paused by notification actions or manual inhibit. FlowRate_Mode_macro = FlowRate_kvo_hd — keep-vein-open flow within Tolerance_Max_const, NOT zero (REQ 43). 'PAUSED Time' actions after Max_PAUSED_Duration_const (REQ 44). Infusion_initiate_prog while Inhibited_Infusion_macro = TRUE causes no transition (REQ 45).";
82
83
  attribute :>> entryCondition = "REQ 19-23 alarm transitions, REQ 29 manual inhibit, REQ 30 all-inhibited, REQ 37-39 sub-mode inhibits, REQ 13 initiate-while-inhibited";
83
84
  attribute :>> exitCondition = "Infusion_initiate_prog with Inhibited_Infusion_macro = FALSE (REQ 46); Infusion_inhibit_prog to IDLE (REQ 47)";
84
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10 (REQ 43-47)";
85
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10 (REQ 43-47)"; }
85
86
  }
86
87
 
87
88
  state modeACTIVE : MemoState {
88
- attribute :>> id = "MODE-005";
89
+ @MemoIdentity { :>> providedId = "MODE-005"; }
89
90
  attribute :>> stateKind = StateKind::mode;
90
91
  attribute :>> name = "ON.THERAPY.ACTIVE";
91
92
  attribute :>> modeKind = "active parent";
92
93
  attribute :>> description = "Actual infusion through BASAL, SQUARE BOLUS or PATIENT BOLUS. Only mode where a patient bolus may be requested (REQ 25). Square boluses are scheduled automatically every Interval_sbolus_prog for Duration_sbolus_prog (REQ 24). Actual_Infusion_Duration_macro accumulates here.";
93
94
  attribute :>> entryCondition = "infusion initiated (REQ 12) or resumed (REQ 46)";
94
95
  attribute :>> exitCondition = "infusion complete (REQ 28); PAUSED via REQ 29/30/37-39";
95
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6";
96
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6"; }
96
97
 
97
98
  state modeBASAL : MemoState {
98
- attribute :>> id = "MODE-006";
99
+ @MemoIdentity { :>> providedId = "MODE-006"; }
99
100
  attribute :>> stateKind = StateKind::mode;
100
101
  attribute :>> name = "ON.THERAPY.ACTIVE.BASAL";
101
102
  attribute :>> modeKind = "active-basal";
102
103
  attribute :>> description = "Constant-rate delivery at FlowRate_basal_prog within Tolerance_Max_const (REQ 40). FlowRate_Mode_macro = FlowRate_basal_prog.";
103
104
  attribute :>> entryCondition = "infusion initiated/resumed (REQ 12/46); square bolus ended (REQ 34); patient bolus ended (REQ 35)";
104
105
  attribute :>> exitCondition = "scheduled square bolus (REQ 31); patient bolus granted (REQ 32); Inhibited_Infusion_macro (REQ 37)";
105
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7";
106
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7"; }
106
107
  }
107
108
 
108
109
  state modeSQUARE : MemoState {
109
- attribute :>> id = "MODE-007";
110
+ @MemoIdentity { :>> providedId = "MODE-007"; }
110
111
  attribute :>> stateKind = StateKind::mode;
111
112
  attribute :>> name = "ON.THERAPY.ACTIVE.SQUARE_BOLUS";
112
113
  attribute :>> modeKind = "active-square-bolus (auto-scheduled)";
113
114
  attribute :>> description = "Prescribed extra delivery at FlowRate_sbolus_prog within Tolerance_Max_const (REQ 41). Auto-initiates at the prescribed frequency and ends after the prescribed duration — no external trigger (§4.1.8, REQ 24). FlowRate_Mode_macro = FlowRate_sbolus_prog.";
114
115
  attribute :>> entryCondition = "scheduled start per REQ 24 with REQ 31 guards; patient bolus end with square scheduled (REQ 36)";
115
116
  attribute :>> exitCondition = "scheduled end or Inhibited_Bolus_macro (REQ 34); patient bolus granted (REQ 33); inhibits (REQ 39)";
116
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8";
117
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8"; }
117
118
  }
118
119
 
119
120
  state modePBOLUS : MemoState {
120
- attribute :>> id = "MODE-008";
121
+ @MemoIdentity { :>> providedId = "MODE-008"; }
121
122
  attribute :>> stateKind = StateKind::mode;
122
123
  attribute :>> name = "ON.THERAPY.ACTIVE.PATIENT_BOLUS";
123
124
  attribute :>> modeKind = "active-patient-bolus";
124
125
  attribute :>> description = "Patient-requested delivery at FlowRate_pbolus_prog within Tolerance_Max_const (REQ 42). Granted only when no REQ 25 ignore condition holds. FlowRate_Mode_macro = FlowRate_pbolus_prog.";
125
126
  attribute :>> entryCondition = "BolusRequest_prog with no REQ 25 ignore condition (REQ 32/33)";
126
127
  attribute :>> exitCondition = "Inhibited_PatientBolus_macro or duration >= Duration_pbolus_prog (REQ 35/36); inhibits (REQ 38)";
127
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9";
128
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9"; }
128
129
  }
129
130
  }
130
131
  }
@@ -330,22 +331,22 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
330
331
  // The individual configurations remain ordinary model elements, so their
331
332
  // active mode is navigable as well as visible in the choice-point edge.
332
333
  part basalConfiguration : ModeConfiguration {
333
- attribute :>> id = "CFG-001";
334
+ @MemoIdentity { :>> providedId = "CFG-001"; }
334
335
  attribute :>> name = "BasalTherapyConfiguration";
335
336
  ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modeBASAL;
336
337
  }
337
338
  part squareBolusConfiguration : ModeConfiguration {
338
- attribute :>> id = "CFG-002";
339
+ @MemoIdentity { :>> providedId = "CFG-002"; }
339
340
  attribute :>> name = "SquareBolusConfiguration";
340
341
  ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modeSQUARE;
341
342
  }
342
343
  part patientBolusConfiguration : ModeConfiguration {
343
- attribute :>> id = "CFG-003";
344
+ @MemoIdentity { :>> providedId = "CFG-003"; }
344
345
  attribute :>> name = "PatientBolusConfiguration";
345
346
  ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modePBOLUS;
346
347
  }
347
348
  part pausedConfiguration : ModeConfiguration {
348
- attribute :>> id = "CFG-004";
349
+ @MemoIdentity { :>> providedId = "CFG-004"; }
349
350
  attribute :>> name = "PausedKvoConfiguration";
350
351
  ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modePAUSED;
351
352
  }
@@ -358,59 +359,59 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
358
359
 
359
360
  // ── Behavior properties and timing constraints ──────────────
360
361
  part propAlarmStopsSameStep : BehaviorProperty {
361
- attribute :>> id = "BP-002";
362
+ @MemoIdentity { :>> providedId = "BP-002"; }
362
363
  attribute :>> name = "AlarmResponseSameStepKvo";
363
364
  attribute :>> propertyKind = BehaviorPropertyKind::safetyProperty;
364
365
  attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
365
366
  attribute :>> formalExpression = "ALARM.ALARM_OUT -> IM.ALARM_IN is an AADL immediate connection: when an infusion-inhibiting notification asserts, Infusion_Manager limits Commanded_Flow_Rate <= FlowRate_kvo_hd in the same execution step";
366
- attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) and AGREE flow <= KVO guarantees";
367
+ @MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) and AGREE flow <= KVO guarantees"; }
367
368
  }
368
369
  part propPausedNoResumeWhileInhibited : BehaviorProperty {
369
- attribute :>> id = "BP-004";
370
+ @MemoIdentity { :>> providedId = "BP-004"; }
370
371
  attribute :>> name = "PausedNoTransitionWhileInhibited";
371
372
  attribute :>> propertyKind = BehaviorPropertyKind::stateInvariant;
372
373
  attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
373
374
  attribute :>> formalExpression = "in PAUSED: Infusion_initiate_prog AND Inhibited_Infusion_macro = TRUE => mode unchanged";
374
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)";
375
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)"; }
375
376
  }
376
377
  part propModeTimeoutActions : BehaviorProperty {
377
- attribute :>> id = "BP-005";
378
+ @MemoIdentity { :>> providedId = "BP-005"; }
378
379
  attribute :>> name = "IdleAndPausedTimeoutActions";
379
380
  attribute :>> propertyKind = BehaviorPropertyKind::transitionRule;
380
381
  attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
381
382
  attribute :>> formalExpression = "time in IDLE > Max_IDLE_Duration_const => REQ 59 'IDLE Time' actions; time in PAUSED > Max_PAUSED_Duration_const => REQ 59 'PAUSED Time' actions (notification actions, not mode transitions)";
382
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 15) and §4.1.10.1 (REQ 44)";
383
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 15) and §4.1.10.1 (REQ 44)"; }
383
384
  }
384
385
  part propLockoutTimerMonotonic : BehaviorProperty {
385
- attribute :>> id = "BP-003";
386
+ @MemoIdentity { :>> providedId = "BP-003"; }
386
387
  attribute :>> name = "LockoutTimerNeverShortened";
387
388
  attribute :>> propertyKind = BehaviorPropertyKind::stateInvariant;
388
389
  attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
389
390
  attribute :>> formalExpression = "lockout_remaining decreases only with elapsed time; no input path resets it early";
390
- attribute :>> sourceReference = "MEMO extension — supports the REQ 25.3 lockout ignore condition; invariant not stated by the source";
391
+ @MemoIdentity { :>> sourceReference = "MEMO extension — supports the REQ 25.3 lockout ignore condition; invariant not stated by the source"; }
391
392
  }
392
393
  part tcAlarmLatency : TimingConstraint {
393
- attribute :>> id = "TC-001";
394
+ @MemoIdentity { :>> providedId = "TC-001"; }
394
395
  attribute :>> name = "AlarmToSafeStateLatency";
395
396
  attribute :>> constraintKind = TimingConstraintKind::latency;
396
397
  attribute :>> minMs = "0";
397
398
  attribute :>> maxMs = "20";
398
399
  ref :>> referenceElement = fcAlarmStop;
399
- attribute :>> verificationMethod = VerificationMethodKind::modelChecking;
400
- attribute :>> sourceReference = "MEMO extension — illustrative wall-clock budget; the source specifies synchronous same-step (immediate) semantics with no timing figures";
400
+ attribute :>> verificationMethod = MemoVerificationMethodKind::modelChecking;
401
+ @MemoIdentity { :>> sourceReference = "MEMO extension — illustrative wall-clock budget; the source specifies synchronous same-step (immediate) semantics with no timing figures"; }
401
402
  }
402
403
  part tcBolusResponse : TimingConstraint {
403
- attribute :>> id = "TC-002";
404
+ @MemoIdentity { :>> providedId = "TC-002"; }
404
405
  attribute :>> name = "BolusRequestResponseLatency";
405
406
  attribute :>> constraintKind = TimingConstraintKind::latency;
406
407
  attribute :>> minMs = "0";
407
408
  attribute :>> maxMs = "100";
408
409
  ref :>> referenceElement = fcPatientBolus;
409
- attribute :>> verificationMethod = VerificationMethodKind::test;
410
- attribute :>> sourceReference = "MEMO extension — illustrative wall-clock budget; not specified by the source";
410
+ attribute :>> verificationMethod = MemoVerificationMethodKind::test;
411
+ @MemoIdentity { :>> sourceReference = "MEMO extension — illustrative wall-clock budget; not specified by the source"; }
411
412
  }
412
413
  part tcWatchdogTimeout : TimingConstraint {
413
- attribute :>> id = "TC-003";
414
+ @MemoIdentity { :>> providedId = "TC-003"; }
414
415
  attribute :>> name = "WatchdogTimeout";
415
416
  attribute :>> constraintKind = TimingConstraintKind::deadline;
416
417
  attribute :>> minMs = "40";
@@ -420,7 +421,7 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
420
421
  // `referenceElement` is a MemoPart; a requirement is a requirement def
421
422
  // and does not conform to it — that link is REQ-X-08's own trace.
422
423
  ref :>> referenceElement = gpcaDevice.gpcaSoftware.systemMonitor;
423
- attribute :>> verificationMethod = VerificationMethodKind::test;
424
- attribute :>> sourceReference = "MEMO extension — supports extension requirement REQ-X-08; watchdog not specified by the source";
424
+ attribute :>> verificationMethod = MemoVerificationMethodKind::test;
425
+ @MemoIdentity { :>> sourceReference = "MEMO extension — supports extension requirement REQ-X-08; watchdog not specified by the source"; }
425
426
  }
426
427
  }
@@ -8,9 +8,10 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
8
8
  private import memo_assurance_requirements::*;
9
9
  private import memo_core_common::*;
10
10
 
11
+ private import memo_core_common::MemoIdentity;
11
12
  // ── Logical functions ───────────────────────────────────────
12
13
  action fnAcquireSensors : SystemFunction {
13
- attribute :>> id = "FUNC-001";
14
+ @MemoIdentity { :>> providedId = "FUNC-001"; }
14
15
  attribute :>> name = "AcquireSensorData";
15
16
  attribute :>> functionCategory = "sensing";
16
17
  attribute :>> trigger = "every 20 ms execution step";
@@ -27,7 +28,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
27
28
  // requires — a component function allocated nowhere is a
28
29
  // responsibility nobody has accepted.
29
30
  action cfnMeasureFlowRate : ComponentFunction {
30
- attribute :>> id = "CFUN-001";
31
+ @MemoIdentity { :>> providedId = "CFUN-001"; }
31
32
  attribute :>> name = "MeasureFlowRate";
32
33
  attribute :>> functionCategory = "sensing";
33
34
  attribute :>> actionKind = ActionKind::sense;
@@ -37,7 +38,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
37
38
  attribute :>> criticality = CriticalityKind::catastrophic;
38
39
  }
39
40
  action cfnDetectAirInLine : ComponentFunction {
40
- attribute :>> id = "CFUN-002";
41
+ @MemoIdentity { :>> providedId = "CFUN-002"; }
41
42
  attribute :>> name = "DetectAirInLine";
42
43
  attribute :>> functionCategory = "protection";
43
44
  attribute :>> actionKind = ActionKind::sense;
@@ -48,7 +49,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
48
49
  }
49
50
  // The subassembly case: a component function need not sit on a leaf part.
50
51
  action cfnAggregateSensorStatus : ComponentFunction {
51
- attribute :>> id = "CFUN-003";
52
+ @MemoIdentity { :>> providedId = "CFUN-003"; }
52
53
  attribute :>> name = "AggregateSensorStatus";
53
54
  attribute :>> functionCategory = "sensing";
54
55
  attribute :>> actionKind = ActionKind::transform;
@@ -60,7 +61,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
60
61
  }
61
62
 
62
63
  action fnValidatePrescription : SystemFunction {
63
- attribute :>> id = "FUNC-002";
64
+ @MemoIdentity { :>> providedId = "FUNC-002"; }
64
65
  attribute :>> name = "ValidatePrescription";
65
66
  attribute :>> functionCategory = "configuration";
66
67
  attribute :>> trigger = "prescription entry or edit";
@@ -69,7 +70,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
69
70
  attribute :>> criticality = CriticalityKind::catastrophic;
70
71
  }
71
72
  action fnMonitorAlarm : SystemFunction {
72
- attribute :>> id = "FUNC-003";
73
+ @MemoIdentity { :>> providedId = "FUNC-003"; }
73
74
  attribute :>> name = "MonitorExceptionalConditions";
74
75
  attribute :>> functionCategory = "alarm";
75
76
  attribute :>> trigger = "every 20 ms execution step";
@@ -78,7 +79,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
78
79
  attribute :>> criticality = CriticalityKind::catastrophic;
79
80
  }
80
81
  action fnAnnunciate : SystemFunction {
81
- attribute :>> id = "FUNC-004";
82
+ @MemoIdentity { :>> providedId = "FUNC-004"; }
82
83
  attribute :>> name = "AnnunciateAlarms";
83
84
  attribute :>> functionCategory = "alarm";
84
85
  attribute :>> trigger = "alarm raised, escalated, or cleared";
@@ -87,7 +88,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
87
88
  attribute :>> criticality = CriticalityKind::high;
88
89
  }
89
90
  action fnManageInfusion : SystemFunction {
90
- attribute :>> id = "FUNC-005";
91
+ @MemoIdentity { :>> providedId = "FUNC-005"; }
91
92
  attribute :>> name = "ManageInfusion";
92
93
  attribute :>> functionCategory = "infusion";
93
94
  attribute :>> trigger = "mode transitions and each execution step while therapy active";
@@ -96,7 +97,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
96
97
  attribute :>> criticality = CriticalityKind::catastrophic;
97
98
  }
98
99
  action fnEnforceLimits : SystemFunction {
99
- attribute :>> id = "FUNC-006";
100
+ @MemoIdentity { :>> providedId = "FUNC-006"; }
100
101
  attribute :>> name = "EnforceDoseLimits";
101
102
  attribute :>> functionCategory = "infusion";
102
103
  attribute :>> trigger = "patient bolus request or clinician square bolus command";
@@ -105,7 +106,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
105
106
  attribute :>> criticality = CriticalityKind::catastrophic;
106
107
  }
107
108
  action fnCommandPump : SystemFunction {
108
- attribute :>> id = "FUNC-007";
109
+ @MemoIdentity { :>> providedId = "FUNC-007"; }
109
110
  attribute :>> name = "CommandPumpMotor";
110
111
  attribute :>> functionCategory = "actuation";
111
112
  attribute :>> trigger = "flow command update";
@@ -114,7 +115,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
114
115
  attribute :>> criticality = CriticalityKind::catastrophic;
115
116
  }
116
117
  action fnLogEvents : SystemFunction {
117
- attribute :>> id = "FUNC-008";
118
+ @MemoIdentity { :>> providedId = "FUNC-008"; }
118
119
  attribute :>> name = "LogTherapyEvents";
119
120
  attribute :>> functionCategory = "logging";
120
121
  attribute :>> trigger = "dose delivered, mode change, alarm, or configuration change";
@@ -123,7 +124,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
123
124
  attribute :>> criticality = CriticalityKind::medium;
124
125
  }
125
126
  action fnManagePower : SystemFunction {
126
- attribute :>> id = "FUNC-009";
127
+ @MemoIdentity { :>> providedId = "FUNC-009"; }
127
128
  attribute :>> name = "ManagePower";
128
129
  attribute :>> functionCategory = "platform";
129
130
  attribute :>> trigger = "mains-loss signal or battery level change";
@@ -132,7 +133,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
132
133
  attribute :>> criticality = CriticalityKind::high;
133
134
  }
134
135
  action fnPresentStatus : SystemFunction {
135
- attribute :>> id = "FUNC-010";
136
+ @MemoIdentity { :>> providedId = "FUNC-010"; }
136
137
  attribute :>> name = "PresentStatus";
137
138
  attribute :>> functionCategory = "user-interface";
138
139
  attribute :>> trigger = "state or prescription change";
@@ -141,7 +142,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
141
142
  attribute :>> criticality = CriticalityKind::high;
142
143
  }
143
144
  action fnSelfTest : SystemFunction {
144
- attribute :>> id = "FUNC-011";
145
+ @MemoIdentity { :>> providedId = "FUNC-011"; }
145
146
  attribute :>> name = "ExecuteSelfTest";
146
147
  attribute :>> functionCategory = "platform";
147
148
  attribute :>> trigger = "power-on and periodic in-service checks";
@@ -152,7 +153,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
152
153
 
153
154
  // ── Logical flows ───────────────────────────────────────────
154
155
  part lfSensorAcquisition : FunctionalExchange {
155
- attribute :>> id = "LF-001";
156
+ @MemoIdentity { :>> providedId = "LF-001"; }
156
157
  attribute :>> name = "SensorAcquisitionFlow";
157
158
  attribute :>> flowKind = FlowKind::measurement;
158
159
  attribute :>> latencyBudgetMs = 20.0;
@@ -162,7 +163,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
162
163
  ref :>> targetFunction = fnMonitorAlarm;
163
164
  }
164
165
  part lfFlowCommand : FunctionalExchange {
165
- attribute :>> id = "LF-002";
166
+ @MemoIdentity { :>> providedId = "LF-002"; }
166
167
  attribute :>> name = "FlowCommandFlow";
167
168
  attribute :>> flowKind = FlowKind::command;
168
169
  attribute :>> latencyBudgetMs = 20.0;
@@ -172,7 +173,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
172
173
  ref :>> targetFunction = fnCommandPump;
173
174
  }
174
175
  part lfAlarmSignal : FunctionalExchange {
175
- attribute :>> id = "LF-003";
176
+ @MemoIdentity { :>> providedId = "LF-003"; }
176
177
  attribute :>> name = "AlarmSignalFlow";
177
178
  attribute :>> flowKind = FlowKind::alarm;
178
179
  attribute :>> latencyBudgetMs = 20.0;
@@ -182,7 +183,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
182
183
  ref :>> targetFunction = fnAnnunciate;
183
184
  }
184
185
  part lfPrescriptionEntry : FunctionalExchange {
185
- attribute :>> id = "LF-004";
186
+ @MemoIdentity { :>> providedId = "LF-004"; }
186
187
  attribute :>> name = "PrescriptionEntryFlow";
187
188
  attribute :>> flowKind = FlowKind::configuration;
188
189
  attribute :>> latencyBudgetMs = 500.0;
@@ -194,7 +195,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
194
195
  // ── Exchange item definitions ───────────────────────────────
195
196
  item ddPrescription : InterfaceItem {
196
197
  attribute :>> itemKind = InterfaceItemKind::data;
197
- attribute :>> id = "DD-001";
198
+ @MemoIdentity { :>> providedId = "DD-001"; }
198
199
  attribute :>> name = "PrescriptionRecord";
199
200
  attribute :>> semantics = "patient id, drug name, concentration, VTBI total, duration total, basal flow rate, square bolus rate/duration/interval, patient bolus rate/duration/lockout period, max boluses per hour (DD-005..DD-017)";
200
201
  attribute :>> unit = "ml/hr, ml, minutes, mg/ml, per hour";
@@ -205,11 +206,11 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
205
206
  attribute :>> integrityClass = "class C";
206
207
  attribute :>> confidentialityClass = "clinical";
207
208
  attribute :>> availabilityClass = "must survive power loss";
208
- attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.1.1 Prescription Data";
209
+ @MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.1.1 Prescription Data"; }
209
210
  }
210
211
  item ddBolusRequest : InterfaceItem {
211
212
  attribute :>> itemKind = InterfaceItemKind::data;
212
- attribute :>> id = "DD-002";
213
+ @MemoIdentity { :>> providedId = "DD-002"; }
213
214
  attribute :>> name = "BolusRequestSignal";
214
215
  attribute :>> semantics = "debounced patient pendant press event";
215
216
  attribute :>> encoding = "edge event with 50 ms debounce";
@@ -220,7 +221,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
220
221
  }
221
222
  item ddSensorVector : InterfaceItem {
222
223
  attribute :>> itemKind = InterfaceItemKind::data;
223
- attribute :>> id = "DD-003";
224
+ @MemoIdentity { :>> providedId = "DD-003"; }
224
225
  attribute :>> name = "SensorStatusVector";
225
226
  attribute :>> semantics = "air-in-line, occlusion pressure, reservoir volume, door state, flow measurement, battery level, CPU/memory status";
226
227
  attribute :>> encoding = "fixed-layout status word per 20 ms step";
@@ -231,7 +232,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
231
232
  }
232
233
  item ddEventRecord : InterfaceItem {
233
234
  attribute :>> itemKind = InterfaceItemKind::data;
234
- attribute :>> id = "DD-004";
235
+ @MemoIdentity { :>> providedId = "DD-004"; }
235
236
  attribute :>> name = "TherapyEventRecord";
236
237
  attribute :>> semantics = "timestamped dose, alarm, mode, and configuration events";
237
238
  attribute :>> encoding = "append-only sequenced records";
@@ -242,7 +243,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
242
243
  }
243
244
  item cdFlowCommand : InterfaceItem {
244
245
  attribute :>> itemKind = InterfaceItemKind::command;
245
- attribute :>> id = "CD-001";
246
+ @MemoIdentity { :>> providedId = "CD-001"; }
246
247
  attribute :>> name = "FlowCommand";
247
248
  attribute :>> controlType = "commanded flow rate with enable interlock";
248
249
  attribute :>> timeoutMs = 40.0;
@@ -250,7 +251,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
250
251
  }
251
252
  item cdAlarmSignal : InterfaceItem {
252
253
  attribute :>> itemKind = InterfaceItemKind::command;
253
- attribute :>> id = "CD-002";
254
+ @MemoIdentity { :>> providedId = "CD-002"; }
254
255
  attribute :>> name = "AlarmSignal";
255
256
  attribute :>> controlType = "priority-coded alarm assertion (level 1 stops infusion, level 2 warns)";
256
257
  attribute :>> timeoutMs = 20.0;