@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,17 +1,19 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_viewpoints_verification_views_document_vv_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
5
5
|
private import memo_viewpoints_verification_verification_viewpoint::*;
|
|
6
6
|
private import memo_core_enumerations::*;
|
|
7
|
+
private import memo_examples_gpca_pump_gpca_verification::*;
|
|
7
8
|
|
|
8
9
|
view vvView : MemoDocumentView {
|
|
9
|
-
expose
|
|
10
|
+
expose memo_examples_gpca_pump_viewpoints_verification_views_document_vv_view::*;
|
|
11
|
+
expose evidenceSafetyAlarmSuite;
|
|
10
12
|
attribute :>> id = "DOC-006";
|
|
11
13
|
attribute :>> name = "VerificationValidationView";
|
|
12
14
|
attribute :>> title = "GPCA Verification and Validation View";
|
|
13
15
|
attribute :>> shortDescription = "V&V plan and coverage for requirements and risk controls.";
|
|
14
|
-
attribute :>>
|
|
16
|
+
attribute :>> description = "Aggregates verification cases, validation cases, test artifacts, and evidence with their coverage of requirements, risk controls, behavior properties, and timing constraints.";
|
|
15
17
|
attribute :>> version = "0.1";
|
|
16
18
|
attribute :>> lifecycleState = LifecycleStateKind::development;
|
|
17
19
|
attribute :>> viewKind = DocumentViewKind::VV;
|
|
@@ -23,8 +25,8 @@ package memo_examples_gpca_pump_model_views_document_vv_view {
|
|
|
23
25
|
part :>> selectionQuery {
|
|
24
26
|
attribute :>> id = "QRY-DOC-006";
|
|
25
27
|
attribute :>> name = "vvViewQuery";
|
|
26
|
-
attribute :>> includeElementKinds = ("VerificationCase", "ValidationCase", "
|
|
27
|
-
attribute :>> includeRelationshipKinds = ("VerifiedBy", "Validates", "TestedByUsability", "ProducesEvidence"
|
|
28
|
+
attribute :>> includeElementKinds = ("VerificationCase", "ValidationCase", "MemoEvidence", "Requirement", "RiskControlMeasure");
|
|
29
|
+
attribute :>> includeRelationshipKinds = ("VerifiedBy", "Validates", "TestedByUsability", "ProducesEvidence");
|
|
28
30
|
attribute :>> rationaleText = "Declares what this document-backed view renders; the web renderer is presentation-only.";
|
|
29
31
|
}
|
|
30
32
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_viewpoints_verification_views_verification_verification_coverage_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
@@ -14,7 +14,7 @@ package memo_examples_gpca_pump_model_views_verification_verification_coverage_v
|
|
|
14
14
|
private import memo_core_enumerations::*;
|
|
15
15
|
|
|
16
16
|
view gpcaVerificationCoverageView : MemoDiagramView {
|
|
17
|
-
expose
|
|
17
|
+
expose memo_examples_gpca_pump_viewpoints_verification_views_verification_verification_coverage_view::*;
|
|
18
18
|
attribute depth = 2;
|
|
19
19
|
attribute :>> id = "VIEW-VER-101";
|
|
20
20
|
attribute :>> name = "GPCA_VerificationCoverageView";
|
|
@@ -31,7 +31,7 @@ package memo_examples_gpca_pump_model_views_verification_verification_coverage_v
|
|
|
31
31
|
part :>> selectionQuery {
|
|
32
32
|
attribute :>> id = "QRY-VER-101";
|
|
33
33
|
attribute :>> name = "GPCA_VerificationCoverageQuery";
|
|
34
|
-
attribute :>> includeElementKinds = ("Requirement", "RiskControlMeasure", "VerificationCase", "ValidationCase", "
|
|
34
|
+
attribute :>> includeElementKinds = ("Requirement", "RiskControlMeasure", "VerificationCase", "ValidationCase", "MemoEvidence");
|
|
35
35
|
attribute :>> includeRelationshipKinds = ("VerifiedBy", "Validates", "ProducesEvidence");
|
|
36
36
|
attribute :>> includeLayers = ("requirements", "risk", "assurance");
|
|
37
37
|
attribute :>> selectionExpression = "product == 'GPCA'";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Ivd Laboratory System — project identity and method binding.
|
|
2
|
+
//
|
|
3
|
+
// The native entrypoint. The imports name what this project contains and the
|
|
4
|
+
// binding names the methodology it is governed by. No YAML file participates.
|
|
5
|
+
package memo_examples_ivd_laboratory_system_project {
|
|
6
|
+
private import ScalarValues::*;
|
|
7
|
+
|
|
8
|
+
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_methodology_core::*;
|
|
10
|
+
private import memo_methodology_profiles::*;
|
|
11
|
+
|
|
12
|
+
// The project's own content, imported so the catalog is one reachable
|
|
13
|
+
// closure from a single entrypoint.
|
|
14
|
+
private import memo_examples_ivd_laboratory_system_viewpoints_unassigned::*;
|
|
15
|
+
private import memo_examples_ivd_laboratory_system_viewpoints_unassigned_views_ivd_laboratory_system_overview::*;
|
|
16
|
+
|
|
17
|
+
part projectBinding : ProjectMethodBinding {
|
|
18
|
+
attribute :>> id = "PMB-LABORATORY-SYSTEM-001";
|
|
19
|
+
attribute :>> name = "IvdLaboratorySystemProjectMethodBinding";
|
|
20
|
+
attribute :>> projectName = "Ivd Laboratory System";
|
|
21
|
+
ref :>> selectedMethodology = mdDefaultDefinition;
|
|
22
|
+
attribute :>> scopeMode = ScopeModeKind::explicit;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// unassigned viewpoint.
|
|
2
|
+
//
|
|
3
|
+
// This project does not define its own viewpoint here; it binds the reusable
|
|
4
|
+
// MEMO viewpoint that frames these concerns. The views it governs sit beneath
|
|
5
|
+
// `views/`.
|
|
6
|
+
package memo_examples_ivd_laboratory_system_viewpoints_unassigned {
|
|
7
|
+
// The reusable package declaring unassigned could not be resolved during
|
|
8
|
+
// conversion. Import it here so the views beneath this viewpoint resolve.
|
|
9
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_ivd_laboratory_system_viewpoints_unassigned_views_ivd_laboratory_system_overview {
|
|
2
2
|
private import memo_examples_ivd_laboratory_system::*;
|
|
3
3
|
private import memo_viewpoints_definitions::*;
|
|
4
4
|
private import memo_core_enumerations::*;
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
// without adding functional, logical, or software layers.
|
|
4
4
|
package memo_examples_manual_surgical_instrument {
|
|
5
5
|
private import ScalarValues::*;
|
|
6
|
+
private import ModelingMetadata::*;
|
|
6
7
|
|
|
7
8
|
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_core_relationships::*;
|
|
8
10
|
private import memo_architecture_operational_activities::*;
|
|
9
11
|
private import memo_architecture_implementation_hardware_structure::*;
|
|
10
12
|
|
|
@@ -28,8 +30,8 @@ package memo_examples_manual_surgical_instrument {
|
|
|
28
30
|
attribute :>> mechanicalFunction = "maintains jaw clamping force without continuous grip";
|
|
29
31
|
attribute :>> patientContact = false;
|
|
30
32
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
#refinement dependency needleHolder to jawAssembly;
|
|
34
|
+
#refinement dependency needleHolder to ratchetLock;
|
|
33
35
|
|
|
34
36
|
// A task may be traced to the architecture later when the project has a
|
|
35
37
|
// specific allocation or interaction claim to make.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Manual Surgical Instrument — project identity and method binding.
|
|
2
|
+
//
|
|
3
|
+
// The native entrypoint. The imports name what this project contains and the
|
|
4
|
+
// binding names the methodology it is governed by. No YAML file participates.
|
|
5
|
+
package memo_examples_manual_surgical_instrument_project {
|
|
6
|
+
private import ScalarValues::*;
|
|
7
|
+
|
|
8
|
+
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_methodology_core::*;
|
|
10
|
+
private import memo_methodology_profiles::*;
|
|
11
|
+
|
|
12
|
+
// The project's own content, imported so the catalog is one reachable
|
|
13
|
+
// closure from a single entrypoint.
|
|
14
|
+
private import memo_examples_manual_surgical_instrument_viewpoints_unassigned::*;
|
|
15
|
+
private import memo_examples_manual_surgical_instrument_viewpoints_unassigned_views_manual_surgical_instrument_overview::*;
|
|
16
|
+
|
|
17
|
+
part projectBinding : ProjectMethodBinding {
|
|
18
|
+
attribute :>> id = "PMB-SURGICAL-INSTRUMENT-001";
|
|
19
|
+
attribute :>> name = "ManualSurgicalInstrumentProjectMethodBinding";
|
|
20
|
+
attribute :>> projectName = "Manual Surgical Instrument";
|
|
21
|
+
ref :>> selectedMethodology = mdDefaultDefinition;
|
|
22
|
+
attribute :>> scopeMode = ScopeModeKind::explicit;
|
|
23
|
+
}
|
|
24
|
+
}
|
package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// unassigned viewpoint.
|
|
2
|
+
//
|
|
3
|
+
// This project does not define its own viewpoint here; it binds the reusable
|
|
4
|
+
// MEMO viewpoint that frames these concerns. The views it governs sit beneath
|
|
5
|
+
// `views/`.
|
|
6
|
+
package memo_examples_manual_surgical_instrument_viewpoints_unassigned {
|
|
7
|
+
// The reusable package declaring unassigned could not be resolved during
|
|
8
|
+
// conversion. Import it here so the views beneath this viewpoint resolve.
|
|
9
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_manual_surgical_instrument_viewpoints_unassigned_views_manual_surgical_instrument_overview {
|
|
2
2
|
private import memo_examples_manual_surgical_instrument::*;
|
|
3
3
|
private import memo_viewpoints_definitions::*;
|
|
4
4
|
private import memo_core_enumerations::*;
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
// through relationships.
|
|
9
9
|
package memo_examples_multidimensional_layers {
|
|
10
10
|
private import ScalarValues::*;
|
|
11
|
+
private import ModelingMetadata::*;
|
|
11
12
|
|
|
12
13
|
private import memo_core_enumerations::*;
|
|
13
14
|
private import memo_core_dimensions::*;
|
|
@@ -37,15 +38,18 @@ package memo_examples_multidimensional_layers {
|
|
|
37
38
|
attribute :>> periodMs = 50.0;
|
|
38
39
|
attribute :>> deadlineMs = 50.0;
|
|
39
40
|
attribute :>> wcetMs = 8.0;
|
|
41
|
+
attribute :>> memoryBudget = 64.0;
|
|
40
42
|
attribute :>> schedulingPolicy = SchedulingPolicyKind::fixedPriorityPreemptive;
|
|
41
43
|
attribute :>> realizationStage = RealizationStageKind::deployed;
|
|
42
44
|
}
|
|
43
|
-
|
|
45
|
+
#refinement dependency doseLimitCheckerRuntime to doseLimitChecker;
|
|
44
46
|
|
|
45
47
|
verification vcLimitEnforcement : VerificationCase {
|
|
46
48
|
attribute :>> id = "MDL-VC-001"; attribute :>> name = "VerifyHardLimitEnforcement";
|
|
47
49
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
48
50
|
attribute :>> acceptanceCriteria = "all out-of-limit programs rejected across the equivalence classes";
|
|
51
|
+
|
|
52
|
+
subject verified : Base::Anything[*] = (doseLimitChecker);
|
|
49
53
|
}
|
|
50
|
-
|
|
54
|
+
|
|
51
55
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Multidimensional Layers — project identity and method binding.
|
|
2
|
+
//
|
|
3
|
+
// The native entrypoint. The imports name what this project contains and the
|
|
4
|
+
// binding names the methodology it is governed by. No YAML file participates.
|
|
5
|
+
package memo_examples_multidimensional_layers_project {
|
|
6
|
+
private import ScalarValues::*;
|
|
7
|
+
|
|
8
|
+
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_methodology_core::*;
|
|
10
|
+
private import memo_methodology_profiles::*;
|
|
11
|
+
|
|
12
|
+
// The project's own content, imported so the catalog is one reachable
|
|
13
|
+
// closure from a single entrypoint.
|
|
14
|
+
private import memo_examples_multidimensional_layers_viewpoints_unassigned::*;
|
|
15
|
+
private import memo_examples_multidimensional_layers_viewpoints_unassigned_views_multidimensional_layers_overview::*;
|
|
16
|
+
|
|
17
|
+
part projectBinding : ProjectMethodBinding {
|
|
18
|
+
attribute :>> id = "PMB-MULTIDIMENSIONAL-LAYERS-001";
|
|
19
|
+
attribute :>> name = "MultidimensionalLayersProjectMethodBinding";
|
|
20
|
+
attribute :>> projectName = "Multidimensional Layers";
|
|
21
|
+
ref :>> selectedMethodology = mdDefaultDefinition;
|
|
22
|
+
attribute :>> scopeMode = ScopeModeKind::explicit;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// unassigned viewpoint.
|
|
2
|
+
//
|
|
3
|
+
// This project does not define its own viewpoint here; it binds the reusable
|
|
4
|
+
// MEMO viewpoint that frames these concerns. The views it governs sit beneath
|
|
5
|
+
// `views/`.
|
|
6
|
+
package memo_examples_multidimensional_layers_viewpoints_unassigned {
|
|
7
|
+
// The reusable package declaring unassigned could not be resolved during
|
|
8
|
+
// conversion. Import it here so the views beneath this viewpoint resolve.
|
|
9
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_multidimensional_layers_viewpoints_unassigned_views_multidimensional_layers_overview {
|
|
2
2
|
private import memo_examples_multidimensional_layers::*;
|
|
3
3
|
private import memo_viewpoints_definitions::*;
|
|
4
4
|
private import memo_core_enumerations::*;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Nested Architecture DSM
|
|
2
|
+
|
|
3
|
+
A small infusion-pump model whose only purpose is to exercise the two matrix
|
|
4
|
+
analyses — the Design Structure Matrix and the Traceability Matrix — with a
|
|
5
|
+
hierarchy deep enough that expanding and collapsing changes what you see.
|
|
6
|
+
|
|
7
|
+
## What is in it
|
|
8
|
+
|
|
9
|
+
| Axis material | Elements | Nesting |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| Logical structure | 1 system, 5 subsystems, 12 components | 4 levels (`System → Subsystem → Subsystem → LogicalComponent`) |
|
|
12
|
+
| Functional architecture | 18 system functions | 3 levels, four capability trees |
|
|
13
|
+
| Requirements | 7 requirements | flat |
|
|
14
|
+
|
|
15
|
+
Nesting is declared with `Composes`, so both matrices build their trees from
|
|
16
|
+
the model rather than from a naming convention.
|
|
17
|
+
|
|
18
|
+
## What it is set up to show
|
|
19
|
+
|
|
20
|
+
- **Roll-up.** `SafetyMonitorSubsystem` sits one level deeper than its peers, so
|
|
21
|
+
a collapsed `ControlSubsystem` row genuinely sums its descendants instead of
|
|
22
|
+
standing in for a single child.
|
|
23
|
+
- **Feedback.** `DriveActuator` and `MeasureDeliveredVolume` exchange in both
|
|
24
|
+
directions, so a partitioned DSM still shows one real feedback mark rather
|
|
25
|
+
than an empty lower triangle.
|
|
26
|
+
- **Cross-tree dependency.** `EnforceDoseLimits → DriveActuator` and
|
|
27
|
+
`SelectPowerSource → DriveActuator` cross capability trees, which is what a
|
|
28
|
+
collapsed matrix rolls into a single number between two capabilities.
|
|
29
|
+
- **Asymmetric axes.** Functions on the rows and blocks on the columns, joined
|
|
30
|
+
by `AllocatedTo` — including `MeterFluid → FluidPathSubsystem`, an allocation
|
|
31
|
+
made at subsystem level rather than to one component.
|
|
32
|
+
- **A traceability gap.** `StatusVisibility` is satisfied by nothing, so
|
|
33
|
+
coverage reads under 100% and there is an empty row to author a link into.
|
|
34
|
+
|
|
35
|
+
## Suggested run
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
memo-architect --example nested-architecture-dsm
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
In **DSM**: set rows and columns to `SystemFunction`, dependency to
|
|
42
|
+
`exchangesWith`, and switch ordering between *Name* and *Partition* — the
|
|
43
|
+
feedback count drops and one mark stays below the diagonal. Then set columns to
|
|
44
|
+
the logical kinds and dependency to `allocatedTo` for the allocation view.
|
|
45
|
+
|
|
46
|
+
In **Traceability**: rows `Requirement`, columns `SystemFunction`, trace via
|
|
47
|
+
`satisfiedBy`. Turn on **Edit links** and click the empty `StatusVisibility` row
|
|
48
|
+
to author the missing trace; it is written back to
|
|
49
|
+
`model/catalog/traces.sysml`.
|
package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
// Functional architecture — the row axis of the DSM.
|
|
2
|
+
//
|
|
3
|
+
// Four capability trees, each a native containment tree, plus the functional
|
|
4
|
+
// exchanges between the leaves. The exchanges are deliberately not a clean
|
|
5
|
+
// pipeline: DriveActuator and MeasureDeliveredVolume feed each other, so a
|
|
6
|
+
// partitioned DSM still shows one genuine feedback mark instead of an empty
|
|
7
|
+
// lower triangle.
|
|
8
|
+
package memo_examples_nested_architecture_dsm_architecture_functional_functions {
|
|
9
|
+
private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
|
|
10
|
+
private import ScalarValues::*;
|
|
11
|
+
|
|
12
|
+
private import memo_core_enumerations::*;
|
|
13
|
+
private import memo_core_relationships::*;
|
|
14
|
+
private import memo_architecture_functional_functions::*;
|
|
15
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
16
|
+
|
|
17
|
+
// ── Deliver therapy ──────────────────────────────────────────
|
|
18
|
+
action fnDeliverTherapy : SystemFunction {
|
|
19
|
+
attribute :>> id = "NDS-FN-001"; attribute :>> name = "DeliverTherapy";
|
|
20
|
+
attribute :>> functionCategory = "therapy";
|
|
21
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
22
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
23
|
+
attribute :>> outputSummary = "fluid delivered to the patient line at the prescribed rate";
|
|
24
|
+
|
|
25
|
+
action fnMeterFluid : SystemFunction {
|
|
26
|
+
attribute :>> id = "NDS-FN-002"; attribute :>> name = "MeterFluid";
|
|
27
|
+
attribute :>> functionCategory = "therapy";
|
|
28
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
29
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
30
|
+
attribute :>> outputSummary = "measured volume displaced per control period";
|
|
31
|
+
|
|
32
|
+
action fnDriveActuator : SystemFunction {
|
|
33
|
+
attribute :>> id = "NDS-FN-003"; attribute :>> name = "DriveActuator";
|
|
34
|
+
attribute :>> functionCategory = "therapy";
|
|
35
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
36
|
+
attribute :>> trigger = "rate command from the dose control loop";
|
|
37
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
38
|
+
}
|
|
39
|
+
action fnMeasureDelivered : SystemFunction {
|
|
40
|
+
attribute :>> id = "NDS-FN-004"; attribute :>> name = "MeasureDeliveredVolume";
|
|
41
|
+
attribute :>> functionCategory = "therapy";
|
|
42
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
43
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
44
|
+
attribute :>> outputSummary = "cumulative delivered volume";
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
action fnControlDose : SystemFunction {
|
|
48
|
+
attribute :>> id = "NDS-FN-005"; attribute :>> name = "ControlDose";
|
|
49
|
+
attribute :>> functionCategory = "therapy";
|
|
50
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
51
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
52
|
+
|
|
53
|
+
action fnComputeRate : SystemFunction {
|
|
54
|
+
attribute :>> id = "NDS-FN-006"; attribute :>> name = "ComputeInfusionRate";
|
|
55
|
+
attribute :>> functionCategory = "therapy";
|
|
56
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
57
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
58
|
+
attribute :>> outputSummary = "rate command, saturated at the prescribed ceiling";
|
|
59
|
+
}
|
|
60
|
+
action fnValidatePrescription : SystemFunction {
|
|
61
|
+
attribute :>> id = "NDS-FN-007"; attribute :>> name = "ValidatePrescription";
|
|
62
|
+
attribute :>> functionCategory = "therapy";
|
|
63
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
64
|
+
attribute :>> concernKind = ConcernKind::clinical;
|
|
65
|
+
attribute :>> outputSummary = "accepted or rejected prescription, with the reason";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// ── Ensure safety ────────────────────────────────────────────
|
|
71
|
+
action fnEnsureSafety : SystemFunction {
|
|
72
|
+
attribute :>> id = "NDS-FN-008"; attribute :>> name = "EnsureSafety";
|
|
73
|
+
attribute :>> functionCategory = "protection";
|
|
74
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
75
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
76
|
+
|
|
77
|
+
action fnDetectOcclusion : SystemFunction {
|
|
78
|
+
attribute :>> id = "NDS-FN-009"; attribute :>> name = "DetectOcclusion";
|
|
79
|
+
attribute :>> functionCategory = "protection";
|
|
80
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
81
|
+
attribute :>> trigger = "line pressure above the occlusion threshold";
|
|
82
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
83
|
+
}
|
|
84
|
+
action fnDetectAirInLine : SystemFunction {
|
|
85
|
+
attribute :>> id = "NDS-FN-010"; attribute :>> name = "DetectAirInLine";
|
|
86
|
+
attribute :>> functionCategory = "protection";
|
|
87
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
88
|
+
attribute :>> trigger = "air bolus detected in the patient line";
|
|
89
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
90
|
+
}
|
|
91
|
+
action fnEnforceDoseLimits : SystemFunction {
|
|
92
|
+
attribute :>> id = "NDS-FN-011"; attribute :>> name = "EnforceDoseLimits";
|
|
93
|
+
attribute :>> functionCategory = "protection";
|
|
94
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
95
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
96
|
+
attribute :>> outputSummary = "delivery stopped when the commanded dose leaves the accepted envelope";
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// ── Inform the user ──────────────────────────────────────────
|
|
101
|
+
action fnInformUser : SystemFunction {
|
|
102
|
+
attribute :>> id = "NDS-FN-012"; attribute :>> name = "InformUser";
|
|
103
|
+
attribute :>> functionCategory = "interaction";
|
|
104
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
105
|
+
attribute :>> concernKind = ConcernKind::usability;
|
|
106
|
+
|
|
107
|
+
action fnRenderStatus : SystemFunction {
|
|
108
|
+
attribute :>> id = "NDS-FN-013"; attribute :>> name = "RenderTherapyStatus";
|
|
109
|
+
attribute :>> functionCategory = "interaction";
|
|
110
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
111
|
+
attribute :>> concernKind = ConcernKind::usability;
|
|
112
|
+
attribute :>> outputSummary = "rate, volume delivered and time remaining";
|
|
113
|
+
}
|
|
114
|
+
action fnAnnunciateAlarm : SystemFunction {
|
|
115
|
+
attribute :>> id = "NDS-FN-014"; attribute :>> name = "AnnunciateAlarm";
|
|
116
|
+
attribute :>> functionCategory = "interaction";
|
|
117
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
118
|
+
attribute :>> trigger = "any active alarm condition";
|
|
119
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
120
|
+
}
|
|
121
|
+
action fnAcceptInput : SystemFunction {
|
|
122
|
+
attribute :>> id = "NDS-FN-015"; attribute :>> name = "AcceptClinicianInput";
|
|
123
|
+
attribute :>> functionCategory = "interaction";
|
|
124
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
125
|
+
attribute :>> concernKind = ConcernKind::usability;
|
|
126
|
+
attribute :>> outputSummary = "confirmed prescription changes";
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// ── Manage power ─────────────────────────────────────────────
|
|
131
|
+
action fnManagePower : SystemFunction {
|
|
132
|
+
attribute :>> id = "NDS-FN-016"; attribute :>> name = "ManagePower";
|
|
133
|
+
attribute :>> functionCategory = "platform";
|
|
134
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
135
|
+
attribute :>> concernKind = ConcernKind::reliability;
|
|
136
|
+
|
|
137
|
+
action fnMonitorBattery : SystemFunction {
|
|
138
|
+
attribute :>> id = "NDS-FN-017"; attribute :>> name = "MonitorBatteryState";
|
|
139
|
+
attribute :>> functionCategory = "platform";
|
|
140
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
141
|
+
attribute :>> concernKind = ConcernKind::reliability;
|
|
142
|
+
attribute :>> outputSummary = "state of charge and remaining run time";
|
|
143
|
+
}
|
|
144
|
+
action fnSelectPowerSource : SystemFunction {
|
|
145
|
+
attribute :>> id = "NDS-FN-018"; attribute :>> name = "SelectPowerSource";
|
|
146
|
+
attribute :>> functionCategory = "platform";
|
|
147
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
148
|
+
attribute :>> trigger = "mains loss or rail brownout";
|
|
149
|
+
attribute :>> concernKind = ConcernKind::reliability;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ── Functional exchange ──────────────────────────────────────
|
|
154
|
+
// Cross-tree marks are the interesting ones: they are what a collapsed DSM
|
|
155
|
+
// rolls up into a single number between two capabilities.
|
|
156
|
+
flow from fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered to fnDeliverTherapy.fnControlDose.fnComputeRate;
|
|
157
|
+
flow from fnDeliverTherapy.fnControlDose.fnComputeRate to fnDeliverTherapy.fnMeterFluid.fnDriveActuator;
|
|
158
|
+
flow from fnDeliverTherapy.fnMeterFluid.fnDriveActuator to fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered;
|
|
159
|
+
flow from fnDeliverTherapy.fnControlDose.fnValidatePrescription to fnDeliverTherapy.fnControlDose.fnComputeRate;
|
|
160
|
+
flow from fnInformUser.fnAcceptInput to fnDeliverTherapy.fnControlDose.fnValidatePrescription;
|
|
161
|
+
flow from fnEnsureSafety.fnDetectOcclusion to fnEnsureSafety.fnEnforceDoseLimits;
|
|
162
|
+
flow from fnEnsureSafety.fnDetectAirInLine to fnInformUser.fnAnnunciateAlarm;
|
|
163
|
+
flow from fnEnsureSafety.fnEnforceDoseLimits to fnDeliverTherapy.fnMeterFluid.fnDriveActuator;
|
|
164
|
+
flow from fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered to fnInformUser.fnRenderStatus;
|
|
165
|
+
flow from fnManagePower.fnMonitorBattery to fnInformUser.fnAnnunciateAlarm;
|
|
166
|
+
flow from fnManagePower.fnSelectPowerSource to fnDeliverTherapy.fnMeterFluid.fnDriveActuator;
|
|
167
|
+
flow from fnEnsureSafety.fnDetectOcclusion to fnInformUser.fnAnnunciateAlarm;
|
|
168
|
+
satisfy reqDoseAccuracy by fnDeliverTherapy.fnControlDose.fnComputeRate;
|
|
169
|
+
satisfy reqDoseAccuracy by fnDeliverTherapy.fnMeterFluid.fnDriveActuator;
|
|
170
|
+
satisfy reqOcclusionDetection by fnEnsureSafety.fnDetectOcclusion;
|
|
171
|
+
satisfy reqOcclusionDetection by fnEnsureSafety.fnEnforceDoseLimits;
|
|
172
|
+
satisfy reqAirInLine by fnEnsureSafety.fnDetectAirInLine;
|
|
173
|
+
satisfy reqAirInLine by fnInformUser.fnAnnunciateAlarm;
|
|
174
|
+
satisfy reqAlarmAnnunciation by fnInformUser.fnAnnunciateAlarm;
|
|
175
|
+
satisfy reqBatteryEndurance by fnManagePower.fnMonitorBattery;
|
|
176
|
+
satisfy reqBatteryEndurance by fnManagePower.fnSelectPowerSource;
|
|
177
|
+
satisfy reqPrescriptionConfirmation by fnInformUser.fnAcceptInput;
|
|
178
|
+
satisfy reqPrescriptionConfirmation by fnDeliverTherapy.fnControlDose.fnValidatePrescription;
|
|
179
|
+
}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
// Logical structure — the column axis of the DSM.
|
|
2
|
+
//
|
|
3
|
+
// Four levels deep on purpose (System → Subsystem → Subsystem → component),
|
|
4
|
+
// so expanding and collapsing the matrix has something real to do. Containment
|
|
5
|
+
// is native nesting; the builder synthesizes the `composes` relationship the
|
|
6
|
+
// DSM reads to build the column tree, so no explicit Composes edge is written.
|
|
7
|
+
package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
8
|
+
private import ScalarValues::*;
|
|
9
|
+
|
|
10
|
+
private import memo_core_enumerations::*;
|
|
11
|
+
private import memo_core_relationships::*;
|
|
12
|
+
private import memo_architecture_logical_structure::*;
|
|
13
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
14
|
+
|
|
15
|
+
// ── Level 0: the system ──────────────────────────────────────
|
|
16
|
+
part sysTherapyDelivery : System {
|
|
17
|
+
attribute :>> id = "NDS-SYS-001"; attribute :>> name = "TherapyDeliverySystem";
|
|
18
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
19
|
+
attribute :>> systemType = SystemTypeKind::logical;
|
|
20
|
+
attribute :>> systemBoundaryDescription = "Everything inside the pump enclosure, including its power path and user interface.";
|
|
21
|
+
attribute :>> responsibility = "Deliver a prescribed infusion safely and report what it delivered.";
|
|
22
|
+
|
|
23
|
+
// ── Level 1: subsystems ──────────────────────────────────
|
|
24
|
+
part subFluidPath : Subsystem {
|
|
25
|
+
attribute :>> id = "NDS-SUB-001"; attribute :>> name = "FluidPathSubsystem";
|
|
26
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
27
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
28
|
+
attribute :>> responsibility = "Move fluid from the reservoir to the patient line at a commanded rate.";
|
|
29
|
+
|
|
30
|
+
// ── Level 2/3: components ─────────────────────────────
|
|
31
|
+
part lcPumpMechanism : LogicalComponent {
|
|
32
|
+
attribute :>> id = "NDS-LC-001"; attribute :>> name = "PumpMechanism";
|
|
33
|
+
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
34
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
35
|
+
attribute :>> responsibility = "Displace fluid under command.";
|
|
36
|
+
attribute :>> controlledVariable = "delivered volume per stroke";
|
|
37
|
+
}
|
|
38
|
+
part lcOcclusionChannel : LogicalComponent {
|
|
39
|
+
attribute :>> id = "NDS-LC-002"; attribute :>> name = "OcclusionSensingChannel";
|
|
40
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
41
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
42
|
+
attribute :>> responsibility = "Sense line pressure and air in line.";
|
|
43
|
+
attribute :>> channelRole = ChannelRoleKind::primary;
|
|
44
|
+
}
|
|
45
|
+
part lcReservoirInterface : LogicalComponent {
|
|
46
|
+
attribute :>> id = "NDS-LC-003"; attribute :>> name = "ReservoirInterface";
|
|
47
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
48
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
49
|
+
attribute :>> responsibility = "Seat the reservoir and expose its remaining volume.";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
part subControl : Subsystem {
|
|
53
|
+
attribute :>> id = "NDS-SUB-002"; attribute :>> name = "ControlSubsystem";
|
|
54
|
+
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
55
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
56
|
+
attribute :>> responsibility = "Decide what the fluid path should do, and hold the therapy state.";
|
|
57
|
+
|
|
58
|
+
// ── Level 2: a subsystem inside a subsystem ───────────
|
|
59
|
+
// The safety monitor is nested one level deeper than its peers,
|
|
60
|
+
// which is what makes a collapsed ControlSubsystem row a genuine
|
|
61
|
+
// roll-up rather than a rename of its children.
|
|
62
|
+
part subSafetyMonitor : Subsystem {
|
|
63
|
+
attribute :>> id = "NDS-SUB-005"; attribute :>> name = "SafetyMonitorSubsystem";
|
|
64
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
65
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
66
|
+
attribute :>> responsibility = "Watch the control path from outside it and stop delivery on breach.";
|
|
67
|
+
attribute :>> safetyPartition = "monitor partition, separate MPU region from the control partition";
|
|
68
|
+
|
|
69
|
+
part lcWatchdogChannel : LogicalComponent {
|
|
70
|
+
attribute :>> id = "NDS-LC-006"; attribute :>> name = "WatchdogChannel";
|
|
71
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
72
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
73
|
+
attribute :>> responsibility = "Reset to the safe state when the control loop misses its deadline.";
|
|
74
|
+
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
75
|
+
attribute :>> diversityBasis = "independent time base from the control partition";
|
|
76
|
+
}
|
|
77
|
+
part lcPressureIntegrityChannel : LogicalComponent {
|
|
78
|
+
attribute :>> id = "NDS-LC-007"; attribute :>> name = "PressureIntegrityChannel";
|
|
79
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
80
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
81
|
+
attribute :>> responsibility = "Cross-check pressure against the commanded rate and stop on divergence.";
|
|
82
|
+
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
83
|
+
attribute :>> diversityBasis = "different measurement principle from the primary occlusion channel";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
part lcDoseController : LogicalComponent {
|
|
87
|
+
attribute :>> id = "NDS-LC-004"; attribute :>> name = "DoseController";
|
|
88
|
+
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
89
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
90
|
+
attribute :>> responsibility = "Turn a prescription into rate commands.";
|
|
91
|
+
attribute :>> controlLaw = "closed loop on delivered volume, saturated at the prescribed limit";
|
|
92
|
+
attribute :>> controlledVariable = "infusion rate";
|
|
93
|
+
}
|
|
94
|
+
part lcTherapyStateStore : LogicalComponent {
|
|
95
|
+
attribute :>> id = "NDS-LC-005"; attribute :>> name = "TherapyStateStore";
|
|
96
|
+
attribute :>> componentRole = ComponentRoleKind::dataStore;
|
|
97
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
98
|
+
attribute :>> responsibility = "Hold the active therapy record across power cycles.";
|
|
99
|
+
attribute :>> persistenceRequirement = "survives power loss with the last completed transaction intact";
|
|
100
|
+
attribute :>> integrityRequirement = "CRC per record, rejected on mismatch";
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
part subUserInterface : Subsystem {
|
|
104
|
+
attribute :>> id = "NDS-SUB-003"; attribute :>> name = "UserInterfaceSubsystem";
|
|
105
|
+
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
106
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
107
|
+
attribute :>> responsibility = "Present therapy state to the clinician and accept their input.";
|
|
108
|
+
|
|
109
|
+
part lcDisplayManager : LogicalComponent {
|
|
110
|
+
attribute :>> id = "NDS-LC-008"; attribute :>> name = "DisplayManager";
|
|
111
|
+
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
112
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
113
|
+
attribute :>> responsibility = "Render therapy state on the main screen.";
|
|
114
|
+
attribute :>> interactionSummary = "read-only status surface, refreshed once per second";
|
|
115
|
+
}
|
|
116
|
+
part lcAlarmAnnunciator : LogicalComponent {
|
|
117
|
+
attribute :>> id = "NDS-LC-009"; attribute :>> name = "AlarmAnnunciator";
|
|
118
|
+
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
119
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
120
|
+
attribute :>> responsibility = "Raise audible and visible alarms by priority.";
|
|
121
|
+
attribute :>> interactionSummary = "IEC 60601-1-8 alarm signals";
|
|
122
|
+
}
|
|
123
|
+
part lcKeypadHandler : LogicalComponent {
|
|
124
|
+
attribute :>> id = "NDS-LC-010"; attribute :>> name = "KeypadHandler";
|
|
125
|
+
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
126
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
127
|
+
attribute :>> responsibility = "Debounce and interpret key presses.";
|
|
128
|
+
attribute :>> interactionSummary = "physical keypad, confirm-before-apply for every rate change";
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
part subPower : Subsystem {
|
|
132
|
+
attribute :>> id = "NDS-SUB-004"; attribute :>> name = "PowerSubsystem";
|
|
133
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
134
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
135
|
+
attribute :>> responsibility = "Supply and monitor power across mains and battery operation.";
|
|
136
|
+
|
|
137
|
+
part lcBatteryManager : LogicalComponent {
|
|
138
|
+
attribute :>> id = "NDS-LC-011"; attribute :>> name = "BatteryManager";
|
|
139
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
140
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
141
|
+
attribute :>> responsibility = "Charge, gauge and protect the battery.";
|
|
142
|
+
}
|
|
143
|
+
part lcPowerRailMonitor : LogicalComponent {
|
|
144
|
+
attribute :>> id = "NDS-LC-012"; attribute :>> name = "PowerRailMonitor";
|
|
145
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
146
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
147
|
+
attribute :>> responsibility = "Detect rail brownout and request a source switch.";
|
|
148
|
+
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// ── Component-to-component dependency ─────────────────────
|
|
153
|
+
// What the DSM plots when both axes are architecture: who needs whom.
|
|
154
|
+
flow from subFluidPath.lcOcclusionChannel to subControl.lcDoseController;
|
|
155
|
+
flow from subControl.lcDoseController to subFluidPath.lcPumpMechanism;
|
|
156
|
+
flow from subFluidPath.lcPumpMechanism to subControl.lcTherapyStateStore;
|
|
157
|
+
flow from subControl.lcTherapyStateStore to subUserInterface.lcDisplayManager;
|
|
158
|
+
flow from subControl.subSafetyMonitor.lcWatchdogChannel to subControl.lcDoseController;
|
|
159
|
+
flow from subControl.subSafetyMonitor.lcPressureIntegrityChannel to subUserInterface.lcAlarmAnnunciator;
|
|
160
|
+
flow from subUserInterface.lcKeypadHandler to subControl.lcDoseController;
|
|
161
|
+
flow from subFluidPath.lcReservoirInterface to subFluidPath.lcPumpMechanism;
|
|
162
|
+
flow from subPower.lcBatteryManager to subPower.lcPowerRailMonitor;
|
|
163
|
+
flow from subPower.lcPowerRailMonitor to subUserInterface.lcAlarmAnnunciator;
|
|
164
|
+
}
|
|
165
|
+
}
|