@memoarchitect/ontology 0.8.24 → 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 (182) hide show
  1. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  2. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  3. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +9 -7
  4. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  5. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +8 -6
  6. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  7. package/examples/gpca-pump/memo.identity.yaml +2179 -0
  8. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  9. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  10. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  11. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  12. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  13. package/examples/gpca-pump/model/catalog/gpca_context.sysml +22 -20
  14. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -13
  15. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  16. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  17. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +121 -125
  18. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  19. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
  20. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  21. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  22. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -14
  23. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -8
  24. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  25. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  26. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +6 -4
  27. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +5 -3
  28. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +5 -3
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +5 -3
  30. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +5 -3
  31. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +5 -3
  32. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +5 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +5 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +5 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +5 -3
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +5 -3
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +5 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +5 -3
  39. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +5 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +5 -3
  41. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -3
  42. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +5 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -3
  44. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +5 -3
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +5 -3
  47. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +5 -3
  48. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +5 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +6 -4
  50. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -3
  51. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +5 -3
  52. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +9 -7
  53. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  54. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +6 -4
  55. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  56. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  57. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  58. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  59. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  60. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
  61. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
  62. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  63. package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
  64. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  65. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +17 -16
  66. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  67. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  68. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  69. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +10 -8
  70. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  71. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +51 -51
  72. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  73. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  74. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  75. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -8
  76. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -5
  77. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -1
  78. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -1
  79. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -1
  80. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +8 -6
  81. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +3 -1
  82. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -1
  83. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +3 -1
  84. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +11 -7
  85. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  86. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  87. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +27 -22
  88. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  89. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  90. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  91. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  92. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  93. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  94. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  95. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  96. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
  97. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  98. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  99. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  100. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  101. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  102. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +5 -3
  103. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +5 -3
  104. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +5 -3
  105. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +3 -1
  106. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +3 -1
  107. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +3 -1
  108. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  109. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  110. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  111. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  112. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  113. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  114. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  115. package/extensions/template/src/extension.sysml +3 -1
  116. package/package.json +2 -2
  117. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  118. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  119. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  120. package/src/architecture/implementation/ui/memo_ui.sysml +0 -23
  121. package/src/architecture/logical/interfaces/memo_interfaces.sysml +3 -1
  122. package/src/architecture/operational/context/use_context/memo_use_context.sysml +3 -11
  123. package/src/architecture/operational/scenarios/memo_scenarios.sysml +0 -10
  124. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -11
  125. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -20
  126. package/src/architecture/realization/deployment/memo_deployment.sysml +16 -9
  127. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  128. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  129. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  130. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  131. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  132. package/src/artifacts/standards/iec_60812.sysml +21 -22
  133. package/src/artifacts/standards/iec_62304.sysml +150 -169
  134. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  135. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  136. package/src/artifacts/standards/iso_13485.sysml +80 -89
  137. package/src/artifacts/standards/iso_14971.sysml +66 -73
  138. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  139. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  140. package/src/core/common/memo_common.sysml +50 -50
  141. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  142. package/src/core/relationships/memo_relationships.sysml +22 -49
  143. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  144. package/src/methodology/core/memo_core.sysml +0 -10
  145. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  146. package/src/rules/closure/closure_rules.sysml +22 -20
  147. package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
  148. package/src/rules/ontology/ontology_invariants.sysml +106 -33
  149. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  150. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -28
  151. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  152. package/src/viewpoints/context/context_viewpoint.sysml +5 -3
  153. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +5 -3
  154. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  155. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -16
  156. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  157. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +5 -3
  158. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +5 -3
  159. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -2
  160. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +5 -3
  161. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  162. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +5 -3
  163. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -2
  164. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +5 -3
  165. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +5 -3
  166. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  167. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -2
  168. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +5 -3
  169. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -2
  170. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +5 -3
  171. package/src/viewpoints/software/software_viewpoint.sysml +4 -2
  172. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +5 -3
  173. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -2
  174. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  175. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -2
  176. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  177. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +5 -3
  178. package/templates/connected-device/model/catalog/project.sysml +3 -1
  179. package/templates/default/model/catalog/project.sysml +3 -1
  180. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  181. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  182. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -14,8 +14,10 @@ package memo_examples_manual_surgical_instrument_project {
14
14
  private import memo_examples_manual_surgical_instrument_viewpoints_unassigned::*;
15
15
  private import memo_examples_manual_surgical_instrument_viewpoints_unassigned_views_manual_surgical_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-SURGICAL-INSTRUMENT-001";
20
+ @MemoIdentity { :>> providedId = "PMB-SURGICAL-INSTRUMENT-001"; }
19
21
  attribute :>> name = "ManualSurgicalInstrumentProjectMethodBinding";
20
22
  attribute :>> projectName = "Manual Surgical Instrument";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -17,8 +17,10 @@ package memo_examples_multidimensional_layers {
17
17
  private import memo_assurance_verification_validation::*;
18
18
  private import memo_core_relationships::*;
19
19
 
20
+ private import memo_core_common::*;
21
+ private import memo_core_common::MemoIdentity;
20
22
  part doseLimitChecker : SoftwareModule {
21
- attribute :>> id = "MDL-SW-001";
23
+ @MemoIdentity { :>> providedId = "MDL-SW-001"; }
22
24
  attribute :>> name = "DoseLimitChecker";
23
25
  attribute :>> responsibility = "Reject therapy parameters outside the drug library's hard limits.";
24
26
  attribute :>> safetyClass = SafetyClassKind::C;
@@ -33,7 +35,7 @@ package memo_examples_multidimensional_layers {
33
35
  // The SAME identity progresses through realization stages — a deployed
34
36
  // configuration is a stage of the element, not a second element.
35
37
  part doseLimitCheckerRuntime : SoftwareComponent {
36
- attribute :>> id = "MDL-RT-001";
38
+ @MemoIdentity { :>> providedId = "MDL-RT-001"; }
37
39
  attribute :>> name = "DoseLimitCheckerTask";
38
40
  attribute :>> periodMs = 50.0;
39
41
  attribute :>> deadlineMs = 50.0;
@@ -45,8 +47,8 @@ package memo_examples_multidimensional_layers {
45
47
  #refinement dependency doseLimitCheckerRuntime to doseLimitChecker;
46
48
 
47
49
  verification vcLimitEnforcement : VerificationCase {
48
- attribute :>> id = "MDL-VC-001"; attribute :>> name = "VerifyHardLimitEnforcement";
49
- attribute :>> methodKind = VerificationMethodKind::test;
50
+ @MemoIdentity { :>> providedId = "MDL-VC-001"; } attribute :>> name = "VerifyHardLimitEnforcement";
51
+ attribute :>> methodKind = MemoVerificationMethodKind::test;
50
52
  attribute :>> acceptanceCriteria = "all out-of-limit programs rejected across the equivalence classes";
51
53
 
52
54
  subject verified : Base::Anything[*] = (doseLimitChecker);
@@ -14,8 +14,10 @@ package memo_examples_multidimensional_layers_project {
14
14
  private import memo_examples_multidimensional_layers_viewpoints_unassigned::*;
15
15
  private import memo_examples_multidimensional_layers_viewpoints_unassigned_views_multidimensional_layers_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-MULTIDIMENSIONAL-LAYERS-001";
20
+ @MemoIdentity { :>> providedId = "PMB-MULTIDIMENSIONAL-LAYERS-001"; }
19
21
  attribute :>> name = "MultidimensionalLayersProjectMethodBinding";
20
22
  attribute :>> projectName = "Multidimensional Layers";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -14,30 +14,32 @@ package memo_examples_nested_architecture_dsm_architecture_functional_functions
14
14
  private import memo_architecture_functional_functions::*;
15
15
  private import memo_architecture_operational_context_use_context::*;
16
16
 
17
+ private import memo_core_common::*;
18
+ private import memo_core_common::MemoIdentity;
17
19
  // ── Deliver therapy ──────────────────────────────────────────
18
20
  action fnDeliverTherapy : SystemFunction {
19
- attribute :>> id = "NDS-FN-001"; attribute :>> name = "DeliverTherapy";
21
+ @MemoIdentity { :>> providedId = "NDS-FN-001"; } attribute :>> name = "DeliverTherapy";
20
22
  attribute :>> functionCategory = "therapy";
21
23
  attribute :>> criticality = CriticalityKind::catastrophic;
22
24
  attribute :>> concernKind = ConcernKind::safety;
23
25
  attribute :>> outputSummary = "fluid delivered to the patient line at the prescribed rate";
24
26
 
25
27
  action fnMeterFluid : SystemFunction {
26
- attribute :>> id = "NDS-FN-002"; attribute :>> name = "MeterFluid";
28
+ @MemoIdentity { :>> providedId = "NDS-FN-002"; } attribute :>> name = "MeterFluid";
27
29
  attribute :>> functionCategory = "therapy";
28
30
  attribute :>> criticality = CriticalityKind::catastrophic;
29
31
  attribute :>> concernKind = ConcernKind::safety;
30
32
  attribute :>> outputSummary = "measured volume displaced per control period";
31
33
 
32
34
  action fnDriveActuator : SystemFunction {
33
- attribute :>> id = "NDS-FN-003"; attribute :>> name = "DriveActuator";
35
+ @MemoIdentity { :>> providedId = "NDS-FN-003"; } attribute :>> name = "DriveActuator";
34
36
  attribute :>> functionCategory = "therapy";
35
37
  attribute :>> criticality = CriticalityKind::catastrophic;
36
38
  attribute :>> trigger = "rate command from the dose control loop";
37
39
  attribute :>> concernKind = ConcernKind::safety;
38
40
  }
39
41
  action fnMeasureDelivered : SystemFunction {
40
- attribute :>> id = "NDS-FN-004"; attribute :>> name = "MeasureDeliveredVolume";
42
+ @MemoIdentity { :>> providedId = "NDS-FN-004"; } attribute :>> name = "MeasureDeliveredVolume";
41
43
  attribute :>> functionCategory = "therapy";
42
44
  attribute :>> criticality = CriticalityKind::high;
43
45
  attribute :>> concernKind = ConcernKind::safety;
@@ -45,20 +47,20 @@ package memo_examples_nested_architecture_dsm_architecture_functional_functions
45
47
  }
46
48
  }
47
49
  action fnControlDose : SystemFunction {
48
- attribute :>> id = "NDS-FN-005"; attribute :>> name = "ControlDose";
50
+ @MemoIdentity { :>> providedId = "NDS-FN-005"; } attribute :>> name = "ControlDose";
49
51
  attribute :>> functionCategory = "therapy";
50
52
  attribute :>> criticality = CriticalityKind::catastrophic;
51
53
  attribute :>> concernKind = ConcernKind::safety;
52
54
 
53
55
  action fnComputeRate : SystemFunction {
54
- attribute :>> id = "NDS-FN-006"; attribute :>> name = "ComputeInfusionRate";
56
+ @MemoIdentity { :>> providedId = "NDS-FN-006"; } attribute :>> name = "ComputeInfusionRate";
55
57
  attribute :>> functionCategory = "therapy";
56
58
  attribute :>> criticality = CriticalityKind::catastrophic;
57
59
  attribute :>> concernKind = ConcernKind::safety;
58
60
  attribute :>> outputSummary = "rate command, saturated at the prescribed ceiling";
59
61
  }
60
62
  action fnValidatePrescription : SystemFunction {
61
- attribute :>> id = "NDS-FN-007"; attribute :>> name = "ValidatePrescription";
63
+ @MemoIdentity { :>> providedId = "NDS-FN-007"; } attribute :>> name = "ValidatePrescription";
62
64
  attribute :>> functionCategory = "therapy";
63
65
  attribute :>> criticality = CriticalityKind::high;
64
66
  attribute :>> concernKind = ConcernKind::clinical;
@@ -69,27 +71,27 @@ package memo_examples_nested_architecture_dsm_architecture_functional_functions
69
71
 
70
72
  // ── Ensure safety ────────────────────────────────────────────
71
73
  action fnEnsureSafety : SystemFunction {
72
- attribute :>> id = "NDS-FN-008"; attribute :>> name = "EnsureSafety";
74
+ @MemoIdentity { :>> providedId = "NDS-FN-008"; } attribute :>> name = "EnsureSafety";
73
75
  attribute :>> functionCategory = "protection";
74
76
  attribute :>> criticality = CriticalityKind::catastrophic;
75
77
  attribute :>> concernKind = ConcernKind::safety;
76
78
 
77
79
  action fnDetectOcclusion : SystemFunction {
78
- attribute :>> id = "NDS-FN-009"; attribute :>> name = "DetectOcclusion";
80
+ @MemoIdentity { :>> providedId = "NDS-FN-009"; } attribute :>> name = "DetectOcclusion";
79
81
  attribute :>> functionCategory = "protection";
80
82
  attribute :>> criticality = CriticalityKind::catastrophic;
81
83
  attribute :>> trigger = "line pressure above the occlusion threshold";
82
84
  attribute :>> concernKind = ConcernKind::safety;
83
85
  }
84
86
  action fnDetectAirInLine : SystemFunction {
85
- attribute :>> id = "NDS-FN-010"; attribute :>> name = "DetectAirInLine";
87
+ @MemoIdentity { :>> providedId = "NDS-FN-010"; } attribute :>> name = "DetectAirInLine";
86
88
  attribute :>> functionCategory = "protection";
87
89
  attribute :>> criticality = CriticalityKind::catastrophic;
88
90
  attribute :>> trigger = "air bolus detected in the patient line";
89
91
  attribute :>> concernKind = ConcernKind::safety;
90
92
  }
91
93
  action fnEnforceDoseLimits : SystemFunction {
92
- attribute :>> id = "NDS-FN-011"; attribute :>> name = "EnforceDoseLimits";
94
+ @MemoIdentity { :>> providedId = "NDS-FN-011"; } attribute :>> name = "EnforceDoseLimits";
93
95
  attribute :>> functionCategory = "protection";
94
96
  attribute :>> criticality = CriticalityKind::catastrophic;
95
97
  attribute :>> concernKind = ConcernKind::safety;
@@ -99,27 +101,27 @@ package memo_examples_nested_architecture_dsm_architecture_functional_functions
99
101
 
100
102
  // ── Inform the user ──────────────────────────────────────────
101
103
  action fnInformUser : SystemFunction {
102
- attribute :>> id = "NDS-FN-012"; attribute :>> name = "InformUser";
104
+ @MemoIdentity { :>> providedId = "NDS-FN-012"; } attribute :>> name = "InformUser";
103
105
  attribute :>> functionCategory = "interaction";
104
106
  attribute :>> criticality = CriticalityKind::high;
105
107
  attribute :>> concernKind = ConcernKind::usability;
106
108
 
107
109
  action fnRenderStatus : SystemFunction {
108
- attribute :>> id = "NDS-FN-013"; attribute :>> name = "RenderTherapyStatus";
110
+ @MemoIdentity { :>> providedId = "NDS-FN-013"; } attribute :>> name = "RenderTherapyStatus";
109
111
  attribute :>> functionCategory = "interaction";
110
112
  attribute :>> criticality = CriticalityKind::high;
111
113
  attribute :>> concernKind = ConcernKind::usability;
112
114
  attribute :>> outputSummary = "rate, volume delivered and time remaining";
113
115
  }
114
116
  action fnAnnunciateAlarm : SystemFunction {
115
- attribute :>> id = "NDS-FN-014"; attribute :>> name = "AnnunciateAlarm";
117
+ @MemoIdentity { :>> providedId = "NDS-FN-014"; } attribute :>> name = "AnnunciateAlarm";
116
118
  attribute :>> functionCategory = "interaction";
117
119
  attribute :>> criticality = CriticalityKind::catastrophic;
118
120
  attribute :>> trigger = "any active alarm condition";
119
121
  attribute :>> concernKind = ConcernKind::safety;
120
122
  }
121
123
  action fnAcceptInput : SystemFunction {
122
- attribute :>> id = "NDS-FN-015"; attribute :>> name = "AcceptClinicianInput";
124
+ @MemoIdentity { :>> providedId = "NDS-FN-015"; } attribute :>> name = "AcceptClinicianInput";
123
125
  attribute :>> functionCategory = "interaction";
124
126
  attribute :>> criticality = CriticalityKind::high;
125
127
  attribute :>> concernKind = ConcernKind::usability;
@@ -129,20 +131,20 @@ package memo_examples_nested_architecture_dsm_architecture_functional_functions
129
131
 
130
132
  // ── Manage power ─────────────────────────────────────────────
131
133
  action fnManagePower : SystemFunction {
132
- attribute :>> id = "NDS-FN-016"; attribute :>> name = "ManagePower";
134
+ @MemoIdentity { :>> providedId = "NDS-FN-016"; } attribute :>> name = "ManagePower";
133
135
  attribute :>> functionCategory = "platform";
134
136
  attribute :>> criticality = CriticalityKind::high;
135
137
  attribute :>> concernKind = ConcernKind::reliability;
136
138
 
137
139
  action fnMonitorBattery : SystemFunction {
138
- attribute :>> id = "NDS-FN-017"; attribute :>> name = "MonitorBatteryState";
140
+ @MemoIdentity { :>> providedId = "NDS-FN-017"; } attribute :>> name = "MonitorBatteryState";
139
141
  attribute :>> functionCategory = "platform";
140
142
  attribute :>> criticality = CriticalityKind::high;
141
143
  attribute :>> concernKind = ConcernKind::reliability;
142
144
  attribute :>> outputSummary = "state of charge and remaining run time";
143
145
  }
144
146
  action fnSelectPowerSource : SystemFunction {
145
- attribute :>> id = "NDS-FN-018"; attribute :>> name = "SelectPowerSource";
147
+ @MemoIdentity { :>> providedId = "NDS-FN-018"; } attribute :>> name = "SelectPowerSource";
146
148
  attribute :>> functionCategory = "platform";
147
149
  attribute :>> criticality = CriticalityKind::high;
148
150
  attribute :>> trigger = "mains loss or rail brownout";
@@ -12,9 +12,11 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
12
12
  private import memo_architecture_logical_structure::*;
13
13
  private import memo_architecture_operational_context_use_context::*;
14
14
 
15
+ private import memo_core_common::*;
16
+ private import memo_core_common::MemoIdentity;
15
17
  // ── Level 0: the system ──────────────────────────────────────
16
18
  part sysTherapyDelivery : System {
17
- attribute :>> id = "NDS-SYS-001"; attribute :>> name = "TherapyDeliverySystem";
19
+ @MemoIdentity { :>> providedId = "NDS-SYS-001"; } attribute :>> name = "TherapyDeliverySystem";
18
20
  attribute :>> componentRole = ComponentRoleKind::generic;
19
21
  attribute :>> systemType = SystemTypeKind::logical;
20
22
  attribute :>> systemBoundaryDescription = "Everything inside the pump enclosure, including its power path and user interface.";
@@ -22,35 +24,35 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
22
24
 
23
25
  // ── Level 1: subsystems ──────────────────────────────────
24
26
  part subFluidPath : Subsystem {
25
- attribute :>> id = "NDS-SUB-001"; attribute :>> name = "FluidPathSubsystem";
27
+ @MemoIdentity { :>> providedId = "NDS-SUB-001"; } attribute :>> name = "FluidPathSubsystem";
26
28
  attribute :>> componentRole = ComponentRoleKind::generic;
27
29
  attribute :>> systemType = SystemTypeKind::hardware;
28
30
  attribute :>> responsibility = "Move fluid from the reservoir to the patient line at a commanded rate.";
29
31
 
30
32
  // ── Level 2/3: components ─────────────────────────────
31
33
  part lcPumpMechanism : LogicalComponent {
32
- attribute :>> id = "NDS-LC-001"; attribute :>> name = "PumpMechanism";
34
+ @MemoIdentity { :>> providedId = "NDS-LC-001"; } attribute :>> name = "PumpMechanism";
33
35
  attribute :>> componentRole = ComponentRoleKind::controlElement;
34
36
  attribute :>> systemType = SystemTypeKind::hardware;
35
37
  attribute :>> responsibility = "Displace fluid under command.";
36
38
  attribute :>> controlledVariable = "delivered volume per stroke";
37
39
  }
38
40
  part lcOcclusionChannel : LogicalComponent {
39
- attribute :>> id = "NDS-LC-002"; attribute :>> name = "OcclusionSensingChannel";
41
+ @MemoIdentity { :>> providedId = "NDS-LC-002"; } attribute :>> name = "OcclusionSensingChannel";
40
42
  attribute :>> componentRole = ComponentRoleKind::channel;
41
43
  attribute :>> systemType = SystemTypeKind::hardware;
42
44
  attribute :>> responsibility = "Sense line pressure and air in line.";
43
45
  attribute :>> channelRole = ChannelRoleKind::primary;
44
46
  }
45
47
  part lcReservoirInterface : LogicalComponent {
46
- attribute :>> id = "NDS-LC-003"; attribute :>> name = "ReservoirInterface";
48
+ @MemoIdentity { :>> providedId = "NDS-LC-003"; } attribute :>> name = "ReservoirInterface";
47
49
  attribute :>> componentRole = ComponentRoleKind::generic;
48
50
  attribute :>> systemType = SystemTypeKind::hardware;
49
51
  attribute :>> responsibility = "Seat the reservoir and expose its remaining volume.";
50
52
  }
51
53
  }
52
54
  part subControl : Subsystem {
53
- attribute :>> id = "NDS-SUB-002"; attribute :>> name = "ControlSubsystem";
55
+ @MemoIdentity { :>> providedId = "NDS-SUB-002"; } attribute :>> name = "ControlSubsystem";
54
56
  attribute :>> componentRole = ComponentRoleKind::controlElement;
55
57
  attribute :>> systemType = SystemTypeKind::software;
56
58
  attribute :>> responsibility = "Decide what the fluid path should do, and hold the therapy state.";
@@ -60,14 +62,14 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
60
62
  // which is what makes a collapsed ControlSubsystem row a genuine
61
63
  // roll-up rather than a rename of its children.
62
64
  part subSafetyMonitor : Subsystem {
63
- attribute :>> id = "NDS-SUB-005"; attribute :>> name = "SafetyMonitorSubsystem";
65
+ @MemoIdentity { :>> providedId = "NDS-SUB-005"; } attribute :>> name = "SafetyMonitorSubsystem";
64
66
  attribute :>> componentRole = ComponentRoleKind::channel;
65
67
  attribute :>> systemType = SystemTypeKind::software;
66
68
  attribute :>> responsibility = "Watch the control path from outside it and stop delivery on breach.";
67
69
  attribute :>> safetyPartition = "monitor partition, separate MPU region from the control partition";
68
70
 
69
71
  part lcWatchdogChannel : LogicalComponent {
70
- attribute :>> id = "NDS-LC-006"; attribute :>> name = "WatchdogChannel";
72
+ @MemoIdentity { :>> providedId = "NDS-LC-006"; } attribute :>> name = "WatchdogChannel";
71
73
  attribute :>> componentRole = ComponentRoleKind::channel;
72
74
  attribute :>> systemType = SystemTypeKind::software;
73
75
  attribute :>> responsibility = "Reset to the safe state when the control loop misses its deadline.";
@@ -75,7 +77,7 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
75
77
  attribute :>> diversityBasis = "independent time base from the control partition";
76
78
  }
77
79
  part lcPressureIntegrityChannel : LogicalComponent {
78
- attribute :>> id = "NDS-LC-007"; attribute :>> name = "PressureIntegrityChannel";
80
+ @MemoIdentity { :>> providedId = "NDS-LC-007"; } attribute :>> name = "PressureIntegrityChannel";
79
81
  attribute :>> componentRole = ComponentRoleKind::channel;
80
82
  attribute :>> systemType = SystemTypeKind::software;
81
83
  attribute :>> responsibility = "Cross-check pressure against the commanded rate and stop on divergence.";
@@ -84,7 +86,7 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
84
86
  }
85
87
  }
86
88
  part lcDoseController : LogicalComponent {
87
- attribute :>> id = "NDS-LC-004"; attribute :>> name = "DoseController";
89
+ @MemoIdentity { :>> providedId = "NDS-LC-004"; } attribute :>> name = "DoseController";
88
90
  attribute :>> componentRole = ComponentRoleKind::controlElement;
89
91
  attribute :>> systemType = SystemTypeKind::software;
90
92
  attribute :>> responsibility = "Turn a prescription into rate commands.";
@@ -92,7 +94,7 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
92
94
  attribute :>> controlledVariable = "infusion rate";
93
95
  }
94
96
  part lcTherapyStateStore : LogicalComponent {
95
- attribute :>> id = "NDS-LC-005"; attribute :>> name = "TherapyStateStore";
97
+ @MemoIdentity { :>> providedId = "NDS-LC-005"; } attribute :>> name = "TherapyStateStore";
96
98
  attribute :>> componentRole = ComponentRoleKind::dataStore;
97
99
  attribute :>> systemType = SystemTypeKind::software;
98
100
  attribute :>> responsibility = "Hold the active therapy record across power cycles.";
@@ -101,27 +103,27 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
101
103
  }
102
104
  }
103
105
  part subUserInterface : Subsystem {
104
- attribute :>> id = "NDS-SUB-003"; attribute :>> name = "UserInterfaceSubsystem";
106
+ @MemoIdentity { :>> providedId = "NDS-SUB-003"; } attribute :>> name = "UserInterfaceSubsystem";
105
107
  attribute :>> componentRole = ComponentRoleKind::userInterface;
106
108
  attribute :>> systemType = SystemTypeKind::software;
107
109
  attribute :>> responsibility = "Present therapy state to the clinician and accept their input.";
108
110
 
109
111
  part lcDisplayManager : LogicalComponent {
110
- attribute :>> id = "NDS-LC-008"; attribute :>> name = "DisplayManager";
112
+ @MemoIdentity { :>> providedId = "NDS-LC-008"; } attribute :>> name = "DisplayManager";
111
113
  attribute :>> componentRole = ComponentRoleKind::userInterface;
112
114
  attribute :>> systemType = SystemTypeKind::software;
113
115
  attribute :>> responsibility = "Render therapy state on the main screen.";
114
116
  attribute :>> interactionSummary = "read-only status surface, refreshed once per second";
115
117
  }
116
118
  part lcAlarmAnnunciator : LogicalComponent {
117
- attribute :>> id = "NDS-LC-009"; attribute :>> name = "AlarmAnnunciator";
119
+ @MemoIdentity { :>> providedId = "NDS-LC-009"; } attribute :>> name = "AlarmAnnunciator";
118
120
  attribute :>> componentRole = ComponentRoleKind::userInterface;
119
121
  attribute :>> systemType = SystemTypeKind::software;
120
122
  attribute :>> responsibility = "Raise audible and visible alarms by priority.";
121
123
  attribute :>> interactionSummary = "IEC 60601-1-8 alarm signals";
122
124
  }
123
125
  part lcKeypadHandler : LogicalComponent {
124
- attribute :>> id = "NDS-LC-010"; attribute :>> name = "KeypadHandler";
126
+ @MemoIdentity { :>> providedId = "NDS-LC-010"; } attribute :>> name = "KeypadHandler";
125
127
  attribute :>> componentRole = ComponentRoleKind::userInterface;
126
128
  attribute :>> systemType = SystemTypeKind::software;
127
129
  attribute :>> responsibility = "Debounce and interpret key presses.";
@@ -129,19 +131,19 @@ package memo_examples_nested_architecture_dsm_architecture_logical_structure {
129
131
  }
130
132
  }
131
133
  part subPower : Subsystem {
132
- attribute :>> id = "NDS-SUB-004"; attribute :>> name = "PowerSubsystem";
134
+ @MemoIdentity { :>> providedId = "NDS-SUB-004"; } attribute :>> name = "PowerSubsystem";
133
135
  attribute :>> componentRole = ComponentRoleKind::generic;
134
136
  attribute :>> systemType = SystemTypeKind::hardware;
135
137
  attribute :>> responsibility = "Supply and monitor power across mains and battery operation.";
136
138
 
137
139
  part lcBatteryManager : LogicalComponent {
138
- attribute :>> id = "NDS-LC-011"; attribute :>> name = "BatteryManager";
140
+ @MemoIdentity { :>> providedId = "NDS-LC-011"; } attribute :>> name = "BatteryManager";
139
141
  attribute :>> componentRole = ComponentRoleKind::generic;
140
142
  attribute :>> systemType = SystemTypeKind::hardware;
141
143
  attribute :>> responsibility = "Charge, gauge and protect the battery.";
142
144
  }
143
145
  part lcPowerRailMonitor : LogicalComponent {
144
- attribute :>> id = "NDS-LC-012"; attribute :>> name = "PowerRailMonitor";
146
+ @MemoIdentity { :>> providedId = "NDS-LC-012"; } attribute :>> name = "PowerRailMonitor";
145
147
  attribute :>> componentRole = ComponentRoleKind::channel;
146
148
  attribute :>> systemType = SystemTypeKind::hardware;
147
149
  attribute :>> responsibility = "Detect rail brownout and request a source switch.";
@@ -10,27 +10,29 @@ package memo_examples_nested_architecture_dsm_assurance_requirements_needs {
10
10
  private import memo_assurance_requirements_needs::*;
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
  requirement needAccurateTherapy : Need {
14
- attribute :>> id = "NDS-NEED-001"; attribute :>> name = "AccurateTherapyDelivery";
16
+ @MemoIdentity { :>> providedId = "NDS-NEED-001"; } attribute :>> name = "AccurateTherapyDelivery";
15
17
  attribute :>> needKind = NeedKind::'stakeholder';
16
18
  attribute :>> statement = "Clinicians need the delivered dose to match the prescription closely enough to be clinically safe.";
17
19
  attribute :>> priority = "high";
18
20
  }
19
21
  requirement needProtectionFromHarm : Need {
20
- attribute :>> id = "NDS-NEED-002"; attribute :>> name = "ProtectionFromDeliveryFaults";
22
+ @MemoIdentity { :>> providedId = "NDS-NEED-002"; } attribute :>> name = "ProtectionFromDeliveryFaults";
21
23
  attribute :>> needKind = NeedKind::'stakeholder';
22
24
  attribute :>> statement = "Patients need delivery to stop before a line fault or air bolus reaches them.";
23
25
  attribute :>> priority = "high";
24
26
  }
25
27
  requirement needUninterruptedTherapy : Need {
26
- attribute :>> id = "NDS-NEED-003"; attribute :>> name = "UninterruptedTherapy";
28
+ @MemoIdentity { :>> providedId = "NDS-NEED-003"; } attribute :>> name = "UninterruptedTherapy";
27
29
  attribute :>> needKind = NeedKind::operational;
28
30
  attribute :>> statement = "Wards need therapy to continue through transport and mains interruptions.";
29
31
  attribute :>> priority = "medium";
30
32
  attribute :>> operationalContextReference = "intra-hospital transport, up to four hours off mains";
31
33
  }
32
34
  requirement needLegibleStatus : Need {
33
- attribute :>> id = "NDS-NEED-004"; attribute :>> name = "LegibleTherapyStatus";
35
+ @MemoIdentity { :>> providedId = "NDS-NEED-004"; } attribute :>> name = "LegibleTherapyStatus";
34
36
  attribute :>> needKind = NeedKind::'stakeholder';
35
37
  attribute :>> statement = "Clinicians need to read therapy state and alarms correctly from the bedside.";
36
38
  attribute :>> priority = "high";
@@ -10,8 +10,10 @@ 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";
16
+ @MemoIdentity { :>> providedId = "NDS-REQ-001"; } attribute :>> name = "DoseAccuracy";
15
17
  attribute :>> requirementKind = RequirementKind::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;
@@ -20,7 +22,7 @@ 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";
25
+ @MemoIdentity { :>> providedId = "NDS-REQ-002"; } attribute :>> name = "OcclusionDetection";
24
26
  attribute :>> requirementKind = RequirementKind::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;
@@ -31,7 +33,7 @@ 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";
36
+ @MemoIdentity { :>> providedId = "NDS-REQ-003"; } attribute :>> name = "AirInLineProtection";
35
37
  attribute :>> requirementKind = RequirementKind::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;
@@ -42,7 +44,7 @@ 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";
47
+ @MemoIdentity { :>> providedId = "NDS-REQ-004"; } attribute :>> name = "AlarmAnnunciation";
46
48
  attribute :>> requirementKind = RequirementKind::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;
@@ -54,7 +56,7 @@ 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";
59
+ @MemoIdentity { :>> providedId = "NDS-REQ-005"; } attribute :>> name = "BatteryEndurance";
58
60
  attribute :>> requirementKind = RequirementKind::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;
@@ -65,7 +67,7 @@ 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";
70
+ @MemoIdentity { :>> providedId = "NDS-REQ-006"; } attribute :>> name = "PrescriptionConfirmation";
69
71
  attribute :>> requirementKind = RequirementKind::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;
@@ -78,7 +80,7 @@ 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";
83
+ @MemoIdentity { :>> providedId = "NDS-REQ-007"; } attribute :>> name = "StatusVisibility";
82
84
  attribute :>> requirementKind = RequirementKind::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;
@@ -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
 
@@ -18,8 +18,10 @@ package memo_examples_nested_architecture_dsm_project {
18
18
  private import memo_examples_nested_architecture_dsm_assurance_verification_validation::*;
19
19
  private import memo_examples_nested_architecture_dsm_traces::*;
20
20
 
21
+ private import memo_core_common::*;
22
+ private import memo_core_common::MemoIdentity;
21
23
  part projectBinding : ProjectMethodBinding {
22
- attribute :>> id = "PMB-NESTED-DSM-001";
24
+ @MemoIdentity { :>> providedId = "PMB-NESTED-DSM-001"; }
23
25
  attribute :>> name = "NestedArchitectureDsmProjectMethodBinding";
24
26
  attribute :>> projectName = "Nested Architecture DSM";
25
27
  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;