@memoarchitect/ontology 0.7.0 → 0.8.22

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 (204) hide show
  1. package/README.md +4 -2
  2. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
  3. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
  4. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  5. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
  6. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
  7. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
  8. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
  9. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
  10. package/examples/gpca-pump/model/catalog/gpca_context.sysml +9 -0
  11. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +9 -5
  12. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
  13. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +82 -58
  14. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
  15. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
  16. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  17. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -2
  18. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -331
  19. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
  20. package/examples/gpca-pump/model/catalog/project.sysml +5 -0
  21. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +1 -1
  22. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +1 -1
  23. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +1 -1
  24. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +1 -1
  25. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +2 -2
  26. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +1 -1
  27. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +1 -1
  28. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +1 -1
  29. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +2 -2
  30. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -2
  31. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -2
  32. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +1 -1
  33. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +1 -1
  34. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +2 -2
  35. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -2
  36. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +4 -2
  37. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +1 -1
  38. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +3 -2
  39. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  40. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
  41. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
  42. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
  43. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
  44. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -5
  45. package/examples/ros-mobile-robot/README.md +40 -0
  46. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  47. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  48. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  49. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
  50. package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
  51. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
  52. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -60
  53. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
  54. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -15
  55. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -9
  56. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +42 -66
  57. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +56 -66
  58. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +26 -55
  59. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +3 -6
  60. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +0 -18
  61. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +51 -82
  62. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +21 -31
  63. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -8
  64. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -21
  65. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
  66. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
  67. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
  68. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
  69. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  70. package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
  71. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -1
  72. package/extensions/LICENSES/MIT.txt +19 -0
  73. package/extensions/README.md +94 -0
  74. package/extensions/aadl/memo.package.yaml +18 -0
  75. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  76. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  77. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  78. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  79. package/extensions/cloud/memo.package.yaml +18 -0
  80. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  81. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  82. package/extensions/container/memo.package.yaml +18 -0
  83. package/extensions/container/src/container_extension.sysml +37 -0
  84. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  85. package/extensions/messaging/memo.package.yaml +18 -0
  86. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  87. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  88. package/extensions/ros/memo.package.yaml +18 -0
  89. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  90. package/extensions/ros/src/ros_extension.sysml +200 -0
  91. package/extensions/template/src/extension.sysml +37 -0
  92. package/memo.manifest.yaml +13 -2
  93. package/methodologies/default/memo.package.yaml +1 -1
  94. package/methodologies/gpca/memo.package.yaml +1 -1
  95. package/ontology/memo.package.yaml +1 -1
  96. package/package.json +5 -3
  97. package/profile/memo.package.yaml +1 -1
  98. package/src/architecture/decisions/memo_decisions.sysml +23 -2
  99. package/src/architecture/functional/behavior/memo_behavior.sysml +49 -21
  100. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  101. package/src/architecture/functional/functions/memo_functions.sysml +91 -34
  102. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
  103. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +37 -10
  104. package/src/architecture/implementation/ui/memo_ui.sysml +78 -38
  105. package/src/architecture/logical/interfaces/memo_interfaces.sysml +63 -11
  106. package/src/architecture/logical/structure/memo_logical_structure.sysml +21 -20
  107. package/src/architecture/operational/activities/memo_activities.sysml +10 -3
  108. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
  109. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
  110. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
  111. package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
  112. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
  113. package/src/architecture/operational/workflows/memo_workflows.sysml +29 -10
  114. package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
  115. package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
  116. package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
  117. package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
  118. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  119. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  120. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  121. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  122. package/src/artifacts/standards/iec_60812.sysml +51 -0
  123. package/src/artifacts/standards/iec_62304.sysml +210 -0
  124. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  125. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  126. package/src/artifacts/standards/iso_13485.sysml +113 -0
  127. package/src/artifacts/standards/iso_14971.sysml +94 -0
  128. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  129. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  130. package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
  131. package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
  132. package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
  133. package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
  134. package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
  135. package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
  136. package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
  137. package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
  138. package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
  139. package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
  140. package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
  141. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
  142. package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
  143. package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
  144. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
  145. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  146. package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
  147. package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
  148. package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
  149. package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
  150. package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
  151. package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
  152. package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
  153. package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
  154. package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
  155. package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
  156. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
  157. package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
  158. package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
  159. package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
  160. package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
  161. package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
  162. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  163. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  164. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  165. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  166. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
  167. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  168. package/src/assurance/requirements/memo_requirements.sysml +5 -2
  169. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  170. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  171. package/src/assurance/safety_risk/memo_risk.sysml +78 -7
  172. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
  173. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  174. package/src/core/annotations/memo_annotations.sysml +25 -6
  175. package/src/core/common/memo_common.sysml +121 -16
  176. package/src/core/consistency_rules/consistency_rules.sysml +1 -1
  177. package/src/core/dimensions/dimensions.sysml +12 -0
  178. package/src/core/enumerations/memo_enumerations.sysml +60 -14
  179. package/src/core/relationships/memo_relationships.sysml +199 -196
  180. package/src/memo_namespaces.sysml +30 -0
  181. package/src/methodology/core/memo_core.sysml +24 -0
  182. package/src/methodology/profiles/memo_profiles.sysml +1 -1
  183. package/src/rules/ontology/ontology_invariants.sysml +213 -1
  184. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +3 -3
  185. package/src/viewpoints/clinical/clinical_viewpoint.sysml +1 -1
  186. package/src/viewpoints/context/context_viewpoint.sysml +1 -1
  187. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -1
  188. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +1 -0
  189. package/src/viewpoints/functional/functional_viewpoint.sysml +1 -1
  190. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +1 -1
  191. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +1 -1
  192. package/src/viewpoints/operational/operational_viewpoint.sysml +1 -1
  193. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +1 -1
  194. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +1 -1
  195. package/src/viewpoints/verification/verification_viewpoint.sysml +1 -1
  196. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +1 -1
  197. package/examples/extensions/README.md +0 -16
  198. package/examples/extensions/template/src/extension.sysml +0 -15
  199. package/examples/gpca-pump/gpca-pump.kpar +0 -0
  200. /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
  201. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  202. /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
  203. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  204. /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
