@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.
Files changed (217) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +70 -0
  3. package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +210 -0
  4. package/examples/gpca-pump/memo.config.yaml +9 -0
  5. package/examples/gpca-pump/methodology/gpca_methodology.sysml +11 -0
  6. package/examples/gpca-pump/methodology/gpca_profiles.sysml +25 -0
  7. package/examples/gpca-pump/methodology/gpca_scope.sysml +25 -0
  8. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +231 -0
  9. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +272 -0
  10. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +81 -0
  11. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +363 -0
  12. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +205 -0
  13. package/examples/gpca-pump/model/catalog/gpca_context.sysml +113 -0
  14. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +172 -0
  15. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +173 -0
  16. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +1062 -0
  17. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +209 -0
  18. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +53 -0
  19. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1505 -0
  20. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +744 -0
  21. package/examples/gpca-pump/model/catalog/gpca_system.sysml +144 -0
  22. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +696 -0
  23. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +285 -0
  24. package/examples/gpca-pump/model/samples/README.md +24 -0
  25. package/examples/gpca-pump/model/samples/action_flow_view.sysml +72 -0
  26. package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +9 -0
  27. package/examples/gpca-pump/model/samples/functional_flow_view.sysml +153 -0
  28. package/examples/gpca-pump/model/samples/interconnection_view.sysml +93 -0
  29. package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +99 -0
  30. package/examples/gpca-pump/model/samples/operational_behaviour_view.sysml +145 -0
  31. package/examples/gpca-pump/model/samples/tree_view.sysml +56 -0
  32. package/examples/gpca-pump/model/views/behavior_action_flow_view.sysml +41 -0
  33. package/examples/gpca-pump/model/views/context_system_context_view.sysml +43 -0
  34. package/examples/gpca-pump/model/views/cybersecurity_cybersecurity_view.sysml +44 -0
  35. package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +29 -0
  36. package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +28 -0
  37. package/examples/gpca-pump/model/views/document_dhf_index_view.sysml +29 -0
  38. package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +29 -0
  39. package/examples/gpca-pump/model/views/document_rmf_view.sysml +29 -0
  40. package/examples/gpca-pump/model/views/document_sdd_view.sysml +29 -0
  41. package/examples/gpca-pump/model/views/document_threat_model_view.sysml +28 -0
  42. package/examples/gpca-pump/model/views/document_usability_view.sysml +28 -0
  43. package/examples/gpca-pump/model/views/document_vv_view.sysml +29 -0
  44. package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +42 -0
  45. package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +41 -0
  46. package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +43 -0
  47. package/examples/gpca-pump/model/views/logical_logical_architecture_view.sysml +42 -0
  48. package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +42 -0
  49. package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +44 -0
  50. package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +41 -0
  51. package/examples/gpca-pump/model/views/operational_use_case_view.sysml +43 -0
  52. package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +41 -0
  53. package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +42 -0
  54. package/examples/gpca-pump/model/views/risk_fmea_view.sysml +42 -0
  55. package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +44 -0
  56. package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +43 -0
  57. package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +42 -0
  58. package/memo.manifest.yaml +13 -0
  59. package/methodologies/default/memo.package.yaml +9 -0
  60. package/methodologies/gpca/memo.package.yaml +9 -0
  61. package/ontology/memo.package.yaml +8 -0
  62. package/ontology/memo.rendering.yaml +47 -0
  63. package/package.json +65 -0
  64. package/profile/archetypes.yaml +36 -0
  65. package/profile/memo.package.yaml +9 -0
  66. package/profile/templates/connected-device/starter.sysml +8 -0
  67. package/profile/templates/infusion-pump/starter.sysml +8 -0
  68. package/profile/templates/monitoring-device/starter.sysml +8 -0
  69. package/profile/templates/samd/starter.sysml +8 -0
  70. package/src/architecture/analysis/memo_fmea.sysml +91 -0
  71. package/src/architecture/assurance/memo_assurance.sysml +29 -0
  72. package/src/architecture/behavior/memo_behavior.sysml +65 -0
  73. package/src/architecture/constraints/memo_constraints.sysml +14 -0
  74. package/src/architecture/context/memo_context.sysml +58 -0
  75. package/src/architecture/cybersecurity/memo_cybersecurity.sysml +99 -0
  76. package/src/architecture/decisions/memo_decisions.sysml +12 -0
  77. package/src/architecture/functions/memo_functions.sysml +30 -0
  78. package/src/architecture/hardware_structure/memo_hardware_structure.sysml +15 -0
  79. package/src/architecture/interfaces/memo_interfaces.sysml +103 -0
  80. package/src/architecture/logical_structure/memo_logical_structure.sysml +10 -0
  81. package/src/architecture/operational/memo_operational.sysml +51 -0
  82. package/src/architecture/physical/memo_physical_architecture.sysml +19 -0
  83. package/src/architecture/requirements/memo_requirements.sysml +69 -0
  84. package/src/architecture/risk/memo_arch_risk.sysml +7 -0
  85. package/src/architecture/risk/memo_risk.sysml +80 -0
  86. package/src/architecture/software_structure/memo_software_structure.sysml +44 -0
  87. package/src/architecture/system/memo_system_analysis.sysml +54 -0
  88. package/src/artifacts/clinical_safety_report.sysml +12 -0
  89. package/src/artifacts/cybersecurity_assessment_report.sysml +12 -0
  90. package/src/artifacts/definitions/memo_artifact_definitions.sysml +12 -0
  91. package/src/artifacts/design_change_log.sysml +12 -0
  92. package/src/artifacts/design_history_file_index.sysml +12 -0
  93. package/src/artifacts/design_input_plan.sysml +12 -0
  94. package/src/artifacts/design_output_plan.sysml +12 -0
  95. package/src/artifacts/evidence_record.sysml +12 -0
  96. package/src/artifacts/failure_mode_effects_analysis.sysml +12 -0
  97. package/src/artifacts/hazard_analysis_report.sysml +12 -0
  98. package/src/artifacts/labeling_specification.sysml +12 -0
  99. package/src/artifacts/requirements_specification.sysml +12 -0
  100. package/src/artifacts/requirements_traceability_matrix.sysml +12 -0
  101. package/src/artifacts/risk_management_plan.sysml +12 -0
  102. package/src/artifacts/software_design_description.sysml +12 -0
  103. package/src/artifacts/software_development_plan.sysml +12 -0
  104. package/src/artifacts/soup_list.sysml +12 -0
  105. package/src/artifacts/system_architecture_description.sysml +12 -0
  106. package/src/artifacts/test_protocol.sysml +12 -0
  107. package/src/artifacts/test_report.sysml +12 -0
  108. package/src/artifacts/threat_model_report.sysml +12 -0
  109. package/src/artifacts/usability_engineering_report.sysml +12 -0
  110. package/src/compliance/artifacts/memo_artifacts.sysml +13 -0
  111. package/src/compliance/change/memo_change.sysml +17 -0
  112. package/src/compliance/dhf-templates/21cfr820/change-record.md +45 -0
  113. package/src/compliance/dhf-templates/21cfr820/design-input.md +67 -0
  114. package/src/compliance/dhf-templates/21cfr820/design-output.md +80 -0
  115. package/src/compliance/dhf-templates/21cfr820/design-review.md +51 -0
  116. package/src/compliance/dhf-templates/21cfr820/design-validation.md +64 -0
  117. package/src/compliance/dhf-templates/21cfr820/design-verification.md +57 -0
  118. package/src/compliance/dhf-templates/21cfr820/dhf-index.md +111 -0
  119. package/src/compliance/dhf-templates/21cfr820/transfer-plan.md +50 -0
  120. package/src/compliance/dhf-templates/21cfr820/user-needs.md +81 -0
  121. package/src/compliance/dhf-templates/21cfr820/vv-plan.md +89 -0
  122. package/src/compliance/dhf-templates/21cfr820/vv-report.md +85 -0
  123. package/src/compliance/dhf-templates/fda-cybersecurity/incident-response.md +66 -0
  124. package/src/compliance/dhf-templates/fda-cybersecurity/postmarket-surveillance.md +63 -0
  125. package/src/compliance/dhf-templates/fda-cybersecurity/security-arch.md +83 -0
  126. package/src/compliance/dhf-templates/fda-cybersecurity/threat-model.md +100 -0
  127. package/src/compliance/dhf-templates/fda-cybersecurity/vuln-assessment.md +77 -0
  128. package/src/compliance/dhf-templates/iec-62304/change-control.md +40 -0
  129. package/src/compliance/dhf-templates/iec-62304/detailed-design.md +69 -0
  130. package/src/compliance/dhf-templates/iec-62304/integration-test.md +68 -0
  131. package/src/compliance/dhf-templates/iec-62304/sad.md +115 -0
  132. package/src/compliance/dhf-templates/iec-62304/sbom.md +67 -0
  133. package/src/compliance/dhf-templates/iec-62304/sdp.md +108 -0
  134. package/src/compliance/dhf-templates/iec-62304/soup.md +77 -0
  135. package/src/compliance/dhf-templates/iec-62304/srs.md +138 -0
  136. package/src/compliance/dhf-templates/iec-62304/sw-traceability.md +111 -0
  137. package/src/compliance/dhf-templates/iec-62304/system-test.md +67 -0
  138. package/src/compliance/dhf-templates/iec-62366/formative-eval.md +47 -0
  139. package/src/compliance/dhf-templates/iec-62366/summative-eval.md +69 -0
  140. package/src/compliance/dhf-templates/iec-62366/task-analysis.md +57 -0
  141. package/src/compliance/dhf-templates/iec-62366/ue-plan.md +81 -0
  142. package/src/compliance/dhf-templates/iec-62366/ui-spec.md +61 -0
  143. package/src/compliance/dhf-templates/iec-62366/urra.md +74 -0
  144. package/src/compliance/dhf-templates/iec-62366/use-spec.md +61 -0
  145. package/src/compliance/dhf-templates/iso-14971/fmea.md +93 -0
  146. package/src/compliance/dhf-templates/iso-14971/fta.md +70 -0
  147. package/src/compliance/dhf-templates/iso-14971/har.md +165 -0
  148. package/src/compliance/dhf-templates/iso-14971/risk-benefit.md +51 -0
  149. package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +51 -0
  150. package/src/compliance/dhf-templates/iso-14971/rmp.md +169 -0
  151. package/src/compliance/dhf-templates/iso-14971/rmr.md +101 -0
  152. package/src/compliance/dhf-templates/shared/snippets/approval-block.md +16 -0
  153. package/src/compliance/dhf-templates/shared/snippets/document-control-header.md +15 -0
  154. package/src/compliance/dhf-templates/shared/snippets/references-section.md +16 -0
  155. package/src/compliance/dhf-templates/shared/snippets/revision-history-table.md +11 -0
  156. package/src/compliance/document_views/memo_document_views.sysml +7 -0
  157. package/src/compliance/iso14971/risk_management_file.sysml +16 -0
  158. package/src/compliance/postmarket/memo_postmarket.sysml +16 -0
  159. package/src/core/common/memo_common.sysml +50 -0
  160. package/src/core/consistency_rules/consistency_rules.sysml +41 -0
  161. package/src/core/dimensions/dimensions.sysml +37 -0
  162. package/src/core/enumerations/memo_enumerations.sysml +562 -0
  163. package/src/core/methodology_scope/methodology_scope.sysml +46 -0
  164. package/src/core/relationships/memo_relationships.sysml +230 -0
  165. package/src/core/semantics/semantics.sysml +20 -0
  166. package/src/core/stdlib/collections.sysml +6 -0
  167. package/src/core/stdlib/functions.sysml +6 -0
  168. package/src/core/stdlib/scalars.sysml +6 -0
  169. package/src/core/stdlib/time.sysml +6 -0
  170. package/src/medical_device_library.sysml +100 -0
  171. package/src/memo_namespaces.sysml +668 -0
  172. package/src/methodology/LICENSES/MIT.txt +19 -0
  173. package/src/methodology/memo_archetypes.sysml +93 -0
  174. package/src/methodology/memo_core.sysml +53 -0
  175. package/src/methodology/memo_gates.sysml +11 -0
  176. package/src/methodology/memo_patterns.sysml +12 -0
  177. package/src/methodology/memo_profiles.sysml +218 -0
  178. package/src/methodology/memo_rules.sysml +15 -0
  179. package/src/methodology/memo_viewpoints.sysml +5 -0
  180. package/src/methodology/memo_workflow.sysml +14 -0
  181. package/src/rules/closure/closure_rules.sysml +180 -0
  182. package/src/rules/coverage/coverage_rules.sysml +258 -0
  183. package/src/rules/crosslayer/cross_layer_rules.sysml +38 -0
  184. package/src/rules/lifecycle/lifecycle_rules.sysml +41 -0
  185. package/src/rules/quantitative/quantitative_rules.sysml +34 -0
  186. package/src/viewpoints/clinical/clinical_evidence_view.sysml +13 -0
  187. package/src/viewpoints/clinical/clinical_viewpoint.sysml +25 -0
  188. package/src/viewpoints/context/context_viewpoint.sysml +25 -0
  189. package/src/viewpoints/context/system_context_view.sysml +29 -0
  190. package/src/viewpoints/cybersecurity/cybersecurity_assessment_view.sysml +13 -0
  191. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +27 -0
  192. package/src/viewpoints/cybersecurity/threat_model_view.sysml +13 -0
  193. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +82 -0
  194. package/src/viewpoints/functional/function_allocation_view.sysml +29 -0
  195. package/src/viewpoints/functional/functional_viewpoint.sysml +25 -0
  196. package/src/viewpoints/functional/system_functional_tree_view.sysml +29 -0
  197. package/src/viewpoints/logical/logical_architecture_view.sysml +29 -0
  198. package/src/viewpoints/logical/logical_viewpoint.sysml +25 -0
  199. package/src/viewpoints/operational/operational_viewpoint.sysml +25 -0
  200. package/src/viewpoints/operational/use_case_view.sysml +29 -0
  201. package/src/viewpoints/physical/network_topology_view.sysml +29 -0
  202. package/src/viewpoints/physical/physical_bom_view.sysml +29 -0
  203. package/src/viewpoints/physical/physical_viewpoint.sysml +25 -0
  204. package/src/viewpoints/requirements/requirements_traceability_view.sysml +29 -0
  205. package/src/viewpoints/requirements/requirements_viewpoint.sysml +25 -0
  206. package/src/viewpoints/risk/risk_chain_view.sysml +30 -0
  207. package/src/viewpoints/risk/risk_viewpoint.sysml +25 -0
  208. package/src/viewpoints/software/software_architecture_view.sysml +29 -0
  209. package/src/viewpoints/software/software_viewpoint.sysml +25 -0
  210. package/src/viewpoints/usability/usability_engineering_view.sysml +13 -0
  211. package/src/viewpoints/usability/usability_viewpoint.sysml +25 -0
  212. package/src/viewpoints/verification/verification_coverage_view.sysml +29 -0
  213. package/src/viewpoints/verification/verification_viewpoint.sysml +25 -0
  214. package/template/memo.package.yaml +5 -0
  215. package/template/src/catalog/starter.sysml +12 -0
  216. package/template/src/documents/.gitkeep +1 -0
  217. 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
+ }