@memoarchitect/ontology 0.6.5 → 0.8.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (394) hide show
  1. package/README.md +4 -2
  2. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
  3. package/examples/connected-patient-monitor/model/catalog/project.sysml +24 -0
  4. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  5. package/examples/connected-patient-monitor/model/{viewpoints → catalog/viewpoints/unassigned/views}/connected_patient_monitor_overview.sysml +1 -1
  6. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
  7. package/examples/embedded-infusion-pump/model/catalog/project.sysml +24 -0
  8. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  9. package/examples/embedded-infusion-pump/model/{viewpoints → catalog/viewpoints/unassigned/views}/embedded_infusion_pump_overview.sysml +1 -1
  10. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  11. package/examples/functional-logical-physical/model/catalog/project.sysml +24 -0
  12. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  13. package/examples/functional-logical-physical/model/{viewpoints → catalog/viewpoints/unassigned/views}/functional_logical_physical_overview.sysml +1 -1
  14. package/examples/gpca-pump/methodology/gpca_methodology.sysml +7 -8
  15. package/examples/gpca-pump/methodology/gpca_profiles.sysml +89 -11
  16. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +19 -9
  17. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +342 -100
  18. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +27 -13
  19. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +329 -272
  20. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +57 -16
  21. package/examples/gpca-pump/model/catalog/gpca_context.sysml +12 -8
  22. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -10
  23. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
  24. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +181 -264
  25. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +95 -60
  26. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -11
  27. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +102 -101
  28. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +1 -1
  29. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  30. package/examples/gpca-pump/model/catalog/gpca_system.sysml +47 -30
  31. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +301 -354
  32. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +116 -36
  33. package/examples/gpca-pump/model/catalog/project.sysml +26 -0
  34. package/examples/gpca-pump/model/catalog/viewpoints/context/viewpoint.sysml +8 -0
  35. package/examples/gpca-pump/model/{views → catalog/viewpoints/context/views}/context_system_context_view.sysml +4 -4
  36. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/viewpoint.sysml +8 -0
  37. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/cybersecurity_cybersecurity_view.sysml +4 -4
  38. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_cyber_assessment_view.sysml +4 -4
  39. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_threat_model_view.sysml +5 -5
  40. package/examples/gpca-pump/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  41. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_allocation_view.sysml +2 -2
  42. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_browser_view.sysml +3 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/logical/viewpoint.sysml +8 -0
  44. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/behavior_action_flow_view.sysml +3 -3
  45. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/document_architecture_description_view.sysml +8 -8
  46. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_device_interconnect_view.sysml +5 -5
  47. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_logical_architecture_view.sysml +3 -3
  48. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_mode_state_view.sysml +4 -4
  49. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_system_decomposition_view.sysml +3 -3
  50. package/examples/gpca-pump/model/catalog/viewpoints/operational/viewpoint.sysml +8 -0
  51. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_scenario_sequence_view.sysml +3 -3
  52. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +4 -4
  53. package/examples/gpca-pump/model/catalog/viewpoints/physical/viewpoint.sysml +8 -0
  54. package/examples/gpca-pump/model/{views → catalog/viewpoints/physical/views}/physical_physical_bom_view.sysml +2 -2
  55. package/examples/gpca-pump/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  56. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/document_dhf_index_view.sysml +8 -8
  57. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/requirements_requirements_trace_view.sysml +2 -2
  58. package/examples/gpca-pump/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  59. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_hazard_analysis_view.sysml +8 -5
  60. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +7 -5
  61. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +3 -3
  62. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_risk_chain_view.sysml +3 -3
  63. package/examples/gpca-pump/model/catalog/viewpoints/software/viewpoint.sysml +8 -0
  64. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/document_sdd_view.sysml +4 -4
  65. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +5 -5
  66. package/examples/gpca-pump/model/catalog/viewpoints/usability/viewpoint.sysml +8 -0
  67. package/examples/gpca-pump/model/{views → catalog/viewpoints/usability/views}/document_usability_view.sysml +8 -6
  68. package/examples/gpca-pump/model/catalog/viewpoints/verification/viewpoint.sysml +8 -0
  69. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/document_vv_view.sysml +7 -5
  70. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +3 -3
  71. package/examples/ivd-laboratory-system/model/catalog/project.sysml +24 -0
  72. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  73. package/examples/ivd-laboratory-system/model/{viewpoints → catalog/viewpoints/unassigned/views}/ivd_laboratory_system_overview.sysml +1 -1
  74. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +4 -2
  75. package/examples/manual-surgical-instrument/model/catalog/project.sysml +24 -0
  76. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  77. package/examples/manual-surgical-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/manual_surgical_instrument_overview.sysml +1 -1
  78. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  79. package/examples/multidimensional-layers/model/catalog/project.sysml +24 -0
  80. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  81. package/examples/multidimensional-layers/model/{viewpoints → catalog/viewpoints/unassigned/views}/multidimensional_layers_overview.sysml +1 -1
  82. package/examples/nested-architecture-dsm/README.md +49 -0
  83. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +179 -0
  84. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +165 -0
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +53 -0
  86. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +89 -0
  87. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +113 -0
  88. package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
  89. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +48 -0
  90. package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
  91. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +11 -8
  92. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  93. package/examples/reusable-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/reusable_instrument_overview.sysml +1 -1
  94. package/examples/ros-mobile-robot/README.md +40 -0
  95. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  96. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  97. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  98. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
  99. package/examples/software-only-medical-device/model/catalog/project.sysml +28 -0
  100. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
  101. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  102. package/examples/software-only-medical-device/model/{viewpoints → catalog/viewpoints/unassigned/views}/software_only_medical_device_overview.sysml +1 -1
  103. package/examples/surgical-closure-workflow/model/catalog/project.sysml +24 -0
  104. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +57 -57
  105. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  106. package/examples/surgical-closure-workflow/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_closure_workflow_overview.sysml +1 -1
  107. package/examples/surgical-robot/model/catalog/project.sysml +24 -0
  108. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +6 -4
  109. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  110. package/examples/surgical-robot/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_robot_overview.sysml +1 -1
  111. package/examples/sysml-diagram-samples/README.md +7 -0
  112. package/examples/sysml-diagram-samples/dhf/documents/DOC-HAR-001.md +11 -0
  113. package/examples/sysml-diagram-samples/memo.package.yaml +11 -5
  114. package/examples/sysml-diagram-samples/model/catalog/project.sysml +33 -0
  115. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  116. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/action_flow_view.sysml +23 -20
  117. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +11 -11
  118. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
  119. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +143 -0
  120. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +87 -0
  121. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +109 -0
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +13 -0
  124. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/requirements_view.sysml +6 -7
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +33 -0
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +80 -0
  127. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +48 -0
  128. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +15 -9
  129. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +93 -0
  130. package/examples/temperature-alarm/model/catalog/project.sysml +24 -0
  131. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +29 -21
  132. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  133. package/examples/temperature-alarm/model/{viewpoints → catalog/viewpoints/unassigned/views}/temperature_alarm_overview.sysml +1 -1
  134. package/examples/ui-screen-regions/README.md +117 -0
  135. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +84 -0
  136. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +212 -0
  137. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +61 -0
  138. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png +0 -0
  139. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png +0 -0
  140. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png +0 -0
  141. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +51 -0
  142. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +27 -0
  143. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +27 -0
  144. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +59 -0
  145. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +25 -0
  146. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +178 -0
  147. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +93 -0
  148. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +75 -0
  149. package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
  150. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  151. package/examples/ui-screen-regions/model/catalog/traces.sysml +179 -0
  152. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  153. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +62 -0
  154. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  155. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +62 -0
  156. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +62 -0
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/viewpoint.sysml +8 -0
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +57 -0
  160. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +52 -0
  161. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +54 -0
  162. package/extensions/LICENSES/MIT.txt +19 -0
  163. package/extensions/README.md +94 -0
  164. package/extensions/aadl/memo.package.yaml +18 -0
  165. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  166. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  167. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  168. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  169. package/extensions/clinical/memo.package.yaml +18 -0
  170. package/extensions/clinical/src/methodology/clinical_methodology.sysml +22 -0
  171. package/extensions/cloud/memo.package.yaml +18 -0
  172. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  173. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  174. package/extensions/container/memo.package.yaml +18 -0
  175. package/extensions/container/src/container_extension.sysml +37 -0
  176. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  177. package/extensions/messaging/memo.package.yaml +18 -0
  178. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  179. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  180. package/extensions/ros/memo.package.yaml +18 -0
  181. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  182. package/extensions/ros/src/ros_extension.sysml +200 -0
  183. package/extensions/template/memo.package.yaml +17 -0
  184. package/extensions/template/src/extension.sysml +37 -0
  185. package/memo.manifest.yaml +15 -2
  186. package/methodologies/default/memo.package.yaml +19 -9
  187. package/methodologies/gpca/memo.package.yaml +18 -9
  188. package/ontology/memo.package.yaml +23 -8
  189. package/package.json +6 -6
  190. package/profile/memo.package.yaml +18 -9
  191. package/src/architecture/decisions/memo_decisions.sysml +28 -0
  192. package/src/architecture/functional/behavior/memo_behavior.sysml +50 -22
  193. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  194. package/src/architecture/functional/functions/memo_functions.sysml +93 -43
  195. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -24
  196. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +52 -12
  197. package/src/architecture/implementation/ui/memo_ui.sysml +276 -53
  198. package/src/architecture/logical/interfaces/memo_interfaces.sysml +64 -13
  199. package/src/architecture/logical/structure/memo_logical_structure.sysml +92 -35
  200. package/src/architecture/operational/activities/memo_activities.sysml +10 -4
  201. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
  202. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
  203. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
  204. package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
  205. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
  206. package/src/architecture/operational/workflows/memo_workflows.sysml +28 -15
  207. package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
  208. package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
  209. package/src/artifacts/configuration_management/memo_configuration_management.sysml +35 -0
  210. package/src/artifacts/core/memo_controlled_artifacts.sysml +35 -0
  211. package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
  212. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  213. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  214. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  215. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  216. package/src/artifacts/standards/iec_60812.sysml +51 -0
  217. package/src/artifacts/standards/iec_62304.sysml +210 -0
  218. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  219. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  220. package/src/artifacts/standards/iso_13485.sysml +113 -0
  221. package/src/artifacts/standards/iso_14971.sysml +94 -0
  222. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  223. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  224. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +1 -1
  225. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +5 -5
  226. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +1 -1
  227. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +2 -2
  228. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +2 -2
  229. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +2 -2
  230. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +1 -1
  231. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +1 -1
  232. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +3 -3
  233. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +4 -4
  234. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +1 -1
  235. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +3 -2
  236. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +2 -2
  237. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +4 -4
  238. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.md +4 -3
  239. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  240. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/detailed-design.md +1 -1
  241. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +3 -3
  242. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +6 -5
  243. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +3 -2
  244. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +5 -4
  245. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +4 -2
  246. package/src/artifacts/templates/dhf/iec-62304/srs.md +172 -0
  247. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +3 -3
  248. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.md +1 -1
  249. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/summative-eval.md +1 -1
  250. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +93 -0
  251. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.md +1 -1
  252. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/urra.md +3 -3
  253. package/src/artifacts/templates/dhf/iso-14971/fmea.md +116 -0
  254. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/har.md +3 -3
  255. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmp.md +2 -2
  256. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  257. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  258. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  259. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  260. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
  261. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  262. package/src/assurance/requirements/memo_requirements.sysml +5 -2
  263. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  264. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  265. package/src/assurance/safety_risk/memo_risk.sysml +78 -7
  266. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +27 -0
  267. package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
  268. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  269. package/src/core/annotations/memo_annotations.sysml +96 -0
  270. package/src/core/common/memo_common.sysml +140 -18
  271. package/src/core/consistency_rules/consistency_rules.sysml +7 -0
  272. package/src/core/dimensions/dimensions.sysml +17 -1
  273. package/src/core/enumerations/memo_enumerations.sysml +101 -20
  274. package/src/core/methodology_scope/methodology_scope.sysml +7 -15
  275. package/src/core/relationships/memo_relationships.sysml +199 -194
  276. package/src/memo_namespaces.sysml +127 -67
  277. package/src/methodology/core/memo_core.sysml +69 -2
  278. package/src/methodology/profiles/memo_profiles.sysml +31 -41
  279. package/src/methodology/workflow/memo_workflow.sysml +7 -2
  280. package/src/rules/closure/closure_rules.sysml +104 -31
  281. package/src/rules/coverage/coverage_rules.sysml +4 -256
  282. package/src/rules/crosslayer/cross_layer_rules.sysml +6 -15
  283. package/src/rules/lifecycle/lifecycle_rules.sysml +4 -39
  284. package/src/rules/ontology/ontology_invariants.sysml +243 -74
  285. package/src/rules/quantitative/quantitative_rules.sysml +8 -8
  286. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +10 -3
  287. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  288. package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
  289. package/src/viewpoints/context/context_viewpoint.sysml +4 -2
  290. package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
  291. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  292. package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view → views/cybersecurity_assessment_view}/cybersecurity_assessment_view.sysml +2 -2
  293. package/src/viewpoints/cybersecurity/{threat_model_view → views/threat_model_view}/threat_model_view.sysml +2 -2
  294. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +5 -0
  295. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  296. package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +3 -3
  297. package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +3 -3
  298. package/src/viewpoints/logical/logical_viewpoint.sysml +3 -1
  299. package/src/viewpoints/logical/{logical_architecture_view → views/logical_architecture_view}/logical_architecture_view.sysml +2 -2
  300. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  301. package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +3 -3
  302. package/src/viewpoints/physical/physical_viewpoint.sysml +3 -1
  303. package/src/viewpoints/physical/{network_topology_view → views/network_topology_view}/network_topology_view.sysml +2 -2
  304. package/src/viewpoints/physical/{physical_bom_view → views/physical_bom_view}/physical_bom_view.sysml +2 -2
  305. package/src/viewpoints/rendering/memo_rendering.sysml +354 -0
  306. package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -1
  307. package/src/viewpoints/requirements/{requirements_traceability_view → views/requirements_traceability_view}/requirements_traceability_view.sysml +2 -2
  308. package/src/viewpoints/risk/risk_viewpoint.sysml +3 -1
  309. package/src/viewpoints/risk/{risk_chain_view → views/risk_chain_view}/risk_chain_view.sysml +2 -2
  310. package/src/viewpoints/software/software_viewpoint.sysml +3 -1
  311. package/src/viewpoints/software/{software_architecture_view → views/software_architecture_view}/software_architecture_view.sysml +2 -2
  312. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +28 -0
  313. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +23 -0
  314. package/src/viewpoints/usability/usability_viewpoint.sysml +3 -1
  315. package/src/viewpoints/usability/{usability_engineering_view → views/usability_engineering_view}/usability_engineering_view.sysml +2 -2
  316. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  317. package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +3 -3
  318. package/templates/connected-device/memo.package.yaml +11 -5
  319. package/templates/connected-device/model/catalog/project.sysml +28 -0
  320. package/templates/connected-device/syside.toml +1 -1
  321. package/templates/default/memo.package.yaml +11 -5
  322. package/templates/default/model/catalog/project.sysml +28 -0
  323. package/templates/default/syside.toml +1 -1
  324. package/templates/infusion-pump/memo.package.yaml +11 -5
  325. package/templates/infusion-pump/model/catalog/project.sysml +28 -0
  326. package/templates/infusion-pump/syside.toml +1 -1
  327. package/templates/monitoring-device/memo.package.yaml +11 -5
  328. package/templates/monitoring-device/model/catalog/project.sysml +28 -0
  329. package/templates/monitoring-device/syside.toml +1 -1
  330. package/templates/samd/memo.package.yaml +11 -5
  331. package/templates/samd/model/catalog/project.sysml +28 -0
  332. package/templates/samd/syside.toml +1 -1
  333. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +0 -3
  334. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +0 -3
  335. package/examples/extensions/README.md +0 -16
  336. package/examples/extensions/clinical/memo.package.yaml +0 -9
  337. package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -14
  338. package/examples/extensions/template/memo.package.yaml +0 -9
  339. package/examples/extensions/template/src/extension.sysml +0 -15
  340. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +0 -3
  341. package/examples/gpca-pump/memo.config.yaml +0 -9
  342. package/examples/gpca-pump/methodology/gpca_scope.sysml +0 -25
  343. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +0 -3
  344. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +0 -3
  345. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +0 -4
  346. package/examples/reusable-instrument/model/reusable_instrument.sysml +0 -4
  347. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +0 -4
  348. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +0 -4
  349. package/examples/surgical-robot/model/surgical_robot.sysml +0 -4
  350. package/examples/sysml-diagram-samples/model/samples/functional_flow_view.sysml +0 -164
  351. package/examples/sysml-diagram-samples/model/samples/interconnection_view.sysml +0 -94
  352. package/examples/sysml-diagram-samples/model/samples/operational_behaviour_view.sysml +0 -135
  353. package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +0 -109
  354. package/examples/sysml-diagram-samples/model/samples/tree_view.sysml +0 -56
  355. package/examples/temperature-alarm/model/temperature_alarm.sysml +0 -4
  356. package/ontology/memo.rendering.yaml +0 -84
  357. package/src/compliance/artifacts/memo_artifacts.sysml +0 -12
  358. package/src/compliance/change/memo_change.sysml +0 -17
  359. package/src/compliance/dhf-templates/iec-62304/srs.md +0 -138
  360. package/src/compliance/dhf-templates/iec-62366/task-analysis.md +0 -57
  361. package/src/compliance/dhf-templates/iso-14971/fmea.md +0 -93
  362. package/src/compliance/document_views/memo_document_views.sysml +0 -7
  363. package/src/compliance/iso14971/risk_management_file.sysml +0 -16
  364. package/src/compliance/postmarket/memo_postmarket.sysml +0 -16
  365. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  366. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  367. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
  368. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/change-control.md +0 -0
  369. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/formative-eval.md +0 -0
  370. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ui-spec.md +0 -0
  371. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/use-spec.md +0 -0
  372. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fta.md +0 -0
  373. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-benefit.md +0 -0
  374. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-matrix.md +0 -0
  375. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmr.md +0 -0
  376. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/approval-block.md +0 -0
  377. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/document-control-header.md +0 -0
  378. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/references-section.md +0 -0
  379. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/revision-history-table.md +0 -0
  380. /package/templates/connected-device/{src → model/catalog}/architecture/system.sysml +0 -0
  381. /package/templates/connected-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  382. /package/templates/connected-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  383. /package/templates/default/{src → model/catalog}/architecture/system.sysml +0 -0
  384. /package/templates/default/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  385. /package/templates/default/{src → model/catalog}/assurance/requirements.sysml +0 -0
  386. /package/templates/infusion-pump/{src → model/catalog}/architecture/system.sysml +0 -0
  387. /package/templates/infusion-pump/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  388. /package/templates/infusion-pump/{src → model/catalog}/assurance/requirements.sysml +0 -0
  389. /package/templates/monitoring-device/{src → model/catalog}/architecture/system.sysml +0 -0
  390. /package/templates/monitoring-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  391. /package/templates/monitoring-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  392. /package/templates/samd/{src → model/catalog}/architecture/system.sysml +0 -0
  393. /package/templates/samd/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  394. /package/templates/samd/{src → model/catalog}/assurance/requirements.sysml +0 -0
