@memoarchitect/ontology 0.4.4
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/LICENSE +19 -0
- package/README.md +70 -0
- package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +210 -0
- package/examples/gpca-pump/memo.config.yaml +9 -0
- package/examples/gpca-pump/methodology/gpca_methodology.sysml +11 -0
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +25 -0
- package/examples/gpca-pump/methodology/gpca_scope.sysml +25 -0
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +231 -0
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +272 -0
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +81 -0
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +363 -0
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +205 -0
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +113 -0
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +172 -0
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +173 -0
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +1062 -0
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +209 -0
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +53 -0
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1505 -0
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +744 -0
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +144 -0
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +696 -0
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +285 -0
- package/examples/gpca-pump/model/samples/README.md +24 -0
- package/examples/gpca-pump/model/samples/action_flow_view.sysml +72 -0
- package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +9 -0
- package/examples/gpca-pump/model/samples/functional_flow_view.sysml +153 -0
- package/examples/gpca-pump/model/samples/interconnection_view.sysml +93 -0
- package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +99 -0
- package/examples/gpca-pump/model/samples/operational_behaviour_view.sysml +145 -0
- package/examples/gpca-pump/model/samples/tree_view.sysml +56 -0
- package/examples/gpca-pump/model/views/behavior_action_flow_view.sysml +41 -0
- package/examples/gpca-pump/model/views/context_system_context_view.sysml +43 -0
- package/examples/gpca-pump/model/views/cybersecurity_cybersecurity_view.sysml +44 -0
- package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +28 -0
- package/examples/gpca-pump/model/views/document_dhf_index_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_rmf_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_sdd_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_threat_model_view.sysml +28 -0
- package/examples/gpca-pump/model/views/document_usability_view.sysml +28 -0
- package/examples/gpca-pump/model/views/document_vv_view.sysml +29 -0
- package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +42 -0
- package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +41 -0
- package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +43 -0
- package/examples/gpca-pump/model/views/logical_logical_architecture_view.sysml +42 -0
- package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +42 -0
- package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +44 -0
- package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +41 -0
- package/examples/gpca-pump/model/views/operational_use_case_view.sysml +43 -0
- package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +41 -0
- package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +42 -0
- package/examples/gpca-pump/model/views/risk_fmea_view.sysml +42 -0
- package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +44 -0
- package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +43 -0
- package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +42 -0
- package/memo.manifest.yaml +13 -0
- package/methodologies/default/memo.package.yaml +9 -0
- package/methodologies/gpca/memo.package.yaml +9 -0
- package/ontology/memo.package.yaml +8 -0
- package/ontology/memo.rendering.yaml +47 -0
- package/package.json +65 -0
- package/profile/archetypes.yaml +36 -0
- package/profile/memo.package.yaml +9 -0
- package/profile/templates/connected-device/starter.sysml +8 -0
- package/profile/templates/infusion-pump/starter.sysml +8 -0
- package/profile/templates/monitoring-device/starter.sysml +8 -0
- package/profile/templates/samd/starter.sysml +8 -0
- package/src/architecture/analysis/memo_fmea.sysml +91 -0
- package/src/architecture/assurance/memo_assurance.sysml +29 -0
- package/src/architecture/behavior/memo_behavior.sysml +65 -0
- package/src/architecture/constraints/memo_constraints.sysml +14 -0
- package/src/architecture/context/memo_context.sysml +58 -0
- package/src/architecture/cybersecurity/memo_cybersecurity.sysml +99 -0
- package/src/architecture/decisions/memo_decisions.sysml +12 -0
- package/src/architecture/functions/memo_functions.sysml +30 -0
- package/src/architecture/hardware_structure/memo_hardware_structure.sysml +15 -0
- package/src/architecture/interfaces/memo_interfaces.sysml +103 -0
- package/src/architecture/logical_structure/memo_logical_structure.sysml +10 -0
- package/src/architecture/operational/memo_operational.sysml +51 -0
- package/src/architecture/physical/memo_physical_architecture.sysml +19 -0
- package/src/architecture/requirements/memo_requirements.sysml +69 -0
- package/src/architecture/risk/memo_arch_risk.sysml +7 -0
- package/src/architecture/risk/memo_risk.sysml +80 -0
- package/src/architecture/software_structure/memo_software_structure.sysml +44 -0
- package/src/architecture/system/memo_system_analysis.sysml +54 -0
- package/src/artifacts/clinical_safety_report.sysml +12 -0
- package/src/artifacts/cybersecurity_assessment_report.sysml +12 -0
- package/src/artifacts/definitions/memo_artifact_definitions.sysml +12 -0
- package/src/artifacts/design_change_log.sysml +12 -0
- package/src/artifacts/design_history_file_index.sysml +12 -0
- package/src/artifacts/design_input_plan.sysml +12 -0
- package/src/artifacts/design_output_plan.sysml +12 -0
- package/src/artifacts/evidence_record.sysml +12 -0
- package/src/artifacts/failure_mode_effects_analysis.sysml +12 -0
- package/src/artifacts/hazard_analysis_report.sysml +12 -0
- package/src/artifacts/labeling_specification.sysml +12 -0
- package/src/artifacts/requirements_specification.sysml +12 -0
- package/src/artifacts/requirements_traceability_matrix.sysml +12 -0
- package/src/artifacts/risk_management_plan.sysml +12 -0
- package/src/artifacts/software_design_description.sysml +12 -0
- package/src/artifacts/software_development_plan.sysml +12 -0
- package/src/artifacts/soup_list.sysml +12 -0
- package/src/artifacts/system_architecture_description.sysml +12 -0
- package/src/artifacts/test_protocol.sysml +12 -0
- package/src/artifacts/test_report.sysml +12 -0
- package/src/artifacts/threat_model_report.sysml +12 -0
- package/src/artifacts/usability_engineering_report.sysml +12 -0
- package/src/compliance/artifacts/memo_artifacts.sysml +13 -0
- package/src/compliance/change/memo_change.sysml +17 -0
- package/src/compliance/dhf-templates/21cfr820/change-record.md +45 -0
- package/src/compliance/dhf-templates/21cfr820/design-input.md +67 -0
- package/src/compliance/dhf-templates/21cfr820/design-output.md +80 -0
- package/src/compliance/dhf-templates/21cfr820/design-review.md +51 -0
- package/src/compliance/dhf-templates/21cfr820/design-validation.md +64 -0
- package/src/compliance/dhf-templates/21cfr820/design-verification.md +57 -0
- package/src/compliance/dhf-templates/21cfr820/dhf-index.md +111 -0
- package/src/compliance/dhf-templates/21cfr820/transfer-plan.md +50 -0
- package/src/compliance/dhf-templates/21cfr820/user-needs.md +81 -0
- package/src/compliance/dhf-templates/21cfr820/vv-plan.md +89 -0
- package/src/compliance/dhf-templates/21cfr820/vv-report.md +85 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/incident-response.md +66 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/postmarket-surveillance.md +63 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/security-arch.md +83 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/threat-model.md +100 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/vuln-assessment.md +77 -0
- package/src/compliance/dhf-templates/iec-62304/change-control.md +40 -0
- package/src/compliance/dhf-templates/iec-62304/detailed-design.md +69 -0
- package/src/compliance/dhf-templates/iec-62304/integration-test.md +68 -0
- package/src/compliance/dhf-templates/iec-62304/sad.md +115 -0
- package/src/compliance/dhf-templates/iec-62304/sbom.md +67 -0
- package/src/compliance/dhf-templates/iec-62304/sdp.md +108 -0
- package/src/compliance/dhf-templates/iec-62304/soup.md +77 -0
- package/src/compliance/dhf-templates/iec-62304/srs.md +138 -0
- package/src/compliance/dhf-templates/iec-62304/sw-traceability.md +111 -0
- package/src/compliance/dhf-templates/iec-62304/system-test.md +67 -0
- package/src/compliance/dhf-templates/iec-62366/formative-eval.md +47 -0
- package/src/compliance/dhf-templates/iec-62366/summative-eval.md +69 -0
- package/src/compliance/dhf-templates/iec-62366/task-analysis.md +57 -0
- package/src/compliance/dhf-templates/iec-62366/ue-plan.md +81 -0
- package/src/compliance/dhf-templates/iec-62366/ui-spec.md +61 -0
- package/src/compliance/dhf-templates/iec-62366/urra.md +74 -0
- package/src/compliance/dhf-templates/iec-62366/use-spec.md +61 -0
- package/src/compliance/dhf-templates/iso-14971/fmea.md +93 -0
- package/src/compliance/dhf-templates/iso-14971/fta.md +70 -0
- package/src/compliance/dhf-templates/iso-14971/har.md +165 -0
- package/src/compliance/dhf-templates/iso-14971/risk-benefit.md +51 -0
- package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +51 -0
- package/src/compliance/dhf-templates/iso-14971/rmp.md +169 -0
- package/src/compliance/dhf-templates/iso-14971/rmr.md +101 -0
- package/src/compliance/dhf-templates/shared/snippets/approval-block.md +16 -0
- package/src/compliance/dhf-templates/shared/snippets/document-control-header.md +15 -0
- package/src/compliance/dhf-templates/shared/snippets/references-section.md +16 -0
- package/src/compliance/dhf-templates/shared/snippets/revision-history-table.md +11 -0
- package/src/compliance/document_views/memo_document_views.sysml +7 -0
- package/src/compliance/iso14971/risk_management_file.sysml +16 -0
- package/src/compliance/postmarket/memo_postmarket.sysml +16 -0
- package/src/core/common/memo_common.sysml +50 -0
- package/src/core/consistency_rules/consistency_rules.sysml +41 -0
- package/src/core/dimensions/dimensions.sysml +37 -0
- package/src/core/enumerations/memo_enumerations.sysml +562 -0
- package/src/core/methodology_scope/methodology_scope.sysml +46 -0
- package/src/core/relationships/memo_relationships.sysml +230 -0
- package/src/core/semantics/semantics.sysml +20 -0
- package/src/core/stdlib/collections.sysml +6 -0
- package/src/core/stdlib/functions.sysml +6 -0
- package/src/core/stdlib/scalars.sysml +6 -0
- package/src/core/stdlib/time.sysml +6 -0
- package/src/medical_device_library.sysml +100 -0
- package/src/memo_namespaces.sysml +668 -0
- package/src/methodology/LICENSES/MIT.txt +19 -0
- package/src/methodology/memo_archetypes.sysml +93 -0
- package/src/methodology/memo_core.sysml +53 -0
- package/src/methodology/memo_gates.sysml +11 -0
- package/src/methodology/memo_patterns.sysml +12 -0
- package/src/methodology/memo_profiles.sysml +218 -0
- package/src/methodology/memo_rules.sysml +15 -0
- package/src/methodology/memo_viewpoints.sysml +5 -0
- package/src/methodology/memo_workflow.sysml +14 -0
- package/src/rules/closure/closure_rules.sysml +180 -0
- package/src/rules/coverage/coverage_rules.sysml +258 -0
- package/src/rules/crosslayer/cross_layer_rules.sysml +38 -0
- package/src/rules/lifecycle/lifecycle_rules.sysml +41 -0
- package/src/rules/quantitative/quantitative_rules.sysml +34 -0
- package/src/viewpoints/clinical/clinical_evidence_view.sysml +13 -0
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +25 -0
- package/src/viewpoints/context/context_viewpoint.sysml +25 -0
- package/src/viewpoints/context/system_context_view.sysml +29 -0
- package/src/viewpoints/cybersecurity/cybersecurity_assessment_view.sysml +13 -0
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +27 -0
- package/src/viewpoints/cybersecurity/threat_model_view.sysml +13 -0
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +82 -0
- package/src/viewpoints/functional/function_allocation_view.sysml +29 -0
- package/src/viewpoints/functional/functional_viewpoint.sysml +25 -0
- package/src/viewpoints/functional/system_functional_tree_view.sysml +29 -0
- package/src/viewpoints/logical/logical_architecture_view.sysml +29 -0
- package/src/viewpoints/logical/logical_viewpoint.sysml +25 -0
- package/src/viewpoints/operational/operational_viewpoint.sysml +25 -0
- package/src/viewpoints/operational/use_case_view.sysml +29 -0
- package/src/viewpoints/physical/network_topology_view.sysml +29 -0
- package/src/viewpoints/physical/physical_bom_view.sysml +29 -0
- package/src/viewpoints/physical/physical_viewpoint.sysml +25 -0
- package/src/viewpoints/requirements/requirements_traceability_view.sysml +29 -0
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +25 -0
- package/src/viewpoints/risk/risk_chain_view.sysml +30 -0
- package/src/viewpoints/risk/risk_viewpoint.sysml +25 -0
- package/src/viewpoints/software/software_architecture_view.sysml +29 -0
- package/src/viewpoints/software/software_viewpoint.sysml +25 -0
- package/src/viewpoints/usability/usability_engineering_view.sysml +13 -0
- package/src/viewpoints/usability/usability_viewpoint.sysml +25 -0
- package/src/viewpoints/verification/verification_coverage_view.sysml +29 -0
- package/src/viewpoints/verification/verification_viewpoint.sysml +25 -0
- package/template/memo.package.yaml +5 -0
- package/template/src/catalog/starter.sysml +12 -0
- package/template/src/documents/.gitkeep +1 -0
- package/template/src/views/.gitkeep +1 -0
|
@@ -0,0 +1,363 @@
|
|
|
1
|
+
package memo_examples_gpca_pump_model_catalog_gpca_behavior_modes {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_architecture_behavior::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
// ═════════════════════════════════════════════════════════════
|
|
8
|
+
// GPCA mode machine per CriSys Ch.4 Fig 4.1 mode hierarchy:
|
|
9
|
+
// OFF, ON { IDLE, THERAPY { PAUSED, ACTIVE { BASAL,
|
|
10
|
+
// SQUARE BOLUS, PATIENT BOLUS } } }
|
|
11
|
+
// Transitions mirror REQ 4/5/12/13/19-23/28-39/46/47.
|
|
12
|
+
// PAUSED delivers KVO flow (REQ 43), not zero. Square boluses
|
|
13
|
+
// auto-initiate on the prescribed schedule (REQ 24), with no
|
|
14
|
+
// external trigger. Mode-tree containment edges (Composes)
|
|
15
|
+
// live in gpca_trace.sysml.
|
|
16
|
+
// ═════════════════════════════════════════════════════════════
|
|
17
|
+
part topLevelModeMachine : BehaviorMachine {
|
|
18
|
+
attribute :>> id = "BM-001";
|
|
19
|
+
attribute :>> name = "TopLevelModeMachine";
|
|
20
|
+
attribute :>> machineKind = "hierarchical state machine";
|
|
21
|
+
attribute :>> executionSemantics = "single-step synchronous; sub-modes inherit all parent-mode requirements";
|
|
22
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1 Fig 4.1";
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// ── Mode states (Fig 4.1) ───────────────────────────────────
|
|
26
|
+
part modeOFF : ModeState {
|
|
27
|
+
attribute :>> id = "MODE-000";
|
|
28
|
+
attribute :>> name = "OFF";
|
|
29
|
+
attribute :>> modeKind = "top (default)";
|
|
30
|
+
attribute :>> description = "No functionality; the GPCA is turned off. FlowRate_output = 0 (REQ 6).";
|
|
31
|
+
attribute :>> entryCondition = "System_stop_prog commanded while ON (REQ 5); default mode";
|
|
32
|
+
attribute :>> exitCondition = "System_start_prog commanded (REQ 4)";
|
|
33
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.2";
|
|
34
|
+
}
|
|
35
|
+
part modeON : ModeState {
|
|
36
|
+
attribute :>> id = "MODE-001";
|
|
37
|
+
attribute :>> name = "ON";
|
|
38
|
+
attribute :>> modeKind = "operational parent";
|
|
39
|
+
attribute :>> description = "Topmost operational mode: prescription configuration (REQ 8), infusion initiation gating (REQ 7, 9), notification (REQ 10) and logging (REQ 11) are available.";
|
|
40
|
+
attribute :>> entryCondition = "System_start_prog from OFF; A.4 variables set to defaults (REQ 4)";
|
|
41
|
+
attribute :>> exitCondition = "System_stop_prog: stop infusion, cancel all notifications (REQ 5)";
|
|
42
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3";
|
|
43
|
+
}
|
|
44
|
+
part modeIDLE : ModeState {
|
|
45
|
+
attribute :>> id = "MODE-002";
|
|
46
|
+
attribute :>> name = "ON.IDLE";
|
|
47
|
+
attribute :>> modeKind = "idle";
|
|
48
|
+
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).";
|
|
49
|
+
attribute :>> entryCondition = "OFF -> ON transition (REQ 4); infusion complete (REQ 28); PAUSED inhibit (REQ 47)";
|
|
50
|
+
attribute :>> exitCondition = "confirmed second Infusion_initiate_prog (REQ 12/13)";
|
|
51
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4";
|
|
52
|
+
}
|
|
53
|
+
part modeTHERAPY : ModeState {
|
|
54
|
+
attribute :>> id = "MODE-003";
|
|
55
|
+
attribute :>> name = "ON.THERAPY";
|
|
56
|
+
attribute :>> modeKind = "therapy parent";
|
|
57
|
+
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).";
|
|
58
|
+
attribute :>> entryCondition = "infusion initiated (REQ 12/13)";
|
|
59
|
+
attribute :>> exitCondition = "infusion complete to IDLE (REQ 28); manual stop from PAUSED (REQ 47); system stop (REQ 5)";
|
|
60
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5";
|
|
61
|
+
}
|
|
62
|
+
part modePAUSED : ModeState {
|
|
63
|
+
attribute :>> id = "MODE-004";
|
|
64
|
+
attribute :>> name = "ON.THERAPY.PAUSED";
|
|
65
|
+
attribute :>> modeKind = "paused (KVO delivery)";
|
|
66
|
+
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).";
|
|
67
|
+
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";
|
|
68
|
+
attribute :>> exitCondition = "Infusion_initiate_prog with Inhibited_Infusion_macro = FALSE (REQ 46); Infusion_inhibit_prog to IDLE (REQ 47)";
|
|
69
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10 (REQ 43-47)";
|
|
70
|
+
}
|
|
71
|
+
part modeACTIVE : ModeState {
|
|
72
|
+
attribute :>> id = "MODE-005";
|
|
73
|
+
attribute :>> name = "ON.THERAPY.ACTIVE";
|
|
74
|
+
attribute :>> modeKind = "active parent";
|
|
75
|
+
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.";
|
|
76
|
+
attribute :>> entryCondition = "infusion initiated (REQ 12) or resumed (REQ 46)";
|
|
77
|
+
attribute :>> exitCondition = "infusion complete (REQ 28); PAUSED via REQ 29/30/37-39";
|
|
78
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6";
|
|
79
|
+
}
|
|
80
|
+
part modeBASAL : ModeState {
|
|
81
|
+
attribute :>> id = "MODE-006";
|
|
82
|
+
attribute :>> name = "ON.THERAPY.ACTIVE.BASAL";
|
|
83
|
+
attribute :>> modeKind = "active-basal";
|
|
84
|
+
attribute :>> description = "Constant-rate delivery at FlowRate_basal_prog within Tolerance_Max_const (REQ 40). FlowRate_Mode_macro = FlowRate_basal_prog.";
|
|
85
|
+
attribute :>> entryCondition = "infusion initiated/resumed (REQ 12/46); square bolus ended (REQ 34); patient bolus ended (REQ 35)";
|
|
86
|
+
attribute :>> exitCondition = "scheduled square bolus (REQ 31); patient bolus granted (REQ 32); Inhibited_Infusion_macro (REQ 37)";
|
|
87
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.7";
|
|
88
|
+
}
|
|
89
|
+
part modeSQUARE : ModeState {
|
|
90
|
+
attribute :>> id = "MODE-007";
|
|
91
|
+
attribute :>> name = "ON.THERAPY.ACTIVE.SQUARE_BOLUS";
|
|
92
|
+
attribute :>> modeKind = "active-square-bolus (auto-scheduled)";
|
|
93
|
+
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.";
|
|
94
|
+
attribute :>> entryCondition = "scheduled start per REQ 24 with REQ 31 guards; patient bolus end with square scheduled (REQ 36)";
|
|
95
|
+
attribute :>> exitCondition = "scheduled end or Inhibited_Bolus_macro (REQ 34); patient bolus granted (REQ 33); inhibits (REQ 39)";
|
|
96
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.8";
|
|
97
|
+
}
|
|
98
|
+
part modePBOLUS : ModeState {
|
|
99
|
+
attribute :>> id = "MODE-008";
|
|
100
|
+
attribute :>> name = "ON.THERAPY.ACTIVE.PATIENT_BOLUS";
|
|
101
|
+
attribute :>> modeKind = "active-patient-bolus";
|
|
102
|
+
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.";
|
|
103
|
+
attribute :>> entryCondition = "BolusRequest_prog with no REQ 25 ignore condition (REQ 32/33)";
|
|
104
|
+
attribute :>> exitCondition = "Inhibited_PatientBolus_macro or duration >= Duration_pbolus_prog (REQ 35/36); inhibits (REQ 38)";
|
|
105
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9";
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// ── Mode transitions (CriSys §4.1, 1:1 with source REQs) ────
|
|
109
|
+
part trSystemStart : Transition {
|
|
110
|
+
attribute :>> id = "TR-001"; attribute :>> name = "SystemStartToIdle";
|
|
111
|
+
attribute :>> sourceState = "OFF"; attribute :>> targetState = "ON.IDLE";
|
|
112
|
+
attribute :>> trigger = "System_start_prog commanded";
|
|
113
|
+
attribute :>> guardSummary = "none in source (MEMO extension REQ-X-02 additionally gates therapy on POST)";
|
|
114
|
+
attribute :>> effectSummary = "A.4 variables set to default values (REQ 4)";
|
|
115
|
+
attribute :>> priority = 1;
|
|
116
|
+
attribute :>> sameStepCritical = false;
|
|
117
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.2 (REQ 4)";
|
|
118
|
+
}
|
|
119
|
+
part trSystemStop : Transition {
|
|
120
|
+
attribute :>> id = "TR-002"; attribute :>> name = "SystemStopToOff";
|
|
121
|
+
attribute :>> sourceState = "ON"; attribute :>> targetState = "OFF";
|
|
122
|
+
attribute :>> trigger = "System_stop_prog commanded";
|
|
123
|
+
attribute :>> guardSummary = "none — allowed from any ON sub-mode";
|
|
124
|
+
attribute :>> effectSummary = "stop infusion, cancel all notifications (REQ 5)";
|
|
125
|
+
attribute :>> priority = 1;
|
|
126
|
+
attribute :>> sameStepCritical = false;
|
|
127
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.1.2 (REQ 5)";
|
|
128
|
+
}
|
|
129
|
+
part trStartTherapy : Transition {
|
|
130
|
+
attribute :>> id = "TR-003"; attribute :>> name = "ConfirmedInitiateToBasal";
|
|
131
|
+
attribute :>> sourceState = "ON.IDLE"; attribute :>> targetState = "ON.THERAPY.ACTIVE.BASAL";
|
|
132
|
+
attribute :>> trigger = "second Infusion_initiate_prog (confirmation per REQ 9)";
|
|
133
|
+
attribute :>> guardSummary = "Inhibited_Infusion_macro = FALSE; saved prescription available (REQ 7)";
|
|
134
|
+
attribute :>> effectSummary = "Actual_Infusion_Duration_macro = 0; Actual_Volume_Infused_macro = 0 (REQ 12)";
|
|
135
|
+
attribute :>> priority = 2;
|
|
136
|
+
attribute :>> sameStepCritical = false;
|
|
137
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.2 (REQ 12)";
|
|
138
|
+
}
|
|
139
|
+
part trInitiateWhileInhibited : Transition {
|
|
140
|
+
attribute :>> id = "TR-004"; attribute :>> name = "ConfirmedInitiateWhileInhibitedToPaused";
|
|
141
|
+
attribute :>> sourceState = "ON.IDLE"; attribute :>> targetState = "ON.THERAPY.PAUSED";
|
|
142
|
+
attribute :>> trigger = "second Infusion_initiate_prog (confirmation per REQ 9)";
|
|
143
|
+
attribute :>> guardSummary = "Inhibited_Infusion_macro = TRUE";
|
|
144
|
+
attribute :>> effectSummary = "macros reset; 'Infusion Inhibited' actions per REQ 59 (REQ 13)";
|
|
145
|
+
attribute :>> priority = 2;
|
|
146
|
+
attribute :>> sameStepCritical = false;
|
|
147
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.3.2 (REQ 13)";
|
|
148
|
+
}
|
|
149
|
+
part trAlarmPause : Transition {
|
|
150
|
+
attribute :>> id = "TR-005"; attribute :>> name = "TherapyAlarmToPausedKvo";
|
|
151
|
+
attribute :>> sourceState = "ON.THERAPY"; attribute :>> targetState = "ON.THERAPY.PAUSED";
|
|
152
|
+
attribute :>> trigger = "over-infusion flow rate (REQ 19), over-infusion VTBI (REQ 20), air embolism (REQ 21), reverse delivery (REQ 22), or empty reservoir (REQ 23) condition";
|
|
153
|
+
attribute :>> guardSummary = "none — unconditional from any THERAPY sub-mode";
|
|
154
|
+
attribute :>> effectSummary = "REQ 59 actions for the notification; PAUSED delivers FlowRate_kvo_hd keep-vein-open flow (REQ 43), not zero";
|
|
155
|
+
attribute :>> priority = 1;
|
|
156
|
+
attribute :>> sameStepCritical = true;
|
|
157
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 19-23)";
|
|
158
|
+
}
|
|
159
|
+
part trInfusionComplete : Transition {
|
|
160
|
+
attribute :>> id = "TR-006"; attribute :>> name = "InfusionCompleteToIdle";
|
|
161
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE"; attribute :>> targetState = "ON.IDLE";
|
|
162
|
+
attribute :>> trigger = "Actual_Infusion_Duration_macro >= Duration_total_prog OR Actual_Volume_Infused_macro >= VTBI_total_prog";
|
|
163
|
+
attribute :>> guardSummary = "none";
|
|
164
|
+
attribute :>> effectSummary = "'Infusion Complete' actions per REQ 59; completion record in operational log (REQ 79)";
|
|
165
|
+
attribute :>> priority = 2;
|
|
166
|
+
attribute :>> sameStepCritical = false;
|
|
167
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 28)";
|
|
168
|
+
}
|
|
169
|
+
part trManualInhibit : Transition {
|
|
170
|
+
attribute :>> id = "TR-007"; attribute :>> name = "ManualInhibitToPaused";
|
|
171
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE"; attribute :>> targetState = "ON.THERAPY.PAUSED";
|
|
172
|
+
attribute :>> trigger = "Infusion_inhibit_prog commanded";
|
|
173
|
+
attribute :>> guardSummary = "none";
|
|
174
|
+
attribute :>> effectSummary = "'Infusion Manually Inhibited' actions per REQ 59";
|
|
175
|
+
attribute :>> priority = 2;
|
|
176
|
+
attribute :>> sameStepCritical = false;
|
|
177
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 29)";
|
|
178
|
+
}
|
|
179
|
+
part trAllInhibited : Transition {
|
|
180
|
+
attribute :>> id = "TR-008"; attribute :>> name = "AllInhibitedToPaused";
|
|
181
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE"; attribute :>> targetState = "ON.THERAPY.PAUSED";
|
|
182
|
+
attribute :>> trigger = "Inhibited_Infusion_macro AND Inhibited_Bolus_macro AND Inhibited_PatientBolus_macro all TRUE";
|
|
183
|
+
attribute :>> guardSummary = "none";
|
|
184
|
+
attribute :>> effectSummary = "therapy paused at KVO flow";
|
|
185
|
+
attribute :>> priority = 1;
|
|
186
|
+
attribute :>> sameStepCritical = true;
|
|
187
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 30)";
|
|
188
|
+
}
|
|
189
|
+
part trSquareBolus : Transition {
|
|
190
|
+
attribute :>> id = "TR-009"; attribute :>> name = "ScheduledSquareBolusStart";
|
|
191
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.BASAL"; attribute :>> targetState = "ON.THERAPY.ACTIVE.SQUARE_BOLUS";
|
|
192
|
+
attribute :>> trigger = "scheduled SQUARE BOLUS start — auto-initiates every Interval_sbolus_prog for Duration_sbolus_prog during Duration_total_prog (REQ 24); no external trigger";
|
|
193
|
+
attribute :>> guardSummary = "Inhibited_Bolus_macro = FALSE AND Inhibited_Infusion_macro = FALSE AND (no BolusRequest_prog OR a REQ 25 ignore condition holds)";
|
|
194
|
+
attribute :>> effectSummary = "FlowRate_Mode_macro = FlowRate_sbolus_prog";
|
|
195
|
+
attribute :>> priority = 3;
|
|
196
|
+
attribute :>> sameStepCritical = false;
|
|
197
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 31) and §4.1.6.1 (REQ 24)";
|
|
198
|
+
}
|
|
199
|
+
part trPatientBolus : Transition {
|
|
200
|
+
attribute :>> id = "TR-010"; attribute :>> name = "BasalToPatientBolus";
|
|
201
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.BASAL"; attribute :>> targetState = "ON.THERAPY.ACTIVE.PATIENT_BOLUS";
|
|
202
|
+
attribute :>> trigger = "BolusRequest_prog";
|
|
203
|
+
attribute :>> guardSummary = "none of the REQ 25 ignore conditions hold (inhibits, lockout, bolus count, already in PATIENT BOLUS)";
|
|
204
|
+
attribute :>> effectSummary = "FlowRate_Mode_macro = FlowRate_pbolus_prog";
|
|
205
|
+
attribute :>> priority = 3;
|
|
206
|
+
attribute :>> sameStepCritical = false;
|
|
207
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 32)";
|
|
208
|
+
}
|
|
209
|
+
part trSquareToPatientBolus : Transition {
|
|
210
|
+
attribute :>> id = "TR-011"; attribute :>> name = "SquareBolusToPatientBolus";
|
|
211
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.SQUARE_BOLUS"; attribute :>> targetState = "ON.THERAPY.ACTIVE.PATIENT_BOLUS";
|
|
212
|
+
attribute :>> trigger = "BolusRequest_prog";
|
|
213
|
+
attribute :>> guardSummary = "none of the REQ 25 ignore conditions hold";
|
|
214
|
+
attribute :>> effectSummary = "patient bolus interrupts the square bolus; FlowRate_Mode_macro = FlowRate_pbolus_prog";
|
|
215
|
+
attribute :>> priority = 3;
|
|
216
|
+
attribute :>> sameStepCritical = false;
|
|
217
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 33)";
|
|
218
|
+
}
|
|
219
|
+
part trSquareToBasal : Transition {
|
|
220
|
+
attribute :>> id = "TR-012"; attribute :>> name = "SquareBolusEndToBasal";
|
|
221
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.SQUARE_BOLUS"; attribute :>> targetState = "ON.THERAPY.ACTIVE.BASAL";
|
|
222
|
+
attribute :>> trigger = "Inhibited_Bolus_macro = TRUE or scheduled square bolus end (REQ 24)";
|
|
223
|
+
attribute :>> guardSummary = "Inhibited_Infusion_macro = FALSE AND (no BolusRequest_prog OR a REQ 25 ignore condition holds)";
|
|
224
|
+
attribute :>> effectSummary = "FlowRate_Mode_macro = FlowRate_basal_prog";
|
|
225
|
+
attribute :>> priority = 3;
|
|
226
|
+
attribute :>> sameStepCritical = false;
|
|
227
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 34)";
|
|
228
|
+
}
|
|
229
|
+
part trPatientBolusToBasal : Transition {
|
|
230
|
+
attribute :>> id = "TR-013"; attribute :>> name = "PatientBolusEndToBasal";
|
|
231
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.PATIENT_BOLUS"; attribute :>> targetState = "ON.THERAPY.ACTIVE.BASAL";
|
|
232
|
+
attribute :>> trigger = "Inhibited_PatientBolus_macro = TRUE or patient-bolus duration >= Duration_pbolus_prog";
|
|
233
|
+
attribute :>> guardSummary = "Inhibited_Infusion_macro = FALSE AND (no square bolus scheduled in progress OR (square bolus scheduled AND Inhibited_Bolus_macro = TRUE))";
|
|
234
|
+
attribute :>> effectSummary = "patient bolus delivery stopped; FlowRate_Mode_macro = FlowRate_basal_prog";
|
|
235
|
+
attribute :>> priority = 3;
|
|
236
|
+
attribute :>> sameStepCritical = false;
|
|
237
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 35)";
|
|
238
|
+
}
|
|
239
|
+
part trPatientBolusToSquare : Transition {
|
|
240
|
+
attribute :>> id = "TR-014"; attribute :>> name = "PatientBolusEndToSquareBolus";
|
|
241
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.PATIENT_BOLUS"; attribute :>> targetState = "ON.THERAPY.ACTIVE.SQUARE_BOLUS";
|
|
242
|
+
attribute :>> trigger = "Inhibited_PatientBolus_macro = TRUE or patient-bolus duration >= Duration_pbolus_prog";
|
|
243
|
+
attribute :>> guardSummary = "Inhibited_Infusion_macro = FALSE AND a square bolus is scheduled to be in progress AND Inhibited_Bolus_macro = FALSE";
|
|
244
|
+
attribute :>> effectSummary = "patient bolus delivery stopped; scheduled square bolus resumes";
|
|
245
|
+
attribute :>> priority = 3;
|
|
246
|
+
attribute :>> sameStepCritical = false;
|
|
247
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 36)";
|
|
248
|
+
}
|
|
249
|
+
part trBasalInhibit : Transition {
|
|
250
|
+
attribute :>> id = "TR-015"; attribute :>> name = "BasalInhibitToPaused";
|
|
251
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.BASAL"; attribute :>> targetState = "ON.THERAPY.PAUSED";
|
|
252
|
+
attribute :>> trigger = "Inhibited_Infusion_macro = TRUE";
|
|
253
|
+
attribute :>> guardSummary = "none";
|
|
254
|
+
attribute :>> effectSummary = "therapy paused at KVO flow";
|
|
255
|
+
attribute :>> priority = 1;
|
|
256
|
+
attribute :>> sameStepCritical = true;
|
|
257
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 37)";
|
|
258
|
+
}
|
|
259
|
+
part trPatientBolusInhibit : Transition {
|
|
260
|
+
attribute :>> id = "TR-016"; attribute :>> name = "PatientBolusInhibitToPaused";
|
|
261
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.PATIENT_BOLUS"; attribute :>> targetState = "ON.THERAPY.PAUSED";
|
|
262
|
+
attribute :>> trigger = "Inhibited_PatientBolus_macro = TRUE AND Inhibited_Infusion_macro = TRUE";
|
|
263
|
+
attribute :>> guardSummary = "none";
|
|
264
|
+
attribute :>> effectSummary = "therapy paused at KVO flow";
|
|
265
|
+
attribute :>> priority = 1;
|
|
266
|
+
attribute :>> sameStepCritical = true;
|
|
267
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 38)";
|
|
268
|
+
}
|
|
269
|
+
part trSquareInhibit : Transition {
|
|
270
|
+
attribute :>> id = "TR-017"; attribute :>> name = "SquareBolusInhibitToPaused";
|
|
271
|
+
attribute :>> sourceState = "ON.THERAPY.ACTIVE.SQUARE_BOLUS"; attribute :>> targetState = "ON.THERAPY.PAUSED";
|
|
272
|
+
attribute :>> trigger = "Inhibited_Bolus_macro = TRUE AND Inhibited_Infusion_macro = TRUE";
|
|
273
|
+
attribute :>> guardSummary = "none";
|
|
274
|
+
attribute :>> effectSummary = "therapy paused at KVO flow";
|
|
275
|
+
attribute :>> priority = 1;
|
|
276
|
+
attribute :>> sameStepCritical = true;
|
|
277
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6.2 (REQ 39)";
|
|
278
|
+
}
|
|
279
|
+
part trResume : Transition {
|
|
280
|
+
attribute :>> id = "TR-018"; attribute :>> name = "PausedResumeToBasal";
|
|
281
|
+
attribute :>> sourceState = "ON.THERAPY.PAUSED"; attribute :>> targetState = "ON.THERAPY.ACTIVE.BASAL";
|
|
282
|
+
attribute :>> trigger = "Infusion_initiate_prog";
|
|
283
|
+
attribute :>> guardSummary = "Inhibited_Infusion_macro = FALSE (while TRUE, no transition occurs — REQ 45)";
|
|
284
|
+
attribute :>> effectSummary = "basal flow re-established";
|
|
285
|
+
attribute :>> priority = 2;
|
|
286
|
+
attribute :>> sameStepCritical = false;
|
|
287
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.2 (REQ 46)";
|
|
288
|
+
}
|
|
289
|
+
part trPausedStop : Transition {
|
|
290
|
+
attribute :>> id = "TR-019"; attribute :>> name = "PausedInhibitToIdle";
|
|
291
|
+
attribute :>> sourceState = "ON.THERAPY.PAUSED"; attribute :>> targetState = "ON.IDLE";
|
|
292
|
+
attribute :>> trigger = "Infusion_inhibit_prog commanded";
|
|
293
|
+
attribute :>> guardSummary = "none";
|
|
294
|
+
attribute :>> effectSummary = "'Infusion Stopped Manually' actions per REQ 59";
|
|
295
|
+
attribute :>> priority = 2;
|
|
296
|
+
attribute :>> sameStepCritical = false;
|
|
297
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.2 (REQ 47)";
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// ── Behavior properties and timing constraints ──────────────
|
|
301
|
+
part propAlarmStopsSameStep : BehaviorProperty {
|
|
302
|
+
attribute :>> id = "BP-002";
|
|
303
|
+
attribute :>> name = "AlarmResponseSameStepKvo";
|
|
304
|
+
attribute :>> propertyKind = BehaviorPropertyKind::safetyProperty;
|
|
305
|
+
attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
|
|
306
|
+
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";
|
|
307
|
+
attribute :>> sourceReference = "CITE-002: CriSys GPCA AADL v2.0, GPCA_SW.aadl (ALARM_to_IM immediate) and AGREE flow <= KVO guarantees";
|
|
308
|
+
}
|
|
309
|
+
part propPausedNoResumeWhileInhibited : BehaviorProperty {
|
|
310
|
+
attribute :>> id = "BP-004";
|
|
311
|
+
attribute :>> name = "PausedNoTransitionWhileInhibited";
|
|
312
|
+
attribute :>> propertyKind = BehaviorPropertyKind::stateInvariant;
|
|
313
|
+
attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
|
|
314
|
+
attribute :>> formalExpression = "in PAUSED: Infusion_initiate_prog AND Inhibited_Infusion_macro = TRUE => mode unchanged";
|
|
315
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.10.1 (REQ 45)";
|
|
316
|
+
}
|
|
317
|
+
part propModeTimeoutActions : BehaviorProperty {
|
|
318
|
+
attribute :>> id = "BP-005";
|
|
319
|
+
attribute :>> name = "IdleAndPausedTimeoutActions";
|
|
320
|
+
attribute :>> propertyKind = BehaviorPropertyKind::transitionRule;
|
|
321
|
+
attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
|
|
322
|
+
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)";
|
|
323
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.4.1 (REQ 15) and §4.1.10.1 (REQ 44)";
|
|
324
|
+
}
|
|
325
|
+
part propLockoutTimerMonotonic : BehaviorProperty {
|
|
326
|
+
attribute :>> id = "BP-003";
|
|
327
|
+
attribute :>> name = "LockoutTimerNeverShortened";
|
|
328
|
+
attribute :>> propertyKind = BehaviorPropertyKind::stateInvariant;
|
|
329
|
+
attribute :>> languageKind = PropertyLanguageKind::pseudoFormal;
|
|
330
|
+
attribute :>> formalExpression = "lockout_remaining decreases only with elapsed time; no input path resets it early";
|
|
331
|
+
attribute :>> sourceReference = "MEMO extension — supports the REQ 25.3 lockout ignore condition; invariant not stated by the source";
|
|
332
|
+
}
|
|
333
|
+
part tcAlarmLatency : TimingConstraint {
|
|
334
|
+
attribute :>> id = "TC-001";
|
|
335
|
+
attribute :>> name = "AlarmToSafeStateLatency";
|
|
336
|
+
attribute :>> constraintKind = TimingConstraintKind::latency;
|
|
337
|
+
attribute :>> minMs = "0";
|
|
338
|
+
attribute :>> maxMs = "20";
|
|
339
|
+
attribute :>> referenceElement = "FC-002: AlarmDetectionToSafeStateChain";
|
|
340
|
+
attribute :>> verificationMethod = VerificationMethodKind::modelChecking;
|
|
341
|
+
attribute :>> sourceReference = "MEMO extension — illustrative wall-clock budget; the source specifies synchronous same-step (immediate) semantics with no timing figures";
|
|
342
|
+
}
|
|
343
|
+
part tcBolusResponse : TimingConstraint {
|
|
344
|
+
attribute :>> id = "TC-002";
|
|
345
|
+
attribute :>> name = "BolusRequestResponseLatency";
|
|
346
|
+
attribute :>> constraintKind = TimingConstraintKind::latency;
|
|
347
|
+
attribute :>> minMs = "0";
|
|
348
|
+
attribute :>> maxMs = "100";
|
|
349
|
+
attribute :>> referenceElement = "FC-001: PatientBolusChain";
|
|
350
|
+
attribute :>> verificationMethod = VerificationMethodKind::test;
|
|
351
|
+
attribute :>> sourceReference = "MEMO extension — illustrative wall-clock budget; not specified by the source";
|
|
352
|
+
}
|
|
353
|
+
part tcWatchdogTimeout : TimingConstraint {
|
|
354
|
+
attribute :>> id = "TC-003";
|
|
355
|
+
attribute :>> name = "WatchdogTimeout";
|
|
356
|
+
attribute :>> constraintKind = TimingConstraintKind::deadline;
|
|
357
|
+
attribute :>> minMs = "40";
|
|
358
|
+
attribute :>> maxMs = "60";
|
|
359
|
+
attribute :>> referenceElement = "REQ-X-08: WatchdogForcesSafeState";
|
|
360
|
+
attribute :>> verificationMethod = VerificationMethodKind::test;
|
|
361
|
+
attribute :>> sourceReference = "MEMO extension — supports extension requirement REQ-X-08; watchdog not specified by the source";
|
|
362
|
+
}
|
|
363
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
package memo_examples_gpca_pump_model_catalog_gpca_behavior_subsystems {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_architecture_functions::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
// ── Logical functions ───────────────────────────────────────
|
|
8
|
+
part fnAcquireSensors : LogicalFunction {
|
|
9
|
+
attribute :>> id = "FUNC-001";
|
|
10
|
+
attribute :>> name = "AcquireSensorData";
|
|
11
|
+
attribute :>> functionCategory = "sensing";
|
|
12
|
+
attribute :>> trigger = "every 20 ms execution step";
|
|
13
|
+
attribute :>> outputSummary = "Debounced, range-checked sensor status vector";
|
|
14
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
15
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
16
|
+
}
|
|
17
|
+
part fnValidatePrescription : LogicalFunction {
|
|
18
|
+
attribute :>> id = "FUNC-002";
|
|
19
|
+
attribute :>> name = "ValidatePrescription";
|
|
20
|
+
attribute :>> functionCategory = "configuration";
|
|
21
|
+
attribute :>> trigger = "prescription entry or edit";
|
|
22
|
+
attribute :>> outputSummary = "Prescription accepted (within drug-library hard/soft limits) or rejected with reason";
|
|
23
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
24
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
25
|
+
}
|
|
26
|
+
part fnMonitorAlarm : LogicalFunction {
|
|
27
|
+
attribute :>> id = "FUNC-003";
|
|
28
|
+
attribute :>> name = "MonitorExceptionalConditions";
|
|
29
|
+
attribute :>> functionCategory = "alarm";
|
|
30
|
+
attribute :>> trigger = "every 20 ms execution step";
|
|
31
|
+
attribute :>> outputSummary = "Alarm outputs and inhibition conditions";
|
|
32
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
33
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
34
|
+
}
|
|
35
|
+
part fnAnnunciate : LogicalFunction {
|
|
36
|
+
attribute :>> id = "FUNC-004";
|
|
37
|
+
attribute :>> name = "AnnunciateAlarms";
|
|
38
|
+
attribute :>> functionCategory = "alarm";
|
|
39
|
+
attribute :>> trigger = "alarm raised, escalated, or cleared";
|
|
40
|
+
attribute :>> outputSummary = "Priority-coded audible tone and visual message";
|
|
41
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
42
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
43
|
+
}
|
|
44
|
+
part fnManageInfusion : LogicalFunction {
|
|
45
|
+
attribute :>> id = "FUNC-005";
|
|
46
|
+
attribute :>> name = "ManageInfusion";
|
|
47
|
+
attribute :>> functionCategory = "infusion";
|
|
48
|
+
attribute :>> trigger = "mode transitions and each execution step while therapy active";
|
|
49
|
+
attribute :>> outputSummary = "Commanded flow and mode transitions";
|
|
50
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
51
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
52
|
+
}
|
|
53
|
+
part fnEnforceLimits : LogicalFunction {
|
|
54
|
+
attribute :>> id = "FUNC-006";
|
|
55
|
+
attribute :>> name = "EnforceDoseLimits";
|
|
56
|
+
attribute :>> functionCategory = "infusion";
|
|
57
|
+
attribute :>> trigger = "patient bolus request or clinician square bolus command";
|
|
58
|
+
attribute :>> outputSummary = "Bolus authorized or rejected against lockout interval and hourly maximum";
|
|
59
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
60
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
61
|
+
}
|
|
62
|
+
part fnCommandPump : LogicalFunction {
|
|
63
|
+
attribute :>> id = "FUNC-007";
|
|
64
|
+
attribute :>> name = "CommandPumpMotor";
|
|
65
|
+
attribute :>> functionCategory = "actuation";
|
|
66
|
+
attribute :>> trigger = "flow command update";
|
|
67
|
+
attribute :>> outputSummary = "Motor step rate with enable interlock; FlowRate_Mode_macro per mode, KVO floor in PAUSED (REQ 43), zero flow in OFF/IDLE (REQ 6/14)";
|
|
68
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
69
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
70
|
+
}
|
|
71
|
+
part fnLogEvents : LogicalFunction {
|
|
72
|
+
attribute :>> id = "FUNC-008";
|
|
73
|
+
attribute :>> name = "LogTherapyEvents";
|
|
74
|
+
attribute :>> functionCategory = "logging";
|
|
75
|
+
attribute :>> trigger = "dose delivered, mode change, alarm, or configuration change";
|
|
76
|
+
attribute :>> outputSummary = "Timestamped append-only event records";
|
|
77
|
+
attribute :>> concernKind = ConcernKind::regulatory;
|
|
78
|
+
attribute :>> criticality = CriticalityKind::medium;
|
|
79
|
+
}
|
|
80
|
+
part fnManagePower : LogicalFunction {
|
|
81
|
+
attribute :>> id = "FUNC-009";
|
|
82
|
+
attribute :>> name = "ManagePower";
|
|
83
|
+
attribute :>> functionCategory = "platform";
|
|
84
|
+
attribute :>> trigger = "mains-loss signal or battery level change";
|
|
85
|
+
attribute :>> outputSummary = "Power source selection, low/depleted battery conditions";
|
|
86
|
+
attribute :>> concernKind = ConcernKind::reliability;
|
|
87
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
88
|
+
}
|
|
89
|
+
part fnPresentStatus : LogicalFunction {
|
|
90
|
+
attribute :>> id = "FUNC-010";
|
|
91
|
+
attribute :>> name = "PresentStatus";
|
|
92
|
+
attribute :>> functionCategory = "user-interface";
|
|
93
|
+
attribute :>> trigger = "state or prescription change";
|
|
94
|
+
attribute :>> outputSummary = "Mode, prescription, delivered dose, and alarm text on display";
|
|
95
|
+
attribute :>> concernKind = ConcernKind::usability;
|
|
96
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
97
|
+
}
|
|
98
|
+
part fnSelfTest : LogicalFunction {
|
|
99
|
+
attribute :>> id = "FUNC-011";
|
|
100
|
+
attribute :>> name = "ExecuteSelfTest";
|
|
101
|
+
attribute :>> functionCategory = "platform";
|
|
102
|
+
attribute :>> trigger = "power-on and periodic in-service checks";
|
|
103
|
+
attribute :>> outputSummary = "POST pass/fail; CPU, RAM, ROM, and sensor plausibility results";
|
|
104
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
105
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// ── Logical flows ───────────────────────────────────────────
|
|
109
|
+
part lfSensorAcquisition : LogicalFlow {
|
|
110
|
+
attribute :>> id = "LF-001";
|
|
111
|
+
attribute :>> name = "SensorAcquisitionFlow";
|
|
112
|
+
attribute :>> flowKind = FlowKind::measurement;
|
|
113
|
+
attribute :>> direction = DirectionKind::input;
|
|
114
|
+
attribute :>> latencyBudgetMs = 20.0;
|
|
115
|
+
attribute :>> staleAfterMs = 40.0;
|
|
116
|
+
attribute :>> integrityLevel = "class C data path";
|
|
117
|
+
}
|
|
118
|
+
part lfFlowCommand : LogicalFlow {
|
|
119
|
+
attribute :>> id = "LF-002";
|
|
120
|
+
attribute :>> name = "FlowCommandFlow";
|
|
121
|
+
attribute :>> flowKind = FlowKind::command;
|
|
122
|
+
attribute :>> direction = DirectionKind::output;
|
|
123
|
+
attribute :>> latencyBudgetMs = 20.0;
|
|
124
|
+
attribute :>> staleAfterMs = 20.0;
|
|
125
|
+
attribute :>> integrityLevel = "class C command path";
|
|
126
|
+
}
|
|
127
|
+
part lfAlarmSignal : LogicalFlow {
|
|
128
|
+
attribute :>> id = "LF-003";
|
|
129
|
+
attribute :>> name = "AlarmSignalFlow";
|
|
130
|
+
attribute :>> flowKind = FlowKind::alarm;
|
|
131
|
+
attribute :>> direction = DirectionKind::output;
|
|
132
|
+
attribute :>> latencyBudgetMs = 20.0;
|
|
133
|
+
attribute :>> staleAfterMs = 20.0;
|
|
134
|
+
attribute :>> integrityLevel = "class C alarm path; same-step delivery to infusion manager";
|
|
135
|
+
}
|
|
136
|
+
part lfPrescriptionEntry : LogicalFlow {
|
|
137
|
+
attribute :>> id = "LF-004";
|
|
138
|
+
attribute :>> name = "PrescriptionEntryFlow";
|
|
139
|
+
attribute :>> flowKind = FlowKind::configuration;
|
|
140
|
+
attribute :>> direction = DirectionKind::input;
|
|
141
|
+
attribute :>> latencyBudgetMs = 500.0;
|
|
142
|
+
attribute :>> staleAfterMs = 0.0;
|
|
143
|
+
attribute :>> integrityLevel = "confirmed double-entry path";
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// ── Exchange item definitions ───────────────────────────────
|
|
147
|
+
part ddPrescription : DataDefinition {
|
|
148
|
+
attribute :>> id = "DD-001";
|
|
149
|
+
attribute :>> name = "PrescriptionRecord";
|
|
150
|
+
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)";
|
|
151
|
+
attribute :>> unit = "ml/hr, ml, minutes, mg/ml, per hour";
|
|
152
|
+
attribute :>> minValue = "pharmacy-database safe-value lower bounds (lo_hd)";
|
|
153
|
+
attribute :>> maxValue = "pharmacy-database safe-value upper bounds (hi_hd)";
|
|
154
|
+
attribute :>> encoding = "checksummed persistent record";
|
|
155
|
+
attribute :>> timestampRequired = true;
|
|
156
|
+
attribute :>> integrityClass = "class C";
|
|
157
|
+
attribute :>> confidentialityClass = "clinical";
|
|
158
|
+
attribute :>> availabilityClass = "must survive power loss";
|
|
159
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §3.1.1 Prescription Data";
|
|
160
|
+
}
|
|
161
|
+
part ddBolusRequest : DataDefinition {
|
|
162
|
+
attribute :>> id = "DD-002";
|
|
163
|
+
attribute :>> name = "BolusRequestSignal";
|
|
164
|
+
attribute :>> semantics = "debounced patient pendant press event";
|
|
165
|
+
attribute :>> encoding = "edge event with 50 ms debounce";
|
|
166
|
+
attribute :>> timestampRequired = true;
|
|
167
|
+
attribute :>> integrityClass = "class C";
|
|
168
|
+
attribute :>> confidentialityClass = "none";
|
|
169
|
+
attribute :>> availabilityClass = "sampled every step";
|
|
170
|
+
}
|
|
171
|
+
part ddSensorVector : DataDefinition {
|
|
172
|
+
attribute :>> id = "DD-003";
|
|
173
|
+
attribute :>> name = "SensorStatusVector";
|
|
174
|
+
attribute :>> semantics = "air-in-line, occlusion pressure, reservoir volume, door state, flow measurement, battery level, CPU/memory status";
|
|
175
|
+
attribute :>> encoding = "fixed-layout status word per 20 ms step";
|
|
176
|
+
attribute :>> timestampRequired = true;
|
|
177
|
+
attribute :>> integrityClass = "class C";
|
|
178
|
+
attribute :>> confidentialityClass = "none";
|
|
179
|
+
attribute :>> availabilityClass = "stale after two missed steps";
|
|
180
|
+
}
|
|
181
|
+
part ddEventRecord : DataDefinition {
|
|
182
|
+
attribute :>> id = "DD-004";
|
|
183
|
+
attribute :>> name = "TherapyEventRecord";
|
|
184
|
+
attribute :>> semantics = "timestamped dose, alarm, mode, and configuration events";
|
|
185
|
+
attribute :>> encoding = "append-only sequenced records";
|
|
186
|
+
attribute :>> timestampRequired = true;
|
|
187
|
+
attribute :>> integrityClass = "tamper-evident";
|
|
188
|
+
attribute :>> confidentialityClass = "patient-identifiable";
|
|
189
|
+
attribute :>> availabilityClass = "retained 90 days";
|
|
190
|
+
}
|
|
191
|
+
part cdFlowCommand : ControlDefinition {
|
|
192
|
+
attribute :>> id = "CD-001";
|
|
193
|
+
attribute :>> name = "FlowCommand";
|
|
194
|
+
attribute :>> controlType = "commanded flow rate with enable interlock";
|
|
195
|
+
attribute :>> timeoutMs = 40.0;
|
|
196
|
+
attribute :>> retryPolicy = "no retry; missing command forces zero flow";
|
|
197
|
+
}
|
|
198
|
+
part cdAlarmSignal : ControlDefinition {
|
|
199
|
+
attribute :>> id = "CD-002";
|
|
200
|
+
attribute :>> name = "AlarmSignal";
|
|
201
|
+
attribute :>> controlType = "priority-coded alarm assertion (level 1 stops infusion, level 2 warns)";
|
|
202
|
+
attribute :>> timeoutMs = 20.0;
|
|
203
|
+
attribute :>> retryPolicy = "latched until acknowledged and condition cleared";
|
|
204
|
+
}
|
|
205
|
+
}
|