@memoarchitect/ontology 0.6.5 → 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 (394) 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/connected-patient-monitor/model/catalog/project.sysml +24 -0
  4. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  5. package/examples/connected-patient-monitor/model/{viewpoints → catalog/viewpoints/unassigned/views}/connected_patient_monitor_overview.sysml +1 -1
  6. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
  7. package/examples/embedded-infusion-pump/model/catalog/project.sysml +24 -0
  8. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  9. package/examples/embedded-infusion-pump/model/{viewpoints → catalog/viewpoints/unassigned/views}/embedded_infusion_pump_overview.sysml +1 -1
  10. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  11. package/examples/functional-logical-physical/model/catalog/project.sysml +24 -0
  12. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  13. package/examples/functional-logical-physical/model/{viewpoints → catalog/viewpoints/unassigned/views}/functional_logical_physical_overview.sysml +1 -1
  14. package/examples/gpca-pump/methodology/gpca_methodology.sysml +7 -8
  15. package/examples/gpca-pump/methodology/gpca_profiles.sysml +89 -11
  16. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +19 -9
  17. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +342 -100
  18. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +27 -13
  19. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +329 -272
  20. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +57 -16
  21. package/examples/gpca-pump/model/catalog/gpca_context.sysml +12 -8
  22. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -10
  23. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
  24. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +181 -264
  25. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +95 -60
  26. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -11
  27. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +102 -101
  28. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +1 -1
  29. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  30. package/examples/gpca-pump/model/catalog/gpca_system.sysml +47 -30
  31. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +301 -354
  32. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +116 -36
  33. package/examples/gpca-pump/model/catalog/project.sysml +26 -0
  34. package/examples/gpca-pump/model/catalog/viewpoints/context/viewpoint.sysml +8 -0
  35. package/examples/gpca-pump/model/{views → catalog/viewpoints/context/views}/context_system_context_view.sysml +4 -4
  36. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/viewpoint.sysml +8 -0
  37. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/cybersecurity_cybersecurity_view.sysml +4 -4
  38. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_cyber_assessment_view.sysml +4 -4
  39. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_threat_model_view.sysml +5 -5
  40. package/examples/gpca-pump/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  41. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_allocation_view.sysml +2 -2
  42. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_browser_view.sysml +3 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/logical/viewpoint.sysml +8 -0
  44. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/behavior_action_flow_view.sysml +3 -3
  45. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/document_architecture_description_view.sysml +8 -8
  46. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_device_interconnect_view.sysml +5 -5
  47. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_logical_architecture_view.sysml +3 -3
  48. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_mode_state_view.sysml +4 -4
  49. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_system_decomposition_view.sysml +3 -3
  50. package/examples/gpca-pump/model/catalog/viewpoints/operational/viewpoint.sysml +8 -0
  51. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_scenario_sequence_view.sysml +3 -3
  52. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +4 -4
  53. package/examples/gpca-pump/model/catalog/viewpoints/physical/viewpoint.sysml +8 -0
  54. package/examples/gpca-pump/model/{views → catalog/viewpoints/physical/views}/physical_physical_bom_view.sysml +2 -2
  55. package/examples/gpca-pump/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  56. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/document_dhf_index_view.sysml +8 -8
  57. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/requirements_requirements_trace_view.sysml +2 -2
  58. package/examples/gpca-pump/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  59. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_hazard_analysis_view.sysml +8 -5
  60. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +7 -5
  61. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +3 -3
  62. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_risk_chain_view.sysml +3 -3
  63. package/examples/gpca-pump/model/catalog/viewpoints/software/viewpoint.sysml +8 -0
  64. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/document_sdd_view.sysml +4 -4
  65. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +5 -5
  66. package/examples/gpca-pump/model/catalog/viewpoints/usability/viewpoint.sysml +8 -0
  67. package/examples/gpca-pump/model/{views → catalog/viewpoints/usability/views}/document_usability_view.sysml +8 -6
  68. package/examples/gpca-pump/model/catalog/viewpoints/verification/viewpoint.sysml +8 -0
  69. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/document_vv_view.sysml +7 -5
  70. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +3 -3
  71. package/examples/ivd-laboratory-system/model/catalog/project.sysml +24 -0
  72. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  73. package/examples/ivd-laboratory-system/model/{viewpoints → catalog/viewpoints/unassigned/views}/ivd_laboratory_system_overview.sysml +1 -1
  74. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +4 -2
  75. package/examples/manual-surgical-instrument/model/catalog/project.sysml +24 -0
  76. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  77. package/examples/manual-surgical-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/manual_surgical_instrument_overview.sysml +1 -1
  78. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  79. package/examples/multidimensional-layers/model/catalog/project.sysml +24 -0
  80. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  81. package/examples/multidimensional-layers/model/{viewpoints → catalog/viewpoints/unassigned/views}/multidimensional_layers_overview.sysml +1 -1
  82. package/examples/nested-architecture-dsm/README.md +49 -0
  83. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +179 -0
  84. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +165 -0
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +53 -0
  86. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +89 -0
  87. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +113 -0
  88. package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
  89. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +48 -0
  90. package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
  91. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +11 -8
  92. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  93. package/examples/reusable-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/reusable_instrument_overview.sysml +1 -1
  94. package/examples/ros-mobile-robot/README.md +40 -0
  95. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  96. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  97. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  98. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
  99. package/examples/software-only-medical-device/model/catalog/project.sysml +28 -0
  100. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
  101. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  102. package/examples/software-only-medical-device/model/{viewpoints → catalog/viewpoints/unassigned/views}/software_only_medical_device_overview.sysml +1 -1
  103. package/examples/surgical-closure-workflow/model/catalog/project.sysml +24 -0
  104. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +57 -57
  105. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  106. package/examples/surgical-closure-workflow/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_closure_workflow_overview.sysml +1 -1
  107. package/examples/surgical-robot/model/catalog/project.sysml +24 -0
  108. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +6 -4
  109. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  110. package/examples/surgical-robot/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_robot_overview.sysml +1 -1
  111. package/examples/sysml-diagram-samples/README.md +7 -0
  112. package/examples/sysml-diagram-samples/dhf/documents/DOC-HAR-001.md +11 -0
  113. package/examples/sysml-diagram-samples/memo.package.yaml +11 -5
  114. package/examples/sysml-diagram-samples/model/catalog/project.sysml +33 -0
  115. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  116. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/action_flow_view.sysml +23 -20
  117. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +11 -11
  118. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
  119. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +143 -0
  120. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +87 -0
  121. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +109 -0
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +13 -0
  124. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/requirements_view.sysml +6 -7
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +33 -0
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +80 -0
  127. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +48 -0
  128. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +15 -9
  129. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +93 -0
  130. package/examples/temperature-alarm/model/catalog/project.sysml +24 -0
  131. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +29 -21
  132. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  133. package/examples/temperature-alarm/model/{viewpoints → catalog/viewpoints/unassigned/views}/temperature_alarm_overview.sysml +1 -1
  134. package/examples/ui-screen-regions/README.md +117 -0
  135. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +84 -0
  136. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +212 -0
  137. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +61 -0
  138. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png +0 -0
  139. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png +0 -0
  140. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png +0 -0
  141. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +51 -0
  142. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +27 -0
  143. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +27 -0
  144. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +59 -0
  145. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +25 -0
  146. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +178 -0
  147. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +93 -0
  148. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +75 -0
  149. package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
  150. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  151. package/examples/ui-screen-regions/model/catalog/traces.sysml +179 -0
  152. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  153. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +62 -0
  154. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  155. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +62 -0
  156. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +62 -0
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/viewpoint.sysml +8 -0
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +57 -0
  160. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +52 -0
  161. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +54 -0
  162. package/extensions/LICENSES/MIT.txt +19 -0
  163. package/extensions/README.md +94 -0
  164. package/extensions/aadl/memo.package.yaml +18 -0
  165. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  166. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  167. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  168. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  169. package/extensions/clinical/memo.package.yaml +18 -0
  170. package/extensions/clinical/src/methodology/clinical_methodology.sysml +22 -0
  171. package/extensions/cloud/memo.package.yaml +18 -0
  172. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  173. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  174. package/extensions/container/memo.package.yaml +18 -0
  175. package/extensions/container/src/container_extension.sysml +37 -0
  176. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  177. package/extensions/messaging/memo.package.yaml +18 -0
  178. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  179. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  180. package/extensions/ros/memo.package.yaml +18 -0
  181. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  182. package/extensions/ros/src/ros_extension.sysml +200 -0
  183. package/extensions/template/memo.package.yaml +17 -0
  184. package/extensions/template/src/extension.sysml +37 -0
  185. package/memo.manifest.yaml +15 -2
  186. package/methodologies/default/memo.package.yaml +19 -9
  187. package/methodologies/gpca/memo.package.yaml +18 -9
  188. package/ontology/memo.package.yaml +23 -8
  189. package/package.json +6 -6
  190. package/profile/memo.package.yaml +18 -9
  191. package/src/architecture/decisions/memo_decisions.sysml +28 -0
  192. package/src/architecture/functional/behavior/memo_behavior.sysml +50 -22
  193. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  194. package/src/architecture/functional/functions/memo_functions.sysml +93 -43
  195. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -24
  196. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +52 -12
  197. package/src/architecture/implementation/ui/memo_ui.sysml +276 -53
  198. package/src/architecture/logical/interfaces/memo_interfaces.sysml +64 -13
  199. package/src/architecture/logical/structure/memo_logical_structure.sysml +92 -35
  200. package/src/architecture/operational/activities/memo_activities.sysml +10 -4
  201. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
  202. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
  203. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
  204. package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
  205. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
  206. package/src/architecture/operational/workflows/memo_workflows.sysml +28 -15
  207. package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
  208. package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
  209. package/src/artifacts/configuration_management/memo_configuration_management.sysml +35 -0
  210. package/src/artifacts/core/memo_controlled_artifacts.sysml +35 -0
  211. package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
  212. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  213. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  214. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  215. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  216. package/src/artifacts/standards/iec_60812.sysml +51 -0
  217. package/src/artifacts/standards/iec_62304.sysml +210 -0
  218. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  219. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  220. package/src/artifacts/standards/iso_13485.sysml +113 -0
  221. package/src/artifacts/standards/iso_14971.sysml +94 -0
  222. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  223. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  224. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +1 -1
  225. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +5 -5
  226. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +1 -1
  227. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +2 -2
  228. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +2 -2
  229. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +2 -2
  230. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +1 -1
  231. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +1 -1
  232. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +3 -3
  233. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +4 -4
  234. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +1 -1
  235. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +3 -2
  236. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +2 -2
  237. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +4 -4
  238. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.md +4 -3
  239. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  240. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/detailed-design.md +1 -1
  241. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +3 -3
  242. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +6 -5
  243. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +3 -2
  244. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +5 -4
  245. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +4 -2
  246. package/src/artifacts/templates/dhf/iec-62304/srs.md +172 -0
  247. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +3 -3
  248. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.md +1 -1
  249. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/summative-eval.md +1 -1
  250. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +93 -0
  251. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.md +1 -1
  252. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/urra.md +3 -3
  253. package/src/artifacts/templates/dhf/iso-14971/fmea.md +116 -0
  254. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/har.md +3 -3
  255. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmp.md +2 -2
  256. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  257. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  258. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  259. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  260. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
  261. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  262. package/src/assurance/requirements/memo_requirements.sysml +5 -2
  263. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  264. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  265. package/src/assurance/safety_risk/memo_risk.sysml +78 -7
  266. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +27 -0
  267. package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
  268. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  269. package/src/core/annotations/memo_annotations.sysml +96 -0
  270. package/src/core/common/memo_common.sysml +140 -18
  271. package/src/core/consistency_rules/consistency_rules.sysml +7 -0
  272. package/src/core/dimensions/dimensions.sysml +17 -1
  273. package/src/core/enumerations/memo_enumerations.sysml +101 -20
  274. package/src/core/methodology_scope/methodology_scope.sysml +7 -15
  275. package/src/core/relationships/memo_relationships.sysml +199 -194
  276. package/src/memo_namespaces.sysml +127 -67
  277. package/src/methodology/core/memo_core.sysml +69 -2
  278. package/src/methodology/profiles/memo_profiles.sysml +31 -41
  279. package/src/methodology/workflow/memo_workflow.sysml +7 -2
  280. package/src/rules/closure/closure_rules.sysml +104 -31
  281. package/src/rules/coverage/coverage_rules.sysml +4 -256
  282. package/src/rules/crosslayer/cross_layer_rules.sysml +6 -15
  283. package/src/rules/lifecycle/lifecycle_rules.sysml +4 -39
  284. package/src/rules/ontology/ontology_invariants.sysml +243 -74
  285. package/src/rules/quantitative/quantitative_rules.sysml +8 -8
  286. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +10 -3
  287. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  288. package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
  289. package/src/viewpoints/context/context_viewpoint.sysml +4 -2
  290. package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
  291. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  292. package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view → views/cybersecurity_assessment_view}/cybersecurity_assessment_view.sysml +2 -2
  293. package/src/viewpoints/cybersecurity/{threat_model_view → views/threat_model_view}/threat_model_view.sysml +2 -2
  294. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +5 -0
  295. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  296. package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +3 -3
  297. package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +3 -3
  298. package/src/viewpoints/logical/logical_viewpoint.sysml +3 -1
  299. package/src/viewpoints/logical/{logical_architecture_view → views/logical_architecture_view}/logical_architecture_view.sysml +2 -2
  300. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  301. package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +3 -3
  302. package/src/viewpoints/physical/physical_viewpoint.sysml +3 -1
  303. package/src/viewpoints/physical/{network_topology_view → views/network_topology_view}/network_topology_view.sysml +2 -2
  304. package/src/viewpoints/physical/{physical_bom_view → views/physical_bom_view}/physical_bom_view.sysml +2 -2
  305. package/src/viewpoints/rendering/memo_rendering.sysml +354 -0
  306. package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -1
  307. package/src/viewpoints/requirements/{requirements_traceability_view → views/requirements_traceability_view}/requirements_traceability_view.sysml +2 -2
  308. package/src/viewpoints/risk/risk_viewpoint.sysml +3 -1
  309. package/src/viewpoints/risk/{risk_chain_view → views/risk_chain_view}/risk_chain_view.sysml +2 -2
  310. package/src/viewpoints/software/software_viewpoint.sysml +3 -1
  311. package/src/viewpoints/software/{software_architecture_view → views/software_architecture_view}/software_architecture_view.sysml +2 -2
  312. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +28 -0
  313. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +23 -0
  314. package/src/viewpoints/usability/usability_viewpoint.sysml +3 -1
  315. package/src/viewpoints/usability/{usability_engineering_view → views/usability_engineering_view}/usability_engineering_view.sysml +2 -2
  316. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  317. package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +3 -3
  318. package/templates/connected-device/memo.package.yaml +11 -5
  319. package/templates/connected-device/model/catalog/project.sysml +28 -0
  320. package/templates/connected-device/syside.toml +1 -1
  321. package/templates/default/memo.package.yaml +11 -5
  322. package/templates/default/model/catalog/project.sysml +28 -0
  323. package/templates/default/syside.toml +1 -1
  324. package/templates/infusion-pump/memo.package.yaml +11 -5
  325. package/templates/infusion-pump/model/catalog/project.sysml +28 -0
  326. package/templates/infusion-pump/syside.toml +1 -1
  327. package/templates/monitoring-device/memo.package.yaml +11 -5
  328. package/templates/monitoring-device/model/catalog/project.sysml +28 -0
  329. package/templates/monitoring-device/syside.toml +1 -1
  330. package/templates/samd/memo.package.yaml +11 -5
  331. package/templates/samd/model/catalog/project.sysml +28 -0
  332. package/templates/samd/syside.toml +1 -1
  333. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +0 -3
  334. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +0 -3
  335. package/examples/extensions/README.md +0 -16
  336. package/examples/extensions/clinical/memo.package.yaml +0 -9
  337. package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -14
  338. package/examples/extensions/template/memo.package.yaml +0 -9
  339. package/examples/extensions/template/src/extension.sysml +0 -15
  340. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +0 -3
  341. package/examples/gpca-pump/memo.config.yaml +0 -9
  342. package/examples/gpca-pump/methodology/gpca_scope.sysml +0 -25
  343. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +0 -3
  344. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +0 -3
  345. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +0 -4
  346. package/examples/reusable-instrument/model/reusable_instrument.sysml +0 -4
  347. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +0 -4
  348. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +0 -4
  349. package/examples/surgical-robot/model/surgical_robot.sysml +0 -4
  350. package/examples/sysml-diagram-samples/model/samples/functional_flow_view.sysml +0 -164
  351. package/examples/sysml-diagram-samples/model/samples/interconnection_view.sysml +0 -94
  352. package/examples/sysml-diagram-samples/model/samples/operational_behaviour_view.sysml +0 -135
  353. package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +0 -109
  354. package/examples/sysml-diagram-samples/model/samples/tree_view.sysml +0 -56
  355. package/examples/temperature-alarm/model/temperature_alarm.sysml +0 -4
  356. package/ontology/memo.rendering.yaml +0 -84
  357. package/src/compliance/artifacts/memo_artifacts.sysml +0 -12
  358. package/src/compliance/change/memo_change.sysml +0 -17
  359. package/src/compliance/dhf-templates/iec-62304/srs.md +0 -138
  360. package/src/compliance/dhf-templates/iec-62366/task-analysis.md +0 -57
  361. package/src/compliance/dhf-templates/iso-14971/fmea.md +0 -93
  362. package/src/compliance/document_views/memo_document_views.sysml +0 -7
  363. package/src/compliance/iso14971/risk_management_file.sysml +0 -16
  364. package/src/compliance/postmarket/memo_postmarket.sysml +0 -16
  365. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  366. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  367. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
  368. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/change-control.md +0 -0
  369. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/formative-eval.md +0 -0
  370. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ui-spec.md +0 -0
  371. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/use-spec.md +0 -0
  372. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fta.md +0 -0
  373. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-benefit.md +0 -0
  374. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-matrix.md +0 -0
  375. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmr.md +0 -0
  376. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/approval-block.md +0 -0
  377. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/document-control-header.md +0 -0
  378. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/references-section.md +0 -0
  379. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/revision-history-table.md +0 -0
  380. /package/templates/connected-device/{src → model/catalog}/architecture/system.sysml +0 -0
  381. /package/templates/connected-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  382. /package/templates/connected-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  383. /package/templates/default/{src → model/catalog}/architecture/system.sysml +0 -0
  384. /package/templates/default/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  385. /package/templates/default/{src → model/catalog}/assurance/requirements.sysml +0 -0
  386. /package/templates/infusion-pump/{src → model/catalog}/architecture/system.sysml +0 -0
  387. /package/templates/infusion-pump/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  388. /package/templates/infusion-pump/{src → model/catalog}/assurance/requirements.sysml +0 -0
  389. /package/templates/monitoring-device/{src → model/catalog}/architecture/system.sysml +0 -0
  390. /package/templates/monitoring-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  391. /package/templates/monitoring-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  392. /package/templates/samd/{src → model/catalog}/architecture/system.sysml +0 -0
  393. /package/templates/samd/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  394. /package/templates/samd/{src → model/catalog}/assurance/requirements.sysml +0 -0
