@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,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,113 @@
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
+ private import memo_core_dimensions::*; // ElementStatusKind
6
+
7
+ private import memo_core_enumerations::*;
8
+ private import memo_core_relationships::*;
9
+ private import memo_assurance_verification_validation::*;
10
+ private import memo_examples_nested_architecture_dsm_architecture_functional_functions::*;
11
+ private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
12
+
13
+ verification vcDoseAccuracy : VerificationCase {
14
+ attribute :>> id = "NDS-VER-001"; attribute :>> name = "VerifyDoseAccuracy";
15
+ attribute :>> methodKind = VerificationMethodKind::test;
16
+ attribute :>> acceptanceCriteria = "Gravimetric delivery over 60 minutes is within ±5% of the prescribed volume at 1, 25 and 999 mL/h.";
17
+ attribute :>> status = ElementStatusKind::approved;
18
+
19
+ objective { verify reqDoseAccuracy; }
20
+ subject verified : Base::Anything[*] = (fnDeliverTherapy, fnDeliverTherapy.fnMeterFluid, fnDeliverTherapy.fnMeterFluid.fnDriveActuator, fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered, fnDeliverTherapy.fnControlDose, fnDeliverTherapy.fnControlDose.fnComputeRate);
21
+ }
22
+ verification vcOcclusionResponse : VerificationCase {
23
+ attribute :>> id = "NDS-VER-002"; attribute :>> name = "VerifyOcclusionResponse";
24
+ attribute :>> methodKind = VerificationMethodKind::test;
25
+ attribute :>> acceptanceCriteria = "Delivery stops within 2 s of the occlusion threshold being crossed, at every supported rate.";
26
+ attribute :>> status = ElementStatusKind::approved;
27
+
28
+ objective { verify reqOcclusionDetection; }
29
+ subject verified : Base::Anything[*] = (fnEnsureSafety, fnEnsureSafety.fnDetectOcclusion, fnEnsureSafety.fnEnforceDoseLimits);
30
+ }
31
+ verification vcAirInLineResponse : VerificationCase {
32
+ attribute :>> id = "NDS-VER-003"; attribute :>> name = "VerifyAirInLineResponse";
33
+ attribute :>> methodKind = VerificationMethodKind::test;
34
+ attribute :>> acceptanceCriteria = "A 0.1 mL air bolus stops delivery and raises a high-priority alarm.";
35
+ attribute :>> status = ElementStatusKind::approved;
36
+
37
+ objective { verify reqAirInLine; }
38
+ subject verified : Base::Anything[*] = (fnEnsureSafety.fnDetectAirInLine);
39
+ }
40
+ verification vcAlarmSignals : VerificationCase {
41
+ attribute :>> id = "NDS-VER-004"; attribute :>> name = "VerifyAlarmSignals";
42
+ attribute :>> methodKind = VerificationMethodKind::test;
43
+ attribute :>> acceptanceCriteria = "Alarm signals conform to IEC 60601-1-8 for every priority, and persist until cleared or acknowledged.";
44
+ attribute :>> status = ElementStatusKind::approved;
45
+
46
+ objective { verify reqAlarmAnnunciation; }
47
+ subject verified : Base::Anything[*] = (fnInformUser.fnAnnunciateAlarm);
48
+ }
49
+ verification vcBatteryEndurance : VerificationCase {
50
+ attribute :>> id = "NDS-VER-005"; attribute :>> name = "VerifyBatteryEndurance";
51
+ attribute :>> methodKind = VerificationMethodKind::test;
52
+ attribute :>> acceptanceCriteria = "Delivery continues for at least 4 hours at 25 mL/h from a fully charged battery after mains loss.";
53
+ attribute :>> status = ElementStatusKind::approved;
54
+
55
+ objective { verify reqBatteryEndurance; }
56
+ subject verified : Base::Anything[*] = (fnManagePower, fnManagePower.fnMonitorBattery);
57
+ }
58
+ verification vcConfirmationFlow : VerificationCase {
59
+ attribute :>> id = "NDS-VER-006"; attribute :>> name = "VerifyConfirmationFlow";
60
+ attribute :>> methodKind = VerificationMethodKind::demonstration;
61
+ attribute :>> acceptanceCriteria = "No rate change reaches the controller without an explicit confirmation step.";
62
+ attribute :>> status = ElementStatusKind::approved;
63
+
64
+ objective { verify reqPrescriptionConfirmation; }
65
+ subject verified : Base::Anything[*] = (fnDeliverTherapy.fnControlDose.fnValidatePrescription, fnInformUser.fnAcceptInput);
66
+ }
67
+ verification vcStatusLegibility : VerificationCase {
68
+ attribute :>> id = "NDS-VER-007"; attribute :>> name = "VerifyStatusLegibility";
69
+ attribute :>> methodKind = VerificationMethodKind::inspection;
70
+ attribute :>> acceptanceCriteria = "Rate and volume delivered are readable at 1 m under 100–1000 lux.";
71
+ attribute :>> status = ElementStatusKind::approved;
72
+
73
+ objective { verify reqStatusVisibility; }
74
+ subject verified : Base::Anything[*] = (fnInformUser, fnInformUser.fnRenderStatus);
75
+ }
76
+ verification vcPowerSourceSwitch : VerificationCase {
77
+ attribute :>> id = "NDS-VER-008"; attribute :>> name = "VerifyPowerSourceSwitch";
78
+ attribute :>> methodKind = VerificationMethodKind::test;
79
+ attribute :>> acceptanceCriteria = "Rail brownout switches source without interrupting delivery.";
80
+ attribute :>> status = ElementStatusKind::approved;
81
+
82
+ subject verified : Base::Anything[*] = (fnManagePower.fnSelectPowerSource);
83
+ }
84
+
85
+ // Requirement → verification case.
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+ // Function → verification case, so safety-critical functions carry their
94
+ // own verification rather than inheriting it through a requirement.
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+ }
@@ -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,48 @@
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
+ allocate fnDeliverTherapy.fnMeterFluid.fnDriveActuator to sysTherapyDelivery.subFluidPath.lcPumpMechanism;
19
+ allocate fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered to sysTherapyDelivery.subFluidPath.lcPumpMechanism;
20
+ allocate fnDeliverTherapy.fnControlDose.fnComputeRate to sysTherapyDelivery.subControl.lcDoseController;
21
+ allocate fnDeliverTherapy.fnControlDose.fnValidatePrescription to sysTherapyDelivery.subControl.lcDoseController;
22
+ allocate fnEnsureSafety.fnDetectOcclusion to sysTherapyDelivery.subFluidPath.lcOcclusionChannel;
23
+ allocate fnEnsureSafety.fnDetectAirInLine to sysTherapyDelivery.subFluidPath.lcOcclusionChannel;
24
+ // Two channels carry the same protective function — the redundancy shows
25
+ // up in the matrix as two marks on one row.
26
+ allocate fnEnsureSafety.fnEnforceDoseLimits to sysTherapyDelivery.subControl.subSafetyMonitor.lcWatchdogChannel;
27
+ allocate fnEnsureSafety.fnEnforceDoseLimits to sysTherapyDelivery.subControl.subSafetyMonitor.lcPressureIntegrityChannel;
28
+ allocate fnInformUser.fnRenderStatus to sysTherapyDelivery.subUserInterface.lcDisplayManager;
29
+ allocate fnInformUser.fnAnnunciateAlarm to sysTherapyDelivery.subUserInterface.lcAlarmAnnunciator;
30
+ allocate fnInformUser.fnAcceptInput to sysTherapyDelivery.subUserInterface.lcKeypadHandler;
31
+ allocate fnManagePower.fnMonitorBattery to sysTherapyDelivery.subPower.lcBatteryManager;
32
+ allocate fnManagePower.fnSelectPowerSource to sysTherapyDelivery.subPower.lcPowerRailMonitor;
33
+ // 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
+ allocate fnDeliverTherapy.fnMeterFluid to sysTherapyDelivery.subFluidPath;
36
+ // ── Requirement → function satisfaction ──────────────────────
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+ }
@@ -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::*;
@@ -23,8 +24,9 @@ package memo_examples_reusable_instrument {
23
24
  attribute :>> goalStatement = "Return a used instrument to sterile, functional condition for the next case.";
24
25
  attribute :>> preCondition = "instrument collected from the OR; gross soil removed at point of use";
25
26
  attribute :>> successOutcome = "instrument cleaned, inspected, sterilized, and released to sterile storage";
27
+ subject supportingSystem;
28
+ actor sterileProcessingTechActor = sterileProcessingTech;
26
29
  }
