@memoarchitect/ontology 0.4.5 → 0.6.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 (255) hide show
  1. package/README.md +5 -4
  2. package/examples/connected-patient-monitor/README.md +7 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +70 -0
  4. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +3 -0
  5. package/examples/connected-patient-monitor/model/viewpoints/connected_patient_monitor_overview.sysml +6 -0
  6. package/examples/embedded-infusion-pump/README.md +7 -0
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +66 -0
  8. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +3 -0
  9. package/examples/embedded-infusion-pump/model/viewpoints/embedded_infusion_pump_overview.sysml +6 -0
  10. package/examples/extensions/README.md +16 -0
  11. package/examples/extensions/clinical/memo.package.yaml +9 -0
  12. package/examples/extensions/clinical/src/clinical_extension.sysml +3 -0
  13. package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +14 -0
  14. package/examples/extensions/clinical/src/procedures/memo_clinical_procedures.sysml +16 -0
  15. package/examples/extensions/template/memo.package.yaml +9 -0
  16. package/examples/extensions/template/src/extension.sysml +15 -0
  17. package/examples/functional-logical-physical/README.md +7 -0
  18. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +50 -0
  19. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +3 -0
  20. package/examples/functional-logical-physical/model/viewpoints/functional_logical_physical_overview.sysml +6 -0
  21. package/examples/gpca-pump/README.md +26 -0
  22. package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +1 -1
  23. package/examples/gpca-pump/memo.config.yaml +2 -2
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +1 -1
  25. package/examples/gpca-pump/methodology/gpca_scope.sysml +2 -2
  26. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +1 -1
  27. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +10 -10
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +17 -6
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +11 -11
  30. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +35 -22
  31. package/examples/gpca-pump/model/catalog/gpca_context.sysml +25 -6
  32. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +6 -6
  33. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +29 -15
  34. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +293 -169
  35. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +139 -21
  36. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +1 -1
  37. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +210 -105
  38. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +66 -69
  39. package/examples/gpca-pump/model/catalog/gpca_system.sysml +43 -76
  40. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +73 -70
  41. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +27 -27
  42. package/examples/gpca-pump/model/views/context_system_context_view.sysml +2 -2
  43. package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +2 -2
  44. package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +2 -2
  45. package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +1 -1
  46. package/examples/gpca-pump/model/views/document_rmf_view.sysml +2 -2
  47. package/examples/gpca-pump/model/views/document_sdd_view.sysml +2 -2
  48. package/examples/gpca-pump/model/views/document_threat_model_view.sysml +1 -1
  49. package/examples/gpca-pump/model/views/document_usability_view.sysml +1 -1
  50. package/examples/gpca-pump/model/views/document_vv_view.sysml +1 -1
  51. package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +1 -1
  52. package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +1 -1
  53. package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +1 -1
  54. package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +1 -1
  55. package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +1 -1
  56. package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +1 -1
  57. package/examples/gpca-pump/model/views/operational_use_case_view.sysml +6 -6
  58. package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +1 -1
  59. package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +1 -1
  60. package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +2 -2
  61. package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +1 -1
  62. package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +1 -1
  63. package/examples/ivd-laboratory-system/README.md +7 -0
  64. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +58 -0
  65. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +3 -0
  66. package/examples/ivd-laboratory-system/model/viewpoints/ivd_laboratory_system_overview.sysml +6 -0
  67. package/examples/manual-surgical-instrument/README.md +7 -0
  68. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +41 -0
  69. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +3 -0
  70. package/examples/manual-surgical-instrument/model/viewpoints/manual_surgical_instrument_overview.sysml +6 -0
  71. package/examples/multidimensional-layers/README.md +7 -0
  72. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +51 -0
  73. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +4 -0
  74. package/examples/multidimensional-layers/model/viewpoints/multidimensional_layers_overview.sysml +13 -0
  75. package/examples/reusable-instrument/README.md +7 -0
  76. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +71 -0
  77. package/examples/reusable-instrument/model/reusable_instrument.sysml +4 -0
  78. package/examples/reusable-instrument/model/viewpoints/reusable_instrument_overview.sysml +13 -0
  79. package/examples/software-only-medical-device/README.md +7 -0
  80. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +62 -0
  81. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +4 -0
  82. package/examples/software-only-medical-device/model/viewpoints/software_only_medical_device_overview.sysml +13 -0
  83. package/examples/surgical-closure-workflow/README.md +8 -0
  84. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +151 -0
  85. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +4 -0
  86. package/examples/surgical-closure-workflow/model/viewpoints/surgical_closure_workflow_overview.sysml +13 -0
  87. package/examples/surgical-robot/README.md +7 -0
  88. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +58 -0
  89. package/examples/surgical-robot/model/surgical_robot.sysml +4 -0
  90. package/examples/surgical-robot/model/viewpoints/surgical_robot_overview.sysml +13 -0
  91. package/examples/sysml-diagram-samples/README.md +32 -0
  92. package/examples/sysml-diagram-samples/memo.package.yaml +5 -0
  93. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/action_flow_view.sysml +22 -4
  94. package/examples/sysml-diagram-samples/model/samples/context_view.sysml +55 -0
  95. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/functional_flow_view.sysml +17 -6
  96. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/interconnection_view.sysml +4 -3
  97. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/operational_behaviour_view.sysml +32 -42
  98. package/examples/sysml-diagram-samples/model/samples/requirements_view.sysml +63 -0
  99. package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +109 -0
  100. package/examples/{gpca-pump → sysml-diagram-samples}/model/samples/tree_view.sysml +3 -3
  101. package/examples/sysml-diagram-samples/model/samples/use_case_view.sysml +81 -0
  102. package/examples/temperature-alarm/README.md +7 -0
  103. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +140 -0
  104. package/examples/temperature-alarm/model/temperature_alarm.sysml +4 -0
  105. package/examples/temperature-alarm/model/viewpoints/temperature_alarm_overview.sysml +13 -0
  106. package/memo.manifest.yaml +4 -1
  107. package/methodologies/default/memo.package.yaml +1 -1
  108. package/methodologies/gpca/memo.package.yaml +4 -4
  109. package/ontology/memo.package.yaml +1 -1
  110. package/ontology/memo.rendering.yaml +37 -0
  111. package/package.json +17 -7
  112. package/profile/memo.package.yaml +1 -1
  113. package/profile/templates/connected-device/starter.sysml +3 -3
  114. package/profile/templates/infusion-pump/starter.sysml +3 -3
  115. package/profile/templates/monitoring-device/starter.sysml +3 -3
  116. package/profile/templates/samd/starter.sysml +3 -3
  117. package/src/architecture/decisions/memo_decisions.sysml +1 -1
  118. package/src/architecture/{behavior → functional/behavior}/memo_behavior.sysml +12 -11
  119. package/src/architecture/{constraints → functional/constraints}/memo_constraints.sysml +2 -2
  120. package/src/architecture/functional/functions/memo_functions.sysml +81 -0
  121. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +46 -0
  122. package/src/architecture/implementation/hardware/electrical/memo_hardware_electrical.sysml +36 -0
  123. package/src/architecture/implementation/hardware/fluidic/memo_hardware_fluidic.sysml +14 -0
  124. package/src/architecture/implementation/hardware/mechanical/memo_hardware_mechanical.sysml +14 -0
  125. package/src/architecture/implementation/hardware/optical/memo_hardware_optical.sysml +11 -0
  126. package/src/architecture/implementation/hardware/sensing/memo_hardware_sensing.sysml +17 -0
  127. package/src/architecture/implementation/hardware/structure/memo_hardware_structure.sysml +12 -0
  128. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +70 -0
  129. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +80 -0
  130. package/src/architecture/implementation/ui/memo_ui.sysml +159 -0
  131. package/src/architecture/logical/interfaces/memo_interfaces.sysml +102 -0
  132. package/src/architecture/logical/structure/memo_logical_structure.sysml +150 -0
  133. package/src/architecture/operational/activities/memo_activities.sysml +86 -0
  134. package/src/architecture/operational/context/actors/memo_actors.sysml +38 -0
  135. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +64 -0
  136. package/src/architecture/operational/context/use_context/memo_use_context.sysml +53 -0
  137. package/src/architecture/operational/scenarios/memo_scenarios.sysml +116 -0
  138. package/src/architecture/operational/structure/memo_operational.sysml +26 -0
  139. package/src/architecture/operational/use_cases/memo_use_cases.sysml +67 -0
  140. package/src/architecture/operational/workflows/memo_workflows.sysml +126 -0
  141. package/src/architecture/realization/deployment/memo_deployment.sysml +90 -0
  142. package/src/architecture/{physical → realization/physical}/memo_physical_architecture.sysml +12 -1
  143. package/src/artifacts/definitions/memo_artifact_definitions.sysml +1 -1
  144. package/src/{architecture → assurance}/cybersecurity/memo_cybersecurity.sysml +14 -10
  145. package/src/assurance/human_factors/memo_human_factors.sysml +50 -0
  146. package/src/{architecture → assurance}/requirements/memo_requirements.sysml +45 -21
  147. package/src/assurance/requirements/needs/memo_needs.sysml +43 -0
  148. package/src/{architecture → assurance/safety_risk}/analysis/memo_fmea.sysml +13 -13
  149. package/src/{architecture/risk → assurance/safety_risk}/memo_arch_risk.sysml +2 -2
  150. package/src/{architecture/risk → assurance/safety_risk}/memo_risk.sysml +25 -16
  151. package/src/assurance/verification_validation/memo_assurance.sysml +49 -0
  152. package/src/compliance/artifacts/memo_artifacts.sysml +1 -1
  153. package/src/compliance/change/memo_change.sysml +2 -2
  154. package/src/compliance/dhf-templates/21cfr820/design-input.md +1 -1
  155. package/src/compliance/dhf-templates/21cfr820/design-validation.md +1 -1
  156. package/src/compliance/dhf-templates/21cfr820/user-needs.md +2 -2
  157. package/src/compliance/dhf-templates/iec-62366/urra.md +1 -1
  158. package/src/compliance/dhf-templates/iso-14971/fmea.md +1 -1
  159. package/src/compliance/dhf-templates/iso-14971/har.md +4 -4
  160. package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +1 -1
  161. package/src/compliance/dhf-templates/iso-14971/rmp.md +1 -1
  162. package/src/compliance/dhf-templates/iso-14971/rmr.md +1 -1
  163. package/src/compliance/iso14971/risk_management_file.sysml +1 -1
  164. package/src/compliance/postmarket/memo_postmarket.sysml +2 -2
  165. package/src/core/common/memo_common.sysml +123 -14
  166. package/src/core/consistency_rules/consistency_rules.sysml +2 -2
  167. package/src/core/dimensions/dimensions.sysml +45 -24
  168. package/src/core/enumerations/memo_enumerations.sysml +11 -16
  169. package/src/core/methodology_scope/methodology_scope.sysml +10 -28
  170. package/src/core/relationships/memo_relationships.sysml +178 -146
  171. package/src/core/stdlib/{collections.sysml → collections/collections.sysml} +1 -1
  172. package/src/core/stdlib/{functions.sysml → functions/functions.sysml} +1 -1
  173. package/src/core/stdlib/{scalars.sysml → scalars/scalars.sysml} +1 -1
  174. package/src/core/stdlib/{time.sysml → time/time.sysml} +1 -1
  175. package/src/core/terminology/terminology.sysml +35 -0
  176. package/src/memo_namespaces.sysml +247 -302
  177. package/src/methodology/{memo_core.sysml → core/memo_core.sysml} +19 -13
  178. package/src/methodology/{memo_gates.sysml → gates/memo_gates.sysml} +1 -1
  179. package/src/methodology/{memo_patterns.sysml → patterns/memo_patterns.sysml} +1 -1
  180. package/src/methodology/{memo_profiles.sysml → profiles/memo_profiles.sysml} +27 -35
  181. package/src/methodology/{memo_workflow.sysml → workflow/memo_workflow.sysml} +1 -1
  182. package/src/rules/closure/closure_rules.sysml +11 -11
  183. package/src/rules/coverage/coverage_rules.sysml +8 -8
  184. package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
  185. package/src/rules/lifecycle/lifecycle_rules.sysml +1 -1
  186. package/src/rules/ontology/ontology_invariants.sysml +133 -0
  187. package/src/rules/quantitative/quantitative_rules.sysml +2 -2
  188. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +189 -0
  189. package/src/viewpoints/clinical/clinical_viewpoint.sysml +0 -1
  190. package/src/viewpoints/context/context_viewpoint.sysml +1 -2
  191. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -2
  192. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +8 -8
  193. package/src/viewpoints/functional/{function_allocation_view.sysml → function_allocation_view/function_allocation_view.sysml} +1 -1
  194. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  195. package/src/viewpoints/functional/{system_functional_tree_view.sysml → system_functional_tree_view/system_functional_tree_view.sysml} +1 -1
  196. package/src/viewpoints/logical/logical_viewpoint.sysml +0 -1
  197. package/src/viewpoints/operational/operational_viewpoint.sysml +1 -2
  198. package/src/viewpoints/operational/{use_case_view.sysml → use_case_view/use_case_view.sysml} +1 -1
  199. package/src/viewpoints/physical/physical_viewpoint.sysml +0 -1
  200. package/src/viewpoints/requirements/{requirements_traceability_view.sysml → requirements_traceability_view/requirements_traceability_view.sysml} +1 -1
  201. package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
  202. package/src/viewpoints/risk/{risk_chain_view.sysml → risk_chain_view/risk_chain_view.sysml} +2 -2
  203. package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
  204. package/src/viewpoints/software/{software_architecture_view.sysml → software_architecture_view/software_architecture_view.sysml} +1 -1
  205. package/src/viewpoints/software/software_viewpoint.sysml +1 -2
  206. package/src/viewpoints/usability/usability_viewpoint.sysml +0 -1
  207. package/src/viewpoints/verification/verification_viewpoint.sysml +0 -1
  208. package/template/memo.package.yaml +1 -1
  209. package/template/src/catalog/starter.sysml +3 -3
  210. package/examples/gpca-pump/model/samples/README.md +0 -24
  211. package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +0 -9
  212. package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +0 -99
  213. package/src/architecture/assurance/memo_assurance.sysml +0 -29
  214. package/src/architecture/context/memo_context.sysml +0 -58
  215. package/src/architecture/functions/memo_functions.sysml +0 -30
  216. package/src/architecture/hardware_structure/memo_hardware_structure.sysml +0 -15
  217. package/src/architecture/interfaces/memo_interfaces.sysml +0 -103
  218. package/src/architecture/logical_structure/memo_logical_structure.sysml +0 -10
  219. package/src/architecture/operational/memo_operational.sysml +0 -51
  220. package/src/architecture/software_structure/memo_software_structure.sysml +0 -44
  221. package/src/architecture/system/memo_system_analysis.sysml +0 -54
  222. package/src/artifacts/clinical_safety_report.sysml +0 -12
  223. package/src/artifacts/cybersecurity_assessment_report.sysml +0 -12
  224. package/src/artifacts/design_change_log.sysml +0 -12
  225. package/src/artifacts/design_history_file_index.sysml +0 -12
  226. package/src/artifacts/design_input_plan.sysml +0 -12
  227. package/src/artifacts/design_output_plan.sysml +0 -12
  228. package/src/artifacts/evidence_record.sysml +0 -12
  229. package/src/artifacts/failure_mode_effects_analysis.sysml +0 -12
  230. package/src/artifacts/hazard_analysis_report.sysml +0 -12
  231. package/src/artifacts/labeling_specification.sysml +0 -12
  232. package/src/artifacts/requirements_specification.sysml +0 -12
  233. package/src/artifacts/requirements_traceability_matrix.sysml +0 -12
  234. package/src/artifacts/risk_management_plan.sysml +0 -12
  235. package/src/artifacts/software_design_description.sysml +0 -12
  236. package/src/artifacts/software_development_plan.sysml +0 -12
  237. package/src/artifacts/soup_list.sysml +0 -12
  238. package/src/artifacts/system_architecture_description.sysml +0 -12
  239. package/src/artifacts/test_protocol.sysml +0 -12
  240. package/src/artifacts/test_report.sysml +0 -12
  241. package/src/artifacts/threat_model_report.sysml +0 -12
  242. package/src/artifacts/usability_engineering_report.sysml +0 -12
  243. package/src/medical_device_library.sysml +0 -100
  244. /package/src/methodology/{memo_archetypes.sysml → archetypes/memo_archetypes.sysml} +0 -0
  245. /package/src/methodology/{memo_rules.sysml → rules/memo_rules.sysml} +0 -0
  246. /package/src/methodology/{memo_viewpoints.sysml → viewpoints/memo_viewpoints.sysml} +0 -0
  247. /package/src/viewpoints/clinical/{clinical_evidence_view.sysml → clinical_evidence_view/clinical_evidence_view.sysml} +0 -0
  248. /package/src/viewpoints/context/{system_context_view.sysml → system_context_view/system_context_view.sysml} +0 -0
  249. /package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view.sysml → cybersecurity_assessment_view/cybersecurity_assessment_view.sysml} +0 -0
  250. /package/src/viewpoints/cybersecurity/{threat_model_view.sysml → threat_model_view/threat_model_view.sysml} +0 -0
  251. /package/src/viewpoints/logical/{logical_architecture_view.sysml → logical_architecture_view/logical_architecture_view.sysml} +0 -0
  252. /package/src/viewpoints/physical/{network_topology_view.sysml → network_topology_view/network_topology_view.sysml} +0 -0
  253. /package/src/viewpoints/physical/{physical_bom_view.sysml → physical_bom_view/physical_bom_view.sysml} +0 -0
  254. /package/src/viewpoints/usability/{usability_engineering_view.sysml → usability_engineering_view/usability_engineering_view.sysml} +0 -0
  255. /package/src/viewpoints/verification/{verification_coverage_view.sysml → verification_coverage_view/verification_coverage_view.sysml} +0 -0
