@memoarchitect/ontology 0.7.0 → 0.8.24

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 (270) hide show
  1. package/README.md +4 -2
  2. package/examples/connected-patient-monitor/memo.package.yaml +3 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
  4. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
  5. package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
  6. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +8 -6
  7. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
  8. package/examples/functional-logical-physical/memo.package.yaml +3 -0
  9. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +6 -6
  10. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
  11. package/examples/gpca-pump/memo.package.yaml +3 -0
  12. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
  13. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
  14. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
  15. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
  16. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
  17. package/examples/gpca-pump/model/catalog/gpca_context.sysml +14 -3
  18. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +8 -5
  19. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
  20. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +97 -103
  21. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
  22. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
  23. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  24. package/examples/gpca-pump/model/catalog/gpca_system.sysml +17 -17
  25. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -334
  26. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
  27. package/examples/gpca-pump/model/catalog/project.sysml +5 -0
  28. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +2 -4
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +2 -4
  30. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +1 -4
  31. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +2 -5
  32. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +1 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +1 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +1 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -7
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +1 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +2 -4
  39. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +1 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +2 -4
  41. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +2 -4
  42. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +1 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -8
  44. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +1 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -6
  47. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
  48. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +1 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +2 -5
  50. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
  51. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +5 -6
  52. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -6
  53. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
  54. package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
  55. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +1 -1
  56. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
  57. package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
  58. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +4 -3
  59. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
  60. package/examples/multidimensional-layers/memo.package.yaml +3 -0
  61. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  62. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
  63. package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
  64. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
  65. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
  66. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
  67. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
  68. package/examples/reusable-instrument/memo.package.yaml +3 -0
  69. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +16 -23
  70. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
  71. package/examples/ros-mobile-robot/README.md +40 -0
  72. package/examples/ros-mobile-robot/memo.package.yaml +3 -0
  73. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  74. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  75. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  76. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +12 -0
  77. package/examples/software-only-medical-device/memo.package.yaml +3 -0
  78. package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
  79. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +12 -6
  80. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
  81. package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
  82. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +58 -75
  83. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
  84. package/examples/surgical-robot/memo.package.yaml +3 -0
  85. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
  86. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
  87. package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
  88. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -18
  89. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -11
  90. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +43 -68
  91. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +57 -68
  92. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +40 -70
  93. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +4 -8
  94. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +1 -20
  95. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +52 -84
  96. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +22 -33
  97. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +13 -10
  98. package/examples/temperature-alarm/memo.package.yaml +3 -0
  99. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -25
  100. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
  101. package/examples/ui-screen-regions/memo.package.yaml +3 -0
  102. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
  103. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
  104. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
  105. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
  106. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  107. package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
  108. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +2 -3
  109. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  110. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  111. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +1 -2
  112. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +1 -2
  113. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +1 -2
  114. package/extensions/LICENSES/MIT.txt +19 -0
  115. package/extensions/README.md +94 -0
  116. package/extensions/aadl/memo.package.yaml +18 -0
  117. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  118. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  119. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  120. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  121. package/extensions/cloud/memo.package.yaml +18 -0
  122. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  123. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  124. package/extensions/container/memo.package.yaml +18 -0
  125. package/extensions/container/src/container_extension.sysml +37 -0
  126. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  127. package/extensions/messaging/memo.package.yaml +18 -0
  128. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  129. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  130. package/extensions/ros/memo.package.yaml +18 -0
  131. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  132. package/extensions/ros/src/ros_extension.sysml +200 -0
  133. package/extensions/template/src/extension.sysml +37 -0
  134. package/memo.manifest.yaml +13 -2
  135. package/methodologies/default/memo.package.yaml +1 -1
  136. package/methodologies/gpca/memo.package.yaml +1 -1
  137. package/ontology/memo.package.yaml +1 -1
  138. package/package.json +5 -3
  139. package/profile/memo.package.yaml +1 -1
  140. package/src/architecture/decisions/memo_decisions.sysml +23 -2
  141. package/src/architecture/functional/behavior/memo_behavior.sysml +51 -23
  142. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  143. package/src/architecture/functional/functions/memo_functions.sysml +93 -36
  144. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +2 -2
  145. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
  146. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +40 -13
  147. package/src/architecture/implementation/ui/memo_ui.sysml +83 -43
  148. package/src/architecture/logical/interfaces/memo_interfaces.sysml +64 -12
  149. package/src/architecture/logical/structure/memo_logical_structure.sysml +26 -25
  150. package/src/architecture/operational/activities/memo_activities.sysml +27 -29
  151. package/src/architecture/operational/context/actors/memo_actors.sysml +8 -10
  152. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +16 -33
  153. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -17
  154. package/src/architecture/operational/scenarios/memo_scenarios.sysml +36 -84
  155. package/src/architecture/operational/structure/memo_operational.sysml +42 -13
  156. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -27
  157. package/src/architecture/operational/workflows/memo_workflows.sysml +45 -28
  158. package/src/architecture/realization/deployment/memo_deployment.sysml +115 -20
  159. package/src/architecture/realization/physical/memo_physical_architecture.sysml +29 -4
  160. package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
  161. package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
  162. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  163. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  164. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  165. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  166. package/src/artifacts/standards/iec_60812.sysml +51 -0
  167. package/src/artifacts/standards/iec_62304.sysml +210 -0
  168. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  169. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  170. package/src/artifacts/standards/iso_13485.sysml +113 -0
  171. package/src/artifacts/standards/iso_14971.sysml +94 -0
  172. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  173. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  174. package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
  175. package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
  176. package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
  177. package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
  178. package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
  179. package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
  180. package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
  181. package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
  182. package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
  183. package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
  184. package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
  185. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
  186. package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
  187. package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
  188. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
  189. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  190. package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
  191. package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
  192. package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
  193. package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
  194. package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
  195. package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
  196. package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
  197. package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
  198. package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
  199. package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
  200. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
  201. package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
  202. package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
  203. package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
  204. package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
  205. package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
  206. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  207. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  208. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  209. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  210. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +40 -21
  211. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  212. package/src/assurance/requirements/memo_requirements.sysml +7 -20
  213. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  214. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  215. package/src/assurance/safety_risk/memo_risk.sysml +90 -7
  216. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
  217. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  218. package/src/core/annotations/memo_annotations.sysml +25 -6
  219. package/src/core/common/memo_common.sysml +130 -21
  220. package/src/core/consistency_rules/consistency_rules.sysml +1 -1
  221. package/src/core/dimensions/dimensions.sysml +12 -0
  222. package/src/core/enumerations/memo_enumerations.sysml +60 -14
  223. package/src/core/relationships/memo_relationships.sysml +199 -196
  224. package/src/memo_namespaces.sysml +30 -0
  225. package/src/methodology/core/memo_core.sysml +24 -0
  226. package/src/methodology/profiles/memo_profiles.sysml +1 -1
  227. package/src/methodology/workflow/memo_workflow.sysml +5 -5
  228. package/src/rules/closure/closure_rules.sysml +20 -20
  229. package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
  230. package/src/rules/ontology/ontology_invariants.sysml +223 -11
  231. package/src/rules/quantitative/quantitative_rules.sysml +2 -2
  232. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +30 -30
  233. package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -3
  234. package/src/viewpoints/context/context_viewpoint.sysml +2 -3
  235. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +1 -2
  236. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -4
  237. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +46 -3
  238. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  239. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -3
  240. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -3
  241. package/src/viewpoints/logical/logical_viewpoint.sysml +1 -2
  242. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +1 -2
  243. package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
  244. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +2 -3
  245. package/src/viewpoints/physical/physical_viewpoint.sysml +1 -2
  246. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +1 -2
  247. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +1 -2
  248. package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
  249. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +1 -2
  250. package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
  251. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +1 -2
  252. package/src/viewpoints/software/software_viewpoint.sysml +1 -2
  253. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +1 -2
  254. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
  255. package/src/viewpoints/usability/usability_viewpoint.sysml +1 -2
  256. package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
  257. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -3
  258. package/templates/connected-device/memo.package.yaml +2 -0
  259. package/templates/default/memo.package.yaml +2 -0
  260. package/templates/infusion-pump/memo.package.yaml +2 -0
  261. package/templates/monitoring-device/memo.package.yaml +2 -0
  262. package/templates/samd/memo.package.yaml +2 -0
  263. package/examples/extensions/README.md +0 -16
  264. package/examples/extensions/template/src/extension.sysml +0 -15
  265. package/examples/gpca-pump/gpca-pump.kpar +0 -0
  266. /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
  267. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  268. /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
  269. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  270. /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
