@memoarchitect/ontology 0.8.22 → 0.10.9

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 (240) hide show
  1. package/README.md +1 -1
  2. package/examples/connected-patient-monitor/memo.package.yaml +3 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  4. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  5. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
  6. package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +11 -9
  8. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  9. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
  10. package/examples/functional-logical-physical/memo.package.yaml +3 -0
  11. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +9 -7
  12. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  13. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
  14. package/examples/gpca-pump/memo.identity.yaml +2179 -0
  15. package/examples/gpca-pump/memo.package.yaml +3 -0
  16. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  17. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  18. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  19. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  20. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  21. package/examples/gpca-pump/model/catalog/gpca_context.sysml +27 -23
  22. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +15 -15
  23. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  24. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  25. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +146 -180
  26. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  27. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
  28. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  29. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  30. package/examples/gpca-pump/model/catalog/gpca_system.sysml +21 -33
  31. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -11
  32. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  33. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  34. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +7 -7
  35. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +7 -7
  36. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +6 -7
  37. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +7 -8
  38. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +6 -6
  39. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +6 -6
  40. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +6 -6
  41. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +8 -9
  42. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +6 -6
  43. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +6 -6
  44. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +6 -6
  45. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +6 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +7 -7
  47. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +6 -6
  48. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +6 -6
  49. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +8 -9
  50. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +6 -6
  51. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -7
  52. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +6 -7
  53. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +6 -6
  54. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +6 -6
  55. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +6 -7
  56. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +6 -6
  57. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +8 -9
  58. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +6 -7
  59. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +6 -6
  60. package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
  61. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +10 -8
  62. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  63. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
  64. package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
  65. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +7 -5
  66. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  67. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
  68. package/examples/multidimensional-layers/memo.package.yaml +3 -0
  69. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  70. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  71. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
  72. package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
  73. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  74. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  75. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
  76. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
  77. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  78. package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
  79. package/examples/reusable-instrument/memo.package.yaml +3 -0
  80. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  81. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +23 -31
  82. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
  83. package/examples/ros-mobile-robot/memo.package.yaml +3 -0
  84. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  85. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  86. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +0 -1
  87. package/examples/software-only-medical-device/memo.package.yaml +3 -0
  88. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  89. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -9
  90. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
  91. package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
  92. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  93. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -69
  94. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
  95. package/examples/surgical-robot/memo.package.yaml +3 -0
  96. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  97. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  98. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
  99. package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
  100. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  101. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -11
  102. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -7
  103. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +4 -3
  104. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +3 -3
  105. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +17 -16
  106. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +9 -8
  107. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +4 -3
  108. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +3 -3
  109. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +4 -3
  110. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -9
  111. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  112. package/examples/temperature-alarm/memo.package.yaml +3 -0
  113. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  114. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +30 -29
  115. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
  116. package/examples/ui-screen-regions/memo.package.yaml +3 -0
  117. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  118. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  119. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  120. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  121. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  122. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  123. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  124. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  125. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
  126. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  127. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  128. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  129. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  130. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  131. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +6 -5
  132. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +6 -5
  133. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +6 -5
  134. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +4 -3
  135. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +4 -3
  136. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +4 -3
  137. package/extensions/aadl/memo.package.yaml +1 -1
  138. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  139. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  140. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  141. package/extensions/cloud/memo.package.yaml +1 -1
  142. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  143. package/extensions/container/memo.package.yaml +1 -1
  144. package/extensions/container/src/container_extension.sysml +2 -2
  145. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  146. package/extensions/messaging/memo.package.yaml +1 -1
  147. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  148. package/extensions/ros/memo.package.yaml +1 -1
  149. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  150. package/extensions/template/src/extension.sysml +3 -1
  151. package/methodologies/default/memo.package.yaml +1 -1
  152. package/methodologies/gpca/memo.package.yaml +1 -1
  153. package/ontology/memo.package.yaml +1 -1
  154. package/package.json +2 -2
  155. package/profile/memo.package.yaml +1 -1
  156. package/src/architecture/functional/behavior/memo_behavior.sysml +5 -5
  157. package/src/architecture/functional/functions/memo_functions.sysml +6 -6
  158. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  159. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  160. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +7 -7
  161. package/src/architecture/implementation/ui/memo_ui.sysml +8 -31
  162. package/src/architecture/logical/interfaces/memo_interfaces.sysml +4 -2
  163. package/src/architecture/logical/structure/memo_logical_structure.sysml +5 -5
  164. package/src/architecture/operational/activities/memo_activities.sysml +19 -28
  165. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -4
  166. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +7 -7
  167. package/src/architecture/operational/context/use_context/memo_use_context.sysml +5 -14
  168. package/src/architecture/operational/scenarios/memo_scenarios.sysml +12 -104
  169. package/src/architecture/operational/structure/memo_operational.sysml +42 -13
  170. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -12
  171. package/src/architecture/operational/workflows/memo_workflows.sysml +20 -42
  172. package/src/architecture/realization/deployment/memo_deployment.sysml +26 -19
  173. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  174. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  175. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  176. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  177. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  178. package/src/artifacts/standards/iec_60812.sysml +21 -22
  179. package/src/artifacts/standards/iec_62304.sysml +150 -169
  180. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  181. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  182. package/src/artifacts/standards/iso_13485.sysml +80 -89
  183. package/src/artifacts/standards/iso_14971.sysml +66 -73
  184. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  185. package/src/artifacts/templates/dhf/system/sad.md +3 -3
  186. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +2 -2
  187. package/src/assurance/human_factors/memo_human_factors.sysml +2 -2
  188. package/src/assurance/requirements/memo_requirements.sysml +2 -18
  189. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +1 -1
  190. package/src/assurance/safety_risk/memo_risk.sysml +12 -0
  191. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  192. package/src/core/common/memo_common.sysml +59 -55
  193. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  194. package/src/core/relationships/memo_relationships.sysml +29 -56
  195. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  196. package/src/methodology/core/memo_core.sysml +0 -10
  197. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  198. package/src/methodology/workflow/memo_workflow.sysml +5 -5
  199. package/src/rules/closure/closure_rules.sysml +22 -20
  200. package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
  201. package/src/rules/ontology/ontology_invariants.sysml +121 -48
  202. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  203. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +58 -57
  204. package/src/viewpoints/clinical/clinical_viewpoint.sysml +5 -4
  205. package/src/viewpoints/context/context_viewpoint.sysml +6 -5
  206. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +6 -5
  207. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +6 -6
  208. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +36 -4
  209. package/src/viewpoints/functional/functional_viewpoint.sysml +6 -5
  210. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +6 -5
  211. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +6 -5
  212. package/src/viewpoints/logical/logical_viewpoint.sysml +5 -4
  213. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +6 -5
  214. package/src/viewpoints/operational/operational_viewpoint.sysml +6 -5
  215. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +7 -6
  216. package/src/viewpoints/physical/physical_viewpoint.sysml +5 -4
  217. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +6 -5
  218. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +6 -5
  219. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  220. package/src/viewpoints/requirements/requirements_viewpoint.sysml +5 -4
  221. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +6 -5
  222. package/src/viewpoints/risk/risk_viewpoint.sysml +5 -4
  223. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +6 -5
  224. package/src/viewpoints/software/software_viewpoint.sysml +5 -4
  225. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +6 -5
  226. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +5 -4
  227. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  228. package/src/viewpoints/usability/usability_viewpoint.sysml +5 -4
  229. package/src/viewpoints/verification/verification_viewpoint.sysml +5 -4
  230. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +6 -5
  231. package/templates/connected-device/memo.package.yaml +2 -0
  232. package/templates/connected-device/model/catalog/project.sysml +3 -1
  233. package/templates/default/memo.package.yaml +2 -0
  234. package/templates/default/model/catalog/project.sysml +3 -1
  235. package/templates/infusion-pump/memo.package.yaml +2 -0
  236. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  237. package/templates/monitoring-device/memo.package.yaml +2 -0
  238. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  239. package/templates/samd/memo.package.yaml +2 -0
  240. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -0,0 +1,3 @@
