@memoarchitect/ontology 0.8.24 → 0.11.0

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 (203) hide show
  1. package/README.md +1 -1
  2. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  3. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  4. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +9 -7
  5. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  6. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +8 -6
  7. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  8. package/examples/gpca-pump/memo.identity.yaml +2185 -0
  9. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  10. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  11. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  12. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  13. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  14. package/examples/gpca-pump/model/catalog/gpca_context.sysml +29 -24
  15. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -13
  16. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  17. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  18. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +121 -125
  19. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  20. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +390 -388
  21. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  22. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  23. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -14
  24. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -8
  25. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  26. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  27. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +6 -4
  28. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +5 -3
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +5 -3
  30. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +5 -3
  31. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +5 -3
  32. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +5 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +5 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +5 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +5 -3
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +5 -3
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +5 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +5 -3
  39. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +5 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +5 -3
  41. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +5 -3
  42. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +5 -3
  44. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -3
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +5 -3
  47. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +5 -3
  48. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +5 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +5 -3
  50. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +6 -4
  51. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -3
  52. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +5 -3
  53. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +9 -7
  54. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  55. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +6 -4
  56. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  57. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  58. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  59. package/examples/nested-architecture-dsm/memo.identity.yaml +181 -0
  60. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  61. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  62. package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +34 -0
  63. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +11 -6
  64. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +16 -14
  65. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  66. package/examples/nested-architecture-dsm/model/catalog/project.sysml +4 -1
  67. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  68. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +17 -16
  69. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  70. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  71. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  72. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +10 -8
  73. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  74. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +54 -51
  75. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  76. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  77. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  78. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -8
  79. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -5
  80. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -1
  81. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -1
  82. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -1
  83. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +11 -9
  84. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +3 -1
  85. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -1
  86. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +3 -1
  87. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +11 -7
  88. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  89. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  90. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +27 -22
  91. package/examples/ui-screen-regions/memo.identity.yaml +205 -0
  92. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  93. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  94. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  95. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  96. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  97. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  98. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  99. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  100. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +26 -24
  101. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  102. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  103. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  104. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  105. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  106. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +5 -3
  107. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +5 -3
  108. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +5 -3
  109. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +3 -1
  110. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +3 -1
  111. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +3 -1
  112. package/extensions/aadl/memo.package.yaml +1 -1
  113. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  114. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  115. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  116. package/extensions/cloud/memo.package.yaml +1 -1
  117. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  118. package/extensions/container/memo.package.yaml +1 -1
  119. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  120. package/extensions/messaging/memo.package.yaml +1 -1
  121. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  122. package/extensions/ros/memo.package.yaml +1 -1
  123. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  124. package/extensions/template/src/extension.sysml +3 -1
  125. package/methodologies/default/memo.package.yaml +1 -1
  126. package/methodologies/gpca/memo.package.yaml +1 -1
  127. package/ontology/memo.package.yaml +1 -1
  128. package/package.json +2 -2
  129. package/profile/memo.package.yaml +1 -1
  130. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  131. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  132. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  133. package/src/architecture/implementation/ui/memo_ui.sysml +0 -23
  134. package/src/architecture/logical/interfaces/memo_interfaces.sysml +3 -1
  135. package/src/architecture/operational/context/use_context/memo_use_context.sysml +3 -11
  136. package/src/architecture/operational/scenarios/memo_scenarios.sysml +1 -12
  137. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -11
  138. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -20
  139. package/src/architecture/realization/deployment/memo_deployment.sysml +16 -9
  140. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  141. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  142. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  143. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  144. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  145. package/src/artifacts/standards/iec_60812.sysml +21 -22
  146. package/src/artifacts/standards/iec_62304.sysml +150 -169
  147. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  148. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  149. package/src/artifacts/standards/iso_13485.sysml +80 -89
  150. package/src/artifacts/standards/iso_14971.sysml +66 -73
  151. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  152. package/src/artifacts/templates/dhf/iec-60601/hrs.md +6 -6
  153. package/src/artifacts/templates/dhf/iec-62304/srs.md +10 -10
  154. package/src/artifacts/templates/dhf/system/syrs.md +6 -6
  155. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +0 -1
  156. package/src/assurance/human_factors/memo_human_factors.sysml +0 -1
  157. package/src/assurance/requirements/memo_requirements.sysml +20 -16
  158. package/src/assurance/requirements/needs/memo_needs.sysml +33 -5
  159. package/src/assurance/safety_risk/memo_risk.sysml +20 -0
  160. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  161. package/src/core/common/memo_common.sysml +50 -50
  162. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  163. package/src/core/relationships/memo_relationships.sysml +22 -49
  164. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  165. package/src/methodology/core/memo_core.sysml +0 -10
  166. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  167. package/src/rules/closure/closure_rules.sysml +58 -22
  168. package/src/rules/crosslayer/cross_layer_rules.sysml +5 -3
  169. package/src/rules/ontology/ontology_invariants.sysml +119 -35
  170. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  171. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -28
  172. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  173. package/src/viewpoints/context/context_viewpoint.sysml +5 -3
  174. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +5 -3
  175. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  176. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -16
  177. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  178. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +5 -3
  179. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +5 -3
  180. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -2
  181. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +5 -3
  182. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  183. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +5 -3
  184. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -2
  185. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +5 -3
  186. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +5 -3
  187. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  188. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -2
  189. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +5 -3
  190. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -2
  191. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +5 -3
  192. package/src/viewpoints/software/software_viewpoint.sysml +4 -2
  193. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +5 -3
  194. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -2
  195. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  196. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -2
  197. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  198. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +5 -3
  199. package/templates/connected-device/model/catalog/project.sysml +3 -1
  200. package/templates/default/model/catalog/project.sysml +3 -1
  201. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  202. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  203. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -10,9 +10,11 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