@@ -1,15 +1,16 @@
1
1
  // Logical structure — the column axis of the DSM.
2
2
  //
3
3
  // Four levels deep on purpose (System → Subsystem → Subsystem → component),
4
- // so expanding and collapsing the matrix has something real to do. Nesting is
5
- // declared with Composes rather than left implicit, which is what the DSM
6
- // reads to build the column tree.
4
+ // so expanding and collapsing the matrix has something real to do. Containment
5
+ // is native nesting; the builder synthesizes the `composes` relationship the
6
+ // DSM reads to build the column tree, so no explicit Composes edge is written.
7
7
  package memo_examples_nested_architecture_dsm_architecture_logical_structure {
8
8
  private import ScalarValues::*;
9
9
 
10
10
  private import memo_core_enumerations::*;
11
11
  private import memo_core_relationships::*;
12
12
  private import memo_architecture_logical_structure::*;
13
+ private import memo_architecture_operational_context_use_context::*;
13
14
 
14
15
  // ── Level 0: the system ──────────────────────────────────────
15
16
  part sysTherapyDelivery : System {
@@ -18,166 +19,147 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
18
19
  attribute :>> systemType = SystemTypeKind::logical;
19
20
  attribute :>> systemBoundaryDescription = "Everything inside the pump enclosure, including its power path and user interface.";
20
21
  attribute :>> responsibility = "Deliver a prescribed infusion safely and report what it delivered.";
21
- }
22
22
 
23
- // ── Level 1: subsystems ──────────────────────────────────────
24
- part subFluidPath : Subsystem {
25
- attribute :>> id = "NDS-SUB-001"; attribute :>> name = "FluidPathSubsystem";
26
- attribute :>> componentRole = ComponentRoleKind::generic;
27
- attribute :>> systemType = SystemTypeKind::hardware;
28
- attribute :>> responsibility = "Move fluid from the reservoir to the patient line at a commanded rate.";
29
- }
30
- part subControl : Subsystem {
31
- attribute :>> id = "NDS-SUB-002"; attribute :>> name = "ControlSubsystem";
32
- attribute :>> componentRole = ComponentRoleKind::controlElement;
33
- attribute :>> systemType = SystemTypeKind::software;
34
- attribute :>> responsibility = "Decide what the fluid path should do, and hold the therapy state.";
35
- }
36
- part subUserInterface : Subsystem {
37
- attribute :>> id = "NDS-SUB-003"; attribute :>> name = "UserInterfaceSubsystem";
38
- attribute :>> componentRole = ComponentRoleKind::userInterface;
39
- attribute :>> systemType = SystemTypeKind::software;
40
- attribute :>> responsibility = "Present therapy state to the clinician and accept their input.";
41
- }
42
- part subPower : Subsystem {
43
- attribute :>> id = "NDS-SUB-004"; attribute :>> name = "PowerSubsystem";
44
- attribute :>> componentRole = ComponentRoleKind::generic;
45
- attribute :>> systemType = SystemTypeKind::hardware;
46
- attribute :>> responsibility = "Supply and monitor power across mains and battery operation.";
47
- }
23
+ // ── Level 1: subsystems ──────────────────────────────────
24
+ part subFluidPath : Subsystem {
25
+ attribute :>> id = "NDS-SUB-001"; attribute :>> name = "FluidPathSubsystem";
26
+ attribute :>> componentRole = ComponentRoleKind::generic;
27
+ attribute :>> systemType = SystemTypeKind::hardware;
28
+ attribute :>> responsibility = "Move fluid from the reservoir to the patient line at a commanded rate.";
48
29
 
49
- connection : Composes connect parent ::> sysTherapyDelivery to child ::> subFluidPath;
50
- connection : Composes connect parent ::> sysTherapyDelivery to child ::> subControl;
51
- connection : Composes connect parent ::> sysTherapyDelivery to child ::> subUserInterface;
52
- connection : Composes connect parent ::> sysTherapyDelivery to child ::> subPower;
30
+ // ── Level 2/3: components ─────────────────────────────
31
+ part lcPumpMechanism : LogicalComponent {
32
+ attribute :>> id = "NDS-LC-001"; attribute :>> name = "PumpMechanism";
33
+ attribute :>> componentRole = ComponentRoleKind::controlElement;
34
+ attribute :>> systemType = SystemTypeKind::hardware;
35
+ attribute :>> responsibility = "Displace fluid under command.";
36
+ attribute :>> controlledVariable = "delivered volume per stroke";
37
+ }
38
+ part lcOcclusionChannel : LogicalComponent {
39
+ attribute :>> id = "NDS-LC-002"; attribute :>> name = "OcclusionSensingChannel";
40
+ attribute :>> componentRole = ComponentRoleKind::channel;
41
+ attribute :>> systemType = SystemTypeKind::hardware;
42
+ attribute :>> responsibility = "Sense line pressure and air in line.";
43
+ attribute :>> channelRole = ChannelRoleKind::primary;
44
+ }
45
+ part lcReservoirInterface : LogicalComponent {
46
+ attribute :>> id = "NDS-LC-003"; attribute :>> name = "ReservoirInterface";
47
+ attribute :>> componentRole = ComponentRoleKind::generic;
48
+ attribute :>> systemType = SystemTypeKind::hardware;
49
+ attribute :>> responsibility = "Seat the reservoir and expose its remaining volume.";
50
+ }
51
+ }
52
+ part subControl : Subsystem {
53
+ attribute :>> id = "NDS-SUB-002"; attribute :>> name = "ControlSubsystem";
54
+ attribute :>> componentRole = ComponentRoleKind::controlElement;
55
+ attribute :>> systemType = SystemTypeKind::software;
56
+ attribute :>> responsibility = "Decide what the fluid path should do, and hold the therapy state.";
53
57
 
54
- // ── Level 2: a subsystem inside a subsystem ──────────────────
55
- // The safety monitor is nested one level deeper than its peers, which is
56
- // what makes a collapsed ControlSubsystem row a genuine roll-up rather
57
- // than a rename of its children.
58
- part subSafetyMonitor : Subsystem {
59
- attribute :>> id = "NDS-SUB-005"; attribute :>> name = "SafetyMonitorSubsystem";
60
- attribute :>> componentRole = ComponentRoleKind::channel;
61
- attribute :>> systemType = SystemTypeKind::software;
62
- attribute :>> responsibility = "Watch the control path from outside it and stop delivery on breach.";
63
- attribute :>> safetyPartition = "monitor partition, separate MPU region from the control partition";
64
- }
65
- connection : Composes connect parent ::> subControl to child ::> subSafetyMonitor;
58
+ // ── Level 2: a subsystem inside a subsystem ───────────
59
+ // The safety monitor is nested one level deeper than its peers,
60
+ // which is what makes a collapsed ControlSubsystem row a genuine
61
+ // roll-up rather than a rename of its children.
62
+ part subSafetyMonitor : Subsystem {
63
+ attribute :>> id = "NDS-SUB-005"; attribute :>> name = "SafetyMonitorSubsystem";
64
+ attribute :>> componentRole = ComponentRoleKind::channel;
65
+ attribute :>> systemType = SystemTypeKind::software;
66
+ attribute :>> responsibility = "Watch the control path from outside it and stop delivery on breach.";
67
+ attribute :>> safetyPartition = "monitor partition, separate MPU region from the control partition";
66
68
 
67
- // ── Level 2/3: components ────────────────────────────────────
68
- part lcPumpMechanism : LogicalComponent {
69
- attribute :>> id = "NDS-LC-001"; attribute :>> name = "PumpMechanism";
70
- attribute :>> componentRole = ComponentRoleKind::controlElement;
71
- attribute :>> systemType = SystemTypeKind::hardware;
72
- attribute :>> responsibility = "Displace fluid under command.";
73
- attribute :>> controlledVariable = "delivered volume per stroke";
74
- }
75
- part lcOcclusionChannel : LogicalComponent {
76
- attribute :>> id = "NDS-LC-002"; attribute :>> name = "OcclusionSensingChannel";
77
- attribute :>> componentRole = ComponentRoleKind::channel;
78
- attribute :>> systemType = SystemTypeKind::hardware;
79
- attribute :>> responsibility = "Sense line pressure and air in line.";
80
- attribute :>> channelRole = ChannelRoleKind::primary;
81
- }
82
- part lcReservoirInterface : LogicalComponent {
83
- attribute :>> id = "NDS-LC-003"; attribute :>> name = "ReservoirInterface";
84
- attribute :>> componentRole = ComponentRoleKind::generic;
85
- attribute :>> systemType = SystemTypeKind::hardware;
86
- attribute :>> responsibility = "Seat the reservoir and expose its remaining volume.";
87
- }
88
- connection : Composes connect parent ::> subFluidPath to child ::> lcPumpMechanism;
89
- connection : Composes connect parent ::> subFluidPath to child ::> lcOcclusionChannel;
90
- connection : Composes connect parent ::> subFluidPath to child ::> lcReservoirInterface;
69
+ part lcWatchdogChannel : LogicalComponent {
70
+ attribute :>> id = "NDS-LC-006"; attribute :>> name = "WatchdogChannel";
71
+ attribute :>> componentRole = ComponentRoleKind::channel;
72
+ attribute :>> systemType = SystemTypeKind::software;
73
+ attribute :>> responsibility = "Reset to the safe state when the control loop misses its deadline.";
74
+ attribute :>> channelRole = ChannelRoleKind::monitor;
75
+ attribute :>> diversityBasis = "independent time base from the control partition";
76
+ }
77
+ part lcPressureIntegrityChannel : LogicalComponent {
78
+ attribute :>> id = "NDS-LC-007"; attribute :>> name = "PressureIntegrityChannel";
79
+ attribute :>> componentRole = ComponentRoleKind::channel;
80
+ attribute :>> systemType = SystemTypeKind::software;
81
+ attribute :>> responsibility = "Cross-check pressure against the commanded rate and stop on divergence.";
82
+ attribute :>> channelRole = ChannelRoleKind::monitor;
83
+ attribute :>> diversityBasis = "different measurement principle from the primary occlusion channel";
84
+ }
85
+ }
86
+ part lcDoseController : LogicalComponent {
87
+ attribute :>> id = "NDS-LC-004"; attribute :>> name = "DoseController";
88
+ attribute :>> componentRole = ComponentRoleKind::controlElement;
89
+ attribute :>> systemType = SystemTypeKind::software;
90
+ attribute :>> responsibility = "Turn a prescription into rate commands.";
91
+ attribute :>> controlLaw = "closed loop on delivered volume, saturated at the prescribed limit";
92
+ attribute :>> controlledVariable = "infusion rate";
93
+ }
94
+ part lcTherapyStateStore : LogicalComponent {
95
+ attribute :>> id = "NDS-LC-005"; attribute :>> name = "TherapyStateStore";
96
+ attribute :>> componentRole = ComponentRoleKind::dataStore;
97
+ attribute :>> systemType = SystemTypeKind::software;
98
+ attribute :>> responsibility = "Hold the active therapy record across power cycles.";
99
+ attribute :>> persistenceRequirement = "survives power loss with the last completed transaction intact";
100
+ attribute :>> integrityRequirement = "CRC per record, rejected on mismatch";
101
+ }
102
+ }
103
+ part subUserInterface : Subsystem {
104
+ attribute :>> id = "NDS-SUB-003"; attribute :>> name = "UserInterfaceSubsystem";
105
+ attribute :>> componentRole = ComponentRoleKind::userInterface;
106
+ attribute :>> systemType = SystemTypeKind::software;
107
+ attribute :>> responsibility = "Present therapy state to the clinician and accept their input.";
91
108
 
92
- part lcDoseController : LogicalComponent {
93
- attribute :>> id = "NDS-LC-004"; attribute :>> name = "DoseController";
94
- attribute :>> componentRole = ComponentRoleKind::controlElement;
95
- attribute :>> systemType = SystemTypeKind::software;
96
- attribute :>> responsibility = "Turn a prescription into rate commands.";
97
- attribute :>> controlLaw = "closed loop on delivered volume, saturated at the prescribed limit";
98
- attribute :>> controlledVariable = "infusion rate";
99
- }
100
- part lcTherapyStateStore : LogicalComponent {
101
- attribute :>> id = "NDS-LC-005"; attribute :>> name = "TherapyStateStore";
102
- attribute :>> componentRole = ComponentRoleKind::dataStore;
103
- attribute :>> systemType = SystemTypeKind::software;
104
- attribute :>> responsibility = "Hold the active therapy record across power cycles.";
105
- attribute :>> persistenceRequirement = "survives power loss with the last completed transaction intact";
106
- attribute :>> integrityRequirement = "CRC per record, rejected on mismatch";
107
- }
108
- connection : Composes connect parent ::> subControl to child ::> lcDoseController;
109
- connection : Composes connect parent ::> subControl to child ::> lcTherapyStateStore;
109
+ part lcDisplayManager : LogicalComponent {
110
+ attribute :>> id = "NDS-LC-008"; attribute :>> name = "DisplayManager";
111
+ attribute :>> componentRole = ComponentRoleKind::userInterface;
112
+ attribute :>> systemType = SystemTypeKind::software;
113
+ attribute :>> responsibility = "Render therapy state on the main screen.";
114
+ attribute :>> interactionSummary = "read-only status surface, refreshed once per second";
115
+ }
116
+ part lcAlarmAnnunciator : LogicalComponent {
117
+ attribute :>> id = "NDS-LC-009"; attribute :>> name = "AlarmAnnunciator";
118
+ attribute :>> componentRole = ComponentRoleKind::userInterface;
119
+ attribute :>> systemType = SystemTypeKind::software;
120
+ attribute :>> responsibility = "Raise audible and visible alarms by priority.";
121
+ attribute :>> interactionSummary = "IEC 60601-1-8 alarm signals";
122
+ }
123
+ part lcKeypadHandler : LogicalComponent {
124
+ attribute :>> id = "NDS-LC-010"; attribute :>> name = "KeypadHandler";
125
+ attribute :>> componentRole = ComponentRoleKind::userInterface;
126
+ attribute :>> systemType = SystemTypeKind::software;
127
+ attribute :>> responsibility = "Debounce and interpret key presses.";
128
+ attribute :>> interactionSummary = "physical keypad, confirm-before-apply for every rate change";
129
+ }
130
+ }
131
+ part subPower : Subsystem {
132
+ attribute :>> id = "NDS-SUB-004"; attribute :>> name = "PowerSubsystem";
133
+ attribute :>> componentRole = ComponentRoleKind::generic;
134
+ attribute :>> systemType = SystemTypeKind::hardware;
135
+ attribute :>> responsibility = "Supply and monitor power across mains and battery operation.";
110
136
 
111
- part lcWatchdogChannel : LogicalComponent {
112
- attribute :>> id = "NDS-LC-006"; attribute :>> name = "WatchdogChannel";
113
- attribute :>> componentRole = ComponentRoleKind::channel;
114
- attribute :>> systemType = SystemTypeKind::software;
115
- attribute :>> responsibility = "Reset to the safe state when the control loop misses its deadline.";
116
- attribute :>> channelRole = ChannelRoleKind::monitor;
117
- attribute :>> diversityBasis = "independent time base from the control partition";
118
- }
119
- part lcPressureIntegrityChannel : LogicalComponent {
120
- attribute :>> id = "NDS-LC-007"; attribute :>> name = "PressureIntegrityChannel";
121
- attribute :>> componentRole = ComponentRoleKind::channel;
122
- attribute :>> systemType = SystemTypeKind::software;
123
- attribute :>> responsibility = "Cross-check pressure against the commanded rate and stop on divergence.";
124
- attribute :>> channelRole = ChannelRoleKind::monitor;
125
- attribute :>> diversityBasis = "different measurement principle from the primary occlusion channel";
126
- }
127
- connection : Composes connect parent ::> subSafetyMonitor to child ::> lcWatchdogChannel;
128
- connection : Composes connect parent ::> subSafetyMonitor to child ::> lcPressureIntegrityChannel;
137
+ part lcBatteryManager : LogicalComponent {
138
+ attribute :>> id = "NDS-LC-011"; attribute :>> name = "BatteryManager";
139
+ attribute :>> componentRole = ComponentRoleKind::generic;
140
+ attribute :>> systemType = SystemTypeKind::hardware;
141
+ attribute :>> responsibility = "Charge, gauge and protect the battery.";
142
+ }
143
+ part lcPowerRailMonitor : LogicalComponent {
144
+ attribute :>> id = "NDS-LC-012"; attribute :>> name = "PowerRailMonitor";
145
+ attribute :>> componentRole = ComponentRoleKind::channel;
146
+ attribute :>> systemType = SystemTypeKind::hardware;
147
+ attribute :>> responsibility = "Detect rail brownout and request a source switch.";
148
+ attribute :>> channelRole = ChannelRoleKind::monitor;
149
+ }
150
+ }
129
151
 
130
- part lcDisplayManager : LogicalComponent {
131
- attribute :>> id = "NDS-LC-008"; attribute :>> name = "DisplayManager";
132
- attribute :>> componentRole = ComponentRoleKind::userInterface;
133
- attribute :>> systemType = SystemTypeKind::software;
134
- attribute :>> responsibility = "Render therapy state on the main screen.";
135
- attribute :>> interactionSummary = "read-only status surface, refreshed once per second";
136
- }
137
- part lcAlarmAnnunciator : LogicalComponent {
138
- attribute :>> id = "NDS-LC-009"; attribute :>> name = "AlarmAnnunciator";
139
- attribute :>> componentRole = ComponentRoleKind::userInterface;
140
- attribute :>> systemType = SystemTypeKind::software;
141
- attribute :>> responsibility = "Raise audible and visible alarms by priority.";
142
- attribute :>> interactionSummary = "IEC 60601-1-8 alarm signals";
143
- }
144
- part lcKeypadHandler : LogicalComponent {
145
- attribute :>> id = "NDS-LC-010"; attribute :>> name = "KeypadHandler";
146
- attribute :>> componentRole = ComponentRoleKind::userInterface;
147
- attribute :>> systemType = SystemTypeKind::software;
148
- attribute :>> responsibility = "Debounce and interpret key presses.";
149
- attribute :>> interactionSummary = "physical keypad, confirm-before-apply for every rate change";
152
+ // ── Component-to-component dependency ─────────────────────
153
+ // What the DSM plots when both axes are architecture: who needs whom.
154
+ flow from subFluidPath.lcOcclusionChannel to subControl.lcDoseController;
155
+ flow from subControl.lcDoseController to subFluidPath.lcPumpMechanism;
156
+ flow from subFluidPath.lcPumpMechanism to subControl.lcTherapyStateStore;
157
+ flow from subControl.lcTherapyStateStore to subUserInterface.lcDisplayManager;
158
+ flow from subControl.subSafetyMonitor.lcWatchdogChannel to subControl.lcDoseController;
159
+ flow from subControl.subSafetyMonitor.lcPressureIntegrityChannel to subUserInterface.lcAlarmAnnunciator;
160
+ flow from subUserInterface.lcKeypadHandler to subControl.lcDoseController;
161
+ flow from subFluidPath.lcReservoirInterface to subFluidPath.lcPumpMechanism;
162
+ flow from subPower.lcBatteryManager to subPower.lcPowerRailMonitor;
163
+ flow from subPower.lcPowerRailMonitor to subUserInterface.lcAlarmAnnunciator;
150
164
  }
151
- connection : Composes connect parent ::> subUserInterface to child ::> lcDisplayManager;
152
- connection : Composes connect parent ::> subUserInterface to child ::> lcAlarmAnnunciator;
153
- connection : Composes connect parent ::> subUserInterface to child ::> lcKeypadHandler;
154
-
155
- part lcBatteryManager : LogicalComponent {
156
- attribute :>> id = "NDS-LC-011"; attribute :>> name = "BatteryManager";
157
- attribute :>> componentRole = ComponentRoleKind::generic;
158
- attribute :>> systemType = SystemTypeKind::hardware;
159
- attribute :>> responsibility = "Charge, gauge and protect the battery.";
160
- }
161
- part lcPowerRailMonitor : LogicalComponent {
162
- attribute :>> id = "NDS-LC-012"; attribute :>> name = "PowerRailMonitor";
163
- attribute :>> componentRole = ComponentRoleKind::channel;
164
- attribute :>> systemType = SystemTypeKind::hardware;
165
- attribute :>> responsibility = "Detect rail brownout and request a source switch.";
166
- attribute :>> channelRole = ChannelRoleKind::monitor;
167
- }
168
- connection : Composes connect parent ::> subPower to child ::> lcBatteryManager;
169
- connection : Composes connect parent ::> subPower to child ::> lcPowerRailMonitor;
170
-
171
- // ── Component-to-component dependency ────────────────────────
172
- // What the DSM plots when both axes are architecture: who needs whom.
173
- connection : ExchangesWith connect source ::> lcOcclusionChannel to target ::> lcDoseController;
174
- connection : ExchangesWith connect source ::> lcDoseController to target ::> lcPumpMechanism;
175
- connection : ExchangesWith connect source ::> lcPumpMechanism to target ::> lcTherapyStateStore;
176
- connection : ExchangesWith connect source ::> lcTherapyStateStore to target ::> lcDisplayManager;
177
- connection : ExchangesWith connect source ::> lcWatchdogChannel to target ::> lcDoseController;
178
- connection : ExchangesWith connect source ::> lcPressureIntegrityChannel to target ::> lcAlarmAnnunciator;
179
- connection : ExchangesWith connect source ::> lcKeypadHandler to target ::> lcDoseController;
180
- connection : ExchangesWith connect source ::> lcReservoirInterface to target ::> lcPumpMechanism;
181
- connection : ExchangesWith connect source ::> lcBatteryManager to target ::> lcPowerRailMonitor;
182
- connection : ExchangesWith connect source ::> lcPowerRailMonitor to target ::> lcAlarmAnnunciator;
183
165
  }
