@memoarchitect/ontology 0.8.22 → 0.10.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/examples/connected-patient-monitor/memo.package.yaml +3 -0
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
- package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
- package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
- package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +11 -9
- package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
- package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
- package/examples/functional-logical-physical/memo.package.yaml +3 -0
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +9 -7
- package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
- package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
- package/examples/gpca-pump/memo.identity.yaml +2179 -0
- package/examples/gpca-pump/memo.package.yaml +3 -0
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +27 -23
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +15 -15
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +146 -180
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +21 -33
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -11
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
- package/examples/gpca-pump/model/catalog/project.sysml +3 -1
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +7 -7
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +7 -7
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +7 -8
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +8 -9
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +7 -7
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +8 -9
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +8 -9
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +6 -7
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +6 -6
- package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +10 -8
- package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
- package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
- package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +7 -5
- package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
- package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
- package/examples/multidimensional-layers/memo.package.yaml +3 -0
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
- package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
- package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
- package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
- package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
- package/examples/reusable-instrument/memo.package.yaml +3 -0
- package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +23 -31
- package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
- package/examples/ros-mobile-robot/memo.package.yaml +3 -0
- package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +0 -1
- package/examples/software-only-medical-device/memo.package.yaml +3 -0
- package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -9
- package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
- package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
- package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -69
- package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
- package/examples/surgical-robot/memo.package.yaml +3 -0
- package/examples/surgical-robot/model/catalog/project.sysml +3 -1
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
- package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
- package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
- package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -11
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +4 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +3 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +17 -16
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +9 -8
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +4 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +3 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +4 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -9
- package/examples/temperature-alarm/memo.identity.yaml +64 -0
- package/examples/temperature-alarm/memo.package.yaml +3 -0
- package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +30 -29
- package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
- package/examples/ui-screen-regions/memo.package.yaml +3 -0
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
- package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
- package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
- package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +6 -5
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +6 -5
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +6 -5
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +4 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +4 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +4 -3
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
- package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/container/src/container_extension.sysml +2 -2
- package/extensions/container/src/methodology/container_methodology.sysml +3 -1
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
- package/extensions/ros/memo.package.yaml +1 -1
- package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
- package/extensions/template/src/extension.sysml +3 -1
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +2 -2
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/functional/behavior/memo_behavior.sysml +5 -5
- package/src/architecture/functional/functions/memo_functions.sysml +6 -6
- package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +7 -7
- package/src/architecture/implementation/ui/memo_ui.sysml +8 -31
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +4 -2
- package/src/architecture/logical/structure/memo_logical_structure.sysml +5 -5
- package/src/architecture/operational/activities/memo_activities.sysml +19 -28
- package/src/architecture/operational/context/actors/memo_actors.sysml +5 -4
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +7 -7
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +5 -14
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +12 -104
- package/src/architecture/operational/structure/memo_operational.sysml +42 -13
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -12
- package/src/architecture/operational/workflows/memo_workflows.sysml +20 -42
- package/src/architecture/realization/deployment/memo_deployment.sysml +26 -19
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
- package/src/artifacts/standards/cfr_21_820.sysml +80 -89
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
- package/src/artifacts/standards/iec_60601_1.sysml +108 -121
- package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
- package/src/artifacts/standards/iec_60812.sysml +21 -22
- package/src/artifacts/standards/iec_62304.sysml +150 -169
- package/src/artifacts/standards/iec_62366_1.sysml +80 -89
- package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
- package/src/artifacts/standards/iso_13485.sysml +80 -89
- package/src/artifacts/standards/iso_14971.sysml +66 -73
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
- package/src/artifacts/templates/dhf/system/sad.md +3 -3
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +2 -2
- package/src/assurance/human_factors/memo_human_factors.sysml +2 -2
- package/src/assurance/requirements/memo_requirements.sysml +2 -18
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +1 -1
- package/src/assurance/safety_risk/memo_risk.sysml +12 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
- package/src/core/common/memo_common.sysml +59 -55
- package/src/core/enumerations/memo_enumerations.sysml +1 -1
- package/src/core/relationships/memo_relationships.sysml +29 -56
- package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
- package/src/methodology/core/memo_core.sysml +0 -10
- package/src/methodology/profiles/memo_profiles.sysml +18 -16
- package/src/methodology/workflow/memo_workflow.sysml +5 -5
- package/src/rules/closure/closure_rules.sysml +22 -20
- package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
- package/src/rules/ontology/ontology_invariants.sysml +121 -48
- package/src/rules/quantitative/quantitative_rules.sysml +4 -2
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +58 -57
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +5 -4
- package/src/viewpoints/context/context_viewpoint.sysml +6 -5
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +6 -5
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +6 -6
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +36 -4
- package/src/viewpoints/functional/functional_viewpoint.sysml +6 -5
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +6 -5
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +6 -5
- package/src/viewpoints/logical/logical_viewpoint.sysml +5 -4
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +6 -5
- package/src/viewpoints/operational/operational_viewpoint.sysml +6 -5
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +7 -6
- package/src/viewpoints/physical/physical_viewpoint.sysml +5 -4
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +6 -5
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +6 -5
- package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +5 -4
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +6 -5
- package/src/viewpoints/risk/risk_viewpoint.sysml +5 -4
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +6 -5
- package/src/viewpoints/software/software_viewpoint.sysml +5 -4
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +6 -5
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +5 -4
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +5 -4
- package/src/viewpoints/verification/verification_viewpoint.sysml +5 -4
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +6 -5
- package/templates/connected-device/memo.package.yaml +2 -0
- package/templates/connected-device/model/catalog/project.sysml +3 -1
- package/templates/default/memo.package.yaml +2 -0
- package/templates/default/model/catalog/project.sysml +3 -1
- package/templates/infusion-pump/memo.package.yaml +2 -0
- package/templates/infusion-pump/model/catalog/project.sysml +3 -1
- package/templates/monitoring-device/memo.package.yaml +2 -0
- package/templates/monitoring-device/model/catalog/project.sysml +3 -1
- package/templates/samd/memo.package.yaml +2 -0
- package/templates/samd/model/catalog/project.sysml +3 -1
|
@@ -12,9 +12,11 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
12
12
|
private import memo_architecture_logical_structure::*;
|
|
13
13
|
private import memo_architecture_operational_context_use_context::*;
|
|
14
14
|
|
|
15
|
+
private import memo_core_common::*;
|
|
16
|
+
private import memo_core_common::MemoIdentity;
|
|
15
17
|
// ── Level 0: the system ──────────────────────────────────────
|
|
16
18
|
part sysTherapyDelivery : System {
|
|
17
|
-
|
|
19
|
+
@MemoIdentity { :>> providedId = "NDS-SYS-001"; } attribute :>> name = "TherapyDeliverySystem";
|
|
18
20
|
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
19
21
|
attribute :>> systemType = SystemTypeKind::logical;
|
|
20
22
|
attribute :>> systemBoundaryDescription = "Everything inside the pump enclosure, including its power path and user interface.";
|
|
@@ -22,35 +24,35 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
22
24
|
|
|
23
25
|
// ── Level 1: subsystems ──────────────────────────────────
|
|
24
26
|
part subFluidPath : Subsystem {
|
|
25
|
-
|
|
27
|
+
@MemoIdentity { :>> providedId = "NDS-SUB-001"; } attribute :>> name = "FluidPathSubsystem";
|
|
26
28
|
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
27
29
|
attribute :>> systemType = SystemTypeKind::hardware;
|
|
28
30
|
attribute :>> responsibility = "Move fluid from the reservoir to the patient line at a commanded rate.";
|
|
29
31
|
|
|
30
32
|
// ── Level 2/3: components ─────────────────────────────
|
|
31
33
|
part lcPumpMechanism : LogicalComponent {
|
|
32
|
-
|
|
34
|
+
@MemoIdentity { :>> providedId = "NDS-LC-001"; } attribute :>> name = "PumpMechanism";
|
|
33
35
|
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
34
36
|
attribute :>> systemType = SystemTypeKind::hardware;
|
|
35
37
|
attribute :>> responsibility = "Displace fluid under command.";
|
|
36
38
|
attribute :>> controlledVariable = "delivered volume per stroke";
|
|
37
39
|
}
|
|
38
40
|
part lcOcclusionChannel : LogicalComponent {
|
|
39
|
-
|
|
41
|
+
@MemoIdentity { :>> providedId = "NDS-LC-002"; } attribute :>> name = "OcclusionSensingChannel";
|
|
40
42
|
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
41
43
|
attribute :>> systemType = SystemTypeKind::hardware;
|
|
42
44
|
attribute :>> responsibility = "Sense line pressure and air in line.";
|
|
43
45
|
attribute :>> channelRole = ChannelRoleKind::primary;
|
|
44
46
|
}
|
|
45
47
|
part lcReservoirInterface : LogicalComponent {
|
|
46
|
-
|
|
48
|
+
@MemoIdentity { :>> providedId = "NDS-LC-003"; } attribute :>> name = "ReservoirInterface";
|
|
47
49
|
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
48
50
|
attribute :>> systemType = SystemTypeKind::hardware;
|
|
49
51
|
attribute :>> responsibility = "Seat the reservoir and expose its remaining volume.";
|
|
50
52
|
}
|
|
51
53
|
}
|
|
52
54
|
part subControl : Subsystem {
|
|
53
|
-
|
|
55
|
+
@MemoIdentity { :>> providedId = "NDS-SUB-002"; } attribute :>> name = "ControlSubsystem";
|
|
54
56
|
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
55
57
|
attribute :>> systemType = SystemTypeKind::software;
|
|
56
58
|
attribute :>> responsibility = "Decide what the fluid path should do, and hold the therapy state.";
|
|
@@ -60,14 +62,14 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
60
62
|
// which is what makes a collapsed ControlSubsystem row a genuine
|
|
61
63
|
// roll-up rather than a rename of its children.
|
|
62
64
|
part subSafetyMonitor : Subsystem {
|
|
63
|
-
|
|
65
|
+
@MemoIdentity { :>> providedId = "NDS-SUB-005"; } attribute :>> name = "SafetyMonitorSubsystem";
|
|
64
66
|
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
65
67
|
attribute :>> systemType = SystemTypeKind::software;
|
|
66
68
|
attribute :>> responsibility = "Watch the control path from outside it and stop delivery on breach.";
|
|
67
69
|
attribute :>> safetyPartition = "monitor partition, separate MPU region from the control partition";
|
|
68
70
|
|
|
69
71
|
part lcWatchdogChannel : LogicalComponent {
|
|
70
|
-
|
|
72
|
+
@MemoIdentity { :>> providedId = "NDS-LC-006"; } attribute :>> name = "WatchdogChannel";
|
|
71
73
|
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
72
74
|
attribute :>> systemType = SystemTypeKind::software;
|
|
73
75
|
attribute :>> responsibility = "Reset to the safe state when the control loop misses its deadline.";
|
|
@@ -75,7 +77,7 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
75
77
|
attribute :>> diversityBasis = "independent time base from the control partition";
|
|
76
78
|
}
|
|
77
79
|
part lcPressureIntegrityChannel : LogicalComponent {
|
|
78
|
-
|
|
80
|
+
@MemoIdentity { :>> providedId = "NDS-LC-007"; } attribute :>> name = "PressureIntegrityChannel";
|
|
79
81
|
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
80
82
|
attribute :>> systemType = SystemTypeKind::software;
|
|
81
83
|
attribute :>> responsibility = "Cross-check pressure against the commanded rate and stop on divergence.";
|
|
@@ -84,7 +86,7 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
part lcDoseController : LogicalComponent {
|
|
87
|
-
|
|
89
|
+
@MemoIdentity { :>> providedId = "NDS-LC-004"; } attribute :>> name = "DoseController";
|
|
88
90
|
attribute :>> componentRole = ComponentRoleKind::controlElement;
|
|
89
91
|
attribute :>> systemType = SystemTypeKind::software;
|
|
90
92
|
attribute :>> responsibility = "Turn a prescription into rate commands.";
|
|
@@ -92,7 +94,7 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
92
94
|
attribute :>> controlledVariable = "infusion rate";
|
|
93
95
|
}
|
|
94
96
|
part lcTherapyStateStore : LogicalComponent {
|
|
95
|
-
|
|
97
|
+
@MemoIdentity { :>> providedId = "NDS-LC-005"; } attribute :>> name = "TherapyStateStore";
|
|
96
98
|
attribute :>> componentRole = ComponentRoleKind::dataStore;
|
|
97
99
|
attribute :>> systemType = SystemTypeKind::software;
|
|
98
100
|
attribute :>> responsibility = "Hold the active therapy record across power cycles.";
|
|
@@ -101,27 +103,27 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
101
103
|
}
|
|
102
104
|
}
|
|
103
105
|
part subUserInterface : Subsystem {
|
|
104
|
-
|
|
106
|
+
@MemoIdentity { :>> providedId = "NDS-SUB-003"; } attribute :>> name = "UserInterfaceSubsystem";
|
|
105
107
|
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
106
108
|
attribute :>> systemType = SystemTypeKind::software;
|
|
107
109
|
attribute :>> responsibility = "Present therapy state to the clinician and accept their input.";
|
|
108
110
|
|
|
109
111
|
part lcDisplayManager : LogicalComponent {
|
|
110
|
-
|
|
112
|
+
@MemoIdentity { :>> providedId = "NDS-LC-008"; } attribute :>> name = "DisplayManager";
|
|
111
113
|
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
112
114
|
attribute :>> systemType = SystemTypeKind::software;
|
|
113
115
|
attribute :>> responsibility = "Render therapy state on the main screen.";
|
|
114
116
|
attribute :>> interactionSummary = "read-only status surface, refreshed once per second";
|
|
115
117
|
}
|
|
116
118
|
part lcAlarmAnnunciator : LogicalComponent {
|
|
117
|
-
|
|
119
|
+
@MemoIdentity { :>> providedId = "NDS-LC-009"; } attribute :>> name = "AlarmAnnunciator";
|
|
118
120
|
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
119
121
|
attribute :>> systemType = SystemTypeKind::software;
|
|
120
122
|
attribute :>> responsibility = "Raise audible and visible alarms by priority.";
|
|
121
123
|
attribute :>> interactionSummary = "IEC 60601-1-8 alarm signals";
|
|
122
124
|
}
|
|
123
125
|
part lcKeypadHandler : LogicalComponent {
|
|
124
|
-
|
|
126
|
+
@MemoIdentity { :>> providedId = "NDS-LC-010"; } attribute :>> name = "KeypadHandler";
|
|
125
127
|
attribute :>> componentRole = ComponentRoleKind::userInterface;
|
|
126
128
|
attribute :>> systemType = SystemTypeKind::software;
|
|
127
129
|
attribute :>> responsibility = "Debounce and interpret key presses.";
|
|
@@ -129,19 +131,19 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
|
|
|
129
131
|
}
|
|
130
132
|
}
|
|
131
133
|
part subPower : Subsystem {
|
|
132
|
-
|
|
134
|
+
@MemoIdentity { :>> providedId = "NDS-SUB-004"; } attribute :>> name = "PowerSubsystem";
|
|
133
135
|
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
134
136
|
attribute :>> systemType = SystemTypeKind::hardware;
|
|
135
137
|
attribute :>> responsibility = "Supply and monitor power across mains and battery operation.";
|
|
136
138
|
|
|
137
139
|
part lcBatteryManager : LogicalComponent {
|
|
138
|
-
|
|
140
|
+
@MemoIdentity { :>> providedId = "NDS-LC-011"; } attribute :>> name = "BatteryManager";
|
|
139
141
|
attribute :>> componentRole = ComponentRoleKind::generic;
|
|
140
142
|
attribute :>> systemType = SystemTypeKind::hardware;
|
|
141
143
|
attribute :>> responsibility = "Charge, gauge and protect the battery.";
|
|
142
144
|
}
|
|
143
145
|
part lcPowerRailMonitor : LogicalComponent {
|
|
144
|
-
|
|
146
|
+
@MemoIdentity { :>> providedId = "NDS-LC-012"; } attribute :>> name = "PowerRailMonitor";
|
|
145
147
|
attribute :>> componentRole = ComponentRoleKind::channel;
|
|
146
148
|
attribute :>> systemType = SystemTypeKind::hardware;
|
|
147
149
|
attribute :>> responsibility = "Detect rail brownout and request a source switch.";
|
|
@@ -10,27 +10,29 @@ package memo_examples_nested_architecture_dsm_assurance_requirements_needs {
|
|
|
10
10
|
private import memo_assurance_requirements_needs::*;
|
|
11
11
|
private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
|
|
12
12
|
|
|
13
|
+
private import memo_core_common::*;
|
|
14
|
+
private import memo_core_common::MemoIdentity;
|
|
13
15
|
requirement needAccurateTherapy : Need {
|
|
14
|
-
|
|
16
|
+
@MemoIdentity { :>> providedId = "NDS-NEED-001"; } attribute :>> name = "AccurateTherapyDelivery";
|
|
15
17
|
attribute :>> needKind = NeedKind::'stakeholder';
|
|
16
18
|
attribute :>> statement = "Clinicians need the delivered dose to match the prescription closely enough to be clinically safe.";
|
|
17
19
|
attribute :>> priority = "high";
|
|
18
20
|
}
|
|
19
21
|
requirement needProtectionFromHarm : Need {
|
|
20
|
-
|
|
22
|
+
@MemoIdentity { :>> providedId = "NDS-NEED-002"; } attribute :>> name = "ProtectionFromDeliveryFaults";
|
|
21
23
|
attribute :>> needKind = NeedKind::'stakeholder';
|
|
22
24
|
attribute :>> statement = "Patients need delivery to stop before a line fault or air bolus reaches them.";
|
|
23
25
|
attribute :>> priority = "high";
|
|
24
26
|
}
|
|
25
27
|
requirement needUninterruptedTherapy : Need {
|
|
26
|
-
|
|
28
|
+
@MemoIdentity { :>> providedId = "NDS-NEED-003"; } attribute :>> name = "UninterruptedTherapy";
|
|
27
29
|
attribute :>> needKind = NeedKind::operational;
|
|
28
30
|
attribute :>> statement = "Wards need therapy to continue through transport and mains interruptions.";
|
|
29
31
|
attribute :>> priority = "medium";
|
|
30
32
|
attribute :>> operationalContextReference = "intra-hospital transport, up to four hours off mains";
|
|
31
33
|
}
|
|
32
34
|
requirement needLegibleStatus : Need {
|
|
33
|
-
|
|
35
|
+
@MemoIdentity { :>> providedId = "NDS-NEED-004"; } attribute :>> name = "LegibleTherapyStatus";
|
|
34
36
|
attribute :>> needKind = NeedKind::'stakeholder';
|
|
35
37
|
attribute :>> statement = "Clinicians need to read therapy state and alarms correctly from the bedside.";
|
|
36
38
|
attribute :>> priority = "high";
|
package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml
CHANGED
|
@@ -10,8 +10,10 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
|
|
|
10
10
|
private import memo_core_relationships::*;
|
|
11
11
|
private import memo_assurance_requirements::*;
|
|
12
12
|
|
|
13
|
+
private import memo_core_common::*;
|
|
14
|
+
private import memo_core_common::MemoIdentity;
|
|
13
15
|
requirement reqDoseAccuracy : Requirement {
|
|
14
|
-
|
|
16
|
+
@MemoIdentity { :>> providedId = "NDS-REQ-001"; } attribute :>> name = "DoseAccuracy";
|
|
15
17
|
attribute :>> requirementKind = RequirementKind::system;
|
|
16
18
|
attribute :>> statement = "The pump shall deliver the prescribed volume within ±5% over any 60-minute window.";
|
|
17
19
|
attribute :>> notation = RequirementNotationKind::sophist;
|
|
@@ -20,7 +22,7 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
|
|
|
20
22
|
attribute :>> concernKind = ConcernKind::clinical;
|
|
21
23
|
}
|
|
22
24
|
requirement reqOcclusionDetection : Requirement {
|
|
23
|
-
|
|
25
|
+
@MemoIdentity { :>> providedId = "NDS-REQ-002"; } attribute :>> name = "OcclusionDetection";
|
|
24
26
|
attribute :>> requirementKind = RequirementKind::system;
|
|
25
27
|
attribute :>> statement = "When line pressure exceeds the occlusion threshold, the pump shall stop delivery within 2 seconds.";
|
|
26
28
|
attribute :>> notation = RequirementNotationKind::ears;
|
|
@@ -31,7 +33,7 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
|
|
|
31
33
|
attribute :>> concernKind = ConcernKind::safety;
|
|
32
34
|
}
|
|
33
35
|
requirement reqAirInLine : Requirement {
|
|
34
|
-
|
|
36
|
+
@MemoIdentity { :>> providedId = "NDS-REQ-003"; } attribute :>> name = "AirInLineProtection";
|
|
35
37
|
attribute :>> requirementKind = RequirementKind::system;
|
|
36
38
|
attribute :>> statement = "When an air bolus above 0.1 mL is detected, the pump shall stop delivery and raise a high-priority alarm.";
|
|
37
39
|
attribute :>> notation = RequirementNotationKind::ears;
|
|
@@ -42,7 +44,7 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
|
|
|
42
44
|
attribute :>> concernKind = ConcernKind::safety;
|
|
43
45
|
}
|
|
44
46
|
requirement reqAlarmAnnunciation : Requirement {
|
|
45
|
-
|
|
47
|
+
@MemoIdentity { :>> providedId = "NDS-REQ-004"; } attribute :>> name = "AlarmAnnunciation";
|
|
46
48
|
attribute :>> requirementKind = RequirementKind::software;
|
|
47
49
|
attribute :>> statement = "While any alarm condition is active, the pump shall present its IEC 60601-1-8 signal until the condition clears or is acknowledged.";
|
|
48
50
|
attribute :>> notation = RequirementNotationKind::ears;
|
|
@@ -54,7 +56,7 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
|
|
|
54
56
|
attribute :>> safetyClass = SafetyClassKind::C;
|
|
55
57
|
}
|
|
56
58
|
requirement reqBatteryEndurance : Requirement {
|
|
57
|
-
|
|
59
|
+
@MemoIdentity { :>> providedId = "NDS-REQ-005"; } attribute :>> name = "BatteryEndurance";
|
|
58
60
|
attribute :>> requirementKind = RequirementKind::system;
|
|
59
61
|
attribute :>> statement = "On loss of mains power, the pump shall continue delivery for at least 4 hours at 25 mL/h.";
|
|
60
62
|
attribute :>> notation = RequirementNotationKind::ears;
|
|
@@ -65,7 +67,7 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
|
|
|
65
67
|
attribute :>> concernKind = ConcernKind::reliability;
|
|
66
68
|
}
|
|
67
69
|
requirement reqPrescriptionConfirmation : Requirement {
|
|
68
|
-
|
|
70
|
+
@MemoIdentity { :>> providedId = "NDS-REQ-006"; } attribute :>> name = "PrescriptionConfirmation";
|
|
69
71
|
attribute :>> requirementKind = RequirementKind::software;
|
|
70
72
|
attribute :>> statement = "When the clinician changes the infusion rate, the pump shall require explicit confirmation before applying it.";
|
|
71
73
|
attribute :>> notation = RequirementNotationKind::ears;
|
|
@@ -78,7 +80,7 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
|
|
|
78
80
|
}
|
|
79
81
|
// Untraced on purpose — the gap the traceability view is meant to find.
|
|
80
82
|
requirement reqStatusVisibility : Requirement {
|
|
81
|
-
|
|
83
|
+
@MemoIdentity { :>> providedId = "NDS-REQ-007"; } attribute :>> name = "StatusVisibility";
|
|
82
84
|
attribute :>> requirementKind = RequirementKind::system;
|
|
83
85
|
attribute :>> statement = "The pump shall display the active rate and volume delivered legibly at 1 m.";
|
|
84
86
|
attribute :>> notation = RequirementNotationKind::sophist;
|
|
@@ -10,9 +10,11 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
10
10
|
private import memo_examples_nested_architecture_dsm_architecture_functional_functions::*;
|
|
11
11
|
private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
|
|
12
12
|
|
|
13
|
+
private import memo_core_common::*;
|
|
14
|
+
private import memo_core_common::MemoIdentity;
|
|
13
15
|
verification vcDoseAccuracy : VerificationCase {
|
|
14
|
-
|
|
15
|
-
attribute :>> methodKind =
|
|
16
|
+
@MemoIdentity { :>> providedId = "NDS-VER-001"; } attribute :>> name = "VerifyDoseAccuracy";
|
|
17
|
+
attribute :>> methodKind = MemoVerificationMethodKind::test;
|
|
16
18
|
attribute :>> acceptanceCriteria = "Gravimetric delivery over 60 minutes is within ±5% of the prescribed volume at 1, 25 and 999 mL/h.";
|
|
17
19
|
attribute :>> status = ElementStatusKind::approved;
|
|
18
20
|
|
|
@@ -20,8 +22,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
20
22
|
subject verified : Base::Anything[*] = (fnDeliverTherapy, fnDeliverTherapy.fnMeterFluid, fnDeliverTherapy.fnMeterFluid.fnDriveActuator, fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered, fnDeliverTherapy.fnControlDose, fnDeliverTherapy.fnControlDose.fnComputeRate);
|
|
21
23
|
}
|
|
22
24
|
verification vcOcclusionResponse : VerificationCase {
|
|
23
|
-
|
|
24
|
-
attribute :>> methodKind =
|
|
25
|
+
@MemoIdentity { :>> providedId = "NDS-VER-002"; } attribute :>> name = "VerifyOcclusionResponse";
|
|
26
|
+
attribute :>> methodKind = MemoVerificationMethodKind::test;
|
|
25
27
|
attribute :>> acceptanceCriteria = "Delivery stops within 2 s of the occlusion threshold being crossed, at every supported rate.";
|
|
26
28
|
attribute :>> status = ElementStatusKind::approved;
|
|
27
29
|
|
|
@@ -29,8 +31,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
29
31
|
subject verified : Base::Anything[*] = (fnEnsureSafety, fnEnsureSafety.fnDetectOcclusion, fnEnsureSafety.fnEnforceDoseLimits);
|
|
30
32
|
}
|
|
31
33
|
verification vcAirInLineResponse : VerificationCase {
|
|
32
|
-
|
|
33
|
-
attribute :>> methodKind =
|
|
34
|
+
@MemoIdentity { :>> providedId = "NDS-VER-003"; } attribute :>> name = "VerifyAirInLineResponse";
|
|
35
|
+
attribute :>> methodKind = MemoVerificationMethodKind::test;
|
|
34
36
|
attribute :>> acceptanceCriteria = "A 0.1 mL air bolus stops delivery and raises a high-priority alarm.";
|
|
35
37
|
attribute :>> status = ElementStatusKind::approved;
|
|
36
38
|
|
|
@@ -38,8 +40,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
38
40
|
subject verified : Base::Anything[*] = (fnEnsureSafety.fnDetectAirInLine);
|
|
39
41
|
}
|
|
40
42
|
verification vcAlarmSignals : VerificationCase {
|
|
41
|
-
|
|
42
|
-
attribute :>> methodKind =
|
|
43
|
+
@MemoIdentity { :>> providedId = "NDS-VER-004"; } attribute :>> name = "VerifyAlarmSignals";
|
|
44
|
+
attribute :>> methodKind = MemoVerificationMethodKind::test;
|
|
43
45
|
attribute :>> acceptanceCriteria = "Alarm signals conform to IEC 60601-1-8 for every priority, and persist until cleared or acknowledged.";
|
|
44
46
|
attribute :>> status = ElementStatusKind::approved;
|
|
45
47
|
|
|
@@ -47,8 +49,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
47
49
|
subject verified : Base::Anything[*] = (fnInformUser.fnAnnunciateAlarm);
|
|
48
50
|
}
|
|
49
51
|
verification vcBatteryEndurance : VerificationCase {
|
|
50
|
-
|
|
51
|
-
attribute :>> methodKind =
|
|
52
|
+
@MemoIdentity { :>> providedId = "NDS-VER-005"; } attribute :>> name = "VerifyBatteryEndurance";
|
|
53
|
+
attribute :>> methodKind = MemoVerificationMethodKind::test;
|
|
52
54
|
attribute :>> acceptanceCriteria = "Delivery continues for at least 4 hours at 25 mL/h from a fully charged battery after mains loss.";
|
|
53
55
|
attribute :>> status = ElementStatusKind::approved;
|
|
54
56
|
|
|
@@ -56,8 +58,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
56
58
|
subject verified : Base::Anything[*] = (fnManagePower, fnManagePower.fnMonitorBattery);
|
|
57
59
|
}
|
|
58
60
|
verification vcConfirmationFlow : VerificationCase {
|
|
59
|
-
|
|
60
|
-
attribute :>> methodKind =
|
|
61
|
+
@MemoIdentity { :>> providedId = "NDS-VER-006"; } attribute :>> name = "VerifyConfirmationFlow";
|
|
62
|
+
attribute :>> methodKind = MemoVerificationMethodKind::demonstration;
|
|
61
63
|
attribute :>> acceptanceCriteria = "No rate change reaches the controller without an explicit confirmation step.";
|
|
62
64
|
attribute :>> status = ElementStatusKind::approved;
|
|
63
65
|
|
|
@@ -65,8 +67,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
65
67
|
subject verified : Base::Anything[*] = (fnDeliverTherapy.fnControlDose.fnValidatePrescription, fnInformUser.fnAcceptInput);
|
|
66
68
|
}
|
|
67
69
|
verification vcStatusLegibility : VerificationCase {
|
|
68
|
-
|
|
69
|
-
attribute :>> methodKind =
|
|
70
|
+
@MemoIdentity { :>> providedId = "NDS-VER-007"; } attribute :>> name = "VerifyStatusLegibility";
|
|
71
|
+
attribute :>> methodKind = MemoVerificationMethodKind::inspection;
|
|
70
72
|
attribute :>> acceptanceCriteria = "Rate and volume delivered are readable at 1 m under 100–1000 lux.";
|
|
71
73
|
attribute :>> status = ElementStatusKind::approved;
|
|
72
74
|
|
|
@@ -74,8 +76,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
|
|
|
74
76
|
subject verified : Base::Anything[*] = (fnInformUser, fnInformUser.fnRenderStatus);
|
|
75
77
|
}
|
|
76
78
|
verification vcPowerSourceSwitch : VerificationCase {
|
|
77
|
-
|
|
78
|
-
attribute :>> methodKind =
|
|
79
|
+
@MemoIdentity { :>> providedId = "NDS-VER-008"; } attribute :>> name = "VerifyPowerSourceSwitch";
|
|
80
|
+
attribute :>> methodKind = MemoVerificationMethodKind::test;
|
|
79
81
|
attribute :>> acceptanceCriteria = "Rail brownout switches source without interrupting delivery.";
|
|
80
82
|
attribute :>> status = ElementStatusKind::approved;
|
|
81
83
|
|
|
@@ -18,8 +18,10 @@ package memo_examples_nested_architecture_dsm_project {
|
|
|
18
18
|
private import memo_examples_nested_architecture_dsm_assurance_verification_validation::*;
|
|
19
19
|
private import memo_examples_nested_architecture_dsm_traces::*;
|
|
20
20
|
|
|
21
|
+
private import memo_core_common::*;
|
|
22
|
+
private import memo_core_common::MemoIdentity;
|
|
21
23
|
part projectBinding : ProjectMethodBinding {
|
|
22
|
-
|
|
24
|
+
@MemoIdentity { :>> providedId = "PMB-NESTED-DSM-001"; }
|
|
23
25
|
attribute :>> name = "NestedArchitectureDsmProjectMethodBinding";
|
|
24
26
|
attribute :>> projectName = "Nested Architecture DSM";
|
|
25
27
|
ref :>> selectedMethodology = mdDefaultDefinition;
|
|
@@ -14,8 +14,10 @@ package memo_examples_reusable_instrument_project {
|
|
|
14
14
|
private import memo_examples_reusable_instrument_viewpoints_unassigned::*;
|
|
15
15
|
private import memo_examples_reusable_instrument_viewpoints_unassigned_views_reusable_instrument_overview::*;
|
|
16
16
|
|
|
17
|
+
private import memo_core_common::*;
|
|
18
|
+
private import memo_core_common::MemoIdentity;
|
|
17
19
|
part projectBinding : ProjectMethodBinding {
|
|
18
|
-
|
|
20
|
+
@MemoIdentity { :>> providedId = "PMB-REUSABLE-INSTRUMENT-001"; }
|
|
19
21
|
attribute :>> name = "ReusableInstrumentProjectMethodBinding";
|
|
20
22
|
attribute :>> projectName = "Reusable Instrument";
|
|
21
23
|
ref :>> selectedMethodology = mdDefaultDefinition;
|
|
@@ -12,15 +12,17 @@ package memo_examples_reusable_instrument {
|
|
|
12
12
|
private import memo_architecture_operational_workflows::*;
|
|
13
13
|
private import memo_architecture_operational_scenarios::*;
|
|
14
14
|
|
|
15
|
+
private import memo_core_common::*;
|
|
16
|
+
private import memo_core_common::MemoIdentity;
|
|
15
17
|
part sterileProcessingTech : User {
|
|
16
18
|
attribute :>> actorKind = ActorKind::technician;
|
|
17
|
-
|
|
19
|
+
@MemoIdentity { :>> providedId = "RI-USR-001"; } attribute :>> name = "SterileProcessingTechnician";
|
|
18
20
|
attribute :>> serviceScope = "central sterile services department";
|
|
19
21
|
}
|
|
20
22
|
|
|
21
23
|
use case ucSterilize : UseCase {
|
|
22
24
|
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
23
|
-
|
|
25
|
+
@MemoIdentity { :>> providedId = "RI-UC-001"; } attribute :>> name = "SterilizeReusableInstrument";
|
|
24
26
|
attribute :>> goalStatement = "Return a used instrument to sterile, functional condition for the next case.";
|
|
25
27
|
attribute :>> preCondition = "instrument collected from the OR; gross soil removed at point of use";
|
|
26
28
|
attribute :>> successOutcome = "instrument cleaned, inspected, sterilized, and released to sterile storage";
|
|
@@ -30,45 +32,35 @@ package memo_examples_reusable_instrument {
|
|
|
30
32
|
|
|
31
33
|
// Reprocessing workflow: exists independently of any single instrument.
|
|
32
34
|
action wfReprocess : OperationalWorkflow {
|
|
33
|
-
|
|
35
|
+
@MemoIdentity { :>> providedId = "RI-WF-001"; } attribute :>> name = "InstrumentReprocessingWorkflow";
|
|
34
36
|
attribute :>> workflowState = WorkflowStateKind::asIs;
|
|
35
37
|
attribute :>> entryCondition = "used instrument received in decontamination";
|
|
36
38
|
attribute :>> completionCondition = "sterile pack released to storage";
|
|
39
|
+
action scNominalCycle : OperativeScenario {
|
|
40
|
+
@MemoIdentity { :>> providedId = "RI-SC-001"; } attribute :>> name = "NominalReprocessingCycle";
|
|
37
41
|
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
perform actClean;
|
|
43
|
+
perform actInspect;
|
|
44
|
+
perform actSterilizeLoad;
|
|
45
|
+
first actClean then actInspect;
|
|
46
|
+
first actInspect then actSterilizeLoad;
|
|
47
|
+
}
|
|
40
48
|
}
|
|
41
|
-
action actClean :
|
|
42
|
-
|
|
49
|
+
action actClean : OperativeAction {
|
|
50
|
+
@MemoIdentity { :>> providedId = "RI-ACT-001"; } attribute :>> name = "CleanAndDisinfect";
|
|
43
51
|
attribute :>> criticality = CriticalityKind::high;
|
|
44
52
|
}
|
|
45
|
-
action actInspect :
|
|
46
|
-
|
|
53
|
+
action actInspect : OperativeAction {
|
|
54
|
+
@MemoIdentity { :>> providedId = "RI-ACT-002"; } attribute :>> name = "InspectAndFunctionTest";
|
|
47
55
|
attribute :>> criticality = CriticalityKind::high;
|
|
48
56
|
}
|
|
49
|
-
action actSterilizeLoad :
|
|
50
|
-
|
|
57
|
+
action actSterilizeLoad : OperativeAction {
|
|
58
|
+
@MemoIdentity { :>> providedId = "RI-ACT-003"; } attribute :>> name = "PackAndAutoclave";
|
|
51
59
|
attribute :>> criticality = CriticalityKind::high;
|
|
52
60
|
}
|
|
53
|
-
action wsInspect : WorkflowStep { ref :>> performedActivity = actInspect; }
|
|
54
|
-
action wsSterilize : WorkflowStep { ref :>> performedActivity = actSterilizeLoad; }
|
|
55
|
-
first wsInspect then wsSterilize;
|
|
56
|
-
connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfReprocess to supported ::> ucSterilize; }
|
|
57
61
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
attribute :>> operationalCondition = OperationalConditionKind::normal;
|
|
63
|
-
ref :>> parentWorkflow = wfReprocess;
|
|
64
|
-
}
|
|
65
|
-
// One modeled occurrence of the workflow. External operational systems
|
|
66
|
-
// may associate this occurrence with their asset or batch record.
|
|
67
|
-
part occCycle113 : ScenarioOccurrence {
|
|
68
|
-
attribute :>> id = "RI-OCC-113"; attribute :>> name = "ReprocessingCycle113";
|
|
69
|
-
attribute :>> occurredAt = "2026-07-15T14:02:00Z";
|
|
70
|
-
attribute :>> hypothetical = false;
|
|
71
|
-
attribute :>> outcomeSummary = "cycle completed; biological indicator passed";
|
|
72
|
-
ref :>> executedScenario = scNominalCycle;
|
|
73
|
-
}
|
|
62
|
+
|
|
63
|
+
connection : RealizesUseCase connect realizingWorkflow ::> wfReprocess to realizedUseCase ::> ucSterilize;
|
|
64
|
+
|
|
65
|
+
|
|
74
66
|
}
|
|
@@ -6,7 +6,6 @@ package memo_examples_reusable_instrument_viewpoints_unassigned_views_reusable_i
|
|
|
6
6
|
view reusableInstrumentOverview : MemoDiagramView {
|
|
7
7
|
expose memo_examples_reusable_instrument::*;
|
|
8
8
|
attribute depth = 2;
|
|
9
|
-
attribute :>> title = "Reusable Instrument Overview";
|
|
10
9
|
attribute :>> viewKind = DiagramViewKind::actionflow;
|
|
11
10
|
attribute :>> diagramType = "ofd";
|
|
12
11
|
}
|
|
@@ -14,8 +14,10 @@ package memo_examples_ros_mobile_robot_project {
|
|
|
14
14
|
private import memo_examples_ros_mobile_robot_viewpoints_unassigned::*;
|
|
15
15
|
private import memo_examples_ros_mobile_robot_viewpoints_unassigned_views_ros_mobile_robot_overview::*;
|
|
16
16
|
|
|
17
|
+
private import memo_core_common::*;
|
|
18
|
+
private import memo_core_common::MemoIdentity;
|
|
17
19
|
part projectBinding : ProjectMethodBinding {
|
|
18
|
-
|
|
20
|
+
@MemoIdentity { :>> providedId = "PMB-ROS-MOBILE-ROBOT-001"; }
|
|
19
21
|
attribute :>> name = "RosMobileRobotProjectMethodBinding";
|
|
20
22
|
attribute :>> projectName = "ROS Mobile Robot";
|
|
21
23
|
ref :>> selectedMethodology = mdDefaultDefinition;
|
|
@@ -27,6 +27,8 @@ package memo_examples_ros_mobile_robot {
|
|
|
27
27
|
private import memo_extension_container::*;
|
|
28
28
|
private import memo_extension_ros::*;
|
|
29
29
|
|
|
30
|
+
private import memo_core_common::*;
|
|
31
|
+
private import memo_core_common::MemoIdentity;
|
|
30
32
|
// ── Message definitions and named topic instances ──────────────────
|
|
31
33
|
// The definition is the ROS message contract. A named usage is the topic
|
|
32
34
|
// deployed in this system; publisher/subscriber ports reference that same
|
|
@@ -45,31 +47,31 @@ package memo_examples_ros_mobile_robot {
|
|
|
45
47
|
}
|
|
46
48
|
|
|
47
49
|
item topicScan : LaserScan {
|
|
48
|
-
|
|
50
|
+
@MemoIdentity { :>> providedId = "RMR-TP-001"; } attribute :>> name = "ScanTopic";
|
|
49
51
|
}
|
|
50
52
|
item topicCmdVel : VelocityCommand {
|
|
51
|
-
|
|
53
|
+
@MemoIdentity { :>> providedId = "RMR-TP-002"; } attribute :>> name = "CmdVelTopic";
|
|
52
54
|
}
|
|
53
55
|
item topicEstop : EmergencyStop {
|
|
54
|
-
|
|
56
|
+
@MemoIdentity { :>> providedId = "RMR-TP-003"; } attribute :>> name = "EmergencyStopTopic";
|
|
55
57
|
}
|
|
56
58
|
|
|
57
59
|
// ── Code ────────────────────────────────────────────────────────────
|
|
58
60
|
part swPerception : SoftwareModule {
|
|
59
61
|
attribute :>> moduleKind = ModuleKind::unit;
|
|
60
|
-
|
|
62
|
+
@MemoIdentity { :>> providedId = "RMR-SW-001"; } attribute :>> name = "PerceptionStack";
|
|
61
63
|
attribute :>> responsibility = "Lidar driver and obstacle segmentation.";
|
|
62
64
|
attribute :>> safetyClass = SafetyClassKind::B;
|
|
63
65
|
}
|
|
64
66
|
part swNavigation : SoftwareModule {
|
|
65
67
|
attribute :>> moduleKind = ModuleKind::unit;
|
|
66
|
-
|
|
68
|
+
@MemoIdentity { :>> providedId = "RMR-SW-002"; } attribute :>> name = "NavigationStack";
|
|
67
69
|
attribute :>> responsibility = "Global and local planning; velocity command generation.";
|
|
68
70
|
attribute :>> safetyClass = SafetyClassKind::B;
|
|
69
71
|
}
|
|
70
72
|
part swSafety : SoftwareModule {
|
|
71
73
|
attribute :>> moduleKind = ModuleKind::unit;
|
|
72
|
-
|
|
74
|
+
@MemoIdentity { :>> providedId = "RMR-SW-003"; } attribute :>> name = "SafetyMonitor";
|
|
73
75
|
attribute :>> responsibility = "Independent watchdog: stops the base on obstacle proximity or missing heartbeat.";
|
|
74
76
|
attribute :>> safetyClass = SafetyClassKind::C;
|
|
75
77
|
}
|
|
@@ -82,7 +84,7 @@ package memo_examples_ros_mobile_robot {
|
|
|
82
84
|
// is exactly what an extension type must NOT decide for the modeller.
|
|
83
85
|
part nodeLidar : RosNode {
|
|
84
86
|
attribute :>> runtimeKind = RuntimeKind::thread;
|
|
85
|
-
|
|
87
|
+
@MemoIdentity { :>> providedId = "RMR-ND-001"; } attribute :>> name = "LidarDriverNode";
|
|
86
88
|
attribute :>> nodeNamespace = "/robot/perception";
|
|
87
89
|
attribute :>> lifecycleManaged = true;
|
|
88
90
|
attribute :>> executorModel = "single-threaded executor, composed";
|
|
@@ -104,7 +106,7 @@ package memo_examples_ros_mobile_robot {
|
|
|
104
106
|
}
|
|
105
107
|
part nodeNavigation : RosNode {
|
|
106
108
|
attribute :>> runtimeKind = RuntimeKind::thread;
|
|
107
|
-
|
|
109
|
+
@MemoIdentity { :>> providedId = "RMR-ND-002"; } attribute :>> name = "NavigationNode";
|
|
108
110
|
attribute :>> nodeNamespace = "/robot/navigation";
|
|
109
111
|
attribute :>> lifecycleManaged = true;
|
|
110
112
|
attribute :>> executorModel = "multi-threaded executor, composed";
|
|
@@ -157,7 +159,7 @@ package memo_examples_ros_mobile_robot {
|
|
|
157
159
|
}
|
|
158
160
|
part nodeSafetyMonitor : RosNode {
|
|
159
161
|
attribute :>> runtimeKind = RuntimeKind::process;
|
|
160
|
-
|
|
162
|
+
@MemoIdentity { :>> providedId = "RMR-ND-003"; } attribute :>> name = "SafetyMonitorNode";
|
|
161
163
|
attribute :>> nodeNamespace = "/robot/safety";
|
|
162
164
|
attribute :>> lifecycleManaged = false;
|
|
163
165
|
attribute :>> executorModel = "own process, real-time priority";
|
|
@@ -238,7 +240,7 @@ package memo_examples_ros_mobile_robot {
|
|
|
238
240
|
|
|
239
241
|
// ── Deployment: base relations, unchanged ───────────────────────────
|
|
240
242
|
part imageRuntime : RosContainerImage {
|
|
241
|
-
|
|
243
|
+
@MemoIdentity { :>> providedId = "RMR-DU-001"; } attribute :>> name = "RobotRuntimeImage";
|
|
242
244
|
attribute :>> unitKind = "OCI container image";
|
|
243
245
|
attribute :>> imageReference = "registry.example.com/robot-runtime:2.3.0";
|
|
244
246
|
attribute :>> registry = "registry.example.com";
|
|
@@ -249,7 +251,7 @@ package memo_examples_ros_mobile_robot {
|
|
|
249
251
|
attribute :>> integrityProtection = "image signature + SBOM attestation";
|
|
250
252
|
}
|
|
251
253
|
part imageSafety : RosContainerImage {
|
|
252
|
-
|
|
254
|
+
@MemoIdentity { :>> providedId = "RMR-DU-002"; } attribute :>> name = "SafetyMonitorImage";
|
|
253
255
|
attribute :>> unitKind = "OCI container image";
|
|
254
256
|
attribute :>> imageReference = "registry.example.com/safety-monitor:2.3.0";
|
|
255
257
|
attribute :>> registry = "registry.example.com";
|
|
@@ -259,12 +261,12 @@ package memo_examples_ros_mobile_robot {
|
|
|
259
261
|
attribute :>> workspaceOverlay = "/opt/safety_ws";
|
|
260
262
|
attribute :>> integrityProtection = "image signature + SBOM attestation";
|
|
261
263
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
264
|
+
allocation : BuildsInto allocate swPerception to imageRuntime;
|
|
265
|
+
allocation : BuildsInto allocate swNavigation to imageRuntime;
|
|
266
|
+
allocation : BuildsInto allocate swSafety to imageSafety;
|
|
265
267
|
|
|
266
268
|
part nodeComputeUnit : ProcessingNode {
|
|
267
|
-
|
|
269
|
+
@MemoIdentity { :>> providedId = "RMR-HW-001"; } attribute :>> name = "OnboardComputeUnit";
|
|
268
270
|
attribute :>> nodeKind = ProcessingNodeKind::SoC;
|
|
269
271
|
attribute :>> processorArchitecture = "arm64, 8 core";
|
|
270
272
|
attribute :>> memoryMB = "16384";
|
|
@@ -280,7 +282,7 @@ package memo_examples_ros_mobile_robot {
|
|
|
280
282
|
}
|
|
281
283
|
|
|
282
284
|
part rosRuntime : RosContainerRuntime {
|
|
283
|
-
|
|
285
|
+
@MemoIdentity { :>> providedId = "RMR-RT-001"; } attribute :>> name = "OnboardRosRuntime";
|
|
284
286
|
attribute :>> environmentKind = "container runtime";
|
|
285
287
|
attribute :>> osOrRtos = "Linux with PREEMPT_RT";
|
|
286
288
|
attribute :>> orchestrationPlatform = "systemd-managed compose, no cluster orchestrator";
|
|
@@ -6,7 +6,6 @@ package memo_examples_ros_mobile_robot_viewpoints_unassigned_views_ros_mobile_ro
|
|
|
6
6
|
view rosMobileRobotOverview : MemoDiagramView {
|
|
7
7
|
expose memo_examples_ros_mobile_robot::*;
|
|
8
8
|
attribute depth = 2;
|
|
9
|
-
attribute :>> title = "ROS Mobile Robot Overview";
|
|
10
9
|
attribute :>> viewKind = DiagramViewKind::general;
|
|
11
10
|
attribute :>> diagramType = "bdd";
|
|
12
11
|
}
|