@memoarchitect/ontology 0.4.6 → 0.6.1

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 (278) hide show
  1. package/README.md +7 -6
  2. package/examples/connected-patient-monitor/README.md +7 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +70 -0
  4. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +3 -0
  5. package/examples/connected-patient-monitor/model/viewpoints/connected_patient_monitor_overview.sysml +6 -0
  6. package/examples/embedded-infusion-pump/README.md +7 -0
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +66 -0
  8. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +3 -0
  9. package/examples/embedded-infusion-pump/model/viewpoints/embedded_infusion_pump_overview.sysml +6 -0
  10. package/examples/extensions/README.md +16 -0
  11. package/examples/extensions/clinical/memo.package.yaml +9 -0
  12. package/examples/extensions/clinical/src/clinical_extension.sysml +3 -0
  13. package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +14 -0
  14. package/examples/extensions/clinical/src/procedures/memo_clinical_procedures.sysml +16 -0
  15. package/examples/extensions/template/memo.package.yaml +9 -0
  16. package/examples/extensions/template/src/extension.sysml +15 -0
  17. package/examples/functional-logical-physical/README.md +7 -0
  18. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +50 -0
  19. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +3 -0
  20. package/examples/functional-logical-physical/model/viewpoints/functional_logical_physical_overview.sysml +6 -0
  21. package/examples/gpca-pump/README.md +26 -0
  22. package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +1 -1
  23. package/examples/gpca-pump/memo.config.yaml +2 -2
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +1 -1
  25. package/examples/gpca-pump/methodology/gpca_scope.sysml +2 -2
  26. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
  27. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +10 -10
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +17 -6
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +11 -11
  30. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +35 -22
  31. package/examples/gpca-pump/model/catalog/gpca_context.sysml +25 -6
  32. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
  33. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +29 -15
  34. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +293 -169
  35. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +145 -27
  36. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +1 -1
  37. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +210 -105
  38. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +66 -69
  39. package/examples/gpca-pump/model/catalog/gpca_system.sysml +43 -76
  40. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +73 -70
  41. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +27 -27
  42. package/examples/gpca-pump/model/views/context_system_context_view.sysml +2 -2
  43. package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +2 -2
  44. package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +2 -2
  45. package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +1 -1
  46. package/examples/gpca-pump/model/views/document_rmf_view.sysml +2 -2
  47. package/examples/gpca-pump/model/views/document_sdd_view.sysml +2 -2
  48. package/examples/gpca-pump/model/views/document_threat_model_view.sysml +1 -1
  49. package/examples/gpca-pump/model/views/document_usability_view.sysml +1 -1
  50. package/examples/gpca-pump/model/views/document_vv_view.sysml +1 -1
  51. package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +1 -1
  52. package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +1 -1
  53. package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +1 -1
  54. package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +1 -1
  55. package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +1 -1
  56. package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +1 -1
  57. package/examples/gpca-pump/model/views/operational_use_case_view.sysml +6 -6
  58. package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +1 -1
  59. package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +1 -1
  60. package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +2 -2
  61. package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +1 -1
  62. package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +1 -1
  63. package/examples/ivd-laboratory-system/README.md +7 -0
  64. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +58 -0
  65. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +3 -0
  66. package/examples/ivd-laboratory-system/model/viewpoints/ivd_laboratory_system_overview.sysml +6 -0
  67. package/examples/manual-surgical-instrument/README.md +7 -0
  68. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +41 -0
  69. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +3 -0
  70. package/examples/manual-surgical-instrument/model/viewpoints/manual_surgical_instrument_overview.sysml +6 -0
  71. package/examples/multidimensional-layers/README.md +7 -0
  72. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +51 -0
  73. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +4 -0
  74. package/examples/multidimensional-layers/model/viewpoints/multidimensional_layers_overview.sysml +13 -0
  75. package/examples/reusable-instrument/README.md +7 -0
  76. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +71 -0
  77. package/examples/reusable-instrument/model/reusable_instrument.sysml +4 -0
  78. package/examples/reusable-instrument/model/viewpoints/reusable_instrument_overview.sysml +13 -0
  79. package/examples/software-only-medical-device/README.md +7 -0
  80. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +62 -0
  81. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +4 -0
  82. package/examples/software-only-medical-device/model/viewpoints/software_only_medical_device_overview.sysml +13 -0
  83. package/examples/surgical-closure-workflow/README.md +8 -0
  84. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +151 -0
  85. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +4 -0
  86. package/examples/surgical-closure-workflow/model/viewpoints/surgical_closure_workflow_overview.sysml +13 -0
  87. package/examples/surgical-robot/README.md +7 -0
  88. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +58 -0
  89. package/examples/surgical-robot/model/surgical_robot.sysml +4 -0
  90. package/examples/surgical-robot/model/viewpoints/surgical_robot_overview.sysml +13 -0
  91. package/examples/sysml-diagram-samples/README.md +32 -0
  92. package/examples/sysml-diagram-samples/memo.package.yaml +5 -0
  93. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/action_flow_view.sysml +22 -4
  94. package/examples/sysml-diagram-samples/model/samples/context_view.sysml +55 -0
  95. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/functional_flow_view.sysml +17 -6
  96. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/interconnection_view.sysml +4 -3
  97. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/operational_behaviour_view.sysml +32 -42
  98. package/examples/sysml-diagram-samples/model/samples/requirements_view.sysml +63 -0
  99. package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +109 -0
  100. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/tree_view.sysml +3 -3
  101. package/examples/sysml-diagram-samples/model/samples/use_case_view.sysml +81 -0
  102. package/examples/temperature-alarm/README.md +7 -0
  103. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +140 -0
  104. package/examples/temperature-alarm/model/temperature_alarm.sysml +4 -0
  105. package/examples/temperature-alarm/model/viewpoints/temperature_alarm_overview.sysml +13 -0
  106. package/memo.manifest.yaml +12 -4
  107. package/methodologies/default/memo.package.yaml +1 -1
  108. package/methodologies/gpca/memo.package.yaml +4 -4
  109. package/ontology/memo.package.yaml +1 -1
  110. package/ontology/memo.rendering.yaml +37 -0
  111. package/package.json +19 -11
  112. package/profile/memo.package.yaml +3 -3
  113. package/src/architecture/decisions/memo_decisions.sysml +1 -1
  114. package/src/architecture/{behavior → functional/behavior}/memo_behavior.sysml +12 -11
  115. package/src/architecture/{constraints → functional/constraints}/memo_constraints.sysml +2 -2
  116. package/src/architecture/functional/functions/memo_functions.sysml +81 -0
  117. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +46 -0
  118. package/src/architecture/implementation/hardware/electrical/memo_hardware_electrical.sysml +36 -0
  119. package/src/architecture/implementation/hardware/fluidic/memo_hardware_fluidic.sysml +14 -0
  120. package/src/architecture/implementation/hardware/mechanical/memo_hardware_mechanical.sysml +14 -0
  121. package/src/architecture/implementation/hardware/optical/memo_hardware_optical.sysml +11 -0
  122. package/src/architecture/implementation/hardware/sensing/memo_hardware_sensing.sysml +17 -0
  123. package/src/architecture/implementation/hardware/structure/memo_hardware_structure.sysml +12 -0
  124. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +70 -0
  125. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +80 -0
  126. package/src/architecture/implementation/ui/memo_ui.sysml +159 -0
  127. package/src/architecture/logical/interfaces/memo_interfaces.sysml +102 -0
  128. package/src/architecture/logical/structure/memo_logical_structure.sysml +150 -0
  129. package/src/architecture/operational/activities/memo_activities.sysml +86 -0
  130. package/src/architecture/operational/context/actors/memo_actors.sysml +38 -0
  131. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +64 -0
  132. package/src/architecture/operational/context/use_context/memo_use_context.sysml +53 -0
  133. package/src/architecture/operational/scenarios/memo_scenarios.sysml +116 -0
  134. package/src/architecture/operational/structure/memo_operational.sysml +31 -0
  135. package/src/architecture/operational/use_cases/memo_use_cases.sysml +67 -0
  136. package/src/architecture/operational/workflows/memo_workflows.sysml +126 -0
  137. package/src/architecture/realization/deployment/memo_deployment.sysml +90 -0
  138. package/src/architecture/{physical → realization/physical}/memo_physical_architecture.sysml +12 -1
  139. package/src/artifacts/definitions/memo_artifact_definitions.sysml +1 -1
  140. package/src/{architecture → assurance}/cybersecurity/memo_cybersecurity.sysml +14 -10
  141. package/src/assurance/human_factors/memo_human_factors.sysml +50 -0
  142. package/src/{architecture → assurance}/requirements/memo_requirements.sysml +45 -21
  143. package/src/assurance/requirements/needs/memo_needs.sysml +43 -0
  144. package/src/{architecture → assurance/safety_risk}/analysis/memo_fmea.sysml +13 -13
  145. package/src/{architecture/risk → assurance/safety_risk}/memo_arch_risk.sysml +2 -2
  146. package/src/{architecture/risk → assurance/safety_risk}/memo_risk.sysml +25 -16
  147. package/src/assurance/verification_validation/memo_assurance.sysml +49 -0
  148. package/src/compliance/artifacts/memo_artifacts.sysml +1 -1
  149. package/src/compliance/change/memo_change.sysml +2 -2
  150. package/src/compliance/dhf-templates/21cfr820/design-input.md +1 -1
  151. package/src/compliance/dhf-templates/21cfr820/design-validation.md +1 -1
  152. package/src/compliance/dhf-templates/21cfr820/user-needs.md +2 -2
  153. package/src/compliance/dhf-templates/iec-62366/urra.md +1 -1
  154. package/src/compliance/dhf-templates/iso-14971/fmea.md +1 -1
  155. package/src/compliance/dhf-templates/iso-14971/har.md +4 -4
  156. package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +1 -1
  157. package/src/compliance/dhf-templates/iso-14971/rmp.md +1 -1
  158. package/src/compliance/dhf-templates/iso-14971/rmr.md +1 -1
  159. package/src/compliance/iso14971/risk_management_file.sysml +1 -1
  160. package/src/compliance/postmarket/memo_postmarket.sysml +2 -2
  161. package/src/core/common/memo_common.sysml +123 -14
  162. package/src/core/consistency_rules/consistency_rules.sysml +2 -2
  163. package/src/core/dimensions/dimensions.sysml +45 -24
  164. package/src/core/enumerations/memo_enumerations.sysml +11 -16
  165. package/src/core/methodology_scope/methodology_scope.sysml +10 -28
  166. package/src/core/relationships/memo_relationships.sysml +178 -146
  167. package/src/core/stdlib/{collections.sysml → collections/collections.sysml} +1 -1
  168. package/src/core/stdlib/{functions.sysml → functions/functions.sysml} +1 -1
  169. package/src/core/stdlib/{scalars.sysml → scalars/scalars.sysml} +1 -1
  170. package/src/core/stdlib/{time.sysml → time/time.sysml} +1 -1
  171. package/src/core/terminology/terminology.sysml +35 -0
  172. package/src/memo_namespaces.sysml +247 -302
  173. package/src/methodology/{memo_core.sysml → core/memo_core.sysml} +19 -13
  174. package/src/methodology/{memo_gates.sysml → gates/memo_gates.sysml} +1 -1
  175. package/src/methodology/{memo_patterns.sysml → patterns/memo_patterns.sysml} +1 -1
  176. package/src/methodology/{memo_profiles.sysml → profiles/memo_profiles.sysml} +27 -35
  177. package/src/methodology/{memo_workflow.sysml → workflow/memo_workflow.sysml} +1 -1
  178. package/src/rules/closure/closure_rules.sysml +11 -11
  179. package/src/rules/coverage/coverage_rules.sysml +8 -8
  180. package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
  181. package/src/rules/lifecycle/lifecycle_rules.sysml +1 -1
  182. package/src/rules/ontology/ontology_invariants.sysml +133 -0
  183. package/src/rules/quantitative/quantitative_rules.sysml +2 -2
  184. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +189 -0
  185. package/src/viewpoints/clinical/clinical_viewpoint.sysml +0 -1
  186. package/src/viewpoints/context/context_viewpoint.sysml +1 -2
  187. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -2
  188. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +8 -8
  189. package/src/viewpoints/functional/{function_allocation_view.sysml → function_allocation_view/function_allocation_view.sysml} +1 -1
  190. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  191. package/src/viewpoints/functional/{system_functional_tree_view.sysml → system_functional_tree_view/system_functional_tree_view.sysml} +1 -1
  192. package/src/viewpoints/logical/logical_viewpoint.sysml +0 -1
  193. package/src/viewpoints/operational/operational_viewpoint.sysml +1 -2
  194. package/src/viewpoints/operational/{use_case_view.sysml → use_case_view/use_case_view.sysml} +1 -1
  195. package/src/viewpoints/physical/physical_viewpoint.sysml +0 -1
  196. package/src/viewpoints/requirements/{requirements_traceability_view.sysml → requirements_traceability_view/requirements_traceability_view.sysml} +1 -1
  197. package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
  198. package/src/viewpoints/risk/{risk_chain_view.sysml → risk_chain_view/risk_chain_view.sysml} +2 -2
  199. package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
  200. package/src/viewpoints/software/{software_architecture_view.sysml → software_architecture_view/software_architecture_view.sysml} +1 -1
  201. package/src/viewpoints/software/software_viewpoint.sysml +1 -2
  202. package/src/viewpoints/usability/usability_viewpoint.sysml +0 -1
  203. package/src/viewpoints/verification/verification_viewpoint.sysml +0 -1
  204. package/templates/connected-device/memo.package.yaml +5 -0
  205. package/templates/connected-device/src/architecture/system.sysml +5 -0
  206. package/templates/connected-device/src/artifacts/artifacts.sysml +5 -0
  207. package/templates/connected-device/src/assurance/requirements.sysml +7 -0
  208. package/templates/default/memo.package.yaml +5 -0
  209. package/templates/default/src/architecture/system.sysml +7 -0
  210. package/templates/default/src/artifacts/artifacts.sysml +5 -0
  211. package/templates/default/src/assurance/requirements.sysml +8 -0
  212. package/templates/infusion-pump/memo.package.yaml +5 -0
  213. package/templates/infusion-pump/src/architecture/system.sysml +5 -0
  214. package/templates/infusion-pump/src/artifacts/artifacts.sysml +5 -0
  215. package/templates/infusion-pump/src/assurance/requirements.sysml +7 -0
  216. package/templates/monitoring-device/memo.package.yaml +5 -0
  217. package/templates/monitoring-device/src/architecture/system.sysml +5 -0
  218. package/templates/monitoring-device/src/artifacts/artifacts.sysml +5 -0
  219. package/templates/monitoring-device/src/assurance/requirements.sysml +7 -0
  220. package/templates/samd/memo.package.yaml +5 -0
  221. package/templates/samd/src/architecture/system.sysml +5 -0
  222. package/templates/samd/src/artifacts/artifacts.sysml +5 -0
  223. package/templates/samd/src/assurance/requirements.sysml +7 -0
  224. package/examples/gpca-pump/model/samples/README.md +0 -24
  225. package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +0 -9
  226. package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +0 -99
  227. package/profile/archetypes.yaml +0 -36
  228. package/profile/templates/connected-device/starter.sysml +0 -8
  229. package/profile/templates/infusion-pump/starter.sysml +0 -8
  230. package/profile/templates/monitoring-device/starter.sysml +0 -8
  231. package/profile/templates/samd/starter.sysml +0 -8
  232. package/src/architecture/assurance/memo_assurance.sysml +0 -29
  233. package/src/architecture/context/memo_context.sysml +0 -58
  234. package/src/architecture/functions/memo_functions.sysml +0 -30
  235. package/src/architecture/hardware_structure/memo_hardware_structure.sysml +0 -15
  236. package/src/architecture/interfaces/memo_interfaces.sysml +0 -103
  237. package/src/architecture/logical_structure/memo_logical_structure.sysml +0 -10
  238. package/src/architecture/operational/memo_operational.sysml +0 -51
  239. package/src/architecture/software_structure/memo_software_structure.sysml +0 -44
  240. package/src/architecture/system/memo_system_analysis.sysml +0 -54
  241. package/src/artifacts/clinical_safety_report.sysml +0 -12
  242. package/src/artifacts/cybersecurity_assessment_report.sysml +0 -12
  243. package/src/artifacts/design_change_log.sysml +0 -12
  244. package/src/artifacts/design_history_file_index.sysml +0 -12
  245. package/src/artifacts/design_input_plan.sysml +0 -12
  246. package/src/artifacts/design_output_plan.sysml +0 -12
  247. package/src/artifacts/evidence_record.sysml +0 -12
  248. package/src/artifacts/failure_mode_effects_analysis.sysml +0 -12
  249. package/src/artifacts/hazard_analysis_report.sysml +0 -12
  250. package/src/artifacts/labeling_specification.sysml +0 -12
  251. package/src/artifacts/requirements_specification.sysml +0 -12
  252. package/src/artifacts/requirements_traceability_matrix.sysml +0 -12
  253. package/src/artifacts/risk_management_plan.sysml +0 -12
  254. package/src/artifacts/software_design_description.sysml +0 -12
  255. package/src/artifacts/software_development_plan.sysml +0 -12
  256. package/src/artifacts/soup_list.sysml +0 -12
  257. package/src/artifacts/system_architecture_description.sysml +0 -12
  258. package/src/artifacts/test_protocol.sysml +0 -12
  259. package/src/artifacts/test_report.sysml +0 -12
  260. package/src/artifacts/threat_model_report.sysml +0 -12
  261. package/src/artifacts/usability_engineering_report.sysml +0 -12
  262. package/src/medical_device_library.sysml +0 -100
  263. package/template/memo.package.yaml +0 -5
  264. package/template/src/catalog/starter.sysml +0 -12
  265. package/template/src/documents/.gitkeep +0 -1
  266. package/template/src/views/.gitkeep +0 -1
  267. /package/src/methodology/{memo_archetypes.sysml → archetypes/memo_archetypes.sysml} +0 -0
  268. /package/src/methodology/{memo_rules.sysml → rules/memo_rules.sysml} +0 -0
  269. /package/src/methodology/{memo_viewpoints.sysml → viewpoints/memo_viewpoints.sysml} +0 -0
  270. /package/src/viewpoints/clinical/{clinical_evidence_view.sysml → clinical_evidence_view/clinical_evidence_view.sysml} +0 -0
  271. /package/src/viewpoints/context/{system_context_view.sysml → system_context_view/system_context_view.sysml} +0 -0
  272. /package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view.sysml → cybersecurity_assessment_view/cybersecurity_assessment_view.sysml} +0 -0
  273. /package/src/viewpoints/cybersecurity/{threat_model_view.sysml → threat_model_view/threat_model_view.sysml} +0 -0
  274. /package/src/viewpoints/logical/{logical_architecture_view.sysml → logical_architecture_view/logical_architecture_view.sysml} +0 -0
  275. /package/src/viewpoints/physical/{network_topology_view.sysml → network_topology_view/network_topology_view.sysml} +0 -0
  276. /package/src/viewpoints/physical/{physical_bom_view.sysml → physical_bom_view/physical_bom_view.sysml} +0 -0
  277. /package/src/viewpoints/usability/{usability_engineering_view.sysml → usability_engineering_view/usability_engineering_view.sysml} +0 -0
  278. /package/src/viewpoints/verification/{verification_coverage_view.sysml → verification_coverage_view/verification_coverage_view.sysml} +0 -0
