@memoarchitect/ontology 0.6.4 → 0.7.0

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 (327) hide show
  1. package/README.md +1 -1
  2. package/examples/connected-patient-monitor/model/catalog/project.sysml +24 -0
  3. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  4. package/examples/connected-patient-monitor/model/{viewpoints → catalog/viewpoints/unassigned/views}/connected_patient_monitor_overview.sysml +1 -1
  5. package/examples/embedded-infusion-pump/model/catalog/project.sysml +24 -0
  6. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  7. package/examples/embedded-infusion-pump/model/{viewpoints → catalog/viewpoints/unassigned/views}/embedded_infusion_pump_overview.sysml +1 -1
  8. package/examples/extensions/clinical/memo.package.yaml +18 -9
  9. package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +10 -2
  10. package/examples/extensions/template/memo.package.yaml +17 -9
  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/analysis/Samples/01-model-overview.ipynb +148 -0
  15. package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +301 -0
  16. package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +229 -0
  17. package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +200 -0
  18. package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +188 -0
  19. package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +173 -0
  20. package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +180 -0
  21. package/examples/gpca-pump/analysis/Samples/README.md +37 -0
  22. package/examples/gpca-pump/gpca-pump.kpar +0 -0
  23. package/examples/gpca-pump/methodology/gpca_methodology.sysml +7 -8
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +89 -11
  25. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
  26. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +22 -12
  27. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +2 -2
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +8 -2
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +5 -5
  30. package/examples/gpca-pump/model/catalog/gpca_context.sysml +3 -8
  31. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
  32. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
  33. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +41 -11
  34. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +19 -8
  35. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +2 -2
  36. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1 -1
  37. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +10 -1
  38. package/examples/gpca-pump/model/catalog/gpca_system.sysml +34 -30
  39. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +59 -31
  40. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +1 -1
  41. package/examples/gpca-pump/model/catalog/project.sysml +21 -0
  42. package/examples/gpca-pump/model/catalog/viewpoints/context/viewpoint.sysml +8 -0
  43. package/examples/gpca-pump/model/{views → catalog/viewpoints/context/views}/context_system_context_view.sysml +3 -3
  44. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/viewpoint.sysml +8 -0
  45. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/cybersecurity_cybersecurity_view.sysml +3 -3
  46. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_cyber_assessment_view.sysml +4 -4
  47. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_threat_model_view.sysml +4 -4
  48. package/examples/gpca-pump/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  49. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_allocation_view.sysml +2 -2
  50. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_browser_view.sysml +3 -3
  51. package/examples/gpca-pump/model/catalog/viewpoints/logical/viewpoint.sysml +8 -0
  52. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/behavior_action_flow_view.sysml +3 -3
  53. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/document_architecture_description_view.sysml +7 -7
  54. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_device_interconnect_view.sysml +5 -5
  55. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_logical_architecture_view.sysml +3 -3
  56. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_mode_state_view.sysml +3 -3
  57. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_system_decomposition_view.sysml +3 -3
  58. package/examples/gpca-pump/model/catalog/viewpoints/operational/viewpoint.sysml +8 -0
  59. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_scenario_sequence_view.sysml +2 -2
  60. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +3 -3
  61. package/examples/gpca-pump/model/catalog/viewpoints/physical/viewpoint.sysml +8 -0
  62. package/examples/gpca-pump/model/{views → catalog/viewpoints/physical/views}/physical_physical_bom_view.sysml +2 -2
  63. package/examples/gpca-pump/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  64. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/document_dhf_index_view.sysml +6 -6
  65. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/requirements_requirements_trace_view.sysml +2 -2
  66. package/examples/gpca-pump/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  67. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_hazard_analysis_view.sysml +3 -3
  68. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +3 -3
  69. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +2 -2
  70. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_risk_chain_view.sysml +3 -3
  71. package/examples/gpca-pump/model/catalog/viewpoints/software/viewpoint.sysml +8 -0
  72. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/document_sdd_view.sysml +3 -3
  73. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +3 -3
  74. package/examples/gpca-pump/model/catalog/viewpoints/usability/viewpoint.sysml +8 -0
  75. package/examples/gpca-pump/model/{views → catalog/viewpoints/usability/views}/document_usability_view.sysml +4 -4
  76. package/examples/gpca-pump/model/catalog/viewpoints/verification/viewpoint.sysml +8 -0
  77. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/document_vv_view.sysml +3 -3
  78. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +2 -2
  79. package/examples/ivd-laboratory-system/model/catalog/project.sysml +24 -0
  80. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  81. package/examples/ivd-laboratory-system/model/{viewpoints → catalog/viewpoints/unassigned/views}/ivd_laboratory_system_overview.sysml +1 -1
  82. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +1 -0
  83. package/examples/manual-surgical-instrument/model/catalog/project.sysml +24 -0
  84. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  85. package/examples/manual-surgical-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/manual_surgical_instrument_overview.sysml +1 -1
  86. package/examples/multidimensional-layers/model/catalog/project.sysml +24 -0
  87. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  88. package/examples/multidimensional-layers/model/{viewpoints → catalog/viewpoints/unassigned/views}/multidimensional_layers_overview.sysml +1 -1
  89. package/examples/nested-architecture-dsm/README.md +49 -0
  90. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +174 -0
  91. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +183 -0
  92. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +53 -0
  93. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +89 -0
  94. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +90 -0
  95. package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
  96. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +49 -0
  97. package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
  98. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -6
  99. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  100. package/examples/reusable-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/reusable_instrument_overview.sysml +1 -1
  101. package/examples/software-only-medical-device/model/catalog/project.sysml +24 -0
  102. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  103. package/examples/software-only-medical-device/model/{viewpoints → catalog/viewpoints/unassigned/views}/software_only_medical_device_overview.sysml +1 -1
  104. package/examples/surgical-closure-workflow/model/catalog/project.sysml +24 -0
  105. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -19
  106. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  107. package/examples/surgical-closure-workflow/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_closure_workflow_overview.sysml +1 -1
  108. package/examples/surgical-robot/model/catalog/project.sysml +24 -0
  109. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +5 -3
  110. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  111. package/examples/surgical-robot/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_robot_overview.sysml +1 -1
  112. package/examples/sysml-diagram-samples/README.md +7 -0
  113. package/examples/sysml-diagram-samples/dhf/documents/DOC-HAR-001.md +11 -0
  114. package/examples/sysml-diagram-samples/memo.package.yaml +11 -5
  115. package/examples/sysml-diagram-samples/model/catalog/project.sysml +33 -0
  116. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  117. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/action_flow_view.sysml +18 -10
  118. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +4 -2
  119. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
  120. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/functional_flow_view.sysml +23 -20
  121. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/interconnection_view.sysml +17 -14
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
  123. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/operational_behaviour_view.sysml +23 -20
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +13 -0
  125. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/requirements_view.sysml +3 -1
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +51 -0
  127. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/state_transition_view.sysml +3 -1
  128. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/tree_view.sysml +3 -1
  129. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +3 -1
  130. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +93 -0
  131. package/examples/temperature-alarm/model/catalog/project.sysml +24 -0
  132. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +2 -1
  133. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  134. package/examples/temperature-alarm/model/{viewpoints → catalog/viewpoints/unassigned/views}/temperature_alarm_overview.sysml +1 -1
  135. package/examples/ui-screen-regions/README.md +117 -0
  136. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +60 -0
  137. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +189 -0
  138. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +61 -0
  139. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png +0 -0
  140. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png +0 -0
  141. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png +0 -0
  142. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +51 -0
  143. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +27 -0
  144. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +27 -0
  145. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +59 -0
  146. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +25 -0
  147. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +178 -0
  148. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +93 -0
  149. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +60 -0
  150. package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
  151. package/examples/ui-screen-regions/model/catalog/traces.sysml +276 -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/memo.manifest.yaml +2 -0
  163. package/methodologies/default/memo.package.yaml +19 -9
  164. package/methodologies/gpca/memo.package.yaml +18 -9
  165. package/ontology/memo.package.yaml +23 -8
  166. package/package.json +1 -3
  167. package/profile/memo.package.yaml +18 -9
  168. package/src/architecture/decisions/memo_decisions.sysml +7 -0
  169. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  170. package/src/architecture/functional/functions/memo_functions.sysml +5 -12
  171. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +1 -3
  172. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +18 -5
  173. package/src/architecture/implementation/ui/memo_ui.sysml +210 -27
  174. package/src/architecture/logical/interfaces/memo_interfaces.sysml +1 -2
  175. package/src/architecture/logical/structure/memo_logical_structure.sysml +71 -15
  176. package/src/architecture/operational/activities/memo_activities.sysml +0 -1
  177. package/src/architecture/operational/scenarios/memo_scenarios.sysml +2 -2
  178. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -6
  179. package/src/{compliance/change/memo_change.sysml → artifacts/configuration_management/memo_configuration_management.sysml} +5 -3
  180. package/src/artifacts/core/memo_controlled_artifacts.sysml +33 -0
  181. package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
  182. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +1 -1
  183. package/src/assurance/human_factors/memo_human_factors.sysml +1 -1
  184. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +11 -0
  185. package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
  186. package/src/assurance/verification_validation/memo_assurance.sysml +1 -1
  187. package/src/core/annotations/memo_annotations.sysml +77 -0
  188. package/src/core/common/memo_common.sysml +20 -3
  189. package/src/core/consistency_rules/consistency_rules.sysml +7 -0
  190. package/src/core/dimensions/dimensions.sysml +5 -1
  191. package/src/core/enumerations/memo_enumerations.sysml +41 -6
  192. package/src/core/methodology_scope/methodology_scope.sysml +7 -15
  193. package/src/core/relationships/memo_relationships.sysml +4 -2
  194. package/src/memo_namespaces.sysml +97 -67
  195. package/src/methodology/core/memo_core.sysml +45 -2
  196. package/src/methodology/profiles/memo_profiles.sysml +30 -40
  197. package/src/methodology/workflow/memo_workflow.sysml +7 -2
  198. package/src/rules/closure/closure_rules.sysml +104 -31
  199. package/src/rules/coverage/coverage_rules.sysml +4 -256
  200. package/src/rules/crosslayer/cross_layer_rules.sysml +6 -15
  201. package/src/rules/lifecycle/lifecycle_rules.sysml +4 -39
  202. package/src/rules/ontology/ontology_invariants.sysml +38 -68
  203. package/src/rules/quantitative/quantitative_rules.sysml +8 -8
  204. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +7 -0
  205. package/src/viewpoints/clinical/clinical_viewpoint.sysml +3 -1
  206. package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
  207. package/src/viewpoints/context/context_viewpoint.sysml +3 -1
  208. package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
  209. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +3 -1
  210. package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view → views/cybersecurity_assessment_view}/cybersecurity_assessment_view.sysml +2 -2
  211. package/src/viewpoints/cybersecurity/{threat_model_view → views/threat_model_view}/threat_model_view.sysml +2 -2
  212. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -0
  213. package/src/viewpoints/functional/functional_viewpoint.sysml +3 -1
  214. package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +2 -2
  215. package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +2 -2
  216. package/src/viewpoints/logical/logical_viewpoint.sysml +3 -1
  217. package/src/viewpoints/logical/{logical_architecture_view → views/logical_architecture_view}/logical_architecture_view.sysml +2 -2
  218. package/src/viewpoints/operational/operational_viewpoint.sysml +3 -1
  219. package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +2 -2
  220. package/src/viewpoints/physical/physical_viewpoint.sysml +3 -1
  221. package/src/viewpoints/physical/{network_topology_view → views/network_topology_view}/network_topology_view.sysml +2 -2
  222. package/src/viewpoints/physical/{physical_bom_view → views/physical_bom_view}/physical_bom_view.sysml +2 -2
  223. package/src/viewpoints/rendering/memo_rendering.sysml +354 -0
  224. package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -1
  225. package/src/viewpoints/requirements/{requirements_traceability_view → views/requirements_traceability_view}/requirements_traceability_view.sysml +2 -2
  226. package/src/viewpoints/risk/risk_viewpoint.sysml +3 -1
  227. package/src/viewpoints/risk/{risk_chain_view → views/risk_chain_view}/risk_chain_view.sysml +2 -2
  228. package/src/viewpoints/software/software_viewpoint.sysml +3 -1
  229. package/src/viewpoints/software/{software_architecture_view → views/software_architecture_view}/software_architecture_view.sysml +2 -2
  230. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +28 -0
  231. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +23 -0
  232. package/src/viewpoints/usability/usability_viewpoint.sysml +3 -1
  233. package/src/viewpoints/usability/{usability_engineering_view → views/usability_engineering_view}/usability_engineering_view.sysml +2 -2
  234. package/src/viewpoints/verification/verification_viewpoint.sysml +3 -1
  235. package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +2 -2
  236. package/templates/connected-device/memo.package.yaml +11 -5
  237. package/templates/connected-device/model/catalog/project.sysml +28 -0
  238. package/templates/connected-device/syside.toml +1 -1
  239. package/templates/default/memo.package.yaml +11 -5
  240. package/templates/default/model/catalog/project.sysml +28 -0
  241. package/templates/default/syside.toml +1 -1
  242. package/templates/infusion-pump/memo.package.yaml +11 -5
  243. package/templates/infusion-pump/model/catalog/project.sysml +28 -0
  244. package/templates/infusion-pump/syside.toml +1 -1
  245. package/templates/monitoring-device/memo.package.yaml +11 -5
  246. package/templates/monitoring-device/model/catalog/project.sysml +28 -0
  247. package/templates/monitoring-device/syside.toml +1 -1
  248. package/templates/samd/memo.package.yaml +11 -5
  249. package/templates/samd/model/catalog/project.sysml +28 -0
  250. package/templates/samd/syside.toml +1 -1
  251. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +0 -3
  252. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +0 -3
  253. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +0 -3
  254. package/examples/gpca-pump/memo.config.yaml +0 -9
  255. package/examples/gpca-pump/methodology/gpca_scope.sysml +0 -25
  256. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +0 -3
  257. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +0 -3
  258. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +0 -4
  259. package/examples/reusable-instrument/model/reusable_instrument.sysml +0 -4
  260. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +0 -4
  261. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +0 -4
  262. package/examples/surgical-robot/model/surgical_robot.sysml +0 -4
  263. package/examples/temperature-alarm/model/temperature_alarm.sysml +0 -4
  264. package/ontology/memo.rendering.yaml +0 -84
  265. package/src/compliance/artifacts/memo_artifacts.sysml +0 -12
  266. package/src/compliance/document_views/memo_document_views.sysml +0 -7
  267. package/src/compliance/iso14971/risk_management_file.sysml +0 -16
  268. package/src/compliance/postmarket/memo_postmarket.sysml +0 -16
  269. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
  270. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +0 -0
  271. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +0 -0
  272. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +0 -0
  273. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +0 -0
  274. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +0 -0
  275. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +0 -0
  276. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +0 -0
  277. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +0 -0
  278. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +0 -0
  279. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +0 -0
  280. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +0 -0
  281. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +0 -0
  282. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +0 -0
  283. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +0 -0
  284. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.md +0 -0
  285. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/change-control.md +0 -0
  286. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/detailed-design.md +0 -0
  287. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +0 -0
  288. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +0 -0
  289. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +0 -0
  290. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +0 -0
  291. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +0 -0
  292. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/srs.md +0 -0
  293. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +0 -0
  294. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.md +0 -0
  295. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/formative-eval.md +0 -0
  296. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/summative-eval.md +0 -0
  297. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/task-analysis.md +0 -0
  298. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.md +0 -0
  299. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ui-spec.md +0 -0
  300. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/urra.md +0 -0
  301. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/use-spec.md +0 -0
  302. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fmea.md +0 -0
  303. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fta.md +0 -0
  304. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/har.md +0 -0
  305. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-benefit.md +0 -0
  306. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-matrix.md +0 -0
  307. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmp.md +0 -0
  308. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmr.md +0 -0
  309. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/approval-block.md +0 -0
  310. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/document-control-header.md +0 -0
  311. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/references-section.md +0 -0
  312. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/revision-history-table.md +0 -0
  313. /package/templates/connected-device/{src → model/catalog}/architecture/system.sysml +0 -0
  314. /package/templates/connected-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  315. /package/templates/connected-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  316. /package/templates/default/{src → model/catalog}/architecture/system.sysml +0 -0
  317. /package/templates/default/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  318. /package/templates/default/{src → model/catalog}/assurance/requirements.sysml +0 -0
  319. /package/templates/infusion-pump/{src → model/catalog}/architecture/system.sysml +0 -0
  320. /package/templates/infusion-pump/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  321. /package/templates/infusion-pump/{src → model/catalog}/assurance/requirements.sysml +0 -0
  322. /package/templates/monitoring-device/{src → model/catalog}/architecture/system.sysml +0 -0
  323. /package/templates/monitoring-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  324. /package/templates/monitoring-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  325. /package/templates/samd/{src → model/catalog}/architecture/system.sysml +0 -0
  326. /package/templates/samd/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  327. /package/templates/samd/{src → model/catalog}/assurance/requirements.sysml +0 -0
