@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
@@ -0,0 +1,285 @@
1
+ package memo_examples_gpca_pump_model_catalog_gpca_verification {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_architecture_assurance::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ // ── Verification cases ──────────────────────────────────────
8
+ part vcModeRange : VerificationCase {
9
+ attribute :>> id = "VER-001";
10
+ attribute :>> name = "VerifyModeRange";
11
+ attribute :>> methodKind = VerificationMethodKind::formalProof;
12
+ attribute :>> acceptanceCriteria = "Current_System_mode only takes valid exclusive values";
13
+ attribute :>> status = "planned";
14
+ }
15
+ part vcLockout : VerificationCase {
16
+ attribute :>> id = "VER-002";
17
+ attribute :>> name = "VerifyBolusLockout";
18
+ attribute :>> methodKind = VerificationMethodKind::test;
19
+ attribute :>> acceptanceCriteria = "No patient bolus initiated when lockout or max bolus constraints active";
20
+ attribute :>> status = "planned";
21
+ }
22
+ part vcSameStepAlarm : VerificationCase {
23
+ attribute :>> id = "VER-003";
24
+ attribute :>> name = "VerifySameStepAlarmStop";
25
+ attribute :>> methodKind = VerificationMethodKind::modelChecking;
26
+ attribute :>> acceptanceCriteria = "Alarm output affects infusion in same execution step";
27
+ attribute :>> status = "planned";
28
+ }
29
+ part vcTemporalModeSafety : VerificationCase {
30
+ attribute :>> id = "VER-004";
31
+ attribute :>> name = "VerifyTemporalModeSafety";
32
+ attribute :>> methodKind = VerificationMethodKind::modelChecking;
33
+ attribute :>> acceptanceCriteria = "No invalid transitions and pause on critical alarms";
34
+ attribute :>> status = "planned";
35
+ }
36
+ part vcAirInLine : VerificationCase {
37
+ attribute :>> id = "VER-005";
38
+ attribute :>> name = "VerifyAirInLineStop";
39
+ attribute :>> methodKind = VerificationMethodKind::test;
40
+ attribute :>> acceptanceCriteria = "Injected air above threshold pauses infusion and annunciates per the REQ 59 High-priority actions (REQ-CS-21)";
41
+ attribute :>> status = "planned";
42
+ }
43
+ part vcOcclusion : VerificationCase {
44
+ attribute :>> id = "VER-006";
45
+ attribute :>> name = "VerifyOcclusionDetection";
46
+ attribute :>> methodKind = VerificationMethodKind::test;
47
+ attribute :>> acceptanceCriteria = "Clamped line above pressure threshold pauses infusion and annunciates (REQ-X-04)";
48
+ attribute :>> status = "planned";
49
+ }
50
+ part vcEmptyReservoir : VerificationCase {
51
+ attribute :>> id = "VER-007";
52
+ attribute :>> name = "VerifyEmptyReservoirStop";
53
+ attribute :>> methodKind = VerificationMethodKind::test;
54
+ attribute :>> acceptanceCriteria = "Reservoir-empty assertion transitions to PAUSED (KVO flow) and annunciates per the REQ 59 High-priority actions (REQ-CS-23)";
55
+ attribute :>> status = "planned";
56
+ }
57
+ part vcPost : VerificationCase {
58
+ attribute :>> id = "VER-008";
59
+ attribute :>> name = "VerifyPowerOnSelfTest";
60
+ attribute :>> methodKind = VerificationMethodKind::test;
61
+ attribute :>> acceptanceCriteria = "Each injected POST fault (CPU, RAM, ROM, watchdog, sensors) blocks therapy and alarms (REQ-X-02)";
62
+ attribute :>> status = "planned";
63
+ }
64
+ part vcPowerLoss : VerificationCase {
65
+ attribute :>> id = "VER-009";
66
+ attribute :>> name = "VerifyPowerLossRetentionAndResume";
67
+ attribute :>> methodKind = VerificationMethodKind::test;
68
+ attribute :>> acceptanceCriteria = "Prescription and log intact after power cycle; therapy resumes only after confirmation (REQ-X-03)";
69
+ attribute :>> status = "planned";
70
+ }
71
+ part vcWatchdog : VerificationCase {
72
+ attribute :>> id = "VER-010";
73
+ attribute :>> name = "VerifyWatchdogSafeState";
74
+ attribute :>> methodKind = VerificationMethodKind::test;
75
+ attribute :>> acceptanceCriteria = "Induced CPU hang forces zero flow and continuous alarm within 60 ms (REQ-X-08, TC-003)";
76
+ attribute :>> status = "planned";
77
+ }
78
+ part vcHourlyMax : VerificationCase {
79
+ attribute :>> id = "VER-011";
80
+ attribute :>> name = "VerifyHourlyDoseCeiling";
81
+ attribute :>> methodKind = VerificationMethodKind::simulation;
82
+ attribute :>> acceptanceCriteria = "Randomized bolus/basal schedules never exceed hourly maximum in sliding window (REQ-X-06)";
83
+ attribute :>> status = "planned";
84
+ }
85
+ part vcPumpAccuracy : VerificationCase {
86
+ attribute :>> id = "VER-012";
87
+ attribute :>> name = "VerifyDeliveryAccuracy";
88
+ attribute :>> methodKind = VerificationMethodKind::test;
89
+ attribute :>> acceptanceCriteria = "Gravimetric bench measurement within ±5% (Tolerance_Min_const) across rate range (REQ-X-11)";
90
+ attribute :>> status = "planned";
91
+ }
92
+ part vcAlarmLoudness : VerificationCase {
93
+ attribute :>> id = "VER-013";
94
+ attribute :>> name = "VerifyAlarmSoundPressure";
95
+ attribute :>> methodKind = VerificationMethodKind::test;
96
+ attribute :>> acceptanceCriteria = "Each priority tone meets Audio_level_const, 50 db for 2 s per I 8 (REQ-X-12)";
97
+ attribute :>> status = "planned";
98
+ }
99
+ part vcFreeFlow : VerificationCase {
100
+ attribute :>> id = "VER-014";
101
+ attribute :>> name = "VerifyAntiFreeFlowValve";
102
+ attribute :>> methodKind = VerificationMethodKind::test;
103
+ attribute :>> acceptanceCriteria = "No gravity flow with set disengaged under worst-case head height (REQ-X-14)";
104
+ attribute :>> status = "planned";
105
+ }
106
+ part vcStuckButton : VerificationCase {
107
+ attribute :>> id = "VER-015";
108
+ attribute :>> name = "VerifyStuckButtonDetection";
109
+ attribute :>> methodKind = VerificationMethodKind::test;
110
+ attribute :>> acceptanceCriteria = "Shorted pendant input yields no bolus and Medium-priority notification after 60 s (REQ-X-09)";
111
+ attribute :>> status = "planned";
112
+ }
113
+ part vcFlowCrossCheck : VerificationCase {
114
+ attribute :>> id = "VER-016";
115
+ attribute :>> name = "VerifyFlowCrossCheck";
116
+ attribute :>> methodKind = VerificationMethodKind::test;
117
+ attribute :>> acceptanceCriteria = "Injected deviation beyond Tolerance_Min_const sustained past Max_Duration_OverInfusion_const pauses therapy and annunciates (REQ-X-10)";
118
+ attribute :>> status = "planned";
119
+ }
120
+
121
+ part vcDrugLibrary : VerificationCase {
122
+ attribute :>> id = "VER-017";
123
+ attribute :>> name = "VerifyDrugLibraryEnforcement";
124
+ attribute :>> methodKind = VerificationMethodKind::test;
125
+ attribute :>> acceptanceCriteria = "Hard-limit entries rejected, soft-limit entries require confirmation, both logged (REQ-X-01)";
126
+ attribute :>> status = "planned";
127
+ }
128
+ part vcPrescriptionConfirm : VerificationCase {
129
+ attribute :>> id = "VER-018";
130
+ attribute :>> name = "VerifyPrescriptionConfirmation";
131
+ attribute :>> methodKind = VerificationMethodKind::demonstration;
132
+ attribute :>> acceptanceCriteria = "Therapy cannot start without distinct confirmation; displayed values equal stored values (REQ-CS-09)";
133
+ attribute :>> status = "planned";
134
+ }
135
+ part vcEventLog : VerificationCase {
136
+ attribute :>> id = "VER-019";
137
+ attribute :>> name = "VerifyEventLogIntegrity";
138
+ attribute :>> methodKind = VerificationMethodKind::test;
139
+ attribute :>> acceptanceCriteria = "Operational/error log entries per REQ-CS-78..81; tampering detectable (REQ-X-07)";
140
+ attribute :>> status = "planned";
141
+ }
142
+ part vcReverseDeliveryPause : VerificationCase {
143
+ attribute :>> id = "VER-020";
144
+ attribute :>> name = "VerifyReverseDeliveryPause";
145
+ attribute :>> methodKind = VerificationMethodKind::modelChecking;
146
+ attribute :>> acceptanceCriteria = "Continuous or cumulative reverse delivery beyond the REQ-CS-22 duration limits transitions to PAUSED and raises the Reverse Delivery notification (NOTIF-04)";
147
+ attribute :>> status = "planned";
148
+ }
149
+ part vcAntiRefluxMechanism : VerificationCase {
150
+ attribute :>> id = "VER-021";
151
+ attribute :>> name = "VerifyContinuousReverseDeliveryPrevention";
152
+ attribute :>> methodKind = VerificationMethodKind::test;
153
+ attribute :>> acceptanceCriteria = "During normal use and single fault condition, continuous reverse delivery is not possible (IEC 601-2-24 basis per GPCA safety requirements)";
154
+ attribute :>> status = "planned";
155
+ }
156
+ part vcVtbiCeiling : VerificationCase {
157
+ attribute :>> id = "VER-022";
158
+ attribute :>> name = "VerifyVtbiCeilingPause";
159
+ attribute :>> methodKind = VerificationMethodKind::modelChecking;
160
+ attribute :>> acceptanceCriteria = "Actual volume infused above the drug-database maximum VTBI transitions to PAUSED with flow at most KVO (REQ-CS-20, AGREE GP-008) and raises NOTIF-06";
161
+ attribute :>> status = "planned";
162
+ }
163
+ part vcInfusionComplete : VerificationCase {
164
+ attribute :>> id = "VER-023";
165
+ attribute :>> name = "VerifyInfusionCompleteStop";
166
+ attribute :>> methodKind = VerificationMethodKind::test;
167
+ attribute :>> acceptanceCriteria = "Reaching prescribed total duration or maximum VTBI transitions ACTIVE to IDLE with Infusion Complete actions (REQ-CS-28)";
168
+ attribute :>> status = "planned";
169
+ }
170
+ part vcDoorInterlock : VerificationCase {
171
+ attribute :>> id = "VER-024";
172
+ attribute :>> name = "VerifyDoorOpenDeliveryInhibit";
173
+ attribute :>> methodKind = VerificationMethodKind::test;
174
+ attribute :>> acceptanceCriteria = "Door open during THERAPY limits flow to at most KVO and raises a notification (AGREE GP-011; REQ-X-05)";
175
+ attribute :>> status = "planned";
176
+ }
177
+
178
+ // ── Validation cases (design validation / IEC 62366) ────────
179
+ part valSimulatedWard : ValidationCase {
180
+ attribute :>> id = "VAL-001";
181
+ attribute :>> name = "SimulatedWardTherapyValidation";
182
+ attribute :>> validationMethod = ValidationMethodKind::simulatedUse;
183
+ attribute :>> userParticipation = "nurses and physicians on a simulated ward";
184
+ attribute :>> acceptanceCriteria = "Complete therapy scenarios OS-001..OS-006 executed without unresolved use difficulty";
185
+ attribute :>> clinicalContext = "post-operative PCA therapy in acute care";
186
+ }
187
+ part valSummativeUsability : ValidationCase {
188
+ attribute :>> id = "VAL-002";
189
+ attribute :>> name = "SummativeUsabilityTest";
190
+ attribute :>> validationMethod = ValidationMethodKind::summativeUsabilityTest;
191
+ attribute :>> userParticipation = "15 representative clinical users per user group";
192
+ attribute :>> acceptanceCriteria = "No critical use errors (UE-001..UE-004) observed on safety-related tasks; residual difficulty acceptable per IEC 62366-1";
193
+ attribute :>> clinicalContext = "prescription programming, reservoir change, alarm response";
194
+ }
195
+
196
+ // ── Test artifacts and evidence ─────────────────────────────
197
+ part testReportLockout : TestArtifact {
198
+ attribute :>> id = "TEST-001";
199
+ attribute :>> name = "BolusLockoutTestReport";
200
+ attribute :>> version = "0.1";
201
+ attribute :>> lifecycleState = LifecycleStateKind::development;
202
+ attribute :>> artifactKind = ArtifactKind::testReport;
203
+ attribute :>> resultSummary = "planned";
204
+ }
205
+ part testProtocolSafetySuite : TestArtifact {
206
+ attribute :>> id = "TEST-002";
207
+ attribute :>> name = "SafetyAlarmTestProtocol";
208
+ attribute :>> version = "0.1";
209
+ attribute :>> lifecycleState = LifecycleStateKind::development;
210
+ attribute :>> artifactKind = ArtifactKind::testProtocol;
211
+ attribute :>> resultSummary = "covers VER-005..VER-010, VER-015, VER-016, VER-020, VER-022..VER-024";
212
+ }
213
+ part evidenceLockout : Evidence {
214
+ attribute :>> id = "EVD-001";
215
+ attribute :>> name = "BolusLockoutEvidence";
216
+ attribute :>> version = "0.1";
217
+ attribute :>> lifecycleState = LifecycleStateKind::development;
218
+ attribute :>> evidenceType = "verification evidence";
219
+ attribute :>> integrityStatus = "draft";
220
+ }
221
+ part evidenceModeRange : Evidence {
222
+ attribute :>> id = "EVD-002";
223
+ attribute :>> name = "ModeRangeEvidence";
224
+ attribute :>> version = "0.1";
225
+ attribute :>> lifecycleState = LifecycleStateKind::development;
226
+ attribute :>> evidenceType = "formal proof evidence";
227
+ attribute :>> integrityStatus = "draft";
228
+ }
229
+ part evidenceSameStepAlarm : Evidence {
230
+ attribute :>> id = "EVD-003";
231
+ attribute :>> name = "SameStepAlarmEvidence";
232
+ attribute :>> version = "0.1";
233
+ attribute :>> lifecycleState = LifecycleStateKind::development;
234
+ attribute :>> evidenceType = "model checking evidence";
235
+ attribute :>> integrityStatus = "draft";
236
+ }
237
+ part evidenceTemporalModeSafety : Evidence {
238
+ attribute :>> id = "EVD-004";
239
+ attribute :>> name = "TemporalModeSafetyEvidence";
240
+ attribute :>> version = "0.1";
241
+ attribute :>> lifecycleState = LifecycleStateKind::development;
242
+ attribute :>> evidenceType = "model checking evidence";
243
+ attribute :>> integrityStatus = "draft";
244
+ }
245
+ part evidenceSafetyAlarmSuite : Evidence {
246
+ attribute :>> id = "EVD-005";
247
+ attribute :>> name = "SafetyAlarmSuiteEvidence";
248
+ attribute :>> version = "0.1";
249
+ attribute :>> lifecycleState = LifecycleStateKind::development;
250
+ attribute :>> evidenceType = "bench test evidence for alarm-driven safe states";
251
+ attribute :>> integrityStatus = "draft";
252
+ }
253
+ part evidenceUsability : Evidence {
254
+ attribute :>> id = "EVD-006";
255
+ attribute :>> name = "SummativeUsabilityEvidence";
256
+ attribute :>> version = "0.1";
257
+ attribute :>> lifecycleState = LifecycleStateKind::development;
258
+ attribute :>> evidenceType = "summative usability report per IEC 62366-1";
259
+ attribute :>> integrityStatus = "draft";
260
+ }
261
+ part evidenceHardwareBench : Evidence {
262
+ attribute :>> id = "EVD-008";
263
+ attribute :>> name = "HardwareBenchEvidence";
264
+ attribute :>> version = "0.1";
265
+ attribute :>> lifecycleState = LifecycleStateKind::development;
266
+ attribute :>> evidenceType = "bench evidence for alarm loudness and anti-free-flow valve";
267
+ attribute :>> integrityStatus = "draft";
268
+ }
269
+ part evidenceDoseProgramming : Evidence {
270
+ attribute :>> id = "EVD-009";
271
+ attribute :>> name = "DoseProgrammingEvidence";
272
+ attribute :>> version = "0.1";
273
+ attribute :>> lifecycleState = LifecycleStateKind::development;
274
+ attribute :>> evidenceType = "test evidence for prescription limits, confirmation, dose ceiling, and event log";
275
+ attribute :>> integrityStatus = "draft";
276
+ }
277
+ part evidenceDeliveryAccuracy : Evidence {
278
+ attribute :>> id = "EVD-007";
279
+ attribute :>> name = "DeliveryAccuracyEvidence";
280
+ attribute :>> version = "0.1";
281
+ attribute :>> lifecycleState = LifecycleStateKind::development;
282
+ attribute :>> evidenceType = "gravimetric bench test evidence";
283
+ attribute :>> integrityStatus = "draft";
284
+ }
285
+ }
@@ -0,0 +1,24 @@
1
+ # Diagram rendering samples
2
+
3
+ This folder backs MEMO Architect's **Samples** experience with small, disposable
4
+ SysML v2 inputs. Each file exists only to exercise one renderer; together they
5
+ do not describe a product or reference architecture.
6
+
7
+ ## Action Flow samples
8
+
9
+ | File | Shows |
10
+ |------|-------|
11
+ | `action_flow_view.sysml` | Minimal renderer smoke test — dummy actions, typed item flows, successions, one composite. |
12
+ | `operational_behaviour_view.sysml` | **Operational** behaviour — swimlanes per clinical role (Physician/Nurse/Biomed Tech/Patient), a `fork`/`join` for concurrent prep, and a composite step (`Administer PCA Therapy`) with a drill-in sub-flow. |
13
+ | `functional_flow_view.sysml` | **Functional/component** behaviour — swimlanes per realising component, typed data/energy/material flows, a `fork`/`join` for concurrent occlusion monitoring, and a composite `Deliver Medication` valve sub-flow. |
14
+
15
+ `fork`/`join` are SysML v2 control nodes: a `fork` splits one control flow into
16
+ concurrent flows, a `join` synchronises them back; the branches are declared by
17
+ the surrounding `first … then …` successions that reference the node by name.
18
+
19
+ The first rendering milestone covers interconnection, tree, and action flow.
20
+ Run the supported example application from the repository root:
21
+
22
+ ```sh
23
+ pnpm example:dev
24
+ ```
@@ -0,0 +1,72 @@
1
+ package memo_examples_gpca_pump_model_samples_action_flow_view {
2
+ private import ScalarValues::*;
3
+ private import memo_core_relationships::*;
4
+
5
+ private import memo_architecture_logical_structure::*;
6
+ private import memo_viewpoints_definitions::*;
7
+ private import memo_core_enumerations::*;
8
+
9
+ item def DataPacket;
10
+ item def EnergyToken;
11
+ item def MaterialBatch;
12
+
13
+ action def ReceiveInput { out received : DataPacket; }
14
+ action def ValidateInput { in received : DataPacket; out validated : EnergyToken; }
15
+ action def ProcessInput { in validated : EnergyToken; out result : MaterialBatch; }
16
+ action def RecordResult { in result : MaterialBatch; }
17
+
18
+ part laneA : LogicalComponent { attribute :>> name = "Lane A"; }
19
+ part laneB : LogicalComponent { attribute :>> name = "Lane B"; }
20
+
21
+ action sampleActionFlow {
22
+ action receive : ReceiveInput;
23
+ action validate : ValidateInput;
24
+ action process : ProcessInput {
25
+ action processStepA : ValidateInput;
26
+ action processStepB : ProcessInput;
27
+ action processStepC : ProcessInput;
28
+ first start then processStepA;
29
+ first processStepA then processStepB;
30
+ first processStepB then processStepC;
31
+ first processStepC then done;
32
+ }
33
+ action record : RecordResult;
34
+
35
+ flow of DataPacket from receive.received to validate.received;
36
+ flow of EnergyToken from validate.validated to process.validated;
37
+ flow of MaterialBatch from process.result to record.result;
38
+
39
+ first start then receive;
40
+ first receive then validate;
41
+ first validate then process;
42
+ first process then record;
43
+ first record then done;
44
+ }
45
+
46
+ allocate sampleActionFlow.receive to laneA;
47
+ allocate sampleActionFlow.validate to laneA;
48
+ allocate sampleActionFlow.process to laneB;
49
+ allocate sampleActionFlow.process.processStepA to laneB;
50
+ allocate sampleActionFlow.process.processStepB to laneB;
51
+ allocate sampleActionFlow.process.processStepC to laneB;
52
+ allocate sampleActionFlow.record to laneB;
53
+
54
+ view sampleActionFlowView : MemoDiagramView {
55
+ expose sampleActionFlow::**;
56
+ expose laneA;
57
+ expose laneB;
58
+ attribute depth = 2;
59
+ attribute :>> title = "Sample · Action Flow";
60
+ attribute :>> shortDescription = "Dummy actions, typed item flows, successions, and a composite action for renderer development.";
61
+ attribute :>> viewKind = DiagramViewKind::actionflow;
62
+ attribute :>> diagramType = "afd";
63
+ }
64
+
65
+ connection : IncludedIn connect sourceElement ::> sampleActionFlow.receive to targetView ::> sampleActionFlowView;
66
+ connection : IncludedIn connect sourceElement ::> sampleActionFlow.validate to targetView ::> sampleActionFlowView;
67
+ connection : IncludedIn connect sourceElement ::> sampleActionFlow.process to targetView ::> sampleActionFlowView;
68
+ connection : IncludedIn connect sourceElement ::> sampleActionFlow.process.processStepA to targetView ::> sampleActionFlowView;
69
+ connection : IncludedIn connect sourceElement ::> sampleActionFlow.process.processStepB to targetView ::> sampleActionFlowView;
70
+ connection : IncludedIn connect sourceElement ::> sampleActionFlow.process.processStepC to targetView ::> sampleActionFlowView;
71
+ connection : IncludedIn connect sourceElement ::> sampleActionFlow.record to targetView ::> sampleActionFlowView;
72
+ }
@@ -0,0 +1,9 @@
1
+ format: memo.viewlayout/v1
2
+ viewSource: model/samples/action_flow_view.sysml
3
+ layouts:
4
+ diag-sample-sampleActionFlowView:
5
+ nodes:
6
+ nodes: {}
7
+ edges: {}
8
+ canvas:
9
+ autoLayout: true
@@ -0,0 +1,153 @@
1
+ package memo_examples_gpca_pump_model_samples_functional_flow_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_architecture_logical_structure::*;
5
+ private import memo_core_relationships::*;
6
+ private import memo_viewpoints_definitions::*;
7
+ private import memo_core_enumerations::*;
8
+
9
+ // ─────────────────────────────────────────────────────────────────────────
10
+ // Sample · Functional flow — component behaviour of dose delivery
11
+ //
12
+ // Demonstrates an Action Flow (activity) diagram of *functional/component*
13
+ // behaviour: how the architecture components collaborate to deliver a dose.
14
+ // Swimlanes group functions by the component that realises them; typed item
15
+ // flows show data (blue), energy (orange) and material (green) moving
16
+ // between functions; a fork/join runs occlusion monitoring concurrently
17
+ // with drive/deliver; and `fxDeliver` is a composite (double-click to
18
+ // drill into its valve sub-flow, then "← Parent" to return).
19
+ // ─────────────────────────────────────────────────────────────────────────
20
+
21
+ // Typed flow payloads
22
+ item def FxSensorReading;
23
+ item def FxRateCommand;
24
+ item def FxMotorEnergy;
25
+ item def FxMedicationFluid;
26
+ item def FxOcclusionSignal;
27
+
28
+ // Functions with typed in/out pins
29
+ action def FxAcquire { out reading : FxSensorReading; }
30
+ action def FxCompute { in reading : FxSensorReading; out command : FxRateCommand; }
31
+ action def FxEnforce { in command : FxRateCommand; out safeCommand : FxRateCommand; }
32
+ action def FxDrive { in command : FxRateCommand; out energy : FxMotorEnergy; }
33
+ action def FxDeliverMedication { in energy : FxMotorEnergy; out fluid : FxMedicationFluid; }
34
+ action def FxMonitor { out signal : FxOcclusionSignal; }
35
+ action def FxDetect { in signal : FxOcclusionSignal; }
36
+
37
+ // Component hierarchy used by the Level control:
38
+ // L1 system → L2 subsystems → L3 allocated components.
39
+ part fxPumpSystem : LogicalComponent { attribute :>> name = "Infusion Pump System"; }
40
+ part fxSensingSubsystem : LogicalComponent { attribute :>> name = "Sensing Subsystem"; }
41
+ part fxControlSubsystem : LogicalComponent { attribute :>> name = "Control Subsystem"; }
42
+ part fxDeliverySubsystem : LogicalComponent { attribute :>> name = "Delivery Subsystem"; }
43
+ part fxSafetySubsystem : LogicalComponent { attribute :>> name = "Safety Subsystem"; }
44
+
45
+ // L3 components — one natural-level swimlane each
46
+ part fxSensor : LogicalComponent { attribute :>> name = "Sensor Subsystem"; }
47
+ part fxController : LogicalComponent { attribute :>> name = "Infusion Controller"; }
48
+ part fxActuator : LogicalComponent { attribute :>> name = "Pump Actuator"; }
49
+ part fxSafety : LogicalComponent { attribute :>> name = "Safety Monitor"; }
50
+
51
+ connection : Composes connect parent ::> fxPumpSystem to child ::> fxSensingSubsystem;
52
+ connection : Composes connect parent ::> fxPumpSystem to child ::> fxControlSubsystem;
53
+ connection : Composes connect parent ::> fxPumpSystem to child ::> fxDeliverySubsystem;
54
+ connection : Composes connect parent ::> fxPumpSystem to child ::> fxSafetySubsystem;
55
+ connection : Composes connect parent ::> fxSensingSubsystem to child ::> fxSensor;
56
+ connection : Composes connect parent ::> fxControlSubsystem to child ::> fxController;
57
+ connection : Composes connect parent ::> fxDeliverySubsystem to child ::> fxActuator;
58
+ connection : Composes connect parent ::> fxSafetySubsystem to child ::> fxSafety;
59
+
60
+ action fxDeliveryFlow {
61
+ action fxAcquire : FxAcquire { attribute name = "Acquire Sensor Data"; }
62
+ action fxCompute : FxCompute { attribute name = "Compute Infusion Rate"; }
63
+
64
+ // Split: enforce/drive/deliver runs concurrently with occlusion monitoring
65
+ fork fxForkDeliver;
66
+ action fxEnforce : FxEnforce { attribute name = "Enforce Dose Limits"; }
67
+ action fxDrive : FxDrive { attribute name = "Drive Pump Motor"; }
68
+ action fxMonitor : FxMonitor { attribute name = "Monitor Occlusion"; }
69
+ action fxDetect : FxDetect { attribute name = "Detect Occlusion"; }
70
+ join fxJoinDeliver;
71
+
72
+ // Composite function — valve sub-flow (drill-in)
73
+ action fxDeliver : FxDeliverMedication {
74
+ attribute name = "Deliver Medication";
75
+ action fxOpenValve { attribute name = "Open Valve"; }
76
+ action fxHoldDose { attribute name = "Hold Metered Dose"; }
77
+ action fxCloseValve { attribute name = "Close Valve"; }
78
+
79
+ flow of FxMedicationFluid from fxDeliveryFlow.fxDeliver.fxHoldDose to fxCloseValve;
80
+
81
+ first start then fxOpenValve;
82
+ first fxOpenValve then fxHoldDose;
83
+ first fxHoldDose then fxCloseValve;
84
+ first fxCloseValve then done;
85
+ }
86
+
87
+ action fxLog { attribute name = "Log Delivery"; }
88
+
89
+ flow of FxSensorReading from fxAcquire.reading to fxCompute.reading;
90
+ flow of FxRateCommand from fxEnforce.safeCommand to fxDrive.command;
91
+ flow of FxMotorEnergy from fxDrive.energy to fxDeliver.energy;
92
+ flow of FxOcclusionSignal from fxMonitor.signal to fxDetect.signal;
93
+
94
+ first start then fxAcquire;
95
+ first fxAcquire then fxCompute;
96
+ first fxCompute then fxForkDeliver;
97
+ first fxForkDeliver then fxEnforce;
98
+ first fxForkDeliver then fxMonitor;
99
+ first fxEnforce then fxDrive;
100
+ first fxDrive then fxDeliver;
101
+ first fxMonitor then fxDetect;
102
+ first fxDeliver then fxJoinDeliver;
103
+ first fxDetect then fxJoinDeliver;
104
+ first fxJoinDeliver then fxLog;
105
+ first fxLog then done;
106
+ }
107
+
108
+ // Swimlane allocation — which component realises each function
109
+ allocate fxDeliveryFlow.fxAcquire to fxSensor;
110
+ allocate fxDeliveryFlow.fxCompute to fxController;
111
+ allocate fxDeliveryFlow.fxEnforce to fxSafety;
112
+ allocate fxDeliveryFlow.fxDrive to fxActuator;
113
+ allocate fxDeliveryFlow.fxDeliver to fxActuator;
114
+ allocate fxDeliveryFlow.fxMonitor to fxSafety;
115
+ allocate fxDeliveryFlow.fxDetect to fxSafety;
116
+ allocate fxDeliveryFlow.fxLog to fxController;
117
+ allocate fxDeliveryFlow.fxDeliver.fxOpenValve to fxActuator;
118
+ allocate fxDeliveryFlow.fxDeliver.fxHoldDose to fxActuator;
119
+ allocate fxDeliveryFlow.fxDeliver.fxCloseValve to fxActuator;
120
+
121
+ view fxDeliveryView : MemoDiagramView {
122
+ expose fxDeliveryFlow::**;
123
+ expose fxPumpSystem::**;
124
+ attribute depth = 2;
125
+ attribute :>> title = "Sample · Dose Delivery (Functional Flow)";
126
+ attribute :>> shortDescription = "Component behaviour: functions in swimlanes per realising component, typed data/energy/material flows, a fork/join for concurrent occlusion monitoring, and a composite 'Deliver Medication' valve sub-flow (double-click to drill in).";
127
+ attribute :>> viewKind = DiagramViewKind::actionflow;
128
+ attribute :>> diagramType = "ffd";
129
+ }
130
+
131
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxAcquire to targetView ::> fxDeliveryView;
132
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxCompute to targetView ::> fxDeliveryView;
133
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxForkDeliver to targetView ::> fxDeliveryView;
134
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxEnforce to targetView ::> fxDeliveryView;
135
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxDrive to targetView ::> fxDeliveryView;
136
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxDeliver to targetView ::> fxDeliveryView;
137
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxMonitor to targetView ::> fxDeliveryView;
138
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxDetect to targetView ::> fxDeliveryView;
139
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxJoinDeliver to targetView ::> fxDeliveryView;
140
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxLog to targetView ::> fxDeliveryView;
141
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxDeliver.fxOpenValve to targetView ::> fxDeliveryView;
142
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxDeliver.fxHoldDose to targetView ::> fxDeliveryView;
143
+ connection : IncludedIn connect sourceElement ::> fxDeliveryFlow.fxDeliver.fxCloseValve to targetView ::> fxDeliveryView;
144
+ connection : IncludedIn connect sourceElement ::> fxPumpSystem to targetView ::> fxDeliveryView;
145
+ connection : IncludedIn connect sourceElement ::> fxSensingSubsystem to targetView ::> fxDeliveryView;
146
+ connection : IncludedIn connect sourceElement ::> fxControlSubsystem to targetView ::> fxDeliveryView;
147
+ connection : IncludedIn connect sourceElement ::> fxDeliverySubsystem to targetView ::> fxDeliveryView;
148
+ connection : IncludedIn connect sourceElement ::> fxSafetySubsystem to targetView ::> fxDeliveryView;
149
+ connection : IncludedIn connect sourceElement ::> fxSensor to targetView ::> fxDeliveryView;
150
+ connection : IncludedIn connect sourceElement ::> fxController to targetView ::> fxDeliveryView;
151
+ connection : IncludedIn connect sourceElement ::> fxActuator to targetView ::> fxDeliveryView;
152
+ connection : IncludedIn connect sourceElement ::> fxSafety to targetView ::> fxDeliveryView;
153
+ }
@@ -0,0 +1,93 @@
1
+ package memo_examples_gpca_pump_model_samples_interconnection_view {
2
+ private import ScalarValues::*;
3
+ private import memo_architecture_context::*;
4
+
5
+ private import memo_architecture_interfaces::*;
6
+ private import memo_architecture_logical_structure::*;
7
+ private import memo_core_relationships::*;
8
+ private import memo_viewpoints_definitions::*;
9
+ private import memo_core_enumerations::*;
10
+
11
+ part coffeeMachine : LogicalComponent { attribute :>> name = "Coffee Machine"; }
12
+ part waterSupply : LogicalComponent { attribute :>> name = "Water Supply"; }
13
+ part waterTank : LogicalComponent { attribute :>> name = "Water Reservoir"; }
14
+ part heaterAssembly : LogicalComponent { attribute :>> name = "Thermal Control Assembly"; }
15
+ part heatingElement : LogicalComponent { attribute :>> name = "Water Heating Element"; }
16
+ part brewGroup : LogicalComponent { attribute :>> name = "Brew Group"; }
17
+ part cup : LogicalComponent { attribute :>> name = "Cup"; }
18
+
19
+ port mainsWaterIn : DataPort { attribute :>> direction = DirectionKind::input; }
20
+ port beverageOut : DataPort { attribute :>> direction = DirectionKind::output; }
21
+ port supplyWaterOut : DataPort { attribute :>> direction = DirectionKind::output; }
22
+ port cupBeverageIn : DataPort { attribute :>> direction = DirectionKind::input; }
23
+ port serviceInterface : DataPort { attribute :>> direction = DirectionKind::bidirectional; }
24
+ port diagnostics : DataPort { attribute :>> direction = DirectionKind::output; }
25
+ port tankWaterOut : DataPort { attribute :>> direction = DirectionKind::output; }
26
+ port tankWaterIn : DataPort { attribute :>> direction = DirectionKind::input; }
27
+ port heaterWaterIn : DataPort { attribute :>> direction = DirectionKind::input; }
28
+ port heatedWaterOut : DataPort { attribute :>> direction = DirectionKind::output; }
29
+ port brewWaterIn : DataPort { attribute :>> direction = DirectionKind::input; }
30
+ port brewedCoffeeOut : DataPort { attribute :>> direction = DirectionKind::output; }
31
+ port heaterStatusOut : DataPort { attribute :>> direction = DirectionKind::output; }
32
+
33
+ connection : Composes connect parent ::> coffeeMachine to child ::> waterTank;
34
+ connection : Composes connect parent ::> coffeeMachine to child ::> heaterAssembly;
35
+ connection : Composes connect parent ::> coffeeMachine to child ::> brewGroup;
36
+ connection : Composes connect parent ::> coffeeMachine to child ::> mainsWaterIn;
37
+ connection : Composes connect parent ::> coffeeMachine to child ::> beverageOut;
38
+ connection : Composes connect parent ::> coffeeMachine to child ::> serviceInterface;
39
+ connection : Composes connect parent ::> serviceInterface to child ::> diagnostics;
40
+ connection : Composes connect parent ::> waterTank to child ::> tankWaterOut;
41
+ connection : Composes connect parent ::> waterTank to child ::> tankWaterIn;
42
+ connection : Composes connect parent ::> heaterAssembly to child ::> heatingElement;
43
+ connection : Composes connect parent ::> heaterAssembly to child ::> heaterWaterIn;
44
+ connection : Composes connect parent ::> heaterAssembly to child ::> heatedWaterOut;
45
+ connection : Composes connect parent ::> brewGroup to child ::> brewWaterIn;
46
+ connection : Composes connect parent ::> brewGroup to child ::> brewedCoffeeOut;
47
+ connection : Composes connect parent ::> heatingElement to child ::> heaterStatusOut;
48
+ connection : Composes connect parent ::> waterSupply to child ::> supplyWaterOut;
49
+ connection : Composes connect parent ::> cup to child ::> cupBeverageIn;
50
+
51
+ connection : ExchangesWith connect source ::> supplyWaterOut to target ::> mainsWaterIn;
52
+ connection : ExchangesWith connect source ::> mainsWaterIn to target ::> tankWaterIn;
53
+ connection : ExchangesWith connect source ::> tankWaterOut to target ::> heaterWaterIn;
54
+ connection : ExchangesWith connect source ::> heatedWaterOut to target ::> brewWaterIn;
55
+ connection : ExchangesWith connect source ::> brewedCoffeeOut to target ::> beverageOut;
56
+ connection : ExchangesWith connect source ::> beverageOut to target ::> cupBeverageIn;
57
+ connection : ExchangesWith connect source ::> heaterStatusOut to target ::> diagnostics;
58
+
59
+ view sampleInterconnectionView : MemoDiagramView {
60
+ expose coffeeMachine::**;
61
+ expose waterSupply::**;
62
+ expose cup::**;
63
+ attribute depth = 2;
64
+ attribute :>> title = "Coffee Machine · Thermal & Fluid IBD";
65
+ attribute :>> shortDescription = "Balanced internal architecture with readable boundary ports, nested service diagnostics, and external water and beverage interfaces.";
66
+ attribute :>> viewKind = DiagramViewKind::interconnection;
67
+ attribute :>> diagramType = "ibd";
68
+ part :>> selectionQuery {
69
+ attribute :>> includeRelationshipKinds = ("Composes", "ExchangesWith");
70
+ }
71
+ }
72
+
73
+ connection : IncludedIn connect sourceElement ::> coffeeMachine to targetView ::> sampleInterconnectionView;
74
+ connection : IncludedIn connect sourceElement ::> waterSupply to targetView ::> sampleInterconnectionView;
75
+ connection : IncludedIn connect sourceElement ::> waterTank to targetView ::> sampleInterconnectionView;
76
+ connection : IncludedIn connect sourceElement ::> heaterAssembly to targetView ::> sampleInterconnectionView;
77
+ connection : IncludedIn connect sourceElement ::> heatingElement to targetView ::> sampleInterconnectionView;
78
+ connection : IncludedIn connect sourceElement ::> brewGroup to targetView ::> sampleInterconnectionView;
79
+ connection : IncludedIn connect sourceElement ::> cup to targetView ::> sampleInterconnectionView;
80
+ connection : IncludedIn connect sourceElement ::> mainsWaterIn to targetView ::> sampleInterconnectionView;
81
+ connection : IncludedIn connect sourceElement ::> beverageOut to targetView ::> sampleInterconnectionView;
82
+ connection : IncludedIn connect sourceElement ::> supplyWaterOut to targetView ::> sampleInterconnectionView;
83
+ connection : IncludedIn connect sourceElement ::> cupBeverageIn to targetView ::> sampleInterconnectionView;
84
+ connection : IncludedIn connect sourceElement ::> serviceInterface to targetView ::> sampleInterconnectionView;
85
+ connection : IncludedIn connect sourceElement ::> diagnostics to targetView ::> sampleInterconnectionView;
86
+ connection : IncludedIn connect sourceElement ::> tankWaterOut to targetView ::> sampleInterconnectionView;
87
+ connection : IncludedIn connect sourceElement ::> tankWaterIn to targetView ::> sampleInterconnectionView;
88
+ connection : IncludedIn connect sourceElement ::> heaterWaterIn to targetView ::> sampleInterconnectionView;
89
+ connection : IncludedIn connect sourceElement ::> heatedWaterOut to targetView ::> sampleInterconnectionView;
90
+ connection : IncludedIn connect sourceElement ::> brewWaterIn to targetView ::> sampleInterconnectionView;
91
+ connection : IncludedIn connect sourceElement ::> brewedCoffeeOut to targetView ::> sampleInterconnectionView;
92
+ connection : IncludedIn connect sourceElement ::> heaterStatusOut to targetView ::> sampleInterconnectionView;
93
+ }