@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.
- package/README.md +4 -2
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
- package/examples/connected-patient-monitor/model/catalog/project.sysml +24 -0
- package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/connected-patient-monitor/model/{viewpoints → catalog/viewpoints/unassigned/views}/connected_patient_monitor_overview.sysml +1 -1
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
- package/examples/embedded-infusion-pump/model/catalog/project.sysml +24 -0
- package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/embedded-infusion-pump/model/{viewpoints → catalog/viewpoints/unassigned/views}/embedded_infusion_pump_overview.sysml +1 -1
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
- package/examples/functional-logical-physical/model/catalog/project.sysml +24 -0
- package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/functional-logical-physical/model/{viewpoints → catalog/viewpoints/unassigned/views}/functional_logical_physical_overview.sysml +1 -1
- package/examples/gpca-pump/methodology/gpca_methodology.sysml +7 -8
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +89 -11
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +19 -9
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +342 -100
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +27 -13
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +329 -272
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +57 -16
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +12 -8
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -10
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +181 -264
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +95 -60
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -11
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +102 -101
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +47 -30
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +301 -354
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +116 -36
- package/examples/gpca-pump/model/catalog/project.sysml +26 -0
- package/examples/gpca-pump/model/catalog/viewpoints/context/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/context/views}/context_system_context_view.sysml +4 -4
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/cybersecurity_cybersecurity_view.sysml +4 -4
- package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_cyber_assessment_view.sysml +4 -4
- package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_threat_model_view.sysml +5 -5
- package/examples/gpca-pump/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_allocation_view.sysml +2 -2
- package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_browser_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/behavior_action_flow_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/document_architecture_description_view.sysml +8 -8
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_device_interconnect_view.sysml +5 -5
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_logical_architecture_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_mode_state_view.sysml +4 -4
- package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_system_decomposition_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/operational/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_scenario_sequence_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +4 -4
- package/examples/gpca-pump/model/catalog/viewpoints/physical/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/physical/views}/physical_physical_bom_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/document_dhf_index_view.sysml +8 -8
- package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/requirements_requirements_trace_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_hazard_analysis_view.sysml +8 -5
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +7 -5
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_risk_chain_view.sysml +3 -3
- package/examples/gpca-pump/model/catalog/viewpoints/software/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/document_sdd_view.sysml +4 -4
- package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +5 -5
- package/examples/gpca-pump/model/catalog/viewpoints/usability/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/usability/views}/document_usability_view.sysml +8 -6
- package/examples/gpca-pump/model/catalog/viewpoints/verification/viewpoint.sysml +8 -0
- package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/document_vv_view.sysml +7 -5
- package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +3 -3
- package/examples/ivd-laboratory-system/model/catalog/project.sysml +24 -0
- package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/ivd-laboratory-system/model/{viewpoints → catalog/viewpoints/unassigned/views}/ivd_laboratory_system_overview.sysml +1 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +4 -2
- package/examples/manual-surgical-instrument/model/catalog/project.sysml +24 -0
- package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/manual-surgical-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/manual_surgical_instrument_overview.sysml +1 -1
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
- package/examples/multidimensional-layers/model/catalog/project.sysml +24 -0
- package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/multidimensional-layers/model/{viewpoints → catalog/viewpoints/unassigned/views}/multidimensional_layers_overview.sysml +1 -1
- package/examples/nested-architecture-dsm/README.md +49 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +179 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +165 -0
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +53 -0
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +89 -0
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +113 -0
- package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
- package/examples/nested-architecture-dsm/model/catalog/traces.sysml +48 -0
- package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +11 -8
- package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/reusable-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/reusable_instrument_overview.sysml +1 -1
- package/examples/ros-mobile-robot/README.md +40 -0
- package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
- package/examples/software-only-medical-device/model/catalog/project.sysml +28 -0
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
- package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/software-only-medical-device/model/{viewpoints → catalog/viewpoints/unassigned/views}/software_only_medical_device_overview.sysml +1 -1
- package/examples/surgical-closure-workflow/model/catalog/project.sysml +24 -0
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +57 -57
- package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/surgical-closure-workflow/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_closure_workflow_overview.sysml +1 -1
- package/examples/surgical-robot/model/catalog/project.sysml +24 -0
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +6 -4
- package/examples/surgical-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/surgical-robot/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_robot_overview.sysml +1 -1
- package/examples/sysml-diagram-samples/README.md +7 -0
- package/examples/sysml-diagram-samples/dhf/documents/DOC-HAR-001.md +11 -0
- package/examples/sysml-diagram-samples/memo.package.yaml +11 -5
- package/examples/sysml-diagram-samples/model/catalog/project.sysml +33 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/action_flow_view.sysml +23 -20
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +11 -11
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +143 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +87 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +109 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +13 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/requirements_view.sysml +6 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +33 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +80 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +48 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +15 -9
- package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +93 -0
- package/examples/temperature-alarm/model/catalog/project.sysml +24 -0
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +29 -21
- package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
- package/examples/temperature-alarm/model/{viewpoints → catalog/viewpoints/unassigned/views}/temperature_alarm_overview.sysml +1 -1
- package/examples/ui-screen-regions/README.md +117 -0
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +84 -0
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +212 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +61 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png +0 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png +0 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png +0 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +51 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +27 -0
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +27 -0
- package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +59 -0
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +25 -0
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +178 -0
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +93 -0
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +75 -0
- package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/traces.sysml +179 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +62 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +62 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +62 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/viewpoint.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +57 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +52 -0
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +54 -0
- package/extensions/LICENSES/MIT.txt +19 -0
- package/extensions/README.md +94 -0
- package/extensions/aadl/memo.package.yaml +18 -0
- package/extensions/aadl/src/aadl_extension.sysml +6 -0
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
- package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
- package/extensions/clinical/memo.package.yaml +18 -0
- package/extensions/clinical/src/methodology/clinical_methodology.sysml +22 -0
- package/extensions/cloud/memo.package.yaml +18 -0
- package/extensions/cloud/src/cloud_extension.sysml +44 -0
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
- package/extensions/container/memo.package.yaml +18 -0
- package/extensions/container/src/container_extension.sysml +37 -0
- package/extensions/container/src/methodology/container_methodology.sysml +17 -0
- package/extensions/messaging/memo.package.yaml +18 -0
- package/extensions/messaging/src/messaging_extension.sysml +64 -0
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
- package/extensions/ros/memo.package.yaml +18 -0
- package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
- package/extensions/ros/src/ros_extension.sysml +200 -0
- package/extensions/template/memo.package.yaml +17 -0
- package/extensions/template/src/extension.sysml +37 -0
- package/memo.manifest.yaml +15 -2
- package/methodologies/default/memo.package.yaml +19 -9
- package/methodologies/gpca/memo.package.yaml +18 -9
- package/ontology/memo.package.yaml +23 -8
- package/package.json +6 -6
- package/profile/memo.package.yaml +18 -9
- package/src/architecture/decisions/memo_decisions.sysml +28 -0
- package/src/architecture/functional/behavior/memo_behavior.sysml +50 -22
- package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
- package/src/architecture/functional/functions/memo_functions.sysml +93 -43
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -24
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +52 -12
- package/src/architecture/implementation/ui/memo_ui.sysml +276 -53
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +64 -13
- package/src/architecture/logical/structure/memo_logical_structure.sysml +92 -35
- package/src/architecture/operational/activities/memo_activities.sysml +10 -4
- package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
- package/src/architecture/operational/workflows/memo_workflows.sysml +28 -15
- package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
- package/src/artifacts/configuration_management/memo_configuration_management.sysml +35 -0
- package/src/artifacts/core/memo_controlled_artifacts.sysml +35 -0
- package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
- package/src/artifacts/standards/cfr_21_820.sysml +116 -0
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
- package/src/artifacts/standards/iec_60601_1.sysml +149 -0
- package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
- package/src/artifacts/standards/iec_60812.sysml +51 -0
- package/src/artifacts/standards/iec_62304.sysml +210 -0
- package/src/artifacts/standards/iec_62366_1.sysml +113 -0
- package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
- package/src/artifacts/standards/iso_13485.sysml +113 -0
- package/src/artifacts/standards/iso_14971.sysml +94 -0
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
- package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +1 -1
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +5 -5
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +1 -1
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +2 -2
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +2 -2
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +2 -2
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +1 -1
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +1 -1
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +3 -3
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +4 -4
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +1 -1
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +3 -2
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +2 -2
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +4 -4
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.md +4 -3
- package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/detailed-design.md +1 -1
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +3 -3
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +6 -5
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +3 -2
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +5 -4
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +4 -2
- package/src/artifacts/templates/dhf/iec-62304/srs.md +172 -0
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +3 -3
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.md +1 -1
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/summative-eval.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +93 -0
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.md +1 -1
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/urra.md +3 -3
- package/src/artifacts/templates/dhf/iso-14971/fmea.md +116 -0
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/har.md +3 -3
- package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmp.md +2 -2
- package/src/artifacts/templates/dhf/system/sad.md +173 -0
- package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
- package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
- package/src/artifacts/templates/dhf/system/syrs.md +128 -0
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
- package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
- package/src/assurance/requirements/memo_requirements.sysml +5 -2
- package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
- package/src/assurance/safety_risk/memo_risk.sysml +78 -7
- package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +27 -0
- package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
- package/src/core/annotations/memo_annotations.sysml +96 -0
- package/src/core/common/memo_common.sysml +140 -18
- package/src/core/consistency_rules/consistency_rules.sysml +7 -0
- package/src/core/dimensions/dimensions.sysml +17 -1
- package/src/core/enumerations/memo_enumerations.sysml +101 -20
- package/src/core/methodology_scope/methodology_scope.sysml +7 -15
- package/src/core/relationships/memo_relationships.sysml +199 -194
- package/src/memo_namespaces.sysml +127 -67
- package/src/methodology/core/memo_core.sysml +69 -2
- package/src/methodology/profiles/memo_profiles.sysml +31 -41
- package/src/methodology/workflow/memo_workflow.sysml +7 -2
- package/src/rules/closure/closure_rules.sysml +104 -31
- package/src/rules/coverage/coverage_rules.sysml +4 -256
- package/src/rules/crosslayer/cross_layer_rules.sysml +6 -15
- package/src/rules/lifecycle/lifecycle_rules.sysml +4 -39
- package/src/rules/ontology/ontology_invariants.sysml +243 -74
- package/src/rules/quantitative/quantitative_rules.sysml +8 -8
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +10 -3
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
- package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
- package/src/viewpoints/context/context_viewpoint.sysml +4 -2
- package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
- package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view → views/cybersecurity_assessment_view}/cybersecurity_assessment_view.sysml +2 -2
- package/src/viewpoints/cybersecurity/{threat_model_view → views/threat_model_view}/threat_model_view.sysml +2 -2
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +5 -0
- package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
- package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +3 -3
- package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +3 -3
- package/src/viewpoints/logical/logical_viewpoint.sysml +3 -1
- package/src/viewpoints/logical/{logical_architecture_view → views/logical_architecture_view}/logical_architecture_view.sysml +2 -2
- package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
- package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +3 -3
- package/src/viewpoints/physical/physical_viewpoint.sysml +3 -1
- package/src/viewpoints/physical/{network_topology_view → views/network_topology_view}/network_topology_view.sysml +2 -2
- package/src/viewpoints/physical/{physical_bom_view → views/physical_bom_view}/physical_bom_view.sysml +2 -2
- package/src/viewpoints/rendering/memo_rendering.sysml +354 -0
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -1
- package/src/viewpoints/requirements/{requirements_traceability_view → views/requirements_traceability_view}/requirements_traceability_view.sysml +2 -2
- package/src/viewpoints/risk/risk_viewpoint.sysml +3 -1
- package/src/viewpoints/risk/{risk_chain_view → views/risk_chain_view}/risk_chain_view.sysml +2 -2
- package/src/viewpoints/software/software_viewpoint.sysml +3 -1
- package/src/viewpoints/software/{software_architecture_view → views/software_architecture_view}/software_architecture_view.sysml +2 -2
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +28 -0
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +23 -0
- package/src/viewpoints/usability/usability_viewpoint.sysml +3 -1
- package/src/viewpoints/usability/{usability_engineering_view → views/usability_engineering_view}/usability_engineering_view.sysml +2 -2
- package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
- package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +3 -3
- package/templates/connected-device/memo.package.yaml +11 -5
- package/templates/connected-device/model/catalog/project.sysml +28 -0
- package/templates/connected-device/syside.toml +1 -1
- package/templates/default/memo.package.yaml +11 -5
- package/templates/default/model/catalog/project.sysml +28 -0
- package/templates/default/syside.toml +1 -1
- package/templates/infusion-pump/memo.package.yaml +11 -5
- package/templates/infusion-pump/model/catalog/project.sysml +28 -0
- package/templates/infusion-pump/syside.toml +1 -1
- package/templates/monitoring-device/memo.package.yaml +11 -5
- package/templates/monitoring-device/model/catalog/project.sysml +28 -0
- package/templates/monitoring-device/syside.toml +1 -1
- package/templates/samd/memo.package.yaml +11 -5
- package/templates/samd/model/catalog/project.sysml +28 -0
- package/templates/samd/syside.toml +1 -1
- package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +0 -3
- package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +0 -3
- package/examples/extensions/README.md +0 -16
- package/examples/extensions/clinical/memo.package.yaml +0 -9
- package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -14
- package/examples/extensions/template/memo.package.yaml +0 -9
- package/examples/extensions/template/src/extension.sysml +0 -15
- package/examples/functional-logical-physical/model/functional_logical_physical.sysml +0 -3
- package/examples/gpca-pump/memo.config.yaml +0 -9
- package/examples/gpca-pump/methodology/gpca_scope.sysml +0 -25
- package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +0 -3
- package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +0 -3
- package/examples/multidimensional-layers/model/multidimensional_layers.sysml +0 -4
- package/examples/reusable-instrument/model/reusable_instrument.sysml +0 -4
- package/examples/software-only-medical-device/model/software_only_medical_device.sysml +0 -4
- package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +0 -4
- package/examples/surgical-robot/model/surgical_robot.sysml +0 -4
- package/examples/sysml-diagram-samples/model/samples/functional_flow_view.sysml +0 -164
- package/examples/sysml-diagram-samples/model/samples/interconnection_view.sysml +0 -94
- package/examples/sysml-diagram-samples/model/samples/operational_behaviour_view.sysml +0 -135
- package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +0 -109
- package/examples/sysml-diagram-samples/model/samples/tree_view.sysml +0 -56
- package/examples/temperature-alarm/model/temperature_alarm.sysml +0 -4
- package/ontology/memo.rendering.yaml +0 -84
- package/src/compliance/artifacts/memo_artifacts.sysml +0 -12
- package/src/compliance/change/memo_change.sysml +0 -17
- package/src/compliance/dhf-templates/iec-62304/srs.md +0 -138
- package/src/compliance/dhf-templates/iec-62366/task-analysis.md +0 -57
- package/src/compliance/dhf-templates/iso-14971/fmea.md +0 -93
- package/src/compliance/document_views/memo_document_views.sysml +0 -7
- package/src/compliance/iso14971/risk_management_file.sysml +0 -16
- package/src/compliance/postmarket/memo_postmarket.sysml +0 -16
- /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/change-control.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/formative-eval.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ui-spec.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/use-spec.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fta.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-benefit.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-matrix.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmr.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/approval-block.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/document-control-header.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/references-section.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/revision-history-table.md +0 -0
- /package/templates/connected-device/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/connected-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/connected-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
- /package/templates/default/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/default/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/default/{src → model/catalog}/assurance/requirements.sysml +0 -0
- /package/templates/infusion-pump/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/infusion-pump/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/infusion-pump/{src → model/catalog}/assurance/requirements.sysml +0 -0
- /package/templates/monitoring-device/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/monitoring-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/monitoring-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
- /package/templates/samd/{src → model/catalog}/architecture/system.sysml +0 -0
- /package/templates/samd/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
- /package/templates/samd/{src → model/catalog}/assurance/requirements.sysml +0 -0
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
// Closure consistency rules
|
|
2
|
-
//
|
|
3
|
-
//
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 ==
|
|
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
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
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
|
|
2
|
-
//
|
|
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
|
|
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
|
|
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
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
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
|
}
|