@@ -1,6 +1,6 @@
1
1
  // State transition sample (statetransition view kind, `stm` diagram type). A
2
- // behaviour machine owns its mode states; each Transition carries `sourceState`
3
- // / `targetState` naming the states it connects, and renders as a labelled edge.
2
+ // behaviour machine owns its mode states by containing them, and each native
3
+ // transition lives inside the state whose substates it connects.
4
4
  package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_state_transition_view {
5
5
  private import ScalarValues::*;
6
6
 
@@ -9,74 +9,57 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_state_tr
9
9
  private import memo_viewpoints_definitions::*;
10
10
  private import memo_viewpoints_functional_functional_viewpoint::*;
11
11
  private import memo_core_enumerations::*;
12
+ private import memo_core_common::*;
12
13
 
13
- state pumpModes : StateMachine { attribute :>> name = "Pump Operating Modes"; }
14
+ state pumpModes : StateMachine {
15
+ attribute :>> name = "Pump Operating Modes";
14
16
 
15
- state idle : ModeState { attribute :>> name = "Idle"; }
16
- state infusing : ModeState { attribute :>> name = "Infusing"; }
17
- state paused : ModeState { attribute :>> name = "Paused"; }
18
- state alarm : ModeState { attribute :>> name = "Alarm"; }
17
+ state idle : MemoState { attribute :>> stateKind = StateKind::mode; attribute :>> name = "Idle"; }
19
18
 
20
- // Infusing is a composite state: its substates show what the pump is doing
21
- // while it is infusing, and the machine renders them nested inside it.
22
- state priming : ModeState { attribute :>> name = "Priming"; }
23
- state delivering : ModeState { attribute :>> name = "Delivering"; }
24
- state holding : ModeState { attribute :>> name = "Holding (KVO)"; }
19
+ // Infusing is a composite state: its substates show what the pump is
20
+ // doing while it is infusing, and containment is the nesting itself —
21
+ // not a parallel set of Composes edges.
22
+ state infusing : MemoState {
23
+ attribute :>> stateKind = StateKind::mode;
24
+ attribute :>> name = "Infusing";
25
25
 
26
- part tStart : Transition {
27
- attribute :>> name = "start";
28
- attribute :>> trigger = "startInfusion";
29
- attribute :>> sourceState = "Idle"; attribute :>> targetState = "Infusing";
30
- }
31
- part tPause : Transition {
32
- attribute :>> name = "pause";
33
- attribute :>> trigger = "pauseRequested";
34
- attribute :>> sourceState = "Infusing"; attribute :>> targetState = "Paused";
35
- }
36
- part tResume : Transition {
37
- attribute :>> name = "resume";
38
- attribute :>> trigger = "resumeRequested";
39
- attribute :>> sourceState = "Paused"; attribute :>> targetState = "Infusing";
40
- }
41
- part tFault : Transition {
42
- attribute :>> name = "fault";
43
- attribute :>> trigger = "occlusionDetected";
44
- attribute :>> sourceState = "Infusing"; attribute :>> targetState = "Alarm";
45
- }
46
- part tRecover : Transition {
47
- attribute :>> name = "acknowledge";
48
- attribute :>> trigger = "alarmCleared";
49
- attribute :>> sourceState = "Alarm"; attribute :>> targetState = "Idle";
50
- }
51
- part tStop : Transition {
52
- attribute :>> name = "stop";
53
- attribute :>> trigger = "stopInfusion";
54
- attribute :>> sourceState = "Infusing"; attribute :>> targetState = "Idle";
55
- }
26
+ state priming : MemoState { attribute :>> stateKind = StateKind::mode; attribute :>> name = "Priming"; }
27
+ state delivering : MemoState { attribute :>> stateKind = StateKind::mode; attribute :>> name = "Delivering"; }
28
+ state holding : MemoState { attribute :>> stateKind = StateKind::mode; attribute :>> name = "Holding (KVO)"; }
56
29
 
57
- part tPrimed : Transition {
58
- attribute :>> name = "primed";
59
- attribute :>> trigger = "primeComplete";
60
- attribute :>> sourceState = "Priming"; attribute :>> targetState = "Delivering";
61
- }
62
- part tKvo : Transition {
63
- attribute :>> name = "keepVeinOpen";
64
- attribute :>> trigger = "doseComplete";
65
- attribute :>> sourceState = "Delivering"; attribute :>> targetState = "Holding (KVO)";
66
- }
67
- part tResumeDose : Transition {
68
- attribute :>> name = "resumeDose";
69
- attribute :>> trigger = "doseScheduled";
70
- attribute :>> sourceState = "Holding (KVO)"; attribute :>> targetState = "Delivering";
71
- }
30
+ transition tPrimed first priming then delivering {
31
+ @TransitionRecord { :>> name = "primed"; :>> trigger = "primeComplete"; }
32
+ }
33
+ transition tKvo first delivering then holding {
34
+ @TransitionRecord { :>> name = "keepVeinOpen"; :>> trigger = "doseComplete"; }
35
+ }
36
+ transition tResumeDose first holding then delivering {
37
+ @TransitionRecord { :>> name = "resumeDose"; :>> trigger = "doseScheduled"; }
38
+ }
39
+ }
40
+
41
+ state paused : MemoState { attribute :>> stateKind = StateKind::mode; attribute :>> name = "Paused"; }
42
+ state alarm : MemoState { attribute :>> stateKind = StateKind::mode; attribute :>> name = "Alarm"; }
72
43
 
73
- connection : Composes connect parent ::> pumpModes to child ::> idle;
74
- connection : Composes connect parent ::> pumpModes to child ::> infusing;
75
- connection : Composes connect parent ::> pumpModes to child ::> paused;
76
- connection : Composes connect parent ::> pumpModes to child ::> alarm;
77
- connection : Composes connect parent ::> infusing to child ::> priming;
78
- connection : Composes connect parent ::> infusing to child ::> delivering;
79
- connection : Composes connect parent ::> infusing to child ::> holding;
44
+ transition tStart first idle then infusing {
45
+ @TransitionRecord { :>> name = "start"; :>> trigger = "startInfusion"; }
46
+ }
47
+ transition tPause first infusing then paused {
48
+ @TransitionRecord { :>> name = "pause"; :>> trigger = "pauseRequested"; }
49
+ }
50
+ transition tResume first paused then infusing {
51
+ @TransitionRecord { :>> name = "resume"; :>> trigger = "resumeRequested"; }
52
+ }
53
+ transition tFault first infusing then alarm {
54
+ @TransitionRecord { :>> name = "fault"; :>> trigger = "occlusionDetected"; }
55
+ }
56
+ transition tRecover first alarm then idle {
57
+ @TransitionRecord { :>> name = "acknowledge"; :>> trigger = "alarmCleared"; }
58
+ }
59
+ transition tStop first infusing then idle {
60
+ @TransitionRecord { :>> name = "stop"; :>> trigger = "stopInfusion"; }
61
+ }
62
+ }
80
63
 
81
64
  view sampleStateTransitionView : MemoDiagramView {
82
65
  expose pumpModes::**;
@@ -87,25 +70,11 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_state_tr
87
70
  attribute :>> diagramType = "stm";
88
71
  part :>> viewpointDefinition = functionalViewpoint;
89
72
  part :>> selectionQuery {
90
- attribute :>> includeElementKinds = ("StateMachine", "ModeState", "Transition");
73
+ attribute :>> includeElementKinds = ("StateMachine", "MemoState");
91
74
  }
92
75
  }
93
76
 
94
- connection : IncludedIn connect sourceElement ::> pumpModes to targetView ::> sampleStateTransitionView;
95
- connection : IncludedIn connect sourceElement ::> idle to targetView ::> sampleStateTransitionView;
96
- connection : IncludedIn connect sourceElement ::> infusing to targetView ::> sampleStateTransitionView;
97
- connection : IncludedIn connect sourceElement ::> paused to targetView ::> sampleStateTransitionView;
98
- connection : IncludedIn connect sourceElement ::> alarm to targetView ::> sampleStateTransitionView;
99
- connection : IncludedIn connect sourceElement ::> tStart to targetView ::> sampleStateTransitionView;
100
- connection : IncludedIn connect sourceElement ::> tPause to targetView ::> sampleStateTransitionView;
101
- connection : IncludedIn connect sourceElement ::> tResume to targetView ::> sampleStateTransitionView;
102
- connection : IncludedIn connect sourceElement ::> tFault to targetView ::> sampleStateTransitionView;
103
- connection : IncludedIn connect sourceElement ::> tRecover to targetView ::> sampleStateTransitionView;
104
- connection : IncludedIn connect sourceElement ::> tStop to targetView ::> sampleStateTransitionView;
105
- connection : IncludedIn connect sourceElement ::> priming to targetView ::> sampleStateTransitionView;
106
- connection : IncludedIn connect sourceElement ::> delivering to targetView ::> sampleStateTransitionView;
107
- connection : IncludedIn connect sourceElement ::> holding to targetView ::> sampleStateTransitionView;
108
- connection : IncludedIn connect sourceElement ::> tPrimed to targetView ::> sampleStateTransitionView;
109
- connection : IncludedIn connect sourceElement ::> tKvo to targetView ::> sampleStateTransitionView;
110
- connection : IncludedIn connect sourceElement ::> tResumeDose to targetView ::> sampleStateTransitionView;
77
+ // The machine is one containment tree, so exposing its root reaches every
78
+ // state and transition; the former per-element IncludedIn list restated
79
+ // that tree a second time and is gone with it.
111
80
  }
