@memoarchitect/ontology 0.4.5 → 0.6.0
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 +5 -4
- package/examples/connected-patient-monitor/README.md +7 -0
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +70 -0
- package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +3 -0
- package/examples/connected-patient-monitor/model/viewpoints/connected_patient_monitor_overview.sysml +6 -0
- package/examples/embedded-infusion-pump/README.md +7 -0
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +66 -0
- package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +3 -0
- package/examples/embedded-infusion-pump/model/viewpoints/embedded_infusion_pump_overview.sysml +6 -0
- package/examples/extensions/README.md +16 -0
- package/examples/extensions/clinical/memo.package.yaml +9 -0
- package/examples/extensions/clinical/src/clinical_extension.sysml +3 -0
- package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +14 -0
- package/examples/extensions/clinical/src/procedures/memo_clinical_procedures.sysml +16 -0
- package/examples/extensions/template/memo.package.yaml +9 -0
- package/examples/extensions/template/src/extension.sysml +15 -0
- package/examples/functional-logical-physical/README.md +7 -0
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +50 -0
- package/examples/functional-logical-physical/model/functional_logical_physical.sysml +3 -0
- package/examples/functional-logical-physical/model/viewpoints/functional_logical_physical_overview.sysml +6 -0
- package/examples/gpca-pump/README.md +26 -0
- package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +1 -1
- package/examples/gpca-pump/memo.config.yaml +2 -2
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +1 -1
- package/examples/gpca-pump/methodology/gpca_scope.sysml +2 -2
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +10 -10
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +17 -6
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +11 -11
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +35 -22
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +25 -6
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +29 -15
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +293 -169
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +139 -21
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +1 -1
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +210 -105
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +66 -69
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +43 -76
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +73 -70
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +27 -27
- package/examples/gpca-pump/model/views/context_system_context_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +1 -1
- package/examples/gpca-pump/model/views/document_rmf_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_sdd_view.sysml +2 -2
- package/examples/gpca-pump/model/views/document_threat_model_view.sysml +1 -1
- package/examples/gpca-pump/model/views/document_usability_view.sysml +1 -1
- package/examples/gpca-pump/model/views/document_vv_view.sysml +1 -1
- package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +1 -1
- package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +1 -1
- package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +1 -1
- package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +1 -1
- package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +1 -1
- package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +1 -1
- package/examples/gpca-pump/model/views/operational_use_case_view.sysml +6 -6
- package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +1 -1
- package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +1 -1
- package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +2 -2
- package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +1 -1
- package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +1 -1
- package/examples/ivd-laboratory-system/README.md +7 -0
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +58 -0
- package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +3 -0
- package/examples/ivd-laboratory-system/model/viewpoints/ivd_laboratory_system_overview.sysml +6 -0
- package/examples/manual-surgical-instrument/README.md +7 -0
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +41 -0
- package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +3 -0
- package/examples/manual-surgical-instrument/model/viewpoints/manual_surgical_instrument_overview.sysml +6 -0
- package/examples/multidimensional-layers/README.md +7 -0
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +51 -0
- package/examples/multidimensional-layers/model/multidimensional_layers.sysml +4 -0
- package/examples/multidimensional-layers/model/viewpoints/multidimensional_layers_overview.sysml +13 -0
- package/examples/reusable-instrument/README.md +7 -0
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +71 -0
- package/examples/reusable-instrument/model/reusable_instrument.sysml +4 -0
- package/examples/reusable-instrument/model/viewpoints/reusable_instrument_overview.sysml +13 -0
- package/examples/software-only-medical-device/README.md +7 -0
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +62 -0
- package/examples/software-only-medical-device/model/software_only_medical_device.sysml +4 -0
- package/examples/software-only-medical-device/model/viewpoints/software_only_medical_device_overview.sysml +13 -0
- package/examples/surgical-closure-workflow/README.md +8 -0
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +151 -0
- package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +4 -0
- package/examples/surgical-closure-workflow/model/viewpoints/surgical_closure_workflow_overview.sysml +13 -0
- package/examples/surgical-robot/README.md +7 -0
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +58 -0
- package/examples/surgical-robot/model/surgical_robot.sysml +4 -0
- package/examples/surgical-robot/model/viewpoints/surgical_robot_overview.sysml +13 -0
- package/examples/sysml-diagram-samples/README.md +32 -0
- package/examples/sysml-diagram-samples/memo.package.yaml +5 -0
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/action_flow_view.sysml +22 -4
- package/examples/sysml-diagram-samples/model/samples/context_view.sysml +55 -0
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/functional_flow_view.sysml +17 -6
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/interconnection_view.sysml +4 -3
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/operational_behaviour_view.sysml +32 -42
- package/examples/sysml-diagram-samples/model/samples/requirements_view.sysml +63 -0
- package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +109 -0
- package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/tree_view.sysml +3 -3
- package/examples/sysml-diagram-samples/model/samples/use_case_view.sysml +81 -0
- package/examples/temperature-alarm/README.md +7 -0
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +140 -0
- package/examples/temperature-alarm/model/temperature_alarm.sysml +4 -0
- package/examples/temperature-alarm/model/viewpoints/temperature_alarm_overview.sysml +13 -0
- package/memo.manifest.yaml +4 -1
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +4 -4
- package/ontology/memo.package.yaml +1 -1
- package/ontology/memo.rendering.yaml +37 -0
- package/package.json +17 -7
- package/profile/memo.package.yaml +1 -1
- package/profile/templates/connected-device/starter.sysml +3 -3
- package/profile/templates/infusion-pump/starter.sysml +3 -3
- package/profile/templates/monitoring-device/starter.sysml +3 -3
- package/profile/templates/samd/starter.sysml +3 -3
- package/src/architecture/decisions/memo_decisions.sysml +1 -1
- package/src/architecture/{behavior → functional/behavior}/memo_behavior.sysml +12 -11
- package/src/architecture/{constraints → functional/constraints}/memo_constraints.sysml +2 -2
- package/src/architecture/functional/functions/memo_functions.sysml +81 -0
- package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +46 -0
- package/src/architecture/implementation/hardware/electrical/memo_hardware_electrical.sysml +36 -0
- package/src/architecture/implementation/hardware/fluidic/memo_hardware_fluidic.sysml +14 -0
- package/src/architecture/implementation/hardware/mechanical/memo_hardware_mechanical.sysml +14 -0
- package/src/architecture/implementation/hardware/optical/memo_hardware_optical.sysml +11 -0
- package/src/architecture/implementation/hardware/sensing/memo_hardware_sensing.sysml +17 -0
- package/src/architecture/implementation/hardware/structure/memo_hardware_structure.sysml +12 -0
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +70 -0
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +80 -0
- package/src/architecture/implementation/ui/memo_ui.sysml +159 -0
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +102 -0
- package/src/architecture/logical/structure/memo_logical_structure.sysml +150 -0
- package/src/architecture/operational/activities/memo_activities.sysml +86 -0
- package/src/architecture/operational/context/actors/memo_actors.sysml +38 -0
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +64 -0
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +53 -0
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +116 -0
- package/src/architecture/operational/structure/memo_operational.sysml +26 -0
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +67 -0
- package/src/architecture/operational/workflows/memo_workflows.sysml +126 -0
- package/src/architecture/realization/deployment/memo_deployment.sysml +90 -0
- package/src/architecture/{physical → realization/physical}/memo_physical_architecture.sysml +12 -1
- package/src/artifacts/definitions/memo_artifact_definitions.sysml +1 -1
- package/src/{architecture → assurance}/cybersecurity/memo_cybersecurity.sysml +14 -10
- package/src/assurance/human_factors/memo_human_factors.sysml +50 -0
- package/src/{architecture → assurance}/requirements/memo_requirements.sysml +45 -21
- package/src/assurance/requirements/needs/memo_needs.sysml +43 -0
- package/src/{architecture → assurance/safety_risk}/analysis/memo_fmea.sysml +13 -13
- package/src/{architecture/risk → assurance/safety_risk}/memo_arch_risk.sysml +2 -2
- package/src/{architecture/risk → assurance/safety_risk}/memo_risk.sysml +25 -16
- package/src/assurance/verification_validation/memo_assurance.sysml +49 -0
- package/src/compliance/artifacts/memo_artifacts.sysml +1 -1
- package/src/compliance/change/memo_change.sysml +2 -2
- package/src/compliance/dhf-templates/21cfr820/design-input.md +1 -1
- package/src/compliance/dhf-templates/21cfr820/design-validation.md +1 -1
- package/src/compliance/dhf-templates/21cfr820/user-needs.md +2 -2
- package/src/compliance/dhf-templates/iec-62366/urra.md +1 -1
- package/src/compliance/dhf-templates/iso-14971/fmea.md +1 -1
- package/src/compliance/dhf-templates/iso-14971/har.md +4 -4
- package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +1 -1
- package/src/compliance/dhf-templates/iso-14971/rmp.md +1 -1
- package/src/compliance/dhf-templates/iso-14971/rmr.md +1 -1
- package/src/compliance/iso14971/risk_management_file.sysml +1 -1
- package/src/compliance/postmarket/memo_postmarket.sysml +2 -2
- package/src/core/common/memo_common.sysml +123 -14
- package/src/core/consistency_rules/consistency_rules.sysml +2 -2
- package/src/core/dimensions/dimensions.sysml +45 -24
- package/src/core/enumerations/memo_enumerations.sysml +11 -16
- package/src/core/methodology_scope/methodology_scope.sysml +10 -28
- package/src/core/relationships/memo_relationships.sysml +178 -146
- package/src/core/stdlib/{collections.sysml → collections/collections.sysml} +1 -1
- package/src/core/stdlib/{functions.sysml → functions/functions.sysml} +1 -1
- package/src/core/stdlib/{scalars.sysml → scalars/scalars.sysml} +1 -1
- package/src/core/stdlib/{time.sysml → time/time.sysml} +1 -1
- package/src/core/terminology/terminology.sysml +35 -0
- package/src/memo_namespaces.sysml +247 -302
- package/src/methodology/{memo_core.sysml → core/memo_core.sysml} +19 -13
- package/src/methodology/{memo_gates.sysml → gates/memo_gates.sysml} +1 -1
- package/src/methodology/{memo_patterns.sysml → patterns/memo_patterns.sysml} +1 -1
- package/src/methodology/{memo_profiles.sysml → profiles/memo_profiles.sysml} +27 -35
- package/src/methodology/{memo_workflow.sysml → workflow/memo_workflow.sysml} +1 -1
- package/src/rules/closure/closure_rules.sysml +11 -11
- package/src/rules/coverage/coverage_rules.sysml +8 -8
- package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
- package/src/rules/lifecycle/lifecycle_rules.sysml +1 -1
- package/src/rules/ontology/ontology_invariants.sysml +133 -0
- package/src/rules/quantitative/quantitative_rules.sysml +2 -2
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +189 -0
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +0 -1
- package/src/viewpoints/context/context_viewpoint.sysml +1 -2
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -2
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +8 -8
- package/src/viewpoints/functional/{function_allocation_view.sysml → function_allocation_view/function_allocation_view.sysml} +1 -1
- package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
- package/src/viewpoints/functional/{system_functional_tree_view.sysml → system_functional_tree_view/system_functional_tree_view.sysml} +1 -1
- package/src/viewpoints/logical/logical_viewpoint.sysml +0 -1
- package/src/viewpoints/operational/operational_viewpoint.sysml +1 -2
- package/src/viewpoints/operational/{use_case_view.sysml → use_case_view/use_case_view.sysml} +1 -1
- package/src/viewpoints/physical/physical_viewpoint.sysml +0 -1
- package/src/viewpoints/requirements/{requirements_traceability_view.sysml → requirements_traceability_view/requirements_traceability_view.sysml} +1 -1
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
- package/src/viewpoints/risk/{risk_chain_view.sysml → risk_chain_view/risk_chain_view.sysml} +2 -2
- package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
- package/src/viewpoints/software/{software_architecture_view.sysml → software_architecture_view/software_architecture_view.sysml} +1 -1
- package/src/viewpoints/software/software_viewpoint.sysml +1 -2
- package/src/viewpoints/usability/usability_viewpoint.sysml +0 -1
- package/src/viewpoints/verification/verification_viewpoint.sysml +0 -1
- package/template/memo.package.yaml +1 -1
- package/template/src/catalog/starter.sysml +3 -3
- package/examples/gpca-pump/model/samples/README.md +0 -24
- package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +0 -9
- package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +0 -99
- package/src/architecture/assurance/memo_assurance.sysml +0 -29
- package/src/architecture/context/memo_context.sysml +0 -58
- package/src/architecture/functions/memo_functions.sysml +0 -30
- package/src/architecture/hardware_structure/memo_hardware_structure.sysml +0 -15
- package/src/architecture/interfaces/memo_interfaces.sysml +0 -103
- package/src/architecture/logical_structure/memo_logical_structure.sysml +0 -10
- package/src/architecture/operational/memo_operational.sysml +0 -51
- package/src/architecture/software_structure/memo_software_structure.sysml +0 -44
- package/src/architecture/system/memo_system_analysis.sysml +0 -54
- package/src/artifacts/clinical_safety_report.sysml +0 -12
- package/src/artifacts/cybersecurity_assessment_report.sysml +0 -12
- package/src/artifacts/design_change_log.sysml +0 -12
- package/src/artifacts/design_history_file_index.sysml +0 -12
- package/src/artifacts/design_input_plan.sysml +0 -12
- package/src/artifacts/design_output_plan.sysml +0 -12
- package/src/artifacts/evidence_record.sysml +0 -12
- package/src/artifacts/failure_mode_effects_analysis.sysml +0 -12
- package/src/artifacts/hazard_analysis_report.sysml +0 -12
- package/src/artifacts/labeling_specification.sysml +0 -12
- package/src/artifacts/requirements_specification.sysml +0 -12
- package/src/artifacts/requirements_traceability_matrix.sysml +0 -12
- package/src/artifacts/risk_management_plan.sysml +0 -12
- package/src/artifacts/software_design_description.sysml +0 -12
- package/src/artifacts/software_development_plan.sysml +0 -12
- package/src/artifacts/soup_list.sysml +0 -12
- package/src/artifacts/system_architecture_description.sysml +0 -12
- package/src/artifacts/test_protocol.sysml +0 -12
- package/src/artifacts/test_report.sysml +0 -12
- package/src/artifacts/threat_model_report.sysml +0 -12
- package/src/artifacts/usability_engineering_report.sysml +0 -12
- package/src/medical_device_library.sysml +0 -100
- /package/src/methodology/{memo_archetypes.sysml → archetypes/memo_archetypes.sysml} +0 -0
- /package/src/methodology/{memo_rules.sysml → rules/memo_rules.sysml} +0 -0
- /package/src/methodology/{memo_viewpoints.sysml → viewpoints/memo_viewpoints.sysml} +0 -0
- /package/src/viewpoints/clinical/{clinical_evidence_view.sysml → clinical_evidence_view/clinical_evidence_view.sysml} +0 -0
- /package/src/viewpoints/context/{system_context_view.sysml → system_context_view/system_context_view.sysml} +0 -0
- /package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view.sysml → cybersecurity_assessment_view/cybersecurity_assessment_view.sysml} +0 -0
- /package/src/viewpoints/cybersecurity/{threat_model_view.sysml → threat_model_view/threat_model_view.sysml} +0 -0
- /package/src/viewpoints/logical/{logical_architecture_view.sysml → logical_architecture_view/logical_architecture_view.sysml} +0 -0
- /package/src/viewpoints/physical/{network_topology_view.sysml → network_topology_view/network_topology_view.sysml} +0 -0
- /package/src/viewpoints/physical/{physical_bom_view.sysml → physical_bom_view/physical_bom_view.sysml} +0 -0
- /package/src/viewpoints/usability/{usability_engineering_view.sysml → usability_engineering_view/usability_engineering_view.sysml} +0 -0
- /package/src/viewpoints/verification/{verification_coverage_view.sysml → verification_coverage_view/verification_coverage_view.sysml} +0 -0
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// Illustrative operational model of laparoscopic sleeve gastrectomy. This is
|
|
2
|
+
// a modelling example, not a clinical protocol. It shows a complete procedure
|
|
3
|
+
// as context → use case → workflow → scenarios → scenario-owned activities.
|
|
4
|
+
package memo_examples_surgical_closure_workflow {
|
|
5
|
+
private import ScalarValues::*;
|
|
6
|
+
|
|
7
|
+
private import memo_core_enumerations::*;
|
|
8
|
+
private import memo_architecture_operational_context_actors::*;
|
|
9
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
10
|
+
private import memo_assurance_requirements_needs::*;
|
|
11
|
+
private import memo_architecture_operational_use_cases::*;
|
|
12
|
+
private import memo_extension_clinical::*;
|
|
13
|
+
private import memo_architecture_operational_activities::*;
|
|
14
|
+
private import memo_architecture_operational_workflows::*;
|
|
15
|
+
private import memo_architecture_operational_scenarios::*;
|
|
16
|
+
|
|
17
|
+
// ── Clinical setting and goal ───────────────────────────────
|
|
18
|
+
part bariatricSurgeon : User {
|
|
19
|
+
attribute :>> actorKind = ActorKind::clinician;
|
|
20
|
+
attribute :>> id = "LSG-USR-001"; attribute :>> name = "BariatricSurgeon";
|
|
21
|
+
attribute :>> clinicalRole = "primary operating surgeon";
|
|
22
|
+
}
|
|
23
|
+
part scrubNurse : User {
|
|
24
|
+
attribute :>> actorKind = ActorKind::clinician;
|
|
25
|
+
attribute :>> id = "LSG-USR-002"; attribute :>> name = "ScrubNurse";
|
|
26
|
+
attribute :>> clinicalRole = "sterile instrumentation and count";
|
|
27
|
+
}
|
|
28
|
+
part anesthetist : User {
|
|
29
|
+
attribute :>> actorKind = ActorKind::clinician;
|
|
30
|
+
attribute :>> id = "LSG-USR-003"; attribute :>> name = "Anesthetist";
|
|
31
|
+
attribute :>> clinicalRole = "anaesthesia and physiologic monitoring";
|
|
32
|
+
}
|
|
33
|
+
part bariatricOr : UseContext {
|
|
34
|
+
attribute :>> id = "LSG-CTX-001"; attribute :>> name = "BariatricOperatingRoom";
|
|
35
|
+
attribute :>> careSetting = "hospital operating room";
|
|
36
|
+
attribute :>> environment = "sterile laparoscopic operating field";
|
|
37
|
+
attribute :>> connectedUse = false;
|
|
38
|
+
}
|
|
39
|
+
requirement needControlledGastricResection : Need {
|
|
40
|
+
attribute :>> needKind = NeedKind::clinicalUser;
|
|
41
|
+
attribute :>> needId = "LSG-N-001";
|
|
42
|
+
attribute :>> statement = "The surgical team needs to perform gastric resection with controlled anatomy, haemostasis, and a checked staple line.";
|
|
43
|
+
}
|
|
44
|
+
use case ucPerformSleeveGastrectomy : UseCase {
|
|
45
|
+
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
46
|
+
attribute :>> id = "LSG-UC-001";
|
|
47
|
+
attribute :>> name = "PerformLaparoscopicSleeveGastrectomy";
|
|
48
|
+
attribute :>> goalStatement = "Complete the planned laparoscopic sleeve gastrectomy and transfer the patient with the staple line assessed.";
|
|
49
|
+
attribute :>> trigger = "patient prepared and surgical time-out complete";
|
|
50
|
+
attribute :>> successOutcome = "gastric sleeve created, haemostasis and integrity assessed, patient handed over";
|
|
51
|
+
attribute :>> failureOutcome = "uncontrolled bleeding, suspected staple-line issue, or conversion/escalation";
|
|
52
|
+
ref :>> primaryUser = bariatricSurgeon;
|
|
53
|
+
ref :>> supportingActors = (scrubNurse, anesthetist);
|
|
54
|
+
ref :>> useContext = bariatricOr;
|
|
55
|
+
}
|
|
56
|
+
connection : Motivates connect motivatingNeed ::> needControlledGastricResection to motivatedUseCase ::> ucPerformSleeveGastrectomy;
|
|
57
|
+
connection : Initiates connect initiatingUser ::> bariatricSurgeon to initiatedUseCase ::> ucPerformSleeveGastrectomy;
|
|
58
|
+
|
|
59
|
+
// ── Procedure workflow ──────────────────────────────────────
|
|
60
|
+
action actTimeOutAndPosition : OperationalActivity { attribute :>> id = "LSG-ACT-001"; attribute :>> name = "ConfirmTimeOutAndPosition"; }
|
|
61
|
+
action actEstablishAccess : OperationalActivity { attribute :>> id = "LSG-ACT-002"; attribute :>> name = "EstablishLaparoscopicAccess"; }
|
|
62
|
+
action actMobilizeStomach : OperationalActivity { attribute :>> id = "LSG-ACT-003"; attribute :>> name = "MobilizeStomach"; }
|
|
63
|
+
action actSizeAndCreateSleeve : OperationalActivity { attribute :>> id = "LSG-ACT-004"; attribute :>> name = "SizeAndCreateSleeve"; attribute :>> criticality = CriticalityKind::high; }
|
|
64
|
+
action actAssessStapleLine : OperationalActivity { attribute :>> id = "LSG-ACT-005"; attribute :>> name = "AssessStapleLine"; attribute :>> criticality = CriticalityKind::high; }
|
|
65
|
+
action actExtractSpecimenAndClose : OperationalActivity { attribute :>> id = "LSG-ACT-006"; attribute :>> name = "ExtractSpecimenAndClosePorts"; }
|
|
66
|
+
action actHandover : OperationalActivity { attribute :>> id = "LSG-ACT-007"; attribute :>> name = "CompletePostoperativeHandover"; }
|
|
67
|
+
|
|
68
|
+
action taskCreateStapleLine : UserTask {
|
|
69
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
70
|
+
attribute :>> id = "LSG-TASK-001";
|
|
71
|
+
attribute :>> name = "CreateAndInspectStapleLine";
|
|
72
|
+
attribute :>> taskGoal = "create the planned sleeve and identify bleeding or integrity concerns before completion";
|
|
73
|
+
attribute :>> potentialHarm = "bleeding or staple-line complication not recognized before handover";
|
|
74
|
+
attribute :>> severityIfFailed = SeverityKind::serious;
|
|
75
|
+
}
|
|
76
|
+
action stConfirmAnatomy : TaskStep { attribute :>> id = "LSG-ST-001"; attribute :>> name = "ConfirmAnatomy"; attribute :>> stepOrder = 1; }
|
|
77
|
+
action stCreateStapleLine : TaskStep { attribute :>> id = "LSG-ST-002"; attribute :>> name = "CreateStapleLine"; attribute :>> stepOrder = 2; }
|
|
78
|
+
action stInspectBleeding : TaskStep { attribute :>> id = "LSG-ST-003"; attribute :>> name = "InspectForBleeding"; attribute :>> stepOrder = 3; }
|
|
79
|
+
action stAssessIntegrity : TaskStep { attribute :>> id = "LSG-ST-004"; attribute :>> name = "AssessStapleLineIntegrity"; attribute :>> stepOrder = 4; }
|
|
80
|
+
connection : Composes connect parent ::> actSizeAndCreateSleeve to child ::> taskCreateStapleLine;
|
|
81
|
+
connection : Composes connect parent ::> taskCreateStapleLine to child ::> stConfirmAnatomy;
|
|
82
|
+
connection : Composes connect parent ::> taskCreateStapleLine to child ::> stCreateStapleLine;
|
|
83
|
+
connection : Composes connect parent ::> taskCreateStapleLine to child ::> stInspectBleeding;
|
|
84
|
+
connection : Composes connect parent ::> taskCreateStapleLine to child ::> stAssessIntegrity;
|
|
85
|
+
|
|
86
|
+
action wfSleeveGastrectomy : ClinicalProcedureWorkflow {
|
|
87
|
+
attribute :>> id = "LSG-WF-001";
|
|
88
|
+
attribute :>> name = "LaparoscopicSleeveGastrectomyWorkflow";
|
|
89
|
+
attribute :>> workflowState = WorkflowStateKind::toBe;
|
|
90
|
+
attribute :>> entryCondition = "patient prepared; time-out ready";
|
|
91
|
+
attribute :>> completionCondition = "staple line assessed; postoperative handover complete";
|
|
92
|
+
attribute :>> clinicalObjective = "create a gastric sleeve after controlled mobilisation and staple-line assessment";
|
|
93
|
+
}
|
|
94
|
+
action wsTimeOut : WorkflowStep { attribute :>> stepOrder = 1; ref :>> performedActivity = actTimeOutAndPosition; }
|
|
95
|
+
action wsAccess : WorkflowStep { attribute :>> stepOrder = 2; ref :>> performedActivity = actEstablishAccess; }
|
|
96
|
+
action wsMobilize : WorkflowStep { attribute :>> stepOrder = 3; ref :>> performedActivity = actMobilizeStomach; }
|
|
97
|
+
action wsSleeve : WorkflowStep { attribute :>> stepOrder = 4; ref :>> performedActivity = actSizeAndCreateSleeve; }
|
|
98
|
+
action wsAssess : WorkflowStep { attribute :>> stepOrder = 5; ref :>> performedActivity = actAssessStapleLine; }
|
|
99
|
+
action wsClose : WorkflowStep { attribute :>> stepOrder = 6; ref :>> performedActivity = actExtractSpecimenAndClose; }
|
|
100
|
+
action wsHandover : WorkflowStep { attribute :>> stepOrder = 7; ref :>> performedActivity = actHandover; }
|
|
101
|
+
connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsTimeOut;
|
|
102
|
+
connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsAccess;
|
|
103
|
+
connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsMobilize;
|
|
104
|
+
connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsSleeve;
|
|
105
|
+
connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsAssess;
|
|
106
|
+
connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsClose;
|
|
107
|
+
connection : Composes connect parent ::> wfSleeveGastrectomy to child ::> wsHandover;
|
|
108
|
+
connection : StepPrecedes connect predecessor ::> wsTimeOut to successor ::> wsAccess;
|
|
109
|
+
connection : StepPrecedes connect predecessor ::> wsAccess to successor ::> wsMobilize;
|
|
110
|
+
connection : StepPrecedes connect predecessor ::> wsMobilize to successor ::> wsSleeve;
|
|
111
|
+
connection : StepPrecedes connect predecessor ::> wsSleeve to successor ::> wsAssess;
|
|
112
|
+
connection : StepPrecedes connect predecessor ::> wsAssess to successor ::> wsClose;
|
|
113
|
+
connection : StepPrecedes connect predecessor ::> wsClose to successor ::> wsHandover;
|
|
114
|
+
connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfSleeveGastrectomy to supported ::> ucPerformSleeveGastrectomy; }
|
|
115
|
+
|
|
116
|
+
// ── Scenario paths, each with its own activity/action flow ──
|
|
117
|
+
action oaCompleteSleeveProcedure : OperationalActivity {
|
|
118
|
+
attribute :>> name = "CompleteNominalSleeveProcedure";
|
|
119
|
+
action prepare; action createSleeve; action assess; action handover;
|
|
120
|
+
first start then prepare; first prepare then createSleeve; first createSleeve then assess; first assess then handover; first handover then done;
|
|
121
|
+
}
|
|
122
|
+
action oaControlStapleLineBleeding : OperationalActivity {
|
|
123
|
+
attribute :>> name = "ControlStapleLineBleeding";
|
|
124
|
+
action recognizeBleeding; action controlBleeding; action reassessStapleLine; action escalateIfNeeded;
|
|
125
|
+
first start then recognizeBleeding; first recognizeBleeding then controlBleeding; first controlBleeding then reassessStapleLine; first reassessStapleLine then escalateIfNeeded; first escalateIfNeeded then done;
|
|
126
|
+
}
|
|
127
|
+
part scNominalSleeveProcedure : OperationalScenario {
|
|
128
|
+
attribute :>> id = "LSG-SC-001"; attribute :>> name = "NominalSleeveGastrectomy";
|
|
129
|
+
attribute :>> variantKind = ScenarioVariantKind::nominal;
|
|
130
|
+
attribute :>> operationalCondition = OperationalConditionKind::normal;
|
|
131
|
+
attribute :>> pathSummary = "Time-out, access, mobilisation, sleeve creation, staple-line assessment, closure, and handover complete without rework.";
|
|
132
|
+
ref :>> parentWorkflow = wfSleeveGastrectomy;
|
|
133
|
+
ref :>> parentUseCase = ucPerformSleeveGastrectomy;
|
|
134
|
+
ref :>> activities = oaCompleteSleeveProcedure;
|
|
135
|
+
}
|
|
136
|
+
part scStapleLineBleeding : OperationalScenario {
|
|
137
|
+
attribute :>> id = "LSG-SC-002"; attribute :>> name = "StapleLineBleedingRecovery";
|
|
138
|
+
attribute :>> variantKind = ScenarioVariantKind::recovery;
|
|
139
|
+
attribute :>> operationalCondition = OperationalConditionKind::degraded;
|
|
140
|
+
attribute :>> variationPoint = "bleeding observed during staple-line assessment";
|
|
141
|
+
attribute :>> pathSummary = "Recognize bleeding, apply the selected control, reassess the staple line, and escalate if the condition remains unresolved.";
|
|
142
|
+
ref :>> baseScenario = scNominalSleeveProcedure;
|
|
143
|
+
ref :>> parentWorkflow = wfSleeveGastrectomy;
|
|
144
|
+
ref :>> parentUseCase = ucPerformSleeveGastrectomy;
|
|
145
|
+
ref :>> activities = oaControlStapleLineBleeding;
|
|
146
|
+
}
|
|
147
|
+
connection : Realizes connect realizing ::> scNominalSleeveProcedure to realized ::> ucPerformSleeveGastrectomy;
|
|
148
|
+
connection : Realizes connect realizing ::> scStapleLineBleeding to realized ::> ucPerformSleeveGastrectomy;
|
|
149
|
+
connection : Composes connect parent ::> scNominalSleeveProcedure to child ::> oaCompleteSleeveProcedure;
|
|
150
|
+
connection : Composes connect parent ::> scStapleLineBleeding to child ::> oaControlStapleLineBleeding;
|
|
151
|
+
}
|
package/examples/surgical-closure-workflow/model/viewpoints/surgical_closure_workflow_overview.sysml
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package memo_examples_surgical_closure_workflow_viewpoints {
|
|
2
|
+
private import memo_examples_surgical_closure_workflow::*;
|
|
3
|
+
private import memo_viewpoints_definitions::*;
|
|
4
|
+
private import memo_core_enumerations::*;
|
|
5
|
+
|
|
6
|
+
view surgicalClosureWorkflowOverview : MemoDiagramView {
|
|
7
|
+
expose memo_examples_surgical_closure_workflow::*;
|
|
8
|
+
attribute depth = 2;
|
|
9
|
+
attribute :>> title = "Laparoscopic Sleeve Gastrectomy Workflow";
|
|
10
|
+
attribute :>> viewKind = DiagramViewKind::actionflow;
|
|
11
|
+
attribute :>> diagramType = "ofd";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Focused example: robotic cyber-physical system. Multivalued technology
|
|
2
|
+
// domains; redundant + monitor channels with declared independence; an
|
|
3
|
+
// interlock; a mechanical-force flow; and a haptic UI element.
|
|
4
|
+
package memo_examples_surgical_robot {
|
|
5
|
+
private import ScalarValues::*;
|
|
6
|
+
|
|
7
|
+
private import memo_core_enumerations::*;
|
|
8
|
+
private import memo_core_relationships::*;
|
|
9
|
+
private import memo_architecture_logical_structure::*;
|
|
10
|
+
private import memo_architecture_implementation_hardware_structure::*;
|
|
11
|
+
private import memo_architecture_implementation_ui::*;
|
|
12
|
+
|
|
13
|
+
// Control channels: primary + diverse monitor, with declared independence.
|
|
14
|
+
part chMotionPrimary : LogicalComponent {
|
|
15
|
+
attribute :>> id = "SR-LC-001"; attribute :>> name = "MotionControlChannel";
|
|
16
|
+
attribute :>> channelRole = ChannelRoleKind::primary;
|
|
17
|
+
}
|
|
18
|
+
part chMotionMonitor : LogicalComponent {
|
|
19
|
+
attribute :>> id = "SR-LC-002"; attribute :>> name = "MotionMonitorChannel";
|
|
20
|
+
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
21
|
+
attribute :>> diversityBasis = "independent encoder set and diverse processor family";
|
|
22
|
+
}
|
|
23
|
+
connection : IndependentOf connect channel ::> chMotionMonitor to otherChannel ::> chMotionPrimary {
|
|
24
|
+
attribute :>> independenceBasis = "separate sensing, power, and processing; common-cause analysis SR-CCA-01";
|
|
25
|
+
}
|
|
26
|
+
connection : MonitorsChannel connect monitorChannel ::> chMotionMonitor to monitoredComponent ::> chMotionPrimary;
|
|
27
|
+
|
|
28
|
+
// Interlock: instrument exchange blocked while arm is in motion.
|
|
29
|
+
part chExchangeInterlock : LogicalComponent {
|
|
30
|
+
attribute :>> id = "SR-LC-003"; attribute :>> name = "InstrumentExchangeInterlock";
|
|
31
|
+
attribute :>> channelRole = ChannelRoleKind::interlock;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Mechanical-force flow from actuator to instrument tip.
|
|
35
|
+
part exTipForce : LogicalExchange {
|
|
36
|
+
attribute :>> id = "SR-EX-001"; attribute :>> name = "TipForceTransmission";
|
|
37
|
+
attribute :>> contentKind = FlowContentKind::mechanicalForce;
|
|
38
|
+
attribute :>> direction = DirectionKind::output;
|
|
39
|
+
}
|
|
40
|
+
part actJointDrive : Actuator {
|
|
41
|
+
attribute :>> id = "SR-HW-001"; attribute :>> name = "JointDriveActuator";
|
|
42
|
+
attribute :>> actuationKind = "brushless DC servo with harmonic drive";
|
|
43
|
+
}
|
|
44
|
+
part instrShaft : MechanicalPart {
|
|
45
|
+
attribute :>> id = "SR-HW-002"; attribute :>> name = "InstrumentShaft";
|
|
46
|
+
attribute :>> mechanicalFunction = "transmits actuation to end effector";
|
|
47
|
+
attribute :>> patientContact = true;
|
|
48
|
+
attribute :>> contactNature = "internal tissue, direct";
|
|
49
|
+
attribute :>> contactDuration = "limited (<24 h)";
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Surgeon console: haptic feedback element.
|
|
53
|
+
part elHapticGrip : UIElement {
|
|
54
|
+
attribute :>> id = "SR-UI-001"; attribute :>> name = "HapticMasterGrip";
|
|
55
|
+
attribute :>> formKind = UIElementFormKind::hapticIndicator;
|
|
56
|
+
attribute :>> guardedAgainstInadvertentActuation = true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package memo_examples_surgical_robot_viewpoints {
|
|
2
|
+
private import memo_examples_surgical_robot::*;
|
|
3
|
+
private import memo_viewpoints_definitions::*;
|
|
4
|
+
private import memo_core_enumerations::*;
|
|
5
|
+
|
|
6
|
+
view surgicalRobotOverview : MemoDiagramView {
|
|
7
|
+
expose memo_examples_surgical_robot::*;
|
|
8
|
+
attribute depth = 2;
|
|
9
|
+
attribute :>> title = "Surgical Robot Overview";
|
|
10
|
+
attribute :>> viewKind = DiagramViewKind::interconnection;
|
|
11
|
+
attribute :>> diagramType = "ibd";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Standard SysML v2 diagram samples
|
|
2
|
+
|
|
3
|
+
An openable MEMO Architect project whose only purpose is to render **one small,
|
|
4
|
+
self-contained diagram per standard SysML v2 view kind**. Together the views do
|
|
5
|
+
not describe a product or reference architecture — each exists only to exercise
|
|
6
|
+
one renderer.
|
|
7
|
+
|
|
8
|
+
Open it read-only in the Architect UI:
|
|
9
|
+
|
|
10
|
+
```sh
|
|
11
|
+
memo-architect --example standard-sysml-diagrams
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Each view is a `MemoDiagramView` declared in `model/samples/`, exposing its own
|
|
15
|
+
dummy elements. The Architect explorer groups each authored view by the layer
|
|
16
|
+
of its model content.
|
|
17
|
+
|
|
18
|
+
| View | Diagram type | View kind | Renders |
|
|
19
|
+
| --- | --- | --- | --- |
|
|
20
|
+
| `tree_view.sysml` | `bdd` | general | Block Definition Diagram — a decomposition hierarchy. |
|
|
21
|
+
| `interconnection_view.sysml` | `ibd` | interconnection | Internal Block Diagram — nested parts, boundary ports, typed connectors. |
|
|
22
|
+
| `action_flow_view.sysml` | `afd` | actionflow | Activity / action flow — actions, item flows, successions. |
|
|
23
|
+
| `functional_flow_view.sysml` | `ffd` | actionflow | Functional flow — swimlanes per realising component, typed data/energy flows. |
|
|
24
|
+
| `operational_behaviour_view.sysml` | `ofd` | actionflow | Operational flow — clinical-role swimlanes, concurrent preparation, and a composite therapy step. |
|
|
25
|
+
| `context_view.sysml` | `context` | general | Operational system context — a black-box system of interest inside an explicit boundary, with actors, peer systems, environment, and typed interactions outside it. |
|
|
26
|
+
| `requirements_view.sysml` | `req` | general | Requirements — stakeholder needs deriving into system requirements. |
|
|
27
|
+
| `use_case_view.sysml` | `ucd` | general | Use case — relationship-driven actors, include/extend links, and model-owned `usecase:level` / `edge` presentation hints. |
|
|
28
|
+
| `state_transition_view.sysml` | `stm` | statetransition | State machine — pump operating modes and their triggered transitions. |
|
|
29
|
+
|
|
30
|
+
SysML v2 standardizes the model semantics; a diagram is a presentation of those
|
|
31
|
+
semantics. The Architect renderer selects the template from each view's
|
|
32
|
+
`viewKind`, so the same model can be re-presented in any compatible kind.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
name: "sysml-diagram-samples"
|
|
2
|
+
version: "0.1.0"
|
|
3
|
+
type: device
|
|
4
|
+
extends: "@memoarchitect/medical-modeling-profile"
|
|
5
|
+
description: "MEMO Architect diagram rendering samples — one openable view per standard SysML v2 diagram type. Open with: memo-architect --example standard-sysml-diagrams"
|
|
@@ -1,14 +1,21 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_sysml_diagram_samples_model_samples_action_flow_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
private import memo_core_relationships::*;
|
|
4
4
|
|
|
5
5
|
private import memo_architecture_logical_structure::*;
|
|
6
|
+
private import memo_architecture_logical_interfaces::*;
|
|
6
7
|
private import memo_viewpoints_definitions::*;
|
|
7
8
|
private import memo_core_enumerations::*;
|
|
8
9
|
|
|
9
|
-
item def DataPacket
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
item def DataPacket specializes InterfaceItem {
|
|
11
|
+
attribute :>> itemKind = InterfaceItemKind::data;
|
|
12
|
+
}
|
|
13
|
+
item def EnergyToken specializes InterfaceItem {
|
|
14
|
+
attribute :>> itemKind = InterfaceItemKind::energy;
|
|
15
|
+
}
|
|
16
|
+
item def MaterialBatch specializes InterfaceItem {
|
|
17
|
+
attribute :>> itemKind = InterfaceItemKind::material;
|
|
18
|
+
}
|
|
12
19
|
|
|
13
20
|
action def ReceiveInput { out received : DataPacket; }
|
|
14
21
|
action def ValidateInput { in received : DataPacket; out validated : EnergyToken; }
|
|
@@ -51,6 +58,17 @@ package memo_examples_gpca_pump_model_samples_action_flow_view {
|
|
|
51
58
|
allocate sampleActionFlow.process.processStepC to laneB;
|
|
52
59
|
allocate sampleActionFlow.record to laneB;
|
|
53
60
|
|
|
61
|
+
// MemoLink sample — the universal relation, exercised where nothing else
|
|
62
|
+
// reaches. laneB is a `part` (LogicalComponent :> ArchitectureElement) and
|
|
63
|
+
// ProcessInput is an `action def` (:> MemoAction). Those foundations share
|
|
64
|
+
// no supertype, so every typed relation in the ontology is unavailable
|
|
65
|
+
// here: legalRelationshipTypes returns MemoLink and nothing else.
|
|
66
|
+
connection linkLaneBProcessesInput : MemoLink
|
|
67
|
+
connect linkSource ::> laneB to linkTarget ::> ProcessInput {
|
|
68
|
+
attribute :>> linkRationale =
|
|
69
|
+
"Lane B is the swimlane that carries the ProcessInput behaviour. The association crosses the part/action metaclass boundary, so no typed relation can express it.";
|
|
70
|
+
}
|
|
71
|
+
|
|
54
72
|
view sampleActionFlowView : MemoDiagramView {
|
|
55
73
|
expose sampleActionFlow::**;
|
|
56
74
|
expose laneA;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// System context sample (general view kind, `context` diagram type). The system
|
|
2
|
+
// under consideration is one block; every other element is an external actor,
|
|
3
|
+
// neighbouring system, or use context it interacts with across its boundary.
|
|
4
|
+
package memo_examples_sysml_diagram_samples_model_samples_context_view {
|
|
5
|
+
private import ScalarValues::*;
|
|
6
|
+
|
|
7
|
+
private import memo_architecture_operational_context_actors::*;
|
|
8
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
9
|
+
private import memo_architecture_operational_structure::*;
|
|
10
|
+
private import memo_core_relationships::*;
|
|
11
|
+
private import memo_viewpoints_definitions::*;
|
|
12
|
+
private import memo_core_enumerations::*;
|
|
13
|
+
|
|
14
|
+
// The operational system of interest is intentionally represented as one
|
|
15
|
+
// black box. Context diagrams show its environment and interfaces, not its
|
|
16
|
+
// internal decomposition.
|
|
17
|
+
part infusionSystem : OperationalEntity {
|
|
18
|
+
attribute :>> name = "Infusion Pump System";
|
|
19
|
+
attribute :>> entityKind = OperationalEntityKind::device;
|
|
20
|
+
attribute :>> contextRole = "systemOfInterest";
|
|
21
|
+
}
|
|
22
|
+
part clinician : User { attribute :>> name = "Clinician"; }
|
|
23
|
+
part patient : User { attribute :>> name = "Patient"; }
|
|
24
|
+
part biomedTech : User { attribute :>> name = "Biomedical Technician"; }
|
|
25
|
+
part pharmacySystem : OperationalEntity {
|
|
26
|
+
attribute :>> name = "Pharmacy Information System";
|
|
27
|
+
attribute :>> entityKind = OperationalEntityKind::externalSystem;
|
|
28
|
+
}
|
|
29
|
+
part homeContext : UseContext { attribute :>> name = "Home Care Environment"; }
|
|
30
|
+
|
|
31
|
+
connection : InteractsWith connect contextParticipant ::> clinician to target ::> infusionSystem;
|
|
32
|
+
connection : InteractsWith connect contextParticipant ::> patient to target ::> infusionSystem;
|
|
33
|
+
connection : InteractsWith connect contextParticipant ::> biomedTech to target ::> infusionSystem;
|
|
34
|
+
connection : ExchangesWith connect source ::> infusionSystem to target ::> pharmacySystem;
|
|
35
|
+
connection : AppliesInContext connect useContext ::> homeContext to subjectElement ::> infusionSystem;
|
|
36
|
+
|
|
37
|
+
view sampleContextView : MemoDiagramView {
|
|
38
|
+
expose infusionSystem::**;
|
|
39
|
+
attribute depth = 1;
|
|
40
|
+
attribute :>> title = "Sample · System Context";
|
|
41
|
+
attribute :>> shortDescription = "Operational system context: one black-box system boundary, its external people, peer systems, operating environment, and named boundary-crossing interactions.";
|
|
42
|
+
attribute :>> viewKind = DiagramViewKind::general;
|
|
43
|
+
attribute :>> diagramType = "context";
|
|
44
|
+
part :>> selectionQuery {
|
|
45
|
+
attribute :>> includeRelationshipKinds = ("InteractsWith", "ExchangesWith", "AppliesInContext");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
connection : IncludedIn connect sourceElement ::> infusionSystem to targetView ::> sampleContextView;
|
|
50
|
+
connection : IncludedIn connect sourceElement ::> clinician to targetView ::> sampleContextView;
|
|
51
|
+
connection : IncludedIn connect sourceElement ::> patient to targetView ::> sampleContextView;
|
|
52
|
+
connection : IncludedIn connect sourceElement ::> biomedTech to targetView ::> sampleContextView;
|
|
53
|
+
connection : IncludedIn connect sourceElement ::> pharmacySystem to targetView ::> sampleContextView;
|
|
54
|
+
connection : IncludedIn connect sourceElement ::> homeContext to targetView ::> sampleContextView;
|
|
55
|
+
}
|
package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/functional_flow_view.sysml
RENAMED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_sysml_diagram_samples_model_samples_functional_flow_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
3
|
|
|
4
4
|
private import memo_architecture_logical_structure::*;
|
|
5
|
+
private import memo_architecture_logical_interfaces::*;
|
|
5
6
|
private import memo_core_relationships::*;
|
|
6
7
|
private import memo_viewpoints_definitions::*;
|
|
7
8
|
private import memo_core_enumerations::*;
|
|
@@ -19,11 +20,21 @@ package memo_examples_gpca_pump_model_samples_functional_flow_view {
|
|
|
19
20
|
// ─────────────────────────────────────────────────────────────────────────
|
|
20
21
|
|
|
21
22
|
// Typed flow payloads
|
|
22
|
-
item def FxSensorReading
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
item def
|
|
26
|
-
|
|
23
|
+
item def FxSensorReading specializes InterfaceItem {
|
|
24
|
+
attribute :>> itemKind = InterfaceItemKind::data;
|
|
25
|
+
}
|
|
26
|
+
item def FxRateCommand specializes InterfaceItem {
|
|
27
|
+
attribute :>> itemKind = InterfaceItemKind::command;
|
|
28
|
+
}
|
|
29
|
+
item def FxMotorEnergy specializes InterfaceItem {
|
|
30
|
+
attribute :>> itemKind = InterfaceItemKind::energy;
|
|
31
|
+
}
|
|
32
|
+
item def FxMedicationFluid specializes InterfaceItem {
|
|
33
|
+
attribute :>> itemKind = InterfaceItemKind::fluid;
|
|
34
|
+
}
|
|
35
|
+
item def FxOcclusionSignal specializes InterfaceItem {
|
|
36
|
+
attribute :>> itemKind = InterfaceItemKind::signal;
|
|
37
|
+
}
|
|
27
38
|
|
|
28
39
|
// Functions with typed in/out pins
|
|
29
40
|
action def FxAcquire { out reading : FxSensorReading; }
|
package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/interconnection_view.sysml
RENAMED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_sysml_diagram_samples_model_samples_interconnection_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
|
-
private import
|
|
3
|
+
private import memo_architecture_operational_context_actors::*;
|
|
4
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
4
5
|
|
|
5
|
-
private import
|
|
6
|
+
private import memo_architecture_logical_interfaces::*;
|
|
6
7
|
private import memo_architecture_logical_structure::*;
|
|
7
8
|
private import memo_core_relationships::*;
|
|
8
9
|
private import memo_viewpoints_definitions::*;
|
package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/operational_behaviour_view.sysml
RENAMED
|
@@ -1,45 +1,45 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_sysml_diagram_samples_model_samples_operational_behaviour_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
|
-
private import
|
|
4
|
-
|
|
5
|
-
private import memo_architecture_context::*;
|
|
3
|
+
private import memo_architecture_operational_context_actors::*;
|
|
6
4
|
private import memo_core_relationships::*;
|
|
5
|
+
private import memo_architecture_logical_interfaces::*;
|
|
6
|
+
private import memo_architecture_operational_structure::*;
|
|
7
7
|
private import memo_viewpoints_definitions::*;
|
|
8
8
|
private import memo_core_enumerations::*;
|
|
9
9
|
|
|
10
|
-
//
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// "← Parent" to return.
|
|
19
|
-
// ─────────────────────────────────────────────────────────────────────────
|
|
20
|
-
|
|
21
|
-
// Items exchanged between steps (typed flow payloads)
|
|
22
|
-
item def OpPrescription;
|
|
23
|
-
item def OpBolusRequest;
|
|
24
|
-
part def CareSystem;
|
|
10
|
+
// Operational activity across clinical roles. The fixture is intentionally
|
|
11
|
+
// product-neutral and belongs only to the diagram-samples project.
|
|
12
|
+
item def OpPrescription specializes InterfaceItem {
|
|
13
|
+
attribute :>> itemKind = InterfaceItemKind::data;
|
|
14
|
+
}
|
|
15
|
+
item def OpBolusRequest specializes InterfaceItem {
|
|
16
|
+
attribute :>> itemKind = InterfaceItemKind::signal;
|
|
17
|
+
}
|
|
25
18
|
|
|
26
|
-
// Action definitions give steps typed in/out pins
|
|
27
19
|
action def OpPrescribeTherapy { out prescription : OpPrescription; }
|
|
28
20
|
action def OpVerifyPrescription { in prescription : OpPrescription; }
|
|
29
21
|
action def OpRequestBolus { out bolusRequest : OpBolusRequest; }
|
|
30
22
|
action def OpCheckLockout { in bolusRequest : OpBolusRequest; }
|
|
31
23
|
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
part opCareSystem :
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
part
|
|
40
|
-
|
|
41
|
-
part
|
|
42
|
-
|
|
24
|
+
// Use the canonical MEMO operational system type—never a sample-local
|
|
25
|
+
// placeholder—so ontology-driven Explorer grouping remains authoritative.
|
|
26
|
+
part opCareSystem : OperationalEntity {
|
|
27
|
+
attribute :>> name = "PCA Care System";
|
|
28
|
+
attribute :>> entityKind = OperationalEntityKind::device;
|
|
29
|
+
attribute :>> contextRole = "systemOfInterest";
|
|
30
|
+
}
|
|
31
|
+
part opClinicalTeam : User {
|
|
32
|
+
attribute :>> actorKind = ActorKind::clinician; attribute :>> name = "Clinical Team"; }
|
|
33
|
+
part opPatientGroup : User {
|
|
34
|
+
attribute :>> actorKind = ActorKind::patient; attribute :>> name = "Patient Interaction"; }
|
|
35
|
+
part opRolePhysician : User {
|
|
36
|
+
attribute :>> actorKind = ActorKind::clinician; attribute :>> name = "Physician"; }
|
|
37
|
+
part opRoleNurse : User {
|
|
38
|
+
attribute :>> actorKind = ActorKind::clinician; attribute :>> name = "Nurse"; }
|
|
39
|
+
part opRoleBiomed : User {
|
|
40
|
+
attribute :>> actorKind = ActorKind::technician; attribute :>> name = "Biomed Tech"; }
|
|
41
|
+
part opRolePatient : User {
|
|
42
|
+
attribute :>> actorKind = ActorKind::patient; attribute :>> name = "Patient"; }
|
|
43
43
|
|
|
44
44
|
connection : Composes connect parent ::> opCareSystem to child ::> opClinicalTeam;
|
|
45
45
|
connection : Composes connect parent ::> opCareSystem to child ::> opPatientGroup;
|
|
@@ -51,36 +51,27 @@ package memo_examples_gpca_pump_model_samples_operational_behaviour_view {
|
|
|
51
51
|
action opSetupFlow {
|
|
52
52
|
action opPrescribe : OpPrescribeTherapy { attribute name = "Prescribe Therapy"; }
|
|
53
53
|
action opVerify : OpVerifyPrescription { attribute name = "Verify Prescription"; }
|
|
54
|
-
|
|
55
|
-
// Concurrent preparation: prime the pump while the device self-tests
|
|
56
54
|
fork opForkPrep;
|
|
57
55
|
action opPrime { attribute name = "Prime Pump & Load Reservoir"; }
|
|
58
56
|
action opSelfTest { attribute name = "Run Device Self-Test"; }
|
|
59
57
|
join opJoinPrep;
|
|
60
|
-
|
|
61
58
|
action opProgram { attribute name = "Program Pump Parameters"; }
|
|
62
59
|
action opConnect { attribute name = "Connect to Patient"; }
|
|
63
60
|
action opStart { attribute name = "Start Infusion"; }
|
|
64
|
-
|
|
65
|
-
// Composite step — its own sub-flow (drill-in)
|
|
66
61
|
action opAdminister {
|
|
67
62
|
attribute name = "Administer PCA Therapy";
|
|
68
63
|
action opRequestBolus : OpRequestBolus { attribute name = "Request Bolus"; }
|
|
69
64
|
action opCheckLockout : OpCheckLockout { attribute name = "Check Lockout"; }
|
|
70
65
|
action opDeliverDose { attribute name = "Deliver Dose"; }
|
|
71
66
|
action opLogEvent { attribute name = "Log Dose Event"; }
|
|
72
|
-
|
|
73
67
|
flow of OpBolusRequest from opRequestBolus.bolusRequest to opCheckLockout.bolusRequest;
|
|
74
|
-
|
|
75
68
|
first start then opRequestBolus;
|
|
76
69
|
first opRequestBolus then opCheckLockout;
|
|
77
70
|
first opCheckLockout then opDeliverDose;
|
|
78
71
|
first opDeliverDose then opLogEvent;
|
|
79
72
|
first opLogEvent then done;
|
|
80
73
|
}
|
|
81
|
-
|
|
82
74
|
flow of OpPrescription from opPrescribe.prescription to opVerify.prescription;
|
|
83
|
-
|
|
84
75
|
first start then opPrescribe;
|
|
85
76
|
first opPrescribe then opVerify;
|
|
86
77
|
first opVerify then opForkPrep;
|
|
@@ -95,7 +86,6 @@ package memo_examples_gpca_pump_model_samples_operational_behaviour_view {
|
|
|
95
86
|
first opAdminister then done;
|
|
96
87
|
}
|
|
97
88
|
|
|
98
|
-
// Swimlane allocation — who performs each step
|
|
99
89
|
allocate opSetupFlow.opPrescribe to opRolePhysician;
|
|
100
90
|
allocate opSetupFlow.opVerify to opRoleNurse;
|
|
101
91
|
allocate opSetupFlow.opPrime to opRoleNurse;
|
|
@@ -116,7 +106,7 @@ package memo_examples_gpca_pump_model_samples_operational_behaviour_view {
|
|
|
116
106
|
expose opPatientGroup::**;
|
|
117
107
|
attribute depth = 2;
|
|
118
108
|
attribute :>> title = "Sample · Clinical PCA Setup (Operational)";
|
|
119
|
-
attribute :>> shortDescription = "Operational activity across clinical roles
|
|
109
|
+
attribute :>> shortDescription = "Operational activity across clinical roles with concurrent preparation and a composite therapy step.";
|
|
120
110
|
attribute :>> viewKind = DiagramViewKind::actionflow;
|
|
121
111
|
attribute :>> diagramType = "ofd";
|
|
122
112
|
}
|