@memoarchitect/ontology 0.7.0 → 0.8.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +9 -0
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +9 -5
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +82 -58
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -2
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -331
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
- package/examples/gpca-pump/model/catalog/project.sysml +5 -0
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -2
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -2
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +1 -1
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +2 -2
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -2
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +4 -2
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +1 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +3 -2
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
- package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -5
- package/examples/ros-mobile-robot/README.md +40 -0
- package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
- package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -60
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -15
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +42 -66
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +56 -66
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +26 -55
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +3 -6
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +0 -18
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +51 -82
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +21 -31
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -8
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -21
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -1
- package/extensions/LICENSES/MIT.txt +19 -0
- package/extensions/README.md +94 -0
- package/extensions/aadl/memo.package.yaml +18 -0
- package/extensions/aadl/src/aadl_extension.sysml +6 -0
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
- package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
- package/extensions/cloud/memo.package.yaml +18 -0
- package/extensions/cloud/src/cloud_extension.sysml +44 -0
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
- package/extensions/container/memo.package.yaml +18 -0
- package/extensions/container/src/container_extension.sysml +37 -0
- package/extensions/container/src/methodology/container_methodology.sysml +17 -0
- package/extensions/messaging/memo.package.yaml +18 -0
- package/extensions/messaging/src/messaging_extension.sysml +64 -0
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
- package/extensions/ros/memo.package.yaml +18 -0
- package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
- package/extensions/ros/src/ros_extension.sysml +200 -0
- package/extensions/template/src/extension.sysml +37 -0
- package/memo.manifest.yaml +13 -2
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +5 -3
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/decisions/memo_decisions.sysml +23 -2
- package/src/architecture/functional/behavior/memo_behavior.sysml +49 -21
- package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
- package/src/architecture/functional/functions/memo_functions.sysml +91 -34
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +37 -10
- package/src/architecture/implementation/ui/memo_ui.sysml +78 -38
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +63 -11
- package/src/architecture/logical/structure/memo_logical_structure.sysml +21 -20
- package/src/architecture/operational/activities/memo_activities.sysml +10 -3
- package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
- package/src/architecture/operational/workflows/memo_workflows.sysml +29 -10
- package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
- package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
- package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
- package/src/artifacts/standards/cfr_21_820.sysml +116 -0
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
- package/src/artifacts/standards/iec_60601_1.sysml +149 -0
- package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
- package/src/artifacts/standards/iec_60812.sysml +51 -0
- package/src/artifacts/standards/iec_62304.sysml +210 -0
- package/src/artifacts/standards/iec_62366_1.sysml +113 -0
- package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
- package/src/artifacts/standards/iso_13485.sysml +113 -0
- package/src/artifacts/standards/iso_14971.sysml +94 -0
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
- package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
- package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
- package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
- package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
- package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
- package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
- package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
- package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
- package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
- package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
- package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
- package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
- package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
- package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
- package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
- package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
- package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
- package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
- package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
- package/src/artifacts/templates/dhf/system/sad.md +173 -0
- package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
- package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
- package/src/artifacts/templates/dhf/system/syrs.md +128 -0
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
- package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
- package/src/assurance/requirements/memo_requirements.sysml +5 -2
- package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
- package/src/assurance/safety_risk/memo_risk.sysml +78 -7
- package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
- package/src/core/annotations/memo_annotations.sysml +25 -6
- package/src/core/common/memo_common.sysml +121 -16
- package/src/core/consistency_rules/consistency_rules.sysml +1 -1
- package/src/core/dimensions/dimensions.sysml +12 -0
- package/src/core/enumerations/memo_enumerations.sysml +60 -14
- package/src/core/relationships/memo_relationships.sysml +199 -196
- package/src/memo_namespaces.sysml +30 -0
- package/src/methodology/core/memo_core.sysml +24 -0
- package/src/methodology/profiles/memo_profiles.sysml +1 -1
- package/src/rules/ontology/ontology_invariants.sysml +213 -1
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +3 -3
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +1 -1
- package/src/viewpoints/context/context_viewpoint.sysml +1 -1
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -1
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +1 -0
- package/src/viewpoints/functional/functional_viewpoint.sysml +1 -1
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +1 -1
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +1 -1
- package/src/viewpoints/operational/operational_viewpoint.sysml +1 -1
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +1 -1
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +1 -1
- package/src/viewpoints/verification/verification_viewpoint.sysml +1 -1
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +1 -1
- package/examples/extensions/README.md +0 -16
- package/examples/extensions/template/src/extension.sysml +0 -15
- package/examples/gpca-pump/gpca-pump.kpar +0 -0
- /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
- /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
|
@@ -1,10 +1,17 @@
|
|
|
1
|
-
// Software runtime (component-and-connector) view (§11)
|
|
2
|
-
//
|
|
3
|
-
//
|
|
1
|
+
// Software runtime (component-and-connector) view (§11), matching the SEI
|
|
2
|
+
// Views and Beyond distinction between runtime components and implementation
|
|
3
|
+
// modules. Runtime structure carries concurrency, scheduling, health
|
|
4
|
+
// monitoring, fault containment, and update/rollback semantics. Module structure lives in
|
|
4
5
|
// memo_architecture_implementation_software_structure; allocation in
|
|
5
|
-
// memo_architecture_realization_deployment.
|
|
6
|
-
//
|
|
6
|
+
// memo_architecture_realization_deployment.
|
|
7
|
+
//
|
|
8
|
+
// Detailed AADL categories live in the AADL correspondence profile, which is
|
|
9
|
+
// an extension package: `extensions/aadl` (plan §C5). It carries the process /
|
|
10
|
+
// thread / virtual-processor families and a correspondence rule per mapped
|
|
11
|
+
// name and property. This comment pointed at `examples/aadl-mapping` for a
|
|
12
|
+
// long time and that directory never existed; the pointer above resolves.
|
|
7
13
|
package memo_architecture_implementation_software_runtime {
|
|
14
|
+
private import Metaobjects::SemanticMetadata;
|
|
8
15
|
private import ScalarValues::*;
|
|
9
16
|
|
|
10
17
|
private import memo_core_common::*;
|
|
@@ -25,7 +32,7 @@ package memo_architecture_implementation_software_runtime {
|
|
|
25
32
|
enum messageBroker;
|
|
26
33
|
}
|
|
27
34
|
|
|
28
|
-
part def SoftwareComponent specializes
|
|
35
|
+
part def SoftwareComponent specializes SoftwareElement {
|
|
29
36
|
attribute runtimeKind : RuntimeKind;
|
|
30
37
|
attribute responsibility : String;
|
|
31
38
|
attribute periodMs : Real;
|
|
@@ -36,7 +43,10 @@ package memo_architecture_implementation_software_runtime {
|
|
|
36
43
|
attribute activation : String;
|
|
37
44
|
attribute synchronizationMechanism : String;
|
|
38
45
|
attribute sharedResources : String;
|
|
39
|
-
|
|
46
|
+
// Maximum resident memory allocation in megabytes. The public name
|
|
47
|
+
// predates MEMO's unit-suffixed scalar convention, so document the
|
|
48
|
+
// unit here rather than silently changing the published feature name.
|
|
49
|
+
attribute memoryBudget : Real;
|
|
40
50
|
attribute healthMonitoring : String;
|
|
41
51
|
attribute restartPolicy : String;
|
|
42
52
|
attribute faultContainment : String;
|
|
@@ -45,24 +55,38 @@ package memo_architecture_implementation_software_runtime {
|
|
|
45
55
|
attribute auditable : Boolean;
|
|
46
56
|
attribute updatePolicy : String;
|
|
47
57
|
attribute rollbackPolicy : String;
|
|
48
|
-
// runtime-kind-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
// Twelve runtime-kind-conditional attributes used to follow, each
|
|
59
|
+
// documented "set only for the relevant runtimeKind" — which is a
|
|
60
|
+
// subtype family in disguise, and a technology the base ontology had
|
|
61
|
+
// no business asserting. They are gone; every one of them now lives on
|
|
62
|
+
// a type in an extension, where it is unconditional and therefore
|
|
63
|
+
// checkable (plan §10.3 D3, extensions/README.md):
|
|
64
|
+
//
|
|
65
|
+
// addressSpaceIsolated, owningProcessName,
|
|
66
|
+
// partitionBudget, isolationMechanism -> extensions/aadl
|
|
67
|
+
// serviceContract, discoveryMechanism,
|
|
68
|
+
// storageKind, retentionPolicy -> extensions/cloud
|
|
69
|
+
// imageReference, orchestrationPlatform -> extensions/container
|
|
70
|
+
// deliverySemantics, topicStructure -> extensions/messaging
|
|
71
|
+
//
|
|
72
|
+
// The last two were also on the wrong metaclass: a component does not
|
|
73
|
+
// have a topic, a publication does.
|
|
74
|
+
//
|
|
75
|
+
// What stays is what is true of EVERY runtime component in every
|
|
76
|
+
// regulated project — the AADL thread properties above and the
|
|
77
|
+
// assurance ones — plus `runtimeKind` itself, which says which family
|
|
78
|
+
// a component belongs to without claiming to describe it.
|
|
61
79
|
}
|
|
62
80
|
|
|
63
81
|
connection def ComponentConnects :> MemoRelationship {
|
|
64
82
|
attribute protocolSummary : String;
|
|
65
|
-
end sourceComponent : SoftwareComponent;
|
|
66
|
-
end targetComponent : SoftwareComponent;
|
|
83
|
+
end sourceComponent : SoftwareComponent :>> source;
|
|
84
|
+
end targetComponent : SoftwareComponent :>> target;
|
|
85
|
+
}
|
|
86
|
+
abstract connection componentConnectsLinks : ComponentConnects[*];
|
|
87
|
+
metadata def <componentConnects> ComponentConnectsMetadata :> SemanticMetadata {
|
|
88
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
89
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
90
|
+
:>> baseType = componentConnectsLinks meta SysML::Usage;
|
|
67
91
|
}
|
|
68
92
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
// Software module view (§11; IEC 62304 5.3-5.4).
|
|
2
|
-
//
|
|
3
|
-
//
|
|
1
|
+
// Software module view (§11; IEC 62304 5.3-5.4). Following the SEI Views and
|
|
2
|
+
// Beyond viewtypes, modules are implementation/code units; interacting runtime
|
|
3
|
+
// elements are SoftwareComponents in
|
|
4
|
+
// memo_architecture_implementation_software_runtime, and allocation lives in
|
|
5
|
+
// memo_architecture_realization_deployment.
|
|
4
6
|
package memo_architecture_implementation_software_structure {
|
|
7
|
+
private import Metaobjects::SemanticMetadata;
|
|
5
8
|
private import ScalarValues::*;
|
|
6
9
|
|
|
7
10
|
private import memo_core_common::*;
|
|
@@ -21,12 +24,16 @@ package memo_architecture_implementation_software_structure {
|
|
|
21
24
|
// software view inherits it rather than re-declaring it: the code view
|
|
22
25
|
// (SoftwareModule), the runtime view (SoftwareComponent), the system, and
|
|
23
26
|
// the user interface (memo_architecture_implementation_ui::UIElement).
|
|
24
|
-
|
|
27
|
+
// Structural software decomposition is part-native. IEC 62304 also uses
|
|
28
|
+
// the term "software item" for this concept, but reserving SoftwareItem
|
|
29
|
+
// for the native SysML item family keeps structural parts and exchanged
|
|
30
|
+
// values unambiguous in the model.
|
|
31
|
+
abstract part def SoftwareElement specializes ArchitectureElement {
|
|
25
32
|
attribute safetyClass : SafetyClassKind;
|
|
26
33
|
attribute complexity : ComplexityKind;
|
|
27
34
|
}
|
|
28
35
|
|
|
29
|
-
part def SoftwareSystem specializes
|
|
36
|
+
part def SoftwareSystem specializes SoftwareElement {
|
|
30
37
|
attribute version : String;
|
|
31
38
|
attribute operatingSystem : String;
|
|
32
39
|
}
|
|
@@ -44,7 +51,7 @@ package memo_architecture_implementation_software_structure {
|
|
|
44
51
|
enum soup;
|
|
45
52
|
}
|
|
46
53
|
|
|
47
|
-
part def SoftwareModule specializes
|
|
54
|
+
part def SoftwareModule specializes SoftwareElement {
|
|
48
55
|
attribute moduleKind : ModuleKind;
|
|
49
56
|
attribute responsibility : String;
|
|
50
57
|
// module-kind-specific detail (set only for the relevant moduleKind)
|
|
@@ -78,7 +85,15 @@ package memo_architecture_implementation_software_structure {
|
|
|
78
85
|
attribute version : String;
|
|
79
86
|
}
|
|
80
87
|
|
|
81
|
-
|
|
88
|
+
// Software data/content that may be stored or exchanged through ports.
|
|
89
|
+
abstract item def SoftwareItem specializes MemoItem {
|
|
90
|
+
attribute schemaIdentifier : String;
|
|
91
|
+
attribute schemaVersion : String;
|
|
92
|
+
attribute encoding : String;
|
|
93
|
+
attribute timestampRequired : Boolean;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
item def SBOMEntry specializes SoftwareItem {
|
|
82
97
|
attribute componentName : String;
|
|
83
98
|
attribute version : String;
|
|
84
99
|
attribute supplier : String;
|
|
@@ -86,8 +101,20 @@ package memo_architecture_implementation_software_structure {
|
|
|
86
101
|
attribute hash : String;
|
|
87
102
|
}
|
|
88
103
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
104
|
+
// `ModuleUses` is native `dependency` (R10-S6): write
|
|
105
|
+
// `dependency <usingModule> to <usedModule>;` instead of a connection.
|
|
106
|
+
|
|
107
|
+
// ── Relations owned by this package ─────────────────────────────
|
|
108
|
+
// Moved out of memo_core_relationships: their ends are typed against
|
|
109
|
+
// types declared here, and core must not depend on a domain package.
|
|
110
|
+
connection def DependsOnSoup :> MemoRelationship {
|
|
111
|
+
end component : ArchitectureElement :>> source;
|
|
112
|
+
end soupItem : SoftwareElement :>> target;
|
|
113
|
+
}
|
|
114
|
+
abstract connection dependsOnSoupLinks : DependsOnSoup[*];
|
|
115
|
+
metadata def <dependsOnSoup> DependsOnSoupMetadata :> SemanticMetadata {
|
|
116
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
117
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
118
|
+
:>> baseType = dependsOnSoupLinks meta SysML::Usage;
|
|
92
119
|
}
|
|
93
120
|
}
|
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
// UI is an implementation concern (rendered UI is software; physical controls
|
|
6
6
|
// are hardware), so it lives in the implementation layer, not operational.
|
|
7
7
|
package memo_architecture_implementation_ui {
|
|
8
|
+
private import Metaobjects::SemanticMetadata;
|
|
8
9
|
private import ScalarValues::*;
|
|
9
10
|
|
|
10
11
|
private import memo_core_common::*;
|
|
11
12
|
private import memo_core_enumerations::*;
|
|
13
|
+
private import memo_assurance_safety_risk::*; // RiskControlMeasure
|
|
12
14
|
private import memo_core_relationships::*;
|
|
13
15
|
private import memo_architecture_operational_activities::*;
|
|
14
16
|
private import memo_architecture_operational_scenarios::*;
|
|
@@ -143,15 +145,15 @@ package memo_architecture_implementation_ui {
|
|
|
143
145
|
// errors, and risk controls already trace to it. Screen layout adds four
|
|
144
146
|
// numbers to that tree — it does not add a tree.
|
|
145
147
|
//
|
|
146
|
-
// A UIElement IS a SOFTWARE ITEM (IEC 62304 §3.25) and
|
|
147
|
-
//
|
|
148
|
+
// A UIElement IS a structural SOFTWARE ITEM (IEC 62304 §3.25) and
|
|
149
|
+
// specializes SoftwareElement, inheriting safetyClass and complexity, so the
|
|
148
150
|
// interface is classified and decomposed like the software it is.
|
|
149
151
|
//
|
|
150
|
-
// It specializes
|
|
152
|
+
// It specializes SoftwareElement and NOT SoftwareModule: the module view is
|
|
151
153
|
// CODE, and a screen is not a source module. Runtime processes are
|
|
152
154
|
// SoftwareComponent, code is SoftwareModule, and the UI is a third view of
|
|
153
155
|
// the same software — a sibling of those, not a kind of either.
|
|
154
|
-
part def UIElement specializes
|
|
156
|
+
part def UIElement specializes SoftwareElement, InteractionElement {
|
|
155
157
|
attribute formKind : UIElementFormKind;
|
|
156
158
|
// ── screen layout (optional; set for elements that are laid out) ──
|
|
157
159
|
// Bounds are relative to the parent element in the Composes tree; a
|
|
@@ -169,6 +171,11 @@ package memo_architecture_implementation_ui {
|
|
|
169
171
|
// Capture-relative fill transparency for region review overlays. A
|
|
170
172
|
// modelled value keeps interactive review and exported figures aligned.
|
|
171
173
|
attribute boundaryOpacity : Real[0..1];
|
|
174
|
+
// Stroke width of the same box, in pixels. Colour and opacity are
|
|
175
|
+
// modelled so a review print, an exported figure, and the workbench
|
|
176
|
+
// agree on which box is which; a width chosen per renderer breaks that
|
|
177
|
+
// agreement for exactly the same reason.
|
|
178
|
+
attribute boundaryWidth : Real[0..1];
|
|
172
179
|
attribute detectionMethod : BoundsDetectionKind[0..1];
|
|
173
180
|
attribute detectionConfidence : Real[0..1];
|
|
174
181
|
attribute confirmedBy : String;
|
|
@@ -267,38 +274,44 @@ package memo_architecture_implementation_ui {
|
|
|
267
274
|
}
|
|
268
275
|
|
|
269
276
|
// A reusable dialogue structure through the UI; a selected path through
|
|
270
|
-
// it is
|
|
277
|
+
// it is a MemoScenario with scenarioKind `ui`.
|
|
271
278
|
action def InteractionFlow specializes MemoAction {
|
|
272
279
|
attribute entryPoint : String;
|
|
273
280
|
attribute exitPoint : String;
|
|
274
281
|
}
|
|
275
282
|
|
|
276
|
-
action def UIScenario specializes MemoScenario {
|
|
277
|
-
ref parentFlow : InteractionFlow[0..1];
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
connection def UITransition :> MemoRelationship {
|
|
281
|
-
attribute triggeringEvent : String;
|
|
282
|
-
attribute guardCondition : String;
|
|
283
|
-
end sourceState : UIState;
|
|
284
|
-
end targetState : UIState;
|
|
285
|
-
}
|
|
286
283
|
connection def DataBinding :> MemoRelationship {
|
|
287
284
|
attribute bindingExpression : String;
|
|
288
285
|
attribute refreshPolicy : String;
|
|
289
|
-
end boundElement : InteractionElement;
|
|
290
|
-
end dataSource :
|
|
286
|
+
end boundElement : InteractionElement :>> source;
|
|
287
|
+
end dataSource : MemoItem :>> target;
|
|
291
288
|
}
|
|
292
|
-
connection
|
|
293
|
-
|
|
294
|
-
|
|
289
|
+
abstract connection dataBindingLinks : DataBinding[*];
|
|
290
|
+
metadata def <dataBinding> DataBindingMetadata :> SemanticMetadata {
|
|
291
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
292
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
293
|
+
:>> baseType = dataBindingLinks meta SysML::Usage;
|
|
295
294
|
}
|
|
295
|
+
// `PresentsState` had zero usages anywhere in the tree (R10-S6). Its
|
|
296
|
+
// audited native form, `exhibit state`, does not actually fit: `UIState`
|
|
297
|
+
// is a `part def` with plain string attributes, not a `state def`, and
|
|
298
|
+
// SysIDE rejects `exhibit` referencing anything that does not conform to
|
|
299
|
+
// `States::StateAction` ("An exhibit state must reference another
|
|
300
|
+
// state"). Free deletion rather than a migration — nothing referenced
|
|
301
|
+
// it, so nothing to preserve. If `UIState` is ever restructured onto a
|
|
302
|
+
// real state machine, `exhibit state` becomes available then.
|
|
296
303
|
|
|
297
304
|
// ── Screen layout relations ──────────────────────────────────
|
|
298
305
|
// Which modelled screen an image is a rendering of.
|
|
299
306
|
connection def CapturesScreen :> MemoRelationship {
|
|
300
|
-
end capture : ScreenCapture;
|
|
301
|
-
end screen : UIElement;
|
|
307
|
+
end capture : ScreenCapture :>> source;
|
|
308
|
+
end screen : UIElement :>> target;
|
|
309
|
+
}
|
|
310
|
+
abstract connection capturesScreenLinks : CapturesScreen[*];
|
|
311
|
+
metadata def <capturesScreen> CapturesScreenMetadata :> SemanticMetadata {
|
|
312
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
313
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
314
|
+
:>> baseType = capturesScreenLinks meta SysML::Usage;
|
|
302
315
|
}
|
|
303
316
|
|
|
304
317
|
// Activating this element opens another screen. This is NAVIGATION, not
|
|
@@ -309,34 +322,61 @@ package memo_architecture_implementation_ui {
|
|
|
309
322
|
// from here, and only this relation says so.
|
|
310
323
|
connection def NavigatesTo :> MemoRelationship {
|
|
311
324
|
attribute triggerGesture : String;
|
|
312
|
-
end sourceElement : UIElement;
|
|
313
|
-
end targetScreen : UIElement;
|
|
325
|
+
end sourceElement : UIElement :>> source;
|
|
326
|
+
end targetScreen : UIElement :>> target;
|
|
327
|
+
}
|
|
328
|
+
abstract connection navigatesToLinks : NavigatesTo[*];
|
|
329
|
+
metadata def <navigatesTo> NavigatesToMetadata :> SemanticMetadata {
|
|
330
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
331
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
332
|
+
:>> baseType = navigatesToLinks meta SysML::Usage;
|
|
314
333
|
}
|
|
315
334
|
|
|
316
335
|
// ── §18 traceability ─────────────────────────────────────────
|
|
317
336
|
connection def ElementTriggersAction :> MemoRelationship {
|
|
318
|
-
end element : InteractionElement;
|
|
319
|
-
end triggeredAction : UIAction;
|
|
337
|
+
end element : InteractionElement :>> source;
|
|
338
|
+
end triggeredAction : UIAction :>> target;
|
|
320
339
|
}
|
|
321
|
-
connection
|
|
322
|
-
|
|
323
|
-
|
|
340
|
+
abstract connection elementTriggersActionLinks : ElementTriggersAction[*];
|
|
341
|
+
metadata def <elementTriggersAction> ElementTriggersActionMetadata :> SemanticMetadata {
|
|
342
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
343
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
344
|
+
:>> baseType = elementTriggersActionLinks meta SysML::Usage;
|
|
324
345
|
}
|
|
346
|
+
// `ActionInvokesFunction` is native `perform` (R10-S6): write
|
|
347
|
+
// `perform <systemFunction>;` inside the `UIAction` usage instead.
|
|
325
348
|
connection def FlowServesUseCase :> MemoRelationship {
|
|
326
|
-
end interactionFlow : InteractionFlow;
|
|
327
|
-
end useCase : UseCase;
|
|
349
|
+
end interactionFlow : InteractionFlow :>> source;
|
|
350
|
+
end useCase : UseCase :>> target;
|
|
351
|
+
}
|
|
352
|
+
abstract connection flowServesUseCaseLinks : FlowServesUseCase[*];
|
|
353
|
+
metadata def <flowServesUseCase> FlowServesUseCaseMetadata :> SemanticMetadata {
|
|
354
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
355
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
356
|
+
:>> baseType = flowServesUseCaseLinks meta SysML::Usage;
|
|
328
357
|
}
|
|
329
|
-
//
|
|
330
|
-
//
|
|
331
|
-
// completing the OperativeScenario → FunctionalScenario → UIScenario chain.
|
|
358
|
+
// A UI scenario realizes a functional scenario one layer up: each is a
|
|
359
|
+
// MemoScenario selected by scenarioKind rather than a separate definition.
|
|
332
360
|
connection def ErrorAtElement :> MemoRelationship {
|
|
333
|
-
end useError : UseError;
|
|
334
|
-
end element : InteractionElement;
|
|
361
|
+
end useError : UseError :>> source;
|
|
362
|
+
end element : InteractionElement :>> target;
|
|
363
|
+
}
|
|
364
|
+
abstract connection errorAtElementLinks : ErrorAtElement[*];
|
|
365
|
+
metadata def <errorAtElement> ErrorAtElementMetadata :> SemanticMetadata {
|
|
366
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
367
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
368
|
+
:>> baseType = errorAtElementLinks meta SysML::Usage;
|
|
335
369
|
}
|
|
336
370
|
// A risk control implemented by a UI element or by task design
|
|
337
371
|
// (confirmation dialog, lockout, guarded control).
|
|
338
372
|
connection def ControlImplementedBy :> MemoRelationship {
|
|
339
|
-
end riskControl :
|
|
340
|
-
end implementingElement : ArchitectureElement;
|
|
373
|
+
end riskControl : RiskControlMeasure :>> source;
|
|
374
|
+
end implementingElement : ArchitectureElement :>> target;
|
|
375
|
+
}
|
|
376
|
+
abstract connection controlImplementedByLinks : ControlImplementedBy[*];
|
|
377
|
+
metadata def <controlImplementedBy> ControlImplementedByMetadata :> SemanticMetadata {
|
|
378
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
379
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
380
|
+
:>> baseType = controlImplementedByLinks meta SysML::Usage;
|
|
341
381
|
}
|
|
342
382
|
}
|
|
@@ -44,12 +44,24 @@ package memo_architecture_logical_interfaces {
|
|
|
44
44
|
attribute apiStyle : String;
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
+
// Software interaction contracts specialize the native MEMO interface
|
|
48
|
+
// family. Concrete technologies add their protocol roles and message
|
|
49
|
+
// flows; ports remain the endpoints that components actually own.
|
|
50
|
+
abstract interface def SoftwareInterface specializes Interface {
|
|
51
|
+
// `default`, not `=`. A bare `=` in a definition BINDS the value, and
|
|
52
|
+
// a binding cannot be overridden by a usage — which asserted that
|
|
53
|
+
// every software interface is bidirectional and made a directional one
|
|
54
|
+
// inexpressible. A ROS topic publisher → subscriber is the obvious
|
|
55
|
+
// counterexample, and it is the common case rather than an exotic one.
|
|
56
|
+
attribute :>> direction default DirectionKind::inputOutput;
|
|
57
|
+
}
|
|
58
|
+
|
|
47
59
|
// A typed thing exchanged at a boundary. Concrete items such as
|
|
48
60
|
// AlarmSignal and FlowCommand specialize this type; they are neither
|
|
49
61
|
// functions nor generic action-flow notation.
|
|
50
62
|
// The kind of item is given by itemKind (data / command / signal / …);
|
|
51
63
|
// the control-specific fields below apply only when itemKind = command.
|
|
52
|
-
item def InterfaceItem specializes
|
|
64
|
+
item def InterfaceItem specializes MemoItem {
|
|
53
65
|
attribute itemKind : InterfaceItemKind;
|
|
54
66
|
attribute confidentialityClass : String;
|
|
55
67
|
attribute integrityClass : String;
|
|
@@ -75,14 +87,45 @@ package memo_architecture_logical_interfaces {
|
|
|
75
87
|
|
|
76
88
|
part def ComponentExchange specializes ArchitectureElement {
|
|
77
89
|
attribute exchangeKind : FlowKind;
|
|
78
|
-
//
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
//
|
|
83
|
-
//
|
|
84
|
-
|
|
85
|
-
|
|
90
|
+
// Metaclass-neutral endpoints. CR-ONT-002 used to read: "Typed
|
|
91
|
+
// endpoints. A component or a boundary port may terminate an exchange,
|
|
92
|
+
// so the ends are MemoPart-typed." That reasoning was circular —
|
|
93
|
+
// PhysicalPort and SoftwarePort are part defs precisely SO THAT they
|
|
94
|
+
// could satisfy this typing, and the typing was justified by their
|
|
95
|
+
// being parts. Track A0 cut the circle at the ends, which is the side
|
|
96
|
+
// that has to move first: A1 turns those two into `port def`s, and a
|
|
97
|
+
// port cannot specialize a part-based type.
|
|
98
|
+
//
|
|
99
|
+
// The constraint the type was carrying — an endpoint is a component or
|
|
100
|
+
// a boundary port, never a requirement or a document — is now stated
|
|
101
|
+
// where it can be checked across metaclasses, as CR-ONT-072/073 in
|
|
102
|
+
// src/rules/ontology/ontology_invariants.sysml.
|
|
103
|
+
//
|
|
104
|
+
// `Base::Anything` rather than no type at all — the only place in this
|
|
105
|
+
// change that reaches for it. The 36 untyped ends in
|
|
106
|
+
// memo_core_relationships are `end` declarations, and an untyped `end`
|
|
107
|
+
// is established practice; an untyped `ref` with a multiplicity is not
|
|
108
|
+
// something MEMO's own grammar accepts (`Expecting token of type ';'
|
|
109
|
+
// but found '['`), and the grammar is not in this session's scope.
|
|
110
|
+
// `Base::Anything` is what the standard's `Allocations::Allocation`
|
|
111
|
+
// types its own ends with, so it is the conforming spelling of "any
|
|
112
|
+
// element", not a workaround.
|
|
113
|
+
ref sourceEndpoint : Base::Anything[0..1];
|
|
114
|
+
ref targetEndpoint : Base::Anything[0..1];
|
|
115
|
+
// `sourcePortPath` / `targetPortPath` are GONE. They were String
|
|
116
|
+
// "descriptive port paths (e.g. TLM.TLM_MODE_OUT) for AADL round-trips;
|
|
117
|
+
// labels only — never references", which is §13.3's string
|
|
118
|
+
// pseudo-reference: nothing can follow a string to an element, so
|
|
119
|
+
// anything built on them produced no traceability.
|
|
120
|
+
//
|
|
121
|
+
// Measured across the 92 sites in the GPCA example before removing
|
|
122
|
+
// them: 23 merely restated the endpoint the ref already named (15 gave
|
|
123
|
+
// the port's own display name, 8 were prose like "HW-001:
|
|
124
|
+
// GPCA_HW_Sensors"), and the other 69 named a port ON the endpoint
|
|
125
|
+
// component, resolving to 49 distinct AADL features. Those 49 are
|
|
126
|
+
// declared as real ports now and the endpoint refs point straight at
|
|
127
|
+
// them, which is what Track A1 making SoftwarePort a `port def` is for.
|
|
128
|
+
// The AADL round-trip is better served by an element than by its name.
|
|
86
129
|
ref allocatedExchanges : FunctionalExchange[0..*];
|
|
87
130
|
attribute direction : DirectionKind;
|
|
88
131
|
// Connection timing discipline from the source architecture
|
|
@@ -93,9 +136,18 @@ package memo_architecture_logical_interfaces {
|
|
|
93
136
|
// Boundary data port of a software system (e.g. an AADL top-level
|
|
94
137
|
// data port), modeled as a first-class element so exchanges can
|
|
95
138
|
// reference it and views can render the system boundary.
|
|
96
|
-
|
|
139
|
+
//
|
|
140
|
+
// A `port def` (Track A1) — see PhysicalPort in
|
|
141
|
+
// memo_architecture_realization_physical for why the specialization moved
|
|
142
|
+
// off InterfaceElement, why `direction` is native now (Track A2), and why
|
|
143
|
+
// `portKind` is duplicated on both ports instead of hoisted onto a base.
|
|
144
|
+
port def SoftwarePort specializes MemoPort {
|
|
97
145
|
attribute portKind : InterfaceKind;
|
|
98
|
-
|
|
146
|
+
// AADL port category (plan C2). Sampled vs. queued delivery decides
|
|
147
|
+
// whether a missed deadline drops a sample or grows a queue, which the
|
|
148
|
+
// timing analysis and the safety case both need and neither could ask
|
|
149
|
+
// the model for. `portKind` says what crosses; this says how.
|
|
150
|
+
attribute portCategory : PortCategoryKind;
|
|
99
151
|
attribute dataTypeName : String;
|
|
100
152
|
}
|
|
101
153
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// plus independence constraints — never by duplicating identically named
|
|
5
5
|
// components.
|
|
6
6
|
package memo_architecture_logical_structure {
|
|
7
|
+
private import Metaobjects::SemanticMetadata;
|
|
7
8
|
private import ScalarValues::*;
|
|
8
9
|
|
|
9
10
|
private import memo_core_common::*;
|
|
@@ -144,7 +145,7 @@ package memo_architecture_logical_structure {
|
|
|
144
145
|
end providerPort : LogicalPort;
|
|
145
146
|
end consumerPort : ~LogicalPort;
|
|
146
147
|
}
|
|
147
|
-
item def LogicalExchangeItem specializes
|
|
148
|
+
item def LogicalExchangeItem specializes MemoItem {
|
|
148
149
|
attribute contentKind : FlowContentKind;
|
|
149
150
|
}
|
|
150
151
|
|
|
@@ -152,8 +153,14 @@ package memo_architecture_logical_structure {
|
|
|
152
153
|
connection def LogicalConnector :> MemoRelationship {
|
|
153
154
|
attribute contentKind : FlowContentKind;
|
|
154
155
|
attribute direction : DirectionKind;
|
|
155
|
-
end sourceComponent : LogicalComponent;
|
|
156
|
-
end targetComponent : LogicalComponent;
|
|
156
|
+
end sourceComponent : LogicalComponent :>> source;
|
|
157
|
+
end targetComponent : LogicalComponent :>> target;
|
|
158
|
+
}
|
|
159
|
+
abstract connection logicalConnectorLinks : LogicalConnector[*];
|
|
160
|
+
metadata def <logicalConnector> LogicalConnectorMetadata :> SemanticMetadata {
|
|
161
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
162
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
163
|
+
:>> baseType = logicalConnectorLinks meta SysML::Usage;
|
|
157
164
|
}
|
|
158
165
|
// A transfer of a typed item across a connector.
|
|
159
166
|
part def LogicalExchange specializes ArchitectureElement {
|
|
@@ -167,14 +174,7 @@ package memo_architecture_logical_structure {
|
|
|
167
174
|
|
|
168
175
|
// States and modes of the logical solution (kept distinct from UI state
|
|
169
176
|
// and from physical device configuration).
|
|
170
|
-
|
|
171
|
-
attribute stateInvariant : String;
|
|
172
|
-
}
|
|
173
|
-
part def LogicalMode specializes ArchitectureElement {
|
|
174
|
-
attribute modePurpose : String;
|
|
175
|
-
attribute entryCondition : String;
|
|
176
|
-
attribute exitCondition : String;
|
|
177
|
-
}
|
|
177
|
+
|
|
178
178
|
part def LogicalBehavior specializes ArchitectureElement {
|
|
179
179
|
attribute behaviorSummary : String;
|
|
180
180
|
attribute executionSemantics : String;
|
|
@@ -192,15 +192,16 @@ package memo_architecture_logical_structure {
|
|
|
192
192
|
// Claimed independence between channels (common-cause defense).
|
|
193
193
|
connection def IndependentOf :> MemoRelationship {
|
|
194
194
|
attribute independenceBasis : String;
|
|
195
|
-
end channel : LogicalComponent;
|
|
196
|
-
end otherChannel : LogicalComponent;
|
|
197
|
-
}
|
|
198
|
-
connection def MonitorsChannel :> MemoRelationship {
|
|
199
|
-
end monitorChannel : LogicalComponent;
|
|
200
|
-
end monitoredComponent : LogicalComponent;
|
|
195
|
+
end channel : LogicalComponent :>> source;
|
|
196
|
+
end otherChannel : LogicalComponent :>> target;
|
|
201
197
|
}
|
|
202
|
-
connection
|
|
203
|
-
|
|
204
|
-
|
|
198
|
+
abstract connection independentOfLinks : IndependentOf[*];
|
|
199
|
+
metadata def <independentOf> IndependentOfMetadata :> SemanticMetadata {
|
|
200
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
201
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
202
|
+
:>> baseType = independentOfLinks meta SysML::Usage;
|
|
205
203
|
}
|
|
204
|
+
// `MonitorsChannel` is native `dependency` (R10-S6): write
|
|
205
|
+
// `dependency <monitorChannel> to <monitoredComponent>;` instead.
|
|
206
|
+
|
|
206
207
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// Task difficulty belongs to a task performed in a context — never to an
|
|
8
8
|
// instrument (TaskDifficultyAssessment).
|
|
9
9
|
package memo_architecture_operational_activities {
|
|
10
|
+
private import Metaobjects::SemanticMetadata;
|
|
10
11
|
private import ScalarValues::*;
|
|
11
12
|
|
|
12
13
|
private import memo_core_common::*;
|
|
@@ -28,7 +29,7 @@ package memo_architecture_operational_activities {
|
|
|
28
29
|
attribute preCondition : String;
|
|
29
30
|
attribute postCondition : String;
|
|
30
31
|
attribute criticality : CriticalityKind;
|
|
31
|
-
ref performedBy :
|
|
32
|
+
ref performedBy : OperationalParticipant[0..*];
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
// A human task. A critical task (IEC 62366-1 / FDA HF guidance §3) is a
|
|
@@ -79,7 +80,13 @@ package memo_architecture_operational_activities {
|
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
connection def AssessesDifficulty :> MemoRelationship {
|
|
82
|
-
end assessment : TaskDifficultyAssessment;
|
|
83
|
-
end task : UserTask;
|
|
83
|
+
end assessment : TaskDifficultyAssessment :>> source;
|
|
84
|
+
end task : UserTask :>> target;
|
|
85
|
+
}
|
|
86
|
+
abstract connection assessesDifficultyLinks : AssessesDifficulty[*];
|
|
87
|
+
metadata def <assessesDifficulty> AssessesDifficultyMetadata :> SemanticMetadata {
|
|
88
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
89
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
90
|
+
:>> baseType = assessesDifficultyLinks meta SysML::Usage;
|
|
84
91
|
}
|
|
85
92
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
// from
|
|
1
|
+
// Operational participants (§4) interact with the system; they are distinct
|
|
2
|
+
// from stakeholders (memo_architecture_operational_context_stakeholders), who have concerns about the
|
|
3
3
|
// system but need not interact with it. "User" is reserved for a human who
|
|
4
4
|
// interacts with the medical device.
|
|
5
5
|
package memo_architecture_operational_context_actors {
|
|
@@ -7,8 +7,7 @@ package memo_architecture_operational_context_actors {
|
|
|
7
7
|
|
|
8
8
|
private import memo_core_common::*;
|
|
9
9
|
private import memo_core_enumerations::*;
|
|
10
|
-
|
|
11
|
-
abstract part def Actor specializes MemoPart {
|
|
10
|
+
abstract part def OperationalParticipant specializes MemoPart {
|
|
12
11
|
attribute actorKind : ActorKind;
|
|
13
12
|
attribute trainingLevel : String;
|
|
14
13
|
attribute responsibility : String;
|
|
@@ -19,7 +18,7 @@ package memo_architecture_operational_context_actors {
|
|
|
19
18
|
// The human actor. The specific role is given by actorKind
|
|
20
19
|
// (patient / clinician / caregiver / technician / administrator); the
|
|
21
20
|
// role-specific fields below are set only for the relevant actorKind.
|
|
22
|
-
part def User specializes
|
|
21
|
+
part def User specializes OperationalParticipant {
|
|
23
22
|
attribute userPopulation : String;
|
|
24
23
|
attribute impairmentConsiderations : String;
|
|
25
24
|
attribute intendedTraining : String;
|
|
@@ -32,7 +31,5 @@ package memo_architecture_operational_context_actors {
|
|
|
32
31
|
|
|
33
32
|
// A non-human actor (external system, external device, or environmental
|
|
34
33
|
// agent). The specific kind is described by externalKind.
|
|
35
|
-
|
|
36
|
-
attribute externalKind : String[0..1];
|
|
37
|
-
}
|
|
34
|
+
|
|
38
35
|
}
|