@@ -8,31 +8,31 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_vie
8
8
  private import memo_viewpoints_physical_physical_viewpoint::*;
9
9
  private import memo_core_enumerations::*;
10
10
 
11
- part rootA : HardwareAssembly { attribute :>> name = "Root A"; }
12
- part rootB : HardwareAssembly { attribute :>> name = "Root B"; }
13
- part branchA1 : HardwareAssembly { attribute :>> name = "Branch A.1"; }
14
- part branchA2 : HardwareAssembly { attribute :>> name = "Branch A.2 With A Deliberately Long Label"; }
15
- part branchB1 : HardwareAssembly { attribute :>> name = "Branch B.1"; }
16
- part leafA11 : HardwareAssembly {
17
- attribute :>> name = "Leaf A.1.1";
18
- attribute :>> partNumber = "PN-001";
11
+ part rootA : HardwareAssembly {
12
+ attribute :>> name = "Root A";
13
+ part branchA1 : HardwareAssembly {
14
+ attribute :>> name = "Branch A.1";
15
+ part leafA11 : HardwareAssembly {
16
+ attribute :>> name = "Leaf A.1.1";
17
+ attribute :>> partNumber = "PN-001";
18
+ }
19
+ part leafA12 : HardwareAssembly { attribute :>> name = "Leaf A.1.2"; }
20
+ }
21
+ part branchA2 : HardwareAssembly {
22
+ attribute :>> name = "Branch A.2 With A Deliberately Long Label";
23
+ part leafA21 : HardwareAssembly { attribute :>> name = "Leaf A.2.1"; }
24
+ }
25
+ part rootB : HardwareAssembly {
26
+ attribute :>> name = "Root B";
27
+ part branchB1 : HardwareAssembly {
28
+ attribute :>> name = "Branch B.1";
29
+ part leafB11 : HardwareAssembly { attribute :>> name = "Leaf B.1.1"; }
30
+ }
31
+ }
19
32
  }
20
- part leafA12 : HardwareAssembly { attribute :>> name = "Leaf A.1.2"; }
21
- part leafA21 : HardwareAssembly { attribute :>> name = "Leaf A.2.1"; }
22
- part leafB11 : HardwareAssembly { attribute :>> name = "Leaf B.1.1"; }
23
-
24
- connection : Composes connect parent ::> rootA to child ::> branchA1;
25
- connection : Composes connect parent ::> rootA to child ::> branchA2;
26
- connection : Composes connect parent ::> rootA to child ::> rootB;
27
- connection : Composes connect parent ::> branchA1 to child ::> leafA11;
28
- connection : Composes connect parent ::> branchA1 to child ::> leafA12;
29
- connection : Composes connect parent ::> branchA2 to child ::> leafA21;
30
- connection : Composes connect parent ::> rootB to child ::> branchB1;
31
- connection : Composes connect parent ::> branchB1 to child ::> leafB11;
32
33
 
33
34
  view sampleTreeView : MemoDiagramView {
34
35
  expose rootA::**;
35
- expose rootB::**;
36
36
  attribute depth = 2;
37
37
  attribute :>> title = "Sample · Tree";
38
38
  attribute :>> shortDescription = "One connected dummy hierarchy with varied branch depths for tree layout development.";
@@ -45,14 +45,4 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_vie
45
45
  attribute :>> includeRelationshipKinds = ("Composes");
46
46
  }
47
47
  }
