@memoarchitect/ontology 0.6.5 → 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 (319) 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/gpca-pump.kpar +0 -0
  15. package/examples/gpca-pump/methodology/gpca_methodology.sysml +7 -8
  16. package/examples/gpca-pump/methodology/gpca_profiles.sysml +89 -11
  17. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
  18. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +1 -1
  19. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +2 -2
  20. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +1 -1
  21. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +5 -5
  22. package/examples/gpca-pump/model/catalog/gpca_context.sysml +3 -8
  23. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
  24. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
  25. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +7 -6
  26. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +19 -8
  27. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +2 -2
  28. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1 -1
  29. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +1 -1
  30. package/examples/gpca-pump/model/catalog/gpca_system.sysml +34 -30
  31. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +27 -23
  32. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +1 -1
  33. package/examples/gpca-pump/model/catalog/project.sysml +21 -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 +3 -3
  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 +3 -3
  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 +4 -4
  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 +7 -7
  46. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_device_interconnect_view.sysml +3 -3
  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 +3 -3
  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 +2 -2
  52. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +3 -3
  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 +6 -6
  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 +3 -3
  60. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +3 -3
  61. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +2 -2
  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 +3 -3
  65. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +3 -3
  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 +4 -4
  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 +3 -3
  70. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +2 -2
  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 +1 -0
  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/project.sysml +24 -0
  79. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  80. package/examples/multidimensional-layers/model/{viewpoints → catalog/viewpoints/unassigned/views}/multidimensional_layers_overview.sysml +1 -1
  81. package/examples/nested-architecture-dsm/README.md +49 -0
  82. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +174 -0
  83. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +183 -0
  84. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +53 -0
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +89 -0
  86. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +90 -0
  87. package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
  88. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +49 -0
  89. package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
  90. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -6
  91. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  92. package/examples/reusable-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/reusable_instrument_overview.sysml +1 -1
  93. package/examples/software-only-medical-device/model/catalog/project.sysml +24 -0
  94. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  95. package/examples/software-only-medical-device/model/{viewpoints → catalog/viewpoints/unassigned/views}/software_only_medical_device_overview.sysml +1 -1
  96. package/examples/surgical-closure-workflow/model/catalog/project.sysml +24 -0
  97. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -19
  98. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  99. package/examples/surgical-closure-workflow/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_closure_workflow_overview.sysml +1 -1
  100. package/examples/surgical-robot/model/catalog/project.sysml +24 -0
  101. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +5 -3
  102. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  103. package/examples/surgical-robot/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_robot_overview.sysml +1 -1
  104. package/examples/sysml-diagram-samples/README.md +7 -0
  105. package/examples/sysml-diagram-samples/dhf/documents/DOC-HAR-001.md +11 -0
  106. package/examples/sysml-diagram-samples/memo.package.yaml +11 -5
  107. package/examples/sysml-diagram-samples/model/catalog/project.sysml +33 -0
  108. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  109. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/action_flow_view.sysml +18 -10
  110. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +4 -2
  111. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
  112. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/functional_flow_view.sysml +23 -20
  113. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/interconnection_view.sysml +17 -14
  114. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
  115. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/operational_behaviour_view.sysml +23 -20
  116. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +13 -0
  117. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/requirements_view.sysml +3 -1
  118. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +51 -0
  119. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/state_transition_view.sysml +3 -1
  120. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/tree_view.sysml +3 -1
  121. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +3 -1
  122. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +93 -0
  123. package/examples/temperature-alarm/model/catalog/project.sysml +24 -0
  124. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +2 -1
  125. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  126. package/examples/temperature-alarm/model/{viewpoints → catalog/viewpoints/unassigned/views}/temperature_alarm_overview.sysml +1 -1
  127. package/examples/ui-screen-regions/README.md +117 -0
  128. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +60 -0
  129. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +189 -0
  130. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +61 -0
  131. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png +0 -0
  132. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png +0 -0
  133. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png +0 -0
  134. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +51 -0
  135. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +27 -0
  136. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +27 -0
  137. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +59 -0
  138. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +25 -0
  139. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +178 -0
  140. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +93 -0
  141. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +60 -0
  142. package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
  143. package/examples/ui-screen-regions/model/catalog/traces.sysml +276 -0
  144. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  145. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +62 -0
  146. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  147. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +62 -0
  148. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  149. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +62 -0
  150. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/viewpoint.sysml +8 -0
  151. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +57 -0
  152. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +52 -0
  153. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +54 -0
  154. package/memo.manifest.yaml +2 -0
  155. package/methodologies/default/memo.package.yaml +19 -9
  156. package/methodologies/gpca/memo.package.yaml +18 -9
  157. package/ontology/memo.package.yaml +23 -8
  158. package/package.json +2 -4
  159. package/profile/memo.package.yaml +18 -9
  160. package/src/architecture/decisions/memo_decisions.sysml +7 -0
  161. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  162. package/src/architecture/functional/functions/memo_functions.sysml +5 -12
  163. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +1 -3
  164. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +18 -5
  165. package/src/architecture/implementation/ui/memo_ui.sysml +210 -27
  166. package/src/architecture/logical/interfaces/memo_interfaces.sysml +1 -2
  167. package/src/architecture/logical/structure/memo_logical_structure.sysml +71 -15
  168. package/src/architecture/operational/activities/memo_activities.sysml +0 -1
  169. package/src/architecture/operational/scenarios/memo_scenarios.sysml +2 -2
  170. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -6
  171. package/src/{compliance/change/memo_change.sysml → artifacts/configuration_management/memo_configuration_management.sysml} +5 -3
  172. package/src/artifacts/core/memo_controlled_artifacts.sysml +33 -0
  173. package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
  174. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +1 -1
  175. package/src/assurance/human_factors/memo_human_factors.sysml +1 -1
  176. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +11 -0
  177. package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
  178. package/src/assurance/verification_validation/memo_assurance.sysml +1 -1
  179. package/src/core/annotations/memo_annotations.sysml +77 -0
  180. package/src/core/common/memo_common.sysml +20 -3
  181. package/src/core/consistency_rules/consistency_rules.sysml +7 -0
  182. package/src/core/dimensions/dimensions.sysml +5 -1
  183. package/src/core/enumerations/memo_enumerations.sysml +41 -6
  184. package/src/core/methodology_scope/methodology_scope.sysml +7 -15
  185. package/src/core/relationships/memo_relationships.sysml +4 -2
  186. package/src/memo_namespaces.sysml +97 -67
  187. package/src/methodology/core/memo_core.sysml +45 -2
  188. package/src/methodology/profiles/memo_profiles.sysml +30 -40
  189. package/src/methodology/workflow/memo_workflow.sysml +7 -2
  190. package/src/rules/closure/closure_rules.sysml +104 -31
  191. package/src/rules/coverage/coverage_rules.sysml +4 -256
  192. package/src/rules/crosslayer/cross_layer_rules.sysml +6 -15
  193. package/src/rules/lifecycle/lifecycle_rules.sysml +4 -39
  194. package/src/rules/ontology/ontology_invariants.sysml +30 -73
  195. package/src/rules/quantitative/quantitative_rules.sysml +8 -8
  196. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +7 -0
  197. package/src/viewpoints/clinical/clinical_viewpoint.sysml +3 -1
  198. package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
  199. package/src/viewpoints/context/context_viewpoint.sysml +3 -1
  200. package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
  201. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +3 -1
  202. package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view → views/cybersecurity_assessment_view}/cybersecurity_assessment_view.sysml +2 -2
  203. package/src/viewpoints/cybersecurity/{threat_model_view → views/threat_model_view}/threat_model_view.sysml +2 -2
  204. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +4 -0
  205. package/src/viewpoints/functional/functional_viewpoint.sysml +3 -1
  206. package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +2 -2
  207. package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +2 -2
  208. package/src/viewpoints/logical/logical_viewpoint.sysml +3 -1
  209. package/src/viewpoints/logical/{logical_architecture_view → views/logical_architecture_view}/logical_architecture_view.sysml +2 -2
  210. package/src/viewpoints/operational/operational_viewpoint.sysml +3 -1
  211. package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +2 -2
  212. package/src/viewpoints/physical/physical_viewpoint.sysml +3 -1
  213. package/src/viewpoints/physical/{network_topology_view → views/network_topology_view}/network_topology_view.sysml +2 -2
  214. package/src/viewpoints/physical/{physical_bom_view → views/physical_bom_view}/physical_bom_view.sysml +2 -2
  215. package/src/viewpoints/rendering/memo_rendering.sysml +354 -0
  216. package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -1
  217. package/src/viewpoints/requirements/{requirements_traceability_view → views/requirements_traceability_view}/requirements_traceability_view.sysml +2 -2
  218. package/src/viewpoints/risk/risk_viewpoint.sysml +3 -1
  219. package/src/viewpoints/risk/{risk_chain_view → views/risk_chain_view}/risk_chain_view.sysml +2 -2
  220. package/src/viewpoints/software/software_viewpoint.sysml +3 -1
  221. package/src/viewpoints/software/{software_architecture_view → views/software_architecture_view}/software_architecture_view.sysml +2 -2
  222. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +28 -0
  223. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +23 -0
  224. package/src/viewpoints/usability/usability_viewpoint.sysml +3 -1
  225. package/src/viewpoints/usability/{usability_engineering_view → views/usability_engineering_view}/usability_engineering_view.sysml +2 -2
  226. package/src/viewpoints/verification/verification_viewpoint.sysml +3 -1
  227. package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +2 -2
  228. package/templates/connected-device/memo.package.yaml +11 -5
  229. package/templates/connected-device/model/catalog/project.sysml +28 -0
  230. package/templates/connected-device/syside.toml +1 -1
  231. package/templates/default/memo.package.yaml +11 -5
  232. package/templates/default/model/catalog/project.sysml +28 -0
  233. package/templates/default/syside.toml +1 -1
  234. package/templates/infusion-pump/memo.package.yaml +11 -5
  235. package/templates/infusion-pump/model/catalog/project.sysml +28 -0
  236. package/templates/infusion-pump/syside.toml +1 -1
  237. package/templates/monitoring-device/memo.package.yaml +11 -5
  238. package/templates/monitoring-device/model/catalog/project.sysml +28 -0
  239. package/templates/monitoring-device/syside.toml +1 -1
  240. package/templates/samd/memo.package.yaml +11 -5
  241. package/templates/samd/model/catalog/project.sysml +28 -0
  242. package/templates/samd/syside.toml +1 -1
  243. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +0 -3
  244. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +0 -3
  245. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +0 -3
  246. package/examples/gpca-pump/memo.config.yaml +0 -9
  247. package/examples/gpca-pump/methodology/gpca_scope.sysml +0 -25
  248. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +0 -3
  249. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +0 -3
  250. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +0 -4
  251. package/examples/reusable-instrument/model/reusable_instrument.sysml +0 -4
  252. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +0 -4
  253. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +0 -4
  254. package/examples/surgical-robot/model/surgical_robot.sysml +0 -4
  255. package/examples/temperature-alarm/model/temperature_alarm.sysml +0 -4
  256. package/ontology/memo.rendering.yaml +0 -84
  257. package/src/compliance/artifacts/memo_artifacts.sysml +0 -12
  258. package/src/compliance/document_views/memo_document_views.sysml +0 -7
  259. package/src/compliance/iso14971/risk_management_file.sysml +0 -16
  260. package/src/compliance/postmarket/memo_postmarket.sysml +0 -16
  261. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
  262. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +0 -0
  263. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +0 -0
  264. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +0 -0
  265. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +0 -0
  266. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +0 -0
  267. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +0 -0
  268. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +0 -0
  269. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +0 -0
  270. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +0 -0
  271. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +0 -0
  272. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +0 -0
  273. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +0 -0
  274. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +0 -0
  275. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +0 -0
  276. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.md +0 -0
  277. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/change-control.md +0 -0
  278. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/detailed-design.md +0 -0
  279. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +0 -0
  280. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +0 -0
  281. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +0 -0
  282. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +0 -0
  283. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +0 -0
  284. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/srs.md +0 -0
  285. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +0 -0
  286. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.md +0 -0
  287. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/formative-eval.md +0 -0
  288. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/summative-eval.md +0 -0
  289. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/task-analysis.md +0 -0
  290. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.md +0 -0
  291. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ui-spec.md +0 -0
  292. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/urra.md +0 -0
  293. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/use-spec.md +0 -0
  294. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fmea.md +0 -0
  295. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fta.md +0 -0
  296. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/har.md +0 -0
  297. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-benefit.md +0 -0
  298. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-matrix.md +0 -0
  299. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmp.md +0 -0
  300. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmr.md +0 -0
  301. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/approval-block.md +0 -0
  302. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/document-control-header.md +0 -0
  303. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/references-section.md +0 -0
  304. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/revision-history-table.md +0 -0
  305. /package/templates/connected-device/{src → model/catalog}/architecture/system.sysml +0 -0
  306. /package/templates/connected-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  307. /package/templates/connected-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  308. /package/templates/default/{src → model/catalog}/architecture/system.sysml +0 -0
  309. /package/templates/default/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  310. /package/templates/default/{src → model/catalog}/assurance/requirements.sysml +0 -0
  311. /package/templates/infusion-pump/{src → model/catalog}/architecture/system.sysml +0 -0
  312. /package/templates/infusion-pump/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  313. /package/templates/infusion-pump/{src → model/catalog}/assurance/requirements.sysml +0 -0
  314. /package/templates/monitoring-device/{src → model/catalog}/architecture/system.sysml +0 -0
  315. /package/templates/monitoring-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  316. /package/templates/monitoring-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  317. /package/templates/samd/{src → model/catalog}/architecture/system.sysml +0 -0
  318. /package/templates/samd/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  319. /package/templates/samd/{src → model/catalog}/assurance/requirements.sysml +0 -0
