@memoarchitect/ontology 0.4.6 → 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,102 @@
|
|
|
1
|
+
package memo_architecture_logical_interfaces {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_core_common::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
private import memo_architecture_functional_functions::*;
|
|
7
|
+
|
|
8
|
+
// ─── One Interface definition ────────────────────────────────────
|
|
9
|
+
// Realization domain (hardware vs software), signaling family
|
|
10
|
+
// (digital / analog / synchronous / asynchronous) and concrete protocol
|
|
11
|
+
// (SPI, CAN, Ethernet, 4-20mA, REST, gRPC, message-queue …) are captured
|
|
12
|
+
// by `interfaceKind` + `protocol`, NOT by a class branch. Every
|
|
13
|
+
// descriptive attribute below is optional, so an interface carries only
|
|
14
|
+
// the ones that apply to it. There is no HardwareInterface /
|
|
15
|
+
// DigitalInterface / SPIInterface / RestInterface … hierarchy: those were
|
|
16
|
+
// 20+ classes that differed only in the value of `protocol`.
|
|
17
|
+
|
|
18
|
+
interface def Interface specializes MemoInterface {
|
|
19
|
+
attribute interfaceKind : InterfaceKind; // semantic + signaling family
|
|
20
|
+
attribute direction : DirectionKind;
|
|
21
|
+
attribute protocol : String; // "SPI", "CAN", "Ethernet", "REST", "4-20mA"
|
|
22
|
+
attribute protocolSemantics : String;
|
|
23
|
+
attribute interactionPattern : String; // request-response, pub-sub, streaming…
|
|
24
|
+
attribute signalKind : String;
|
|
25
|
+
attribute timingSummary : String;
|
|
26
|
+
attribute timingConstraint : String;
|
|
27
|
+
attribute bandwidth : String;
|
|
28
|
+
attribute schemaReference : String;
|
|
29
|
+
attribute compatibilitySummary : String;
|
|
30
|
+
attribute isolationRequirement : String;
|
|
31
|
+
attribute safetyRelevant : Boolean;
|
|
32
|
+
attribute securityCriticality : CriticalityKind;
|
|
33
|
+
// Applied-part/patient-contact interfaces (IEC 60601-1) must state it.
|
|
34
|
+
attribute patientContactInterface : Boolean;
|
|
35
|
+
// ── hardware-signal descriptors (optional) ──
|
|
36
|
+
attribute directionality : DirectionKind[0..1];
|
|
37
|
+
attribute electricalStandard : String;
|
|
38
|
+
attribute nominalVoltageV : Real[0..1];
|
|
39
|
+
attribute nominalCurrentA : Real[0..1];
|
|
40
|
+
attribute bitRateBps : String;
|
|
41
|
+
attribute signaling : String;
|
|
42
|
+
attribute signalRange : String;
|
|
43
|
+
// ── software-API descriptors (optional) ──
|
|
44
|
+
attribute apiStyle : String;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// A typed thing exchanged at a boundary. Concrete items such as
|
|
48
|
+
// AlarmSignal and FlowCommand specialize this type; they are neither
|
|
49
|
+
// functions nor generic action-flow notation.
|
|
50
|
+
// The kind of item is given by itemKind (data / command / signal / …);
|
|
51
|
+
// the control-specific fields below apply only when itemKind = command.
|
|
52
|
+
item def InterfaceItem specializes MemoExchangeItem {
|
|
53
|
+
attribute itemKind : InterfaceItemKind;
|
|
54
|
+
attribute confidentialityClass : String;
|
|
55
|
+
attribute integrityClass : String;
|
|
56
|
+
attribute availabilityClass : String;
|
|
57
|
+
attribute controlType : String[0..1];
|
|
58
|
+
attribute timeoutMs : Real[0..1];
|
|
59
|
+
attribute retryPolicy : String[0..1];
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ─── Ports, interface defs, and exchanges ────────────────────────
|
|
63
|
+
// SysML port/interface mechanism + logical exchange, relocated here
|
|
64
|
+
// from the former logical_interfaces namespace.
|
|
65
|
+
|
|
66
|
+
abstract interface def DataInterface specializes MemoInterface {
|
|
67
|
+
attribute interfaceKind : InterfaceKind;
|
|
68
|
+
attribute protocolSemantics : String;
|
|
69
|
+
}
|
|
70
|
+
port def DataPort {
|
|
71
|
+
attribute direction : DirectionKind;
|
|
72
|
+
attribute interfaceType : String;
|
|
73
|
+
}
|
|
74
|
+
port def SensorPort specializes DataPort { attribute sensorDomain : String; }
|
|
75
|
+
port def CommandPort specializes DataPort { attribute commandDomain : String; }
|
|
76
|
+
|
|
77
|
+
part def ComponentExchange specializes ArchitectureElement {
|
|
78
|
+
attribute exchangeKind : FlowKind;
|
|
79
|
+
// Typed endpoints (CR-ONT-002). A component or a boundary port may
|
|
80
|
+
// terminate an exchange, so the ends are MemoPart-typed.
|
|
81
|
+
ref sourceEndpoint : MemoPart[0..1];
|
|
82
|
+
ref targetEndpoint : MemoPart[0..1];
|
|
83
|
+
// Descriptive port paths (e.g. "TLM.TLM_MODE_OUT") for AADL
|
|
84
|
+
// round-trips; labels only — never references.
|
|
85
|
+
attribute sourcePortPath : String;
|
|
86
|
+
attribute targetPortPath : String;
|
|
87
|
+
ref allocatedExchanges : FunctionalExchange[0..*];
|
|
88
|
+
attribute direction : DirectionKind;
|
|
89
|
+
// Connection timing discipline from the source architecture
|
|
90
|
+
// (e.g. AADL Communication_Properties::Timing — immediate
|
|
91
|
+
// connections deliver in the same execution step).
|
|
92
|
+
attribute timingSemantics : String;
|
|
93
|
+
}
|
|
94
|
+
// Boundary data port of a software system (e.g. an AADL top-level
|
|
95
|
+
// data port), modeled as a first-class element so exchanges can
|
|
96
|
+
// reference it and views can render the system boundary.
|
|
97
|
+
part def SoftwarePort specializes InterfaceElement {
|
|
98
|
+
attribute portKind : InterfaceKind;
|
|
99
|
+
attribute direction : DirectionKind;
|
|
100
|
+
attribute dataTypeName : String;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// Logical architecture (§10). Technology-independent structure: what parts of
|
|
2
|
+
// the solution exist and how they interact, before committing to software,
|
|
3
|
+
// electronics, or mechanics. Redundancy is expressed by typed channel roles
|
|
4
|
+
// plus independence constraints — never by duplicating identically named
|
|
5
|
+
// components.
|
|
6
|
+
package memo_architecture_logical_structure {
|
|
7
|
+
private import ScalarValues::*;
|
|
8
|
+
|
|
9
|
+
private import memo_core_common::*;
|
|
10
|
+
private import memo_core_enumerations::*;
|
|
11
|
+
private import memo_core_relationships::*;
|
|
12
|
+
|
|
13
|
+
// What a logical connection carries: information and control, but also
|
|
14
|
+
// energy, material, fluid, and mechanical force (§10).
|
|
15
|
+
enum def FlowContentKind {
|
|
16
|
+
enum information;
|
|
17
|
+
enum command;
|
|
18
|
+
enum status;
|
|
19
|
+
enum measurement;
|
|
20
|
+
enum alarm;
|
|
21
|
+
enum configuration;
|
|
22
|
+
enum energy;
|
|
23
|
+
enum material;
|
|
24
|
+
enum fluid;
|
|
25
|
+
enum mechanicalForce;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
enum def ChannelRoleKind {
|
|
29
|
+
enum primary;
|
|
30
|
+
enum secondary;
|
|
31
|
+
enum redundant;
|
|
32
|
+
enum diverse;
|
|
33
|
+
enum monitor;
|
|
34
|
+
enum watchdog;
|
|
35
|
+
enum interlock;
|
|
36
|
+
enum independentProtection;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// The role a logical component plays. Was a subclass branch
|
|
40
|
+
// (LogicalSystem / LogicalSubsystem / LogicalChannel / LogicalDataStore /
|
|
41
|
+
// LogicalControlElement / LogicalUserInterface / LogicalExternalSystem);
|
|
42
|
+
// now one attribute, because all of them share the same relationships and
|
|
43
|
+
// differed only by a couple of descriptive attributes.
|
|
44
|
+
enum def ComponentRoleKind {
|
|
45
|
+
enum system;
|
|
46
|
+
enum subsystem;
|
|
47
|
+
enum channel;
|
|
48
|
+
enum dataStore;
|
|
49
|
+
enum controlElement;
|
|
50
|
+
enum userInterface;
|
|
51
|
+
enum externalSystem;
|
|
52
|
+
enum generic;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// One logical component. `componentRole` selects what it is; the role-
|
|
56
|
+
// specific attributes below are all optional so a component carries only
|
|
57
|
+
// the ones its role needs. A channel claiming independence must still be
|
|
58
|
+
// linked by IndependentOf with its basis stated.
|
|
59
|
+
part def LogicalComponent specializes ArchitectureElement {
|
|
60
|
+
attribute componentRole : ComponentRoleKind;
|
|
61
|
+
attribute responsibility : String;
|
|
62
|
+
attribute decompositionLevel : String;
|
|
63
|
+
attribute safetyPartition : String;
|
|
64
|
+
// system / subsystem
|
|
65
|
+
attribute systemBoundaryDescription : String;
|
|
66
|
+
// channel (safety role + diversity)
|
|
67
|
+
attribute channelRole : ChannelRoleKind[0..1];
|
|
68
|
+
attribute diversityBasis : String;
|
|
69
|
+
// data store
|
|
70
|
+
attribute persistenceRequirement : String;
|
|
71
|
+
attribute integrityRequirement : String;
|
|
72
|
+
// control element
|
|
73
|
+
attribute controlLaw : String;
|
|
74
|
+
attribute controlledVariable : String;
|
|
75
|
+
// user interface
|
|
76
|
+
attribute interactionSummary : String;
|
|
77
|
+
// external system
|
|
78
|
+
attribute externalOwner : String;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Boundary features and contracts.
|
|
82
|
+
port def LogicalPort specializes MemoPort {
|
|
83
|
+
attribute contentKind : FlowContentKind;
|
|
84
|
+
}
|
|
85
|
+
interface def LogicalInterface specializes MemoInterface {
|
|
86
|
+
attribute contentKind : FlowContentKind;
|
|
87
|
+
attribute interactionPattern : String;
|
|
88
|
+
end providerPort : LogicalPort;
|
|
89
|
+
end consumerPort : ~LogicalPort;
|
|
90
|
+
}
|
|
91
|
+
item def LogicalExchangeItem specializes MemoExchangeItem {
|
|
92
|
+
attribute contentKind : FlowContentKind;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// A typed logical connection between two components' ports.
|
|
96
|
+
connection def LogicalConnector :> MemoRelationship {
|
|
97
|
+
attribute contentKind : FlowContentKind;
|
|
98
|
+
attribute direction : DirectionKind;
|
|
99
|
+
end sourceComponent : LogicalComponent;
|
|
100
|
+
end targetComponent : LogicalComponent;
|
|
101
|
+
}
|
|
102
|
+
// A transfer of a typed item across a connector.
|
|
103
|
+
part def LogicalExchange specializes ArchitectureElement {
|
|
104
|
+
attribute contentKind : FlowContentKind;
|
|
105
|
+
attribute direction : DirectionKind;
|
|
106
|
+
attribute latencyRequirement : String;
|
|
107
|
+
ref exchangedItem : LogicalExchangeItem[0..1];
|
|
108
|
+
ref sourcePort : LogicalPort[0..1];
|
|
109
|
+
ref targetPort : LogicalPort[0..1];
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// States and modes of the logical solution (kept distinct from UI state
|
|
113
|
+
// and from physical device configuration).
|
|
114
|
+
part def LogicalState specializes ArchitectureElement {
|
|
115
|
+
attribute stateInvariant : String;
|
|
116
|
+
}
|
|
117
|
+
part def LogicalMode specializes ArchitectureElement {
|
|
118
|
+
attribute modePurpose : String;
|
|
119
|
+
attribute entryCondition : String;
|
|
120
|
+
attribute exitCondition : String;
|
|
121
|
+
}
|
|
122
|
+
part def LogicalBehavior specializes ArchitectureElement {
|
|
123
|
+
attribute behaviorSummary : String;
|
|
124
|
+
attribute executionSemantics : String;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Isolation, fault containment, and trust boundaries (§10).
|
|
128
|
+
part def IsolationBoundary specializes ArchitectureElement {
|
|
129
|
+
attribute boundaryKind : String;
|
|
130
|
+
attribute isolationMechanism : String;
|
|
131
|
+
}
|
|
132
|
+
part def FaultContainmentRegion specializes ArchitectureElement {
|
|
133
|
+
attribute containmentRationale : String;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Claimed independence between channels (common-cause defense).
|
|
137
|
+
connection def IndependentOf :> MemoRelationship {
|
|
138
|
+
attribute independenceBasis : String;
|
|
139
|
+
end channel : LogicalComponent;
|
|
140
|
+
end otherChannel : LogicalComponent;
|
|
141
|
+
}
|
|
142
|
+
connection def MonitorsChannel :> MemoRelationship {
|
|
143
|
+
end monitorChannel : LogicalComponent;
|
|
144
|
+
end monitoredComponent : LogicalComponent;
|
|
145
|
+
}
|
|
146
|
+
connection def ExhibitsMode :> MemoRelationship {
|
|
147
|
+
end component : LogicalComponent;
|
|
148
|
+
end mode : LogicalMode;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Operational activities and user tasks (§7, §17). Activities are behavioral
|
|
2
|
+
// concepts (action defs on MemoAction). An OperationalActivity is work
|
|
3
|
+
// performed in the operational world; a UserTask is a unit of user work within
|
|
4
|
+
// an activity (IEC 62366-1); a critical task is a UserTask whose criticality is
|
|
5
|
+
// high/catastrophic — its failure could cause serious harm (FDA HF guidance) and
|
|
6
|
+
// it must trace to usability validation.
|
|
7
|
+
// Task difficulty belongs to a task performed in a context — never to an
|
|
8
|
+
// instrument (TaskDifficultyAssessment).
|
|
9
|
+
package memo_architecture_operational_activities {
|
|
10
|
+
private import ScalarValues::*;
|
|
11
|
+
|
|
12
|
+
private import memo_core_common::*;
|
|
13
|
+
private import memo_core_enumerations::*;
|
|
14
|
+
private import memo_core_relationships::*;
|
|
15
|
+
private import memo_architecture_operational_context_actors::*;
|
|
16
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
17
|
+
|
|
18
|
+
enum def DemandLevelKind {
|
|
19
|
+
enum minimal;
|
|
20
|
+
enum low;
|
|
21
|
+
enum moderate;
|
|
22
|
+
enum high;
|
|
23
|
+
enum extreme;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
action def OperationalActivity specializes MemoAction {
|
|
27
|
+
attribute trigger : String;
|
|
28
|
+
attribute preCondition : String;
|
|
29
|
+
attribute postCondition : String;
|
|
30
|
+
attribute criticality : CriticalityKind;
|
|
31
|
+
ref performedBy : Actor[0..*];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// A human task. A critical task (IEC 62366-1 / FDA HF guidance §3) is a
|
|
35
|
+
// UserTask whose criticality is high or catastrophic — a use error could
|
|
36
|
+
// cause serious harm. potentialHarm/severityIfFailed are set only for such
|
|
37
|
+
// tasks. Modeled as an attribute, like SystemFunction.criticality.
|
|
38
|
+
action def UserTask specializes MemoAction {
|
|
39
|
+
attribute taskGoal : String;
|
|
40
|
+
attribute preCondition : String;
|
|
41
|
+
attribute postCondition : String;
|
|
42
|
+
attribute expectedDuration : String;
|
|
43
|
+
attribute frequencyOfUse : String;
|
|
44
|
+
attribute criticality : CriticalityKind;
|
|
45
|
+
attribute potentialHarm : String[0..1];
|
|
46
|
+
attribute severityIfFailed : SeverityKind[0..1];
|
|
47
|
+
ref performingUser : User[0..1];
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// An elementary perceptual/cognitive/motor step within a user task
|
|
51
|
+
// (task analysis granularity: grasp needle, drive needle, tie knot …).
|
|
52
|
+
action def TaskStep specializes MemoAction {
|
|
53
|
+
attribute stepOrder : Integer;
|
|
54
|
+
attribute perceptualCue : String;
|
|
55
|
+
attribute feedbackExpected : String;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Difficulty of a task in a particular context (§17). Associated by
|
|
59
|
+
// typed references, not inheritance; assessments are evidence-bearing.
|
|
60
|
+
part def TaskDifficultyAssessment specializes MemoPart {
|
|
61
|
+
attribute overallDifficulty : DemandLevelKind;
|
|
62
|
+
attribute physicalDemand : DemandLevelKind;
|
|
63
|
+
attribute cognitiveDemand : DemandLevelKind;
|
|
64
|
+
attribute perceptualDemand : DemandLevelKind;
|
|
65
|
+
attribute dexterityDemand : DemandLevelKind;
|
|
66
|
+
attribute coordinationDemand : DemandLevelKind;
|
|
67
|
+
attribute timePressure : DemandLevelKind;
|
|
68
|
+
attribute trainingDemand : DemandLevelKind;
|
|
69
|
+
attribute ergonomicDemand : DemandLevelKind;
|
|
70
|
+
attribute environmentalDemand : DemandLevelKind;
|
|
71
|
+
attribute expectedDuration : String;
|
|
72
|
+
attribute assessor : String;
|
|
73
|
+
attribute assessmentMethod : String;
|
|
74
|
+
|
|
75
|
+
ref assessedTask : UserTask[0..1];
|
|
76
|
+
ref userPopulation : User[0..1];
|
|
77
|
+
ref useEnvironment : UseEnvironment[0..1];
|
|
78
|
+
ref instrument : MemoPart[0..1];
|
|
79
|
+
ref scenario : MemoPart[0..1];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
connection def AssessesDifficulty :> MemoRelationship {
|
|
83
|
+
end assessment : TaskDifficultyAssessment;
|
|
84
|
+
end task : UserTask;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// Actor hierarchy (§4). An Actor interacts with the system; it is distinct
|
|
2
|
+
// from a Stakeholder (memo_architecture_operational_context_stakeholders), who has concerns about the
|
|
3
|
+
// system but need not interact with it. "User" is reserved for a human who
|
|
4
|
+
// interacts with the medical device.
|
|
5
|
+
package memo_architecture_operational_context_actors {
|
|
6
|
+
private import ScalarValues::*;
|
|
7
|
+
|
|
8
|
+
private import memo_core_common::*;
|
|
9
|
+
private import memo_core_enumerations::*;
|
|
10
|
+
|
|
11
|
+
abstract part def Actor specializes MemoPart {
|
|
12
|
+
attribute actorKind : ActorKind;
|
|
13
|
+
attribute trainingLevel : String;
|
|
14
|
+
attribute responsibility : String;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// A human who interacts with the medical device (IEC 62366-1 intended user).
|
|
18
|
+
// User is the only human actor type: do not add an alternative type name.
|
|
19
|
+
// The human actor. The specific role is given by actorKind
|
|
20
|
+
// (patient / clinician / caregiver / technician / administrator); the
|
|
21
|
+
// role-specific fields below are set only for the relevant actorKind.
|
|
22
|
+
part def User specializes Actor {
|
|
23
|
+
attribute userPopulation : String;
|
|
24
|
+
attribute impairmentConsiderations : String;
|
|
25
|
+
attribute intendedTraining : String;
|
|
26
|
+
attribute intendedQualification : String;
|
|
27
|
+
attribute clinicalRole : String[0..1];
|
|
28
|
+
attribute patientPopulation : String[0..1];
|
|
29
|
+
attribute layCaregiver : Boolean[0..1];
|
|
30
|
+
attribute serviceScope : String[0..1];
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// A non-human actor (external system, external device, or environmental
|
|
34
|
+
// agent). The specific kind is described by externalKind.
|
|
35
|
+
part def NonHumanActor specializes Actor {
|
|
36
|
+
attribute externalKind : String[0..1];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// ISO/IEC/IEEE 42010 architecture-description core (§4). A Stakeholder has
|
|
2
|
+
// interests (Concerns) in the system; a Viewpoint frames concerns; a View
|
|
3
|
+
// (memo_viewpoints_definitions::MemoView) is governed by a viewpoint within an
|
|
4
|
+
// ArchitectureDescription. The same real-world entity may play both the
|
|
5
|
+
// Stakeholder and the Actor role — expressed by ActsAsActor, never by merging
|
|
6
|
+
// the types.
|
|
7
|
+
package memo_architecture_operational_context_stakeholders {
|
|
8
|
+
private import ScalarValues::*;
|
|
9
|
+
|
|
10
|
+
private import memo_core_common::*;
|
|
11
|
+
private import memo_core_enumerations::*;
|
|
12
|
+
private import memo_core_relationships::*;
|
|
13
|
+
private import memo_architecture_operational_context_actors::*;
|
|
14
|
+
|
|
15
|
+
part def Stakeholder specializes MemoPart {
|
|
16
|
+
attribute stakeholderCategory : String;
|
|
17
|
+
attribute influence : String;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
part def Concern specializes MemoPart {
|
|
21
|
+
attribute concernKind : ConcernKind;
|
|
22
|
+
attribute question : String;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
part def ArchitectureDescription specializes DocumentedElement {
|
|
26
|
+
attribute systemOfInterest : String;
|
|
27
|
+
attribute version : String;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
part def ModelKind specializes MemoPart {
|
|
31
|
+
attribute conventions : String;
|
|
32
|
+
attribute notationReference : String;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 42010 correspondence: a rule that must hold between architecture
|
|
36
|
+
// description elements (e.g. consistency between two views).
|
|
37
|
+
part def CorrespondenceRule specializes MemoPart {
|
|
38
|
+
attribute ruleExpression : String;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
connection def HasConcern :> MemoRelationship {
|
|
42
|
+
end interestedStakeholder : Stakeholder;
|
|
43
|
+
end concern : Concern;
|
|
44
|
+
}
|
|
45
|
+
connection def FramesConcern :> MemoRelationship {
|
|
46
|
+
end framingViewpoint : MemoPart;
|
|
47
|
+
end framedConcern : Concern;
|
|
48
|
+
}
|
|
49
|
+
// Links the stakeholder to the actor role the same entity plays, if any.
|
|
50
|
+
connection def ActsAsActor :> MemoRelationship {
|
|
51
|
+
end interestedStakeholder : Stakeholder;
|
|
52
|
+
end actorRole : Actor;
|
|
53
|
+
}
|
|
54
|
+
// Governs unifies GovernsCorrespondence / GovernsUse, keyed by governKind.
|
|
55
|
+
enum def GovernKind {
|
|
56
|
+
enum correspondence;
|
|
57
|
+
enum use;
|
|
58
|
+
}
|
|
59
|
+
connection def Governs :> MemoRelationship {
|
|
60
|
+
attribute governKind : GovernKind;
|
|
61
|
+
end governor : MemoPart;
|
|
62
|
+
end governedElement : MemoPart;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Operational use context (IEC 62366-1 use specification). Intended use and
|
|
2
|
+
// reasonably foreseeable misuse are assurance requirements/risk inputs and
|
|
3
|
+
// live in memo_assurance_requirements.
|
|
4
|
+
package memo_architecture_operational_context_use_context {
|
|
5
|
+
private import ScalarValues::*;
|
|
6
|
+
|
|
7
|
+
private import memo_core_common::*;
|
|
8
|
+
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_core_relationships::*;
|
|
10
|
+
private import memo_architecture_operational_context_actors::*;
|
|
11
|
+
|
|
12
|
+
part def UseContext specializes MemoPart {
|
|
13
|
+
attribute careSetting : String;
|
|
14
|
+
attribute environment : String;
|
|
15
|
+
attribute jurisdiction : String;
|
|
16
|
+
attribute connectedUse : Boolean;
|
|
17
|
+
attribute intendedUseReference : String;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// The physical/organizational environment of use (IEC 62366-1 3.20),
|
|
21
|
+
// separable from the care-setting context so environments are reusable.
|
|
22
|
+
part def UseEnvironment specializes MemoPart {
|
|
23
|
+
attribute lighting : String;
|
|
24
|
+
attribute noise : String;
|
|
25
|
+
attribute vibration : String;
|
|
26
|
+
attribute temperatureRange : String;
|
|
27
|
+
attribute infectionControlConstraints : String;
|
|
28
|
+
attribute mobility : String;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
connection def InteractsWith :> MemoRelationship {
|
|
32
|
+
end contextParticipant : Actor;
|
|
33
|
+
end target : MemoPart;
|
|
34
|
+
}
|
|
35
|
+
// Directional context-level data flow between boundary entities.
|
|
36
|
+
connection def ExchangesWith :> MemoRelationship {
|
|
37
|
+
end source : MemoPart;
|
|
38
|
+
end target : MemoPart;
|
|
39
|
+
}
|
|
40
|
+
// Physical connection between boundary entities (fluid path, mounting).
|
|
41
|
+
connection def ConnectsPhysically :> MemoRelationship {
|
|
42
|
+
end source : MemoPart;
|
|
43
|
+
end target : MemoPart;
|
|
44
|
+
}
|
|
45
|
+
connection def AppliesInContext :> MemoRelationship {
|
|
46
|
+
end useContext : UseContext;
|
|
47
|
+
end subjectElement : MemoPart;
|
|
48
|
+
}
|
|
49
|
+
connection def SituatedIn :> MemoRelationship {
|
|
50
|
+
end useContext : UseContext;
|
|
51
|
+
end environment : UseEnvironment;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
// Scenario foundation. A scenario is a selected path through a
|
|
2
|
+
// workflow (or functional flow), classified by three independent typed
|
|
3
|
+
// dimensions — variant, operational condition, purpose — replacing the former
|
|
4
|
+
// single ScenarioKind. An occurrence is an actual or hypothetical execution
|
|
5
|
+
// of a scenario. Alternate scenarios reference their base scenario and
|
|
6
|
+
// variation point instead of duplicating the workflow.
|
|
7
|
+
package memo_architecture_operational_scenarios {
|
|
8
|
+
private import ScalarValues::*;
|
|
9
|
+
|
|
10
|
+
private import memo_core_common::*;
|
|
11
|
+
private import memo_core_enumerations::*;
|
|
12
|
+
private import memo_core_relationships::*;
|
|
13
|
+
private import memo_architecture_operational_context_actors::*;
|
|
14
|
+
private import memo_architecture_operational_context_use_context::*;
|
|
15
|
+
private import memo_architecture_operational_activities::*;
|
|
16
|
+
private import memo_architecture_operational_workflows::*;
|
|
17
|
+
private import memo_architecture_operational_use_cases::*;
|
|
18
|
+
|
|
19
|
+
enum def ScenarioVariantKind {
|
|
20
|
+
enum nominal;
|
|
21
|
+
enum alternate;
|
|
22
|
+
enum exception;
|
|
23
|
+
enum recovery;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
enum def OperationalConditionKind {
|
|
27
|
+
enum normal;
|
|
28
|
+
enum degraded;
|
|
29
|
+
enum emergency;
|
|
30
|
+
enum maintenance;
|
|
31
|
+
enum startup;
|
|
32
|
+
enum shutdown;
|
|
33
|
+
enum timeout;
|
|
34
|
+
enum misuse;
|
|
35
|
+
enum foreseeableMisuse;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// `memoAnalysis` and `memoVerification` keep the regulated terms `analysis`
|
|
39
|
+
// and `verification` intact but prefixed, because both are SysML v2 reserved
|
|
40
|
+
// words and cannot be bare enum names. `validation` is not reserved.
|
|
41
|
+
enum def ScenarioPurposeKind {
|
|
42
|
+
enum memoAnalysis;
|
|
43
|
+
enum design;
|
|
44
|
+
enum memoVerification;
|
|
45
|
+
enum validation;
|
|
46
|
+
enum risk;
|
|
47
|
+
enum cybersecurity;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Shared scenario foundation. Specializations exist only where structure
|
|
51
|
+
// or invariants differ (OperativeScenario here; FunctionalScenario in
|
|
52
|
+
// memo_functions; UIScenario in memo_architecture_implementation_ui;
|
|
53
|
+
// VerificationScenario / ThreatScenario in assurance packages).
|
|
54
|
+
abstract part def MemoScenario specializes MemoPart {
|
|
55
|
+
attribute variantKind : ScenarioVariantKind;
|
|
56
|
+
attribute operationalCondition : OperationalConditionKind;
|
|
57
|
+
attribute scenarioPurpose : ScenarioPurposeKind[0..*];
|
|
58
|
+
attribute initialState : String;
|
|
59
|
+
attribute trigger : String;
|
|
60
|
+
attribute preCondition : String;
|
|
61
|
+
attribute expectedResult : String;
|
|
62
|
+
attribute postCondition : String;
|
|
63
|
+
attribute pathSummary : String;
|
|
64
|
+
|
|
65
|
+
ref involvedActors : Actor[0..*];
|
|
66
|
+
ref useContext : UseContext[0..1];
|
|
67
|
+
// Alternate/exception/recovery scenarios reference their base and the
|
|
68
|
+
// point at which behavior diverges — never a copied workflow.
|
|
69
|
+
ref baseScenario : MemoScenario[0..1];
|
|
70
|
+
attribute variationPoint : String;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// The operational-layer scenario: a path through an OperationalWorkflow in
|
|
74
|
+
// a use context. It is realized down the V by a FunctionalScenario (the
|
|
75
|
+
// function sequence) and a UIScenario (the interaction sequence), each owned
|
|
76
|
+
// by its own architecture layer and linked by typed realization
|
|
77
|
+
// relationships — never by copying the path. Workflow stays operational;
|
|
78
|
+
// only the scenario is layered.
|
|
79
|
+
part def OperativeScenario specializes MemoScenario {
|
|
80
|
+
ref parentWorkflow : OperationalWorkflow[0..1];
|
|
81
|
+
ref parentUseCase : UseCase[0..1];
|
|
82
|
+
// Each scenario owns the operational activity/action flow for its
|
|
83
|
+
// selected path. Do not reuse one generic activity for every scenario.
|
|
84
|
+
ref activities : OperationalActivity[0..*];
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// An actual or hypothetical execution of a scenario (usability test run,
|
|
88
|
+
// postmarket incident reconstruction, simulated-use session).
|
|
89
|
+
part def ScenarioOccurrence specializes MemoPart {
|
|
90
|
+
attribute occurredAt : String;
|
|
91
|
+
attribute hypothetical : Boolean;
|
|
92
|
+
attribute outcomeSummary : String;
|
|
93
|
+
ref executedScenario : MemoScenario[1];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Ordered selection of a workflow step into a scenario path.
|
|
97
|
+
// Selects unifies SelectsStep / SelectsFlow (a scenario selects its path
|
|
98
|
+
// element), keyed by selectsKind.
|
|
99
|
+
enum def SelectsKind {
|
|
100
|
+
enum step;
|
|
101
|
+
enum flow;
|
|
102
|
+
}
|
|
103
|
+
connection def Selects :> MemoRelationship {
|
|
104
|
+
attribute selectsKind : SelectsKind;
|
|
105
|
+
attribute pathOrder : Integer[0..1];
|
|
106
|
+
attribute decisionTaken : String[0..1];
|
|
107
|
+
end scenario : MemoScenario;
|
|
108
|
+
// A selected path element may be a WorkflowStep action or a flow
|
|
109
|
+
// element. Those constructs do not share a MEMO base metaclass.
|
|
110
|
+
end selected;
|
|
111
|
+
}
|
|
112
|
+
connection def OccursDuring :> MemoRelationship {
|
|
113
|
+
end occurrence : ScenarioOccurrence;
|
|
114
|
+
end context : UseContext;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
package memo_architecture_operational_structure {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_core_common::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
private import memo_core_relationships::*;
|
|
7
|
+
private import memo_architecture_operational_activities::*;
|
|
8
|
+
// OperationalActivity now lives in memo_architecture_operational_activities (action def) and
|
|
9
|
+
// Operational scenarios are defined in memo_architecture_operational_scenarios.
|
|
10
|
+
part def OperationalEntity specializes ArchitectureElement {
|
|
11
|
+
attribute entityKind : OperationalEntityKind;
|
|
12
|
+
attribute operationalDomain : String;
|
|
13
|
+
attribute responsibility : String;
|
|
14
|
+
}
|
|
15
|
+
part def OperationalCapability specializes ArchitectureElement {
|
|
16
|
+
attribute capabilityLevel : String;
|
|
17
|
+
attribute preCondition : String;
|
|
18
|
+
attribute postCondition : String;
|
|
19
|
+
}
|
|
20
|
+
part def OperationalInteraction specializes ArchitectureElement {
|
|
21
|
+
attribute exchangeKind : FlowKind;
|
|
22
|
+
attribute direction : DirectionKind;
|
|
23
|
+
attribute latencyConstraint : String;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}
|