@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
@@ -11,123 +11,93 @@ package memo_rules_ontology {
11
11
 
12
12
  // ─── Structure ───────────────────────────────────────────────────────
13
13
 
14
- constraint def containmentAcyclicRule {
14
+ constraint def ContainmentAcyclicRule :> MemoConsistencyRule {
15
15
  attribute id = "CR-ONT-001";
16
- attribute appliesTo = "MemoPart";
16
+ attribute tailoring = RuleTailoringKind::invariant;
17
+ attribute appliesTo = "Model";
17
18
  attribute severity = RuleSeverityKind::error;
18
19
  attribute rationaleText = "Containment/composition relations (Composes) must form no cycles.";
19
20
  attribute predicateExpression = "acyclic(composes)";
20
21
  constraint { true }
21
22
  }
22
- constraint def connectorEndpointsExistRule {
23
- attribute id = "CR-ONT-002";
24
- attribute appliesTo = "ComponentExchange";
25
- attribute severity = RuleSeverityKind::error;
26
- attribute rationaleText = "Connector endpoints must resolve to model elements via the typed refs sourceEndpoint/targetEndpoint; port-path strings are descriptive labels only.";
27
- attribute predicateExpression = "sourceEndpoint->size() = 1 and targetEndpoint->size() = 1";
28
- constraint { true }
29
- }
30
- constraint def portCompatibilityRule {
31
- attribute id = "CR-ONT-003";
32
- attribute appliesTo = "LogicalConnector";
33
- attribute severity = RuleSeverityKind::error;
34
- attribute rationaleText = "Connected ports must agree on content kind; a fluid port cannot connect to an information port.";
35
- attribute predicateExpression = "sourceComponent.ports.contentKind->intersect(targetComponent.ports.contentKind)->size() >= 1";
36
- constraint { true }
37
- }
38
- constraint def directionAgreesWithFlowRule {
39
- attribute id = "CR-ONT-004";
40
- attribute appliesTo = "LogicalExchange";
41
- attribute severity = RuleSeverityKind::error;
42
- attribute rationaleText = "Exchange direction must agree with the direction of its source and target ports.";
43
- attribute predicateExpression = "sourcePort.direction != DirectionKind::input and targetPort.direction != DirectionKind::output";
44
- constraint { true }
45
- }
46
- constraint def exchangedItemTypeRule {
47
- attribute id = "CR-ONT-005";
48
- attribute appliesTo = "LogicalExchange";
23
+ constraint def NestedPartConnectedRule :> MemoConsistencyRule {
24
+ attribute id = "AR-IBD-001";
25
+ attribute tailoring = RuleTailoringKind::invariant;
26
+ // Internal-block connectivity is a structural-architecture concern, so
27
+ // the subject is the structural component — not every MemoPart. UI
28
+ // elements, captured evidence, and review comments nest in compositions
29
+ // without ever bearing a connector, and judging them produced warnings
30
+ // no modeller could act on. The engine reads this value; narrowing or
31
+ // widening the rule happens here, not in TypeScript.
32
+ attribute appliesTo = "LogicalComponent";
33
+ attribute evaluator = "architecture";
49
34
  attribute severity = RuleSeverityKind::warning;
50
- attribute rationaleText = "Exchanged items must be type-compatible with the exchange content kind.";
51
- attribute predicateExpression = "exchangedItem->isEmpty() or exchangedItem.contentKind = contentKind";
35
+ attribute rationaleText = "A structural part nested inside another part should expose at least one modeled interface connector. Passive or intentionally isolated parts may retain this warning with an explicit modelling rationale.";
36
+ attribute predicateExpression = "hasConnectorInComposition";
37
+ // Graph-aware structural rule, evaluated by Memo Architect's rule
38
+ // engine: it lifts port endpoints to their owning part, ignores
39
+ // composition/trace/deployment links, and includes a connected child's
40
+ // containing assemblies. The generic KerML expression evaluator cannot
41
+ // represent that transitive containment query.
52
42
  constraint { true }
53
43
  }
54
-
55
44
  // ─── Deployment and realization ──────────────────────────────────────
56
45
 
57
- constraint def deployToCapableNodeRule {
58
- attribute id = "CR-ONT-010";
59
- attribute appliesTo = "DeploysTo";
60
- attribute severity = RuleSeverityKind::error;
61
- attribute rationaleText = "Software deploys only to capable execution nodes (e.g. containerized units require supportsContainerization).";
62
- attribute predicateExpression = "deploymentKind != DeploymentKind::containerized or node.supportsContainerization = true";
63
- constraint { true }
64
- }
65
- constraint def runtimeTracesToModuleRule {
46
+ constraint def RuntimeTracesToModuleRule :> MemoConsistencyRule {
66
47
  attribute id = "CR-ONT-011";
48
+ attribute tailoring = RuleTailoringKind::invariant;
67
49
  attribute appliesTo = "SoftwareComponent";
68
50
  attribute severity = RuleSeverityKind::warning;
69
51
  attribute rationaleText = "Every runtime component must trace to a module-view definition (Realizes).";
70
52
  attribute predicateExpression = "realizes->size() >= 1";
71
53
  constraint { true }
72
54
  }
73
- constraint def logicalRealizationTypedRule {
74
- attribute id = "CR-ONT-012";
75
- attribute appliesTo = "Realizes";
76
- attribute severity = RuleSeverityKind::error;
77
- attribute rationaleText = "Realization relations must resolve both ends to model elements, not name strings.";
78
- attribute predicateExpression = "realizing->size() = 1 and realized->size() = 1";
79
- constraint { true }
80
- }
81
-
82
- constraint def patientContactCharacterizedRule {
55
+ constraint def PatientContactCharacterizedRule :> MemoConsistencyRule {
83
56
  attribute id = "CR-ONT-032";
57
+ attribute tailoring = RuleTailoringKind::invariant;
84
58
  attribute appliesTo = "PhysicalComponent";
85
59
  attribute severity = RuleSeverityKind::error;
86
60
  attribute rationaleText = "Patient-contact components must identify contact nature and duration (ISO 10993-1).";
87
- attribute predicateExpression = "patientContact = false or (contactNature != '' and contactDuration != '')";
61
+ attribute predicateExpression = "patientContact == false or (contactNature != '' and contactDuration != '')";
88
62
  constraint { true }
89
63
  }
90
64
 
91
65
  // ─── Assurance coverage ──────────────────────────────────────────────
92
66
 
93
- constraint def safetyCriticalFunctionVerifiedRule {
67
+ constraint def SafetyCriticalFunctionVerifiedRule :> MemoConsistencyRule {
94
68
  attribute id = "CR-ONT-040";
69
+ attribute tailoring = RuleTailoringKind::invariant;
95
70
  attribute appliesTo = "SystemFunction";
96
71
  attribute severity = RuleSeverityKind::error;
97
72
  attribute rationaleText = "Safety-critical functions (criticality high or catastrophic) must trace to at least one verification case.";
98
- attribute predicateExpression = "criticality < CriticalityKind::high or verifiedBy->size() >= 1";
73
+ attribute predicateExpression = "not(criticality == 'high' or criticality == 'catastrophic') or verifiedBy->size() >= 1";
99
74
  constraint { true }
100
75
  }
101
- constraint def criticalTaskValidatedRule {
76
+ constraint def CriticalTaskValidatedRule :> MemoConsistencyRule {
102
77
  attribute id = "CR-ONT-041";
78
+ attribute tailoring = RuleTailoringKind::invariant;
103
79
  attribute appliesTo = "UserTask[criticality=high]";
104
80
  attribute severity = RuleSeverityKind::error;
105
81
  attribute rationaleText = "Critical tasks (criticality high or catastrophic) must trace to usability validation (FDA HF guidance; IEC 62366-1 summative evaluation).";
106
- attribute predicateExpression = "criticality < CriticalityKind::high or validates->size() >= 1";
82
+ attribute predicateExpression = "not(criticality == 'high' or criticality == 'catastrophic') or validates->size() >= 1";
107
83
  constraint { true }
108
84
  }
109
- constraint def useErrorTracesToHazardRule {
85
+ constraint def UseErrorTracesToHazardRule :> MemoConsistencyRule {
110
86
  attribute id = "CR-ONT-042";
87
+ attribute tailoring = RuleTailoringKind::invariant;
111
88
  attribute appliesTo = "UseError";
112
89
  attribute severity = RuleSeverityKind::warning;
113
90
  attribute rationaleText = "Safety-relevant use errors (severity serious or worse) must trace to a hazard.";
114
- attribute predicateExpression = "severity < SeverityKind::serious or causes->size() >= 1";
91
+ attribute predicateExpression = "not(severity == 'serious' or severity == 'critical' or severity == 'catastrophic') or causes->size() >= 1 or tracesRisk->size() >= 1";
115
92
  constraint { true }
116
93
  }
117
- constraint def alternateScenarioHasBaseRule {
94
+ constraint def AlternateScenarioHasBaseRule :> MemoConsistencyRule {
118
95
  attribute id = "CR-ONT-043";
96
+ attribute tailoring = RuleTailoringKind::invariant;
119
97
  attribute appliesTo = "MemoScenario";
120
98
  attribute severity = RuleSeverityKind::error;
121
99
  attribute rationaleText = "Alternate, exception, and recovery scenarios must identify their base scenario or variation point — never duplicate the workflow.";
122
- attribute predicateExpression = "variantKind = ScenarioVariantKind::nominal or baseScenario->size() = 1 or variationPoint != ''";
123
- constraint { true }
124
- }
125
- constraint def singleAxisOwnershipRule {
126
- attribute id = "CR-ONT-045";
127
- attribute appliesTo = "MemoPart";
128
- attribute severity = RuleSeverityKind::error;
129
- attribute rationaleText = "Every element is owned by exactly one axis, encoded by its owning package: a horizontal architecture layer (memo_architecture_*) XOR a vertical assurance discipline (memo_assurance_*) — never both. Cross-axis participation is expressed by typed relationships, not by dual membership.";
130
- attribute predicateExpression = "owningPackage.startsWith('memo_architecture_') xor owningPackage.startsWith('memo_assurance_')";
100
+ attribute predicateExpression = "not(variantKind == 'alternate' or variantKind == 'exception' or variantKind == 'recovery') or baseScenario->size() == 1 or variationPoint != ''";
131
101
  constraint { true }
132
102
  }
133
103
  }
@@ -1,28 +1,28 @@
1
- // C5 quantitative rule pack — native KerML constraints (Epic EE-3).
2
- // Numeric cardinality bounds migrated from cardinalityCheck predicate parts to
3
- // native `constraint def` bodies. The aggregate ratio rule (QT-003) is a
4
- // model-level metric, not a single-subject predicate, and is omitted (see note).
1
+ // Quantitative per-subject cardinality constraints. Aggregate ratios belong to
2
+ // model-level coverage reporting rather than this evaluator.
5
3
  package memo_rules_quantitative {
6
4
  private import ScalarValues::*;
7
5
 
8
6
  private import memo_core_consistency_rules::*;
9
7
  private import memo_core_enumerations::*;
10
8
 
11
- constraint def hazardMaxControlsRule {
9
+ constraint def HazardMaxControlsRule :> MemoConsistencyRule {
12
10
  attribute id = "QT-001";
11
+ attribute tailoring = RuleTailoringKind::assurance;
13
12
  attribute appliesTo = "Hazard";
14
13
  attribute severity = RuleSeverityKind::info;
15
14
  attribute rationaleText = "Excessive controls per hazard suggests the hazard is too broad and should be decomposed.";
16
- attribute predicateExpression = "mitigates->size() >= 0 and mitigates->size() <= 10";
15
+ attribute predicateExpression = "mitigates->size() <= 10";
17
16
  constraint { true }
18
17
  }
19
18
 
20
- constraint def swComponentMaxInterfacesRule {
19
+ constraint def SwComponentMaxInterfacesRule :> MemoConsistencyRule {
21
20
  attribute id = "QT-002";
21
+ attribute tailoring = RuleTailoringKind::assurance;
22
22
  attribute appliesTo = "SoftwareModule";
23
23
  attribute severity = RuleSeverityKind::info;
24
24
  attribute rationaleText = "High interface count indicates excessive coupling; consider decomposition.";
25
- attribute predicateExpression = "threatenedBy->size() >= 0 and threatenedBy->size() <= 8";
25
+ attribute predicateExpression = "threatenedBy->size() <= 8";
26
26
  constraint { true }
27
27
  }
28
28
 
@@ -158,6 +158,13 @@ package memo_viewpoints_catalog {
158
158
  attribute :>> purpose = "Runtime message ordering between software components along a functional scenario.";
159
159
  attribute :>> defaultViewKind = DiagramViewKind::sequence;
160
160
  }
161
+ // The first cataloged viewpoint to resolve to `geometry`: screen regions
162
+ // carry authored RegionBounds, so a geometry view draws modelled facts.
163
+ part vpUILayout : Viewpoint {
164
+ attribute :>> id = "VP-CAT-028"; attribute :>> name = "UILayoutViewpoint";
165
+ attribute :>> purpose = "Captured screens with their marked regions and the UI elements those regions present.";
166
+ attribute :>> defaultViewKind = DiagramViewKind::geometry;
167
+ }
161
168
 
162
169
  // ── Compatibility mappings (§22): legacy diagram intents resolve to
163
170
  // standard view kinds; C4 and AADL stay in examples/ mappings. ──
@@ -9,7 +9,7 @@ package memo_viewpoints_clinical_clinical_viewpoint {
9
9
  attribute :>> name = "ClinicalViewpoint";
10
10
  attribute :>> title = "Clinical Viewpoint";
11
11
  attribute :>> shortDescription = "Shows clinical context, users, use environment, and clinical evidence.";
12
- attribute :>> longDescription = "Default viewpoint derived from the context and assurance layers for clinical stakeholders — intended use, patient/clinician interaction, clinical evidence, and clinical safety claims.";
12
+ attribute :>> description = "Default viewpoint derived from the context and assurance layers for clinical stakeholders — intended use, patient/clinician interaction, clinical evidence, and clinical safety claims.";
13
13
  attribute :>> purpose = "Communicate clinical use context and clinical evidence for the device.";
14
14
  attribute :>> audience = (AudienceKind::clinicalEngineer, AudienceKind::regulatoryEngineer);
15
15
  attribute :>> stage = WorkflowStageKind::context;
@@ -18,6 +18,8 @@ package memo_viewpoints_clinical_clinical_viewpoint {
18
18
  attribute :>> presentationKind = (PresentationKind::narrativeSection);
19
19
  attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::clinical);
20
20
  attribute :>> includedLayers = ("context", "assurance");
21
+ attribute :>> explorerLane = "assurance";
22
+ attribute :>> explorerOrder = 4;
21
23
  attribute :>> allowedElementKinds = ("Actor", "UseContext", "Evidence");
22
24
  attribute :>> userExtensible = true;
23
25
  }
@@ -1,11 +1,11 @@
1
- package memo_viewpoints_clinical_clinical_evidence_view {
1
+ package memo_viewpoints_clinical_views_clinical_evidence_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
5
5
  private import memo_core_enumerations::*;
6
6
 
7
7
  view def MemoClinicalEvidenceView :> MemoDocumentView {
8
- attribute :>> viewKind = DocumentViewKind::Clinical;
8
+ attribute :>> viewKind = DocumentViewKind::clinical;
9
9
  attribute :>> generationRule = "Include use contexts, actors, and clinical evidence supporting the device's intended use, filtered to clinical concern.";
10
10
  attribute :>> outputKind = (ViewOutputKind::documentSection);
11
11
  attribute :>> presentationKind = (PresentationKind::narrativeSection);
@@ -9,7 +9,7 @@ package memo_viewpoints_context_context_viewpoint {
9
9
  attribute :>> name = "ContextViewpoint";
10
10
  attribute :>> title = "System Context Viewpoint";
11
11
  attribute :>> shortDescription = "Shows actors, use context, and system boundary.";
12
- attribute :>> longDescription = "Default viewpoint derived from the context layer to communicate who interacts with the device, under which use conditions, and where trust or safety boundaries exist.";
12
+ attribute :>> description = "Default viewpoint derived from the context layer to communicate who interacts with the device, under which use conditions, and where trust or safety boundaries exist.";
13
13
  attribute :>> purpose = "Communicate operational context and boundaries.";
14
14
  attribute :>> audience = (AudienceKind::systemArchitect);
15
15
  attribute :>> stage = WorkflowStageKind::context;
@@ -18,6 +18,8 @@ package memo_viewpoints_context_context_viewpoint {
18
18
  attribute :>> presentationKind = (PresentationKind::blockDiagram);
19
19
  attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::interoperability);
20
20
  attribute :>> includedLayers = ("context");
21
+ attribute :>> explorerLane = "architecture";
22
+ attribute :>> explorerOrder = 0;
21
23
  // UseEnvironment (IEC 62366-1 3.20) is what the device sits inside —
22
24
  // facility, procedure area, ambient conditions. A context view that
23
25
  // cannot show it is missing half of "where is this used".
@@ -1,4 +1,4 @@
1
- package memo_viewpoints_context_system_context_view {
1
+ package memo_viewpoints_context_views_system_context_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
@@ -6,7 +6,7 @@ package memo_viewpoints_context_system_context_view {
6
6
  private import memo_viewpoints_context_context_viewpoint::*;
7
7
 
8
8
  view systemContextView : MemoDiagramView {
9
- expose memo_viewpoints_context_system_context_view::*;
9
+ expose memo_viewpoints_context_views_system_context_view::*;
10
10
  attribute depth = 2;
11
11
  attribute :>> id = "VIEW-CTX-001";
12
12
  attribute :>> name = "SystemContextView";
@@ -9,7 +9,7 @@ package memo_viewpoints_cybersecurity_cybersecurity_viewpoint {
9
9
  attribute :>> name = "CybersecurityViewpoint";
10
10
  attribute :>> title = "Cybersecurity Viewpoint";
11
11
  attribute :>> shortDescription = "Shows assets, trust boundaries, threats, vulnerabilities, cyber hazards, cyber risks, and mitigations.";
12
- attribute :>> longDescription = "Default viewpoint derived from the cybersecurity layer, using STRIDE-style threat categories by default while allowing safety and privacy impacts to be traced into the broader model.";
12
+ attribute :>> description = "Default viewpoint derived from the cybersecurity layer, using STRIDE-style threat categories by default while allowing safety and privacy impacts to be traced into the broader model.";
13
13
  attribute :>> purpose = "Communicate cybersecurity design, threat analysis, and cyber risk posture.";
14
14
  attribute :>> audience = (AudienceKind::securityEngineer);
15
15
  attribute :>> stage = WorkflowStageKind::risk;
@@ -18,6 +18,8 @@ package memo_viewpoints_cybersecurity_cybersecurity_viewpoint {
18
18
  attribute :>> presentationKind = (PresentationKind::custom);
19
19
  attribute :>> concernKinds = (ConcernKind::cybersecurity, ConcernKind::privacy, ConcernKind::safety);
20
20
  attribute :>> includedLayers = ("cybersecurity", "software_structure", "hardware_structure", "interfaces", "risk", "assurance");
21
+ attribute :>> explorerLane = "assurance";
22
+ attribute :>> explorerOrder = 3;
21
23
  attribute :>> allowedElementKinds = ("CybersecurityAsset", "Threat", "Vulnerability", "CyberHazard", "CyberRisk", "CyberMitigation", "SecurityRequirement", "TrustBoundary", "ThreatScenario");
22
24
  attribute :>> allowedRelationshipKinds = ("ThreatenedBy", "Exploits", "RealizedByScenario", "Mitigates", "DerivesCyberRequirement", "ImpactsSafety", "CrossesTrustBoundary");
23
25
  attribute :>> documentUsage = ("Secure Product Development", "Threat Model", "Cybersecurity Risk Assessment", "QMSR");
@@ -1,11 +1,11 @@
1
- package memo_viewpoints_cybersecurity_cybersecurity_assessment_view {
1
+ package memo_viewpoints_cybersecurity_views_cybersecurity_assessment_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
5
5
  private import memo_core_enumerations::*;
6
6
 
7
7
  view def MemoCybersecurityAssessmentView :> MemoDocumentView {
8
- attribute :>> viewKind = DocumentViewKind::CybersecurityAssessment;
8
+ attribute :>> viewKind = DocumentViewKind::cybersecurityAssessment;
9
9
  attribute :>> generationRule = "Include cyber risks, exploitability, mitigations, security requirements, verification, residual risk, and postmarket evidence references.";
10
10
  attribute :>> outputKind = (ViewOutputKind::documentSection);
11
11
  attribute :>> presentationKind = (PresentationKind::riskTable);
@@ -1,11 +1,11 @@
1
- package memo_viewpoints_cybersecurity_threat_model_view {
1
+ package memo_viewpoints_cybersecurity_views_threat_model_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
5
5
  private import memo_core_enumerations::*;
6
6
 
7
7
  view def MemoCybersecurityThreatModelView :> MemoDocumentView {
8
- attribute :>> viewKind = DocumentViewKind::ThreatModel;
8
+ attribute :>> viewKind = DocumentViewKind::threatModel;
9
9
  attribute :>> generationRule = "Include assets, trust boundaries, threat scenarios, vulnerabilities, mitigations, and trace links to safety/privacy concerns.";
10
10
  attribute :>> outputKind = (ViewOutputKind::documentSection);
11
11
  attribute :>> presentationKind = (PresentationKind::narrativeSection);
@@ -21,6 +21,10 @@ package memo_viewpoints_definitions {
21
21
  attribute userExtensible : Boolean;
22
22
  // Optional navigation grouping interpreted by Memo Architect.
23
23
  attribute group : String;
24
+ // Explorer placement follows the MEMO V-model: Architecture is read
25
+ // top-to-bottom; Assurance is read left-to-right.
26
+ attribute explorerLane : String;
27
+ attribute explorerOrder : Integer;
24
28
  // default diagram kind for a catalog viewpoint (optional)
25
29
  attribute defaultViewKind : DiagramViewKind[0..1];
26
30
  }
@@ -34,6 +38,7 @@ package memo_viewpoints_definitions {
34
38
 
35
39
  part def ViewSelectionQuery specializes MemoPart {
36
40
  attribute includeElementKinds : String[*];
41
+ attribute includeElementIds : String[*];
37
42
  attribute includeRelationshipKinds : String[*];
38
43
  attribute includeLayers : String[*];
39
44
  attribute includeConcerns : ConcernKind[*];
@@ -79,6 +84,7 @@ package memo_viewpoints_definitions {
79
84
 
80
85
  part def ViewInclusionRule specializes MemoPart {
81
86
  attribute includeElementKinds : String[*];
87
+ attribute includeElementIds : String[*];
82
88
  attribute includeRelationshipKinds : String[*];
83
89
  attribute includeLayers : String[*];
84
90
  attribute includeConcerns : ConcernKind[*];
@@ -9,7 +9,7 @@ package memo_viewpoints_functional_functional_viewpoint {
9
9
  attribute :>> name = "FunctionalViewpoint";
10
10
  attribute :>> title = "Functional Viewpoint";
11
11
  attribute :>> shortDescription = "Shows system functions, their decomposition, and allocation.";
12
- attribute :>> longDescription = "Default viewpoint derived from the functions layer for what the system does, independent of how it is structured — function trees, function allocation, and behavior triggers.";
12
+ attribute :>> description = "Default viewpoint derived from the functions layer for what the system does, independent of how it is structured — function trees, function allocation, and behavior triggers.";
13
13
  attribute :>> purpose = "Describe the system's functional decomposition and behavior.";
14
14
  attribute :>> audience = (AudienceKind::systemArchitect);
15
15
  attribute :>> stage = WorkflowStageKind::architecture;
@@ -18,6 +18,8 @@ package memo_viewpoints_functional_functional_viewpoint {
18
18
  attribute :>> presentationKind = (PresentationKind::activityDiagram);
19
19
  attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::performance);
20
20
  attribute :>> includedLayers = ("functions");
21
+ attribute :>> explorerLane = "architecture";
22
+ attribute :>> explorerOrder = 2;
21
23
  attribute :>> allowedElementKinds = ("SystemFunction", "FunctionalFlow", "FunctionalFlowStep", "FunctionalScenario", "FunctionalExchange");
22
24
  attribute :>> userExtensible = true;
23
25
  }
@@ -1,4 +1,4 @@
1
- package memo_viewpoints_functional_function_allocation_view {
1
+ package memo_viewpoints_functional_views_function_allocation_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
@@ -6,7 +6,7 @@ package memo_viewpoints_functional_function_allocation_view {
6
6
  private import memo_viewpoints_functional_functional_viewpoint::*;
7
7
 
8
8
  view functionAllocationView : MemoDiagramView {
9
- expose memo_viewpoints_functional_function_allocation_view::*;
9
+ expose memo_viewpoints_functional_views_function_allocation_view::*;
10
10
  attribute depth = 2;
11
11
  attribute :>> id = "VIEW-FUNC-002";
12
12
  attribute :>> name = "FunctionAllocationView";
@@ -1,4 +1,4 @@
1
- package memo_viewpoints_functional_system_functional_tree_view {
1
+ package memo_viewpoints_functional_views_system_functional_tree_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
@@ -6,7 +6,7 @@ package memo_viewpoints_functional_system_functional_tree_view {
6
6
  private import memo_viewpoints_functional_functional_viewpoint::*;
7
7
 
8
8
  view systemFunctionalTreeView : MemoDiagramView {
9
- expose memo_viewpoints_functional_system_functional_tree_view::*;
9
+ expose memo_viewpoints_functional_views_system_functional_tree_view::*;
10
10
  attribute depth = 2;
11
11
  attribute :>> id = "VIEW-FUNC-001";
12
12
  attribute :>> name = "SystemFunctionalTreeView";
@@ -9,7 +9,7 @@ package memo_viewpoints_logical_logical_viewpoint {
9
9
  attribute :>> name = "LogicalArchitectureViewpoint";
10
10
  attribute :>> title = "Logical Viewpoint";
11
11
  attribute :>> shortDescription = "Shows logical decomposition and interfaces.";
12
- attribute :>> longDescription = "Default viewpoint derived from the logical architecture layer for subsystem structure, responsibilities, and major interactions, independent of physical realization.";
12
+ attribute :>> description = "Default viewpoint derived from the logical architecture layer for subsystem structure, responsibilities, and major interactions, independent of physical realization.";
13
13
  attribute :>> purpose = "Describe the system's logical decomposition.";
14
14
  attribute :>> audience = (AudienceKind::systemArchitect);
15
15
  attribute :>> stage = WorkflowStageKind::architecture;
@@ -18,6 +18,8 @@ package memo_viewpoints_logical_logical_viewpoint {
18
18
  attribute :>> presentationKind = (PresentationKind::blockDiagram);
19
19
  attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::performance);
20
20
  attribute :>> includedLayers = ("logical_structure", "interfaces");
21
+ attribute :>> explorerLane = "architecture";
22
+ attribute :>> explorerOrder = 3;
21
23
  attribute :>> allowedElementKinds = ("LogicalComponent", "Interface");
22
24
  attribute :>> userExtensible = true;
23
25
  }
@@ -1,4 +1,4 @@
1
- package memo_viewpoints_logical_logical_architecture_view {
1
+ package memo_viewpoints_logical_views_logical_architecture_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
@@ -6,7 +6,7 @@ package memo_viewpoints_logical_logical_architecture_view {
6
6
  private import memo_viewpoints_logical_logical_viewpoint::*;
7
7
 
8
8
  view logicalArchitectureView : MemoDiagramView {
9
- expose memo_viewpoints_logical_logical_architecture_view::*;
9
+ expose memo_viewpoints_logical_views_logical_architecture_view::*;
10
10
  attribute depth = 2;
11
11
  attribute :>> id = "VIEW-LOG-001";
12
12
  attribute :>> name = "LogicalArchitectureView";
@@ -9,7 +9,7 @@ package memo_viewpoints_operational_operational_viewpoint {
9
9
  attribute :>> name = "OperationalViewpoint";
10
10
  attribute :>> title = "Operational & Use-Case Viewpoint";
11
11
  attribute :>> shortDescription = "Shows actors, use contexts, operational scenarios, and system capabilities.";
12
- attribute :>> longDescription = "Default viewpoint derived from the context, operational, and system layers for how actors use the device — operational scenarios, capabilities, and the functional chains that realize them.";
12
+ attribute :>> description = "Default viewpoint derived from the context, operational, and system layers for how actors use the device — operational scenarios, capabilities, and the functional chains that realize them.";
13
13
  attribute :>> purpose = "Communicate how actors interact with the system and which capabilities they invoke.";
14
14
  attribute :>> audience = (AudienceKind::projectLead, AudienceKind::systemArchitect);
15
15
  attribute :>> stage = WorkflowStageKind::context;
@@ -18,6 +18,8 @@ package memo_viewpoints_operational_operational_viewpoint {
18
18
  attribute :>> presentationKind = (PresentationKind::custom);
19
19
  attribute :>> concernKinds = (ConcernKind::performance, ConcernKind::interoperability);
20
20
  attribute :>> includedLayers = ("context", "operational", "system");
21
+ attribute :>> explorerLane = "architecture";
22
+ attribute :>> explorerOrder = 1;
21
23
  attribute :>> allowedElementKinds = ("Actor", "UseContext", "OperationalActivity", "OperativeScenario");
22
24
  attribute :>> userExtensible = true;
23
25
  }
@@ -1,4 +1,4 @@
1
- package memo_viewpoints_operational_use_case_view {
1
+ package memo_viewpoints_operational_views_use_case_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
@@ -6,7 +6,7 @@ package memo_viewpoints_operational_use_case_view {
6
6
  private import memo_viewpoints_operational_operational_viewpoint::*;
7
7
 
8
8
  view useCaseView : MemoDiagramView {
9
- expose memo_viewpoints_operational_use_case_view::*;
9
+ expose memo_viewpoints_operational_views_use_case_view::*;
10
10
  attribute depth = 2;
11
11
  attribute :>> id = "VIEW-OPS-001";
12
12
  attribute :>> name = "UseCaseView";
@@ -9,7 +9,7 @@ package memo_viewpoints_physical_physical_viewpoint {
9
9
  attribute :>> name = "PhysicalViewpoint";
10
10
  attribute :>> title = "Physical Viewpoint";
11
11
  attribute :>> shortDescription = "Shows physical components, hardware structure, and their interconnections.";
12
- attribute :>> longDescription = "Default viewpoint derived from the physical and hardware structure layers for bill-of-materials, hardware decomposition, physical interfaces, and network/connectivity topology.";
12
+ attribute :>> description = "Default viewpoint derived from the physical and hardware structure layers for bill-of-materials, hardware decomposition, physical interfaces, and network/connectivity topology.";
13
13
  attribute :>> purpose = "Describe the system's physical realization and interconnections.";
14
14
  attribute :>> audience = (AudienceKind::hardwareEngineer);
15
15
  attribute :>> stage = WorkflowStageKind::architecture;
@@ -18,6 +18,8 @@ package memo_viewpoints_physical_physical_viewpoint {
18
18
  attribute :>> presentationKind = (PresentationKind::blockDiagram);
19
19
  attribute :>> concernKinds = (ConcernKind::reliability, ConcernKind::interoperability);
20
20
  attribute :>> includedLayers = ("hardware_structure", "physical");
21
+ attribute :>> explorerLane = "architecture";
22
+ attribute :>> explorerOrder = 5;
21
23
  attribute :>> allowedElementKinds = ("ProcessingNode", "HardwareAssembly", "PhysicalPort");
22
24
  attribute :>> userExtensible = true;
23
25
  }
@@ -1,4 +1,4 @@
1
- package memo_viewpoints_physical_network_topology_view {
1
+ package memo_viewpoints_physical_views_network_topology_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
@@ -6,7 +6,7 @@ package memo_viewpoints_physical_network_topology_view {
6
6
  private import memo_viewpoints_physical_physical_viewpoint::*;
7
7
 
8
8
  view networkTopologyView : MemoDiagramView {
9
- expose memo_viewpoints_physical_network_topology_view::*;
9
+ expose memo_viewpoints_physical_views_network_topology_view::*;
10
10
  attribute depth = 2;
11
11
  attribute :>> id = "VIEW-PHY-002";
12
12
  attribute :>> name = "NetworkTopologyView";
@@ -1,4 +1,4 @@
1
- package memo_viewpoints_physical_physical_bom_view {
1
+ package memo_viewpoints_physical_views_physical_bom_view {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_viewpoints_definitions::*;
@@ -6,7 +6,7 @@ package memo_viewpoints_physical_physical_bom_view {
6
6
  private import memo_viewpoints_physical_physical_viewpoint::*;
7
7
 
8
8
  view physicalBOMView : MemoDiagramView {
9
- expose memo_viewpoints_physical_physical_bom_view::*;
9
+ expose memo_viewpoints_physical_views_physical_bom_view::*;
10
10
  attribute depth = 2;
11
11
  attribute :>> id = "VIEW-PHY-001";
12
12
  attribute :>> name = "PhysicalBOMView";