@memoarchitect/ontology 0.7.0 → 0.8.22
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 +4 -2
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +9 -0
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +9 -5
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +82 -58
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -2
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -331
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
- package/examples/gpca-pump/model/catalog/project.sysml +5 -0
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -2
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -2
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -2
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +4 -2
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +1 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +3 -2
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
- package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -5
- package/examples/ros-mobile-robot/README.md +40 -0
- package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
- package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -60
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -15
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +42 -66
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +56 -66
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +26 -55
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +3 -6
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +0 -18
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +51 -82
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +21 -31
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -8
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -21
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -1
- package/extensions/LICENSES/MIT.txt +19 -0
- package/extensions/README.md +94 -0
- package/extensions/aadl/memo.package.yaml +18 -0
- package/extensions/aadl/src/aadl_extension.sysml +6 -0
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
- package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
- package/extensions/cloud/memo.package.yaml +18 -0
- package/extensions/cloud/src/cloud_extension.sysml +44 -0
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
- package/extensions/container/memo.package.yaml +18 -0
- package/extensions/container/src/container_extension.sysml +37 -0
- package/extensions/container/src/methodology/container_methodology.sysml +17 -0
- package/extensions/messaging/memo.package.yaml +18 -0
- package/extensions/messaging/src/messaging_extension.sysml +64 -0
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
- package/extensions/ros/memo.package.yaml +18 -0
- package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
- package/extensions/ros/src/ros_extension.sysml +200 -0
- package/extensions/template/src/extension.sysml +37 -0
- package/memo.manifest.yaml +13 -2
- 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 +5 -3
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/decisions/memo_decisions.sysml +23 -2
- package/src/architecture/functional/behavior/memo_behavior.sysml +49 -21
- package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
- package/src/architecture/functional/functions/memo_functions.sysml +91 -34
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +37 -10
- package/src/architecture/implementation/ui/memo_ui.sysml +78 -38
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +63 -11
- package/src/architecture/logical/structure/memo_logical_structure.sysml +21 -20
- package/src/architecture/operational/activities/memo_activities.sysml +10 -3
- package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
- package/src/architecture/operational/workflows/memo_workflows.sysml +29 -10
- package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
- package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
- package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
- package/src/artifacts/standards/cfr_21_820.sysml +116 -0
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
- package/src/artifacts/standards/iec_60601_1.sysml +149 -0
- package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
- package/src/artifacts/standards/iec_60812.sysml +51 -0
- package/src/artifacts/standards/iec_62304.sysml +210 -0
- package/src/artifacts/standards/iec_62366_1.sysml +113 -0
- package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
- package/src/artifacts/standards/iso_13485.sysml +113 -0
- package/src/artifacts/standards/iso_14971.sysml +94 -0
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
- package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
- package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
- package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
- package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
- package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
- package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
- package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
- package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
- package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
- package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
- package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
- package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
- package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
- package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
- package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
- package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
- package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
- package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
- package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
- package/src/artifacts/templates/dhf/system/sad.md +173 -0
- package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
- package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
- package/src/artifacts/templates/dhf/system/syrs.md +128 -0
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
- package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
- package/src/assurance/requirements/memo_requirements.sysml +5 -2
- package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
- package/src/assurance/safety_risk/memo_risk.sysml +78 -7
- package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
- package/src/core/annotations/memo_annotations.sysml +25 -6
- package/src/core/common/memo_common.sysml +121 -16
- package/src/core/consistency_rules/consistency_rules.sysml +1 -1
- package/src/core/dimensions/dimensions.sysml +12 -0
- package/src/core/enumerations/memo_enumerations.sysml +60 -14
- package/src/core/relationships/memo_relationships.sysml +199 -196
- package/src/memo_namespaces.sysml +30 -0
- package/src/methodology/core/memo_core.sysml +24 -0
- package/src/methodology/profiles/memo_profiles.sysml +1 -1
- package/src/rules/ontology/ontology_invariants.sysml +213 -1
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +3 -3
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +1 -1
- package/src/viewpoints/context/context_viewpoint.sysml +1 -1
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -1
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +1 -0
- package/src/viewpoints/functional/functional_viewpoint.sysml +1 -1
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +1 -1
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +1 -1
- package/src/viewpoints/operational/operational_viewpoint.sysml +1 -1
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +1 -1
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +1 -1
- package/src/viewpoints/verification/verification_viewpoint.sysml +1 -1
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +1 -1
- package/examples/extensions/README.md +0 -16
- package/examples/extensions/template/src/extension.sysml +0 -15
- package/examples/gpca-pump/gpca-pump.kpar +0 -0
- /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
- /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
// Logical structure — the column axis of the DSM.
|
|
2
2
|
//
|
|
3
3
|
// Four levels deep on purpose (System → Subsystem → Subsystem → component),
|
|
4
|
-
// so expanding and collapsing the matrix has something real to do.
|
|
5
|
-
//
|
|
6
|
-
// reads to build the column tree.
|
|
4
|
+
// so expanding and collapsing the matrix has something real to do. Containment
|
|
5
|
+
// is native nesting; the builder synthesizes the `composes` relationship the
|
|
6
|
+
// DSM reads to build the column tree, so no explicit Composes edge is written.
|
|
7
7
|
package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
8
8
|
private import ScalarValues::*;
|
|
9
9
|
|
|
10
10
|
private import memo_core_enumerations::*;
|
|
11
11
|
private import memo_core_relationships::*;
|
|
12
12
|
private import memo_architecture_logical_structure::*;
|
|
13
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
13
14
|
|
|
14
15
|
// ── Level 0: the system ──────────────────────────────────────
|
|
15
16
|
part sysTherapyDelivery : System {
|
|
@@ -18,166 +19,147 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
18
19
|
attribute :>> systemType = SystemTypeKind::logical;
|
|
19
20
|
attribute :>> systemBoundaryDescription = "Everything inside the pump enclosure, including its power path and user interface.";
|
|
20
21
|
attribute :>> responsibility = "Deliver a prescribed infusion safely and report what it delivered.";
|
|
21
|
-
}
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
part subControl : Subsystem {
|
|
31
|
-
attribute :>> id = "NDS-SUB-002"; attribute :>> name = "ControlSubsystem";
|
|
32
|
-
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
33
|
-
attribute :>> systemType = SystemTypeKind::software;
|
|
34
|
-
attribute :>> responsibility = "Decide what the fluid path should do, and hold the therapy state.";
|
|
35
|
-
}
|
|
36
|
-
part subUserInterface : Subsystem {
|
|
37
|
-
attribute :>> id = "NDS-SUB-003"; attribute :>> name = "UserInterfaceSubsystem";
|
|
38
|
-
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
39
|
-
attribute :>> systemType = SystemTypeKind::software;
|
|
40
|
-
attribute :>> responsibility = "Present therapy state to the clinician and accept their input.";
|
|
41
|
-
}
|
|
42
|
-
part subPower : Subsystem {
|
|
43
|
-
attribute :>> id = "NDS-SUB-004"; attribute :>> name = "PowerSubsystem";
|
|
44
|
-
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
45
|
-
attribute :>> systemType = SystemTypeKind::hardware;
|
|
46
|
-
attribute :>> responsibility = "Supply and monitor power across mains and battery operation.";
|
|
47
|
-
}
|
|
23
|
+
// ── Level 1: subsystems ──────────────────────────────────
|
|
24
|
+
part subFluidPath : Subsystem {
|
|
25
|
+
attribute :>> id = "NDS-SUB-001"; attribute :>> name = "FluidPathSubsystem";
|
|
26
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
27
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
28
|
+
attribute :>> responsibility = "Move fluid from the reservoir to the patient line at a commanded rate.";
|
|
48
29
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
30
|
+
// ── Level 2/3: components ─────────────────────────────
|
|
31
|
+
part lcPumpMechanism : LogicalComponent {
|
|
32
|
+
attribute :>> id = "NDS-LC-001"; attribute :>> name = "PumpMechanism";
|
|
33
|
+
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
34
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
35
|
+
attribute :>> responsibility = "Displace fluid under command.";
|
|
36
|
+
attribute :>> controlledVariable = "delivered volume per stroke";
|
|
37
|
+
}
|
|
38
|
+
part lcOcclusionChannel : LogicalComponent {
|
|
39
|
+
attribute :>> id = "NDS-LC-002"; attribute :>> name = "OcclusionSensingChannel";
|
|
40
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
41
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
42
|
+
attribute :>> responsibility = "Sense line pressure and air in line.";
|
|
43
|
+
attribute :>> channelRole = ChannelRoleKind::primary;
|
|
44
|
+
}
|
|
45
|
+
part lcReservoirInterface : LogicalComponent {
|
|
46
|
+
attribute :>> id = "NDS-LC-003"; attribute :>> name = "ReservoirInterface";
|
|
47
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
48
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
49
|
+
attribute :>> responsibility = "Seat the reservoir and expose its remaining volume.";
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
part subControl : Subsystem {
|
|
53
|
+
attribute :>> id = "NDS-SUB-002"; attribute :>> name = "ControlSubsystem";
|
|
54
|
+
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
55
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
56
|
+
attribute :>> responsibility = "Decide what the fluid path should do, and hold the therapy state.";
|
|
53
57
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
connection : Composes connect parent ::> subControl to child ::> subSafetyMonitor;
|
|
58
|
+
// ── Level 2: a subsystem inside a subsystem ───────────
|
|
59
|
+
// The safety monitor is nested one level deeper than its peers,
|
|
60
|
+
// which is what makes a collapsed ControlSubsystem row a genuine
|
|
61
|
+
// roll-up rather than a rename of its children.
|
|
62
|
+
part subSafetyMonitor : Subsystem {
|
|
63
|
+
attribute :>> id = "NDS-SUB-005"; attribute :>> name = "SafetyMonitorSubsystem";
|
|
64
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
65
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
66
|
+
attribute :>> responsibility = "Watch the control path from outside it and stop delivery on breach.";
|
|
67
|
+
attribute :>> safetyPartition = "monitor partition, separate MPU region from the control partition";
|
|
66
68
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
69
|
+
part lcWatchdogChannel : LogicalComponent {
|
|
70
|
+
attribute :>> id = "NDS-LC-006"; attribute :>> name = "WatchdogChannel";
|
|
71
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
72
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
73
|
+
attribute :>> responsibility = "Reset to the safe state when the control loop misses its deadline.";
|
|
74
|
+
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
75
|
+
attribute :>> diversityBasis = "independent time base from the control partition";
|
|
76
|
+
}
|
|
77
|
+
part lcPressureIntegrityChannel : LogicalComponent {
|
|
78
|
+
attribute :>> id = "NDS-LC-007"; attribute :>> name = "PressureIntegrityChannel";
|
|
79
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
80
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
81
|
+
attribute :>> responsibility = "Cross-check pressure against the commanded rate and stop on divergence.";
|
|
82
|
+
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
83
|
+
attribute :>> diversityBasis = "different measurement principle from the primary occlusion channel";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
part lcDoseController : LogicalComponent {
|
|
87
|
+
attribute :>> id = "NDS-LC-004"; attribute :>> name = "DoseController";
|
|
88
|
+
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
89
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
90
|
+
attribute :>> responsibility = "Turn a prescription into rate commands.";
|
|
91
|
+
attribute :>> controlLaw = "closed loop on delivered volume, saturated at the prescribed limit";
|
|
92
|
+
attribute :>> controlledVariable = "infusion rate";
|
|
93
|
+
}
|
|
94
|
+
part lcTherapyStateStore : LogicalComponent {
|
|
95
|
+
attribute :>> id = "NDS-LC-005"; attribute :>> name = "TherapyStateStore";
|
|
96
|
+
attribute :>> componentRole = ComponentRoleKind::dataStore;
|
|
97
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
98
|
+
attribute :>> responsibility = "Hold the active therapy record across power cycles.";
|
|
99
|
+
attribute :>> persistenceRequirement = "survives power loss with the last completed transaction intact";
|
|
100
|
+
attribute :>> integrityRequirement = "CRC per record, rejected on mismatch";
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
part subUserInterface : Subsystem {
|
|
104
|
+
attribute :>> id = "NDS-SUB-003"; attribute :>> name = "UserInterfaceSubsystem";
|
|
105
|
+
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
106
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
107
|
+
attribute :>> responsibility = "Present therapy state to the clinician and accept their input.";
|
|
91
108
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
109
|
+
part lcDisplayManager : LogicalComponent {
|
|
110
|
+
attribute :>> id = "NDS-LC-008"; attribute :>> name = "DisplayManager";
|
|
111
|
+
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
112
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
113
|
+
attribute :>> responsibility = "Render therapy state on the main screen.";
|
|
114
|
+
attribute :>> interactionSummary = "read-only status surface, refreshed once per second";
|
|
115
|
+
}
|
|
116
|
+
part lcAlarmAnnunciator : LogicalComponent {
|
|
117
|
+
attribute :>> id = "NDS-LC-009"; attribute :>> name = "AlarmAnnunciator";
|
|
118
|
+
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
119
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
120
|
+
attribute :>> responsibility = "Raise audible and visible alarms by priority.";
|
|
121
|
+
attribute :>> interactionSummary = "IEC 60601-1-8 alarm signals";
|
|
122
|
+
}
|
|
123
|
+
part lcKeypadHandler : LogicalComponent {
|
|
124
|
+
attribute :>> id = "NDS-LC-010"; attribute :>> name = "KeypadHandler";
|
|
125
|
+
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
126
|
+
attribute :>> systemType = SystemTypeKind::software;
|
|
127
|
+
attribute :>> responsibility = "Debounce and interpret key presses.";
|
|
128
|
+
attribute :>> interactionSummary = "physical keypad, confirm-before-apply for every rate change";
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
part subPower : Subsystem {
|
|
132
|
+
attribute :>> id = "NDS-SUB-004"; attribute :>> name = "PowerSubsystem";
|
|
133
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
134
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
135
|
+
attribute :>> responsibility = "Supply and monitor power across mains and battery operation.";
|
|
110
136
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
attribute :>> diversityBasis = "different measurement principle from the primary occlusion channel";
|
|
126
|
-
}
|
|
127
|
-
connection : Composes connect parent ::> subSafetyMonitor to child ::> lcWatchdogChannel;
|
|
128
|
-
connection : Composes connect parent ::> subSafetyMonitor to child ::> lcPressureIntegrityChannel;
|
|
137
|
+
part lcBatteryManager : LogicalComponent {
|
|
138
|
+
attribute :>> id = "NDS-LC-011"; attribute :>> name = "BatteryManager";
|
|
139
|
+
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
140
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
141
|
+
attribute :>> responsibility = "Charge, gauge and protect the battery.";
|
|
142
|
+
}
|
|
143
|
+
part lcPowerRailMonitor : LogicalComponent {
|
|
144
|
+
attribute :>> id = "NDS-LC-012"; attribute :>> name = "PowerRailMonitor";
|
|
145
|
+
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
146
|
+
attribute :>> systemType = SystemTypeKind::hardware;
|
|
147
|
+
attribute :>> responsibility = "Detect rail brownout and request a source switch.";
|
|
148
|
+
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
129
151
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
attribute :>> interactionSummary = "IEC 60601-1-8 alarm signals";
|
|
143
|
-
}
|
|
144
|
-
part lcKeypadHandler : LogicalComponent {
|
|
145
|
-
attribute :>> id = "NDS-LC-010"; attribute :>> name = "KeypadHandler";
|
|
146
|
-
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
147
|
-
attribute :>> systemType = SystemTypeKind::software;
|
|
148
|
-
attribute :>> responsibility = "Debounce and interpret key presses.";
|
|
149
|
-
attribute :>> interactionSummary = "physical keypad, confirm-before-apply for every rate change";
|
|
152
|
+
// ── Component-to-component dependency ─────────────────────
|
|
153
|
+
// What the DSM plots when both axes are architecture: who needs whom.
|
|
154
|
+
flow from subFluidPath.lcOcclusionChannel to subControl.lcDoseController;
|
|
155
|
+
flow from subControl.lcDoseController to subFluidPath.lcPumpMechanism;
|
|
156
|
+
flow from subFluidPath.lcPumpMechanism to subControl.lcTherapyStateStore;
|
|
157
|
+
flow from subControl.lcTherapyStateStore to subUserInterface.lcDisplayManager;
|
|
158
|
+
flow from subControl.subSafetyMonitor.lcWatchdogChannel to subControl.lcDoseController;
|
|
159
|
+
flow from subControl.subSafetyMonitor.lcPressureIntegrityChannel to subUserInterface.lcAlarmAnnunciator;
|
|
160
|
+
flow from subUserInterface.lcKeypadHandler to subControl.lcDoseController;
|
|
161
|
+
flow from subFluidPath.lcReservoirInterface to subFluidPath.lcPumpMechanism;
|
|
162
|
+
flow from subPower.lcBatteryManager to subPower.lcPowerRailMonitor;
|
|
163
|
+
flow from subPower.lcPowerRailMonitor to subUserInterface.lcAlarmAnnunciator;
|
|
150
164
|
}
|
|
151
|
-
connection : Composes connect parent ::> subUserInterface to child ::> lcDisplayManager;
|
|
152
|
-
connection : Composes connect parent ::> subUserInterface to child ::> lcAlarmAnnunciator;
|
|
153
|
-
connection : Composes connect parent ::> subUserInterface to child ::> lcKeypadHandler;
|
|
154
|
-
|
|
155
|
-
part lcBatteryManager : LogicalComponent {
|
|
156
|
-
attribute :>> id = "NDS-LC-011"; attribute :>> name = "BatteryManager";
|
|
157
|
-
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
158
|
-
attribute :>> systemType = SystemTypeKind::hardware;
|
|
159
|
-
attribute :>> responsibility = "Charge, gauge and protect the battery.";
|
|
160
|
-
}
|
|
161
|
-
part lcPowerRailMonitor : LogicalComponent {
|
|
162
|
-
attribute :>> id = "NDS-LC-012"; attribute :>> name = "PowerRailMonitor";
|
|
163
|
-
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
164
|
-
attribute :>> systemType = SystemTypeKind::hardware;
|
|
165
|
-
attribute :>> responsibility = "Detect rail brownout and request a source switch.";
|
|
166
|
-
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
167
|
-
}
|
|
168
|
-
connection : Composes connect parent ::> subPower to child ::> lcBatteryManager;
|
|
169
|
-
connection : Composes connect parent ::> subPower to child ::> lcPowerRailMonitor;
|
|
170
|
-
|
|
171
|
-
// ── Component-to-component dependency ────────────────────────
|
|
172
|
-
// What the DSM plots when both axes are architecture: who needs whom.
|
|
173
|
-
connection : ExchangesWith connect source ::> lcOcclusionChannel to target ::> lcDoseController;
|
|
174
|
-
connection : ExchangesWith connect source ::> lcDoseController to target ::> lcPumpMechanism;
|
|
175
|
-
connection : ExchangesWith connect source ::> lcPumpMechanism to target ::> lcTherapyStateStore;
|
|
176
|
-
connection : ExchangesWith connect source ::> lcTherapyStateStore to target ::> lcDisplayManager;
|
|
177
|
-
connection : ExchangesWith connect source ::> lcWatchdogChannel to target ::> lcDoseController;
|
|
178
|
-
connection : ExchangesWith connect source ::> lcPressureIntegrityChannel to target ::> lcAlarmAnnunciator;
|
|
179
|
-
connection : ExchangesWith connect source ::> lcKeypadHandler to target ::> lcDoseController;
|
|
180
|
-
connection : ExchangesWith connect source ::> lcReservoirInterface to target ::> lcPumpMechanism;
|
|
181
|
-
connection : ExchangesWith connect source ::> lcBatteryManager to target ::> lcPowerRailMonitor;
|
|
182
|
-
connection : ExchangesWith connect source ::> lcPowerRailMonitor to target ::> lcAlarmAnnunciator;
|
|
183
165
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// the traceability matrix (function → verification case).
|
|
3
3
|
package memo_examples_nested_architecture_dsm_assurance_verification_validation {
|
|
4
4
|
private import ScalarValues::*;
|
|
5
|
+
private import memo_core_dimensions::*; // ElementStatusKind
|
|
5
6
|
|
|
6
7
|
private import memo_core_enumerations::*;
|
|
7
8
|
private import memo_core_relationships::*;
|
|
@@ -13,78 +14,100 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
13
14
|
attribute :>> id = "NDS-VER-001"; attribute :>> name = "VerifyDoseAccuracy";
|
|
14
15
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
15
16
|
attribute :>> acceptanceCriteria = "Gravimetric delivery over 60 minutes is within ±5% of the prescribed volume at 1, 25 and 999 mL/h.";
|
|
16
|
-
attribute :>> status =
|
|
17
|
+
attribute :>> status = ElementStatusKind::approved;
|
|
18
|
+
|
|
19
|
+
objective { verify reqDoseAccuracy; }
|
|
20
|
+
subject verified : Base::Anything[*] = (fnDeliverTherapy, fnDeliverTherapy.fnMeterFluid, fnDeliverTherapy.fnMeterFluid.fnDriveActuator, fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered, fnDeliverTherapy.fnControlDose, fnDeliverTherapy.fnControlDose.fnComputeRate);
|
|
17
21
|
}
|
|
18
22
|
verification vcOcclusionResponse : VerificationCase {
|
|
19
23
|
attribute :>> id = "NDS-VER-002"; attribute :>> name = "VerifyOcclusionResponse";
|
|
20
24
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
21
25
|
attribute :>> acceptanceCriteria = "Delivery stops within 2 s of the occlusion threshold being crossed, at every supported rate.";
|
|
22
|
-
attribute :>> status =
|
|
26
|
+
attribute :>> status = ElementStatusKind::approved;
|
|
27
|
+
|
|
28
|
+
objective { verify reqOcclusionDetection; }
|
|
29
|
+
subject verified : Base::Anything[*] = (fnEnsureSafety, fnEnsureSafety.fnDetectOcclusion, fnEnsureSafety.fnEnforceDoseLimits);
|
|
23
30
|
}
|
|
24
31
|
verification vcAirInLineResponse : VerificationCase {
|
|
25
32
|
attribute :>> id = "NDS-VER-003"; attribute :>> name = "VerifyAirInLineResponse";
|
|
26
33
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
27
34
|
attribute :>> acceptanceCriteria = "A 0.1 mL air bolus stops delivery and raises a high-priority alarm.";
|
|
28
|
-
attribute :>> status =
|
|
35
|
+
attribute :>> status = ElementStatusKind::approved;
|
|
36
|
+
|
|
37
|
+
objective { verify reqAirInLine; }
|
|
38
|
+
subject verified : Base::Anything[*] = (fnEnsureSafety.fnDetectAirInLine);
|
|
29
39
|
}
|
|
30
40
|
verification vcAlarmSignals : VerificationCase {
|
|
31
41
|
attribute :>> id = "NDS-VER-004"; attribute :>> name = "VerifyAlarmSignals";
|
|
32
42
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
33
43
|
attribute :>> acceptanceCriteria = "Alarm signals conform to IEC 60601-1-8 for every priority, and persist until cleared or acknowledged.";
|
|
34
|
-
attribute :>> status =
|
|
44
|
+
attribute :>> status = ElementStatusKind::approved;
|
|
45
|
+
|
|
46
|
+
objective { verify reqAlarmAnnunciation; }
|
|
47
|
+
subject verified : Base::Anything[*] = (fnInformUser.fnAnnunciateAlarm);
|
|
35
48
|
}
|
|
36
49
|
verification vcBatteryEndurance : VerificationCase {
|
|
37
50
|
attribute :>> id = "NDS-VER-005"; attribute :>> name = "VerifyBatteryEndurance";
|
|
38
51
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
39
52
|
attribute :>> acceptanceCriteria = "Delivery continues for at least 4 hours at 25 mL/h from a fully charged battery after mains loss.";
|
|
40
|
-
attribute :>> status =
|
|
53
|
+
attribute :>> status = ElementStatusKind::approved;
|
|
54
|
+
|
|
55
|
+
objective { verify reqBatteryEndurance; }
|
|
56
|
+
subject verified : Base::Anything[*] = (fnManagePower, fnManagePower.fnMonitorBattery);
|
|
41
57
|
}
|
|
42
58
|
verification vcConfirmationFlow : VerificationCase {
|
|
43
59
|
attribute :>> id = "NDS-VER-006"; attribute :>> name = "VerifyConfirmationFlow";
|
|
44
60
|
attribute :>> methodKind = VerificationMethodKind::demonstration;
|
|
45
61
|
attribute :>> acceptanceCriteria = "No rate change reaches the controller without an explicit confirmation step.";
|
|
46
|
-
attribute :>> status =
|
|
62
|
+
attribute :>> status = ElementStatusKind::approved;
|
|
63
|
+
|
|
64
|
+
objective { verify reqPrescriptionConfirmation; }
|
|
65
|
+
subject verified : Base::Anything[*] = (fnDeliverTherapy.fnControlDose.fnValidatePrescription, fnInformUser.fnAcceptInput);
|
|
47
66
|
}
|
|
48
67
|
verification vcStatusLegibility : VerificationCase {
|
|
49
68
|
attribute :>> id = "NDS-VER-007"; attribute :>> name = "VerifyStatusLegibility";
|
|
50
69
|
attribute :>> methodKind = VerificationMethodKind::inspection;
|
|
51
70
|
attribute :>> acceptanceCriteria = "Rate and volume delivered are readable at 1 m under 100–1000 lux.";
|
|
52
|
-
attribute :>> status =
|
|
71
|
+
attribute :>> status = ElementStatusKind::approved;
|
|
72
|
+
|
|
73
|
+
objective { verify reqStatusVisibility; }
|
|
74
|
+
subject verified : Base::Anything[*] = (fnInformUser, fnInformUser.fnRenderStatus);
|
|
53
75
|
}
|
|
54
76
|
verification vcPowerSourceSwitch : VerificationCase {
|
|
55
77
|
attribute :>> id = "NDS-VER-008"; attribute :>> name = "VerifyPowerSourceSwitch";
|
|
56
78
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
57
79
|
attribute :>> acceptanceCriteria = "Rail brownout switches source without interrupting delivery.";
|
|
58
|
-
attribute :>> status =
|
|
80
|
+
attribute :>> status = ElementStatusKind::approved;
|
|
81
|
+
|
|
82
|
+
subject verified : Base::Anything[*] = (fnManagePower.fnSelectPowerSource);
|
|
59
83
|
}
|
|
60
84
|
|
|
61
85
|
// Requirement → verification case.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
connection verStatus : VerifiedBy connect verificationTarget ::> reqStatusVisibility to verificationCase ::> vcStatusLegibility;
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
69
92
|
|
|
70
93
|
// Function → verification case, so safety-critical functions carry their
|
|
71
94
|
// own verification rather than inheriting it through a requirement.
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
|
|
90
113
|
}
|
|
@@ -15,35 +15,34 @@ package memo_examples_nested_architecture_dsm_traces {
|
|
|
15
15
|
private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
|
|
16
16
|
|
|
17
17
|
// ── Function → block allocation ──────────────────────────────
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
allocate fnDeliverTherapy.fnMeterFluid.fnDriveActuator to sysTherapyDelivery.subFluidPath.lcPumpMechanism;
|
|
19
|
+
allocate fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered to sysTherapyDelivery.subFluidPath.lcPumpMechanism;
|
|
20
|
+
allocate fnDeliverTherapy.fnControlDose.fnComputeRate to sysTherapyDelivery.subControl.lcDoseController;
|
|
21
|
+
allocate fnDeliverTherapy.fnControlDose.fnValidatePrescription to sysTherapyDelivery.subControl.lcDoseController;
|
|
22
|
+
allocate fnEnsureSafety.fnDetectOcclusion to sysTherapyDelivery.subFluidPath.lcOcclusionChannel;
|
|
23
|
+
allocate fnEnsureSafety.fnDetectAirInLine to sysTherapyDelivery.subFluidPath.lcOcclusionChannel;
|
|
24
24
|
// Two channels carry the same protective function — the redundancy shows
|
|
25
25
|
// up in the matrix as two marks on one row.
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
allocate fnEnsureSafety.fnEnforceDoseLimits to sysTherapyDelivery.subControl.subSafetyMonitor.lcWatchdogChannel;
|
|
27
|
+
allocate fnEnsureSafety.fnEnforceDoseLimits to sysTherapyDelivery.subControl.subSafetyMonitor.lcPressureIntegrityChannel;
|
|
28
|
+
allocate fnInformUser.fnRenderStatus to sysTherapyDelivery.subUserInterface.lcDisplayManager;
|
|
29
|
+
allocate fnInformUser.fnAnnunciateAlarm to sysTherapyDelivery.subUserInterface.lcAlarmAnnunciator;
|
|
30
|
+
allocate fnInformUser.fnAcceptInput to sysTherapyDelivery.subUserInterface.lcKeypadHandler;
|
|
31
|
+
allocate fnManagePower.fnMonitorBattery to sysTherapyDelivery.subPower.lcBatteryManager;
|
|
32
|
+
allocate fnManagePower.fnSelectPowerSource to sysTherapyDelivery.subPower.lcPowerRailMonitor;
|
|
33
33
|
// A capability allocated at subsystem level rather than to one component:
|
|
34
34
|
// collapsed, it lands in the same cell as its children's allocations.
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
allocate fnDeliverTherapy.fnMeterFluid to sysTherapyDelivery.subFluidPath;
|
|
37
36
|
// ── Requirement → function satisfaction ──────────────────────
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
49
48
|
}
|
|
@@ -24,8 +24,9 @@ package memo_examples_reusable_instrument {
|
|
|
24
24
|
attribute :>> goalStatement = "Return a used instrument to sterile, functional condition for the next case.";
|
|
25
25
|
attribute :>> preCondition = "instrument collected from the OR; gross soil removed at point of use";
|
|
26
26
|
attribute :>> successOutcome = "instrument cleaned, inspected, sterilized, and released to sterile storage";
|
|
27
|
+
subject supportingSystem;
|
|
28
|
+
actor sterileProcessingTechActor = sterileProcessingTech;
|
|
27
29
|
}
|
|
28
|
-
connection : Initiates connect initiatingUser ::> sterileProcessingTech to initiatedUseCase ::> ucSterilize;
|
|
29
30
|
|
|
30
31
|
// Reprocessing workflow: exists independently of any single instrument.
|
|
31
32
|
action wfReprocess : OperationalWorkflow {
|
|
@@ -33,6 +34,9 @@ package memo_examples_reusable_instrument {
|
|
|
33
34
|
attribute :>> workflowState = WorkflowStateKind::asIs;
|
|
34
35
|
attribute :>> entryCondition = "used instrument received in decontamination";
|
|
35
36
|
attribute :>> completionCondition = "sterile pack released to storage";
|
|
37
|
+
|
|
38
|
+
action wsClean : WorkflowStep { ref :>> performedActivity = actClean; }
|
|
39
|
+
first wsClean then wsInspect;
|
|
36
40
|
}
|
|
37
41
|
action actClean : OperationalActivity {
|
|
38
42
|
attribute :>> id = "RI-ACT-001"; attribute :>> name = "CleanAndDisinfect";
|
|
@@ -46,16 +50,14 @@ package memo_examples_reusable_instrument {
|
|
|
46
50
|
attribute :>> id = "RI-ACT-003"; attribute :>> name = "PackAndAutoclave";
|
|
47
51
|
attribute :>> criticality = CriticalityKind::high;
|
|
48
52
|
}
|
|
49
|
-
action wsClean : WorkflowStep { ref :>> performedActivity = actClean; }
|
|
50
53
|
action wsInspect : WorkflowStep { ref :>> performedActivity = actInspect; }
|
|
51
54
|
action wsSterilize : WorkflowStep { ref :>> performedActivity = actSterilizeLoad; }
|
|
52
|
-
connection : Composes connect parent ::> wfReprocess to child ::> wsClean;
|
|
53
|
-
first wsClean then wsInspect;
|
|
54
55
|
first wsInspect then wsSterilize;
|
|
55
56
|
connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfReprocess to supported ::> ucSterilize; }
|
|
56
57
|
|
|
57
|
-
action scNominalCycle :
|
|
58
|
+
action scNominalCycle : MemoScenario {
|
|
58
59
|
attribute :>> id = "RI-SC-001"; attribute :>> name = "NominalReprocessingCycle";
|
|
60
|
+
attribute :>> scenarioKind = ScenarioKind::operative;
|
|
59
61
|
attribute :>> variantKind = ScenarioVariantKind::nominal;
|
|
60
62
|
attribute :>> operationalCondition = OperationalConditionKind::normal;
|
|
61
63
|
ref :>> parentWorkflow = wfReprocess;
|