@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
|
@@ -8,11 +8,13 @@ package memo_examples_temperature_alarm {
|
|
|
8
8
|
private import ScalarValues::*;
|
|
9
9
|
|
|
10
10
|
private import memo_core_enumerations::*;
|
|
11
|
+
private import memo_core_common::*;
|
|
11
12
|
private import memo_core_dimensions::*;
|
|
12
13
|
private import memo_architecture_operational_context_actors::*;
|
|
13
14
|
private import memo_assurance_requirements_needs::*;
|
|
14
15
|
private import memo_architecture_operational_use_cases::*;
|
|
15
16
|
private import memo_architecture_operational_activities::*;
|
|
17
|
+
private import memo_architecture_operational_workflows::*;
|
|
16
18
|
private import memo_architecture_operational_scenarios::*;
|
|
17
19
|
private import memo_architecture_functional_functions::*;
|
|
18
20
|
private import memo_architecture_logical_structure::*;
|
|
@@ -21,6 +23,7 @@ package memo_examples_temperature_alarm {
|
|
|
21
23
|
private import memo_assurance_human_factors::*;
|
|
22
24
|
private import memo_architecture_implementation_ui::*;
|
|
23
25
|
private import memo_core_relationships::*;
|
|
26
|
+
private import memo_assurance_safety_risk_analysis::*;
|
|
24
27
|
|
|
25
28
|
// ── Operational intent ──────────────────────────────────────
|
|
26
29
|
part icuNurse : User {
|
|
@@ -32,23 +35,24 @@ package memo_examples_temperature_alarm {
|
|
|
32
35
|
attribute :>> id = "TA-UC-001";
|
|
33
36
|
attribute :>> name = "MonitorPatientTemperature";
|
|
34
37
|
attribute :>> goalStatement = "Continuously monitor core temperature and be alerted when it leaves the safe range.";
|
|
38
|
+
subject supportingSystem;
|
|
39
|
+
actor icuNurseInitiator = icuNurse;
|
|
35
40
|
}
|
|
36
41
|
action actAcknowledgeAlarm : OperationalActivity {
|
|
37
42
|
attribute :>> id = "TA-ACT-001"; attribute :>> name = "ReviewAndAcknowledgeAlarm";
|
|
38
43
|
attribute :>> criticality = CriticalityKind::high;
|
|
44
|
+
|
|
45
|
+
action taskAckAlarm : UserTask {
|
|
46
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
47
|
+
attribute :>> id = "TA-TASK-001"; attribute :>> name = "AcknowledgeTemperatureAlarm";
|
|
48
|
+
attribute :>> taskGoal = "recognize, assess, and acknowledge the alarm";
|
|
49
|
+
attribute :>> potentialHarm = "delayed intervention for hypo-/hyperthermia";
|
|
50
|
+
attribute :>> severityIfFailed = SeverityKind::serious;
|
|
51
|
+
}
|
|
39
52
|
}
|
|
40
|
-
action taskAckAlarm : UserTask {
|
|
41
|
-
attribute :>> criticality = CriticalityKind::high;
|
|
42
|
-
attribute :>> id = "TA-TASK-001"; attribute :>> name = "AcknowledgeTemperatureAlarm";
|
|
43
|
-
attribute :>> taskGoal = "recognize, assess, and acknowledge the alarm";
|
|
44
|
-
attribute :>> potentialHarm = "delayed intervention for hypo-/hyperthermia";
|
|
45
|
-
attribute :>> severityIfFailed = SeverityKind::serious;
|
|
46
|
-
}
|
|
47
|
-
connection : Initiates connect initiatingUser ::> icuNurse to initiatedUseCase ::> ucMonitorTemp;
|
|
48
|
-
connection : Composes connect parent ::> actAcknowledgeAlarm to child ::> taskAckAlarm;
|
|
49
53
|
|
|
50
54
|
// ── Functional and logical slices ───────────────────────────
|
|
51
|
-
|
|
55
|
+
action fnDetectDeviation : SystemFunction {
|
|
52
56
|
attribute :>> id = "TA-FN-001"; attribute :>> name = "DetectTemperatureDeviation";
|
|
53
57
|
attribute :>> criticality = CriticalityKind::high;
|
|
54
58
|
// This function is owned by the functional architecture layer (its
|
|
@@ -66,8 +70,7 @@ package memo_examples_temperature_alarm {
|
|
|
66
70
|
connection : IndependentOf connect channel ::> chMonitor to otherChannel ::> chPrimary {
|
|
67
71
|
attribute :>> independenceBasis = "separate sensing element and power rail";
|
|
68
72
|
}
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
allocate fnDetectDeviation to chMonitor;
|
|
71
74
|
// ── UI: alarm element and acknowledgement action ────────────
|
|
72
75
|
part uiBedside : UserInterface {
|
|
73
76
|
attribute :>> id = "TA-UI-001"; attribute :>> name = "BedsideDisplay";
|
|
@@ -83,10 +86,10 @@ package memo_examples_temperature_alarm {
|
|
|
83
86
|
attribute :>> id = "TA-UIA-001"; attribute :>> name = "AcknowledgeAlarm";
|
|
84
87
|
attribute :>> intent = InteractionIntentKind::acknowledgement;
|
|
85
88
|
attribute :>> confirmationRequired = true;
|
|
89
|
+
perform fnDetectDeviation;
|
|
86
90
|
}
|
|
87
91
|
connection : ElementTriggersAction connect element ::> elAlarmBanner to triggeredAction ::> uiaAcknowledge;
|
|
88
|
-
connection :
|
|
89
|
-
connection : Supports { attribute :>> supportKind = SupportKind::task; connect supporter ::> uiBedside to supported ::> taskAckAlarm; }
|
|
92
|
+
connection : Supports { attribute :>> supportKind = SupportKind::task; connect supporter ::> uiBedside to supported ::> actAcknowledgeAlarm.taskAckAlarm; }
|
|
90
93
|
|
|
91
94
|
// ── Risk chain with use error ───────────────────────────────
|
|
92
95
|
part ueSilenceAndForget : UseError {
|
|
@@ -100,19 +103,20 @@ package memo_examples_temperature_alarm {
|
|
|
100
103
|
attribute :>> severity = SeverityKind::serious;
|
|
101
104
|
attribute :>> foreseeable = true;
|
|
102
105
|
}
|
|
103
|
-
|
|
106
|
+
part rcReAnnunciate : RiskControlMeasure {
|
|
104
107
|
attribute :>> id = "TA-RC-001"; attribute :>> name = "AutoReAnnunciationAfterSilence";
|
|
105
108
|
attribute :>> controlKind = RiskControlKind::alarm;
|
|
106
109
|
attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
|
|
107
110
|
}
|
|
108
|
-
connection : CommitsUseError connect task ::> taskAckAlarm to useError ::> ueSilenceAndForget;
|
|
111
|
+
connection : CommitsUseError connect task ::> actAcknowledgeAlarm.taskAckAlarm to useError ::> ueSilenceAndForget;
|
|
109
112
|
connection : Causes { attribute :>> causeKind = CauseKind::useErrorLeadsToHazard; connect cause ::> ueSilenceAndForget to effect ::> hzUndetectedDeviation; }
|
|
110
113
|
connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> rcReAnnunciate to mitigatedElement ::> hzUndetectedDeviation; }
|
|
111
114
|
connection : ControlImplementedBy connect riskControl ::> rcReAnnunciate to implementingElement ::> elAlarmBanner;
|
|
112
115
|
|
|
113
116
|
// ── Verification, validation, evidence ──────────────────────
|
|
114
|
-
|
|
117
|
+
action vsAlarmLatency : MemoScenario {
|
|
115
118
|
attribute :>> id = "TA-VS-001"; attribute :>> name = "AlarmLatencyScenario";
|
|
119
|
+
attribute :>> scenarioKind = ScenarioKind::memoVerification;
|
|
116
120
|
attribute :>> variantKind = ScenarioVariantKind::nominal;
|
|
117
121
|
attribute :>> operationalCondition = OperationalConditionKind::normal;
|
|
118
122
|
attribute :>> scenarioPurpose = ScenarioPurposeKind::memoVerification;
|
|
@@ -122,19 +126,23 @@ package memo_examples_temperature_alarm {
|
|
|
122
126
|
attribute :>> id = "TA-VC-001"; attribute :>> name = "VerifyAlarmLatency";
|
|
123
127
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
124
128
|
attribute :>> acceptanceCriteria = "annunciation within 2 s of sustained deviation";
|
|
129
|
+
|
|
130
|
+
subject verified : Base::Anything[*] = (fnDetectDeviation);
|
|
125
131
|
}
|
|
126
|
-
part uvAckTask :
|
|
132
|
+
part uvAckTask : MemoEvidence {
|
|
133
|
+
attribute :>> evidenceKind = EvidenceKind::usabilityValidation;
|
|
127
134
|
attribute :>> id = "TA-UV-001"; attribute :>> name = "SummativeAlarmAcknowledgement";
|
|
128
135
|
attribute :>> participantProfile = "15 ICU nurses, representative shift conditions";
|
|
129
136
|
attribute :>> participantCount = 15;
|
|
130
137
|
attribute :>> acceptanceCriteria = "no critical-task failures; all alarms assessed before silencing";
|
|
131
138
|
}
|
|
132
|
-
part evLatencyReport :
|
|
139
|
+
part evLatencyReport : MemoEvidence {
|
|
140
|
+
attribute :>> evidenceKind = EvidenceKind::evidence;
|
|
133
141
|
attribute :>> id = "TA-EV-001"; attribute :>> name = "AlarmLatencyTestReport";
|
|
134
142
|
attribute :>> evidenceType = "test report";
|
|
135
143
|
}
|
|
136
144
|
connection : ExecutesScenario connect verificationCase ::> vcAlarmLatency to scenario ::> vsAlarmLatency;
|
|
137
|
-
|
|
138
|
-
connection : Validates connect validationCase ::> uvAckTask to validationTarget ::> taskAckAlarm;
|
|
145
|
+
|
|
146
|
+
connection : Validates connect validationCase ::> uvAckTask to validationTarget ::> actAcknowledgeAlarm.taskAckAlarm;
|
|
139
147
|
connection : ProducesEvidence connect producer ::> vcAlarmLatency to producedEvidence ::> evLatencyReport;
|
|
140
148
|
}
|
|
@@ -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_temperature_alarm_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_temperature_alarm_viewpoints_unassigned_views_temperature_alarm_overview {
|
|
2
2
|
private import memo_examples_temperature_alarm::*;
|
|
3
3
|
private import memo_viewpoints_definitions::*;
|
|
4
4
|
private import memo_core_enumerations::*;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# UI screen regions
|
|
2
|
+
|
|
3
|
+
A focused MEMO example for marking up a screenshot so that every functional
|
|
4
|
+
area of the interface is traceable to a function, a specification, and a risk
|
|
5
|
+
control — using the part tree MEMO already has, not a parallel one.
|
|
6
|
+
|
|
7
|
+
- `model/ui_screen_regions.sysml` is the public parent package.
|
|
8
|
+
- `model/catalog/` holds the canonical model elements.
|
|
9
|
+
- `model/viewpoints/` holds the geometry view and a trace graph of that catalog.
|
|
10
|
+
|
|
11
|
+
## What it demonstrates
|
|
12
|
+
|
|
13
|
+
One infusion-pump screen, modelled as an **ordinary part tree**. A screen is a
|
|
14
|
+
`UIElement` that contains `UIElement`s; each carries `bounds` (x, y, width,
|
|
15
|
+
height). There is no separate "region" type: one tree carries both the geometry
|
|
16
|
+
and the design record.
|
|
17
|
+
|
|
18
|
+
Because the elements carrying geometry are the same elements carrying the
|
|
19
|
+
design record, every trace MEMO already supported applies unchanged:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
elRateValue a part, with bounds, inside elRatePanel
|
|
23
|
+
-ElementTriggersAction-> uiaEditRate
|
|
24
|
+
-ActionInvokesFunction-> fnSetInfusionRate FUNCTION
|
|
25
|
+
<-SatisfiedBy- reqRateEntry SPEC
|
|
26
|
+
<-ErrorAtElement- ueMisreadRate RISK (use error)
|
|
27
|
+
<-ControlImplementedBy- rcRateConfirm RISK (control)
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Layout adds four numbers and two invariants over them — nothing else.
|
|
31
|
+
|
|
32
|
+
## Containment vs navigation
|
|
33
|
+
|
|
34
|
+
These are different, and conflating them is the trap this example is built to
|
|
35
|
+
show:
|
|
36
|
+
|
|
37
|
+
| Element | Relation | Meaning |
|
|
38
|
+
| --- | --- | --- |
|
|
39
|
+
| `elRateValue` inside `elRatePanel` | `Composes` | laid out **within** the parent's box |
|
|
40
|
+
| `elSettingsRow` → `elSettingsScreen` | `NavigatesTo` | activation **replaces** the view |
|
|
41
|
+
|
|
42
|
+
`elSettingsScreen` is a sibling root with its own capture and its own
|
|
43
|
+
coordinate frame. It is not a child of anything, so no geometric rule relates
|
|
44
|
+
it to the main screen.
|
|
45
|
+
|
|
46
|
+
## The dropdown, and why `disclosureKind` exists
|
|
47
|
+
|
|
48
|
+
`elDrugMenu` is why geometry alone is not enough. Open, it extends past the
|
|
49
|
+
bottom of the rate panel (`y + height` = 1.35 > 1.0) **and** overlaps
|
|
50
|
+
`elRateValue` outright. For an `inline` element both would be layout defects;
|
|
51
|
+
for a dropdown both are correct. The four numbers cannot tell those cases apart,
|
|
52
|
+
so `disclosureKind = overlay` states the intent — and a renderer reads it to know
|
|
53
|
+
not to clip.
|
|
54
|
+
|
|
55
|
+
Layout correctness is **not** asserted as a consistency rule. Geometric
|
|
56
|
+
invariants (child within parent, inline siblings disjoint) cannot be written as
|
|
57
|
+
KerML constraint bodies — the evaluator has no Real literal, and it binds one
|
|
58
|
+
implicit subject per quantifier, so pairwise sibling comparison is impossible by
|
|
59
|
+
construction. Rather than declare rules no engine can evaluate, layout is checked
|
|
60
|
+
where it is drawn.
|
|
61
|
+
|
|
62
|
+
`elStatusBar` is the negative case that IS checked: it is chrome, and it passes
|
|
63
|
+
**CR-MED-110** only because it is declared `formKind = decoration`. An element
|
|
64
|
+
left unclassified fails. Declaring chrome as chrome is a modelling act, not an
|
|
65
|
+
omission.
|
|
66
|
+
|
|
67
|
+
## Bounds
|
|
68
|
+
|
|
69
|
+
`RegionBounds` are normalized to the **parent element**, each value in 0..1.
|
|
70
|
+
`elRateValue` occupies the lower 65 % of the rate panel, not 65 % of the screen,
|
|
71
|
+
so a renderer accumulates transforms down the `Composes` tree. Two things
|
|
72
|
+
follow: an element survives re-capture at a different resolution, and a child's
|
|
73
|
+
box is stated against its parent, which is exactly what the containment tree
|
|
74
|
+
already asserts. Absolute pixels stay recoverable from the capture's
|
|
75
|
+
`pixelWidth` / `pixelHeight`.
|
|
76
|
+
|
|
77
|
+
## Commentary
|
|
78
|
+
|
|
79
|
+
`ModelComment` elements carry review conversation — author, timestamp,
|
|
80
|
+
disposition — attached with `CommentsOn` and threaded with `Composes`.
|
|
81
|
+
They are kept separate from `description` on purpose: `description` is what an
|
|
82
|
+
element *is*, a comment is what someone *said about it*, and only the former
|
|
83
|
+
belongs in a generated DHF section.
|
|
84
|
+
|
|
85
|
+
## Validation
|
|
86
|
+
|
|
87
|
+
The example is written to pass the four UI layout rules:
|
|
88
|
+
|
|
89
|
+
| Rule | Severity | What it enforces |
|
|
90
|
+
| --- | --- | --- |
|
|
91
|
+
| CR-MED-110 | error | Every non-`decoration` element has a design record (requirement or action) |
|
|
92
|
+
| CR-MED-111 | warning | Interactive elements trigger an action that invokes a function |
|
|
93
|
+
| CR-MED-112 | warning | Automatically detected bounds are confirmed by a reviewer |
|
|
94
|
+
| CR-MED-113 | error | Screen captures identify their build and hash their bytes |
|
|
95
|
+
|
|
96
|
+
See the caveat in `memo-ui-region-spec.md` §5 about rule evaluation generally —
|
|
97
|
+
no ontology rule body currently evaluates.
|
|
98
|
+
|
|
99
|
+
## Where the images live
|
|
100
|
+
|
|
101
|
+
Screenshots live in the project repo beside the model, in a folder named for the
|
|
102
|
+
layout view that renders them:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
model/
|
|
106
|
+
assets/
|
|
107
|
+
mainScreenLayout/main-screen-2.4.1.png
|
|
108
|
+
settingsScreenLayout/settings-screen-2.4.1.png
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
`imageUri` is relative to the model root. One layout view per captured screen,
|
|
112
|
+
and the view's name is its folder — so it is always obvious which images belong
|
|
113
|
+
to which layout.
|
|
114
|
+
|
|
115
|
+
The image files themselves are **not committed**; this example ships as model
|
|
116
|
+
content only, and the `imageHash` values are illustrative. Drop your own
|
|
117
|
+
screenshots at those paths to see the geometry view render.
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
// Functional architecture: the display-management function tree.
|
|
2
|
+
package memo_examples_ui_screen_regions_architecture_functional_functions {
|
|
3
|
+
private import memo_examples_ui_screen_regions_assurance_requirements::*;
|
|
4
|
+
private import ScalarValues::*;
|
|
5
|
+
|
|
6
|
+
private import memo_core_relationships::*;
|
|
7
|
+
private import memo_core_annotations::*;
|
|
8
|
+
private import memo_architecture_implementation_ui::*;
|
|
9
|
+
private import memo_assurance_requirements::*;
|
|
10
|
+
private import memo_assurance_requirements_needs::*;
|
|
11
|
+
private import memo_assurance_human_factors::*;
|
|
12
|
+
private import memo_assurance_safety_risk::*;
|
|
13
|
+
private import memo_assurance_verification_validation::*;
|
|
14
|
+
private import memo_artifacts_core::*;
|
|
15
|
+
|
|
16
|
+
private import memo_core_enumerations::*;
|
|
17
|
+
private import memo_architecture_functional_functions::*;
|
|
18
|
+
|
|
19
|
+
action fnManageInfusionDisplay : SystemFunction {
|
|
20
|
+
attribute :>> id = "UIR-FN-002"; attribute :>> name = "ManageInfusionDisplay";
|
|
21
|
+
attribute :>> shortDescription = "Coordinate the running-infusion display and its interactive regions.";
|
|
22
|
+
attribute :>> description = "Maintains the clinician-facing infusion state and delegates rate programming, drug selection, and status presentation to focused child functions.";
|
|
23
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
24
|
+
|
|
25
|
+
action fnSetInfusionRate : SystemFunction {
|
|
26
|
+
attribute :>> id = "UIR-FN-001"; attribute :>> name = "SetInfusionRate";
|
|
27
|
+
attribute :>> shortDescription = "Apply a clinician-entered rate to the pump controller.";
|
|
28
|
+
attribute :>> description = "Validates a requested infusion rate against the drug library limits and the pump's mechanical range, then commits it to the controller as the active setpoint.";
|
|
29
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
action fnValidateDrugSelection : SystemFunction {
|
|
33
|
+
attribute :>> id = "UIR-FN-003"; attribute :>> name = "ValidateDrugSelection";
|
|
34
|
+
attribute :>> shortDescription = "Validate a selected drug and concentration against the active care-area library.";
|
|
35
|
+
attribute :>> description = "Accepts only a drug and concentration present in the active drug library, then supplies its dosing limits to rate validation.";
|
|
36
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
action fnPresentDeliveryStatus : SystemFunction {
|
|
40
|
+
attribute :>> id = "UIR-FN-004"; attribute :>> name = "PresentDeliveryStatus";
|
|
41
|
+
attribute :>> shortDescription = "Present current rate and cumulative delivered volume.";
|
|
42
|
+
attribute :>> description = "Refreshes the rate and volume-delivered indicators from controller state at the specified display update interval.";
|
|
43
|
+
attribute :>> criticality = CriticalityKind::medium;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
action fnPresentLocalTime : SystemFunction {
|
|
47
|
+
attribute :>> id = "UIR-FN-005"; attribute :>> name = "PresentLocalTime";
|
|
48
|
+
attribute :>> shortDescription = "Read the synchronized clock and present local time.";
|
|
49
|
+
attribute :>> description = "Formats the device clock as local 24-hour time and refreshes the status-bar value once per second.";
|
|
50
|
+
attribute :>> criticality = CriticalityKind::medium;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
action fnPresentBatteryStatus : SystemFunction {
|
|
54
|
+
attribute :>> id = "UIR-FN-006"; attribute :>> name = "PresentBatteryStatus";
|
|
55
|
+
attribute :>> shortDescription = "Present battery state of charge and low-battery status.";
|
|
56
|
+
attribute :>> description = "Converts battery telemetry into percentage, icon state, and low-battery prominence for the running-infusion screen.";
|
|
57
|
+
attribute :>> criticality = CriticalityKind::medium;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
satisfy reqRateEntry by fnSetInfusionRate;
|
|
61
|
+
|
|
62
|
+
satisfy reqRateLegibility by fnPresentDeliveryStatus;
|
|
63
|
+
|
|
64
|
+
satisfy reqVolumeDisplay by fnPresentDeliveryStatus;
|
|
65
|
+
|
|
66
|
+
satisfy reqDrugLibrarySelection by fnValidateDrugSelection;
|
|
67
|
+
|
|
68
|
+
satisfy reqDisplayFreshness by fnPresentDeliveryStatus;
|
|
69
|
+
|
|
70
|
+
satisfy reqActiveRateDisplay by fnPresentDeliveryStatus;
|
|
71
|
+
|
|
72
|
+
satisfy reqDrugIdentityDisplay by fnValidateDrugSelection;
|
|
73
|
+
|
|
74
|
+
satisfy reqTimeDisplay by fnPresentLocalTime;
|
|
75
|
+
|
|
76
|
+
satisfy reqTimeAccuracy by fnPresentLocalTime;
|
|
77
|
+
|
|
78
|
+
satisfy reqBatteryStatusDisplay by fnPresentBatteryStatus;
|
|
79
|
+
|
|
80
|
+
satisfy reqBatteryWarningPerformance by fnPresentBatteryStatus;
|
|
81
|
+
|
|
82
|
+
satisfy reqDrugSelectionPerformance by fnValidateDrugSelection;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
// UI implementation architecture: the screen tree, its actions, and the
|
|
2
|
+
// panel they run on. One part tree carries geometry and design record — there
|
|
3
|
+
// is no separate region type.
|
|
4
|
+
package memo_examples_ui_screen_regions_architecture_implementation_ui {
|
|
5
|
+
private import memo_examples_ui_screen_regions_assurance_requirements::*;
|
|
6
|
+
private import ScalarValues::*;
|
|
7
|
+
private import memo_examples_ui_screen_regions_architecture_functional_functions::*;
|
|
8
|
+
|
|
9
|
+
private import memo_core_relationships::*;
|
|
10
|
+
private import memo_core_annotations::*;
|
|
11
|
+
private import memo_architecture_functional_functions::*;
|
|
12
|
+
private import memo_assurance_requirements::*;
|
|
13
|
+
private import memo_assurance_requirements_needs::*;
|
|
14
|
+
private import memo_assurance_human_factors::*;
|
|
15
|
+
private import memo_assurance_safety_risk::*;
|
|
16
|
+
private import memo_assurance_verification_validation::*;
|
|
17
|
+
private import memo_artifacts_core::*;
|
|
18
|
+
|
|
19
|
+
private import memo_core_enumerations::*;
|
|
20
|
+
private import memo_architecture_implementation_ui::*;
|
|
21
|
+
|
|
22
|
+
// Every UIElement carries safetyClass C. Per IEC 62304 §4.3 items inherit
|
|
23
|
+
// the software system's class; an item is classified lower only where
|
|
24
|
+
// segregation is documented, and nothing here is segregated — one UI
|
|
25
|
+
// process draws the lot, so the chrome inherits C like the rate field.
|
|
26
|
+
part uiPumpPanel : UserInterface {
|
|
27
|
+
attribute :>> id = "UIR-UI-001"; attribute :>> name = "PumpFrontPanel";
|
|
28
|
+
attribute :>> shortDescription = "Front-panel touchscreen.";
|
|
29
|
+
attribute :>> description = "The 7-inch capacitive touchscreen on the pump front panel, the sole interface for programming and monitoring an infusion at the bedside.";
|
|
30
|
+
attribute :>> modality = "visual + touch";
|
|
31
|
+
attribute :>> uiTechnology = "embedded Qt";
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// ── The main screen, and the tree beneath it ────────────────
|
|
35
|
+
// A screen is a UIElement whose formKind is `screen`. Its bounds are the
|
|
36
|
+
// full frame; every descendant's bounds are relative to ITS parent.
|
|
37
|
+
part elMainScreen : UIElement {
|
|
38
|
+
attribute :>> id = "UIE-001"; attribute :>> name = "MainInfusionScreen";
|
|
39
|
+
attribute :>> shortDescription = "Primary running-infusion screen.";
|
|
40
|
+
attribute :>> description = "The screen shown while an infusion is running: current rate, volume delivered, and access to settings. The default view the clinician comes back to after any subordinate task.";
|
|
41
|
+
attribute :>> formKind = UIElementFormKind::screen;
|
|
42
|
+
attribute :>> safetyClass = SafetyClassKind::C;
|
|
43
|
+
attribute :>> navigationRole = "home";
|
|
44
|
+
attribute :>> disclosureKind = UIDisclosureKind::inline;
|
|
45
|
+
attribute :>> bounds {
|
|
46
|
+
attribute :>> x = 0.0; attribute :>> y = 0.0;
|
|
47
|
+
attribute :>> width = 1.0; attribute :>> height = 1.0;
|
|
48
|
+
}
|
|
49
|
+
attribute :>> boundaryColor = "#1B3A4B";
|
|
50
|
+
attribute :>> detectionMethod = BoundsDetectionKind::manual;
|
|
51
|
+
|
|
52
|
+
// ── A recursively inspectable dynamic region ─────────────
|
|
53
|
+
// The reusable region is the parent. Closed and expanded presentations
|
|
54
|
+
// are siblings beneath it, so a renderer (including a 3-D renderer)
|
|
55
|
+
// can reuse the region and select the state appropriate to its scene.
|
|
56
|
+
// The region has its own capture; geometry views stop at that
|
|
57
|
+
// boundary on the main screen and let the reviewer double-click to
|
|
58
|
+
// recurse into its children.
|
|
59
|
+
part elDrugSelectorRegion : UIElement {
|
|
60
|
+
attribute redefines name = "DrugSelectorRegion";
|
|
61
|
+
attribute redefines id = "UIE-005";
|
|
62
|
+
attribute redefines shortDescription = "Reusable region containing drug-selector states.";
|
|
63
|
+
attribute redefines description = "Parent geometry region for the drug selector. Its state presentations are sibling UI elements, permitting the same region definition to be reused in flat, spatial, or 3-D renderings.";
|
|
64
|
+
attribute redefines formKind = UIElementFormKind::panel;
|
|
65
|
+
attribute redefines safetyClass = SafetyClassKind::C;
|
|
66
|
+
attribute redefines labelText = "DRUG";
|
|
67
|
+
attribute redefines disclosureKind = UIDisclosureKind::inline;
|
|
68
|
+
attribute redefines boundaryColor = "#F59E0B";
|
|
69
|
+
attribute redefines detectionMethod = BoundsDetectionKind::manual;
|
|
70
|
+
attribute redefines confirmedBy = "j.okafor";
|
|
71
|
+
attribute redefines confirmedAt = "2026-07-15";
|
|
72
|
+
attribute redefines bounds {
|
|
73
|
+
attribute redefines x = 0.03;
|
|
74
|
+
attribute redefines y = 0.43;
|
|
75
|
+
attribute redefines width = 0.47;
|
|
76
|
+
attribute redefines height = 0.18;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
part elDrugSelectorClosed : UIElement {
|
|
80
|
+
attribute :>> id = "UIE-010"; attribute :>> name = "ClosedDrugSelector";
|
|
81
|
+
attribute :>> shortDescription = "Closed drug selector shown on the main screen.";
|
|
82
|
+
attribute :>> description = "The compact, normal-state selector. It is a sibling of the expanded menu rather than a different identity for the parent region.";
|
|
83
|
+
attribute :>> formKind = UIElementFormKind::selector;
|
|
84
|
+
attribute :>> safetyClass = SafetyClassKind::C;
|
|
85
|
+
attribute :>> labelText = "Norepinephrine 8 mg / 250 mL";
|
|
86
|
+
attribute :>> disclosureKind = UIDisclosureKind::conditional;
|
|
87
|
+
attribute :>> visibilityCondition = "drug selector inactive";
|
|
88
|
+
attribute :>> bounds {
|
|
89
|
+
attribute :>> x = 0.0; attribute :>> y = 0.0;
|
|
90
|
+
attribute :>> width = 1.0; attribute :>> height = 0.25;
|
|
91
|
+
}
|
|
92
|
+
attribute :>> boundaryColor = "#F59E0B";
|
|
93
|
+
attribute :>> detectionMethod = BoundsDetectionKind::manual;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Open, this sibling overlays the same parent region. `overlay`
|
|
97
|
+
// states that covering adjacent content is intended dropdown
|
|
98
|
+
// behaviour, not a defect.
|
|
99
|
+
part elDrugMenuExpanded : UIElement {
|
|
100
|
+
attribute redefines name = "ExpandedDrugMenu";
|
|
101
|
+
attribute redefines id = "UIE-011";
|
|
102
|
+
attribute redefines shortDescription = "Expanded drug library choices.";
|
|
103
|
+
attribute redefines description = "Expanded state listing Norepinephrine, Dopamine, and Heparin. It shares the DrugSelectorRegion parent with the closed state and can extend beyond that parent's normal inline allocation.";
|
|
104
|
+
attribute redefines formKind = UIElementFormKind::selector;
|
|
105
|
+
attribute redefines safetyClass = SafetyClassKind::C;
|
|
106
|
+
attribute redefines labelText = "Norepinephrine; Dopamine; Heparin";
|
|
107
|
+
attribute redefines disclosureKind = UIDisclosureKind::overlay;
|
|
108
|
+
attribute redefines visibilityCondition = "drug selector activated";
|
|
109
|
+
attribute redefines boundaryColor = "#d97706";
|
|
110
|
+
attribute redefines detectionMethod = BoundsDetectionKind::manual;
|
|
111
|
+
attribute redefines bounds {
|
|
112
|
+
attribute redefines x = 0.0;
|
|
113
|
+
attribute redefines y = 0.20;
|
|
114
|
+
attribute redefines width = 1.0;
|
|
115
|
+
attribute redefines height = 0.80;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// ── The settings screen: a sibling root, not a child ────────
|
|
122
|
+
part elSettingsScreen : UIElement {
|
|
123
|
+
attribute :>> id = "UIE-008"; attribute :>> name = "InfusionSettingsScreen";
|
|
124
|
+
attribute :>> shortDescription = "Settings screen reached from the main screen.";
|
|
125
|
+
attribute :>> description = "Secondary screen for changing infusion parameters mid-run. It is a root in its own right with its own capture and its own coordinate frame — it is not laid out inside the main screen, so no geometric rule relates the two.";
|
|
126
|
+
attribute :>> formKind = UIElementFormKind::screen;
|
|
127
|
+
attribute :>> safetyClass = SafetyClassKind::C;
|
|
128
|
+
attribute :>> navigationRole = "subordinate";
|
|
129
|
+
attribute :>> disclosureKind = UIDisclosureKind::inline;
|
|
130
|
+
attribute :>> bounds {
|
|
131
|
+
attribute :>> x = 0.0; attribute :>> y = 0.0;
|
|
132
|
+
attribute :>> width = 1.0; attribute :>> height = 1.0;
|
|
133
|
+
}
|
|
134
|
+
attribute :>> boundaryColor = "#1B3A4B";
|
|
135
|
+
attribute :>> detectionMethod = BoundsDetectionKind::manual;
|
|
136
|
+
|
|
137
|
+
// A modal child of the settings screen. It is visible only while a
|
|
138
|
+
// pending rate change awaits explicit confirmation and intentionally
|
|
139
|
+
// covers the settings form beneath it.
|
|
140
|
+
part elRateConfirmDialog : UIElement {
|
|
141
|
+
attribute :>> id = "UIE-009"; attribute :>> name = "RateChangeConfirmationDialog";
|
|
142
|
+
attribute :>> shortDescription = "Modal confirmation popup for a new infusion rate.";
|
|
143
|
+
attribute :>> description = "Restates the pending infusion rate above the settings screen and requires an explicit confirm or cancel disposition before the value can reach the controller.";
|
|
144
|
+
attribute :>> formKind = UIElementFormKind::dialog;
|
|
145
|
+
attribute :>> safetyClass = SafetyClassKind::C;
|
|
146
|
+
attribute :>> labelText = "Confirm rate change?";
|
|
147
|
+
attribute :>> disclosureKind = UIDisclosureKind::overlay;
|
|
148
|
+
attribute :>> visibilityCondition = "pending rate change";
|
|
149
|
+
attribute :>> bounds {
|
|
150
|
+
attribute :>> x = 0.28; attribute :>> y = 0.22;
|
|
151
|
+
attribute :>> width = 0.44; attribute :>> height = 0.56;
|
|
152
|
+
}
|
|
153
|
+
attribute :>> boundaryColor = "#D59000";
|
|
154
|
+
attribute :>> detectionMethod = BoundsDetectionKind::manual;
|
|
155
|
+
attribute :>> confirmedBy = "j.okafor";
|
|
156
|
+
attribute :>> confirmedAt = "2026-07-16";
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// ── UI actions and the functions they invoke ────────────────
|
|
161
|
+
action uiaEditRate : UIAction {
|
|
162
|
+
attribute :>> id = "UIR-UIA-001"; attribute :>> name = "EditInfusionRate";
|
|
163
|
+
attribute :>> intent = InteractionIntentKind::userInput;
|
|
164
|
+
attribute :>> confirmationRequired = true;
|
|
165
|
+
attribute :>> feedbackProvided = "new rate echoed on a confirmation dialog before it is applied";
|
|
166
|
+
perform fnManageInfusionDisplay.fnSetInfusionRate;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
action uiaOpenSettings : UIAction {
|
|
170
|
+
attribute :>> id = "UIR-UIA-002"; attribute :>> name = "OpenInfusionSettings";
|
|
171
|
+
attribute :>> intent = InteractionIntentKind::navigation;
|
|
172
|
+
attribute :>> confirmationRequired = false;
|
|
173
|
+
perform fnManageInfusionDisplay;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
action uiaSelectDrug : UIAction {
|
|
177
|
+
attribute :>> id = "UIR-UIA-003"; attribute :>> name = "SelectDrug";
|
|
178
|
+
attribute :>> intent = InteractionIntentKind::userInput;
|
|
179
|
+
attribute :>> confirmationRequired = true;
|
|
180
|
+
perform fnManageInfusionDisplay.fnValidateDrugSelection;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
part uiElement12 : UIElement {
|
|
184
|
+
attribute redefines name = "Region UIE-012";
|
|
185
|
+
attribute redefines id = "UIE-012";
|
|
186
|
+
attribute redefines formKind = UIElementFormKind::panel;
|
|
187
|
+
attribute redefines disclosureKind = UIDisclosureKind::inline;
|
|
188
|
+
attribute redefines detectionMethod = BoundsDetectionKind::manual;
|
|
189
|
+
attribute redefines boundaryColor = "#14B8A6";
|
|
190
|
+
attribute redefines boundaryOpacity = 0.12;
|
|
191
|
+
attribute redefines boundaryWidth = 5;
|
|
192
|
+
attribute redefines bounds {
|
|
193
|
+
attribute redefines x = 0.52234;
|
|
194
|
+
attribute redefines y = 0.11311;
|
|
195
|
+
attribute redefines width = 0.45242;
|
|
196
|
+
attribute redefines height = 0.53172;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
satisfy reqRateLegibility by elMainScreen;
|
|
202
|
+
|
|
203
|
+
satisfy reqRateEntry by elSettingsScreen;
|
|
204
|
+
|
|
205
|
+
satisfy reqRateEntry by elSettingsScreen.elRateConfirmDialog;
|
|
206
|
+
|
|
207
|
+
satisfy reqDrugLibrarySelection by elMainScreen.elDrugSelectorRegion;
|
|
208
|
+
|
|
209
|
+
satisfy reqDrugIdentityDisplay by elMainScreen.elDrugSelectorRegion.elDrugSelectorClosed;
|
|
210
|
+
|
|
211
|
+
satisfy reqDrugSelectionPerformance by elMainScreen.elDrugSelectorRegion;
|
|
212
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Controlled asset identities.
|
|
2
|
+
//
|
|
3
|
+
// SysML owns each capture's identity, URI, hash, dimensions, and capture
|
|
4
|
+
// context; the PNG under `screen-captures/` owns its payload.
|
|
5
|
+
package memo_examples_ui_screen_regions_artifacts_assets {
|
|
6
|
+
private import ScalarValues::*;
|
|
7
|
+
|
|
8
|
+
private import memo_core_relationships::*;
|
|
9
|
+
private import memo_core_annotations::*;
|
|
10
|
+
private import memo_architecture_functional_functions::*;
|
|
11
|
+
private import memo_assurance_requirements::*;
|
|
12
|
+
private import memo_assurance_requirements_needs::*;
|
|
13
|
+
private import memo_assurance_human_factors::*;
|
|
14
|
+
private import memo_assurance_safety_risk::*;
|
|
15
|
+
private import memo_assurance_verification_validation::*;
|
|
16
|
+
|
|
17
|
+
private import memo_core_enumerations::*;
|
|
18
|
+
private import memo_artifacts_core::*;
|
|
19
|
+
private import memo_architecture_implementation_ui::*;
|
|
20
|
+
|
|
21
|
+
// ── The captures ────────────────────────────────────────────
|
|
22
|
+
part capMain : ScreenCapture {
|
|
23
|
+
attribute :>> id = "UIR-CAP-001"; attribute :>> name = "MainScreenCapture_v2.4.1";
|
|
24
|
+
attribute :>> shortDescription = "Main infusion screen, build 2.4.1.";
|
|
25
|
+
attribute :>> description = "Screenshot of the running-infusion screen taken from release candidate 2.4.1 on the 7-inch panel at 1024×600, English (US), daylight theme, clinician role.";
|
|
26
|
+
attribute :>> imageUri = "model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png";
|
|
27
|
+
attribute :>> imageHash = "sha256:086d8a3c2956ad8ed81f1e565a97308b55ba8a384c22c1b2138626ad8928a88a";
|
|
28
|
+
attribute :>> pixelWidth = 1024;
|
|
29
|
+
attribute :>> pixelHeight = 600;
|
|
30
|
+
attribute :>> captureDate = "2026-07-14";
|
|
31
|
+
attribute :>> capturedBuild = "pump-fw-2.4.1-rc3";
|
|
32
|
+
attribute :>> captureContext = "7in panel, 1024x600, en-US, daylight theme, clinician role";
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
part capDrugSelector : ScreenCapture {
|
|
36
|
+
attribute :>> id = "UIC-003"; attribute :>> name = "ExpandedDrugSelectorCapture_v2.4.1";
|
|
37
|
+
attribute :>> shortDescription = "Expanded drug-selector region crop.";
|
|
38
|
+
attribute :>> description = "Focused capture of the reusable DrugSelectorRegion in its expanded state, used when a reviewer drills into the region from the main layout.";
|
|
39
|
+
attribute :>> imageUri = "model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png";
|
|
40
|
+
attribute :>> imageHash = "sha256:2265b48864be8561a86099a99cf8aea2f4fcf06c19ccacbcc55784fbb1c37975";
|
|
41
|
+
attribute :>> pixelWidth = 798;
|
|
42
|
+
attribute :>> pixelHeight = 390;
|
|
43
|
+
attribute :>> captureDate = "2026-07-31";
|
|
44
|
+
attribute :>> capturedBuild = "pump-fw-2.4.1-rc3";
|
|
45
|
+
attribute :>> captureContext = "drug-selector region crop, expanded state, en-US";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
part capSettings : ScreenCapture {
|
|
49
|
+
attribute :>> id = "UIR-CAP-002"; attribute :>> name = "SettingsScreenCapture_v2.4.1";
|
|
50
|
+
attribute :>> shortDescription = "Infusion settings screen, build 2.4.1.";
|
|
51
|
+
attribute :>> description = "Screenshot of the settings screen reached from the main screen's settings row, same build and capture conditions as the main screen capture.";
|
|
52
|
+
attribute :>> imageUri = "model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png";
|
|
53
|
+
attribute :>> imageHash = "sha256:2ad7f11427fdb2eb179cf94d96a1679a2ece31505d247ee0b659bec06a669dbf";
|
|
54
|
+
attribute :>> pixelWidth = 1024;
|
|
55
|
+
attribute :>> pixelHeight = 600;
|
|
56
|
+
attribute :>> captureDate = "2026-07-14";
|
|
57
|
+
attribute :>> capturedBuild = "pump-fw-2.4.1-rc3";
|
|
58
|
+
attribute :>> captureContext = "7in panel, 1024x600, en-US, daylight theme, clinician role";
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
}
|
|
Binary file
|
|
Binary file
|