@memoarchitect/ontology 0.12.0 → 0.12.1

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 (32) hide show
  1. package/README.md +1 -1
  2. package/examples/gpca-pump/memo.identity.yaml +27 -0
  3. package/examples/sysml-diagram-samples/README.md +10 -0
  4. package/examples/sysml-diagram-samples/dashboards/README.md +17 -0
  5. package/examples/sysml-diagram-samples/dashboards/viewpoint-vp-demo-ibd.md +61 -0
  6. package/examples/sysml-diagram-samples/memo.identity.yaml +616 -0
  7. package/examples/sysml-diagram-samples/model/catalog/project.sysml +2 -11
  8. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +81 -6
  9. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +15 -5
  10. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +88 -0
  11. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +6 -6
  12. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -3
  13. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +64 -0
  14. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +64 -4
  15. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -3
  16. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +69 -0
  17. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +11 -11
  18. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +97 -0
  19. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +18 -18
  20. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -6
  21. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +5 -5
  22. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +34 -11
  23. package/extensions/aadl/memo.package.yaml +1 -1
  24. package/extensions/cloud/memo.package.yaml +1 -1
  25. package/extensions/container/memo.package.yaml +1 -1
  26. package/extensions/messaging/memo.package.yaml +1 -1
  27. package/extensions/ros/memo.package.yaml +1 -1
  28. package/methodologies/default/memo.package.yaml +1 -1
  29. package/methodologies/gpca/memo.package.yaml +1 -1
  30. package/ontology/memo.package.yaml +1 -1
  31. package/package.json +1 -1
  32. package/profile/memo.package.yaml +1 -1
