@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,209 @@
|
|
|
1
|
+
package memo_examples_gpca_pump_model_catalog_gpca_operational {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_architecture_operational::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
// ── Operational entities beyond the human actors ────────────
|
|
8
|
+
part entityPharmacy : OperationalEntity {
|
|
9
|
+
attribute :>> id = "OE-001";
|
|
10
|
+
attribute :>> name = "HospitalPharmacy";
|
|
11
|
+
attribute :>> entityKind = OperationalEntityKind::externalSystem;
|
|
12
|
+
attribute :>> operationalDomain = "medication management";
|
|
13
|
+
attribute :>> responsibility = "Prepares labeled drug reservoirs and maintains the hospital pharmacy database of drug safe values.";
|
|
14
|
+
}
|
|
15
|
+
part entityPowerInfrastructure : OperationalEntity {
|
|
16
|
+
attribute :>> id = "OE-002";
|
|
17
|
+
attribute :>> name = "WardPowerInfrastructure";
|
|
18
|
+
attribute :>> entityKind = OperationalEntityKind::environmentalEntity;
|
|
19
|
+
attribute :>> operationalDomain = "facility power";
|
|
20
|
+
attribute :>> responsibility = "Provides mains power; outages are a foreseeable operational condition.";
|
|
21
|
+
}
|
|
22
|
+
part entityGpcaPump : OperationalEntity {
|
|
23
|
+
attribute :>> id = "OE-003";
|
|
24
|
+
attribute :>> name = "GPCA_Pump";
|
|
25
|
+
attribute :>> entityKind = OperationalEntityKind::device;
|
|
26
|
+
attribute :>> operationalDomain = "patient-controlled analgesia therapy";
|
|
27
|
+
attribute :>> responsibility = "System of interest: delivers programmed basal and bolus analgesia subject to prescription limits.";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// ── External entities per CriSys Fig 2.1 ────────────────────
|
|
31
|
+
part entityPharmacyDb : OperationalEntity {
|
|
32
|
+
attribute :>> id = "OE-004";
|
|
33
|
+
attribute :>> name = "HospitalPharmacyDatabase";
|
|
34
|
+
attribute :>> entityKind = OperationalEntityKind::externalSystem;
|
|
35
|
+
attribute :>> operationalDomain = "medication safety data";
|
|
36
|
+
attribute :>> responsibility = "Repository of drug information from manufacturers; stores the safe value ranges for all drugs usable for infusion, retrieved by the GPCA for the programmed drug.";
|
|
37
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1 and §3.5";
|
|
38
|
+
}
|
|
39
|
+
part entityDrugReservoir : OperationalEntity {
|
|
40
|
+
attribute :>> id = "OE-005";
|
|
41
|
+
attribute :>> name = "DrugReservoir";
|
|
42
|
+
attribute :>> entityKind = OperationalEntityKind::device;
|
|
43
|
+
attribute :>> operationalDomain = "drug storage";
|
|
44
|
+
attribute :>> responsibility = "Apparatus storing the liquid analgesic drug to be infused; filled according to the prescription and connected to the GPCA by the clinician.";
|
|
45
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1";
|
|
46
|
+
}
|
|
47
|
+
part entityNeedle : OperationalEntity {
|
|
48
|
+
attribute :>> id = "OE-006";
|
|
49
|
+
attribute :>> name = "InfusionNeedle";
|
|
50
|
+
attribute :>> entityKind = OperationalEntityKind::device;
|
|
51
|
+
attribute :>> operationalDomain = "drug delivery path";
|
|
52
|
+
attribute :>> responsibility = "Intravenous needle inserted into the patient by the clinician and connected to the GPCA standard CCC connection point (I 5) to infuse the drug.";
|
|
53
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1 and §3.3 (I 5)";
|
|
54
|
+
}
|
|
55
|
+
part entityPrescription : OperationalEntity {
|
|
56
|
+
attribute :>> id = "OE-007";
|
|
57
|
+
attribute :>> name = "Prescription";
|
|
58
|
+
attribute :>> entityKind = OperationalEntityKind::informationArtifact;
|
|
59
|
+
attribute :>> operationalDomain = "plan of care";
|
|
60
|
+
attribute :>> responsibility = "Instructions governing the plan of care for an individual patient: the drug to be infused and all administration details; provided by a certified medical practitioner.";
|
|
61
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.1";
|
|
62
|
+
}
|
|
63
|
+
part entityHospital : OperationalEntity {
|
|
64
|
+
attribute :>> id = "OE-008";
|
|
65
|
+
attribute :>> name = "Hospital";
|
|
66
|
+
attribute :>> entityKind = OperationalEntityKind::environmentalEntity;
|
|
67
|
+
attribute :>> operationalDomain = "care environment boundary";
|
|
68
|
+
attribute :>> responsibility = "Environment boundary: fixed (non-ambulatory) usage location with authorized clinicians and the pharmacy database holding drug safe values.";
|
|
69
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.4";
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ── Operational activities (therapy lifecycle) ──────────────
|
|
73
|
+
part oaPrescribe : OperationalActivity {
|
|
74
|
+
attribute :>> id = "OA-001";
|
|
75
|
+
attribute :>> name = "PrescribeTherapy";
|
|
76
|
+
attribute :>> trigger = "patient requires titrated analgesia";
|
|
77
|
+
attribute :>> preCondition = "patient assessed; drug has safe-value records in the hospital pharmacy database";
|
|
78
|
+
attribute :>> postCondition = "prescription with basal rate, bolus volume, lockout, and max dose limits exists";
|
|
79
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
80
|
+
}
|
|
81
|
+
part oaLoadReservoir : OperationalActivity {
|
|
82
|
+
attribute :>> id = "OA-002";
|
|
83
|
+
attribute :>> name = "LoadDrugReservoir";
|
|
84
|
+
attribute :>> trigger = "prescription issued or reservoir empty";
|
|
85
|
+
attribute :>> preCondition = "labeled reservoir prepared by pharmacy";
|
|
86
|
+
attribute :>> postCondition = "reservoir mounted, door closed and latched";
|
|
87
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
88
|
+
}
|
|
89
|
+
part oaProgram : OperationalActivity {
|
|
90
|
+
attribute :>> id = "OA-003";
|
|
91
|
+
attribute :>> name = "ProgramPrescription";
|
|
92
|
+
attribute :>> trigger = "reservoir loaded";
|
|
93
|
+
attribute :>> preCondition = "pump in IDLE; clinician authenticated by key or code";
|
|
94
|
+
attribute :>> postCondition = "prescription entered, checked against pharmacy-database safe values (I 9-I 11), and confirmed by second review";
|
|
95
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
96
|
+
}
|
|
97
|
+
part oaStartTherapy : OperationalActivity {
|
|
98
|
+
attribute :>> id = "OA-004";
|
|
99
|
+
attribute :>> name = "StartInfusion";
|
|
100
|
+
attribute :>> trigger = "prescription confirmed";
|
|
101
|
+
attribute :>> preCondition = "confirmed prescription saved; no active alarm";
|
|
102
|
+
attribute :>> postCondition = "basal infusion running";
|
|
103
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
104
|
+
}
|
|
105
|
+
part oaRequestBolus : OperationalActivity {
|
|
106
|
+
attribute :>> id = "OA-005";
|
|
107
|
+
attribute :>> name = "RequestPatientBolus";
|
|
108
|
+
attribute :>> trigger = "patient presses bolus request button";
|
|
109
|
+
attribute :>> preCondition = "therapy active";
|
|
110
|
+
attribute :>> postCondition = "bolus delivered, or request ignored when lockout or max-dose limits apply";
|
|
111
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
112
|
+
}
|
|
113
|
+
part oaRespondAlarm : OperationalActivity {
|
|
114
|
+
attribute :>> id = "OA-006";
|
|
115
|
+
attribute :>> name = "RespondToAlarm";
|
|
116
|
+
attribute :>> trigger = "audible or visual alarm annunciated";
|
|
117
|
+
attribute :>> preCondition = "alarm condition raised by the pump";
|
|
118
|
+
attribute :>> postCondition = "cause resolved and therapy resumed, or therapy stopped";
|
|
119
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
120
|
+
}
|
|
121
|
+
part oaReviewLog : OperationalActivity {
|
|
122
|
+
attribute :>> id = "OA-007";
|
|
123
|
+
attribute :>> name = "ReviewEventLog";
|
|
124
|
+
attribute :>> trigger = "shift change, incident review, or dose audit";
|
|
125
|
+
attribute :>> preCondition = "event log populated during therapy";
|
|
126
|
+
attribute :>> postCondition = "delivered doses and alarm history reviewed";
|
|
127
|
+
attribute :>> criticality = CriticalityKind::medium;
|
|
128
|
+
}
|
|
129
|
+
part oaMaintain : OperationalActivity {
|
|
130
|
+
attribute :>> id = "OA-008";
|
|
131
|
+
attribute :>> name = "MaintainDevice";
|
|
132
|
+
attribute :>> trigger = "scheduled maintenance or fault";
|
|
133
|
+
attribute :>> preCondition = "pump out of clinical use; technician authenticated";
|
|
134
|
+
attribute :>> postCondition = "battery, calibration, and pharmacy-database connection verified";
|
|
135
|
+
attribute :>> criticality = CriticalityKind::medium;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// ── Operational capabilities ────────────────────────────────
|
|
139
|
+
part ocTitratedAnalgesia : OperationalCapability {
|
|
140
|
+
attribute :>> id = "OC-001";
|
|
141
|
+
attribute :>> name = "DeliverTitratedAnalgesia";
|
|
142
|
+
attribute :>> capabilityLevel = "primary";
|
|
143
|
+
attribute :>> preCondition = "confirmed prescription and loaded reservoir";
|
|
144
|
+
attribute :>> postCondition = "drug delivered within prescribed limits at all times";
|
|
145
|
+
}
|
|
146
|
+
part ocFailSafeTherapy : OperationalCapability {
|
|
147
|
+
attribute :>> id = "OC-002";
|
|
148
|
+
attribute :>> name = "FailSafeTherapyManagement";
|
|
149
|
+
attribute :>> capabilityLevel = "safety";
|
|
150
|
+
attribute :>> preCondition = "any single failure or foreseeable misuse";
|
|
151
|
+
attribute :>> postCondition = "pump reaches a safe state (infusion stopped or paused) and the operator is alerted";
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ── Operational scenarios ───────────────────────────────────
|
|
155
|
+
part osNominalTherapy : OperationalScenario {
|
|
156
|
+
attribute :>> id = "OS-001";
|
|
157
|
+
attribute :>> name = "NominalTherapySession";
|
|
158
|
+
attribute :>> scenarioKind = ScenarioKind::nominal;
|
|
159
|
+
attribute :>> preCondition = "prescription issued, reservoir loaded";
|
|
160
|
+
attribute :>> postCondition = "therapy completed and stopped by clinician";
|
|
161
|
+
attribute :>> sequenceDescription = "Prescribe > load reservoir > program and confirm > start basal > patient boluses within limits > stop therapy > review log.";
|
|
162
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §2.2 Main GPCA System Functions";
|
|
163
|
+
}
|
|
164
|
+
part osLockoutBolus : OperationalScenario {
|
|
165
|
+
attribute :>> id = "OS-002";
|
|
166
|
+
attribute :>> name = "BolusRequestDuringLockout";
|
|
167
|
+
attribute :>> scenarioKind = ScenarioKind::error;
|
|
168
|
+
attribute :>> preCondition = "basal infusion active; lockout interval running";
|
|
169
|
+
attribute :>> postCondition = "request ignored, logged; basal continues unchanged";
|
|
170
|
+
attribute :>> sequenceDescription = "Patient presses bolus button during lockout > infusion manager rejects request > event logged > no additional drug delivered.";
|
|
171
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 PATIENT BOLUS mode (lockout requirements)";
|
|
172
|
+
}
|
|
173
|
+
part osOcclusionAlarm : OperationalScenario {
|
|
174
|
+
attribute :>> id = "OS-003";
|
|
175
|
+
attribute :>> name = "OcclusionDetectedDuringInfusion";
|
|
176
|
+
attribute :>> scenarioKind = ScenarioKind::alarm;
|
|
177
|
+
attribute :>> preCondition = "therapy active; downstream line becomes blocked";
|
|
178
|
+
attribute :>> postCondition = "infusion paused, alarm annunciated, clinician clears occlusion and resumes";
|
|
179
|
+
attribute :>> sequenceDescription = "Occlusion sensor exceeds pressure threshold > alarm raised same step > infusion paused > audible and visual annunciation > clinician resolves and resumes.";
|
|
180
|
+
attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms and Alerts (occlusion)";
|
|
181
|
+
}
|
|
182
|
+
part osAirInLine : OperationalScenario {
|
|
183
|
+
attribute :>> id = "OS-004";
|
|
184
|
+
attribute :>> name = "AirInLineDetected";
|
|
185
|
+
attribute :>> scenarioKind = ScenarioKind::alarm;
|
|
186
|
+
attribute :>> preCondition = "therapy active; air bubble enters tubing";
|
|
187
|
+
attribute :>> postCondition = "infusion stopped before air reaches patient; alarm annunciated";
|
|
188
|
+
attribute :>> sequenceDescription = "Air-in-line sensor detects bubble above threshold > transition to PAUSED (KVO flow) > High-priority Air embolism notification > clinician re-primes line and restarts.";
|
|
189
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Air embolism)";
|
|
190
|
+
}
|
|
191
|
+
part osEmptyReservoir : OperationalScenario {
|
|
192
|
+
attribute :>> id = "OS-005";
|
|
193
|
+
attribute :>> name = "ReservoirEmptyDuringTherapy";
|
|
194
|
+
attribute :>> scenarioKind = ScenarioKind::degraded;
|
|
195
|
+
attribute :>> preCondition = "therapy active; reservoir volume reaches empty threshold";
|
|
196
|
+
attribute :>> postCondition = "infusion stopped, alarm raised, reservoir replaced";
|
|
197
|
+
attribute :>> sequenceDescription = "Reservoir-empty condition detected > transition to PAUSED (KVO flow) > High-priority Empty Reservoir notification > clinician loads new reservoir > therapy resumed with saved prescription.";
|
|
198
|
+
attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.3 Notification Requirements (REQ 59: Empty Reservoir)";
|
|
199
|
+
}
|
|
200
|
+
part osPowerLoss : OperationalScenario {
|
|
201
|
+
attribute :>> id = "OS-006";
|
|
202
|
+
attribute :>> name = "MainsPowerLossAndRecovery";
|
|
203
|
+
attribute :>> scenarioKind = ScenarioKind::degraded;
|
|
204
|
+
attribute :>> preCondition = "therapy active on mains power";
|
|
205
|
+
attribute :>> postCondition = "therapy continues on battery; prescription preserved across full power loss";
|
|
206
|
+
attribute :>> sequenceDescription = "Mains lost > battery takes over with notification > if battery depletes, pump stops safely > on power restore, saved prescription recovered and therapy resumed only after clinician confirmation.";
|
|
207
|
+
attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.3 Electrical Hazards (battery failure)";
|
|
208
|
+
}
|
|
209
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
package memo_examples_gpca_pump_model_catalog_gpca_physical {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_architecture_physical::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
part mainController : ProcessingNode {
|
|
8
|
+
attribute :>> id = "PN-001";
|
|
9
|
+
attribute :>> name = "MainControllerMCU";
|
|
10
|
+
attribute :>> nodeKind = ProcessingNodeKind::microcontroller;
|
|
11
|
+
attribute :>> processorArchitecture = "ARM Cortex-M4, lockstep-capable";
|
|
12
|
+
attribute :>> memoryMB = "1 MB flash / 256 KB SRAM with ECC";
|
|
13
|
+
attribute :>> operatingSystem = "bare-metal cyclic executive, 20 ms base step";
|
|
14
|
+
attribute :>> safetyPartition = true;
|
|
15
|
+
attribute :>> redundancyKind = "hardware watchdog plus independent flow cross-check";
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
part portSensorHarness : PhysicalPort {
|
|
19
|
+
attribute :>> id = "PP-001";
|
|
20
|
+
attribute :>> name = "SensorHarnessConnector";
|
|
21
|
+
attribute :>> portKind = InterfaceKind::digitalSignal;
|
|
22
|
+
attribute :>> connectorType = "keyed 12-pin locking header";
|
|
23
|
+
attribute :>> direction = DirectionKind::input;
|
|
24
|
+
}
|
|
25
|
+
part portMotorDrive : PhysicalPort {
|
|
26
|
+
attribute :>> id = "PP-002";
|
|
27
|
+
attribute :>> name = "MotorDriveConnector";
|
|
28
|
+
attribute :>> portKind = InterfaceKind::digitalSignal;
|
|
29
|
+
attribute :>> connectorType = "keyed 6-pin locking header with enable interlock";
|
|
30
|
+
attribute :>> direction = DirectionKind::output;
|
|
31
|
+
}
|
|
32
|
+
part portPatientPendant : PhysicalPort {
|
|
33
|
+
attribute :>> id = "PP-003";
|
|
34
|
+
attribute :>> name = "PatientPendantJack";
|
|
35
|
+
attribute :>> portKind = InterfaceKind::digitalSignal;
|
|
36
|
+
attribute :>> connectorType = "latching 3.5 mm pendant jack";
|
|
37
|
+
attribute :>> direction = DirectionKind::input;
|
|
38
|
+
}
|
|
39
|
+
part portServiceAccess : PhysicalPort {
|
|
40
|
+
attribute :>> id = "PP-004";
|
|
41
|
+
attribute :>> name = "ServiceMaintenancePort";
|
|
42
|
+
attribute :>> portKind = InterfaceKind::api;
|
|
43
|
+
attribute :>> connectorType = "covered UART/USB service connector";
|
|
44
|
+
attribute :>> direction = DirectionKind::bidirectional;
|
|
45
|
+
}
|
|
46
|
+
part portMainsInlet : PhysicalPort {
|
|
47
|
+
attribute :>> id = "PP-005";
|
|
48
|
+
attribute :>> name = "MainsPowerInlet";
|
|
49
|
+
attribute :>> portKind = InterfaceKind::power;
|
|
50
|
+
attribute :>> connectorType = "IEC 60320 C8 inlet";
|
|
51
|
+
attribute :>> direction = DirectionKind::input;
|
|
52
|
+
}
|
|
53
|
+
}
|