10
10
  private import memo_core_relationships::*;
11
11
  private import memo_assurance_requirements::*;
12
12
 
13
+ private import memo_core_common::*;
14
+ private import memo_core_common::MemoIdentity;
13
15
  requirement reqDoseAccuracy : Requirement {
14
- attribute :>> id = "NDS-REQ-001"; attribute :>> name = "DoseAccuracy";
15
- attribute :>> requirementKind = RequirementKind::system;
16
+ @MemoIdentity { :>> providedId = "NDS-REQ-001"; } attribute :>> name = "DoseAccuracy";
17
+ attribute :>> requirementType = RequirementTypeKind::system;
16
18
  attribute :>> statement = "The pump shall deliver the prescribed volume within ±5% over any 60-minute window.";
17
19
  attribute :>> notation = RequirementNotationKind::sophist;
18
20
  attribute :>> obligation = ObligationKind::shall;
@@ -20,8 +22,8 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
20
22
  attribute :>> concernKind = ConcernKind::clinical;
21
23
  }
22
24
  requirement reqOcclusionDetection : Requirement {
23
- attribute :>> id = "NDS-REQ-002"; attribute :>> name = "OcclusionDetection";
24
- attribute :>> requirementKind = RequirementKind::system;
25
+ @MemoIdentity { :>> providedId = "NDS-REQ-002"; } attribute :>> name = "OcclusionDetection";
26
+ attribute :>> requirementType = RequirementTypeKind::system;
25
27
  attribute :>> statement = "When line pressure exceeds the occlusion threshold, the pump shall stop delivery within 2 seconds.";
26
28
  attribute :>> notation = RequirementNotationKind::ears;
27
29
  attribute :>> earsPattern = EarsPatternKind::eventDriven;
@@ -31,8 +33,8 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
31
33
  attribute :>> concernKind = ConcernKind::safety;
32
34
  }
33
35
  requirement reqAirInLine : Requirement {
34
- attribute :>> id = "NDS-REQ-003"; attribute :>> name = "AirInLineProtection";
35
- attribute :>> requirementKind = RequirementKind::system;
36
+ @MemoIdentity { :>> providedId = "NDS-REQ-003"; } attribute :>> name = "AirInLineProtection";
37
+ attribute :>> requirementType = RequirementTypeKind::system;
36
38
  attribute :>> statement = "When an air bolus above 0.1 mL is detected, the pump shall stop delivery and raise a high-priority alarm.";
37
39
  attribute :>> notation = RequirementNotationKind::ears;
38
40
  attribute :>> earsPattern = EarsPatternKind::eventDriven;
@@ -42,8 +44,8 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
42
44
  attribute :>> concernKind = ConcernKind::safety;
43
45
  }