@@ -2,6 +2,7 @@
2
2
  // the traceability matrix (function → verification case).
3
3
  package memo_examples_nested_architecture_dsm_assurance_verification_validation {
4
4
  private import ScalarValues::*;
5
+ private import memo_core_dimensions::*; // ElementStatusKind
5
6
 
6
7
  private import memo_core_enumerations::*;
7
8
  private import memo_core_relationships::*;
@@ -13,78 +14,100 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
13
14
  attribute :>> id = "NDS-VER-001"; attribute :>> name = "VerifyDoseAccuracy";
14
15
  attribute :>> methodKind = VerificationMethodKind::test;
15
16
  attribute :>> acceptanceCriteria = "Gravimetric delivery over 60 minutes is within ±5% of the prescribed volume at 1, 25 and 999 mL/h.";
16
- attribute :>> status = "planned";
17
+ attribute :>> status = ElementStatusKind::approved;
18
+
19
+ objective { verify reqDoseAccuracy; }
20
+ subject verified : Base::Anything[*] = (fnDeliverTherapy, fnDeliverTherapy.fnMeterFluid, fnDeliverTherapy.fnMeterFluid.fnDriveActuator, fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered, fnDeliverTherapy.fnControlDose, fnDeliverTherapy.fnControlDose.fnComputeRate);
17
21
  }
