@memoarchitect/ontology 0.8.24 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
- package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +9 -7
- package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +8 -6
- package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
- package/examples/gpca-pump/memo.identity.yaml +2185 -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 +29 -24
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -13
- 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 +121 -125
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +390 -388
- 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 +15 -14
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -8
- 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 +6 -4
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +6 -4
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +5 -3
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +9 -7
- package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +6 -4
- package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
- package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
- package/examples/nested-architecture-dsm/memo.identity.yaml +181 -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/architecture/operational/context.sysml +34 -0
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +11 -6
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +16 -14
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
- package/examples/nested-architecture-dsm/model/catalog/project.sysml +4 -1
- package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +17 -16
- 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/software-only-medical-device/model/catalog/project.sysml +3 -1
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +10 -8
- package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +54 -51
- package/examples/surgical-robot/model/catalog/project.sysml +3 -1
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
- 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 +10 -8
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +11 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +11 -7
- package/examples/temperature-alarm/memo.identity.yaml +64 -0
- package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +27 -22
- package/examples/ui-screen-regions/memo.identity.yaml +205 -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 +26 -24
- 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 +5 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +5 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +5 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +3 -1
- 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/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 +1 -1
- 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/ui/memo_ui.sysml +0 -23
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +3 -1
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +3 -11
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +1 -12
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -11
- package/src/architecture/operational/workflows/memo_workflows.sysml +0 -20
- package/src/architecture/realization/deployment/memo_deployment.sysml +16 -9
- 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/iec-60601/hrs.md +6 -6
- package/src/artifacts/templates/dhf/iec-62304/srs.md +10 -10
- package/src/artifacts/templates/dhf/system/syrs.md +6 -6
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +0 -1
- package/src/assurance/human_factors/memo_human_factors.sysml +0 -1
- package/src/assurance/requirements/memo_requirements.sysml +20 -16
- package/src/assurance/requirements/needs/memo_needs.sysml +33 -5
- package/src/assurance/safety_risk/memo_risk.sysml +20 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
- package/src/core/common/memo_common.sysml +50 -50
- package/src/core/enumerations/memo_enumerations.sysml +1 -1
- package/src/core/relationships/memo_relationships.sysml +22 -49
- 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/rules/closure/closure_rules.sysml +58 -22
- package/src/rules/crosslayer/cross_layer_rules.sysml +5 -3
- package/src/rules/ontology/ontology_invariants.sysml +119 -35
- package/src/rules/quantitative/quantitative_rules.sysml +4 -2
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -28
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
- package/src/viewpoints/context/context_viewpoint.sysml +5 -3
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +5 -3
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -16
- package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +5 -3
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +5 -3
- package/src/viewpoints/logical/logical_viewpoint.sysml +4 -2
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +5 -3
- package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +5 -3
- package/src/viewpoints/physical/physical_viewpoint.sysml +4 -2
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +5 -3
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +5 -3
- package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -2
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +5 -3
- package/src/viewpoints/risk/risk_viewpoint.sysml +4 -2
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +5 -3
- package/src/viewpoints/software/software_viewpoint.sysml +4 -2
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +5 -3
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -2
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +4 -2
- package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +5 -3
- package/templates/connected-device/model/catalog/project.sysml +3 -1
- package/templates/default/model/catalog/project.sysml +3 -1
- package/templates/infusion-pump/model/catalog/project.sysml +3 -1
- package/templates/monitoring-device/model/catalog/project.sysml +3 -1
- package/templates/samd/model/catalog/project.sysml +3 -1
|
@@ -7,6 +7,7 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
|
|
|
7
7
|
private import memo_examples_gpca_pump_gpca_system::*;
|
|
8
8
|
private import memo_examples_gpca_pump_gpca_architecture::*;
|
|
9
9
|
|
|
10
|
+
private import memo_core_common::MemoIdentity;
|
|
10
11
|
// ═════════════════════════════════════════════════════════════
|
|
11
12
|
// GPCA mode machine per CriSys Ch.4 Fig 4.1 mode hierarchy:
|
|
12
13
|
// OFF, ON { IDLE, THERAPY { PAUSED, ACTIVE { BASAL,
|
|
@@ -23,108 +24,108 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
|
|
|
23
24
|
// outside this compact mode view.
|
|
24
25
|
// ═════════════════════════════════════════════════════════════
|
|
25
26
|
state topLevelModeMachine : StateMachine {
|
|
26
|
-
|
|
27
|
+
@MemoIdentity { :>> providedId = "BM-001"; }
|
|
27
28
|
attribute :>> name = "TopLevelModeMachine";
|
|
28
29
|
attribute :>> machineKind = "hierarchical state machine";
|
|
29
30
|
attribute :>> executionSemantics = "single-step synchronous; sub-modes inherit all parent-mode requirements";
|
|
30
31
|
attribute fidelityScope = "Requirements-derived therapy mode hierarchy; partial abstraction of CITE-009, not a state-for-state Stateflow transcription";
|
|
31
|
-
|
|
32
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1; CITE-009: CriSys PCA Pump Software Model"; }
|
|
32
33
|
|
|
33
34
|
// ── Mode states (Fig 4.1) ───────────────────────────
|
|
34
35
|
state modeOFF : MemoState {
|
|
35
|
-
|
|
36
|
+
@MemoIdentity { :>> providedId = "MODE-000"; }
|
|
36
37
|
attribute :>> stateKind = StateKind::mode;
|
|
37
38
|
attribute :>> name = "OFF";
|
|
38
39
|
attribute :>> modeKind = "top (default)";
|
|
39
40
|
attribute :>> description = "No functionality; the GPCA is turned off. FlowRate_output = 0 (REQ 6).";
|
|
40
41
|
attribute :>> entryCondition = "System_stop_prog commanded while ON (REQ 5); default mode";
|
|
41
42
|
attribute :>> exitCondition = "System_start_prog commanded (REQ 4)";
|
|
42
|
-
|
|
43
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.2"; }
|
|
43
44
|
}
|
|
44
45
|
|
|
45
46
|
state modeON : MemoState {
|
|
46
|
-
|
|
47
|
+
@MemoIdentity { :>> providedId = "MODE-001"; }
|
|
47
48
|
attribute :>> stateKind = StateKind::mode;
|
|
48
49
|
attribute :>> name = "ON";
|
|
49
50
|
attribute :>> modeKind = "operational parent";
|
|
50
51
|
attribute :>> description = "Topmost operational mode: prescription configuration (REQ 8), infusion initiation gating (REQ 7, 9), notification (REQ 10) and logging (REQ 11) are available.";
|
|
51
52
|
attribute :>> entryCondition = "System_start_prog from OFF; A.4 variables set to defaults (REQ 4)";
|
|
52
53
|
attribute :>> exitCondition = "System_stop_prog: stop infusion, cancel all notifications (REQ 5)";
|
|
53
|
-
|
|
54
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3"; }
|
|
54
55
|
|
|
55
56
|
state modeIDLE : MemoState {
|
|
56
|
-
|
|
57
|
+
@MemoIdentity { :>> providedId = "MODE-002"; }
|
|
57
58
|
attribute :>> stateKind = StateKind::mode;
|
|
58
59
|
attribute :>> name = "ON.IDLE";
|
|
59
60
|
attribute :>> modeKind = "idle";
|
|
60
61
|
attribute :>> description = "Default sub-mode on entry to ON; no infusion, FlowRate_output = 0 (REQ 14); prescription set-up happens here. 'IDLE Time' actions after Max_IDLE_Duration_const (REQ 15).";
|
|
61
62
|
attribute :>> entryCondition = "OFF -> ON transition (REQ 4); infusion complete (REQ 28); PAUSED inhibit (REQ 47)";
|
|
62
63
|
attribute :>> exitCondition = "confirmed second Infusion_initiate_prog (REQ 12/13)";
|
|
63
|
-
|
|
64
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4"; }
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
state modeTHERAPY : MemoState {
|
|
67
|
-
|
|
68
|
+
@MemoIdentity { :>> providedId = "MODE-003"; }
|
|
68
69
|
attribute :>> stateKind = StateKind::mode;
|
|
69
70
|
attribute :>> name = "ON.THERAPY";
|
|
70
71
|
attribute :>> modeKind = "therapy parent";
|
|
71
72
|
attribute :>> description = "Parent of all drug-delivering sub-modes. Delivers FlowRate_Mode_macro within Tolerance_Max_const (REQ 16); monitors under-infusion (REQ 17), low reservoir (REQ 18), over-infusion, VTBI, air, reverse delivery, empty reservoir (REQ 19-23).";
|
|
72
73
|
attribute :>> entryCondition = "infusion initiated (REQ 12/13)";
|
|
73
74
|
attribute :>> exitCondition = "infusion complete to IDLE (REQ 28); manual stop from PAUSED (REQ 47); system stop (REQ 5)";
|
|
74
|
-
|
|
75
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5"; }
|
|
75
76
|
|
|
76
77
|
state modePAUSED : MemoState {
|
|
77
|
-
|
|
78
|
+
@MemoIdentity { :>> providedId = "MODE-004"; }
|
|
78
79
|
attribute :>> stateKind = StateKind::mode;
|
|
79
80
|
attribute :>> name = "ON.THERAPY.PAUSED";
|
|
80
81
|
attribute :>> modeKind = "paused (KVO delivery)";
|
|
81
82
|
attribute :>> description = "Infusion paused by notification actions or manual inhibit. FlowRate_Mode_macro = FlowRate_kvo_hd — keep-vein-open flow within Tolerance_Max_const, NOT zero (REQ 43). 'PAUSED Time' actions after Max_PAUSED_Duration_const (REQ 44). Infusion_initiate_prog while Inhibited_Infusion_macro = TRUE causes no transition (REQ 45).";
|
|
82
83
|
attribute :>> entryCondition = "REQ 19-23 alarm transitions, REQ 29 manual inhibit, REQ 30 all-inhibited, REQ 37-39 sub-mode inhibits, REQ 13 initiate-while-inhibited";
|
|
83
84
|
attribute :>> exitCondition = "Infusion_initiate_prog with Inhibited_Infusion_macro = FALSE (REQ 46); Infusion_inhibit_prog to IDLE (REQ 47)";
|
|
84
|
-
|
|
85
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10 (REQ 43-47)"; }
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
state modeACTIVE : MemoState {
|
|
88
|
-
|
|
89
|
+
@MemoIdentity { :>> providedId = "MODE-005"; }
|
|
89
90
|
attribute :>> stateKind = StateKind::mode;
|
|
90
91
|
attribute :>> name = "ON.THERAPY.ACTIVE";
|
|
91
92
|
attribute :>> modeKind = "active parent";
|
|
92
93
|
attribute :>> description = "Actual infusion through BASAL, SQUARE BOLUS or PATIENT BOLUS. Only mode where a patient bolus may be requested (REQ 25). Square boluses are scheduled automatically every Interval_sbolus_prog for Duration_sbolus_prog (REQ 24). Actual_Infusion_Duration_macro accumulates here.";
|
|
93
94
|
attribute :>> entryCondition = "infusion initiated (REQ 12) or resumed (REQ 46)";
|
|
94
95
|
attribute :>> exitCondition = "infusion complete (REQ 28); PAUSED via REQ 29/30/37-39";
|
|
95
|
-
|
|
96
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6"; }
|
|
96
97
|
|
|
97
98
|
state modeBASAL : MemoState {
|
|
98
|
-
|
|
99
|
+
@MemoIdentity { :>> providedId = "MODE-006"; }
|
|
99
100
|
attribute :>> stateKind = StateKind::mode;
|
|
100
101
|
attribute :>> name = "ON.THERAPY.ACTIVE.BASAL";
|
|
101
102
|
attribute :>> modeKind = "active-basal";
|
|
102
103
|
attribute :>> description = "Constant-rate delivery at FlowRate_basal_prog within Tolerance_Max_const (REQ 40). FlowRate_Mode_macro = FlowRate_basal_prog.";
|
|
103
104
|
attribute :>> entryCondition = "infusion initiated/resumed (REQ 12/46); square bolus ended (REQ 34); patient bolus ended (REQ 35)";
|
|
104
105
|
attribute :>> exitCondition = "scheduled square bolus (REQ 31); patient bolus granted (REQ 32); Inhibited_Infusion_macro (REQ 37)";
|
|
105
|
-
|
|
106
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7"; }
|
|
106
107
|
}
|
|
107
108
|
|
|
108
109
|
state modeSQUARE : MemoState {
|
|
109
|
-
|
|
110
|
+
@MemoIdentity { :>> providedId = "MODE-007"; }
|
|
110
111
|
attribute :>> stateKind = StateKind::mode;
|
|
111
112
|
attribute :>> name = "ON.THERAPY.ACTIVE.SQUARE_BOLUS";
|
|
112
113
|
attribute :>> modeKind = "active-square-bolus (auto-scheduled)";
|
|
113
114
|
attribute :>> description = "Prescribed extra delivery at FlowRate_sbolus_prog within Tolerance_Max_const (REQ 41). Auto-initiates at the prescribed frequency and ends after the prescribed duration — no external trigger (§4.1.8, REQ 24). FlowRate_Mode_macro = FlowRate_sbolus_prog.";
|
|
114
115
|
attribute :>> entryCondition = "scheduled start per REQ 24 with REQ 31 guards; patient bolus end with square scheduled (REQ 36)";
|
|
115
116
|
attribute :>> exitCondition = "scheduled end or Inhibited_Bolus_macro (REQ 34); patient bolus granted (REQ 33); inhibits (REQ 39)";
|
|
116
|
-
|
|
117
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8"; }
|
|
117
118
|
}
|
|
118
119
|
|
|
119
120
|
state modePBOLUS : MemoState {
|
|
120
|
-
|
|
121
|
+
@MemoIdentity { :>> providedId = "MODE-008"; }
|
|
121
122
|
attribute :>> stateKind = StateKind::mode;
|
|
122
123
|
attribute :>> name = "ON.THERAPY.ACTIVE.PATIENT_BOLUS";
|
|
123
124
|
attribute :>> modeKind = "active-patient-bolus";
|
|
124
125
|
attribute :>> description = "Patient-requested delivery at FlowRate_pbolus_prog within Tolerance_Max_const (REQ 42). Granted only when no REQ 25 ignore condition holds. FlowRate_Mode_macro = FlowRate_pbolus_prog.";
|
|
125
126
|
attribute :>> entryCondition = "BolusRequest_prog with no REQ 25 ignore condition (REQ 32/33)";
|
|
126
127
|
attribute :>> exitCondition = "Inhibited_PatientBolus_macro or duration >= Duration_pbolus_prog (REQ 35/36); inhibits (REQ 38)";
|
|
127
|
-
|
|
128
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9"; }
|
|
128
129
|
}
|
|
129
130
|
}
|
|
130
131
|
}
|
|
@@ -330,22 +331,22 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
|
|
|
330
331
|
// The individual configurations remain ordinary model elements, so their
|
|
331
332
|
// active mode is navigable as well as visible in the choice-point edge.
|
|
332
333
|
part basalConfiguration : ModeConfiguration {
|
|
333
|
-
|
|
334
|
+
@MemoIdentity { :>> providedId = "CFG-001"; }
|
|
334
335
|
attribute :>> name = "BasalTherapyConfiguration";
|
|
335
336
|
ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modeBASAL;
|
|
336
337
|
}
|
|
337
338
|
part squareBolusConfiguration : ModeConfiguration {
|
|
338
|
-
|
|
339
|
+
@MemoIdentity { :>> providedId = "CFG-002"; }
|
|
339
340
|
attribute :>> name = "SquareBolusConfiguration";
|
|
340
341
|
ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modeSQUARE;
|
|
341
342
|
}
|
|
342
343
|
part patientBolusConfiguration : ModeConfiguration {
|
|
343
|
-
|
|
344
|
+
@MemoIdentity { :>> providedId = "CFG-003"; }
|
|
344
345
|
attribute :>> name = "PatientBolusConfiguration";
|
|
345
346
|
ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modeACTIVE.modePBOLUS;
|
|
346
347
|
}
|
|
347
348
|
part pausedConfiguration : ModeConfiguration {
|
|
348
|
-
|
|
349
|
+
@MemoIdentity { :>> providedId = "CFG-004"; }
|
|
349
350
|
attribute :>> name = "PausedKvoConfiguration";
|
|
350
351
|
ref :>> activeMode = topLevelModeMachine.modeON.modeTHERAPY.modePAUSED;
|
|
351
352
|
}
|
|
@@ -358,59 +359,59 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
|
|
|
358
359
|
|
|
359
360
|
// ── Behavior properties and timing constraints ──────────────
|
|
360
361
|
part propAlarmStopsSameStep : BehaviorProperty {
|
|
361
|
-
|
|
362
|
+
@MemoIdentity { :>> providedId = "BP-002"; }
|
|
362
363
|
attribute :>> name = "AlarmResponseSameStepKvo";
|
|
363
364
|
attribute :>> propertyKind = BehaviorPropertyKind::safetyProperty;
|
|
364
365
|
attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
|
|
365
366
|
attribute :>> formalExpression = "ALARM.ALARM_OUT -> IM.ALARM_IN is an AADL immediate connection: when an infusion-inhibiting notification asserts, Infusion_Manager limits Commanded_Flow_Rate <= FlowRate_kvo_hd in the same execution step";
|
|
366
|
-
|
|
367
|
+
@MemoIdentity { :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) and AGREE flow <= KVO guarantees"; }
|
|
367
368
|
}
|
|
368
369
|
part propPausedNoResumeWhileInhibited : BehaviorProperty {
|
|
369
|
-
|
|
370
|
+
@MemoIdentity { :>> providedId = "BP-004"; }
|
|
370
371
|
attribute :>> name = "PausedNoTransitionWhileInhibited";
|
|
371
372
|
attribute :>> propertyKind = BehaviorPropertyKind::stateInvariant;
|
|
372
373
|
attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
|
|
373
374
|
attribute :>> formalExpression = "in PAUSED: Infusion_initiate_prog AND Inhibited_Infusion_macro = TRUE => mode unchanged";
|
|
374
|
-
|
|
375
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)"; }
|
|
375
376
|
}
|
|
376
377
|
part propModeTimeoutActions : BehaviorProperty {
|
|
377
|
-
|
|
378
|
+
@MemoIdentity { :>> providedId = "BP-005"; }
|
|
378
379
|
attribute :>> name = "IdleAndPausedTimeoutActions";
|
|
379
380
|
attribute :>> propertyKind = BehaviorPropertyKind::transitionRule;
|
|
380
381
|
attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
|
|
381
382
|
attribute :>> formalExpression = "time in IDLE > Max_IDLE_Duration_const => REQ 59 'IDLE Time' actions; time in PAUSED > Max_PAUSED_Duration_const => REQ 59 'PAUSED Time' actions (notification actions, not mode transitions)";
|
|
382
|
-
|
|
383
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 15) and §4.1.10.1 (REQ 44)"; }
|
|
383
384
|
}
|
|
384
385
|
part propLockoutTimerMonotonic : BehaviorProperty {
|
|
385
|
-
|
|
386
|
+
@MemoIdentity { :>> providedId = "BP-003"; }
|
|
386
387
|
attribute :>> name = "LockoutTimerNeverShortened";
|
|
387
388
|
attribute :>> propertyKind = BehaviorPropertyKind::stateInvariant;
|
|
388
389
|
attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
|
|
389
390
|
attribute :>> formalExpression = "lockout_remaining decreases only with elapsed time; no input path resets it early";
|
|
390
|
-
|
|
391
|
+
@MemoIdentity { :>> sourceReference = "MEMO extension — supports the REQ 25.3 lockout ignore condition; invariant not stated by the source"; }
|
|
391
392
|
}
|
|
392
393
|
part tcAlarmLatency : TimingConstraint {
|
|
393
|
-
|
|
394
|
+
@MemoIdentity { :>> providedId = "TC-001"; }
|
|
394
395
|
attribute :>> name = "AlarmToSafeStateLatency";
|
|
395
396
|
attribute :>> constraintKind = TimingConstraintKind::latency;
|
|
396
397
|
attribute :>> minMs = "0";
|
|
397
398
|
attribute :>> maxMs = "20";
|
|
398
399
|
ref :>> referenceElement = fcAlarmStop;
|
|
399
|
-
attribute :>> verificationMethod =
|
|
400
|
-
|
|
400
|
+
attribute :>> verificationMethod = MemoVerificationMethodKind::modelChecking;
|
|
401
|
+
@MemoIdentity { :>> sourceReference = "MEMO extension — illustrative wall-clock budget; the source specifies synchronous same-step (immediate) semantics with no timing figures"; }
|
|
401
402
|
}
|
|
402
403
|
part tcBolusResponse : TimingConstraint {
|
|
403
|
-
|
|
404
|
+
@MemoIdentity { :>> providedId = "TC-002"; }
|
|
404
405
|
attribute :>> name = "BolusRequestResponseLatency";
|
|
405
406
|
attribute :>> constraintKind = TimingConstraintKind::latency;
|
|
406
407
|
attribute :>> minMs = "0";
|
|
407
408
|
attribute :>> maxMs = "100";
|
|
408
409
|
ref :>> referenceElement = fcPatientBolus;
|
|
409
|
-
attribute :>> verificationMethod =
|
|
410
|
-
|
|
410
|
+
attribute :>> verificationMethod = MemoVerificationMethodKind::test;
|
|
411
|
+
@MemoIdentity { :>> sourceReference = "MEMO extension — illustrative wall-clock budget; not specified by the source"; }
|
|
411
412
|
}
|
|
412
413
|
part tcWatchdogTimeout : TimingConstraint {
|
|
413
|
-
|
|
414
|
+
@MemoIdentity { :>> providedId = "TC-003"; }
|
|
414
415
|
attribute :>> name = "WatchdogTimeout";
|
|
415
416
|
attribute :>> constraintKind = TimingConstraintKind::deadline;
|
|
416
417
|
attribute :>> minMs = "40";
|
|
@@ -420,7 +421,7 @@ package memo_examples_gpca_pump_gpca_behavior_modes {
|
|
|
420
421
|
// `referenceElement` is a MemoPart; a requirement is a requirement def
|
|
421
422
|
// and does not conform to it — that link is REQ-X-08's own trace.
|
|
422
423
|
ref :>> referenceElement = gpcaDevice.gpcaSoftware.systemMonitor;
|
|
423
|
-
attribute :>> verificationMethod =
|
|
424
|
-
|
|
424
|
+
attribute :>> verificationMethod = MemoVerificationMethodKind::test;
|
|
425
|
+
@MemoIdentity { :>> sourceReference = "MEMO extension — supports extension requirement REQ-X-08; watchdog not specified by the source"; }
|
|
425
426
|
}
|
|
426
427
|
}
|
|
@@ -8,9 +8,10 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
8
8
|
private import memo_assurance_requirements::*;
|
|
9
9
|
private import memo_core_common::*;
|
|
10
10
|
|
|
11
|
+
private import memo_core_common::MemoIdentity;
|
|
11
12
|
// ── Logical functions ───────────────────────────────────────
|
|
12
13
|
action fnAcquireSensors : SystemFunction {
|
|
13
|
-
|
|
14
|
+
@MemoIdentity { :>> providedId = "FUNC-001"; }
|
|
14
15
|
attribute :>> name = "AcquireSensorData";
|
|
15
16
|
attribute :>> functionCategory = "sensing";
|
|
16
17
|
attribute :>> trigger = "every 20 ms execution step";
|
|
@@ -27,7 +28,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
27
28
|
// requires — a component function allocated nowhere is a
|
|
28
29
|
// responsibility nobody has accepted.
|
|
29
30
|
action cfnMeasureFlowRate : ComponentFunction {
|
|
30
|
-
|
|
31
|
+
@MemoIdentity { :>> providedId = "CFUN-001"; }
|
|
31
32
|
attribute :>> name = "MeasureFlowRate";
|
|
32
33
|
attribute :>> functionCategory = "sensing";
|
|
33
34
|
attribute :>> actionKind = ActionKind::sense;
|
|
@@ -37,7 +38,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
37
38
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
38
39
|
}
|
|
39
40
|
action cfnDetectAirInLine : ComponentFunction {
|
|
40
|
-
|
|
41
|
+
@MemoIdentity { :>> providedId = "CFUN-002"; }
|
|
41
42
|
attribute :>> name = "DetectAirInLine";
|
|
42
43
|
attribute :>> functionCategory = "protection";
|
|
43
44
|
attribute :>> actionKind = ActionKind::sense;
|
|
@@ -48,7 +49,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
48
49
|
}
|
|
49
50
|
// The subassembly case: a component function need not sit on a leaf part.
|
|
50
51
|
action cfnAggregateSensorStatus : ComponentFunction {
|
|
51
|
-
|
|
52
|
+
@MemoIdentity { :>> providedId = "CFUN-003"; }
|
|
52
53
|
attribute :>> name = "AggregateSensorStatus";
|
|
53
54
|
attribute :>> functionCategory = "sensing";
|
|
54
55
|
attribute :>> actionKind = ActionKind::transform;
|
|
@@ -60,7 +61,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
action fnValidatePrescription : SystemFunction {
|
|
63
|
-
|
|
64
|
+
@MemoIdentity { :>> providedId = "FUNC-002"; }
|
|
64
65
|
attribute :>> name = "ValidatePrescription";
|
|
65
66
|
attribute :>> functionCategory = "configuration";
|
|
66
67
|
attribute :>> trigger = "prescription entry or edit";
|
|
@@ -69,7 +70,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
69
70
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
70
71
|
}
|
|
71
72
|
action fnMonitorAlarm : SystemFunction {
|
|
72
|
-
|
|
73
|
+
@MemoIdentity { :>> providedId = "FUNC-003"; }
|
|
73
74
|
attribute :>> name = "MonitorExceptionalConditions";
|
|
74
75
|
attribute :>> functionCategory = "alarm";
|
|
75
76
|
attribute :>> trigger = "every 20 ms execution step";
|
|
@@ -78,7 +79,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
78
79
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
79
80
|
}
|
|
80
81
|
action fnAnnunciate : SystemFunction {
|
|
81
|
-
|
|
82
|
+
@MemoIdentity { :>> providedId = "FUNC-004"; }
|
|
82
83
|
attribute :>> name = "AnnunciateAlarms";
|
|
83
84
|
attribute :>> functionCategory = "alarm";
|
|
84
85
|
attribute :>> trigger = "alarm raised, escalated, or cleared";
|
|
@@ -87,7 +88,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
87
88
|
attribute :>> criticality = CriticalityKind::high;
|
|
88
89
|
}
|
|
89
90
|
action fnManageInfusion : SystemFunction {
|
|
90
|
-
|
|
91
|
+
@MemoIdentity { :>> providedId = "FUNC-005"; }
|
|
91
92
|
attribute :>> name = "ManageInfusion";
|
|
92
93
|
attribute :>> functionCategory = "infusion";
|
|
93
94
|
attribute :>> trigger = "mode transitions and each execution step while therapy active";
|
|
@@ -96,7 +97,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
96
97
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
97
98
|
}
|
|
98
99
|
action fnEnforceLimits : SystemFunction {
|
|
99
|
-
|
|
100
|
+
@MemoIdentity { :>> providedId = "FUNC-006"; }
|
|
100
101
|
attribute :>> name = "EnforceDoseLimits";
|
|
101
102
|
attribute :>> functionCategory = "infusion";
|
|
102
103
|
attribute :>> trigger = "patient bolus request or clinician square bolus command";
|
|
@@ -105,7 +106,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
105
106
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
106
107
|
}
|
|
107
108
|
action fnCommandPump : SystemFunction {
|
|
108
|
-
|
|
109
|
+
@MemoIdentity { :>> providedId = "FUNC-007"; }
|
|
109
110
|
attribute :>> name = "CommandPumpMotor";
|
|
110
111
|
attribute :>> functionCategory = "actuation";
|
|
111
112
|
attribute :>> trigger = "flow command update";
|
|
@@ -114,7 +115,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
114
115
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
115
116
|
}
|
|
116
117
|
action fnLogEvents : SystemFunction {
|
|
117
|
-
|
|
118
|
+
@MemoIdentity { :>> providedId = "FUNC-008"; }
|
|
118
119
|
attribute :>> name = "LogTherapyEvents";
|
|
119
120
|
attribute :>> functionCategory = "logging";
|
|
120
121
|
attribute :>> trigger = "dose delivered, mode change, alarm, or configuration change";
|
|
@@ -123,7 +124,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
123
124
|
attribute :>> criticality = CriticalityKind::medium;
|
|
124
125
|
}
|
|
125
126
|
action fnManagePower : SystemFunction {
|
|
126
|
-
|
|
127
|
+
@MemoIdentity { :>> providedId = "FUNC-009"; }
|
|
127
128
|
attribute :>> name = "ManagePower";
|
|
128
129
|
attribute :>> functionCategory = "platform";
|
|
129
130
|
attribute :>> trigger = "mains-loss signal or battery level change";
|
|
@@ -132,7 +133,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
132
133
|
attribute :>> criticality = CriticalityKind::high;
|
|
133
134
|
}
|
|
134
135
|
action fnPresentStatus : SystemFunction {
|
|
135
|
-
|
|
136
|
+
@MemoIdentity { :>> providedId = "FUNC-010"; }
|
|
136
137
|
attribute :>> name = "PresentStatus";
|
|
137
138
|
attribute :>> functionCategory = "user-interface";
|
|
138
139
|
attribute :>> trigger = "state or prescription change";
|
|
@@ -141,7 +142,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
141
142
|
attribute :>> criticality = CriticalityKind::high;
|
|
142
143
|
}
|
|
143
144
|
action fnSelfTest : SystemFunction {
|
|
144
|
-
|
|
145
|
+
@MemoIdentity { :>> providedId = "FUNC-011"; }
|
|
145
146
|
attribute :>> name = "ExecuteSelfTest";
|
|
146
147
|
attribute :>> functionCategory = "platform";
|
|
147
148
|
attribute :>> trigger = "power-on and periodic in-service checks";
|
|
@@ -152,7 +153,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
152
153
|
|
|
153
154
|
// ── Logical flows ───────────────────────────────────────────
|
|
154
155
|
part lfSensorAcquisition : FunctionalExchange {
|
|
155
|
-
|
|
156
|
+
@MemoIdentity { :>> providedId = "LF-001"; }
|
|
156
157
|
attribute :>> name = "SensorAcquisitionFlow";
|
|
157
158
|
attribute :>> flowKind = FlowKind::measurement;
|
|
158
159
|
attribute :>> latencyBudgetMs = 20.0;
|
|
@@ -162,7 +163,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
162
163
|
ref :>> targetFunction = fnMonitorAlarm;
|
|
163
164
|
}
|
|
164
165
|
part lfFlowCommand : FunctionalExchange {
|
|
165
|
-
|
|
166
|
+
@MemoIdentity { :>> providedId = "LF-002"; }
|
|
166
167
|
attribute :>> name = "FlowCommandFlow";
|
|
167
168
|
attribute :>> flowKind = FlowKind::command;
|
|
168
169
|
attribute :>> latencyBudgetMs = 20.0;
|
|
@@ -172,7 +173,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
172
173
|
ref :>> targetFunction = fnCommandPump;
|
|
173
174
|
}
|
|
174
175
|
part lfAlarmSignal : FunctionalExchange {
|
|
175
|
-
|
|
176
|
+
@MemoIdentity { :>> providedId = "LF-003"; }
|
|
176
177
|
attribute :>> name = "AlarmSignalFlow";
|
|
177
178
|
attribute :>> flowKind = FlowKind::alarm;
|
|
178
179
|
attribute :>> latencyBudgetMs = 20.0;
|
|
@@ -182,7 +183,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
182
183
|
ref :>> targetFunction = fnAnnunciate;
|
|
183
184
|
}
|
|
184
185
|
part lfPrescriptionEntry : FunctionalExchange {
|
|
185
|
-
|
|
186
|
+
@MemoIdentity { :>> providedId = "LF-004"; }
|
|
186
187
|
attribute :>> name = "PrescriptionEntryFlow";
|
|
187
188
|
attribute :>> flowKind = FlowKind::configuration;
|
|
188
189
|
attribute :>> latencyBudgetMs = 500.0;
|
|
@@ -194,7 +195,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
194
195
|
// ── Exchange item definitions ───────────────────────────────
|
|
195
196
|
item ddPrescription : InterfaceItem {
|
|
196
197
|
attribute :>> itemKind = InterfaceItemKind::data;
|
|
197
|
-
|
|
198
|
+
@MemoIdentity { :>> providedId = "DD-001"; }
|
|
198
199
|
attribute :>> name = "PrescriptionRecord";
|
|
199
200
|
attribute :>> semantics = "patient id, drug name, concentration, VTBI total, duration total, basal flow rate, square bolus rate/duration/interval, patient bolus rate/duration/lockout period, max boluses per hour (DD-005..DD-017)";
|
|
200
201
|
attribute :>> unit = "ml/hr, ml, minutes, mg/ml, per hour";
|
|
@@ -205,11 +206,11 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
205
206
|
attribute :>> integrityClass = "class C";
|
|
206
207
|
attribute :>> confidentialityClass = "clinical";
|
|
207
208
|
attribute :>> availabilityClass = "must survive power loss";
|
|
208
|
-
|
|
209
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.1.1 Prescription Data"; }
|
|
209
210
|
}
|
|
210
211
|
item ddBolusRequest : InterfaceItem {
|
|
211
212
|
attribute :>> itemKind = InterfaceItemKind::data;
|
|
212
|
-
|
|
213
|
+
@MemoIdentity { :>> providedId = "DD-002"; }
|
|
213
214
|
attribute :>> name = "BolusRequestSignal";
|
|
214
215
|
attribute :>> semantics = "debounced patient pendant press event";
|
|
215
216
|
attribute :>> encoding = "edge event with 50 ms debounce";
|
|
@@ -220,7 +221,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
220
221
|
}
|
|
221
222
|
item ddSensorVector : InterfaceItem {
|
|
222
223
|
attribute :>> itemKind = InterfaceItemKind::data;
|
|
223
|
-
|
|
224
|
+
@MemoIdentity { :>> providedId = "DD-003"; }
|
|
224
225
|
attribute :>> name = "SensorStatusVector";
|
|
225
226
|
attribute :>> semantics = "air-in-line, occlusion pressure, reservoir volume, door state, flow measurement, battery level, CPU/memory status";
|
|
226
227
|
attribute :>> encoding = "fixed-layout status word per 20 ms step";
|
|
@@ -231,7 +232,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
231
232
|
}
|
|
232
233
|
item ddEventRecord : InterfaceItem {
|
|
233
234
|
attribute :>> itemKind = InterfaceItemKind::data;
|
|
234
|
-
|
|
235
|
+
@MemoIdentity { :>> providedId = "DD-004"; }
|
|
235
236
|
attribute :>> name = "TherapyEventRecord";
|
|
236
237
|
attribute :>> semantics = "timestamped dose, alarm, mode, and configuration events";
|
|
237
238
|
attribute :>> encoding = "append-only sequenced records";
|
|
@@ -242,7 +243,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
242
243
|
}
|
|
243
244
|
item cdFlowCommand : InterfaceItem {
|
|
244
245
|
attribute :>> itemKind = InterfaceItemKind::command;
|
|
245
|
-
|
|
246
|
+
@MemoIdentity { :>> providedId = "CD-001"; }
|
|
246
247
|
attribute :>> name = "FlowCommand";
|
|
247
248
|
attribute :>> controlType = "commanded flow rate with enable interlock";
|
|
248
249
|
attribute :>> timeoutMs = 40.0;
|
|
@@ -250,7 +251,7 @@ package memo_examples_gpca_pump_gpca_behavior_subsystems {
|
|
|
250
251
|
}
|
|
251
252
|
item cdAlarmSignal : InterfaceItem {
|
|
252
253
|
attribute :>> itemKind = InterfaceItemKind::command;
|
|
253
|
-
|
|
254
|
+
@MemoIdentity { :>> providedId = "CD-002"; }
|
|
254
255
|
attribute :>> name = "AlarmSignal";
|
|
255
256
|
attribute :>> controlType = "priority-coded alarm assertion (level 1 stops infusion, level 2 warns)";
|
|
256
257
|
attribute :>> timeoutMs = 20.0;
|
|
@@ -10,11 +10,13 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
10
10
|
private import memo_core_enumerations::*;
|
|
11
11
|
private import memo_examples_gpca_pump_gpca_operational::*;
|
|
12
12
|
|
|
13
|
+
private import memo_core_common::*;
|
|
14
|
+
private import memo_core_common::MemoIdentity;
|
|
13
15
|
// ── Intended use (ISO 14971 §5.2, IEC 62366-1) ──────────────
|
|
14
16
|
part gpcaIntendedUse : IntendedUse {
|
|
15
|
-
|
|
17
|
+
@MemoIdentity { :>> providedId = "IU-001"; }
|
|
16
18
|
attribute :>> name = "GPCA_IntendedUse";
|
|
17
|
-
|
|
19
|
+
@MemoIdentity { :>> shortDescription = "Patient-controlled analgesia infusion of prescribed opioid analgesics."; }
|
|
18
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.";
|
|
19
21
|
attribute :>> indication = "Management of acute post-operative or chronic pain requiring titrated intravenous opioid analgesia.";
|
|
20
22
|
attribute :>> contraindication = "Patients unable to comprehend or operate the bolus request mechanism; drugs without safe-value records in the hospital pharmacy database.";
|
|
@@ -24,22 +26,22 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
24
26
|
attribute :>> missionKind = "therapeutic device mission";
|
|
25
27
|
attribute :>> successCriteria = "Drug delivered per prescription; no overdose or undetected under-infusion; every hazardous condition annunciated within its alarm latency budget.";
|
|
26
28
|
attribute :>> operationalContext = "Acute-care hospital ward, fixed (non-ambulatory) location (UC-001).";
|
|
27
|
-
|
|
29
|
+
@MemoIdentity { :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1-2.3 (GPCA overview, system functions, user characteristics)"; }
|
|
28
30
|
}
|
|
29
31
|
part bolusByProxyMisuse : ReasonablyForeseeableMisuse {
|
|
30
|
-
|
|
32
|
+
@MemoIdentity { :>> providedId = "RFM-001"; }
|
|
31
33
|
attribute :>> name = "BolusRequestBySomeoneOtherThanPatient";
|
|
32
|
-
|
|
34
|
+
@MemoIdentity { :>> shortDescription = "A caregiver or visitor presses the patient bolus control."; }
|
|
33
35
|
attribute :>> description = "A person other than the patient activates the bolus request control, bypassing the intended patient self-limiting behavior.";
|
|
34
36
|
attribute :>> misuseContext = "Patient-controlled analgesia in a supervised hospital setting.";
|
|
35
37
|
attribute :>> foreseeableBasis = "Known PCA use pattern represented in the GPCA hazard analysis.";
|
|
36
38
|
attribute :>> affectedUseContext = "UC-001";
|
|
37
|
-
|
|
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"; }
|
|
38
40
|
}
|
|
39
41
|
|
|
40
42
|
// ── Use contexts ────────────────────────────────────────────
|
|
41
43
|
part hospitalWardContext : UseContext {
|
|
42
|
-
|
|
44
|
+
@MemoIdentity { :>> providedId = "UC-001"; }
|
|
43
45
|
attribute :>> name = "HospitalWardUseContext";
|
|
44
46
|
attribute :>> careSetting = "acute-care hospital ward and post-anesthesia care unit";
|
|
45
47
|
attribute :>> environment = "indoor clinical environment, mains power with battery backup, pole or bed-rail mounted";
|
|
@@ -52,7 +54,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
52
54
|
// ── Actors ──────────────────────────────────────────────────
|
|
53
55
|
part actorPatient : User {
|
|
54
56
|
attribute :>> actorKind = ActorKind::patient;
|
|
55
|
-
|
|
57
|
+
@MemoIdentity { :>> providedId = "ACT-001"; }
|
|
56
58
|
attribute :>> name = "Patient";
|
|
57
59
|
attribute :>> trainingLevel = "instructed by clinician on bolus request button only";
|
|
58
60
|
attribute :>> description = "Receives the infusion and requests bolus doses via the patient pendant.";
|
|
@@ -60,7 +62,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
60
62
|
}
|
|
61
63
|
part actorNurse : User {
|
|
62
64
|
attribute :>> actorKind = ActorKind::clinician;
|
|
63
|
-
|
|
65
|
+
@MemoIdentity { :>> providedId = "ACT-002"; }
|
|
64
66
|
attribute :>> name = "ClinicianNurse";
|
|
65
67
|
attribute :>> trainingLevel = "trained clinical user; programs prescriptions and responds to alarms";
|
|
66
68
|
attribute :>> description = "Loads the drug reservoir, programs and confirms the prescription, starts/stops therapy, and responds to alarms.";
|
|
@@ -71,7 +73,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
71
73
|
}
|
|
72
74
|
part actorPrescriber : User {
|
|
73
75
|
attribute :>> actorKind = ActorKind::clinician;
|
|
74
|
-
|
|
76
|
+
@MemoIdentity { :>> providedId = "ACT-003"; }
|
|
75
77
|
attribute :>> name = "PrescribingPhysician";
|
|
76
78
|
attribute :>> trainingLevel = "licensed prescriber";
|
|
77
79
|
attribute :>> description = "Prescribes drug, concentration, basal rate, bolus volume, lockout interval, and maximum dose limits.";
|
|
@@ -79,7 +81,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
79
81
|
}
|
|
80
82
|
part actorPharmacist : User {
|
|
81
83
|
attribute :>> actorKind = ActorKind::clinician;
|
|
82
|
-
|
|
84
|
+
@MemoIdentity { :>> providedId = "ACT-004"; }
|
|
83
85
|
attribute :>> name = "Pharmacist";
|
|
84
86
|
attribute :>> trainingLevel = "licensed pharmacist";
|
|
85
87
|
attribute :>> description = "Prepares the drug reservoir and verifies drug and concentration against the prescription.";
|
|
@@ -87,7 +89,7 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
87
89
|
}
|
|
88
90
|
part actorTechnician : User {
|
|
89
91
|
attribute :>> actorKind = ActorKind::technician;
|
|
90
|
-
|
|
92
|
+
@MemoIdentity { :>> providedId = "ACT-005"; }
|
|
91
93
|
attribute :>> name = "BiomedicalTechnician";
|
|
92
94
|
attribute :>> trainingLevel = "service-trained; authenticated service access";
|
|
93
95
|
attribute :>> description = "Performs maintenance, battery replacement, and calibration through the service interface.";
|
|
@@ -96,43 +98,46 @@ package memo_examples_gpca_pump_gpca_context {
|
|
|
96
98
|
|
|
97
99
|
// ── Foreseeable use errors (IEC 62366-1, AAMI TIR PCA) ──────
|
|
98
100
|
part ueMisprogrammedRate : UseError {
|
|
99
|
-
|
|
101
|
+
@MemoIdentity { :>> providedId = "UE-001"; }
|
|
100
102
|
attribute :>> name = "MisprogrammedInfusionParameters";
|
|
101
103
|
attribute :>> errorCategory = UseErrorCategoryKind::actionCategory;
|
|
102
|
-
attribute :>> taskReference = "OA-003: Program prescription";
|
|
103
104
|
attribute :>> severity = SeverityKind::catastrophic;
|
|
104
105
|
attribute :>> rootCauseType = "decimal-point / unit entry slip during prescription programming";
|
|
105
106
|
attribute :>> description = "Clinician enters a basal rate or bolus volume an order of magnitude off (e.g. mg vs mL, misplaced decimal).";
|
|
106
|
-
|
|
107
|
+
@MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (incorrect dose settings)"; }
|
|
107
108
|
}
|
|
108
109
|
part ueBolusByProxy : UseError {
|
|
109
|
-
|
|
110
|
+
@MemoIdentity { :>> providedId = "UE-002"; }
|
|
110
111
|
attribute :>> name = "PCAByProxy";
|
|
111
112
|
attribute :>> errorCategory = UseErrorCategoryKind::cognition;
|
|
112
|
-
attribute :>> taskReference = "OA-005: Request patient bolus";
|
|
113
113
|
attribute :>> severity = SeverityKind::catastrophic;
|
|
114
114
|
attribute :>> rootCauseType = "family member or caregiver presses bolus button on behalf of a sedated patient";
|
|
115
115
|
attribute :>> description = "Bolus doses requested by someone other than the patient defeat the inherent safety of patient-limited dosing.";
|
|
116
|
-
|
|
116
|
+
@MemoIdentity { :>> sourceReference = "illustrative — no source"; }
|
|
117
117
|
}
|
|
118
118
|
part ueWrongDrugLoaded : UseError {
|
|
119
|
-
|
|
119
|
+
@MemoIdentity { :>> providedId = "UE-003"; }
|
|
120
120
|
attribute :>> name = "WrongDrugOrConcentrationLoaded";
|
|
121
121
|
attribute :>> errorCategory = UseErrorCategoryKind::cognition;
|
|
122
|
-
attribute :>> taskReference = "OA-002: Load drug reservoir";
|
|
123
122
|
attribute :>> severity = SeverityKind::catastrophic;
|
|
124
123
|
attribute :>> rootCauseType = "reservoir containing wrong drug or concentration mounted without verification";
|
|
125
124
|
attribute :>> description = "Loaded drug or concentration differs from the programmed prescription, so delivered dose differs from intended dose.";
|
|
126
|
-
|
|
125
|
+
@MemoIdentity { :>> sourceReference = "illustrative — no source"; }
|
|
127
126
|
}
|
|
128
127
|
part ueAlarmDisregard : UseError {
|
|
129
|
-
|
|
128
|
+
@MemoIdentity { :>> providedId = "UE-004"; }
|
|
130
129
|
attribute :>> name = "AlarmSilencedAndForgotten";
|
|
131
130
|
attribute :>> errorCategory = UseErrorCategoryKind::memoryRecall;
|
|
132
|
-
attribute :>> taskReference = "OA-006: Respond to alarm";
|
|
133
131
|
attribute :>> severity = SeverityKind::serious;
|
|
134
132
|
attribute :>> rootCauseType = "alarm silenced during high workload and the underlying condition never resolved";
|
|
135
133
|
attribute :>> description = "Clinician silences an alarm and does not return to resolve the underlying condition (e.g. occlusion), interrupting therapy.";
|
|
136
|
-
|
|
134
|
+
@MemoIdentity { :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.8 Use Hazards (attentional/memory failure)"; }
|
|
137
135
|
}
|
|
136
|
+
// Which task each use error is committed during (IEC 62366-1). This was
|
|
137
|
+
// a `taskReference` string naming the task by id and title; nothing could
|
|
138
|
+
// follow it, and CommitsUseError is what the ontology declares for it.
|
|
139
|
+
connection : CommitsUseError connect task ::> oaProgram to useError ::> ueMisprogrammedRate;
|
|
140
|
+
connection : CommitsUseError connect task ::> oaRequestBolus to useError ::> ueBolusByProxy;
|
|
141
|
+
connection : CommitsUseError connect task ::> oaLoadReservoir to useError ::> ueWrongDrugLoaded;
|
|
142
|
+
connection : CommitsUseError connect task ::> oaRespondAlarm to useError ::> ueAlarmDisregard;
|
|
138
143
|
}
|