@@ -1,37 +1,58 @@
1
- // Multi-valued attributes collapsed to scalar pending grammar extension (ADR-1-16).
2
- // Bare import (no `private`) per ADR-1-16 fallback.
1
+ // Lifecycle and cross-cutting classification dimensions.
2
+ //
3
+ // Axis ownership (horizontal architecture layer vs. vertical assurance
4
+ // discipline) is NOT a tag here — it is encoded by package membership: every
5
+ // element is defined in exactly one axis package (memo_architecture_* xor
6
+ // memo_assurance_*), enforced by CR-ONT-045. The remaining dimensions below
7
+ // (realization stage, cross-cutting concern, element status) are genuinely
8
+ // orthogonal to the axis and to each other, and stay as metadata.
3
9
  package memo_core_dimensions {
4
10
  private import ScalarValues::*;
5
11
 
6
- private import memo_core_common::*;
7
-
8
- enum def DimensionKind {
9
- enum architecture;
10
- enum compliance;
11
- enum artifact;
12
- enum viewpointType;
13
- }
14
-
15
- part def ElementKind specializes TraceableElement {
16
- attribute kindName : String;
17
- attribute primaryDimension : DimensionKind;
12
+ // Realization stages of one element identity across the product
13
+ // lifecycle (specification through retirement). Orthogonal to the axis:
14
+ // a single identity progresses through stages without changing its owner.
15
+ enum def RealizationStageKind {
16
+ enum specified;
17
+ enum designed;
18
+ enum built;
19
+ enum configured;
20
+ enum assembled;
21
+ enum deployed;
22
+ enum operated;
23
+ enum retired;
18
24
  }
19
25
 
20
- part def ArchitectureElementKind specializes ElementKind {
21
- attribute archLayer : String;
26
+ // Cross-cutting concerns orthogonal to the axis.
27
+ enum def CrossCuttingConcernKind {
28
+ enum evidence;
29
+ enum traceability;
30
+ enum configurationManagement;
31
+ enum changeControl;
32
+ enum regulatoryCompliance;
33
+ enum clinicalPerformance;
22
34
  }
23
35
 
24
- part def ComplianceElementKind specializes ElementKind {
25
- attribute standardReference : String;
26
- attribute clause : String;
36
+ // Editorial status of the model element itself (distinct from the
37
+ // lifecycle of the thing the element describes).
38
+ enum def ElementStatusKind {
39
+ enum draft;
40
+ enum inReview;
41
+ enum approved;
42
+ enum released;
43
+ enum deprecated;
44
+ enum retired;
27
45
  }
28
46
 
29
- part def ArtifactElementKind specializes ElementKind {
30
- attribute documentTitle : String;
31
- attribute regulatoryReference : String;
47
+ // Metadata carriers for tagging non-part constructs (actions, ports,
48
+ // interfaces, items, views) with the orthogonal dimensions. Part-based
49
+ // elements carry these directly as attributes of MemoPart. Axis ownership
50
+ // is never tagged here — it is the construct's owning package.
51
+ metadata def RealizationClassification {
52
+ attribute stage : RealizationStageKind[0..1];
32
53
  }
33
54
 
34
- part def ViewpointTypeKind specializes ElementKind {
35
- attribute typeId : String;
55
+ metadata def CrossCuttingClassification {
56
+ attribute crossCutting : CrossCuttingConcernKind[0..*];
36
57
  }
37
58
  }
@@ -54,12 +54,6 @@ package memo_core_enumerations {
54
54
  enum should;
55
55
  enum will;
56
56
  }
57
- enum def ArcadiaLayerKind {
58
- enum operational;
59
- enum system;
60
- enum logical;
61
- enum physical;
62
- }
63
57
  enum def InterfaceKind {
64
58
  enum data;
65
59
  enum control;
@@ -227,6 +221,16 @@ package memo_core_enumerations {
227
221
  enum assumption;
228
222
  enum guarantee;
229
223
  }
224
+ enum def InterfaceItemKind {
225
+ enum data;
226
+ enum command;
227
+ enum signal;
228
+ enum event;
229
+ enum material;
230
+ enum energy;
231
+ enum fluid;
232
+ enum mechanicalForce;
233
+ }
230
234
  enum def PropertyLanguageKind {
231
235
  enum naturalLanguage;
232
236
  enum pseudoFormal;
@@ -370,16 +374,7 @@ package memo_core_enumerations {
370
374
  enum device;
371
375
  enum informationArtifact;
372
376
  }
373
- enum def ScenarioKind {
374
- enum nominal;
375
- enum degraded;
376
- enum emergency;
377
- enum maintenance;
378
- enum error;
379
- enum timeout;
380
- enum alarm;
381
- }
382
- enum def FunctionalChainKind {
377
+ enum def FunctionalFlowKind {
383
378
  enum nominal;
384
379
  enum error;
385
380
  enum degraded;
@@ -1,44 +1,26 @@
1
- // Methodology scope helpers per Epic B-3.
2
- // Multi-valued attributes collapsed to scalar pending grammar extension (ADR-1-15).
3
- // Bare imports (no `private`) per ADR-1-16 fallback.
4
- // Instances use repeated scalar attribute usages to enumerate set entries
5
- // (see ADR-1-15 example: `attribute :>> includedArchLayer = "operational";`).
1
+ // Methodology scope helpers.
2
+ // Instances use repeated scalar attribute usages to enumerate set entries, for
3
+ // example: `attribute :>> includedArchLayer = "operational";`.
6
4
  package memo_core_methodology_scope {
7
5
  private import ScalarValues::*;
8
6
 
9
7
  private import memo_core_common::*;
10
8
  private import memo_core_dimensions::*;
11
9
 
12
- part def MethodologyLayerSet specializes TraceableElement {
10
+ part def MethodologyLayerSet specializes MemoPart {
13
11
  attribute setName : String;
14
12
  attribute layer : String;
15
13
  }
16
14
 
17
- part def MethodologyStandardSet specializes TraceableElement {
18
- attribute setName : String;
19
- attribute standardReference : String;
20
- }
21
-
22
- part def MethodologyArtifactSet specializes TraceableElement {
23
- attribute setName : String;
24
- attribute artifactKind : String;
25
- }
26
-
27
- part def MethodologyViewpointTypeSet specializes TraceableElement {
28
- attribute setName : String;
29
- attribute viewpointType : String;
30
- }
31
-
32
- part def MethodologyScope specializes TraceableElement {
15
+ part def MethodologyScope specializes MemoPart {
33
16
  attribute scopeName : String;
34
- attribute includedArchLayer : String;
35
- attribute includedStandard : String;
36
- attribute includedArtifactKind : String;
37
- attribute includedViewpointType : String;
38
- attribute excludedKind : String;
17
+ attribute includedArchLayer : String[0..*];
18
+ // Qualified package names may resolve to MEMO, project, supplier, or
19
+ // other externally provided ontology modules.
20
+ attribute includedModule : String[0..*];
39
21
  }
40
22
 
41
- part def ElementKindAlias specializes TraceableElement {
23
+ part def ElementKindAlias specializes MemoPart {
42
24
  attribute methodTerm : String;
43
25
  attribute concreteKind : String;
44
26
  attribute concreteOntology : String;
@@ -5,225 +5,257 @@ package memo_core_relationships {
5
5
  private import memo_core_enumerations::*;
6
6
 
7
7
  // All MEMO relations are native SysML v2 `connection def`s (each is a
8
- // Connection/Association), specializing the SemanticLink base. The
8
+ // Connection/Association), specializing the MemoRelationship base. The
9
9
  // relationship name is the verb; the RelationshipRegistry derives the
10
10
  // navigable type as camelCase(name) and navigation is bidirectional.
11
- abstract connection def SemanticLink { attribute linkStatus : LinkStatusKind; }
11
+ // Structural properties of a relation, declared here so authoring and
12
+ // validation read them from the ontology instead of assuming them. Both are
13
+ // unset on the base and carry the conservative reading: a relation forbids
14
+ // self-links and forbids repeats unless it says otherwise. A subtype opts
15
+ // out by redefining, e.g. `attribute :>> isReflexive = true;`.
16
+ abstract connection def MemoRelationship {
17
+ attribute linkStatus : LinkStatusKind;
18
+ doc /* True when an element may be related to itself by this relation.
19
+ * Unset is read as false. */
20
+ attribute isReflexive : Boolean;
21
+ doc /* True when at most one link of this type may join the same ordered
22
+ * pair of elements — KerML Feature::isUnique over the relation.
23
+ * Unset is read as true. */
24
+ attribute isUnique : Boolean;
25
+ }
26
+
27
+ // The general relation that can join any two model elements, whatever
28
+ // their metaclass. Most specific relations type their ends against a
29
+ // foundation (MemoPart, VerifiableElement, …). A small number of specific
30
+ // cross-metaclass relations leave an end untyped because their accepted
31
+ // constructs have no shared MEMO base; their names and attributes still
32
+ // carry a precise engineering meaning. MemoLink leaves both ends untyped
33
+ // and adds no domain-specific semantics, which is what makes it universal.
34
+ //
35
+ // It is deliberately the weakest relation in the ontology. Reach for it
36
+ // only when no specific relation carries the meaning, and say why in
37
+ // linkRationale — an untyped link with no stated reason is an audit gap,
38
+ // not a model fact.
39
+ connection def MemoLink :> MemoRelationship {
40
+ doc /* Generic association between any two model elements. */
41
+ attribute linkRationale : String;
42
+ end linkSource;
43
+ end linkTarget;
44
+ }
12
45
 
13
- connection def DerivesFrom :> SemanticLink {
46
+ connection def DerivesFrom :> MemoRelationship {
14
47
  // Drivers include needs and hazards (ISO 14971: hazards drive
15
- // requirements), so the source stays at TraceableElement
16
- end sourceDriver : TraceableElement;
48
+ // requirements), so the source stays at MemoPart
49
+ end sourceDriver : MemoPart;
17
50
  end targetRequirement : VerifiableElement;
18
51
  }
19
- connection def SatisfiedBy :> SemanticLink {
52
+ connection def SatisfiedBy :> MemoRelationship {
20
53
  end requiredElement : VerifiableElement;
21
54
  end satisfyingElement : ArchitectureElement;
22
55
  }
23
- connection def MitigatesHazard :> SemanticLink {
24
- end riskControl : VerifiableElement;
25
- end mitigatedHazard : TraceableElement;
26
- }
27
- connection def AllocatedTo :> SemanticLink {
56
+ // Mitigates unifies the control/action → risk-element edges of the
57
+ // ISO 14971 / FMEA / FTA / cyber chains — MitigatesHazard,
58
+ // MitigatesVulnerability, MitigatedByControl, BrokenByControl,
59
+ // AddressedByAction — keyed by mitigationKind. control is the mitigating
60
+ // control/action; mitigatedElement is the hazard/vulnerability/failure/cut set.
61
+ enum def MitigationKind {
62
+ enum hazard;
63
+ enum vulnerability;
64
+ enum failureMode;
65
+ enum cutSet;
66
+ enum fmeaAction;
67
+ }
68
+ connection def Mitigates :> MemoRelationship {
69
+ attribute mitigationKind : MitigationKind;
70
+ end control : VerifiableElement;
71
+ end mitigatedElement : MemoPart;
72
+ }
73
+ connection def AllocatedTo :> MemoRelationship {
28
74
  end function : ArchitectureElement;
29
75
  end allocatedElement : ArchitectureElement;
30
76
  }
31
- connection def RealizesInterface :> SemanticLink {
32
- end logicalInterface : InterfaceElement;
33
- end physicalInterface : InterfaceElement;
34
- }
35
- connection def VerifiedBy :> SemanticLink {
77
+ // Realizes is the single realization relation (realizing/concrete element →
78
+ // realized/abstract element). It unifies RealizesInterface,
79
+ // RealizesComponentExchange, RealizedByArchitecture, RealizesScenario,
80
+ // ModuleRealizesLogical, ComponentRealizesModule, PhysicalModuleRealizesLogical,
81
+ // Implements{Component,Procedure}, UIRealizesFunctional,
82
+ // FunctionalRealizesOper{ative,ational} and ScenarioRealizesUseCase.
83
+ connection def Realizes :> MemoRelationship {
84
+ end realizing : MemoPart;
85
+ end realized : MemoPart;
86
+ }
87
+ connection def VerifiedBy :> MemoRelationship {
36
88
  // Requirements, risk controls, and architecture components are
37
89
  // all legitimate verification targets
38
- end verificationTarget : TraceableElement;
39
- end verificationCase : VerifiableElement;
90
+ end verificationTarget : MemoPart;
91
+ end verificationCase : MemoVerificationCase;
40
92
  }
41
- connection def ProducesEvidence :> SemanticLink {
42
- end producer : VerifiableElement;
43
- end producedEvidence : EvidenceElement;
93
+ connection def ProducesEvidence :> MemoRelationship {
94
+ end producer : MemoVerificationCase;
95
+ end producedEvidence : MemoEvidence;
44
96
  }
45
- connection def IncludedIn :> SemanticLink {
46
- end sourceElement : TraceableElement;
47
- end targetView : TraceableElement;
97
+ connection def IncludedIn :> MemoRelationship {
98
+ end sourceElement : MemoPart;
99
+ end targetView : MemoPart;
48
100
  }
49
- connection def Precedes :> SemanticLink {
101
+ connection def Precedes :> MemoRelationship {
50
102
  attribute sameStepRequired : Boolean;
51
103
  attribute precedenceRationale : String;
52
104
  end predecessor : ArchitectureElement;
53
105
  end successor : ArchitectureElement;
54
106
  }
55
- connection def ResolvesToMethodology :> SemanticLink {
56
- end boundModelElement : TraceableElement;
57
- end resolvedMethodology : TraceableElement;
107
+ connection def ResolvesToMethodology :> MemoRelationship {
108
+ end boundModelElement : MemoPart;
109
+ end resolvedMethodology : MemoPart;
58
110
  }
59
111
 
60
112
  // ISO 14971 risk chain — distinct sequence-of-events relations over risk elements.
61
- connection def TracesRisk :> SemanticLink {
62
- end sourceRiskElement : TraceableElement;
63
- end targetRiskElement : TraceableElement;
113
+ connection def TracesRisk :> MemoRelationship {
114
+ end sourceRiskElement : MemoPart;
115
+ end targetRiskElement : MemoPart;
64
116
  }
65
- connection def AssessedAgainst :> SemanticLink {
66
- end risk : TraceableElement;
67
- end riskMatrix : TraceableElement;
117
+ connection def AssessedAgainst :> MemoRelationship {
118
+ end risk : MemoPart;
119
+ end riskMatrix : MemoPart;
68
120
  }
69
121
 
70
- connection def ThreatenedBy :> SemanticLink {
122
+ connection def ThreatenedBy :> MemoRelationship {
71
123
  attribute threatRole : String;
72
124
  end protectedAsset : ArchitectureElement;
73
125
  end realizedThreat : RequirementDriver;
74
126
  }
75
- connection def Exploits :> SemanticLink {
127
+ connection def Exploits :> MemoRelationship {
76
128
  end realizedThreat : RequirementDriver;
77
- end enablingVulnerability : TraceableElement;
129
+ end enablingVulnerability : MemoPart;
78
130
  }
79
- connection def RealizedByScenario :> SemanticLink {
131
+ connection def RealizedByScenario :> MemoRelationship {
80
132
  end realizedThreat : RequirementDriver;
81
- end scenario : TraceableElement;
82
- }
83
- connection def MitigatesVulnerability :> SemanticLink {
84
- end enablingVulnerability : TraceableElement;
85
- end mitigation : VerifiableElement;
133
+ end scenario : MemoPart;
86
134
  }
87
- connection def DerivesCyberRequirement :> SemanticLink {
135
+ connection def DerivesCyberRequirement :> MemoRelationship {
88
136
  end sourceThreatOrRisk : RequirementDriver;
89
137
  end targetRequirement : VerifiableElement;
90
138
  }
91
- connection def ImpactsSafety :> SemanticLink {
139
+ connection def ImpactsSafety :> MemoRelationship {
92
140
  attribute tracePurpose : String;
93
- end cyberElement : TraceableElement;
94
- end safetyElement : TraceableElement;
141
+ end cyberElement : MemoPart;
142
+ end safetyElement : MemoPart;
95
143
  }
96
- connection def CrossesTrustBoundary :> SemanticLink {
144
+ connection def CrossesTrustBoundary :> MemoRelationship {
97
145
  attribute crossingKind : InterfaceKind;
98
146
  end boundary : InterfaceElement;
99
- end crossingItem : TraceableElement;
147
+ end crossingItem : MemoPart;
100
148
  }
101
149
 
102
- connection def DerivesInto :> SemanticLink {
103
- end parentRequirement : VerifiableElement;
104
- end childRequirement : VerifiableElement;
150
+ connection def Validates :> MemoRelationship {
151
+ // Validation targets include use cases and other behavioural elements,
152
+ // so the target remains untyped across SysML metaclass families.
153
+ end validationTarget;
154
+ end validationCase : MemoVerificationCase;
105
155
  }
106
- connection def DeploysOnto :> SemanticLink {
107
- attribute deploymentKind : DeploymentKind;
108
- end softwareComponent : ArchitectureElement;
109
- end hostAssembly : ArchitectureElement;
110
- }
111
- connection def Validates :> SemanticLink {
112
- end validationTarget : VerifiableElement;
113
- end validationCase : VerifiableElement;
114
- }
115
- connection def DependsOnSoup :> SemanticLink {
156
+ connection def DependsOnSoup :> MemoRelationship {
116
157
  end component : ArchitectureElement;
117
- end soupItem : TraceableElement;
158
+ end soupItem : MemoPart;
118
159
  }
119
160
 
120
- // Performs, ContributesToCapability, SequencesStep, DerivesSystemNeed
121
- // (operational-entity ends) and RealizesCapability, InvolvesFunction,
122
- // RealizesScenario (functional-chain ends) live in their owning
123
- // architecture layer packages — memo::architecture::operational and
124
- // memo::architecture::system respectively — because core must not
125
- // depend on architecture-layer types. See memo_operational.sysml and
126
- // memo_system_analysis.sysml.
161
+ // Performs unifies the former Performs / PerformsActivity / PerformsFunction
162
+ // synonyms. The performer (operational entity, actor, or system action) and
163
+ // the performed element (activity or function) are distinguished by the end
164
+ // instance types, so generic MemoPart ends keep this in core without a
165
+ // dependency on architecture-layer types.
166
+ connection def Performs :> MemoRelationship {
167
+ end performer : MemoPart;
168
+ end performed : MemoPart;
169
+ }
170
+
171
+ // Enables unifies the former EnablesWorkflow / EnablesActivity synonyms
172
+ // (an enabling system/function enables a workflow/activity).
173
+ connection def Enables :> MemoRelationship {
174
+ end enabling : MemoPart;
175
+ end enabled : MemoPart;
176
+ }
127
177
 
128
- connection def HostedBy :> SemanticLink {
178
+ connection def HostedBy :> MemoRelationship {
129
179
  end processingNode : ArchitectureElement;
130
180
  end hostAssembly : ArchitectureElement;
131
181
  }
132
- connection def RealizesComponentExchange :> SemanticLink {
133
- end physicalLink : ArchitectureElement;
134
- end componentExchange : ArchitectureElement;
135
- }
136
182
 
137
- connection def HasFailureMode :> SemanticLink {
183
+ connection def HasFailureMode :> MemoRelationship {
138
184
  end element : ArchitectureElement;
139
- end failureMode : TraceableElement;
140
- }
141
- connection def CausesEffect :> SemanticLink {
142
- end failureMode : TraceableElement;
143
- end failureEffect : TraceableElement;
144
- }
145
- connection def CausedBy :> SemanticLink {
146
- end failureMode : TraceableElement;
147
- end failureCause : TraceableElement;
148
- }
149
- connection def DetectedBy :> SemanticLink {
150
- end failureMode : TraceableElement;
151
- end detectionMethod : TraceableElement;
152
- }
153
- connection def AddressedByAction :> SemanticLink {
154
- end failureMode : TraceableElement;
155
- end fmeaAction : VerifiableElement;
185
+ end failureMode : MemoPart;
186
+ }
187
+ // Causes unifies the former causal edges of the ISO 14971 / FMEA / FTA
188
+ // chains — CausesEffect, CausedBy, ContributesToHazard, LeadsToHazard,
189
+ // OriginatesFrom, UseErrorLeadsToHazard — keyed by causeKind. cause is the
190
+ // originating element, effect the consequence.
191
+ enum def CauseKind {
192
+ enum failureCausesEffect;
193
+ enum failureCausedBy;
194
+ enum contributesToHazard;
195
+ enum leadsToHazard;
196
+ enum originatesFrom;
197
+ enum useErrorLeadsToHazard;
198
+ }
199
+ connection def Causes :> MemoRelationship {
200
+ attribute causeKind : CauseKind;
201
+ end cause : MemoPart;
202
+ end effect : MemoPart;
203
+ }
204
+ connection def DetectedBy :> MemoRelationship {
205
+ end failureMode : MemoPart;
206
+ end detectionMethod : MemoPart;
156
207
  }
157
208
 
158
- connection def InputToGate :> SemanticLink {
159
- end input : TraceableElement;
160
- end gate : TraceableElement;
161
- }
162
- connection def ProducesEvent :> SemanticLink {
163
- end gate : TraceableElement;
164
- end eventElement : TraceableElement;
209
+ connection def InputToGate :> MemoRelationship {
210
+ end input : MemoPart;
211
+ end gate : MemoPart;
165
212
  }
166
- connection def OriginatesFrom :> SemanticLink {
167
- end eventElement : TraceableElement;
168
- end origin : ArchitectureElement;
213
+ connection def ProducesEvent :> MemoRelationship {
214
+ end gate : MemoPart;
215
+ end eventElement : MemoPart;
169
216
  }
170
- connection def ContainsEvent :> SemanticLink {
171
- end cutSet : TraceableElement;
172
- end eventElement : TraceableElement;
217
+ connection def ContainsEvent :> MemoRelationship {
218
+ end cutSet : MemoPart;
219
+ end eventElement : MemoPart;
173
220
  }
174
221
 
175
- connection def Decides :> SemanticLink {
176
- end decision : TraceableElement;
177
- end affectedElement : TraceableElement;
222
+ connection def Decides :> MemoRelationship {
223
+ end decision : MemoPart;
224
+ end affectedElement : MemoPart;
178
225
  }
179
226
 
180
- connection def Composes :> SemanticLink {
181
- end parent : ArchitectureElement;
182
- end child : ArchitectureElement;
183
- }
184
- connection def AllocatesExchange :> SemanticLink {
185
- end functionalFlow : ArchitectureElement;
186
- end componentExchange : ArchitectureElement;
227
+ // Composes is the single whole/part decomposition relation. It unifies the
228
+ // former ComposesLogical / AssemblyComprises / Contains{Component,Element} /
229
+ // {Workflow,Task,Activity,Scenario}Comprises* / FlowComprisesSpec /
230
+ // Collection membership is carried by the end instance.
231
+ // types, so the ends are generic MemoPart.
232
+ connection def Composes :> MemoRelationship {
233
+ end parent : MemoPart;
234
+ end child : MemoPart;
187
235
  }
188
236
 
189
- connection def ContributesToHazard :> SemanticLink {
190
- end failureMode : TraceableElement;
191
- end hazard : TraceableElement;
192
- }
193
- connection def LeadsToHazard :> SemanticLink {
194
- end topEvent : TraceableElement;
195
- end hazard : TraceableElement;
196
- }
197
- connection def IdentifiesHazard :> SemanticLink {
198
- end deviation : TraceableElement;
199
- end hazard : TraceableElement;
237
+ connection def IdentifiesHazard :> MemoRelationship {
238
+ end deviation : MemoPart;
239
+ end hazard : MemoPart;
200
240
  }
201
- connection def AnalyzedBy :> SemanticLink {
241
+ connection def AnalyzedBy :> MemoRelationship {
202
242
  end element : ArchitectureElement;
203
- end analysisArtifact : TraceableElement;
204
- }
205
- connection def MitigatedByControl :> SemanticLink {
206
- end failureMode : TraceableElement;
207
- end riskControl : VerifiableElement;
208
- }
209
- connection def BrokenByControl :> SemanticLink {
210
- end cutSet : TraceableElement;
211
- end riskControl : VerifiableElement;
243
+ end analysisArtifact : AnalysisArtifact;
212
244
  }
213
245
 
214
- connection def Changes :> SemanticLink {
215
- end changeRequest : TraceableElement;
216
- end changedElement : TraceableElement;
246
+ connection def Changes :> MemoRelationship {
247
+ end changeRequest : MemoPart;
248
+ end changedElement : MemoPart;
217
249
  }
218
- connection def TestedByUsability :> SemanticLink {
219
- end uiElementOrTask : TraceableElement;
250
+ connection def TestedByUsability :> MemoRelationship {
251
+ end uiElementOrTask : MemoPart;
220
252
  end usabilityTest : VerifiableElement;
221
253
  }
222
- connection def FeedsBackTo :> SemanticLink {
223
- end feedbackItem : TraceableElement;
224
- end designElement : TraceableElement;
254
+ connection def FeedsBackTo :> MemoRelationship {
255
+ end feedbackItem : MemoPart;
256
+ end designElement : MemoPart;
225
257
  }
226
- connection def BindsToInterface :> SemanticLink {
258
+ connection def BindsToInterface :> MemoRelationship {
227
259
  end portElement : InterfaceElement;
228
260
  end boundInterface : InterfaceElement;
229
261
  }
@@ -1,4 +1,4 @@
1
- // Re-export-only wrapper per ADR-1-13. No new types.
1
+ // Re-export-only wrapper. No new types.
2
2
  package memo_core_stdlib_collections {
3
3
  private import ScalarValues::*;
4
4
 
@@ -1,4 +1,4 @@
1
- // Re-export-only wrapper per ADR-1-13. No new types.
1
+ // Re-export-only wrapper. No new types.
2
2
  package memo_core_stdlib_functions {
3
3
  private import ScalarValues::*;
4
4
 
@@ -1,4 +1,4 @@
1
- // Re-export-only wrapper per ADR-1-13. No new types.
1
+ // Re-export-only wrapper. No new types.
2
2
  package memo_core_stdlib_scalars {
3
3
  private import ScalarValues::*;
4
4
 
@@ -1,4 +1,4 @@
1
- // Re-export-only wrapper per ADR-1-13. No new types.
1
+ // Re-export-only wrapper. No new types.
2
2
  package memo_core_stdlib_time {
3
3
  private import ScalarValues::*;
4
4
 
@@ -0,0 +1,35 @@
1
+ // Terminology and identification kernel. MEMO stays
2
+ // terminology-neutral: any concept may carry several TerminologyCodes binding
3
+ // it to SNOMED CT, GMDN, EMDN, UDI/GUDID, ISO/IEEE 11073 nomenclature, or a
4
+ // local catalog — never a single ambiguous `code : String`.
5
+ package memo_core_terminology {
6
+ private import ScalarValues::*;
7
+
8
+ // One coding of a concept in one code system. Mirrors the FHIR Coding
9
+ // datatype (system/version/code/display) so FHIR mappings stay lossless.
10
+ attribute def TerminologyCode {
11
+ attribute systemUri : String;
12
+ attribute code : String;
13
+ attribute display : String;
14
+ attribute codeSystemVersion : String;
15
+ attribute designation : String;
16
+ }
17
+
18
+ // A device-identity carrier per IMDRF UDI guidance: the DI portion
19
+ // belongs to the device definition, PI portions to the instance.
20
+ attribute def UdiCarrier {
21
+ attribute issuingAgency : String;
22
+ attribute deviceIdentifier : String;
23
+ attribute carrierHRF : String;
24
+ attribute carrierAIDC : String;
25
+ }
26
+
27
+ // A reference into an external registry or document (regulatory listing,
28
+ // standard clause, catalog page) with enough context to resolve it.
29
+ attribute def ExternalReference {
30
+ attribute referenceKind : String;
31
+ attribute identifier : String;
32
+ attribute uri : String;
33
+ attribute section : String;
34
+ }
35
+ }