@memoarchitect/ontology 0.4.6 → 0.6.1
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 +7 -6
- 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 +145 -27
- 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 +12 -4
- 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 +19 -11
- package/profile/memo.package.yaml +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 +31 -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/templates/connected-device/memo.package.yaml +5 -0
- package/templates/connected-device/src/architecture/system.sysml +5 -0
- package/templates/connected-device/src/artifacts/artifacts.sysml +5 -0
- package/templates/connected-device/src/assurance/requirements.sysml +7 -0
- package/templates/default/memo.package.yaml +5 -0
- package/templates/default/src/architecture/system.sysml +7 -0
- package/templates/default/src/artifacts/artifacts.sysml +5 -0
- package/templates/default/src/assurance/requirements.sysml +8 -0
- package/templates/infusion-pump/memo.package.yaml +5 -0
- package/templates/infusion-pump/src/architecture/system.sysml +5 -0
- package/templates/infusion-pump/src/artifacts/artifacts.sysml +5 -0
- package/templates/infusion-pump/src/assurance/requirements.sysml +7 -0
- package/templates/monitoring-device/memo.package.yaml +5 -0
- package/templates/monitoring-device/src/architecture/system.sysml +5 -0
- package/templates/monitoring-device/src/artifacts/artifacts.sysml +5 -0
- package/templates/monitoring-device/src/assurance/requirements.sysml +7 -0
- package/templates/samd/memo.package.yaml +5 -0
- package/templates/samd/src/architecture/system.sysml +5 -0
- package/templates/samd/src/artifacts/artifacts.sysml +5 -0
- package/templates/samd/src/assurance/requirements.sysml +7 -0
- 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/profile/archetypes.yaml +0 -36
- package/profile/templates/connected-device/starter.sysml +0 -8
- package/profile/templates/infusion-pump/starter.sysml +0 -8
- package/profile/templates/monitoring-device/starter.sysml +0 -8
- package/profile/templates/samd/starter.sysml +0 -8
- 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/template/memo.package.yaml +0 -5
- package/template/src/catalog/starter.sysml +0 -12
- package/template/src/documents/.gitkeep +0 -1
- package/template/src/views/.gitkeep +0 -1
- /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,63 @@
|
|
|
1
|
+
// Requirements sample (general view kind, `req` diagram type). Stakeholder needs
|
|
2
|
+
// on the left derive into system requirements; `DerivesFrom` edges render as the
|
|
3
|
+
// requirements-diagram trace lines.
|
|
4
|
+
package memo_examples_sysml_diagram_samples_model_samples_requirements_view {
|
|
5
|
+
private import ScalarValues::*;
|
|
6
|
+
|
|
7
|
+
private import memo_assurance_requirements_needs::*;
|
|
8
|
+
private import memo_assurance_requirements::*;
|
|
9
|
+
private import memo_core_relationships::*;
|
|
10
|
+
private import memo_viewpoints_definitions::*;
|
|
11
|
+
private import memo_core_enumerations::*;
|
|
12
|
+
|
|
13
|
+
requirement needSafeTherapy : Need {
|
|
14
|
+
attribute :>> needKind = NeedKind::stakeholder;
|
|
15
|
+
attribute :>> id = "NEED-001"; attribute :>> name = "SafeTherapy";
|
|
16
|
+
attribute :>> statement = "The device shall support safe patient-controlled infusion therapy.";
|
|
17
|
+
}
|
|
18
|
+
requirement needTimelyAlarms : Need {
|
|
19
|
+
attribute :>> needKind = NeedKind::stakeholder;
|
|
20
|
+
attribute :>> id = "NEED-002"; attribute :>> name = "TimelyAlarms";
|
|
21
|
+
attribute :>> statement = "Clinicians shall be notified promptly of any condition that endangers therapy.";
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
requirement reqDoseLimit : Requirement {
|
|
25
|
+
attribute :>> requirementKind = RequirementKind::system;
|
|
26
|
+
attribute :>> id = "REQ-001"; attribute :>> name = "DoseLimitEnforcement";
|
|
27
|
+
attribute :>> statement = "The pump shall not deliver more than the prescribed maximum dose in any one-hour window.";
|
|
28
|
+
}
|
|
29
|
+
requirement reqOcclusionAlarm : Requirement {
|
|
30
|
+
attribute :>> requirementKind = RequirementKind::system;
|
|
31
|
+
attribute :>> id = "REQ-002"; attribute :>> name = "OcclusionAlarm";
|
|
32
|
+
attribute :>> statement = "The pump shall raise an alarm within two seconds of detecting a downstream occlusion.";
|
|
33
|
+
}
|
|
34
|
+
requirement reqAlarmLoudness : Requirement {
|
|
35
|
+
attribute :>> requirementKind = RequirementKind::system;
|
|
36
|
+
attribute :>> id = "REQ-003"; attribute :>> name = "AlarmLoudness";
|
|
37
|
+
attribute :>> statement = "An active alarm shall be audible at 65 dBA at one metre.";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
connection : DerivesFrom connect sourceDriver ::> needSafeTherapy to targetRequirement ::> reqDoseLimit;
|
|
41
|
+
connection : DerivesFrom connect sourceDriver ::> needSafeTherapy to targetRequirement ::> reqOcclusionAlarm;
|
|
42
|
+
connection : DerivesFrom connect sourceDriver ::> needTimelyAlarms to targetRequirement ::> reqOcclusionAlarm;
|
|
43
|
+
connection : DerivesFrom connect sourceDriver ::> needTimelyAlarms to targetRequirement ::> reqAlarmLoudness;
|
|
44
|
+
|
|
45
|
+
view sampleRequirementsView : MemoDiagramView {
|
|
46
|
+
expose needSafeTherapy::**;
|
|
47
|
+
expose needTimelyAlarms::**;
|
|
48
|
+
attribute depth = 1;
|
|
49
|
+
attribute :>> title = "Sample · Requirements";
|
|
50
|
+
attribute :>> shortDescription = "Stakeholder needs deriving into system requirements, wired by DerivesFrom trace edges.";
|
|
51
|
+
attribute :>> viewKind = DiagramViewKind::general;
|
|
52
|
+
attribute :>> diagramType = "req";
|
|
53
|
+
part :>> selectionQuery {
|
|
54
|
+
attribute :>> includeRelationshipKinds = ("DerivesFrom");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
connection : IncludedIn connect sourceElement ::> needSafeTherapy to targetView ::> sampleRequirementsView;
|
|
59
|
+
connection : IncludedIn connect sourceElement ::> needTimelyAlarms to targetView ::> sampleRequirementsView;
|
|
60
|
+
connection : IncludedIn connect sourceElement ::> reqDoseLimit to targetView ::> sampleRequirementsView;
|
|
61
|
+
connection : IncludedIn connect sourceElement ::> reqOcclusionAlarm to targetView ::> sampleRequirementsView;
|
|
62
|
+
connection : IncludedIn connect sourceElement ::> reqAlarmLoudness to targetView ::> sampleRequirementsView;
|
|
63
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
// State transition sample (statetransition view kind, `stm` diagram type). A
|
|
2
|
+
// behaviour machine owns its mode states; each Transition carries `sourceState`
|
|
3
|
+
// / `targetState` naming the states it connects, and renders as a labelled edge.
|
|
4
|
+
package memo_examples_sysml_diagram_samples_model_samples_state_transition_view {
|
|
5
|
+
private import ScalarValues::*;
|
|
6
|
+
|
|
7
|
+
private import memo_architecture_functional_behavior::*;
|
|
8
|
+
private import memo_core_relationships::*;
|
|
9
|
+
private import memo_viewpoints_definitions::*;
|
|
10
|
+
private import memo_core_enumerations::*;
|
|
11
|
+
|
|
12
|
+
state pumpModes : StateMachine { attribute :>> name = "Pump Operating Modes"; }
|
|
13
|
+
|
|
14
|
+
state idle : ModeState { attribute :>> name = "Idle"; }
|
|
15
|
+
state infusing : ModeState { attribute :>> name = "Infusing"; }
|
|
16
|
+
state paused : ModeState { attribute :>> name = "Paused"; }
|
|
17
|
+
state alarm : ModeState { attribute :>> name = "Alarm"; }
|
|
18
|
+
|
|
19
|
+
// Infusing is a composite state: its substates show what the pump is doing
|
|
20
|
+
// while it is infusing, and the machine renders them nested inside it.
|
|
21
|
+
state priming : ModeState { attribute :>> name = "Priming"; }
|
|
22
|
+
state delivering : ModeState { attribute :>> name = "Delivering"; }
|
|
23
|
+
state holding : ModeState { attribute :>> name = "Holding (KVO)"; }
|
|
24
|
+
|
|
25
|
+
part tStart : Transition {
|
|
26
|
+
attribute :>> name = "start";
|
|
27
|
+
attribute :>> trigger = "startInfusion";
|
|
28
|
+
attribute :>> sourceState = "Idle"; attribute :>> targetState = "Infusing";
|
|
29
|
+
}
|
|
30
|
+
part tPause : Transition {
|
|
31
|
+
attribute :>> name = "pause";
|
|
32
|
+
attribute :>> trigger = "pauseRequested";
|
|
33
|
+
attribute :>> sourceState = "Infusing"; attribute :>> targetState = "Paused";
|
|
34
|
+
}
|
|
35
|
+
part tResume : Transition {
|
|
36
|
+
attribute :>> name = "resume";
|
|
37
|
+
attribute :>> trigger = "resumeRequested";
|
|
38
|
+
attribute :>> sourceState = "Paused"; attribute :>> targetState = "Infusing";
|
|
39
|
+
}
|
|
40
|
+
part tFault : Transition {
|
|
41
|
+
attribute :>> name = "fault";
|
|
42
|
+
attribute :>> trigger = "occlusionDetected";
|
|
43
|
+
attribute :>> sourceState = "Infusing"; attribute :>> targetState = "Alarm";
|
|
44
|
+
}
|
|
45
|
+
part tRecover : Transition {
|
|
46
|
+
attribute :>> name = "acknowledge";
|
|
47
|
+
attribute :>> trigger = "alarmCleared";
|
|
48
|
+
attribute :>> sourceState = "Alarm"; attribute :>> targetState = "Idle";
|
|
49
|
+
}
|
|
50
|
+
part tStop : Transition {
|
|
51
|
+
attribute :>> name = "stop";
|
|
52
|
+
attribute :>> trigger = "stopInfusion";
|
|
53
|
+
attribute :>> sourceState = "Infusing"; attribute :>> targetState = "Idle";
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
part tPrimed : Transition {
|
|
57
|
+
attribute :>> name = "primed";
|
|
58
|
+
attribute :>> trigger = "primeComplete";
|
|
59
|
+
attribute :>> sourceState = "Priming"; attribute :>> targetState = "Delivering";
|
|
60
|
+
}
|
|
61
|
+
part tKvo : Transition {
|
|
62
|
+
attribute :>> name = "keepVeinOpen";
|
|
63
|
+
attribute :>> trigger = "doseComplete";
|
|
64
|
+
attribute :>> sourceState = "Delivering"; attribute :>> targetState = "Holding (KVO)";
|
|
65
|
+
}
|
|
66
|
+
part tResumeDose : Transition {
|
|
67
|
+
attribute :>> name = "resumeDose";
|
|
68
|
+
attribute :>> trigger = "doseScheduled";
|
|
69
|
+
attribute :>> sourceState = "Holding (KVO)"; attribute :>> targetState = "Delivering";
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
connection : Composes connect parent ::> pumpModes to child ::> idle;
|
|
73
|
+
connection : Composes connect parent ::> pumpModes to child ::> infusing;
|
|
74
|
+
connection : Composes connect parent ::> pumpModes to child ::> paused;
|
|
75
|
+
connection : Composes connect parent ::> pumpModes to child ::> alarm;
|
|
76
|
+
connection : Composes connect parent ::> infusing to child ::> priming;
|
|
77
|
+
connection : Composes connect parent ::> infusing to child ::> delivering;
|
|
78
|
+
connection : Composes connect parent ::> infusing to child ::> holding;
|
|
79
|
+
|
|
80
|
+
view sampleStateTransitionView : MemoDiagramView {
|
|
81
|
+
expose pumpModes::**;
|
|
82
|
+
attribute depth = 2;
|
|
83
|
+
attribute :>> title = "Sample · State Transition";
|
|
84
|
+
attribute :>> shortDescription = "A pump-mode state machine — Idle, Infusing, Paused, Alarm — where Infusing is a composite state nesting Priming, Delivering and Holding.";
|
|
85
|
+
attribute :>> viewKind = DiagramViewKind::statetransition;
|
|
86
|
+
attribute :>> diagramType = "stm";
|
|
87
|
+
part :>> selectionQuery {
|
|
88
|
+
attribute :>> includeElementKinds = ("StateMachine", "ModeState", "Transition");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
connection : IncludedIn connect sourceElement ::> pumpModes to targetView ::> sampleStateTransitionView;
|
|
93
|
+
connection : IncludedIn connect sourceElement ::> idle to targetView ::> sampleStateTransitionView;
|
|
94
|
+
connection : IncludedIn connect sourceElement ::> infusing to targetView ::> sampleStateTransitionView;
|
|
95
|
+
connection : IncludedIn connect sourceElement ::> paused to targetView ::> sampleStateTransitionView;
|
|
96
|
+
connection : IncludedIn connect sourceElement ::> alarm to targetView ::> sampleStateTransitionView;
|
|
97
|
+
connection : IncludedIn connect sourceElement ::> tStart to targetView ::> sampleStateTransitionView;
|
|
98
|
+
connection : IncludedIn connect sourceElement ::> tPause to targetView ::> sampleStateTransitionView;
|
|
99
|
+
connection : IncludedIn connect sourceElement ::> tResume to targetView ::> sampleStateTransitionView;
|
|
100
|
+
connection : IncludedIn connect sourceElement ::> tFault to targetView ::> sampleStateTransitionView;
|
|
101
|
+
connection : IncludedIn connect sourceElement ::> tRecover to targetView ::> sampleStateTransitionView;
|
|
102
|
+
connection : IncludedIn connect sourceElement ::> tStop to targetView ::> sampleStateTransitionView;
|
|
103
|
+
connection : IncludedIn connect sourceElement ::> priming to targetView ::> sampleStateTransitionView;
|
|
104
|
+
connection : IncludedIn connect sourceElement ::> delivering to targetView ::> sampleStateTransitionView;
|
|
105
|
+
connection : IncludedIn connect sourceElement ::> holding to targetView ::> sampleStateTransitionView;
|
|
106
|
+
connection : IncludedIn connect sourceElement ::> tPrimed to targetView ::> sampleStateTransitionView;
|
|
107
|
+
connection : IncludedIn connect sourceElement ::> tKvo to targetView ::> sampleStateTransitionView;
|
|
108
|
+
connection : IncludedIn connect sourceElement ::> tResumeDose to targetView ::> sampleStateTransitionView;
|
|
109
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
package
|
|
1
|
+
package memo_examples_sysml_diagram_samples_model_samples_tree_view {
|
|
2
2
|
private import ScalarValues::*;
|
|
3
|
-
private import
|
|
3
|
+
private import memo_architecture_implementation_hardware_structure::*;
|
|
4
4
|
|
|
5
|
-
private import
|
|
5
|
+
private import memo_architecture_realization_physical::*;
|
|
6
6
|
private import memo_core_relationships::*;
|
|
7
7
|
private import memo_viewpoints_definitions::*;
|
|
8
8
|
private import memo_core_enumerations::*;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
package memo_examples_sysml_diagram_samples_model_samples_use_case_view {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
private import memo_architecture_operational_context_actors::*;
|
|
4
|
+
private import memo_architecture_operational_use_cases::*;
|
|
5
|
+
private import memo_core_relationships::*;
|
|
6
|
+
private import memo_viewpoints_definitions::*;
|
|
7
|
+
private import memo_core_enumerations::*;
|
|
8
|
+
|
|
9
|
+
// Product-neutral fixture for the UML-style use-case presentation.
|
|
10
|
+
part patient : User {
|
|
11
|
+
attribute :>> actorKind = ActorKind::patient;
|
|
12
|
+
attribute :>> name = "Patient";
|
|
13
|
+
}
|
|
14
|
+
part clinician : User {
|
|
15
|
+
attribute :>> actorKind = ActorKind::clinician;
|
|
16
|
+
attribute :>> name = "Clinician";
|
|
17
|
+
}
|
|
18
|
+
part serviceTechnician : User {
|
|
19
|
+
attribute :>> actorKind = ActorKind::technician;
|
|
20
|
+
attribute :>> name = "Service Technician";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
use case reviewStatus : UseCase {
|
|
24
|
+
attribute :>> id = "UC-SAMPLE-001";
|
|
25
|
+
attribute :>> name = "Review Device Status";
|
|
26
|
+
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
27
|
+
}
|
|
28
|
+
use case configureTherapy : UseCase {
|
|
29
|
+
attribute :>> id = "UC-SAMPLE-002";
|
|
30
|
+
attribute :>> name = "Configure Therapy";
|
|
31
|
+
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
32
|
+
}
|
|
33
|
+
use case maintainDevice : UseCase {
|
|
34
|
+
attribute :>> id = "UC-SAMPLE-003";
|
|
35
|
+
attribute :>> name = "Maintain Device";
|
|
36
|
+
attribute :>> useCaseKind = UseCaseKind::service;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
use case documentTreatment : UseCase {
|
|
40
|
+
attribute :>> id = "UC-SAMPLE-004";
|
|
41
|
+
attribute :>> name = "Document Treatment";
|
|
42
|
+
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// L2 child of Review Device Status: makes L0 → L1 → L2 selectable.
|
|
46
|
+
use case validateTherapySettings : UseCase {
|
|
47
|
+
attribute :>> id = "UC-SAMPLE-005";
|
|
48
|
+
attribute :>> name = "Validate Therapy Settings";
|
|
49
|
+
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
connection : Initiates connect initiatingUser ::> clinician to initiatedUseCase ::> configureTherapy;
|
|
53
|
+
connection : ParticipatesIn connect participant ::> patient to useCase ::> reviewStatus;
|
|
54
|
+
connection : ParticipatesIn connect participant ::> patient to useCase ::> configureTherapy;
|
|
55
|
+
connection : ParticipatesIn connect participant ::> serviceTechnician to useCase ::> maintainDevice;
|
|
56
|
+
connection : ParticipatesIn connect participant ::> clinician to useCase ::> validateTherapySettings;
|
|
57
|
+
connection : Includes connect includingUseCase ::> configureTherapy to includedUseCase ::> reviewStatus;
|
|
58
|
+
connection : Includes connect includingUseCase ::> reviewStatus to includedUseCase ::> validateTherapySettings;
|
|
59
|
+
connection : Extends connect extendingUseCase ::> documentTreatment to extendedUseCase ::> reviewStatus;
|
|
60
|
+
|
|
61
|
+
view sampleUseCaseView : MemoDiagramView {
|
|
62
|
+
expose patient;
|
|
63
|
+
expose clinician;
|
|
64
|
+
expose serviceTechnician;
|
|
65
|
+
expose reviewStatus;
|
|
66
|
+
expose configureTherapy;
|
|
67
|
+
expose maintainDevice;
|
|
68
|
+
expose documentTreatment;
|
|
69
|
+
expose validateTherapySettings;
|
|
70
|
+
attribute :>> title = "Sample · Device Use Cases";
|
|
71
|
+
attribute :>> shortDescription = "Actors outside a device boundary with include, extend, hierarchy-level, and orthogonal-routing presentation.";
|
|
72
|
+
attribute :>> viewKind = DiagramViewKind::general;
|
|
73
|
+
attribute :>> diagramType = "ucd";
|
|
74
|
+
part :>> selectionQuery {
|
|
75
|
+
attribute :>> includeElementKinds = ("User", "UseCase");
|
|
76
|
+
attribute :>> includeRelationshipKinds = ("Initiates", "ParticipatesIn", "Includes", "Extends");
|
|
77
|
+
}
|
|
78
|
+
// Presentation is owned by the model view, rather than a canvas control.
|
|
79
|
+
attribute :>> layoutHint = "usecase:level=all;edge=rounded";
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Temperature alarm
|
|
2
|
+
|
|
3
|
+
A focused MEMO example for patient-temperature monitoring and alarming.
|
|
4
|
+
|
|
5
|
+
- `model/temperature_alarm.sysml` is the public parent package.
|
|
6
|
+
- `model/catalog/` holds the canonical model elements.
|
|
7
|
+
- `model/viewpoints/` holds diagram views of that catalog.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
// Focused example: patient-temperature monitoring with an alarm — the
|
|
2
|
+
// assurance chain end to end. Use case → function → logical channel → UI
|
|
3
|
+
// alarm element → use error → hazard → risk control (implemented by the UI)
|
|
4
|
+
// → verification + usability validation → evidence. Demonstrates Phase 4
|
|
5
|
+
// integration: one element participates in several disciplines at once
|
|
6
|
+
// without duplication.
|
|
7
|
+
package memo_examples_temperature_alarm {
|
|
8
|
+
private import ScalarValues::*;
|
|
9
|
+
|
|
10
|
+
private import memo_core_enumerations::*;
|
|
11
|
+
private import memo_core_dimensions::*;
|
|
12
|
+
private import memo_architecture_operational_context_actors::*;
|
|
13
|
+
private import memo_assurance_requirements_needs::*;
|
|
14
|
+
private import memo_architecture_operational_use_cases::*;
|
|
15
|
+
private import memo_architecture_operational_activities::*;
|
|
16
|
+
private import memo_architecture_operational_scenarios::*;
|
|
17
|
+
private import memo_architecture_functional_functions::*;
|
|
18
|
+
private import memo_architecture_logical_structure::*;
|
|
19
|
+
private import memo_assurance_safety_risk::*;
|
|
20
|
+
private import memo_assurance_verification_validation::*;
|
|
21
|
+
private import memo_assurance_human_factors::*;
|
|
22
|
+
private import memo_architecture_implementation_ui::*;
|
|
23
|
+
private import memo_core_relationships::*;
|
|
24
|
+
|
|
25
|
+
// ── Operational intent ──────────────────────────────────────
|
|
26
|
+
part icuNurse : User {
|
|
27
|
+
attribute :>> actorKind = ActorKind::clinician;
|
|
28
|
+
attribute :>> id = "TA-USR-001"; attribute :>> name = "ICUNurse";
|
|
29
|
+
}
|
|
30
|
+
use case ucMonitorTemp : UseCase {
|
|
31
|
+
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
32
|
+
attribute :>> id = "TA-UC-001";
|
|
33
|
+
attribute :>> name = "MonitorPatientTemperature";
|
|
34
|
+
attribute :>> goalStatement = "Continuously monitor core temperature and be alerted when it leaves the safe range.";
|
|
35
|
+
}
|
|
36
|
+
action actAcknowledgeAlarm : OperationalActivity {
|
|
37
|
+
attribute :>> id = "TA-ACT-001"; attribute :>> name = "ReviewAndAcknowledgeAlarm";
|
|
38
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
39
|
+
}
|
|
40
|
+
action taskAckAlarm : UserTask {
|
|
41
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
42
|
+
attribute :>> id = "TA-TASK-001"; attribute :>> name = "AcknowledgeTemperatureAlarm";
|
|
43
|
+
attribute :>> taskGoal = "recognize, assess, and acknowledge the alarm";
|
|
44
|
+
attribute :>> potentialHarm = "delayed intervention for hypo-/hyperthermia";
|
|
45
|
+
attribute :>> severityIfFailed = SeverityKind::serious;
|
|
46
|
+
}
|
|
47
|
+
connection : Initiates connect initiatingUser ::> icuNurse to initiatedUseCase ::> ucMonitorTemp;
|
|
48
|
+
connection : Composes connect parent ::> actAcknowledgeAlarm to child ::> taskAckAlarm;
|
|
49
|
+
|
|
50
|
+
// ── Functional and logical slices ───────────────────────────
|
|
51
|
+
part fnDetectDeviation : SystemFunction {
|
|
52
|
+
attribute :>> id = "TA-FN-001"; attribute :>> name = "DetectTemperatureDeviation";
|
|
53
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
54
|
+
// This function is owned by the functional architecture layer (its
|
|
55
|
+
// package). Its safety and verification character are typed
|
|
56
|
+
// relationships to assurance-owned elements, not tags on the function.
|
|
57
|
+
}
|
|
58
|
+
part chMonitor : LogicalComponent {
|
|
59
|
+
attribute :>> id = "TA-LC-001"; attribute :>> name = "TemperatureMonitorChannel";
|
|
60
|
+
attribute :>> channelRole = ChannelRoleKind::monitor;
|
|
61
|
+
}
|
|
62
|
+
part chPrimary : LogicalComponent {
|
|
63
|
+
attribute :>> id = "TA-LC-002"; attribute :>> name = "MeasurementChannel";
|
|
64
|
+
attribute :>> channelRole = ChannelRoleKind::primary;
|
|
65
|
+
}
|
|
66
|
+
connection : IndependentOf connect channel ::> chMonitor to otherChannel ::> chPrimary {
|
|
67
|
+
attribute :>> independenceBasis = "separate sensing element and power rail";
|
|
68
|
+
}
|
|
69
|
+
connection : AllocatedTo connect function ::> fnDetectDeviation to allocatedElement ::> chMonitor;
|
|
70
|
+
|
|
71
|
+
// ── UI: alarm element and acknowledgement action ────────────
|
|
72
|
+
part uiBedside : UserInterface {
|
|
73
|
+
attribute :>> id = "TA-UI-001"; attribute :>> name = "BedsideDisplay";
|
|
74
|
+
attribute :>> modality = "visual + audible";
|
|
75
|
+
}
|
|
76
|
+
part elAlarmBanner : UIElement {
|
|
77
|
+
attribute :>> id = "TA-EL-001"; attribute :>> name = "TempAlarmBanner";
|
|
78
|
+
attribute :>> alarmPriority = NotificationPriorityKind::high;
|
|
79
|
+
attribute :>> annunciationModality = "flashing banner + tone";
|
|
80
|
+
attribute :>> silenceable = true;
|
|
81
|
+
}
|
|
82
|
+
action uiaAcknowledge : UIAction {
|
|
83
|
+
attribute :>> id = "TA-UIA-001"; attribute :>> name = "AcknowledgeAlarm";
|
|
84
|
+
attribute :>> intent = InteractionIntentKind::acknowledgement;
|
|
85
|
+
attribute :>> confirmationRequired = true;
|
|
86
|
+
}
|
|
87
|
+
connection : ElementTriggersAction connect element ::> elAlarmBanner to triggeredAction ::> uiaAcknowledge;
|
|
88
|
+
connection : ActionInvokesFunction connect uiAction ::> uiaAcknowledge to systemFunction ::> fnDetectDeviation;
|
|
89
|
+
connection : Supports { attribute :>> supportKind = SupportKind::task; connect supporter ::> uiBedside to supported ::> taskAckAlarm; }
|
|
90
|
+
|
|
91
|
+
// ── Risk chain with use error ───────────────────────────────
|
|
92
|
+
part ueSilenceAndForget : UseError {
|
|
93
|
+
attribute :>> id = "TA-UE-001"; attribute :>> name = "SilenceWithoutAssessment";
|
|
94
|
+
attribute :>> errorCategory = UseErrorCategoryKind::memoryRecall;
|
|
95
|
+
attribute :>> severity = SeverityKind::serious;
|
|
96
|
+
}
|
|
97
|
+
item hzUndetectedDeviation : Hazard {
|
|
98
|
+
attribute :>> id = "TA-HZ-001"; attribute :>> name = "UndetectedTemperatureDeviation";
|
|
99
|
+
attribute :>> hazardType = HazardTypeKind::informationError;
|
|
100
|
+
attribute :>> severity = SeverityKind::serious;
|
|
101
|
+
attribute :>> foreseeable = true;
|
|
102
|
+
}
|
|
103
|
+
item rcReAnnunciate : RiskControlMeasure {
|
|
104
|
+
attribute :>> id = "TA-RC-001"; attribute :>> name = "AutoReAnnunciationAfterSilence";
|
|
105
|
+
attribute :>> controlKind = RiskControlKind::alarm;
|
|
106
|
+
attribute :>> implementationKind = RiskControlImplementationKind::softwareDesign;
|
|
107
|
+
}
|
|
108
|
+
connection : CommitsUseError connect task ::> taskAckAlarm to useError ::> ueSilenceAndForget;
|
|
109
|
+
connection : Causes { attribute :>> causeKind = CauseKind::useErrorLeadsToHazard; connect cause ::> ueSilenceAndForget to effect ::> hzUndetectedDeviation; }
|
|
110
|
+
connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard; connect control ::> rcReAnnunciate to mitigatedElement ::> hzUndetectedDeviation; }
|
|
111
|
+
connection : ControlImplementedBy connect riskControl ::> rcReAnnunciate to implementingElement ::> elAlarmBanner;
|
|
112
|
+
|
|
113
|
+
// ── Verification, validation, evidence ──────────────────────
|
|
114
|
+
part vsAlarmLatency : VerificationScenario {
|
|
115
|
+
attribute :>> id = "TA-VS-001"; attribute :>> name = "AlarmLatencyScenario";
|
|
116
|
+
attribute :>> variantKind = ScenarioVariantKind::nominal;
|
|
117
|
+
attribute :>> operationalCondition = OperationalConditionKind::normal;
|
|
118
|
+
attribute :>> scenarioPurpose = ScenarioPurposeKind::memoVerification;
|
|
119
|
+
attribute :>> pathSummary = "Induce out-of-range temperature; measure detection-to-annunciation latency.";
|
|
120
|
+
}
|
|
121
|
+
verification vcAlarmLatency : VerificationCase {
|
|
122
|
+
attribute :>> id = "TA-VC-001"; attribute :>> name = "VerifyAlarmLatency";
|
|
123
|
+
attribute :>> methodKind = VerificationMethodKind::test;
|
|
124
|
+
attribute :>> acceptanceCriteria = "annunciation within 2 s of sustained deviation";
|
|
125
|
+
}
|
|
126
|
+
part uvAckTask : UsabilityValidation {
|
|
127
|
+
attribute :>> id = "TA-UV-001"; attribute :>> name = "SummativeAlarmAcknowledgement";
|
|
128
|
+
attribute :>> participantProfile = "15 ICU nurses, representative shift conditions";
|
|
129
|
+
attribute :>> participantCount = 15;
|
|
130
|
+
attribute :>> acceptanceCriteria = "no critical-task failures; all alarms assessed before silencing";
|
|
131
|
+
}
|
|
132
|
+
part evLatencyReport : Evidence {
|
|
133
|
+
attribute :>> id = "TA-EV-001"; attribute :>> name = "AlarmLatencyTestReport";
|
|
134
|
+
attribute :>> evidenceType = "test report";
|
|
135
|
+
}
|
|
136
|
+
connection : ExecutesScenario connect verificationCase ::> vcAlarmLatency to scenario ::> vsAlarmLatency;
|
|
137
|
+
connection : VerifiedBy connect verificationCase ::> vcAlarmLatency to verificationTarget ::> fnDetectDeviation;
|
|
138
|
+
connection : Validates connect validationCase ::> uvAckTask to validationTarget ::> taskAckAlarm;
|
|
139
|
+
connection : ProducesEvidence connect producer ::> vcAlarmLatency to producedEvidence ::> evLatencyReport;
|
|
140
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
package memo_examples_temperature_alarm_viewpoints {
|
|
2
|
+
private import memo_examples_temperature_alarm::*;
|
|
3
|
+
private import memo_viewpoints_definitions::*;
|
|
4
|
+
private import memo_core_enumerations::*;
|
|
5
|
+
|
|
6
|
+
view temperatureAlarmOverview : MemoDiagramView {
|
|
7
|
+
expose memo_examples_temperature_alarm::*;
|
|
8
|
+
attribute depth = 2;
|
|
9
|
+
attribute :>> title = "Temperature Alarm Overview";
|
|
10
|
+
attribute :>> viewKind = DiagramViewKind::general;
|
|
11
|
+
attribute :>> diagramType = "bdd";
|
|
12
|
+
}
|
|
13
|
+
}
|
package/memo.manifest.yaml
CHANGED
|
@@ -5,9 +5,17 @@ packages:
|
|
|
5
5
|
"@memoarchitect/methodology-default": ./methodologies/default
|
|
6
6
|
"@memoarchitect/methodology-gpca": ./methodologies/gpca
|
|
7
7
|
init:
|
|
8
|
-
defaultExtends: "@memoarchitect/
|
|
9
|
-
rootImport: "
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
defaultExtends: "@memoarchitect/methodology-default"
|
|
9
|
+
rootImport: "memo"
|
|
10
|
+
defaultTemplate: default
|
|
11
|
+
templates:
|
|
12
|
+
default: ./templates/default
|
|
13
|
+
samd: ./templates/samd
|
|
14
|
+
connected-device: ./templates/connected-device
|
|
15
|
+
monitoring-device: ./templates/monitoring-device
|
|
16
|
+
infusion-pump: ./templates/infusion-pump
|
|
12
17
|
examples:
|
|
13
18
|
gpca: ./examples/gpca-pump
|
|
19
|
+
standard-sysml-diagrams: ./examples/sysml-diagram-samples
|
|
20
|
+
extension-template: ./examples/extensions/template
|
|
21
|
+
clinical-extension: ./examples/extensions/clinical
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
name: "@
|
|
2
|
-
version: "0.
|
|
1
|
+
name: "@memoarchitect/methodology-gpca"
|
|
2
|
+
version: "0.6.1"
|
|
3
3
|
type: methodology
|
|
4
|
-
extends: "@
|
|
4
|
+
extends: "@memoarchitect/methodology-default"
|
|
5
5
|
sysmlDir: "../../examples/gpca-pump/methodology"
|
|
6
|
-
description: "GPCA infusion pump methodology — subtraction-based tailoring of @
|
|
6
|
+
description: "GPCA infusion pump methodology — subtraction-based tailoring of @memoarchitect/methodology-default for the non-networked prototype variant. Excludes cybersecurity and SOUP."
|
|
7
7
|
license: "MIT"
|
|
8
8
|
tags: ["methodology", "medical-device", "gpca", "tailoring"]
|
|
9
9
|
usage: ["viewpoints", "views", "rules", "gates", "patterns", "profiles", "workflow", "dhf"]
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: "@memoarchitect/ontology"
|
|
2
|
-
version: "0.
|
|
2
|
+
version: "0.6.1"
|
|
3
3
|
type: ontology
|
|
4
4
|
description: "MEMO — the single canonical medical-device ontology: core semantics, the Arcadia-inspired architecture layers (context, requirements, behavior, structure, interfaces, risk, cybersecurity, assurance, …), compliance, viewpoints, views, and invariant rules. One namespace (memo::), one src/ tree."
|
|
5
5
|
license: "MIT"
|
|
@@ -45,3 +45,40 @@ layers:
|
|
|
45
45
|
- id: verification
|
|
46
46
|
label: Verification
|
|
47
47
|
color: "#2ECC71"
|
|
48
|
+
|
|
49
|
+
# Model Explorer taxonomy. This is ontology metadata: Architect receives these
|
|
50
|
+
# values from memo-tools and does not infer MEMO's V-model from source paths.
|
|
51
|
+
explorer:
|
|
52
|
+
classifications:
|
|
53
|
+
- { source: activities, domain: architecture, group: operational }
|
|
54
|
+
- { source: context, domain: architecture, group: operational }
|
|
55
|
+
# Context has concrete namespaces such as actors and use_context; retain
|
|
56
|
+
# them when the Explorer receives ontology-derived kinds directly.
|
|
57
|
+
- { source: actors, domain: architecture, group: operational }
|
|
58
|
+
- { source: use_context, domain: architecture, group: operational }
|
|
59
|
+
- { source: workflows, domain: architecture, group: operational }
|
|
60
|
+
- { source: scenarios, domain: architecture, group: operational }
|
|
61
|
+
- { source: use_cases, domain: architecture, group: operational }
|
|
62
|
+
- { source: interaction, domain: architecture, group: operational }
|
|
63
|
+
- { source: operational, domain: architecture, group: operational }
|
|
64
|
+
- { source: functions, domain: architecture, group: functional }
|
|
65
|
+
- { source: behavior, domain: architecture, group: functional }
|
|
66
|
+
- { source: constraints, domain: architecture, group: functional }
|
|
67
|
+
- { source: logical_structure, domain: architecture, group: logical }
|
|
68
|
+
- { source: interfaces, domain: architecture, group: logical }
|
|
69
|
+
- { source: hardware_structure, domain: architecture, group: implementation }
|
|
70
|
+
# HardwareAssembly is declared in architecture/implementation/hardware.
|
|
71
|
+
- { source: implementation, domain: architecture, group: implementation }
|
|
72
|
+
- { source: software_structure, domain: architecture, group: implementation }
|
|
73
|
+
- { source: software_runtime, domain: architecture, group: implementation }
|
|
74
|
+
- { source: physical, domain: architecture, group: realization }
|
|
75
|
+
- { source: deployment, domain: architecture, group: realization }
|
|
76
|
+
- { source: needs, domain: assurance, group: requirements }
|
|
77
|
+
- { source: requirements, domain: assurance, group: requirements }
|
|
78
|
+
- { source: safety, domain: assurance, group: safety-risk }
|
|
79
|
+
- { source: safety_analysis, domain: assurance, group: safety-risk }
|
|
80
|
+
- { source: cybersecurity, domain: assurance, group: cybersecurity }
|
|
81
|
+
- { source: human_factors, domain: assurance, group: human-factors }
|
|
82
|
+
- { source: verification, domain: assurance, group: verification-validation }
|
|
83
|
+
- { source: core, domain: assurance, group: evidence }
|
|
84
|
+
- { source: methodology, domain: methodology, group: methodology }
|
package/package.json
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memoarchitect/ontology",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.1",
|
|
4
4
|
"packageManager": "pnpm@9.15.0",
|
|
5
|
-
"description": "MEMO
|
|
5
|
+
"description": "MEMO \u2014 Medical Engineering Modelling Ontology. Pure SysML v2 medical-device ontology with native constraints, portable to any conformant SysML v2 tool (SysIDE, SysON, sysand).",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"build": "bash scripts/build-kpar.sh",
|
|
8
8
|
"check": "bash scripts/build-kpar.sh",
|
|
9
9
|
"test": "node --test test/package.test.mjs",
|
|
10
|
-
"docs:
|
|
11
|
-
"docs:
|
|
10
|
+
"docs:api": "node scripts/generate-sysml-api.mjs",
|
|
11
|
+
"docs:diagrams": "node scripts/generate-reference-diagrams.mjs",
|
|
12
|
+
"docs:serve": "node scripts/generate-reference-diagrams.mjs && node scripts/generate-sysml-api.mjs && node scripts/check-reference-coverage.mjs && python3 -m mkdocs serve",
|
|
13
|
+
"docs:build": "node scripts/generate-reference-diagrams.mjs && node scripts/generate-sysml-api.mjs && node scripts/check-reference-coverage.mjs && python3 -m mkdocs build --strict",
|
|
14
|
+
"docs:check-reference": "node scripts/check-reference-coverage.mjs"
|
|
12
15
|
},
|
|
13
16
|
"engines": {
|
|
14
|
-
"node": ">=
|
|
17
|
+
"node": ">=26.0.0"
|
|
15
18
|
},
|
|
16
19
|
"keywords": [
|
|
17
20
|
"sysml-v2",
|
|
@@ -36,7 +39,7 @@
|
|
|
36
39
|
"./src/*": "./src/*",
|
|
37
40
|
"./profile/*": "./profile/*",
|
|
38
41
|
"./methodologies/*": "./methodologies/*",
|
|
39
|
-
"./templates/*": "./
|
|
42
|
+
"./templates/*": "./templates/*",
|
|
40
43
|
"./examples/*": "./examples/*"
|
|
41
44
|
},
|
|
42
45
|
"files": [
|
|
@@ -46,21 +49,26 @@
|
|
|
46
49
|
"ontology/memo.package.yaml",
|
|
47
50
|
"ontology/memo.rendering.yaml",
|
|
48
51
|
"profile/memo.package.yaml",
|
|
49
|
-
"profile/archetypes.yaml",
|
|
50
|
-
"profile/templates/",
|
|
51
52
|
"methodologies/default/memo.package.yaml",
|
|
52
53
|
"methodologies/gpca/memo.package.yaml",
|
|
54
|
+
"src/assurance/",
|
|
53
55
|
"src/architecture/",
|
|
54
56
|
"src/artifacts/",
|
|
55
57
|
"src/compliance/",
|
|
56
58
|
"src/core/",
|
|
57
|
-
"src/methodology
|
|
59
|
+
"src/methodology/archetypes/",
|
|
60
|
+
"src/methodology/core/",
|
|
61
|
+
"src/methodology/gates/",
|
|
62
|
+
"src/methodology/patterns/",
|
|
63
|
+
"src/methodology/profiles/",
|
|
64
|
+
"src/methodology/rules/",
|
|
65
|
+
"src/methodology/viewpoints/",
|
|
66
|
+
"src/methodology/workflow/",
|
|
58
67
|
"src/methodology/LICENSES/",
|
|
59
68
|
"src/rules/",
|
|
60
69
|
"src/viewpoints/",
|
|
61
|
-
"src/medical_device_library.sysml",
|
|
62
70
|
"src/memo_namespaces.sysml",
|
|
63
|
-
"
|
|
71
|
+
"templates/",
|
|
64
72
|
"examples/"
|
|
65
73
|
]
|
|
66
74
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
name: "@memoarchitect/medical-modeling-profile"
|
|
2
|
-
version: "0.
|
|
2
|
+
version: "0.6.1"
|
|
3
3
|
type: profile
|
|
4
4
|
extends:
|
|
5
5
|
- "@memoarchitect/ontology"
|
|
6
|
-
description: "Closure rules
|
|
6
|
+
description: "Closure rules and viewpoints for medical device modeling"
|
|
7
7
|
license: "MIT"
|
|
8
8
|
tags: ["medical-device", "iso-14971", "iec-62304", "iso-13485", "modeling-profile"]
|
|
9
|
-
usage: ["rules", "viewpoints"
|
|
9
|
+
usage: ["rules", "viewpoints"]
|
|
@@ -3,7 +3,7 @@ package memo_architecture_decisions {
|
|
|
3
3
|
|
|
4
4
|
private import memo_core_common::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
|
-
part def DesignDecision specializes
|
|
6
|
+
part def DesignDecision specializes MemoPart {
|
|
7
7
|
attribute decisionKind : String;
|
|
8
8
|
attribute alternatives : String;
|
|
9
9
|
attribute selectedOption : String;
|