18
22
  verification vcOcclusionResponse : VerificationCase {
19
23
  attribute :>> id = "NDS-VER-002"; attribute :>> name = "VerifyOcclusionResponse";
20
24
  attribute :>> methodKind = VerificationMethodKind::test;
21
25
  attribute :>> acceptanceCriteria = "Delivery stops within 2 s of the occlusion threshold being crossed, at every supported rate.";
22
- attribute :>> status = "planned";
26
+ attribute :>> status = ElementStatusKind::approved;
27
+
28
+ objective { verify reqOcclusionDetection; }
29
+ subject verified : Base::Anything[*] = (fnEnsureSafety, fnEnsureSafety.fnDetectOcclusion, fnEnsureSafety.fnEnforceDoseLimits);
23
30
  }
24
31
  verification vcAirInLineResponse : VerificationCase {
25
32
  attribute :>> id = "NDS-VER-003"; attribute :>> name = "VerifyAirInLineResponse";
26
33
  attribute :>> methodKind = VerificationMethodKind::test;
27
34
  attribute :>> acceptanceCriteria = "A 0.1 mL air bolus stops delivery and raises a high-priority alarm.";
28
- attribute :>> status = "planned";
35
+ attribute :>> status = ElementStatusKind::approved;
36
+
37
+ objective { verify reqAirInLine; }
38
+ subject verified : Base::Anything[*] = (fnEnsureSafety.fnDetectAirInLine);
29
39
  }
