@memoarchitect/ontology 0.11.2 → 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.
- package/README.md +1 -1
- package/examples/gpca-pump/memo.identity.yaml +27 -0
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +3 -3
- package/examples/sysml-diagram-samples/README.md +10 -0
- package/examples/sysml-diagram-samples/dashboards/README.md +17 -0
- package/examples/sysml-diagram-samples/dashboards/viewpoint-vp-demo-ibd.md +61 -0
- package/examples/sysml-diagram-samples/memo.identity.yaml +616 -0
- package/examples/sysml-diagram-samples/model/catalog/project.sysml +2 -11
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +81 -6
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +15 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +88 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +6 -6
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +64 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +64 -4
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -3
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +69 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +11 -11
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +97 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +18 -18
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -6
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +5 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +34 -11
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/ros/memo.package.yaml +1 -1
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +1 -1
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/functional/behavior/memo_behavior.sysml +8 -1
- package/src/architecture/functional/functions/memo_functions.sysml +16 -2
- package/src/architecture/implementation/ui/memo_ui.sysml +46 -20
- package/src/core/enumerations/memo_enumerations.sysml +49 -13
- package/src/memo_namespaces.sysml +2 -0
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +3 -4
- package/src/viewpoints/context/context_viewpoint.sysml +3 -5
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +3 -5
- package/src/viewpoints/definitions/memo_stakeholders_concerns.sysml +192 -0
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +94 -6
- package/src/viewpoints/functional/functional_viewpoint.sysml +3 -4
- package/src/viewpoints/logical/logical_viewpoint.sysml +3 -4
- package/src/viewpoints/operational/operational_viewpoint.sysml +3 -4
- package/src/viewpoints/physical/physical_viewpoint.sysml +3 -4
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -4
- package/src/viewpoints/risk/risk_viewpoint.sysml +3 -4
- package/src/viewpoints/software/software_viewpoint.sysml +3 -4
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +3 -5
- package/src/viewpoints/usability/usability_viewpoint.sysml +3 -4
- package/src/viewpoints/verification/verification_viewpoint.sysml +3 -4
|
@@ -1,9 +1,84 @@
|
|
|
1
|
-
//
|
|
1
|
+
// Diagram-type viewpoints for the sample gallery.
|
|
2
2
|
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
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
|
-
|
|
8
|
-
|
|
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
|
|
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
|
|
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 =
|
|
102
|
+
ref :>> viewpointDefinition = actionFlowViewpoint;
|
|
93
103
|
}
|
|
94
104
|
}
|
package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml
ADDED
|
@@ -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
|
+
}
|
package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
|
|
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
|
|
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 =
|
|
51
|
+
ref :>> viewpointDefinition = contextDiagramViewpoint;
|
|
52
52
|
part :>> selectionQuery {
|
|
53
53
|
attribute :>> includeRelationshipKinds = ("connect", "flow", "AppliesInContext");
|
|
54
54
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
package
|
|
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
|
|
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 =
|
|
142
|
+
ref :>> viewpointDefinition = actionFlowViewpoint;
|
|
143
143
|
}
|
|
144
144
|
}
|
package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml
ADDED
|
@@ -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
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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 =
|
|
108
|
+
ref :>> viewpointDefinition = actionFlowViewpoint;
|
|
109
109
|
}
|
|
110
110
|
}
|
package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml
ADDED
|
@@ -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
|
-
|
|
2
|
-
//
|
|
3
|
-
// requirements
|
|
4
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
|
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 =
|
|
58
|
+
ref :>> viewpointDefinition = requirementsDiagramViewpoint;
|
|
59
59
|
part :>> selectionQuery {
|
|
60
60
|
attribute :>> includeRelationshipKinds = ("DerivesFrom");
|
|
61
61
|
}
|