@memoarchitect/ontology 0.8.22 → 0.10.9
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/memo.package.yaml +3 -0
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
- package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
- package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
- package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +11 -9
- package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
- package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
- package/examples/functional-logical-physical/memo.package.yaml +3 -0
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +9 -7
- package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
- package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
- package/examples/gpca-pump/memo.identity.yaml +2179 -0
- package/examples/gpca-pump/memo.package.yaml +3 -0
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +27 -23
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +15 -15
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +146 -180
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +21 -33
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -11
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
- package/examples/gpca-pump/model/catalog/project.sysml +3 -1
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +7 -7
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +7 -7
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +7 -8
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +8 -9
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +7 -7
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +8 -9
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +8 -9
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +6 -6
- package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +10 -8
- package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
- package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
- package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +7 -5
- package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
- package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
- package/examples/multidimensional-layers/memo.package.yaml +3 -0
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
- package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
- package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
- package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
- package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
- package/examples/reusable-instrument/memo.package.yaml +3 -0
- package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +23 -31
- package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
- package/examples/ros-mobile-robot/memo.package.yaml +3 -0
- package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +0 -1
- package/examples/software-only-medical-device/memo.package.yaml +3 -0
- package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -9
- package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
- package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
- package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -69
- package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
- package/examples/surgical-robot/memo.package.yaml +3 -0
- package/examples/surgical-robot/model/catalog/project.sysml +3 -1
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
- package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
- package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
- package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -11
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +4 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +3 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +17 -16
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +9 -8
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +4 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +3 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +4 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -9
- package/examples/temperature-alarm/memo.identity.yaml +64 -0
- package/examples/temperature-alarm/memo.package.yaml +3 -0
- package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +30 -29
- package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
- package/examples/ui-screen-regions/memo.package.yaml +3 -0
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
- package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
- package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
- package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +6 -5
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +6 -5
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +6 -5
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +4 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +4 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +4 -3
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
- package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/container/src/container_extension.sysml +2 -2
- package/extensions/container/src/methodology/container_methodology.sysml +3 -1
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
- package/extensions/ros/memo.package.yaml +1 -1
- package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
- package/extensions/template/src/extension.sysml +3 -1
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +2 -2
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/functional/behavior/memo_behavior.sysml +5 -5
- package/src/architecture/functional/functions/memo_functions.sysml +6 -6
- package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +7 -7
- package/src/architecture/implementation/ui/memo_ui.sysml +8 -31
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +4 -2
- package/src/architecture/logical/structure/memo_logical_structure.sysml +5 -5
- package/src/architecture/operational/activities/memo_activities.sysml +19 -28
- package/src/architecture/operational/context/actors/memo_actors.sysml +5 -4
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +7 -7
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +5 -14
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +12 -104
- package/src/architecture/operational/structure/memo_operational.sysml +42 -13
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -12
- package/src/architecture/operational/workflows/memo_workflows.sysml +20 -42
- package/src/architecture/realization/deployment/memo_deployment.sysml +26 -19
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
- package/src/artifacts/standards/cfr_21_820.sysml +80 -89
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
- package/src/artifacts/standards/iec_60601_1.sysml +108 -121
- package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
- package/src/artifacts/standards/iec_60812.sysml +21 -22
- package/src/artifacts/standards/iec_62304.sysml +150 -169
- package/src/artifacts/standards/iec_62366_1.sysml +80 -89
- package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
- package/src/artifacts/standards/iso_13485.sysml +80 -89
- package/src/artifacts/standards/iso_14971.sysml +66 -73
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
- package/src/artifacts/templates/dhf/system/sad.md +3 -3
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +2 -2
- package/src/assurance/human_factors/memo_human_factors.sysml +2 -2
- package/src/assurance/requirements/memo_requirements.sysml +2 -18
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +1 -1
- package/src/assurance/safety_risk/memo_risk.sysml +12 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
- package/src/core/common/memo_common.sysml +59 -55
- package/src/core/enumerations/memo_enumerations.sysml +1 -1
- package/src/core/relationships/memo_relationships.sysml +29 -56
- package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
- package/src/methodology/core/memo_core.sysml +0 -10
- package/src/methodology/profiles/memo_profiles.sysml +18 -16
- package/src/methodology/workflow/memo_workflow.sysml +5 -5
- package/src/rules/closure/closure_rules.sysml +22 -20
- package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
- package/src/rules/ontology/ontology_invariants.sysml +121 -48
- package/src/rules/quantitative/quantitative_rules.sysml +4 -2
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +58 -57
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +5 -4
- package/src/viewpoints/context/context_viewpoint.sysml +6 -5
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +6 -5
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +6 -6
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +36 -4
- package/src/viewpoints/functional/functional_viewpoint.sysml +6 -5
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +6 -5
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +6 -5
- package/src/viewpoints/logical/logical_viewpoint.sysml +5 -4
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +6 -5
- package/src/viewpoints/operational/operational_viewpoint.sysml +6 -5
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +7 -6
- package/src/viewpoints/physical/physical_viewpoint.sysml +5 -4
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +6 -5
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +6 -5
- package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +5 -4
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +6 -5
- package/src/viewpoints/risk/risk_viewpoint.sysml +5 -4
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +6 -5
- package/src/viewpoints/software/software_viewpoint.sysml +5 -4
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +6 -5
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +5 -4
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +5 -4
- package/src/viewpoints/verification/verification_viewpoint.sysml +5 -4
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +6 -5
- package/templates/connected-device/memo.package.yaml +2 -0
- package/templates/connected-device/model/catalog/project.sysml +3 -1
- package/templates/default/memo.package.yaml +2 -0
- package/templates/default/model/catalog/project.sysml +3 -1
- package/templates/infusion-pump/memo.package.yaml +2 -0
- package/templates/infusion-pump/model/catalog/project.sysml +3 -1
- package/templates/monitoring-device/memo.package.yaml +2 -0
- package/templates/monitoring-device/model/catalog/project.sysml +3 -1
- package/templates/samd/memo.package.yaml +2 -0
- package/templates/samd/model/catalog/project.sysml +3 -1
|
@@ -3,46 +3,50 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
3
3
|
|
|
4
4
|
private import memo_architecture_operational_context_actors::*;
|
|
5
5
|
private import memo_architecture_operational_context_use_context::*;
|
|
6
|
+
private import memo_architecture_operational_structure::*;
|
|
6
7
|
private import memo_assurance_requirements::*;
|
|
8
|
+
private import memo_assurance_safety_risk::*;
|
|
7
9
|
private import memo_assurance_human_factors::*;
|
|
8
10
|
private import memo_core_enumerations::*;
|
|
9
11
|
private import memo_examples_gpca_pump_gpca_operational::*;
|
|
10
12
|
|
|
13
|
+
private import memo_core_common::*;
|
|
14
|
+
private import memo_core_common::MemoIdentity;
|
|
11
15
|
// ── Intended use (ISO 14971 §5.2, IEC 62366-1) ──────────────
|
|
12
16
|
part gpcaIntendedUse : IntendedUse {
|
|
13
|
-
|
|
17
|
+
@MemoIdentity { :>> providedId = "IU-001"; }
|
|
14
18
|
attribute :>> name = "GPCA_IntendedUse";
|
|
15
|
-
|
|
16
|
-
attribute :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics.";
|
|
19
|
+
@MemoIdentity { :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics."; }
|
|
17
20
|
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.";
|
|
18
21
|
attribute :>> indication = "Management of acute post-operative or chronic pain requiring titrated intravenous opioid analgesia.";
|
|
19
22
|
attribute :>> contraindication = "Patients unable to comprehend or operate the bolus request mechanism; drugs without safe-value records in the hospital pharmacy database.";
|
|
20
23
|
attribute :>> patientPopulation = "Adult in-patients under clinical supervision.";
|
|
21
24
|
attribute :>> clinicalBenefit = "Timely, patient-titrated analgesia with lower total opioid consumption than fixed-schedule dosing.";
|
|
22
25
|
attribute :>> regulatoryClassification = "FDA Class II infusion pump (21 CFR 880.5725); IEC 62304 software safety class C.";
|
|
23
|
-
attribute :>>
|
|
26
|
+
attribute :>> missionKind = "therapeutic device mission";
|
|
27
|
+
attribute :>> successCriteria = "Drug delivered per prescription; no overdose or undetected under-infusion; every hazardous condition annunciated within its alarm latency budget.";
|
|
28
|
+
attribute :>> operationalContext = "Acute-care hospital ward, fixed (non-ambulatory) location (UC-001).";
|
|
29
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1-2.3 (GPCA overview, system functions, user characteristics)"; }
|
|
24
30
|
}
|
|
25
31
|
part bolusByProxyMisuse : ReasonablyForeseeableMisuse {
|
|
26
|
-
|
|
32
|
+
@MemoIdentity { :>> providedId = "RFM-001"; }
|
|
27
33
|
attribute :>> name = "BolusRequestBySomeoneOtherThanPatient";
|
|
28
|
-
|
|
29
|
-
attribute :>> shortDescription = "A caregiver or visitor presses the patient bolus control.";
|
|
34
|
+
@MemoIdentity { :>> shortDescription = "A caregiver or visitor presses the patient bolus control."; }
|
|
30
35
|
attribute :>> description = "A person other than the patient activates the bolus request control, bypassing the intended patient self-limiting behavior.";
|
|
31
36
|
attribute :>> misuseContext = "Patient-controlled analgesia in a supervised hospital setting.";
|
|
32
37
|
attribute :>> foreseeableBasis = "Known PCA use pattern represented in the GPCA hazard analysis.";
|
|
33
38
|
attribute :>> affectedUseContext = "UC-001";
|
|
34
|
-
|
|
39
|
+
@MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8; CITE-005: Open PCA ISO 14971 risk analysis, bolus-by-proxy event"; }
|
|
35
40
|
}
|
|
36
41
|
|
|
37
42
|
// ── Use contexts ────────────────────────────────────────────
|
|
38
43
|
part hospitalWardContext : UseContext {
|
|
39
|
-
|
|
44
|
+
@MemoIdentity { :>> providedId = "UC-001"; }
|
|
40
45
|
attribute :>> name = "HospitalWardUseContext";
|
|
41
46
|
attribute :>> careSetting = "acute-care hospital ward and post-anesthesia care unit";
|
|
42
47
|
attribute :>> environment = "indoor clinical environment, mains power with battery backup, pole or bed-rail mounted";
|
|
43
48
|
attribute :>> jurisdiction = "generic (FDA/EU reference model)";
|
|
44
49
|
attribute :>> connectedUse = true;
|
|
45
|
-
attribute :>> intendedUseReference = "IU-001";
|
|
46
50
|
}
|
|
47
51
|
// UC-002 (intra-hospital transport) removed: CriSys §2.4 states the
|
|
48
52
|
// system is used in a fixed location and is not ambulatory.
|
|
@@ -50,7 +54,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
50
54
|
// ── Actors ──────────────────────────────────────────────────
|
|
51
55
|
part actorPatient : User {
|
|
52
56
|
attribute :>> actorKind = ActorKind::patient;
|
|
53
|
-
|
|
57
|
+
@MemoIdentity { :>> providedId = "ACT-001"; }
|
|
54
58
|
attribute :>> name = "Patient";
|
|
55
59
|
attribute :>> trainingLevel = "instructed by clinician on bolus request button only";
|
|
56
60
|
attribute :>> description = "Receives the infusion and requests bolus doses via the patient pendant.";
|
|
@@ -58,7 +62,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
58
62
|
}
|
|
59
63
|
part actorNurse : User {
|
|
60
64
|
attribute :>> actorKind = ActorKind::clinician;
|
|
61
|
-
|
|
65
|
+
@MemoIdentity { :>> providedId = "ACT-002"; }
|
|
62
66
|
attribute :>> name = "ClinicianNurse";
|
|
63
67
|
attribute :>> trainingLevel = "trained clinical user; programs prescriptions and responds to alarms";
|
|
64
68
|
attribute :>> description = "Loads the drug reservoir, programs and confirms the prescription, starts/stops therapy, and responds to alarms.";
|
|
@@ -69,7 +73,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
69
73
|
}
|
|
70
74
|
part actorPrescriber : User {
|
|
71
75
|
attribute :>> actorKind = ActorKind::clinician;
|
|
72
|
-
|
|
76
|
+
@MemoIdentity { :>> providedId = "ACT-003"; }
|
|
73
77
|
attribute :>> name = "PrescribingPhysician";
|
|
74
78
|
attribute :>> trainingLevel = "licensed prescriber";
|
|
75
79
|
attribute :>> description = "Prescribes drug, concentration, basal rate, bolus volume, lockout interval, and maximum dose limits.";
|
|
@@ -77,7 +81,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
77
81
|
}
|
|
78
82
|
part actorPharmacist : User {
|
|
79
83
|
attribute :>> actorKind = ActorKind::clinician;
|
|
80
|
-
|
|
84
|
+
@MemoIdentity { :>> providedId = "ACT-004"; }
|
|
81
85
|
attribute :>> name = "Pharmacist";
|
|
82
86
|
attribute :>> trainingLevel = "licensed pharmacist";
|
|
83
87
|
attribute :>> description = "Prepares the drug reservoir and verifies drug and concentration against the prescription.";
|
|
@@ -85,7 +89,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
85
89
|
}
|
|
86
90
|
part actorTechnician : User {
|
|
87
91
|
attribute :>> actorKind = ActorKind::technician;
|
|
88
|
-
|
|
92
|
+
@MemoIdentity { :>> providedId = "ACT-005"; }
|
|
89
93
|
attribute :>> name = "BiomedicalTechnician";
|
|
90
94
|
attribute :>> trainingLevel = "service-trained; authenticated service access";
|
|
91
95
|
attribute :>> description = "Performs maintenance, battery replacement, and calibration through the service interface.";
|
|
@@ -94,43 +98,43 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
94
98
|
|
|
95
99
|
// ── Foreseeable use errors (IEC 62366-1, AAMI TIR PCA) ──────
|
|
96
100
|
part ueMisprogrammedRate : UseError {
|
|
97
|
-
|
|
101
|
+
@MemoIdentity { :>> providedId = "UE-001"; }
|
|
98
102
|
attribute :>> name = "MisprogrammedInfusionParameters";
|
|
99
103
|
attribute :>> errorCategory = UseErrorCategoryKind::actionCategory;
|
|
100
104
|
attribute :>> taskReference = "OA-003: Program prescription";
|
|
101
105
|
attribute :>> severity = SeverityKind::catastrophic;
|
|
102
106
|
attribute :>> rootCauseType = "decimal-point / unit entry slip during prescription programming";
|
|
103
107
|
attribute :>> description = "Clinician enters a basal rate or bolus volume an order of magnitude off (e.g. mg vs mL, misplaced decimal).";
|
|
104
|
-
|
|
108
|
+
@MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (incorrect dose settings)"; }
|
|
105
109
|
}
|
|
106
110
|
part ueBolusByProxy : UseError {
|
|
107
|
-
|
|
111
|
+
@MemoIdentity { :>> providedId = "UE-002"; }
|
|
108
112
|
attribute :>> name = "PCAByProxy";
|
|
109
113
|
attribute :>> errorCategory = UseErrorCategoryKind::cognition;
|
|
110
114
|
attribute :>> taskReference = "OA-005: Request patient bolus";
|
|
111
115
|
attribute :>> severity = SeverityKind::catastrophic;
|
|
112
116
|
attribute :>> rootCauseType = "family member or caregiver presses bolus button on behalf of a sedated patient";
|
|
113
117
|
attribute :>> description = "Bolus doses requested by someone other than the patient defeat the inherent safety of patient-limited dosing.";
|
|
114
|
-
|
|
118
|
+
@MemoIdentity { :>> sourceReference = "illustrative — no source"; }
|
|
115
119
|
}
|
|
116
120
|
part ueWrongDrugLoaded : UseError {
|
|
117
|
-
|
|
121
|
+
@MemoIdentity { :>> providedId = "UE-003"; }
|
|
118
122
|
attribute :>> name = "WrongDrugOrConcentrationLoaded";
|
|
119
123
|
attribute :>> errorCategory = UseErrorCategoryKind::cognition;
|
|
120
124
|
attribute :>> taskReference = "OA-002: Load drug reservoir";
|
|
121
125
|
attribute :>> severity = SeverityKind::catastrophic;
|
|
122
126
|
attribute :>> rootCauseType = "reservoir containing wrong drug or concentration mounted without verification";
|
|
123
127
|
attribute :>> description = "Loaded drug or concentration differs from the programmed prescription, so delivered dose differs from intended dose.";
|
|
124
|
-
|
|
128
|
+
@MemoIdentity { :>> sourceReference = "illustrative — no source"; }
|
|
125
129
|
}
|
|
126
130
|
part ueAlarmDisregard : UseError {
|
|
127
|
-
|
|
131
|
+
@MemoIdentity { :>> providedId = "UE-004"; }
|
|
128
132
|
attribute :>> name = "AlarmSilencedAndForgotten";
|
|
129
133
|
attribute :>> errorCategory = UseErrorCategoryKind::memoryRecall;
|
|
130
134
|
attribute :>> taskReference = "OA-006: Respond to alarm";
|
|
131
135
|
attribute :>> severity = SeverityKind::serious;
|
|
132
136
|
attribute :>> rootCauseType = "alarm silenced during high workload and the underlying condition never resolved";
|
|
133
137
|
attribute :>> description = "Clinician silences an alarm and does not return to resolve the underlying condition (e.g. occlusion), interrupting therapy.";
|
|
134
|
-
|
|
138
|
+
@MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (attentional/memory failure)"; }
|
|
135
139
|
}
|
|
136
140
|
}
|
|
@@ -15,8 +15,9 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
15
15
|
private import memo_examples_gpca_pump_gpca_requirements::*;
|
|
16
16
|
private import memo_examples_gpca_pump_gpca_verification::*;
|
|
17
17
|
|
|
18
|
+
private import memo_core_common::MemoIdentity;
|
|
18
19
|
part therapyConfigurationAsset : CybersecurityAsset {
|
|
19
|
-
|
|
20
|
+
@MemoIdentity { :>> providedId = "AST-CYB-001"; }
|
|
20
21
|
attribute :>> name = "TherapyConfigurationAsset";
|
|
21
22
|
attribute :>> assetKind = AssetKind::configuration;
|
|
22
23
|
attribute :>> confidentialityNeed = "medium";
|
|
@@ -28,7 +29,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
28
29
|
}
|
|
29
30
|
|
|
30
31
|
part patientEventLogAsset : CybersecurityAsset {
|
|
31
|
-
|
|
32
|
+
@MemoIdentity { :>> providedId = "AST-CYB-002"; }
|
|
32
33
|
attribute :>> name = "PatientEventLogAsset";
|
|
33
34
|
attribute :>> assetKind = AssetKind::auditRecord;
|
|
34
35
|
attribute :>> confidentialityNeed = "high";
|
|
@@ -40,7 +41,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
40
41
|
}
|
|
41
42
|
|
|
42
43
|
part maintenancePortBoundary : TrustBoundary {
|
|
43
|
-
|
|
44
|
+
@MemoIdentity { :>> providedId = "TB-001"; }
|
|
44
45
|
attribute :>> name = "MaintenancePortBoundary";
|
|
45
46
|
attribute :>> boundaryType = "service-access";
|
|
46
47
|
attribute :>> crossingConstraint = "Boundary between service tooling and therapy controller runtime.";
|
|
@@ -48,7 +49,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
part unauthorizedConfigChangeThreat : Threat {
|
|
51
|
-
|
|
52
|
+
@MemoIdentity { :>> providedId = "TH-001"; }
|
|
52
53
|
attribute :>> name = "UnauthorizedTherapyConfigurationChange";
|
|
53
54
|
attribute :>> driverKind = "cybersecurity";
|
|
54
55
|
attribute :>> threatCategory = ThreatCategoryKind::tampering;
|
|
@@ -60,7 +61,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
part eventLogTamperingThreat : Threat {
|
|
63
|
-
|
|
64
|
+
@MemoIdentity { :>> providedId = "TH-002"; }
|
|
64
65
|
attribute :>> name = "PatientEventLogTampering";
|
|
65
66
|
attribute :>> driverKind = "cybersecurity";
|
|
66
67
|
attribute :>> threatCategory = ThreatCategoryKind::repudiation;
|
|
@@ -72,7 +73,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
part weakServiceAuthentication : Vulnerability {
|
|
75
|
-
|
|
76
|
+
@MemoIdentity { :>> providedId = "VULN-001"; }
|
|
76
77
|
attribute :>> name = "WeakServiceAuthentication";
|
|
77
78
|
attribute :>> weakness = "service mode relies on shared default credential";
|
|
78
79
|
attribute :>> exploitability = "moderate";
|
|
@@ -81,17 +82,16 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
81
82
|
attribute :>> cweReference = "CWE-798";
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
action tamperedConfigurationScenario :
|
|
85
|
-
|
|
85
|
+
action tamperedConfigurationScenario : OperativeScenario {
|
|
86
|
+
@MemoIdentity { :>> providedId = "SCN-001"; }
|
|
86
87
|
attribute :>> name = "TamperedTherapyConfigurationScenario";
|
|
87
|
-
attribute :>> scenarioKind = ScenarioKind::threat;
|
|
88
88
|
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.";
|
|
89
89
|
attribute :>> actorDescription = "unauthorized actor with local access to the maintenance port";
|
|
90
90
|
attribute :>> defaultCategory = ThreatCategoryKind::tampering;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
part unsafeDoseCyberHazard : CyberHazard {
|
|
94
|
-
|
|
94
|
+
@MemoIdentity { :>> providedId = "CHZ-001"; }
|
|
95
95
|
attribute :>> name = "UnsafeTherapyConfigurationHazard";
|
|
96
96
|
attribute :>> hazardType = HazardTypeKind::drugDeliveryError;
|
|
97
97
|
attribute :>> foreseeable = true;
|
|
@@ -102,7 +102,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
part configurationTamperingRisk : CyberRisk {
|
|
105
|
-
|
|
105
|
+
@MemoIdentity { :>> providedId = "CRISK-001"; }
|
|
106
106
|
attribute :>> name = "ConfigurationTamperingRisk";
|
|
107
107
|
attribute :>> driverKind = "cyber risk";
|
|
108
108
|
attribute :>> probabilityEstimate = ProbabilityKind::occasional;
|
|
@@ -116,7 +116,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
part strongServiceAuthentication : CyberMitigation {
|
|
119
|
-
|
|
119
|
+
@MemoIdentity { :>> providedId = "CMIT-001"; }
|
|
120
120
|
attribute :>> name = "StrongServiceAuthenticationAndAudit";
|
|
121
121
|
attribute :>> controlKind = RiskControlKind::protectiveMeasure;
|
|
122
122
|
attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
|
|
@@ -127,7 +127,7 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
requirement reqAuthenticatedServiceAccess : SecurityRequirement {
|
|
130
|
-
|
|
130
|
+
@MemoIdentity { :>> providedId = "SREQ-001"; }
|
|
131
131
|
attribute :>> name = "AuthenticatedServiceAccess";
|
|
132
132
|
attribute :>> statement = "The system shall require authenticated and authorized service access before any therapy configuration parameter can be modified.";
|
|
133
133
|
attribute :>> sourceKind = RequirementSourceKind::risk;
|
|
@@ -145,9 +145,9 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
verification vcAuthenticatedServiceAccess : VerificationCase {
|
|
148
|
-
|
|
148
|
+
@MemoIdentity { :>> providedId = "CVER-001"; }
|
|
149
149
|
attribute :>> name = "VerifyAuthenticatedServiceAccess";
|
|
150
|
-
attribute :>> methodKind =
|
|
150
|
+
attribute :>> methodKind = MemoVerificationMethodKind::test;
|
|
151
151
|
attribute :>> acceptanceCriteria = "Only authenticated and authorized service sessions may modify therapy configuration; all attempts are logged.";
|
|
152
152
|
attribute :>> status = ElementStatusKind::approved;
|
|
153
153
|
|
|
@@ -4,6 +4,8 @@ package memo_examples_gpca_pump_gpca_formal_behavior {
|
|
|
4
4
|
private import memo_architecture_functional_behavior::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
|
+
private import memo_core_common::*;
|
|
8
|
+
private import memo_core_common::MemoIdentity;
|
|
7
9
|
// ═════════════════════════════════════════════════════════════
|
|
8
10
|
// Formal assume/guarantee properties translated 1:1 from the
|
|
9
11
|
// CriSys AADL AGREE annexes (GPCA_SW.aadl composite contract;
|
|
@@ -13,161 +15,161 @@ package memo_examples_gpca_pump_gpca_formal_behavior {
|
|
|
13
15
|
// guarantees zero flow.
|
|
14
16
|
// ═════════════════════════════════════════════════════════════
|
|
15
17
|
part gpcaSwContract : Contract {
|
|
16
|
-
|
|
18
|
+
@MemoIdentity { :>> providedId = "CTR-000"; }
|
|
17
19
|
attribute :>> name = "GpcaSwCompositeContract";
|
|
18
20
|
attribute :>> contractScope = "GPCA_SW (composite, verified compositionally over the 8 subcomponents)";
|
|
19
|
-
|
|
21
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
|
|
20
22
|
}
|
|
21
23
|
part topLevelContract : Contract {
|
|
22
|
-
|
|
24
|
+
@MemoIdentity { :>> providedId = "CTR-001"; }
|
|
23
25
|
attribute :>> name = "TopLevelModeContract";
|
|
24
26
|
attribute :>> contractScope = "Top_Level_Mode";
|
|
25
|
-
|
|
27
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Top_Level_Mode.aadl AGREE annex"; }
|
|
26
28
|
}
|
|
27
29
|
part infusionManagerContract : Contract {
|
|
28
|
-
|
|
30
|
+
@MemoIdentity { :>> providedId = "CTR-002"; }
|
|
29
31
|
attribute :>> name = "InfusionManagerContract";
|
|
30
32
|
attribute :>> contractScope = "Infusion_Manager";
|
|
31
|
-
|
|
33
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Infusion_Manager.aadl AGREE annex"; }
|
|
32
34
|
}
|
|
33
35
|
part alarmContract : Contract {
|
|
34
|
-
|
|
36
|
+
@MemoIdentity { :>> providedId = "CTR-003"; }
|
|
35
37
|
attribute :>> name = "AlarmContract";
|
|
36
38
|
attribute :>> contractScope = "Alarm";
|
|
37
|
-
|
|
39
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, Alarm.aadl AGREE annex"; }
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
// ── Assumptions (GPCA_SW.aadl) ──────────────────────────────
|
|
41
43
|
part assumeVtbiHighPositive : BehaviorProperty {
|
|
42
44
|
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
43
|
-
|
|
45
|
+
@MemoIdentity { :>> providedId = "AP-002"; }
|
|
44
46
|
attribute :>> name = "VtbiHighPositive";
|
|
45
47
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
46
48
|
attribute :>> formalExpression = "assume DB_IN.VTBI_High > 0";
|
|
47
|
-
|
|
49
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
|
|
48
50
|
}
|
|
49
51
|
part assumeEmptyReservoirPositive : BehaviorProperty {
|
|
50
52
|
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
51
|
-
|
|
53
|
+
@MemoIdentity { :>> providedId = "AP-003"; }
|
|
52
54
|
attribute :>> name = "EmptyReservoirConstPositive";
|
|
53
55
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
54
56
|
attribute :>> formalExpression = "assume CONST_IN.Empty_Reservoir > 0";
|
|
55
|
-
|
|
57
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
|
|
56
58
|
}
|
|
57
59
|
part assumeValidPrescriptionSaved : BehaviorProperty {
|
|
58
60
|
attribute :>> propertyKind = BehaviorPropertyKind::assumption;
|
|
59
|
-
|
|
61
|
+
@MemoIdentity { :>> providedId = "AP-001"; }
|
|
60
62
|
attribute :>> name = "ValidPrescriptionSavedBeforeTherapy";
|
|
61
63
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
62
64
|
attribute :>> formalExpression = "assume a saved prescription is available before infusion initiation";
|
|
63
|
-
|
|
65
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.1 (REQ 7)"; }
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
// ── Guarantees (GPCA_SW.aadl AGREE annex, 1:1) ──────────────
|
|
67
69
|
part guaranteeExclusiveMode : BehaviorProperty {
|
|
68
70
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
69
|
-
|
|
71
|
+
@MemoIdentity { :>> providedId = "GP-001"; }
|
|
70
72
|
attribute :>> name = "ModeRange";
|
|
71
73
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
72
74
|
attribute :>> formalExpression = "guarantee mode_range: GPCA_SW_OUT.Current_System_Mode in {0, 1, 2, 3, 4, 6, 7, 8} (source enumeration omits 5)";
|
|
73
|
-
|
|
75
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 1)"; }
|
|
74
76
|
}
|
|
75
77
|
part guaranteeOffMode : BehaviorProperty {
|
|
76
78
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
77
|
-
|
|
79
|
+
@MemoIdentity { :>> providedId = "GP-004"; }
|
|
78
80
|
attribute :>> name = "NotStartImpliesModeZero";
|
|
79
81
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
80
82
|
attribute :>> formalExpression = "guarantee not(OP_CMD_IN.System_Start) => GPCA_SW_OUT.Current_System_Mode = 0";
|
|
81
|
-
|
|
83
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
|
|
82
84
|
}
|
|
83
85
|
part guaranteeInitialStart : BehaviorProperty {
|
|
84
86
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
85
|
-
|
|
87
|
+
@MemoIdentity { :>> providedId = "GP-005"; }
|
|
86
88
|
attribute :>> name = "InitialSystemStartImpliesModeOne";
|
|
87
89
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
88
90
|
attribute :>> formalExpression = "guarantee sys_initial and OP_CMD_IN.System_Start => GPCA_SW_OUT.Current_System_Mode = 1";
|
|
89
|
-
|
|
91
|
+
@MemoIdentity { :>> 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)"; }
|
|
90
92
|
}
|
|
91
93
|
part guaranteeOffToOn : BehaviorProperty {
|
|
92
94
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
93
|
-
|
|
95
|
+
@MemoIdentity { :>> providedId = "GP-006"; }
|
|
94
96
|
attribute :>> name = "OffToOnImpliesModeOne";
|
|
95
97
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
96
98
|
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";
|
|
97
|
-
|
|
99
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 4)"; }
|
|
98
100
|
}
|
|
99
101
|
part guaranteeEmptyReservoirNoFlow : BehaviorProperty {
|
|
100
102
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
101
|
-
|
|
103
|
+
@MemoIdentity { :>> providedId = "GP-007"; }
|
|
102
104
|
attribute :>> name = "EmptyReservoirImpliesNoFlow";
|
|
103
105
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
104
106
|
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";
|
|
105
|
-
|
|
107
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 59 'Empty Reservoir')"; }
|
|
106
108
|
}
|
|
107
109
|
part guaranteeVtbiKvo : BehaviorProperty {
|
|
108
110
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
109
|
-
|
|
111
|
+
@MemoIdentity { :>> providedId = "GP-008"; }
|
|
110
112
|
attribute :>> name = "OverVtbiImpliesFlowAtMostKvo";
|
|
111
113
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
112
114
|
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";
|
|
113
|
-
|
|
115
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (over-infusion => keep-vein-open, not zero)"; }
|
|
114
116
|
}
|
|
115
117
|
part guaranteeAirInLineKvo : BehaviorProperty {
|
|
116
118
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
117
|
-
|
|
119
|
+
@MemoIdentity { :>> providedId = "GP-009"; }
|
|
118
120
|
attribute :>> name = "AirInLineImpliesFlowAtMostKvo";
|
|
119
121
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
120
122
|
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";
|
|
121
|
-
|
|
123
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex (REQ 21 'Air embolism')"; }
|
|
122
124
|
}
|
|
123
125
|
part guaranteeOcclusionKvo : BehaviorProperty {
|
|
124
126
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
125
|
-
|
|
127
|
+
@MemoIdentity { :>> providedId = "GP-010"; }
|
|
126
128
|
attribute :>> name = "OcclusionImpliesFlowAtMostKvo";
|
|
127
129
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
128
130
|
attribute :>> formalExpression = "guarantee (OP_CMD_IN.System_Start and SENSOR_IN.Occlusion) => GPCA_SW_OUT.Commanded_Flow_Rate <= GPCA_SW_OUT.Flow_Rate_KVO";
|
|
129
|
-
|
|
131
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
|
|
130
132
|
}
|
|
131
133
|
part guaranteeDoorOpenKvo : BehaviorProperty {
|
|
132
134
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
133
|
-
|
|
135
|
+
@MemoIdentity { :>> providedId = "GP-011"; }
|
|
134
136
|
attribute :>> name = "DoorOpenImpliesFlowAtMostKvo";
|
|
135
137
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
136
138
|
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";
|
|
137
|
-
|
|
139
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl AGREE annex"; }
|
|
138
140
|
}
|
|
139
141
|
part guaranteeAlarmStopsSameStep : BehaviorProperty {
|
|
140
142
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
141
|
-
|
|
143
|
+
@MemoIdentity { :>> providedId = "GP-003"; }
|
|
142
144
|
attribute :>> name = "SameStepAlarmKvoGuarantee";
|
|
143
145
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
144
146
|
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)";
|
|
145
|
-
|
|
147
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) with the flow <= KVO guarantees above"; }
|
|
146
148
|
}
|
|
147
149
|
part guaranteeLockoutPreventsBolus : BehaviorProperty {
|
|
148
150
|
attribute :>> propertyKind = BehaviorPropertyKind::guarantee;
|
|
149
|
-
|
|
151
|
+
@MemoIdentity { :>> providedId = "GP-002"; }
|
|
150
152
|
attribute :>> name = "LockoutGuarantee";
|
|
151
153
|
attribute :>> languageKind = PropertyLanguageKind::agreeLike;
|
|
152
154
|
attribute :>> formalExpression = "guarantee a BolusRequest_prog inside the LockOutPeriod_pbolus_prog window is ignored and no PATIENT BOLUS is initiated";
|
|
153
|
-
|
|
155
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.1 (REQ 25.3, REQ 26)"; }
|
|
154
156
|
}
|
|
155
157
|
|
|
156
158
|
// ── Temporal properties over the mode machine ───────────────
|
|
157
159
|
part temporalNoInvalidTransition : BehaviorProperty {
|
|
158
|
-
|
|
160
|
+
@MemoIdentity { :>> providedId = "BP-010"; }
|
|
159
161
|
attribute :>> name = "NoInvalidTransition";
|
|
160
162
|
attribute :>> propertyKind = BehaviorPropertyKind::temporalProperty;
|
|
161
163
|
attribute :>> languageKind = PropertyLanguageKind::ltlLike;
|
|
162
164
|
attribute :>> formalExpression = "G(mode transitions follow only the edges of the Fig 4.1 hierarchy as constrained by REQ 4-5, 12-13, 19-23, 28-39, 46-47)";
|
|
163
|
-
|
|
165
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1"; }
|
|
164
166
|
}
|
|
165
167
|
part temporalPauseOnCriticalAlarm : BehaviorProperty {
|
|
166
|
-
|
|
168
|
+
@MemoIdentity { :>> providedId = "BP-011"; }
|
|
167
169
|
attribute :>> name = "PauseAtKvoOnInhibitingNotification";
|
|
168
170
|
attribute :>> propertyKind = BehaviorPropertyKind::safetyProperty;
|
|
169
171
|
attribute :>> languageKind = PropertyLanguageKind::ltlLike;
|
|
170
172
|
attribute :>> formalExpression = "G(infusion_inhibiting_notification -> X (mode = PAUSED and Commanded_Flow_Rate <= Flow_Rate_KVO))";
|
|
171
|
-
|
|
173
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 19-23) and §4.1.10.1 (REQ 43)"; }
|
|
172
174
|
}
|
|
173
175
|
}
|