@memoarchitect/ontology 0.7.0 → 0.8.22

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 (204) hide show
  1. package/README.md +4 -2
  2. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
  3. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
  4. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  5. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
  6. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
  7. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
  8. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
  9. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
  10. package/examples/gpca-pump/model/catalog/gpca_context.sysml +9 -0
  11. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +9 -5
  12. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
  13. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +82 -58
  14. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
  15. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
  16. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  17. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -2
  18. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -331
  19. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
  20. package/examples/gpca-pump/model/catalog/project.sysml +5 -0
  21. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +1 -1
  22. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +1 -1
  23. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +1 -1
  24. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +1 -1
  25. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +2 -2
  26. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +1 -1
  27. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +1 -1
  28. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +1 -1
  29. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +2 -2
  30. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -2
  31. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -2
  32. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +1 -1
  33. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +1 -1
  34. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +2 -2
  35. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -2
  36. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +4 -2
  37. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +1 -1
  38. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +3 -2
  39. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  40. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
  41. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
  42. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
  43. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
  44. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -5
  45. package/examples/ros-mobile-robot/README.md +40 -0
  46. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  47. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  48. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  49. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
  50. package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
  51. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
  52. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -60
  53. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
  54. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -15
  55. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -9
  56. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +42 -66
  57. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +56 -66
  58. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +26 -55
  59. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +3 -6
  60. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +0 -18
  61. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +51 -82
  62. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +21 -31
  63. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -8
  64. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -21
  65. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
  66. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
  67. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
  68. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
  69. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  70. package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
  71. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -1
  72. package/extensions/LICENSES/MIT.txt +19 -0
  73. package/extensions/README.md +94 -0
  74. package/extensions/aadl/memo.package.yaml +18 -0
  75. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  76. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  77. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  78. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  79. package/extensions/cloud/memo.package.yaml +18 -0
  80. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  81. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  82. package/extensions/container/memo.package.yaml +18 -0
  83. package/extensions/container/src/container_extension.sysml +37 -0
  84. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  85. package/extensions/messaging/memo.package.yaml +18 -0
  86. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  87. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  88. package/extensions/ros/memo.package.yaml +18 -0
  89. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  90. package/extensions/ros/src/ros_extension.sysml +200 -0
  91. package/extensions/template/src/extension.sysml +37 -0
  92. package/memo.manifest.yaml +13 -2
  93. package/methodologies/default/memo.package.yaml +1 -1
  94. package/methodologies/gpca/memo.package.yaml +1 -1
  95. package/ontology/memo.package.yaml +1 -1
  96. package/package.json +5 -3
  97. package/profile/memo.package.yaml +1 -1
  98. package/src/architecture/decisions/memo_decisions.sysml +23 -2
  99. package/src/architecture/functional/behavior/memo_behavior.sysml +49 -21
  100. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  101. package/src/architecture/functional/functions/memo_functions.sysml +91 -34
  102. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
  103. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +37 -10
  104. package/src/architecture/implementation/ui/memo_ui.sysml +78 -38
  105. package/src/architecture/logical/interfaces/memo_interfaces.sysml +63 -11
  106. package/src/architecture/logical/structure/memo_logical_structure.sysml +21 -20
  107. package/src/architecture/operational/activities/memo_activities.sysml +10 -3
  108. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
  109. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
  110. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
  111. package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
  112. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
  113. package/src/architecture/operational/workflows/memo_workflows.sysml +29 -10
  114. package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
  115. package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
  116. package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
  117. package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
  118. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  119. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  120. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  121. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  122. package/src/artifacts/standards/iec_60812.sysml +51 -0
  123. package/src/artifacts/standards/iec_62304.sysml +210 -0
  124. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  125. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  126. package/src/artifacts/standards/iso_13485.sysml +113 -0
  127. package/src/artifacts/standards/iso_14971.sysml +94 -0
  128. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  129. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  130. package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
  131. package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
  132. package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
  133. package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
  134. package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
  135. package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
  136. package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
  137. package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
  138. package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
  139. package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
  140. package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
  141. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
  142. package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
  143. package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
  144. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
  145. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  146. package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
  147. package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
  148. package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
  149. package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
  150. package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
  151. package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
  152. package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
  153. package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
  154. package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
  155. package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
  156. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
  157. package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
  158. package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
  159. package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
  160. package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
  161. package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
  162. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  163. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  164. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  165. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  166. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
  167. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  168. package/src/assurance/requirements/memo_requirements.sysml +5 -2
  169. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  170. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  171. package/src/assurance/safety_risk/memo_risk.sysml +78 -7
  172. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
  173. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  174. package/src/core/annotations/memo_annotations.sysml +25 -6
  175. package/src/core/common/memo_common.sysml +121 -16
  176. package/src/core/consistency_rules/consistency_rules.sysml +1 -1
  177. package/src/core/dimensions/dimensions.sysml +12 -0
  178. package/src/core/enumerations/memo_enumerations.sysml +60 -14
  179. package/src/core/relationships/memo_relationships.sysml +199 -196
  180. package/src/memo_namespaces.sysml +30 -0
  181. package/src/methodology/core/memo_core.sysml +24 -0
  182. package/src/methodology/profiles/memo_profiles.sysml +1 -1
  183. package/src/rules/ontology/ontology_invariants.sysml +213 -1
  184. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +3 -3
  185. package/src/viewpoints/clinical/clinical_viewpoint.sysml +1 -1
  186. package/src/viewpoints/context/context_viewpoint.sysml +1 -1
  187. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -1
  188. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +1 -0
  189. package/src/viewpoints/functional/functional_viewpoint.sysml +1 -1
  190. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +1 -1
  191. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +1 -1
  192. package/src/viewpoints/operational/operational_viewpoint.sysml +1 -1
  193. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +1 -1
  194. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +1 -1
  195. package/src/viewpoints/verification/verification_viewpoint.sysml +1 -1
  196. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +1 -1
  197. package/examples/extensions/README.md +0 -16
  198. package/examples/extensions/template/src/extension.sysml +0 -15
  199. package/examples/gpca-pump/gpca-pump.kpar +0 -0
  200. /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
  201. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  202. /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
  203. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  204. /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