30
40
  verification vcAlarmSignals : VerificationCase {
31
41
  attribute :>> id = "NDS-VER-004"; attribute :>> name = "VerifyAlarmSignals";
32
42
  attribute :>> methodKind = VerificationMethodKind::test;
33
43
  attribute :>> acceptanceCriteria = "Alarm signals conform to IEC 60601-1-8 for every priority, and persist until cleared or acknowledged.";
34
- attribute :>> status = "planned";
44
+ attribute :>> status = ElementStatusKind::approved;
45
+
46
+ objective { verify reqAlarmAnnunciation; }
47
+ subject verified : Base::Anything[*] = (fnInformUser.fnAnnunciateAlarm);
35
48
  }
36
49
  verification vcBatteryEndurance : VerificationCase {
37
50
  attribute :>> id = "NDS-VER-005"; attribute :>> name = "VerifyBatteryEndurance";
38
51
  attribute :>> methodKind = VerificationMethodKind::test;
39
52
  attribute :>> acceptanceCriteria = "Delivery continues for at least 4 hours at 25 mL/h from a fully charged battery after mains loss.";
40
- attribute :>> status = "planned";
53
+ attribute :>> status = ElementStatusKind::approved;
54
+
55
+ objective { verify reqBatteryEndurance; }
56
+ subject verified : Base::Anything[*] = (fnManagePower, fnManagePower.fnMonitorBattery);
41
57
  }