48
-
49
- connection : IncludedIn connect sourceElement ::> rootA to targetView ::> sampleTreeView;
50
- connection : IncludedIn connect sourceElement ::> rootB to targetView ::> sampleTreeView;
51
- connection : IncludedIn connect sourceElement ::> branchA1 to targetView ::> sampleTreeView;
52
- connection : IncludedIn connect sourceElement ::> branchA2 to targetView ::> sampleTreeView;
53
- connection : IncludedIn connect sourceElement ::> branchB1 to targetView ::> sampleTreeView;
54
- connection : IncludedIn connect sourceElement ::> leafA11 to targetView ::> sampleTreeView;
55
- connection : IncludedIn connect sourceElement ::> leafA12 to targetView ::> sampleTreeView;
56
- connection : IncludedIn connect sourceElement ::> leafA21 to targetView ::> sampleTreeView;
57
- connection : IncludedIn connect sourceElement ::> leafB11 to targetView ::> sampleTreeView;
58
48
  }
@@ -25,16 +25,25 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
25
25
  attribute :>> id = "UC-SAMPLE-001";
26
26
  attribute :>> name = "Review Device Status";
27
27
  attribute :>> useCaseKind = UseCaseKind::clinical;
28
+ include validateTherapySettings;
29
+ subject supportingSystem;
30
+ actor patientActor = patient;
28
31
  }