@@ -0,0 +1,54 @@
1
+ package memo_examples_ui_screen_regions_viewpoints_ui_layout_views_ui_region_trace {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_core_relationships::*;
5
+ private import memo_core_annotations::*;
6
+ private import memo_architecture_functional_functions::*;
7
+ private import memo_architecture_implementation_ui::*;
8
+ private import memo_assurance_requirements::*;
9
+ private import memo_assurance_requirements_needs::*;
10
+ private import memo_assurance_human_factors::*;
11
+ private import memo_assurance_safety_risk::*;
12
+ private import memo_assurance_verification_validation::*;
13
+ private import memo_artifacts_core::*;
14
+
15
+ private import memo_viewpoints_definitions::*;
16
+ private import memo_core_enumerations::*;
17
+ private import memo_viewpoints_ui_layout_views_screen_layout_view::*;
18
+ private import memo_examples_ui_screen_regions_viewpoints_ui_layout::*;
19
+ private import memo_examples_ui_screen_regions_architecture_implementation_ui::*;
20
+ private import memo_examples_ui_screen_regions_architecture_functional_functions::*;
21
+ private import memo_examples_ui_screen_regions_assurance_requirements::*;
22
+ private import memo_examples_ui_screen_regions_assurance_requirements_needs::*;
23
+ private import memo_examples_ui_screen_regions_assurance_human_factors::*;
24
+ private import memo_examples_ui_screen_regions_assurance_safety_risk::*;
25
+ private import memo_examples_ui_screen_regions_assurance_verification_validation::*;
26
+ private import memo_examples_ui_screen_regions_artifacts_assets::*;
27
+ private import memo_examples_ui_screen_regions_artifacts_reviews_comments::*;
28
+ private import memo_examples_ui_screen_regions_artifacts_reviews_rationales::*;
29
+ private import memo_examples_ui_screen_regions_artifacts_reviews_notes::*;
30
+ private import memo_examples_ui_screen_regions_traces::*;
31
+
32
+ // The same content as a graph, for reviewers who want to read the trace
33
+ // chain rather than look at the screen.
34
+ view uiRegionTrace : MemoDiagramView {
35
+ expose memo_examples_ui_screen_regions_architecture_implementation_ui::*;
36
+ expose memo_examples_ui_screen_regions_architecture_functional_functions::*;
37
+ expose memo_examples_ui_screen_regions_assurance_requirements::*;
38
+ expose memo_examples_ui_screen_regions_assurance_requirements_needs::*;
39
+ expose memo_examples_ui_screen_regions_assurance_human_factors::*;
40
+ expose memo_examples_ui_screen_regions_assurance_safety_risk::*;
41
+ expose memo_examples_ui_screen_regions_assurance_verification_validation::*;
42
+ expose memo_examples_ui_screen_regions_artifacts_assets::*;
43
+ expose memo_examples_ui_screen_regions_artifacts_reviews_comments::*;
44
+ expose memo_examples_ui_screen_regions_artifacts_reviews_rationales::*;
45
+ expose memo_examples_ui_screen_regions_artifacts_reviews_notes::*;
46
+ expose memo_examples_ui_screen_regions_traces::*;
47
+ attribute :>> id = "UIV-001";
48
+ attribute depth = 3;
49
+ attribute :>> title = "UI Region Traceability";
50
+ attribute :>> viewKind = DiagramViewKind::general;
51
+ attribute :>> diagramType = "bdd";
52
+ part :>> viewpointDefinition = uiLayoutViewpoint;
53
+ }
54
+ }
@@ -17,5 +17,7 @@ templates:
17
17
  examples:
18
18
  gpca: ./examples/gpca-pump
19
19
  standard-sysml-diagrams: ./examples/sysml-diagram-samples
20
+ ui-screen-regions: ./examples/ui-screen-regions
21
+ nested-architecture-dsm: ./examples/nested-architecture-dsm
20
22
  extension-template: ./examples/extensions/template
21
23
  clinical-extension: ./examples/extensions/clinical
@@ -1,9 +1,19 @@
1
- name: "@memoarchitect/methodology-default"
2
- version: "0.6.4"
3
- type: methodology
4
- extends: "@memoarchitect/ontology"
5
- sysmlDir: "../../src/methodology"
6
- description: "MEMO default medical-device methodology — selects viewpoints/views/DHF documents from @memoarchitect/ontology and adds rules, gates, patterns, profiles, and workflow."
7
- license: "MIT"
8
- tags: ["methodology", "medical-device", "iso-14971", "iec-62304", "memo"]
9
- usage: ["viewpoints", "views", "rules", "gates", "patterns", "profiles", "workflow", "dhf"]
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/methodology-default'
10
+ version: 0.7.0
11
+ description: "MEMO default medical-device methodology \u2014 selects viewpoints/views/DHF documents from @memoarchitect/ontology and adds rules, gates, patterns, profiles, and workflow."
12
+ license: MIT
13
+ tags:
14
+ - methodology
15
+ - medical-device
16
+ - iso-14971
17
+ - iec-62304
18
+ - memo
19
+ sysmlDir: ../../src/methodology
@@ -1,9 +1,18 @@
1
- name: "@memoarchitect/methodology-gpca"
2
- version: "0.6.4"
3
- type: methodology
4
- extends: "@memoarchitect/methodology-default"
5
- sysmlDir: "../../examples/gpca-pump/methodology"
6
- description: "GPCA infusion pump methodology — subtraction-based tailoring of @memoarchitect/methodology-default for the non-networked prototype variant. Excludes cybersecurity and SOUP."
7
- license: "MIT"
8
- tags: ["methodology", "medical-device", "gpca", "tailoring"]
9
- usage: ["viewpoints", "views", "rules", "gates", "patterns", "profiles", "workflow", "dhf"]
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/methodology-gpca'
10
+ version: 0.7.0
11
+ description: "GPCA infusion pump methodology \u2014 subtraction-based tailoring of @memoarchitect/methodology-default for the non-networked prototype variant. Excludes cybersecurity and SOUP."
12
+ license: MIT
13
+ tags:
14
+ - methodology
15
+ - medical-device
16
+ - gpca
17
+ - tailoring
18
+ sysmlDir: ../../examples/gpca-pump/methodology
@@ -1,8 +1,23 @@
1
- name: "@memoarchitect/ontology"
2
- version: "0.6.4"
3
- type: ontology
4
- description: "MEMO — the single canonical medical-device ontology: core semantics, the Arcadia-inspired architecture layers (context, requirements, behavior, structure, interfaces, risk, cybersecurity, assurance, …), compliance, viewpoints, views, and invariant rules. One namespace (memo::), one src/ tree."
5
- license: "MIT"
6
- tags: ["mbse", "sysml-v2", "arcadia", "iso-42010", "medical-device", "ontology", "iso-14971", "iec-62304"]
7
- usage: ["kinds", "relationships"]
8
- sysmlDir: "../src"
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/ontology'
10
+ version: 0.7.0
11
+ description: "MEMO \u2014 the single canonical medical-device ontology: core semantics, the Arcadia-inspired architecture layers (context, requirements, behavior, structure, interfaces, risk, cybersecurity,\
12
+ \ assurance, \u2026), compliance, viewpoints, views, and invariant rules. One namespace (memo::), one src/ tree."
13
+ license: MIT
14
+ tags:
15
+ - mbse
16
+ - sysml-v2
17
+ - arcadia
18
+ - iso-42010
19
+ - medical-device
20
+ - ontology
21
+ - iso-14971
22
+ - iec-62304
23
+ sysmlDir: ../src
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@memoarchitect/ontology",
3
- "version": "0.6.5",
3
+ "version": "0.7.0",
4
4
  "packageManager": "pnpm@9.15.0",