27
- connection : Initiates connect initiatingUser ::> sterileProcessingTech to initiatedUseCase ::> ucSterilize;
28
30
 
29
31
  // Reprocessing workflow: exists independently of any single instrument.
30
32
  action wfReprocess : OperationalWorkflow {
@@ -32,6 +34,9 @@ package memo_examples_reusable_instrument {
32
34
  attribute :>> workflowState = WorkflowStateKind::asIs;
33
35
  attribute :>> entryCondition = "used instrument received in decontamination";
34
36
  attribute :>> completionCondition = "sterile pack released to storage";
37
+
38
+ action wsClean : WorkflowStep { ref :>> performedActivity = actClean; }
39
+ first wsClean then wsInspect;
35
40
  }
36
41
  action actClean : OperationalActivity {
37
42
  attribute :>> id = "RI-ACT-001"; attribute :>> name = "CleanAndDisinfect";
@@ -45,16 +50,14 @@ package memo_examples_reusable_instrument {
45
50
  attribute :>> id = "RI-ACT-003"; attribute :>> name = "PackAndAutoclave";
46
51
  attribute :>> criticality = CriticalityKind::high;
47
52
  }
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; }
51
- 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
+ action wsInspect : WorkflowStep { ref :>> performedActivity = actInspect; }
54
+ action wsSterilize : WorkflowStep { ref :>> performedActivity = actSterilizeLoad; }
55
+ first wsInspect then wsSterilize;
54
56
  connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfReprocess to supported ::> ucSterilize; }
