@memoarchitect/ontology 0.4.4

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 (217) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +70 -0
  3. package/examples/gpca-pump/dhf/documents/DOC-RMP-001.md +210 -0
  4. package/examples/gpca-pump/memo.config.yaml +9 -0
  5. package/examples/gpca-pump/methodology/gpca_methodology.sysml +11 -0
  6. package/examples/gpca-pump/methodology/gpca_profiles.sysml +25 -0
  7. package/examples/gpca-pump/methodology/gpca_scope.sysml +25 -0
  8. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +231 -0
  9. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +272 -0
  10. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +81 -0
  11. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +363 -0
  12. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +205 -0
  13. package/examples/gpca-pump/model/catalog/gpca_context.sysml +113 -0
  14. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +172 -0
  15. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +173 -0
  16. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +1062 -0
  17. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +209 -0
  18. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +53 -0
  19. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +1505 -0
  20. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +744 -0
  21. package/examples/gpca-pump/model/catalog/gpca_system.sysml +144 -0
  22. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +696 -0
  23. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +285 -0
  24. package/examples/gpca-pump/model/samples/README.md +24 -0
  25. package/examples/gpca-pump/model/samples/action_flow_view.sysml +72 -0
  26. package/examples/gpca-pump/model/samples/action_flow_view.viewlayout +9 -0
  27. package/examples/gpca-pump/model/samples/functional_flow_view.sysml +153 -0
  28. package/examples/gpca-pump/model/samples/interconnection_view.sysml +93 -0
  29. package/examples/gpca-pump/model/samples/interconnection_view.viewlayout +99 -0
  30. package/examples/gpca-pump/model/samples/operational_behaviour_view.sysml +145 -0
  31. package/examples/gpca-pump/model/samples/tree_view.sysml +56 -0
  32. package/examples/gpca-pump/model/views/behavior_action_flow_view.sysml +41 -0
  33. package/examples/gpca-pump/model/views/context_system_context_view.sysml +43 -0
  34. package/examples/gpca-pump/model/views/cybersecurity_cybersecurity_view.sysml +44 -0
  35. package/examples/gpca-pump/model/views/document_architecture_description_view.sysml +29 -0
  36. package/examples/gpca-pump/model/views/document_cyber_assessment_view.sysml +28 -0
  37. package/examples/gpca-pump/model/views/document_dhf_index_view.sysml +29 -0
  38. package/examples/gpca-pump/model/views/document_hazard_analysis_view.sysml +29 -0
  39. package/examples/gpca-pump/model/views/document_rmf_view.sysml +29 -0
  40. package/examples/gpca-pump/model/views/document_sdd_view.sysml +29 -0
  41. package/examples/gpca-pump/model/views/document_threat_model_view.sysml +28 -0
  42. package/examples/gpca-pump/model/views/document_usability_view.sysml +28 -0
  43. package/examples/gpca-pump/model/views/document_vv_view.sysml +29 -0
  44. package/examples/gpca-pump/model/views/functional_function_allocation_view.sysml +42 -0
  45. package/examples/gpca-pump/model/views/functional_function_browser_view.sysml +41 -0
  46. package/examples/gpca-pump/model/views/logical_device_interconnect_view.sysml +43 -0
  47. package/examples/gpca-pump/model/views/logical_logical_architecture_view.sysml +42 -0
  48. package/examples/gpca-pump/model/views/logical_mode_state_view.sysml +42 -0
  49. package/examples/gpca-pump/model/views/logical_system_decomposition_view.sysml +44 -0
  50. package/examples/gpca-pump/model/views/operational_scenario_sequence_view.sysml +41 -0
  51. package/examples/gpca-pump/model/views/operational_use_case_view.sysml +43 -0
  52. package/examples/gpca-pump/model/views/physical_physical_bom_view.sysml +41 -0
  53. package/examples/gpca-pump/model/views/requirements_requirements_trace_view.sysml +42 -0
  54. package/examples/gpca-pump/model/views/risk_fmea_view.sysml +42 -0
  55. package/examples/gpca-pump/model/views/risk_risk_chain_view.sysml +44 -0
  56. package/examples/gpca-pump/model/views/software_software_architecture_view.sysml +43 -0
  57. package/examples/gpca-pump/model/views/verification_verification_coverage_view.sysml +42 -0
  58. package/memo.manifest.yaml +13 -0
  59. package/methodologies/default/memo.package.yaml +9 -0
  60. package/methodologies/gpca/memo.package.yaml +9 -0
  61. package/ontology/memo.package.yaml +8 -0
  62. package/ontology/memo.rendering.yaml +47 -0
  63. package/package.json +65 -0
  64. package/profile/archetypes.yaml +36 -0
  65. package/profile/memo.package.yaml +9 -0
  66. package/profile/templates/connected-device/starter.sysml +8 -0
  67. package/profile/templates/infusion-pump/starter.sysml +8 -0
  68. package/profile/templates/monitoring-device/starter.sysml +8 -0
  69. package/profile/templates/samd/starter.sysml +8 -0
  70. package/src/architecture/analysis/memo_fmea.sysml +91 -0
  71. package/src/architecture/assurance/memo_assurance.sysml +29 -0
  72. package/src/architecture/behavior/memo_behavior.sysml +65 -0
  73. package/src/architecture/constraints/memo_constraints.sysml +14 -0
  74. package/src/architecture/context/memo_context.sysml +58 -0
  75. package/src/architecture/cybersecurity/memo_cybersecurity.sysml +99 -0
  76. package/src/architecture/decisions/memo_decisions.sysml +12 -0
  77. package/src/architecture/functions/memo_functions.sysml +30 -0
  78. package/src/architecture/hardware_structure/memo_hardware_structure.sysml +15 -0
  79. package/src/architecture/interfaces/memo_interfaces.sysml +103 -0
  80. package/src/architecture/logical_structure/memo_logical_structure.sysml +10 -0
  81. package/src/architecture/operational/memo_operational.sysml +51 -0
  82. package/src/architecture/physical/memo_physical_architecture.sysml +19 -0
  83. package/src/architecture/requirements/memo_requirements.sysml +69 -0
  84. package/src/architecture/risk/memo_arch_risk.sysml +7 -0
  85. package/src/architecture/risk/memo_risk.sysml +80 -0
  86. package/src/architecture/software_structure/memo_software_structure.sysml +44 -0
  87. package/src/architecture/system/memo_system_analysis.sysml +54 -0
  88. package/src/artifacts/clinical_safety_report.sysml +12 -0
  89. package/src/artifacts/cybersecurity_assessment_report.sysml +12 -0
  90. package/src/artifacts/definitions/memo_artifact_definitions.sysml +12 -0
  91. package/src/artifacts/design_change_log.sysml +12 -0
  92. package/src/artifacts/design_history_file_index.sysml +12 -0
  93. package/src/artifacts/design_input_plan.sysml +12 -0
  94. package/src/artifacts/design_output_plan.sysml +12 -0
  95. package/src/artifacts/evidence_record.sysml +12 -0
  96. package/src/artifacts/failure_mode_effects_analysis.sysml +12 -0
  97. package/src/artifacts/hazard_analysis_report.sysml +12 -0
  98. package/src/artifacts/labeling_specification.sysml +12 -0
  99. package/src/artifacts/requirements_specification.sysml +12 -0
  100. package/src/artifacts/requirements_traceability_matrix.sysml +12 -0
  101. package/src/artifacts/risk_management_plan.sysml +12 -0
  102. package/src/artifacts/software_design_description.sysml +12 -0
  103. package/src/artifacts/software_development_plan.sysml +12 -0
  104. package/src/artifacts/soup_list.sysml +12 -0
  105. package/src/artifacts/system_architecture_description.sysml +12 -0
  106. package/src/artifacts/test_protocol.sysml +12 -0
  107. package/src/artifacts/test_report.sysml +12 -0
  108. package/src/artifacts/threat_model_report.sysml +12 -0
  109. package/src/artifacts/usability_engineering_report.sysml +12 -0
  110. package/src/compliance/artifacts/memo_artifacts.sysml +13 -0
  111. package/src/compliance/change/memo_change.sysml +17 -0
  112. package/src/compliance/dhf-templates/21cfr820/change-record.md +45 -0
  113. package/src/compliance/dhf-templates/21cfr820/design-input.md +67 -0
  114. package/src/compliance/dhf-templates/21cfr820/design-output.md +80 -0
  115. package/src/compliance/dhf-templates/21cfr820/design-review.md +51 -0
  116. package/src/compliance/dhf-templates/21cfr820/design-validation.md +64 -0
  117. package/src/compliance/dhf-templates/21cfr820/design-verification.md +57 -0
  118. package/src/compliance/dhf-templates/21cfr820/dhf-index.md +111 -0
  119. package/src/compliance/dhf-templates/21cfr820/transfer-plan.md +50 -0
  120. package/src/compliance/dhf-templates/21cfr820/user-needs.md +81 -0
  121. package/src/compliance/dhf-templates/21cfr820/vv-plan.md +89 -0
  122. package/src/compliance/dhf-templates/21cfr820/vv-report.md +85 -0
  123. package/src/compliance/dhf-templates/fda-cybersecurity/incident-response.md +66 -0
  124. package/src/compliance/dhf-templates/fda-cybersecurity/postmarket-surveillance.md +63 -0
  125. package/src/compliance/dhf-templates/fda-cybersecurity/security-arch.md +83 -0
  126. package/src/compliance/dhf-templates/fda-cybersecurity/threat-model.md +100 -0
  127. package/src/compliance/dhf-templates/fda-cybersecurity/vuln-assessment.md +77 -0
  128. package/src/compliance/dhf-templates/iec-62304/change-control.md +40 -0
  129. package/src/compliance/dhf-templates/iec-62304/detailed-design.md +69 -0
  130. package/src/compliance/dhf-templates/iec-62304/integration-test.md +68 -0
  131. package/src/compliance/dhf-templates/iec-62304/sad.md +115 -0
  132. package/src/compliance/dhf-templates/iec-62304/sbom.md +67 -0
  133. package/src/compliance/dhf-templates/iec-62304/sdp.md +108 -0
  134. package/src/compliance/dhf-templates/iec-62304/soup.md +77 -0
  135. package/src/compliance/dhf-templates/iec-62304/srs.md +138 -0
  136. package/src/compliance/dhf-templates/iec-62304/sw-traceability.md +111 -0
  137. package/src/compliance/dhf-templates/iec-62304/system-test.md +67 -0
  138. package/src/compliance/dhf-templates/iec-62366/formative-eval.md +47 -0
  139. package/src/compliance/dhf-templates/iec-62366/summative-eval.md +69 -0
  140. package/src/compliance/dhf-templates/iec-62366/task-analysis.md +57 -0
  141. package/src/compliance/dhf-templates/iec-62366/ue-plan.md +81 -0
  142. package/src/compliance/dhf-templates/iec-62366/ui-spec.md +61 -0
  143. package/src/compliance/dhf-templates/iec-62366/urra.md +74 -0
  144. package/src/compliance/dhf-templates/iec-62366/use-spec.md +61 -0
  145. package/src/compliance/dhf-templates/iso-14971/fmea.md +93 -0
  146. package/src/compliance/dhf-templates/iso-14971/fta.md +70 -0
  147. package/src/compliance/dhf-templates/iso-14971/har.md +165 -0
  148. package/src/compliance/dhf-templates/iso-14971/risk-benefit.md +51 -0
  149. package/src/compliance/dhf-templates/iso-14971/risk-matrix.md +51 -0
  150. package/src/compliance/dhf-templates/iso-14971/rmp.md +169 -0
  151. package/src/compliance/dhf-templates/iso-14971/rmr.md +101 -0
  152. package/src/compliance/dhf-templates/shared/snippets/approval-block.md +16 -0
  153. package/src/compliance/dhf-templates/shared/snippets/document-control-header.md +15 -0
  154. package/src/compliance/dhf-templates/shared/snippets/references-section.md +16 -0
  155. package/src/compliance/dhf-templates/shared/snippets/revision-history-table.md +11 -0
  156. package/src/compliance/document_views/memo_document_views.sysml +7 -0
  157. package/src/compliance/iso14971/risk_management_file.sysml +16 -0
  158. package/src/compliance/postmarket/memo_postmarket.sysml +16 -0
  159. package/src/core/common/memo_common.sysml +50 -0
  160. package/src/core/consistency_rules/consistency_rules.sysml +41 -0
  161. package/src/core/dimensions/dimensions.sysml +37 -0
  162. package/src/core/enumerations/memo_enumerations.sysml +562 -0
  163. package/src/core/methodology_scope/methodology_scope.sysml +46 -0
  164. package/src/core/relationships/memo_relationships.sysml +230 -0
  165. package/src/core/semantics/semantics.sysml +20 -0
  166. package/src/core/stdlib/collections.sysml +6 -0
  167. package/src/core/stdlib/functions.sysml +6 -0
  168. package/src/core/stdlib/scalars.sysml +6 -0
  169. package/src/core/stdlib/time.sysml +6 -0
  170. package/src/medical_device_library.sysml +100 -0
  171. package/src/memo_namespaces.sysml +668 -0
  172. package/src/methodology/LICENSES/MIT.txt +19 -0
  173. package/src/methodology/memo_archetypes.sysml +93 -0
  174. package/src/methodology/memo_core.sysml +53 -0
  175. package/src/methodology/memo_gates.sysml +11 -0
  176. package/src/methodology/memo_patterns.sysml +12 -0
  177. package/src/methodology/memo_profiles.sysml +218 -0
  178. package/src/methodology/memo_rules.sysml +15 -0
  179. package/src/methodology/memo_viewpoints.sysml +5 -0
  180. package/src/methodology/memo_workflow.sysml +14 -0
  181. package/src/rules/closure/closure_rules.sysml +180 -0
  182. package/src/rules/coverage/coverage_rules.sysml +258 -0
  183. package/src/rules/crosslayer/cross_layer_rules.sysml +38 -0
  184. package/src/rules/lifecycle/lifecycle_rules.sysml +41 -0
  185. package/src/rules/quantitative/quantitative_rules.sysml +34 -0
  186. package/src/viewpoints/clinical/clinical_evidence_view.sysml +13 -0
  187. package/src/viewpoints/clinical/clinical_viewpoint.sysml +25 -0
  188. package/src/viewpoints/context/context_viewpoint.sysml +25 -0
  189. package/src/viewpoints/context/system_context_view.sysml +29 -0
  190. package/src/viewpoints/cybersecurity/cybersecurity_assessment_view.sysml +13 -0
  191. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +27 -0
  192. package/src/viewpoints/cybersecurity/threat_model_view.sysml +13 -0
  193. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +82 -0
  194. package/src/viewpoints/functional/function_allocation_view.sysml +29 -0
  195. package/src/viewpoints/functional/functional_viewpoint.sysml +25 -0
  196. package/src/viewpoints/functional/system_functional_tree_view.sysml +29 -0
  197. package/src/viewpoints/logical/logical_architecture_view.sysml +29 -0
  198. package/src/viewpoints/logical/logical_viewpoint.sysml +25 -0
  199. package/src/viewpoints/operational/operational_viewpoint.sysml +25 -0
  200. package/src/viewpoints/operational/use_case_view.sysml +29 -0
  201. package/src/viewpoints/physical/network_topology_view.sysml +29 -0
  202. package/src/viewpoints/physical/physical_bom_view.sysml +29 -0
  203. package/src/viewpoints/physical/physical_viewpoint.sysml +25 -0
  204. package/src/viewpoints/requirements/requirements_traceability_view.sysml +29 -0
  205. package/src/viewpoints/requirements/requirements_viewpoint.sysml +25 -0
  206. package/src/viewpoints/risk/risk_chain_view.sysml +30 -0
  207. package/src/viewpoints/risk/risk_viewpoint.sysml +25 -0
  208. package/src/viewpoints/software/software_architecture_view.sysml +29 -0
  209. package/src/viewpoints/software/software_viewpoint.sysml +25 -0
  210. package/src/viewpoints/usability/usability_engineering_view.sysml +13 -0
  211. package/src/viewpoints/usability/usability_viewpoint.sysml +25 -0
  212. package/src/viewpoints/verification/verification_coverage_view.sysml +29 -0
  213. package/src/viewpoints/verification/verification_viewpoint.sysml +25 -0
  214. package/template/memo.package.yaml +5 -0
  215. package/template/src/catalog/starter.sysml +12 -0
  216. package/template/src/documents/.gitkeep +1 -0
  217. package/template/src/views/.gitkeep +1 -0
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_functional_functional_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part functionalViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-FUNC";
9
+ attribute :>> name = "FunctionalViewpoint";
10
+ attribute :>> title = "Functional Viewpoint";
11
+ attribute :>> shortDescription = "Shows system functions, their decomposition, and allocation.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the functions layer for what the system does, independent of how it is structured — function trees, function allocation, and behavior triggers.";
13
+ attribute :>> purpose = "Describe the system's functional decomposition and behavior.";
14
+ attribute :>> audience = (AudienceKind::systemArchitect);
15
+ attribute :>> stage = WorkflowStageKind::architecture;
16
+ attribute :>> abstractionLevel = "functional";
17
+ attribute :>> outputKind = (ViewOutputKind::diagram);
18
+ attribute :>> presentationKind = (PresentationKind::activityDiagram);
19
+ attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::performance);
20
+ attribute :>> includedLayers = ("functions", "behavior");
21
+ attribute :>> allowedElementKinds = ("LogicalFunction", "LogicalFlow", "ModeState");
22
+ attribute :>> methodologyReference = ("default-layer-viewpoint");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,29 @@
1
+ package memo_viewpoints_functional_system_functional_tree_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_functional_functional_viewpoint::*;
7
+
8
+ view systemFunctionalTreeView : MemoDiagramView {
9
+ expose memo_viewpoints_functional_system_functional_tree_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-FUNC-001";
12
+ attribute :>> name = "SystemFunctionalTreeView";
13
+ attribute :>> title = "System Functional Tree";
14
+ attribute :>> shortDescription = "Hierarchical decomposition of system functions.";
15
+ attribute :>> outputKind = (ViewOutputKind::diagram);
16
+ attribute :>> presentationKind = (PresentationKind::activityDiagram);
17
+ attribute :>> diagramType = "act";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include functions and their decomposition into subfunctions.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-FUNC-001";
22
+ attribute :>> name = "SystemFunctionalTreeQuery";
23
+ attribute :>> includeElementKinds = ("LogicalFunction");
24
+ attribute :>> includeLayers = ("functions");
25
+ attribute :>> rationaleText = "Auto-populate the functional tree from the functions layer.";
26
+ }
27
+ part :>> viewpointDefinition = functionalViewpoint;
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ package memo_viewpoints_logical_logical_architecture_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_logical_logical_viewpoint::*;
7
+
8
+ view logicalArchitectureView : MemoDiagramView {
9
+ expose memo_viewpoints_logical_logical_architecture_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-LOG-001";
12
+ attribute :>> name = "LogicalArchitectureView";
13
+ attribute :>> title = "Logical Architecture View";
14
+ attribute :>> shortDescription = "Logical components and their interfaces.";
15
+ attribute :>> outputKind = (ViewOutputKind::diagram);
16
+ attribute :>> presentationKind = (PresentationKind::blockDiagram);
17
+ attribute :>> diagramType = "bdd";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include logical components and the interfaces that connect them.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-LOG-001";
22
+ attribute :>> name = "LogicalArchitectureQuery";
23
+ attribute :>> includeElementKinds = ("LogicalComponent", "Interface");
24
+ attribute :>> includeLayers = ("logical_structure", "interfaces");
25
+ attribute :>> rationaleText = "Auto-populate the logical architecture view from the logical structure and interfaces layers.";
26
+ }
27
+ part :>> viewpointDefinition = logicalArchitectureViewpoint;
28
+ }
29
+ }
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_logical_logical_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part logicalArchitectureViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-LOG";
9
+ attribute :>> name = "LogicalArchitectureViewpoint";
10
+ attribute :>> title = "Logical Viewpoint";
11
+ attribute :>> shortDescription = "Shows logical decomposition and interfaces.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the logical architecture layer for subsystem structure, responsibilities, and major interactions, independent of physical realization.";
13
+ attribute :>> purpose = "Describe the system's logical decomposition.";
14
+ attribute :>> audience = (AudienceKind::systemArchitect);
15
+ attribute :>> stage = WorkflowStageKind::architecture;
16
+ attribute :>> abstractionLevel = "logical";
17
+ attribute :>> outputKind = (ViewOutputKind::diagram);
18
+ attribute :>> presentationKind = (PresentationKind::blockDiagram);
19
+ attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::performance);
20
+ attribute :>> includedLayers = ("logical_structure", "interfaces");
21
+ attribute :>> allowedElementKinds = ("LogicalComponent", "Interface");
22
+ attribute :>> methodologyReference = ("default-layer-viewpoint");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_operational_operational_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part operationalViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-OPS";
9
+ attribute :>> name = "OperationalViewpoint";
10
+ attribute :>> title = "Operational & Use-Case Viewpoint";
11
+ attribute :>> shortDescription = "Shows actors, use contexts, operational scenarios, and system capabilities.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the context, operational, and system layers for how actors use the device — operational scenarios, capabilities, and the functional chains that realize them.";
13
+ attribute :>> purpose = "Communicate how actors interact with the system and which capabilities they invoke.";
14
+ attribute :>> audience = (AudienceKind::projectLead, AudienceKind::systemArchitect);
15
+ attribute :>> stage = WorkflowStageKind::context;
16
+ attribute :>> abstractionLevel = "operational";
17
+ attribute :>> outputKind = (ViewOutputKind::diagram);
18
+ attribute :>> presentationKind = (PresentationKind::custom);
19
+ attribute :>> concernKinds = (ConcernKind::performance, ConcernKind::interoperability);
20
+ attribute :>> includedLayers = ("context", "operational", "system");
21
+ attribute :>> allowedElementKinds = ("Actor", "UseContext", "OperationalActivity", "OperationalScenario", "SystemCapability", "FunctionalChain");
22
+ attribute :>> methodologyReference = ("default-layer-viewpoint");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,29 @@
1
+ package memo_viewpoints_operational_use_case_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_operational_operational_viewpoint::*;
7
+
8
+ view useCaseView : MemoDiagramView {
9
+ expose memo_viewpoints_operational_use_case_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-OPS-001";
12
+ attribute :>> name = "UseCaseView";
13
+ attribute :>> title = "Use Case Overview";
14
+ attribute :>> shortDescription = "Actors connected to the operational scenarios and capabilities they invoke.";
15
+ attribute :>> outputKind = (ViewOutputKind::diagram);
16
+ attribute :>> presentationKind = (PresentationKind::custom);
17
+ attribute :>> diagramType = "ucd";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include actors, use contexts, and the operational scenarios they participate in.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-OPS-001";
22
+ attribute :>> name = "UseCaseQuery";
23
+ attribute :>> includeElementKinds = ("Actor", "UseContext", "OperationalScenario");
24
+ attribute :>> includeLayers = ("context", "operational");
25
+ attribute :>> rationaleText = "Auto-populate the use case view from the context and operational layers.";
26
+ }
27
+ part :>> viewpointDefinition = operationalViewpoint;
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ package memo_viewpoints_physical_network_topology_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_physical_physical_viewpoint::*;
7
+
8
+ view networkTopologyView : MemoDiagramView {
9
+ expose memo_viewpoints_physical_network_topology_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-PHY-002";
12
+ attribute :>> name = "NetworkTopologyView";
13
+ attribute :>> title = "Network Topology View";
14
+ attribute :>> shortDescription = "Physical interconnections and network ports between components.";
15
+ attribute :>> outputKind = (ViewOutputKind::diagram);
16
+ attribute :>> presentationKind = (PresentationKind::internalDiagram);
17
+ attribute :>> diagramType = "ibd";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include physical ports and connections that make up the device's network topology.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-PHY-002";
22
+ attribute :>> name = "NetworkTopologyQuery";
23
+ attribute :>> includeElementKinds = ("PhysicalPort", "ProcessingNode");
24
+ attribute :>> includeLayers = ("physical");
25
+ attribute :>> rationaleText = "Auto-populate the network topology view from the physical interfaces layer.";
26
+ }
27
+ part :>> viewpointDefinition = physicalViewpoint;
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ package memo_viewpoints_physical_physical_bom_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_physical_physical_viewpoint::*;
7
+
8
+ view physicalBOMView : MemoDiagramView {
9
+ expose memo_viewpoints_physical_physical_bom_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-PHY-001";
12
+ attribute :>> name = "PhysicalBOMView";
13
+ attribute :>> title = "Physical Bill of Materials View";
14
+ attribute :>> shortDescription = "Physical and hardware components with their decomposition.";
15
+ attribute :>> outputKind = (ViewOutputKind::diagram);
16
+ attribute :>> presentationKind = (PresentationKind::blockDiagram);
17
+ attribute :>> diagramType = "bdd";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include physical and hardware components and their assembly structure.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-PHY-001";
22
+ attribute :>> name = "PhysicalBOMQuery";
23
+ attribute :>> includeElementKinds = ("ProcessingNode", "HardwareAssembly");
24
+ attribute :>> includeLayers = ("hardware_structure", "physical");
25
+ attribute :>> rationaleText = "Auto-populate the physical BOM view from the hardware and physical layers.";
26
+ }
27
+ part :>> viewpointDefinition = physicalViewpoint;
28
+ }
29
+ }
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_physical_physical_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part physicalViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-PHY";
9
+ attribute :>> name = "PhysicalViewpoint";
10
+ attribute :>> title = "Physical Viewpoint";
11
+ attribute :>> shortDescription = "Shows physical components, hardware structure, and their interconnections.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the physical and hardware structure layers for bill-of-materials, hardware decomposition, physical interfaces, and network/connectivity topology.";
13
+ attribute :>> purpose = "Describe the system's physical realization and interconnections.";
14
+ attribute :>> audience = (AudienceKind::hardwareEngineer);
15
+ attribute :>> stage = WorkflowStageKind::architecture;
16
+ attribute :>> abstractionLevel = "physical";
17
+ attribute :>> outputKind = (ViewOutputKind::diagram);
18
+ attribute :>> presentationKind = (PresentationKind::blockDiagram);
19
+ attribute :>> concernKinds = (ConcernKind::reliability, ConcernKind::interoperability);
20
+ attribute :>> includedLayers = ("hardware_structure", "physical");
21
+ attribute :>> allowedElementKinds = ("ProcessingNode", "HardwareAssembly", "PhysicalPort");
22
+ attribute :>> methodologyReference = ("default-layer-viewpoint");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,29 @@
1
+ package memo_viewpoints_requirements_requirements_traceability_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_requirements_requirements_viewpoint::*;
7
+
8
+ view requirementsTraceabilityView : MemoDiagramView {
9
+ expose memo_viewpoints_requirements_requirements_traceability_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-REQ-001";
12
+ attribute :>> name = "RequirementsTraceabilityView";
13
+ attribute :>> title = "Requirements Traceability View";
14
+ attribute :>> shortDescription = "Stakeholder needs traced through system, software, and hardware requirements.";
15
+ attribute :>> outputKind = (ViewOutputKind::matrix);
16
+ attribute :>> presentationKind = (PresentationKind::traceMatrix);
17
+ attribute :>> diagramType = "req";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include stakeholder needs and requirements with their derivation chain.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-REQ-001";
22
+ attribute :>> name = "RequirementsTraceabilityQuery";
23
+ attribute :>> includeElementKinds = ("StakeholderNeed", "Requirement", "SystemRequirement", "SoftwareRequirement", "HardwareRequirement");
24
+ attribute :>> includeLayers = ("requirements");
25
+ attribute :>> rationaleText = "Auto-populate requirements traceability from the requirements layer.";
26
+ }
27
+ part :>> viewpointDefinition = requirementsViewpoint;
28
+ }
29
+ }
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_requirements_requirements_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part requirementsViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-REQ";
9
+ attribute :>> name = "RequirementsViewpoint";
10
+ attribute :>> title = "Requirements Viewpoint";
11
+ attribute :>> shortDescription = "Shows stakeholder needs and their decomposition into system, software, and hardware requirements.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the requirements layer for requirements traceability — the chain from stakeholder need through system, software, and hardware requirements, supporting IEC 62304 §5.1.1 and ISO 13485 §7.3.3.";
13
+ attribute :>> purpose = "Communicate requirements decomposition and traceability.";
14
+ attribute :>> audience = (AudienceKind::regulatoryEngineer, AudienceKind::systemArchitect);
15
+ attribute :>> stage = WorkflowStageKind::requirements;
16
+ attribute :>> abstractionLevel = "requirements";
17
+ attribute :>> outputKind = (ViewOutputKind::diagram, ViewOutputKind::matrix);
18
+ attribute :>> presentationKind = (PresentationKind::traceMatrix);
19
+ attribute :>> concernKinds = (ConcernKind::regulatory, ConcernKind::safety);
20
+ attribute :>> includedLayers = ("requirements");
21
+ attribute :>> allowedElementKinds = ("StakeholderNeed", "Requirement", "SystemRequirement", "SoftwareRequirement", "HardwareRequirement");
22
+ attribute :>> methodologyReference = ("default-layer-viewpoint");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,30 @@
1
+ package memo_viewpoints_risk_risk_chain_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_risk_risk_viewpoint::*;
7
+
8
+ view riskChainView : MemoDiagramView {
9
+ expose memo_viewpoints_risk_risk_chain_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-RISK-001";
12
+ attribute :>> name = "RiskChainView";
13
+ attribute :>> title = "Risk Mitigation Chain View";
14
+ attribute :>> shortDescription = "Hazards through harms with controls and verification.";
15
+ attribute :>> outputKind = (ViewOutputKind::table);
16
+ attribute :>> presentationKind = (PresentationKind::riskTable);
17
+ attribute :>> diagramType = "risk";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include hazards, hazardous situations, harms, controls, and verification evidence.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-RISK-001";
22
+ attribute :>> name = "RiskChainQuery";
23
+ attribute :>> includeElementKinds = ("Hazard", "HazardousSituation", "Harm", "RiskControl", "VerificationCase");
24
+ attribute :>> includeLayers = ("risk", "assurance");
25
+ attribute :>> includeConcerns = (ConcernKind::safety);
26
+ attribute :>> rationaleText = "Auto-populate the risk chain view from the risk and assurance layers.";
27
+ }
28
+ part :>> viewpointDefinition = riskViewpoint;
29
+ }
30
+ }
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_risk_risk_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part riskViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-RISK";
9
+ attribute :>> name = "RiskViewpoint";
10
+ attribute :>> title = "Risk and Control Viewpoint";
11
+ attribute :>> shortDescription = "Shows hazards, risks, controls, and assurance links.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the risk layer for ISO 14971-style reasoning across hazard, hazardous situation, harm, control, and verification evidence.";
13
+ attribute :>> purpose = "Communicate safety risk chains and controls.";
14
+ attribute :>> audience = (AudienceKind::safetyEngineer);
15
+ attribute :>> stage = WorkflowStageKind::risk;
16
+ attribute :>> abstractionLevel = "analysis";
17
+ attribute :>> outputKind = (ViewOutputKind::table);
18
+ attribute :>> presentationKind = (PresentationKind::riskTable);
19
+ attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::regulatory);
20
+ attribute :>> includedLayers = ("risk", "assurance");
21
+ attribute :>> allowedElementKinds = ("Hazard", "HazardousSituation", "Harm", "Risk", "RiskControl", "VerificationCase");
22
+ attribute :>> methodologyReference = ("iso14971-default");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,29 @@
1
+ package memo_viewpoints_software_software_architecture_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_software_software_viewpoint::*;
7
+
8
+ view softwareArchitectureView : MemoDiagramView {
9
+ expose memo_viewpoints_software_software_architecture_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-SW-001";
12
+ attribute :>> name = "SoftwareArchitectureView";
13
+ attribute :>> title = "Software Architecture View";
14
+ attribute :>> shortDescription = "Software systems, components, and SOUP with their decomposition.";
15
+ attribute :>> outputKind = (ViewOutputKind::diagram);
16
+ attribute :>> presentationKind = (PresentationKind::blockDiagram);
17
+ attribute :>> diagramType = "bdd";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include software systems, components, and SOUP components with their decomposition.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-SW-001";
22
+ attribute :>> name = "SoftwareArchitectureQuery";
23
+ attribute :>> includeElementKinds = ("SoftwareSystem", "SoftwareComponent", "SOUPComponent");
24
+ attribute :>> includeLayers = ("software_structure");
25
+ attribute :>> rationaleText = "Auto-populate the software architecture view from the software structure layer.";
26
+ }
27
+ part :>> viewpointDefinition = softwareViewpoint;
28
+ }
29
+ }
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_software_software_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part softwareViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-SW";
9
+ attribute :>> name = "SoftwareViewpoint";
10
+ attribute :>> title = "Software Viewpoint";
11
+ attribute :>> shortDescription = "Shows software systems, components, SOUP, and software interfaces.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the software structure layer for IEC 62304 software architecture description — software item decomposition, SOUP inventory, and software-to-software interfaces, distinct from system-level logical decomposition.";
13
+ attribute :>> purpose = "Describe the software architecture for IEC 62304 design documentation.";
14
+ attribute :>> audience = (AudienceKind::softwareArchitect);
15
+ attribute :>> stage = WorkflowStageKind::architecture;
16
+ attribute :>> abstractionLevel = "software";
17
+ attribute :>> outputKind = (ViewOutputKind::diagram);
18
+ attribute :>> presentationKind = (PresentationKind::blockDiagram);
19
+ attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::reliability);
20
+ attribute :>> includedLayers = ("software_structure", "interfaces");
21
+ attribute :>> allowedElementKinds = ("SoftwareSystem", "SoftwareComponent", "SOUPComponent", "SoftwareInterface");
22
+ attribute :>> methodologyReference = ("default-layer-viewpoint");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,13 @@
1
+ package memo_viewpoints_usability_usability_engineering_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ view def MemoUsabilityEngineeringView :> MemoDocumentView {
8
+ attribute :>> viewKind = DocumentViewKind::Usability;
9
+ attribute :>> generationRule = "Include actors, use contexts, use errors, and requirements tagged with the usability concern to support the Usability Engineering Report.";
10
+ attribute :>> outputKind = (ViewOutputKind::documentSection);
11
+ attribute :>> presentationKind = (PresentationKind::narrativeSection);
12
+ }
13
+ }
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_usability_usability_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part usabilityViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-USE";
9
+ attribute :>> name = "UsabilityViewpoint";
10
+ attribute :>> title = "Usability Viewpoint";
11
+ attribute :>> shortDescription = "Shows use contexts, actors, use errors, and usability requirements.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the context and requirements layers for IEC 62366-1 usability engineering — actors, use contexts, identified use errors, and requirements tagged with the usability concern. Reuses existing context-layer elements (Actor, UseContext, UseError) rather than a separate usability layer.";
13
+ attribute :>> purpose = "Communicate use-related hazards and usability requirements for the device.";
14
+ attribute :>> audience = (AudienceKind::usabilityEngineer, AudienceKind::safetyEngineer);
15
+ attribute :>> stage = WorkflowStageKind::requirements;
16
+ attribute :>> abstractionLevel = "usability";
17
+ attribute :>> outputKind = (ViewOutputKind::documentSection);
18
+ attribute :>> presentationKind = (PresentationKind::narrativeSection);
19
+ attribute :>> concernKinds = (ConcernKind::usability, ConcernKind::safety);
20
+ attribute :>> includedLayers = ("context", "requirements");
21
+ attribute :>> allowedElementKinds = ("Actor", "UseContext", "UseError", "Requirement");
22
+ attribute :>> methodologyReference = ("default-layer-viewpoint");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,29 @@
1
+ package memo_viewpoints_verification_verification_coverage_view {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+ private import memo_viewpoints_verification_verification_viewpoint::*;
7
+
8
+ view verificationCoverageView : MemoDiagramView {
9
+ expose memo_viewpoints_verification_verification_coverage_view::*;
10
+ attribute depth = 2;
11
+ attribute :>> id = "VIEW-VER-001";
12
+ attribute :>> name = "VerificationCoverageView";
13
+ attribute :>> title = "Verification & Validation Coverage View";
14
+ attribute :>> shortDescription = "Requirements with their verification cases, validation cases, and evidence.";
15
+ attribute :>> outputKind = (ViewOutputKind::matrix);
16
+ attribute :>> presentationKind = (PresentationKind::traceMatrix);
17
+ attribute :>> diagramType = "req";
18
+ attribute :>> autoPopulate = true;
19
+ attribute :>> queryDescription = "Include requirements and their linked verification/validation cases and evidence.";
20
+ part :>> selectionQuery {
21
+ attribute :>> id = "QRY-VER-001";
22
+ attribute :>> name = "VerificationCoverageQuery";
23
+ attribute :>> includeElementKinds = ("Requirement", "VerificationCase", "ValidationCase", "Evidence");
24
+ attribute :>> includeLayers = ("requirements", "assurance");
25
+ attribute :>> rationaleText = "Auto-populate V&V coverage from the requirements and assurance layers.";
26
+ }
27
+ part :>> viewpointDefinition = verificationViewpoint;
28
+ }
29
+ }
@@ -0,0 +1,25 @@
1
+ package memo_viewpoints_verification_verification_viewpoint {
2
+ private import ScalarValues::*;
3
+
4
+ private import memo_viewpoints_definitions::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part verificationViewpoint : Viewpoint {
8
+ attribute :>> id = "VP-VER";
9
+ attribute :>> name = "VerificationViewpoint";
10
+ attribute :>> title = "Verification & Validation Viewpoint";
11
+ attribute :>> shortDescription = "Shows verification cases, validation cases, and the evidence they produce, traced to requirements.";
12
+ attribute :>> longDescription = "Default viewpoint derived from the requirements and assurance layers for V&V coverage — which requirements are verified/validated, by which case, and what evidence was produced, supporting ISO 13485 §7.3.6/§7.3.7 and IEC 62304 §5.7/§5.8.";
13
+ attribute :>> purpose = "Communicate verification and validation coverage against requirements.";
14
+ attribute :>> audience = (AudienceKind::verificationEngineer);
15
+ attribute :>> stage = WorkflowStageKind::verificationStage;
16
+ attribute :>> abstractionLevel = "verification";
17
+ attribute :>> outputKind = (ViewOutputKind::matrix);
18
+ attribute :>> presentationKind = (PresentationKind::traceMatrix);
19
+ attribute :>> concernKinds = (ConcernKind::safety, ConcernKind::regulatory);
20
+ attribute :>> includedLayers = ("requirements", "assurance");
21
+ attribute :>> allowedElementKinds = ("Requirement", "VerificationCase", "ValidationCase", "Evidence", "TestArtifact");
22
+ attribute :>> methodologyReference = ("default-layer-viewpoint");
23
+ attribute :>> userExtensible = true;
24
+ }
25
+ }
@@ -0,0 +1,5 @@
1
+ name: "{{name}}"
2
+ version: "0.1.0"
3
+ type: device
4
+ extends: "@memo/medical-modeling-profile"
5
+ description: "MEMO medical device model project"
@@ -0,0 +1,12 @@
1
+ package memo_starter_catalog {
2
+ import memo_medical_device_library::*;
3
+
4
+ part starterSystem : System {
5
+ attribute redefines name = "{{name}}";
6
+ }
7
+
8
+ requirement mainRequirement : Requirement {
9
+ attribute redefines title = "Main system requirement";
10
+ doc /* TODO: define the first system requirement. */
11
+ }
12
+ }
@@ -0,0 +1 @@
1
+
@@ -0,0 +1 @@
1
+