29
32
  use case configureTherapy : UseCase {
30
33
  attribute :>> id = "UC-SAMPLE-002";
31
34
  attribute :>> name = "Configure Therapy";
32
35
  attribute :>> useCaseKind = UseCaseKind::clinical;
36
+ include reviewStatus;
37
+ subject supportingSystem;
38
+ actor clinicianInitiator = clinician;
39
+ actor patientActor = patient;
33
40
  }
34
41
  use case maintainDevice : UseCase {
35
42
  attribute :>> id = "UC-SAMPLE-003";
36
43
  attribute :>> name = "Maintain Device";
37
44
  attribute :>> useCaseKind = UseCaseKind::service;
45
+ subject supportingSystem;
46
+ actor serviceTechnicianActor = serviceTechnician;
38
47
  }
39
48
 
40
49
  use case documentTreatment : UseCase {
@@ -48,15 +57,10 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
48
57
  attribute :>> id = "UC-SAMPLE-005";
49
58
  attribute :>> name = "Validate Therapy Settings";
50
59
  attribute :>> useCaseKind = UseCaseKind::clinical;
60
+ subject supportingSystem;
61
+ actor clinicianActor = clinician;
51
62
  }
52
63
 
53
- connection : Initiates connect initiatingUser ::> clinician to initiatedUseCase ::> configureTherapy;
54
- connection : ParticipatesIn connect participatingActor ::> patient to useCase ::> reviewStatus;
55
- connection : ParticipatesIn connect participatingActor ::> patient to useCase ::> configureTherapy;
56
- connection : ParticipatesIn connect participatingActor ::> serviceTechnician to useCase ::> maintainDevice;
57
- connection : ParticipatesIn connect participatingActor ::> clinician to useCase ::> validateTherapySettings;
58
- connection : Includes connect includingUseCase ::> configureTherapy to includedUseCase ::> reviewStatus;
59
- connection : Includes connect includingUseCase ::> reviewStatus to includedUseCase ::> validateTherapySettings;
60
64
  connection : Extends connect extendingUseCase ::> documentTreatment to extendedUseCase ::> reviewStatus;
61
65
 