@@ -40,12 +40,15 @@ package memo_assurance_requirements {
40
40
  enum designControl;
41
41
  }
42
42
 
43
- requirement def Requirement specializes VerifiableElement {
43
+ requirement def Requirement specializes MemoRequirement {
44
44
  attribute requirementKind : RequirementKind;
45
45
  attribute statement : String;
46
46
  attribute sourceKind : RequirementSourceKind;
47
47
  attribute concernKind : ConcernKind;
48
- attribute requirementStatus : RequirementStatusKind;
48
+ // Editorial state is the inherited `status : ElementStatusKind` — the
49
+ // one status vocabulary in MEMO. Whether a requirement is implemented,
50
+ // verified, or validated is read from its Realizes / VerifiedBy /
51
+ // Validates links, not restated here.
49
52
  attribute acceptanceCriteria : String;
50
53
  attribute subjectDescription : String;
51
54
  attribute actorDescription : String;
@@ -27,7 +27,7 @@ package memo_assurance_requirements_needs {
27
27
  enum designControl;
28
28
  }
29
29
 
30
- requirement def Need specializes MemoNeed, RequirementDriver {
30
+ requirement def Need specializes MemoNeed {
31
31
  attribute needKind : NeedKind;
32
32
  // user need (IEC 62366-1)
33
33
  attribute userPopulationReference : String;
@@ -1,37 +1,57 @@
1
1
  package memo_assurance_safety_risk_analysis {
2
+ private import Metaobjects::SemanticMetadata;
2
3
  private import ScalarValues::*;
4
+ private import memo_core_relationships::*; // MemoRelationship
3
5
 
4
6
  private import memo_core_common::*;
5
7
  private import memo_core_enumerations::*;
6
- item def FMEAWorksheet specializes AnalysisArtifact {
8
+ private import memo_assurance_safety_risk::*; // RiskItem
9
+ part def FMEAWorksheet specializes AnalysisArtifact {
7
10
  attribute analysisScope : String;
8
11
  attribute standardReference : String;
9
12
  attribute analysisBasis : String;
10
13
  attribute revisionDate : String;
11
14
  attribute reviewer : String;
12
15
  }
13
- item def FailureMode specializes MemoPart {
16
+ // An FMEA worksheet row states, on one line, what fails, what that does,
17
+ // how likely it is, and what controls it. The RPN triple carries the
18
+ // *scoring*; `effect` and `probability` carry the two facts a reader of the
19
+ // row needs in words. They are summaries, not replacements: the modelled
20
+ // form of an effect is a FailureEffect linked by Causes, and the modelled
21
+ // form of a control is a RiskControlMeasure linked by
22
+ // Mitigates(mitigationKind = failureMode) — traversable as
23
+ // `traverse: incoming mitigates`. MEMO deliberately does not add a second
24
+ // failure-mode-to-control relation; one whole/part and one mitigation
25
+ // relation is the lean shape the rest of the ontology already uses.
26
+ item def FailureMode specializes RiskItem {
14
27
  attribute failureModeKind : FailureModeKind;
28
+ doc /* One-line statement of what this failure does, for the worksheet
29
+ * row. The structured form is a FailureEffect. */
30
+ attribute effect : String[0..1];
15
31
  attribute severityRating : Integer;
32
+ doc /* Qualitative likelihood, the ISO 14971 register. `occurrenceRating`
33
+ * is the same fact as an FMEA score; both are kept because an FMEA
34
+ * reports the score and a risk file reports the qualitative band. */
35
+ attribute probability : ProbabilityKind[0..1];
16
36
  attribute occurrenceRating : Integer;
17
37
  attribute detectionRating : Integer;
18
38
  attribute rpn : Integer;
19
39
  attribute criticality : CriticalityKind;
20
40
  }
21
- item def FailureEffect specializes MemoPart {
41
+ item def FailureEffect specializes RiskItem {
22
42
  attribute effectLevel : FailureEffectLevelKind;
23
43
  attribute effectOnPatient : String;
24
44
  attribute effectOnOperator : String;
25
45
  attribute effectOnSystem : String;
26
46
  attribute severity : SeverityKind;
27
47
  }
28
- item def FailureCause specializes MemoPart {
48
+ item def FailureCause specializes RiskItem {
29
49
  attribute causeCategory : FailureCauseCategoryKind;
30
50
  attribute causeDescription : String;
31
51
  attribute occurrenceRating : ProbabilityKind;
32
52
  attribute preventionMethod : String;
33
53
  }
34
- item def DetectionMethod specializes MemoPart {
54
+ part def DetectionMethod specializes MemoPart {
35
55
  attribute methodKind : DetectionMethodKind;
36
56
  attribute detectionPoint : String;
37
57
  attribute confidence : DetectionKind;
@@ -42,43 +62,41 @@ package memo_assurance_safety_risk_analysis {
42
62
  attribute targetCompletionDate : String;
43
63
  attribute revisedRpn : Integer;
44
64
  }
45
- item def FaultTree specializes AnalysisArtifact {
65
+ part def FaultTree specializes AnalysisArtifact {
46
66
  attribute standardReference : String;
47
67
  attribute analysisScope : String;
48
68
  attribute topEventDescription : String;
49
69
  attribute cutSetSummary : String;
50
70
  attribute revisionDate : String;
51
71
  }
52
- item def FaultTreeEvent specializes MemoPart {
72
+ part def FaultTreeNode specializes MemoPart {
53
73
  attribute eventKind : FaultTreeEventKind;
54
74
  attribute probability : Real;
55
75
  attribute failureRate : Real;
56
76
  attribute exposureTime : Real;
57
77
  attribute :>> description : String;
58
- }
59
- item def FaultTreeGate specializes MemoPart {
60
78
  attribute gateKind : FaultTreeGateKind;
61
79
  attribute kValue : Integer;
62
80
  attribute nValue : Integer;
63
81
  }
64
- item def MinimalCutSet specializes MemoPart {
82
+ item def MinimalCutSet specializes RiskItem {
65
83
  attribute cutSetOrder : Integer;
66
84
  attribute probability : Real;
67
85
  attribute involvedEvents : String;
68
86
  attribute significance : String;
69
87
  }
70
- item def HAZOPStudy specializes AnalysisArtifact {
88
+ part def HAZOPStudy specializes AnalysisArtifact {
71
89
  attribute standardReference : String;
72
90
  attribute processDescription : String;
73
91
  attribute studyScope : String;
74
92
  attribute teamComposition : String;
75
93
  }
76
- item def HAZOPNode specializes MemoPart {
94
+ part def HAZOPNode specializes MemoPart {
77
95
  attribute nodeDescription : String;
78
96
  attribute designIntent : String;
79
97
  attribute operatingConditions : String;
80
98
  }
81
- item def HAZOPDeviation specializes MemoPart {
99
+ item def HAZOPDeviation specializes RiskItem {
82
100
  attribute guideWord : HAZOPGuideWordKind;
83
101
  attribute parameter : String;
84
102
  attribute cause : String;
@@ -88,4 +106,91 @@ package memo_assurance_safety_risk_analysis {
88
106
  attribute likelihood : ProbabilityKind;
89
107
  attribute recommendation : String;
90
108
  }
109
+
110
+ // ── Relations owned by this package ─────────────────────────────
111
+ // Moved out of memo_core_relationships: their ends are typed against
112
+ // types declared here, and core must not depend on a domain package.
113
+ // Causes unifies the former causal edges of the ISO 14971 / FMEA / FTA
114
+ // chains — CausesEffect, CausedBy, ContributesToHazard, LeadsToHazard,
115
+ // OriginatesFrom, UseErrorLeadsToHazard — keyed by causeKind. cause is the
116
+ // originating element, effect the consequence.
117
+ enum def CauseKind {
118
+ enum failureCausesEffect;
119
+ enum failureCausedBy;
120
+ enum contributesToHazard;
121
+ enum leadsToHazard;
122
+ enum originatesFrom;
123
+ enum useErrorLeadsToHazard;
124
+ }
125
+ connection def Causes :> MemoRelationship {
126
+ attribute causeKind : CauseKind;
127
+ end cause : MemoPart :>> source;
128
+ end effect : RiskItem :>> target;
129
+ }
130
+ abstract connection causesLinks : Causes[*];
131
+ metadata def <causes> CausesMetadata :> SemanticMetadata {
132
+ :> annotatedElement : SysML::ConnectionDefinition;
133
+ :> annotatedElement : SysML::ConnectionUsage;
134
+ :>> baseType = causesLinks meta SysML::Usage;
135
+ }
136
+ connection def DetectedBy :> MemoRelationship {
137
+ end failureMode : FailureMode :>> source;
138
+ end detectionMethod : DetectionMethod :>> target;
139
+ }
140
+ abstract connection detectedByLinks : DetectedBy[*];
141
+ metadata def <detectedBy> DetectedByMetadata :> SemanticMetadata {
142
+ :> annotatedElement : SysML::ConnectionDefinition;
143
+ :> annotatedElement : SysML::ConnectionUsage;
144
+ :>> baseType = detectedByLinks meta SysML::Usage;
145
+ }
146
+ connection def InputToGate :> MemoRelationship {
147
+ end input : FaultTreeNode :>> source;
148
+ end gate : FaultTreeNode :>> target;
149
+ }
150
+ abstract connection inputToGateLinks : InputToGate[*];
151
+ metadata def <inputToGate> InputToGateMetadata :> SemanticMetadata {
152
+ :> annotatedElement : SysML::ConnectionDefinition;
153
+ :> annotatedElement : SysML::ConnectionUsage;
154
+ :>> baseType = inputToGateLinks meta SysML::Usage;
155
+ }
156
+ connection def ProducesEvent :> MemoRelationship {
157
+ end gate : FaultTreeNode :>> source;
158
+ end eventElement : FaultTreeNode :>> target;
159
+ }
160
+ abstract connection producesEventLinks : ProducesEvent[*];
161
+ metadata def <producesEvent> ProducesEventMetadata :> SemanticMetadata {
162
+ :> annotatedElement : SysML::ConnectionDefinition;
163
+ :> annotatedElement : SysML::ConnectionUsage;
164
+ :>> baseType = producesEventLinks meta SysML::Usage;
165
+ }
166
+ connection def ContainsEvent :> MemoRelationship {
167
+ end cutSet : MinimalCutSet :>> source;
168
+ end eventElement : FaultTreeNode :>> target;
169
+ }
170
+ abstract connection containsEventLinks : ContainsEvent[*];
171
+ metadata def <containsEvent> ContainsEventMetadata :> SemanticMetadata {
172
+ :> annotatedElement : SysML::ConnectionDefinition;
173
+ :> annotatedElement : SysML::ConnectionUsage;
174
+ :>> baseType = containsEventLinks meta SysML::Usage;
175
+ }
176
+ connection def IdentifiesHazard :> MemoRelationship {
177
+ end deviation : HAZOPDeviation :>> source;
178
+ end hazard : Hazard :>> target;
179
+ }
180
+ abstract connection identifiesHazardLinks : IdentifiesHazard[*];
181
+ metadata def <identifiesHazard> IdentifiesHazardMetadata :> SemanticMetadata {
182
+ :> annotatedElement : SysML::ConnectionDefinition;
183
+ :> annotatedElement : SysML::ConnectionUsage;
184
+ :>> baseType = identifiesHazardLinks meta SysML::Usage;
185
+ }
186
+ connection def HasFailureMode :> MemoRelationship {
187
+ end element : ArchitectureElement :>> source;
188
+ end failureMode : FailureMode :>> target;
189
+ }
190
+ abstract connection hasFailureModeLinks : HasFailureMode[*];
191
+ metadata def <hasFailureMode> HasFailureModeMetadata :> SemanticMetadata {
192
+ :> annotatedElement : SysML::ConnectionDefinition;
193
+ :> annotatedElement : SysML::ConnectionUsage;
194
+ :>> baseType = hasFailureModeLinks meta SysML::Usage;
195
+ }
91
196
  }
@@ -1,5 +1,7 @@
1
1
  package memo_assurance_safety_risk {
2
+ private import Metaobjects::SemanticMetadata;
2
3
  private import ScalarValues::*;
4
+ private import memo_core_relationships::*; // MemoRelationship
3
5
 
4
6
  private import memo_core_common::*;
5
7
  private import memo_core_enumerations::*;
@@ -46,32 +48,52 @@ package memo_assurance_safety_risk {
46
48
  attribute normalUseRelevant : Boolean;
47
49
  attribute faultConditionRelevant : Boolean;
48
50
  }
49
- item def Hazard specializes MemoPart {
51
+ // ─── Risk-element base ──────────────────────────────────────────
52
+ // The common supertype of the item-based elements an ISO 14971 / FMEA /
53
+ // FTA chain relates: hazards, sequences of events, hazardous situations,
54
+ // harms, causes, failure modes, fault-tree events, cut sets, HAZOP
55
+ // deviations, vulnerabilities.
56
+ //
57
+ // It exists so the risk relations can TYPE their ends. Before it, every
58
+ // one of them (Causes, TracesRisk, DetectedBy, InputToGate, ProducesEvent,
59
+ // ContainsEvent, IdentifiesHazard, Mitigates, ImpactsSafety) fell back to
60
+ // MemoPart — which every element in MEMO is — so the authoring picker
61
+ // offered fault-tree edges when linking a screen to a requirement.
62
+ //
63
+ // It is deliberately an `item def` and deliberately does NOT cover Risk /
64
+ // ResidualRisk / RiskMatrix, which are parts: a risk is an assessed
65
+ // judgement about a chain, not a link in it, and it is reached by
66
+ // AssessedAgainst instead. One base per metaclass is the right shape here
67
+ // — forcing the two families under one supertype would put a hazard and a
68
+ // risk matrix back in the same picker.
69
+ abstract item def RiskItem specializes MemoItem;
70
+
71
+ item def Hazard specializes RiskItem {
50
72
  attribute hazardType : HazardTypeKind;
51
73
  attribute severity : SeverityKind;
52
74
  attribute foreseeable : Boolean;
53
75
  }
54
- item def SequenceOfEvents specializes MemoPart {
76
+ item def SequenceOfEvents specializes RiskItem {
55
77
  attribute initiatingEvent : String;
56
78
  attribute contributingFactors : String;
57
79
  }
58
80
  // A categorized root cause in a hazard causal tree (FDA GIIP
59
81
  // taxonomy pattern: cause -> hazard -> hazardous situation -> harm;
60
82
  // several HazardCause elements may converge on one Hazard).
61
- item def HazardCause specializes MemoPart {
83
+ item def HazardCause specializes RiskItem {
62
84
  attribute causeSource : CauseSourceKind;
63
85
  attribute contributingFactors : String;
64
86
  }
65
- item def HazardousSituation specializes MemoPart {
87
+ item def HazardousSituation specializes RiskItem {
66
88
  attribute exposedPersons : String;
67
89
  attribute operatingCondition : String;
68
90
  }
69
- item def Harm specializes MemoPart {
91
+ item def Harm specializes RiskItem {
70
92
  attribute clinicalImpact : String;
71
93
  attribute reversibility : String;
72
94
  attribute severity : SeverityKind;
73
95
  }
74
- item def RiskControlMeasure specializes VerifiableElement {
96
+ part def RiskControlMeasure specializes VerifiableElement {
75
97
  attribute controlKind : RiskControlKind;
76
98
  attribute implementationKind : RiskControlImplementationKind;
77
99
  attribute verificationStatus : String;
@@ -82,8 +104,57 @@ package memo_assurance_safety_risk {
82
104
  attribute clinicalSignificance : String;
83
105
  attribute supportingEvidence : String;
84
106
  }
85
- item def OverallResidualRiskEvaluation specializes MemoPart {
107
+ part def OverallResidualRiskEvaluation specializes MemoPart {
86
108
  attribute conclusion : String;
87
109
  attribute reviewer : String;
88
110
  }
111
+
112
+ // ── Relations owned by this package ─────────────────────────────
113
+ // Moved out of memo_core_relationships: their ends are typed against
114
+ // types declared here, and core must not depend on a domain package.
115
+ // ISO 14971 risk chain — distinct sequence-of-events relations over risk elements.
116
+ connection def TracesRisk :> MemoRelationship {
117
+ end sourceRiskElement : RiskItem :>> source;
118
+ end targetRiskElement : RiskItem :>> target;
119
+ }
120
+ abstract connection tracesRiskLinks : TracesRisk[*];
121
+ metadata def <tracesRisk> TracesRiskMetadata :> SemanticMetadata {
122
+ :> annotatedElement : SysML::ConnectionDefinition;
123
+ :> annotatedElement : SysML::ConnectionUsage;
124
+ :>> baseType = tracesRiskLinks meta SysML::Usage;
125
+ }
126
+ connection def AssessedAgainst :> MemoRelationship {
127
+ end risk : Risk :>> source;
128
+ end riskMatrix : RiskMatrix :>> target;
129
+ }
130
+ abstract connection assessedAgainstLinks : AssessedAgainst[*];
131
+ metadata def <assessedAgainst> AssessedAgainstMetadata :> SemanticMetadata {
132
+ :> annotatedElement : SysML::ConnectionDefinition;
133
+ :> annotatedElement : SysML::ConnectionUsage;
134
+ :>> baseType = assessedAgainstLinks meta SysML::Usage;
135
+ }
136
+ // Mitigates unifies the control/action → risk-element edges of the
137
+ // ISO 14971 / FMEA / FTA / cyber chains — MitigatesHazard,
138
+ // MitigatesVulnerability, MitigatedByControl, BrokenByControl,
139
+ // AddressedByAction — keyed by mitigationKind. control is the mitigating
140
+ // control/action; mitigatedElement is the hazard/vulnerability/failure/cut set.
141
+ enum def MitigationKind {
142
+ enum hazard;
143
+ enum vulnerability;
144
+ enum failureMode;
145
+ enum cutSet;
146
+ enum fmeaAction;
147
+ }
148
+ connection def Mitigates :> MemoRelationship {
149
+ attribute mitigationKind : MitigationKind;
150
+ // Untyped: controls/hazards may be item defs (RiskControlMeasure, Hazard, …).
151
+ end control :>> source;
152
+ end mitigatedElement : RiskItem :>> target;
153
+ }
154
+ abstract connection mitigatesLinks : Mitigates[*];
155
+ metadata def <mitigates> MitigatesMetadata :> SemanticMetadata {
156
+ :> annotatedElement : SysML::ConnectionDefinition;
157
+ :> annotatedElement : SysML::ConnectionUsage;
158
+ :>> baseType = mitigatesLinks meta SysML::Usage;
159
+ }
89
160
  }
@@ -1,5 +1,7 @@
1
1
  package memo_assurance_safety_risk_postmarket_surveillance {
2
+ private import Metaobjects::SemanticMetadata;
2
3
  private import ScalarValues::*;
4
+ private import memo_core_relationships::*; // MemoRelationship
3
5
 
4
6
  private import memo_core_common::*;
5
7
 
@@ -8,4 +10,18 @@ package memo_assurance_safety_risk_postmarket_surveillance {
8
10
  attribute dataSource : String;
9
11
  attribute reportingObligation : String;
10
12
  }
13
+
14
+ // ── Relations owned by this package ─────────────────────────────
15
+ // Moved out of memo_core_relationships: their ends are typed against
16
+ // types declared here, and core must not depend on a domain package.
17
+ connection def FeedsBackTo :> MemoRelationship {
18
+ end feedbackItem : PostMarketSurveillance :>> source;
19
+ end designElement : MemoPart :>> target;
20
+ }
21
+ abstract connection feedsBackToLinks : FeedsBackTo[*];
22
+ metadata def <feedsBackTo> FeedsBackToMetadata :> SemanticMetadata {
23
+ :> annotatedElement : SysML::ConnectionDefinition;
24
+ :> annotatedElement : SysML::ConnectionUsage;
25
+ :>> baseType = feedsBackToLinks meta SysML::Usage;
26
+ }
11
27
  }
@@ -1,4 +1,5 @@
1
1
  package memo_assurance_verification_validation {
2
+ private import Metaobjects::SemanticMetadata;
2
3
  private import ScalarValues::*;
3
4
 
4
5
  private import memo_core_common::*;
@@ -10,10 +11,17 @@ package memo_assurance_verification_validation {
10
11
  // Verification and validation cases are SysML v2 verification cases
11
12
  // (behaviours that check requirements), not verifiable structures — they
12
13
  // derive from the MemoVerificationCase foundation, not MemoPart.
14
+ // `status` is NOT redeclared here. It used to be re-declared as a String,
15
+ // which shadowed the `status : ElementStatusKind` every MEMO base carries
16
+ // and let a verification case hold an editorial status no other element
17
+ // could hold — against the "one status vocabulary in MEMO" rule stated in
18
+ // memo_requirements.sysml. The values it actually held ("planned") were an
19
+ // EXECUTION state, not an editorial one; execution state belongs in an
20
+ // attribute of its own (see RiskControlMeasure.verificationStatus), not in
21
+ // a second spelling of `status`.
13
22
  verification def VerificationCase :> MemoVerificationCase {
14
23
  attribute methodKind : VerificationMethodKind;
15
24
  attribute acceptanceCriteria : String;
16
- attribute status : String;
17
25
  }
18
26
  verification def ValidationCase :> MemoVerificationCase {
19
27
  attribute validationMethod : ValidationMethodKind;
@@ -21,29 +29,17 @@ package memo_assurance_verification_validation {
21
29
  attribute acceptanceCriteria : String;
22
30
  attribute clinicalContext : String;
23
31
  }
24
- part def TestArtifact specializes MemoEvidence {
25
- attribute version : String;
26
- attribute artifactKind : ArtifactKind;
27
- attribute resultSummary : String;
28
- }
29
- part def Evidence specializes MemoEvidence {
30
- attribute version : String;
31
- attribute evidenceType : String;
32
- attribute integrityStatus : String;
33
- }
34
-
35
- // A scenario executed to verify — selected path with purpose
36
- // 'verification'.
37
- action def VerificationScenario specializes MemoScenario {
38
- attribute verificationEnvironment : String;
39
- attribute stimulusSummary : String;
40
- }
41
-
42
32
  // Operational validation confirms the user's goal is achieved in the
43
33
  // use environment (§5): ValidationCase validates a UseCase.
44
34
  // Safety-critical functions must trace to verification (rules/coverage).
45
35
  connection def ExecutesScenario :> MemoRelationship {
46
- end verificationCase : VerificationCase;
47
- end scenario : MemoScenario;
36
+ end verificationCase : VerificationCase :>> source;
37
+ end scenario : MemoScenario :>> 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;
48
44
  }
49
45
  }
@@ -14,6 +14,7 @@
14
14
  // NotesOn leave their subject ends untyped, following the MemoLink precedent in
15
15
  // memo_core_relationships.
16
16
  package memo_core_annotations {
17
+ private import Metaobjects::SemanticMetadata;
17
18
  private import ScalarValues::*;
18
19
 
19
20
  private import memo_core_common::*;
@@ -61,17 +62,35 @@ package memo_core_annotations {
61
62
  // The end is `remark`, not `comment`: `comment` is a reserved KerML
62
63
  // keyword and cannot name a feature.
63
64
  connection def CommentsOn :> MemoRelationship {
64
- end remark : ModelComment;
65
- end annotatedElement;
65
+ end remark : ModelComment :>> source;
66
+ end annotatedElement :>> target;
67
+ }
68
+ abstract connection commentsOnLinks : CommentsOn[*];
69
+ metadata def <commentsOn> CommentsOnMetadata :> SemanticMetadata {
70
+ :> annotatedElement : SysML::ConnectionDefinition;
71
+ :> annotatedElement : SysML::ConnectionUsage;
72
+ :>> baseType = commentsOnLinks meta SysML::Usage;
66
73
  }
67
74
 
68
75
  connection def RationaleFor :> MemoRelationship {
69
- end rationaleRecord : ModelRationale;
70
- end justifiedElement;
76
+ end rationaleRecord : ModelRationale :>> source;
77
+ end justifiedElement :>> target;
78
+ }
79
+ abstract connection rationaleForLinks : RationaleFor[*];
80
+ metadata def <rationaleFor> RationaleForMetadata :> SemanticMetadata {
81
+ :> annotatedElement : SysML::ConnectionDefinition;
82
+ :> annotatedElement : SysML::ConnectionUsage;
83
+ :>> baseType = rationaleForLinks meta SysML::Usage;
71
84
  }
72
85
 
73
86
  connection def NotesOn :> MemoRelationship {
74
- end noteRecord : ModelNote;
75
- end notedElement;
87
+ end noteRecord : ModelNote :>> source;
88
+ end notedElement :>> target;
89
+ }
90
+ abstract connection notesOnLinks : NotesOn[*];
91
+ metadata def <notesOn> NotesOnMetadata :> SemanticMetadata {
92
+ :> annotatedElement : SysML::ConnectionDefinition;
93
+ :> annotatedElement : SysML::ConnectionUsage;
94
+ :>> baseType = notesOnLinks meta SysML::Usage;
76
95
  }
77
96
  }