42
58
  verification vcConfirmationFlow : VerificationCase {
43
59
  attribute :>> id = "NDS-VER-006"; attribute :>> name = "VerifyConfirmationFlow";
44
60
  attribute :>> methodKind = VerificationMethodKind::demonstration;
45
61
  attribute :>> acceptanceCriteria = "No rate change reaches the controller without an explicit confirmation step.";
46
- attribute :>> status = "planned";
62
+ attribute :>> status = ElementStatusKind::approved;
63
+
64
+ objective { verify reqPrescriptionConfirmation; }
65
+ subject verified : Base::Anything[*] = (fnDeliverTherapy.fnControlDose.fnValidatePrescription, fnInformUser.fnAcceptInput);
47
66
  }
48
67
  verification vcStatusLegibility : VerificationCase {
49
68
  attribute :>> id = "NDS-VER-007"; attribute :>> name = "VerifyStatusLegibility";
50
69
  attribute :>> methodKind = VerificationMethodKind::inspection;
51
70
  attribute :>> acceptanceCriteria = "Rate and volume delivered are readable at 1 m under 100–1000 lux.";
52
- attribute :>> status = "planned";
71
+ attribute :>> status = ElementStatusKind::approved;
72
+
73
+ objective { verify reqStatusVisibility; }
74
+ subject verified : Base::Anything[*] = (fnInformUser, fnInformUser.fnRenderStatus);
53
75
  }
54
76
  verification vcPowerSourceSwitch : VerificationCase {
55
77
  attribute :>> id = "NDS-VER-008"; attribute :>> name = "VerifyPowerSourceSwitch";
56
78
  attribute :>> methodKind = VerificationMethodKind::test;
57
79
  attribute :>> acceptanceCriteria = "Rail brownout switches source without interrupting delivery.";
58
- attribute :>> status = "planned";
80
+ attribute :>> status = ElementStatusKind::approved;
81
+
82
+ subject verified : Base::Anything[*] = (fnManagePower.fnSelectPowerSource);
59
83
  }
60
84
 
61
85
  // Requirement → verification case.
62
- connection verDoseAccuracy : VerifiedBy connect verificationTarget ::> reqDoseAccuracy to verificationCase ::> vcDoseAccuracy;
63
- connection verOcclusion : VerifiedBy connect verificationTarget ::> reqOcclusionDetection to verificationCase ::> vcOcclusionResponse;
64
- connection verAirInLine : VerifiedBy connect verificationTarget ::> reqAirInLine to verificationCase ::> vcAirInLineResponse;
65
- connection verAlarm : VerifiedBy connect verificationTarget ::> reqAlarmAnnunciation to verificationCase ::> vcAlarmSignals;
66
- connection verBattery : VerifiedBy connect verificationTarget ::> reqBatteryEndurance to verificationCase ::> vcBatteryEndurance;
67
- connection verConfirmation : VerifiedBy connect verificationTarget ::> reqPrescriptionConfirmation to verificationCase ::> vcConfirmationFlow;
68
- connection verStatus : VerifiedBy connect verificationTarget ::> reqStatusVisibility to verificationCase ::> vcStatusLegibility;
86
+
87
+
88
+
89
+
90
+
91
+
69
92
 
70
93
  // Function → verification case, so safety-critical functions carry their
71
94
  // own verification rather than inheriting it through a requirement.
