@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
package/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 memoarchitect
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE.
|
package/README.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# @memoarchitect/ontology
|
|
2
|
+
|
|
3
|
+
**MEMO — Medical Engineering Modelling Ontology** — the pure SysML v2 content layer.
|
|
4
|
+
|
|
5
|
+
A standalone, tool-portable SysML v2 / KerML ontology for medical-device architecture
|
|
6
|
+
per **ISO 14971**, **IEC 62304**, and **ISO/IEC/IEEE 42010**. Consistency rules ship as
|
|
7
|
+
native `constraint def` / `requirement def` bodies (no engine plug-ins), so the ontology
|
|
8
|
+
is portable *content* consumable by any conformant SysML v2 tool — SysIDE, SysON, or
|
|
9
|
+
[`sysand`](https://docs.sysand.org/).
|
|
10
|
+
|
|
11
|
+
The published package contains **no JavaScript, TypeScript, or engine code**. The MEMO
|
|
12
|
+
engine and CLI live in `memo-tools`; the web app lives in `memo-architect`.
|
|
13
|
+
|
|
14
|
+
## Documentation
|
|
15
|
+
|
|
16
|
+
Start with the [user guide](docs/index.md) to learn MEMO's layer model, choose
|
|
17
|
+
elements and relationships, and follow the GPCA pump example. The reference
|
|
18
|
+
section describes packages, source layout, and maintenance. Build the site with:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
python3 -m pip install "mkdocs>=1.6" "mkdocs-material>=9.5" "pymdown-extensions>=10.0"
|
|
22
|
+
pnpm run docs:build
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Layout
|
|
26
|
+
|
|
27
|
+
The package exposes four logical MEMO packages through `memo.manifest.yaml`.
|
|
28
|
+
The manifest maps package identifiers to package subpaths.
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
memo.manifest.yaml logical package, init, and example map
|
|
32
|
+
ontology/ @memoarchitect/ontology descriptor
|
|
33
|
+
profile/ @memoarchitect/medical-modeling-profile + archetypes/templates
|
|
34
|
+
methodologies/default/ @memoarchitect/methodology-default descriptor
|
|
35
|
+
methodologies/gpca/ @memoarchitect/methodology-gpca descriptor
|
|
36
|
+
template/ complete starter project copied by memo init
|
|
37
|
+
examples/gpca-pump/ reference model (not a scaffold template)
|
|
38
|
+
src/ all reusable .sysml content (namespace = directory)
|
|
39
|
+
medical_device_library.sysml public import surface
|
|
40
|
+
core/ common/ enumerations/ relationships/
|
|
41
|
+
dimensions/ semantics/ + stdlib/* (KerML wrapper)
|
|
42
|
+
architecture/ one folder per layer: context/ requirements/ functions/ behavior/
|
|
43
|
+
logical_structure/ software_structure/ … risk/ cybersecurity/ assurance/ …
|
|
44
|
+
compliance/ artifacts/ change/ document_views/ postmarket/ iso14971/
|
|
45
|
+
viewpoints/ reusable viewpoint and view definitions
|
|
46
|
+
rules/ closure/ coverage/ crosslayer/ lifecycle/ quantitative/ (native constraint defs)
|
|
47
|
+
artifacts/ artifact kinds (memo::artifacts)
|
|
48
|
+
methodology/ default methodology
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Build / verify
|
|
52
|
+
|
|
53
|
+
Requires [`sysand`](https://docs.sysand.org/) on `PATH`.
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
pnpm run build # or: ./scripts/build-kpar.sh
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Builds transient SysAnd projects for the core ontology and methodology into `.kpar`
|
|
60
|
+
archives and fails on any external-parser error. The transient project descriptors and
|
|
61
|
+
build products are not included in the npm package.
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
pnpm test # manifest/layout tests + npm pack content gate
|
|
65
|
+
npm pack # produces the single @memoarchitect/ontology content tarball
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## License
|
|
69
|
+
|
|
70
|
+
MIT
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: DOC-RMP-001
|
|
3
|
+
title: Risk Management Plan
|
|
4
|
+
template: iso-14971/rmp
|
|
5
|
+
group: Risk Management
|
|
6
|
+
created: 1784072756971
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
| Field | Value |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| **Product** | {{project.product}} |
|
|
14
|
+
| **Company** | {{project.company}} |
|
|
15
|
+
| **Device Type** | {{project.device_type}} |
|
|
16
|
+
| **Document Version** | {{project.version}} |
|
|
17
|
+
| **Development Phase** | {{project.phase}} |
|
|
18
|
+
| **Date** | — |
|
|
19
|
+
| **Confidentiality** | Confidential — {{project.company}} |
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
{{toc}}
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 1. Purpose and Scope
|
|
28
|
+
|
|
29
|
+
This Risk Management Plan (RMP) defines the risk management activities for **{{project.product}}** developed by **{{project.company}}**. This plan is maintained throughout the product lifecycle in accordance with ISO 14971:2019.
|
|
30
|
+
|
|
31
|
+
### 1.1 Intended Use
|
|
32
|
+
|
|
33
|
+
<!-- [GUIDANCE] Describe the intended use of the device, intended users, and intended use environment. -->
|
|
34
|
+
|
|
35
|
+
_[TODO: Describe intended use, intended users, and intended use environment]_
|
|
36
|
+
|
|
37
|
+
### 1.2 Scope of Risk Management
|
|
38
|
+
|
|
39
|
+
This plan applies to all phases of the product lifecycle: design, development, manufacture, post-market surveillance, and eventual decommission.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 2. Regulatory Context
|
|
44
|
+
|
|
45
|
+
Complete the table below for **{{project.product}}**:
|
|
46
|
+
|
|
47
|
+
| Requirement | Reference |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| Risk Management Process | ISO 14971:2019 §4.1 |
|
|
50
|
+
| Risk Management Plan | ISO 14971:2019 §4.4 |
|
|
51
|
+
| Risk Estimation | ISO 14971:2019 §5 |
|
|
52
|
+
| Risk Evaluation | ISO 14971:2019 §6 |
|
|
53
|
+
| Risk Control | ISO 14971:2019 §7 |
|
|
54
|
+
| Overall Residual Risk | ISO 14971:2019 §8 |
|
|
55
|
+
| Risk Management Review | ISO 14971:2019 §9 |
|
|
56
|
+
| Post-production | ISO 14971:2019 §10 |
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## 3. Risk Management Team
|
|
61
|
+
|
|
62
|
+
<!-- [GUIDANCE] List all personnel involved in risk management activities. -->
|
|
63
|
+
|
|
64
|
+
| Role | Name | Responsibilities |
|
|
65
|
+
| --- | --- | --- |
|
|
66
|
+
| Risk Management Lead | | Overall RM coordination |
|
|
67
|
+
| Clinical Representative | | Clinical risk input |
|
|
68
|
+
| Software Engineer | | Software FMEA and SOUP risk |
|
|
69
|
+
| Regulatory Affairs | | Standards compliance |
|
|
70
|
+
| Quality Engineer | | Process compliance |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## 4. Risk Acceptability Criteria
|
|
75
|
+
|
|
76
|
+
### 4.1 Severity Levels
|
|
77
|
+
|
|
78
|
+
```memo-query
|
|
79
|
+
kind: RiskAcceptabilityCriteria
|
|
80
|
+
display: table
|
|
81
|
+
columns: name, doc, layer
|
|
82
|
+
empty: "No risk acceptability criteria defined. Add RiskAcceptabilityCriteria elements to the model."
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 4.2 Risk Policy
|
|
86
|
+
|
|
87
|
+
<!-- [GUIDANCE] Define the risk policy: ALARP, broadly acceptable, or unacceptable regions. -->
|
|
88
|
+
|
|
89
|
+
_[TODO: Define risk acceptability matrix — probability vs. severity]_
|
|
90
|
+
|
|
91
|
+
Residual risk is acceptable when:
|
|
92
|
+
- All individual risks are reduced to ALARP or broadly acceptable level
|
|
93
|
+
- Overall residual risk is acceptable per §8 of ISO 14971:2019
|
|
94
|
+
- Unmitigated hazards:
|
|
95
|
+
|
|
96
|
+
```memo-query
|
|
97
|
+
kind: Hazard
|
|
98
|
+
where: layer == "risk"
|
|
99
|
+
display: count
|
|
100
|
+
label: Total hazards in model
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 5. Risk Management Activities
|
|
106
|
+
|
|
107
|
+
### 5.1 Hazard Identification
|
|
108
|
+
|
|
109
|
+
All hazard identification activities are documented in the Hazard Analysis Report (HAR).
|
|
110
|
+
|
|
111
|
+
```memo-query
|
|
112
|
+
kind: Hazard
|
|
113
|
+
display: table
|
|
114
|
+
columns: name, layer, doc
|
|
115
|
+
sort: name
|
|
116
|
+
empty: "No hazards defined. Add Hazard elements to model/risk/*.sysml."
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 5.2 Risk Estimation and Evaluation
|
|
120
|
+
|
|
121
|
+
Risk estimation is performed for each hazardous situation per ISO 14971:2019 §5–6.
|
|
122
|
+
|
|
123
|
+
```memo-query
|
|
124
|
+
kind: HazardousSituation
|
|
125
|
+
display: table
|
|
126
|
+
columns: name, layer, doc
|
|
127
|
+
sort: name
|
|
128
|
+
empty: "No hazardous situations defined."
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### 5.3 Risk Control Measures
|
|
132
|
+
|
|
133
|
+
```memo-query
|
|
134
|
+
kind: RiskControl
|
|
135
|
+
display: table
|
|
136
|
+
columns: name, layer, doc
|
|
137
|
+
sort: name
|
|
138
|
+
empty: "No risk controls defined."
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 5.4 Residual Risk Evaluation
|
|
142
|
+
|
|
143
|
+
Unmitigated hazards (hazards without associated risk controls):
|
|
144
|
+
|
|
145
|
+
```memo-query
|
|
146
|
+
kind: Hazard
|
|
147
|
+
display: table
|
|
148
|
+
columns: name, doc
|
|
149
|
+
empty: "All hazards have associated risk controls."
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 6. Risk Management Documentation
|
|
155
|
+
|
|
156
|
+
Complete the table below for **{{project.product}}**:
|
|
157
|
+
|
|
158
|
+
| Document | Purpose | Reference |
|
|
159
|
+
| --- | --- | --- |
|
|
160
|
+
| Hazard Analysis Report (HAR) | Hazard identification and estimation | HAR |
|
|
161
|
+
| FMEA | Failure mode analysis | FMEA |
|
|
162
|
+
| Risk Benefit Analysis | Benefit-risk justification | N/A |
|
|
163
|
+
| Risk Management Report | Overall residual risk summary | N/A |
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## 7. Plan Maintenance
|
|
168
|
+
|
|
169
|
+
This plan shall be reviewed:
|
|
170
|
+
- At each major design change
|
|
171
|
+
- Following post-market surveillance findings
|
|
172
|
+
- Prior to each design review gate
|
|
173
|
+
- At least annually during active development
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
## Revision History
|
|
179
|
+
|
|
180
|
+
| Version | Date | Author | Description of Change |
|
|
181
|
+
| --- | --- | --- | --- |
|
|
182
|
+
| 1.0 | {{project.version}} | {{project.authors}} | Initial release |
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
## Approvals
|
|
188
|
+
|
|
189
|
+
This document has been reviewed and approved by the following personnel:
|
|
190
|
+
|
|
191
|
+
| Name | Role | Signature | Date |
|
|
192
|
+
| --- | --- | --- | --- |
|
|
193
|
+
| | Quality Assurance | | |
|
|
194
|
+
| | Regulatory Affairs | | |
|
|
195
|
+
| | Engineering Lead | | |
|
|
196
|
+
| | Clinical Affairs | | |
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
## References
|
|
202
|
+
|
|
203
|
+
| Standard | Title |
|
|
204
|
+
| --- | --- |
|
|
205
|
+
| ISO 14971:2019 | Medical devices — Application of risk management to medical devices |
|
|
206
|
+
| IEC 62304:2006+AMD1:2015 | Medical device software — Software life cycle processes |
|
|
207
|
+
| IEC 62366-1:2015+AMD1:2020 | Medical devices — Usability engineering |
|
|
208
|
+
| ISO 13485:2016 | Medical devices — Quality management systems |
|
|
209
|
+
| 21 CFR Part 820 | Quality System Regulation |
|
|
210
|
+
| IEC 81001-5-1:2021 | Health software and health IT systems safety, effectiveness and security |
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# GPCA Infusion Pump — submission-grade reference model
|
|
2
|
+
# Based on University of Minnesota CriSys GPCA project
|
|
3
|
+
projectName: gpca-pump
|
|
4
|
+
projectType: device
|
|
5
|
+
|
|
6
|
+
# Phase H: project pins the GPCA-specific methodology.
|
|
7
|
+
# @memo/methodology-gpca extends @memo/methodology-default and subtracts
|
|
8
|
+
# cybersecurity and SOUP for the non-networked prototype variant.
|
|
9
|
+
methodology: "@memo/methodology-gpca@^0.4.3"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
package memo_examples_gpca_pump_methodology_gpca_methodology {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_methodology_profiles::*;
|
|
5
|
+
private import memo_examples_gpca_pump_methodology_gpca_profiles::*;
|
|
6
|
+
private import memo_core_relationships::*;
|
|
7
|
+
private import memo_examples_gpca_pump_model_catalog_gpca_requirements::*;
|
|
8
|
+
private import memo_examples_gpca_pump_model_catalog_gpca_architecture::*;
|
|
9
|
+
|
|
10
|
+
connection : ResolvesToMethodology connect boundModelElement ::> tlm to resolvedMethodology ::> gpcaMethodResolved;
|
|
11
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package memo_examples_gpca_pump_methodology_gpca_profiles {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_methodology_core::*;
|
|
5
|
+
private import memo_methodology_profiles::*;
|
|
6
|
+
private import memo_core_enumerations::*;
|
|
7
|
+
|
|
8
|
+
part gpcaMethodDefinition : MethodologyDefinition {
|
|
9
|
+
attribute :>> id = "METH-GPCA-001";
|
|
10
|
+
attribute :>> name = "GPCAPrototypeMethodology";
|
|
11
|
+
attribute :>> version = "1.0";
|
|
12
|
+
attribute :>> domain = "medical device modeling";
|
|
13
|
+
attribute :>> description = "GPCA infusion pump methodology — subtraction-based tailoring for non-networked prototype. Excludes cybersecurity layer and SOUPComponent.";
|
|
14
|
+
attribute :>> baseMethodName = "MedicalDeviceLightDefault";
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
part gpcaMethodResolved : ResolvedMethodology {
|
|
18
|
+
attribute :>> id = "RMETH-GPCA-001";
|
|
19
|
+
attribute :>> name = "GPCAPrototypeResolved";
|
|
20
|
+
attribute :>> version = "1.0";
|
|
21
|
+
attribute :>> safetyClassification = SafetyClassKind::C;
|
|
22
|
+
attribute :>> lifecycleStage = LifecycleStateKind::development;
|
|
23
|
+
attribute :>> resolutionSummary = "GPCA infusion pump — IEC 62304 Class C at development stage. Default scope minus cybersecurity and SOUP, as the prototype is non-networked.";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package memo_examples_gpca_pump_methodology_gpca_scope {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_methodology_core::*;
|
|
5
|
+
private import memo_core_methodology_scope::*;
|
|
6
|
+
private import memo_core_enumerations::*;
|
|
7
|
+
|
|
8
|
+
part gpcaCoverageScope : MethodologyScope {
|
|
9
|
+
attribute :>> id = "SCOPE-GPCA-001";
|
|
10
|
+
attribute :>> name = "GPCACoverageScope";
|
|
11
|
+
attribute :>> scopeName = "coverage";
|
|
12
|
+
|
|
13
|
+
attribute :>> includedArchLayer = "context; requirements; functions; logical_structure; interfaces; software_structure; hardware_structure; behavior; risk; assurance; constraints";
|
|
14
|
+
|
|
15
|
+
attribute :>> includedStandard = "ISO 14971; IEC 62304; 21 CFR 820; ISO 13485; ISO 14155; IEC 62366; IEC 60601-1";
|
|
16
|
+
|
|
17
|
+
attribute :>> includedArtifactKind = "RiskManagementPlan";
|
|
18
|
+
|
|
19
|
+
attribute :>> includedViewpointType = "VP-CTX; VP-LOG; VP-RISK";
|
|
20
|
+
|
|
21
|
+
attribute :>> excludedKind = "CybersecurityAsset; AttackSurface; Threat; Vulnerability; ThreatScenario; CyberHazard; CyberRisk; CyberMitigation; SecurityRequirement; TrustBoundary; SecurityClaim; SOUPComponent";
|
|
22
|
+
|
|
23
|
+
attribute :>> description = "GPCA prototype methodology — subtracts cybersecurity layer (non-networked device) and SOUPComponent (no SOUP in prototype). Derived from default methodology by exclusion.";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
package memo_examples_gpca_pump_model_catalog_gpca_analysis {
|
|
2
|
+
private import ScalarValues::*;
|
|
3
|
+
|
|
4
|
+
private import memo_architecture_analysis::*;
|
|
5
|
+
private import memo_core_enumerations::*;
|
|
6
|
+
|
|
7
|
+
// ── FMEA (IEC 60812) ────────────────────────────────────────
|
|
8
|
+
part fmeaDelivery : FMEAWorksheet {
|
|
9
|
+
attribute :>> id = "FMEA-001";
|
|
10
|
+
attribute :>> name = "DrugDeliveryFMEA";
|
|
11
|
+
attribute :>> analysisScope = "Fluid path, pump mechanism, delivery sensors, and patient pendant";
|
|
12
|
+
attribute :>> standardReference = "IEC 60812";
|
|
13
|
+
attribute :>> analysisBasis = "UMN CriSys GPCA architecture v2.0";
|
|
14
|
+
attribute :>> revisionDate = "2026-07-03";
|
|
15
|
+
attribute :>> reviewer = "Safety review board";
|
|
16
|
+
}
|
|
17
|
+
part fmMotorRunaway : FailureMode {
|
|
18
|
+
attribute :>> id = "FM-001";
|
|
19
|
+
attribute :>> name = "PumpMotorRunaway";
|
|
20
|
+
attribute :>> failureModeKind = FailureModeKind::unintendedFunction;
|
|
21
|
+
attribute :>> severityRating = 10;
|
|
22
|
+
attribute :>> occurrenceRating = 2;
|
|
23
|
+
attribute :>> detectionRating = 3;
|
|
24
|
+
attribute :>> rpn = 60;
|
|
25
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
26
|
+
attribute :>> description = "Motor steps faster than commanded, delivering more drug than prescribed.";
|
|
27
|
+
}
|
|
28
|
+
part fmAirSensorSilent : FailureMode {
|
|
29
|
+
attribute :>> id = "FM-002";
|
|
30
|
+
attribute :>> name = "AirSensorFailsSilent";
|
|
31
|
+
attribute :>> failureModeKind = FailureModeKind::lossOfFunction;
|
|
32
|
+
attribute :>> severityRating = 10;
|
|
33
|
+
attribute :>> occurrenceRating = 3;
|
|
34
|
+
attribute :>> detectionRating = 4;
|
|
35
|
+
attribute :>> rpn = 120;
|
|
36
|
+
attribute :>> criticality = CriticalityKind::catastrophic;
|
|
37
|
+
attribute :>> description = "Air-in-line sensor reports 'no air' regardless of actual line state.";
|
|
38
|
+
}
|
|
39
|
+
part fmOcclusionDrift : FailureMode {
|
|
40
|
+
attribute :>> id = "FM-003";
|
|
41
|
+
attribute :>> name = "OcclusionSensorDrift";
|
|
42
|
+
attribute :>> failureModeKind = FailureModeKind::degradedFunction;
|
|
43
|
+
attribute :>> severityRating = 7;
|
|
44
|
+
attribute :>> occurrenceRating = 4;
|
|
45
|
+
attribute :>> detectionRating = 4;
|
|
46
|
+
attribute :>> rpn = 112;
|
|
47
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
48
|
+
attribute :>> description = "Pressure sensor drifts so occlusions are detected late or not at all.";
|
|
49
|
+
}
|
|
50
|
+
part fmStuckBolusButton : FailureMode {
|
|
51
|
+
attribute :>> id = "FM-004";
|
|
52
|
+
attribute :>> name = "BolusButtonStuckClosed";
|
|
53
|
+
attribute :>> failureModeKind = FailureModeKind::unintendedFunction;
|
|
54
|
+
attribute :>> severityRating = 9;
|
|
55
|
+
attribute :>> occurrenceRating = 3;
|
|
56
|
+
attribute :>> detectionRating = 2;
|
|
57
|
+
attribute :>> rpn = 54;
|
|
58
|
+
attribute :>> criticality = CriticalityKind::high;
|
|
59
|
+
attribute :>> description = "Pendant switch shorted, continuously asserting bolus requests.";
|
|
60
|
+
}
|
|
61
|
+
part fmBatteryEarlyDepletion : FailureMode {
|
|
62
|
+
attribute :>> id = "FM-005";
|
|
63
|
+
attribute :>> name = "BatteryDepletesEarly";
|
|
64
|
+
attribute :>> failureModeKind = FailureModeKind::prematureFunction;
|
|
65
|
+
attribute :>> severityRating = 6;
|
|
66
|
+
attribute :>> occurrenceRating = 4;
|
|
67
|
+
attribute :>> detectionRating = 3;
|
|
68
|
+
attribute :>> rpn = 72;
|
|
69
|
+
attribute :>> criticality = CriticalityKind::medium;
|
|
70
|
+
attribute :>> description = "Aged battery sustains less than the specified backup duration during transport.";
|
|
71
|
+
}
|
|
72
|
+
part feOverdose : FailureEffect {
|
|
73
|
+
attribute :>> id = "FE-001";
|
|
74
|
+
attribute :>> name = "ExcessDrugDelivered";
|
|
75
|
+
attribute :>> effectLevel = FailureEffectLevelKind::endEffect;
|
|
76
|
+
attribute :>> effectOnPatient = "opioid overdose, respiratory depression";
|
|
77
|
+
attribute :>> effectOnOperator = "emergency intervention required";
|
|
78
|
+
attribute :>> effectOnSystem = "therapy stopped by cross-check or clinician";
|
|
79
|
+
attribute :>> severity = SeverityKind::catastrophic;
|
|
80
|
+
}
|
|
81
|
+
part feAirDelivered : FailureEffect {
|
|
82
|
+
attribute :>> id = "FE-002";
|
|
83
|
+
attribute :>> name = "AirReachesPatientLine";
|
|
84
|
+
attribute :>> effectLevel = FailureEffectLevelKind::endEffect;
|
|
85
|
+
attribute :>> effectOnPatient = "risk of vascular air embolism";
|
|
86
|
+
attribute :>> effectOnOperator = "line re-prime and incident report";
|
|
87
|
+
attribute :>> effectOnSystem = "undetected hazardous state";
|
|
88
|
+
attribute :>> severity = SeverityKind::catastrophic;
|
|
89
|
+
}
|
|
90
|
+
part feTherapyInterrupted : FailureEffect {
|
|
91
|
+
attribute :>> id = "FE-003";
|
|
92
|
+
attribute :>> name = "TherapyInterruptedUnnoticed";
|
|
93
|
+
attribute :>> effectLevel = FailureEffectLevelKind::endEffect;
|
|
94
|
+
attribute :>> effectOnPatient = "untreated pain; possible post-occlusion bolus";
|
|
95
|
+
attribute :>> effectOnOperator = "delayed response";
|
|
96
|
+
attribute :>> effectOnSystem = "under-delivery until detected";
|
|
97
|
+
attribute :>> severity = SeverityKind::serious;
|
|
98
|
+
}
|
|
99
|
+
part fcMotorDriverFault : FailureCause {
|
|
100
|
+
attribute :>> id = "FCA-001";
|
|
101
|
+
attribute :>> name = "MotorDriverElectronicsFault";
|
|
102
|
+
attribute :>> causeCategory = FailureCauseCategoryKind::design;
|
|
103
|
+
attribute :>> causeDescription = "Driver stage latch-up or firmware step-rate computation fault";
|
|
104
|
+
attribute :>> occurrenceRating = ProbabilityKind::remote;
|
|
105
|
+
attribute :>> preventionMethod = "independent flow cross-check; watchdog";
|
|
106
|
+
}
|
|
107
|
+
part fcTransducerAging : FailureCause {
|
|
108
|
+
attribute :>> id = "FCA-002";
|
|
109
|
+
attribute :>> name = "UltrasonicTransducerAging";
|
|
110
|
+
attribute :>> causeCategory = FailureCauseCategoryKind::wear;
|
|
111
|
+
attribute :>> causeDescription = "Air sensor transducer sensitivity degrades with age";
|
|
112
|
+
attribute :>> occurrenceRating = ProbabilityKind::occasional;
|
|
113
|
+
attribute :>> preventionMethod = "POST sensor plausibility check; periodic maintenance";
|
|
114
|
+
}
|
|
115
|
+
part fcPendantAbuse : FailureCause {
|
|
116
|
+
attribute :>> id = "FCA-003";
|
|
117
|
+
attribute :>> name = "PendantCableAbuse";
|
|
118
|
+
attribute :>> causeCategory = FailureCauseCategoryKind::misuse;
|
|
119
|
+
attribute :>> causeDescription = "Cable crushed in bed rail shorts the switch line";
|
|
120
|
+
attribute :>> occurrenceRating = ProbabilityKind::occasional;
|
|
121
|
+
attribute :>> preventionMethod = "stuck-input detection (REQ-X-09); strain-relieved cable";
|
|
122
|
+
}
|
|
123
|
+
part dmFlowCrossCheck : DetectionMethod {
|
|
124
|
+
attribute :>> id = "DM-001";
|
|
125
|
+
attribute :>> name = "CommandedVsMeasuredFlowComparison";
|
|
126
|
+
attribute :>> methodKind = DetectionMethodKind::monitoring;
|
|
127
|
+
attribute :>> detectionPoint = "every execution step during ACTIVE therapy";
|
|
128
|
+
attribute :>> confidence = DetectionKind::high;
|
|
129
|
+
}
|
|
130
|
+
part dmPostSensorCheck : DetectionMethod {
|
|
131
|
+
attribute :>> id = "DM-002";
|
|
132
|
+
attribute :>> name = "POSTSensorPlausibilityCheck";
|
|
133
|
+
attribute :>> methodKind = DetectionMethodKind::selfDiagnostic;
|
|
134
|
+
attribute :>> detectionPoint = "power-on and periodic in-service test";
|
|
135
|
+
attribute :>> confidence = DetectionKind::moderate;
|
|
136
|
+
}
|
|
137
|
+
part dmStuckInputMonitor : DetectionMethod {
|
|
138
|
+
attribute :>> id = "DM-003";
|
|
139
|
+
attribute :>> name = "StuckInputMonitor";
|
|
140
|
+
attribute :>> methodKind = DetectionMethodKind::monitoring;
|
|
141
|
+
attribute :>> detectionPoint = "bolus input asserted beyond 60 s";
|
|
142
|
+
attribute :>> confidence = DetectionKind::high;
|
|
143
|
+
}
|
|
144
|
+
part fmeaActionAirSensor : FMEAAction {
|
|
145
|
+
attribute :>> id = "FMA-001";
|
|
146
|
+
attribute :>> name = "AddRedundantAirDetectionWindow";
|
|
147
|
+
attribute :>> actionKind = FMEAActionKind::designChange;
|
|
148
|
+
attribute :>> responsible = "hardware lead";
|
|
149
|
+
attribute :>> targetCompletionDate = "2026-09-30";
|
|
150
|
+
attribute :>> revisedRpn = 40;
|
|
151
|
+
attribute :>> description = "Add second sensing window downstream so a single silent transducer cannot mask air.";
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// ── Fault tree (overdose top event) ─────────────────────────
|
|
155
|
+
part ftaOverdose : FaultTree {
|
|
156
|
+
attribute :>> id = "FTA-001";
|
|
157
|
+
attribute :>> name = "OverdoseFaultTree";
|
|
158
|
+
attribute :>> standardReference = "IEC 61025";
|
|
159
|
+
attribute :>> analysisScope = "Drug over-delivery during ACTIVE therapy";
|
|
160
|
+
attribute :>> topEventDescription = "Drug delivered in excess of prescription limits";
|
|
161
|
+
attribute :>> cutSetSummary = "All minimal cut sets are order 2 or higher after mitigation";
|
|
162
|
+
attribute :>> revisionDate = "2026-07-03";
|
|
163
|
+
}
|
|
164
|
+
part fteOverdoseTop : FaultTreeEvent {
|
|
165
|
+
attribute :>> id = "FTE-001";
|
|
166
|
+
attribute :>> name = "ExcessDrugDeliveredTopEvent";
|
|
167
|
+
attribute :>> eventKind = FaultTreeEventKind::topEvent;
|
|
168
|
+
attribute :>> description = "Delivered volume exceeds prescribed limits";
|
|
169
|
+
}
|
|
170
|
+
part fteMotorRunaway : FaultTreeEvent {
|
|
171
|
+
attribute :>> id = "FTE-002";
|
|
172
|
+
attribute :>> name = "MotorRunawayBasicEvent";
|
|
173
|
+
attribute :>> eventKind = FaultTreeEventKind::basicEvent;
|
|
174
|
+
attribute :>> failureRate = 0.000001;
|
|
175
|
+
attribute :>> exposureTime = 100.0;
|
|
176
|
+
attribute :>> description = "Pump motor delivers faster than commanded (FM-001)";
|
|
177
|
+
}
|
|
178
|
+
part fteCrossCheckFails : FaultTreeEvent {
|
|
179
|
+
attribute :>> id = "FTE-003";
|
|
180
|
+
attribute :>> name = "FlowCrossCheckUnavailable";
|
|
181
|
+
attribute :>> eventKind = FaultTreeEventKind::basicEvent;
|
|
182
|
+
attribute :>> failureRate = 0.00001;
|
|
183
|
+
attribute :>> exposureTime = 100.0;
|
|
184
|
+
attribute :>> description = "Independent flow sensor or comparison logic fails (FM-003 family)";
|
|
185
|
+
}
|
|
186
|
+
part fteLockoutFault : FaultTreeEvent {
|
|
187
|
+
attribute :>> id = "FTE-004";
|
|
188
|
+
attribute :>> name = "LockoutEnforcementFault";
|
|
189
|
+
attribute :>> eventKind = FaultTreeEventKind::basicEvent;
|
|
190
|
+
attribute :>> failureRate = 0.0000001;
|
|
191
|
+
attribute :>> exposureTime = 100.0;
|
|
192
|
+
attribute :>> description = "Infusion manager authorizes bolus despite active lockout";
|
|
193
|
+
}
|
|
194
|
+
part fteStuckButtonUndetected : FaultTreeEvent {
|
|
195
|
+
attribute :>> id = "FTE-005";
|
|
196
|
+
attribute :>> name = "StuckBolusButtonUndetected";
|
|
197
|
+
attribute :>> eventKind = FaultTreeEventKind::basicEvent;
|
|
198
|
+
attribute :>> failureRate = 0.000001;
|
|
199
|
+
attribute :>> exposureTime = 100.0;
|
|
200
|
+
attribute :>> description = "Pendant stuck closed and stuck-input monitor fails (FM-004)";
|
|
201
|
+
}
|
|
202
|
+
part ftgOverdoseOr : FaultTreeGate {
|
|
203
|
+
attribute :>> id = "FTG-001";
|
|
204
|
+
attribute :>> name = "OverdelivryPathOrGate";
|
|
205
|
+
attribute :>> gateKind = FaultTreeGateKind::orGate;
|
|
206
|
+
}
|
|
207
|
+
part ftgMotorAnd : FaultTreeGate {
|
|
208
|
+
attribute :>> id = "FTG-002";
|
|
209
|
+
attribute :>> name = "MotorRunawayAndCrossCheckGate";
|
|
210
|
+
attribute :>> gateKind = FaultTreeGateKind::andGate;
|
|
211
|
+
}
|
|
212
|
+
part ftgBolusAnd : FaultTreeGate {
|
|
213
|
+
attribute :>> id = "FTG-003";
|
|
214
|
+
attribute :>> name = "UnauthorizedBolusAndGate";
|
|
215
|
+
attribute :>> gateKind = FaultTreeGateKind::andGate;
|
|
216
|
+
}
|
|
217
|
+
part mcsMotorPath : MinimalCutSet {
|
|
218
|
+
attribute :>> id = "MCS-001";
|
|
219
|
+
attribute :>> name = "MotorRunawayWithLostCrossCheck";
|
|
220
|
+
attribute :>> cutSetOrder = 2;
|
|
221
|
+
attribute :>> involvedEvents = "FTE-002, FTE-003";
|
|
222
|
+
attribute :>> significance = "dominant contributor; controlled by RC-008 independence";
|
|
223
|
+
}
|
|
224
|
+
part mcsBolusPath : MinimalCutSet {
|
|
225
|
+
attribute :>> id = "MCS-002";
|
|
226
|
+
attribute :>> name = "StuckButtonWithLockoutFault";
|
|
227
|
+
attribute :>> cutSetOrder = 2;
|
|
228
|
+
attribute :>> involvedEvents = "FTE-004, FTE-005";
|
|
229
|
+
attribute :>> significance = "requires simultaneous software and detection failure; controlled by RC-001 and REQ-X-09";
|
|
230
|
+
}
|
|
231
|
+
}
|