44
46
  requirement reqAlarmAnnunciation : Requirement {
45
- attribute :>> id = "NDS-REQ-004"; attribute :>> name = "AlarmAnnunciation";
46
- attribute :>> requirementKind = RequirementKind::software;
47
+ @MemoIdentity { :>> providedId = "NDS-REQ-004"; } attribute :>> name = "AlarmAnnunciation";
48
+ attribute :>> requirementType = RequirementTypeKind::software;
47
49
  attribute :>> statement = "While any alarm condition is active, the pump shall present its IEC 60601-1-8 signal until the condition clears or is acknowledged.";
48
50
  attribute :>> notation = RequirementNotationKind::ears;
49
51
  attribute :>> earsPattern = EarsPatternKind::stateDriven;
@@ -54,8 +56,8 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
54
56
  attribute :>> safetyClass = SafetyClassKind::C;
55
57
  }
56
58
  requirement reqBatteryEndurance : Requirement {
57
- attribute :>> id = "NDS-REQ-005"; attribute :>> name = "BatteryEndurance";
58
- attribute :>> requirementKind = RequirementKind::system;
59
+ @MemoIdentity { :>> providedId = "NDS-REQ-005"; } attribute :>> name = "BatteryEndurance";
60
+ attribute :>> requirementType = RequirementTypeKind::system;
59
61
  attribute :>> statement = "On loss of mains power, the pump shall continue delivery for at least 4 hours at 25 mL/h.";
60
62
  attribute :>> notation = RequirementNotationKind::ears;
61
63
  attribute :>> earsPattern = EarsPatternKind::eventDriven;
@@ -65,8 +67,8 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
65
67
  attribute :>> concernKind = ConcernKind::reliability;
66
68
  }