72
- connection verFnDeliverTherapy : VerifiedBy connect verificationTarget ::> fnDeliverTherapy to verificationCase ::> vcDoseAccuracy;
73
- connection verFnMeterFluid : VerifiedBy connect verificationTarget ::> fnMeterFluid to verificationCase ::> vcDoseAccuracy;
74
- connection verFnDriveActuator : VerifiedBy connect verificationTarget ::> fnDriveActuator to verificationCase ::> vcDoseAccuracy;
75
- connection verFnMeasureDelivered : VerifiedBy connect verificationTarget ::> fnMeasureDelivered to verificationCase ::> vcDoseAccuracy;
76
- connection verFnControlDose : VerifiedBy connect verificationTarget ::> fnControlDose to verificationCase ::> vcDoseAccuracy;
77
- connection verFnComputeRate : VerifiedBy connect verificationTarget ::> fnComputeRate to verificationCase ::> vcDoseAccuracy;
78
- connection verFnValidatePrescription : VerifiedBy connect verificationTarget ::> fnValidatePrescription to verificationCase ::> vcConfirmationFlow;
79
- connection verFnEnsureSafety : VerifiedBy connect verificationTarget ::> fnEnsureSafety to verificationCase ::> vcOcclusionResponse;
80
- connection verFnDetectOcclusion : VerifiedBy connect verificationTarget ::> fnDetectOcclusion to verificationCase ::> vcOcclusionResponse;
81
- connection verFnDetectAirInLine : VerifiedBy connect verificationTarget ::> fnDetectAirInLine to verificationCase ::> vcAirInLineResponse;
82
- connection verFnEnforceDoseLimits : VerifiedBy connect verificationTarget ::> fnEnforceDoseLimits to verificationCase ::> vcOcclusionResponse;
83
- connection verFnInformUser : VerifiedBy connect verificationTarget ::> fnInformUser to verificationCase ::> vcStatusLegibility;
84
- connection verFnRenderStatus : VerifiedBy connect verificationTarget ::> fnRenderStatus to verificationCase ::> vcStatusLegibility;
85
- connection verFnAnnunciateAlarm : VerifiedBy connect verificationTarget ::> fnAnnunciateAlarm to verificationCase ::> vcAlarmSignals;
86
- connection verFnAcceptInput : VerifiedBy connect verificationTarget ::> fnAcceptInput to verificationCase ::> vcConfirmationFlow;
87
- connection verFnManagePower : VerifiedBy connect verificationTarget ::> fnManagePower to verificationCase ::> vcBatteryEndurance;
88
- connection verFnMonitorBattery : VerifiedBy connect verificationTarget ::> fnMonitorBattery to verificationCase ::> vcBatteryEndurance;
89
- connection verFnSelectPowerSource : VerifiedBy connect verificationTarget ::> fnSelectPowerSource to verificationCase ::> vcPowerSourceSwitch;
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
90
113
  }
@@ -15,35 +15,34 @@ package memo_examples_nested_architecture_dsm_traces {
15
15
  private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
16
16
 
17
17
  // ── Function → block allocation ──────────────────────────────
18
- connection allocDrive : AllocatedTo connect function ::> fnDriveActuator to allocatedElement ::> lcPumpMechanism;
19
- connection allocMeasure : AllocatedTo connect function ::> fnMeasureDelivered to allocatedElement ::> lcPumpMechanism;
20
- connection allocComputeRate : AllocatedTo connect function ::> fnComputeRate to allocatedElement ::> lcDoseController;
21
- connection allocValidate : AllocatedTo connect function ::> fnValidatePrescription to allocatedElement ::> lcDoseController;
22
- connection allocOcclusion : AllocatedTo connect function ::> fnDetectOcclusion to allocatedElement ::> lcOcclusionChannel;
23
- connection allocAirInLine : AllocatedTo connect function ::> fnDetectAirInLine to allocatedElement ::> lcOcclusionChannel;
18
+ allocate fnDeliverTherapy.fnMeterFluid.fnDriveActuator to sysTherapyDelivery.subFluidPath.lcPumpMechanism;
19
+ allocate fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered to sysTherapyDelivery.subFluidPath.lcPumpMechanism;
20
+ allocate fnDeliverTherapy.fnControlDose.fnComputeRate to sysTherapyDelivery.subControl.lcDoseController;
21
+ allocate fnDeliverTherapy.fnControlDose.fnValidatePrescription to sysTherapyDelivery.subControl.lcDoseController;
22
+ allocate fnEnsureSafety.fnDetectOcclusion to sysTherapyDelivery.subFluidPath.lcOcclusionChannel;
23
+ allocate fnEnsureSafety.fnDetectAirInLine to sysTherapyDelivery.subFluidPath.lcOcclusionChannel;
24
24
  // Two channels carry the same protective function — the redundancy shows
25
25
  // up in the matrix as two marks on one row.
26
- connection allocLimitsWatchdog : AllocatedTo connect function ::> fnEnforceDoseLimits to allocatedElement ::> lcWatchdogChannel;
27
- connection allocLimitsPressure : AllocatedTo connect function ::> fnEnforceDoseLimits to allocatedElement ::> lcPressureIntegrityChannel;
28
- connection allocRender : AllocatedTo connect function ::> fnRenderStatus to allocatedElement ::> lcDisplayManager;
29
- connection allocAlarm : AllocatedTo connect function ::> fnAnnunciateAlarm to allocatedElement ::> lcAlarmAnnunciator;
30
- connection allocInput : AllocatedTo connect function ::> fnAcceptInput to allocatedElement ::> lcKeypadHandler;
31
- connection allocBattery : AllocatedTo connect function ::> fnMonitorBattery to allocatedElement ::> lcBatteryManager;
32
- connection allocPowerSource : AllocatedTo connect function ::> fnSelectPowerSource to allocatedElement ::> lcPowerRailMonitor;
26
+ allocate fnEnsureSafety.fnEnforceDoseLimits to sysTherapyDelivery.subControl.subSafetyMonitor.lcWatchdogChannel;
27
+ allocate fnEnsureSafety.fnEnforceDoseLimits to sysTherapyDelivery.subControl.subSafetyMonitor.lcPressureIntegrityChannel;
28
+ allocate fnInformUser.fnRenderStatus to sysTherapyDelivery.subUserInterface.lcDisplayManager;
29
+ allocate fnInformUser.fnAnnunciateAlarm to sysTherapyDelivery.subUserInterface.lcAlarmAnnunciator;
30
+ allocate fnInformUser.fnAcceptInput to sysTherapyDelivery.subUserInterface.lcKeypadHandler;
31
+ allocate fnManagePower.fnMonitorBattery to sysTherapyDelivery.subPower.lcBatteryManager;
32
+ allocate fnManagePower.fnSelectPowerSource to sysTherapyDelivery.subPower.lcPowerRailMonitor;
33
33
  // A capability allocated at subsystem level rather than to one component:
34
34
  // collapsed, it lands in the same cell as its children's allocations.
35
- connection allocMeterFluid : AllocatedTo connect function ::> fnMeterFluid to allocatedElement ::> subFluidPath;
36
-
35
+ allocate fnDeliverTherapy.fnMeterFluid to sysTherapyDelivery.subFluidPath;
37
36
  // ── Requirement → function satisfaction ──────────────────────
38
- connection satDoseAccuracyRate : SatisfiedBy connect requiredElement ::> reqDoseAccuracy to satisfyingElement ::> fnComputeRate;
39
- connection satDoseAccuracyDrive : SatisfiedBy connect requiredElement ::> reqDoseAccuracy to satisfyingElement ::> fnDriveActuator;
40
- connection satOcclusion : SatisfiedBy connect requiredElement ::> reqOcclusionDetection to satisfyingElement ::> fnDetectOcclusion;
41
- connection satOcclusionLimits : SatisfiedBy connect requiredElement ::> reqOcclusionDetection to satisfyingElement ::> fnEnforceDoseLimits;
42
- connection satAirInLine : SatisfiedBy connect requiredElement ::> reqAirInLine to satisfyingElement ::> fnDetectAirInLine;
43
- connection satAirInLineAlarm : SatisfiedBy connect requiredElement ::> reqAirInLine to satisfyingElement ::> fnAnnunciateAlarm;
44
- connection satAlarm : SatisfiedBy connect requiredElement ::> reqAlarmAnnunciation to satisfyingElement ::> fnAnnunciateAlarm;
45
- connection satBatteryMonitor : SatisfiedBy connect requiredElement ::> reqBatteryEndurance to satisfyingElement ::> fnMonitorBattery;
46
- connection satBatterySource : SatisfiedBy connect requiredElement ::> reqBatteryEndurance to satisfyingElement ::> fnSelectPowerSource;
47
- connection satConfirmation : SatisfiedBy connect requiredElement ::> reqPrescriptionConfirmation to satisfyingElement ::> fnAcceptInput;
48
- connection satConfirmationValidate : SatisfiedBy connect requiredElement ::> reqPrescriptionConfirmation to satisfyingElement ::> fnValidatePrescription;
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
49
48
  }
