@memoarchitect/ontology 0.8.22 → 0.8.24
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/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 +2 -2
- 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 +1 -1
- package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
- package/examples/gpca-pump/memo.package.yaml +3 -0
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +5 -3
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +1 -2
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +52 -82
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +6 -19
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +0 -3
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +1 -4
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +2 -5
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +3 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -6
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +1 -4
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +1 -4
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +1 -4
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +2 -5
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +1 -4
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +1 -3
- package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +1 -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 +1 -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/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
- package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
- package/examples/reusable-instrument/memo.package.yaml +3 -0
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +15 -24
- 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/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/software_only_medical_device.sysml +1 -1
- 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/surgical_closure_workflow.sysml +36 -49
- 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/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/viewpoints/unassigned/views/action_flow_view.sysml +2 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +1 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +1 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +1 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +14 -15
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +1 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +1 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +1 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +1 -2
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +1 -2
- package/examples/temperature-alarm/memo.package.yaml +3 -0
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +4 -8
- 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/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +1 -2
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/container/src/container_extension.sysml +2 -2
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/ros/memo.package.yaml +1 -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 +1 -1
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/functional/behavior/memo_behavior.sysml +4 -4
- package/src/architecture/functional/functions/memo_functions.sysml +6 -6
- package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +2 -2
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +7 -7
- package/src/architecture/implementation/ui/memo_ui.sysml +8 -8
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +1 -1
- 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 +2 -3
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +18 -100
- package/src/architecture/operational/structure/memo_operational.sysml +42 -13
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +0 -1
- package/src/architecture/operational/workflows/memo_workflows.sysml +20 -22
- package/src/architecture/realization/deployment/memo_deployment.sysml +10 -10
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +2 -2
- 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 +1 -1
- package/src/core/common/memo_common.sysml +9 -5
- package/src/core/relationships/memo_relationships.sysml +8 -8
- package/src/methodology/workflow/memo_workflow.sysml +5 -5
- package/src/rules/closure/closure_rules.sysml +20 -20
- package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
- package/src/rules/ontology/ontology_invariants.sysml +40 -40
- package/src/rules/quantitative/quantitative_rules.sysml +2 -2
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -29
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +1 -2
- package/src/viewpoints/context/context_viewpoint.sysml +1 -2
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +1 -2
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -4
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +46 -4
- package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +1 -2
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +1 -2
- package/src/viewpoints/logical/logical_viewpoint.sysml +1 -2
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +1 -2
- package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +2 -3
- package/src/viewpoints/physical/physical_viewpoint.sysml +1 -2
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +1 -2
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +1 -2
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +1 -2
- package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +1 -2
- package/src/viewpoints/software/software_viewpoint.sysml +1 -2
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +1 -2
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +1 -2
- package/src/viewpoints/usability/usability_viewpoint.sysml +1 -2
- package/src/viewpoints/verification/verification_viewpoint.sysml +1 -2
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +1 -2
- package/templates/connected-device/memo.package.yaml +2 -0
- package/templates/default/memo.package.yaml +2 -0
- package/templates/infusion-pump/memo.package.yaml +2 -0
- package/templates/monitoring-device/memo.package.yaml +2 -0
- package/templates/samd/memo.package.yaml +2 -0
package/README.md
CHANGED
|
@@ -23,7 +23,7 @@ pin an exact release; the package has no repository or runtime dependency on Mem
|
|
|
23
23
|
Tools or Memo Architect.
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
pnpm add @memoarchitect/ontology@0.8.
|
|
26
|
+
pnpm add @memoarchitect/ontology@0.8.24
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
> **Pre-1.0 notice:** ontology names, relationships, and package layout may
|
|
@@ -2,5 +2,5 @@ package memo_examples_connected_patient_monitor_viewpoints_unassigned_views_conn
|
|
|
2
2
|
private import memo_examples_connected_patient_monitor::*;
|
|
3
3
|
private import memo_viewpoints_definitions::*;
|
|
4
4
|
private import memo_core_enumerations::*;
|
|
5
|
-
view connectedPatientMonitorOverview : MemoDiagramView { expose memo_examples_connected_patient_monitor::*; attribute depth = 2; attribute :>>
|
|
5
|
+
view connectedPatientMonitorOverview : MemoDiagramView { expose memo_examples_connected_patient_monitor::*; attribute depth = 2; attribute :>> viewKind = DiagramViewKind::interconnection; attribute :>> diagramType = "ibd"; }
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Focused example: embedded programmable device — the three software views
|
|
2
2
|
// (module / runtime / deployment) on a minimal infusion pump.
|
|
3
|
-
// SoftwareElement buildsInto
|
|
3
|
+
// SoftwareElement buildsInto SoftwareDeploymentUnit deploysTo ProcessingNode;
|
|
4
4
|
// SoftwareComponent hostedBy ProcessingNode with scheduling properties.
|
|
5
5
|
package memo_examples_embedded_infusion_pump {
|
|
6
6
|
private import ScalarValues::*;
|
|
@@ -43,7 +43,7 @@ package memo_examples_embedded_infusion_pump {
|
|
|
43
43
|
#refinement dependency rtControlLoop to swInfusionControl;
|
|
44
44
|
|
|
45
45
|
// Deployment view.
|
|
46
|
-
part duControlImage :
|
|
46
|
+
part duControlImage : SoftwareDeploymentUnit {
|
|
47
47
|
attribute :>> id = "EIP-DU-001"; attribute :>> name = "ControlFirmwareImage";
|
|
48
48
|
attribute :>> unitKind = "signed firmware image";
|
|
49
49
|
attribute :>> version = "3.1.0";
|
|
@@ -2,5 +2,5 @@ package memo_examples_embedded_infusion_pump_viewpoints_unassigned_views_embedde
|
|
|
2
2
|
private import memo_examples_embedded_infusion_pump::*;
|
|
3
3
|
private import memo_viewpoints_definitions::*;
|
|
4
4
|
private import memo_core_enumerations::*;
|
|
5
|
-
view embeddedInfusionPumpOverview : MemoDiagramView { expose memo_examples_embedded_infusion_pump::*; attribute depth = 2; attribute :>>
|
|
5
|
+
view embeddedInfusionPumpOverview : MemoDiagramView { expose memo_examples_embedded_infusion_pump::*; attribute depth = 2; attribute :>> viewKind = DiagramViewKind::general; attribute :>> diagramType = "bdd"; }
|
|
6
6
|
}
|
package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml
CHANGED
|
@@ -15,7 +15,7 @@ package memo_examples_functional_logical_physical {
|
|
|
15
15
|
private import memo_architecture_implementation_hardware_structure::*;
|
|
16
16
|
|
|
17
17
|
// Operational world: what the clinician does.
|
|
18
|
-
action actOcclusionResponse :
|
|
18
|
+
action actOcclusionResponse : OperativeAction {
|
|
19
19
|
attribute :>> id = "FLP-ACT-001"; attribute :>> name = "RespondToLineOcclusion";
|
|
20
20
|
attribute :>> criticality = CriticalityKind::high;
|
|
21
21
|
}
|
|
@@ -2,5 +2,5 @@ package memo_examples_functional_logical_physical_viewpoints_unassigned_views_fu
|
|
|
2
2
|
private import memo_examples_functional_logical_physical::*;
|
|
3
3
|
private import memo_viewpoints_definitions::*;
|
|
4
4
|
private import memo_core_enumerations::*;
|
|
5
|
-
view functionalLogicalPhysicalOverview : MemoDiagramView { expose memo_examples_functional_logical_physical::*; attribute depth = 2; attribute :>>
|
|
5
|
+
view functionalLogicalPhysicalOverview : MemoDiagramView { expose memo_examples_functional_logical_physical::*; attribute depth = 2; attribute :>> viewKind = DiagramViewKind::general; attribute :>> diagramType = "bdd"; }
|
|
6
6
|
}
|
|
@@ -3,7 +3,9 @@ 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::*;
|
|
@@ -12,7 +14,6 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
12
14
|
part gpcaIntendedUse : IntendedUse {
|
|
13
15
|
attribute :>> id = "IU-001";
|
|
14
16
|
attribute :>> name = "GPCA_IntendedUse";
|
|
15
|
-
attribute :>> title = "GPCA Pump Intended Use";
|
|
16
17
|
attribute :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics.";
|
|
17
18
|
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
19
|
attribute :>> indication = "Management of acute post-operative or chronic pain requiring titrated intravenous opioid analgesia.";
|
|
@@ -20,12 +21,14 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
20
21
|
attribute :>> patientPopulation = "Adult in-patients under clinical supervision.";
|
|
21
22
|
attribute :>> clinicalBenefit = "Timely, patient-titrated analgesia with lower total opioid consumption than fixed-schedule dosing.";
|
|
22
23
|
attribute :>> regulatoryClassification = "FDA Class II infusion pump (21 CFR 880.5725); IEC 62304 software safety class C.";
|
|
24
|
+
attribute :>> missionKind = "therapeutic device mission";
|
|
25
|
+
attribute :>> successCriteria = "Drug delivered per prescription; no overdose or undetected under-infusion; every hazardous condition annunciated within its alarm latency budget.";
|
|
26
|
+
attribute :>> operationalContext = "Acute-care hospital ward, fixed (non-ambulatory) location (UC-001).";
|
|
23
27
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1-2.3 (GPCA overview, system functions, user characteristics)";
|
|
24
28
|
}
|
|
25
29
|
part bolusByProxyMisuse : ReasonablyForeseeableMisuse {
|
|
26
30
|
attribute :>> id = "RFM-001";
|
|
27
31
|
attribute :>> name = "BolusRequestBySomeoneOtherThanPatient";
|
|
28
|
-
attribute :>> title = "Bolus by proxy";
|
|
29
32
|
attribute :>> shortDescription = "A caregiver or visitor presses the patient bolus control.";
|
|
30
33
|
attribute :>> description = "A person other than the patient activates the bolus request control, bypassing the intended patient self-limiting behavior.";
|
|
31
34
|
attribute :>> misuseContext = "Patient-controlled analgesia in a supervised hospital setting.";
|
|
@@ -42,7 +45,6 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
42
45
|
attribute :>> environment = "indoor clinical environment, mains power with battery backup, pole or bed-rail mounted";
|
|
43
46
|
attribute :>> jurisdiction = "generic (FDA/EU reference model)";
|
|
44
47
|
attribute :>> connectedUse = true;
|
|
45
|
-
attribute :>> intendedUseReference = "IU-001";
|
|
46
48
|
}
|
|
47
49
|
// UC-002 (intra-hospital transport) removed: CriSys §2.4 states the
|
|
48
50
|
// system is used in a fixed location and is not ambulatory.
|
|
@@ -81,10 +81,9 @@ package memo_examples_gpca_pump_gpca_cybersecurity {
|
|
|
81
81
|
attribute :>> cweReference = "CWE-798";
|
|
82
82
|
}
|
|
83
83
|
|
|
84
|
-
action tamperedConfigurationScenario :
|
|
84
|
+
action tamperedConfigurationScenario : OperativeScenario {
|
|
85
85
|
attribute :>> id = "SCN-001";
|
|
86
86
|
attribute :>> name = "TamperedTherapyConfigurationScenario";
|
|
87
|
-
attribute :>> scenarioKind = ScenarioKind::threat;
|
|
88
87
|
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
88
|
attribute :>> actorDescription = "unauthorized actor with local access to the maintenance port";
|
|
90
89
|
attribute :>> defaultCategory = ThreatCategoryKind::tampering;
|
|
@@ -78,7 +78,7 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
// ── Operational activities (therapy lifecycle) ──────────────
|
|
81
|
-
action oaPrescribe :
|
|
81
|
+
action oaPrescribe : OperativeAction {
|
|
82
82
|
attribute :>> id = "OA-001";
|
|
83
83
|
attribute :>> name = "PrescribeTherapy";
|
|
84
84
|
attribute :>> trigger = "patient requires titrated analgesia";
|
|
@@ -86,7 +86,7 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
86
86
|
attribute :>> postCondition = "prescription with basal rate, bolus volume, lockout, and max dose limits exists";
|
|
87
87
|
attribute :>> criticality = CriticalityKind::high;
|
|
88
88
|
}
|
|
89
|
-
action oaLoadReservoir :
|
|
89
|
+
action oaLoadReservoir : OperativeAction {
|
|
90
90
|
attribute :>> id = "OA-002";
|
|
91
91
|
attribute :>> name = "LoadDrugReservoir";
|
|
92
92
|
attribute :>> trigger = "prescription issued or reservoir empty";
|
|
@@ -94,7 +94,7 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
94
94
|
attribute :>> postCondition = "reservoir mounted, door closed and latched";
|
|
95
95
|
attribute :>> criticality = CriticalityKind::high;
|
|
96
96
|
}
|
|
97
|
-
action oaProgram :
|
|
97
|
+
action oaProgram : OperativeAction {
|
|
98
98
|
attribute :>> id = "OA-003";
|
|
99
99
|
attribute :>> name = "ProgramPrescription";
|
|
100
100
|
attribute :>> trigger = "reservoir loaded";
|
|
@@ -102,7 +102,7 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
102
102
|
attribute :>> postCondition = "prescription entered, checked against pharmacy-database safe values (I 9-I 11), and confirmed by second review";
|
|
103
103
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
104
104
|
}
|
|
105
|
-
action oaStartTherapy :
|
|
105
|
+
action oaStartTherapy : OperativeAction {
|
|
106
106
|
attribute :>> id = "OA-004";
|
|
107
107
|
attribute :>> name = "StartInfusion";
|
|
108
108
|
attribute :>> trigger = "prescription confirmed";
|
|
@@ -110,7 +110,7 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
110
110
|
attribute :>> postCondition = "basal infusion running";
|
|
111
111
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
112
112
|
}
|
|
113
|
-
action oaRequestBolus :
|
|
113
|
+
action oaRequestBolus : OperativeAction {
|
|
114
114
|
attribute :>> id = "OA-005";
|
|
115
115
|
attribute :>> name = "RequestPatientBolus";
|
|
116
116
|
attribute :>> trigger = "patient presses bolus request button";
|
|
@@ -118,7 +118,7 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
118
118
|
attribute :>> postCondition = "bolus delivered, or request ignored when lockout or max-dose limits apply";
|
|
119
119
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
120
120
|
}
|
|
121
|
-
action oaRespondAlarm :
|
|
121
|
+
action oaRespondAlarm : OperativeAction {
|
|
122
122
|
attribute :>> id = "OA-006";
|
|
123
123
|
attribute :>> name = "RespondToAlarm";
|
|
124
124
|
attribute :>> trigger = "audible or visual alarm annunciated";
|
|
@@ -126,7 +126,7 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
126
126
|
attribute :>> postCondition = "cause resolved and therapy resumed, or therapy stopped";
|
|
127
127
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
128
128
|
}
|
|
129
|
-
action oaReviewLog :
|
|
129
|
+
action oaReviewLog : OperativeAction {
|
|
130
130
|
attribute :>> id = "OA-007";
|
|
131
131
|
attribute :>> name = "ReviewEventLog";
|
|
132
132
|
attribute :>> trigger = "shift change, incident review, or dose audit";
|
|
@@ -134,7 +134,7 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
134
134
|
attribute :>> postCondition = "delivered doses and alarm history reviewed";
|
|
135
135
|
attribute :>> criticality = CriticalityKind::medium;
|
|
136
136
|
}
|
|
137
|
-
action oaMaintain :
|
|
137
|
+
action oaMaintain : OperativeAction {
|
|
138
138
|
attribute :>> id = "OA-008";
|
|
139
139
|
attribute :>> name = "MaintainDevice";
|
|
140
140
|
attribute :>> trigger = "scheduled maintenance or fault";
|
|
@@ -169,8 +169,6 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
169
169
|
attribute :>> entryCondition = "A valid prescription and prepared reservoir are available.";
|
|
170
170
|
attribute :>> completionCondition = "Therapy is started with confirmed prescription limits.";
|
|
171
171
|
|
|
172
|
-
action wsProgram : WorkflowStep { ref :>> performedActivity = oaProgram; }
|
|
173
|
-
action wsStart : WorkflowStep { ref :>> performedActivity = oaStartTherapy; }
|
|
174
172
|
}
|
|
175
173
|
action wfManageActiveTherapy : OperationalWorkflow {
|
|
176
174
|
attribute :>> name = "ManageActiveTherapy";
|
|
@@ -178,16 +176,15 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
178
176
|
attribute :>> entryCondition = "Basal therapy is active.";
|
|
179
177
|
attribute :>> completionCondition = "A bolus is handled or active therapy continues safely.";
|
|
180
178
|
|
|
181
|
-
action wsRequestBolus : WorkflowStep { ref :>> performedActivity = oaRequestBolus; }
|
|
182
179
|
// Refinement targets a nested step by its local name — the shorthand's
|
|
183
180
|
// `to` end does not accept a qualified path — so this is written
|
|
184
181
|
// inside wsRequestBolus's own owning scope rather than at package
|
|
185
182
|
// level.
|
|
186
|
-
#refinement dependency fcsBolusSense to
|
|
187
|
-
#refinement dependency fcsBolusValidate to
|
|
188
|
-
#refinement dependency fcsBolusCommand to
|
|
189
|
-
#refinement dependency fcsBolusActuate to
|
|
190
|
-
#refinement dependency fcsBolusLog to
|
|
183
|
+
#refinement dependency fcsBolusSense to oaRequestBolus;
|
|
184
|
+
#refinement dependency fcsBolusValidate to oaRequestBolus;
|
|
185
|
+
#refinement dependency fcsBolusCommand to oaRequestBolus;
|
|
186
|
+
#refinement dependency fcsBolusActuate to oaRequestBolus;
|
|
187
|
+
#refinement dependency fcsBolusLog to oaRequestBolus;
|
|
191
188
|
}
|
|
192
189
|
action wfRespondToTherapyAlarm : OperationalWorkflow {
|
|
193
190
|
attribute :>> name = "RespondToTherapyAlarm";
|
|
@@ -195,15 +192,11 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
195
192
|
attribute :>> entryCondition = "A therapy alarm or degraded condition is detected.";
|
|
196
193
|
attribute :>> completionCondition = "The pump is safe and the clinician has resolved or escalated the condition.";
|
|
197
194
|
|
|
198
|
-
|
|
199
|
-
#refinement dependency
|
|
200
|
-
#refinement dependency
|
|
201
|
-
#refinement dependency
|
|
202
|
-
#refinement dependency fcsAlarmAnnunciate to wsRespondAlarm;
|
|
195
|
+
#refinement dependency fcsAlarmSense to oaRespondAlarm;
|
|
196
|
+
#refinement dependency fcsAlarmEvaluate to oaRespondAlarm;
|
|
197
|
+
#refinement dependency fcsAlarmStopInfusion to oaRespondAlarm;
|
|
198
|
+
#refinement dependency fcsAlarmAnnunciate to oaRespondAlarm;
|
|
203
199
|
}
|
|
204
|
-
connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfPrepareAndStartTherapy to supported ::> ucDeliverPcaTherapy; }
|
|
205
|
-
connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfManageActiveTherapy to supported ::> ucDeliverPcaTherapy; }
|
|
206
|
-
connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfRespondToTherapyAlarm to supported ::> ucDeliverPcaTherapy; }
|
|
207
200
|
|
|
208
201
|
|
|
209
202
|
// ── Operational capabilities ────────────────────────────────
|
|
@@ -223,131 +216,90 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
223
216
|
}
|
|
224
217
|
|
|
225
218
|
// ── Operational scenarios ───────────────────────────────────
|
|
226
|
-
action osNominalTherapy :
|
|
219
|
+
action osNominalTherapy : OperativeScenario {
|
|
227
220
|
attribute :>> id = "OS-001";
|
|
228
221
|
attribute :>> name = "NominalTherapySession";
|
|
229
|
-
attribute :>> scenarioKind = ScenarioKind::operative;
|
|
230
|
-
attribute :>> variantKind = ScenarioVariantKind::nominal;
|
|
231
|
-
attribute :>> operationalCondition = OperationalConditionKind::normal;
|
|
232
222
|
attribute :>> preCondition = "prescription issued, reservoir loaded";
|
|
233
223
|
attribute :>> postCondition = "therapy completed and stopped by clinician";
|
|
234
224
|
attribute :>> pathSummary = "Prescribe > load reservoir > program and confirm > start basal > patient boluses within limits > stop therapy > review log.";
|
|
235
225
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.2 Main GPCA System Functions";
|
|
236
|
-
ref :>> parentWorkflow = wfManageActiveTherapy;
|
|
237
|
-
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
238
|
-
ref :>> activities = oaCompleteNominalTherapy;
|
|
239
226
|
|
|
240
|
-
action oaCompleteNominalTherapy :
|
|
227
|
+
action oaCompleteNominalTherapy : OperativeAction {
|
|
241
228
|
attribute :>> name = "CompleteNominalTherapy";
|
|
242
229
|
action deliverWithinLimits; action recordTherapyEvent;
|
|
243
230
|
first start then deliverWithinLimits; first deliverWithinLimits then recordTherapyEvent; first recordTherapyEvent then done;
|
|
244
231
|
}
|
|
245
232
|
}
|
|
246
|
-
action osLockoutBolus :
|
|
233
|
+
action osLockoutBolus : OperativeScenario {
|
|
234
|
+
attribute :>> scenarioKind = ScenarioKind::alternate;
|
|
247
235
|
attribute :>> id = "OS-002";
|
|
248
236
|
attribute :>> name = "BolusRequestDuringLockout";
|
|
249
|
-
attribute :>> scenarioKind = ScenarioKind::operative;
|
|
250
|
-
attribute :>> variantKind = ScenarioVariantKind::alternate;
|
|
251
|
-
attribute :>> variationPoint = "patient bolus request during the nominal therapy lockout interval";
|
|
252
|
-
attribute :>> operationalCondition = OperationalConditionKind::foreseeableMisuse;
|
|
253
237
|
attribute :>> preCondition = "basal infusion active; lockout interval running";
|
|
254
238
|
attribute :>> postCondition = "request ignored, logged; basal continues unchanged";
|
|
255
239
|
attribute :>> pathSummary = "Patient presses bolus button during lockout > infusion manager rejects request > event logged > no additional drug delivered.";
|
|
256
240
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (lockout requirements)";
|
|
257
|
-
ref :>> parentWorkflow = wfManageActiveTherapy;
|
|
258
|
-
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
259
|
-
ref :>> baseScenario = osNominalTherapy;
|
|
260
|
-
ref :>> activities = oaRejectBolusDuringLockout;
|
|
261
241
|
|
|
262
|
-
action oaRejectBolusDuringLockout :
|
|
242
|
+
action oaRejectBolusDuringLockout : OperativeAction {
|
|
263
243
|
attribute :>> name = "RejectBolusDuringLockout";
|
|
264
244
|
action checkLockout; action rejectAndLog;
|
|
265
245
|
first start then checkLockout; first checkLockout then rejectAndLog; first rejectAndLog then done;
|
|
266
246
|
}
|
|
267
247
|
}
|
|
268
|
-
action osOcclusionAlarm :
|
|
248
|
+
action osOcclusionAlarm : OperativeScenario {
|
|
249
|
+
attribute :>> scenarioKind = ScenarioKind::alternate;
|
|
269
250
|
attribute :>> id = "OS-003";
|
|
270
251
|
attribute :>> name = "OcclusionDetectedDuringInfusion";
|
|
271
|
-
attribute :>> scenarioKind = ScenarioKind::operative;
|
|
272
|
-
attribute :>> variantKind = ScenarioVariantKind::exception;
|
|
273
|
-
attribute :>> variationPoint = "occlusion detected while nominal infusion is active";
|
|
274
|
-
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
275
252
|
attribute :>> preCondition = "therapy active; downstream line becomes blocked";
|
|
276
253
|
attribute :>> postCondition = "infusion paused, alarm annunciated, clinician clears occlusion and resumes";
|
|
277
254
|
attribute :>> pathSummary = "Occlusion sensor exceeds pressure threshold > alarm raised same step > infusion paused > audible and visual annunciation > clinician resolves and resumes.";
|
|
278
255
|
attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms and Alerts (occlusion)";
|
|
279
|
-
ref :>> parentWorkflow = wfRespondToTherapyAlarm;
|
|
280
|
-
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
281
|
-
ref :>> baseScenario = osNominalTherapy;
|
|
282
|
-
ref :>> activities = oaRespondToOcclusion;
|
|
283
256
|
|
|
284
|
-
action oaRespondToOcclusion :
|
|
257
|
+
action oaRespondToOcclusion : OperativeAction {
|
|
285
258
|
attribute :>> name = "RespondToOcclusion";
|
|
286
259
|
action pauseInfusion; action annunciateOcclusion; action resolveAndResume;
|
|
287
260
|
first start then pauseInfusion; first pauseInfusion then annunciateOcclusion; first annunciateOcclusion then resolveAndResume; first resolveAndResume then done;
|
|
288
261
|
}
|
|
289
262
|
}
|
|
290
|
-
action osAirInLine :
|
|
263
|
+
action osAirInLine : OperativeScenario {
|
|
264
|
+
attribute :>> scenarioKind = ScenarioKind::alternate;
|
|
291
265
|
attribute :>> id = "OS-004";
|
|
292
266
|
attribute :>> name = "AirInLineDetected";
|
|
293
|
-
attribute :>> scenarioKind = ScenarioKind::operative;
|
|
294
|
-
attribute :>> variantKind = ScenarioVariantKind::exception;
|
|
295
|
-
attribute :>> variationPoint = "air-in-line detected while nominal infusion is active";
|
|
296
|
-
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
297
267
|
attribute :>> preCondition = "therapy active; air bubble enters tubing";
|
|
298
268
|
attribute :>> postCondition = "infusion stopped before air reaches patient; alarm annunciated";
|
|
299
269
|
attribute :>> pathSummary = "Air-in-line sensor detects bubble above threshold > transition to PAUSED (KVO flow) > High-priority Air embolism notification > clinician re-primes line and restarts.";
|
|
300
270
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Air embolism)";
|
|
301
|
-
ref :>> parentWorkflow = wfRespondToTherapyAlarm;
|
|
302
|
-
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
303
|
-
ref :>> baseScenario = osNominalTherapy;
|
|
304
|
-
ref :>> activities = oaRespondToAirInLine;
|
|
305
271
|
|
|
306
|
-
action oaRespondToAirInLine :
|
|
272
|
+
action oaRespondToAirInLine : OperativeAction {
|
|
307
273
|
attribute :>> name = "RespondToAirInLine";
|
|
308
274
|
action stopOrKvo; action annunciateAir; action reprimeAndRestart;
|
|
309
275
|
first start then stopOrKvo; first stopOrKvo then annunciateAir; first annunciateAir then reprimeAndRestart; first reprimeAndRestart then done;
|
|
310
276
|
}
|
|
311
277
|
}
|
|
312
|
-
action osEmptyReservoir :
|
|
278
|
+
action osEmptyReservoir : OperativeScenario {
|
|
279
|
+
attribute :>> scenarioKind = ScenarioKind::alternate;
|
|
313
280
|
attribute :>> id = "OS-005";
|
|
314
281
|
attribute :>> name = "ReservoirEmptyDuringTherapy";
|
|
315
|
-
attribute :>> scenarioKind = ScenarioKind::operative;
|
|
316
|
-
attribute :>> variantKind = ScenarioVariantKind::exception;
|
|
317
|
-
attribute :>> variationPoint = "reservoir-empty threshold reached during nominal therapy";
|
|
318
|
-
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
319
282
|
attribute :>> preCondition = "therapy active; reservoir volume reaches empty threshold";
|
|
320
283
|
attribute :>> postCondition = "infusion stopped, alarm raised, reservoir replaced";
|
|
321
284
|
attribute :>> pathSummary = "Reservoir-empty condition detected > transition to PAUSED (KVO flow) > High-priority Empty Reservoir notification > clinician loads new reservoir > therapy resumed with saved prescription.";
|
|
322
285
|
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Empty Reservoir)";
|
|
323
|
-
ref :>> parentWorkflow = wfRespondToTherapyAlarm;
|
|
324
|
-
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
325
|
-
ref :>> baseScenario = osNominalTherapy;
|
|
326
|
-
ref :>> activities = oaReplaceEmptyReservoir;
|
|
327
286
|
|
|
328
|
-
action oaReplaceEmptyReservoir :
|
|
287
|
+
action oaReplaceEmptyReservoir : OperativeAction {
|
|
329
288
|
attribute :>> name = "ReplaceEmptyReservoir";
|
|
330
289
|
action stopAndAnnunciate; action replaceReservoir; action resumeTherapy;
|
|
331
290
|
first start then stopAndAnnunciate; first stopAndAnnunciate then replaceReservoir; first replaceReservoir then resumeTherapy; first resumeTherapy then done;
|
|
332
291
|
}
|
|
333
292
|
}
|
|
334
|
-
action osPowerLoss :
|
|
293
|
+
action osPowerLoss : OperativeScenario {
|
|
294
|
+
attribute :>> scenarioKind = ScenarioKind::alternate;
|
|
335
295
|
attribute :>> id = "OS-006";
|
|
336
296
|
attribute :>> name = "MainsPowerLossAndRecovery";
|
|
337
|
-
attribute :>> scenarioKind = ScenarioKind::operative;
|
|
338
|
-
attribute :>> variantKind = ScenarioVariantKind::recovery;
|
|
339
|
-
attribute :>> variationPoint = "mains supply lost during nominal therapy";
|
|
340
|
-
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
341
297
|
attribute :>> preCondition = "therapy active on mains power";
|
|
342
298
|
attribute :>> postCondition = "therapy continues on battery; prescription preserved across full power loss";
|
|
343
299
|
attribute :>> pathSummary = "Mains lost > battery takes over with notification > if battery depletes, pump stops safely > on power restore, saved prescription recovered and therapy resumed only after clinician confirmation.";
|
|
344
300
|
attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.3 Electrical Hazards (battery failure)";
|
|
345
|
-
ref :>> parentWorkflow = wfRespondToTherapyAlarm;
|
|
346
|
-
ref :>> parentUseCase = ucDeliverPcaTherapy;
|
|
347
|
-
ref :>> baseScenario = osNominalTherapy;
|
|
348
|
-
ref :>> activities = oaRecoverAfterPowerLoss;
|
|
349
301
|
|
|
350
|
-
action oaRecoverAfterPowerLoss :
|
|
302
|
+
action oaRecoverAfterPowerLoss : OperativeAction {
|
|
351
303
|
attribute :>> name = "RecoverAfterPowerLoss";
|
|
352
304
|
action switchToBattery; action restorePrescription; action confirmRestart;
|
|
353
305
|
first start then switchToBattery; first switchToBattery then restorePrescription; first restorePrescription then confirmRestart; first confirmRestart then done;
|
|
@@ -359,4 +311,22 @@ package memo_examples_gpca_pump_gpca_operational {
|
|
|
359
311
|
#refinement dependency osAirInLine to ucDeliverPcaTherapy;
|
|
360
312
|
#refinement dependency osEmptyReservoir to ucDeliverPcaTherapy;
|
|
361
313
|
#refinement dependency osPowerLoss to ucDeliverPcaTherapy;
|
|
314
|
+
|
|
315
|
+
// ── Operational trace relations ─────────────────────────────
|
|
316
|
+
connection : RealizesUseCase connect realizingWorkflow ::> wfPrepareAndStartTherapy to realizedUseCase ::> ucDeliverPcaTherapy;
|
|
317
|
+
connection : RealizesUseCase connect realizingWorkflow ::> wfManageActiveTherapy to realizedUseCase ::> ucDeliverPcaTherapy;
|
|
318
|
+
connection : RealizesUseCase connect realizingWorkflow ::> wfRespondToTherapyAlarm to realizedUseCase ::> ucDeliverPcaTherapy;
|
|
319
|
+
connection : EnablesUseCase connect enablingCapability ::> ocTitratedAnalgesia to enabledUseCase ::> ucDeliverPcaTherapy;
|
|
320
|
+
connection : EnablesUseCase connect enablingCapability ::> ocFailSafeTherapy to enabledUseCase ::> ucDeliverPcaTherapy;
|
|
321
|
+
connection : RequiresCapability connect requiringIntendedUse ::> gpcaIntendedUse to requiredCapability ::> ocTitratedAnalgesia;
|
|
322
|
+
connection : RequiresCapability connect requiringIntendedUse ::> gpcaIntendedUse to requiredCapability ::> ocFailSafeTherapy;
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
connection : HasScenario connect owningWorkflow ::> wfManageActiveTherapy to pathScenario ::> osNominalTherapy;
|
|
326
|
+
connection : HasScenario connect owningWorkflow ::> wfManageActiveTherapy to pathScenario ::> osLockoutBolus;
|
|
327
|
+
connection : HasScenario connect owningWorkflow ::> wfRespondToTherapyAlarm to pathScenario ::> osOcclusionAlarm;
|
|
328
|
+
connection : HasScenario connect owningWorkflow ::> wfRespondToTherapyAlarm to pathScenario ::> osAirInLine;
|
|
329
|
+
connection : HasScenario connect owningWorkflow ::> wfRespondToTherapyAlarm to pathScenario ::> osEmptyReservoir;
|
|
330
|
+
connection : HasScenario connect owningWorkflow ::> wfRespondToTherapyAlarm to pathScenario ::> osPowerLoss;
|
|
331
|
+
|
|
362
332
|
}
|
|
@@ -9,15 +9,9 @@ package memo_examples_gpca_pump_gpca_system {
|
|
|
9
9
|
private import memo_architecture_operational_use_cases::*;
|
|
10
10
|
private import memo_core_common::*;
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
attribute :>> title = "Safe Patient-Controlled Analgesia";
|
|
16
|
-
attribute :>> shortDescription = "Deliver prescribed analgesia with patient-controlled boluses, never exceeding safe dose limits.";
|
|
17
|
-
attribute :>> missionKind = "therapeutic device mission";
|
|
18
|
-
attribute :>> successCriteria = "Drug delivered per prescription; no overdose or undetected under-infusion; every hazardous condition annunciated within its alarm latency budget.";
|
|
19
|
-
attribute :>> operationalContext = "Acute-care hospital ward, fixed (non-ambulatory) location (UC-001).";
|
|
20
|
-
}
|
|
12
|
+
// The device's top-level goal is its IntendedUse (gpcaIntendedUse in
|
|
13
|
+
// gpca_context) — a MemoMission. The former separate gpcaMission was
|
|
14
|
+
// retired: "mission" duplicated the regulated intended-use statement.
|
|
21
15
|
|
|
22
16
|
// ── Functional chains ───────────────────────────────────────
|
|
23
17
|
part fcPatientBolus : FunctionalFlow {
|
|
@@ -105,24 +99,17 @@ package memo_examples_gpca_pump_gpca_system {
|
|
|
105
99
|
}
|
|
106
100
|
|
|
107
101
|
// ── System scenarios ────────────────────────────────────────
|
|
108
|
-
action ssBolusDuringBasal :
|
|
102
|
+
action ssBolusDuringBasal : OperativeScenario {
|
|
109
103
|
attribute :>> id = "SS-001";
|
|
110
104
|
attribute :>> name = "PatientBolusDuringBasal";
|
|
111
|
-
attribute :>> scenarioKind = ScenarioKind::functional;
|
|
112
|
-
attribute :>> variantKind = ScenarioVariantKind::nominal;
|
|
113
|
-
attribute :>> operationalCondition = OperationalConditionKind::normal;
|
|
114
105
|
attribute :>> preCondition = "BASAL mode active; no REQ 25 ignore condition holds";
|
|
115
106
|
attribute :>> postCondition = "PATIENT_BOLUS mode entered, bolus delivered, return to BASAL";
|
|
116
107
|
}
|
|
117
|
-
action ssAlarmPause :
|
|
108
|
+
action ssAlarmPause : OperativeScenario {
|
|
109
|
+
attribute :>> scenarioKind = ScenarioKind::alternate;
|
|
118
110
|
attribute :>> id = "SS-002";
|
|
119
111
|
attribute :>> name = "InhibitingNotificationPausesInfusion";
|
|
120
|
-
attribute :>> scenarioKind = ScenarioKind::functional;
|
|
121
|
-
attribute :>> variantKind = ScenarioVariantKind::exception;
|
|
122
|
-
attribute :>> variationPoint = "an infusion-inhibiting notification interrupts active therapy";
|
|
123
|
-
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
124
112
|
attribute :>> preCondition = "any ACTIVE therapy mode; infusion-inhibiting notification detected (REQ 59)";
|
|
125
113
|
attribute :>> postCondition = "PAUSED mode entered in same execution step at FlowRate_kvo_hd keep-vein-open flow; notification annunciated per REQ 59";
|
|
126
|
-
ref :>> baseScenario = ssBolusDuringBasal;
|
|
127
114
|
}
|
|
128
115
|
}
|
|
@@ -72,9 +72,6 @@ package memo_examples_gpca_pump_gpca_trace {
|
|
|
72
72
|
first oaLoadReservoir then oaProgram;
|
|
73
73
|
first oaProgram then oaStartTherapy;
|
|
74
74
|
first oaStartTherapy then oaRequestBolus;
|
|
75
|
-
connection : Supports { attribute :>> supportKind = SupportKind::capability; connect supporter ::> oaStartTherapy to supported ::> ocTitratedAnalgesia; }
|
|
76
|
-
connection : Supports { attribute :>> supportKind = SupportKind::capability; connect supporter ::> oaRequestBolus to supported ::> ocTitratedAnalgesia; }
|
|
77
|
-
connection : Supports { attribute :>> supportKind = SupportKind::capability; connect supporter ::> oaRespondAlarm to supported ::> ocFailSafeTherapy; }
|
|
78
75
|
connection : DerivesFrom connect sourceDriver ::> oaProgram to targetRequirement ::> reqDrugLibraryLimits;
|
|
79
76
|
connection : DerivesFrom connect sourceDriver ::> oaRequestBolus to targetRequirement ::> reqCs25;
|
|
80
77
|
connection : DerivesFrom connect sourceDriver ::> oaRespondAlarm to targetRequirement ::> reqCs59;
|
package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml
CHANGED
|
@@ -18,7 +18,6 @@ package memo_examples_gpca_pump_viewpoints_context_views_context_system_context_
|
|
|
18
18
|
attribute depth = 2;
|
|
19
19
|
attribute :>> id = "VIEW-CTX-101";
|
|
20
20
|
attribute :>> name = "GPCA_SystemContextView";
|
|
21
|
-
attribute :>> title = "GPCA System Context View";
|
|
22
21
|
attribute :>> shortDescription = "Actors, use contexts, and external entities at the GPCA system boundary.";
|
|
23
22
|
attribute :>> description = "Shows the CriSys Fig 2.1 boundary: patient, clinician, prescription, drug reservoir, needle, hospital pharmacy database, and hospital environment around the pump, with directional data flows, physical drug-path connections, and the intended use anchoring the boundary.";
|
|
24
23
|
attribute :>> outputKind = (ViewOutputKind::diagram);
|
|
@@ -28,7 +27,6 @@ package memo_examples_gpca_pump_viewpoints_context_views_context_system_context_
|
|
|
28
27
|
attribute :>> dataSourceDescription = "GPCA context layer: actors, use contexts, intended use, operational entities";
|
|
29
28
|
attribute :>> autoPopulate = true;
|
|
30
29
|
attribute :>> queryDescription = "Include actors, use contexts, intended use, and external operational entities.";
|
|
31
|
-
attribute :>> documentUsage = ("Architecture Description", "Usability Engineering File");
|
|
32
30
|
part :>> selectionQuery {
|
|
33
31
|
attribute :>> id = "QRY-CTX-101";
|
|
34
32
|
attribute :>> name = "GPCA_SystemContextQuery";
|
|
@@ -38,6 +36,6 @@ package memo_examples_gpca_pump_viewpoints_context_views_context_system_context_
|
|
|
38
36
|
attribute :>> selectionExpression = "product == 'GPCA'";
|
|
39
37
|
attribute :>> rationaleText = "Auto-populate the GPCA context view from the context layer.";
|
|
40
38
|
}
|
|
41
|
-
|
|
39
|
+
ref :>> viewpointDefinition = contextViewpoint;
|
|
42
40
|
}
|
|
43
41
|
}
|
|
@@ -19,7 +19,6 @@ package memo_examples_gpca_pump_viewpoints_cybersecurity_views_cybersecurity_cyb
|
|
|
19
19
|
attribute depth = 2;
|
|
20
20
|
attribute :>> id = "VIEW-CYB-001";
|
|
21
21
|
attribute :>> name = "GPCA_CybersecurityView";
|
|
22
|
-
attribute :>> title = "GPCA Cybersecurity View";
|
|
23
22
|
attribute :>> shortDescription = "Shows GPCA assets, trust boundaries, threats, vulnerabilities, and mitigations.";
|
|
24
23
|
attribute :>> description = "Product-specific cybersecurity view intended for secure product development and cross-reference into cybersecurity risk documentation.";
|
|
25
24
|
attribute :>> outputKind = (ViewOutputKind::diagram);
|
|
@@ -29,16 +28,15 @@ package memo_examples_gpca_pump_viewpoints_cybersecurity_views_cybersecurity_cyb
|
|
|
29
28
|
attribute :>> dataSourceDescription = "GPCA cyber assets, threat scenarios, and trace links";
|
|
30
29
|
attribute :>> autoPopulate = true;
|
|
31
30
|
attribute :>> queryDescription = "Include cyber assets, trust boundaries, threats, vulnerabilities, cyber hazards, cyber risks, mitigations, security requirements, and verification.";
|
|
32
|
-
attribute :>> documentUsage = ("Threat Model", "Cybersecurity Risk Assessment", "QMSR");
|
|
33
31
|
part :>> selectionQuery {
|
|
34
32
|
attribute :>> id = "QRY-CYB-001";
|
|
35
33
|
attribute :>> name = "GPCA_CybersecurityQuery";
|
|
36
|
-
attribute :>> includeElementKinds = ("CybersecurityAsset", "Threat", "Vulnerability", "CyberHazard", "CyberRisk", "CyberMitigation", "SecurityRequirement", "TrustBoundary", "
|
|
34
|
+
attribute :>> includeElementKinds = ("CybersecurityAsset", "Threat", "Vulnerability", "CyberHazard", "CyberRisk", "CyberMitigation", "SecurityRequirement", "TrustBoundary", "OperativeScenario[scenarioKind=threat]");
|
|
37
35
|
attribute :>> includeLayers = ("cybersecurity", "risk", "assurance");
|
|
38
36
|
attribute :>> includeConcerns = (ConcernKind::cybersecurity, ConcernKind::privacy, ConcernKind::safety);
|
|
39
37
|
attribute :>> selectionExpression = "product == 'GPCA'";
|
|
40
38
|
attribute :>> rationaleText = "Auto-populate the GPCA cybersecurity view from the cyber layer and cross-layer trace model.";
|
|
41
39
|
}
|
|
42
|
-
|
|
40
|
+
ref :>> viewpointDefinition = cybersecurityViewpoint;
|
|
43
41
|
}
|
|
44
42
|
}
|
|
@@ -10,15 +10,12 @@ package memo_examples_gpca_pump_viewpoints_cybersecurity_views_document_cyber_as
|
|
|
10
10
|
expose memo_examples_gpca_pump_viewpoints_cybersecurity_views_document_cyber_assessment_view::*;
|
|
11
11
|
attribute :>> id = "DOC-003";
|
|
12
12
|
attribute :>> name = "GPCAMemoCybersecurityAssessmentView";
|
|
13
|
-
attribute :>> title = "GPCA Cybersecurity Assessment View";
|
|
14
13
|
attribute :>> shortDescription = "Cybersecurity risk-assessment-oriented document view for GPCA.";
|
|
15
14
|
attribute :>> description = "Captures GPCA cyber risks, mitigations, security requirements, verification, and safety/privacy traceability for cybersecurity assessment records.";
|
|
16
15
|
attribute :>> version = "0.1";
|
|
17
16
|
attribute :>> lifecycleState = LifecycleStateKind::development;
|
|
18
17
|
attribute :>> marketScope = "generic";
|
|
19
|
-
|
|
20
|
-
attribute :>> sectionIdentifier = "CYB-RA";
|
|
21
|
-
part :>> viewpointDefinition = cybersecurityViewpoint;
|
|
18
|
+
ref :>> viewpointDefinition = cybersecurityViewpoint;
|
|
22
19
|
part :>> selectionQuery {
|
|
23
20
|
attribute :>> id = "QRY-DOC-009";
|
|
24
21
|
attribute :>> name = "cyberAssessmentViewQuery";
|
|
@@ -10,19 +10,16 @@ package memo_examples_gpca_pump_viewpoints_cybersecurity_views_document_threat_m
|
|
|
10
10
|
expose memo_examples_gpca_pump_viewpoints_cybersecurity_views_document_threat_model_view::*;
|
|
11
11
|
attribute :>> id = "DOC-002";
|
|
12
12
|
attribute :>> name = "GPCACyberThreatModelView";
|
|
13
|
-
attribute :>> title = "GPCA Cybersecurity Threat Model View";
|
|
14
13
|
attribute :>> shortDescription = "Threat-model-oriented document view for GPCA.";
|
|
15
14
|
attribute :>> description = "Captures GPCA cyber assets, trust boundaries, threats, threat scenarios, vulnerabilities, and mitigations for secure product development records.";
|
|
16
15
|
attribute :>> version = "0.1";
|
|
17
16
|
attribute :>> lifecycleState = LifecycleStateKind::development;
|
|
18
17
|
attribute :>> marketScope = "generic";
|
|
19
|
-
|
|
20
|
-
attribute :>> sectionIdentifier = "CYB-TM";
|
|
21
|
-
part :>> viewpointDefinition = cybersecurityViewpoint;
|
|
18
|
+
ref :>> viewpointDefinition = cybersecurityViewpoint;
|
|
22
19
|
part :>> selectionQuery {
|
|
23
20
|
attribute :>> id = "QRY-DOC-008";
|
|
24
21
|
attribute :>> name = "threatModelViewQuery";
|
|
25
|
-
attribute :>> includeElementKinds = ("Threat", "
|
|
22
|
+
attribute :>> includeElementKinds = ("Threat", "OperativeScenario[scenarioKind=threat]", "Vulnerability", "CybersecurityAsset", "TrustBoundary", "AttackSurface", "CyberMitigation", "SecurityRequirement");
|
|
26
23
|
attribute :>> includeRelationshipKinds = ("ThreatenedBy", "Exploits", "RealizedByScenario", "CrossesTrustBoundary", "Mitigates", "DerivesCyberRequirement");
|
|
27
24
|
attribute :>> rationaleText = "Declares what this document-backed view renders; the web renderer is presentation-only.";
|
|
28
25
|
}
|
|
@@ -18,7 +18,6 @@ package memo_examples_gpca_pump_viewpoints_functional_views_functional_function_
|
|
|
18
18
|
attribute depth = 2;
|
|
19
19
|
attribute :>> id = "VIEW-FUN-102";
|
|
20
20
|
attribute :>> name = "GPCA_FunctionAllocationView";
|
|
21
|
-
attribute :>> title = "GPCA Function Allocation View";
|
|
22
21
|
attribute :>> shortDescription = "Allocation of logical functions to software components and hardware assemblies.";
|
|
23
22
|
attribute :>> outputKind = (ViewOutputKind::matrix);
|
|
24
23
|
attribute :>> presentationKind = (PresentationKind::traceMatrix);
|
|
@@ -27,7 +26,6 @@ package memo_examples_gpca_pump_viewpoints_functional_views_functional_function_
|
|
|
27
26
|
attribute :>> dataSourceDescription = "AllocatedTo links between functions and architecture elements";
|
|
28
27
|
attribute :>> autoPopulate = true;
|
|
29
28
|
attribute :>> queryDescription = "Include logical functions with their AllocatedTo targets.";
|
|
30
|
-
attribute :>> documentUsage = ("SDD", "Architecture Description");
|
|
31
29
|
part :>> selectionQuery {
|
|
32
30
|
attribute :>> id = "QRY-FUN-102";
|
|
33
31
|
attribute :>> name = "GPCA_FunctionAllocationQuery";
|
|
@@ -37,6 +35,6 @@ package memo_examples_gpca_pump_viewpoints_functional_views_functional_function_
|
|
|
37
35
|
attribute :>> selectionExpression = "product == 'GPCA'";
|
|
38
36
|
attribute :>> rationaleText = "Show complete function-to-component allocation coverage.";
|
|
39
37
|
}
|
|
40
|
-
|
|
38
|
+
ref :>> viewpointDefinition = functionalViewpoint;
|
|
41
39
|
}
|
|
42
40
|
}
|