67
69
  requirement reqPrescriptionConfirmation : Requirement {
68
- attribute :>> id = "NDS-REQ-006"; attribute :>> name = "PrescriptionConfirmation";
69
- attribute :>> requirementKind = RequirementKind::software;
70
+ @MemoIdentity { :>> providedId = "NDS-REQ-006"; } attribute :>> name = "PrescriptionConfirmation";
71
+ attribute :>> requirementType = RequirementTypeKind::software;
70
72
  attribute :>> statement = "When the clinician changes the infusion rate, the pump shall require explicit confirmation before applying it.";
71
73
  attribute :>> notation = RequirementNotationKind::ears;
72
74
  attribute :>> earsPattern = EarsPatternKind::eventDriven;
@@ -78,8 +80,8 @@ package memo_examples_nested_architecture_dsm_assurance_requirements {
78
80
  }
79
81
  // Untraced on purpose — the gap the traceability view is meant to find.
80
82
  requirement reqStatusVisibility : Requirement {
81
- attribute :>> id = "NDS-REQ-007"; attribute :>> name = "StatusVisibility";
82
- attribute :>> requirementKind = RequirementKind::system;
83
+ @MemoIdentity { :>> providedId = "NDS-REQ-007"; } attribute :>> name = "StatusVisibility";
84
+ attribute :>> requirementType = RequirementTypeKind::system;
83
85
  attribute :>> statement = "The pump shall display the active rate and volume delivered legibly at 1 m.";
84
86
  attribute :>> notation = RequirementNotationKind::sophist;
85
87
  attribute :>> obligation = ObligationKind::shall;
@@ -10,9 +10,11 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
10
10
  private import memo_examples_nested_architecture_dsm_architecture_functional_functions::*;
11
11
  private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
12
12
 
13
+ private import memo_core_common::*;
14
+ private import memo_core_common::MemoIdentity;
13
15
  verification vcDoseAccuracy : VerificationCase {
14
- attribute :>> id = "NDS-VER-001"; attribute :>> name = "VerifyDoseAccuracy";
15
- attribute :>> methodKind = VerificationMethodKind::test;
16
+ @MemoIdentity { :>> providedId = "NDS-VER-001"; } attribute :>> name = "VerifyDoseAccuracy";
17
+ attribute :>> methodKind = MemoVerificationMethodKind::test;
16
18
  attribute :>> acceptanceCriteria = "Gravimetric delivery over 60 minutes is within ±5% of the prescribed volume at 1, 25 and 999 mL/h.";
17
19
  attribute :>> status = ElementStatusKind::approved;
18
20
 
@@ -20,8 +22,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
20
22
  subject verified : Base::Anything[*] = (fnDeliverTherapy, fnDeliverTherapy.fnMeterFluid, fnDeliverTherapy.fnMeterFluid.fnDriveActuator, fnDeliverTherapy.fnMeterFluid.fnMeasureDelivered, fnDeliverTherapy.fnControlDose, fnDeliverTherapy.fnControlDose.fnComputeRate);
21
23
  }
22
24
  verification vcOcclusionResponse : VerificationCase {
23
- attribute :>> id = "NDS-VER-002"; attribute :>> name = "VerifyOcclusionResponse";
24
- attribute :>> methodKind = VerificationMethodKind::test;
25
+ @MemoIdentity { :>> providedId = "NDS-VER-002"; } attribute :>> name = "VerifyOcclusionResponse";
26
+ attribute :>> methodKind = MemoVerificationMethodKind::test;
25
27
  attribute :>> acceptanceCriteria = "Delivery stops within 2 s of the occlusion threshold being crossed, at every supported rate.";
26
28
  attribute :>> status = ElementStatusKind::approved;
27
29
 
@@ -29,8 +31,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
29
31
  subject verified : Base::Anything[*] = (fnEnsureSafety, fnEnsureSafety.fnDetectOcclusion, fnEnsureSafety.fnEnforceDoseLimits);
30
32
  }
31
33
  verification vcAirInLineResponse : VerificationCase {
32
- attribute :>> id = "NDS-VER-003"; attribute :>> name = "VerifyAirInLineResponse";
33
- attribute :>> methodKind = VerificationMethodKind::test;
34
+ @MemoIdentity { :>> providedId = "NDS-VER-003"; } attribute :>> name = "VerifyAirInLineResponse";
35
+ attribute :>> methodKind = MemoVerificationMethodKind::test;
34
36
  attribute :>> acceptanceCriteria = "A 0.1 mL air bolus stops delivery and raises a high-priority alarm.";
35
37
  attribute :>> status = ElementStatusKind::approved;
36
38
 
@@ -38,8 +40,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
38
40
  subject verified : Base::Anything[*] = (fnEnsureSafety.fnDetectAirInLine);
39
41
  }
40
42
  verification vcAlarmSignals : VerificationCase {
41
- attribute :>> id = "NDS-VER-004"; attribute :>> name = "VerifyAlarmSignals";
42
- attribute :>> methodKind = VerificationMethodKind::test;
43
+ @MemoIdentity { :>> providedId = "NDS-VER-004"; } attribute :>> name = "VerifyAlarmSignals";
44
+ attribute :>> methodKind = MemoVerificationMethodKind::test;
43
45
  attribute :>> acceptanceCriteria = "Alarm signals conform to IEC 60601-1-8 for every priority, and persist until cleared or acknowledged.";
44
46
  attribute :>> status = ElementStatusKind::approved;
45
47
 
@@ -47,8 +49,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
47
49
  subject verified : Base::Anything[*] = (fnInformUser.fnAnnunciateAlarm);
48
50
  }
49
51
  verification vcBatteryEndurance : VerificationCase {
50
- attribute :>> id = "NDS-VER-005"; attribute :>> name = "VerifyBatteryEndurance";
51
- attribute :>> methodKind = VerificationMethodKind::test;
52
+ @MemoIdentity { :>> providedId = "NDS-VER-005"; } attribute :>> name = "VerifyBatteryEndurance";
53
+ attribute :>> methodKind = MemoVerificationMethodKind::test;
52
54
  attribute :>> acceptanceCriteria = "Delivery continues for at least 4 hours at 25 mL/h from a fully charged battery after mains loss.";
53
55
  attribute :>> status = ElementStatusKind::approved;
54
56
 
@@ -56,8 +58,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
56
58
  subject verified : Base::Anything[*] = (fnManagePower, fnManagePower.fnMonitorBattery);
57
59
  }
58
60
  verification vcConfirmationFlow : VerificationCase {
59
- attribute :>> id = "NDS-VER-006"; attribute :>> name = "VerifyConfirmationFlow";
60
- attribute :>> methodKind = VerificationMethodKind::demonstration;
61
+ @MemoIdentity { :>> providedId = "NDS-VER-006"; } attribute :>> name = "VerifyConfirmationFlow";
62
+ attribute :>> methodKind = MemoVerificationMethodKind::demonstration;
61
63
  attribute :>> acceptanceCriteria = "No rate change reaches the controller without an explicit confirmation step.";
62
64
  attribute :>> status = ElementStatusKind::approved;
63
65
 
@@ -65,8 +67,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
65
67
  subject verified : Base::Anything[*] = (fnDeliverTherapy.fnControlDose.fnValidatePrescription, fnInformUser.fnAcceptInput);
66
68
  }
67
69
  verification vcStatusLegibility : VerificationCase {
68
- attribute :>> id = "NDS-VER-007"; attribute :>> name = "VerifyStatusLegibility";
69
- attribute :>> methodKind = VerificationMethodKind::inspection;
70
+ @MemoIdentity { :>> providedId = "NDS-VER-007"; } attribute :>> name = "VerifyStatusLegibility";
71
+ attribute :>> methodKind = MemoVerificationMethodKind::inspection;
70
72
  attribute :>> acceptanceCriteria = "Rate and volume delivered are readable at 1 m under 100–1000 lux.";
71
73
  attribute :>> status = ElementStatusKind::approved;
72
74
 
@@ -74,8 +76,8 @@ package memo_examples_nested_architecture_dsm_assurance_verification_validation
74
76
  subject verified : Base::Anything[*] = (fnInformUser, fnInformUser.fnRenderStatus);
75
77
  }
76
78
  verification vcPowerSourceSwitch : VerificationCase {
77
- attribute :>> id = "NDS-VER-008"; attribute :>> name = "VerifyPowerSourceSwitch";
78
- attribute :>> methodKind = VerificationMethodKind::test;
79
+ @MemoIdentity { :>> providedId = "NDS-VER-008"; } attribute :>> name = "VerifyPowerSourceSwitch";
80
+ attribute :>> methodKind = MemoVerificationMethodKind::test;
79
81
  attribute :>> acceptanceCriteria = "Rail brownout switches source without interrupting delivery.";
80
82
  attribute :>> status = ElementStatusKind::approved;
81
83
 
@@ -11,6 +11,7 @@ package memo_examples_nested_architecture_dsm_project {
11
11
 
12
12
  // The project's own content, imported so the catalog is one reachable
13
13
  // closure from a single entrypoint.
14
+ private import memo_examples_nested_architecture_dsm_architecture_operational_context::*;
14
15
  private import memo_examples_nested_architecture_dsm_architecture_logical_structure::*;
15
16
  private import memo_examples_nested_architecture_dsm_architecture_functional_functions::*;
16
17
  private import memo_examples_nested_architecture_dsm_assurance_requirements::*;
@@ -18,8 +19,10 @@ package memo_examples_nested_architecture_dsm_project {
18
19
  private import memo_examples_nested_architecture_dsm_assurance_verification_validation::*;
19
20
  private import memo_examples_nested_architecture_dsm_traces::*;
20
21
 
22
+ private import memo_core_common::*;
23
+ private import memo_core_common::MemoIdentity;
21
24
  part projectBinding : ProjectMethodBinding {
22
- attribute :>> id = "PMB-NESTED-DSM-001";
25
+ @MemoIdentity { :>> providedId = "PMB-NESTED-DSM-001"; }
23
26
  attribute :>> name = "NestedArchitectureDsmProjectMethodBinding";
24
27
  attribute :>> projectName = "Nested Architecture DSM";
25
28
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -14,8 +14,10 @@ package memo_examples_reusable_instrument_project {
14
14
  private import memo_examples_reusable_instrument_viewpoints_unassigned::*;
15
15
  private import memo_examples_reusable_instrument_viewpoints_unassigned_views_reusable_instrument_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-REUSABLE-INSTRUMENT-001";
20
+ @MemoIdentity { :>> providedId = "PMB-REUSABLE-INSTRUMENT-001"; }
19
21
  attribute :>> name = "ReusableInstrumentProjectMethodBinding";
20
22
  attribute :>> projectName = "Reusable Instrument";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -12,15 +12,17 @@ package memo_examples_reusable_instrument {
12
12
  private import memo_architecture_operational_workflows::*;
13
13
  private import memo_architecture_operational_scenarios::*;
14
14
 
15
+ private import memo_core_common::*;
16
+ private import memo_core_common::MemoIdentity;
15
17
  part sterileProcessingTech : User {
16
18
  attribute :>> actorKind = ActorKind::technician;
17
- attribute :>> id = "RI-USR-001"; attribute :>> name = "SterileProcessingTechnician";
19
+ @MemoIdentity { :>> providedId = "RI-USR-001"; } attribute :>> name = "SterileProcessingTechnician";
18
20
  attribute :>> serviceScope = "central sterile services department";
19
21
  }
20
22
 
21
23
  use case ucSterilize : UseCase {
22
24
  attribute :>> useCaseKind = UseCaseKind::clinical;
23
- attribute :>> id = "RI-UC-001"; attribute :>> name = "SterilizeReusableInstrument";
25
+ @MemoIdentity { :>> providedId = "RI-UC-001"; } attribute :>> name = "SterilizeReusableInstrument";
24
26
  attribute :>> goalStatement = "Return a used instrument to sterile, functional condition for the next case.";
25
27
  attribute :>> preCondition = "instrument collected from the OR; gross soil removed at point of use";
26
28
  attribute :>> successOutcome = "instrument cleaned, inspected, sterilized, and released to sterile storage";
@@ -30,36 +32,35 @@ package memo_examples_reusable_instrument {
30
32
 
31
33
  // Reprocessing workflow: exists independently of any single instrument.
32
34
  action wfReprocess : OperationalWorkflow {
33
- attribute :>> id = "RI-WF-001"; attribute :>> name = "InstrumentReprocessingWorkflow";
35
+ @MemoIdentity { :>> providedId = "RI-WF-001"; } attribute :>> name = "InstrumentReprocessingWorkflow";
34
36
  attribute :>> workflowState = WorkflowStateKind::asIs;
35
37
  attribute :>> entryCondition = "used instrument received in decontamination";
36
38
  attribute :>> completionCondition = "sterile pack released to storage";
39
+ action scNominalCycle : OperativeScenario {
40
+ @MemoIdentity { :>> providedId = "RI-SC-001"; } attribute :>> name = "NominalReprocessingCycle";
41
+
42
+ perform actClean;
43
+ perform actInspect;
44
+ perform actSterilizeLoad;
45
+ first actClean then actInspect;
46
+ first actInspect then actSterilizeLoad;
47
+ }
37
48
  }
38
49
  action actClean : OperativeAction {
39
- attribute :>> id = "RI-ACT-001"; attribute :>> name = "CleanAndDisinfect";
50
+ @MemoIdentity { :>> providedId = "RI-ACT-001"; } attribute :>> name = "CleanAndDisinfect";
40
51
  attribute :>> criticality = CriticalityKind::high;
41
52
  }
42
53
  action actInspect : OperativeAction {
43
- attribute :>> id = "RI-ACT-002"; attribute :>> name = "InspectAndFunctionTest";
54
+ @MemoIdentity { :>> providedId = "RI-ACT-002"; } attribute :>> name = "InspectAndFunctionTest";
44
55
  attribute :>> criticality = CriticalityKind::high;
45
56
  }
46
57
  action actSterilizeLoad : OperativeAction {
47
- attribute :>> id = "RI-ACT-003"; attribute :>> name = "PackAndAutoclave";
58
+ @MemoIdentity { :>> providedId = "RI-ACT-003"; } attribute :>> name = "PackAndAutoclave";
48
59
  attribute :>> criticality = CriticalityKind::high;
49
60
  }
50
61
 
51
- action scNominalCycle : OperativeScenario {
52
- attribute :>> id = "RI-SC-001"; attribute :>> name = "NominalReprocessingCycle";
53
-
54
- perform actClean;
55
- perform actInspect;
56
- perform actSterilizeLoad;
57
- first actClean then actInspect;
58
- first actInspect then actSterilizeLoad;
59
- }
60
62
 
61
63
  connection : RealizesUseCase connect realizingWorkflow ::> wfReprocess to realizedUseCase ::> ucSterilize;
62
64
 
63
65
 
64
- connection : HasScenario connect owningWorkflow ::> wfReprocess to pathScenario ::> scNominalCycle;
65
66
  }
@@ -14,8 +14,10 @@ package memo_examples_ros_mobile_robot_project {
14
14
  private import memo_examples_ros_mobile_robot_viewpoints_unassigned::*;
15
15
  private import memo_examples_ros_mobile_robot_viewpoints_unassigned_views_ros_mobile_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-ROS-MOBILE-ROBOT-001";
20
+ @MemoIdentity { :>> providedId = "PMB-ROS-MOBILE-ROBOT-001"; }
19
21
  attribute :>> name = "RosMobileRobotProjectMethodBinding";
20
22
  attribute :>> projectName = "ROS Mobile Robot";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -27,6 +27,8 @@ package memo_examples_ros_mobile_robot {
27
27
  private import memo_extension_container::*;
28
28
  private import memo_extension_ros::*;
29
29
 
30
+ private import memo_core_common::*;
31
+ private import memo_core_common::MemoIdentity;
30
32
  // ── Message definitions and named topic instances ──────────────────
31
33
  // The definition is the ROS message contract. A named usage is the topic
32
34
  // deployed in this system; publisher/subscriber ports reference that same
@@ -45,31 +47,31 @@ package memo_examples_ros_mobile_robot {
45
47
  }
46
48
 
47
49
  item topicScan : LaserScan {
48
- attribute :>> id = "RMR-TP-001"; attribute :>> name = "ScanTopic";
50
+ @MemoIdentity { :>> providedId = "RMR-TP-001"; } attribute :>> name = "ScanTopic";
49
51
  }
50
52
  item topicCmdVel : VelocityCommand {
51
- attribute :>> id = "RMR-TP-002"; attribute :>> name = "CmdVelTopic";
53
+ @MemoIdentity { :>> providedId = "RMR-TP-002"; } attribute :>> name = "CmdVelTopic";
52
54
  }
53
55
  item topicEstop : EmergencyStop {
54
- attribute :>> id = "RMR-TP-003"; attribute :>> name = "EmergencyStopTopic";
56
+ @MemoIdentity { :>> providedId = "RMR-TP-003"; } attribute :>> name = "EmergencyStopTopic";
55
57
  }
56
58
 
57
59
  // ── Code ────────────────────────────────────────────────────────────
58
60
  part swPerception : SoftwareModule {
59
61
  attribute :>> moduleKind = ModuleKind::unit;
60
- attribute :>> id = "RMR-SW-001"; attribute :>> name = "PerceptionStack";
62
+ @MemoIdentity { :>> providedId = "RMR-SW-001"; } attribute :>> name = "PerceptionStack";
61
63
  attribute :>> responsibility = "Lidar driver and obstacle segmentation.";
62
64
  attribute :>> safetyClass = SafetyClassKind::B;
63
65
  }
64
66
  part swNavigation : SoftwareModule {
65
67
  attribute :>> moduleKind = ModuleKind::unit;
66
- attribute :>> id = "RMR-SW-002"; attribute :>> name = "NavigationStack";
68
+ @MemoIdentity { :>> providedId = "RMR-SW-002"; } attribute :>> name = "NavigationStack";
67
69
  attribute :>> responsibility = "Global and local planning; velocity command generation.";
68
70
  attribute :>> safetyClass = SafetyClassKind::B;
69
71
  }
70
72
  part swSafety : SoftwareModule {
71
73
  attribute :>> moduleKind = ModuleKind::unit;
72
- attribute :>> id = "RMR-SW-003"; attribute :>> name = "SafetyMonitor";
74
+ @MemoIdentity { :>> providedId = "RMR-SW-003"; } attribute :>> name = "SafetyMonitor";
73
75
  attribute :>> responsibility = "Independent watchdog: stops the base on obstacle proximity or missing heartbeat.";
74
76
  attribute :>> safetyClass = SafetyClassKind::C;
75
77
  }
@@ -82,7 +84,7 @@ package memo_examples_ros_mobile_robot {
82
84
  // is exactly what an extension type must NOT decide for the modeller.
83
85
  part nodeLidar : RosNode {
84
86
  attribute :>> runtimeKind = RuntimeKind::thread;
85
- attribute :>> id = "RMR-ND-001"; attribute :>> name = "LidarDriverNode";
87
+ @MemoIdentity { :>> providedId = "RMR-ND-001"; } attribute :>> name = "LidarDriverNode";
86
88
  attribute :>> nodeNamespace = "/robot/perception";
87
89
  attribute :>> lifecycleManaged = true;
88
90
  attribute :>> executorModel = "single-threaded executor, composed";
@@ -104,7 +106,7 @@ package memo_examples_ros_mobile_robot {
104
106
  }
105
107
  part nodeNavigation : RosNode {
106
108
  attribute :>> runtimeKind = RuntimeKind::thread;
107
- attribute :>> id = "RMR-ND-002"; attribute :>> name = "NavigationNode";
109
+ @MemoIdentity { :>> providedId = "RMR-ND-002"; } attribute :>> name = "NavigationNode";
108
110
  attribute :>> nodeNamespace = "/robot/navigation";
109
111
  attribute :>> lifecycleManaged = true;
110
112
  attribute :>> executorModel = "multi-threaded executor, composed";
@@ -157,7 +159,7 @@ package memo_examples_ros_mobile_robot {
157
159
  }
158
160
  part nodeSafetyMonitor : RosNode {
159
161
  attribute :>> runtimeKind = RuntimeKind::process;
160
- attribute :>> id = "RMR-ND-003"; attribute :>> name = "SafetyMonitorNode";
162
+ @MemoIdentity { :>> providedId = "RMR-ND-003"; } attribute :>> name = "SafetyMonitorNode";
161
163
  attribute :>> nodeNamespace = "/robot/safety";
162
164
  attribute :>> lifecycleManaged = false;
163
165
  attribute :>> executorModel = "own process, real-time priority";
@@ -238,7 +240,7 @@ package memo_examples_ros_mobile_robot {
238
240
 
239
241
  // ── Deployment: base relations, unchanged ───────────────────────────
240
242
  part imageRuntime : RosContainerImage {
241
- attribute :>> id = "RMR-DU-001"; attribute :>> name = "RobotRuntimeImage";
243
+ @MemoIdentity { :>> providedId = "RMR-DU-001"; } attribute :>> name = "RobotRuntimeImage";
242
244
  attribute :>> unitKind = "OCI container image";
243
245
  attribute :>> imageReference = "registry.example.com/robot-runtime:2.3.0";
244
246
  attribute :>> registry = "registry.example.com";
@@ -249,7 +251,7 @@ package memo_examples_ros_mobile_robot {
249
251
  attribute :>> integrityProtection = "image signature + SBOM attestation";
250
252
  }
251
253
  part imageSafety : RosContainerImage {
252
- attribute :>> id = "RMR-DU-002"; attribute :>> name = "SafetyMonitorImage";
254
+ @MemoIdentity { :>> providedId = "RMR-DU-002"; } attribute :>> name = "SafetyMonitorImage";
253
255
  attribute :>> unitKind = "OCI container image";
254
256
  attribute :>> imageReference = "registry.example.com/safety-monitor:2.3.0";
255
257
  attribute :>> registry = "registry.example.com";
@@ -259,12 +261,12 @@ package memo_examples_ros_mobile_robot {
259
261
  attribute :>> workspaceOverlay = "/opt/safety_ws";
260
262
  attribute :>> integrityProtection = "image signature + SBOM attestation";
261
263
  }
262
- connection : BuildsInto connect module ::> swPerception to deploymentUnit ::> imageRuntime;
263
- connection : BuildsInto connect module ::> swNavigation to deploymentUnit ::> imageRuntime;
264
- connection : BuildsInto connect module ::> swSafety to deploymentUnit ::> imageSafety;
264
+ allocation : BuildsInto allocate swPerception to imageRuntime;
265
+ allocation : BuildsInto allocate swNavigation to imageRuntime;
266
+ allocation : BuildsInto allocate swSafety to imageSafety;
265
267
 
266
268
  part nodeComputeUnit : ProcessingNode {
267
- attribute :>> id = "RMR-HW-001"; attribute :>> name = "OnboardComputeUnit";
269
+ @MemoIdentity { :>> providedId = "RMR-HW-001"; } attribute :>> name = "OnboardComputeUnit";
268
270
  attribute :>> nodeKind = ProcessingNodeKind::SoC;
269
271
  attribute :>> processorArchitecture = "arm64, 8 core";
270
272
  attribute :>> memoryMB = "16384";
@@ -280,7 +282,7 @@ package memo_examples_ros_mobile_robot {
280
282
  }
281
283
 
282
284
  part rosRuntime : RosContainerRuntime {
283
- attribute :>> id = "RMR-RT-001"; attribute :>> name = "OnboardRosRuntime";
285
+ @MemoIdentity { :>> providedId = "RMR-RT-001"; } attribute :>> name = "OnboardRosRuntime";
284
286
  attribute :>> environmentKind = "container runtime";
285
287
  attribute :>> osOrRtos = "Linux with PREEMPT_RT";
286
288
  attribute :>> orchestrationPlatform = "systemd-managed compose, no cluster orchestrator";
@@ -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";
@@ -51,12 +53,12 @@ package memo_examples_software_only_medical_device {
51
53
  #refinement dependency svcGrading to swGradingModule;
52
54
 
53
55
  part duContainerImage : SoftwareDeploymentUnit {
54
- attribute :>> id = "SMD-DU-001"; attribute :>> name = "ScreeningServiceImage";
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
  }
@@ -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;