@@ -0,0 +1,296 @@
1
+ // Focused example: a ROS 2 mobile logistics robot, modelled with the ROS
2
+ // extension. The point of the example is the MECHANISM, not the robot — it
3
+ // demonstrates how an extension is used, and it is deliberately the only place
4
+ // ROS vocabulary appears outside `extensions/ros`.
5
+ //
6
+ // Three things it shows:
7
+ // 1. Extension types are used exactly like base types. `RosNode` is a
8
+ // `SoftwareComponent`, so period, WCET, safety class and the rest are
9
+ // inherited and every base rule still applies to it.
10
+ // 2. ROS communication uses native item definitions/usages, directional
11
+ // ports, interfaces, and flows — no publish/subscribe relation is added.
12
+ // 3. Deployment reuses the BASE relations unchanged — `BuildsInto`,
13
+ // `DeploysTo`, `ProvidesEnvironment` — with no ROS-specific relation
14
+ // anywhere in the chain.
15
+ package memo_examples_ros_mobile_robot {
16
+ private import ScalarValues::*;
17
+ private import ModelingMetadata::*;
18
+
19
+ private import memo_core_enumerations::*;
20
+ private import memo_core_relationships::*;
21
+ private import memo_architecture_implementation_software_structure::*;
22
+ private import memo_architecture_implementation_software_runtime::*;
23
+ private import memo_architecture_functional_behavior::*;
24
+ private import memo_architecture_realization_deployment::*;
25
+ private import memo_architecture_realization_physical::*;
26
+ private import memo_extension_messaging::*;
27
+ private import memo_extension_container::*;
28
+ private import memo_extension_ros::*;
29
+
30
+ // ── Message definitions and named topic instances ──────────────────
31
+ // The definition is the ROS message contract. A named usage is the topic
32
+ // deployed in this system; publisher/subscriber ports reference that same
33
+ // usage and native flows carry its message type.
34
+ item def LaserScan specializes RosMessage {
35
+ attribute :>> rosTypeName = "sensor_msgs/msg/LaserScan";
36
+ attribute :>> messageSchema = "ranges[], intensities[], angle_min, angle_max, scan_time";
37
+ }
38
+ item def VelocityCommand specializes RosMessage {
39
+ attribute :>> rosTypeName = "geometry_msgs/msg/Twist";
40
+ attribute :>> messageSchema = "linear.x, angular.z";
41
+ }
42
+ item def EmergencyStop specializes RosMessage {
43
+ attribute :>> rosTypeName = "std_msgs/msg/Bool";
44
+ attribute :>> messageSchema = "data (true = stop asserted)";
45
+ }
46
+
47
+ item topicScan : LaserScan {
48
+ attribute :>> id = "RMR-TP-001"; attribute :>> name = "ScanTopic";
49
+ }
50
+ item topicCmdVel : VelocityCommand {
51
+ attribute :>> id = "RMR-TP-002"; attribute :>> name = "CmdVelTopic";
52
+ }
53
+ item topicEstop : EmergencyStop {
54
+ attribute :>> id = "RMR-TP-003"; attribute :>> name = "EmergencyStopTopic";
55
+ }
56
+
57
+ // ── Code ────────────────────────────────────────────────────────────
58
+ part swPerception : SoftwareModule {
59
+ attribute :>> moduleKind = ModuleKind::unit;
60
+ attribute :>> id = "RMR-SW-001"; attribute :>> name = "PerceptionStack";
61
+ attribute :>> responsibility = "Lidar driver and obstacle segmentation.";
62
+ attribute :>> safetyClass = SafetyClassKind::B;
63
+ }
64
+ part swNavigation : SoftwareModule {
65
+ attribute :>> moduleKind = ModuleKind::unit;
66
+ attribute :>> id = "RMR-SW-002"; attribute :>> name = "NavigationStack";
67
+ attribute :>> responsibility = "Global and local planning; velocity command generation.";
68
+ attribute :>> safetyClass = SafetyClassKind::B;
69
+ }
70
+ part swSafety : SoftwareModule {
71
+ attribute :>> moduleKind = ModuleKind::unit;
72
+ attribute :>> id = "RMR-SW-003"; attribute :>> name = "SafetyMonitor";
73
+ attribute :>> responsibility = "Independent watchdog: stops the base on obstacle proximity or missing heartbeat.";
74
+ attribute :>> safetyClass = SafetyClassKind::C;
75
+ }
76
+
77
+ // ── Nodes ───────────────────────────────────────────────────────────
78
+ //
79
+ // `runtimeKind` is set per node rather than by the type: the first two are
80
+ // composed into one container process, the safety monitor runs as its own
81
+ // process so a fault in navigation cannot take it down. That distinction
82
+ // is exactly what an extension type must NOT decide for the modeller.
83
+ part nodeLidar : RosNode {
84
+ attribute :>> runtimeKind = RuntimeKind::thread;
85
+ attribute :>> id = "RMR-ND-001"; attribute :>> name = "LidarDriverNode";
86
+ attribute :>> nodeNamespace = "/robot/perception";
87
+ attribute :>> lifecycleManaged = true;
88
+ attribute :>> executorModel = "single-threaded executor, composed";
89
+ attribute :>> periodMs = 50.0;
90
+ attribute :>> wcetMs = 8.0;
91
+ attribute :>> safetyClass = SafetyClassKind::B;
92
+ out port scanPublisher : RosPublisher {
93
+ ref :>> topic = topicScan;
94
+ attribute :>> deliverySemantics = MessagingDeliveryKind::atMostOnce;
95
+ attribute :>> publishRateHz = 20.0;
96
+ attribute :>> offeredQos {
97
+ attribute :>> reliability = RosReliabilityKind::bestEffort;
98
+ attribute :>> durability = RosDurabilityKind::volatile;
99
+ attribute :>> deadlineMs = 60.0;
100
+ attribute :>> livelinessLeaseMs = 200.0;
101
+ attribute :>> historyDepth = 5;
102
+ }
103
+ }
104
+ }
105
+ part nodeNavigation : RosNode {
106
+ attribute :>> runtimeKind = RuntimeKind::thread;
107
+ attribute :>> id = "RMR-ND-002"; attribute :>> name = "NavigationNode";
108
+ attribute :>> nodeNamespace = "/robot/navigation";
109
+ attribute :>> lifecycleManaged = true;
110
+ attribute :>> executorModel = "multi-threaded executor, composed";
111
+ attribute :>> periodMs = 100.0;
112
+ attribute :>> wcetMs = 35.0;
113
+ attribute :>> safetyClass = SafetyClassKind::B;
114
+ in port scanSubscriber : RosSubscriber {
115
+ ref :>> topic = topicScan;
116
+ attribute :>> deliverySemantics = MessagingDeliveryKind::atMostOnce;
117
+ attribute :>> lossBehaviour = "hold the last costmap for 200 ms, then command zero velocity";
118
+ attribute :>> requestedQos {
119
+ attribute :>> reliability = RosReliabilityKind::bestEffort;
120
+ attribute :>> durability = RosDurabilityKind::volatile;
121
+ attribute :>> deadlineMs = 60.0;
122
+ attribute :>> livelinessLeaseMs = 200.0;
123
+ attribute :>> historyDepth = 5;
124
+ }
125
+ }
126
+ out port cmdVelPublisher : RosPublisher {
127
+ ref :>> topic = topicCmdVel;
128
+ attribute :>> deliverySemantics = MessagingDeliveryKind::atLeastOnce;
129
+ attribute :>> publishRateHz = 10.0;
130
+ attribute :>> offeredQos {
131
+ attribute :>> reliability = RosReliabilityKind::reliable;
132
+ attribute :>> durability = RosDurabilityKind::volatile;
133
+ attribute :>> deadlineMs = 150.0;
134
+ attribute :>> livelinessLeaseMs = 300.0;
135
+ attribute :>> historyDepth = 1;
136
+ }
137
+ }
138
+ in port estopSubscriber : RosSubscriber {
139
+ ref :>> topic = topicEstop;
140
+ attribute :>> deliverySemantics = MessagingDeliveryKind::atLeastOnce;
141
+ attribute :>> lossBehaviour = "no publisher within the liveliness lease is treated as stop asserted";
142
+ attribute :>> requestedQos {
143
+ attribute :>> reliability = RosReliabilityKind::reliable;
144
+ attribute :>> durability = RosDurabilityKind::transientLocal;
145
+ attribute :>> deadlineMs = 100.0;
146
+ attribute :>> livelinessLeaseMs = 200.0;
147
+ attribute :>> historyDepth = 1;
148
+ }
149
+ }
150
+ inout port setModeClient : RosServiceClient {
151
+ attribute :>> serviceName = "/robot/safety/set_mode";
152
+ attribute :>> timeoutMs = 500.0;
153
+ }
154
+ inout port navigateActionServer : RosActionServer {
155
+ attribute :>> actionName = "/robot/navigation/navigate_to_pose";
156
+ }
157
+ }
158
+ part nodeSafetyMonitor : RosNode {
159
+ attribute :>> runtimeKind = RuntimeKind::process;
160
+ attribute :>> id = "RMR-ND-003"; attribute :>> name = "SafetyMonitorNode";
161
+ attribute :>> nodeNamespace = "/robot/safety";
162
+ attribute :>> lifecycleManaged = false;
163
+ attribute :>> executorModel = "own process, real-time priority";
164
+ attribute :>> periodMs = 20.0;
165
+ attribute :>> deadlineMs = 20.0;
166
+ attribute :>> wcetMs = 3.0;
167
+ attribute :>> priority = 90;
168
+ attribute :>> safetyClass = SafetyClassKind::C;
169
+ attribute :>> faultContainment = "separate process; watchdog-fed; stops the base on its own timeout";
170
+ in port scanSubscriber : RosSubscriber {
171
+ ref :>> topic = topicScan;
172
+ attribute :>> deliverySemantics = MessagingDeliveryKind::atMostOnce;
173
+ attribute :>> lossBehaviour = "two consecutive misses assert the stop";
174
+ }
175
+ in port cmdVelSubscriber : RosSubscriber {
176
+ ref :>> topic = topicCmdVel;
177
+ attribute :>> deliverySemantics = MessagingDeliveryKind::atLeastOnce;
178
+ attribute :>> lossBehaviour = "missing velocity commands assert the stop";
179
+ }
180
+ out port estopPublisher : RosPublisher {
181
+ ref :>> topic = topicEstop;
182
+ attribute :>> deliverySemantics = MessagingDeliveryKind::atLeastOnce;
183
+ attribute :>> publishRateHz = 50.0;
184
+ attribute :>> offeredQos {
185
+ attribute :>> reliability = RosReliabilityKind::reliable;
186
+ attribute :>> durability = RosDurabilityKind::transientLocal;
187
+ attribute :>> deadlineMs = 100.0;
188
+ attribute :>> livelinessLeaseMs = 200.0;
189
+ attribute :>> historyDepth = 1;
190
+ }
191
+ }
192
+ inout port setModeServer : RosServiceServer {
193
+ attribute :>> serviceName = "/robot/safety/set_mode";
194
+ }
195
+ inout port navigateActionClient : RosActionClient {
196
+ attribute :>> actionName = "/robot/navigation/navigate_to_pose";
197
+ }
198
+ }
199
+
200
+ // Cross-view mappings: SEI module-view implementation units are distinct
201
+ // from component-and-connector runtime elements. A runtime node realizes
202
+ // the module whose code it executes; it is not the same model element.
203
+ #refinement dependency nodeLidar to swPerception;
204
+ #refinement dependency nodeNavigation to swNavigation;
205
+ #refinement dependency nodeSafetyMonitor to swSafety;
206
+
207
+ // ── Native topic, service, and action interfaces ───────────────────
208
+ interface scanToNavigation : RosTopicInterface
209
+ connect nodeLidar.scanPublisher to nodeNavigation.scanSubscriber {
210
+ attribute :>> direction = DirectionKind::output;
211
+ }
212
+ interface scanToSafety : RosTopicInterface
213
+ connect nodeLidar.scanPublisher to nodeSafetyMonitor.scanSubscriber {
214
+ attribute :>> direction = DirectionKind::output;
215
+ }
216
+ interface cmdVelToSafety : RosTopicInterface
217
+ connect nodeNavigation.cmdVelPublisher to nodeSafetyMonitor.cmdVelSubscriber {
218
+ attribute :>> direction = DirectionKind::output;
219
+ }
220
+ interface estopToNavigation : RosTopicInterface
221
+ connect nodeSafetyMonitor.estopPublisher to nodeNavigation.estopSubscriber {
222
+ attribute :>> direction = DirectionKind::output;
223
+ }
224
+
225
+ flow of LaserScan from nodeLidar.scanPublisher.payload to nodeNavigation.scanSubscriber.payload;
226
+ flow of LaserScan from nodeLidar.scanPublisher.payload to nodeSafetyMonitor.scanSubscriber.payload;
227
+ flow of VelocityCommand from nodeNavigation.cmdVelPublisher.payload to nodeSafetyMonitor.cmdVelSubscriber.payload;
228
+ flow of EmergencyStop from nodeSafetyMonitor.estopPublisher.payload to nodeNavigation.estopSubscriber.payload;
229
+
230
+ interface setModeService : RosServiceInterface
231
+ connect nodeNavigation.setModeClient to nodeSafetyMonitor.setModeServer {
232
+ attribute :>> direction = DirectionKind::inputOutput;
233
+ }
234
+ interface navigateAction : RosActionInterface
235
+ connect nodeSafetyMonitor.navigateActionClient to nodeNavigation.navigateActionServer {
236
+ attribute :>> direction = DirectionKind::inputOutput;
237
+ }
238
+
239
+ // ── Deployment: base relations, unchanged ───────────────────────────
240
+ part imageRuntime : RosContainerImage {
241
+ attribute :>> id = "RMR-DU-001"; attribute :>> name = "RobotRuntimeImage";
242
+ attribute :>> unitKind = "OCI container image";
243
+ attribute :>> imageReference = "registry.example.com/robot-runtime:2.3.0";
244
+ attribute :>> registry = "registry.example.com";
245
+ attribute :>> digest = "sha256:9f2c1ad4e0b7";
246
+ attribute :>> baseImage = "ros:jazzy-ros-base";
247
+ attribute :>> rosDistribution = "jazzy";
248
+ attribute :>> workspaceOverlay = "/opt/robot_ws";
249
+ attribute :>> integrityProtection = "image signature + SBOM attestation";
250
+ }
251
+ part imageSafety : RosContainerImage {
252
+ attribute :>> id = "RMR-DU-002"; attribute :>> name = "SafetyMonitorImage";
253
+ attribute :>> unitKind = "OCI container image";
254
+ attribute :>> imageReference = "registry.example.com/safety-monitor:2.3.0";
255
+ attribute :>> registry = "registry.example.com";
256
+ attribute :>> digest = "sha256:41bb7c0e5d92";
257
+ attribute :>> baseImage = "ros:jazzy-ros-core";
258
+ attribute :>> rosDistribution = "jazzy";
259
+ attribute :>> workspaceOverlay = "/opt/safety_ws";
260
+ attribute :>> integrityProtection = "image signature + SBOM attestation";
261
+ }
262
+ connection : BuildsInto connect module ::> swPerception to deploymentUnit ::> imageRuntime;
263
+ connection : BuildsInto connect module ::> swNavigation to deploymentUnit ::> imageRuntime;
264
+ connection : BuildsInto connect module ::> swSafety to deploymentUnit ::> imageSafety;
265
+
266
+ part nodeComputeUnit : ProcessingNode {
267
+ attribute :>> id = "RMR-HW-001"; attribute :>> name = "OnboardComputeUnit";
268
+ attribute :>> nodeKind = ProcessingNodeKind::SoC;
269
+ attribute :>> processorArchitecture = "arm64, 8 core";
270
+ attribute :>> memoryMB = "16384";
271
+ attribute :>> operatingSystem = "Linux with PREEMPT_RT";
272
+ attribute :>> supportsContainerization = true;
273
+ attribute :>> realTimeCapable = true;
274
+ }
275
+ allocation runtimeImageDeployment : DeploysTo allocate imageRuntime to nodeComputeUnit {
276
+ attribute :>> deploymentKind = DeploymentKind::containerized;
277
+ }
278
+ allocation safetyImageDeployment : DeploysTo allocate imageSafety to nodeComputeUnit {
279
+ attribute :>> deploymentKind = DeploymentKind::containerized;
280
+ }
281
+
282
+ part rosRuntime : RosContainerRuntime {
283
+ attribute :>> id = "RMR-RT-001"; attribute :>> name = "OnboardRosRuntime";
284
+ attribute :>> environmentKind = "container runtime";
285
+ attribute :>> osOrRtos = "Linux with PREEMPT_RT";
286
+ attribute :>> orchestrationPlatform = "systemd-managed compose, no cluster orchestrator";
287
+ attribute :>> runtimeEngine = "containerd";
288
+ attribute :>> rosDistribution = "jazzy";
289
+ attribute :>> rmwImplementation = "rmw_cyclonedds_cpp";
290
+ // Fixed per robot. Two robots sharing a domain would see each other's
291
+ // topics, which is a hazard on a shared network and is visible in no
292
+ // single node.
293
+ attribute :>> rosDomainId = 42;
294
+ }
295
+ connection : ProvidesEnvironment connect node ::> nodeComputeUnit to environment ::> rosRuntime;
296
+ }
@@ -0,0 +1,7 @@
1
+ // unassigned viewpoint.
2
+ //
3
+ // This project does not define its own viewpoint here; it binds the reusable
4
+ // MEMO viewpoint that frames these concerns. The views it governs sit beneath
5
+ // `views/`.
6
+ package memo_examples_ros_mobile_robot_viewpoints_unassigned {
7
+ }
@@ -0,0 +1,13 @@
1
+ package memo_examples_ros_mobile_robot_viewpoints_unassigned_views_ros_mobile_robot_overview {
2
+ private import memo_examples_ros_mobile_robot::*;
3
+ private import memo_viewpoints_definitions::*;
4
+ private import memo_core_enumerations::*;
5
+
6
+ view rosMobileRobotOverview : MemoDiagramView {
7
+ expose memo_examples_ros_mobile_robot::*;
8
+ attribute depth = 2;
9
+ attribute :>> title = "ROS Mobile Robot Overview";
10
+ attribute :>> viewKind = DiagramViewKind::general;
11
+ attribute :>> diagramType = "bdd";
12
+ }
13
+ }
@@ -0,0 +1,28 @@
1
+ // Software Only Medical Device — project identity and method binding.
2
+ //
3
+ // The native entrypoint. The imports name what this project contains and the
4
+ // binding names the methodology it is governed by. No YAML file participates.
5
+ package memo_examples_software_only_medical_device_project {
6
+ private import ScalarValues::*;
7
+
8
+ private import memo_core_enumerations::*;
9
+ private import memo_methodology_core::*;
10
+ private import memo_methodology_profiles::*;
11
+
12
+ // The project's own content, imported so the catalog is one reachable
13
+ // closure from a single entrypoint.
14
+ private import memo_examples_software_only_medical_device_viewpoints_unassigned::*;
15
+ private import memo_examples_software_only_medical_device_viewpoints_unassigned_views_software_only_medical_device_overview::*;
16
+
17
+ part projectBinding : ProjectMethodBinding {
18
+ attribute :>> id = "PMB-MEDICAL-DEVICE-001";
19
+ attribute :>> name = "SoftwareOnlyMedicalDeviceProjectMethodBinding";
20
+ attribute :>> projectName = "Software Only Medical Device";
21
+ ref :>> selectedMethodology = mdDefaultDefinition;
22
+ attribute :>> scopeMode = ScopeModeKind::explicit;
23
+ // Composition happens here, not by chaining methodologies. The cloud
24
+ // extension supplies CloudService, which is what the grading service
25
+ // is.
26
+ attribute :>> includedModule = "memo_extension_cloud";
27
+ }
28
+ }
@@ -4,6 +4,7 @@
4
4
  // off-the-shelf infrastructure the manufacturer does not control.
