@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
package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml
CHANGED
|
@@ -4,9 +4,11 @@ package memo_examples_gpca_pump_viewpoints_verification_views_document_vv_view {
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
5
5
|
private import memo_viewpoints_verification_verification_viewpoint::*;
|
|
6
6
|
private import memo_core_enumerations::*;
|
|
7
|
+
private import memo_examples_gpca_pump_gpca_verification::*;
|
|
7
8
|
|
|
8
9
|
view vvView : MemoDocumentView {
|
|
9
10
|
expose memo_examples_gpca_pump_viewpoints_verification_views_document_vv_view::*;
|
|
11
|
+
expose evidenceSafetyAlarmSuite;
|
|
10
12
|
attribute :>> id = "DOC-006";
|
|
11
13
|
attribute :>> name = "VerificationValidationView";
|
|
12
14
|
attribute :>> title = "GPCA Verification and Validation View";
|
|
@@ -23,8 +25,8 @@ package memo_examples_gpca_pump_viewpoints_verification_views_document_vv_view {
|
|
|
23
25
|
part :>> selectionQuery {
|
|
24
26
|
attribute :>> id = "QRY-DOC-006";
|
|
25
27
|
attribute :>> name = "vvViewQuery";
|
|
26
|
-
attribute :>> includeElementKinds = ("VerificationCase", "ValidationCase", "
|
|
27
|
-
attribute :>> includeRelationshipKinds = ("VerifiedBy", "Validates", "TestedByUsability", "ProducesEvidence"
|
|
28
|
+
attribute :>> includeElementKinds = ("VerificationCase", "ValidationCase", "MemoEvidence", "Requirement", "RiskControlMeasure");
|
|
29
|
+
attribute :>> includeRelationshipKinds = ("VerifiedBy", "Validates", "TestedByUsability", "ProducesEvidence");
|
|
28
30
|
attribute :>> rationaleText = "Declares what this document-backed view renders; the web renderer is presentation-only.";
|
|
29
31
|
}
|
|
30
32
|
}
|
|
@@ -31,7 +31,7 @@ package memo_examples_gpca_pump_viewpoints_verification_views_verification_verif
|
|
|
31
31
|
part :>> selectionQuery {
|
|
32
32
|
attribute :>> id = "QRY-VER-101";
|
|
33
33
|
attribute :>> name = "GPCA_VerificationCoverageQuery";
|
|
34
|
-
attribute :>> includeElementKinds = ("Requirement", "RiskControlMeasure", "VerificationCase", "ValidationCase", "
|
|
34
|
+
attribute :>> includeElementKinds = ("Requirement", "RiskControlMeasure", "VerificationCase", "ValidationCase", "MemoEvidence");
|
|
35
35
|
attribute :>> includeRelationshipKinds = ("VerifiedBy", "Validates", "ProducesEvidence");
|
|
36
36
|
attribute :>> includeLayers = ("requirements", "risk", "assurance");
|
|
37
37
|
attribute :>> selectionExpression = "product == 'GPCA'";
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// without adding functional, logical, or software layers.
|
|
4
4
|
package memo_examples_manual_surgical_instrument {
|
|
5
5
|
private import ScalarValues::*;
|
|
6
|
+
private import ModelingMetadata::*;
|
|
6
7
|
|
|
7
8
|
private import memo_core_enumerations::*;
|
|
8
9
|
private import memo_core_relationships::*;
|
|
@@ -29,8 +30,8 @@ package memo_examples_manual_surgical_instrument {
|
|
|
29
30
|
attribute :>> mechanicalFunction = "maintains jaw clamping force without continuous grip";
|
|
30
31
|
attribute :>> patientContact = false;
|
|
31
32
|
}
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
#refinement dependency needleHolder to jawAssembly;
|
|
34
|
+
#refinement dependency needleHolder to ratchetLock;
|
|
34
35
|
|
|
35
36
|
// A task may be traced to the architecture later when the project has a
|
|
36
37
|
// specific allocation or interaction claim to make.
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
// through relationships.
|
|
9
9
|
package memo_examples_multidimensional_layers {
|
|
10
10
|
private import ScalarValues::*;
|
|
11
|
+
private import ModelingMetadata::*;
|
|
11
12
|
|
|
12
13
|
private import memo_core_enumerations::*;
|
|
13
14
|
private import memo_core_dimensions::*;
|
|
@@ -37,15 +38,18 @@ package memo_examples_multidimensional_layers {
|
|
|
37
38
|
attribute :>> periodMs = 50.0;
|
|
38
39
|
attribute :>> deadlineMs = 50.0;
|
|
39
40
|
attribute :>> wcetMs = 8.0;
|
|
41
|
+
attribute :>> memoryBudget = 64.0;
|
|
40
42
|
attribute :>> schedulingPolicy = SchedulingPolicyKind::fixedPriorityPreemptive;
|
|
41
43
|
attribute :>> realizationStage = RealizationStageKind::deployed;
|
|
42
44
|
}
|
|
43
|
-
|
|
45
|
+
#refinement dependency doseLimitCheckerRuntime to doseLimitChecker;
|
|
44
46
|
|
|
45
47
|
verification vcLimitEnforcement : VerificationCase {
|
|
46
48
|
attribute :>> id = "MDL-VC-001"; attribute :>> name = "VerifyHardLimitEnforcement";
|
|
47
49
|
attribute :>> methodKind = VerificationMethodKind::test;
|
|
48
50
|
attribute :>> acceptanceCriteria = "all out-of-limit programs rejected across the equivalence classes";
|
|
51
|
+
|
|
52
|
+
subject verified : Base::Anything[*] = (doseLimitChecker);
|
|
49
53
|
}
|
|
50
|
-
|
|
54
|
+
|
|
51
55
|
}
|
package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml
CHANGED
|
@@ -1,174 +1,179 @@
|
|
|
1
1
|
// Functional architecture — the row axis of the DSM.
|
|
2
2
|
//
|
|
3
|
-
// Four capability trees, each
|
|
3
|
+
// Four capability trees, each a native containment tree, plus the functional
|
|
4
4
|
// exchanges between the leaves. The exchanges are deliberately not a clean
|
|
5
5
|
// pipeline: DriveActuator and MeasureDeliveredVolume feed each other, so a
|
|
6
6
|
// partitioned DSM still shows one genuine feedback mark instead of an empty
|
|
7
7
|
// lower triangle.
|
|
8
8
|
package memo_examples_nested_architecture_dsm_architecture_functional_functions {
|
|
9
|
+
private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
|
|
9
10
|
private import ScalarValues::*;
|
|
10
11
|
|
|
11
12
|
private import memo_core_enumerations::*;
|
|
12
13
|
private import memo_core_relationships::*;
|
|
13
14
|
private import memo_architecture_functional_functions::*;
|
|
15
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
14
16
|
|
|
15
17
|
// ── Deliver therapy ──────────────────────────────────────────
|
|
16
|
-
|
|
18
|
+
action fnDeliverTherapy : SystemFunction {
|
|
17
19
|
attribute :>> id = "NDS-FN-001"; attribute :>> name = "DeliverTherapy";
|
|
18
20
|
attribute :>> functionCategory = "therapy";
|
|
19
21
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
20
22
|
attribute :>> concernKind = ConcernKind::safety;
|
|
21
23
|
attribute :>> outputSummary = "fluid delivered to the patient line at the prescribed rate";
|
|
24
|
+
|
|
25
|
+
action fnMeterFluid : SystemFunction {
|
|
26
|
+
attribute :>> id = "NDS-FN-002"; attribute :>> name = "MeterFluid";
|
|
27
|
+
attribute :>> functionCategory = "therapy";
|
|
28
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
29
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
30
|
+
attribute :>> outputSummary = "measured volume displaced per control period";
|
|
31
|
+
|
|
32
|
+
action fnDriveActuator : SystemFunction {
|
|
33
|
+
attribute :>> id = "NDS-FN-003"; attribute :>> name = "DriveActuator";
|
|
34
|
+
attribute :>> functionCategory = "therapy";
|
|
35
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
36
|
+
attribute :>> trigger = "rate command from the dose control loop";
|
|
37
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
38
|
+
}
|
|
39
|
+
action fnMeasureDelivered : SystemFunction {
|
|
40
|
+
attribute :>> id = "NDS-FN-004"; attribute :>> name = "MeasureDeliveredVolume";
|
|
41
|
+
attribute :>> functionCategory = "therapy";
|
|
42
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
43
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
44
|
+
attribute :>> outputSummary = "cumulative delivered volume";
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
action fnControlDose : SystemFunction {
|
|
48
|
+
attribute :>> id = "NDS-FN-005"; attribute :>> name = "ControlDose";
|
|
49
|
+
attribute :>> functionCategory = "therapy";
|
|
50
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
51
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
52
|
+
|
|
53
|
+
action fnComputeRate : SystemFunction {
|
|
54
|
+
attribute :>> id = "NDS-FN-006"; attribute :>> name = "ComputeInfusionRate";
|
|
55
|
+
attribute :>> functionCategory = "therapy";
|
|
56
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
57
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
58
|
+
attribute :>> outputSummary = "rate command, saturated at the prescribed ceiling";
|
|
59
|
+
}
|
|
60
|
+
action fnValidatePrescription : SystemFunction {
|
|
61
|
+
attribute :>> id = "NDS-FN-007"; attribute :>> name = "ValidatePrescription";
|
|
62
|
+
attribute :>> functionCategory = "therapy";
|
|
63
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
64
|
+
attribute :>> concernKind = ConcernKind::clinical;
|
|
65
|
+
attribute :>> outputSummary = "accepted or rejected prescription, with the reason";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
22
68
|
}
|
|
23
|
-
part fnMeterFluid : SystemFunction {
|
|
24
|
-
attribute :>> id = "NDS-FN-002"; attribute :>> name = "MeterFluid";
|
|
25
|
-
attribute :>> functionCategory = "therapy";
|
|
26
|
-
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
27
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
28
|
-
attribute :>> outputSummary = "measured volume displaced per control period";
|
|
29
|
-
}
|
|
30
|
-
part fnDriveActuator : SystemFunction {
|
|
31
|
-
attribute :>> id = "NDS-FN-003"; attribute :>> name = "DriveActuator";
|
|
32
|
-
attribute :>> functionCategory = "therapy";
|
|
33
|
-
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
34
|
-
attribute :>> trigger = "rate command from the dose control loop";
|
|
35
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
36
|
-
}
|
|
37
|
-
part fnMeasureDelivered : SystemFunction {
|
|
38
|
-
attribute :>> id = "NDS-FN-004"; attribute :>> name = "MeasureDeliveredVolume";
|
|
39
|
-
attribute :>> functionCategory = "therapy";
|
|
40
|
-
attribute :>> criticality = CriticalityKind::high;
|
|
41
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
42
|
-
attribute :>> outputSummary = "cumulative delivered volume";
|
|
43
|
-
}
|
|
44
|
-
part fnControlDose : SystemFunction {
|
|
45
|
-
attribute :>> id = "NDS-FN-005"; attribute :>> name = "ControlDose";
|
|
46
|
-
attribute :>> functionCategory = "therapy";
|
|
47
|
-
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
48
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
49
|
-
}
|
|
50
|
-
part fnComputeRate : SystemFunction {
|
|
51
|
-
attribute :>> id = "NDS-FN-006"; attribute :>> name = "ComputeInfusionRate";
|
|
52
|
-
attribute :>> functionCategory = "therapy";
|
|
53
|
-
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
54
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
55
|
-
attribute :>> outputSummary = "rate command, saturated at the prescribed ceiling";
|
|
56
|
-
}
|
|
57
|
-
part fnValidatePrescription : SystemFunction {
|
|
58
|
-
attribute :>> id = "NDS-FN-007"; attribute :>> name = "ValidatePrescription";
|
|
59
|
-
attribute :>> functionCategory = "therapy";
|
|
60
|
-
attribute :>> criticality = CriticalityKind::high;
|
|
61
|
-
attribute :>> concernKind = ConcernKind::clinical;
|
|
62
|
-
attribute :>> outputSummary = "accepted or rejected prescription, with the reason";
|
|
63
|
-
}
|
|
64
|
-
connection : Composes connect parent ::> fnDeliverTherapy to child ::> fnMeterFluid;
|
|
65
|
-
connection : Composes connect parent ::> fnDeliverTherapy to child ::> fnControlDose;
|
|
66
|
-
connection : Composes connect parent ::> fnMeterFluid to child ::> fnDriveActuator;
|
|
67
|
-
connection : Composes connect parent ::> fnMeterFluid to child ::> fnMeasureDelivered;
|
|
68
|
-
connection : Composes connect parent ::> fnControlDose to child ::> fnComputeRate;
|
|
69
|
-
connection : Composes connect parent ::> fnControlDose to child ::> fnValidatePrescription;
|
|
70
69
|
|
|
71
70
|
// ── Ensure safety ────────────────────────────────────────────
|
|
72
|
-
|
|
71
|
+
action fnEnsureSafety : SystemFunction {
|
|
73
72
|
attribute :>> id = "NDS-FN-008"; attribute :>> name = "EnsureSafety";
|
|
74
73
|
attribute :>> functionCategory = "protection";
|
|
75
74
|
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
76
75
|
attribute :>> concernKind = ConcernKind::safety;
|
|
76
|
+
|
|
77
|
+
action fnDetectOcclusion : SystemFunction {
|
|
78
|
+
attribute :>> id = "NDS-FN-009"; attribute :>> name = "DetectOcclusion";
|
|
79
|
+
attribute :>> functionCategory = "protection";
|
|
80
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
81
|
+
attribute :>> trigger = "line pressure above the occlusion threshold";
|
|
82
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
83
|
+
}
|
|
84
|
+
action fnDetectAirInLine : SystemFunction {
|
|
85
|
+
attribute :>> id = "NDS-FN-010"; attribute :>> name = "DetectAirInLine";
|
|
86
|
+
attribute :>> functionCategory = "protection";
|
|
87
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
88
|
+
attribute :>> trigger = "air bolus detected in the patient line";
|
|
89
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
90
|
+
}
|
|
91
|
+
action fnEnforceDoseLimits : SystemFunction {
|
|
92
|
+
attribute :>> id = "NDS-FN-011"; attribute :>> name = "EnforceDoseLimits";
|
|
93
|
+
attribute :>> functionCategory = "protection";
|
|
94
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
95
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
96
|
+
attribute :>> outputSummary = "delivery stopped when the commanded dose leaves the accepted envelope";
|
|
97
|
+
}
|
|
77
98
|
}
|
|
78
|
-
part fnDetectOcclusion : SystemFunction {
|
|
79
|
-
attribute :>> id = "NDS-FN-009"; attribute :>> name = "DetectOcclusion";
|
|
80
|
-
attribute :>> functionCategory = "protection";
|
|
81
|
-
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
82
|
-
attribute :>> trigger = "line pressure above the occlusion threshold";
|
|
83
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
84
|
-
}
|
|
85
|
-
part fnDetectAirInLine : SystemFunction {
|
|
86
|
-
attribute :>> id = "NDS-FN-010"; attribute :>> name = "DetectAirInLine";
|
|
87
|
-
attribute :>> functionCategory = "protection";
|
|
88
|
-
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
89
|
-
attribute :>> trigger = "air bolus detected in the patient line";
|
|
90
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
91
|
-
}
|
|
92
|
-
part fnEnforceDoseLimits : SystemFunction {
|
|
93
|
-
attribute :>> id = "NDS-FN-011"; attribute :>> name = "EnforceDoseLimits";
|
|
94
|
-
attribute :>> functionCategory = "protection";
|
|
95
|
-
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
96
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
97
|
-
attribute :>> outputSummary = "delivery stopped when the commanded dose leaves the accepted envelope";
|
|
98
|
-
}
|
|
99
|
-
connection : Composes connect parent ::> fnEnsureSafety to child ::> fnDetectOcclusion;
|
|
100
|
-
connection : Composes connect parent ::> fnEnsureSafety to child ::> fnDetectAirInLine;
|
|
101
|
-
connection : Composes connect parent ::> fnEnsureSafety to child ::> fnEnforceDoseLimits;
|
|
102
99
|
|
|
103
100
|
// ── Inform the user ──────────────────────────────────────────
|
|
104
|
-
|
|
101
|
+
action fnInformUser : SystemFunction {
|
|
105
102
|
attribute :>> id = "NDS-FN-012"; attribute :>> name = "InformUser";
|
|
106
103
|
attribute :>> functionCategory = "interaction";
|
|
107
104
|
attribute :>> criticality = CriticalityKind::high;
|
|
108
105
|
attribute :>> concernKind = ConcernKind::usability;
|
|
106
|
+
|
|
107
|
+
action fnRenderStatus : SystemFunction {
|
|
108
|
+
attribute :>> id = "NDS-FN-013"; attribute :>> name = "RenderTherapyStatus";
|
|
109
|
+
attribute :>> functionCategory = "interaction";
|
|
110
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
111
|
+
attribute :>> concernKind = ConcernKind::usability;
|
|
112
|
+
attribute :>> outputSummary = "rate, volume delivered and time remaining";
|
|
113
|
+
}
|
|
114
|
+
action fnAnnunciateAlarm : SystemFunction {
|
|
115
|
+
attribute :>> id = "NDS-FN-014"; attribute :>> name = "AnnunciateAlarm";
|
|
116
|
+
attribute :>> functionCategory = "interaction";
|
|
117
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
118
|
+
attribute :>> trigger = "any active alarm condition";
|
|
119
|
+
attribute :>> concernKind = ConcernKind::safety;
|
|
120
|
+
}
|
|
121
|
+
action fnAcceptInput : SystemFunction {
|
|
122
|
+
attribute :>> id = "NDS-FN-015"; attribute :>> name = "AcceptClinicianInput";
|
|
123
|
+
attribute :>> functionCategory = "interaction";
|
|
124
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
125
|
+
attribute :>> concernKind = ConcernKind::usability;
|
|
126
|
+
attribute :>> outputSummary = "confirmed prescription changes";
|
|
127
|
+
}
|
|
109
128
|
}
|
|
110
|
-
part fnRenderStatus : SystemFunction {
|
|
111
|
-
attribute :>> id = "NDS-FN-013"; attribute :>> name = "RenderTherapyStatus";
|
|
112
|
-
attribute :>> functionCategory = "interaction";
|
|
113
|
-
attribute :>> criticality = CriticalityKind::high;
|
|
114
|
-
attribute :>> concernKind = ConcernKind::usability;
|
|
115
|
-
attribute :>> outputSummary = "rate, volume delivered and time remaining";
|
|
116
|
-
}
|
|
117
|
-
part fnAnnunciateAlarm : SystemFunction {
|
|
118
|
-
attribute :>> id = "NDS-FN-014"; attribute :>> name = "AnnunciateAlarm";
|
|
119
|
-
attribute :>> functionCategory = "interaction";
|
|
120
|
-
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
121
|
-
attribute :>> trigger = "any active alarm condition";
|
|
122
|
-
attribute :>> concernKind = ConcernKind::safety;
|
|
123
|
-
}
|
|
124
|
-
part fnAcceptInput : SystemFunction {
|
|
125
|
-
attribute :>> id = "NDS-FN-015"; attribute :>> name = "AcceptClinicianInput";
|
|
126
|
-
attribute :>> functionCategory = "interaction";
|
|
127
|
-
attribute :>> criticality = CriticalityKind::high;
|
|
128
|
-
attribute :>> concernKind = ConcernKind::usability;
|
|
129
|
-
attribute :>> outputSummary = "confirmed prescription changes";
|
|
130
|
-
}
|
|
131
|
-
connection : Composes connect parent ::> fnInformUser to child ::> fnRenderStatus;
|
|
132
|
-
connection : Composes connect parent ::> fnInformUser to child ::> fnAnnunciateAlarm;
|
|
133
|
-
connection : Composes connect parent ::> fnInformUser to child ::> fnAcceptInput;
|
|
134
129
|
|
|
135
130
|
// ── Manage power ─────────────────────────────────────────────
|
|
136
|
-
|
|
131
|
+
action fnManagePower : SystemFunction {
|
|
137
132
|
attribute :>> id = "NDS-FN-016"; attribute :>> name = "ManagePower";
|
|
138
133
|
attribute :>> functionCategory = "platform";
|
|
139
134
|
attribute :>> criticality = CriticalityKind::high;
|
|
140
135
|
attribute :>> concernKind = ConcernKind::reliability;
|
|
136
|
+
|
|
137
|
+
action fnMonitorBattery : SystemFunction {
|
|
138
|
+
attribute :>> id = "NDS-FN-017"; attribute :>> name = "MonitorBatteryState";
|
|
139
|
+
attribute :>> functionCategory = "platform";
|
|
140
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
141
|
+
attribute :>> concernKind = ConcernKind::reliability;
|
|
142
|
+
attribute :>> outputSummary = "state of charge and remaining run time";
|
|
143
|
+
}
|
|
144
|
+
action fnSelectPowerSource : SystemFunction {
|
|
145
|
+
attribute :>> id = "NDS-FN-018"; attribute :>> name = "SelectPowerSource";
|
|
146
|
+
attribute :>> functionCategory = "platform";
|
|
147
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
148
|
+
attribute :>> trigger = "mains loss or rail brownout";
|
|
149
|
+
attribute :>> concernKind = ConcernKind::reliability;
|
|
150
|
+
}
|
|
141
151
|
}
|
|
142
|
-
part fnMonitorBattery : SystemFunction {
|
|
143
|
-
attribute :>> id = "NDS-FN-017"; attribute :>> name = "MonitorBatteryState";
|
|
144
|
-
attribute :>> functionCategory = "platform";
|
|
145
|
-
attribute :>> criticality = CriticalityKind::high;
|
|
146
|
-
attribute :>> concernKind = ConcernKind::reliability;
|
|
147
|
-
attribute :>> outputSummary = "state of charge and remaining run time";
|
|
148
|
-
}
|
|
149
|
-
part fnSelectPowerSource : SystemFunction {
|
|
150
|
-
attribute :>> id = "NDS-FN-018"; attribute :>> name = "SelectPowerSource";
|
|
151
|
-
attribute :>> functionCategory = "platform";
|
|
152
|
-
attribute :>> criticality = CriticalityKind::high;
|
|
153
|
-
attribute :>> trigger = "mains loss or rail brownout";
|
|
154
|
-
attribute :>> concernKind = ConcernKind::reliability;
|
|
155
|
-
}
|
|
156
|
-
connection : Composes connect parent ::> fnManagePower to child ::> fnMonitorBattery;
|
|
157
|
-
connection : Composes connect parent ::> fnManagePower to child ::> fnSelectPowerSource;
|
|
158
152
|
|
|
159
153
|
// ── Functional exchange ──────────────────────────────────────
|
|
160
154
|
// Cross-tree marks are the interesting ones: they are what a collapsed DSM
|
|
161
155
|
// rolls up into a single number between two capabilities.
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
156
|
+
flow from fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered to fnDeliverTherapy.fnControlDose.fnComputeRate;
|
|
157
|
+
flow from fnDeliverTherapy.fnControlDose.fnComputeRate to fnDeliverTherapy.fnMeterFluid.fnDriveActuator;
|
|
158
|
+
flow from fnDeliverTherapy.fnMeterFluid.fnDriveActuator to fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered;
|
|
159
|
+
flow from fnDeliverTherapy.fnControlDose.fnValidatePrescription to fnDeliverTherapy.fnControlDose.fnComputeRate;
|
|
160
|
+
flow from fnInformUser.fnAcceptInput to fnDeliverTherapy.fnControlDose.fnValidatePrescription;
|
|
161
|
+
flow from fnEnsureSafety.fnDetectOcclusion to fnEnsureSafety.fnEnforceDoseLimits;
|
|
162
|
+
flow from fnEnsureSafety.fnDetectAirInLine to fnInformUser.fnAnnunciateAlarm;
|
|
163
|
+
flow from fnEnsureSafety.fnEnforceDoseLimits to fnDeliverTherapy.fnMeterFluid.fnDriveActuator;
|
|
164
|
+
flow from fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered to fnInformUser.fnRenderStatus;
|
|
165
|
+
flow from fnManagePower.fnMonitorBattery to fnInformUser.fnAnnunciateAlarm;
|
|
166
|
+
flow from fnManagePower.fnSelectPowerSource to fnDeliverTherapy.fnMeterFluid.fnDriveActuator;
|
|
167
|
+
flow from fnEnsureSafety.fnDetectOcclusion to fnInformUser.fnAnnunciateAlarm;
|
|
168
|
+
satisfy reqDoseAccuracy by fnDeliverTherapy.fnControlDose.fnComputeRate;
|
|
169
|
+
satisfy reqDoseAccuracy by fnDeliverTherapy.fnMeterFluid.fnDriveActuator;
|
|
170
|
+
satisfy reqOcclusionDetection by fnEnsureSafety.fnDetectOcclusion;
|
|
171
|
+
satisfy reqOcclusionDetection by fnEnsureSafety.fnEnforceDoseLimits;
|
|
172
|
+
satisfy reqAirInLine by fnEnsureSafety.fnDetectAirInLine;
|
|
173
|
+
satisfy reqAirInLine by fnInformUser.fnAnnunciateAlarm;
|
|
174
|
+
satisfy reqAlarmAnnunciation by fnInformUser.fnAnnunciateAlarm;
|
|
175
|
+
satisfy reqBatteryEndurance by fnManagePower.fnMonitorBattery;
|
|
176
|
+
satisfy reqBatteryEndurance by fnManagePower.fnSelectPowerSource;
|
|
177
|
+
satisfy reqPrescriptionConfirmation by fnInformUser.fnAcceptInput;
|
|
178
|
+
satisfy reqPrescriptionConfirmation by fnDeliverTherapy.fnControlDose.fnValidatePrescription;
|
|
174
179
|
}
|