@memoarchitect/ontology 0.12.0 → 0.13.2

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 (50) hide show
  1. package/README.md +1 -1
  2. package/examples/gpca-pump/memo.identity.yaml +27 -0
  3. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +0 -1
  4. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +0 -1
  5. package/examples/sysml-diagram-samples/README.md +10 -0
  6. package/examples/sysml-diagram-samples/dashboards/README.md +17 -0
  7. package/examples/sysml-diagram-samples/dashboards/viewpoint-vp-demo-ibd.md +61 -0
  8. package/examples/sysml-diagram-samples/memo.identity.yaml +832 -0
  9. package/examples/sysml-diagram-samples/model/catalog/project.sysml +6 -1
  10. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +81 -6
  11. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +1 -13
  12. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +67 -0
  13. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +4 -20
  14. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +333 -0
  15. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +1 -10
  16. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +51 -0
  17. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +28 -14
  18. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +1 -10
  19. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +56 -0
  20. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +9 -24
  21. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +81 -0
  22. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +14 -21
  23. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +4 -15
  24. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +2 -15
  25. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +28 -25
  26. package/extensions/aadl/memo.package.yaml +1 -1
  27. package/extensions/cloud/memo.package.yaml +1 -1
  28. package/extensions/container/memo.package.yaml +1 -1
  29. package/extensions/messaging/memo.package.yaml +1 -1
  30. package/extensions/ros/memo.package.yaml +1 -1
  31. package/methodologies/default/memo.package.yaml +1 -1
  32. package/methodologies/gpca/memo.package.yaml +1 -1
  33. package/ontology/memo.package.yaml +1 -1
  34. package/package.json +1 -1
  35. package/profile/memo.package.yaml +1 -1
  36. package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -2
  37. package/src/viewpoints/context/context_viewpoint.sysml +2 -2
  38. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -2
  39. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -1
  40. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -2
  41. package/src/viewpoints/logical/logical_viewpoint.sysml +2 -2
  42. package/src/viewpoints/operational/operational_viewpoint.sysml +2 -2
  43. package/src/viewpoints/physical/physical_viewpoint.sysml +2 -2
  44. package/src/viewpoints/requirements/requirements_viewpoint.sysml +2 -2
  45. package/src/viewpoints/risk/risk_viewpoint.sysml +2 -2
  46. package/src/viewpoints/software/software_viewpoint.sysml +2 -2
  47. package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +34 -7
  48. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -2
  49. package/src/viewpoints/usability/usability_viewpoint.sysml +2 -2
  50. package/src/viewpoints/verification/verification_viewpoint.sysml +2 -2