62
66
  view sampleUseCaseView : MemoDiagramView {
@@ -75,7 +79,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
75
79
  part :>> viewpointDefinition = operationalViewpoint;
76
80
  part :>> selectionQuery {
77
81
  attribute :>> includeElementKinds = ("User", "UseCase");
78
- attribute :>> includeRelationshipKinds = ("Initiates", "ParticipatesIn", "Includes", "Extends");
82
+ attribute :>> includeRelationshipKinds = ("ParticipatesIn", "IncludesStep", "Extends");
79
83
  }
80
84
  // Presentation is owned by the model view, rather than a canvas control.
81
85
  attribute :>> layoutHint = "usecase:level=all;edge=rounded";
@@ -8,6 +8,7 @@ package memo_examples_temperature_alarm {
8
8
  private import ScalarValues::*;
9
9
 
10
10
  private import memo_core_enumerations::*;
11
+ private import memo_core_common::*;
11
12
  private import memo_core_dimensions::*;
12
13
  private import memo_architecture_operational_context_actors::*;
13
14
  private import memo_assurance_requirements_needs::*;
@@ -22,6 +23,7 @@ package memo_examples_temperature_alarm {
22
23
  private import memo_assurance_human_factors::*;
23
24
  private import memo_architecture_implementation_ui::*;
24
25
  private import memo_core_relationships::*;
26
+ private import memo_assurance_safety_risk_analysis::*;
25
27
 
26
28
  // ── Operational intent ──────────────────────────────────────
27
29
  part icuNurse : User {
@@ -33,23 +35,24 @@ package memo_examples_temperature_alarm {
33
35
  attribute :>> id = "TA-UC-001";
34
36
  attribute :>> name = "MonitorPatientTemperature";
35
37
  attribute :>> goalStatement = "Continuously monitor core temperature and be alerted when it leaves the safe range.";
38
+ subject supportingSystem;
39
+ actor icuNurseInitiator = icuNurse;
36
40
  }
37
41
  action actAcknowledgeAlarm : OperationalActivity {
38
42
  attribute :>> id = "TA-ACT-001"; attribute :>> name = "ReviewAndAcknowledgeAlarm";
39
43
  attribute :>> criticality = CriticalityKind::high;
44
+
45
+ action taskAckAlarm : UserTask {
46
+ attribute :>> criticality = CriticalityKind::high;
47
+ attribute :>> id = "TA-TASK-001"; attribute :>> name = "AcknowledgeTemperatureAlarm";
48
+ attribute :>> taskGoal = "recognize, assess, and acknowledge the alarm";
49
+ attribute :>> potentialHarm = "delayed intervention for hypo-/hyperthermia";
50
+ attribute :>> severityIfFailed = SeverityKind::serious;
51
+ }
40
52
  }
41
- action taskAckAlarm : UserTask {
42
- attribute :>> criticality = CriticalityKind::high;
43
- attribute :>> id = "TA-TASK-001"; attribute :>> name = "AcknowledgeTemperatureAlarm";
44
- attribute :>> taskGoal = "recognize, assess, and acknowledge the alarm";
45
- attribute :>> potentialHarm = "delayed intervention for hypo-/hyperthermia";
46
- attribute :>> severityIfFailed = SeverityKind::serious;
47
- }
48
- connection : Initiates connect initiatingUser ::> icuNurse to initiatedUseCase ::> ucMonitorTemp;
49
- connection : Composes connect parent ::> actAcknowledgeAlarm to child ::> taskAckAlarm;
50
53
 
51
54
  // ── Functional and logical slices ───────────────────────────
52
- part fnDetectDeviation : SystemFunction {
55
+ action fnDetectDeviation : SystemFunction {
53
56
  attribute :>> id = "TA-FN-001"; attribute :>> name = "DetectTemperatureDeviation";
54
57
  attribute :>> criticality = CriticalityKind::high;
55
58
  // This function is owned by the functional architecture layer (its
@@ -67,8 +70,7 @@ package memo_examples_temperature_alarm {
67
70
  connection : IndependentOf connect channel ::> chMonitor to otherChannel ::> chPrimary {
68
71
  attribute :>> independenceBasis = "separate sensing element and power rail";
69
72
  }
70
- connection : AllocatedTo connect function ::> fnDetectDeviation to allocatedElement ::> chMonitor;
71
-
73
+ allocate fnDetectDeviation to chMonitor;
72
74
  // ── UI: alarm element and acknowledgement action ────────────
73
75
  part uiBedside : UserInterface {
74
76
  attribute :>> id = "TA-UI-001"; attribute :>> name = "BedsideDisplay";
@@ -84,10 +86,10 @@ package memo_examples_temperature_alarm {
84
86
  attribute :>> id = "TA-UIA-001"; attribute :>> name = "AcknowledgeAlarm";
85
87
  attribute :>> intent = InteractionIntentKind::acknowledgement;
86
88
  attribute :>> confirmationRequired = true;
89
+ perform fnDetectDeviation;
87
90
  }
88
91
  connection : ElementTriggersAction connect element ::> elAlarmBanner to triggeredAction ::> uiaAcknowledge;
89
- connection : ActionInvokesFunction connect uiAction ::> uiaAcknowledge to systemFunction ::> fnDetectDeviation;
90
- connection : Supports { attribute :>> supportKind = SupportKind::task; connect supporter ::> uiBedside to supported ::> taskAckAlarm; }
92
+ connection : Supports { attribute :>> supportKind = SupportKind::task; connect supporter ::> uiBedside to supported ::> actAcknowledgeAlarm.taskAckAlarm; }
91
93
 
92
94
  // ── Risk chain with use error ───────────────────────────────
93
95
  part ueSilenceAndForget : UseError {
@@ -101,19 +103,20 @@ package memo_examples_temperature_alarm {
101
103
  attribute :>> severity = SeverityKind::serious;
102
104
  attribute :>> foreseeable = true;
103
105
  }
104
- item rcReAnnunciate : RiskControlMeasure {
106
+ part rcReAnnunciate : RiskControlMeasure {
105
107
  attribute :>> id = "TA-RC-001"; attribute :>> name = "AutoReAnnunciationAfterSilence";
106
108
  attribute :>> controlKind = RiskControlKind::alarm;
107
109
  attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
108
110
  }
109
- connection : CommitsUseError connect task ::> taskAckAlarm to useError ::> ueSilenceAndForget;
111
+ connection : CommitsUseError connect task ::> actAcknowledgeAlarm.taskAckAlarm to useError ::> ueSilenceAndForget;
110
112
  connection : Causes { attribute :>> causeKind = CauseKind::useErrorLeadsToHazard; connect cause ::> ueSilenceAndForget to effect ::> hzUndetectedDeviation; }
111
113
  connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> rcReAnnunciate to mitigatedElement ::> hzUndetectedDeviation; }
112
114
  connection : ControlImplementedBy connect riskControl ::> rcReAnnunciate to implementingElement ::> elAlarmBanner;
113
115
 
114
116
  // ── Verification, validation, evidence ──────────────────────
115
- action vsAlarmLatency : VerificationScenario {
117
+ action vsAlarmLatency : MemoScenario {
116
118
  attribute :>> id = "TA-VS-001"; attribute :>> name = "AlarmLatencyScenario";
119
+ attribute :>> scenarioKind = ScenarioKind::memoVerification;
117
120
  attribute :>> variantKind = ScenarioVariantKind::nominal;
118
121
  attribute :>> operationalCondition = OperationalConditionKind::normal;
119
122
  attribute :>> scenarioPurpose = ScenarioPurposeKind::memoVerification;
@@ -123,19 +126,23 @@ package memo_examples_temperature_alarm {
123
126
  attribute :>> id = "TA-VC-001"; attribute :>> name = "VerifyAlarmLatency";
124
127
  attribute :>> methodKind = VerificationMethodKind::test;
125
128
  attribute :>> acceptanceCriteria = "annunciation within 2 s of sustained deviation";
129
+
130
+ subject verified : Base::Anything[*] = (fnDetectDeviation);
126
131
  }
127
- part uvAckTask : UsabilityValidation {
132
+ part uvAckTask : MemoEvidence {
133
+ attribute :>> evidenceKind = EvidenceKind::usabilityValidation;
128
134
  attribute :>> id = "TA-UV-001"; attribute :>> name = "SummativeAlarmAcknowledgement";
129
135
  attribute :>> participantProfile = "15 ICU nurses, representative shift conditions";
130
136
  attribute :>> participantCount = 15;
131
137
  attribute :>> acceptanceCriteria = "no critical-task failures; all alarms assessed before silencing";
132
138
  }
133
- part evLatencyReport : Evidence {
139
+ part evLatencyReport : MemoEvidence {
140
+ attribute :>> evidenceKind = EvidenceKind::evidence;
134
141
  attribute :>> id = "TA-EV-001"; attribute :>> name = "AlarmLatencyTestReport";
135
142
  attribute :>> evidenceType = "test report";
136
143
  }
137
144
  connection : ExecutesScenario connect verificationCase ::> vcAlarmLatency to scenario ::> vsAlarmLatency;
138
- connection : VerifiedBy connect verificationCase ::> vcAlarmLatency to verificationTarget ::> fnDetectDeviation;
139
- connection : Validates connect validationCase ::> uvAckTask to validationTarget ::> taskAckAlarm;
145
+
146
+ connection : Validates connect validationCase ::> uvAckTask to validationTarget ::> actAcknowledgeAlarm.taskAckAlarm;
140
147
  connection : ProducesEvidence connect producer ::> vcAlarmLatency to producedEvidence ::> evLatencyReport;
141
148
  }
@@ -1,5 +1,6 @@
1
1
  // Functional architecture: the display-management function tree.
2
2
  package memo_examples_ui_screen_regions_architecture_functional_functions {
3
+ private import memo_examples_ui_screen_regions_assurance_requirements::*;
3
4
  private import ScalarValues::*;
4
5
 
5
6
  private import memo_core_relationships::*;
@@ -15,46 +16,69 @@ package memo_examples_ui_screen_regions_architecture_functional_functions {
15
16
  private import memo_core_enumerations::*;
16
17
  private import memo_architecture_functional_functions::*;
17
18
 
18
- part fnSetInfusionRate : SystemFunction {
19
- attribute :>> id = "UIR-FN-001"; attribute :>> name = "SetInfusionRate";
20
- attribute :>> shortDescription = "Apply a clinician-entered rate to the pump controller.";
21
- attribute :>> description = "Validates a requested infusion rate against the drug library limits and the pump's mechanical range, then commits it to the controller as the active setpoint.";
22
- attribute :>> criticality = CriticalityKind::high;
23
- }
24
-
25
- part fnManageInfusionDisplay : SystemFunction {
19
+ action fnManageInfusionDisplay : SystemFunction {
26
20
  attribute :>> id = "UIR-FN-002"; attribute :>> name = "ManageInfusionDisplay";
27
21
  attribute :>> shortDescription = "Coordinate the running-infusion display and its interactive regions.";
28
22
  attribute :>> description = "Maintains the clinician-facing infusion state and delegates rate programming, drug selection, and status presentation to focused child functions.";
29
23
  attribute :>> criticality = CriticalityKind::high;
30
- }
31
24
 
32
- part fnValidateDrugSelection : SystemFunction {
33
- attribute :>> id = "UIR-FN-003"; attribute :>> name = "ValidateDrugSelection";
34
- attribute :>> shortDescription = "Validate a selected drug and concentration against the active care-area library.";
35
- attribute :>> description = "Accepts only a drug and concentration present in the active drug library, then supplies its dosing limits to rate validation.";
36
- attribute :>> criticality = CriticalityKind::high;
37
- }
25
+ action fnSetInfusionRate : SystemFunction {
26
+ attribute :>> id = "UIR-FN-001"; attribute :>> name = "SetInfusionRate";
27
+ attribute :>> shortDescription = "Apply a clinician-entered rate to the pump controller.";
28
+ attribute :>> description = "Validates a requested infusion rate against the drug library limits and the pump's mechanical range, then commits it to the controller as the active setpoint.";
29
+ attribute :>> criticality = CriticalityKind::high;
30
+ }
38
31
 
39
- part fnPresentDeliveryStatus : SystemFunction {
40
- attribute :>> id = "UIR-FN-004"; attribute :>> name = "PresentDeliveryStatus";
41
- attribute :>> shortDescription = "Present current rate and cumulative delivered volume.";
42
- attribute :>> description = "Refreshes the rate and volume-delivered indicators from controller state at the specified display update interval.";
43
- attribute :>> criticality = CriticalityKind::medium;
44
- }
32
+ action fnValidateDrugSelection : SystemFunction {
33
+ attribute :>> id = "UIR-FN-003"; attribute :>> name = "ValidateDrugSelection";
34
+ attribute :>> shortDescription = "Validate a selected drug and concentration against the active care-area library.";
35
+ attribute :>> description = "Accepts only a drug and concentration present in the active drug library, then supplies its dosing limits to rate validation.";
36
+ attribute :>> criticality = CriticalityKind::high;
37
+ }
45
38
 
46
- part fnPresentLocalTime : SystemFunction {
47
- attribute :>> id = "UIR-FN-005"; attribute :>> name = "PresentLocalTime";
48
- attribute :>> shortDescription = "Read the synchronized clock and present local time.";
49
- attribute :>> description = "Formats the device clock as local 24-hour time and refreshes the status-bar value once per second.";
50
- attribute :>> criticality = CriticalityKind::medium;
51
- }
39
+ action fnPresentDeliveryStatus : SystemFunction {
40
+ attribute :>> id = "UIR-FN-004"; attribute :>> name = "PresentDeliveryStatus";
41
+ attribute :>> shortDescription = "Present current rate and cumulative delivered volume.";
42
+ attribute :>> description = "Refreshes the rate and volume-delivered indicators from controller state at the specified display update interval.";
43
+ attribute :>> criticality = CriticalityKind::medium;
44
+ }
52
45
 
53
- part fnPresentBatteryStatus : SystemFunction {
54
- attribute :>> id = "UIR-FN-006"; attribute :>> name = "PresentBatteryStatus";
55
- attribute :>> shortDescription = "Present battery state of charge and low-battery status.";
56
- attribute :>> description = "Converts battery telemetry into percentage, icon state, and low-battery prominence for the running-infusion screen.";
57
- attribute :>> criticality = CriticalityKind::medium;
58
- }
46
+ action fnPresentLocalTime : SystemFunction {
47
+ attribute :>> id = "UIR-FN-005"; attribute :>> name = "PresentLocalTime";
48
+ attribute :>> shortDescription = "Read the synchronized clock and present local time.";
49
+ attribute :>> description = "Formats the device clock as local 24-hour time and refreshes the status-bar value once per second.";
50
+ attribute :>> criticality = CriticalityKind::medium;
51
+ }
52
+
53
+ action fnPresentBatteryStatus : SystemFunction {
54
+ attribute :>> id = "UIR-FN-006"; attribute :>> name = "PresentBatteryStatus";
55
+ attribute :>> shortDescription = "Present battery state of charge and low-battery status.";
56
+ attribute :>> description = "Converts battery telemetry into percentage, icon state, and low-battery prominence for the running-infusion screen.";
57
+ attribute :>> criticality = CriticalityKind::medium;
58
+ }
59
+
60
+ satisfy reqRateEntry by fnSetInfusionRate;
59
61
 
62
+ satisfy reqRateLegibility by fnPresentDeliveryStatus;
63
+
64
+ satisfy reqVolumeDisplay by fnPresentDeliveryStatus;
65
+
66
+ satisfy reqDrugLibrarySelection by fnValidateDrugSelection;
67
+
68
+ satisfy reqDisplayFreshness by fnPresentDeliveryStatus;
69
+
70
+ satisfy reqActiveRateDisplay by fnPresentDeliveryStatus;
71
+
72
+ satisfy reqDrugIdentityDisplay by fnValidateDrugSelection;
73
+
74
+ satisfy reqTimeDisplay by fnPresentLocalTime;
75
+
76
+ satisfy reqTimeAccuracy by fnPresentLocalTime;
77
+
78
+ satisfy reqBatteryStatusDisplay by fnPresentBatteryStatus;
79
+
80
+ satisfy reqBatteryWarningPerformance by fnPresentBatteryStatus;
81
+
82
+ satisfy reqDrugSelectionPerformance by fnValidateDrugSelection;
83
+ }
60
84
  }