@@ -1,7 +1,7 @@
1
1
  package memo_examples_gpca_pump_model_catalog_gpca_risk {
2
2
  private import ScalarValues::*;
3
3
 
4
- private import memo_architecture_risk_risk::*;
4
+ private import memo_assurance_safety_risk::*;
5
5
  private import memo_core_common::Citation;
6
6
  private import memo_core_enumerations::*;
7
7
 
@@ -81,6 +81,24 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
81
81
  attribute :>> acceptabilityThresholds = "High unacceptable";
82
82
  attribute :>> sourceReference = "illustrative — no source";
83
83
  }
84
+ part programmedDoseCharacteristic : SafetyRelatedCharacteristic {
85
+ attribute :>> id = "SRC-001";
86
+ attribute :>> name = "ProgrammedDoseAndFlowLimits";
87
+ attribute :>> characteristic = "Programmable basal rate, bolus volume, lockout interval, and maximum dose";
88
+ attribute :>> safetyImpact = "Incorrect values or failed enforcement can expose the patient to over-infusion or under-infusion.";
89
+ attribute :>> normalUseRelevant = true;
90
+ attribute :>> faultConditionRelevant = true;
91
+ attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), prescription and bolus parameters; CITE-004: GIP Hazard Analysis v1.0";
92
+ }
93
+ part analgesiaBenefit : Benefit {
94
+ attribute :>> id = "BEN-001";
95
+ attribute :>> name = "PatientTitratedAnalgesiaBenefit";
96
+ attribute :>> beneficialOutcome = "Timely pain relief using patient-titrated opioid delivery within prescribed limits.";
97
+ attribute :>> beneficiary = "patient";
98
+ attribute :>> clinicalSignificance = "Improved pain management with lower total opioid consumption than fixed-schedule dosing.";
99
+ attribute :>> supportingEvidence = "IU-001 intended-use clinical benefit and applicable clinical evidence.";
100
+ attribute :>> sourceReference = "IU-001";
101
+ }
84
102
 