@@ -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,6 @@
1
- package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_flow_view {
1
+ package diagram_samples {
2
2
  private import ScalarValues::*;
3
3
  private import memo_core_relationships::*;
4
- private import ModelingMetadata::*;
5
-
6
4
  private import memo_architecture_logical_structure::*;
7
5
  private import memo_architecture_logical_interfaces::*;
8
6
  private import memo_architecture_functional_functions::*;
@@ -81,7 +79,19 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_f
81
79
  */
82
80
  dependency linkLaneBProcessesInput from laneB to sampleActionFlow::process;
83
81
 
84
- view sampleActionFlowView : MemoDiagramView {
82
+ // Child action-flow view — the process composite action's own steps. Its
83
+ // subject is `sampleActionFlow.process`, so the parent action-flow shows a
84
+ // "navigate to view" button on the Process node.
85
+ view processStepsDetail : MemoDiagramView {
86
+ expose sampleActionFlow.process::**;
87
+ attribute depth = 2;
88
+ @MemoIdentity { :>> shortDescription = "Internal steps of the Process action — step A through C."; }
89
+ attribute :>> viewKind = DiagramViewKind::actionflow;
90
+ attribute :>> diagramType = "afd";
91
+ ref :>> viewpointDefinition = actionFlowViewpoint;
92
+ }
93
+
94
+ view therapySessionFlow : MemoDiagramView {
85
95
  expose sampleActionFlow::**;
86
96
  expose laneA;
87
97
  expose laneB;
@@ -89,6 +99,6 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_f
89
99
  @MemoIdentity { :>> shortDescription = "Dummy actions, typed item flows, successions, and a composite action for renderer development."; }
90
100
  attribute :>> viewKind = DiagramViewKind::actionflow;
91
101
  attribute :>> diagramType = "afd";
92
- ref :>> viewpointDefinition = functionalViewpoint;
102
+ ref :>> viewpointDefinition = actionFlowViewpoint;
93
103
  }
94
104
  }
@@ -0,0 +1,88 @@
1
+ package diagram_samples {
2
+ private import ScalarValues::*;
3
+ private import memo_architecture_operational_context_actors::*;
4
+ private import memo_architecture_operational_use_cases::*;
5
+ private import memo_architecture_operational_structure::*;
6
+ private import memo_core_relationships::*;
7
+ private import memo_viewpoints_definitions::*;
8
+ private import memo_viewpoints_operational_operational_viewpoint::*;
9
+ private import memo_core_enumerations::*;
10
+
11
+ private import memo_core_common::*;
12
+ private import memo_core_common::MemoIdentity;
13
+
14
+ // Operational decomposition for the browser membership tree.
15
+ // A top-level system with sub-systems, actors, and use cases arranged
16
+ // to demonstrate the browser view's hierarchical grouping by kind.
17
+
18
+ part controlSystem : OperationalEntity {
19
+ attribute :>> name = "Control System";
20
+ attribute :>> entityKind = OperationalEntityKind::subsystem;
21
+
22
+ part supervisorModule : OperationalEntity {
23
+ attribute :>> name = "Supervisor Module";
24
+ attribute :>> entityKind = OperationalEntityKind::subsystem;
25
+ }
26
+ part safetyModule : OperationalEntity {
27
+ attribute :>> name = "Safety Module";
28
+ attribute :>> entityKind = OperationalEntityKind::subsystem;
29
+ }
30
+ part communicationModule : OperationalEntity {
31
+ attribute :>> name = "Communication Module";
32
+ attribute :>> entityKind = OperationalEntityKind::subsystem;
33
+ }
34
+ }
35
+
36
+ part systemOperator : User {
37
+ attribute :>> actorKind = ActorKind::clinician;
38
+ attribute :>> name = "Operator";
39
+ }
40
+ part maintenanceEngineer : User {
41
+ attribute :>> actorKind = ActorKind::technician;
42
+ attribute :>> name = "Maintenance Engineer";
43
+ }
44
+ part remoteMonitor : User {
45
+ attribute :>> actorKind = ActorKind::clinician;
46
+ attribute :>> name = "Remote Monitor";
47
+ }
48
+
49
+ use case startSystem : UseCase {
50
+ @MemoIdentity { :>> providedId = "UC-BRW-1"; }
51
+ attribute :>> name = "Start System";
52
+ attribute :>> useCaseKind = UseCaseKind::clinical;
53
+ subject controlSystem;
54
+ actor operatorActor = systemOperator;
55
+ }
56
+ use case runDiagnostics : UseCase {
57
+ @MemoIdentity { :>> providedId = "UC-BRW-2"; }
58
+ attribute :>> name = "Run Diagnostics";
59
+ attribute :>> useCaseKind = UseCaseKind::service;
60
+ subject controlSystem;
61
+ actor engineerActor = maintenanceEngineer;
62
+ }
63
+ use case monitorStatus : UseCase {
64
+ @MemoIdentity { :>> providedId = "UC-BRW-3"; }
65
+ attribute :>> name = "Monitor Status";
66
+ attribute :>> useCaseKind = UseCaseKind::clinical;
67
+ subject controlSystem;
68
+ actor monitorActor = remoteMonitor;
69
+ }
70
+
71
+ view operationalBrowserTree : MemoDiagramView {
72
+ expose controlSystem::**;
73
+ expose systemOperator;
74
+ expose maintenanceEngineer;
75
+ expose remoteMonitor;
76
+ expose startSystem::**;
77
+ expose runDiagnostics::**;
78
+ expose monitorStatus::**;
79
+ @MemoIdentity { :>> shortDescription = "Browser membership tree showing operational entities, actors, and use cases — demonstrates the browser view kind with mixed element types."; }
80
+ attribute :>> viewKind = DiagramViewKind::browser;
81
+ attribute :>> diagramType = "brw";
82
+ ref :>> viewpointDefinition = browserViewpoint;
83
+ part :>> selectionQuery {
84
+ attribute :>> includeElementKinds = ("OperationalEntity", "User", "UseCase");
85
+ attribute :>> includeRelationshipKinds = ("Composes", "ParticipatesIn");
86
+ }
87
+ }
88
+ }
@@ -1,7 +1,7 @@
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
- package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_view {
1
+ package diagram_samples {
2
+ // System context sample (general view kind, `context` diagram type). The system
3
+ // under consideration is one block; every other element is an external actor,
4
+ // neighbouring system, or use context it interacts with across its boundary.
5
5
  private import ScalarValues::*;
6
6
 
7
7
  private import memo_architecture_operational_context_actors::*;
@@ -37,7 +37,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_
37
37
  flow from infusionSystem to pharmacySystem;
38
38
  connection : AppliesInContext connect useContext ::> homeContext to subjectElement ::> infusionSystem;
39
39
 
40
- view sampleContextView : MemoDiagramView {
40
+ view systemContextDiagram : MemoDiagramView {
41
41
  expose infusionSystem::**;
42
42
  expose clinician;
43
43
  expose patient;
@@ -48,7 +48,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_context_
48
48
  @MemoIdentity { :>> shortDescription = "Operational system context: one black-box system boundary, its external people, peer systems, operating environment, and named boundary-crossing interactions."; }
49
49
  attribute :>> viewKind = DiagramViewKind::general;
50
50
  attribute :>> diagramType = "context";
51
- ref :>> viewpointDefinition = contextViewpoint;
51
+ ref :>> viewpointDefinition = contextDiagramViewpoint;
52
52
  part :>> selectionQuery {
53
53
  attribute :>> includeRelationshipKinds = ("connect", "flow", "AppliesInContext");
54
54
  }
@@ -1,4 +1,4 @@
1
- package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_functional_flow_view {
1
+ package diagram_samples {
2
2
  private import ScalarValues::*;
3
3
 
4
4
  private import memo_architecture_logical_structure::*;
@@ -132,13 +132,13 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_function
132
132
  allocate fxDeliveryFlow.fxDeliver.fxHoldDose to fxPumpSystem.fxDeliverySubsystem.fxActuator;
133
133
  allocate fxDeliveryFlow.fxDeliver.fxCloseValve to fxPumpSystem.fxDeliverySubsystem.fxActuator;
134
134
 
135
- view fxDeliveryView : MemoDiagramView {
135
+ view medicationDeliveryFlow : MemoDiagramView {
136
136
  expose fxDeliveryFlow::**;
137
137
  expose fxPumpSystem::**;
138
138
  attribute depth = 2;
139
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
140
  attribute :>> viewKind = DiagramViewKind::actionflow;
141
141
  attribute :>> diagramType = "ffd";
142
- ref :>> viewpointDefinition = functionalViewpoint;
142
+ ref :>> viewpointDefinition = actionFlowViewpoint;
143
143
  }
144
144
  }
@@ -0,0 +1,64 @@
1
+ package diagram_samples {
2
+ // Grid sample (grid view kind, `fmea` diagram type). The grid template groups
3
+ // rows by kind and derives columns from whichever attributes the rows
4
+ // actually carry — no fixed schema, so three FailureMode rows render as one
5
+ // FMEA worksheet table.
6
+ private import ScalarValues::*;
7
+
8
+ private import memo_assurance_safety_risk_analysis::*;
9
+ private import memo_core_relationships::*;
10
+ private import memo_viewpoints_definitions::*;
11
+ private import memo_viewpoints_functional_functional_viewpoint::*;
12
+ private import memo_core_enumerations::*;
13
+
14
+ private import memo_core_common::*;
15
+ private import memo_core_common::MemoIdentity;
16
+
17
+ part fmMotorRunaway : FailureMode {
18
+ attribute :>> name = "PumpMotorRunaway";
19
+ attribute :>> failureModeKind = FailureModeKind::unintendedFunction;
20
+ attribute :>> effect = "Excess drug delivered beyond the prescribed rate.";
21
+ attribute :>> severityRating = 1;
22
+ attribute :>> occurrenceRating = 2;
23
+ attribute :>> probability = ProbabilityKind::improbable;
24
+ attribute :>> detectionRating = 3;
25
+ attribute :>> rpn = 6;
26
+ attribute :>> criticality = CriticalityKind::catastrophic;
27
+ }
28
+ part fmAirSensorSilent : FailureMode {
29
+ attribute :>> name = "AirSensorFailsSilent";
30
+ attribute :>> failureModeKind = FailureModeKind::lossOfFunction;
31
+ attribute :>> effect = "Air embolism reaches the patient undetected.";
32
+ attribute :>> severityRating = 1;
33
+ attribute :>> occurrenceRating = 3;
34
+ attribute :>> probability = ProbabilityKind::remote;
35
+ attribute :>> detectionRating = 4;
36
+ attribute :>> rpn = 12;
37
+ attribute :>> criticality = CriticalityKind::catastrophic;
38
+ }
39
+ part fmOcclusionDrift : FailureMode {
40
+ attribute :>> name = "OcclusionSensorDrift";
41
+ attribute :>> failureModeKind = FailureModeKind::degradedFunction;
42
+ attribute :>> effect = "Occlusion is detected late, interrupting therapy.";
43
+ attribute :>> severityRating = 7;
44
+ attribute :>> occurrenceRating = 4;
45
+ attribute :>> probability = ProbabilityKind::occasional;
46
+ attribute :>> detectionRating = 4;
47
+ attribute :>> rpn = 112;
48
+ attribute :>> criticality = CriticalityKind::high;
49
+ }
50
+
51
+ view failureModeGrid : MemoDiagramView {
52
+ expose fmMotorRunaway::**;
53
+ expose fmAirSensorSilent::**;
54
+ expose fmOcclusionDrift::**;
55
+ attribute depth = 2;
56
+ @MemoIdentity { :>> shortDescription = "Three FailureMode rows rendered as an FMEA worksheet table — one section, columns auto-derived from the attributes the rows carry."; }
57
+ attribute :>> viewKind = DiagramViewKind::grid;
58
+ attribute :>> diagramType = "fmea";
59
+ ref :>> viewpointDefinition = gridViewpoint;
60
+ part :>> selectionQuery {
61
+ attribute :>> includeElementKinds = ("FailureMode");
62
+ }
63
+ }
64
+ }
@@ -1,4 +1,4 @@
1
- package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_interconnection_view {
1
+ package diagram_samples {
2
2
  private import ScalarValues::*;
3
3
  private import memo_architecture_operational_context_actors::*;
4
4
  private import memo_architecture_operational_context_use_context::*;
@@ -17,7 +17,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
17
17
  // `out`-ness relative to the owner, so a boundary port only reads as a
18
18
  // source from INSIDE its part. The subassemblies are nested the same way —
19
19
  // real containment, not a port-to-port `Composes` edge, which is what
20
- // CR-ONT-065 used to forbid before nesting made the rule unnecessary.
20
+ // CR-ONT-65 used to forbid before nesting made the rule unnecessary.
21
21
  part coffeeMachine : LogicalComponent {
22
22
  attribute :>> name = "Coffee Machine";
23
23
  in port mainsWaterIn : DataPort { in item payload : MemoItem; }
@@ -37,9 +37,27 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
37
37
  in port heaterWaterIn : DataPort { in item payload : MemoItem; }
38
38
  out port heatedWaterOut : DataPort { out item payload : MemoItem; }
39
39
 
40
+ part thermostat : LogicalComponent {
41
+ attribute :>> name = "Thermostat";
42
+ in port tempReadingIn : DataPort { in item payload : MemoItem; }
43
+ out port powerCommandOut : DataPort { out item payload : MemoItem; }
44
+ }
45
+
40
46
  part heatingElement : LogicalComponent {
41
47
  attribute :>> name = "Water Heating Element";
48
+ in port powerIn : DataPort { in item payload : MemoItem; }
42
49
  out port heaterStatusOut : DataPort { out item payload : MemoItem; }
50
+
51
+ part resistiveCoil : LogicalComponent {
52
+ attribute :>> name = "Resistive Coil";
53
+ in port coilPowerIn : DataPort { in item payload : MemoItem; }
54
+ out port heatOut : DataPort { out item payload : MemoItem; }
55
+ }
56
+ part temperatureSensor : LogicalComponent {
57
+ attribute :>> name = "Temperature Sensor";
58
+ in port heatIn : DataPort { in item payload : MemoItem; }
59
+ out port sensorReadingOut : DataPort { out item payload : MemoItem; }
60
+ }
43
61
  }
44
62
  }
45
63
  part brewGroup : LogicalComponent {
@@ -71,7 +89,45 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
71
89
  bind coffeeMachine.brewGroup.brewedCoffeeOut = coffeeMachine.beverageOut;
72
90
  bind coffeeMachine.heaterAssembly.heatingElement.heaterStatusOut = coffeeMachine.serviceInterface.diagnostics;
73
91
 
74
- view sampleInterconnectionView : MemoDiagramView {
92
+ // Internal flows within the heater assembly
93
+ flow from coffeeMachine.heaterAssembly.thermostat.powerCommandOut to coffeeMachine.heaterAssembly.heatingElement.powerIn;
94
+ flow from coffeeMachine.heaterAssembly.heatingElement.heaterStatusOut to coffeeMachine.heaterAssembly.thermostat.tempReadingIn;
95
+
96
+ // Internal flows within the heating element
97
+ flow from coffeeMachine.heaterAssembly.heatingElement.resistiveCoil.heatOut to coffeeMachine.heaterAssembly.heatingElement.temperatureSensor.heatIn;
98
+ bind coffeeMachine.heaterAssembly.heatingElement.powerIn = coffeeMachine.heaterAssembly.heatingElement.resistiveCoil.coilPowerIn;
99
+ bind coffeeMachine.heaterAssembly.heatingElement.temperatureSensor.sensorReadingOut = coffeeMachine.heaterAssembly.heatingElement.heaterStatusOut;
100
+
101
+ // Child IBD view — the heater assembly's own internal wiring. Its subject
102
+ // is `heaterAssembly`, so the parent IBD shows a "navigate to view" button
103
+ // on the Thermal Control Assembly part.
104
+ view heaterAssemblyIBD : MemoDiagramView {
105
+ expose coffeeMachine.heaterAssembly::**;
106
+ attribute depth = 2;
107
+ @MemoIdentity { :>> shortDescription = "Internal wiring of the Thermal Control Assembly — heating element and its status output."; }
108
+ attribute :>> viewKind = DiagramViewKind::interconnection;
109
+ attribute :>> diagramType = "ibd";
110
+ attribute :>> rendererProfile = "ibd";
111
+ ref :>> viewpointDefinition = ibdViewpoint;
112
+ part :>> selectionQuery {
113
+ attribute :>> includeRelationshipKinds = ("Composes", "flow", "bind");
114
+ }
115
+ }
116
+
117
+ view heatingElementIBD : MemoDiagramView {
118
+ expose coffeeMachine.heaterAssembly.heatingElement::**;
119
+ attribute depth = 2;
120
+ @MemoIdentity { :>> shortDescription = "Third-level IBD — resistive coil and temperature sensor inside the heating element."; }
121
+ attribute :>> viewKind = DiagramViewKind::interconnection;
122
+ attribute :>> diagramType = "ibd";
123
+ attribute :>> rendererProfile = "ibd";
124
+ ref :>> viewpointDefinition = ibdViewpoint;
125
+ part :>> selectionQuery {
126
+ attribute :>> includeRelationshipKinds = ("Composes", "flow", "bind");
127
+ }
128
+ }
129
+
130
+ view beverageMachineIBD : MemoDiagramView {
75
131
  expose coffeeMachine::**;
76
132
  expose waterSupply::**;
77
133
  expose cup::**;
@@ -79,7 +135,11 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
79
135
  @MemoIdentity { :>> shortDescription = "Balanced internal architecture with readable boundary ports, nested service diagnostics, and external water and beverage interfaces."; }
80
136
  attribute :>> viewKind = DiagramViewKind::interconnection;
81
137
  attribute :>> diagramType = "ibd";
82
- ref :>> viewpointDefinition = logicalArchitectureViewpoint;
138
+ // The dedicated IBD renderer (Base -> Ibd class hierarchy): square
139
+ // wall ports, orange-in/green-out, solid grabbable nested-connector
140
+ // housings, orthogonal crossing-bridge routing, monochrome shading.
141
+ attribute :>> rendererProfile = "ibd";
142
+ ref :>> viewpointDefinition = ibdViewpoint;
83
143
  part :>> selectionQuery {
84
144
  attribute :>> includeRelationshipKinds = ("Composes", "flow", "bind");
85
145
  }
@@ -1,4 +1,4 @@
1
- package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_operational_behaviour_view {
1
+ package diagram_samples {
2
2
  private import ScalarValues::*;
3
3
  private import memo_architecture_operational_context_actors::*;
4
4
  private import memo_core_relationships::*;
@@ -98,13 +98,13 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_operatio
98
98
  allocate opSetupFlow.opAdminister.opDeliverDose to opCareSystem.opClinicalTeam.opRoleNurse;
99
99
  allocate opSetupFlow.opAdminister.opLogEvent to opCareSystem.opClinicalTeam.opRoleNurse;
100
100
 
101
- view opSetupView : MemoDiagramView {
101
+ view clinicalSetupActivity : MemoDiagramView {
102
102
  expose opSetupFlow::**;
103
103
  expose opCareSystem::**;
104
104
  attribute depth = 2;
105
105
  @MemoIdentity { :>> shortDescription = "Operational activity across clinical roles with concurrent preparation and a composite therapy step."; }
106
106
  attribute :>> viewKind = DiagramViewKind::actionflow;
107
107
  attribute :>> diagramType = "ofd";
108
- ref :>> viewpointDefinition = operationalViewpoint;
108
+ ref :>> viewpointDefinition = actionFlowViewpoint;
109
109
  }
110
110
  }
@@ -0,0 +1,69 @@
1
+ package diagram_samples {
2
+ private import ScalarValues::*;
3
+ private import memo_architecture_logical_structure::*;
4
+ private import memo_architecture_logical_interfaces::*;
5
+ private import memo_core_relationships::*;
6
+ private import memo_viewpoints_definitions::*;
7
+ private import memo_viewpoints_logical_logical_viewpoint::*;
8
+ private import memo_core_enumerations::*;
9
+
10
+ private import memo_core_common::*;
11
+ private import memo_core_common::MemoIdentity;
12
+
13
+ // Three logical sub-packages: a presentation layer, a domain layer, and
14
+ // an infrastructure layer. Each package owns a few parts with ports so
15
+ // the browser view has both depth and breadth to show.
16
+
17
+ package presentation {
18
+ part dashboardUI : LogicalComponent {
19
+ attribute :>> name = "Dashboard UI";
20
+ out port apiCall : DataPort { out item payload : MemoItem; }
21
+ }
22
+ part settingsUI : LogicalComponent {
23
+ attribute :>> name = "Settings UI";
24
+ out port configRequest : DataPort { out item payload : MemoItem; }
25
+ }
26
+ }
27
+
28
+ package domain {
29
+ part therapyEngine : LogicalComponent {
30
+ attribute :>> name = "Therapy Engine";
31
+ in port incomingRequest : DataPort { in item payload : MemoItem; }
32
+ out port statusUpdate : DataPort { out item payload : MemoItem; }
33
+ }
34
+ part alarmManager : LogicalComponent {
35
+ attribute :>> name = "Alarm Manager";
36
+ in port trigger : DataPort { in item payload : MemoItem; }
37
+ }
38
+ part configService : LogicalComponent {
39
+ attribute :>> name = "Configuration Service";
40
+ in port configIn : DataPort { in item payload : MemoItem; }
41
+ }
42
+ }
43
+
44
+ package infrastructure {
45
+ part dataStore : LogicalComponent {
46
+ attribute :>> name = "Data Store";
47
+ in port writePort : DataPort { in item payload : MemoItem; }
48
+ out port readPort : DataPort { out item payload : MemoItem; }
49
+ }
50
+ part networkAdapter : LogicalComponent {
51
+ attribute :>> name = "Network Adapter";
52
+ inout port netIO : DataPort { inout item payload : MemoItem; }
53
+ }
54
+ }
55
+
56
+ view threeLayerPackages : MemoDiagramView {
57
+ expose presentation::**;
58
+ expose domain::**;
59
+ expose infrastructure::**;
60
+ attribute depth = 2;
61
+ @MemoIdentity { :>> shortDescription = "Three-layer package overview — presentation, domain, infrastructure — rendered as a browser membership tree."; }
62
+ attribute :>> viewKind = DiagramViewKind::browser;
63
+ attribute :>> diagramType = "pkg";
64
+ ref :>> viewpointDefinition = browserViewpoint;
65
+ part :>> selectionQuery {
66
+ attribute :>> includeRelationshipKinds = ("Composes");
67
+ }
68
+ }
69
+ }
@@ -1,7 +1,7 @@
1
- // Requirements sample (general view kind, `req` diagram type). Stakeholder needs
2
- // on the left derive into system requirements; `DerivesFrom` edges render as the
3
- // requirements-diagram trace lines.
4
- package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirements_view {
1
+ package diagram_samples {
2
+ // Requirements sample (general view kind, `req` diagram type). Stakeholder needs
3
+ // on the left derive into system requirements; `DerivesFrom` edges render as the
4
+ // requirements-diagram trace lines.
5
5
  private import ScalarValues::*;
6
6
 
7
7
  private import memo_assurance_requirements_needs::*;
@@ -15,28 +15,28 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirem
15
15
  private import memo_core_common::MemoIdentity;
16
16
  requirement needSafeTherapy : Need {
17
17
  attribute :>> needKind = NeedKind::'stakeholder';
18
- @MemoIdentity { :>> providedId = "NEED-001"; } attribute :>> name = "SafeTherapy";
18
+ @MemoIdentity { :>> providedId = "NEED-1"; } attribute :>> name = "SafeTherapy";
19
19
  attribute :>> statement = "The device shall support safe patient-controlled infusion therapy.";
20
20
  }
21
21
  requirement needTimelyAlarms : Need {
22
22
  attribute :>> needKind = NeedKind::'stakeholder';
23
- @MemoIdentity { :>> providedId = "NEED-002"; } attribute :>> name = "TimelyAlarms";
23
+ @MemoIdentity { :>> providedId = "NEED-2"; } attribute :>> name = "TimelyAlarms";
24
24
  attribute :>> statement = "Clinicians shall be notified promptly of any condition that endangers therapy.";
25
25
  }
26
26
 
27
27
  requirement reqDoseLimit : Requirement {
28
28
  attribute :>> requirementType = RequirementTypeKind::system;
29
- @MemoIdentity { :>> providedId = "REQ-001"; } attribute :>> name = "DoseLimitEnforcement";
29
+ @MemoIdentity { :>> providedId = "REQ-1"; } attribute :>> name = "DoseLimitEnforcement";
30
30
  attribute :>> statement = "The pump shall not deliver more than the prescribed maximum dose in any one-hour window.";
31
31
  }
32
32
  requirement reqOcclusionAlarm : Requirement {
33
33
  attribute :>> requirementType = RequirementTypeKind::system;
34
- @MemoIdentity { :>> providedId = "REQ-002"; } attribute :>> name = "OcclusionAlarm";
34
+ @MemoIdentity { :>> providedId = "REQ-2"; } attribute :>> name = "OcclusionAlarm";
35
35
  attribute :>> statement = "The pump shall raise an alarm within two seconds of detecting a downstream occlusion.";
36
36
  }
37
37
  requirement reqAlarmLoudness : Requirement {
38
38
  attribute :>> requirementType = RequirementTypeKind::system;
39
- @MemoIdentity { :>> providedId = "REQ-003"; } attribute :>> name = "AlarmLoudness";
39
+ @MemoIdentity { :>> providedId = "REQ-3"; } attribute :>> name = "AlarmLoudness";
40
40
  attribute :>> statement = "An active alarm shall be audible at 65 dBA at one metre.";
41
41
  }
42
42
 
@@ -45,7 +45,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirem
45
45
  connection : DerivesFrom connect sourceDriver ::> needTimelyAlarms to targetRequirement ::> reqOcclusionAlarm;
46
46
  connection : DerivesFrom connect sourceDriver ::> needTimelyAlarms to targetRequirement ::> reqAlarmLoudness;
47
47
 
48
- view sampleRequirementsView : MemoDiagramView {
48
+ view needsToRequirements : MemoDiagramView {
49
49
  expose needSafeTherapy::**;
50
50
  expose needTimelyAlarms::**;
51
51
  expose reqDoseLimit;
@@ -55,7 +55,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirem
55
55
  @MemoIdentity { :>> shortDescription = "Stakeholder needs deriving into system requirements, wired by DerivesFrom trace edges."; }
56
56
  attribute :>> viewKind = DiagramViewKind::general;
57
57
  attribute :>> diagramType = "req";
58
- ref :>> viewpointDefinition = requirementsViewpoint;
58
+ ref :>> viewpointDefinition = requirementsDiagramViewpoint;
59
59
  part :>> selectionQuery {
60
60
  attribute :>> includeRelationshipKinds = ("DerivesFrom");
61
61
  }