@@ -0,0 +1,183 @@
1
+ // Logical structure — the column axis of the DSM.
2
+ //
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.
7
+ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
8
+ private import ScalarValues::*;
9
+
10
+ private import memo_core_enumerations::*;
11
+ private import memo_core_relationships::*;
12
+ private import memo_architecture_logical_structure::*;
13
+
14
+ // ── Level 0: the system ──────────────────────────────────────
15
+ part sysTherapyDelivery : System {
16
+ attribute :>> id = "NDS-SYS-001"; attribute :>> name = "TherapyDeliverySystem";
17
+ attribute :>> componentRole = ComponentRoleKind::generic;
18
+ attribute :>> systemType = SystemTypeKind::logical;
19
+ attribute :>> systemBoundaryDescription = "Everything inside the pump enclosure, including its power path and user interface.";
20
+ attribute :>> responsibility = "Deliver a prescribed infusion safely and report what it delivered.";
21
+ }
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
+ }
48
+
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;
53
+
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;
66
+
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;
91
+
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;
110
+
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;
129
+
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";
150
+ }
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
+ }
@@ -0,0 +1,53 @@
1
+ // Stakeholder needs — the outermost row of a full trace chain.
2
+ //
3
+ // Need → Requirement → Function → VerificationCase is the chain the
4
+ // traceability view is meant to walk one hop at a time.
5
+ package memo_examples_nested_architecture_dsm_assurance_requirements_needs {
6
+ private import ScalarValues::*;
7
+
8
+ private import memo_core_enumerations::*;
9
+ private import memo_core_relationships::*;
10
+ private import memo_assurance_requirements_needs::*;
11
+ private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
12
+
13
+ requirement needAccurateTherapy : Need {
14
+ attribute :>> id = "NDS-NEED-001"; attribute :>> name = "AccurateTherapyDelivery";
15
+ attribute :>> needKind = NeedKind::'stakeholder';
16
+ attribute :>> statement = "Clinicians need the delivered dose to match the prescription closely enough to be clinically safe.";
17
+ attribute :>> priority = "high";
18
+ }
19
+ requirement needProtectionFromHarm : Need {
20
+ attribute :>> id = "NDS-NEED-002"; attribute :>> name = "ProtectionFromDeliveryFaults";
21
+ attribute :>> needKind = NeedKind::'stakeholder';
22
+ attribute :>> statement = "Patients need delivery to stop before a line fault or air bolus reaches them.";
23
+ attribute :>> priority = "high";
24
+ }
25
+ requirement needUninterruptedTherapy : Need {
26
+ attribute :>> id = "NDS-NEED-003"; attribute :>> name = "UninterruptedTherapy";
27
+ attribute :>> needKind = NeedKind::operational;
28
+ attribute :>> statement = "Wards need therapy to continue through transport and mains interruptions.";
29
+ attribute :>> priority = "medium";
30
+ attribute :>> operationalContextReference = "intra-hospital transport, up to four hours off mains";
31
+ }
32
+ requirement needLegibleStatus : Need {
33
+ attribute :>> id = "NDS-NEED-004"; attribute :>> name = "LegibleTherapyStatus";
34
+ attribute :>> needKind = NeedKind::'stakeholder';
35
+ attribute :>> statement = "Clinicians need to read therapy state and alarms correctly from the bedside.";
36
+ attribute :>> priority = "high";
37
+ attribute :>> userPopulationReference = "ward nurses, including those wearing corrective lenses";
38
+ }
39
+
40
+ // Need → Requirement.
41
+ connection derAccuracy : DerivesFrom connect sourceDriver ::> needAccurateTherapy to targetRequirement ::> reqDoseAccuracy;
42
+ connection derOcclusion : DerivesFrom connect sourceDriver ::> needProtectionFromHarm to targetRequirement ::> reqOcclusionDetection;
43
+ connection derAirInLine : DerivesFrom connect sourceDriver ::> needProtectionFromHarm to targetRequirement ::> reqAirInLine;
44
+ connection derAlarm : DerivesFrom connect sourceDriver ::> needLegibleStatus to targetRequirement ::> reqAlarmAnnunciation;
45
+ connection derBattery : DerivesFrom connect sourceDriver ::> needUninterruptedTherapy to targetRequirement ::> reqBatteryEndurance;
46
+ connection derConfirmation : DerivesFrom connect sourceDriver ::> needLegibleStatus to targetRequirement ::> reqPrescriptionConfirmation;
47
+ connection derStatus : DerivesFrom connect sourceDriver ::> needLegibleStatus to targetRequirement ::> reqStatusVisibility;
48
+
49
+ // Software requirements derive from the system requirement they refine
50
+ // (IEC 62304), which is a second, requirement-to-requirement trace axis.
51
+ connection derAlarmFromSystem : DerivesFrom connect sourceDriver ::> reqOcclusionDetection to targetRequirement ::> reqAlarmAnnunciation;
52
+ connection derConfirmationFromSystem : DerivesFrom connect sourceDriver ::> reqDoseAccuracy to targetRequirement ::> reqPrescriptionConfirmation;
53
+ }
@@ -0,0 +1,89 @@
1
+ // Requirements — the row axis of the traceability matrix.
2
+ //
3
+ // StatusVisibility is deliberately left untraced, so the coverage figure is
4
+ // under 100% and there is an empty row to author a trace into from the
5
+ // traceability view.
6
+ package memo_examples_nested_architecture_dsm_assurance_requirements {
7
+ private import ScalarValues::*;
8
+
9
+ private import memo_core_enumerations::*;
10
+ private import memo_core_relationships::*;
11
+ private import memo_assurance_requirements::*;
12
+
13
+ requirement reqDoseAccuracy : Requirement {
14
+ attribute :>> id = "NDS-REQ-001"; attribute :>> name = "DoseAccuracy";
15
+ attribute :>> requirementKind = RequirementKind::system;
16
+ attribute :>> statement = "The pump shall deliver the prescribed volume within ±5% over any 60-minute window.";
17
+ attribute :>> notation = RequirementNotationKind::sophist;
18
+ attribute :>> obligation = ObligationKind::shall;
19
+ attribute :>> systemResponse = "deliver the prescribed volume within ±5% over any 60-minute window";
20
+ attribute :>> concernKind = ConcernKind::clinical;
21
+ }
22
+ requirement reqOcclusionDetection : Requirement {
23
+ attribute :>> id = "NDS-REQ-002"; attribute :>> name = "OcclusionDetection";
24
+ attribute :>> requirementKind = RequirementKind::system;
25
+ attribute :>> statement = "When line pressure exceeds the occlusion threshold, the pump shall stop delivery within 2 seconds.";
26
+ attribute :>> notation = RequirementNotationKind::ears;
27
+ attribute :>> earsPattern = EarsPatternKind::eventDriven;
28
+ attribute :>> obligation = ObligationKind::shall;
29
+ attribute :>> conditionClause = "When line pressure exceeds the occlusion threshold";
30
+ attribute :>> systemResponse = "stop delivery within 2 seconds";
31
+ attribute :>> concernKind = ConcernKind::safety;
32
+ }
33
+ requirement reqAirInLine : Requirement {
34
+ attribute :>> id = "NDS-REQ-003"; attribute :>> name = "AirInLineProtection";
35
+ attribute :>> requirementKind = RequirementKind::system;
36
+ attribute :>> statement = "When an air bolus above 0.1 mL is detected, the pump shall stop delivery and raise a high-priority alarm.";
37
+ attribute :>> notation = RequirementNotationKind::ears;
38
+ attribute :>> earsPattern = EarsPatternKind::eventDriven;
39
+ attribute :>> obligation = ObligationKind::shall;
40
+ attribute :>> conditionClause = "When an air bolus above 0.1 mL is detected";
41
+ attribute :>> systemResponse = "stop delivery and raise a high-priority alarm";
42
+ attribute :>> concernKind = ConcernKind::safety;
43
+ }
44
+ requirement reqAlarmAnnunciation : Requirement {
45
+ attribute :>> id = "NDS-REQ-004"; attribute :>> name = "AlarmAnnunciation";
46
+ attribute :>> requirementKind = RequirementKind::software;
47
+ attribute :>> statement = "While any alarm condition is active, the pump shall present its IEC 60601-1-8 signal until the condition clears or is acknowledged.";
48
+ attribute :>> notation = RequirementNotationKind::ears;
49
+ attribute :>> earsPattern = EarsPatternKind::stateDriven;
50
+ attribute :>> obligation = ObligationKind::shall;
51
+ attribute :>> conditionClause = "While any alarm condition is active";
52
+ attribute :>> systemResponse = "present its IEC 60601-1-8 signal until the condition clears or is acknowledged";
53
+ attribute :>> concernKind = ConcernKind::safety;
54
+ attribute :>> safetyClass = SafetyClassKind::C;
55
+ }
56
+ requirement reqBatteryEndurance : Requirement {
57
+ attribute :>> id = "NDS-REQ-005"; attribute :>> name = "BatteryEndurance";
58
+ attribute :>> requirementKind = RequirementKind::system;
59
+ attribute :>> statement = "On loss of mains power, the pump shall continue delivery for at least 4 hours at 25 mL/h.";
60
+ attribute :>> notation = RequirementNotationKind::ears;
61
+ attribute :>> earsPattern = EarsPatternKind::eventDriven;
62
+ attribute :>> obligation = ObligationKind::shall;
63
+ attribute :>> conditionClause = "On loss of mains power";
64
+ attribute :>> systemResponse = "continue delivery for at least 4 hours at 25 mL/h";
65
+ attribute :>> concernKind = ConcernKind::reliability;
66
+ }
67
+ requirement reqPrescriptionConfirmation : Requirement {
68
+ attribute :>> id = "NDS-REQ-006"; attribute :>> name = "PrescriptionConfirmation";
69
+ attribute :>> requirementKind = RequirementKind::software;
70
+ attribute :>> statement = "When the clinician changes the infusion rate, the pump shall require explicit confirmation before applying it.";
71
+ attribute :>> notation = RequirementNotationKind::ears;
72
+ attribute :>> earsPattern = EarsPatternKind::eventDriven;
73
+ attribute :>> obligation = ObligationKind::shall;
74
+ attribute :>> conditionClause = "When the clinician changes the infusion rate";
75
+ attribute :>> systemResponse = "require explicit confirmation before applying it";
76
+ attribute :>> concernKind = ConcernKind::usability;
77
+ attribute :>> safetyClass = SafetyClassKind::C;
78
+ }
79
+ // Untraced on purpose — the gap the traceability view is meant to find.
80
+ requirement reqStatusVisibility : Requirement {
81
+ attribute :>> id = "NDS-REQ-007"; attribute :>> name = "StatusVisibility";
82
+ attribute :>> requirementKind = RequirementKind::system;
83
+ attribute :>> statement = "The pump shall display the active rate and volume delivered legibly at 1 m.";
84
+ attribute :>> notation = RequirementNotationKind::sophist;
85
+ attribute :>> obligation = ObligationKind::shall;
86
+ attribute :>> systemResponse = "display the active rate and volume delivered legibly at 1 m";
87
+ attribute :>> concernKind = ConcernKind::usability;
88
+ }
89
+ }
@@ -0,0 +1,90 @@
1
+ // Verification cases — the far end of the trace chain, and a third axis for
2
+ // the traceability matrix (function → verification case).
3
+ package memo_examples_nested_architecture_dsm_assurance_verification_validation {
4
+ private import ScalarValues::*;
5
+
6
+ private import memo_core_enumerations::*;
7
+ private import memo_core_relationships::*;
8
+ private import memo_assurance_verification_validation::*;
9
+ private import memo_examples_nested_architecture_dsm_architecture_functional_functions::*;
10
+ private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
11
+
12
+ verification vcDoseAccuracy : VerificationCase {
13
+ attribute :>> id = "NDS-VER-001"; attribute :>> name = "VerifyDoseAccuracy";
14
+ attribute :>> methodKind = VerificationMethodKind::test;
15
+ 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
+ }
18
+ verification vcOcclusionResponse : VerificationCase {
19
+ attribute :>> id = "NDS-VER-002"; attribute :>> name = "VerifyOcclusionResponse";
20
+ attribute :>> methodKind = VerificationMethodKind::test;
21
+ attribute :>> acceptanceCriteria = "Delivery stops within 2 s of the occlusion threshold being crossed, at every supported rate.";
22
+ attribute :>> status = "planned";
23
+ }
24
+ verification vcAirInLineResponse : VerificationCase {
25
+ attribute :>> id = "NDS-VER-003"; attribute :>> name = "VerifyAirInLineResponse";
26
+ attribute :>> methodKind = VerificationMethodKind::test;
27
+ attribute :>> acceptanceCriteria = "A 0.1 mL air bolus stops delivery and raises a high-priority alarm.";
28
+ attribute :>> status = "planned";
29
+ }
30
+ verification vcAlarmSignals : VerificationCase {
31
+ attribute :>> id = "NDS-VER-004"; attribute :>> name = "VerifyAlarmSignals";
32
+ attribute :>> methodKind = VerificationMethodKind::test;
33
+ attribute :>> acceptanceCriteria = "Alarm signals conform to IEC 60601-1-8 for every priority, and persist until cleared or acknowledged.";
34
+ attribute :>> status = "planned";
35
+ }
36
+ verification vcBatteryEndurance : VerificationCase {
37
+ attribute :>> id = "NDS-VER-005"; attribute :>> name = "VerifyBatteryEndurance";
38
+ attribute :>> methodKind = VerificationMethodKind::test;
39
+ 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";
41
+ }
42
+ verification vcConfirmationFlow : VerificationCase {
43
+ attribute :>> id = "NDS-VER-006"; attribute :>> name = "VerifyConfirmationFlow";
44
+ attribute :>> methodKind = VerificationMethodKind::demonstration;
45
+ attribute :>> acceptanceCriteria = "No rate change reaches the controller without an explicit confirmation step.";
46
+ attribute :>> status = "planned";
47
+ }
48
+ verification vcStatusLegibility : VerificationCase {
49
+ attribute :>> id = "NDS-VER-007"; attribute :>> name = "VerifyStatusLegibility";
50
+ attribute :>> methodKind = VerificationMethodKind::inspection;
51
+ attribute :>> acceptanceCriteria = "Rate and volume delivered are readable at 1 m under 100–1000 lux.";
52
+ attribute :>> status = "planned";
53
+ }
54
+ verification vcPowerSourceSwitch : VerificationCase {
55
+ attribute :>> id = "NDS-VER-008"; attribute :>> name = "VerifyPowerSourceSwitch";
56
+ attribute :>> methodKind = VerificationMethodKind::test;
57
+ attribute :>> acceptanceCriteria = "Rail brownout switches source without interrupting delivery.";
58
+ attribute :>> status = "planned";
59
+ }
60
+
61
+ // 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;
69
+
70
+ // Function → verification case, so safety-critical functions carry their
71
+ // 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;
90
+ }
@@ -0,0 +1,28 @@
1
+ // Nested architecture DSM — project identity and method binding.
2
+ //
3
+ // The native entrypoint. The imports name what this project contains and the
4
+ // binding names the methodology governing it. No YAML file participates.
5
+ package memo_examples_nested_architecture_dsm_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_nested_architecture_dsm_architecture_logical_structure::*;
15
+ private import memo_examples_nested_architecture_dsm_architecture_functional_functions::*;
16
+ private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
17
+ private import memo_examples_nested_architecture_dsm_assurance_requirements_needs::*;
18
+ private import memo_examples_nested_architecture_dsm_assurance_verification_validation::*;
19
+ private import memo_examples_nested_architecture_dsm_traces::*;
20
+
21
+ part projectBinding : ProjectMethodBinding {
22
+ attribute :>> id = "PMB-NESTED-DSM-001";
23
+ attribute :>> name = "NestedArchitectureDsmProjectMethodBinding";
24
+ attribute :>> projectName = "Nested Architecture DSM";
25
+ ref :>> selectedMethodology = mdDefaultDefinition;
26
+ attribute :>> scopeMode = ScopeModeKind::explicit;
27
+ }
28
+ }
@@ -0,0 +1,49 @@
1
+ // Cross-axis links: allocation and satisfaction.
2
+ //
3
+ // These are what make the two matrices show different things over the same
4
+ // model. The DSM reads allocation as a dependency between a function and the
5
+ // block that carries it; the traceability view reads satisfaction as coverage
6
+ // of a requirement. Keeping both in one file makes the cross-axis story easy
7
+ // to read, and easy to extend from the traceability view's editor.
8
+ package memo_examples_nested_architecture_dsm_traces {
9
+ private import ScalarValues::*;
10
+
11
+ private import memo_core_enumerations::*;
12
+ private import memo_core_relationships::*;
13
+ private import memo_examples_nested_architecture_dsm_architecture_functional_functions::*;
14
+ private import memo_examples_nested_architecture_dsm_architecture_logical_structure::*;
15
+ private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
16
+
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;
24
+ // Two channels carry the same protective function — the redundancy shows
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;
33
+ // A capability allocated at subsystem level rather than to one component:
34
+ // collapsed, it lands in the same cell as its children's allocations.
35
+ connection allocMeterFluid : AllocatedTo connect function ::> fnMeterFluid to allocatedElement ::> subFluidPath;
36
+
37
+ // ── 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;
49
+ }
@@ -0,0 +1,24 @@
1
+ // Reusable Instrument — 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_reusable_instrument_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_reusable_instrument_viewpoints_unassigned::*;
15
+ private import memo_examples_reusable_instrument_viewpoints_unassigned_views_reusable_instrument_overview::*;
16
+
17
+ part projectBinding : ProjectMethodBinding {
18
+ attribute :>> id = "PMB-REUSABLE-INSTRUMENT-001";
19
+ attribute :>> name = "ReusableInstrumentProjectMethodBinding";
20
+ attribute :>> projectName = "Reusable Instrument";
21
+ ref :>> selectedMethodology = mdDefaultDefinition;
22
+ attribute :>> scopeMode = ScopeModeKind::explicit;
23
+ }
24
+ }
@@ -5,6 +5,7 @@ package memo_examples_reusable_instrument {
5
5
  private import ScalarValues::*;
6
6
 
7
7
  private import memo_core_enumerations::*;
8
+ private import memo_core_relationships::*;
8
9
  private import memo_architecture_operational_context_actors::*;
9
10
  private import memo_architecture_operational_use_cases::*;
10
11
  private import memo_architecture_operational_activities::*;
@@ -45,15 +46,15 @@ package memo_examples_reusable_instrument {
45
46
  attribute :>> id = "RI-ACT-003"; attribute :>> name = "PackAndAutoclave";
46
47
  attribute :>> criticality = CriticalityKind::high;
47
48
  }
48
- action wsClean : WorkflowStep { attribute :>> stepOrder = 1; ref :>> performedActivity = actClean; }
49
- action wsInspect : WorkflowStep { attribute :>> stepOrder = 2; ref :>> performedActivity = actInspect; }
50
- action wsSterilize : WorkflowStep { attribute :>> stepOrder = 3; ref :>> performedActivity = actSterilizeLoad; }
49
+ action wsClean : WorkflowStep { ref :>> performedActivity = actClean; }
50
+ action wsInspect : WorkflowStep { ref :>> performedActivity = actInspect; }
51
+ action wsSterilize : WorkflowStep { ref :>> performedActivity = actSterilizeLoad; }
51
52
  connection : Composes connect parent ::> wfReprocess to child ::> wsClean;
52
- connection : StepPrecedes connect predecessor ::> wsClean to successor ::> wsInspect;
53
- connection : StepPrecedes connect predecessor ::> wsInspect to successor ::> wsSterilize;
53
+ first wsClean then wsInspect;
54
+ first wsInspect then wsSterilize;
54
55
  connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfReprocess to supported ::> ucSterilize; }
55
56
 
56
- part scNominalCycle : OperativeScenario {
57
+ action scNominalCycle : OperativeScenario {
57
58
  attribute :>> id = "RI-SC-001"; attribute :>> name = "NominalReprocessingCycle";
58
59
  attribute :>> variantKind = ScenarioVariantKind::nominal;
59
60
  attribute :>> operationalCondition = OperationalConditionKind::normal;
@@ -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_reusable_instrument_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_reusable_instrument_viewpoints {
1
+ package memo_examples_reusable_instrument_viewpoints_unassigned_views_reusable_instrument_overview {
2
2
  private import memo_examples_reusable_instrument::*;
3
3
  private import memo_viewpoints_definitions::*;
4
4
  private import memo_core_enumerations::*;
@@ -0,0 +1,24 @@
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
+ }
24
+ }
@@ -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::*;