@memoarchitect/ontology 0.8.24 → 0.11.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 +1 -1
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
- package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +9 -7
- package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +8 -6
- package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
- package/examples/gpca-pump/memo.identity.yaml +2185 -0
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +29 -24
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -13
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +121 -125
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +390 -388
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -14
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -8
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
- package/examples/gpca-pump/model/catalog/project.sysml +3 -1
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +6 -4
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +6 -4
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -3
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +5 -3
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +9 -7
- package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +6 -4
- package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
- package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
- package/examples/nested-architecture-dsm/memo.identity.yaml +181 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
- package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +34 -0
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +11 -6
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +16 -14
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
- package/examples/nested-architecture-dsm/model/catalog/project.sysml +4 -1
- package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +17 -16
- package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
- package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +10 -8
- package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +54 -51
- package/examples/surgical-robot/model/catalog/project.sysml +3 -1
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
- package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -8
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +11 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +11 -7
- package/examples/temperature-alarm/memo.identity.yaml +64 -0
- package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +27 -22
- package/examples/ui-screen-regions/memo.identity.yaml +205 -0
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
- package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +26 -24
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
- package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
- package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +5 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +5 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +5 -3
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +3 -1
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +3 -1
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
- package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/container/src/methodology/container_methodology.sysml +3 -1
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
- package/extensions/ros/memo.package.yaml +1 -1
- package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
- package/extensions/template/src/extension.sysml +3 -1
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +2 -2
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
- package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
- package/src/architecture/implementation/ui/memo_ui.sysml +0 -23
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +3 -1
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +3 -11
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +1 -12
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -11
- package/src/architecture/operational/workflows/memo_workflows.sysml +0 -20
- package/src/architecture/realization/deployment/memo_deployment.sysml +16 -9
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
- package/src/artifacts/standards/cfr_21_820.sysml +80 -89
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
- package/src/artifacts/standards/iec_60601_1.sysml +108 -121
- package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
- package/src/artifacts/standards/iec_60812.sysml +21 -22
- package/src/artifacts/standards/iec_62304.sysml +150 -169
- package/src/artifacts/standards/iec_62366_1.sysml +80 -89
- package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
- package/src/artifacts/standards/iso_13485.sysml +80 -89
- package/src/artifacts/standards/iso_14971.sysml +66 -73
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
- package/src/artifacts/templates/dhf/iec-60601/hrs.md +6 -6
- package/src/artifacts/templates/dhf/iec-62304/srs.md +10 -10
- package/src/artifacts/templates/dhf/system/syrs.md +6 -6
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +0 -1
- package/src/assurance/human_factors/memo_human_factors.sysml +0 -1
- package/src/assurance/requirements/memo_requirements.sysml +20 -16
- package/src/assurance/requirements/needs/memo_needs.sysml +33 -5
- package/src/assurance/safety_risk/memo_risk.sysml +20 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
- package/src/core/common/memo_common.sysml +50 -50
- package/src/core/enumerations/memo_enumerations.sysml +1 -1
- package/src/core/relationships/memo_relationships.sysml +22 -49
- package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
- package/src/methodology/core/memo_core.sysml +0 -10
- package/src/methodology/profiles/memo_profiles.sysml +18 -16
- package/src/rules/closure/closure_rules.sysml +58 -22
- package/src/rules/crosslayer/cross_layer_rules.sysml +5 -3
- package/src/rules/ontology/ontology_invariants.sysml +119 -35
- package/src/rules/quantitative/quantitative_rules.sysml +4 -2
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -28
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
- package/src/viewpoints/context/context_viewpoint.sysml +5 -3
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +5 -3
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -16
- package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +5 -3
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +5 -3
- package/src/viewpoints/logical/logical_viewpoint.sysml +4 -2
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +5 -3
- package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +5 -3
- package/src/viewpoints/physical/physical_viewpoint.sysml +4 -2
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +5 -3
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +5 -3
- package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -2
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +5 -3
- package/src/viewpoints/risk/risk_viewpoint.sysml +4 -2
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +5 -3
- package/src/viewpoints/software/software_viewpoint.sysml +4 -2
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +5 -3
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -2
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +4 -2
- package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +5 -3
- package/templates/connected-device/model/catalog/project.sysml +3 -1
- package/templates/default/model/catalog/project.sysml +3 -1
- package/templates/infusion-pump/model/catalog/project.sysml +3 -1
- package/templates/monitoring-device/model/catalog/project.sysml +3 -1
- package/templates/samd/model/catalog/project.sysml +3 -1
|
@@ -9,10 +9,12 @@ package memo_rules_ontology {
|
|
|
9
9
|
private import memo_core_consistency_rules::*;
|
|
10
10
|
private import memo_core_enumerations::*;
|
|
11
11
|
|
|
12
|
+
private import memo_core_common::*;
|
|
13
|
+
private import memo_core_common::MemoIdentity;
|
|
12
14
|
// ─── Structure ───────────────────────────────────────────────────────
|
|
13
15
|
|
|
14
16
|
constraint def ContainmentAcyclicRule :> MemoConsistencyRule {
|
|
15
|
-
|
|
17
|
+
@MemoIdentity { :>> providedId = "CR-ONT-001"; }
|
|
16
18
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
17
19
|
attribute appliesTo = "Model";
|
|
18
20
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -21,7 +23,7 @@ package memo_rules_ontology {
|
|
|
21
23
|
constraint { true }
|
|
22
24
|
}
|
|
23
25
|
constraint def NestedPartConnectedRule :> MemoConsistencyRule {
|
|
24
|
-
|
|
26
|
+
@MemoIdentity { :>> providedId = "AR-IBD-001"; }
|
|
25
27
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
26
28
|
// Internal-block connectivity is a structural-architecture concern, so
|
|
27
29
|
// the subject is the structural component — not every MemoPart. UI
|
|
@@ -44,7 +46,7 @@ package memo_rules_ontology {
|
|
|
44
46
|
// ─── Deployment and realization ──────────────────────────────────────
|
|
45
47
|
|
|
46
48
|
constraint def RuntimeTracesToModuleRule :> MemoConsistencyRule {
|
|
47
|
-
|
|
49
|
+
@MemoIdentity { :>> providedId = "CR-ONT-011"; }
|
|
48
50
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
49
51
|
attribute appliesTo = "SoftwareComponent";
|
|
50
52
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -53,7 +55,7 @@ package memo_rules_ontology {
|
|
|
53
55
|
constraint { true }
|
|
54
56
|
}
|
|
55
57
|
constraint def PatientContactCharacterizedRule :> MemoConsistencyRule {
|
|
56
|
-
|
|
58
|
+
@MemoIdentity { :>> providedId = "CR-ONT-032"; }
|
|
57
59
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
58
60
|
attribute appliesTo = "PhysicalComponent";
|
|
59
61
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -65,7 +67,7 @@ package memo_rules_ontology {
|
|
|
65
67
|
// ─── Assurance coverage ──────────────────────────────────────────────
|
|
66
68
|
|
|
67
69
|
constraint def SafetyCriticalFunctionVerifiedRule :> MemoConsistencyRule {
|
|
68
|
-
|
|
70
|
+
@MemoIdentity { :>> providedId = "CR-ONT-040"; }
|
|
69
71
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
70
72
|
attribute appliesTo = "MemoFunction";
|
|
71
73
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -74,7 +76,7 @@ package memo_rules_ontology {
|
|
|
74
76
|
constraint { true }
|
|
75
77
|
}
|
|
76
78
|
constraint def CriticalTaskValidatedRule :> MemoConsistencyRule {
|
|
77
|
-
|
|
79
|
+
@MemoIdentity { :>> providedId = "CR-ONT-041"; }
|
|
78
80
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
79
81
|
attribute appliesTo = "OperativeAction[criticality=high]";
|
|
80
82
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -83,7 +85,7 @@ package memo_rules_ontology {
|
|
|
83
85
|
constraint { true }
|
|
84
86
|
}
|
|
85
87
|
constraint def UseErrorTracesToHazardRule :> MemoConsistencyRule {
|
|
86
|
-
|
|
88
|
+
@MemoIdentity { :>> providedId = "CR-ONT-042"; }
|
|
87
89
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
88
90
|
attribute appliesTo = "UseError";
|
|
89
91
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -127,7 +129,7 @@ package memo_rules_ontology {
|
|
|
127
129
|
// and the admissible types so the report is still actionable.
|
|
128
130
|
|
|
129
131
|
constraint def SatisfiedBySourceKindRule :> MemoConsistencyRule {
|
|
130
|
-
|
|
132
|
+
@MemoIdentity { :>> providedId = "CR-ONT-060"; }
|
|
131
133
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
132
134
|
attribute appliesTo = "Model";
|
|
133
135
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -136,7 +138,7 @@ package memo_rules_ontology {
|
|
|
136
138
|
constraint { true }
|
|
137
139
|
}
|
|
138
140
|
constraint def SatisfiedByTargetKindRule :> MemoConsistencyRule {
|
|
139
|
-
|
|
141
|
+
@MemoIdentity { :>> providedId = "CR-ONT-061"; }
|
|
140
142
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
141
143
|
attribute appliesTo = "Model";
|
|
142
144
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -145,7 +147,7 @@ package memo_rules_ontology {
|
|
|
145
147
|
constraint { true }
|
|
146
148
|
}
|
|
147
149
|
constraint def VerifiedByTargetKindRule :> MemoConsistencyRule {
|
|
148
|
-
|
|
150
|
+
@MemoIdentity { :>> providedId = "CR-ONT-062"; }
|
|
149
151
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
150
152
|
attribute appliesTo = "Model";
|
|
151
153
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -154,7 +156,7 @@ package memo_rules_ontology {
|
|
|
154
156
|
constraint { true }
|
|
155
157
|
}
|
|
156
158
|
constraint def AllocatedToSourceKindRule :> MemoConsistencyRule {
|
|
157
|
-
|
|
159
|
+
@MemoIdentity { :>> providedId = "CR-ONT-063"; }
|
|
158
160
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
159
161
|
attribute appliesTo = "Model";
|
|
160
162
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -163,7 +165,7 @@ package memo_rules_ontology {
|
|
|
163
165
|
constraint { true }
|
|
164
166
|
}
|
|
165
167
|
constraint def AllocatedToTargetKindRule :> MemoConsistencyRule {
|
|
166
|
-
|
|
168
|
+
@MemoIdentity { :>> providedId = "CR-ONT-064"; }
|
|
167
169
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
168
170
|
attribute appliesTo = "Model";
|
|
169
171
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -172,7 +174,7 @@ package memo_rules_ontology {
|
|
|
172
174
|
constraint { true }
|
|
173
175
|
}
|
|
174
176
|
constraint def ComposesParentKindRule :> MemoConsistencyRule {
|
|
175
|
-
|
|
177
|
+
@MemoIdentity { :>> providedId = "CR-ONT-065"; }
|
|
176
178
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
177
179
|
attribute appliesTo = "Model";
|
|
178
180
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -181,7 +183,7 @@ package memo_rules_ontology {
|
|
|
181
183
|
constraint { true }
|
|
182
184
|
}
|
|
183
185
|
constraint def ComposesChildKindRule :> MemoConsistencyRule {
|
|
184
|
-
|
|
186
|
+
@MemoIdentity { :>> providedId = "CR-ONT-066"; }
|
|
185
187
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
186
188
|
attribute appliesTo = "Model";
|
|
187
189
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -190,7 +192,7 @@ package memo_rules_ontology {
|
|
|
190
192
|
constraint { true }
|
|
191
193
|
}
|
|
192
194
|
constraint def PrecedesEndKindRule :> MemoConsistencyRule {
|
|
193
|
-
|
|
195
|
+
@MemoIdentity { :>> providedId = "CR-ONT-067"; }
|
|
194
196
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
195
197
|
attribute appliesTo = "Model";
|
|
196
198
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -199,7 +201,7 @@ package memo_rules_ontology {
|
|
|
199
201
|
constraint { true }
|
|
200
202
|
}
|
|
201
203
|
constraint def PerformsPerformerKindRule :> MemoConsistencyRule {
|
|
202
|
-
|
|
204
|
+
@MemoIdentity { :>> providedId = "CR-ONT-068"; }
|
|
203
205
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
204
206
|
attribute appliesTo = "Model";
|
|
205
207
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -207,17 +209,8 @@ package memo_rules_ontology {
|
|
|
207
209
|
attribute predicateExpression = "sourcesOf(performs)->forAll(conformsTo(MemoPart) or construct == 'action')";
|
|
208
210
|
constraint { true }
|
|
209
211
|
}
|
|
210
|
-
constraint def EnablesEnablerKindRule :> MemoConsistencyRule {
|
|
211
|
-
attribute :>> id = "CR-ONT-069";
|
|
212
|
-
attribute tailoring = RuleTailoringKind::invariant;
|
|
213
|
-
attribute appliesTo = "Model";
|
|
214
|
-
attribute severity = RuleSeverityKind::error;
|
|
215
|
-
attribute rationaleText = "An enabling system or function enables a workflow: the enabling end is a part or a behaviour.";
|
|
216
|
-
attribute predicateExpression = "sourcesOf(enables)->forAll(conformsTo(MemoPart) or construct == 'action')";
|
|
217
|
-
constraint { true }
|
|
218
|
-
}
|
|
219
212
|
constraint def BindsToInterfaceEndKindRule :> MemoConsistencyRule {
|
|
220
|
-
|
|
213
|
+
@MemoIdentity { :>> providedId = "CR-ONT-070"; }
|
|
221
214
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
222
215
|
attribute appliesTo = "Model";
|
|
223
216
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -226,7 +219,7 @@ package memo_rules_ontology {
|
|
|
226
219
|
constraint { true }
|
|
227
220
|
}
|
|
228
221
|
constraint def CrossesTrustBoundaryEndKindRule :> MemoConsistencyRule {
|
|
229
|
-
|
|
222
|
+
@MemoIdentity { :>> providedId = "CR-ONT-071"; }
|
|
230
223
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
231
224
|
attribute appliesTo = "Model";
|
|
232
225
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -241,7 +234,7 @@ package memo_rules_ontology {
|
|
|
241
234
|
// reached with sourcesOf/targetsOf. They are resolved here by looking the id
|
|
242
235
|
// up in the kind extent, which is the same statement made the long way.
|
|
243
236
|
constraint def ComponentExchangeSourceEndpointKindRule :> MemoConsistencyRule {
|
|
244
|
-
|
|
237
|
+
@MemoIdentity { :>> providedId = "CR-ONT-072"; }
|
|
245
238
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
246
239
|
attribute appliesTo = "ComponentExchange";
|
|
247
240
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -250,7 +243,7 @@ package memo_rules_ontology {
|
|
|
250
243
|
constraint { true }
|
|
251
244
|
}
|
|
252
245
|
constraint def ComponentExchangeTargetEndpointKindRule :> MemoConsistencyRule {
|
|
253
|
-
|
|
246
|
+
@MemoIdentity { :>> providedId = "CR-ONT-073"; }
|
|
254
247
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
255
248
|
attribute appliesTo = "ComponentExchange";
|
|
256
249
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -266,7 +259,7 @@ package memo_rules_ontology {
|
|
|
266
259
|
// "answerable to exactly one component" is the whole content of the concept.
|
|
267
260
|
|
|
268
261
|
constraint def ComponentFunctionAllocatedRule :> MemoConsistencyRule {
|
|
269
|
-
|
|
262
|
+
@MemoIdentity { :>> providedId = "CR-ONT-074"; }
|
|
270
263
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
271
264
|
attribute appliesTo = "ComponentFunction";
|
|
272
265
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -275,7 +268,7 @@ package memo_rules_ontology {
|
|
|
275
268
|
constraint { true }
|
|
276
269
|
}
|
|
277
270
|
constraint def FunctionDecomposesIntoFunctionsRule :> MemoConsistencyRule {
|
|
278
|
-
|
|
271
|
+
@MemoIdentity { :>> providedId = "CR-ONT-075"; }
|
|
279
272
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
280
273
|
attribute appliesTo = "MemoFunction";
|
|
281
274
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -284,6 +277,59 @@ package memo_rules_ontology {
|
|
|
284
277
|
constraint { true }
|
|
285
278
|
}
|
|
286
279
|
|
|
280
|
+
// ── Containment stays inside one family ─────────────────────────────
|
|
281
|
+
//
|
|
282
|
+
// CR-ONT-075 above is this rule for functions; these are the same shape for
|
|
283
|
+
// the other families. The invariant is FAMILY homogeneity, not type
|
|
284
|
+
// homogeneity: a System containing a Subsystem containing a LogicalComponent
|
|
285
|
+
// is correct decomposition even though all three types differ, and measured
|
|
286
|
+
// 2026-08-18 only 1 of 68 containment edges had identical types at both
|
|
287
|
+
// ends — a same-type rule would have rejected 98.5% of the corpus, the
|
|
288
|
+
// ontology's own templates included.
|
|
289
|
+
//
|
|
290
|
+
// What they catch is containment CROSSING a family: a logical component
|
|
291
|
+
// "containing" a software module is realization, and a hardware assembly
|
|
292
|
+
// "containing" a function is allocation. Both have their own relation, and
|
|
293
|
+
// writing them as containment loses the distinction.
|
|
294
|
+
//
|
|
295
|
+
// They read the `composes` edge, which the builder synthesizes from native
|
|
296
|
+
// nesting, so they cover the nesting spelling and the retired connection
|
|
297
|
+
// form identically.
|
|
298
|
+
//
|
|
299
|
+
// Ports are exempt. A port is a boundary FEATURE of its owner, not a member
|
|
300
|
+
// of its owner's family, and any element may carry one whatever family it
|
|
301
|
+
// is in — CR-ONT-065/066 already govern what may sit at a containment end.
|
|
302
|
+
// Without the exemption these rules reject `SoftwareModule composes
|
|
303
|
+
// PhysicalPort`, which those rules accept, and the ontology contradicts
|
|
304
|
+
// itself about a single edge.
|
|
305
|
+
constraint def SoftwareContainsSoftwareRule :> MemoConsistencyRule {
|
|
306
|
+
@MemoIdentity { :>> providedId = "CR-ONT-077"; }
|
|
307
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
308
|
+
attribute appliesTo = "SoftwareElement";
|
|
309
|
+
attribute severity = RuleSeverityKind::error;
|
|
310
|
+
attribute rationaleText = "Software contains software. A software element containing a logical or physical one is realization, not containment — that is a refinement dependency.";
|
|
311
|
+
attribute predicateExpression = "composes->forAll(construct == 'port' or construct == 'package' or conformsTo(SoftwareElement))";
|
|
312
|
+
constraint { true }
|
|
313
|
+
}
|
|
314
|
+
constraint def LogicalContainsLogicalRule :> MemoConsistencyRule {
|
|
315
|
+
@MemoIdentity { :>> providedId = "CR-ONT-078"; }
|
|
316
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
317
|
+
attribute appliesTo = "LogicalComponent";
|
|
318
|
+
attribute severity = RuleSeverityKind::error;
|
|
319
|
+
attribute rationaleText = "The logical hierarchy decomposes into logical components. A logical component containing a software module or a physical part is realization — the implementation element refines the logical one, it is not part of it.";
|
|
320
|
+
attribute predicateExpression = "composes->forAll(construct == 'port' or construct == 'package' or conformsTo(LogicalComponent))";
|
|
321
|
+
constraint { true }
|
|
322
|
+
}
|
|
323
|
+
constraint def PhysicalContainsPhysicalRule :> MemoConsistencyRule {
|
|
324
|
+
@MemoIdentity { :>> providedId = "CR-ONT-079"; }
|
|
325
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
326
|
+
attribute appliesTo = "PhysicalElement";
|
|
327
|
+
attribute severity = RuleSeverityKind::error;
|
|
328
|
+
attribute rationaleText = "An assembly contains physical things. PhysicalElement is the shared root the family gained for this rule — PhysicalAssembly and PhysicalComponent previously specialized MemoPart separately, which left no type meaning 'a physical thing' to name here.";
|
|
329
|
+
attribute predicateExpression = "composes->forAll(construct == 'port' or construct == 'package' or conformsTo(PhysicalElement))";
|
|
330
|
+
constraint { true }
|
|
331
|
+
}
|
|
332
|
+
|
|
287
333
|
// Track A3. The flow is the edge; the exchange part carries the budget and
|
|
288
334
|
// assurance attributes. The two halves are bound by a SHARED NAME — the flow
|
|
289
335
|
// usage is named with its exchange — and this is what makes that binding a
|
|
@@ -294,7 +340,7 @@ package memo_rules_ontology {
|
|
|
294
340
|
// the ends and can never answer it. Naming the flow is what the grammar's
|
|
295
341
|
// restored FlowDeclaration name makes possible at all.
|
|
296
342
|
constraint def ExchangeHasFlowRule :> MemoConsistencyRule {
|
|
297
|
-
|
|
343
|
+
@MemoIdentity { :>> providedId = "CR-ONT-076"; }
|
|
298
344
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
299
345
|
attribute appliesTo = "ComponentExchange";
|
|
300
346
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -303,13 +349,51 @@ package memo_rules_ontology {
|
|
|
303
349
|
constraint { true }
|
|
304
350
|
}
|
|
305
351
|
|
|
352
|
+
// The predicate here named three features that do not exist — `variantKind`,
|
|
353
|
+
// `baseScenario`, `variationPoint` — so it could never fail, and a rule that
|
|
354
|
+
// cannot fail is coverage on paper only. `baseScenario` is the one the
|
|
355
|
+
// scenario def deliberately refused: "a nominal/alternate pair are scenarios
|
|
356
|
+
// of the same workflow, distinguished by scenarioKind — no baseScenario
|
|
357
|
+
// back-ref". The base of an alternate IS the nominal scenario of its
|
|
358
|
+
// workflow, so the rule asks the containment that already expresses it.
|
|
306
359
|
constraint def AlternateScenarioHasBaseRule :> MemoConsistencyRule {
|
|
307
|
-
|
|
360
|
+
@MemoIdentity { :>> providedId = "CR-ONT-043"; }
|
|
308
361
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
309
362
|
attribute appliesTo = "OperativeScenario";
|
|
310
363
|
attribute severity = RuleSeverityKind::error;
|
|
311
|
-
attribute rationaleText = "
|
|
312
|
-
|
|
364
|
+
attribute rationaleText = "An alternate scenario is a variation of a nominal path, so it belongs to a workflow that has one. An alternate with no nominal sibling is either a workflow with no happy path or a scenario filed under the wrong parent.";
|
|
365
|
+
// A nominal scenario usually says nothing: `nominal` is the default on
|
|
366
|
+
// the definition, and a default is not written onto every usage. So the
|
|
367
|
+
// sibling test is "not alternate", and `conformsTo` keeps it from being
|
|
368
|
+
// satisfied by an ordinary step of the same workflow.
|
|
369
|
+
attribute predicateExpression = "not(scenarioKind == 'alternate') or composes.composes->exists(conformsTo(OperativeScenario) and scenarioKind != 'alternate')";
|
|
370
|
+
constraint { true }
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
// ─── Assurance-trace warnings ────────────────────────────────────────
|
|
374
|
+
// Both are WARNINGS, not errors: each describes a trace graph that is
|
|
375
|
+
// suspicious rather than invalid, and a regulated model has legitimate
|
|
376
|
+
// exceptions to both. They needed `upstream` / `downstream` — the bare
|
|
377
|
+
// relation name is bidirectional, so before those existed no rule could
|
|
378
|
+
// ask which way a derivation ran.
|
|
379
|
+
|
|
380
|
+
constraint def DerivationGapRule :> MemoConsistencyRule {
|
|
381
|
+
@MemoIdentity { :>> providedId = "CR-ONT-080"; }
|
|
382
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
383
|
+
attribute appliesTo = "MemoRequirementElement";
|
|
384
|
+
attribute severity = RuleSeverityKind::warning;
|
|
385
|
+
attribute rationaleText = "A requirement that others derive from should itself be justified. If nothing is upstream of it and it is not a stakeholder need, the derivation chain dead-ends at an unexplained requirement — the gap an assessor asks about first. Needs are the legitimate roots, so they are exempt by type rather than by convention.";
|
|
386
|
+
attribute predicateExpression = "downstream(derivesFrom)->isEmpty() or upstream(derivesFrom)->notEmpty() or conformsTo(MemoNeed)";
|
|
387
|
+
constraint { true }
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
constraint def RedundantAncestorTraceRule :> MemoConsistencyRule {
|
|
391
|
+
@MemoIdentity { :>> providedId = "CR-ONT-081"; }
|
|
392
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
393
|
+
attribute appliesTo = "MemoRequirementElement";
|
|
394
|
+
attribute severity = RuleSeverityKind::warning;
|
|
395
|
+
attribute rationaleText = "When one element satisfies both a requirement and something derived from that requirement, the trace to the ancestor is already implied by the derivation and adds no coverage. Two elements satisfying the two ends is ordinary decomposition and is not reported.";
|
|
396
|
+
attribute predicateExpression = "not satisfiedBy->intersects(downstream(derivesFrom).satisfiedBy)";
|
|
313
397
|
constraint { true }
|
|
314
398
|
}
|
|
315
399
|
}
|
|
@@ -6,8 +6,10 @@ package memo_rules_quantitative {
|
|
|
6
6
|
private import memo_core_consistency_rules::*;
|
|
7
7
|
private import memo_core_enumerations::*;
|
|
8
8
|
|
|
9
|
+
private import memo_core_common::*;
|
|
10
|
+
private import memo_core_common::MemoIdentity;
|
|
9
11
|
constraint def HazardMaxControlsRule :> MemoConsistencyRule {
|
|
10
|
-
|
|
12
|
+
@MemoIdentity { :>> providedId = "QT-001"; }
|
|
11
13
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
12
14
|
attribute appliesTo = "Hazard";
|
|
13
15
|
attribute severity = RuleSeverityKind::info;
|
|
@@ -17,7 +19,7 @@ package memo_rules_quantitative {
|
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
constraint def SwComponentMaxInterfacesRule :> MemoConsistencyRule {
|
|
20
|
-
|
|
22
|
+
@MemoIdentity { :>> providedId = "QT-002"; }
|
|
21
23
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
22
24
|
attribute appliesTo = "SoftwareModule";
|
|
23
25
|
attribute severity = RuleSeverityKind::info;
|
|
@@ -9,143 +9,144 @@ package memo_viewpoints_catalog {
|
|
|
9
9
|
private import memo_core_enumerations::*;
|
|
10
10
|
private import memo_viewpoints_definitions::*;
|
|
11
11
|
|
|
12
|
+
private import memo_core_common::MemoIdentity;
|
|
12
13
|
// A cataloged viewpoint: the Viewpoint descriptor plus its default
|
|
13
14
|
// resolution to a standard SysML v2 view kind.
|
|
14
15
|
|
|
15
16
|
// ── Content and context ─────────────────────────────────────
|
|
16
17
|
viewpoint vpModelContent : MemoViewpoint {
|
|
17
|
-
|
|
18
|
+
@MemoIdentity { :>> providedId = "VP-CAT-001"; } attribute :>> name = "ModelContentViewpoint";
|
|
18
19
|
attribute :>> purpose = "Browse the model tree and package structure.";
|
|
19
20
|
attribute :>> defaultViewKind = DiagramViewKind::browser;
|
|
20
21
|
}
|
|
21
22
|
viewpoint vpSystemContext : MemoViewpoint {
|
|
22
|
-
|
|
23
|
+
@MemoIdentity { :>> providedId = "VP-CAT-002"; } attribute :>> name = "SystemContextViewpoint";
|
|
23
24
|
attribute :>> purpose = "System of interest, actors, external systems, and context exchanges.";
|
|
24
25
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
25
26
|
}
|
|
26
27
|
// ── Operational world ───────────────────────────────────────
|
|
27
28
|
viewpoint vpUseCase : MemoViewpoint {
|
|
28
|
-
|
|
29
|
+
@MemoIdentity { :>> providedId = "VP-CAT-003"; } attribute :>> name = "UseCaseViewpoint";
|
|
29
30
|
attribute :>> purpose = "Use cases, initiating users, supporting actors, and motivating needs.";
|
|
30
31
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
31
32
|
}
|
|
32
33
|
viewpoint vpClinicalWorkflow : MemoViewpoint {
|
|
33
|
-
|
|
34
|
+
@MemoIdentity { :>> providedId = "VP-CAT-004"; } attribute :>> name = "ClinicalWorkflowViewpoint";
|
|
34
35
|
attribute :>> purpose = "Workflow steps, decisions, parallel work, handoffs, and roles.";
|
|
35
36
|
attribute :>> defaultViewKind = DiagramViewKind::actionflow;
|
|
36
37
|
}
|
|
37
38
|
viewpoint vpScenario : MemoViewpoint {
|
|
38
|
-
|
|
39
|
+
@MemoIdentity { :>> providedId = "VP-CAT-005"; } attribute :>> name = "ScenarioViewpoint";
|
|
39
40
|
attribute :>> purpose = "Selected paths through workflows: variants, conditions, variation points.";
|
|
40
41
|
attribute :>> defaultViewKind = DiagramViewKind::actionflow;
|
|
41
42
|
}
|
|
42
43
|
// ── Functional ──────────────────────────────────────────────
|
|
43
44
|
viewpoint vpFunctionalArchitecture : MemoViewpoint {
|
|
44
|
-
|
|
45
|
+
@MemoIdentity { :>> providedId = "VP-CAT-006"; } attribute :>> name = "FunctionalArchitectureViewpoint";
|
|
45
46
|
attribute :>> purpose = "System functions, capabilities, and functional exchanges.";
|
|
46
47
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
47
48
|
}
|
|
48
49
|
viewpoint vpFunctionalFlow : MemoViewpoint {
|
|
49
|
-
|
|
50
|
+
@MemoIdentity { :>> providedId = "VP-CAT-007"; } attribute :>> name = "FunctionalFlowViewpoint";
|
|
50
51
|
attribute :>> purpose = "Ordered functional flows and their steps.";
|
|
51
52
|
attribute :>> defaultViewKind = DiagramViewKind::actionflow;
|
|
52
53
|
}
|
|
53
54
|
// ── Logical ─────────────────────────────────────────────────
|
|
54
55
|
viewpoint vpLogicalArchitecture : MemoViewpoint {
|
|
55
|
-
|
|
56
|
+
@MemoIdentity { :>> providedId = "VP-CAT-008"; } attribute :>> name = "LogicalArchitectureViewpoint";
|
|
56
57
|
attribute :>> purpose = "Logical components, channels, and allocations.";
|
|
57
58
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
58
59
|
}
|
|
59
60
|
viewpoint vpSystemDecomposition : MemoViewpoint {
|
|
60
|
-
|
|
61
|
+
@MemoIdentity { :>> providedId = "VP-CAT-009"; } attribute :>> name = "SystemDecompositionViewpoint";
|
|
61
62
|
attribute :>> purpose = "Composition hierarchy of the system of interest.";
|
|
62
63
|
attribute :>> defaultViewKind = DiagramViewKind::browser;
|
|
63
64
|
}
|
|
64
65
|
viewpoint vpInternalInterconnection : MemoViewpoint {
|
|
65
|
-
|
|
66
|
+
@MemoIdentity { :>> providedId = "VP-CAT-010"; } attribute :>> name = "InternalInterconnectionViewpoint";
|
|
66
67
|
attribute :>> purpose = "Ports, connectors, and exchanges inside a component boundary.";
|
|
67
68
|
attribute :>> defaultViewKind = DiagramViewKind::interconnection;
|
|
68
69
|
}
|
|
69
70
|
// ── Implementation ──────────────────────────────────────────
|
|
70
71
|
viewpoint vpSoftwareModule : MemoViewpoint {
|
|
71
|
-
|
|
72
|
+
@MemoIdentity { :>> providedId = "VP-CAT-011"; } attribute :>> name = "SoftwareModuleViewpoint";
|
|
72
73
|
attribute :>> purpose = "IEC 62304 module structure: systems, items, units, SOUP.";
|
|
73
74
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
74
75
|
}
|
|
75
76
|
viewpoint vpSoftwareComponents : MemoViewpoint {
|
|
76
|
-
|
|
77
|
+
@MemoIdentity { :>> providedId = "VP-CAT-012"; } attribute :>> name = "SoftwareComponentViewpoint";
|
|
77
78
|
attribute :>> purpose = "Runtime component-and-connector structure with concurrency and scheduling.";
|
|
78
79
|
attribute :>> defaultViewKind = DiagramViewKind::interconnection;
|
|
79
80
|
}
|
|
80
81
|
viewpoint vpHardwareArchitecture : MemoViewpoint {
|
|
81
|
-
|
|
82
|
+
@MemoIdentity { :>> providedId = "VP-CAT-013"; } attribute :>> name = "HardwareArchitectureViewpoint";
|
|
82
83
|
attribute :>> purpose = "Electronic/electrical structure and processing platform.";
|
|
83
84
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
84
85
|
}
|
|
85
86
|
viewpoint vpPhysicalArchitecture : MemoViewpoint {
|
|
86
|
-
|
|
87
|
+
@MemoIdentity { :>> providedId = "VP-CAT-014"; } attribute :>> name = "PhysicalArchitectureViewpoint";
|
|
87
88
|
attribute :>> purpose = "Mechanical, fluidic, optical, and other physical realization.";
|
|
88
89
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
89
90
|
}
|
|
90
91
|
viewpoint vpDeviceComposition : MemoViewpoint {
|
|
91
|
-
|
|
92
|
+
@MemoIdentity { :>> providedId = "VP-CAT-015"; } attribute :>> name = "DeviceCompositionViewpoint";
|
|
92
93
|
attribute :>> purpose = "Device definitions, instances, accessories, and consumables.";
|
|
93
94
|
attribute :>> defaultViewKind = DiagramViewKind::browser;
|
|
94
95
|
}
|
|
95
96
|
viewpoint vpNetworkDeployment : MemoViewpoint {
|
|
96
|
-
|
|
97
|
+
@MemoIdentity { :>> providedId = "VP-CAT-016"; } attribute :>> name = "NetworkDeploymentViewpoint";
|
|
97
98
|
attribute :>> purpose = "Deployment units on processing nodes and network topology.";
|
|
98
99
|
attribute :>> defaultViewKind = DiagramViewKind::interconnection;
|
|
99
100
|
}
|
|
100
101
|
// ── Interaction and behavior ────────────────────────────────
|
|
101
102
|
viewpoint vpUiFlow : MemoViewpoint {
|
|
102
|
-
|
|
103
|
+
@MemoIdentity { :>> providedId = "VP-CAT-017"; } attribute :>> name = "UiFlowViewpoint";
|
|
103
104
|
attribute :>> purpose = "Interaction flows, UI states, and transitions.";
|
|
104
105
|
attribute :>> defaultViewKind = DiagramViewKind::statetransition;
|
|
105
106
|
}
|
|
106
107
|
viewpoint vpStateMode : MemoViewpoint {
|
|
107
|
-
|
|
108
|
+
@MemoIdentity { :>> providedId = "VP-CAT-018"; } attribute :>> name = "StateModeViewpoint";
|
|
108
109
|
attribute :>> purpose = "System states, device modes, and transitions.";
|
|
109
110
|
attribute :>> defaultViewKind = DiagramViewKind::statetransition;
|
|
110
111
|
}
|
|
111
112
|
viewpoint vpSequenceInteraction : MemoViewpoint {
|
|
112
|
-
|
|
113
|
+
@MemoIdentity { :>> providedId = "VP-CAT-019"; } attribute :>> name = "SequenceInteractionViewpoint";
|
|
113
114
|
attribute :>> purpose = "Ordered message exchanges between participants in a scenario.";
|
|
114
115
|
attribute :>> defaultViewKind = DiagramViewKind::sequence;
|
|
115
116
|
}
|
|
116
117
|
// ── Assurance ───────────────────────────────────────────────
|
|
117
118
|
viewpoint vpRequirementsTraceability : MemoViewpoint {
|
|
118
|
-
|
|
119
|
+
@MemoIdentity { :>> providedId = "VP-CAT-020"; } attribute :>> name = "RequirementsTraceabilityViewpoint";
|
|
119
120
|
attribute :>> purpose = "Needs → requirements → architecture → verification trace matrix.";
|
|
120
121
|
attribute :>> defaultViewKind = DiagramViewKind::grid;
|
|
121
122
|
}
|
|
122
123
|
viewpoint vpRiskChain : MemoViewpoint {
|
|
123
|
-
|
|
124
|
+
@MemoIdentity { :>> providedId = "VP-CAT-021"; } attribute :>> name = "RiskChainViewpoint";
|
|
124
125
|
attribute :>> purpose = "ISO 14971 chain: hazard → hazardous situation → harm with controls.";
|
|
125
126
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
126
127
|
}
|
|
127
128
|
viewpoint vpCybersecurity : MemoViewpoint {
|
|
128
|
-
|
|
129
|
+
@MemoIdentity { :>> providedId = "VP-CAT-022"; } attribute :>> name = "CybersecurityViewpoint";
|
|
129
130
|
attribute :>> purpose = "Assets, threats, trust boundaries, and security controls.";
|
|
130
131
|
attribute :>> defaultViewKind = DiagramViewKind::general;
|
|
131
132
|
}
|
|
132
133
|
viewpoint vpHumanFactors : MemoViewpoint {
|
|
133
|
-
|
|
134
|
+
@MemoIdentity { :>> providedId = "VP-CAT-023"; } attribute :>> name = "HumanFactorsViewpoint";
|
|
134
135
|
attribute :>> purpose = "Users, tasks, use errors, and hazard-related use scenarios.";
|
|
135
136
|
attribute :>> defaultViewKind = DiagramViewKind::grid;
|
|
136
137
|
}
|
|
137
138
|
viewpoint vpVerificationCoverage : MemoViewpoint {
|
|
138
|
-
|
|
139
|
+
@MemoIdentity { :>> providedId = "VP-CAT-024"; } attribute :>> name = "VerificationCoverageViewpoint";
|
|
139
140
|
attribute :>> purpose = "Verification cases against requirements and functions.";
|
|
140
141
|
attribute :>> defaultViewKind = DiagramViewKind::grid;
|
|
141
142
|
}
|
|
142
143
|
viewpoint vpValidationCoverage : MemoViewpoint {
|
|
143
|
-
|
|
144
|
+
@MemoIdentity { :>> providedId = "VP-CAT-025"; } attribute :>> name = "ValidationCoverageViewpoint";
|
|
144
145
|
attribute :>> purpose = "Validation cases against use cases and critical tasks.";
|
|
145
146
|
attribute :>> defaultViewKind = DiagramViewKind::grid;
|
|
146
147
|
}
|
|
147
148
|
viewpoint vpEvidenceTraceability : MemoViewpoint {
|
|
148
|
-
|
|
149
|
+
@MemoIdentity { :>> providedId = "VP-CAT-026"; } attribute :>> name = "EvidenceTraceabilityViewpoint";
|
|
149
150
|
attribute :>> purpose = "Evidence records back to the cases and elements they support.";
|
|
150
151
|
attribute :>> defaultViewKind = DiagramViewKind::grid;
|
|
151
152
|
}
|
|
@@ -154,14 +155,14 @@ package memo_viewpoints_catalog {
|
|
|
154
155
|
// SoftwareComponents realizing a functional OperativeScenario. The viewpoint is the
|
|
155
156
|
// reusable spec; the diagram of a specific model is the view.
|
|
156
157
|
viewpoint vpSoftwareSequence : MemoViewpoint {
|
|
157
|
-
|
|
158
|
+
@MemoIdentity { :>> providedId = "VP-CAT-027"; } attribute :>> name = "SoftwareSequenceViewpoint";
|
|
158
159
|
attribute :>> purpose = "Runtime message ordering between software components along a functional scenario.";
|
|
159
160
|
attribute :>> defaultViewKind = DiagramViewKind::sequence;
|
|
160
161
|
}
|
|
161
162
|
// The first cataloged viewpoint to resolve to `geometry`: screen regions
|
|
162
163
|
// carry authored RegionBounds, so a geometry view draws modelled facts.
|
|
163
164
|
viewpoint vpUILayout : MemoViewpoint {
|
|
164
|
-
|
|
165
|
+
@MemoIdentity { :>> providedId = "VP-CAT-028"; } attribute :>> name = "UILayoutViewpoint";
|
|
165
166
|
attribute :>> purpose = "Captured screens with their marked regions and the UI elements those regions present.";
|
|
166
167
|
attribute :>> defaultViewKind = DiagramViewKind::geometry;
|
|
167
168
|
}
|
|
@@ -4,10 +4,12 @@ package memo_viewpoints_clinical_clinical_viewpoint {
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
|
+
private import memo_core_common::*;
|
|
8
|
+
private import memo_core_common::MemoIdentity;
|
|
7
9
|
viewpoint clinicalViewpoint : MemoViewpoint {
|
|
8
|
-
|
|
10
|
+
@MemoIdentity { :>> providedId = "VP-CLIN"; }
|
|
9
11
|
attribute :>> name = "ClinicalViewpoint";
|
|
10
|
-
|
|
12
|
+
@MemoIdentity { :>> shortDescription = "Shows clinical context, users, use environment, and clinical evidence."; }
|
|
11
13
|
attribute :>> description = "Default viewpoint derived from the context and assurance layers for clinical stakeholders — intended use, patient/clinician interaction, clinical evidence, and clinical safety claims.";
|
|
12
14
|
attribute :>> purpose = "Communicate clinical use context and clinical evidence for the device.";
|
|
13
15
|
attribute :>> audience = (AudienceKind::clinicalEngineer, AudienceKind::regulatoryEngineer);
|
|
@@ -4,10 +4,12 @@ package memo_viewpoints_context_context_viewpoint {
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
|
+
private import memo_core_common::*;
|
|
8
|
+
private import memo_core_common::MemoIdentity;
|
|
7
9
|
viewpoint contextViewpoint : MemoViewpoint {
|
|
8
|
-
|
|
10
|
+
@MemoIdentity { :>> providedId = "VP-CTX"; }
|
|
9
11
|
attribute :>> name = "ContextViewpoint";
|
|
10
|
-
|
|
12
|
+
@MemoIdentity { :>> shortDescription = "Shows actors, use context, and system boundary."; }
|
|
11
13
|
attribute :>> description = "Default viewpoint derived from the context layer to communicate who interacts with the device, under which use conditions, and where trust or safety boundaries exist.";
|
|
12
14
|
attribute :>> purpose = "Communicate operational context and boundaries.";
|
|
13
15
|
attribute :>> audience = (AudienceKind::systemArchitect);
|
|
@@ -28,7 +30,7 @@ package memo_viewpoints_context_context_viewpoint {
|
|
|
28
30
|
// boundary picture. Projects derive their own verbs from it and are
|
|
29
31
|
// picked up through the specialization closure. The three older
|
|
30
32
|
// relations remain for models authored before it existed.
|
|
31
|
-
attribute :>> allowedRelationshipKinds = ("InteractsInContext", "
|
|
33
|
+
attribute :>> allowedRelationshipKinds = ("InteractsInContext", "connect", "flow", "bind");
|
|
32
34
|
attribute :>> userExtensible = true;
|
|
33
35
|
}
|
|
34
36
|
}
|
|
@@ -5,19 +5,21 @@ package memo_viewpoints_context_views_system_context_view {
|
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
private import memo_viewpoints_context_context_viewpoint::*;
|
|
7
7
|
|
|
8
|
+
private import memo_core_common::*;
|
|
9
|
+
private import memo_core_common::MemoIdentity;
|
|
8
10
|
view systemContextView : MemoDiagramView {
|
|
9
11
|
expose memo_viewpoints_context_views_system_context_view::*;
|
|
10
12
|
attribute depth = 2;
|
|
11
|
-
|
|
13
|
+
@MemoIdentity { :>> providedId = "VIEW-CTX-001"; }
|
|
12
14
|
attribute :>> name = "SystemContextView";
|
|
13
|
-
|
|
15
|
+
@MemoIdentity { :>> shortDescription = "Actors, use context, and system boundary."; }
|
|
14
16
|
attribute :>> outputKind = (ViewOutputKind::diagram);
|
|
15
17
|
attribute :>> presentationKind = (PresentationKind::blockDiagram);
|
|
16
18
|
attribute :>> diagramType = "bdd";
|
|
17
19
|
attribute :>> autoPopulate = true;
|
|
18
20
|
attribute :>> queryDescription = "Include actors, use contexts, and trust boundaries at the system boundary.";
|
|
19
21
|
part :>> selectionQuery {
|
|
20
|
-
|
|
22
|
+
@MemoIdentity { :>> providedId = "QRY-CTX-001"; }
|
|
21
23
|
attribute :>> name = "SystemContextQuery";
|
|
22
24
|
attribute :>> includeElementKinds = ("Actor", "UseContext", "TrustBoundary");
|
|
23
25
|
attribute :>> includeLayers = ("context");
|
|
@@ -4,10 +4,12 @@ package memo_viewpoints_cybersecurity_cybersecurity_viewpoint {
|
|
|
4
4
|
private import memo_viewpoints_definitions::*;
|
|
5
5
|
private import memo_core_enumerations::*;
|
|
6
6
|
|
|
7
|
+
private import memo_core_common::*;
|
|
8
|
+
private import memo_core_common::MemoIdentity;
|
|
7
9
|
viewpoint cybersecurityViewpoint : MemoViewpoint {
|
|
8
|
-
|
|
10
|
+
@MemoIdentity { :>> providedId = "VP-CYB"; }
|
|
9
11
|
attribute :>> name = "CybersecurityViewpoint";
|
|
10
|
-
|
|
12
|
+
@MemoIdentity { :>> shortDescription = "Shows assets, trust boundaries, threats, vulnerabilities, cyber hazards, cyber risks, and mitigations."; }
|
|
11
13
|
attribute :>> description = "Default viewpoint derived from the cybersecurity layer, using STRIDE-style threat categories by default while allowing safety and privacy impacts to be traced into the broader model.";
|
|
12
14
|
attribute :>> purpose = "Communicate cybersecurity design, threat analysis, and cyber risk posture.";
|
|
13
15
|
attribute :>> audience = (AudienceKind::securityEngineer);
|