5
5
  package memo_examples_software_only_medical_device {
6
6
  private import ScalarValues::*;
7
+ private import ModelingMetadata::*;
7
8
 
8
9
  private import memo_core_enumerations::*;
9
10
  private import memo_core_relationships::*;
@@ -11,6 +12,11 @@ package memo_examples_software_only_medical_device {
11
12
  private import memo_architecture_implementation_software_runtime::*;
12
13
  private import memo_architecture_realization_deployment::*;
13
14
  private import memo_architecture_realization_physical::*;
15
+ // `serviceContract` was an optional attribute on SoftwareComponent, set
16
+ // only when runtimeKind = service. It moved to `CloudService` in the cloud
17
+ // extension, so the project that uses it includes the extension — which is
18
+ // the mechanism working as designed rather than a cost of the move.
19
+ private import memo_extension_cloud::*;
14
20
 
15
21
  part swScreeningApp : SoftwareSystem {
16
22
  attribute :>> id = "SMD-SW-001"; attribute :>> name = "ScreeningApplication";
@@ -33,16 +39,16 @@ package memo_examples_software_only_medical_device {
33
39
  attribute :>> responsibility = "Wraps the grading model behind the service API; owns input validation and result structuring.";
34
40
  attribute :>> safetyClass = SafetyClassKind::B;
35
41
  }
36
- connection : ModuleUses connect usingModule ::> swGradingModule to usedModule ::> soupInference;
42
+ dependency swGradingModule to soupInference;
37
43
 
38
- part svcGrading : SoftwareComponent {
39
- attribute :>> runtimeKind = RuntimeKind::service;
44
+ part svcGrading : CloudService {
40
45
  attribute :>> id = "SMD-RT-001"; attribute :>> name = "GradingService";
41
46
  attribute :>> serviceContract = "REST /grade: image in, structured finding out";
47
+ attribute :>> discoveryMechanism = "DNS name behind the cluster ingress";
42
48
  attribute :>> updatePolicy = "blue/green rollout";
43
49
  attribute :>> rollbackPolicy = "previous validated version retained hot";
44
50
  }
45
- connection : Realizes connect realizing ::> svcGrading to realized ::> swGradingModule;
51
+ #refinement dependency svcGrading to swGradingModule;
46
52
 
47
53
  part duContainerImage : DeploymentUnit {
48
54
  attribute :>> id = "SMD-DU-001"; attribute :>> name = "ScreeningServiceImage";
@@ -55,7 +61,7 @@ package memo_examples_software_only_medical_device {
55
61
  attribute :>> supportsContainerization = true;
56
62
  attribute :>> realTimeCapable = false;
57
63
  }
58
- connection : DeploysTo connect deploymentUnit ::> duContainerImage to node ::> nodeCloud {
64
+ allocation duContainerImageDeployment : DeploysTo allocate duContainerImage to nodeCloud {
59
65
  attribute :>> deploymentKind = DeploymentKind::containerized;
60
66
  }
61
67
  connection : HostedBy connect hostAssembly ::> nodeCloud to processingNode ::> svcGrading;
@@ -0,0 +1,9 @@
1
+ // unassigned viewpoint.
2
+ //
3
+ // This project does not define its own viewpoint here; it binds the reusable
4
+ // MEMO viewpoint that frames these concerns. The views it governs sit beneath
5
+ // `views/`.
6
+ package memo_examples_software_only_medical_device_viewpoints_unassigned {
7
+ // The reusable package declaring unassigned could not be resolved during
8
+ // conversion. Import it here so the views beneath this viewpoint resolve.
9
+ }
@@ -1,4 +1,4 @@
1
- package memo_examples_software_only_medical_device_viewpoints {
1
+ package memo_examples_software_only_medical_device_viewpoints_unassigned_views_software_only_medical_device_overview {
2
2
  private import memo_examples_software_only_medical_device::*;
3
3
  private import memo_viewpoints_definitions::*;
4
4
  private import memo_core_enumerations::*;
@@ -0,0 +1,24 @@
1
+ // Surgical Closure Workflow — project identity and method binding.
2
+ //
3
+ // The native entrypoint. The imports name what this project contains and the
4
+ // binding names the methodology it is governed by. No YAML file participates.
5
+ package memo_examples_surgical_closure_workflow_project {
6
+ private import ScalarValues::*;
7
+
8
+ private import memo_core_enumerations::*;
9
+ private import memo_methodology_core::*;
10
+ private import memo_methodology_profiles::*;
11
+
12
+ // The project's own content, imported so the catalog is one reachable
13
+ // closure from a single entrypoint.
14
+ private import memo_examples_surgical_closure_workflow_viewpoints_unassigned::*;
15
+ private import memo_examples_surgical_closure_workflow_viewpoints_unassigned_views_surgical_closure_workflow_overview::*;
16
+
17
+ part projectBinding : ProjectMethodBinding {
18
+ attribute :>> id = "PMB-CLOSURE-WORKFLOW-001";
19
+ attribute :>> name = "SurgicalClosureWorkflowProjectMethodBinding";
20
+ attribute :>> projectName = "Surgical Closure Workflow";
21
+ ref :>> selectedMethodology = mdDefaultDefinition;
22
+ attribute :>> scopeMode = ScopeModeKind::explicit;
23
+ }
24
+ }
@@ -3,8 +3,10 @@
3
3
  // as context → use case → workflow → scenarios → scenario-owned activities.
4
4
  package memo_examples_surgical_closure_workflow {
5
5
  private import ScalarValues::*;
6
+ private import ModelingMetadata::*;
6
7
 
7
8
  private import memo_core_enumerations::*;
9
+ private import memo_core_relationships::*;
8
10
  private import memo_architecture_operational_context_actors::*;
9
11
  private import memo_architecture_operational_context_use_context::*;
10
12
  private import memo_assurance_requirements_needs::*;
@@ -38,7 +40,7 @@ package memo_examples_surgical_closure_workflow {
38
40
  }
39
41
  requirement needControlledGastricResection : Need {
40
42
  attribute :>> needKind = NeedKind::clinicalUser;
41
- attribute :>> needId = "LSG-N-001";
43
+ attribute :>> id = "LSG-N-001";
42
44
  attribute :>> statement = "The surgical team needs to perform gastric resection with controlled anatomy, haemostasis, and a checked staple line.";
43
45
  }
44
46
  use case ucPerformSleeveGastrectomy : UseCase {
@@ -52,37 +54,39 @@ package memo_examples_surgical_closure_workflow {
52
54
  ref :>> primaryUser = bariatricSurgeon;
53
55
  ref :>> supportingActors = (scrubNurse, anesthetist);
54
56
  ref :>> useContext = bariatricOr;
57
+ subject supportingSystem;
58
+ actor bariatricSurgeonInitiator = bariatricSurgeon;
55
59
  }
56
60
  connection : Motivates connect motivatingNeed ::> needControlledGastricResection to motivatedUseCase ::> ucPerformSleeveGastrectomy;
57
- connection : Initiates connect initiatingUser ::> bariatricSurgeon to initiatedUseCase ::> ucPerformSleeveGastrectomy;
58
61
 
59
62
  // ── Procedure workflow ──────────────────────────────────────
60
63
  action actTimeOutAndPosition : OperationalActivity { attribute :>> id = "LSG-ACT-001"; attribute :>> name = "ConfirmTimeOutAndPosition"; }
61
64
  action actEstablishAccess : OperationalActivity { attribute :>> id = "LSG-ACT-002"; attribute :>> name = "EstablishLaparoscopicAccess"; }
62
65
  action actMobilizeStomach : OperationalActivity { attribute :>> id = "LSG-ACT-003"; attribute :>> name = "MobilizeStomach"; }
63
- action actSizeAndCreateSleeve : OperationalActivity { attribute :>> id = "LSG-ACT-004"; attribute :>> name = "SizeAndCreateSleeve"; attribute :>> criticality = CriticalityKind::high; }
66
+ action actSizeAndCreateSleeve : OperationalActivity {
67
+ attribute :>> id = "LSG-ACT-004"; attribute :>> name = "SizeAndCreateSleeve"; attribute :>> criticality = CriticalityKind::high;
68
+
69
+ action taskCreateStapleLine : UserTask {
70
+ attribute :>> criticality = CriticalityKind::high;
71
+ attribute :>> id = "LSG-TASK-001";
72
+ attribute :>> name = "CreateAndInspectStapleLine";
73
+ attribute :>> taskGoal = "create the planned sleeve and identify bleeding or integrity concerns before completion";
74
+ attribute :>> potentialHarm = "bleeding or staple-line complication not recognized before handover";
75
+ attribute :>> severityIfFailed = SeverityKind::serious;
76
+
77
+ action stConfirmAnatomy : TaskStep { attribute :>> id = "LSG-ST-001"; attribute :>> name = "ConfirmAnatomy"; }
78
+ action stCreateStapleLine : TaskStep { attribute :>> id = "LSG-ST-002"; attribute :>> name = "CreateStapleLine"; }
79
+ action stInspectBleeding : TaskStep { attribute :>> id = "LSG-ST-003"; attribute :>> name = "InspectForBleeding"; }
80
+ action stAssessIntegrity : TaskStep { attribute :>> id = "LSG-ST-004"; attribute :>> name = "AssessStapleLineIntegrity"; }
81
+ first stConfirmAnatomy then stCreateStapleLine;
82
+ first stCreateStapleLine then stInspectBleeding;
83
+ first stInspectBleeding then stAssessIntegrity;
84
+ }
85
+ }
64
86
  action actAssessStapleLine : OperationalActivity { attribute :>> id = "LSG-ACT-005"; attribute :>> name = "AssessStapleLine"; attribute :>> criticality = CriticalityKind::high; }
65
87
  action actExtractSpecimenAndClose : OperationalActivity { attribute :>> id = "LSG-ACT-006"; attribute :>> name = "ExtractSpecimenAndClosePorts"; }
66
88
  action actHandover : OperationalActivity { attribute :>> id = "LSG-ACT-007"; attribute :>> name = "CompletePostoperativeHandover"; }
67
89
 
68
- action taskCreateStapleLine : UserTask {
69
- attribute :>> criticality = CriticalityKind::high;
70
- attribute :>> id = "LSG-TASK-001";
71
- attribute :>> name = "CreateAndInspectStapleLine";
72
- attribute :>> taskGoal = "create the planned sleeve and identify bleeding or integrity concerns before completion";
73
- attribute :>> potentialHarm = "bleeding or staple-line complication not recognized before handover";
74
- attribute :>> severityIfFailed = SeverityKind::serious;
75
- }
76
- action stConfirmAnatomy : TaskStep { attribute :>> id = "LSG-ST-001"; attribute :>> name = "ConfirmAnatomy"; attribute :>> stepOrder = 1; }
77
- action stCreateStapleLine : TaskStep { attribute :>> id = "LSG-ST-002"; attribute :>> name = "CreateStapleLine"; attribute :>> stepOrder = 2; }
78
- action stInspectBleeding : TaskStep { attribute :>> id = "LSG-ST-003"; attribute :>> name = "InspectForBleeding"; attribute :>> stepOrder = 3; }
79
- action stAssessIntegrity : TaskStep { attribute :>> id = "LSG-ST-004"; attribute :>> name = "AssessStapleLineIntegrity"; attribute :>> stepOrder = 4; }
80
- connection : Composes connect parent ::> actSizeAndCreateSleeve to child ::> taskCreateStapleLine;
81
- connection : Composes connect parent ::> taskCreateStapleLine to child ::> stConfirmAnatomy;
82
- connection : Composes connect parent ::> taskCreateStapleLine to child ::> stCreateStapleLine;
83
- connection : Composes connect parent ::> taskCreateStapleLine to child ::> stInspectBleeding;
84
- connection : Composes connect parent ::> taskCreateStapleLine to child ::> stAssessIntegrity;
85
-
86
90
  action wfSleeveGastrectomy : ClinicalProcedureWorkflow {
87
91
  attribute :>> id = "LSG-WF-001";
88
92
  attribute :>> name = "LaparoscopicSleeveGastrectomyWorkflow";
@@ -90,51 +94,43 @@ package memo_examples_surgical_closure_workflow {
90
94
  attribute :>> entryCondition = "patient prepared; time-out ready";
91
95
  attribute :>> completionCondition = "staple line assessed; postoperative handover complete";
92
96
  attribute :>> clinicalObjective = "create a gastric sleeve after controlled mobilisation and staple-line assessment";
97
+
98
+ action wsTimeOut : WorkflowStep { ref :>> performedActivity = actTimeOutAndPosition; }
99
+ action wsAccess : WorkflowStep { ref :>> performedActivity = actEstablishAccess; }
100
+ action wsMobilize : WorkflowStep { ref :>> performedActivity = actMobilizeStomach; }
101
+ action wsSleeve : WorkflowStep { ref :>> performedActivity = actSizeAndCreateSleeve; }
102
+ action wsAssess : WorkflowStep { ref :>> performedActivity = actAssessStapleLine; }
103
+ action wsClose : WorkflowStep { ref :>> performedActivity = actExtractSpecimenAndClose; }
104
+ action wsHandover : WorkflowStep { ref :>> performedActivity = actHandover; }
105
+ first wsTimeOut then wsAccess;
106
+ first wsAccess then wsMobilize;
107
+ first wsMobilize then wsSleeve;
108
+ first wsSleeve then wsAssess;
109
+ first wsAssess then wsClose;
110
+ first wsClose then wsHandover;
93
111
  }
94
- action wsTimeOut : WorkflowStep { attribute :>> stepOrder = 1; ref :>> performedActivity = actTimeOutAndPosition; }
95
- action wsAccess : WorkflowStep { attribute :>> stepOrder = 2; ref :>> performedActivity = actEstablishAccess; }
96
- action wsMobilize : WorkflowStep { attribute :>> stepOrder = 3; ref :>> performedActivity = actMobilizeStomach; }
97
- action wsSleeve : WorkflowStep { attribute :>> stepOrder = 4; ref :>> performedActivity = actSizeAndCreateSleeve; }
98
- action wsAssess : WorkflowStep { attribute :>> stepOrder = 5; ref :>> performedActivity = actAssessStapleLine; }
99
- action wsClose : WorkflowStep { attribute :>> stepOrder = 6; ref :>> performedActivity = actExtractSpecimenAndClose; }
100
- action wsHandover : WorkflowStep { attribute :>> stepOrder = 7; ref :>> performedActivity = actHandover; }
101
- connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsTimeOut;
102
- connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsAccess;
103
- connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsMobilize;
104
- connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsSleeve;
105
- connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsAssess;
106
- connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsClose;
107
- connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsHandover;
108
- connection : StepPrecedes connect predecessor ::> wsTimeOut to successor ::> wsAccess;
109
- connection : StepPrecedes connect predecessor ::> wsAccess to successor ::> wsMobilize;
110
- connection : StepPrecedes connect predecessor ::> wsMobilize to successor ::> wsSleeve;
111
- connection : StepPrecedes connect predecessor ::> wsSleeve to successor ::> wsAssess;
112
- connection : StepPrecedes connect predecessor ::> wsAssess to successor ::> wsClose;
113
- connection : StepPrecedes connect predecessor ::> wsClose to successor ::> wsHandover;
114
112
  connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfSleeveGastrectomy to supported ::> ucPerformSleeveGastrectomy; }
115
113
 
116
114
  // ── Scenario paths, each with its own activity/action flow ──
117
- action oaCompleteSleeveProcedure : OperationalActivity {
118
- attribute :>> name = "CompleteNominalSleeveProcedure";
119
- action prepare; action createSleeve; action assess; action handover;
120
- first start then prepare; first prepare then createSleeve; first createSleeve then assess; first assess then handover; first handover then done;
121
- }
122
- action oaControlStapleLineBleeding : OperationalActivity {
123
- attribute :>> name = "ControlStapleLineBleeding";
124
- action recognizeBleeding; action controlBleeding; action reassessStapleLine; action escalateIfNeeded;
125
- first start then recognizeBleeding; first recognizeBleeding then controlBleeding; first controlBleeding then reassessStapleLine; first reassessStapleLine then escalateIfNeeded; first escalateIfNeeded then done;
126
- }
127
- part scNominalSleeveProcedure : OperativeScenario {
115
+ action scNominalSleeveProcedure : MemoScenario {
128
116
  attribute :>> id = "LSG-SC-001"; attribute :>> name = "NominalSleeveGastrectomy";
117
+ attribute :>> scenarioKind = ScenarioKind::operative;
129
118
  attribute :>> variantKind = ScenarioVariantKind::nominal;
130
119
  attribute :>> operationalCondition = OperationalConditionKind::normal;
131
120
  attribute :>> pathSummary = "Time-out, access, mobilisation, sleeve creation, staple-line assessment, closure, and handover complete without rework.";
132
121
  ref :>> parentWorkflow = wfSleeveGastrectomy;
133
122
  ref :>> parentUseCase = ucPerformSleeveGastrectomy;
134
123
  ref :>> activities = oaCompleteSleeveProcedure;
124
+
125
+ action oaCompleteSleeveProcedure : OperationalActivity {
126
+ attribute :>> name = "CompleteNominalSleeveProcedure";
127
+ action prepare; action createSleeve; action assess; action handover;
128
+ first start then prepare; first prepare then createSleeve; first createSleeve then assess; first assess then handover; first handover then done;
129
+ }
135
130
  }
136
- part scStapleLineBleeding : OperativeScenario {
131
+ action scStapleLineBleeding : MemoScenario {
137
132
  attribute :>> id = "LSG-SC-002"; attribute :>> name = "StapleLineBleedingRecovery";
133
+ attribute :>> scenarioKind = ScenarioKind::operative;
138
134
  attribute :>> variantKind = ScenarioVariantKind::recovery;
139
135
  attribute :>> operationalCondition = OperationalConditionKind::degraded;
140
136
  attribute :>> variationPoint = "bleeding observed during staple-line assessment";
@@ -143,9 +139,13 @@ package memo_examples_surgical_closure_workflow {
143
139
  ref :>> parentWorkflow = wfSleeveGastrectomy;
144
140
  ref :>> parentUseCase = ucPerformSleeveGastrectomy;
145
141
  ref :>> activities = oaControlStapleLineBleeding;
142
+
143
+ action oaControlStapleLineBleeding : OperationalActivity {
144
+ attribute :>> name = "ControlStapleLineBleeding";
145
+ action recognizeBleeding; action controlBleeding; action reassessStapleLine; action escalateIfNeeded;
146
+ first start then recognizeBleeding; first recognizeBleeding then controlBleeding; first controlBleeding then reassessStapleLine; first reassessStapleLine then escalateIfNeeded; first escalateIfNeeded then done;
147
+ }
146
148
  }
147
- connection : Realizes connect realizing ::> scNominalSleeveProcedure to realized ::> ucPerformSleeveGastrectomy;
148
- connection : Realizes connect realizing ::> scStapleLineBleeding to realized ::> ucPerformSleeveGastrectomy;
149
- connection : Composes connect parent ::> scNominalSleeveProcedure to child ::> oaCompleteSleeveProcedure;
150
- connection : Composes connect parent ::> scStapleLineBleeding to child ::> oaControlStapleLineBleeding;
149
+ #refinement dependency scNominalSleeveProcedure to ucPerformSleeveGastrectomy;
150
+ #refinement dependency scStapleLineBleeding to ucPerformSleeveGastrectomy;
151
151
  }
@@ -0,0 +1,9 @@
1
+ // unassigned viewpoint.
2
+ //
3
+ // This project does not define its own viewpoint here; it binds the reusable
4
+ // MEMO viewpoint that frames these concerns. The views it governs sit beneath
5
+ // `views/`.
6
+ package memo_examples_surgical_closure_workflow_viewpoints_unassigned {
7
+ // The reusable package declaring unassigned could not be resolved during
8
+ // conversion. Import it here so the views beneath this viewpoint resolve.
9
+ }
@@ -1,4 +1,4 @@
1
- package memo_examples_surgical_closure_workflow_viewpoints {
1
+ package memo_examples_surgical_closure_workflow_viewpoints_unassigned_views_surgical_closure_workflow_overview {
2
2
  private import memo_examples_surgical_closure_workflow::*;
3
3
  private import memo_viewpoints_definitions::*;
4
4
  private import memo_core_enumerations::*;