55
57
 
56
- part scNominalCycle : OperativeScenario {
58
+ action scNominalCycle : MemoScenario {
57
59
  attribute :>> id = "RI-SC-001"; attribute :>> name = "NominalReprocessingCycle";
60
+ attribute :>> scenarioKind = ScenarioKind::operative;
58
61
  attribute :>> variantKind = ScenarioVariantKind::nominal;
59
62
  attribute :>> operationalCondition = OperationalConditionKind::normal;
60
63
  ref :>> parentWorkflow = wfReprocess;
@@ -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,40 @@
1
+ # ROS mobile robot
2
+
3
+ A focused MEMO example that demonstrates **using an extension**. The subject is
4
+ a ROS 2 mobile logistics robot; the point is the mechanism.
5
+
6
+ Extensions are a way to model, so they live in [`extensions/`](../../extensions),
7
+ beside the ontology. This project is one of their consumers.
8
+
9
+ - `model/catalog/project.sysml` — the binding. It lists three extension modules
10
+ (`memo_extension_messaging`, `memo_extension_container`, `memo_extension_ros`)
11
+ in `includedModule`. That is how extensions compose: at the project binding,
12
+ never by chaining methodologies.
13
+ - `model/catalog/ros_mobile_robot.sysml` — the model.
14
+ - `model/catalog/viewpoints/` — diagram views over that catalog.
15
+
16
+ ## What it shows
17
+
18
+ 1. **Extension types are used exactly like base types.** `RosNode` specializes
19
+ `SoftwareComponent`, so it inherits period, WCET, priority, safety class and
20
+ fault containment, and every base rule still applies to it. The three nodes
21
+ set `runtimeKind` individually — two composed into one container process,
22
+ the safety monitor in its own — because that is a design decision the
23
+ extension type must not make for the modeller.
24
+ 2. **Publish and subscribe use native SysML.** A ROS message is an item
25
+ definition, a named topic is its item usage, nodes own `out` publisher and
26
+ `in` subscriber ports, and native interfaces/flows connect those ports. The
27
+ extension declares no publish/subscribe relation.
28
+ 3. **Deployment reuses the base relations unchanged.** `BuildsInto`,
29
+ `DeploysTo` and `ProvidesEnvironment` carry the whole chain from source
30
+ module to container image to compute unit to ROS runtime, with no
31
+ ROS-specific relation anywhere in it. That is the evidence the base is
32
+ factored correctly.
33
+ 4. **QoS is a typed profile, not a property bag.** Publisher ports carry an
34
+ offered `RosQosProfile` and subscriber ports a requested one, so the incompatibility
35
+ that silently delivers nothing at runtime is two adjacent values in the
36
+ model. This is why the `PropertySet` stub was deleted rather than made real.
37
+ 5. **Services and actions are different native interface contracts.** A service
38
+ has one request and one correlated response. An action has goal,
39
+ acceptance, feedback, cancellation, result, and status features plus a
40
+ native execution-state family.
@@ -0,0 +1,33 @@
1
+ // ROS Mobile Robot — 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_ros_mobile_robot_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_ros_mobile_robot_viewpoints_unassigned::*;
15
+ private import memo_examples_ros_mobile_robot_viewpoints_unassigned_views_ros_mobile_robot_overview::*;
16
+
17
+ part projectBinding : ProjectMethodBinding {
18
+ attribute :>> id = "PMB-ROS-MOBILE-ROBOT-001";
19
+ attribute :>> name = "RosMobileRobotProjectMethodBinding";
20
+ attribute :>> projectName = "ROS Mobile Robot";
21
+ ref :>> selectedMethodology = mdDefaultDefinition;
22
+ attribute :>> scopeMode = ScopeModeKind::explicit;
23
+ // This is the composition mechanism: three independent extensions,
24
+ // listed here. `includedModule` is [0..*] on both MethodologyDefinition
25
+ // and ProjectMethodBinding, while `baseMethodology` is [0..1] — so
26
+ // extensions combine at the binding and never by chaining.
27
+ attribute :>> includedModule = (
28
+ "memo_extension_messaging",
29
+ "memo_extension_container",
30
+ "memo_extension_ros"
31
+ );
32
+ }
33
+ }