@@ -1,13 +1,6 @@
1
- // Closure consistency rules — native KerML constraints (Epic EE-3).
2
- // Migrated from the proprietary ConsistencyRule predicate-attribute parts to
3
- // native `constraint def` bodies whose `constraint { … }` expression is
4
- // evaluated directly by the KerML constraint evaluator (validator/constraint-eval.ts).
5
- //
6
- // Rule metadata (id, appliesTo subject kind, severity, rationale) travels as plain
7
- // attribute members; the boolean body is the rule. Per the EE-3 mapping the native
8
- // surface drops the legacy `direction`/`relatedKinds` qualifiers — navigation counts
9
- // related elements in either direction. Cross-element `uniqueAttribute` (CR-MED-012)
10
- // has no single-subject expression and stays an engine-level exception (see note).
1
+ // Closure consistency rules. Portable SysML bodies remain literal `true` where
2
+ // cross-model navigation is not resolvable by a general SysML compiler; MEMO
3
+ // compiles the ontology-owned `predicateExpression` against the semantic model.
11
4
  package memo_rules_closure {
12
5
  private import ScalarValues::*;
13
6
 
@@ -16,8 +9,9 @@ package memo_rules_closure {
16
9
 
17
10
  // ─── Risk Layer Rules ────────────────────────────────────────────────
18
11
 
19
- constraint def hazardMitigationRule {
12
+ constraint def HazardMitigationRule :> MemoConsistencyRule {
20
13
  attribute id = "CR-MED-001";
14
+ attribute tailoring = RuleTailoringKind::assurance;
21
15
  attribute appliesTo = "Hazard";
22
16
  attribute severity = RuleSeverityKind::error;
23
17
  attribute rationaleText = "ISO 14971 requires each identified hazard to have risk control measures.";
@@ -25,17 +19,19 @@ package memo_rules_closure {
25
19
  constraint { true }
26
20
  }
27
21
 
28
- constraint def hazardSeverityRule {
22
+ constraint def HazardSeverityRule :> MemoConsistencyRule {
29
23
  attribute id = "CR-MED-002";
24
+ attribute tailoring = RuleTailoringKind::assurance;
30
25
  attribute appliesTo = "Hazard";
31
26
  attribute severity = RuleSeverityKind::error;
32
27
  attribute rationaleText = "Hazard severity is required for risk estimation per ISO 14971.";
33
- attribute predicateExpression = "attributes.severity != \"\"";
28
+ attribute predicateExpression = "attributes.severity != ''";
34
29
  constraint { true }
35
30
  }
36
31
 
37
- constraint def riskControlVerificationRule {
32
+ constraint def RiskControlVerificationRule :> MemoConsistencyRule {
38
33
  attribute id = "CR-MED-003";
34
+ attribute tailoring = RuleTailoringKind::assurance;
39
35
  attribute appliesTo = "RiskControlMeasure";
40
36
  attribute severity = RuleSeverityKind::error;
41
37
  attribute rationaleText = "Risk controls shall be verified per ISO 14971 clause 7.4.";
@@ -43,8 +39,9 @@ package memo_rules_closure {
43
39
  constraint { true }
44
40
  }
45
41
 
46
- constraint def initialRiskMatrixRule {
42
+ constraint def InitialRiskMatrixRule :> MemoConsistencyRule {
47
43
  attribute id = "CR-MED-004";
44
+ attribute tailoring = RuleTailoringKind::assurance;
48
45
  attribute appliesTo = "Risk";
49
46
  attribute severity = RuleSeverityKind::warning;
50
47
  attribute rationaleText = "Pre-mitigation risk must be assessed against a risk acceptability matrix.";
@@ -54,8 +51,9 @@ package memo_rules_closure {
54
51
 
55
52
  // ─── Requirements Layer Rules ────────────────────────────────────────
56
53
 
57
- constraint def sysReqTraceRule {
54
+ constraint def SysReqTraceRule :> MemoConsistencyRule {
58
55
  attribute id = "CR-MED-010";
56
+ attribute tailoring = RuleTailoringKind::assurance;
59
57
  attribute appliesTo = "Requirement[requirementKind=system]";
60
58
  attribute severity = RuleSeverityKind::error;
61
59
  attribute rationaleText = "Requirements shall be traceable to stakeholder needs per ISO 13485.";
@@ -63,8 +61,9 @@ package memo_rules_closure {
63
61
  constraint { true }
64
62
  }
65
63
 
66
- constraint def swReqTraceRule {
64
+ constraint def SwReqTraceRule :> MemoConsistencyRule {
67
65
  attribute id = "CR-MED-011";
66
+ attribute tailoring = RuleTailoringKind::assurance;
68
67
  attribute appliesTo = "Requirement[requirementKind=software]";
69
68
  attribute severity = RuleSeverityKind::error;
70
69
  attribute rationaleText = "Software requirements derive from system requirements per IEC 62304.";
@@ -80,17 +79,19 @@ package memo_rules_closure {
80
79
 
81
80
  // ─── Architecture Layer Rules ────────────────────────────────────────
82
81
 
83
- constraint def swComponentSafetyClassRule {
82
+ constraint def SwComponentSafetyClassRule :> MemoConsistencyRule {
84
83
  attribute id = "CR-MED-020";
84
+ attribute tailoring = RuleTailoringKind::assurance;
85
85
  attribute appliesTo = "SoftwareModule";
86
86
  attribute severity = RuleSeverityKind::error;
87
87
  attribute rationaleText = "IEC 62304 requires safety classification for all software items.";
88
- attribute predicateExpression = "attributes.safetyClass != \"\"";
88
+ attribute predicateExpression = "attributes.safetyClass != ''";
89
89
  constraint { true }
90
90
  }
91
91
 
92
- constraint def swComponentReqRule {
92
+ constraint def SwComponentReqRule :> MemoConsistencyRule {
93
93
  attribute id = "CR-MED-021";
94
+ attribute tailoring = RuleTailoringKind::assurance;
94
95
  attribute appliesTo = "SoftwareModule";
95
96
  attribute severity = RuleSeverityKind::warning;
96
97
  attribute rationaleText = "Software items shall be linked to their requirements per IEC 62304.";
@@ -98,8 +99,9 @@ package memo_rules_closure {
98
99
  constraint { true }
99
100
  }
100
101
 
101
- constraint def logicalFunctionAllocationRule {
102
+ constraint def LogicalFunctionAllocationRule :> MemoConsistencyRule {
102
103
  attribute id = "CR-MED-022";
104
+ attribute tailoring = RuleTailoringKind::assurance;
103
105
  attribute appliesTo = "SystemFunction";
104
106
  attribute severity = RuleSeverityKind::warning;
105
107
  attribute rationaleText = "Functions should be allocated to implementation elements.";
@@ -109,17 +111,19 @@ package memo_rules_closure {
109
111
 
110
112
  // ─── Verification Layer Rules ────────────────────────────────────────
111
113
 
112
- constraint def verificationCaseMethodRule {
114
+ constraint def VerificationCaseMethodRule :> MemoConsistencyRule {
113
115
  attribute id = "CR-MED-030";
116
+ attribute tailoring = RuleTailoringKind::assurance;
114
117
  attribute appliesTo = "VerificationCase";
115
118
  attribute severity = RuleSeverityKind::error;
116
119
  attribute rationaleText = "Verification method (test, analysis, inspection, demonstration) required per IEC 62304.";
117
- attribute predicateExpression = "attributes.methodKind != \"\"";
120
+ attribute predicateExpression = "attributes.methodKind != ''";
118
121
  constraint { true }
119
122
  }
120
123
 
121
- constraint def verificationCaseTargetRule {
124
+ constraint def VerificationCaseTargetRule :> MemoConsistencyRule {
122
125
  attribute id = "CR-MED-031";
126
+ attribute tailoring = RuleTailoringKind::assurance;
123
127
  attribute appliesTo = "VerificationCase";
124
128
  attribute severity = RuleSeverityKind::error;
125
129
  attribute rationaleText = "Verification cases must be linked to verifiable items.";
@@ -127,8 +131,9 @@ package memo_rules_closure {
127
131
  constraint { true }
128
132
  }
129
133
 
130
- constraint def evidenceProductionRule {
134
+ constraint def EvidenceProductionRule :> MemoConsistencyRule {
131
135
  attribute id = "CR-MED-032";
136
+ attribute tailoring = RuleTailoringKind::assurance;
132
137
  attribute appliesTo = "VerificationCase";
133
138
  attribute severity = RuleSeverityKind::warning;
134
139
  attribute rationaleText = "Verification results should be documented as evidence records.";
@@ -138,8 +143,9 @@ package memo_rules_closure {
138
143
 
139
144
  // ─── Cybersecurity Layer Rules ───────────────────────────────────────
140
145
 
141
- constraint def threatMitigationRule {
146
+ constraint def ThreatMitigationRule :> MemoConsistencyRule {
142
147
  attribute id = "CR-MED-040";
148
+ attribute tailoring = RuleTailoringKind::assurance;
143
149
  attribute appliesTo = "Threat";
144
150
  attribute severity = RuleSeverityKind::error;
145
151
  attribute rationaleText = "FDA cybersecurity guidance requires threat mitigation.";
@@ -147,8 +153,9 @@ package memo_rules_closure {
147
153
  constraint { true }
148
154
  }
149
155
 
150
- constraint def assetThreatLinkRule {
156
+ constraint def AssetThreatLinkRule :> MemoConsistencyRule {
151
157
  attribute id = "CR-MED-041";
158
+ attribute tailoring = RuleTailoringKind::assurance;
152
159
  attribute appliesTo = "CybersecurityAsset";
153
160
  attribute severity = RuleSeverityKind::warning;
154
161
  attribute rationaleText = "Assets should have threat analysis per FDA cybersecurity guidance.";
@@ -158,23 +165,89 @@ package memo_rules_closure {
158
165
 
159
166
  // ─── Interface Rules ─────────────────────────────────────────────────
160
167
 
161
- constraint def logicalInterfaceDirectionRule {
168
+ constraint def LogicalInterfaceDirectionRule :> MemoConsistencyRule {
162
169
  attribute id = "CR-MED-050";
170
+ attribute tailoring = RuleTailoringKind::assurance;
163
171
  attribute appliesTo = "Interface";
164
172
  attribute severity = RuleSeverityKind::error;
165
173
  attribute rationaleText = "Interface direction required for integration analysis.";
166
- attribute predicateExpression = "attributes.direction != \"\"";
174
+ attribute predicateExpression = "attributes.direction != '' or attributes.directionality != ''";
167
175
  constraint { true }
168
176
  }
169
177
 
170
178
  // ─── Conditional Rules ───────────────────────────────────────────────
171
179
 
172
- constraint def safetyClassCVerificationRule {
180
+ constraint def SafetyClassCVerificationRule :> MemoConsistencyRule {
173
181
  attribute id = "CR-MED-101";
182
+ attribute tailoring = RuleTailoringKind::assurance;
174
183
  attribute appliesTo = "SoftwareModule";
175
184
  attribute severity = RuleSeverityKind::error;
176
185
  attribute rationaleText = "IEC 62304 requires rigorous verification for Class C software.";
177
- attribute predicateExpression = "not(attributes.safetyClass == \"C\") or verifiedBy->size() >= 1";
186
+ attribute predicateExpression = "not(attributes.safetyClass == 'C') or verifiedBy->size() >= 1";
187
+ constraint { true }
188
+ }
189
+
190
+ // ─── UI Layout Rules ─────────────────────────────────────────────────
191
+ //
192
+ // Traceability only: every part of a screen must have a design record
193
+ // behind it, and captured evidence must say where it came from.
194
+ //
195
+ // Scope is traceability, not geometry. Layout correctness (child within
196
+ // parent, inline siblings disjoint) is checked where the geometry is drawn,
197
+ // in the renderer: a pairwise sibling comparison has no KerML constraint
198
+ // form, since the evaluator has no Real literal and binds one implicit
199
+ // subject per quantifier.
200
+
201
+ // The load-bearing traceability rule. A UI element that is not chrome must
202
+ // reach a design record — a requirement it satisfies, or an action it
203
+ // triggers. Chrome must be DECLARED `decoration`; an element left
204
+ // unclassified fails rather than passing as scenery.
205
+ constraint def UiElementDesignRecordRule :> MemoConsistencyRule {
206
+ attribute id = "CR-MED-110";
207
+ attribute tailoring = RuleTailoringKind::assurance;
208
+ attribute appliesTo = "UIElement";
209
+ attribute severity = RuleSeverityKind::error;
210
+ attribute rationaleText = "Every functional UI element must have a design record — a requirement it satisfies or an action it triggers. Elements with formKind `decoration` are chrome and are exempt.";
211
+ attribute predicateExpression = "attributes.formKind == 'decoration' or satisfiedBy->size() >= 1 or elementTriggersAction->size() >= 1";
212
+ constraint { true }
213
+ }
214
+
215
+ // Interactive UI is where use error happens (IEC 62366-1), so a control
216
+ // that reaches no system function is either dead UI or unmodelled UI.
217
+ // The interactive-form restriction lives in the predicate because it spans
218
+ // several enum values.
219
+ constraint def ControlInvokesFunctionRule :> MemoConsistencyRule {
220
+ attribute id = "CR-MED-111";
221
+ attribute tailoring = RuleTailoringKind::assurance;
222
+ attribute appliesTo = "UIElement";
223
+ attribute severity = RuleSeverityKind::warning;
224
+ attribute rationaleText = "An interactive UI element (button, selector, slider, field) should trigger a UIAction that invokes a system function; otherwise the control's purpose is not in the model. Physical controls are OperatorInterfaceElement and are covered separately.";
225
+ attribute predicateExpression = "not(formKind == 'button' or formKind == 'selector' or formKind == 'slider' or formKind == 'field') or elementTriggersAction->size() >= 1";
226
+ constraint { true }
227
+ }
228
+
229
+ // Automatic boundary detection proposes; a reviewer disposes. An
230
+ // unconfirmed machine guess must never reach a design review looking like
231
+ // an engineering decision.
232
+ constraint def BoundsDetectionConfirmedRule :> MemoConsistencyRule {
233
+ attribute id = "CR-MED-112";
234
+ attribute tailoring = RuleTailoringKind::assurance;
235
+ attribute appliesTo = "UIElement";
236
+ attribute severity = RuleSeverityKind::warning;
237
+ attribute rationaleText = "Automatically detected bounds are a proposal until a reviewer confirms them; released UI documentation should contain no unconfirmed automatic bounds.";
238
+ attribute predicateExpression = "not(attributes.detectionMethod == 'automatic') or attributes.confirmedBy != ''";
239
+ constraint { true }
240
+ }
241
+
242
+ // A screenshot with no build behind it is undated design intent, not
243
+ // evidence of what the device does.
244
+ constraint def ScreenCaptureProvenanceRule :> MemoConsistencyRule {
245
+ attribute id = "CR-MED-113";
246
+ attribute tailoring = RuleTailoringKind::assurance;
247
+ attribute appliesTo = "ScreenCapture";
248
+ attribute severity = RuleSeverityKind::error;
249
+ attribute rationaleText = "A screen capture used as design or usability evidence must identify the build it was taken from and hash the image bytes, or it cannot be relied on in the DHF.";
250
+ attribute predicateExpression = "attributes.capturedBuild != '' and attributes.imageHash != ''";
178
251
  constraint { true }
179
252
  }
180
253
  }
@@ -1,258 +1,6 @@
1
- // C2 coverage rule packs per regulatory standard — Epic EE-3.
2
- //
3
- // Coverage rules assert model-level *existence* ("the model must contain at least
4
- // one X for standard S"). Existence over the whole model is not a single-subject
5
- // boolean predicate, so it has no `constraint { … }` body. The legacy
6
- // `predicate="coverageCheck"` parts were likewise never evaluated by the rule engine
7
- // (toClosureRule returned undefined for coverageCheck), so they produced no
8
- // violations — parity is preserved by keeping these as metadata-only constraint defs.
9
- //
10
- // Each rule retains its standard / clause / coverageTarget metadata so the coverage
11
- // catalog and DHF traceability stay intact; the constraint loader skips defs with no
12
- // require/assert body, so none of these fire. Model-level coverage is reported by the
13
- // completeness tooling, not the per-subject constraint evaluator. The proprietary
14
- // `predicate="…"` attribute pattern is removed per EE-3.
1
+ // Regulatory coverage is project-profile dependent and is calculated by the
2
+ // completeness and coverage reports. A universal per-element constraint would
3
+ // incorrectly require every project to implement every standard pack, so this
4
+ // package declares no consistency constraints.
15
5
  package memo_rules_coverage {
16
- private import ScalarValues::*;
17
-
18
- private import memo_core_consistency_rules::*;
19
- private import memo_core_enumerations::*;
20
-
21
- // ─── ISO 14971: Risk Management ──────────────────────────────────────
22
-
23
- constraint def iso14971HazardCoverage {
24
- attribute id = "COV-14971-001";
25
- attribute appliesTo = "Hazard";
26
- attribute severity = RuleSeverityKind::error;
27
- attribute rationaleText = "ISO 14971 clause 5.4 requires hazard identification.";
28
- attribute standardReference = "ISO 14971";
29
- attribute clause = "5.4";
30
- attribute coverageTarget = "Hazard";
31
- }
32
-
33
- constraint def iso14971RiskMatrixCoverage {
34
- attribute id = "COV-14971-002";
35
- attribute appliesTo = "RiskMatrix";
36
- attribute severity = RuleSeverityKind::error;
37
- attribute rationaleText = "ISO 14971 clause 5.5 requires risk estimation and evaluation criteria.";
38
- attribute standardReference = "ISO 14971";
39
- attribute clause = "5.5";
40
- attribute coverageTarget = "RiskMatrix";
41
- }
42
-
43
- constraint def iso14971ResidualRiskCoverage {
44
- attribute id = "COV-14971-003";
45
- attribute appliesTo = "OverallResidualRiskEvaluation";
46
- attribute severity = RuleSeverityKind::warning;
47
- attribute rationaleText = "ISO 14971 clause 8 requires overall residual risk evaluation.";
48
- attribute standardReference = "ISO 14971";
49
- attribute clause = "8";
50
- attribute coverageTarget = "OverallResidualRiskEvaluation";
51
- }
52
-
53
- // ─── IEC 62304: Software Lifecycle ───────────────────────────────────
54
-
55
- constraint def iec62304SwArchCoverage {
56
- attribute id = "COV-62304-001";
57
- attribute appliesTo = "SoftwareModule";
58
- attribute severity = RuleSeverityKind::error;
59
- attribute rationaleText = "IEC 62304 clause 5.3 requires software architecture.";
60
- attribute standardReference = "IEC 62304";
61
- attribute clause = "5.3";
62
- attribute coverageTarget = "SoftwareModule";
63
- }
64
-
65
- constraint def iec62304SwReqCoverage {
66
- attribute id = "COV-62304-002";
67
- attribute appliesTo = "Requirement[requirementKind=software]";
68
- attribute severity = RuleSeverityKind::error;
69
- attribute rationaleText = "IEC 62304 clause 5.2 requires software requirements specification.";
70
- attribute standardReference = "IEC 62304";
71
- attribute clause = "5.2";
72
- attribute coverageTarget = "Requirement[requirementKind=software]";
73
- }
74
-
75
- // ─── FDA 21 CFR 820: Quality System ──────────────────────────────────
76
-
77
- constraint def fda820DesignInputCoverage {
78
- attribute id = "COV-820-001";
79
- attribute appliesTo = "Requirement[requirementKind=system]";
80
- attribute severity = RuleSeverityKind::error;
81
- attribute rationaleText = "21 CFR 820.30(c) requires design inputs including requirements.";
82
- attribute standardReference = "FDA 21 CFR 820";
83
- attribute clause = "820.30(c)";
84
- attribute coverageTarget = "Requirement[requirementKind=system]";
85
- }
86
-
87
- constraint def fda820DesignVerificationCoverage {
88
- attribute id = "COV-820-002";
89
- attribute appliesTo = "VerificationCase";
90
- attribute severity = RuleSeverityKind::error;
91
- attribute rationaleText = "21 CFR 820.30(f) requires design verification.";
92
- attribute standardReference = "FDA 21 CFR 820";
93
- attribute clause = "820.30(f)";
94
- attribute coverageTarget = "VerificationCase";
95
- }
96
-
97
- // ─── ISO 13485: Quality Management ───────────────────────────────────
98
-
99
- constraint def iso13485StakeholderNeedCoverage {
100
- attribute id = "COV-13485-001";
101
- attribute appliesTo = "Need[needKind=stakeholder]";
102
- attribute severity = RuleSeverityKind::error;
103
- attribute rationaleText = "ISO 13485 clause 7.2 requires determination of customer requirements.";
104
- attribute standardReference = "ISO 13485";
105
- attribute clause = "7.2";
106
- attribute coverageTarget = "Need[needKind=stakeholder]";
107
- }
108
-
109
- // ─── ISO 14155: Clinical Investigations ──────────────────────────────
110
-
111
- constraint def iso14155UseContextCoverage {
112
- attribute id = "COV-14155-001";
113
- attribute appliesTo = "UseContext";
114
- attribute severity = RuleSeverityKind::warning;
115
- attribute rationaleText = "ISO 14155 requires definition of clinical investigation context.";
116
- attribute standardReference = "ISO 14155";
117
- attribute clause = "6";
118
- attribute coverageTarget = "UseContext";
119
- }
120
-
121
- // ─── FDA Cybersecurity Guidance ──────────────────────────────────────
122
-
123
- constraint def fdaCyberThreatCoverage {
124
- attribute id = "COV-CYBER-001";
125
- attribute appliesTo = "Threat";
126
- attribute severity = RuleSeverityKind::error;
127
- attribute rationaleText = "FDA cybersecurity guidance requires threat modeling.";
128
- attribute standardReference = "FDA Cybersecurity";
129
- attribute clause = "V.A";
130
- attribute coverageTarget = "Threat";
131
- }
132
-
133
- constraint def fdaCyberAssetCoverage {
134
- attribute id = "COV-CYBER-002";
135
- attribute appliesTo = "CybersecurityAsset";
136
- attribute severity = RuleSeverityKind::error;
137
- attribute rationaleText = "FDA cybersecurity guidance requires asset identification.";
138
- attribute standardReference = "FDA Cybersecurity";
139
- attribute clause = "V.A";
140
- attribute coverageTarget = "CybersecurityAsset";
141
- }
142
-
143
- constraint def fdaCyberVulnerabilityCoverage {
144
- attribute id = "COV-CYBER-003";
145
- attribute appliesTo = "Vulnerability";
146
- attribute severity = RuleSeverityKind::error;
147
- attribute rationaleText = "FDA cybersecurity guidance requires vulnerability analysis.";
148
- attribute standardReference = "FDA Cybersecurity";
149
- attribute clause = "V.B";
150
- attribute coverageTarget = "Vulnerability";
151
- }
152
-
153
- constraint def fdaCyberTrustBoundaryCoverage {
154
- attribute id = "COV-CYBER-004";
155
- attribute appliesTo = "TrustBoundary";
156
- attribute severity = RuleSeverityKind::error;
157
- attribute rationaleText = "FDA cybersecurity guidance requires trust boundary identification.";
158
- attribute standardReference = "FDA Cybersecurity";
159
- attribute clause = "V.A";
160
- attribute coverageTarget = "TrustBoundary";
161
- }
162
-
163
- constraint def fdaCyberThreatScenarioCoverage {
164
- attribute id = "COV-CYBER-005";
165
- attribute appliesTo = "ThreatScenario";
166
- attribute severity = RuleSeverityKind::error;
167
- attribute rationaleText = "FDA cybersecurity guidance requires threat scenario analysis.";
168
- attribute standardReference = "FDA Cybersecurity";
169
- attribute clause = "V.A";
170
- attribute coverageTarget = "ThreatScenario";
171
- }
172
-
173
- constraint def fdaCyberMitigationCoverage {
174
- attribute id = "COV-CYBER-006";
175
- attribute appliesTo = "CyberMitigation";
176
- attribute severity = RuleSeverityKind::error;
177
- attribute rationaleText = "FDA cybersecurity guidance requires risk mitigation.";
178
- attribute standardReference = "FDA Cybersecurity";
179
- attribute clause = "V.C";
180
- attribute coverageTarget = "CyberMitigation";
181
- }
182
-
183
- constraint def fdaCyberRiskCoverage {
184
- attribute id = "COV-CYBER-007";
185
- attribute appliesTo = "CyberRisk";
186
- attribute severity = RuleSeverityKind::error;
187
- attribute rationaleText = "FDA cybersecurity guidance requires cyber risk assessment.";
188
- attribute standardReference = "FDA Cybersecurity";
189
- attribute clause = "V.B";
190
- attribute coverageTarget = "CyberRisk";
191
- }
192
-
193
- constraint def fdaCyberHazardCoverage {
194
- attribute id = "COV-CYBER-008";
195
- attribute appliesTo = "CyberHazard";
196
- attribute severity = RuleSeverityKind::error;
197
- attribute rationaleText = "FDA cybersecurity guidance requires cyber-safety hazard mapping.";
198
- attribute standardReference = "FDA Cybersecurity";
199
- attribute clause = "V.B";
200
- attribute coverageTarget = "CyberHazard";
201
- }
202
-
203
- constraint def fdaCyberSecurityReqCoverage {
204
- attribute id = "COV-CYBER-009";
205
- attribute appliesTo = "SecurityRequirement";
206
- attribute severity = RuleSeverityKind::error;
207
- attribute rationaleText = "FDA cybersecurity guidance requires security requirements derivation.";
208
- attribute standardReference = "FDA Cybersecurity";
209
- attribute clause = "V.C";
210
- attribute coverageTarget = "SecurityRequirement";
211
- }
212
-
213
- constraint def fdaCyberVerificationCoverage {
214
- attribute id = "COV-CYBER-010";
215
- attribute appliesTo = "VerificationCase";
216
- attribute severity = RuleSeverityKind::warning;
217
- attribute rationaleText = "FDA cybersecurity guidance requires security testing and verification.";
218
- attribute standardReference = "FDA Cybersecurity";
219
- attribute clause = "V.D";
220
- attribute coverageTarget = "VerificationCase";
221
- }
222
-
223
- // ─── IEC 62366: Usability Engineering ────────────────────────────────
224
-
225
- constraint def iec62366ActorCoverage {
226
- attribute id = "COV-62366-001";
227
- attribute appliesTo = "Actor";
228
- attribute severity = RuleSeverityKind::warning;
229
- attribute rationaleText = "IEC 62366 clause 5.1 requires user profile specification.";
230
- attribute standardReference = "IEC 62366";
231
- attribute clause = "5.1";
232
- attribute coverageTarget = "Actor";
233
- }
234
-
235
- // ─── IEC 60601-1: General Safety ─────────────────────────────────────
236
-
237
- constraint def iec60601HarmCoverage {
238
- attribute id = "COV-60601-001";
239
- attribute appliesTo = "Harm";
240
- attribute severity = RuleSeverityKind::error;
241
- attribute rationaleText = "IEC 60601-1 clause 4.2 requires identification of hazards and harms.";
242
- attribute standardReference = "IEC 60601-1";
243
- attribute clause = "4.2";
244
- attribute coverageTarget = "Harm";
245
- }
246
-
247
- // ─── IEC 82304-1: Health Software ────────────────────────────────────
248
-
249
- constraint def iec82304SwSystemCoverage {
250
- attribute id = "COV-82304-001";
251
- attribute appliesTo = "SoftwareSystem";
252
- attribute severity = RuleSeverityKind::error;
253
- attribute rationaleText = "IEC 82304-1 requires health software product definition.";
254
- attribute standardReference = "IEC 82304-1";
255
- attribute clause = "6.1";
256
- attribute coverageTarget = "SoftwareSystem";
257
- }
258
6
  }
@@ -1,14 +1,14 @@
1
- // Cross-layer rule pack — native KerML constraints.
2
- // Traceability between architecture layers, migrated from ConsistencyRule
3
- // predicate-attribute parts to native `constraint def` bodies.
1
+ // Cross-layer traceability constraints evaluated from their ontology-owned
2
+ // predicate expressions.
4
3
  package memo_rules_crosslayer {
5
4
  private import ScalarValues::*;
6
5
 
7
6
  private import memo_core_consistency_rules::*;
8
7
  private import memo_core_enumerations::*;
9
8
 
10
- constraint def riskToReqTraceRule {
9
+ constraint def RiskToReqTraceRule :> MemoConsistencyRule {
11
10
  attribute id = "XL-001";
11
+ attribute tailoring = RuleTailoringKind::assurance;
12
12
  attribute appliesTo = "Hazard";
13
13
  attribute severity = RuleSeverityKind::warning;
14
14
  attribute rationaleText = "Risk-requirement traceability required for regulatory submissions.";
@@ -16,8 +16,9 @@ package memo_rules_crosslayer {
16
16
  constraint { true }
17
17
  }
18
18
 
19
- constraint def reqToArchTraceRule {
19
+ constraint def ReqToArchTraceRule :> MemoConsistencyRule {
20
20
  attribute id = "XL-002";
21
+ attribute tailoring = RuleTailoringKind::assurance;
21
22
  attribute appliesTo = "Requirement[requirementKind=system]";
22
23
  attribute severity = RuleSeverityKind::warning;
23
24
  attribute rationaleText = "Requirements-to-architecture traceability per IEC 62304.";
@@ -25,14 +26,4 @@ package memo_rules_crosslayer {
25
26
  constraint { true }
26
27
  }
27
28
 
28
- // XL-003 had minCount=0 (advisory only), so the native form is vacuously true
29
- // (size >= 0). Retained for metadata/rationale parity; flags nothing.
30
- constraint def cyberToSafetyTraceRule {
31
- attribute id = "XL-003";
32
- attribute appliesTo = "CyberHazard";
33
- attribute severity = RuleSeverityKind::warning;
34
- attribute rationaleText = "FDA cybersecurity guidance requires linking cybersecurity to patient safety.";
35
- attribute predicateExpression = "impactsSafety->size() >= 0";
36
- constraint { true }
37
- }
38
29
  }
@@ -1,41 +1,6 @@
1
- // C3 lifecycle rule pack — Epic EE-3.
2
- // These rules express lifecycle-stage *ordering* (requirements before architecture,
3
- // risk before verification, evidence after verification). Ordering across the whole
4
- // model is not a single-subject boolean predicate, so it has no `require constraint`
5
- // body — and the legacy parts never enforced anything either (they carried
6
- // predicate=requireRelationship with no relationshipType, so they matched nothing).
7
- //
8
- // They are retained here as metadata-only constraint defs (id, subject, rationale)
9
- // so the catalog and traceability stay intact; the constraint loader skips defs that
10
- // have no require/assert body, so they evaluate to nothing — exactly as before.
11
- // The proprietary `predicate="…"` attribute pattern is removed per EE-3.
1
+ // Lifecycle ordering requires modeled execution timestamps or revision events.
2
+ // MEMO currently carries neither on the affected architecture elements, so this
3
+ // package declares no consistency constraint: stage guidance is reported by the
4
+ // methodology workflow instead of presenting an unevaluable rule as assurance.
12
5
  package memo_rules_lifecycle {
13
- private import ScalarValues::*;
14
-
15
- private import memo_core_consistency_rules::*;
16
- private import memo_core_enumerations::*;
17
-
18
- constraint def reqBeforeArchRule {
19
- attribute id = "LC-001";
20
- attribute appliesTo = "SoftwareModule";
21
- attribute severity = RuleSeverityKind::warning;
22
- attribute rationaleText = "IEC 62304 requires requirements to precede architecture decomposition.";
23
- // Lifecycle ordering — model-level, no single-subject predicate.
24
- }
25
-
26
- constraint def riskBeforeVerificationRule {
27
- attribute id = "LC-002";
28
- attribute appliesTo = "VerificationCase";
29
- attribute severity = RuleSeverityKind::warning;
30
- attribute rationaleText = "Risk controls drive verification scope per ISO 14971.";
31
- // Lifecycle ordering — model-level, no single-subject predicate.
32
- }
33
-
34
- constraint def evidenceAfterVerificationRule {
35
- attribute id = "LC-003";
36
- attribute appliesTo = "Evidence";
37
- attribute severity = RuleSeverityKind::info;
38
- attribute rationaleText = "Evidence is produced by executing verification — ordering matters for DHF assembly.";
39
- // Lifecycle ordering — model-level, no single-subject predicate.
40
- }
41
6
  }