@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
@@ -12,8 +12,10 @@ package memo_artifacts_standards_iso_iec_ieee_42010 {
12
12
  private import memo_core_relationships::*;
13
13
  private import memo_artifacts_standards_traceability::*;
14
14
 
15
+ private import memo_core_common::*;
16
+ private import memo_core_common::MemoIdentity;
15
17
  item isoIecIeee42010 : RegulatoryStandard {
16
- attribute :>> id = "STD-ISO-IEC-IEEE-42010";
18
+ @MemoIdentity { :>> providedId = "STD-ISO-IEC-IEEE-42010"; }
17
19
  attribute :>> name = "ISOIECIEEE42010";
18
20
  attribute :>> designation = "ISO/IEC/IEEE 42010:2022";
19
21
  attribute :>> edition = "2022";
@@ -22,21 +24,19 @@ package memo_artifacts_standards_iso_iec_ieee_42010 {
22
24
  // reference standard, cited by documents rather than required by a
23
25
  // market. Empty is the authored value, not an omission — see
24
26
  // appliesToRegime in memo_artifacts_standards_traceability.
27
+ item isoIecIeee42010Clause5 : StandardClause {
28
+ @MemoIdentity { :>> providedId = "STD-ISO-IEC-IEEE-42010-5"; }
29
+ attribute :>> name = "ISOIECIEEE42010Clause5";
30
+ attribute :>> clauseNumber = "5";
31
+ attribute :>> normativeStrength = "shall";
32
+ }
33
+ item isoIecIeee42010Clause6 : StandardClause {
34
+ @MemoIdentity { :>> providedId = "STD-ISO-IEC-IEEE-42010-6"; }
35
+ attribute :>> name = "ISOIECIEEE42010Clause6";
36
+ attribute :>> clauseNumber = "6";
37
+ attribute :>> normativeStrength = "shall";
38
+ }
25
39
  }
26
40
 
27
- item isoIecIeee42010Clause5 : StandardClause {
28
- attribute :>> id = "STD-ISO-IEC-IEEE-42010-5";
29
- attribute :>> name = "ISOIECIEEE42010Clause5";
30
- attribute :>> clauseNumber = "5";
31
- attribute :>> normativeStrength = "shall";
32
- }
33
- item isoIecIeee42010Clause6 : StandardClause {
34
- attribute :>> id = "STD-ISO-IEC-IEEE-42010-6";
35
- attribute :>> name = "ISOIECIEEE42010Clause6";
36
- attribute :>> clauseNumber = "6";
37
- attribute :>> normativeStrength = "shall";
38
- }
39
41
 
40
- connection isoIecIeee42010Has5 : Composes connect parent ::> isoIecIeee42010 to child ::> isoIecIeee42010Clause5;
41
- connection isoIecIeee42010Has6 : Composes connect parent ::> isoIecIeee42010 to child ::> isoIecIeee42010Clause6;
42
42
  }
@@ -16,7 +16,7 @@ required_for: ["CE", "FDA_510k", "MDR"]
16
16
 
17
17
  This Hardware Requirements Specification (HRS) defines the safety, construction, and performance requirements for the **{{project.product}}** physical equipment, ensuring compliance with IEC 60601-1 (general safety) and applicable collateral standards (IEC 60601-1-2 for electromagnetic compatibility).
18
18
 
19
- Hardware requirements are identified by the model's `requirementKind` attribute. Per-topic sections — construction, electrical, EMC, mechanical — are **not** name filters: each is the set of elements claiming the clause that governs that topic, selected by traversing `ConformsTo` to that clause. A clause is named by its element id rather than by its number, because a clause number is not unique across standards: "8" is a clause of IEC 60601-1, of IEC 60601-1-2 and of IEC 62304.
19
+ Hardware requirements are identified by the model's `requirementType` attribute. Per-topic sections — construction, electrical, EMC, mechanical — are **not** name filters: each is the set of elements claiming the clause that governs that topic, selected by traversing `ConformsTo` to that clause. A clause is named by its element id rather than by its number, because a clause number is not unique across standards: "8" is a clause of IEC 60601-1, of IEC 60601-1-2 and of IEC 62304.
20
20
 
21
21
  ---
22
22
 
@@ -26,7 +26,7 @@ Summary metrics for the hardware requirements captured in the model:
26
26
 
27
27
  ```memo-query
28
28
  kind: Requirement
29
- where: requirementKind == "RequirementKind::hardware"
29
+ where: requirementType == "RequirementTypeKind::hardware"
30
30
  display: count
31
31
  label: Total hardware requirements
32
32
  ```
@@ -35,11 +35,11 @@ label: Total hardware requirements
35
35
 
36
36
  ```memo-query
37
37
  kind: Requirement
38
- where: requirementKind == "RequirementKind::hardware"
38
+ where: requirementType == "RequirementTypeKind::hardware"
39
39
  display: table
40
- columns: name, requirementKind, electricalSafetyRelevant, doc
40
+ columns: name, requirementType, electricalSafetyRelevant, doc
41
41
  sort: name
42
- empty: "No hardware requirements defined. Add Requirement elements with requirementKind = hardware."
42
+ empty: "No hardware requirements defined. Add Requirement elements with requirementType = hardware."
43
43
  ```
44
44
 
45
45
  ---
@@ -142,7 +142,7 @@ Hardware requirements traced to the elements that satisfy them:
142
142
 
143
143
  ```memo-query
144
144
  kind: Requirement
145
- where: requirementKind == "RequirementKind::hardware"
145
+ where: requirementType == "RequirementTypeKind::hardware"
146
146
  traverse: outgoing satisfiedBy
147
147
  display: table
148
148
  columns: name, kind, layer, doc
@@ -16,7 +16,7 @@ required_for: ["CE", "FDA_510k", "MDR"]
16
16
 
17
17
  This Software Requirements Specification (SRS) defines the software requirements for **{{project.product}}** in accordance with IEC 62304:2006+AMD1:2015 §5.2.
18
18
 
19
- Software, hardware and system requirements are distinguished by the model's own `requirementKind` attribute, never by which layer directory a file sits in and never by what a requirement is called. There is no "software layer": hardware and software are sibling directories inside `implementation`.
19
+ Software, hardware and system requirements are distinguished by the model's own `requirementType` attribute, never by which layer directory a file sits in and never by what a requirement is called. There is no "software layer": hardware and software are sibling directories inside `implementation`.
20
20
 
21
21
  ---
22
22
 
@@ -26,14 +26,14 @@ Summary metrics for the requirements captured in the model:
26
26
 
27
27
  ```memo-query
28
28
  kind: Requirement
29
- where: requirementKind == "RequirementKind::software"
29
+ where: requirementType == "RequirementTypeKind::software"
30
30
  display: count
31
31
  label: Total software requirements
32
32
  ```
33
33
 
34
34
  ```memo-query
35
35
  kind: Requirement
36
- where: requirementKind == "RequirementKind::system"
36
+ where: requirementType == "RequirementTypeKind::system"
37
37
  display: count
38
38
  label: System requirements
39
39
  ```
@@ -48,7 +48,7 @@ Requirements carrying a `shall` obligation — the binding ones:
48
48
  kind: Requirement
49
49
  where: obligation == "ObligationKind::shall"
50
50
  display: table
51
- columns: name, requirementKind, safetyClass, doc
51
+ columns: name, requirementType, safetyClass, doc
52
52
  sort: name
53
53
  empty: "No requirements carry a `shall` obligation. Set `obligation` on Requirement elements."
54
54
  ```
@@ -57,11 +57,11 @@ empty: "No requirements carry a `shall` obligation. Set `obligation` on Requirem
57
57
 
58
58
  ```memo-query
59
59
  kind: Requirement
60
- where: requirementKind == "RequirementKind::software"
60
+ where: requirementType == "RequirementTypeKind::software"
61
61
  display: table
62
- columns: name, requirementKind, safetyClass, doc
62
+ columns: name, requirementType, safetyClass, doc
63
63
  sort: name
64
- empty: "No software requirements defined. Add Requirement elements with requirementKind = software."
64
+ empty: "No software requirements defined. Add Requirement elements with requirementType = software."
65
65
  ```
66
66
 
67
67
  ---
@@ -97,9 +97,9 @@ System requirements allocated to software per IEC 62304 §5.2, drawn from the mo
97
97
 
98
98
  ```memo-query
99
99
  kind: Requirement
100
- where: requirementKind == "RequirementKind::system"
100
+ where: requirementType == "RequirementTypeKind::system"
101
101
  display: table
102
- columns: name, requirementKind, safetyClass, doc
102
+ columns: name, requirementType, safetyClass, doc
103
103
  sort: name
104
104
  empty: "No system requirements defined."
105
105
  ```
@@ -155,7 +155,7 @@ empty: "No SOUP identified. Add DependsOnSoup links from software items to the S
155
155
 
156
156
  ```memo-query
157
157
  kind: Requirement
158
- where: requirementKind == "RequirementKind::software"
158
+ where: requirementType == "RequirementTypeKind::software"
159
159
  traverse: outgoing verifiedBy
160
160
  display: table
161
161
  columns: name, kind, layer, doc
@@ -26,7 +26,7 @@ Summary metrics for the system requirements captured in the model:
26
26
 
27
27
  ```memo-query
28
28
  kind: Requirement
29
- where: requirementKind == "RequirementKind::system"
29
+ where: requirementType == "RequirementTypeKind::system"
30
30
  display: count
31
31
  label: Total system requirements
32
32
  ```
@@ -41,7 +41,7 @@ Binding system requirements — those carrying a `shall` obligation:
41
41
  kind: Requirement
42
42
  where: obligation == "ObligationKind::shall"
43
43
  display: table
44
- columns: name, requirementKind, doc
44
+ columns: name, requirementType, doc
45
45
  sort: name
46
46
  empty: "No requirements carry a `shall` obligation. Set `obligation` on Requirement elements."
47
47
  ```
@@ -50,11 +50,11 @@ empty: "No requirements carry a `shall` obligation. Set `obligation` on Requirem
50
50
 
51
51
  ```memo-query
52
52
  kind: Requirement
53
- where: requirementKind == "RequirementKind::system"
53
+ where: requirementType == "RequirementTypeKind::system"
54
54
  display: table
55
- columns: name, requirementKind, safetyClass, doc
55
+ columns: name, requirementType, safetyClass, doc
56
56
  sort: name
57
- empty: "No system requirements defined. Add Requirement elements with requirementKind = system."
57
+ empty: "No system requirements defined. Add Requirement elements with requirementType = system."
58
58
  ```
59
59
 
60
60
  ---
@@ -67,7 +67,7 @@ How system requirements are allocated down to hardware and software.
67
67
 
68
68
  ```memo-query
69
69
  kind: Requirement
70
- where: requirementKind == "RequirementKind::system"
70
+ where: requirementType == "RequirementTypeKind::system"
71
71
  traverse: outgoing satisfiedBy
72
72
  display: table
73
73
  columns: name, kind, layer, doc
@@ -53,7 +53,6 @@ package memo_assurance_cybersecurity {
53
53
  attribute safetyImpact : String;
54
54
  attribute privacyImpact : String;
55
55
  attribute operationalImpact : String;
56
- attribute linkedSafetyHazardId : String;
57
56
  }
58
57
 
59
58
  part def CyberRisk specializes Risk {
@@ -15,7 +15,6 @@ package memo_assurance_human_factors {
15
15
 
16
16
  part def UseError specializes MemoPart {
17
17
  attribute errorCategory : UseErrorCategoryKind;
18
- attribute taskReference : String;
19
18
  attribute severity : SeverityKind;
20
19
  attribute rootCauseType : String;
21
20
  }
@@ -7,25 +7,32 @@ package memo_assurance_requirements {
7
7
  private import memo_assurance_requirements_needs::*;
8
8
  part def RiskDriver specializes RequirementDriver { attribute driverKind : String; }
9
9
 
10
- // The kind of requirement. Was a subclass branch (SystemRequirement /
11
- // SoftwareRequirement / HardwareRequirement) plus a parallel design-control
12
- // specification hierarchy (DesignControlSpecification / System- / Software- /
13
- // HardwareSpecification); now one attribute. The role-specific attributes
14
- // below are all optional so a requirement carries only the ones its kind
15
- // needs. IEC 62304 / design-control classification is preserved as the
16
- // enum value, not lost.
17
- enum def RequirementKind {
10
+ // What a requirement is about: the system, the software, the hardware, or
11
+ // the instructions for use. One axis, and the members are its values.
12
+ //
13
+ // It carried a second axis until now. `systemSpecification`,
14
+ // `softwareSpecification`, `hardwareSpecification` and `designControl` are
15
+ // the design-control ROLE — input versus output, 21 CFR 820.30(c)/(d) and
16
+ // ISO 13485 §7.3.3/§7.3.4 — multiplied into the subject. A requirement then
17
+ // could not say "software" without also committing to a role, the grid was
18
+ // incomplete by construction (there is no `ifuSpecification`, and there
19
+ // would have to be one for every future pairing), and nothing ever used the
20
+ // four: 250 requirements across the examples say system, software or
21
+ // hardware. A role, if a project needs one, is its own attribute.
22
+ //
23
+ // The instructions for use are neither hardware nor software: the device
24
+ // satisfies such a requirement with words rather than with a part or a
25
+ // module, and it is verified by reviewing the IFU rather than by testing a
26
+ // build (EU MDR Annex I §23.4, ISO 20417, IEC 62366-1 §7.2).
27
+ enum def RequirementTypeKind {
18
28
  enum system;
19
29
  enum software;
20
30
  enum hardware;
21
- enum systemSpecification;
22
- enum softwareSpecification;
23
- enum hardwareSpecification;
24
- enum designControl;
31
+ enum ifu;
25
32
  }
26
33
 
27
34
  requirement def Requirement specializes MemoRequirement {
28
- attribute requirementKind : RequirementKind;
35
+ attribute requirementType : RequirementTypeKind;
29
36
  attribute :>> statement : String;
30
37
  attribute sourceKind : RequirementSourceKind;
31
38
  attribute concernKind : ConcernKind;
@@ -53,9 +60,6 @@ package memo_assurance_requirements {
53
60
  // design-control specification (ISO 13485 design output)
54
61
  attribute specificationDomain : String;
55
62
  attribute sourceFolder : String;
56
- attribute linkedUserNeeds : String;
57
- attribute linkedRisks : String;
58
- attribute linkedTests : String;
59
63
  }
60
64
  // Named constant defined by a source requirements document (e.g. CriSys
61
65
  // GPCA App. A.4) and referenced from requirement statements.
@@ -6,8 +6,15 @@
6
6
  package memo_assurance_requirements_needs {
7
7
  private import ScalarValues::*;
8
8
 
9
+ private import Metaobjects::SemanticMetadata;
10
+
9
11
  private import memo_core_common::*;
10
12
  private import memo_core_enumerations::*;
13
+ private import memo_core_relationships::*;
14
+ // A need is held by someone and arises in a context, and both are modelled
15
+ // elements. Assurance may depend on architecture; the reverse may not.
16
+ private import memo_architecture_operational_context_actors::*;
17
+ private import memo_architecture_operational_context_use_context::*;
11
18
 
12
19
  // The kind of need. Was a subclass branch (StakeholderNeed / UserNeed /
13
20
  // ClinicalUserNeed / PatientUserNeed / BusinessNeed / ServiceNeed /
@@ -29,15 +36,36 @@ package memo_assurance_requirements_needs {
29
36
 
30
37
  requirement def Need specializes MemoNeed {
31
38
  attribute needKind : NeedKind;
32
- // user need (IEC 62366-1)
33
- attribute userPopulationReference : String;
39
+ // A user need (IEC 62366-1) says WHOSE need it is with HeldBy, and the
40
+ // user's characteristics live on the User: `userPopulation`,
41
+ // `impairmentConsiderations`, `intendedTraining`, `intendedQualification`.
42
+ // A `userPopulationReference` string stood here and held prose — "ward
43
+ // nurses, including those wearing corrective lenses" — which is two
44
+ // typed attributes of a user profile written as one sentence nothing
45
+ // could read, on the wrong element.
34
46
  // regulatory need
35
47
  attribute jurisdiction : String;
36
48
  attribute regulationReference : String;
37
- // operational need
38
- attribute operationalContextReference : String;
49
+ // The context an operational need arises in. Typed, because UseContext
50
+ // carries the care setting, environment and jurisdiction that an
51
+ // `operationalContextReference` string could only describe.
52
+ ref useContext : UseContext[0..1];
39
53
  // design-control need (ISO 13485 design input)
40
54
  attribute sourceFolder : String;
41
- attribute linkedDesignControls : String;
55
+ }
56
+
57
+ // Whose need this is. The holder is a modelled participant — a User, with
58
+ // the profile IEC 62366-1 asks for, or another operational participant —
59
+ // so "which users does this need serve" is a question the model answers
60
+ // rather than a sentence a reader interprets.
61
+ connection def HeldBy :> MemoRelationship {
62
+ end need : MemoNeed :>> source;
63
+ end holder : OperationalParticipant :>> target;
64
+ }
65
+ abstract connection heldByLinks : HeldBy[*];
66
+ metadata def <heldBy> HeldByMetadata :> SemanticMetadata {
67
+ :> annotatedElement : SysML::ConnectionDefinition;
68
+ :> annotatedElement : SysML::ConnectionUsage;
69
+ :>> baseType = heldByLinks meta SysML::Usage;
42
70
  }
43
71
  }
@@ -6,6 +6,9 @@ package memo_assurance_safety_risk {
6
6
  private import memo_core_common::*;
7
7
  private import memo_core_enumerations::*;
8
8
  private import memo_assurance_requirements::*;
9
+ // For HazardRelatedScenario below. Assurance may depend on architecture;
10
+ // the reverse is what the string on the scenario was avoiding.
11
+ private import memo_architecture_operational_scenarios::*;
9
12
 
10
13
  // ISO 14971 / IEC 62366-1 risk-analysis input. A model element so hazards,
11
14
  // scenarios, requirements, and DHF records can trace to the foreseeable
@@ -135,6 +138,23 @@ package memo_assurance_safety_risk {
135
138
  :> annotatedElement : SysML::ConnectionUsage;
136
139
  :>> baseType = tracesRiskLinks meta SysML::Usage;
137
140
  }
141
+ // IEC 62366-1 3.9's hazard-related use scenario: the scenario a hazard can
142
+ // arise in. It is declared HERE rather than as a `hazardReference` string
143
+ // on the scenario, which is what stood in for it: a string names nothing a
144
+ // consumer can follow, and the layering is why it was written that way —
145
+ // assurance may depend on architecture, and the scenario package cannot
146
+ // see `Hazard`. On this side both ends are visible and the dependency runs
147
+ // the direction it already runs.
148
+ connection def HazardRelatedScenario :> MemoRelationship {
149
+ end hazard : RiskItem :>> source;
150
+ end scenario : OperativeScenario :>> target;
151
+ }
152
+ abstract connection hazardRelatedScenarioLinks : HazardRelatedScenario[*];
153
+ metadata def <hazardRelatedScenario> HazardRelatedScenarioMetadata :> SemanticMetadata {
154
+ :> annotatedElement : SysML::ConnectionDefinition;
155
+ :> annotatedElement : SysML::ConnectionUsage;
156
+ :>> baseType = hazardRelatedScenarioLinks meta SysML::Usage;
157
+ }
138
158
  connection def AssessedAgainst :> MemoRelationship {
139
159
  end risk : Risk :>> source;
140
160
  end riskMatrix : RiskMatrix :>> target;
@@ -19,8 +19,10 @@ package memo_assurance_verification_validation {
19
19
  // EXECUTION state, not an editorial one; execution state belongs in an
20
20
  // attribute of its own (see RiskControlMeasure.verificationStatus), not in
21
21
  // a second spelling of `status`.
22
- verification def VerificationCase :> MemoVerificationCase {
23
- attribute methodKind : VerificationMethodKind;
22
+ // Specializes the standard library verification case as well as MEMO's
23
+ // base, rather than shadowing it — see the note on UseCase.
24
+ verification def VerificationCase :> MemoVerificationCase, VerificationCases::VerificationCase {
25
+ attribute methodKind : MemoVerificationMethodKind;
24
26
  attribute acceptanceCriteria : String;
25
27
  }
26
28
  verification def ValidationCase :> MemoVerificationCase {
@@ -32,14 +34,7 @@ package memo_assurance_verification_validation {
32
34
  // Operational validation confirms the user's goal is achieved in the
33
35
  // use environment (§5): ValidationCase validates a UseCase.
34
36
  // Safety-critical functions must trace to verification (rules/coverage).
35
- connection def ExecutesScenario :> MemoRelationship {
36
- end verificationCase : VerificationCase :>> source;
37
- end scenario : OperativeScenario :>> target;
38
- }
39
- abstract connection executesScenarioLinks : ExecutesScenario[*];
40
- metadata def <executesScenario> ExecutesScenarioMetadata :> SemanticMetadata {
41
- :> annotatedElement : SysML::ConnectionDefinition;
42
- :> annotatedElement : SysML::ConnectionUsage;
43
- :>> baseType = executesScenarioLinks meta SysML::Usage;
44
- }
37
+ // `ExecutesScenario` is native `perform` (2026-08-18): OperativeScenario
38
+ // is an `action def`, so write `perform <scenario>;` inside the
39
+ // verification case, as `InvolvesFunction` already does.
45
40
  }
@@ -34,6 +34,56 @@ package memo_core_common {
34
34
  private import memo_core_terminology::*;
35
35
  private import memo_core_enumerations::*;
36
36
 
37
+ // The metaclass-agnostic carrier for MEMO's identity fields.
38
+ //
39
+ // A `metadata def` annotates an element of ANY metaclass — restriction is
40
+ // opt-in through `annotatedElement`, and this one declares none. That is
41
+ // what the per-metaclass base definitions below cannot do: KerML will not
42
+ // let an action, port, item, requirement or connection inherit from a part
43
+ // def, which is why the identification core is currently declared ten
44
+ // times. Metadata has no such limit, so one declaration replaces ten.
45
+ //
46
+ // An element has five identities and they are not interchangeable:
47
+ //
48
+ // 1. code reference `sfnAcquireMap` native declaredName
49
+ // 2. display label "Acquire EA Map" `label`, below
50
+ // 3. number id `SFN-1` assigned, never authored
51
+ // 4. provided id `SPEC-4471` `providedId`, below
52
+ // 5. technical uuid `e2f75cf6-…` `uuid`, below
53
+ //
54
+ // 1 is native and needs no field here. 3 is generated by the compiler and
55
+ // recorded in `memo.identity.yaml`: it is monotonic, gaps are kept, and a
56
+ // retired number is never reused, so nothing authors it by hand.
57
+ //
58
+ // `label` is NOT a duplicate of the native name, which is the reading that
59
+ // nearly deleted it: the native name is a lowerCamelCase identifier and
60
+ // must be unique in its namespace, while a label is free text that
61
+ // legitimately repeats — measured 2026-08-18, 1278 labels across the
62
+ // ontology and examples share only 1216 distinct values, because seven
63
+ // different ports are all correctly labelled "TLM_MODE_IN". A label
64
+ // therefore cannot live in a name slot, native or otherwise.
65
+ //
66
+ // `providedId` is the identifier an EXTERNAL system knows the element by,
67
+ // and it exists because that system's scheme is not MEMO's: a customer
68
+ // numbering software requirements `SPEC-4471` cannot be made to use `SWR-`,
69
+ // and overwriting the generated number to please them would break the
70
+ // guarantee that numbers are never reassigned.
71
+ //
72
+ // `uuid` is machine identity. Authored values win over the registry, which
73
+ // wins over derivation — so an element whose file must move can pin its own
74
+ // uuid, which is what the attribute always advertised.
75
+ //
76
+ // Deliberately absent: `name` and `description` (native name and `doc`),
77
+ // `rationale` (standard `@Rationale`), and `id` — superseded by the
78
+ // generated number id and by `providedId`.
79
+ metadata def MemoIdentity {
80
+ attribute label : String[0..1];
81
+ attribute providedId : String[0..1];
82
+ attribute uuid : String[0..1];
83
+ attribute shortDescription : String[0..1];
84
+ attribute sourceReference : String[0..1];
85
+ }
86
+
37
87
  // ─── Single abstract part root ──────────────────────────────────
38
88
  // Every structural MEMO concept specializes MemoPart. Identity and
39
89
  // traceability are attributes of this one root — MEMO has no separate
@@ -48,8 +98,6 @@ package memo_core_common {
48
98
  // cross-cutting concern, and editorial status.
49
99
  abstract part def MemoPart {
50
100
  // identity
51
- attribute id : String;
52
- attribute uuid : String;
53
101
  attribute name : String;
54
102
  // Two description registers on every MEMO element, because views have
55
103
  // two densities. `shortDescription` is the one-line form a table cell,
@@ -58,11 +106,8 @@ package memo_core_common {
58
106
  // renders. A view picks the register that fits — it never truncates
59
107
  // the long one, because a silently clipped sentence in a DHF table is
60
108
  // a defect, not a layout choice.
61
- attribute shortDescription : String;
62
109
  attribute description : String;
63
110
  // traceability
64
- attribute rationale : String;
65
- attribute sourceReference : String;
66
111
  // editorial status and lifecycle
67
112
  attribute status : ElementStatusKind;
68
113
  attribute lifecycleState : LifecycleStateKind;
@@ -123,25 +168,15 @@ package memo_core_common {
123
168
  // Behavioral foundation: operational activities, tasks, system actions,
124
169
  // and interaction steps specialize MemoAction.
125
170
  action def MemoAction {
126
- attribute id : String;
127
- attribute uuid : String;
128
171
  attribute name : String;
129
- attribute shortDescription : String;
130
172
  attribute description : String;
131
- attribute rationale : String;
132
- attribute sourceReference : String;
133
173
  attribute status : ElementStatusKind;
134
174
  }
135
175
 
136
176
  // Boundary feature foundation for typed ports.
137
177
  port def MemoPort {
138
- attribute id : String;
139
- attribute uuid : String;
140
178
  attribute name : String;
141
- attribute shortDescription : String;
142
179
  attribute description : String;
143
- attribute rationale : String;
144
- attribute sourceReference : String;
145
180
  attribute status : ElementStatusKind;
146
181
  }
147
182
 
@@ -149,13 +184,8 @@ package memo_core_common {
149
184
  abstract interface def MemoInterface {
150
185
  end source;
151
186
  end target;
152
- attribute id : String;
153
- attribute uuid : String;
154
187
  attribute name : String;
155
- attribute shortDescription : String;
156
188
  attribute description : String;
157
- attribute rationale : String;
158
- attribute sourceReference : String;
159
189
  }
160
190
 
161
191
  // Single item foundation. Standards, hazards, stored software data, and
@@ -163,13 +193,8 @@ package memo_core_common {
163
193
  // exchanged is expressed by its use in a port or flow, not by a second
164
194
  // ontology root.
165
195
  abstract item def MemoItem {
166
- attribute id : String;
167
- attribute uuid : String;
168
196
  attribute name : String;
169
- attribute shortDescription : String;
170
197
  attribute description : String;
171
- attribute rationale : String;
172
- attribute sourceReference : String;
173
198
  attribute status : ElementStatusKind;
174
199
  // What the item CARRIES, as distinct from what it is called. Removed
175
200
  // by `595bfac` while modelling native wrappers; nothing replaced them,
@@ -190,26 +215,16 @@ package memo_core_common {
190
215
  // references; identity is carried here so use cases do not maintain a
191
216
  // partial hand-written copy of the MEMO identification core.
192
217
  abstract use case def MemoUseCase {
193
- attribute id : String;
194
- attribute uuid : String;
195
218
  attribute name : String;
196
- attribute shortDescription : String;
197
219
  attribute description : String;
198
- attribute rationale : String;
199
- attribute sourceReference : String;
200
220
  attribute status : ElementStatusKind;
201
221
  }
202
222
 
203
223
  // General constraint foundation. Executable consistency rules and
204
224
  // reusable quantitative constraints are both native constraint defs.
205
225
  abstract constraint def MemoConstraint {
206
- attribute id : String;
207
- attribute uuid : String;
208
226
  attribute name : String;
209
- attribute shortDescription : String;
210
227
  attribute description : String;
211
- attribute rationale : String;
212
- attribute sourceReference : String;
213
228
  attribute status : ElementStatusKind;
214
229
  }
215
230
 
@@ -220,13 +235,8 @@ package memo_core_common {
220
235
  // say "a need or a requirement" with one type name — before it, every end
221
236
  // that had to accept both was left untyped.
222
237
  abstract requirement def MemoRequirementElement {
223
- attribute id : String;
224
- attribute uuid : String;
225
238
  attribute name : String;
226
- attribute shortDescription : String;
227
239
  attribute description : String;
228
- attribute rationale : String;
229
- attribute sourceReference : String;
230
240
  attribute status : ElementStatusKind;
231
241
  attribute statement : String;
232
242
  }
@@ -245,13 +255,8 @@ package memo_core_common {
245
255
  // the part-based MemoPart — so, like MemoAction, it re-declares the small
246
256
  // identification core rather than inheriting it.
247
257
  verification def MemoVerificationCase {
248
- attribute id : String;
249
- attribute uuid : String;
250
258
  attribute name : String;
251
- attribute shortDescription : String;
252
259
  attribute description : String;
253
- attribute rationale : String;
254
- attribute sourceReference : String;
255
260
  attribute status : ElementStatusKind;
256
261
  }
257
262
 
@@ -264,13 +269,8 @@ package memo_core_common {
264
269
 
265
270
  state def MemoState {
266
271
  attribute stateKind : StateKind;
267
- attribute id : String;
268
- attribute uuid : String;
269
272
  attribute name : String;
270
- attribute shortDescription : String;
271
273
  attribute description : String;
272
- attribute rationale : String;
273
- attribute sourceReference : String;
274
274
  attribute status : ElementStatusKind;
275
275
  attribute modeKind : String;
276
276
  attribute entryCondition : String;
@@ -142,7 +142,7 @@ package memo_core_enumerations {
142
142
  enum maintenance;
143
143
  enum obsolete;
144
144
  }
145
- enum def VerificationMethodKind {
145
+ enum def MemoVerificationMethodKind {
146
146
  enum inspection;
147
147
  enum analytical;
148
148
  enum demonstration;