5
- "description": "MEMO — Medical Engineering Modelling Ontology. Pure SysML v2 medical-device ontology with native constraints, portable to any conformant SysML v2 tool (SysIDE, SysON, sysand).",
5
+ "description": "MEMO \u2014 Medical Engineering Modelling Ontology. Pure SysML v2 medical-device ontology with native constraints, portable to any conformant SysML v2 tool (SysIDE, SysON, sysand).",
6
6
  "scripts": {
7
7
  "build": "bash scripts/build-kpar.sh",
8
8
  "check": "bash scripts/build-kpar.sh",
@@ -49,14 +49,12 @@
49
49
  "LICENSE",
50
50
  "memo.manifest.yaml",
51
51
  "ontology/memo.package.yaml",
52
- "ontology/memo.rendering.yaml",
53
52
  "profile/memo.package.yaml",
54
53
  "methodologies/default/memo.package.yaml",
55
54
  "methodologies/gpca/memo.package.yaml",
56
55
  "src/assurance/",
57
56
  "src/architecture/",
58
57
  "src/artifacts/",
59
- "src/compliance/",
60
58
  "src/core/",
61
59
  "src/methodology/archetypes/",
62
60
  "src/methodology/core/",
@@ -1,9 +1,18 @@
1
- name: "@memoarchitect/medical-modeling-profile"
2
- version: "0.6.4"
3
- type: profile
4
- extends:
5
- - "@memoarchitect/ontology"
6
- description: "Closure rules and viewpoints for medical device modeling"
7
- license: "MIT"
8
- tags: ["medical-device", "iso-14971", "iec-62304", "iso-13485", "modeling-profile"]
9
- usage: ["rules", "viewpoints"]
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/medical-modeling-profile'
10
+ version: 0.7.0
11
+ description: Closure rules and viewpoints for medical device modeling
12
+ license: MIT
13
+ tags:
14
+ - medical-device
15
+ - iso-14971
16
+ - iec-62304
17
+ - iso-13485
18
+ - modeling-profile
@@ -3,10 +3,17 @@ package memo_architecture_decisions {
3
3
 
4
4
  private import memo_core_common::*;
5
5
  private import memo_core_enumerations::*;
6
+ private import memo_core_relationships::*;
7
+ private import memo_artifacts_core::*;
6
8
  part def DesignDecision specializes MemoPart {
7
9
  attribute decisionKind : String;
8
10
  attribute alternatives : String;
9
11
  attribute selectedOption : String;
10
12
  attribute decisionStatus : DesignDecisionStatusKind;
11
13
  }
14
+
15
+ connection def DecisionRecordedInADR :> MemoRelationship {
16
+ end decision : DesignDecision;
17
+ end adr : ADRArtifact;
18
+ }
12
19
  }
@@ -42,7 +42,7 @@ package memo_architecture_functional_behavior {
42
42
  attribute wcetMs : String;
43
43
  attribute safetyRelevant : Boolean;
44
44
  }
45
- part def ActivityFlow specializes ArchitectureElement {
45
+ action def ActivityFlow specializes MemoAction {
46
46
  attribute flowKind : ActivityFlowKind;
47
47
  attribute guardCondition : String;
48
48
  attribute weight : String;
@@ -28,11 +28,11 @@ package memo_architecture_functional_functions {
28
28
  ref performedFunction : SystemFunction[0..1];
29
29
  }
30
30
 
31
- // Typed transfer of information/command/status/etc. between functions
32
- // (renamed from LogicalFlow — it belongs to the functional perspective).
31
+ // Named traceable route between functions. Native `flow of` usages carry
32
+ // the transported item; this element exists for budgets and assurance
33
+ // attributes that a flow usage cannot own.
33
34
  part def FunctionalExchange specializes ArchitectureElement {
34
35
  attribute flowKind : FlowKind;
35
- attribute direction : DirectionKind;
36
36
  attribute latencyBudgetMs : Real;
37
37
  attribute staleAfterMs : Real;
38
38
  attribute integrityLevel : String;
@@ -46,15 +46,11 @@ package memo_architecture_functional_functions {
46
46
  // flows are part of functional architecture, never logical structure.
47
47
  part def FunctionalFlow specializes ArchitectureElement {
48
48
  attribute flowCategory : FunctionalFlowKind;
49
- ref startFunction : SystemFunction[0..1];
50
- ref endFunction : SystemFunction[0..1];
51
49
  attribute endToEndLatencyBudgetMs : String;
52
50
  attribute safetyRelevant : Boolean;
53
51
  attribute securityRelevant : Boolean;
54
- ref includedFunctions : SystemFunction[0..*];
55
52
  }
56
- part def FunctionalFlowStep specializes MemoPart {
57
- attribute stepOrder : String;
53
+ action def FunctionalFlowStep specializes MemoAction {
58
54
  ref function : SystemFunction[0..1];
59
55
  ref exchange : FunctionalExchange[0..1];
60
56
  ref item exchangedItem : MemoExchangeItem[0..1];
@@ -63,10 +59,7 @@ package memo_architecture_functional_functions {
63
59
  // The functional-layer scenario selects one functional route and realizes
64
60
  // an operative scenario. It is the "what the system does" path, not a
65
61
  // logical component interaction.
66
- part def FunctionalScenario specializes MemoScenario {
67
- ref functionSequence : SystemFunction[0..*];
68
- ref functionalFlows : FunctionalExchange[0..*];
69
- attribute sequenceDiagramRef : String;
62
+ action def FunctionalScenario specializes MemoScenario {
70
63
  ref selectedFlow : FunctionalFlow[0..1];
71
64
  }
72
65
  connection def IncludesStep :> MemoRelationship {
@@ -25,11 +25,9 @@ package memo_architecture_implementation_software_runtime {
25
25
  enum messageBroker;
26
26
  }
27
27
 
28
- part def SoftwareComponent specializes ArchitectureElement {
28
+ part def SoftwareComponent specializes SoftwareItem {
29
29
  attribute runtimeKind : RuntimeKind;
30
30
  attribute responsibility : String;
31
- attribute safetyClass : SafetyClassKind;
32
- attribute complexity : ComplexityKind;
33
31
  attribute periodMs : Real;
34
32
  attribute deadlineMs : Real;
35
33
  attribute wcetMs : Real;
@@ -9,10 +9,25 @@ package memo_architecture_implementation_software_structure {
9
9
  private import memo_core_relationships::*;
10
10
  private import memo_architecture_logical_structure::*;
11
11
 
12
- part def SoftwareSystem specializes ArchitectureElement {
13
- attribute version : String;
12
+ // IEC 62304 §3.25: a SOFTWARE ITEM is "any identifiable part of a computer
13
+ // program". It is the general, recursive term — a SOFTWARE SYSTEM (§3.24)
14
+ // is the top item and a SOFTWARE UNIT (§3.26) is one not subdivided
15
+ // further; both are software items. So this is a base, not a fourth
16
+ // sibling of system/module/component.
17
+ //
18
+ // It exists because §4.3 classifies, and §5.3–5.4 decompose, SOFTWARE
19
+ // ITEMS — not "modules" or "components" specifically. Anything the
20
+ // standard obliges at item level therefore belongs here, and every
21
+ // software view inherits it rather than re-declaring it: the code view
22
+ // (SoftwareModule), the runtime view (SoftwareComponent), the system, and
23
+ // the user interface (memo_architecture_implementation_ui::UIElement).
24
+ abstract part def SoftwareItem specializes ArchitectureElement {
14
25
  attribute safetyClass : SafetyClassKind;
15
26
  attribute complexity : ComplexityKind;
27
+ }
28
+
29
+ part def SoftwareSystem specializes SoftwareItem {
30
+ attribute version : String;
16
31
  attribute operatingSystem : String;
17
32
  }
18
33
 
@@ -29,11 +44,9 @@ package memo_architecture_implementation_software_structure {
29
44
  enum soup;
30
45
  }
31
46
 
32
- part def SoftwareModule specializes ArchitectureElement {
47
+ part def SoftwareModule specializes SoftwareItem {
33
48
  attribute moduleKind : ModuleKind;
34
49
  attribute responsibility : String;
35
- attribute safetyClass : SafetyClassKind;
36
- attribute complexity : ComplexityKind;
37
50
  // module-kind-specific detail (set only for the relevant moduleKind)
38
51
  attribute iec62304Role : String[0..1];
39
52
  attribute implementationLanguage : String[0..1];
@@ -14,22 +14,81 @@ package memo_architecture_implementation_ui {
14
14
  private import memo_architecture_operational_scenarios::*;
15
15
  private import memo_architecture_operational_use_cases::*;
16
16
  private import memo_architecture_functional_functions::*;
17
+ private import memo_architecture_implementation_software_structure::*;
18
+ private import memo_architecture_implementation_hardware_common::*;
17
19
  private import memo_assurance_human_factors::*;
18
20
 
21
+ // Every concrete UI form, holding and held alike. A screen is not a
22
+ // different KIND of thing from a button — it is a UIElement that happens to
23
+ // contain others, exactly as an assembly is a part that contains parts.
24
+ // The forms below are classifications, not classes, so one tree carries the
25
+ // whole interface.
19
26
  enum def UIElementFormKind {
27
+ // ── forms that hold other elements ──
28
+ enum screen;
29
+ enum dialog;
30
+ enum panel;
31
+ enum menu;
32
+ enum tab;
33
+ enum drawer;
34
+ enum wizardStep;
35
+ // ── controls the user acts on ──
36
+ // Rendered controls only. A knob, toggle, lamp, or buzzer the user
37
+ // touches is not software: it is an OperatorInterfaceElement below.
20
38
  enum button;
21
39
  enum field;
22
40
  enum selector;
23
- enum knob;
24
- enum switchControl;
25
41
  enum slider;
42
+ // ── forms that present information ──
26
43
  enum table;
27
44
  enum chart;
28
45
  enum icon;
29
- enum indicatorLamp;
30
- enum audibleIndicator;
31
- enum hapticIndicator;
32
46
  enum textMessage;
47
+ // ── chrome ──
48
+ // Non-functional: a rule, a background, a brand mark. Declared, never
49
+ // merely implied — CR-MED-110 exempts `decoration` from needing a
50
+ // design record, so an element left unclassified fails rather than
51
+ // slipping through as scenery.
52
+ enum decoration;
53
+ }
54
+
55
+ // ─── Screen geometry ─────────────────────────────────────────
56
+ // Position and size of a UIElement inside its PARENT element, each value
57
+ // normalized to 0..1 of the parent's box — not pixels. Two consequences
58
+ // are wanted: an element survives a re-capture at a different resolution
59
+ // or device scale, and a child's box is stated against its parent, which
60
+ // is exactly what the containment tree already asserts. Absolute pixels
61
+ // stay recoverable from the ScreenCapture's pixelWidth / pixelHeight.
62
+ attribute def RegionBounds {
63
+ attribute x : Real;
64
+ attribute y : Real;
65
+ attribute width : Real;
66
+ attribute height : Real;
67
+ }
68
+
69
+ // How an element appears relative to its parent and siblings. It records
70
+ // design intent a bare rectangle cannot: an element whose box escapes its
71
+ // parent and covers its siblings is a defect if it is `inline` and correct
72
+ // if it is `overlay`, and the geometry alone does not say which. A
73
+ // renderer reads it to decide what to clip and what to draw on top; a
74
+ // reviewer reads it to know whether an overlap is intended.
75
+ enum def UIDisclosureKind {
76
+ enum inline; // laid out inside the parent, sharing space with siblings
77
+ enum overlay; // dropdown, popover, modal — drawn OVER parent and siblings
78
+ enum transient; // tooltip, toast — appears over everything, then withdraws
79
+ enum scrolled; // inside the parent, but beyond its viewport until scrolled
80
+ enum conditional; // rendered only while a stated condition holds
81
+ }
82
+
83
+ // How the element's bounds were obtained. Automatic boundary detection
84
+ // PROPOSES; a reviewer DISPOSES. In a regulated review the reader must be
85
+ // able to see which boxes a human confirmed and which the tool guessed, so
86
+ // that provenance is model content and not a workbench-only flag.
87
+ enum def BoundsDetectionKind {
88
+ enum manual;
89
+ enum automatic;
90
+ enum automaticConfirmed;
91
+ enum imported;
33
92
  }
34
93
 
35
94
  // The interaction intents a step or action can carry (§18).
@@ -54,20 +113,68 @@ package memo_architecture_implementation_ui {
54
113
  attribute uiTechnology : String;
55
114
  }
56
115
 
57
- part def UIContainer specializes ArchitectureElement {
58
- attribute containerKind : String;
59
- attribute navigationRole : String;
116
+ // What a rendered control and a physical one genuinely share: a label, an
117
+ // accessibility story, and — when they annunciate — an alarm character.
118
+ // The base exists so that the §18 traceability relations can type against
119
+ // "something the user interacts with" rather than against software
120
+ // specifically. Without it a use error on a knob would be unmodellable,
121
+ // because ErrorAtElement would only accept a UIElement.
122
+ abstract part def InteractionElement specializes ArchitectureElement {
123
+ attribute labelText : String;
124
+ attribute accessibilitySummary : String;
125
+ // alarm annunciation (optional; IEC 60601-1-8)
126
+ attribute alarmPriority : NotificationPriorityKind[0..1];
127
+ attribute annunciationModality : String;
128
+ attribute silenceable : Boolean;
60
129
  }
61
130
 
62
- // One UIElement. The widget form — screen (field/table/chart) or physical
63
- // (knob/switch/indicatorLamp/haptic) — is the `formKind` enum, not a
64
- // subclass. Input/output/navigation/alarm/display/physical-control
65
- // descriptors are optional attributes; a physical control's mechanical
66
- // realization is a hardware part linked by ControlImplementedBy.
67
- part def UIElement specializes ArchitectureElement {
131
+
132
+ // One UIElement — the single UI part type. The widget form — holding
133
+ // (screen/panel/dialog), acting (button/knob/slider), presenting
134
+ // (field/table/chart), physical (knob/switch/indicatorLamp/haptic), or
135
+ // decorative — is the `formKind` enum, not a subclass.
136
+ // Input/output/navigation/alarm/display/physical-control descriptors are
137
+ // optional attributes; a physical control's mechanical realization is a
138
+ // hardware part linked by ControlImplementedBy.
139
+ //
140
+ // Composition is the ordinary `Composes` relation, so a screen's element
141
+ // tree is an ordinary part tree: CR-ONT-001 already forbids cycles in it,
142
+ // impact analysis already walks it, and requirements, functions, use
143
+ // errors, and risk controls already trace to it. Screen layout adds four
144
+ // numbers to that tree — it does not add a tree.
145
+ //
146
+ // A UIElement IS a SOFTWARE ITEM (IEC 62304 §3.25) and specializes the
147
+ // SoftwareItem base, inheriting safetyClass and complexity, so the
148
+ // interface is classified and decomposed like the software it is.
149
+ //
150
+ // It specializes SoftwareItem and NOT SoftwareModule: the module view is
151
+ // CODE, and a screen is not a source module. Runtime processes are
152
+ // SoftwareComponent, code is SoftwareModule, and the UI is a third view of
153
+ // the same software — a sibling of those, not a kind of either.
154
+ part def UIElement specializes SoftwareItem, InteractionElement {
68
155
  attribute formKind : UIElementFormKind;
69
- attribute labelText : String;
70
- attribute accessibilitySummary : String;
156
+ // ── screen layout (optional; set for elements that are laid out) ──
157
+ // Bounds are relative to the parent element in the Composes tree; a
158
+ // root screen's bounds are the full frame.
159
+ attribute bounds : RegionBounds[0..1];
160
+ attribute disclosureKind : UIDisclosureKind[0..1];
161
+ // The condition under which the element renders; meaningful when
162
+ // disclosureKind is `conditional`.
163
+ attribute visibilityCondition : String;
164
+ // Boundary colour as a CSS colour token. Presentation, but modelled: a
165
+ // review print, an exported figure, and the workbench must agree on
166
+ // which box is which, and a colour assigned only in a tool session does
167
+ // not survive the export.
168
+ attribute boundaryColor : String;
169
+ // Capture-relative fill transparency for region review overlays. A
170
+ // modelled value keeps interactive review and exported figures aligned.
171
+ attribute boundaryOpacity : Real[0..1];
172
+ attribute detectionMethod : BoundsDetectionKind[0..1];
173
+ attribute detectionConfidence : Real[0..1];
174
+ attribute confirmedBy : String;
175
+ attribute confirmedAt : String;
176
+ // ── role of a holding form (optional) ──
177
+ attribute navigationRole : String;
71
178
  // input descriptors (optional)
72
179
  attribute inputConstraints : String;
73
180
  attribute defaultValue : String;
@@ -75,15 +182,72 @@ package memo_architecture_implementation_ui {
75
182
  attribute updateRate : String;
76
183
  attribute unitsDisplayed : String;
77
184
  attribute informationContent : String;
78
- // navigation (optional)
79
- attribute navigationTarget : String;
80
- // alarm annunciation (optional)
81
- attribute alarmPriority : NotificationPriorityKind[0..1];
82
- attribute annunciationModality : String;
83
- attribute silenceable : Boolean;
84
- // physical control (optional)
185
+ }
186
+
187
+ // ─── Physical operator interface ─────────────────────────────
188
+ // The hardware the user actually touches and reads. IEC 60601-1 marks
189
+ // "controls and instruments" and defines OPERATOR; this is that surface,
190
+ // covering both directions — what the operator actuates and what the
191
+ // device shows back — because a front panel is one interface, not two.
192
+ //
193
+ // It is a PhysicalComponent, so it inherits part number, material, and the
194
+ // ISO 10993-1 patient-contact characterization that a touched surface
195
+ // needs and that software can never have. That inheritance is the reason
196
+ // these forms had to leave UIElement: as UIElementFormKind members they
197
+ // were software items with no way to state any of it.
198
+ enum def OperatorInterfaceFormKind {
199
+ // ── actuated by the operator ──
200
+ enum knob;
201
+ enum dial;
202
+ enum pushButton;
203
+ enum toggleSwitch;
204
+ enum rockerSwitch;
205
+ enum lever;
206
+ enum physicalSlider;
207
+ enum keypad;
208
+ enum footPedal;
209
+ enum touchSurface;
210
+ // ── presented to the operator ──
211
+ enum indicatorLamp;
212
+ enum gauge;
213
+ enum audibleIndicator;
214
+ enum hapticIndicator;
215
+ enum printedMarking;
216
+ }
217
+
218
+ part def OperatorInterfaceElement specializes PhysicalComponent, InteractionElement {
219
+ attribute formKind : OperatorInterfaceFormKind;
220
+ // actuation (optional; set for actuated forms)
85
221
  attribute actuationForce : String;
222
+ attribute actuationTravel : String;
86
223
  attribute guardedAgainstInadvertentActuation : Boolean;
224
+ attribute tactileFeedback : String;
225
+ // presentation (optional; set for presented forms)
226
+ attribute legendText : String;
227
+ attribute luminanceOrVolume : String;
228
+ }
229
+
230
+ // ─── Captured evidence ───────────────────────────────────────
231
+ // One image of one screen. MemoEvidence, not ArchitectureElement: it
232
+ // records what a specific build actually displayed at a specific time,
233
+ // which is the provenance a design review or a usability engineering file
234
+ // needs before it can rely on the picture. The screen it depicts is an
235
+ // ordinary UIElement with formKind = screen.
236
+ part def ScreenCapture specializes MemoEvidence {
237
+ attribute imageUri : String;
238
+ // Content hash of the image bytes. The screenshot is the evidence, so
239
+ // it must be tamper-evident: a DHF reference to a mutable file is not
240
+ // a reference to anything.
241
+ attribute imageHash : String;
242
+ attribute pixelWidth : Integer;
243
+ attribute pixelHeight : Integer;
244
+ attribute captureDate : String;
245
+ // Which build produced this rendering. A screenshot without a build is
246
+ // undated design intent, not evidence of the device.
247
+ attribute capturedBuild : String;
248
+ // Device, viewport, locale, theme, user role — everything that changes
249
+ // what the screen shows without changing the software.
250
+ attribute captureContext : String;
87
251
  }
88
252
 
89
253
  // UI state is presentation state — distinct from system/device state.
@@ -109,7 +273,7 @@ package memo_architecture_implementation_ui {
109
273
  attribute exitPoint : String;
110
274
  }
111
275
 
112
- part def UIScenario specializes MemoScenario {
276
+ action def UIScenario specializes MemoScenario {
113
277
  ref parentFlow : InteractionFlow[0..1];
114
278
  }
115
279
 
@@ -122,7 +286,7 @@ package memo_architecture_implementation_ui {
122
286
  connection def DataBinding :> MemoRelationship {
123
287
  attribute bindingExpression : String;
124
288
  attribute refreshPolicy : String;
125
- end boundElement : UIElement;
289
+ end boundElement : InteractionElement;
126
290
  end dataSource : MemoPart;
127
291
  }
128
292
  connection def PresentsState :> MemoRelationship {
@@ -130,9 +294,28 @@ package memo_architecture_implementation_ui {
130
294
  end uiState : UIState;
131
295
  }
132
296
 
297
+ // ── Screen layout relations ──────────────────────────────────
298
+ // Which modelled screen an image is a rendering of.
299
+ connection def CapturesScreen :> MemoRelationship {
300
+ end capture : ScreenCapture;
301
+ end screen : UIElement;
302
+ }
303
+
304
+ // Activating this element opens another screen. This is NAVIGATION, not
305
+ // containment — the opened screen is not laid out inside the element, so
306
+ // it is not a Composes child and the geometric rules do not relate them.
307
+ // Conflating the two was the mistake that made "clicking takes you to a
308
+ // child view" look like spatial nesting; it is a separate frame reached
309
+ // from here, and only this relation says so.
310
+ connection def NavigatesTo :> MemoRelationship {
311
+ attribute triggerGesture : String;
312
+ end sourceElement : UIElement;
313
+ end targetScreen : UIElement;
314
+ }
315
+
133
316
  // ── §18 traceability ─────────────────────────────────────────
134
317
  connection def ElementTriggersAction :> MemoRelationship {
135
- end element : UIElement;
318
+ end element : InteractionElement;
136
319
  end triggeredAction : UIAction;
137
320
  }
138
321
  connection def ActionInvokesFunction :> MemoRelationship {
@@ -148,7 +331,7 @@ package memo_architecture_implementation_ui {
148
331
  // completing the OperativeScenario → FunctionalScenario → UIScenario chain.
149
332
  connection def ErrorAtElement :> MemoRelationship {
150
333
  end useError : UseError;
151
- end element : UIElement;
334
+ end element : InteractionElement;
152
335
  }
153
336
  // A risk control implemented by a UI element or by task design
154
337
  // (confirmation dialog, lockout, guarded control).