@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,51 @@
1
+ // Review comments. Queryable model content, not source-code comments and not
2
+ // Architect-local state: each one traces to an addressable model element.
3
+ package memo_examples_ui_screen_regions_artifacts_reviews_comments {
4
+ private import ScalarValues::*;
5
+
6
+ private import memo_core_relationships::*;
7
+ private import memo_architecture_functional_functions::*;
8
+ private import memo_architecture_implementation_ui::*;
9
+ private import memo_assurance_requirements::*;
10
+ private import memo_assurance_requirements_needs::*;
11
+ private import memo_assurance_human_factors::*;
12
+ private import memo_assurance_safety_risk::*;
13
+ private import memo_assurance_verification_validation::*;
14
+ private import memo_artifacts_core::*;
15
+
16
+ private import memo_core_enumerations::*;
17
+ private import memo_core_annotations::*;
18
+
19
+ // ── Review commentary ───────────────────────────────────────
20
+ // Commentary is model content with an author and a disposition, kept
21
+ // separate from `description`: what the element IS versus what someone
22
+ // SAID about it. A generated DHF section renders the former only.
23
+ part cmtDecimalSalience : ModelComment {
24
+ attribute :>> id = "UIR-CMT-001"; attribute :>> name = "DecimalSalienceReview";
25
+ attribute :>> shortDescription = "Decimal point too small at 1 m — raised in HF review.";
26
+ attribute :>> body = "In the 2026-07-16 formative session, 3 of 8 participants hesitated over 12.5 vs 125 at bedside distance. Recommend enlarging the decimal separator or splitting the fractional digit into a smaller trailing glyph.";
27
+ attribute :>> author = "r.mehta";
28
+ attribute :>> createdAt = "2026-07-16T14:20:00Z";
29
+ attribute :>> commentStatus = CommentStatusKind::open;
30
+ attribute :>> anchor = "accessibilitySummary";
31
+ }
32
+
33
+ part cmtStatusBarScope : ModelComment {
34
+ attribute :>> id = "UIR-CMT-002"; attribute :>> name = "StatusBarScopeQuery";
35
+ attribute :>> shortDescription = "Is the battery icon really decoration?";
36
+ attribute :>> body = "Battery state is arguably an indicator, not chrome — a depleted battery during infusion is a hazard path. Should the battery icon be split out as its own indicator element with its own bounds?";
37
+ attribute :>> author = "j.okafor";
38
+ attribute :>> createdAt = "2026-07-16T09:05:00Z";
39
+ attribute :>> commentStatus = CommentStatusKind::acknowledged;
40
+ }
41
+
42
+ part cmtStatusBarReply : ModelComment {
43
+ attribute :>> id = "UIR-CMT-003"; attribute :>> name = "StatusBarScopeReply";
44
+ attribute :>> shortDescription = "Agreed — split in the next markup pass.";
45
+ attribute :>> body = "Agreed. Battery indication is in the alarm system's scope and will become its own indicator element once that requirement lands. Keeping the strip as decoration until then rather than classifying it as something it is not.";
46
+ attribute :>> author = "r.mehta";
47
+ attribute :>> createdAt = "2026-07-16T11:40:00Z";
48
+ attribute :>> commentStatus = CommentStatusKind::addressed;
49
+ }
50
+
51
+ }
@@ -0,0 +1,27 @@
1
+ // Review notes.
2
+ package memo_examples_ui_screen_regions_artifacts_reviews_notes {
3
+ private import ScalarValues::*;
4
+
5
+ private import memo_core_relationships::*;
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_core_enumerations::*;
16
+ private import memo_core_annotations::*;
17
+
18
+ part noteCaptureReview : ModelNote {
19
+ attribute :>> id = "UIR-NOTE-001"; attribute :>> name = "CaptureReviewNote";
20
+ attribute :>> shortDescription = "Reconfirm automatic regions after every capture replacement.";
21
+ attribute :>> body = "Normalized manual bounds migrate between captures; automatically detected regions require renewed reviewer confirmation.";
22
+ attribute :>> author = "r.mehta";
23
+ attribute :>> createdAt = "2026-07-16T12:10:00Z";
24
+ attribute :>> noteKind = "review guidance";
25
+ }
26
+
27
+ }
@@ -0,0 +1,27 @@
1
+ // Review rationales.
2
+ package memo_examples_ui_screen_regions_artifacts_reviews_rationales {
3
+ private import ScalarValues::*;
4
+
5
+ private import memo_core_relationships::*;
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_core_enumerations::*;
16
+ private import memo_core_annotations::*;
17
+
18
+ part ratOverlayGeometry : ModelRationale {
19
+ attribute :>> id = "UIR-RAT-001"; attribute :>> name = "OverlayGeometryRationale";
20
+ attribute :>> shortDescription = "The drug menu intentionally escapes its parent bounds.";
21
+ attribute :>> body = "The open drug selector overlays adjacent content, so disclosureKind carries the intended behavior and the renderer must not clip it to RatePanel.";
22
+ attribute :>> author = "j.okafor";
23
+ attribute :>> createdAt = "2026-07-16T12:00:00Z";
24
+ attribute :>> basis = "Observed interaction design and UIDisclosureKind::overlay semantics";
25
+ }
26
+
27
+ }
@@ -0,0 +1,59 @@
1
+ // Human-factors assurance: the use errors observed or anticipated at the UI.
2
+ package memo_examples_ui_screen_regions_assurance_human_factors {
3
+ private import ScalarValues::*;
4
+
5
+ private import memo_core_relationships::*;
6
+ private import memo_core_annotations::*;
7
+ private import memo_architecture_functional_functions::*;
8
+ private import memo_architecture_implementation_ui::*;
9
+ private import memo_assurance_requirements::*;
10
+ private import memo_assurance_requirements_needs::*;
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_core_enumerations::*;
16
+ private import memo_assurance_human_factors::*;
17
+
18
+ // ── The risk side ───────────────────────────────────────────
19
+ part ueMisreadRate : UseError {
20
+ attribute :>> id = "UIR-UE-001"; attribute :>> name = "MisreadRateDecimalPoint";
21
+ attribute :>> shortDescription = "Decimal point missed; rate read 10× high or low.";
22
+ attribute :>> description = "The clinician reads 12.5 mL/h as 125 mL/h, or the reverse, because the decimal point is not salient at a glance from the bedside.";
23
+ attribute :>> errorCategory = UseErrorCategoryKind::perception;
24
+ attribute :>> severity = SeverityKind::serious;
25
+ }
26
+
27
+ part ueSelectWrongDrug : UseError {
28
+ attribute :>> id = "UIR-UE-002"; attribute :>> name = "SelectWrongDrugConcentration";
29
+ attribute :>> shortDescription = "Clinician selects the wrong drug or concentration from the expanded list.";
30
+ attribute :>> description = "A visually adjacent drug-library entry is selected during programming and is not detected before delivery parameters are calculated.";
31
+ attribute :>> errorCategory = UseErrorCategoryKind::actionCategory;
32
+ attribute :>> severity = SeverityKind::serious;
33
+ }
34
+
35
+ part ueMissLowBattery : UseError {
36
+ attribute :>> id = "UIR-UE-003"; attribute :>> name = "MissLowBatteryStatus";
37
+ attribute :>> shortDescription = "Clinician does not notice that remaining battery operation is limited.";
38
+ attribute :>> description = "During transport or a mains outage, an inconspicuous or stale battery indicator is not noticed before the pump loses power.";
39
+ attribute :>> errorCategory = UseErrorCategoryKind::perception;
40
+ attribute :>> severity = SeverityKind::critical;
41
+ }
42
+
43
+ part ueRelyOnStaleVolume : UseError {
44
+ attribute :>> id = "UIR-UE-004"; attribute :>> name = "RelyOnStaleDeliveredVolume";
45
+ attribute :>> shortDescription = "Clinician bases a therapy decision on a stale delivered-volume value.";
46
+ attribute :>> description = "The displayed cumulative volume stops refreshing while the controller continues delivery, causing the clinician to underestimate administered therapy.";
47
+ attribute :>> errorCategory = UseErrorCategoryKind::cognition;
48
+ attribute :>> severity = SeverityKind::serious;
49
+ }
50
+
51
+ part ueMisreadDisplayedTime : UseError {
52
+ attribute :>> id = "UIR-UE-005"; attribute :>> name = "RelyOnIncorrectDisplayedTime";
53
+ attribute :>> shortDescription = "Clinician associates a therapy observation with an incorrect time.";
54
+ attribute :>> description = "A stale or unsynchronized screen clock causes an observation to be correlated with the wrong therapy event during handoff or incident review.";
55
+ attribute :>> errorCategory = UseErrorCategoryKind::cognition;
56
+ attribute :>> severity = SeverityKind::minor;
57
+ }
58
+
59
+ }
@@ -0,0 +1,25 @@
1
+ // Stakeholder needs.
2
+ package memo_examples_ui_screen_regions_assurance_requirements_needs {
3
+ private import ScalarValues::*;
4
+
5
+ private import memo_core_relationships::*;
6
+ private import memo_core_annotations::*;
7
+ private import memo_architecture_functional_functions::*;
8
+ private import memo_architecture_implementation_ui::*;
9
+ private import memo_assurance_requirements::*;
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_core_enumerations::*;
16
+ private import memo_assurance_requirements_needs::*;
17
+
18
+ requirement needReadableProgramming : Need {
19
+ attribute :>> id = "UIR-NEED-001"; attribute :>> name = "ReadableAndConfirmableProgramming";
20
+ attribute :>> needKind = NeedKind::'stakeholder';
21
+ attribute :>> statement = "Clinicians need infusion programming to be readable and explicitly confirmed before therapy changes.";
22
+ attribute :>> priority = "high";
23
+ }
24
+
25
+ }
@@ -0,0 +1,178 @@
1
+ // Assurance requirements. A requirement that constrains UI behaviour is still
2
+ // an assurance requirement; the behaviour it constrains stays in architecture.
3
+ package memo_examples_ui_screen_regions_assurance_requirements {
4
+ private import ScalarValues::*;
5
+
6
+ private import memo_core_relationships::*;
7
+ private import memo_core_annotations::*;
8
+ private import memo_architecture_functional_functions::*;
9
+ private import memo_architecture_implementation_ui::*;
10
+ private import memo_assurance_requirements_needs::*;
11
+ private import memo_assurance_human_factors::*;
12
+ private import memo_assurance_safety_risk::*;
13
+ private import memo_assurance_verification_validation::*;
14
+ private import memo_artifacts_core::*;
15
+
16
+ private import memo_core_enumerations::*;
17
+ private import memo_assurance_requirements::*;
18
+
19
+ // ── The spec side ───────────────────────────────────────────
20
+ requirement reqRateEntry : Requirement {
21
+ attribute :>> id = "UIR-REQ-001"; attribute :>> name = "RateEntryConfirmation";
22
+ attribute :>> requirementKind = RequirementKind::software;
23
+ attribute :>> statement = "When the clinician enters a new infusion rate, the pump shall display the entered rate for explicit confirmation before applying it.";
24
+ attribute :>> notation = RequirementNotationKind::ears;
25
+ attribute :>> earsPattern = EarsPatternKind::eventDriven;
26
+ attribute :>> obligation = ObligationKind::shall;
27
+ attribute :>> conditionClause = "When the clinician enters a new infusion rate";
28
+ attribute :>> systemResponse = "display the entered rate for explicit confirmation before applying it";
29
+ attribute :>> safetyClass = SafetyClassKind::C;
30
+ attribute :>> acceptanceCriteria = "No rate change reaches the controller without a confirmation event in the audit log.";
31
+ }
32
+
33
+ requirement reqRateLegibility : Requirement {
34
+ attribute :>> id = "UIR-REQ-002"; attribute :>> name = "RateLegibility";
35
+ attribute :>> requirementKind = RequirementKind::system;
36
+ attribute :>> statement = "The pump shall display the active infusion rate legibly at 1 m under 100–1000 lux ambient illumination.";
37
+ attribute :>> notation = RequirementNotationKind::sophist;
38
+ attribute :>> obligation = ObligationKind::shall;
39
+ attribute :>> conditionClause = "Under 100–1000 lux ambient illumination at a 1 m viewing distance";
40
+ attribute :>> subjectDescription = "running-infusion display";
41
+ attribute :>> actorDescription = "clinician";
42
+ attribute :>> systemResponse = "present the active infusion rate with unambiguous decimal and units";
43
+ attribute :>> concernKind = ConcernKind::usability;
44
+ attribute :>> acceptanceCriteria = "At 1 m, representative clinicians correctly distinguish 12.5 from 125 and identify mL/h in at least 95% of trials.";
45
+ }
46
+
47
+ requirement reqVolumeDisplay : Requirement {
48
+ attribute :>> id = "UIR-REQ-003"; attribute :>> name = "VolumeDeliveredDisplay";
49
+ attribute :>> requirementKind = RequirementKind::software;
50
+ attribute :>> statement = "The pump shall display cumulative volume delivered for the active infusion, updated at least once per second.";
51
+ attribute :>> notation = RequirementNotationKind::ears;
52
+ attribute :>> earsPattern = EarsPatternKind::stateDriven;
53
+ attribute :>> obligation = ObligationKind::shall;
54
+ attribute :>> conditionClause = "While an infusion is running";
55
+ attribute :>> systemResponse = "display cumulative volume delivered in mL and update it at least once per second";
56
+ attribute :>> acceptanceCriteria = "The displayed value differs from controller cumulative volume by no more than 0.1 mL and is no more than 1 s old.";
57
+ }
58
+
59
+ requirement reqDrugLibrarySelection : Requirement {
60
+ attribute :>> id = "UIR-REQ-004"; attribute :>> name = "DrugLibrarySelection";
61
+ attribute :>> requirementKind = RequirementKind::software;
62
+ attribute :>> statement = "The pump shall permit selection only from drug and concentration entries enabled for the active care area.";
63
+ attribute :>> notation = RequirementNotationKind::ears;
64
+ attribute :>> earsPattern = EarsPatternKind::stateDriven;
65
+ attribute :>> obligation = ObligationKind::shall;
66
+ attribute :>> conditionClause = "While drug selection is active";
67
+ attribute :>> systemResponse = "present and accept only drug and concentration entries enabled for the active care area";
68
+ attribute :>> safetyClass = SafetyClassKind::C;
69
+ attribute :>> acceptanceCriteria = "Every selectable entry resolves to an enabled drug-library record and its configured dosing limits.";
70
+ }
71
+
72
+ requirement reqDisplayFreshness : Requirement {
73
+ attribute :>> id = "UIR-REQ-005"; attribute :>> name = "InfusionStatusFreshness";
74
+ attribute :>> requirementKind = RequirementKind::system;
75
+ attribute :>> statement = "The pump shall refresh the displayed active rate and cumulative delivered volume at least once per second while an infusion is running.";
76
+ attribute :>> notation = RequirementNotationKind::sophist;
77
+ attribute :>> obligation = ObligationKind::shall;
78
+ attribute :>> conditionClause = "While an infusion is running";
79
+ attribute :>> subjectDescription = "infusion status display";
80
+ attribute :>> actorDescription = "clinician";
81
+ attribute :>> systemResponse = "refresh active rate and cumulative delivered volume with end-to-end age not exceeding 1 s";
82
+ attribute :>> concernKind = ConcernKind::performance;
83
+ attribute :>> acceptanceCriteria = "For 10,000 sampled controller updates, 99.9% appear on screen within 1 s and none exceed 2 s.";
84
+ }
85
+
86
+ requirement reqActiveRateDisplay : Requirement {
87
+ attribute :>> id = "UIR-REQ-006"; attribute :>> name = "ActiveInfusionRateDisplay";
88
+ attribute :>> requirementKind = RequirementKind::software;
89
+ attribute :>> statement = "While an infusion is running, the pump shall display the active infusion rate value and its mL/h unit.";
90
+ attribute :>> notation = RequirementNotationKind::ears;
91
+ attribute :>> earsPattern = EarsPatternKind::stateDriven;
92
+ attribute :>> obligation = ObligationKind::shall;
93
+ attribute :>> conditionClause = "While an infusion is running";
94
+ attribute :>> systemResponse = "display the active infusion rate value and mL/h unit";
95
+ attribute :>> safetyClass = SafetyClassKind::C;
96
+ attribute :>> acceptanceCriteria = "The displayed rate and unit exactly match the active controller setpoint throughout running mode.";
97
+ }
98
+
99
+ requirement reqDrugIdentityDisplay : Requirement {
100
+ attribute :>> id = "UIR-REQ-007"; attribute :>> name = "ActiveDrugIdentityDisplay";
101
+ attribute :>> requirementKind = RequirementKind::software;
102
+ attribute :>> statement = "Where a drug-library entry is active, the pump shall display the selected drug name and concentration on the running-infusion screen.";
103
+ attribute :>> notation = RequirementNotationKind::ears;
104
+ attribute :>> earsPattern = EarsPatternKind::optionalFeature;
105
+ attribute :>> obligation = ObligationKind::shall;
106
+ attribute :>> conditionClause = "Where a drug-library entry is active";
107
+ attribute :>> systemResponse = "display the selected drug name and concentration on the running-infusion screen";
108
+ attribute :>> safetyClass = SafetyClassKind::C;
109
+ attribute :>> acceptanceCriteria = "The closed selector exactly matches the active library record's generic name, strength, and volume.";
110
+ }
111
+
112
+ requirement reqTimeDisplay : Requirement {
113
+ attribute :>> id = "UIR-REQ-008"; attribute :>> name = "LocalTimeDisplay";
114
+ attribute :>> requirementKind = RequirementKind::software;
115
+ attribute :>> statement = "While the running-infusion screen is visible, the pump shall display synchronized local time in 24-hour HH:mm format.";
116
+ attribute :>> notation = RequirementNotationKind::ears;
117
+ attribute :>> earsPattern = EarsPatternKind::stateDriven;
118
+ attribute :>> obligation = ObligationKind::shall;
119
+ attribute :>> conditionClause = "While the running-infusion screen is visible";
120
+ attribute :>> systemResponse = "display synchronized local time in 24-hour HH:mm format";
121
+ attribute :>> acceptanceCriteria = "Displayed time matches the configured local clock and presents valid 00:00–23:59 values.";
122
+ }
123
+
124
+ requirement reqTimeAccuracy : Requirement {
125
+ attribute :>> id = "UIR-REQ-009"; attribute :>> name = "DisplayedTimeAccuracy";
126
+ attribute :>> requirementKind = RequirementKind::system;
127
+ attribute :>> statement = "The running-infusion display shall present local time within 2 seconds of the synchronized device clock and refresh the visible minute within 1 second of rollover.";
128
+ attribute :>> notation = RequirementNotationKind::sophist;
129
+ attribute :>> obligation = ObligationKind::shall;
130
+ attribute :>> conditionClause = "During normal operation after clock synchronization";
131
+ attribute :>> subjectDescription = "running-infusion display";
132
+ attribute :>> actorDescription = "clinician";
133
+ attribute :>> systemResponse = "present local time within 2 s and update minute rollover within 1 s";
134
+ attribute :>> concernKind = ConcernKind::performance;
135
+ attribute :>> acceptanceCriteria = "Across a 24 h soak test, absolute display error is ≤2 s and every minute rollover appears within 1 s.";
136
+ }
137
+
138
+ requirement reqBatteryStatusDisplay : Requirement {
139
+ attribute :>> id = "UIR-REQ-010"; attribute :>> name = "BatteryStatusDisplay";
140
+ attribute :>> requirementKind = RequirementKind::software;
141
+ attribute :>> statement = "While the pump is operating, the pump shall display battery state of charge as a percentage and graphical icon.";
142
+ attribute :>> notation = RequirementNotationKind::ears;
143
+ attribute :>> earsPattern = EarsPatternKind::stateDriven;
144
+ attribute :>> obligation = ObligationKind::shall;
145
+ attribute :>> conditionClause = "While the pump is operating";
146
+ attribute :>> systemResponse = "display battery state of charge as a percentage and graphical icon";
147
+ attribute :>> safetyClass = SafetyClassKind::C;
148
+ attribute :>> acceptanceCriteria = "Displayed percentage and icon state correspond to the battery-management telemetry for 0–100% charge.";
149
+ }
150
+
151
+ requirement reqBatteryWarningPerformance : Requirement {
152
+ attribute :>> id = "UIR-REQ-011"; attribute :>> name = "LowBatteryStatusLatency";
153
+ attribute :>> requirementKind = RequirementKind::system;
154
+ attribute :>> statement = "When estimated battery operating time falls below 30 minutes, the pump shall present a visually prominent low-battery state within 1 second.";
155
+ attribute :>> notation = RequirementNotationKind::sophist;
156
+ attribute :>> obligation = ObligationKind::shall;
157
+ attribute :>> conditionClause = "When estimated battery operating time falls below 30 minutes";
158
+ attribute :>> subjectDescription = "battery status indicator";
159
+ attribute :>> actorDescription = "clinician";
160
+ attribute :>> systemResponse = "present a visually prominent low-battery state within 1 s";
161
+ attribute :>> concernKind = ConcernKind::reliability;
162
+ attribute :>> acceptanceCriteria = "Threshold injection changes the indicator to low-battery styling within 1 s in 100% of trials.";
163
+ }
164
+
165
+ requirement reqDrugSelectionPerformance : Requirement {
166
+ attribute :>> id = "UIR-REQ-012"; attribute :>> name = "DrugSelectorResponseTime";
167
+ attribute :>> requirementKind = RequirementKind::software;
168
+ attribute :>> statement = "When the clinician activates the drug selector, the pump shall display the enabled drug list within 250 milliseconds.";
169
+ attribute :>> notation = RequirementNotationKind::ears;
170
+ attribute :>> earsPattern = EarsPatternKind::eventDriven;
171
+ attribute :>> obligation = ObligationKind::shall;
172
+ attribute :>> conditionClause = "When the clinician activates the drug selector";
173
+ attribute :>> systemResponse = "display the enabled drug list within 250 ms";
174
+ attribute :>> concernKind = ConcernKind::performance;
175
+ attribute :>> acceptanceCriteria = "The 95th percentile activation-to-first-paint latency is ≤250 ms and the maximum is ≤500 ms.";
176
+ }
177
+
178
+ }
@@ -0,0 +1,93 @@
1
+ // Safety/risk assurance: hazards and the risk controls that address them.
2
+ package memo_examples_ui_screen_regions_assurance_safety_risk {
3
+ private import ScalarValues::*;
4
+
5
+ private import memo_core_relationships::*;
6
+ private import memo_core_annotations::*;
7
+ private import memo_architecture_functional_functions::*;
8
+ private import memo_architecture_implementation_ui::*;
9
+ private import memo_assurance_requirements::*;
10
+ private import memo_assurance_requirements_needs::*;
11
+ private import memo_assurance_human_factors::*;
12
+ private import memo_assurance_verification_validation::*;
13
+ private import memo_artifacts_core::*;
14
+
15
+ private import memo_core_enumerations::*;
16
+ private import memo_assurance_safety_risk::*;
17
+
18
+ item hzWrongRate : Hazard {
19
+ attribute :>> id = "UIR-HZ-001"; attribute :>> name = "InfusionAtIncorrectRate";
20
+ attribute :>> hazardType = HazardTypeKind::informationError;
21
+ attribute :>> severity = SeverityKind::serious;
22
+ attribute :>> foreseeable = true;
23
+ }
24
+
25
+ item rcRateConfirm : RiskControlMeasure {
26
+ attribute :>> id = "UIR-RC-001"; attribute :>> name = "RateChangeConfirmationDialog";
27
+ attribute :>> shortDescription = "Explicit confirmation step before a rate change applies.";
28
+ attribute :>> description = "A confirmation dialog restates the requested rate in words and numerals before the change is committed, so a mis-set decimal point has a second chance to be caught.";
29
+ attribute :>> controlKind = RiskControlKind::protectiveMeasure;
30
+ attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
31
+ }
32
+
33
+ item hzWrongDrug : Hazard {
34
+ attribute :>> id = "UIR-HZ-002"; attribute :>> name = "TherapyConfiguredForWrongDrug";
35
+ attribute :>> hazardType = HazardTypeKind::informationError;
36
+ attribute :>> severity = SeverityKind::serious;
37
+ attribute :>> foreseeable = true;
38
+ }
39
+
40
+ item rcDrugLibraryGuard : RiskControlMeasure {
41
+ attribute :>> id = "UIR-RC-002"; attribute :>> name = "CareAreaDrugLibraryGuard";
42
+ attribute :>> shortDescription = "Restrict selection to enabled care-area drug-library entries.";
43
+ attribute :>> description = "Filters the dynamic selector to the active care-area formulary and validates the selected drug and concentration before its dosing limits are used.";
44
+ attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
45
+ attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
46
+ }
47
+
48
+ item hzUnexpectedPowerLoss : Hazard {
49
+ attribute :>> id = "UIR-HZ-003"; attribute :>> name = "UnexpectedTherapyInterruptionFromPowerLoss";
50
+ attribute :>> hazardType = HazardTypeKind::energyExposure;
51
+ attribute :>> severity = SeverityKind::critical;
52
+ attribute :>> foreseeable = true;
53
+ }
54
+
55
+ item rcLowBatteryProminence : RiskControlMeasure {
56
+ attribute :>> id = "UIR-RC-003"; attribute :>> name = "ProminentLowBatteryStatus";
57
+ attribute :>> shortDescription = "Update and emphasize low remaining battery status within one second.";
58
+ attribute :>> description = "Monitors battery telemetry and changes the status indicator's color and icon state at the low-runtime threshold so the clinician can restore power before therapy interruption.";
59
+ attribute :>> controlKind = RiskControlKind::monitoring;
60
+ attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
61
+ }
62
+
63
+ item hzIncorrectDeliveredVolumeAssessment : Hazard {
64
+ attribute :>> id = "UIR-HZ-004"; attribute :>> name = "IncorrectDeliveredVolumeAssessment";
65
+ attribute :>> hazardType = HazardTypeKind::informationError;
66
+ attribute :>> severity = SeverityKind::serious;
67
+ attribute :>> foreseeable = true;
68
+ }
69
+
70
+ item rcDisplayFreshnessMonitor : RiskControlMeasure {
71
+ attribute :>> id = "UIR-RC-004"; attribute :>> name = "InfusionDisplayFreshnessMonitor";
72
+ attribute :>> shortDescription = "Refresh displayed rate and volume at 1 Hz and detect stale telemetry.";
73
+ attribute :>> description = "Maintains a one-second display age budget for infusion status and detects a missed telemetry refresh before stale values can persist.";
74
+ attribute :>> controlKind = RiskControlKind::monitoring;
75
+ attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
76
+ }
77
+
78
+ item hzIncorrectEventChronology : Hazard {
79
+ attribute :>> id = "UIR-HZ-005"; attribute :>> name = "IncorrectTherapyEventChronology";
80
+ attribute :>> hazardType = HazardTypeKind::informationError;
81
+ attribute :>> severity = SeverityKind::minor;
82
+ attribute :>> foreseeable = true;
83
+ }
84
+
85
+ item rcClockFreshnessCheck : RiskControlMeasure {
86
+ attribute :>> id = "UIR-RC-005"; attribute :>> name = "SynchronizedClockFreshnessCheck";
87
+ attribute :>> shortDescription = "Synchronize the display clock and bound visible time error.";
88
+ attribute :>> description = "Checks the displayed clock against the synchronized device clock and refreshes the visible minute at rollover.";
89
+ attribute :>> controlKind = RiskControlKind::plausibilityCheck;
90
+ attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
91
+ }
92
+
93
+ }
@@ -0,0 +1,60 @@
1
+ // Verification and validation: cases and the evidence they produce.
2
+ package memo_examples_ui_screen_regions_assurance_verification_validation {
3
+ private import ScalarValues::*;
4
+
5
+ private import memo_core_relationships::*;
6
+ private import memo_core_annotations::*;
7
+ private import memo_architecture_functional_functions::*;
8
+ private import memo_architecture_implementation_ui::*;
9
+ private import memo_assurance_requirements::*;
10
+ private import memo_assurance_requirements_needs::*;
11
+ private import memo_assurance_human_factors::*;
12
+ private import memo_assurance_safety_risk::*;
13
+ private import memo_artifacts_core::*;
14
+
15
+ private import memo_core_enumerations::*;
16
+ private import memo_assurance_verification_validation::*;
17
+
18
+ verification vcRateChange : VerificationCase {
19
+ attribute :>> id = "UIR-VER-001"; attribute :>> name = "VerifyRateChangeConfirmation";
20
+ attribute :>> methodKind = VerificationMethodKind::test;
21
+ attribute :>> acceptanceCriteria = "A rate change cannot reach the controller until the displayed value is explicitly confirmed.";
22
+ attribute :>> status = "planned";
23
+ }
24
+
25
+ part evRateChange : Evidence {
26
+ attribute :>> id = "UIR-EV-001"; attribute :>> name = "RateChangeConfirmationTestRecord";
27
+ attribute :>> version = "planned";
28
+ attribute :>> evidenceType = "test record";
29
+ attribute :>> integrityStatus = "planned";
30
+ }
31
+
32
+ verification vcDrugLibrarySelection : VerificationCase {
33
+ attribute :>> id = "VER-002"; attribute :>> name = "VerifyCareAreaDrugLibrarySelection";
34
+ attribute :>> methodKind = VerificationMethodKind::test;
35
+ attribute :>> acceptanceCriteria = "Only enabled care-area drug and concentration records are selectable, and every selection supplies the matching dosing limits.";
36
+ attribute :>> status = "planned";
37
+ }
38
+
39
+ part evDrugLibrarySelection : Evidence {
40
+ attribute :>> id = "EVD-002"; attribute :>> name = "DrugLibrarySelectionTestRecord";
41
+ attribute :>> version = "planned";
42
+ attribute :>> evidenceType = "test record";
43
+ attribute :>> integrityStatus = "planned";
44
+ }
45
+
46
+ verification vcInfusionStatusContent : VerificationCase {
47
+ attribute :>> id = "VER-003"; attribute :>> name = "VerifyInfusionStatusContentAndFreshness";
48
+ attribute :>> methodKind = VerificationMethodKind::test;
49
+ attribute :>> acceptanceCriteria = "Time, battery, active rate, drug identity, and total delivered volume satisfy their content, accuracy, and latency criteria under normal and threshold-transition conditions.";
50
+ attribute :>> status = "planned";
51
+ }
52
+
53
+ part evInfusionStatusContent : Evidence {
54
+ attribute :>> id = "EVD-003"; attribute :>> name = "InfusionStatusDisplayTestRecord";
55
+ attribute :>> version = "planned";
56
+ attribute :>> evidenceType = "test record";
57
+ attribute :>> integrityStatus = "planned";
58
+ }
59
+
60
+ }
@@ -0,0 +1,45 @@
1
+ // UI screen regions — project identity and method binding.
2
+ //
3
+ // The native entrypoint for this project. Everything that decides what the
4
+ // model means is here or reachable from here: the imports name the reusable
5
+ // packages, and the binding names the methodology with a typed SysML
6
+ // reference. No YAML file participates. Removing every application setting
7
+ // from this directory leaves the model unchanged.
8
+ package memo_examples_ui_screen_regions_project {
9
+ private import ScalarValues::*;
10
+
11
+ private import memo_core_enumerations::*;
12
+ private import memo_methodology_core::*;
13
+ private import memo_methodology_profiles::*;
14
+
15
+ // The project's own content. Importing it here makes the catalog a single
16
+ // reachable closure from one entrypoint.
17
+ private import memo_examples_ui_screen_regions_architecture_implementation_ui::*;
18
+ private import memo_examples_ui_screen_regions_architecture_functional_functions::*;
19
+ private import memo_examples_ui_screen_regions_assurance_requirements::*;
20
+ private import memo_examples_ui_screen_regions_assurance_requirements_needs::*;
21
+ private import memo_examples_ui_screen_regions_assurance_human_factors::*;
22
+ private import memo_examples_ui_screen_regions_assurance_safety_risk::*;
23
+ private import memo_examples_ui_screen_regions_assurance_verification_validation::*;
24
+ private import memo_examples_ui_screen_regions_artifacts_assets::*;
25
+ private import memo_examples_ui_screen_regions_artifacts_reviews_comments::*;
26
+ private import memo_examples_ui_screen_regions_artifacts_reviews_notes::*;
27
+ private import memo_examples_ui_screen_regions_artifacts_reviews_rationales::*;
28
+ private import memo_examples_ui_screen_regions_traces::*;
29
+ private import memo_examples_ui_screen_regions_viewpoints_ui_layout::*;
30
+ private import memo_examples_ui_screen_regions_viewpoints_requirements::*;
31
+ private import memo_examples_ui_screen_regions_viewpoints_functional::*;
32
+ private import memo_examples_ui_screen_regions_viewpoints_risk::*;
33
+
34
+ part uiScreenRegionsBinding : ProjectMethodBinding {
35
+ attribute :>> id = "PMB-UIR-001";
36
+ attribute :>> name = "UIScreenRegionsProjectMethodBinding";
37
+ attribute :>> projectName = "UI Screen Regions";
38
+ // The default methodology selects everything the resolved ontology
39
+ // provides, which is what makes the UI layout rules CR-MED-110…113
40
+ // evaluable against this model.
41
+ ref :>> selectedMethodology = mdDefaultDefinition;
42
+ // The project adds no modules of its own.
43
+ attribute :>> scopeMode = ScopeModeKind::explicit;
44
+ }
45
+ }