@@ -0,0 +1,3 @@
1
+ name: reusable-instrument
2
+ entrypoint: model/catalog/project.sysml
3
+ include: [model]
@@ -24,8 +24,9 @@ package memo_examples_reusable_instrument {
24
24
  attribute :>> goalStatement = "Return a used instrument to sterile, functional condition for the next case.";
25
25
  attribute :>> preCondition = "instrument collected from the OR; gross soil removed at point of use";
26
26
  attribute :>> successOutcome = "instrument cleaned, inspected, sterilized, and released to sterile storage";
27
+ subject supportingSystem;
28
+ actor sterileProcessingTechActor = sterileProcessingTech;
27
29
  }
28
- connection : Initiates connect initiatingUser ::> sterileProcessingTech to initiatedUseCase ::> ucSterilize;
29
30
 
30
31
  // Reprocessing workflow: exists independently of any single instrument.
31
32
  action wfReprocess : OperationalWorkflow {
@@ -34,39 +35,31 @@ package memo_examples_reusable_instrument {
34
35
  attribute :>> entryCondition = "used instrument received in decontamination";
35
36
  attribute :>> completionCondition = "sterile pack released to storage";
36
37
  }
37
- action actClean : OperationalActivity {
38
+ action actClean : OperativeAction {
38
39
  attribute :>> id = "RI-ACT-001"; attribute :>> name = "CleanAndDisinfect";
39
40
  attribute :>> criticality = CriticalityKind::high;
40
41
  }
41
- action actInspect : OperationalActivity {
42
+ action actInspect : OperativeAction {
42
43
  attribute :>> id = "RI-ACT-002"; attribute :>> name = "InspectAndFunctionTest";
43
44
  attribute :>> criticality = CriticalityKind::high;
44
45
  }
45
- action actSterilizeLoad : OperationalActivity {
46
+ action actSterilizeLoad : OperativeAction {
46
47
  attribute :>> id = "RI-ACT-003"; attribute :>> name = "PackAndAutoclave";
47
48
  attribute :>> criticality = CriticalityKind::high;
48
49
  }
49
- action wsClean : WorkflowStep { ref :>> performedActivity = actClean; }
50
- action wsInspect : WorkflowStep { ref :>> performedActivity = actInspect; }
51
- action wsSterilize : WorkflowStep { ref :>> performedActivity = actSterilizeLoad; }
52
- connection : Composes connect parent ::> wfReprocess to child ::> wsClean;
53
- first wsClean then wsInspect;
54
- first wsInspect then wsSterilize;
55
- connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfReprocess to supported ::> ucSterilize; }
56
50
 
57
51
  action scNominalCycle : OperativeScenario {
58
52
  attribute :>> id = "RI-SC-001"; attribute :>> name = "NominalReprocessingCycle";
59
- attribute :>> variantKind = ScenarioVariantKind::nominal;
60
- attribute :>> operationalCondition = OperationalConditionKind::normal;
61
- ref :>> parentWorkflow = wfReprocess;
62
- }
63
- // One modeled occurrence of the workflow. External operational systems
64
- // may associate this occurrence with their asset or batch record.
65
- part occCycle113 : ScenarioOccurrence {
66
- attribute :>> id = "RI-OCC-113"; attribute :>> name = "ReprocessingCycle113";
67
- attribute :>> occurredAt = "2026-07-15T14:02:00Z";
68
- attribute :>> hypothetical = false;
69
- attribute :>> outcomeSummary = "cycle completed; biological indicator passed";
70
- ref :>> executedScenario = scNominalCycle;
53
+
54
+ perform actClean;
55
+ perform actInspect;
56
+ perform actSterilizeLoad;
57
+ first actClean then actInspect;
58
+ first actInspect then actSterilizeLoad;
71
59
  }
60
+
61
+ connection : RealizesUseCase connect realizingWorkflow ::> wfReprocess to realizedUseCase ::> ucSterilize;
62
+
63
+
64
+ connection : HasScenario connect owningWorkflow ::> wfReprocess to pathScenario ::> scNominalCycle;
72
65
  }