1
+ name: software-only-medical-device
2
+ entrypoint: model/catalog/project.sysml
3
+ include: [model]
@@ -14,8 +14,10 @@ package memo_examples_software_only_medical_device_project {
14
14
  private import memo_examples_software_only_medical_device_viewpoints_unassigned::*;
15
15
  private import memo_examples_software_only_medical_device_viewpoints_unassigned_views_software_only_medical_device_overview::*;
16
16
 
17
+ private import memo_core_common::*;
18
+ private import memo_core_common::MemoIdentity;
17
19
  part projectBinding : ProjectMethodBinding {
18
- attribute :>> id = "PMB-MEDICAL-DEVICE-001";
20
+ @MemoIdentity { :>> providedId = "PMB-MEDICAL-DEVICE-001"; }
19
21
  attribute :>> name = "SoftwareOnlyMedicalDeviceProjectMethodBinding";
20
22
  attribute :>> projectName = "Software Only Medical Device";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -18,31 +18,33 @@ package memo_examples_software_only_medical_device {
18
18
  // the mechanism working as designed rather than a cost of the move.
19
19
  private import memo_extension_cloud::*;
20
20
 
21
+ private import memo_core_common::*;
22
+ private import memo_core_common::MemoIdentity;
21
23
  part swScreeningApp : SoftwareSystem {
22
- attribute :>> id = "SMD-SW-001"; attribute :>> name = "ScreeningApplication";
24
+ @MemoIdentity { :>> providedId = "SMD-SW-001"; } attribute :>> name = "ScreeningApplication";
23
25
  attribute :>> safetyClass = SafetyClassKind::B;
24
26
  attribute :>> version = "1.4.0";
25
27
  }
26
28
  part algGrading : Algorithm {
27
- attribute :>> id = "SMD-ALG-001"; attribute :>> name = "RetinopathyGradingModel";
29
+ @MemoIdentity { :>> providedId = "SMD-ALG-001"; } attribute :>> name = "RetinopathyGradingModel";
28
30
  attribute :>> algorithmKind = "convolutional neural network, locked (non-adaptive)";
29
31
  attribute :>> clinicalPerformanceClaim = "sensitivity >= 87%, specificity >= 90% vs. reference standard";
30
32
  }
31
33
  part soupInference : SoftwareModule {
32
34
  attribute :>> moduleKind = ModuleKind::soup;
33
- attribute :>> id = "SMD-SOUP-001"; attribute :>> name = "InferenceRuntimeLibrary";
35
+ @MemoIdentity { :>> providedId = "SMD-SOUP-001"; } attribute :>> name = "InferenceRuntimeLibrary";
34
36
  attribute :>> soupVendor = "third-party OSS";
35
37
  attribute :>> soupClassification = SOUPClassificationKind::classB;
36
38
  }
37
39
  part swGradingModule : SoftwareModule {
38
- attribute :>> id = "SMD-SW-002"; attribute :>> name = "GradingModule";
40
+ @MemoIdentity { :>> providedId = "SMD-SW-002"; } attribute :>> name = "GradingModule";
39
41
  attribute :>> responsibility = "Wraps the grading model behind the service API; owns input validation and result structuring.";
40
42
  attribute :>> safetyClass = SafetyClassKind::B;
41
43
  }
42
44
  dependency swGradingModule to soupInference;
43
45
 
44
46
  part svcGrading : CloudService {
45
- attribute :>> id = "SMD-RT-001"; attribute :>> name = "GradingService";
47
+ @MemoIdentity { :>> providedId = "SMD-RT-001"; } attribute :>> name = "GradingService";
46
48
  attribute :>> serviceContract = "REST /grade: image in, structured finding out";
47
49
  attribute :>> discoveryMechanism = "DNS name behind the cluster ingress";
48
50
  attribute :>> updatePolicy = "blue/green rollout";
@@ -50,13 +52,13 @@ package memo_examples_software_only_medical_device {
50
52
  }
51
53
  #refinement dependency svcGrading to swGradingModule;
52
54
 
53
- part duContainerImage : DeploymentUnit {
54
- attribute :>> id = "SMD-DU-001"; attribute :>> name = "ScreeningServiceImage";
55
+ part duContainerImage : SoftwareDeploymentUnit {
56
+ @MemoIdentity { :>> providedId = "SMD-DU-001"; } attribute :>> name = "ScreeningServiceImage";
55
57
  attribute :>> unitKind = "OCI container image";
56
58
  attribute :>> integrityProtection = "image signature + SBOM attestation";
57
59
  }
58
60
  part nodeCloud : ProcessingNode {
59
- attribute :>> id = "SMD-HW-001"; attribute :>> name = "CloudComputeNode";
61
+ @MemoIdentity { :>> providedId = "SMD-HW-001"; } attribute :>> name = "CloudComputeNode";
60
62
  attribute :>> nodeKind = ProcessingNodeKind::cloudServer;
61
63
  attribute :>> supportsContainerization = true;
62
64
  attribute :>> realTimeCapable = false;
@@ -64,5 +66,5 @@ package memo_examples_software_only_medical_device {
64
66
  allocation duContainerImageDeployment : DeploysTo allocate duContainerImage to nodeCloud {
65
67
  attribute :>> deploymentKind = DeploymentKind::containerized;
66
68
  }
67
- connection : HostedBy connect hostAssembly ::> nodeCloud to processingNode ::> svcGrading;
69
+ allocation : HostedBy allocate svcGrading to nodeCloud;
68
70
  }
@@ -6,7 +6,6 @@ package memo_examples_software_only_medical_device_viewpoints_unassigned_views_s
6
6
  view softwareOnlyMedicalDeviceOverview : MemoDiagramView {
7
7
  expose memo_examples_software_only_medical_device::*;
8
8
  attribute depth = 2;
9
- attribute :>> title = "Software-only Medical Device Overview";
10
9
  attribute :>> viewKind = DiagramViewKind::general;
11
10
  attribute :>> diagramType = "bdd";
12
11
  }
@@ -0,0 +1,3 @@
1
+ name: surgical-closure-workflow
2
+ entrypoint: model/catalog/project.sysml
3
+ include: [model]
@@ -14,8 +14,10 @@ package memo_examples_surgical_closure_workflow_project {
14
14
  private import memo_examples_surgical_closure_workflow_viewpoints_unassigned::*;
15
15
  private import memo_examples_surgical_closure_workflow_viewpoints_unassigned_views_surgical_closure_workflow_overview::*;
16
16
 
17
+ private import memo_core_common::*;
18
+ private import memo_core_common::MemoIdentity;
17
19
  part projectBinding : ProjectMethodBinding {
18
- attribute :>> id = "PMB-CLOSURE-WORKFLOW-001";
20
+ @MemoIdentity { :>> providedId = "PMB-CLOSURE-WORKFLOW-001"; }
19
21
  attribute :>> name = "SurgicalClosureWorkflowProjectMethodBinding";
20
22
  attribute :>> projectName = "Surgical Closure Workflow";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -16,36 +16,38 @@ package memo_examples_surgical_closure_workflow {
16
16
  private import memo_architecture_operational_workflows::*;
17
17
  private import memo_architecture_operational_scenarios::*;
18
18
 
19
+ private import memo_core_common::*;
20
+ private import memo_core_common::MemoIdentity;
19
21
  // ── Clinical setting and goal ───────────────────────────────
20
22
  part bariatricSurgeon : User {
21
23
  attribute :>> actorKind = ActorKind::clinician;
22
- attribute :>> id = "LSG-USR-001"; attribute :>> name = "BariatricSurgeon";
24
+ @MemoIdentity { :>> providedId = "LSG-USR-001"; } attribute :>> name = "BariatricSurgeon";
23
25
  attribute :>> clinicalRole = "primary operating surgeon";
24
26
  }
25
27
  part scrubNurse : User {
26
28
  attribute :>> actorKind = ActorKind::clinician;
27
- attribute :>> id = "LSG-USR-002"; attribute :>> name = "ScrubNurse";
29
+ @MemoIdentity { :>> providedId = "LSG-USR-002"; } attribute :>> name = "ScrubNurse";
28
30
  attribute :>> clinicalRole = "sterile instrumentation and count";
29
31
  }
30
32
  part anesthetist : User {
31
33
  attribute :>> actorKind = ActorKind::clinician;
32
- attribute :>> id = "LSG-USR-003"; attribute :>> name = "Anesthetist";
34
+ @MemoIdentity { :>> providedId = "LSG-USR-003"; } attribute :>> name = "Anesthetist";
33
35
  attribute :>> clinicalRole = "anaesthesia and physiologic monitoring";
34
36
  }
35
37
  part bariatricOr : UseContext {
36
- attribute :>> id = "LSG-CTX-001"; attribute :>> name = "BariatricOperatingRoom";
38
+ @MemoIdentity { :>> providedId = "LSG-CTX-001"; } attribute :>> name = "BariatricOperatingRoom";
37
39
  attribute :>> careSetting = "hospital operating room";
38
40
  attribute :>> environment = "sterile laparoscopic operating field";
39
41
  attribute :>> connectedUse = false;
40
42
  }
41
43
  requirement needControlledGastricResection : Need {
42
44
  attribute :>> needKind = NeedKind::clinicalUser;
43
- attribute :>> id = "LSG-N-001";
45
+ @MemoIdentity { :>> providedId = "LSG-N-001"; }
44
46
  attribute :>> statement = "The surgical team needs to perform gastric resection with controlled anatomy, haemostasis, and a checked staple line.";
45
47
  }
46
48
  use case ucPerformSleeveGastrectomy : UseCase {
47
49
  attribute :>> useCaseKind = UseCaseKind::clinical;
48
- attribute :>> id = "LSG-UC-001";
50
+ @MemoIdentity { :>> providedId = "LSG-UC-001"; }
49
51
  attribute :>> name = "PerformLaparoscopicSleeveGastrectomy";
50
52
  attribute :>> goalStatement = "Complete the planned laparoscopic sleeve gastrectomy and transfer the patient with the staple line assessed.";
51
53
  attribute :>> trigger = "patient prepared and surgical time-out complete";
@@ -60,92 +62,77 @@ package memo_examples_surgical_closure_workflow {
60
62
  connection : Motivates connect motivatingNeed ::> needControlledGastricResection to motivatedUseCase ::> ucPerformSleeveGastrectomy;
61
63
 
62
64
  // ── Procedure workflow ──────────────────────────────────────
63
- action actTimeOutAndPosition : OperationalActivity { attribute :>> id = "LSG-ACT-001"; attribute :>> name = "ConfirmTimeOutAndPosition"; }
64
- action actEstablishAccess : OperationalActivity { attribute :>> id = "LSG-ACT-002"; attribute :>> name = "EstablishLaparoscopicAccess"; }
65
- action actMobilizeStomach : OperationalActivity { attribute :>> id = "LSG-ACT-003"; attribute :>> name = "MobilizeStomach"; }
66
- action actSizeAndCreateSleeve : OperationalActivity {
67
- attribute :>> id = "LSG-ACT-004"; attribute :>> name = "SizeAndCreateSleeve"; attribute :>> criticality = CriticalityKind::high;
65
+ action actTimeOutAndPosition : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-001"; } attribute :>> name = "ConfirmTimeOutAndPosition"; }
66
+ action actEstablishAccess : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-002"; } attribute :>> name = "EstablishLaparoscopicAccess"; }
67
+ action actMobilizeStomach : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-003"; } attribute :>> name = "MobilizeStomach"; }
68
+ action actSizeAndCreateSleeve : OperativeAction {
69
+ @MemoIdentity { :>> providedId = "LSG-ACT-004"; } attribute :>> name = "SizeAndCreateSleeve"; attribute :>> criticality = CriticalityKind::high;
68
70
 
69
- action taskCreateStapleLine : UserTask {
71
+ action taskCreateStapleLine : OperativeAction {
70
72
  attribute :>> criticality = CriticalityKind::high;
71
- attribute :>> id = "LSG-TASK-001";
73
+ @MemoIdentity { :>> providedId = "LSG-TASK-001"; }
72
74
  attribute :>> name = "CreateAndInspectStapleLine";
73
75
  attribute :>> taskGoal = "create the planned sleeve and identify bleeding or integrity concerns before completion";
74
76
  attribute :>> potentialHarm = "bleeding or staple-line complication not recognized before handover";
75
77
  attribute :>> severityIfFailed = SeverityKind::serious;
76
78
 
77
- action stConfirmAnatomy : TaskStep { attribute :>> id = "LSG-ST-001"; attribute :>> name = "ConfirmAnatomy"; }
78
- action stCreateStapleLine : TaskStep { attribute :>> id = "LSG-ST-002"; attribute :>> name = "CreateStapleLine"; }
79
- action stInspectBleeding : TaskStep { attribute :>> id = "LSG-ST-003"; attribute :>> name = "InspectForBleeding"; }
80
- action stAssessIntegrity : TaskStep { attribute :>> id = "LSG-ST-004"; attribute :>> name = "AssessStapleLineIntegrity"; }
79
+ action stConfirmAnatomy : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ST-001"; } attribute :>> name = "ConfirmAnatomy"; }
80
+ action stCreateStapleLine : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ST-002"; } attribute :>> name = "CreateStapleLine"; }
81
+ action stInspectBleeding : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ST-003"; } attribute :>> name = "InspectForBleeding"; }
82
+ action stAssessIntegrity : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ST-004"; } attribute :>> name = "AssessStapleLineIntegrity"; }
81
83
  first stConfirmAnatomy then stCreateStapleLine;
82
84
  first stCreateStapleLine then stInspectBleeding;
83
85
  first stInspectBleeding then stAssessIntegrity;
84
86
  }
85
87
  }
86
- action actAssessStapleLine : OperationalActivity { attribute :>> id = "LSG-ACT-005"; attribute :>> name = "AssessStapleLine"; attribute :>> criticality = CriticalityKind::high; }
87
- action actExtractSpecimenAndClose : OperationalActivity { attribute :>> id = "LSG-ACT-006"; attribute :>> name = "ExtractSpecimenAndClosePorts"; }
88
- action actHandover : OperationalActivity { attribute :>> id = "LSG-ACT-007"; attribute :>> name = "CompletePostoperativeHandover"; }
88
+ action actAssessStapleLine : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-005"; } attribute :>> name = "AssessStapleLine"; attribute :>> criticality = CriticalityKind::high; }
89
+ action actExtractSpecimenAndClose : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-006"; } attribute :>> name = "ExtractSpecimenAndClosePorts"; }
90
+ action actHandover : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-007"; } attribute :>> name = "CompletePostoperativeHandover"; }
89
91
 
90
92
  action wfSleeveGastrectomy : ClinicalProcedureWorkflow {
91
- attribute :>> id = "LSG-WF-001";
93
+ @MemoIdentity { :>> providedId = "LSG-WF-001"; }
92
94
  attribute :>> name = "LaparoscopicSleeveGastrectomyWorkflow";
93
95
  attribute :>> workflowState = WorkflowStateKind::toBe;
94
96
  attribute :>> entryCondition = "patient prepared; time-out ready";
95
97
  attribute :>> completionCondition = "staple line assessed; postoperative handover complete";
96
98
  attribute :>> clinicalObjective = "create a gastric sleeve after controlled mobilisation and staple-line assessment";
99
+ action scNominalSleeveProcedure : OperativeScenario {
100
+ @MemoIdentity { :>> providedId = "LSG-SC-001"; } attribute :>> name = "NominalSleeveGastrectomy";
101
+ attribute :>> pathSummary = "Time-out, access, mobilisation, sleeve creation, staple-line assessment, closure, and handover complete without rework.";
97
102
 
98
- action wsTimeOut : WorkflowStep { ref :>> performedActivity = actTimeOutAndPosition; }
99
- action wsAccess : WorkflowStep { ref :>> performedActivity = actEstablishAccess; }
100
- action wsMobilize : WorkflowStep { ref :>> performedActivity = actMobilizeStomach; }
101
- action wsSleeve : WorkflowStep { ref :>> performedActivity = actSizeAndCreateSleeve; }
102
- action wsAssess : WorkflowStep { ref :>> performedActivity = actAssessStapleLine; }
103
- action wsClose : WorkflowStep { ref :>> performedActivity = actExtractSpecimenAndClose; }
104
- action wsHandover : WorkflowStep { ref :>> performedActivity = actHandover; }
105
- first wsTimeOut then wsAccess;
106
- first wsAccess then wsMobilize;
107
- first wsMobilize then wsSleeve;
108
- first wsSleeve then wsAssess;
109
- first wsAssess then wsClose;
110
- first wsClose then wsHandover;
103
+ perform actTimeOutAndPosition;
104
+ perform actEstablishAccess;
105
+ perform actMobilizeStomach;
106
+ perform actSizeAndCreateSleeve;
107
+ perform actAssessStapleLine;
108
+ perform actExtractSpecimenAndClose;
109
+ perform actHandover;
110
+ first actTimeOutAndPosition then actEstablishAccess;
111
+ first actEstablishAccess then actMobilizeStomach;
112
+ first actMobilizeStomach then actSizeAndCreateSleeve;
113
+ first actSizeAndCreateSleeve then actAssessStapleLine;
114
+ first actAssessStapleLine then actExtractSpecimenAndClose;
115
+ first actExtractSpecimenAndClose then actHandover;
116
+ }
117
+ action scStapleLineBleeding : OperativeScenario {
118
+ attribute :>> scenarioKind = ScenarioKind::alternate;
119
+ @MemoIdentity { :>> providedId = "LSG-SC-002"; } attribute :>> name = "StapleLineBleedingRecovery";
120
+ attribute :>> pathSummary = "Recognize bleeding, apply the selected control, reassess the staple line, and escalate if the condition remains unresolved.";
121
+
122
+ action oaControlStapleLineBleeding : OperativeAction {
123
+ attribute :>> name = "ControlStapleLineBleeding";
124
+ action recognizeBleeding; action controlBleeding; action reassessStapleLine; action escalateIfNeeded;
125
+ first start then recognizeBleeding; first recognizeBleeding then controlBleeding; first controlBleeding then reassessStapleLine; first reassessStapleLine then escalateIfNeeded; first escalateIfNeeded then done;
126
+ }
127
+ }
111
128
  }
112
- connection : Supports { attribute :>> supportKind = SupportKind::useCase; connect supporter ::> wfSleeveGastrectomy to supported ::> ucPerformSleeveGastrectomy; }
113
129
 
114
130
  // ── Scenario paths, each with its own activity/action flow ──
115
- action scNominalSleeveProcedure : MemoScenario {
116
- attribute :>> id = "LSG-SC-001"; attribute :>> name = "NominalSleeveGastrectomy";
117
- attribute :>> scenarioKind = ScenarioKind::operative;
118
- attribute :>> variantKind = ScenarioVariantKind::nominal;
119
- attribute :>> operationalCondition = OperationalConditionKind::normal;
120
- attribute :>> pathSummary = "Time-out, access, mobilisation, sleeve creation, staple-line assessment, closure, and handover complete without rework.";
121
- ref :>> parentWorkflow = wfSleeveGastrectomy;
122
- ref :>> parentUseCase = ucPerformSleeveGastrectomy;
123
- ref :>> activities = oaCompleteSleeveProcedure;
131
+ #refinement dependency wfSleeveGastrectomy::scNominalSleeveProcedure to ucPerformSleeveGastrectomy;
132
+ #refinement dependency wfSleeveGastrectomy::scStapleLineBleeding to ucPerformSleeveGastrectomy;
133
+
134
+ connection : RealizesUseCase connect realizingWorkflow ::> wfSleeveGastrectomy to realizedUseCase ::> ucPerformSleeveGastrectomy;
135
+
124
136
 
125
- action oaCompleteSleeveProcedure : OperationalActivity {
126
- attribute :>> name = "CompleteNominalSleeveProcedure";
127
- action prepare; action createSleeve; action assess; action handover;
128
- first start then prepare; first prepare then createSleeve; first createSleeve then assess; first assess then handover; first handover then done;
129
- }
130
- }
131
- action scStapleLineBleeding : MemoScenario {
132
- attribute :>> id = "LSG-SC-002"; attribute :>> name = "StapleLineBleedingRecovery";
133
- attribute :>> scenarioKind = ScenarioKind::operative;
134
- attribute :>> variantKind = ScenarioVariantKind::recovery;
135
- attribute :>> operationalCondition = OperationalConditionKind::degraded;
136
- attribute :>> variationPoint = "bleeding observed during staple-line assessment";
137
- attribute :>> pathSummary = "Recognize bleeding, apply the selected control, reassess the staple line, and escalate if the condition remains unresolved.";
138
- ref :>> baseScenario = scNominalSleeveProcedure;
139
- ref :>> parentWorkflow = wfSleeveGastrectomy;
140
- ref :>> parentUseCase = ucPerformSleeveGastrectomy;
141
- ref :>> activities = oaControlStapleLineBleeding;
142
137
 
143
- action oaControlStapleLineBleeding : OperationalActivity {
144
- attribute :>> name = "ControlStapleLineBleeding";
145
- action recognizeBleeding; action controlBleeding; action reassessStapleLine; action escalateIfNeeded;
146
- first start then recognizeBleeding; first recognizeBleeding then controlBleeding; first controlBleeding then reassessStapleLine; first reassessStapleLine then escalateIfNeeded; first escalateIfNeeded then done;
147
- }
148
- }
149
- #refinement dependency scNominalSleeveProcedure to ucPerformSleeveGastrectomy;
150
- #refinement dependency scStapleLineBleeding to ucPerformSleeveGastrectomy;
151
138
  }
@@ -6,7 +6,6 @@ package memo_examples_surgical_closure_workflow_viewpoints_unassigned_views_surg
6
6
  view surgicalClosureWorkflowOverview : MemoDiagramView {
7
7
  expose memo_examples_surgical_closure_workflow::*;
8
8
  attribute depth = 2;
9
- attribute :>> title = "Laparoscopic Sleeve Gastrectomy Workflow";
10
9
  attribute :>> viewKind = DiagramViewKind::actionflow;
11
10
  attribute :>> diagramType = "ofd";
12
11
  }
@@ -0,0 +1,3 @@
1
+ name: surgical-robot
2
+ entrypoint: model/catalog/project.sysml
3
+ include: [model]
@@ -14,8 +14,10 @@ package memo_examples_surgical_robot_project {
14
14
  private import memo_examples_surgical_robot_viewpoints_unassigned::*;
15
15
  private import memo_examples_surgical_robot_viewpoints_unassigned_views_surgical_robot_overview::*;
16
16
 
17
+ private import memo_core_common::*;
18
+ private import memo_core_common::MemoIdentity;
17
19
  part projectBinding : ProjectMethodBinding {
18
- attribute :>> id = "PMB-SURGICAL-ROBOT-001";
20
+ @MemoIdentity { :>> providedId = "PMB-SURGICAL-ROBOT-001"; }
19
21
  attribute :>> name = "SurgicalRobotProjectMethodBinding";
20
22
  attribute :>> projectName = "Surgical Robot";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -10,13 +10,15 @@ package memo_examples_surgical_robot {
10
10
  private import memo_architecture_implementation_hardware_structure::*;
11
11
  private import memo_architecture_implementation_ui::*;
12
12
 
13
+ private import memo_core_common::*;
14
+ private import memo_core_common::MemoIdentity;
13
15
  // Control channels: primary + diverse monitor, with declared independence.
14
16
  part chMotionPrimary : LogicalComponent {
15
- attribute :>> id = "SR-LC-001"; attribute :>> name = "MotionControlChannel";
17
+ @MemoIdentity { :>> providedId = "SR-LC-001"; } attribute :>> name = "MotionControlChannel";
16
18
  attribute :>> channelRole = ChannelRoleKind::primary;
17
19
  }
18
20
  part chMotionMonitor : LogicalComponent {
19
- attribute :>> id = "SR-LC-002"; attribute :>> name = "MotionMonitorChannel";
21
+ @MemoIdentity { :>> providedId = "SR-LC-002"; } attribute :>> name = "MotionMonitorChannel";
20
22
  attribute :>> channelRole = ChannelRoleKind::monitor;
21
23
  attribute :>> diversityBasis = "independent encoder set and diverse processor family";
22
24
  }
@@ -27,22 +29,22 @@ package memo_examples_surgical_robot {
27
29
 
28
30
  // Interlock: instrument exchange blocked while arm is in motion.
29
31
  part chExchangeInterlock : LogicalComponent {
30
- attribute :>> id = "SR-LC-003"; attribute :>> name = "InstrumentExchangeInterlock";
32
+ @MemoIdentity { :>> providedId = "SR-LC-003"; } attribute :>> name = "InstrumentExchangeInterlock";
31
33
  attribute :>> channelRole = ChannelRoleKind::interlock;
32
34
  }
33
35
 
34
36
  // Mechanical-force flow from actuator to instrument tip.
35
37
  part exTipForce : LogicalExchange {
36
- attribute :>> id = "SR-EX-001"; attribute :>> name = "TipForceTransmission";
38
+ @MemoIdentity { :>> providedId = "SR-EX-001"; } attribute :>> name = "TipForceTransmission";
37
39
  attribute :>> contentKind = FlowContentKind::mechanicalForce;
38
40
  attribute :>> direction = DirectionKind::output;
39
41
  }
40
42
  part actJointDrive : Actuator {
41
- attribute :>> id = "SR-HW-001"; attribute :>> name = "JointDriveActuator";
43
+ @MemoIdentity { :>> providedId = "SR-HW-001"; } attribute :>> name = "JointDriveActuator";
42
44
  attribute :>> actuationKind = "brushless DC servo with harmonic drive";
43
45
  }
44
46
  part instrShaft : MechanicalPart {
45
- attribute :>> id = "SR-HW-002"; attribute :>> name = "InstrumentShaft";
47
+ @MemoIdentity { :>> providedId = "SR-HW-002"; } attribute :>> name = "InstrumentShaft";
46
48
  attribute :>> mechanicalFunction = "transmits actuation to end effector";
47
49
  attribute :>> patientContact = true;
48
50
  attribute :>> contactNature = "internal tissue, direct";
@@ -53,7 +55,7 @@ package memo_examples_surgical_robot {
53
55
  // surgeon holds, so it is an OperatorInterfaceElement (a PhysicalComponent)
54
56
  // rather than a UIElement — UIElement is software.
55
57
  part elHapticGrip : OperatorInterfaceElement {
56
- attribute :>> id = "SR-UI-001"; attribute :>> name = "HapticMasterGrip";
58
+ @MemoIdentity { :>> providedId = "SR-UI-001"; } attribute :>> name = "HapticMasterGrip";
57
59
  attribute :>> formKind = OperatorInterfaceFormKind::hapticIndicator;
58
60
  attribute :>> guardedAgainstInadvertentActuation = true;
59
61
  }
@@ -6,7 +6,6 @@ package memo_examples_surgical_robot_viewpoints_unassigned_views_surgical_robot_
6
6
  view surgicalRobotOverview : MemoDiagramView {
7
7
  expose memo_examples_surgical_robot::*;
8
8
  attribute depth = 2;
9
- attribute :>> title = "Surgical Robot Overview";
10
9
  attribute :>> viewKind = DiagramViewKind::interconnection;
11
10
  attribute :>> diagramType = "ibd";
12
11
  }
@@ -7,5 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: sysml-diagram-samples
10
+ entrypoint: model/catalog/project.sysml
11
+ include: [model]
10
12
  version: 0.1.0
11
13
  description: "MEMO Architect diagram rendering samples \u2014 one openable view per standard SysML v2 diagram type. Open with: memo-architect --example standard-sysml-diagrams"
@@ -23,8 +23,10 @@ package memo_examples_sysml_diagram_samples_project {
23
23
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_view::*;
24
24
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case_view::*;
25
25
 
26
+ private import memo_core_common::*;
27
+ private import memo_core_common::MemoIdentity;
26
28
  part projectBinding : ProjectMethodBinding {
27
- attribute :>> id = "PMB-DIAGRAM-SAMPLES-001";
29
+ @MemoIdentity { :>> providedId = "PMB-DIAGRAM-SAMPLES-001"; }
28
30
  attribute :>> name = "SysmlDiagramSamplesProjectMethodBinding";
29
31
  attribute :>> projectName = "Sysml Diagram Samples";
30
32
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -10,6 +10,8 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_f
10
10
  private import memo_viewpoints_functional_functional_viewpoint::*;
11
11
  private import memo_core_enumerations::*;
12
12
 
13
+ private import memo_core_common::*;
14
+ private import memo_core_common::MemoIdentity;
13
15
  item def DataPacket specializes InterfaceItem {
14
16
  attribute :>> itemKind = InterfaceItemKind::data;
15
17
  }
@@ -62,7 +64,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_f
62
64
  allocate sampleActionFlow.record to laneB;
63
65
 
64
66
  // MemoLink sample — the universal relation, exercised where nothing else
65
- // reaches. laneB is a `part` (LogicalComponent :> ArchitectureElement) and
67
+ // reaches. laneB is a `part` (LogicalComponent :> MemoPart) and
66
68
  // `sampleActionFlow.process` is an action usage (:> MemoAction). Those
67
69
  // foundations share no supertype, so every typed relation in the ontology
68
70
  // is unavailable here: legalRelationshipTypes returns MemoLink and nothing
@@ -71,23 +73,22 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_f
71
73
  // The target is the action *usage*, not the `ProcessInput` definition.
72
74
  // Binding a value to a definition is not portable — SysIDE rejects it,
73
75
  // because a value must be a feature and a definition is not.
74
- connection linkLaneBProcessesInput : MemoLink
75
- connect linkSource ::> laneB to linkTarget ::> sampleActionFlow.process {
76
- @Rationale {
77
- :>> text =
78
- "Lane B is the swimlane that carries the ProcessInput behaviour. The association crosses the part/action metaclass boundary, so no typed relation can express it.";
79
- }
80
- }
76
+ doc /* Lane B is the swimlane that carries the ProcessInput behaviour. The
77
+ * association crosses the part/action metaclass boundary, so no typed
78
+ * relation can express it — which is precisely what a bare `dependency`
79
+ * means. It was a `MemoLink`, the ontology's own weakest relation, and
80
+ * that is a duplicate of `dependency` rather than something more.
81
+ */
82
+ dependency linkLaneBProcessesInput from laneB to sampleActionFlow::process;
81
83
 
82
84
  view sampleActionFlowView : MemoDiagramView {
83
85
  expose sampleActionFlow::**;
84
86
  expose laneA;
85
87
  expose laneB;
86
88
  attribute depth = 2;
87
- attribute :>> title = "Sample · Action Flow";
88
- attribute :>> shortDescription = "Dummy actions, typed item flows, successions, and a composite action for renderer development.";
89
+ @MemoIdentity { :>> shortDescription = "Dummy actions, typed item flows, successions, and a composite action for renderer development."; }
89
90
  attribute :>> viewKind = DiagramViewKind::actionflow;
90
91
  attribute :>> diagramType = "afd";
91
- part :>> viewpointDefinition = functionalViewpoint;
92
+ ref :>> viewpointDefinition = functionalViewpoint;
92
93
  }
93
94
  }
@@ -12,6 +12,8 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_
12
12
  private import memo_viewpoints_context_context_viewpoint::*;
13
13
  private import memo_core_enumerations::*;
14
14
 
15
+ private import memo_core_common::*;
16
+ private import memo_core_common::MemoIdentity;
15
17
  // The operational system of interest is intentionally represented as one
16
18
  // black box. Context diagrams show its environment and interfaces, not its
17
19
  // internal decomposition.
@@ -29,9 +31,9 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_
29
31
  }
30
32
  part homeContext : UseContext { attribute :>> name = "Home Care Environment"; }
31
33
 
32
- connection : InteractsWith connect contextParticipant ::> clinician to target ::> infusionSystem;
33
- connection : InteractsWith connect contextParticipant ::> patient to target ::> infusionSystem;
34
- connection : InteractsWith connect contextParticipant ::> biomedTech to target ::> infusionSystem;
34
+ connection connect clinician to infusionSystem;
35
+ connection connect patient to infusionSystem;
36
+ connection connect biomedTech to infusionSystem;
35
37
  flow from infusionSystem to pharmacySystem;
36
38
  connection : AppliesInContext connect useContext ::> homeContext to subjectElement ::> infusionSystem;
37
39
 
@@ -43,13 +45,12 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_
43
45
  expose pharmacySystem;
44
46
  expose homeContext;
45
47
  attribute depth = 1;
46
- attribute :>> title = "Sample · System Context";
47
- attribute :>> shortDescription = "Operational system context: one black-box system boundary, its external people, peer systems, operating environment, and named boundary-crossing interactions.";
48
+ @MemoIdentity { :>> shortDescription = "Operational system context: one black-box system boundary, its external people, peer systems, operating environment, and named boundary-crossing interactions."; }
48
49
  attribute :>> viewKind = DiagramViewKind::general;
49
50
  attribute :>> diagramType = "context";
50
- part :>> viewpointDefinition = contextViewpoint;
51
+ ref :>> viewpointDefinition = contextViewpoint;
51
52
  part :>> selectionQuery {
52
- attribute :>> includeRelationshipKinds = ("InteractsWith", "flow", "AppliesInContext");
53
+ attribute :>> includeRelationshipKinds = ("connect", "flow", "AppliesInContext");
53
54
  }
54
55
  }
55
56
  }
@@ -9,6 +9,8 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_function
9
9
  private import memo_viewpoints_functional_functional_viewpoint::*;
10
10
  private import memo_core_enumerations::*;
11
11
 
12
+ private import memo_core_common::*;
13
+ private import memo_core_common::MemoIdentity;
12
14
  // ─────────────────────────────────────────────────────────────────────────
13
15
  // Sample · Functional flow — component behaviour of dose delivery
14
16
  //
@@ -134,10 +136,9 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_function
134
136
  expose fxDeliveryFlow::**;
135
137
  expose fxPumpSystem::**;
136
138
  attribute depth = 2;
137
- attribute :>> title = "Sample · Dose Delivery (Functional Flow)";
138
- 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).";
139
+ @MemoIdentity { :>> 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)."; }
139
140
  attribute :>> viewKind = DiagramViewKind::actionflow;
140
141
  attribute :>> diagramType = "ffd";
141
- part :>> viewpointDefinition = functionalViewpoint;
142
+ ref :>> viewpointDefinition = functionalViewpoint;
142
143
  }
143
144
  }
@@ -11,6 +11,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
11
11
  private import memo_viewpoints_logical_logical_viewpoint::*;
12
12
  private import memo_core_enumerations::*;
13
13
 
14
+ private import memo_core_common::MemoIdentity;
14
15
  // Ports are owned by the part whose boundary they are, which is what lets
15
16
  // a delegation be written at all: SysML v2 checks a flow's source for
16
17
  // `out`-ness relative to the owner, so a boundary port only reads as a
@@ -75,11 +76,10 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
75
76
  expose waterSupply::**;
76
77
  expose cup::**;
77
78
  attribute depth = 2;
78
- attribute :>> title = "Coffee Machine · Thermal & Fluid IBD";
79
- attribute :>> shortDescription = "Balanced internal architecture with readable boundary ports, nested service diagnostics, and external water and beverage interfaces.";
79
+ @MemoIdentity { :>> shortDescription = "Balanced internal architecture with readable boundary ports, nested service diagnostics, and external water and beverage interfaces."; }
80
80
  attribute :>> viewKind = DiagramViewKind::interconnection;
81
81
  attribute :>> diagramType = "ibd";
82
- part :>> viewpointDefinition = logicalArchitectureViewpoint;
82
+ ref :>> viewpointDefinition = logicalArchitectureViewpoint;
83
83
  part :>> selectionQuery {
84
84
  attribute :>> includeRelationshipKinds = ("Composes", "flow", "bind");
85
85
  }