85
103
  // ═══ HZ-001: Opioid over-infusion ═══════════════════════════════
86
104
  // Primary hazard 1 of the Open PCA ISO 14971 analysis; GIP
@@ -145,9 +163,9 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
145
163
  attribute :>> severity = SeverityKind::catastrophic;
146
164
  attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (harm: cardiac arrest) and §5 (H1 respiratory depression, severity catastrophic)";
147
165
  }
148
- part riskBefore : RiskBeforeMitigation {
166
+ part riskBefore : Risk {
149
167
  attribute :>> id = "RISK-B-001";
150
- attribute :>> name = "OverInfusionRiskBeforeMitigation";
168
+ attribute :>> name = "OverInfusionInitialRisk";
151
169
  attribute :>> driverKind = "risk";
152
170
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
153
171
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -158,7 +176,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
158
176
  attribute :>> foreseeableMisuseIncluded = true;
159
177
  attribute :>> sourceReference = "illustrative — no source";
160
178
  }
161
- part lockoutControl : RiskControl {
179
+ part lockoutControl : RiskControlMeasure {
162
180
  attribute :>> id = "RC-001";
163
181
  attribute :>> name = "LockoutAndMaxDoseEnforcement";
164
182
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
@@ -166,17 +184,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
166
184
  attribute :>> verificationStatus = "planned";
167
185
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.9 (REQ 25/26 — model REQ-CS-25/26: ignore bolus requests during lockout or past max doses per hour); CITE-002: CriSys AADL v2.0, GPCA_SW AGREE lockout guarantee (model GP-002)";
168
186
  }
169
- part riskAfter : RiskAfterMitigation {
187
+ part riskAfter : ResidualRisk {
170
188
  attribute :>> id = "RISK-A-001";
171
- attribute :>> name = "OverInfusionRiskAfterMitigation";
189
+ attribute :>> name = "OverInfusionResidualRisk";
172
190
  attribute :>> driverKind = "risk";
173
191
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
174
192
  attribute :>> severityEstimate = SeverityKind::catastrophic;
175
193
  attribute :>> riskLevel = CriticalityKind::medium;
176
- attribute :>> acceptability = RiskAcceptabilityKind::alarp;
177
- attribute :>> residualProbability = ProbabilityKind::remote;
178
- attribute :>> residualSeverity = SeverityKind::catastrophic;
179
- attribute :>> residualAcceptability = RiskAcceptabilityKind::acceptable;
194
+ attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
180
195
  attribute :>> benefitRiskRequired = false;
181
196
  attribute :>> sourceReference = "illustrative — no source";
182
197
  }
@@ -248,9 +263,9 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
248
263
  attribute :>> severity = SeverityKind::serious;
249
264
  attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 (underinfusion rows); CITE-008: GPCA Safety Requirements (2009), Flow rate accuracy (underinfusion alarm)";
250
265
  }
251
- part riskBeforeUnderdose : RiskBeforeMitigation {
266
+ part riskBeforeUnderdose : Risk {
252
267
  attribute :>> id = "RISK-B-002";
253
- attribute :>> name = "UnderInfusionRiskBeforeMitigation";
268
+ attribute :>> name = "UnderInfusionInitialRisk";
254
269
  attribute :>> driverKind = "risk";
255
270
  attribute :>> probabilityEstimate = ProbabilityKind::probable;
256
271
  attribute :>> severityEstimate = SeverityKind::serious;
@@ -261,7 +276,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
261
276
  attribute :>> foreseeableMisuseIncluded = true;
262
277
  attribute :>> sourceReference = "illustrative — no source";
263
278
  }
264
- part occlusionAlarmControl : RiskControl {
279
+ part occlusionAlarmControl : RiskControlMeasure {
265
280
  attribute :>> id = "RC-003";
266
281
  attribute :>> name = "OcclusionDetectionAndKvoPause";
267
282
  attribute :>> controlKind = RiskControlKind::alarm;
@@ -269,7 +284,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
269
284
  attribute :>> verificationStatus = "planned";
270
285
  attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (occlusion); CITE-008: GPCA Safety Requirements (2009), Occlusion alarm; CITE-002: CriSys AADL v2.0, AGREE occlusion => flow <= KVO (model GP-010; model extension REQ-X-04)";
271
286
  }
272
- part reservoirMonitorControl : RiskControl {
287
+ part reservoirMonitorControl : RiskControlMeasure {
273
288
  attribute :>> id = "RC-004";
274
289
  attribute :>> name = "ReservoirEmptyDetectionAndAlarm";
275
290
  attribute :>> controlKind = RiskControlKind::monitoring;
@@ -277,17 +292,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
277
292
  attribute :>> verificationStatus = "planned";
278
293
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 23 — model REQ-CS-23: empty-reservoir pause) and §4.3 REQ 59 (Empty Reservoir row); CITE-002: CriSys AADL v2.0, AGREE empty reservoir => no flow (model GP-007); CITE-004: §2.2 Alarms (empty reservoir) and Alerts (low reservoir)";
279
294
  }
280
- part riskAfterUnderdose : RiskAfterMitigation {
295
+ part riskAfterUnderdose : ResidualRisk {
281
296
  attribute :>> id = "RISK-A-002";
282
- attribute :>> name = "UnderInfusionRiskAfterMitigation";
297
+ attribute :>> name = "UnderInfusionResidualRisk";
283
298
  attribute :>> driverKind = "risk";
284
299
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
285
300
  attribute :>> severityEstimate = SeverityKind::serious;
286
301
  attribute :>> riskLevel = CriticalityKind::medium;
287
- attribute :>> acceptability = RiskAcceptabilityKind::alarp;
288
- attribute :>> residualProbability = ProbabilityKind::remote;
289
- attribute :>> residualSeverity = SeverityKind::serious;
290
- attribute :>> residualAcceptability = RiskAcceptabilityKind::acceptable;
302
+ attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
291
303
  attribute :>> benefitRiskRequired = false;
292
304
  attribute :>> sourceReference = "illustrative — no source";
293
305
  }
@@ -346,9 +358,9 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
346
358
  attribute :>> severity = SeverityKind::catastrophic;
347
359
  attribute :>> sourceReference = "CITE-005: Open PCA ISO 14971 risk analysis, §4 Table 1 (harm: tissue or organ damage)";
348
360
  }
349
- part riskBeforeAir : RiskBeforeMitigation {
361
+ part riskBeforeAir : Risk {
350
362
  attribute :>> id = "RISK-B-003";
351
- attribute :>> name = "AirEmbolismRiskBeforeMitigation";
363
+ attribute :>> name = "AirEmbolismInitialRisk";
352
364
  attribute :>> driverKind = "risk";
353
365
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
354
366
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -359,7 +371,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
359
371
  attribute :>> foreseeableMisuseIncluded = true;
360
372
  attribute :>> sourceReference = "illustrative — no source";
361
373
  }
362
- part airDetectionControl : RiskControl {
374
+ part airDetectionControl : RiskControlMeasure {
363
375
  attribute :>> id = "RC-002";
364
376
  attribute :>> name = "AirInLineDetectionAndKvoPause";
365
377
  attribute :>> controlKind = RiskControlKind::protectiveMeasure;
@@ -367,17 +379,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
367
379
  attribute :>> verificationStatus = "planned";
368
380
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 21 — model REQ-CS-21: air-embolism pause on single or cumulative bubble volume); CITE-002: CriSys AADL v2.0, AGREE air-in-line => flow <= KVO (model GP-009); CITE-008: GPCA Safety Requirements (2009), Air-in-line alarm";
369
381
  }
370
- part riskAfterAir : RiskAfterMitigation {
382
+ part riskAfterAir : ResidualRisk {
371
383
  attribute :>> id = "RISK-A-003";
372
- attribute :>> name = "AirEmbolismRiskAfterMitigation";
384
+ attribute :>> name = "AirEmbolismResidualRisk";
373
385
  attribute :>> driverKind = "risk";
374
386
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
375
387
  attribute :>> severityEstimate = SeverityKind::catastrophic;
376
388
  attribute :>> riskLevel = CriticalityKind::medium;
377
- attribute :>> acceptability = RiskAcceptabilityKind::alarp;
378
- attribute :>> residualProbability = ProbabilityKind::remote;
379
- attribute :>> residualSeverity = SeverityKind::catastrophic;
380
- attribute :>> residualAcceptability = RiskAcceptabilityKind::acceptable;
389
+ attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
381
390
  attribute :>> benefitRiskRequired = false;
382
391
  attribute :>> sourceReference = "illustrative — no source";
383
392
  }
@@ -441,9 +450,9 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
441
450
  attribute :>> operatingCondition = "therapy started from an unverified prescription";
442
451
  attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.25 and §2.4.8 Use Hazards (incorrect therapy rows)";
443
452
  }
444
- part riskBeforeWrongDose : RiskBeforeMitigation {
453
+ part riskBeforeWrongDose : Risk {
445
454
  attribute :>> id = "RISK-B-004";
446
- attribute :>> name = "MisprogrammingRiskBeforeMitigation";
455
+ attribute :>> name = "MisprogrammingInitialRisk";
447
456
  attribute :>> driverKind = "risk";
448
457
  attribute :>> probabilityEstimate = ProbabilityKind::probable;
449
458
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -454,7 +463,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
454
463
  attribute :>> foreseeableMisuseIncluded = true;
455
464
  attribute :>> sourceReference = "illustrative — no source";
456
465
  }
457
- part drugLibraryControl : RiskControl {
466
+ part drugLibraryControl : RiskControlMeasure {
458
467
  attribute :>> id = "RC-005";
459
468
  attribute :>> name = "DrugDatabaseLimitsAndConfirmation";
460
469
  attribute :>> controlKind = RiskControlKind::plausibilityCheck;
@@ -462,17 +471,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
462
471
  attribute :>> verificationStatus = "planned";
463
472
  attribute :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), Dose Error Reduction (drug library hard/soft limits, re-entry and confirmation prompts) and User Interface (two-step setting changes, confirmation); CITE-001: CriSys GPCA System Requirements (2013), Ch.3 Pharmacy DB interface (safe-value lookup)";
464
473
  }
465
- part riskAfterWrongDose : RiskAfterMitigation {
474
+ part riskAfterWrongDose : ResidualRisk {
466
475
  attribute :>> id = "RISK-A-004";
467
- attribute :>> name = "MisprogrammingRiskAfterMitigation";
476
+ attribute :>> name = "MisprogrammingResidualRisk";
468
477
  attribute :>> driverKind = "risk";
469
478
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
470
479
  attribute :>> severityEstimate = SeverityKind::catastrophic;
471
480
  attribute :>> riskLevel = CriticalityKind::medium;
472
- attribute :>> acceptability = RiskAcceptabilityKind::alarp;
473
- attribute :>> residualProbability = ProbabilityKind::remote;
474
- attribute :>> residualSeverity = SeverityKind::catastrophic;
475
- attribute :>> residualAcceptability = RiskAcceptabilityKind::acceptable;
481
+ attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
476
482
  attribute :>> benefitRiskRequired = true;
477
483
  attribute :>> sourceReference = "illustrative — no source";
478
484
  }
@@ -515,9 +521,9 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
515
521
  attribute :>> operatingCondition = "set change or door open with line still connected";
516
522
  attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.4.1 HID 1.13 (free flow of drug)";
517
523
  }
518
- part riskBeforeFreeFlow : RiskBeforeMitigation {
524
+ part riskBeforeFreeFlow : Risk {
519
525
  attribute :>> id = "RISK-B-005";
520
- attribute :>> name = "FreeFlowRiskBeforeMitigation";
526
+ attribute :>> name = "FreeFlowInitialRisk";
521
527
  attribute :>> driverKind = "risk";
522
528
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
523
529
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -528,7 +534,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
528
534
  attribute :>> foreseeableMisuseIncluded = true;
529
535
  attribute :>> sourceReference = "illustrative — no source";
530
536
  }
531
- part freeFlowValveControl : RiskControl {
537
+ part freeFlowValveControl : RiskControlMeasure {
532
538
  attribute :>> id = "RC-006";
533
539
  attribute :>> name = "AdministrationSetFreeFlowPrevention";
534
540
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
@@ -536,7 +542,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
536
542
  attribute :>> verificationStatus = "planned";
537
543
  attribute :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), User Interface (the administration set should be designed to prevent compromising patient safety or causing an unacceptable flow error); CITE-004: §2.4.1 HID 1.13 (free-flow detection via flow sensor, safety requirement 1.2.2)";
538
544
  }
539
- part doorInterlockControl : RiskControl {
545
+ part doorInterlockControl : RiskControlMeasure {
540
546
  attribute :>> id = "RC-009";
541
547
  attribute :>> name = "DoorOpenDeliveryInhibit";
542
548
  attribute :>> controlKind = RiskControlKind::interlock;
@@ -544,17 +550,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
544
550
  attribute :>> verificationStatus = "planned";
545
551
  attribute :>> sourceReference = "CITE-002: CriSys AADL v2.0, AGREE door open => flow <= KVO (model GP-011); CITE-004: §2.4.2 HID 2.8/2.9 (panel/door opened during infusion: alert and stop); model extension REQ-X-05";
546
552
  }
547
- part riskAfterFreeFlow : RiskAfterMitigation {
553
+ part riskAfterFreeFlow : ResidualRisk {
548
554
  attribute :>> id = "RISK-A-005";
549
- attribute :>> name = "FreeFlowRiskAfterMitigation";
555
+ attribute :>> name = "FreeFlowResidualRisk";
550
556
  attribute :>> driverKind = "risk";
551
557
  attribute :>> probabilityEstimate = ProbabilityKind::improbable;
552
558
  attribute :>> severityEstimate = SeverityKind::catastrophic;
553
559
  attribute :>> riskLevel = CriticalityKind::medium;
554
560
  attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
555
- attribute :>> residualProbability = ProbabilityKind::improbable;
556
- attribute :>> residualSeverity = SeverityKind::catastrophic;
557
- attribute :>> residualAcceptability = RiskAcceptabilityKind::acceptable;
558
561
  attribute :>> benefitRiskRequired = false;
559
562
  attribute :>> sourceReference = "illustrative — no source";
560
563
  }
@@ -590,9 +593,9 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
590
593
  attribute :>> operatingCondition = "THERAPY with reverse flow past the continuous or cumulative duration limits";
591
594
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22); CITE-008: GPCA Safety Requirements (2009), Reverse delivery";
592
595
  }
593
- part riskBeforeReverse : RiskBeforeMitigation {
596
+ part riskBeforeReverse : Risk {
594
597
  attribute :>> id = "RISK-B-006";
595
- attribute :>> name = "ReverseDeliveryRiskBeforeMitigation";
598
+ attribute :>> name = "ReverseDeliveryInitialRisk";
596
599
  attribute :>> driverKind = "risk";
597
600
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
598
601
  attribute :>> severityEstimate = SeverityKind::serious;
@@ -603,7 +606,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
603
606
  attribute :>> foreseeableMisuseIncluded = true;
604
607
  attribute :>> sourceReference = "illustrative — no source";
605
608
  }
606
- part reverseDeliveryPauseControl : RiskControl {
609
+ part reverseDeliveryPauseControl : RiskControlMeasure {
607
610
  attribute :>> id = "RC-010";
608
611
  attribute :>> name = "ReverseDeliveryDetectionAndPause";
609
612
  attribute :>> controlKind = RiskControlKind::alarm;
@@ -611,7 +614,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
611
614
  attribute :>> verificationStatus = "planned";
612
615
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 22 — model REQ-CS-22: transition to PAUSED and REQ 59 'Reverse Delivery' actions, model NOTIF-04); CITE-004: §2.4.1 HID 1.14 (flow sensor)";
613
616
  }
614
- part antiRefluxDesignControl : RiskControl {
617
+ part antiRefluxDesignControl : RiskControlMeasure {
615
618
  attribute :>> id = "RC-011";
616
619
  attribute :>> name = "ContinuousReverseDeliveryPrevention";
617
620
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
@@ -619,17 +622,14 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
619
622
  attribute :>> verificationStatus = "planned";
620
623
  attribute :>> sourceReference = "CITE-008: GPCA Safety Requirements (2009), Reverse delivery (during normal use and/or single fault condition, continuous reverse delivery shall not be possible; from IEC 601-2-24)";
621
624
  }
622
- part riskAfterReverse : RiskAfterMitigation {
625
+ part riskAfterReverse : ResidualRisk {
623
626
  attribute :>> id = "RISK-A-006";
624
- attribute :>> name = "ReverseDeliveryRiskAfterMitigation";
627
+ attribute :>> name = "ReverseDeliveryResidualRisk";
625
628
  attribute :>> driverKind = "risk";
626
629
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
627
630
  attribute :>> severityEstimate = SeverityKind::serious;
628
631
  attribute :>> riskLevel = CriticalityKind::medium;
629
- attribute :>> acceptability = RiskAcceptabilityKind::alarp;
630
- attribute :>> residualProbability = ProbabilityKind::remote;
631
- attribute :>> residualSeverity = SeverityKind::serious;
632
- attribute :>> residualAcceptability = RiskAcceptabilityKind::acceptable;
632
+ attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
633
633
  attribute :>> benefitRiskRequired = false;
634
634
  attribute :>> sourceReference = "illustrative — no source";
635
635
  }
@@ -672,9 +672,9 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
672
672
  attribute :>> operatingCondition = "ACTIVE therapy continuing past the prescribed total volume";
673
673
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20: actual volume infused exceeds the drug-database maximum VTBI)";
674
674
  }
675
- part riskBeforeVtbi : RiskBeforeMitigation {
675
+ part riskBeforeVtbi : Risk {
676
676
  attribute :>> id = "RISK-B-007";
677
- attribute :>> name = "VtbiOverInfusionRiskBeforeMitigation";
677
+ attribute :>> name = "VtbiOverInfusionInitialRisk";
678
678
  attribute :>> driverKind = "risk";
679
679
  attribute :>> probabilityEstimate = ProbabilityKind::occasional;
680
680
  attribute :>> severityEstimate = SeverityKind::catastrophic;
@@ -685,7 +685,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
685
685
  attribute :>> foreseeableMisuseIncluded = true;
686
686
  attribute :>> sourceReference = "illustrative — no source";
687
687
  }
688
- part vtbiLimitPauseControl : RiskControl {
688
+ part vtbiLimitPauseControl : RiskControlMeasure {
689
689
  attribute :>> id = "RC-012";
690
690
  attribute :>> name = "VtbiCeilingPauseAtKvo";
691
691
  attribute :>> controlKind = RiskControlKind::alarm;
@@ -693,7 +693,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
693
693
  attribute :>> verificationStatus = "planned";
694
694
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.5.2 (REQ 20 — model REQ-CS-20: transition to PAUSED and REQ 59 'Over Infusion VTBI' actions, model NOTIF-06); CITE-002: CriSys AADL v2.0, AGREE over-VTBI => flow <= KVO (model GP-008)";
695
695
  }
696
- part infusionCompleteControl : RiskControl {
696
+ part infusionCompleteControl : RiskControlMeasure {
697
697
  attribute :>> id = "RC-013";
698
698
  attribute :>> name = "InfusionCompleteStopAtVtbi";
699
699
  attribute :>> controlKind = RiskControlKind::inherentSafeDesign;
@@ -701,23 +701,20 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
701
701
  attribute :>> verificationStatus = "planned";
702
702
  attribute :>> sourceReference = "CITE-001: CriSys GPCA System Requirements (2013), §4.1.6 (REQ 28 — model REQ-CS-28: transition to IDLE when total volume infused reaches the programmed prescription maximum VTBI)";
703
703
  }
704
- part riskAfterVtbi : RiskAfterMitigation {
704
+ part riskAfterVtbi : ResidualRisk {
705
705
  attribute :>> id = "RISK-A-007";
706
- attribute :>> name = "VtbiOverInfusionRiskAfterMitigation";
706
+ attribute :>> name = "VtbiOverInfusionResidualRisk";
707
707
  attribute :>> driverKind = "risk";
708
708
  attribute :>> probabilityEstimate = ProbabilityKind::remote;
709
709
  attribute :>> severityEstimate = SeverityKind::catastrophic;
710
710
  attribute :>> riskLevel = CriticalityKind::medium;
711
- attribute :>> acceptability = RiskAcceptabilityKind::alarp;
712
- attribute :>> residualProbability = ProbabilityKind::remote;
713
- attribute :>> residualSeverity = SeverityKind::catastrophic;
714
- attribute :>> residualAcceptability = RiskAcceptabilityKind::acceptable;
711
+ attribute :>> acceptability = RiskAcceptabilityKind::acceptable;
715
712
  attribute :>> benefitRiskRequired = false;
716
713
  attribute :>> sourceReference = "illustrative — no source";
717
714
  }
718
715
 
719
716
  // ── Cross-cutting platform controls ─────────────────────────────
720
- part watchdogControl : RiskControl {
717
+ part watchdogControl : RiskControlMeasure {
721
718
  attribute :>> id = "RC-007";
722
719
  attribute :>> name = "HardwareWatchdogSafeState";
723
720
  attribute :>> controlKind = RiskControlKind::protectiveMeasure;
@@ -725,7 +722,7 @@ package memo_examples_gpca_pump_model_catalog_gpca_risk {
725
722
  attribute :>> verificationStatus = "planned";
726
723
  attribute :>> sourceReference = "CITE-004: GIP Hazard Analysis v1.0 (2009), §2.2 Alarms (watchdog alarm) and §2.3 Pump Checks (watchdog interrupt tests); CITE-008: GPCA Safety Requirements (2009), POST (watchdog test)";
727
724
  }
728
- part flowCrossCheckControl : RiskControl {
725
+ part flowCrossCheckControl : RiskControlMeasure {
729
726
  attribute :>> id = "RC-008";
730
727
  attribute :>> name = "IndependentFlowCrossCheck";
731
728
  attribute :>> controlKind = RiskControlKind::monitoring;
@@ -1,7 +1,9 @@
1
1
  package memo_examples_gpca_pump_model_catalog_gpca_system {
2
2
  private import ScalarValues::*;
3
3
 
4
- private import memo_architecture_system::*;
4
+ private import memo_architecture_functional_functions::*;
5
+ private import memo_examples_gpca_pump_model_catalog_gpca_behavior_subsystems::*;
6
+ private import memo_architecture_operational_scenarios::*;
5
7
  private import memo_core_enumerations::*;
6
8
 
7
9
  part gpcaMission : Mission {
@@ -14,110 +16,73 @@ package memo_examples_gpca_pump_model_catalog_gpca_system {
14
16
  attribute :>> operationalContext = "Acute-care hospital ward, fixed (non-ambulatory) location (UC-001).";
15
17
  }
16
18
 
17
- // ── System capabilities ─────────────────────────────────────
18
- part scBasalDelivery : SystemCapability {
19
- attribute :>> id = "SC-001";
20
- attribute :>> name = "BasalRateDelivery";
21
- attribute :>> capabilityKind = "therapy";
22
- attribute :>> primaryFunction = "FUNC-005: ManageInfusion";
23
- attribute :>> safetyRelevant = true;
24
- }
25
- part scPatientBolus : SystemCapability {
26
- attribute :>> id = "SC-002";
27
- attribute :>> name = "PatientBolusDelivery";
28
- attribute :>> capabilityKind = "therapy";
29
- attribute :>> primaryFunction = "FUNC-006: EnforceDoseLimits";
30
- attribute :>> safetyRelevant = true;
31
- }
32
- part scAlarmAnnunciation : SystemCapability {
33
- attribute :>> id = "SC-003";
34
- attribute :>> name = "AlarmDetectionAndAnnunciation";
35
- attribute :>> capabilityKind = "safety";
36
- attribute :>> primaryFunction = "FUNC-003: MonitorExceptionalConditions";
37
- attribute :>> safetyRelevant = true;
38
- }
39
- part scPrescriptionMgmt : SystemCapability {
40
- attribute :>> id = "SC-004";
41
- attribute :>> name = "PrescriptionProgrammingAndChecking";
42
- attribute :>> capabilityKind = "configuration";
43
- attribute :>> primaryFunction = "FUNC-002: ValidatePrescription";
44
- attribute :>> safetyRelevant = true;
45
- }
46
- part scEventLogging : SystemCapability {
47
- attribute :>> id = "SC-005";
48
- attribute :>> name = "TherapyEventLogging";
49
- attribute :>> capabilityKind = "record-keeping";
50
- attribute :>> primaryFunction = "FUNC-008: LogTherapyEvents";
51
- attribute :>> safetyRelevant = false;
52
- }
53
-
54
19
  // ── Functional chains ───────────────────────────────────────
55
- part fcPatientBolus : FunctionalChain {
20
+ part fcPatientBolus : FunctionalFlow {
56
21
  attribute :>> id = "FC-001";
57
22
  attribute :>> name = "PatientBolusChain";
58
- attribute :>> chainKind = FunctionalChainKind::nominal;
59
- attribute :>> startFunction = "FUNC-001: AcquireSensorData";
60
- attribute :>> endFunction = "FUNC-007: CommandPumpMotor";
23
+ attribute :>> flowCategory = FunctionalFlowKind::nominal;
24
+ ref :>> startFunction = fnAcquireSensors;
25
+ ref :>> endFunction = fnCommandPump;
61
26
  attribute :>> endToEndLatencyBudgetMs = "100";
62
27
  attribute :>> safetyRelevant = true;
63
28
  attribute :>> securityRelevant = false;
64
29
  attribute :>> description = "Bolus button press through lockout/max-dose check to pump actuation and logging.";
65
30
  }
66
- part fcsBolusSense : FunctionalChainStep {
31
+ part fcsBolusSense : FunctionalFlowStep {
67
32
  attribute :>> id = "FCS-001"; attribute :>> name = "SenseBolusRequest";
68
- attribute :>> stepOrder = "1"; attribute :>> allocatedFunction = "FUNC-001"; attribute :>> exchangeItem = "DD-002: BolusRequestSignal";
33
+ attribute :>> stepOrder = "1"; ref :>> function = fnAcquireSensors; ref :>> exchangedItem = ddBolusRequest;
69
34
  }
70
- part fcsBolusValidate : FunctionalChainStep {
35
+ part fcsBolusValidate : FunctionalFlowStep {
71
36
  attribute :>> id = "FCS-002"; attribute :>> name = "CheckLockoutAndMaxDose";
72
- attribute :>> stepOrder = "2"; attribute :>> allocatedFunction = "FUNC-006"; attribute :>> exchangeItem = "DD-001: PrescriptionRecord";
37
+ attribute :>> stepOrder = "2"; ref :>> function = fnEnforceLimits; ref :>> exchangedItem = ddPrescription;
73
38
  }
74
- part fcsBolusCommand : FunctionalChainStep {
39
+ part fcsBolusCommand : FunctionalFlowStep {
75
40
  attribute :>> id = "FCS-003"; attribute :>> name = "CommandBolusFlow";
76
- attribute :>> stepOrder = "3"; attribute :>> allocatedFunction = "FUNC-005"; attribute :>> exchangeItem = "CD-001: FlowCommand";
41
+ attribute :>> stepOrder = "3"; ref :>> function = fnManageInfusion; ref :>> exchangedItem = cdFlowCommand;
77
42
  }
78
- part fcsBolusActuate : FunctionalChainStep {
43
+ part fcsBolusActuate : FunctionalFlowStep {
79
44
  attribute :>> id = "FCS-004"; attribute :>> name = "ActuatePumpMotor";
80
- attribute :>> stepOrder = "4"; attribute :>> allocatedFunction = "FUNC-007"; attribute :>> exchangeItem = "CD-001: FlowCommand";
45
+ attribute :>> stepOrder = "4"; ref :>> function = fnCommandPump; ref :>> exchangedItem = cdFlowCommand;
81
46
  }
82
- part fcsBolusLog : FunctionalChainStep {
47
+ part fcsBolusLog : FunctionalFlowStep {
83
48
  attribute :>> id = "FCS-005"; attribute :>> name = "LogBolusOutcome";
84
- attribute :>> stepOrder = "5"; attribute :>> allocatedFunction = "FUNC-008"; attribute :>> exchangeItem = "DD-004: TherapyEventRecord";
49
+ attribute :>> stepOrder = "5"; ref :>> function = fnLogEvents; ref :>> exchangedItem = ddEventRecord;
85
50
  }
86
51
 
87
- part fcAlarmStop : FunctionalChain {
52
+ part fcAlarmStop : FunctionalFlow {
88
53
  attribute :>> id = "FC-002";
89
54
  attribute :>> name = "AlarmDetectionToSafeStateChain";
90
- attribute :>> chainKind = FunctionalChainKind::alarm;
91
- attribute :>> startFunction = "FUNC-001: AcquireSensorData";
92
- attribute :>> endFunction = "FUNC-004: AnnunciateAlarms";
55
+ attribute :>> flowCategory = FunctionalFlowKind::alarm;
56
+ ref :>> startFunction = fnAcquireSensors;
57
+ ref :>> endFunction = fnAnnunciate;
93
58
  attribute :>> endToEndLatencyBudgetMs = "20";
94
59
  attribute :>> safetyRelevant = true;
95
60
  attribute :>> securityRelevant = false;
96
61
  attribute :>> description = "Sensor condition through alarm evaluation to same-step transition to PAUSED (KVO flow, REQ 43) and annunciation.";
97
62
  }
98
- part fcsAlarmSense : FunctionalChainStep {
63
+ part fcsAlarmSense : FunctionalFlowStep {
99
64
  attribute :>> id = "FCS-006"; attribute :>> name = "SenseAlarmCondition";
100
- attribute :>> stepOrder = "1"; attribute :>> allocatedFunction = "FUNC-001"; attribute :>> exchangeItem = "DD-003: SensorStatusVector";
65
+ attribute :>> stepOrder = "1"; ref :>> function = fnAcquireSensors; ref :>> exchangedItem = ddSensorVector;
101
66
  }
102
- part fcsAlarmEvaluate : FunctionalChainStep {
67
+ part fcsAlarmEvaluate : FunctionalFlowStep {
103
68
  attribute :>> id = "FCS-007"; attribute :>> name = "EvaluateAlarmCondition";
104
- attribute :>> stepOrder = "2"; attribute :>> allocatedFunction = "FUNC-003"; attribute :>> exchangeItem = "DD-003: SensorStatusVector";
69
+ attribute :>> stepOrder = "2"; ref :>> function = fnMonitorAlarm; ref :>> exchangedItem = ddSensorVector;
105
70
  }
106
- part fcsAlarmStopInfusion : FunctionalChainStep {
71
+ part fcsAlarmStopInfusion : FunctionalFlowStep {
107
72
  attribute :>> id = "FCS-008"; attribute :>> name = "LimitFlowToKvoSameStep";
108
- attribute :>> stepOrder = "3"; attribute :>> allocatedFunction = "FUNC-005"; attribute :>> exchangeItem = "CD-002: AlarmSignal";
73
+ attribute :>> stepOrder = "3"; ref :>> function = fnManageInfusion; ref :>> exchangedItem = cdAlarmSignal;
109
74
  }
110
- part fcsAlarmAnnunciate : FunctionalChainStep {
75
+ part fcsAlarmAnnunciate : FunctionalFlowStep {
111
76
  attribute :>> id = "FCS-009"; attribute :>> name = "AnnunciateAudibleVisual";
112
- attribute :>> stepOrder = "4"; attribute :>> allocatedFunction = "FUNC-004"; attribute :>> exchangeItem = "CD-002: AlarmSignal";
77
+ attribute :>> stepOrder = "4"; ref :>> function = fnAnnunciate; ref :>> exchangedItem = cdAlarmSignal;
113
78
  }
114
79
 
115
- part fcStartup : FunctionalChain {
80
+ part fcStartup : FunctionalFlow {
116
81
  attribute :>> id = "FC-003";
117
82
  attribute :>> name = "PowerOnSelfTestChain";
118
- attribute :>> chainKind = FunctionalChainKind::startup;
119
- attribute :>> startFunction = "FUNC-009: ManagePower";
120
- attribute :>> endFunction = "FUNC-010: PresentStatus";
83
+ attribute :>> flowCategory = FunctionalFlowKind::startup;
84
+ ref :>> startFunction = fnManagePower;
85
+ ref :>> endFunction = fnPresentStatus;
121
86
  attribute :>> endToEndLatencyBudgetMs = "5000";
122
87
  attribute :>> safetyRelevant = true;
123
88
  attribute :>> securityRelevant = false;
@@ -125,20 +90,22 @@ package memo_examples_gpca_pump_model_catalog_gpca_system {
125
90
  }
126
91
 
127
92
  // ── System scenarios ────────────────────────────────────────
128
- part ssBolusDuringBasal : SystemScenario {
93
+ part ssBolusDuringBasal : FunctionalScenario {
129
94
  attribute :>> id = "SS-001";
130
95
  attribute :>> name = "PatientBolusDuringBasal";
131
- attribute :>> scenarioKind = ScenarioKind::nominal;
96
+ attribute :>> variantKind = ScenarioVariantKind::nominal;
97
+ attribute :>> operationalCondition = OperationalConditionKind::normal;
132
98
  attribute :>> sequenceDiagramRef = "VIEW-BHV-002";
133
- attribute :>> precondition = "BASAL mode active; no REQ 25 ignore condition holds";
134
- attribute :>> postcondition = "PATIENT_BOLUS mode entered, bolus delivered, return to BASAL";
99
+ attribute :>> preCondition = "BASAL mode active; no REQ 25 ignore condition holds";
100
+ attribute :>> postCondition = "PATIENT_BOLUS mode entered, bolus delivered, return to BASAL";
135
101
  }
136
- part ssAlarmPause : SystemScenario {
102
+ part ssAlarmPause : FunctionalScenario {
137
103
  attribute :>> id = "SS-002";
138
104
  attribute :>> name = "InhibitingNotificationPausesInfusion";
139
- attribute :>> scenarioKind = ScenarioKind::alarm;
105
+ attribute :>> variantKind = ScenarioVariantKind::exception;
106
+ attribute :>> operationalCondition = OperationalConditionKind::degraded;
140
107
  attribute :>> sequenceDiagramRef = "VIEW-BHV-002";
141
- attribute :>> precondition = "any ACTIVE therapy mode; infusion-inhibiting notification detected (REQ 59)";
142
- attribute :>> postcondition = "PAUSED mode entered in same execution step at FlowRate_kvo_hd keep-vein-open flow; notification annunciated per REQ 59";
108
+ attribute :>> preCondition = "any ACTIVE therapy mode; infusion-inhibiting notification detected (REQ 59)";
109
+ attribute :>> postCondition = "PAUSED mode entered in same execution step at FlowRate_kvo_hd keep-vein-open flow; notification annunciated per REQ 59";
143
110
  }
144
111
  }