@memoarchitect/ontology 0.4.4
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/LICENSE +19 -0
- package/README.md +70 -0
- package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +210 -0
- package/examples/gpca-pump/memo.config.yaml +9 -0
- package/examples/gpca-pump/methodology/gpca_methodology.sysml +11 -0
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +25 -0
- package/examples/gpca-pump/methodology/gpca_scope.sysml +25 -0
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +231 -0
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +272 -0
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +81 -0
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +363 -0
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +205 -0
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +113 -0
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +172 -0
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +173 -0
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +1062 -0
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +209 -0
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +53 -0
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1505 -0
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +744 -0
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +144 -0
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +696 -0
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +285 -0
- package/examples/gpca-pump/model/samples/README.md +24 -0
- package/examples/gpca-pump/model/samples/action_flow_view.sysml +72 -0
- package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +9 -0
- package/examples/gpca-pump/model/samples/functional_flow_view.sysml +153 -0
- package/examples/gpca-pump/model/samples/interconnection_view.sysml +93 -0
- package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +99 -0
- package/examples/gpca-pump/model/samples/operational_behaviour_view.sysml +145 -0
- package/examples/gpca-pump/model/samples/tree_view.sysml +56 -0
- package/examples/gpca-pump/model/views/behavior_action_flow_view.sysml +41 -0
- package/examples/gpca-pump/model/views/context_system_context_view.sysml +43 -0
- package/examples/gpca-pump/model/views/cybersecurity_cybersecurity_view.sysml +44 -0
- package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +28 -0
- package/examples/gpca-pump/model/views/document_dhf_index_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_rmf_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_sdd_view.sysml +29 -0
- package/examples/gpca-pump/model/views/document_threat_model_view.sysml +28 -0
- package/examples/gpca-pump/model/views/document_usability_view.sysml +28 -0
- package/examples/gpca-pump/model/views/document_vv_view.sysml +29 -0
- package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +42 -0
- package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +41 -0
- package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +43 -0
- package/examples/gpca-pump/model/views/logical_logical_architecture_view.sysml +42 -0
- package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +42 -0
- package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +44 -0
- package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +41 -0
- package/examples/gpca-pump/model/views/operational_use_case_view.sysml +43 -0
- package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +41 -0
- package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +42 -0
- package/examples/gpca-pump/model/views/risk_fmea_view.sysml +42 -0
- package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +44 -0
- package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +43 -0
- package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +42 -0
- package/memo.manifest.yaml +13 -0
- package/methodologies/default/memo.package.yaml +9 -0
- package/methodologies/gpca/memo.package.yaml +9 -0
- package/ontology/memo.package.yaml +8 -0
- package/ontology/memo.rendering.yaml +47 -0
- package/package.json +65 -0
- package/profile/archetypes.yaml +36 -0
- package/profile/memo.package.yaml +9 -0
- package/profile/templates/connected-device/starter.sysml +8 -0
- package/profile/templates/infusion-pump/starter.sysml +8 -0
- package/profile/templates/monitoring-device/starter.sysml +8 -0
- package/profile/templates/samd/starter.sysml +8 -0
- package/src/architecture/analysis/memo_fmea.sysml +91 -0
- package/src/architecture/assurance/memo_assurance.sysml +29 -0
- package/src/architecture/behavior/memo_behavior.sysml +65 -0
- package/src/architecture/constraints/memo_constraints.sysml +14 -0
- package/src/architecture/context/memo_context.sysml +58 -0
- package/src/architecture/cybersecurity/memo_cybersecurity.sysml +99 -0
- package/src/architecture/decisions/memo_decisions.sysml +12 -0
- package/src/architecture/functions/memo_functions.sysml +30 -0
- package/src/architecture/hardware_structure/memo_hardware_structure.sysml +15 -0
- package/src/architecture/interfaces/memo_interfaces.sysml +103 -0
- package/src/architecture/logical_structure/memo_logical_structure.sysml +10 -0
- package/src/architecture/operational/memo_operational.sysml +51 -0
- package/src/architecture/physical/memo_physical_architecture.sysml +19 -0
- package/src/architecture/requirements/memo_requirements.sysml +69 -0
- package/src/architecture/risk/memo_arch_risk.sysml +7 -0
- package/src/architecture/risk/memo_risk.sysml +80 -0
- package/src/architecture/software_structure/memo_software_structure.sysml +44 -0
- package/src/architecture/system/memo_system_analysis.sysml +54 -0
- package/src/artifacts/clinical_safety_report.sysml +12 -0
- package/src/artifacts/cybersecurity_assessment_report.sysml +12 -0
- package/src/artifacts/definitions/memo_artifact_definitions.sysml +12 -0
- package/src/artifacts/design_change_log.sysml +12 -0
- package/src/artifacts/design_history_file_index.sysml +12 -0
- package/src/artifacts/design_input_plan.sysml +12 -0
- package/src/artifacts/design_output_plan.sysml +12 -0
- package/src/artifacts/evidence_record.sysml +12 -0
- package/src/artifacts/failure_mode_effects_analysis.sysml +12 -0
- package/src/artifacts/hazard_analysis_report.sysml +12 -0
- package/src/artifacts/labeling_specification.sysml +12 -0
- package/src/artifacts/requirements_specification.sysml +12 -0
- package/src/artifacts/requirements_traceability_matrix.sysml +12 -0
- package/src/artifacts/risk_management_plan.sysml +12 -0
- package/src/artifacts/software_design_description.sysml +12 -0
- package/src/artifacts/software_development_plan.sysml +12 -0
- package/src/artifacts/soup_list.sysml +12 -0
- package/src/artifacts/system_architecture_description.sysml +12 -0
- package/src/artifacts/test_protocol.sysml +12 -0
- package/src/artifacts/test_report.sysml +12 -0
- package/src/artifacts/threat_model_report.sysml +12 -0
- package/src/artifacts/usability_engineering_report.sysml +12 -0
- package/src/compliance/artifacts/memo_artifacts.sysml +13 -0
- package/src/compliance/change/memo_change.sysml +17 -0
- package/src/compliance/dhf-templates/21cfr820/change-record.md +45 -0
- package/src/compliance/dhf-templates/21cfr820/design-input.md +67 -0
- package/src/compliance/dhf-templates/21cfr820/design-output.md +80 -0
- package/src/compliance/dhf-templates/21cfr820/design-review.md +51 -0
- package/src/compliance/dhf-templates/21cfr820/design-validation.md +64 -0
- package/src/compliance/dhf-templates/21cfr820/design-verification.md +57 -0
- package/src/compliance/dhf-templates/21cfr820/dhf-index.md +111 -0
- package/src/compliance/dhf-templates/21cfr820/transfer-plan.md +50 -0
- package/src/compliance/dhf-templates/21cfr820/user-needs.md +81 -0
- package/src/compliance/dhf-templates/21cfr820/vv-plan.md +89 -0
- package/src/compliance/dhf-templates/21cfr820/vv-report.md +85 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/incident-response.md +66 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/postmarket-surveillance.md +63 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/security-arch.md +83 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/threat-model.md +100 -0
- package/src/compliance/dhf-templates/fda-cybersecurity/vuln-assessment.md +77 -0
- package/src/compliance/dhf-templates/iec-62304/change-control.md +40 -0
- package/src/compliance/dhf-templates/iec-62304/detailed-design.md +69 -0
- package/src/compliance/dhf-templates/iec-62304/integration-test.md +68 -0
- package/src/compliance/dhf-templates/iec-62304/sad.md +115 -0
- package/src/compliance/dhf-templates/iec-62304/sbom.md +67 -0
- package/src/compliance/dhf-templates/iec-62304/sdp.md +108 -0
- package/src/compliance/dhf-templates/iec-62304/soup.md +77 -0
- package/src/compliance/dhf-templates/iec-62304/srs.md +138 -0
- package/src/compliance/dhf-templates/iec-62304/sw-traceability.md +111 -0
- package/src/compliance/dhf-templates/iec-62304/system-test.md +67 -0
- package/src/compliance/dhf-templates/iec-62366/formative-eval.md +47 -0
- package/src/compliance/dhf-templates/iec-62366/summative-eval.md +69 -0
- package/src/compliance/dhf-templates/iec-62366/task-analysis.md +57 -0
- package/src/compliance/dhf-templates/iec-62366/ue-plan.md +81 -0
- package/src/compliance/dhf-templates/iec-62366/ui-spec.md +61 -0
- package/src/compliance/dhf-templates/iec-62366/urra.md +74 -0
- package/src/compliance/dhf-templates/iec-62366/use-spec.md +61 -0
- package/src/compliance/dhf-templates/iso-14971/fmea.md +93 -0
- package/src/compliance/dhf-templates/iso-14971/fta.md +70 -0
- package/src/compliance/dhf-templates/iso-14971/har.md +165 -0
- package/src/compliance/dhf-templates/iso-14971/risk-benefit.md +51 -0
- package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +51 -0
- package/src/compliance/dhf-templates/iso-14971/rmp.md +169 -0
- package/src/compliance/dhf-templates/iso-14971/rmr.md +101 -0
- package/src/compliance/dhf-templates/shared/snippets/approval-block.md +16 -0
- package/src/compliance/dhf-templates/shared/snippets/document-control-header.md +15 -0
- package/src/compliance/dhf-templates/shared/snippets/references-section.md +16 -0
- package/src/compliance/dhf-templates/shared/snippets/revision-history-table.md +11 -0
- package/src/compliance/document_views/memo_document_views.sysml +7 -0
- package/src/compliance/iso14971/risk_management_file.sysml +16 -0
- package/src/compliance/postmarket/memo_postmarket.sysml +16 -0
- package/src/core/common/memo_common.sysml +50 -0
- package/src/core/consistency_rules/consistency_rules.sysml +41 -0
- package/src/core/dimensions/dimensions.sysml +37 -0
- package/src/core/enumerations/memo_enumerations.sysml +562 -0
- package/src/core/methodology_scope/methodology_scope.sysml +46 -0
- package/src/core/relationships/memo_relationships.sysml +230 -0
- package/src/core/semantics/semantics.sysml +20 -0
- package/src/core/stdlib/collections.sysml +6 -0
- package/src/core/stdlib/functions.sysml +6 -0
- package/src/core/stdlib/scalars.sysml +6 -0
- package/src/core/stdlib/time.sysml +6 -0
- package/src/medical_device_library.sysml +100 -0
- package/src/memo_namespaces.sysml +668 -0
- package/src/methodology/LICENSES/MIT.txt +19 -0
- package/src/methodology/memo_archetypes.sysml +93 -0
- package/src/methodology/memo_core.sysml +53 -0
- package/src/methodology/memo_gates.sysml +11 -0
- package/src/methodology/memo_patterns.sysml +12 -0
- package/src/methodology/memo_profiles.sysml +218 -0
- package/src/methodology/memo_rules.sysml +15 -0
- package/src/methodology/memo_viewpoints.sysml +5 -0
- package/src/methodology/memo_workflow.sysml +14 -0
- package/src/rules/closure/closure_rules.sysml +180 -0
- package/src/rules/coverage/coverage_rules.sysml +258 -0
- package/src/rules/crosslayer/cross_layer_rules.sysml +38 -0
- package/src/rules/lifecycle/lifecycle_rules.sysml +41 -0
- package/src/rules/quantitative/quantitative_rules.sysml +34 -0
- package/src/viewpoints/clinical/clinical_evidence_view.sysml +13 -0
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +25 -0
- package/src/viewpoints/context/context_viewpoint.sysml +25 -0
- package/src/viewpoints/context/system_context_view.sysml +29 -0
- package/src/viewpoints/cybersecurity/cybersecurity_assessment_view.sysml +13 -0
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +27 -0
- package/src/viewpoints/cybersecurity/threat_model_view.sysml +13 -0
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +82 -0
- package/src/viewpoints/functional/function_allocation_view.sysml +29 -0
- package/src/viewpoints/functional/functional_viewpoint.sysml +25 -0
- package/src/viewpoints/functional/system_functional_tree_view.sysml +29 -0
- package/src/viewpoints/logical/logical_architecture_view.sysml +29 -0
- package/src/viewpoints/logical/logical_viewpoint.sysml +25 -0
- package/src/viewpoints/operational/operational_viewpoint.sysml +25 -0
- package/src/viewpoints/operational/use_case_view.sysml +29 -0
- package/src/viewpoints/physical/network_topology_view.sysml +29 -0
- package/src/viewpoints/physical/physical_bom_view.sysml +29 -0
- package/src/viewpoints/physical/physical_viewpoint.sysml +25 -0
- package/src/viewpoints/requirements/requirements_traceability_view.sysml +29 -0
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +25 -0
- package/src/viewpoints/risk/risk_chain_view.sysml +30 -0
- package/src/viewpoints/risk/risk_viewpoint.sysml +25 -0
- package/src/viewpoints/software/software_architecture_view.sysml +29 -0
- package/src/viewpoints/software/software_viewpoint.sysml +25 -0
- package/src/viewpoints/usability/usability_engineering_view.sysml +13 -0
- package/src/viewpoints/usability/usability_viewpoint.sysml +25 -0
- package/src/viewpoints/verification/verification_coverage_view.sysml +29 -0
- package/src/viewpoints/verification/verification_viewpoint.sysml +25 -0
- package/template/memo.package.yaml +5 -0
- package/template/src/catalog/starter.sysml +12 -0
- package/template/src/documents/.gitkeep +1 -0
- package/template/src/views/.gitkeep +1 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
package memo_methodology_archetypes {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_methodology_core::*;
|
|
5
|
+
|
|
6
|
+
part minimal : Archetype {
|
|
7
|
+
attribute :>> id = "ARCH-MINIMAL";
|
|
8
|
+
attribute :>> name = "Minimal";
|
|
9
|
+
attribute :>> label = "Minimal";
|
|
10
|
+
attribute :>> description = "Core ontology only — requirements, hazards, basic architecture (~53 kinds)";
|
|
11
|
+
attribute :>> category = "profile";
|
|
12
|
+
attribute :>> includedLayer = "context; requirements; risk";
|
|
13
|
+
attribute :>> includedStandard = "ISO 14971";
|
|
14
|
+
attribute :>> templateDir = "";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
part standardArchetype : Archetype {
|
|
18
|
+
attribute :>> id = "ARCH-STANDARD";
|
|
19
|
+
attribute :>> name = "Standard";
|
|
20
|
+
attribute :>> label = "Standard";
|
|
21
|
+
attribute :>> description = "Core + risk + software + DHF — covers most Class II devices (~120 kinds)";
|
|
22
|
+
attribute :>> category = "profile";
|
|
23
|
+
attribute :>> includedLayer = "context; requirements; functions; logical_structure; software_structure; risk; assurance";
|
|
24
|
+
attribute :>> includedStandard = "ISO 14971; IEC 62304; 21 CFR 820";
|
|
25
|
+
attribute :>> templateDir = "";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
part full : Archetype {
|
|
29
|
+
attribute :>> id = "ARCH-FULL";
|
|
30
|
+
attribute :>> name = "Full";
|
|
31
|
+
attribute :>> label = "Full";
|
|
32
|
+
attribute :>> description = "All architecture layers, standards, and extensions (~200+ kinds)";
|
|
33
|
+
attribute :>> category = "profile";
|
|
34
|
+
attribute :>> includedLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; behavior; risk; arch_risk; assurance; cybersecurity; constraints";
|
|
35
|
+
attribute :>> includedStandard = "ISO 14971; IEC 62304; 21 CFR 820; ISO 13485; IEC 62366; IEC 60601-1; IEC 82304-1; FDA Cybersecurity Guidance";
|
|
36
|
+
attribute :>> templateDir = "";
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
part samd : Archetype {
|
|
40
|
+
attribute :>> id = "ARCH-SAMD";
|
|
41
|
+
attribute :>> name = "SaMD";
|
|
42
|
+
attribute :>> label = "Software as Medical Device (SaMD)";
|
|
43
|
+
attribute :>> description = "Clinical decision support, diagnostic algorithm, AI/ML tool, mobile medical app";
|
|
44
|
+
attribute :>> category = "device-class";
|
|
45
|
+
attribute :>> includedLayer = "context; requirements; functions; logical_structure; software_structure; risk; assurance; cybersecurity";
|
|
46
|
+
attribute :>> includedStandard = "ISO 14971; IEC 62304; IEC 82304-1; FDA Cybersecurity Guidance";
|
|
47
|
+
attribute :>> templateDir = "samd";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
part connected : Archetype {
|
|
51
|
+
attribute :>> id = "ARCH-CONNECTED";
|
|
52
|
+
attribute :>> name = "Connected";
|
|
53
|
+
attribute :>> label = "Connected / IoT Device";
|
|
54
|
+
attribute :>> description = "Remote monitoring, wearable, smart device with cloud connectivity and cybersecurity requirements";
|
|
55
|
+
attribute :>> category = "device-class";
|
|
56
|
+
attribute :>> includedLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; risk; assurance; cybersecurity";
|
|
57
|
+
attribute :>> includedStandard = "ISO 14971; IEC 62304; 21 CFR 820; FDA Cybersecurity Guidance";
|
|
58
|
+
attribute :>> templateDir = "connected-device";
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
part monitoring : Archetype {
|
|
62
|
+
attribute :>> id = "ARCH-MONITORING";
|
|
63
|
+
attribute :>> name = "Monitoring";
|
|
64
|
+
attribute :>> label = "Monitoring / Diagnostic Device";
|
|
65
|
+
attribute :>> description = "Patient monitor, ECG, SpO2, vital signs, bedside diagnostic equipment";
|
|
66
|
+
attribute :>> category = "device-class";
|
|
67
|
+
attribute :>> includedLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; risk; assurance";
|
|
68
|
+
attribute :>> includedStandard = "ISO 14971; IEC 62304; IEC 60601-1; 21 CFR 820";
|
|
69
|
+
attribute :>> templateDir = "monitoring-device";
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
part infusion_pump : Archetype {
|
|
73
|
+
attribute :>> id = "ARCH-INFUSION";
|
|
74
|
+
attribute :>> name = "InfusionPump";
|
|
75
|
+
attribute :>> label = "Infusion / Drug Delivery Device";
|
|
76
|
+
attribute :>> description = "Infusion pump, syringe driver, implantable drug delivery, dosing device";
|
|
77
|
+
attribute :>> category = "device-class";
|
|
78
|
+
attribute :>> includedLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; behavior; risk; arch_risk; assurance; cybersecurity";
|
|
79
|
+
attribute :>> includedStandard = "ISO 14971; IEC 62304; IEC 60601-1; 21 CFR 820; ISO 13485";
|
|
80
|
+
attribute :>> templateDir = "infusion-pump";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
part blank : Archetype {
|
|
84
|
+
attribute :>> id = "ARCH-BLANK";
|
|
85
|
+
attribute :>> name = "Blank";
|
|
86
|
+
attribute :>> label = "Blank Project";
|
|
87
|
+
attribute :>> description = "Start from scratch with a minimal SysML shell";
|
|
88
|
+
attribute :>> category = "device-class";
|
|
89
|
+
attribute :>> includedLayer = "";
|
|
90
|
+
attribute :>> includedStandard = "";
|
|
91
|
+
attribute :>> templateDir = "";
|
|
92
|
+
}
|
|
93
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
package memo_methodology_core {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_core_common::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
part def MethodologyLibrary :> TraceableElement {
|
|
8
|
+
attribute version : String;
|
|
9
|
+
attribute domain : String;
|
|
10
|
+
attribute :>> description : String;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
part def MethodologyDefinition :> TraceableElement {
|
|
14
|
+
attribute version : String;
|
|
15
|
+
attribute domain : String;
|
|
16
|
+
attribute :>> description : String;
|
|
17
|
+
attribute baseMethodName : String;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
part def ResolvedMethodology :> TraceableElement {
|
|
21
|
+
attribute version : String;
|
|
22
|
+
// Risk-proportionate scope keyed to the device's software safety
|
|
23
|
+
// classification (IEC 62304 A/B/C) and lifecycle stage — not a
|
|
24
|
+
// "rigor dial". The class + stage determine which layers, links,
|
|
25
|
+
// viewpoints, and gates a release must clear.
|
|
26
|
+
attribute safetyClassification : SafetyClassKind;
|
|
27
|
+
attribute lifecycleStage : LifecycleStateKind;
|
|
28
|
+
attribute resolutionSummary : String;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
part def ProjectMethodBinding :> TraceableElement {
|
|
32
|
+
attribute projectName : String;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
part def DhfDocumentBinding :> TraceableElement {
|
|
36
|
+
attribute documentTitle : String;
|
|
37
|
+
attribute groupLabel : String;
|
|
38
|
+
attribute templateId : String;
|
|
39
|
+
attribute viewKind : String;
|
|
40
|
+
attribute regulatoryReference : String;
|
|
41
|
+
attribute lifecycleStage : WorkflowStageKind;
|
|
42
|
+
attribute required : Boolean;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
part def Archetype :> TraceableElement {
|
|
46
|
+
attribute label : String;
|
|
47
|
+
attribute :>> description : String;
|
|
48
|
+
attribute category : String;
|
|
49
|
+
attribute includedLayer : String;
|
|
50
|
+
attribute includedStandard : String;
|
|
51
|
+
attribute templateDir : String;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
package memo_methodology_gates {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_core_common::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
part def QualityGate :> TraceableElement {
|
|
8
|
+
attribute gateStage : WorkflowStageKind;
|
|
9
|
+
attribute passCriteria : String;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
package memo_methodology_patterns {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_core_common::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
part def ModelingPattern :> TraceableElement {
|
|
8
|
+
attribute intent : String;
|
|
9
|
+
attribute stage : WorkflowStageKind;
|
|
10
|
+
attribute strength : RuleStrengthKind;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
package memo_methodology_profiles {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_methodology_core::*;
|
|
5
|
+
private import memo_methodology_viewpoints::*;
|
|
6
|
+
private import memo_methodology_rules::*;
|
|
7
|
+
private import memo_methodology_patterns::*;
|
|
8
|
+
private import memo_methodology_workflow::*;
|
|
9
|
+
private import memo_methodology_gates::*;
|
|
10
|
+
private import memo_core_enumerations::*;
|
|
11
|
+
private import memo_core_methodology_scope::*;
|
|
12
|
+
|
|
13
|
+
part mdCoreLibrary : MethodologyLibrary {
|
|
14
|
+
attribute :>> id = "METHLIB-001";
|
|
15
|
+
attribute :>> name = "MedicalDeviceMethodologyLibrary";
|
|
16
|
+
attribute :>> version = "0.1";
|
|
17
|
+
attribute :>> domain = "medical device modeling";
|
|
18
|
+
attribute :>> description = "Methodology layer for selecting, restricting, sequencing, tailoring, and lightly extending use of the medical-device ontology.";
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
part mdLightDefaultDefinition : MethodologyDefinition {
|
|
22
|
+
attribute :>> id = "METH-001";
|
|
23
|
+
attribute :>> name = "MedicalDeviceLightDefault";
|
|
24
|
+
attribute :>> version = "0.1";
|
|
25
|
+
attribute :>> domain = "medical device modeling";
|
|
26
|
+
attribute :>> description = "Light default methodology around the ontology for smaller or early project use.";
|
|
27
|
+
attribute :>> baseMethodName = "";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
part mdLightDefaultResolved : ResolvedMethodology {
|
|
31
|
+
attribute :>> id = "RMETH-001";
|
|
32
|
+
attribute :>> name = "MedicalDeviceLightDefaultResolved";
|
|
33
|
+
attribute :>> version = "0.1";
|
|
34
|
+
attribute :>> safetyClassification = SafetyClassKind::A;
|
|
35
|
+
attribute :>> lifecycleStage = LifecycleStateKind::development;
|
|
36
|
+
attribute :>> resolutionSummary = "Class A development-stage scope: core requirements, architecture, risk, verification, and RMF support required; cybersecurity and SOUP out of scope.";
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
part riskView : Viewpoint {
|
|
40
|
+
attribute :>> id = "VP-001";
|
|
41
|
+
attribute :>> name = "RiskManagementView";
|
|
42
|
+
attribute :>> purpose = "Focus on risk chain, controls, verification, and residual risk.";
|
|
43
|
+
attribute :>> audience = AudienceKind::safetyEngineer;
|
|
44
|
+
attribute :>> stage = WorkflowStageKind::risk;
|
|
45
|
+
attribute :>> abstractionLevel = "safety management";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
part swArchView : Viewpoint {
|
|
49
|
+
attribute :>> id = "VP-002";
|
|
50
|
+
attribute :>> name = "SoftwareArchitectureView";
|
|
51
|
+
attribute :>> purpose = "Focus on software decomposition, interfaces, timing, and contracts.";
|
|
52
|
+
attribute :>> audience = AudienceKind::softwareArchitect;
|
|
53
|
+
attribute :>> stage = WorkflowStageKind::architecture;
|
|
54
|
+
attribute :>> abstractionLevel = "software design";
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
part useRiskBeforeRule : ElementUsageRule {
|
|
58
|
+
attribute :>> id = "RULE-001";
|
|
59
|
+
attribute :>> name = "UseRiskBeforeAfter";
|
|
60
|
+
attribute :>> elementTypeName = "RiskBeforeMitigation,RiskAfterMitigation,RiskMatrix";
|
|
61
|
+
attribute :>> strength = RuleStrengthKind::recommended;
|
|
62
|
+
attribute :>> rationaleText = "Even a light methodology should distinguish pre- and post-mitigation risk and assess against a matrix.";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
part requireVerifiedByRule : RelationUsageRule {
|
|
66
|
+
attribute :>> id = "RULE-002";
|
|
67
|
+
attribute :>> name = "VerifiedBysRequired";
|
|
68
|
+
attribute :>> relationTypeName = "VerifiedBy";
|
|
69
|
+
attribute :>> strength = RuleStrengthKind::required;
|
|
70
|
+
attribute :>> rationaleText = "Safety-relevant requirements and controls shall trace to verification.";
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
part lightRiskPattern : ModelingPattern {
|
|
74
|
+
attribute :>> id = "PAT-001";
|
|
75
|
+
attribute :>> name = "LightRiskBeforeAfterPattern";
|
|
76
|
+
attribute :>> intent = "Model hazard chain, before/after mitigation risk, controls, and residual evaluation in a lightweight way.";
|
|
77
|
+
attribute :>> stage = WorkflowStageKind::risk;
|
|
78
|
+
attribute :>> strength = RuleStrengthKind::recommended;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
part lightTracePattern : ModelingPattern {
|
|
82
|
+
attribute :>> id = "PAT-002";
|
|
83
|
+
attribute :>> name = "CoreTracePattern";
|
|
84
|
+
attribute :>> intent = "Need or risk to requirement, requirement to architecture, requirement/control to verification.";
|
|
85
|
+
attribute :>> stage = WorkflowStageKind::requirements;
|
|
86
|
+
attribute :>> strength = RuleStrengthKind::required;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
part stepRequirements : WorkflowStep {
|
|
90
|
+
attribute :>> id = "STEP-001";
|
|
91
|
+
attribute :>> name = "CaptureRequirements";
|
|
92
|
+
attribute :>> stepOrder = 1;
|
|
93
|
+
attribute :>> stage = WorkflowStageKind::requirements;
|
|
94
|
+
attribute :>> objectiveDescription = "Capture stakeholder needs and derive requirements.";
|
|
95
|
+
attribute :>> entryCriteria = "Intended use and actors understood.";
|
|
96
|
+
attribute :>> exitCriteria = "Initial requirement set exists.";
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
part stepArchitecture : WorkflowStep {
|
|
100
|
+
attribute :>> id = "STEP-002";
|
|
101
|
+
attribute :>> name = "DefineArchitecture";
|
|
102
|
+
attribute :>> stepOrder = 2;
|
|
103
|
+
attribute :>> stage = WorkflowStageKind::architecture;
|
|
104
|
+
attribute :>> objectiveDescription = "Define key software and hardware architecture elements and interfaces.";
|
|
105
|
+
attribute :>> entryCriteria = "Initial requirements exist.";
|
|
106
|
+
attribute :>> exitCriteria = "Core architecture and interfaces exist.";
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
part stepRisk : WorkflowStep {
|
|
110
|
+
attribute :>> id = "STEP-003";
|
|
111
|
+
attribute :>> name = "PerformRiskAnalysis";
|
|
112
|
+
attribute :>> stepOrder = 3;
|
|
113
|
+
attribute :>> stage = WorkflowStageKind::risk;
|
|
114
|
+
attribute :>> objectiveDescription = "Create core risk chain and controls.";
|
|
115
|
+
attribute :>> entryCriteria = "Initial requirements and key behavior exist.";
|
|
116
|
+
attribute :>> exitCriteria = "Risk and control model exists.";
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
part stepVerification : WorkflowStep {
|
|
120
|
+
attribute :>> id = "STEP-004";
|
|
121
|
+
attribute :>> name = "PlanVerification";
|
|
122
|
+
attribute :>> stepOrder = 4;
|
|
123
|
+
attribute :>> stage = WorkflowStageKind::verificationStage;
|
|
124
|
+
attribute :>> objectiveDescription = "Define verification and evidence expectations.";
|
|
125
|
+
attribute :>> entryCriteria = "Requirements and controls exist.";
|
|
126
|
+
attribute :>> exitCriteria = "Verification cases and evidence targets exist.";
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
part gateLightComplete : QualityGate {
|
|
130
|
+
attribute :>> id = "GATE-001";
|
|
131
|
+
attribute :>> name = "LightMethodReady";
|
|
132
|
+
attribute :>> gateStage = WorkflowStageKind::verificationStage;
|
|
133
|
+
attribute :>> passCriteria = "Core traceability, risk, verification, and RMF view support are present.";
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
part mdCoverageScope : MethodologyScope {
|
|
137
|
+
attribute :>> id = "SCOPE-COV-001";
|
|
138
|
+
attribute :>> name = "MedicalDeviceCoverageScope";
|
|
139
|
+
attribute :>> scopeName = "coverage";
|
|
140
|
+
|
|
141
|
+
attribute :>> includedArchLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; behavior; risk; arch_risk; assurance; cybersecurity; constraints";
|
|
142
|
+
|
|
143
|
+
attribute :>> includedStandard = "ISO 14971; IEC 62304; 21 CFR 820; ISO 13485; ISO 14155; IEC 62366; IEC 60601-1; IEC 82304-1; FDA Cybersecurity Guidance";
|
|
144
|
+
|
|
145
|
+
attribute :>> includedArtifactKind = "RiskManagementPlan; RequirementsSpecification; SystemArchitectureDescription; SoftwareDesignDescription; HazardAnalysisReport; RequirementsTraceabilityMatrix; CybersecurityAssessmentReport; ThreatModelReport; UsabilityEngineeringReport; ClinicalSafetyReport; FailureModeEffectsAnalysisReport; SoupList; DesignInputPlan; DesignOutputPlan; SoftwareDevelopmentPlan; LabelingSpecification; DesignHistoryFileIndex; DesignChangeLog";
|
|
146
|
+
|
|
147
|
+
attribute :>> includedViewpointType = "VP-CTX; VP-OPS; VP-REQ; VP-FUNC; VP-LOG; VP-SW; VP-PHY; VP-RISK; VP-VER; VP-CYB; VP-USE; VP-CLIN";
|
|
148
|
+
|
|
149
|
+
attribute :>> excludedKind = "";
|
|
150
|
+
attribute :>> description = "Comprehensive default methodology — includes all architecture layers, supported standards, artifact kinds, and viewpoint types. No GPCA-specific subtraction.";
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
part gpcaProjectBinding : ProjectMethodBinding {
|
|
154
|
+
attribute :>> id = "PMB-001";
|
|
155
|
+
attribute :>> name = "GPCAProjectMethodBinding";
|
|
156
|
+
attribute :>> projectName = "GPCA";
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
part rmpDoc : DhfDocumentBinding {
|
|
160
|
+
attribute :>> id = "DHF-001";
|
|
161
|
+
attribute :>> name = "RiskManagementPlan";
|
|
162
|
+
attribute :>> documentTitle = "Risk Management Plan";
|
|
163
|
+
attribute :>> groupLabel = "Risk Management";
|
|
164
|
+
attribute :>> templateId = "iso-14971/rmp";
|
|
165
|
+
attribute :>> viewKind = "RMF";
|
|
166
|
+
attribute :>> regulatoryReference = "ISO 14971";
|
|
167
|
+
attribute :>> lifecycleStage = WorkflowStageKind::risk;
|
|
168
|
+
attribute :>> required = true;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
part harDoc : DhfDocumentBinding {
|
|
172
|
+
attribute :>> id = "DHF-002";
|
|
173
|
+
attribute :>> name = "HazardAnalysisReport";
|
|
174
|
+
attribute :>> documentTitle = "Hazard Analysis Report";
|
|
175
|
+
attribute :>> groupLabel = "Risk Management";
|
|
176
|
+
attribute :>> templateId = "iso-14971/har";
|
|
177
|
+
attribute :>> viewKind = "RMF";
|
|
178
|
+
attribute :>> regulatoryReference = "ISO 14971";
|
|
179
|
+
attribute :>> lifecycleStage = WorkflowStageKind::risk;
|
|
180
|
+
attribute :>> required = true;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
part sadDoc : DhfDocumentBinding {
|
|
184
|
+
attribute :>> id = "DHF-003";
|
|
185
|
+
attribute :>> name = "SoftwareArchitectureDescription";
|
|
186
|
+
attribute :>> documentTitle = "Software Architecture Description";
|
|
187
|
+
attribute :>> groupLabel = "Software";
|
|
188
|
+
attribute :>> templateId = "iec-62304/sad";
|
|
189
|
+
attribute :>> viewKind = "ArchitectureDescription";
|
|
190
|
+
attribute :>> regulatoryReference = "IEC 62304";
|
|
191
|
+
attribute :>> lifecycleStage = WorkflowStageKind::architecture;
|
|
192
|
+
attribute :>> required = true;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
part threatModelDoc : DhfDocumentBinding {
|
|
196
|
+
attribute :>> id = "DHF-004";
|
|
197
|
+
attribute :>> name = "CybersecurityThreatModel";
|
|
198
|
+
attribute :>> documentTitle = "Threat Model";
|
|
199
|
+
attribute :>> groupLabel = "Cybersecurity";
|
|
200
|
+
attribute :>> templateId = "fda-cybersecurity/threat-model";
|
|
201
|
+
attribute :>> viewKind = "ThreatModel";
|
|
202
|
+
attribute :>> regulatoryReference = "FDA Cybersecurity Guidance";
|
|
203
|
+
attribute :>> lifecycleStage = WorkflowStageKind::risk;
|
|
204
|
+
attribute :>> required = true;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
part vvPlanDoc : DhfDocumentBinding {
|
|
208
|
+
attribute :>> id = "DHF-005";
|
|
209
|
+
attribute :>> name = "VerificationValidationPlan";
|
|
210
|
+
attribute :>> documentTitle = "V&V Plan";
|
|
211
|
+
attribute :>> groupLabel = "Verification & Validation";
|
|
212
|
+
attribute :>> templateId = "21cfr820/vv-plan";
|
|
213
|
+
attribute :>> viewKind = "VV";
|
|
214
|
+
attribute :>> regulatoryReference = "21 CFR 820.30";
|
|
215
|
+
attribute :>> lifecycleStage = WorkflowStageKind::verificationStage;
|
|
216
|
+
attribute :>> required = true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
package memo_methodology_rules {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_core_common::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
private import memo_core_consistency_rules::*;
|
|
7
|
+
|
|
8
|
+
part def ElementUsageRule :> ConsistencyRule {
|
|
9
|
+
attribute elementTypeName : String;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
part def RelationUsageRule :> ConsistencyRule {
|
|
13
|
+
attribute relationTypeName : String;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package memo_methodology_workflow {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_core_common::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
part def WorkflowStep :> TraceableElement {
|
|
8
|
+
attribute stepOrder : Integer;
|
|
9
|
+
attribute stage : WorkflowStageKind;
|
|
10
|
+
attribute objectiveDescription : String;
|
|
11
|
+
attribute entryCriteria : String;
|
|
12
|
+
attribute exitCriteria : String;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
// Closure consistency rules — native KerML constraints (Epic EE-3).
|
|
2
|
+
// Migrated from the proprietary ConsistencyRule predicate-attribute parts to
|
|
3
|
+
// native `constraint def` bodies whose `constraint { … }` expression is
|
|
4
|
+
// evaluated directly by the KerML constraint evaluator (validator/constraint-eval.ts).
|
|
5
|
+
//
|
|
6
|
+
// Rule metadata (id, appliesTo subject kind, severity, rationale) travels as plain
|
|
7
|
+
// attribute members; the boolean body is the rule. Per the EE-3 mapping the native
|
|
8
|
+
// surface drops the legacy `direction`/`relatedKinds` qualifiers — navigation counts
|
|
9
|
+
// related elements in either direction. Cross-element `uniqueAttribute` (CR-MED-012)
|
|
10
|
+
// has no single-subject expression and stays an engine-level exception (see note).
|
|
11
|
+
package memo_rules_closure {
|
|
12
|
+
private import ScalarValues::*;
|
|
13
|
+
|
|
14
|
+
private import memo_core_consistency_rules::*;
|
|
15
|
+
private import memo_core_enumerations::*;
|
|
16
|
+
|
|
17
|
+
// ─── Risk Layer Rules ────────────────────────────────────────────────
|
|
18
|
+
|
|
19
|
+
constraint def hazardMitigationRule {
|
|
20
|
+
attribute id = "CR-MED-001";
|
|
21
|
+
attribute appliesTo = "Hazard";
|
|
22
|
+
attribute severity = RuleSeverityKind::error;
|
|
23
|
+
attribute rationaleText = "ISO 14971 requires each identified hazard to have risk control measures.";
|
|
24
|
+
attribute predicateExpression = "mitigatesHazard->size() >= 1";
|
|
25
|
+
constraint { true }
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
constraint def hazardSeverityRule {
|
|
29
|
+
attribute id = "CR-MED-002";
|
|
30
|
+
attribute appliesTo = "Hazard";
|
|
31
|
+
attribute severity = RuleSeverityKind::error;
|
|
32
|
+
attribute rationaleText = "Hazard severity is required for risk estimation per ISO 14971.";
|
|
33
|
+
attribute predicateExpression = "attributes.severity != \"\"";
|
|
34
|
+
constraint { true }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
constraint def riskControlVerificationRule {
|
|
38
|
+
attribute id = "CR-MED-003";
|
|
39
|
+
attribute appliesTo = "RiskControl";
|
|
40
|
+
attribute severity = RuleSeverityKind::error;
|
|
41
|
+
attribute rationaleText = "Risk controls shall be verified per ISO 14971 clause 7.4.";
|
|
42
|
+
attribute predicateExpression = "verifiedBy->size() >= 1";
|
|
43
|
+
constraint { true }
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
constraint def riskBeforeMatrixRule {
|
|
47
|
+
attribute id = "CR-MED-004";
|
|
48
|
+
attribute appliesTo = "RiskBeforeMitigation";
|
|
49
|
+
attribute severity = RuleSeverityKind::warning;
|
|
50
|
+
attribute rationaleText = "Pre-mitigation risk must be assessed against a risk acceptability matrix.";
|
|
51
|
+
attribute predicateExpression = "assessedAgainst->size() >= 1";
|
|
52
|
+
constraint { true }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// ─── Requirements Layer Rules ────────────────────────────────────────
|
|
56
|
+
|
|
57
|
+
constraint def sysReqTraceRule {
|
|
58
|
+
attribute id = "CR-MED-010";
|
|
59
|
+
attribute appliesTo = "SystemRequirement";
|
|
60
|
+
attribute severity = RuleSeverityKind::error;
|
|
61
|
+
attribute rationaleText = "Requirements shall be traceable to stakeholder needs per ISO 13485.";
|
|
62
|
+
attribute predicateExpression = "derivesFrom->size() >= 1";
|
|
63
|
+
constraint { true }
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
constraint def swReqTraceRule {
|
|
67
|
+
attribute id = "CR-MED-011";
|
|
68
|
+
attribute appliesTo = "SoftwareRequirement";
|
|
69
|
+
attribute severity = RuleSeverityKind::error;
|
|
70
|
+
attribute rationaleText = "Software requirements derive from system requirements per IEC 62304.";
|
|
71
|
+
attribute predicateExpression = "derivesFrom->size() >= 1";
|
|
72
|
+
constraint { true }
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// CR-MED-012 (RequirementIdMustBeUnique) is intentionally omitted from the native
|
|
76
|
+
// constraint set: cross-element uniqueness is not a single-subject predicate and
|
|
77
|
+
// cannot be expressed as a `constraint { … }` body over one Requirement.
|
|
78
|
+
// It remains an engine-level check (future model-level constraint support).
|
|
79
|
+
// Do not reintroduce the `predicate="uniqueAttribute"` part.
|
|
80
|
+
|
|
81
|
+
// ─── Architecture Layer Rules ────────────────────────────────────────
|
|
82
|
+
|
|
83
|
+
constraint def swComponentSafetyClassRule {
|
|
84
|
+
attribute id = "CR-MED-020";
|
|
85
|
+
attribute appliesTo = "SoftwareComponent";
|
|
86
|
+
attribute severity = RuleSeverityKind::error;
|
|
87
|
+
attribute rationaleText = "IEC 62304 requires safety classification for all software items.";
|
|
88
|
+
attribute predicateExpression = "attributes.safetyClass != \"\"";
|
|
89
|
+
constraint { true }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
constraint def swComponentReqRule {
|
|
93
|
+
attribute id = "CR-MED-021";
|
|
94
|
+
attribute appliesTo = "SoftwareComponent";
|
|
95
|
+
attribute severity = RuleSeverityKind::warning;
|
|
96
|
+
attribute rationaleText = "Software items shall be linked to their requirements per IEC 62304.";
|
|
97
|
+
attribute predicateExpression = "satisfiedBy->size() >= 1";
|
|
98
|
+
constraint { true }
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
constraint def logicalFunctionAllocationRule {
|
|
102
|
+
attribute id = "CR-MED-022";
|
|
103
|
+
attribute appliesTo = "LogicalFunction";
|
|
104
|
+
attribute severity = RuleSeverityKind::warning;
|
|
105
|
+
attribute rationaleText = "Functions should be allocated to implementation elements.";
|
|
106
|
+
attribute predicateExpression = "allocatedTo->size() >= 1";
|
|
107
|
+
constraint { true }
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// ─── Verification Layer Rules ────────────────────────────────────────
|
|
111
|
+
|
|
112
|
+
constraint def verificationCaseMethodRule {
|
|
113
|
+
attribute id = "CR-MED-030";
|
|
114
|
+
attribute appliesTo = "VerificationCase";
|
|
115
|
+
attribute severity = RuleSeverityKind::error;
|
|
116
|
+
attribute rationaleText = "Verification method (test, analysis, inspection, demonstration) required per IEC 62304.";
|
|
117
|
+
attribute predicateExpression = "attributes.methodKind != \"\"";
|
|
118
|
+
constraint { true }
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
constraint def verificationCaseTargetRule {
|
|
122
|
+
attribute id = "CR-MED-031";
|
|
123
|
+
attribute appliesTo = "VerificationCase";
|
|
124
|
+
attribute severity = RuleSeverityKind::error;
|
|
125
|
+
attribute rationaleText = "Verification cases must be linked to verifiable items.";
|
|
126
|
+
attribute predicateExpression = "verifiedBy->size() >= 1";
|
|
127
|
+
constraint { true }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
constraint def evidenceProductionRule {
|
|
131
|
+
attribute id = "CR-MED-032";
|
|
132
|
+
attribute appliesTo = "VerificationCase";
|
|
133
|
+
attribute severity = RuleSeverityKind::warning;
|
|
134
|
+
attribute rationaleText = "Verification results should be documented as evidence records.";
|
|
135
|
+
attribute predicateExpression = "producesEvidence->size() >= 1";
|
|
136
|
+
constraint { true }
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ─── Cybersecurity Layer Rules ───────────────────────────────────────
|
|
140
|
+
|
|
141
|
+
constraint def threatMitigationRule {
|
|
142
|
+
attribute id = "CR-MED-040";
|
|
143
|
+
attribute appliesTo = "Threat";
|
|
144
|
+
attribute severity = RuleSeverityKind::error;
|
|
145
|
+
attribute rationaleText = "FDA cybersecurity guidance requires threat mitigation.";
|
|
146
|
+
attribute predicateExpression = "derivesCyberRequirement->size() >= 1";
|
|
147
|
+
constraint { true }
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
constraint def assetThreatLinkRule {
|
|
151
|
+
attribute id = "CR-MED-041";
|
|
152
|
+
attribute appliesTo = "CybersecurityAsset";
|
|
153
|
+
attribute severity = RuleSeverityKind::warning;
|
|
154
|
+
attribute rationaleText = "Assets should have threat analysis per FDA cybersecurity guidance.";
|
|
155
|
+
attribute predicateExpression = "threatenedBy->size() >= 1";
|
|
156
|
+
constraint { true }
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// ─── Interface Rules ─────────────────────────────────────────────────
|
|
160
|
+
|
|
161
|
+
constraint def logicalInterfaceDirectionRule {
|
|
162
|
+
attribute id = "CR-MED-050";
|
|
163
|
+
attribute appliesTo = "Interface";
|
|
164
|
+
attribute severity = RuleSeverityKind::error;
|
|
165
|
+
attribute rationaleText = "Interface direction required for integration analysis.";
|
|
166
|
+
attribute predicateExpression = "attributes.direction != \"\"";
|
|
167
|
+
constraint { true }
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
// ─── Conditional Rules ───────────────────────────────────────────────
|
|
171
|
+
|
|
172
|
+
constraint def safetyClassCVerificationRule {
|
|
173
|
+
attribute id = "CR-MED-101";
|
|
174
|
+
attribute appliesTo = "SoftwareComponent";
|
|
175
|
+
attribute severity = RuleSeverityKind::error;
|
|
176
|
+
attribute rationaleText = "IEC 62304 requires rigorous verification for Class C software.";
|
|
177
|
+
attribute predicateExpression = "not(attributes.safetyClass == \"C\") or verifiedBy->size() >= 1";
|
|
178
|
+
constraint { true }
|
|
179
|
+
}
|
|
180
|
+
}
|