@@ -12,12 +12,17 @@ package memo_examples_sysml_diagram_samples_project {
12
12
  // The project's own content, imported so the catalog is one reachable
13
13
  // closure from a single entrypoint.
14
14
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
15
+ private import diagram_samples::*;
15
16
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_flow_view::*;
17
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_browser_view::*;
16
18
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_view::*;
17
19
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_functional_flow_view::*;
20
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_grid_view::*;
18
21
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_interconnection_view::*;
19
22
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_operational_behaviour_view::*;
23
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_package_view::*;
20
24
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirements_view::*;
25
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_sequence_view::*;
21
26
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_standard_activity_view::*;
22
27
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_state_transition_view::*;
23
28
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_view::*;
@@ -26,7 +31,7 @@ package memo_examples_sysml_diagram_samples_project {
26
31
  private import memo_core_common::*;
27
32
  private import memo_core_common::MemoIdentity;
28
33
  part projectBinding : ProjectMethodBinding {
29
- @MemoIdentity { :>> providedId = "PMB-DIAGRAM-SAMPLES-001"; }
34
+ @MemoIdentity { :>> providedId = "PMB-DIAGRAM-SAMPLES-1"; }
30
35
  attribute :>> name = "SysmlDiagramSamplesProjectMethodBinding";
31
36
  attribute :>> projectName = "Sysml Diagram Samples";
32
37
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -1,9 +1,84 @@
1
- // unassigned viewpoint.
1
+ // Diagram-type viewpoints for the sample gallery.
2
2
  //
3
- // This project does not define its own viewpoint here; it binds the reusable
4
- // MEMO viewpoint that frames these concerns. The views it governs sit beneath
5
- // `views/`.
3
+ // The standard MEMO viewpoints group by engineering concern (Functional,
4
+ // Operational, …). These example-only viewpoints group by diagram kind
5
+ // so a user exploring the gallery finds each renderer demo in an
6
+ // obviously-named folder.
6
7
  package memo_examples_sysml_diagram_samples_viewpoints_unassigned {
7
- // The reusable package declaring unassigned could not be resolved during
8
- // conversion. Import it here so the views beneath this viewpoint resolve.
8
+ private import ScalarValues::*;
9
+ private import memo_viewpoints_definitions::*;
10
+ private import memo_core_enumerations::*;
11
+ private import memo_viewpoints_stakeholders_concerns::*;
12
+ private import memo_core_common::*;
13
+ private import memo_core_common::MemoIdentity;
14
+
15
+ viewpoint contextDiagramViewpoint : MemoViewpoint {
16
+ @MemoIdentity { :>> providedId = "VP-DEMO-CTX"; }
17
+ attribute :>> name = "Context Diagram";
18
+ @MemoIdentity { :>> shortDescription = "System context — actors, external systems, and boundary interactions."; }
19
+ attribute :>> explorerOrder = 1;
20
+ }
21
+
22
+ viewpoint actionFlowViewpoint : MemoViewpoint {
23
+ @MemoIdentity { :>> providedId = "VP-DEMO-AFD"; }
24
+ attribute :>> name = "Action Flow";
25
+ @MemoIdentity { :>> shortDescription = "Swimlane action flows with typed item flows and composite actions."; }
26
+ attribute :>> explorerOrder = 2;
27
+ }
28
+
29
+ viewpoint ibdViewpoint : MemoViewpoint {
30
+ @MemoIdentity { :>> providedId = "VP-DEMO-IBD"; }
31
+ attribute :>> name = "Internal Block Diagram";
32
+ @MemoIdentity { :>> shortDescription = "Internal structure — parts, ports, and connectors."; }
33
+ attribute :>> explorerOrder = 3;
34
+ }
35
+
36
+ viewpoint stateMachineViewpoint : MemoViewpoint {
37
+ @MemoIdentity { :>> providedId = "VP-DEMO-STD"; }
38
+ attribute :>> name = "State Machine";
39
+ @MemoIdentity { :>> shortDescription = "State transitions with composite states and guards."; }
40
+ attribute :>> explorerOrder = 4;
41
+ }
42
+
43
+ viewpoint sequenceViewpoint : MemoViewpoint {
44
+ @MemoIdentity { :>> providedId = "VP-DEMO-SEQ"; }
45
+ attribute :>> name = "Sequence Diagram";
46
+ @MemoIdentity { :>> shortDescription = "Message sequences with combined fragments (loop, alt)."; }
47
+ attribute :>> explorerOrder = 5;
48
+ }
49
+
50
+ viewpoint useCaseViewpoint : MemoViewpoint {
51
+ @MemoIdentity { :>> providedId = "VP-DEMO-UCD"; }
52
+ attribute :>> name = "Use Case Diagram";
53
+ @MemoIdentity { :>> shortDescription = "Actors, use cases, include/extend/generalization."; }
54
+ attribute :>> explorerOrder = 6;
55
+ }
56
+
57
+ viewpoint requirementsDiagramViewpoint : MemoViewpoint {
58
+ @MemoIdentity { :>> providedId = "VP-DEMO-REQ"; }
59
+ attribute :>> name = "Requirements Diagram";
60
+ @MemoIdentity { :>> shortDescription = "Needs, requirements, and derivation traces."; }
61
+ attribute :>> explorerOrder = 7;
62
+ }
63
+
64
+ viewpoint browserViewpoint : MemoViewpoint {
65
+ @MemoIdentity { :>> providedId = "VP-DEMO-BRW"; }
66
+ attribute :>> name = "Browser View";
67
+ @MemoIdentity { :>> shortDescription = "Hierarchical membership tree of model elements."; }
68
+ attribute :>> explorerOrder = 8;
69
+ }
70
+
71
+ viewpoint gridViewpoint : MemoViewpoint {
72
+ @MemoIdentity { :>> providedId = "VP-DEMO-GRD"; }
73
+ attribute :>> name = "Grid / Table View";
74
+ @MemoIdentity { :>> shortDescription = "Tabular worksheet rendering of model attributes."; }
75
+ attribute :>> explorerOrder = 9;
76
+ }
77
+
78
+ viewpoint treeViewpoint : MemoViewpoint {
79
+ @MemoIdentity { :>> providedId = "VP-DEMO-TRE"; }
80
+ attribute :>> name = "Decomposition Diagram";
81
+ @MemoIdentity { :>> shortDescription = "Block decomposition — hierarchical breakdown rendered as a tree."; }
82
+ attribute :>> explorerOrder = 10;
83
+ }
9
84
  }
@@ -1,8 +1,7 @@
1
1
  package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_flow_view {
2
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
2
3
  private import ScalarValues::*;
3
4
  private import memo_core_relationships::*;
4
- private import ModelingMetadata::*;
5
-
6
5
  private import memo_architecture_logical_structure::*;
7
6
  private import memo_architecture_logical_interfaces::*;
8
7
  private import memo_architecture_functional_functions::*;
@@ -80,15 +79,4 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_f
80
79
  * that is a duplicate of `dependency` rather than something more.
81
80
  */
82
81
  dependency linkLaneBProcessesInput from laneB to sampleActionFlow::process;
83
-
84
- view sampleActionFlowView : MemoDiagramView {
85
- expose sampleActionFlow::**;
86
- expose laneA;
87
- expose laneB;
88
- attribute depth = 2;
89
- @MemoIdentity { :>> shortDescription = "Dummy actions, typed item flows, successions, and a composite action for renderer development."; }
90
- attribute :>> viewKind = DiagramViewKind::actionflow;
91
- attribute :>> diagramType = "afd";
92
- ref :>> viewpointDefinition = functionalViewpoint;
93
- }
94
82
  }
@@ -0,0 +1,67 @@
1
+ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_browser_view {
2
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
3
+ private import ScalarValues::*;
4
+ private import memo_architecture_operational_context_actors::*;
5
+ private import memo_architecture_operational_use_cases::*;
6
+ private import memo_architecture_operational_structure::*;
7
+ private import memo_core_relationships::*;
8
+ private import memo_viewpoints_definitions::*;
9
+ private import memo_viewpoints_operational_operational_viewpoint::*;
10
+ private import memo_core_enumerations::*;
11
+
12
+ private import memo_core_common::*;
13
+ private import memo_core_common::MemoIdentity;
14
+
15
+ // Operational decomposition for the browser membership tree.
16
+ // A top-level system with sub-systems, actors, and use cases arranged
17
+ // to demonstrate the browser view's hierarchical grouping by kind.
18
+
19
+ part controlSystem : OperationalEntity {
20
+ attribute :>> name = "Control System";
21
+
22
+ part supervisorModule : OperationalEntity {
23
+ attribute :>> name = "Supervisor Module";
24
+ }
25
+ part safetyModule : OperationalEntity {
26
+ attribute :>> name = "Safety Module";
27
+ }
28
+ part communicationModule : OperationalEntity {
29
+ attribute :>> name = "Communication Module";
30
+ }
31
+ }
32
+
33
+ part systemOperator : User {
34
+ attribute :>> actorKind = ActorKind::clinician;
35
+ attribute :>> name = "Operator";
36
+ }
37
+ part maintenanceEngineer : User {
38
+ attribute :>> actorKind = ActorKind::technician;
39
+ attribute :>> name = "Maintenance Engineer";
40
+ }
41
+ part remoteMonitor : User {
42
+ attribute :>> actorKind = ActorKind::clinician;
43
+ attribute :>> name = "Remote Monitor";
44
+ }
45
+
46
+ use case startSystem : UseCase {
47
+ @MemoIdentity { :>> providedId = "UC-BRW-1"; }
48
+ attribute :>> name = "Start System";
49
+ attribute :>> useCaseKind = UseCaseKind::clinical;
50
+ subject controlSystem;
51
+ actor operatorActor = systemOperator;
52
+ }
53
+ use case runDiagnostics : UseCase {
54
+ @MemoIdentity { :>> providedId = "UC-BRW-2"; }
55
+ attribute :>> name = "Run Diagnostics";
56
+ attribute :>> useCaseKind = UseCaseKind::service;
57
+ subject controlSystem;
58
+ actor engineerActor = maintenanceEngineer;
59
+ }
60
+ use case monitorStatus : UseCase {
61
+ @MemoIdentity { :>> providedId = "UC-BRW-3"; }
62
+ attribute :>> name = "Monitor Status";
63
+ attribute :>> useCaseKind = UseCaseKind::clinical;
64
+ subject controlSystem;
65
+ actor monitorActor = remoteMonitor;
66
+ }
67
+ }
@@ -1,7 +1,8 @@
1
- // System context sample (general view kind, `context` diagram type). The system
2
- // under consideration is one block; every other element is an external actor,
3
- // neighbouring system, or use context it interacts with across its boundary.
4
1
  package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_view {
2
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
3
+ // System context sample (general view kind, `context` diagram type). The system
4
+ // under consideration is one block; every other element is an external actor,
5
+ // neighbouring system, or use context it interacts with across its boundary.
5
6
  private import ScalarValues::*;
6
7
 
7
8
  private import memo_architecture_operational_context_actors::*;
@@ -36,21 +37,4 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_
36
37
  connection connect biomedTech to infusionSystem;
37
38
  flow from infusionSystem to pharmacySystem;
38
39
  connection : AppliesInContext connect useContext ::> homeContext to subjectElement ::> infusionSystem;
39
-
40
- view sampleContextView : MemoDiagramView {
41
- expose infusionSystem::**;
42
- expose clinician;
43
- expose patient;
44
- expose biomedTech;
45
- expose pharmacySystem;
46
- expose homeContext;
47
- attribute depth = 1;
48
- @MemoIdentity { :>> shortDescription = "Operational system context: one black-box system boundary, its external people, peer systems, operating environment, and named boundary-crossing interactions."; }
49
- attribute :>> viewKind = DiagramViewKind::general;
50
- attribute :>> diagramType = "context";
51
- ref :>> viewpointDefinition = contextViewpoint;
52
- part :>> selectionQuery {
53
- attribute :>> includeRelationshipKinds = ("connect", "flow", "AppliesInContext");
54
- }
55
- }
56
40
  }
@@ -0,0 +1,333 @@
1
+ // Every view of the diagram gallery, in one package.
2
+ //
3
+ // Each sample's model content lives in its own file and package, next to
4
+ // this one, and is imported below. The views are gathered here so the
5
+ // explorer lists them together under each diagram-type viewpoint: a SysML
6
+ // root package is declared once, in one file, so a shared `diagram_samples`
7
+ // package cannot be split across the sample files themselves.
8
+ package diagram_samples {
9
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
10
+ private import ScalarValues::*;
11
+ private import memo_core_relationships::*;
12
+ private import memo_architecture_logical_structure::*;
13
+ private import memo_architecture_logical_interfaces::*;
14
+ private import memo_architecture_functional_functions::*;
15
+ private import memo_viewpoints_definitions::*;
16
+ private import memo_viewpoints_functional_functional_viewpoint::*;
17
+ private import memo_core_enumerations::*;
18
+ private import memo_core_common::*;
19
+ private import memo_core_common::MemoIdentity;
20
+ private import memo_architecture_operational_context_actors::*;
21
+ private import memo_architecture_operational_use_cases::*;
22
+ private import memo_architecture_operational_structure::*;
23
+ private import memo_viewpoints_operational_operational_viewpoint::*;
24
+ private import memo_architecture_operational_context_use_context::*;
25
+ private import memo_viewpoints_context_context_viewpoint::*;
26
+ private import memo_assurance_safety_risk_analysis::*;
27
+ private import memo_viewpoints_logical_logical_viewpoint::*;
28
+ private import memo_architecture_operational_activities::*;
29
+ private import memo_assurance_requirements_needs::*;
30
+ private import memo_assurance_requirements::*;
31
+ private import memo_viewpoints_requirements_requirements_viewpoint::*;
32
+ private import activity_example::*;
33
+ private import memo_architecture_functional_behavior::*;
34
+ private import memo_architecture_implementation_hardware_structure::*;
35
+ private import memo_architecture_realization_physical::*;
36
+ private import memo_viewpoints_physical_physical_viewpoint::*;
37
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_flow_view::*;
38
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_browser_view::*;
39
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_view::*;
40
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_functional_flow_view::*;
41
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_grid_view::*;
42
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_interconnection_view::*;
43
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_operational_behaviour_view::*;
44
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_package_view::*;
45
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirements_view::*;
46
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_sequence_view::*;
47
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_standard_activity_view::*;
48
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_state_transition_view::*;
49
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_view::*;
50
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case_view::*;
51
+
52
+ // ─── action flow view ────────────────────────────────────────────────
53
+
54
+ // Child action-flow view — the process composite action's own steps. Its
55
+ // subject is `sampleActionFlow.process`, so the parent action-flow shows a
56
+ // "navigate to view" button on the Process node.
57
+ view processStepsDetail : MemoDiagramView {
58
+ expose sampleActionFlow::process::**;
59
+ attribute depth = 2;
60
+ @MemoIdentity { :>> shortDescription = "Internal steps of the Process action — step A through C."; }
61
+ attribute :>> viewKind = DiagramViewKind::actionflow;
62
+ attribute :>> diagramType = "afd";
63
+ ref :>> viewpointDefinition = actionFlowViewpoint;
64
+ }
65
+
66
+ view therapySessionFlow : MemoDiagramView {
67
+ expose sampleActionFlow::**;
68
+ expose laneA;
69
+ expose laneB;
70
+ attribute depth = 2;
71
+ @MemoIdentity { :>> shortDescription = "Dummy actions, typed item flows, successions, and a composite action for renderer development."; }
72
+ attribute :>> viewKind = DiagramViewKind::actionflow;
73
+ attribute :>> diagramType = "afd";
74
+ ref :>> viewpointDefinition = actionFlowViewpoint;
75
+ }
76
+
77
+ // ─── browser view ────────────────────────────────────────────────────
78
+
79
+ view operationalBrowserTree : MemoDiagramView {
80
+ expose controlSystem::**;
81
+ expose systemOperator;
82
+ expose maintenanceEngineer;
83
+ expose remoteMonitor;
84
+ expose startSystem::**;
85
+ expose runDiagnostics::**;
86
+ expose monitorStatus::**;
87
+ @MemoIdentity { :>> shortDescription = "Browser membership tree showing operational entities, actors, and use cases — demonstrates the browser view kind with mixed element types."; }
88
+ attribute :>> viewKind = DiagramViewKind::browser;
89
+ attribute :>> diagramType = "brw";
90
+ ref :>> viewpointDefinition = browserViewpoint;
91
+ part :>> selectionQuery {
92
+ attribute :>> includeElementKinds = ("OperationalEntity", "User", "UseCase");
93
+ attribute :>> includeRelationshipKinds = ("Composes", "ParticipatesIn");
94
+ }
95
+ }
96
+
97
+ // ─── context view ────────────────────────────────────────────────────
98
+
99
+ view systemContextDiagram : MemoDiagramView {
100
+ expose infusionSystem::**;
101
+ expose clinician;
102
+ expose patient;
103
+ expose biomedTech;
104
+ expose pharmacySystem;
105
+ expose homeContext;
106
+ attribute depth = 1;
107
+ @MemoIdentity { :>> shortDescription = "Operational system context: one black-box system boundary, its external people, peer systems, operating environment, and named boundary-crossing interactions."; }
108
+ attribute :>> viewKind = DiagramViewKind::general;
109
+ attribute :>> diagramType = "context";
110
+ ref :>> viewpointDefinition = contextDiagramViewpoint;
111
+ part :>> selectionQuery {
112
+ attribute :>> includeRelationshipKinds = ("connect", "flow", "AppliesInContext");
113
+ }
114
+ }
115
+
116
+ // ─── functional flow view ────────────────────────────────────────────
117
+
118
+ view medicationDeliveryFlow : MemoDiagramView {
119
+ expose fxDeliveryFlow::**;
120
+ expose fxPumpSystem::**;
121
+ attribute depth = 2;
122
+ @MemoIdentity { :>> shortDescription = "Component behaviour: functions in swimlanes per realising component, typed data/energy/material flows, a fork/join for concurrent occlusion monitoring, and a composite 'Deliver Medication' valve sub-flow (double-click to drill in)."; }
123
+ attribute :>> viewKind = DiagramViewKind::actionflow;
124
+ attribute :>> diagramType = "ffd";
125
+ ref :>> viewpointDefinition = actionFlowViewpoint;
126
+ }
127
+
128
+ // ─── grid view ───────────────────────────────────────────────────────
129
+
130
+ view failureModeGrid : MemoDiagramView {
131
+ expose fmMotorRunaway::**;
132
+ expose fmAirSensorSilent::**;
133
+ expose fmOcclusionDrift::**;
134
+ attribute depth = 2;
135
+ @MemoIdentity { :>> shortDescription = "Three FailureMode rows rendered as an FMEA worksheet table — one section, columns auto-derived from the attributes the rows carry."; }
136
+ attribute :>> viewKind = DiagramViewKind::grid;
137
+ attribute :>> diagramType = "fmea";
138
+ ref :>> viewpointDefinition = gridViewpoint;
139
+ part :>> selectionQuery {
140
+ attribute :>> includeElementKinds = ("FailureMode");
141
+ }
142
+ }
143
+
144
+ // ─── interconnection view ────────────────────────────────────────────
145
+
146
+ // Child IBD view — the heater assembly's own internal wiring. Its subject
147
+ // is `heaterAssembly`, so the parent IBD shows a "navigate to view" button
148
+ // on the Thermal Control Assembly part.
149
+ view heaterAssemblyIBD : MemoDiagramView {
150
+ expose coffeeMachine::heaterAssembly::**;
151
+ attribute depth = 2;
152
+ @MemoIdentity { :>> shortDescription = "Internal wiring of the Thermal Control Assembly — heating element and its status output."; }
153
+ attribute :>> viewKind = DiagramViewKind::interconnection;
154
+ attribute :>> diagramType = "ibd";
155
+ attribute :>> rendererProfile = "ibd";
156
+ ref :>> viewpointDefinition = ibdViewpoint;
157
+ part :>> selectionQuery {
158
+ attribute :>> includeRelationshipKinds = ("Composes", "flow", "bind");
159
+ }
160
+ }
161
+
162
+ view heatingElementIBD : MemoDiagramView {
163
+ expose coffeeMachine::heaterAssembly::heatingElement::**;
164
+ attribute depth = 2;
165
+ @MemoIdentity { :>> shortDescription = "Third-level IBD — resistive coil and temperature sensor inside the heating element."; }
166
+ attribute :>> viewKind = DiagramViewKind::interconnection;
167
+ attribute :>> diagramType = "ibd";
168
+ attribute :>> rendererProfile = "ibd";
169
+ ref :>> viewpointDefinition = ibdViewpoint;
170
+ part :>> selectionQuery {
171
+ attribute :>> includeRelationshipKinds = ("Composes", "flow", "bind");
172
+ }
173
+ }
174
+
175
+ view beverageMachineIBD : MemoDiagramView {
176
+ expose coffeeMachine::**;
177
+ expose waterSupply::**;
178
+ expose cup::**;
179
+ attribute depth = 2;
180
+ @MemoIdentity { :>> shortDescription = "Balanced internal architecture with readable boundary ports, nested service diagnostics, and external water and beverage interfaces."; }
181
+ attribute :>> viewKind = DiagramViewKind::interconnection;
182
+ attribute :>> diagramType = "ibd";
183
+ // The dedicated IBD renderer (Base -> Ibd class hierarchy): square
184
+ // wall ports, orange-in/green-out, solid grabbable nested-connector
185
+ // housings, orthogonal crossing-bridge routing, monochrome shading.
186
+ attribute :>> rendererProfile = "ibd";
187
+ ref :>> viewpointDefinition = ibdViewpoint;
188
+ part :>> selectionQuery {
189
+ attribute :>> includeRelationshipKinds = ("Composes", "flow", "bind");
190
+ }
191
+ }
192
+
193
+ // ─── operational behaviour view ──────────────────────────────────────
194
+
195
+ view clinicalSetupActivity : MemoDiagramView {
196
+ expose opSetupFlow::**;
197
+ expose opCareSystem::**;
198
+ attribute depth = 2;
199
+ @MemoIdentity { :>> shortDescription = "Operational activity across clinical roles with concurrent preparation and a composite therapy step."; }
200
+ attribute :>> viewKind = DiagramViewKind::actionflow;
201
+ attribute :>> diagramType = "ofd";
202
+ ref :>> viewpointDefinition = actionFlowViewpoint;
203
+ }
204
+
205
+ // ─── package view ────────────────────────────────────────────────────
206
+
207
+ view threeLayerPackages : MemoDiagramView {
208
+ expose presentation::**;
209
+ expose domain::**;
210
+ expose infrastructure::**;
211
+ attribute depth = 2;
212
+ @MemoIdentity { :>> shortDescription = "Three-layer package overview — presentation, domain, infrastructure — rendered as a browser membership tree."; }
213
+ attribute :>> viewKind = DiagramViewKind::browser;
214
+ attribute :>> diagramType = "pkg";
215
+ ref :>> viewpointDefinition = browserViewpoint;
216
+ part :>> selectionQuery {
217
+ attribute :>> includeRelationshipKinds = ("Composes");
218
+ }
219
+ }
220
+
221
+ // ─── requirements view ───────────────────────────────────────────────
222
+
223
+ view needsToRequirements : MemoDiagramView {
224
+ expose needSafeTherapy::**;
225
+ expose needTimelyAlarms::**;
226
+ expose reqDoseLimit;
227
+ expose reqOcclusionAlarm;
228
+ expose reqAlarmLoudness;
229
+ attribute depth = 1;
230
+ @MemoIdentity { :>> shortDescription = "Stakeholder needs deriving into system requirements, wired by DerivesFrom trace edges."; }
231
+ attribute :>> viewKind = DiagramViewKind::general;
232
+ attribute :>> diagramType = "req";
233
+ ref :>> viewpointDefinition = requirementsDiagramViewpoint;
234
+ part :>> selectionQuery {
235
+ attribute :>> includeRelationshipKinds = ("DerivesFrom");
236
+ }
237
+ }
238
+
239
+ // ─── sequence view ───────────────────────────────────────────────────
240
+
241
+ view startInfusionSequence : MemoDiagramView {
242
+ expose startInfusion::**;
243
+ expose clinician::**;
244
+ expose pumpController::**;
245
+ expose pumpMechanism::**;
246
+ expose monitorLoop::**;
247
+ expose errorHandling::**;
248
+ attribute depth = 2;
249
+ @MemoIdentity { :>> shortDescription = "Start-infusion sequence with combined fragments — loop for sensor monitoring and alt for error handling."; }
250
+ attribute :>> viewKind = DiagramViewKind::sequence;
251
+ attribute :>> diagramType = "seq";
252
+ ref :>> viewpointDefinition = sequenceViewpoint;
253
+ part :>> selectionQuery {
254
+ attribute :>> includeElementKinds = ("FunctionalFlowStep", "User", "LogicalComponent", "Part");
255
+ }
256
+ }
257
+
258
+ // ─── standard activity view ──────────────────────────────────────────
259
+
260
+ view orderFulfillmentActivity : MemoDiagramView {
261
+ expose FulfillOrder::**;
262
+ attribute depth = 2;
263
+ @MemoIdentity { :>> shortDescription = "Order fulfilment — accept, validate, decide, fork into parallel shipment and invoice, join, notify, send receipt, and terminate."; }
264
+ attribute :>> viewKind = DiagramViewKind::actionflow;
265
+ attribute :>> diagramType = "afd";
266
+ ref :>> viewpointDefinition = actionFlowViewpoint;
267
+ }
268
+
269
+ // ─── state transition view ───────────────────────────────────────────
270
+
271
+ view pumpModeStateMachine : MemoDiagramView {
272
+ expose pumpModes::**;
273
+ attribute depth = 2;
274
+ @MemoIdentity { :>> shortDescription = "A pump-mode state machine — Idle, Infusing, Paused, Alarm — where Infusing is a composite state nesting Priming, Delivering and Holding."; }
275
+ attribute :>> viewKind = DiagramViewKind::statetransition;
276
+ attribute :>> diagramType = "stm";
277
+ ref :>> viewpointDefinition = stateMachineViewpoint;
278
+ part :>> selectionQuery {
279
+ attribute :>> includeElementKinds = ("StateMachine", "MemoState");
280
+ }
281
+ }
282
+
283
+ view infusingSubStates : MemoDiagramView {
284
+ expose pumpModes::infusing::**;
285
+ attribute depth = 2;
286
+ @MemoIdentity { :>> shortDescription = "Sub-states of the Infusing composite state — Priming, Delivering, and Holding with their internal transitions."; }
287
+ attribute :>> viewKind = DiagramViewKind::statetransition;
288
+ attribute :>> diagramType = "stm";
289
+ ref :>> viewpointDefinition = stateMachineViewpoint;
290
+ part :>> selectionQuery {
291
+ attribute :>> includeElementKinds = ("MemoState");
292
+ }
293
+ }
294
+
295
+ // ─── tree view ───────────────────────────────────────────────────────
296
+
297
+ view blockDecomposition : MemoDiagramView {
298
+ expose rootA::**;
299
+ attribute depth = 2;
300
+ @MemoIdentity { :>> shortDescription = "Block decomposition tree — hardware assemblies with varied branch depths."; }
301
+ attribute :>> viewKind = DiagramViewKind::general;
302
+ attribute :>> diagramType = "bdd";
303
+ ref :>> viewpointDefinition = treeViewpoint;
304
+ attribute :>> layoutHint = "tree";
305
+ attribute :>> styleHint = "expanded:rootA,rootB,branchA1,branchB1";
306
+ part :>> selectionQuery {
307
+ attribute :>> includeRelationshipKinds = ("Composes");
308
+ }
309
+ }
310
+
311
+ // ─── use case view ───────────────────────────────────────────────────
312
+
313
+ view deviceUseCases : MemoDiagramView {
314
+ expose patient;
315
+ expose clinician;
316
+ expose serviceTechnician;
317
+ expose nursingStaff;
318
+ expose reviewStatus;
319
+ expose configureTherapy;
320
+ expose maintainDevice;
321
+ expose documentTreatment;
322
+ expose validateTherapySettings;
323
+ @MemoIdentity { :>> shortDescription = "Actors outside a device boundary with include, extend, generalization, hierarchy-level, and orthogonal-routing presentation."; }
324
+ attribute :>> viewKind = DiagramViewKind::general;
325
+ attribute :>> diagramType = "ucd";
326
+ ref :>> viewpointDefinition = useCaseViewpoint;
327
+ part :>> selectionQuery {
328
+ attribute :>> includeElementKinds = ("User", "UseCase");
329
+ attribute :>> includeRelationshipKinds = ("ParticipatesIn", "IncludesStep", "Extends", "Specialization");
330
+ }
331
+ attribute :>> layoutHint = "usecase:level=all;edge=rounded";
332
+ }
333
+ }
@@ -1,4 +1,5 @@
1
1
  package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_functional_flow_view {
2
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
2
3
  private import ScalarValues::*;
3
4
 
4
5
  private import memo_architecture_logical_structure::*;
@@ -131,14 +132,4 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_function
131
132
  allocate fxDeliveryFlow.fxDeliver.fxOpenValve to fxPumpSystem.fxDeliverySubsystem.fxActuator;
132
133
  allocate fxDeliveryFlow.fxDeliver.fxHoldDose to fxPumpSystem.fxDeliverySubsystem.fxActuator;
133
134
  allocate fxDeliveryFlow.fxDeliver.fxCloseValve to fxPumpSystem.fxDeliverySubsystem.fxActuator;
134
-
135
- view fxDeliveryView : MemoDiagramView {
136
- expose fxDeliveryFlow::**;
137
- expose fxPumpSystem::**;
138
- attribute depth = 2;
139
- @MemoIdentity { :>> shortDescription = "Component behaviour: functions in swimlanes per realising component, typed data/energy/material flows, a fork/join for concurrent occlusion monitoring, and a composite 'Deliver Medication' valve sub-flow (double-click to drill in)."; }
140
- attribute :>> viewKind = DiagramViewKind::actionflow;
141
- attribute :>> diagramType = "ffd";
142
- ref :>> viewpointDefinition = functionalViewpoint;
143
- }
144
135
  }
@@ -0,0 +1,51 @@
1
+ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_grid_view {
2
+ private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
3
+ // Grid sample (grid view kind, `fmea` diagram type). The grid template groups
4
+ // rows by kind and derives columns from whichever attributes the rows
5
+ // actually carry — no fixed schema, so three FailureMode rows render as one
6
+ // FMEA worksheet table.
7
+ private import ScalarValues::*;
8
+
9
+ private import memo_assurance_safety_risk_analysis::*;
10
+ private import memo_core_relationships::*;
11
+ private import memo_viewpoints_definitions::*;
12
+ private import memo_viewpoints_functional_functional_viewpoint::*;
13
+ private import memo_core_enumerations::*;
14
+
15
+ private import memo_core_common::*;
16
+ private import memo_core_common::MemoIdentity;
17
+
18
+ part fmMotorRunaway : FailureMode {
19
+ attribute :>> name = "PumpMotorRunaway";
20
+ attribute :>> failureModeKind = FailureModeKind::unintendedFunction;
21
+ attribute :>> effect = "Excess drug delivered beyond the prescribed rate.";
22
+ attribute :>> severityRating = 1;
23
+ attribute :>> occurrenceRating = 2;
24
+ attribute :>> probability = ProbabilityKind::improbable;
25
+ attribute :>> detectionRating = 3;
26
+ attribute :>> rpn = 6;
27
+ attribute :>> criticality = CriticalityKind::catastrophic;
28
+ }
29
+ part fmAirSensorSilent : FailureMode {
30
+ attribute :>> name = "AirSensorFailsSilent";
31
+ attribute :>> failureModeKind = FailureModeKind::lossOfFunction;
32
+ attribute :>> effect = "Air embolism reaches the patient undetected.";
33
+ attribute :>> severityRating = 1;
34
+ attribute :>> occurrenceRating = 3;
35
+ attribute :>> probability = ProbabilityKind::remote;
36
+ attribute :>> detectionRating = 4;
37
+ attribute :>> rpn = 12;
38
+ attribute :>> criticality = CriticalityKind::catastrophic;
39
+ }
40
+ part fmOcclusionDrift : FailureMode {
41
+ attribute :>> name = "OcclusionSensorDrift";
42
+ attribute :>> failureModeKind = FailureModeKind::degradedFunction;
43
+ attribute :>> effect = "Occlusion is detected late, interrupting therapy.";
44
+ attribute :>> severityRating = 7;
45
+ attribute :>> occurrenceRating = 4;
46
+ attribute :>> probability = ProbabilityKind::occasional;
47
+ attribute :>> detectionRating = 4;
48
+ attribute :>> rpn = 112;
49
+ attribute :>> criticality = CriticalityKind::high;
50
+ }
51
+ }