@memoarchitect/ontology 0.6.4 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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/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/extensions/clinical/memo.package.yaml +18 -9
- package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +10 -2
- package/examples/extensions/template/memo.package.yaml +17 -9
- 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/analysis/Samples/01-model-overview.ipynb +148 -0
- package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +301 -0
- package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +229 -0
- package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +200 -0
- package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +188 -0
- package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +173 -0
- package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +180 -0
- package/examples/gpca-pump/analysis/Samples/README.md +37 -0
- package/examples/gpca-pump/gpca-pump.kpar +0 -0
- 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 +1 -1
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +22 -12
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +2 -2
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +8 -2
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +5 -5
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +3 -8
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +41 -11
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +19 -8
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +2 -2
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +10 -1
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +34 -30
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +59 -31
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +1 -1
- package/examples/gpca-pump/model/catalog/project.sysml +21 -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 +3 -3
- 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 +3 -3
- 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 +4 -4
- 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 +7 -7
- 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 +3 -3
- 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 +2 -2
- package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +3 -3
- 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 +6 -6
- 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 +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +2 -2
- 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 +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +3 -3
- 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 +4 -4
- 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 +3 -3
- package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +2 -2
- 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 +1 -0
- 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/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 +174 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +183 -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 +90 -0
- package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
- package/examples/nested-architecture-dsm/model/catalog/traces.sysml +49 -0
- package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -6
- 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/software-only-medical-device/model/catalog/project.sysml +24 -0
- 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 +23 -19
- 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 +5 -3
- 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 +18 -10
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +4 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/functional_flow_view.sysml +23 -20
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/interconnection_view.sysml +17 -14
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/operational_behaviour_view.sysml +23 -20
- 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 +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +51 -0
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/state_transition_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/tree_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +3 -1
- 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 +2 -1
- 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 +60 -0
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +189 -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 +60 -0
- package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
- package/examples/ui-screen-regions/model/catalog/traces.sysml +276 -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/memo.manifest.yaml +2 -0
- 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 +1 -3
- package/profile/memo.package.yaml +18 -9
- package/src/architecture/decisions/memo_decisions.sysml +7 -0
- package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
- package/src/architecture/functional/functions/memo_functions.sysml +5 -12
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +1 -3
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +18 -5
- package/src/architecture/implementation/ui/memo_ui.sysml +210 -27
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +1 -2
- package/src/architecture/logical/structure/memo_logical_structure.sysml +71 -15
- package/src/architecture/operational/activities/memo_activities.sysml +0 -1
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +2 -2
- package/src/architecture/operational/workflows/memo_workflows.sysml +0 -6
- package/src/{compliance/change/memo_change.sysml → artifacts/configuration_management/memo_configuration_management.sysml} +5 -3
- package/src/artifacts/core/memo_controlled_artifacts.sysml +33 -0
- package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +1 -1
- package/src/assurance/human_factors/memo_human_factors.sysml +1 -1
- package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +11 -0
- package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +1 -1
- package/src/core/annotations/memo_annotations.sysml +77 -0
- package/src/core/common/memo_common.sysml +20 -3
- package/src/core/consistency_rules/consistency_rules.sysml +7 -0
- package/src/core/dimensions/dimensions.sysml +5 -1
- package/src/core/enumerations/memo_enumerations.sysml +41 -6
- package/src/core/methodology_scope/methodology_scope.sysml +7 -15
- package/src/core/relationships/memo_relationships.sysml +4 -2
- package/src/memo_namespaces.sysml +97 -67
- package/src/methodology/core/memo_core.sysml +45 -2
- package/src/methodology/profiles/memo_profiles.sysml +30 -40
- 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 +38 -68
- package/src/rules/quantitative/quantitative_rules.sysml +8 -8
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +7 -0
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +3 -1
- package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
- package/src/viewpoints/context/context_viewpoint.sysml +3 -1
- package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +3 -1
- 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 +6 -0
- package/src/viewpoints/functional/functional_viewpoint.sysml +3 -1
- package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +2 -2
- package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +2 -2
- 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 +3 -1
- package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +2 -2
- 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 +3 -1
- package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +2 -2
- 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/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/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/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/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.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-62304/detailed-design.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/srs.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.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/summative-eval.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/task-analysis.md +0 -0
- /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.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/urra.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/fmea.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/har.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/rmp.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,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_gpca_context {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_architecture_operational_context_actors::*;
|
|
@@ -13,7 +13,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
|
|
|
13
13
|
attribute :>> name = "GPCA_IntendedUse";
|
|
14
14
|
attribute :>> title = "GPCA Pump Intended Use";
|
|
15
15
|
attribute :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics.";
|
|
16
|
-
attribute :>>
|
|
16
|
+
attribute :>> description = "The GPCA pump delivers a prescribed analgesic drug intravenously at a programmed basal rate, supplemented by square boluses delivered automatically at programmed intervals and by patient-requested bolus doses, subject to lockout intervals and maximum-dose limits.";
|
|
17
17
|
attribute :>> indication = "Management of acute post-operative or chronic pain requiring titrated intravenous opioid analgesia.";
|
|
18
18
|
attribute :>> contraindication = "Patients unable to comprehend or operate the bolus request mechanism; drugs without safe-value records in the hospital pharmacy database.";
|
|
19
19
|
attribute :>> patientPopulation = "Adult in-patients under clinical supervision.";
|
|
@@ -26,7 +26,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
|
|
|
26
26
|
attribute :>> name = "BolusRequestBySomeoneOtherThanPatient";
|
|
27
27
|
attribute :>> title = "Bolus by proxy";
|
|
28
28
|
attribute :>> shortDescription = "A caregiver or visitor presses the patient bolus control.";
|
|
29
|
-
attribute :>>
|
|
29
|
+
attribute :>> description = "A person other than the patient activates the bolus request control, bypassing the intended patient self-limiting behavior.";
|
|
30
30
|
attribute :>> misuseContext = "Patient-controlled analgesia in a supervised hospital setting.";
|
|
31
31
|
attribute :>> foreseeableBasis = "Known PCA use pattern represented in the GPCA hazard analysis.";
|
|
32
32
|
attribute :>> affectedUseContext = "UC-001";
|
|
@@ -51,7 +51,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
|
|
|
51
51
|
attribute :>> actorKind = ActorKind::patient;
|
|
52
52
|
attribute :>> id = "ACT-001";
|
|
53
53
|
attribute :>> name = "Patient";
|
|
54
|
-
attribute :>> actorKind = ActorKind::patient;
|
|
55
54
|
attribute :>> trainingLevel = "instructed by clinician on bolus request button only";
|
|
56
55
|
attribute :>> description = "Receives the infusion and requests bolus doses via the patient pendant.";
|
|
57
56
|
}
|
|
@@ -59,7 +58,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
|
|
|
59
58
|
attribute :>> actorKind = ActorKind::clinician;
|
|
60
59
|
attribute :>> id = "ACT-002";
|
|
61
60
|
attribute :>> name = "ClinicianNurse";
|
|
62
|
-
attribute :>> actorKind = ActorKind::clinician;
|
|
63
61
|
attribute :>> trainingLevel = "trained clinical user; programs prescriptions and responds to alarms";
|
|
64
62
|
attribute :>> description = "Loads the drug reservoir, programs and confirms the prescription, starts/stops therapy, and responds to alarms.";
|
|
65
63
|
}
|
|
@@ -67,7 +65,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
|
|
|
67
65
|
attribute :>> actorKind = ActorKind::clinician;
|
|
68
66
|
attribute :>> id = "ACT-003";
|
|
69
67
|
attribute :>> name = "PrescribingPhysician";
|
|
70
|
-
attribute :>> actorKind = ActorKind::clinician;
|
|
71
68
|
attribute :>> trainingLevel = "licensed prescriber";
|
|
72
69
|
attribute :>> description = "Prescribes drug, concentration, basal rate, bolus volume, lockout interval, and maximum dose limits.";
|
|
73
70
|
}
|
|
@@ -75,7 +72,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
|
|
|
75
72
|
attribute :>> actorKind = ActorKind::clinician;
|
|
76
73
|
attribute :>> id = "ACT-004";
|
|
77
74
|
attribute :>> name = "Pharmacist";
|
|
78
|
-
attribute :>> actorKind = ActorKind::clinician;
|
|
79
75
|
attribute :>> trainingLevel = "licensed pharmacist";
|
|
80
76
|
attribute :>> description = "Prepares the drug reservoir and verifies drug and concentration against the prescription.";
|
|
81
77
|
}
|
|
@@ -83,7 +79,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_context {
|
|
|
83
79
|
attribute :>> actorKind = ActorKind::technician;
|
|
84
80
|
attribute :>> id = "ACT-005";
|
|
85
81
|
attribute :>> name = "BiomedicalTechnician";
|
|
86
|
-
attribute :>> actorKind = ActorKind::technician;
|
|
87
82
|
attribute :>> trainingLevel = "service-trained; authenticated service access";
|
|
88
83
|
attribute :>> description = "Performs maintenance, battery replacement, and calibration through the service interface.";
|
|
89
84
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_assurance_cybersecurity::*;
|
|
@@ -7,10 +7,10 @@ package memo_examples_gpca_pump_model_catalog_gpca_cybersecurity {
|
|
|
7
7
|
private import memo_assurance_verification_validation::*;
|
|
8
8
|
private import memo_core_enumerations::*;
|
|
9
9
|
private import memo_core_relationships::*;
|
|
10
|
-
private import
|
|
11
|
-
private import
|
|
12
|
-
private import
|
|
13
|
-
private import
|
|
10
|
+
private import memo_examples_gpca_pump_gpca_architecture::*;
|
|
11
|
+
private import memo_examples_gpca_pump_gpca_risk::*;
|
|
12
|
+
private import memo_examples_gpca_pump_gpca_requirements::*;
|
|
13
|
+
private import memo_examples_gpca_pump_gpca_verification::*;
|
|
14
14
|
|
|
15
15
|
part therapyConfigurationAsset : CybersecurityAsset {
|
|
16
16
|
attribute :>> id = "AST-CYB-001";
|
|
@@ -78,7 +78,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_cybersecurity {
|
|
|
78
78
|
attribute :>> cweReference = "CWE-798";
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
action tamperedConfigurationScenario : ThreatScenario {
|
|
82
82
|
attribute :>> id = "SCN-001";
|
|
83
83
|
attribute :>> name = "TamperedTherapyConfigurationScenario";
|
|
84
84
|
attribute :>> description = "An attacker with local access to the maintenance port alters lockout or dose parameters, aiming to bypass safety limits; may enable unsafe therapy delivery or bypass safeguards.";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_gpca_formal_behavior {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_architecture_functional_behavior::*;
|
|
@@ -42,7 +42,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
42
42
|
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
43
43
|
attribute :>> id = "AP-002";
|
|
44
44
|
attribute :>> name = "VtbiHighPositive";
|
|
45
|
-
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
46
45
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
47
46
|
attribute :>> formalExpression = "assume DB_IN.VTBI_High > 0";
|
|
48
47
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
|
|
@@ -51,7 +50,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
51
50
|
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
52
51
|
attribute :>> id = "AP-003";
|
|
53
52
|
attribute :>> name = "EmptyReservoirConstPositive";
|
|
54
|
-
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
55
53
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
56
54
|
attribute :>> formalExpression = "assume CONST_IN.Empty_Reservoir > 0";
|
|
57
55
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
|
|
@@ -60,7 +58,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
60
58
|
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
61
59
|
attribute :>> id = "AP-001";
|
|
62
60
|
attribute :>> name = "ValidPrescriptionSavedBeforeTherapy";
|
|
63
|
-
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
64
61
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
65
62
|
attribute :>> formalExpression = "assume a saved prescription is available before infusion initiation";
|
|
66
63
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 7)";
|
|
@@ -71,7 +68,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
71
68
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
72
69
|
attribute :>> id = "GP-001";
|
|
73
70
|
attribute :>> name = "ModeRange";
|
|
74
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
75
71
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
76
72
|
attribute :>> formalExpression = "guarantee mode_range: GPCA_SW_OUT.Current_System_Mode in {0, 1, 2, 3, 4, 6, 7, 8} (source enumeration omits 5)";
|
|
77
73
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 1)";
|
|
@@ -80,7 +76,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
80
76
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
81
77
|
attribute :>> id = "GP-004";
|
|
82
78
|
attribute :>> name = "NotStartImpliesModeZero";
|
|
83
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
84
79
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
85
80
|
attribute :>> formalExpression = "guarantee not(OP_CMD_IN.System_Start) => GPCA_SW_OUT.Current_System_Mode = 0";
|
|
86
81
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
|
|
@@ -89,7 +84,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
89
84
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
90
85
|
attribute :>> id = "GP-005";
|
|
91
86
|
attribute :>> name = "InitialSystemStartImpliesModeOne";
|
|
92
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
93
87
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
94
88
|
attribute :>> formalExpression = "guarantee sys_initial and OP_CMD_IN.System_Start => GPCA_SW_OUT.Current_System_Mode = 1";
|
|
95
89
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4 allocation: TLM System_Start -> System_On; IM System_On -> mode 1)";
|
|
@@ -98,7 +92,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
98
92
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
99
93
|
attribute :>> id = "GP-006";
|
|
100
94
|
attribute :>> name = "OffToOnImpliesModeOne";
|
|
101
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
102
95
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
103
96
|
attribute :>> formalExpression = "guarantee not(sys_initial) and pre(GPCA_SW_OUT.Current_System_Mode) = 0 and OP_CMD_IN.System_Start => GPCA_SW_OUT.Current_System_Mode = 1";
|
|
104
97
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4)";
|
|
@@ -107,7 +100,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
107
100
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
108
101
|
attribute :>> id = "GP-007";
|
|
109
102
|
attribute :>> name = "EmptyReservoirImpliesNoFlow";
|
|
110
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
111
103
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
112
104
|
attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and pre(Current_System_Mode) > 1 and GPCA_SW_OUT.Reservoir_Volume < CONST_IN.Empty_Reservoir) => GPCA_SW_OUT.Commanded_Flow_Rate = 0";
|
|
113
105
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 59 'Empty Reservoir')";
|
|
@@ -116,7 +108,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
116
108
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
117
109
|
attribute :>> id = "GP-008";
|
|
118
110
|
attribute :>> name = "OverVtbiImpliesFlowAtMostKvo";
|
|
119
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
120
111
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
121
112
|
attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and pre(Current_System_Mode) > 1 and GPCA_SW_OUT.Volume_Infused > DB_IN.VTBI_High) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
|
|
122
113
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (over-infusion => keep-vein-open, not zero)";
|
|
@@ -125,7 +116,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
125
116
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
126
117
|
attribute :>> id = "GP-009";
|
|
127
118
|
attribute :>> name = "AirInLineImpliesFlowAtMostKvo";
|
|
128
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
129
119
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
130
120
|
attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Air_In_Line) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
|
|
131
121
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 21 'Air embolism')";
|
|
@@ -134,7 +124,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
134
124
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
135
125
|
attribute :>> id = "GP-010";
|
|
136
126
|
attribute :>> name = "OcclusionImpliesFlowAtMostKvo";
|
|
137
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
138
127
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
139
128
|
attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Occlusion) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
|
|
140
129
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
|
|
@@ -143,7 +132,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
143
132
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
144
133
|
attribute :>> id = "GP-011";
|
|
145
134
|
attribute :>> name = "DoorOpenImpliesFlowAtMostKvo";
|
|
146
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
147
135
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
148
136
|
attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Door_Open) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
|
|
149
137
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex";
|
|
@@ -152,7 +140,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
152
140
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
153
141
|
attribute :>> id = "GP-003";
|
|
154
142
|
attribute :>> name = "SameStepAlarmKvoGuarantee";
|
|
155
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
156
143
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
157
144
|
attribute :>> formalExpression = "guarantee an infusion-inhibiting notification in a step implies Commanded_Flow_Rate <= Flow_Rate_KVO in the same step (ALARM_OUT -> IM.ALARM_IN is an immediate connection)";
|
|
158
145
|
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) with the flow <= KVO guarantees above";
|
|
@@ -161,7 +148,6 @@ package memo_examples_gpca_pump_model_catalog_gpca_formal_behavior {
|
|
|
161
148
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
162
149
|
attribute :>> id = "GP-002";
|
|
163
150
|
attribute :>> name = "LockoutGuarantee";
|
|
164
|
-
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
165
151
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
166
152
|
attribute :>> formalExpression = "guarantee a BolusRequest_prog inside the LockOutPeriod_pbolus_prog window is ignored and no PATIENT BOLUS is initiated";
|
|
167
153
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 25.3, REQ 26)";
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_gpca_interfaces {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_architecture_logical_interfaces::*;
|
|
5
|
+
private import memo_architecture_realization_physical::*;
|
|
5
6
|
private import memo_architecture_functional_functions::*;
|
|
6
|
-
private import
|
|
7
|
-
private import
|
|
7
|
+
private import memo_core_common::*;
|
|
8
|
+
private import memo_examples_gpca_pump_gpca_architecture::*;
|
|
9
|
+
private import memo_examples_gpca_pump_gpca_behavior_subsystems::*;
|
|
8
10
|
private import memo_core_enumerations::*;
|
|
9
11
|
private import memo_core_dimensions::*;
|
|
10
12
|
abstract interface def SensorDataInterface :> DataInterface {
|
|
@@ -12,7 +14,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
|
|
|
12
14
|
attribute :>> protocolSemantics = "flow, air, occlusion, door, battery, cpu, memory, pump state";
|
|
13
15
|
}
|
|
14
16
|
port def SensorInputPort :> SensorPort {
|
|
15
|
-
|
|
17
|
+
in item sensorData : MemoExchangeItem;
|
|
16
18
|
attribute :>> interfaceType = "SensorDataInterface";
|
|
17
19
|
attribute :>> sensorDomain = "physiological and device state";
|
|
18
20
|
}
|
|
@@ -53,7 +55,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
|
|
|
53
55
|
attribute :>> name = "HW_SW_DataBus";
|
|
54
56
|
attribute :>> interfaceKind = InterfaceKind::digitalSignal;
|
|
55
57
|
attribute :>> protocol = "immediate data port mapping";
|
|
56
|
-
attribute :>> directionality = DirectionKind::
|
|
58
|
+
attribute :>> directionality = DirectionKind::inputOutput;
|
|
57
59
|
attribute :>> bandwidth = "implementation-defined";
|
|
58
60
|
attribute :>> timingConstraint = "same execution step where required";
|
|
59
61
|
attribute :>> electricalStandard = "logical/AADL";
|
|
@@ -149,7 +151,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
|
|
|
149
151
|
attribute :>> id = "SI-005";
|
|
150
152
|
attribute :>> name = "HospitalPharmacyDatabaseInterface";
|
|
151
153
|
attribute :>> interfaceKind = InterfaceKind::data;
|
|
152
|
-
attribute :>> direction = DirectionKind::
|
|
154
|
+
attribute :>> direction = DirectionKind::inputOutput;
|
|
153
155
|
attribute :>> protocol = "CriSys I 9, I 10, I 11";
|
|
154
156
|
attribute :>> protocolSemantics = "Retrieves the safe-value set (concentration, VTBI, flow rate, bolus interval/count, KVO rate) where DrugName_hd = DrugName_prog; resets to defaults when no record matches";
|
|
155
157
|
attribute :>> interactionPattern = "query/response safe-value lookup";
|
|
@@ -572,7 +574,10 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
|
|
|
572
574
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.5 Hospital Pharmacy Database Interface";
|
|
573
575
|
}
|
|
574
576
|
|
|
575
|
-
// ──
|
|
577
|
+
// ── MEMO functional-to-physical allocation abstractions ────
|
|
578
|
+
// These four exchanges summarize requirements-derived physical design
|
|
579
|
+
// intent. They are not the named port connections in GPCA_Device.aadl;
|
|
580
|
+
// the exact AADL feature topology is authored below and in gpca_trace.
|
|
576
581
|
part exSensorVector : ComponentExchange {
|
|
577
582
|
attribute :>> id = "CE-001";
|
|
578
583
|
attribute :>> name = "SensorStatusVectorExchange";
|
|
@@ -584,7 +589,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
|
|
|
584
589
|
ref :>> allocatedExchanges = lfSensorAcquisition;
|
|
585
590
|
attribute :>> direction = DirectionKind::input;
|
|
586
591
|
attribute :>> timingSemantics = "immediate (same-step delivery, Communication_Properties::Timing => immediate)";
|
|
587
|
-
attribute :>> sourceReference = "
|
|
592
|
+
attribute :>> sourceReference = "MEMO design extension allocated from LF-001; not a GPCA_Device.aadl connection";
|
|
588
593
|
}
|
|
589
594
|
part exFlowCommand : ComponentExchange {
|
|
590
595
|
attribute :>> id = "CE-002";
|
|
@@ -597,7 +602,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
|
|
|
597
602
|
ref :>> allocatedExchanges = lfFlowCommand;
|
|
598
603
|
attribute :>> direction = DirectionKind::output;
|
|
599
604
|
attribute :>> timingSemantics = "immediate (same-step delivery, Communication_Properties::Timing => immediate)";
|
|
600
|
-
attribute :>> sourceReference = "
|
|
605
|
+
attribute :>> sourceReference = "MEMO design extension allocated from LF-002; not a GPCA_Device.aadl connection";
|
|
601
606
|
}
|
|
602
607
|
part exAlarmAnnunciation : ComponentExchange {
|
|
603
608
|
attribute :>> id = "CE-003";
|
|
@@ -610,7 +615,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
|
|
|
610
615
|
ref :>> allocatedExchanges = lfAlarmSignal;
|
|
611
616
|
attribute :>> direction = DirectionKind::output;
|
|
612
617
|
attribute :>> timingSemantics = "immediate (same-step delivery, Communication_Properties::Timing => immediate)";
|
|
613
|
-
attribute :>> sourceReference = "
|
|
618
|
+
attribute :>> sourceReference = "MEMO design extension allocated from LF-003; not a GPCA_Device.aadl connection";
|
|
614
619
|
}
|
|
615
620
|
part exPrescriptionEntry : ComponentExchange {
|
|
616
621
|
attribute :>> id = "CE-004";
|
|
@@ -623,9 +628,34 @@ package memo_examples_gpca_pump_model_catalog_gpca_interfaces {
|
|
|
623
628
|
ref :>> allocatedExchanges = lfPrescriptionEntry;
|
|
624
629
|
attribute :>> direction = DirectionKind::input;
|
|
625
630
|
attribute :>> timingSemantics = "immediate (same-step delivery, Communication_Properties::Timing => immediate)";
|
|
626
|
-
attribute :>> sourceReference = "
|
|
631
|
+
attribute :>> sourceReference = "MEMO design extension allocated from LF-004; not a GPCA_Device.aadl connection";
|
|
627
632
|
}
|
|
628
633
|
|
|
634
|
+
// ── GPCA_Device and hardware-subsystem ports (AADL, 1:1) ───
|
|
635
|
+
// The published AADL hardware packages are interface wrappers: they do
|
|
636
|
+
// not decompose into the individual physical parts modelled elsewhere in
|
|
637
|
+
// this MEMO example. These features and their connections are therefore
|
|
638
|
+
// kept exact and separate from that extended physical design content.
|
|
639
|
+
part devOpCmdIn : PhysicalPort { attribute :>> id = "PORT-DEV-01"; attribute :>> name = "OP_CMD_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
|
|
640
|
+
part devDbIn : PhysicalPort { attribute :>> id = "PORT-DEV-02"; attribute :>> name = "DB_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
|
|
641
|
+
part devPresIn : PhysicalPort { attribute :>> id = "PORT-DEV-03"; attribute :>> name = "PRES_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
|
|
642
|
+
part devPatientIn : PhysicalPort { attribute :>> id = "PORT-DEV-04"; attribute :>> name = "PATIENT_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
|
|
643
|
+
part devGpcaOut : PhysicalPort { attribute :>> id = "PORT-DEV-05"; attribute :>> name = "GPCA_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_Device.aadl"; }
|
|
644
|
+
|
|
645
|
+
part snsOpCmdIn : PhysicalPort { attribute :>> id = "PORT-SNS-01"; attribute :>> name = "OP_CMD_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
646
|
+
part snsDbIn : PhysicalPort { attribute :>> id = "PORT-SNS-02"; attribute :>> name = "DB_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
647
|
+
part snsPresIn : PhysicalPort { attribute :>> id = "PORT-SNS-03"; attribute :>> name = "PRES_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
648
|
+
part snsPatientIn : PhysicalPort { attribute :>> id = "PORT-SNS-04"; attribute :>> name = "PATIENT_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
649
|
+
part snsOpCmdOut : PhysicalPort { attribute :>> id = "PORT-SNS-05"; attribute :>> name = "OP_CMD_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
650
|
+
part snsPresOut : PhysicalPort { attribute :>> id = "PORT-SNS-06"; attribute :>> name = "PRES_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
651
|
+
part snsPatientOut : PhysicalPort { attribute :>> id = "PORT-SNS-07"; attribute :>> name = "PATIENT_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
652
|
+
part snsSensorOut : PhysicalPort { attribute :>> id = "PORT-SNS-08"; attribute :>> name = "SENSOR_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
653
|
+
part snsConstOut : PhysicalPort { attribute :>> id = "PORT-SNS-09"; attribute :>> name = "CONST_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
654
|
+
part snsDbOut : PhysicalPort { attribute :>> id = "PORT-SNS-10"; attribute :>> name = "DB_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Sensors.aadl"; }
|
|
655
|
+
|
|
656
|
+
part actGpcaSwIn : PhysicalPort { attribute :>> id = "PORT-ACT-01"; attribute :>> name = "GPCA_SW_IN"; attribute :>> direction = DirectionKind::input; attribute :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; }
|
|
657
|
+
part actGpcaOut : PhysicalPort { attribute :>> id = "PORT-ACT-02"; attribute :>> name = "GPCA_OUT"; attribute :>> direction = DirectionKind::output; attribute :>> sourceReference = "CITE-002: GPCA_HW_Actuators.aadl"; }
|
|
658
|
+
|
|
629
659
|
// ── GPCA_SW top-level ports (AADL GPCA_SW.aadl features) ────
|
|
630
660
|
part portOpCmdIn : SoftwarePort {
|
|
631
661
|
attribute :>> id = "PORT-01"; attribute :>> name = "OP_CMD_IN";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_gpca_operational {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_architecture_operational_structure::*;
|
|
@@ -7,7 +7,8 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
|
7
7
|
private import memo_architecture_operational_use_cases::*;
|
|
8
8
|
private import memo_architecture_operational_workflows::*;
|
|
9
9
|
private import memo_core_enumerations::*;
|
|
10
|
-
private import
|
|
10
|
+
private import memo_examples_gpca_pump_gpca_context::*;
|
|
11
|
+
private import memo_core_relationships::*;
|
|
11
12
|
|
|
12
13
|
// ── Operational entities beyond the human actors ────────────
|
|
13
14
|
part entityPharmacy : OperationalEntity {
|
|
@@ -234,7 +235,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
|
234
235
|
}
|
|
235
236
|
|
|
236
237
|
// ── Operational scenarios ───────────────────────────────────
|
|
237
|
-
|
|
238
|
+
action osNominalTherapy : OperativeScenario {
|
|
238
239
|
attribute :>> id = "OS-001";
|
|
239
240
|
attribute :>> name = "NominalTherapySession";
|
|
240
241
|
attribute :>> variantKind = ScenarioVariantKind::nominal;
|
|
@@ -247,10 +248,11 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
|
247
248
|
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
248
249
|
ref :>> activities = oaCompleteNominalTherapy;
|
|
249
250
|
}
|
|
250
|
-
|
|
251
|
+
action osLockoutBolus : OperativeScenario {
|
|
251
252
|
attribute :>> id = "OS-002";
|
|
252
253
|
attribute :>> name = "BolusRequestDuringLockout";
|
|
253
254
|
attribute :>> variantKind = ScenarioVariantKind::alternate;
|
|
255
|
+
attribute :>> variationPoint = "patient bolus request during the nominal therapy lockout interval";
|
|
254
256
|
attribute :>> operationalCondition = OperationalConditionKind::foreseeableMisuse;
|
|
255
257
|
attribute :>> preCondition = "basal infusion active; lockout interval running";
|
|
256
258
|
attribute :>> postCondition = "request ignored, logged; basal continues unchanged";
|
|
@@ -258,12 +260,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
|
258
260
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (lockout requirements)";
|
|
259
261
|
ref :>> parentWorkflow = wfManageActiveTherapy;
|
|
260
262
|
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
263
|
+
ref :>> baseScenario = osNominalTherapy;
|
|
261
264
|
ref :>> activities = oaRejectBolusDuringLockout;
|
|
262
265
|
}
|
|
263
|
-
|
|
266
|
+
action osOcclusionAlarm : OperativeScenario {
|
|
264
267
|
attribute :>> id = "OS-003";
|
|
265
268
|
attribute :>> name = "OcclusionDetectedDuringInfusion";
|
|
266
269
|
attribute :>> variantKind = ScenarioVariantKind::exception;
|
|
270
|
+
attribute :>> variationPoint = "occlusion detected while nominal infusion is active";
|
|
267
271
|
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
268
272
|
attribute :>> preCondition = "therapy active; downstream line becomes blocked";
|
|
269
273
|
attribute :>> postCondition = "infusion paused, alarm annunciated, clinician clears occlusion and resumes";
|
|
@@ -271,12 +275,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
|
271
275
|
attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms and Alerts (occlusion)";
|
|
272
276
|
ref :>> parentWorkflow = wfRespondToTherapyAlarm;
|
|
273
277
|
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
278
|
+
ref :>> baseScenario = osNominalTherapy;
|
|
274
279
|
ref :>> activities = oaRespondToOcclusion;
|
|
275
280
|
}
|
|
276
|
-
|
|
281
|
+
action osAirInLine : OperativeScenario {
|
|
277
282
|
attribute :>> id = "OS-004";
|
|
278
283
|
attribute :>> name = "AirInLineDetected";
|
|
279
284
|
attribute :>> variantKind = ScenarioVariantKind::exception;
|
|
285
|
+
attribute :>> variationPoint = "air-in-line detected while nominal infusion is active";
|
|
280
286
|
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
281
287
|
attribute :>> preCondition = "therapy active; air bubble enters tubing";
|
|
282
288
|
attribute :>> postCondition = "infusion stopped before air reaches patient; alarm annunciated";
|
|
@@ -284,12 +290,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
|
284
290
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Air embolism)";
|
|
285
291
|
ref :>> parentWorkflow = wfRespondToTherapyAlarm;
|
|
286
292
|
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
293
|
+
ref :>> baseScenario = osNominalTherapy;
|
|
287
294
|
ref :>> activities = oaRespondToAirInLine;
|
|
288
295
|
}
|
|
289
|
-
|
|
296
|
+
action osEmptyReservoir : OperativeScenario {
|
|
290
297
|
attribute :>> id = "OS-005";
|
|
291
298
|
attribute :>> name = "ReservoirEmptyDuringTherapy";
|
|
292
299
|
attribute :>> variantKind = ScenarioVariantKind::exception;
|
|
300
|
+
attribute :>> variationPoint = "reservoir-empty threshold reached during nominal therapy";
|
|
293
301
|
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
294
302
|
attribute :>> preCondition = "therapy active; reservoir volume reaches empty threshold";
|
|
295
303
|
attribute :>> postCondition = "infusion stopped, alarm raised, reservoir replaced";
|
|
@@ -297,12 +305,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
|
297
305
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Empty Reservoir)";
|
|
298
306
|
ref :>> parentWorkflow = wfRespondToTherapyAlarm;
|
|
299
307
|
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
308
|
+
ref :>> baseScenario = osNominalTherapy;
|
|
300
309
|
ref :>> activities = oaReplaceEmptyReservoir;
|
|
301
310
|
}
|
|
302
|
-
|
|
311
|
+
action osPowerLoss : OperativeScenario {
|
|
303
312
|
attribute :>> id = "OS-006";
|
|
304
313
|
attribute :>> name = "MainsPowerLossAndRecovery";
|
|
305
314
|
attribute :>> variantKind = ScenarioVariantKind::recovery;
|
|
315
|
+
attribute :>> variationPoint = "mains supply lost during nominal therapy";
|
|
306
316
|
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
307
317
|
attribute :>> preCondition = "therapy active on mains power";
|
|
308
318
|
attribute :>> postCondition = "therapy continues on battery; prescription preserved across full power loss";
|
|
@@ -310,6 +320,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
|
310
320
|
attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.3 Electrical Hazards (battery failure)";
|
|
311
321
|
ref :>> parentWorkflow = wfRespondToTherapyAlarm;
|
|
312
322
|
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
323
|
+
ref :>> baseScenario = osNominalTherapy;
|
|
313
324
|
ref :>> activities = oaRecoverAfterPowerLoss;
|
|
314
325
|
}
|
|
315
326
|
connection : Realizes connect realizing ::> osNominalTherapy to realized ::> ucDeliverPcaTherapy;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_gpca_physical {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_architecture_realization_physical::*;
|
|
@@ -41,7 +41,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_physical {
|
|
|
41
41
|
attribute :>> name = "ServiceMaintenancePort";
|
|
42
42
|
attribute :>> portKind = InterfaceKind::api;
|
|
43
43
|
attribute :>> connectorType = "covered UART/USB service connector";
|
|
44
|
-
attribute :>> direction = DirectionKind::
|
|
44
|
+
attribute :>> direction = DirectionKind::inputOutput;
|
|
45
45
|
}
|
|
46
46
|
part portMainsInlet : PhysicalPort {
|
|
47
47
|
attribute :>> id = "PP-005";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_gpca_risk {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_assurance_safety_risk::*;
|
|
@@ -71,6 +71,15 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
|
|
|
71
71
|
attribute :>> year = "2009";
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
+
part citeCriSysSoftwareBehavior : Citation {
|
|
75
|
+
attribute :>> id = "CITE-009";
|
|
76
|
+
attribute :>> name = "CriSysGpcaSoftwareBehaviorModel";
|
|
77
|
+
attribute :>> source = "PCA Pump Software Model (Simulink/Stateflow) — University of Minnesota CriSys";
|
|
78
|
+
attribute :>> section = "Infusion Pump Software Model Stateflow chart";
|
|
79
|
+
attribute :>> uri = "https://crisys.cs.umn.edu/downloads/gpca/PCA_Pump_SoftwareModel.mdl";
|
|
80
|
+
attribute :>> year = "undated";
|
|
81
|
+
}
|
|
82
|
+
|
|
74
83
|
// ── Shared risk matrix ───────────────────────────────────────────
|
|
75
84
|
part riskMatrix : RiskMatrix {
|
|
76
85
|
attribute :>> id = "RMX-001";
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_gpca_pump_gpca_system {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_architecture_functional_functions::*;
|
|
5
|
-
private import
|
|
5
|
+
private import memo_examples_gpca_pump_gpca_behavior_subsystems::*;
|
|
6
6
|
private import memo_architecture_operational_scenarios::*;
|
|
7
7
|
private import memo_core_enumerations::*;
|
|
8
|
+
private import memo_architecture_operational_structure::*;
|
|
9
|
+
private import memo_architecture_operational_use_cases::*;
|
|
10
|
+
private import memo_core_common::*;
|
|
8
11
|
|
|
9
12
|
part gpcaMission : Mission {
|
|
10
13
|
attribute :>> id = "MSN-001";
|
|
@@ -21,68 +24,69 @@ package memo_examples_gpca_pump_model_catalog_gpca_system {
|
|
|
21
24
|
attribute :>> id = "FC-001";
|
|
22
25
|
attribute :>> name = "PatientBolusChain";
|
|
23
26
|
attribute :>> flowCategory = FunctionalFlowKind::nominal;
|
|
24
|
-
ref :>> startFunction = fnAcquireSensors;
|
|
25
|
-
ref :>> endFunction = fnCommandPump;
|
|
26
27
|
attribute :>> endToEndLatencyBudgetMs = "100";
|
|
27
28
|
attribute :>> safetyRelevant = true;
|
|
28
29
|
attribute :>> securityRelevant = false;
|
|
29
30
|
attribute :>> description = "Bolus button press through lockout/max-dose check to pump actuation and logging.";
|
|
30
31
|
}
|
|
31
|
-
|
|
32
|
+
action fcsBolusSense : FunctionalFlowStep {
|
|
32
33
|
attribute :>> id = "FCS-001"; attribute :>> name = "SenseBolusRequest";
|
|
33
|
-
|
|
34
|
+
ref :>> function = fnAcquireSensors; ref :>> exchangedItem = ddBolusRequest;
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
+
action fcsBolusValidate : FunctionalFlowStep {
|
|
36
37
|
attribute :>> id = "FCS-002"; attribute :>> name = "CheckLockoutAndMaxDose";
|
|
37
|
-
|
|
38
|
+
ref :>> function = fnEnforceLimits; ref :>> exchangedItem = ddPrescription;
|
|
38
39
|
}
|
|
39
|
-
|
|
40
|
+
action fcsBolusCommand : FunctionalFlowStep {
|
|
40
41
|
attribute :>> id = "FCS-003"; attribute :>> name = "CommandBolusFlow";
|
|
41
|
-
|
|
42
|
+
ref :>> function = fnManageInfusion; ref :>> exchangedItem = cdFlowCommand;
|
|
42
43
|
}
|
|
43
|
-
|
|
44
|
+
action fcsBolusActuate : FunctionalFlowStep {
|
|
44
45
|
attribute :>> id = "FCS-004"; attribute :>> name = "ActuatePumpMotor";
|
|
45
|
-
|
|
46
|
+
ref :>> function = fnCommandPump; ref :>> exchangedItem = cdFlowCommand;
|
|
46
47
|
}
|
|
47
|
-
|
|
48
|
+
action fcsBolusLog : FunctionalFlowStep {
|
|
48
49
|
attribute :>> id = "FCS-005"; attribute :>> name = "LogBolusOutcome";
|
|
49
|
-
|
|
50
|
+
ref :>> function = fnLogEvents; ref :>> exchangedItem = ddEventRecord;
|
|
50
51
|
}
|
|
52
|
+
first fcsBolusSense then fcsBolusValidate;
|
|
53
|
+
first fcsBolusValidate then fcsBolusCommand;
|
|
54
|
+
first fcsBolusCommand then fcsBolusActuate;
|
|
55
|
+
first fcsBolusActuate then fcsBolusLog;
|
|
51
56
|
|
|
52
57
|
part fcAlarmStop : FunctionalFlow {
|
|
53
58
|
attribute :>> id = "FC-002";
|
|
54
59
|
attribute :>> name = "AlarmDetectionToSafeStateChain";
|
|
55
60
|
attribute :>> flowCategory = FunctionalFlowKind::alarm;
|
|
56
|
-
ref :>> startFunction = fnAcquireSensors;
|
|
57
|
-
ref :>> endFunction = fnAnnunciate;
|
|
58
61
|
attribute :>> endToEndLatencyBudgetMs = "20";
|
|
59
62
|
attribute :>> safetyRelevant = true;
|
|
60
63
|
attribute :>> securityRelevant = false;
|
|
61
64
|
attribute :>> description = "Sensor condition through alarm evaluation to same-step transition to PAUSED (KVO flow, REQ 43) and annunciation.";
|
|
62
65
|
}
|
|
63
|
-
|
|
66
|
+
action fcsAlarmSense : FunctionalFlowStep {
|
|
64
67
|
attribute :>> id = "FCS-006"; attribute :>> name = "SenseAlarmCondition";
|
|
65
|
-
|
|
68
|
+
ref :>> function = fnAcquireSensors; ref :>> exchangedItem = ddSensorVector;
|
|
66
69
|
}
|
|
67
|
-
|
|
70
|
+
action fcsAlarmEvaluate : FunctionalFlowStep {
|
|
68
71
|
attribute :>> id = "FCS-007"; attribute :>> name = "EvaluateAlarmCondition";
|
|
69
|
-
|
|
72
|
+
ref :>> function = fnMonitorAlarm; ref :>> exchangedItem = ddSensorVector;
|
|
70
73
|
}
|
|
71
|
-
|
|
74
|
+
action fcsAlarmStopInfusion : FunctionalFlowStep {
|
|
72
75
|
attribute :>> id = "FCS-008"; attribute :>> name = "LimitFlowToKvoSameStep";
|
|
73
|
-
|
|
76
|
+
ref :>> function = fnManageInfusion; ref :>> exchangedItem = cdAlarmSignal;
|
|
74
77
|
}
|
|
75
|
-
|
|
78
|
+
action fcsAlarmAnnunciate : FunctionalFlowStep {
|
|
76
79
|
attribute :>> id = "FCS-009"; attribute :>> name = "AnnunciateAudibleVisual";
|
|
77
|
-
|
|
80
|
+
ref :>> function = fnAnnunciate; ref :>> exchangedItem = cdAlarmSignal;
|
|
78
81
|
}
|
|
82
|
+
first fcsAlarmSense then fcsAlarmEvaluate;
|
|
83
|
+
first fcsAlarmEvaluate then fcsAlarmStopInfusion;
|
|
84
|
+
first fcsAlarmStopInfusion then fcsAlarmAnnunciate;
|
|
79
85
|
|
|
80
86
|
part fcStartup : FunctionalFlow {
|
|
81
87
|
attribute :>> id = "FC-003";
|
|
82
88
|
attribute :>> name = "PowerOnSelfTestChain";
|
|
83
89
|
attribute :>> flowCategory = FunctionalFlowKind::startup;
|
|
84
|
-
ref :>> startFunction = fnManagePower;
|
|
85
|
-
ref :>> endFunction = fnPresentStatus;
|
|
86
90
|
attribute :>> endToEndLatencyBudgetMs = "5000";
|
|
87
91
|
attribute :>> safetyRelevant = true;
|
|
88
92
|
attribute :>> securityRelevant = false;
|
|
@@ -90,22 +94,22 @@ package memo_examples_gpca_pump_model_catalog_gpca_system {
|
|
|
90
94
|
}
|
|
91
95
|
|
|
92
96
|
// ── System scenarios ────────────────────────────────────────
|
|
93
|
-
|
|
97
|
+
action ssBolusDuringBasal : FunctionalScenario {
|
|
94
98
|
attribute :>> id = "SS-001";
|
|
95
99
|
attribute :>> name = "PatientBolusDuringBasal";
|
|
96
100
|
attribute :>> variantKind = ScenarioVariantKind::nominal;
|
|
97
101
|
attribute :>> operationalCondition = OperationalConditionKind::normal;
|
|
98
|
-
attribute :>> sequenceDiagramRef = "VIEW-BHV-002";
|
|
99
102
|
attribute :>> preCondition = "BASAL mode active; no REQ 25 ignore condition holds";
|
|
100
103
|
attribute :>> postCondition = "PATIENT_BOLUS mode entered, bolus delivered, return to BASAL";
|
|
101
104
|
}
|
|
102
|
-
|
|
105
|
+
action ssAlarmPause : FunctionalScenario {
|
|
103
106
|
attribute :>> id = "SS-002";
|
|
104
107
|
attribute :>> name = "InhibitingNotificationPausesInfusion";
|
|
105
108
|
attribute :>> variantKind = ScenarioVariantKind::exception;
|
|
109
|
+
attribute :>> variationPoint = "an infusion-inhibiting notification interrupts active therapy";
|
|
106
110
|
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
107
|
-
attribute :>> sequenceDiagramRef = "VIEW-BHV-002";
|
|
108
111
|
attribute :>> preCondition = "any ACTIVE therapy mode; infusion-inhibiting notification detected (REQ 59)";
|
|
109
112
|
attribute :>> postCondition = "PAUSED mode entered in same execution step at FlowRate_kvo_hd keep-vein-open flow; notification annunciated per REQ 59";
|
|
113
|
+
ref :>> baseScenario = ssBolusDuringBasal;
|
|
110
114
|
}
|
|
111
115
|
}
|