@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
|
@@ -7,6 +7,7 @@ package memo_core_relationships {
|
|
|
7
7
|
private import memo_core_common::*;
|
|
8
8
|
private import memo_core_enumerations::*;
|
|
9
9
|
|
|
10
|
+
private import Allocations::Allocation;
|
|
10
11
|
// All MEMO relations are native SysML v2 `connection def`s (each is a
|
|
11
12
|
// Connection/Association), specializing the MemoRelationship base. The
|
|
12
13
|
// relationship name is the verb; the RelationshipRegistry derives the
|
|
@@ -107,17 +108,6 @@ package memo_core_relationships {
|
|
|
107
108
|
// only when no specific relation carries the meaning, and say why in the
|
|
108
109
|
// inherited `rationale` — an untyped link with no stated reason is an
|
|
109
110
|
// audit gap, not a model fact.
|
|
110
|
-
connection def MemoLink :> MemoRelationship {
|
|
111
|
-
doc /* Generic association between any two model elements. */
|
|
112
|
-
end linkSource :>> source;
|
|
113
|
-
end linkTarget :>> target;
|
|
114
|
-
}
|
|
115
|
-
abstract connection memoLinkLinks : MemoLink[*];
|
|
116
|
-
metadata def <memoLink> MemoLinkMetadata :> SemanticMetadata {
|
|
117
|
-
:> annotatedElement : SysML::ConnectionDefinition;
|
|
118
|
-
:> annotatedElement : SysML::ConnectionUsage;
|
|
119
|
-
:>> baseType = memoLinkLinks meta SysML::Usage;
|
|
120
|
-
}
|
|
121
111
|
|
|
122
112
|
connection def DerivesFrom :> MemoRelationship {
|
|
123
113
|
// Drivers span metaclasses — a need is a requirement def, a hazard an
|
|
@@ -206,57 +196,40 @@ package memo_core_relationships {
|
|
|
206
196
|
|
|
207
197
|
// Enables unifies the former EnablesWorkflow / EnablesActivity synonyms
|
|
208
198
|
// (an enabling system/function enables a workflow/activity).
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
213
|
-
abstract connection enablesLinks : Enables[*];
|
|
214
|
-
metadata def <enables> EnablesMetadata :> SemanticMetadata {
|
|
215
|
-
:> annotatedElement : SysML::ConnectionDefinition;
|
|
216
|
-
:> annotatedElement : SysML::ConnectionUsage;
|
|
217
|
-
:>> baseType = enablesLinks meta SysML::Usage;
|
|
218
|
-
}
|
|
199
|
+
// `Enables` is native `dependency` (2026-08-18): write
|
|
200
|
+
// `dependency from <enabling> to <enabled>;`. Same call as `Supports`,
|
|
201
|
+
// which was deleted as a duplicate of both `dependency` and `Enables`.
|
|
219
202
|
|
|
220
|
-
|
|
203
|
+
// A processing node hosted by an assembly is allocated to it. The end
|
|
204
|
+
// NAMES were already right; two of the three usages wrote them in reverse
|
|
205
|
+
// order, and the builder binds by position, so those two edges pointed the
|
|
206
|
+
// wrong way. See the reversed-end-name lint in memo-tools.
|
|
207
|
+
allocation def HostedBy :> MemoRelationship, Allocations::Allocation {
|
|
221
208
|
end processingNode : MemoPart :>> source;
|
|
222
209
|
end hostAssembly : MemoPart :>> target;
|
|
223
210
|
}
|
|
224
211
|
abstract connection hostedByLinks : HostedBy[*];
|
|
225
212
|
metadata def <hostedBy> HostedByMetadata :> SemanticMetadata {
|
|
226
|
-
:> annotatedElement : SysML::
|
|
227
|
-
:> annotatedElement : SysML::
|
|
213
|
+
:> annotatedElement : SysML::AllocationDefinition;
|
|
214
|
+
:> annotatedElement : SysML::AllocationUsage;
|
|
228
215
|
:>> baseType = hostedByLinks meta SysML::Usage;
|
|
229
216
|
}
|
|
230
217
|
|
|
231
218
|
|
|
232
219
|
|
|
233
220
|
|
|
234
|
-
// Composes is
|
|
235
|
-
//
|
|
236
|
-
//
|
|
237
|
-
//
|
|
238
|
-
//
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
:> annotatedElement : SysML::ConnectionDefinition;
|
|
246
|
-
:> annotatedElement : SysML::ConnectionUsage;
|
|
247
|
-
:>> baseType = composesLinks meta SysML::Usage;
|
|
248
|
-
}
|
|
221
|
+
// `Composes` is deleted (R10-S7). Containment is NESTING — the child is
|
|
222
|
+
// declared inside the parent — which is how SysML v2 models composition:
|
|
223
|
+
// composite feature ownership, not a link. The relation specialized
|
|
224
|
+
// `Connections::BinaryConnection`, "a link between two things WITHIN some
|
|
225
|
+
// containing structure", so it was the wrong category for the containment
|
|
226
|
+
// itself, and the corpus has no composition connection to specialize.
|
|
227
|
+
//
|
|
228
|
+
// Nothing is lost: the builder synthesizes a `composes` edge from every
|
|
229
|
+
// nested part and item, so rules, the DSM and traceability read exactly the
|
|
230
|
+
// graph they read before. The edge type is registered natively in
|
|
231
|
+
// memo-tools' relationship registry.
|
|
249
232
|
|
|
250
|
-
connection def AnalyzedBy :> MemoRelationship {
|
|
251
|
-
end element : MemoPart :>> source;
|
|
252
|
-
end analysisArtifact : AnalysisArtifact :>> target;
|
|
253
|
-
}
|
|
254
|
-
abstract connection analyzedByLinks : AnalyzedBy[*];
|
|
255
|
-
metadata def <analyzedBy> AnalyzedByMetadata :> SemanticMetadata {
|
|
256
|
-
:> annotatedElement : SysML::ConnectionDefinition;
|
|
257
|
-
:> annotatedElement : SysML::ConnectionUsage;
|
|
258
|
-
:>> baseType = analyzedByLinks meta SysML::Usage;
|
|
259
|
-
}
|
|
260
233
|
|
|
261
234
|
connection def BindsToInterface :> MemoRelationship {
|
|
262
235
|
end portElement :>> source;
|
|
@@ -3,8 +3,10 @@ package memo_methodology_archetypes {
|
|
|
3
3
|
|
|
4
4
|
private import memo_methodology_core::*;
|
|
5
5
|
|
|
6
|
+
private import memo_core_common::*;
|
|
7
|
+
private import memo_core_common::MemoIdentity;
|
|
6
8
|
part minimal : Archetype {
|
|
7
|
-
|
|
9
|
+
@MemoIdentity { :>> providedId = "ARCH-MINIMAL"; }
|
|
8
10
|
attribute :>> name = "Minimal";
|
|
9
11
|
attribute :>> label = "Minimal";
|
|
10
12
|
attribute :>> description = "Core ontology only — requirements, hazards, basic architecture (~53 kinds)";
|
|
@@ -15,7 +17,7 @@ package memo_methodology_archetypes {
|
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
part standardArchetype : Archetype {
|
|
18
|
-
|
|
20
|
+
@MemoIdentity { :>> providedId = "ARCH-STANDARD"; }
|
|
19
21
|
attribute :>> name = "Standard";
|
|
20
22
|
attribute :>> label = "Standard";
|
|
21
23
|
attribute :>> description = "Core + risk + software + DHF — covers most Class II devices (~120 kinds)";
|
|
@@ -26,7 +28,7 @@ package memo_methodology_archetypes {
|
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
part full : Archetype {
|
|
29
|
-
|
|
31
|
+
@MemoIdentity { :>> providedId = "ARCH-FULL"; }
|
|
30
32
|
attribute :>> name = "Full";
|
|
31
33
|
attribute :>> label = "Full";
|
|
32
34
|
attribute :>> description = "All architecture layers, standards, and extensions (~200+ kinds)";
|
|
@@ -37,7 +39,7 @@ package memo_methodology_archetypes {
|
|
|
37
39
|
}
|
|
38
40
|
|
|
39
41
|
part samd : Archetype {
|
|
40
|
-
|
|
42
|
+
@MemoIdentity { :>> providedId = "ARCH-SAMD"; }
|
|
41
43
|
attribute :>> name = "SaMD";
|
|
42
44
|
attribute :>> label = "Software as Medical Device (SaMD)";
|
|
43
45
|
attribute :>> description = "Clinical decision support, diagnostic algorithm, AI/ML tool, mobile medical app";
|
|
@@ -48,7 +50,7 @@ package memo_methodology_archetypes {
|
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
part connected : Archetype {
|
|
51
|
-
|
|
53
|
+
@MemoIdentity { :>> providedId = "ARCH-CONNECTED"; }
|
|
52
54
|
attribute :>> name = "Connected";
|
|
53
55
|
attribute :>> label = "Connected / IoT Device";
|
|
54
56
|
attribute :>> description = "Remote monitoring, wearable, smart device with cloud connectivity and cybersecurity requirements";
|
|
@@ -59,7 +61,7 @@ package memo_methodology_archetypes {
|
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
part monitoring : Archetype {
|
|
62
|
-
|
|
64
|
+
@MemoIdentity { :>> providedId = "ARCH-MONITORING"; }
|
|
63
65
|
attribute :>> name = "Monitoring";
|
|
64
66
|
attribute :>> label = "Monitoring / Diagnostic Device";
|
|
65
67
|
attribute :>> description = "Patient monitor, ECG, SpO2, vital signs, bedside diagnostic equipment";
|
|
@@ -70,7 +72,7 @@ package memo_methodology_archetypes {
|
|
|
70
72
|
}
|
|
71
73
|
|
|
72
74
|
part infusion_pump : Archetype {
|
|
73
|
-
|
|
75
|
+
@MemoIdentity { :>> providedId = "ARCH-INFUSION"; }
|
|
74
76
|
attribute :>> name = "InfusionPump";
|
|
75
77
|
attribute :>> label = "Infusion / Drug Delivery Device";
|
|
76
78
|
attribute :>> description = "Infusion pump, syringe driver, implantable drug delivery, dosing device";
|
|
@@ -81,7 +83,7 @@ package memo_methodology_archetypes {
|
|
|
81
83
|
}
|
|
82
84
|
|
|
83
85
|
part blank : Archetype {
|
|
84
|
-
|
|
86
|
+
@MemoIdentity { :>> providedId = "ARCH-BLANK"; }
|
|
85
87
|
attribute :>> name = "Blank";
|
|
86
88
|
attribute :>> label = "Blank Project";
|
|
87
89
|
attribute :>> description = "Start from scratch with a minimal SysML shell";
|
|
@@ -113,14 +113,4 @@ package memo_methodology_core {
|
|
|
113
113
|
// ── Relations owned by this package ─────────────────────────────
|
|
114
114
|
// Moved out of memo_core_relationships: their ends are typed against
|
|
115
115
|
// types declared here, and core must not depend on a domain package.
|
|
116
|
-
connection def ResolvesToMethodology :> MemoRelationship {
|
|
117
|
-
end boundModelElement : MemoPart :>> source;
|
|
118
|
-
end resolvedMethodology : MethodologyDefinition :>> target;
|
|
119
|
-
}
|
|
120
|
-
abstract connection resolvesToMethodologyLinks : ResolvesToMethodology[*];
|
|
121
|
-
metadata def <resolvesToMethodology> ResolvesToMethodologyMetadata :> SemanticMetadata {
|
|
122
|
-
:> annotatedElement : SysML::ConnectionDefinition;
|
|
123
|
-
:> annotatedElement : SysML::ConnectionUsage;
|
|
124
|
-
:>> baseType = resolvesToMethodologyLinks meta SysML::Usage;
|
|
125
|
-
}
|
|
126
116
|
}
|
|
@@ -9,8 +9,10 @@ package memo_methodology_profiles {
|
|
|
9
9
|
private import memo_core_enumerations::*;
|
|
10
10
|
private import memo_core_methodology_scope::*;
|
|
11
11
|
|
|
12
|
+
private import memo_core_common::*;
|
|
13
|
+
private import memo_core_common::MemoIdentity;
|
|
12
14
|
part mdCoreLibrary : MethodologyLibrary {
|
|
13
|
-
|
|
15
|
+
@MemoIdentity { :>> providedId = "METHLIB-001"; }
|
|
14
16
|
attribute :>> name = "MedicalDeviceMethodologyLibrary";
|
|
15
17
|
attribute :>> version = "0.1";
|
|
16
18
|
attribute :>> domain = "medical device modeling";
|
|
@@ -31,7 +33,7 @@ package memo_methodology_profiles {
|
|
|
31
33
|
// that into `allAvailable` preserves the effective result and removes the
|
|
32
34
|
// second scope authority.
|
|
33
35
|
part mdDefaultDefinition : MethodologyDefinition {
|
|
34
|
-
|
|
36
|
+
@MemoIdentity { :>> providedId = "METH-MD-DEFAULT"; }
|
|
35
37
|
attribute :>> name = "MedicalDeviceDefault";
|
|
36
38
|
attribute :>> version = "0.6.5";
|
|
37
39
|
attribute :>> domain = "medical device modeling";
|
|
@@ -40,7 +42,7 @@ package memo_methodology_profiles {
|
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
part useRiskAndResidualRule : ElementUsageRule {
|
|
43
|
-
|
|
45
|
+
@MemoIdentity { :>> providedId = "RULE-001"; }
|
|
44
46
|
attribute :>> name = "UseRiskAndResidualRisk";
|
|
45
47
|
attribute :>> elementTypeName = "Risk,ResidualRisk,RiskMatrix";
|
|
46
48
|
attribute :>> strength = RuleStrengthKind::recommended;
|
|
@@ -48,7 +50,7 @@ package memo_methodology_profiles {
|
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
part requireVerifiedByRule : RelationUsageRule {
|
|
51
|
-
|
|
53
|
+
@MemoIdentity { :>> providedId = "RULE-002"; }
|
|
52
54
|
attribute :>> name = "VerifiedBysRequired";
|
|
53
55
|
attribute :>> relationTypeName = "verify";
|
|
54
56
|
attribute :>> strength = RuleStrengthKind::required;
|
|
@@ -56,7 +58,7 @@ package memo_methodology_profiles {
|
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
part lightRiskPattern : ModelingPattern {
|
|
59
|
-
|
|
61
|
+
@MemoIdentity { :>> providedId = "PAT-001"; }
|
|
60
62
|
attribute :>> name = "LightRiskBeforeAfterPattern";
|
|
61
63
|
attribute :>> intent = "Model hazard chain, before/after mitigation risk, controls, and residual evaluation in a lightweight way.";
|
|
62
64
|
attribute :>> stage = WorkflowStageKind::risk;
|
|
@@ -64,7 +66,7 @@ package memo_methodology_profiles {
|
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
part lightTracePattern : ModelingPattern {
|
|
67
|
-
|
|
69
|
+
@MemoIdentity { :>> providedId = "PAT-002"; }
|
|
68
70
|
attribute :>> name = "CoreTracePattern";
|
|
69
71
|
attribute :>> intent = "Need or risk to requirement, requirement to architecture, requirement/control to verification.";
|
|
70
72
|
attribute :>> stage = WorkflowStageKind::requirements;
|
|
@@ -72,7 +74,7 @@ package memo_methodology_profiles {
|
|
|
72
74
|
}
|
|
73
75
|
|
|
74
76
|
action stepRequirements : MethodologyWorkflowStep {
|
|
75
|
-
|
|
77
|
+
@MemoIdentity { :>> providedId = "STEP-001"; }
|
|
76
78
|
attribute :>> name = "CaptureRequirements";
|
|
77
79
|
attribute :>> stage = WorkflowStageKind::requirements;
|
|
78
80
|
attribute :>> objectiveDescription = "Capture stakeholder needs and derive requirements.";
|
|
@@ -81,7 +83,7 @@ package memo_methodology_profiles {
|
|
|
81
83
|
}
|
|
82
84
|
|
|
83
85
|
action stepArchitecture : MethodologyWorkflowStep {
|
|
84
|
-
|
|
86
|
+
@MemoIdentity { :>> providedId = "STEP-002"; }
|
|
85
87
|
attribute :>> name = "DefineArchitecture";
|
|
86
88
|
attribute :>> stage = WorkflowStageKind::architecture;
|
|
87
89
|
attribute :>> objectiveDescription = "Define key software and hardware architecture elements and interfaces.";
|
|
@@ -90,7 +92,7 @@ package memo_methodology_profiles {
|
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
action stepRisk : MethodologyWorkflowStep {
|
|
93
|
-
|
|
95
|
+
@MemoIdentity { :>> providedId = "STEP-003"; }
|
|
94
96
|
attribute :>> name = "PerformRiskAnalysis";
|
|
95
97
|
attribute :>> stage = WorkflowStageKind::risk;
|
|
96
98
|
attribute :>> objectiveDescription = "Create core risk chain and controls.";
|
|
@@ -99,7 +101,7 @@ package memo_methodology_profiles {
|
|
|
99
101
|
}
|
|
100
102
|
|
|
101
103
|
action stepVerification : MethodologyWorkflowStep {
|
|
102
|
-
|
|
104
|
+
@MemoIdentity { :>> providedId = "STEP-004"; }
|
|
103
105
|
attribute :>> name = "PlanVerification";
|
|
104
106
|
attribute :>> stage = WorkflowStageKind::verificationStage;
|
|
105
107
|
attribute :>> objectiveDescription = "Define verification and evidence expectations.";
|
|
@@ -111,7 +113,7 @@ package memo_methodology_profiles {
|
|
|
111
113
|
first stepRisk then stepVerification;
|
|
112
114
|
|
|
113
115
|
part gateLightComplete : QualityGate {
|
|
114
|
-
|
|
116
|
+
@MemoIdentity { :>> providedId = "GATE-001"; }
|
|
115
117
|
attribute :>> name = "LightMethodReady";
|
|
116
118
|
attribute :>> gateStage = WorkflowStageKind::verificationStage;
|
|
117
119
|
attribute :>> passCriteria = "Core traceability, risk, verification, and RMF view support are present.";
|
|
@@ -123,7 +125,7 @@ package memo_methodology_profiles {
|
|
|
123
125
|
// references its methodology with a typed SysML reference.
|
|
124
126
|
|
|
125
127
|
part rmpDoc : DhfDocumentBinding {
|
|
126
|
-
|
|
128
|
+
@MemoIdentity { :>> providedId = "DHF-001"; }
|
|
127
129
|
attribute :>> name = "RiskManagementPlan";
|
|
128
130
|
attribute :>> documentTitle = "Risk Management Plan";
|
|
129
131
|
attribute :>> groupLabel = "Risk Management";
|
|
@@ -135,7 +137,7 @@ package memo_methodology_profiles {
|
|
|
135
137
|
}
|
|
136
138
|
|
|
137
139
|
part harDoc : DhfDocumentBinding {
|
|
138
|
-
|
|
140
|
+
@MemoIdentity { :>> providedId = "DHF-002"; }
|
|
139
141
|
attribute :>> name = "HazardAnalysisReport";
|
|
140
142
|
attribute :>> documentTitle = "Hazard Analysis Report";
|
|
141
143
|
attribute :>> groupLabel = "Risk Management";
|
|
@@ -147,7 +149,7 @@ package memo_methodology_profiles {
|
|
|
147
149
|
}
|
|
148
150
|
|
|
149
151
|
part sadDoc : DhfDocumentBinding {
|
|
150
|
-
|
|
152
|
+
@MemoIdentity { :>> providedId = "DHF-003"; }
|
|
151
153
|
attribute :>> name = "SoftwareArchitectureDescription";
|
|
152
154
|
attribute :>> documentTitle = "Software Architecture Description";
|
|
153
155
|
attribute :>> groupLabel = "Software";
|
|
@@ -159,7 +161,7 @@ package memo_methodology_profiles {
|
|
|
159
161
|
}
|
|
160
162
|
|
|
161
163
|
part threatModelDoc : DhfDocumentBinding {
|
|
162
|
-
|
|
164
|
+
@MemoIdentity { :>> providedId = "DHF-004"; }
|
|
163
165
|
attribute :>> name = "CybersecurityThreatModel";
|
|
164
166
|
attribute :>> documentTitle = "Threat Model";
|
|
165
167
|
attribute :>> groupLabel = "Cybersecurity";
|
|
@@ -171,7 +173,7 @@ package memo_methodology_profiles {
|
|
|
171
173
|
}
|
|
172
174
|
|
|
173
175
|
part vvPlanDoc : DhfDocumentBinding {
|
|
174
|
-
|
|
176
|
+
@MemoIdentity { :>> providedId = "DHF-005"; }
|
|
175
177
|
attribute :>> name = "VerificationValidationPlan";
|
|
176
178
|
attribute :>> documentTitle = "V&V Plan";
|
|
177
179
|
attribute :>> groupLabel = "Verification & Validation";
|
|
@@ -7,10 +7,12 @@ package memo_rules_closure {
|
|
|
7
7
|
private import memo_core_consistency_rules::*;
|
|
8
8
|
private import memo_core_enumerations::*;
|
|
9
9
|
|
|
10
|
+
private import memo_core_common::*;
|
|
11
|
+
private import memo_core_common::MemoIdentity;
|
|
10
12
|
// ─── Risk Layer Rules ────────────────────────────────────────────────
|
|
11
13
|
|
|
12
14
|
constraint def HazardMitigationRule :> MemoConsistencyRule {
|
|
13
|
-
|
|
15
|
+
@MemoIdentity { :>> providedId = "CR-MED-001"; }
|
|
14
16
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
15
17
|
attribute appliesTo = "Hazard";
|
|
16
18
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -20,7 +22,7 @@ package memo_rules_closure {
|
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
constraint def HazardSeverityRule :> MemoConsistencyRule {
|
|
23
|
-
|
|
25
|
+
@MemoIdentity { :>> providedId = "CR-MED-002"; }
|
|
24
26
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
25
27
|
attribute appliesTo = "Hazard";
|
|
26
28
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -30,7 +32,7 @@ package memo_rules_closure {
|
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
constraint def RiskControlVerificationRule :> MemoConsistencyRule {
|
|
33
|
-
|
|
35
|
+
@MemoIdentity { :>> providedId = "CR-MED-003"; }
|
|
34
36
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
35
37
|
attribute appliesTo = "RiskControlMeasure";
|
|
36
38
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -40,7 +42,7 @@ package memo_rules_closure {
|
|
|
40
42
|
}
|
|
41
43
|
|
|
42
44
|
constraint def InitialRiskMatrixRule :> MemoConsistencyRule {
|
|
43
|
-
|
|
45
|
+
@MemoIdentity { :>> providedId = "CR-MED-004"; }
|
|
44
46
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
45
47
|
attribute appliesTo = "Risk";
|
|
46
48
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -52,9 +54,9 @@ package memo_rules_closure {
|
|
|
52
54
|
// ─── Requirements Layer Rules ────────────────────────────────────────
|
|
53
55
|
|
|
54
56
|
constraint def SysReqTraceRule :> MemoConsistencyRule {
|
|
55
|
-
|
|
57
|
+
@MemoIdentity { :>> providedId = "CR-MED-010"; }
|
|
56
58
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
57
|
-
attribute appliesTo = "Requirement[
|
|
59
|
+
attribute appliesTo = "Requirement[requirementType=system]";
|
|
58
60
|
attribute severity = RuleSeverityKind::error;
|
|
59
61
|
attribute rationaleText = "Requirements shall be traceable to stakeholder needs per ISO 13485.";
|
|
60
62
|
attribute predicateExpression = "derivesFrom->size() >= 1";
|
|
@@ -62,9 +64,9 @@ package memo_rules_closure {
|
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
constraint def SwReqTraceRule :> MemoConsistencyRule {
|
|
65
|
-
|
|
67
|
+
@MemoIdentity { :>> providedId = "CR-MED-011"; }
|
|
66
68
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
67
|
-
attribute appliesTo = "Requirement[
|
|
69
|
+
attribute appliesTo = "Requirement[requirementType=software]";
|
|
68
70
|
attribute severity = RuleSeverityKind::error;
|
|
69
71
|
attribute rationaleText = "Software requirements derive from system requirements per IEC 62304.";
|
|
70
72
|
attribute predicateExpression = "derivesFrom->size() >= 1";
|
|
@@ -80,7 +82,7 @@ package memo_rules_closure {
|
|
|
80
82
|
// ─── Architecture Layer Rules ────────────────────────────────────────
|
|
81
83
|
|
|
82
84
|
constraint def SwComponentSafetyClassRule :> MemoConsistencyRule {
|
|
83
|
-
|
|
85
|
+
@MemoIdentity { :>> providedId = "CR-MED-020"; }
|
|
84
86
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
85
87
|
attribute appliesTo = "SoftwareModule";
|
|
86
88
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -90,7 +92,7 @@ package memo_rules_closure {
|
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
constraint def SwComponentReqRule :> MemoConsistencyRule {
|
|
93
|
-
|
|
95
|
+
@MemoIdentity { :>> providedId = "CR-MED-021"; }
|
|
94
96
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
95
97
|
attribute appliesTo = "SoftwareModule";
|
|
96
98
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -100,7 +102,7 @@ package memo_rules_closure {
|
|
|
100
102
|
}
|
|
101
103
|
|
|
102
104
|
constraint def LogicalFunctionAllocationRule :> MemoConsistencyRule {
|
|
103
|
-
|
|
105
|
+
@MemoIdentity { :>> providedId = "CR-MED-022"; }
|
|
104
106
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
105
107
|
attribute appliesTo = "SystemFunction";
|
|
106
108
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -109,10 +111,44 @@ package memo_rules_closure {
|
|
|
109
111
|
constraint { true }
|
|
110
112
|
}
|
|
111
113
|
|
|
114
|
+
// A function that no edge reaches is not in the chain. This was a
|
|
115
|
+
// TypeScript rule (BV-002) applying to every action usage in the model,
|
|
116
|
+
// which reported a scenario and a flow step as defects for not being
|
|
117
|
+
// wired like a function. It is declared here instead: scoped by the
|
|
118
|
+
// ontology to the family it is about, tailorable by a methodology, and
|
|
119
|
+
// readable next to the rule that requires the allocation.
|
|
120
|
+
constraint def FunctionInChainRule :> MemoConsistencyRule {
|
|
121
|
+
@MemoIdentity { :>> providedId = "CR-MED-023"; }
|
|
122
|
+
attribute tailoring = RuleTailoringKind::assurance;
|
|
123
|
+
attribute appliesTo = "MemoFunction";
|
|
124
|
+
attribute severity = RuleSeverityKind::warning;
|
|
125
|
+
attribute rationaleText = "A function participates in the functional chain through a flow or a succession, or through the functions it decomposes into. One that participates in none of them is unreachable behaviour: nothing triggers it and nothing consumes what it produces.";
|
|
126
|
+
// `downstream` and not a bare `composes`: the relation navigates both
|
|
127
|
+
// ways, so a bare name would exempt every child on the strength of
|
|
128
|
+
// having a parent. A decomposed function participates through its
|
|
129
|
+
// parts; a leaf has to be reached by an edge of its own.
|
|
130
|
+
attribute predicateExpression = "flow->size() >= 1 or succession->size() >= 1 or downstream(composes)->size() >= 1";
|
|
131
|
+
constraint { true }
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// A user need names the user whose need it is. IEC 62366-1's user profile
|
|
135
|
+
// is typed on the User element — population, impairments, training,
|
|
136
|
+
// qualification — so the need points at that element rather than restating
|
|
137
|
+
// any of it in prose, which is what `userPopulationReference` was doing.
|
|
138
|
+
constraint def UserNeedIdentifiesUserRule :> MemoConsistencyRule {
|
|
139
|
+
@MemoIdentity { :>> providedId = "CR-MED-024"; }
|
|
140
|
+
attribute tailoring = RuleTailoringKind::assurance;
|
|
141
|
+
attribute appliesTo = "Need";
|
|
142
|
+
attribute severity = RuleSeverityKind::warning;
|
|
143
|
+
attribute rationaleText = "A user need is a need someone has. Which users a device serves, and what they can be assumed to see, know and do, is the input a usability engineering file is built from (IEC 62366-1 5.1); a need that names no user leaves that input to prose.";
|
|
144
|
+
attribute predicateExpression = "not(needKind == 'user' or needKind == 'clinicalUser' or needKind == 'patientUser') or heldBy->size() >= 1";
|
|
145
|
+
constraint { true }
|
|
146
|
+
}
|
|
147
|
+
|
|
112
148
|
// ─── Verification Layer Rules ────────────────────────────────────────
|
|
113
149
|
|
|
114
150
|
constraint def VerificationCaseMethodRule :> MemoConsistencyRule {
|
|
115
|
-
|
|
151
|
+
@MemoIdentity { :>> providedId = "CR-MED-030"; }
|
|
116
152
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
117
153
|
attribute appliesTo = "VerificationCase";
|
|
118
154
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -122,7 +158,7 @@ package memo_rules_closure {
|
|
|
122
158
|
}
|
|
123
159
|
|
|
124
160
|
constraint def VerificationCaseTargetRule :> MemoConsistencyRule {
|
|
125
|
-
|
|
161
|
+
@MemoIdentity { :>> providedId = "CR-MED-031"; }
|
|
126
162
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
127
163
|
attribute appliesTo = "VerificationCase";
|
|
128
164
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -132,7 +168,7 @@ package memo_rules_closure {
|
|
|
132
168
|
}
|
|
133
169
|
|
|
134
170
|
constraint def EvidenceProductionRule :> MemoConsistencyRule {
|
|
135
|
-
|
|
171
|
+
@MemoIdentity { :>> providedId = "CR-MED-032"; }
|
|
136
172
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
137
173
|
attribute appliesTo = "VerificationCase";
|
|
138
174
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -144,7 +180,7 @@ package memo_rules_closure {
|
|
|
144
180
|
// ─── Cybersecurity Layer Rules ───────────────────────────────────────
|
|
145
181
|
|
|
146
182
|
constraint def ThreatMitigationRule :> MemoConsistencyRule {
|
|
147
|
-
|
|
183
|
+
@MemoIdentity { :>> providedId = "CR-MED-040"; }
|
|
148
184
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
149
185
|
attribute appliesTo = "Threat";
|
|
150
186
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -154,7 +190,7 @@ package memo_rules_closure {
|
|
|
154
190
|
}
|
|
155
191
|
|
|
156
192
|
constraint def AssetThreatLinkRule :> MemoConsistencyRule {
|
|
157
|
-
|
|
193
|
+
@MemoIdentity { :>> providedId = "CR-MED-041"; }
|
|
158
194
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
159
195
|
attribute appliesTo = "CybersecurityAsset";
|
|
160
196
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -166,7 +202,7 @@ package memo_rules_closure {
|
|
|
166
202
|
// ─── Interface Rules ─────────────────────────────────────────────────
|
|
167
203
|
|
|
168
204
|
constraint def LogicalInterfaceDirectionRule :> MemoConsistencyRule {
|
|
169
|
-
|
|
205
|
+
@MemoIdentity { :>> providedId = "CR-MED-050"; }
|
|
170
206
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
171
207
|
attribute appliesTo = "Interface";
|
|
172
208
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -178,7 +214,7 @@ package memo_rules_closure {
|
|
|
178
214
|
// ─── Conditional Rules ───────────────────────────────────────────────
|
|
179
215
|
|
|
180
216
|
constraint def SafetyClassCVerificationRule :> MemoConsistencyRule {
|
|
181
|
-
|
|
217
|
+
@MemoIdentity { :>> providedId = "CR-MED-101"; }
|
|
182
218
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
183
219
|
attribute appliesTo = "SoftwareModule";
|
|
184
220
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -203,7 +239,7 @@ package memo_rules_closure {
|
|
|
203
239
|
// triggers. Chrome must be DECLARED `decoration`; an element left
|
|
204
240
|
// unclassified fails rather than passing as scenery.
|
|
205
241
|
constraint def UiElementDesignRecordRule :> MemoConsistencyRule {
|
|
206
|
-
|
|
242
|
+
@MemoIdentity { :>> providedId = "CR-MED-110"; }
|
|
207
243
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
208
244
|
attribute appliesTo = "UIElement";
|
|
209
245
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -217,7 +253,7 @@ package memo_rules_closure {
|
|
|
217
253
|
// The interactive-form restriction lives in the predicate because it spans
|
|
218
254
|
// several enum values.
|
|
219
255
|
constraint def ControlInvokesFunctionRule :> MemoConsistencyRule {
|
|
220
|
-
|
|
256
|
+
@MemoIdentity { :>> providedId = "CR-MED-111"; }
|
|
221
257
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
222
258
|
attribute appliesTo = "UIElement";
|
|
223
259
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -230,7 +266,7 @@ package memo_rules_closure {
|
|
|
230
266
|
// unconfirmed machine guess must never reach a design review looking like
|
|
231
267
|
// an engineering decision.
|
|
232
268
|
constraint def BoundsDetectionConfirmedRule :> MemoConsistencyRule {
|
|
233
|
-
|
|
269
|
+
@MemoIdentity { :>> providedId = "CR-MED-112"; }
|
|
234
270
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
235
271
|
attribute appliesTo = "UIElement";
|
|
236
272
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -242,7 +278,7 @@ package memo_rules_closure {
|
|
|
242
278
|
// A screenshot with no build behind it is undated design intent, not
|
|
243
279
|
// evidence of what the device does.
|
|
244
280
|
constraint def ScreenCaptureProvenanceRule :> MemoConsistencyRule {
|
|
245
|
-
|
|
281
|
+
@MemoIdentity { :>> providedId = "CR-MED-113"; }
|
|
246
282
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
247
283
|
attribute appliesTo = "ScreenCapture";
|
|
248
284
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -6,8 +6,10 @@ package memo_rules_crosslayer {
|
|
|
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 RiskToReqTraceRule :> MemoConsistencyRule {
|
|
10
|
-
|
|
12
|
+
@MemoIdentity { :>> providedId = "XL-001"; }
|
|
11
13
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
12
14
|
attribute appliesTo = "Hazard";
|
|
13
15
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -17,9 +19,9 @@ package memo_rules_crosslayer {
|
|
|
17
19
|
}
|
|
18
20
|
|
|
19
21
|
constraint def ReqToArchTraceRule :> MemoConsistencyRule {
|
|
20
|
-
|
|
22
|
+
@MemoIdentity { :>> providedId = "XL-002"; }
|
|
21
23
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
22
|
-
attribute appliesTo = "Requirement[
|
|
24
|
+
attribute appliesTo = "Requirement[requirementType=system]";
|
|
23
25
|
attribute severity = RuleSeverityKind::warning;
|
|
24
26
|
attribute rationaleText = "Requirements-to-architecture traceability per IEC 62304.";
|
|
25
27
|
attribute predicateExpression = "satisfiedBy->size() >= 1";
|