@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.
- package/README.md +1 -1
- package/examples/gpca-pump/memo.identity.yaml +27 -0
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +0 -1
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +0 -1
- 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 +832 -0
- package/examples/sysml-diagram-samples/model/catalog/project.sysml +6 -1
- 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 +1 -13
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +67 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +4 -20
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +333 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +1 -10
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +51 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +28 -14
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +1 -10
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +56 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +9 -24
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +81 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +14 -21
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +4 -15
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +2 -15
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +28 -25
- 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/viewpoints/clinical/clinical_viewpoint.sysml +2 -2
- package/src/viewpoints/context/context_viewpoint.sysml +2 -2
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -2
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -1
- package/src/viewpoints/functional/functional_viewpoint.sysml +2 -2
- package/src/viewpoints/logical/logical_viewpoint.sysml +2 -2
- package/src/viewpoints/operational/operational_viewpoint.sysml +2 -2
- package/src/viewpoints/physical/physical_viewpoint.sysml +2 -2
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +2 -2
- package/src/viewpoints/risk/risk_viewpoint.sysml +2 -2
- package/src/viewpoints/software/software_viewpoint.sysml +2 -2
- package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +34 -7
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -2
- package/src/viewpoints/usability/usability_viewpoint.sysml +2 -2
- package/src/viewpoints/verification/verification_viewpoint.sysml +2 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_interconnection_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
2
3
|
private import ScalarValues::*;
|
|
3
4
|
private import memo_architecture_operational_context_actors::*;
|
|
4
5
|
private import memo_architecture_operational_context_use_context::*;
|
|
@@ -17,7 +18,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
|
|
|
17
18
|
// `out`-ness relative to the owner, so a boundary port only reads as a
|
|
18
19
|
// source from INSIDE its part. The subassemblies are nested the same way —
|
|
19
20
|
// real containment, not a port-to-port `Composes` edge, which is what
|
|
20
|
-
// CR-ONT-
|
|
21
|
+
// CR-ONT-65 used to forbid before nesting made the rule unnecessary.
|
|
21
22
|
part coffeeMachine : LogicalComponent {
|
|
22
23
|
attribute :>> name = "Coffee Machine";
|
|
23
24
|
in port mainsWaterIn : DataPort { in item payload : MemoItem; }
|
|
@@ -37,9 +38,27 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
|
|
|
37
38
|
in port heaterWaterIn : DataPort { in item payload : MemoItem; }
|
|
38
39
|
out port heatedWaterOut : DataPort { out item payload : MemoItem; }
|
|
39
40
|
|
|
41
|
+
part thermostat : LogicalComponent {
|
|
42
|
+
attribute :>> name = "Thermostat";
|
|
43
|
+
in port tempReadingIn : DataPort { in item payload : MemoItem; }
|
|
44
|
+
out port powerCommandOut : DataPort { out item payload : MemoItem; }
|
|
45
|
+
}
|
|
46
|
+
|
|
40
47
|
part heatingElement : LogicalComponent {
|
|
41
48
|
attribute :>> name = "Water Heating Element";
|
|
49
|
+
in port powerIn : DataPort { in item payload : MemoItem; }
|
|
42
50
|
out port heaterStatusOut : DataPort { out item payload : MemoItem; }
|
|
51
|
+
|
|
52
|
+
part resistiveCoil : LogicalComponent {
|
|
53
|
+
attribute :>> name = "Resistive Coil";
|
|
54
|
+
in port coilPowerIn : DataPort { in item payload : MemoItem; }
|
|
55
|
+
out port heatOut : DataPort { out item payload : MemoItem; }
|
|
56
|
+
}
|
|
57
|
+
part temperatureSensor : LogicalComponent {
|
|
58
|
+
attribute :>> name = "Temperature Sensor";
|
|
59
|
+
in port heatIn : DataPort { in item payload : MemoItem; }
|
|
60
|
+
out port sensorReadingOut : DataPort { out item payload : MemoItem; }
|
|
61
|
+
}
|
|
43
62
|
}
|
|
44
63
|
}
|
|
45
64
|
part brewGroup : LogicalComponent {
|
|
@@ -71,17 +90,12 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_intercon
|
|
|
71
90
|
bind coffeeMachine.brewGroup.brewedCoffeeOut = coffeeMachine.beverageOut;
|
|
72
91
|
bind coffeeMachine.heaterAssembly.heatingElement.heaterStatusOut = coffeeMachine.serviceInterface.diagnostics;
|
|
73
92
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
ref :>> viewpointDefinition = logicalArchitectureViewpoint;
|
|
83
|
-
part :>> selectionQuery {
|
|
84
|
-
attribute :>> includeRelationshipKinds = ("Composes", "flow", "bind");
|
|
85
|
-
}
|
|
86
|
-
}
|
|
93
|
+
// Internal flows within the heater assembly
|
|
94
|
+
flow from coffeeMachine.heaterAssembly.thermostat.powerCommandOut to coffeeMachine.heaterAssembly.heatingElement.powerIn;
|
|
95
|
+
flow from coffeeMachine.heaterAssembly.heatingElement.heaterStatusOut to coffeeMachine.heaterAssembly.thermostat.tempReadingIn;
|
|
96
|
+
|
|
97
|
+
// Internal flows within the heating element
|
|
98
|
+
flow from coffeeMachine.heaterAssembly.heatingElement.resistiveCoil.heatOut to coffeeMachine.heaterAssembly.heatingElement.temperatureSensor.heatIn;
|
|
99
|
+
bind coffeeMachine.heaterAssembly.heatingElement.powerIn = coffeeMachine.heaterAssembly.heatingElement.resistiveCoil.coilPowerIn;
|
|
100
|
+
bind coffeeMachine.heaterAssembly.heatingElement.temperatureSensor.sensorReadingOut = coffeeMachine.heaterAssembly.heatingElement.heaterStatusOut;
|
|
87
101
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_operational_behaviour_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
2
3
|
private import ScalarValues::*;
|
|
3
4
|
private import memo_architecture_operational_context_actors::*;
|
|
4
5
|
private import memo_core_relationships::*;
|
|
@@ -97,14 +98,4 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_operatio
|
|
|
97
98
|
allocate opSetupFlow.opAdminister.opCheckLockout to opCareSystem.opClinicalTeam.opRoleNurse;
|
|
98
99
|
allocate opSetupFlow.opAdminister.opDeliverDose to opCareSystem.opClinicalTeam.opRoleNurse;
|
|
99
100
|
allocate opSetupFlow.opAdminister.opLogEvent to opCareSystem.opClinicalTeam.opRoleNurse;
|
|
100
|
-
|
|
101
|
-
view opSetupView : MemoDiagramView {
|
|
102
|
-
expose opSetupFlow::**;
|
|
103
|
-
expose opCareSystem::**;
|
|
104
|
-
attribute depth = 2;
|
|
105
|
-
@MemoIdentity { :>> shortDescription = "Operational activity across clinical roles with concurrent preparation and a composite therapy step."; }
|
|
106
|
-
attribute :>> viewKind = DiagramViewKind::actionflow;
|
|
107
|
-
attribute :>> diagramType = "ofd";
|
|
108
|
-
ref :>> viewpointDefinition = operationalViewpoint;
|
|
109
|
-
}
|
|
110
101
|
}
|
package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_package_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
3
|
+
private import ScalarValues::*;
|
|
4
|
+
private import memo_architecture_logical_structure::*;
|
|
5
|
+
private import memo_architecture_logical_interfaces::*;
|
|
6
|
+
private import memo_core_relationships::*;
|
|
7
|
+
private import memo_viewpoints_definitions::*;
|
|
8
|
+
private import memo_viewpoints_logical_logical_viewpoint::*;
|
|
9
|
+
private import memo_core_enumerations::*;
|
|
10
|
+
|
|
11
|
+
private import memo_core_common::*;
|
|
12
|
+
private import memo_core_common::MemoIdentity;
|
|
13
|
+
|
|
14
|
+
// Three logical sub-packages: a presentation layer, a domain layer, and
|
|
15
|
+
// an infrastructure layer. Each package owns a few parts with ports so
|
|
16
|
+
// the browser view has both depth and breadth to show.
|
|
17
|
+
|
|
18
|
+
package presentation {
|
|
19
|
+
part dashboardUI : LogicalComponent {
|
|
20
|
+
attribute :>> name = "Dashboard UI";
|
|
21
|
+
out port apiCall : DataPort { out item payload : MemoItem; }
|
|
22
|
+
}
|
|
23
|
+
part settingsUI : LogicalComponent {
|
|
24
|
+
attribute :>> name = "Settings UI";
|
|
25
|
+
out port configRequest : DataPort { out item payload : MemoItem; }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
package domain {
|
|
30
|
+
part therapyEngine : LogicalComponent {
|
|
31
|
+
attribute :>> name = "Therapy Engine";
|
|
32
|
+
in port incomingRequest : DataPort { in item payload : MemoItem; }
|
|
33
|
+
out port statusUpdate : DataPort { out item payload : MemoItem; }
|
|
34
|
+
}
|
|
35
|
+
part alarmManager : LogicalComponent {
|
|
36
|
+
attribute :>> name = "Alarm Manager";
|
|
37
|
+
in port trigger : DataPort { in item payload : MemoItem; }
|
|
38
|
+
}
|
|
39
|
+
part configService : LogicalComponent {
|
|
40
|
+
attribute :>> name = "Configuration Service";
|
|
41
|
+
in port configIn : DataPort { in item payload : MemoItem; }
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
package infrastructure {
|
|
46
|
+
part dataStore : LogicalComponent {
|
|
47
|
+
attribute :>> name = "Data Store";
|
|
48
|
+
in port writePort : DataPort { in item payload : MemoItem; }
|
|
49
|
+
out port readPort : DataPort { out item payload : MemoItem; }
|
|
50
|
+
}
|
|
51
|
+
part networkAdapter : LogicalComponent {
|
|
52
|
+
attribute :>> name = "Network Adapter";
|
|
53
|
+
inout port netIO : DataPort { inout item payload : MemoItem; }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
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
1
|
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirements_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
3
|
+
// Requirements sample (general view kind, `req` diagram type). Stakeholder needs
|
|
4
|
+
// on the left derive into system requirements; `DerivesFrom` edges render as the
|
|
5
|
+
// requirements-diagram trace lines.
|
|
5
6
|
private import ScalarValues::*;
|
|
6
7
|
|
|
7
8
|
private import memo_assurance_requirements_needs::*;
|
|
@@ -15,28 +16,28 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirem
|
|
|
15
16
|
private import memo_core_common::MemoIdentity;
|
|
16
17
|
requirement needSafeTherapy : Need {
|
|
17
18
|
attribute :>> needKind = NeedKind::'stakeholder';
|
|
18
|
-
@MemoIdentity { :>> providedId = "NEED-
|
|
19
|
+
@MemoIdentity { :>> providedId = "NEED-1"; } attribute :>> name = "SafeTherapy";
|
|
19
20
|
attribute :>> statement = "The device shall support safe patient-controlled infusion therapy.";
|
|
20
21
|
}
|
|
21
22
|
requirement needTimelyAlarms : Need {
|
|
22
23
|
attribute :>> needKind = NeedKind::'stakeholder';
|
|
23
|
-
@MemoIdentity { :>> providedId = "NEED-
|
|
24
|
+
@MemoIdentity { :>> providedId = "NEED-2"; } attribute :>> name = "TimelyAlarms";
|
|
24
25
|
attribute :>> statement = "Clinicians shall be notified promptly of any condition that endangers therapy.";
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
requirement reqDoseLimit : Requirement {
|
|
28
29
|
attribute :>> requirementType = RequirementTypeKind::system;
|
|
29
|
-
@MemoIdentity { :>> providedId = "REQ-
|
|
30
|
+
@MemoIdentity { :>> providedId = "REQ-1"; } attribute :>> name = "DoseLimitEnforcement";
|
|
30
31
|
attribute :>> statement = "The pump shall not deliver more than the prescribed maximum dose in any one-hour window.";
|
|
31
32
|
}
|
|
32
33
|
requirement reqOcclusionAlarm : Requirement {
|
|
33
34
|
attribute :>> requirementType = RequirementTypeKind::system;
|
|
34
|
-
@MemoIdentity { :>> providedId = "REQ-
|
|
35
|
+
@MemoIdentity { :>> providedId = "REQ-2"; } attribute :>> name = "OcclusionAlarm";
|
|
35
36
|
attribute :>> statement = "The pump shall raise an alarm within two seconds of detecting a downstream occlusion.";
|
|
36
37
|
}
|
|
37
38
|
requirement reqAlarmLoudness : Requirement {
|
|
38
39
|
attribute :>> requirementType = RequirementTypeKind::system;
|
|
39
|
-
@MemoIdentity { :>> providedId = "REQ-
|
|
40
|
+
@MemoIdentity { :>> providedId = "REQ-3"; } attribute :>> name = "AlarmLoudness";
|
|
40
41
|
attribute :>> statement = "An active alarm shall be audible at 65 dBA at one metre.";
|
|
41
42
|
}
|
|
42
43
|
|
|
@@ -44,20 +45,4 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_requirem
|
|
|
44
45
|
connection : DerivesFrom connect sourceDriver ::> needSafeTherapy to targetRequirement ::> reqOcclusionAlarm;
|
|
45
46
|
connection : DerivesFrom connect sourceDriver ::> needTimelyAlarms to targetRequirement ::> reqOcclusionAlarm;
|
|
46
47
|
connection : DerivesFrom connect sourceDriver ::> needTimelyAlarms to targetRequirement ::> reqAlarmLoudness;
|
|
47
|
-
|
|
48
|
-
view sampleRequirementsView : MemoDiagramView {
|
|
49
|
-
expose needSafeTherapy::**;
|
|
50
|
-
expose needTimelyAlarms::**;
|
|
51
|
-
expose reqDoseLimit;
|
|
52
|
-
expose reqOcclusionAlarm;
|
|
53
|
-
expose reqAlarmLoudness;
|
|
54
|
-
attribute depth = 1;
|
|
55
|
-
@MemoIdentity { :>> shortDescription = "Stakeholder needs deriving into system requirements, wired by DerivesFrom trace edges."; }
|
|
56
|
-
attribute :>> viewKind = DiagramViewKind::general;
|
|
57
|
-
attribute :>> diagramType = "req";
|
|
58
|
-
ref :>> viewpointDefinition = requirementsViewpoint;
|
|
59
|
-
part :>> selectionQuery {
|
|
60
|
-
attribute :>> includeRelationshipKinds = ("DerivesFrom");
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
48
|
}
|
package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_sequence_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
3
|
+
// Sequence sample (sequence view kind, `seq` diagram type). A FunctionalFlow
|
|
4
|
+
// owns an ordered chain of FunctionalFlowSteps; each step is `allocate`d to
|
|
5
|
+
// the lifeline (an actor or component) that performs it, and the sequence
|
|
6
|
+
// template lays lifelines out as columns with one row per step in
|
|
7
|
+
// declaration order.
|
|
8
|
+
private import ScalarValues::*;
|
|
9
|
+
|
|
10
|
+
private import memo_architecture_operational_context_actors::*;
|
|
11
|
+
private import memo_architecture_logical_structure::*;
|
|
12
|
+
private import memo_architecture_functional_functions::*;
|
|
13
|
+
private import memo_core_relationships::*;
|
|
14
|
+
private import memo_viewpoints_definitions::*;
|
|
15
|
+
private import memo_viewpoints_functional_functional_viewpoint::*;
|
|
16
|
+
private import memo_core_enumerations::*;
|
|
17
|
+
|
|
18
|
+
private import memo_core_common::*;
|
|
19
|
+
private import memo_core_common::MemoIdentity;
|
|
20
|
+
|
|
21
|
+
// Lifelines — the actor and components each step is allocated to.
|
|
22
|
+
part clinician : User { attribute :>> name = "Clinician"; }
|
|
23
|
+
part pumpController : LogicalComponent { attribute :>> name = "Pump Controller"; }
|
|
24
|
+
part pumpMechanism : LogicalComponent { attribute :>> name = "Pump Mechanism"; }
|
|
25
|
+
|
|
26
|
+
// Combined fragment definitions — referenced by steps' `fragment` attribute.
|
|
27
|
+
part monitorLoop {
|
|
28
|
+
attribute name = "Monitor Loop";
|
|
29
|
+
attribute fragmentType = "loop";
|
|
30
|
+
attribute guard = "vitals abnormal";
|
|
31
|
+
}
|
|
32
|
+
part errorHandling {
|
|
33
|
+
attribute name = "Error Handling";
|
|
34
|
+
attribute fragmentType = "alt";
|
|
35
|
+
attribute fragmentGuards = "[error recoverable]|[else]";
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
action startInfusion : FunctionalFlow {
|
|
39
|
+
attribute :>> name = "Start Infusion";
|
|
40
|
+
|
|
41
|
+
action stepRequestStart : FunctionalFlowStep { attribute :>> name = "Request start infusion"; }
|
|
42
|
+
action stepValidate : FunctionalFlowStep { attribute :>> name = "Validate prescribed rate"; }
|
|
43
|
+
action stepCommandMotor : FunctionalFlowStep { attribute :>> name = "Command motor drive"; }
|
|
44
|
+
action stepConfirm : FunctionalFlowStep { attribute :>> name = "Confirm delivery started"; }
|
|
45
|
+
|
|
46
|
+
// Steps inside the monitoring loop fragment
|
|
47
|
+
action stepReadSensor : FunctionalFlowStep { attribute :>> name = "Read sensor data"; attribute stepOrder = "5"; attribute fragment = "monitorLoop"; }
|
|
48
|
+
action stepCheckVitals : FunctionalFlowStep { attribute :>> name = "Check vital signs"; attribute stepOrder = "6"; attribute fragment = "monitorLoop"; }
|
|
49
|
+
|
|
50
|
+
// Steps inside the alt (error-handling) fragment
|
|
51
|
+
action stepRetryDelivery : FunctionalFlowStep { attribute :>> name = "Retry delivery"; attribute stepOrder = "7"; attribute fragment = "errorHandling"; attribute fragmentOperand = "1"; }
|
|
52
|
+
action stepAlertUser : FunctionalFlowStep { attribute :>> name = "Alert user"; attribute stepOrder = "8"; attribute fragment = "errorHandling"; attribute fragmentOperand = "2"; }
|
|
53
|
+
|
|
54
|
+
action stepNotify : FunctionalFlowStep { attribute :>> name = "Notify delivery started"; attribute stepOrder = "9"; }
|
|
55
|
+
|
|
56
|
+
first start then stepRequestStart;
|
|
57
|
+
first stepRequestStart then stepValidate;
|
|
58
|
+
first stepValidate then stepCommandMotor;
|
|
59
|
+
first stepCommandMotor then stepConfirm;
|
|
60
|
+
first stepConfirm then stepReadSensor;
|
|
61
|
+
first stepReadSensor then stepCheckVitals;
|
|
62
|
+
first stepCheckVitals then stepRetryDelivery;
|
|
63
|
+
first stepCheckVitals then stepAlertUser;
|
|
64
|
+
first stepRetryDelivery then stepNotify;
|
|
65
|
+
first stepAlertUser then stepNotify;
|
|
66
|
+
first stepNotify then done;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Lane assignment — which lifeline performs each step, in the order the
|
|
70
|
+
// sequence reads top to bottom: clinician requests, controller validates,
|
|
71
|
+
// mechanism drives, controller confirms, clinician is notified.
|
|
72
|
+
allocate startInfusion.stepRequestStart to clinician;
|
|
73
|
+
allocate startInfusion.stepValidate to pumpController;
|
|
74
|
+
allocate startInfusion.stepCommandMotor to pumpMechanism;
|
|
75
|
+
allocate startInfusion.stepConfirm to pumpController;
|
|
76
|
+
allocate startInfusion.stepReadSensor to pumpMechanism;
|
|
77
|
+
allocate startInfusion.stepCheckVitals to pumpController;
|
|
78
|
+
allocate startInfusion.stepRetryDelivery to pumpController;
|
|
79
|
+
allocate startInfusion.stepAlertUser to clinician;
|
|
80
|
+
allocate startInfusion.stepNotify to clinician;
|
|
81
|
+
}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
// Standard SysML v2 activity sample (actionflow view kind, `afd` diagram type).
|
|
2
|
-
//
|
|
3
|
-
// The view over `activity_example::CustomerProcess`, the standard-SysML activity
|
|
4
|
-
// fixture in `model/sysml_v2_activity_example.sysml`. It exists because the
|
|
5
|
-
// fixture's whole point is the node types `action_flow_view.sysml` does not
|
|
6
|
-
// have — decision, merge, fork, join, accept, send, terminate, and guarded
|
|
7
|
-
// successions. Without a view exposing it the fixture parses into the model and
|
|
8
|
-
// is never drawn, which is indistinguishable from a renderer that cannot draw
|
|
9
|
-
// decisions.
|
|
10
|
-
//
|
|
11
|
-
// Nothing here specializes a MEMO kind: the fixture is plain standard SysML,
|
|
12
|
-
// and that is the property under test. The renderer classifies its nodes from
|
|
13
|
-
// the metamodel (`activity-notation.ts`), not from an ontology kind.
|
|
14
1
|
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_standard_activity_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
3
|
+
// Standard SysML v2 activity sample (actionflow view kind, `afd` diagram type).
|
|
4
|
+
//
|
|
5
|
+
// The view over `activity_example::CustomerProcess`, the standard-SysML activity
|
|
6
|
+
// fixture in `model/sysml_v2_activity_example.sysml`. It exists because the
|
|
7
|
+
// fixture's whole point is the node types `action_flow_view.sysml` does not
|
|
8
|
+
// have — decision, merge, fork, join, accept, send, terminate, and guarded
|
|
9
|
+
// successions. Without a view exposing it the fixture parses into the model and
|
|
10
|
+
// is never drawn, which is indistinguishable from a renderer that cannot draw
|
|
11
|
+
// decisions.
|
|
12
|
+
//
|
|
13
|
+
// Nothing here specializes a MEMO kind: the fixture is plain standard SysML,
|
|
14
|
+
// and that is the property under test. The renderer classifies its nodes from
|
|
15
|
+
// the metamodel (`activity-notation.ts`), not from an ontology kind.
|
|
15
16
|
private import ScalarValues::*;
|
|
16
17
|
|
|
17
18
|
private import memo_core_relationships::*;
|
|
@@ -23,12 +24,4 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_standard
|
|
|
23
24
|
|
|
24
25
|
private import memo_core_common::*;
|
|
25
26
|
private import memo_core_common::MemoIdentity;
|
|
26
|
-
view standardActivityView : MemoDiagramView {
|
|
27
|
-
expose CustomerProcess::**;
|
|
28
|
-
attribute depth = 2;
|
|
29
|
-
@MemoIdentity { :>> shortDescription = "Customer login, guarded validation, shopping loop, checkout, credit approval, and explicit completion outcomes."; }
|
|
30
|
-
attribute :>> viewKind = DiagramViewKind::actionflow;
|
|
31
|
-
attribute :>> diagramType = "afd";
|
|
32
|
-
ref :>> viewpointDefinition = functionalViewpoint;
|
|
33
|
-
}
|
|
34
27
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
// State transition sample (statetransition view kind, `stm` diagram type). A
|
|
2
|
-
// behaviour machine owns its mode states by containing them, and each native
|
|
3
|
-
// transition lives inside the state whose substates it connects.
|
|
4
1
|
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_state_transition_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
3
|
+
// State transition sample (statetransition view kind, `stm` diagram type). A
|
|
4
|
+
// behaviour machine owns its mode states by containing them, and each native
|
|
5
|
+
// transition lives inside the state whose substates it connects.
|
|
5
6
|
private import ScalarValues::*;
|
|
6
7
|
|
|
7
8
|
private import memo_architecture_functional_behavior::*;
|
|
@@ -62,18 +63,6 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_state_tr
|
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
view sampleStateTransitionView : MemoDiagramView {
|
|
66
|
-
expose pumpModes::**;
|
|
67
|
-
attribute depth = 2;
|
|
68
|
-
@MemoIdentity { :>> shortDescription = "A pump-mode state machine — Idle, Infusing, Paused, Alarm — where Infusing is a composite state nesting Priming, Delivering and Holding."; }
|
|
69
|
-
attribute :>> viewKind = DiagramViewKind::statetransition;
|
|
70
|
-
attribute :>> diagramType = "stm";
|
|
71
|
-
ref :>> viewpointDefinition = functionalViewpoint;
|
|
72
|
-
part :>> selectionQuery {
|
|
73
|
-
attribute :>> includeElementKinds = ("StateMachine", "MemoState");
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
66
|
// The machine is one containment tree, so exposing its root reaches every
|
|
78
67
|
// state and transition; the former per-element IncludedIn list restated
|
|
79
68
|
// that tree a second time and is gone with it.
|
package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
2
3
|
private import ScalarValues::*;
|
|
3
4
|
private import memo_architecture_implementation_hardware_structure::*;
|
|
4
5
|
|
|
@@ -16,7 +17,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_vie
|
|
|
16
17
|
attribute :>> name = "Branch A.1";
|
|
17
18
|
part leafA11 : HardwareAssembly {
|
|
18
19
|
attribute :>> name = "Leaf A.1.1";
|
|
19
|
-
attribute :>> partNumber = "PN-
|
|
20
|
+
attribute :>> partNumber = "PN-1";
|
|
20
21
|
}
|
|
21
22
|
part leafA12 : HardwareAssembly { attribute :>> name = "Leaf A.1.2"; }
|
|
22
23
|
}
|
|
@@ -32,18 +33,4 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_vie
|
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
-
view sampleTreeView : MemoDiagramView {
|
|
37
|
-
expose rootA::**;
|
|
38
|
-
attribute depth = 2;
|
|
39
|
-
@MemoIdentity { :>> shortDescription = "One connected dummy hierarchy with varied branch depths for tree layout development."; }
|
|
40
|
-
attribute :>> viewKind = DiagramViewKind::general;
|
|
41
|
-
attribute :>> diagramType = "bdd";
|
|
42
|
-
ref :>> viewpointDefinition = physicalViewpoint;
|
|
43
|
-
attribute :>> layoutHint = "tree";
|
|
44
|
-
attribute :>> styleHint = "expanded:rootA,rootB,branchA1,branchB1";
|
|
45
|
-
part :>> selectionQuery {
|
|
46
|
-
attribute :>> includeRelationshipKinds = ("Composes");
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
36
|
}
|
package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case_view {
|
|
2
|
+
private import memo_examples_sysml_diagram_samples_viewpoints_unassigned::*;
|
|
2
3
|
private import ScalarValues::*;
|
|
3
4
|
private import memo_architecture_operational_context_actors::*;
|
|
4
5
|
private import memo_architecture_operational_use_cases::*;
|
|
@@ -9,6 +10,15 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
|
|
|
9
10
|
|
|
10
11
|
private import memo_core_common::*;
|
|
11
12
|
private import memo_core_common::MemoIdentity;
|
|
13
|
+
|
|
14
|
+
// Generalization (specialization) relation for UML-style use-case diagrams.
|
|
15
|
+
// Source is the specific element, target the general one; the UCD renderer
|
|
16
|
+
// draws a solid line with a hollow triangle pointing at the general end.
|
|
17
|
+
connection def Specialization :> MemoRelationship {
|
|
18
|
+
end specialized :>> source;
|
|
19
|
+
end general :>> target;
|
|
20
|
+
}
|
|
21
|
+
|
|
12
22
|
// Product-neutral fixture for the UML-style use-case presentation.
|
|
13
23
|
part patient : User {
|
|
14
24
|
attribute :>> actorKind = ActorKind::patient;
|
|
@@ -22,9 +32,13 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
|
|
|
22
32
|
attribute :>> actorKind = ActorKind::technician;
|
|
23
33
|
attribute :>> name = "Service Technician";
|
|
24
34
|
}
|
|
35
|
+
part nursingStaff : User {
|
|
36
|
+
attribute :>> actorKind = ActorKind::clinician;
|
|
37
|
+
attribute :>> name = "Nursing Staff";
|
|
38
|
+
}
|
|
25
39
|
|
|
26
40
|
use case reviewStatus : UseCase {
|
|
27
|
-
@MemoIdentity { :>> providedId = "UC-SAMPLE-
|
|
41
|
+
@MemoIdentity { :>> providedId = "UC-SAMPLE-1"; }
|
|
28
42
|
attribute :>> name = "Review Device Status";
|
|
29
43
|
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
30
44
|
include validateTherapySettings;
|
|
@@ -32,7 +46,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
|
|
|
32
46
|
actor patientActor = patient;
|
|
33
47
|
}
|
|
34
48
|
use case configureTherapy : UseCase {
|
|
35
|
-
@MemoIdentity { :>> providedId = "UC-SAMPLE-
|
|
49
|
+
@MemoIdentity { :>> providedId = "UC-SAMPLE-2"; }
|
|
36
50
|
attribute :>> name = "Configure Therapy";
|
|
37
51
|
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
38
52
|
include reviewStatus;
|
|
@@ -41,7 +55,7 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
|
|
|
41
55
|
actor patientActor = patient;
|
|
42
56
|
}
|
|
43
57
|
use case maintainDevice : UseCase {
|
|
44
|
-
@MemoIdentity { :>> providedId = "UC-SAMPLE-
|
|
58
|
+
@MemoIdentity { :>> providedId = "UC-SAMPLE-3"; }
|
|
45
59
|
attribute :>> name = "Maintain Device";
|
|
46
60
|
attribute :>> useCaseKind = UseCaseKind::service;
|
|
47
61
|
subject supportingSystem;
|
|
@@ -49,14 +63,14 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
|
|
|
49
63
|
}
|
|
50
64
|
|
|
51
65
|
use case documentTreatment : UseCase {
|
|
52
|
-
@MemoIdentity { :>> providedId = "UC-SAMPLE-
|
|
66
|
+
@MemoIdentity { :>> providedId = "UC-SAMPLE-4"; }
|
|
53
67
|
attribute :>> name = "Document Treatment";
|
|
54
68
|
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
55
69
|
}
|
|
56
70
|
|
|
57
71
|
// L2 child of Review Device Status: makes L0 → L1 → L2 selectable.
|
|
58
72
|
use case validateTherapySettings : UseCase {
|
|
59
|
-
@MemoIdentity { :>> providedId = "UC-SAMPLE-
|
|
73
|
+
@MemoIdentity { :>> providedId = "UC-SAMPLE-5"; }
|
|
60
74
|
attribute :>> name = "Validate Therapy Settings";
|
|
61
75
|
attribute :>> useCaseKind = UseCaseKind::clinical;
|
|
62
76
|
subject supportingSystem;
|
|
@@ -67,24 +81,13 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case
|
|
|
67
81
|
// specialization, and `:>` inherits the base's subject and actors.
|
|
68
82
|
dependency from documentTreatment to reviewStatus;
|
|
69
83
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
@MemoIdentity { :>> shortDescription = "Actors outside a device boundary with include, extend, hierarchy-level, and orthogonal-routing presentation."; }
|
|
80
|
-
attribute :>> viewKind = DiagramViewKind::general;
|
|
81
|
-
attribute :>> diagramType = "ucd";
|
|
82
|
-
ref :>> viewpointDefinition = operationalViewpoint;
|
|
83
|
-
part :>> selectionQuery {
|
|
84
|
-
attribute :>> includeElementKinds = ("User", "UseCase");
|
|
85
|
-
attribute :>> includeRelationshipKinds = ("ParticipatesIn", "IncludesStep", "Extends");
|
|
86
|
-
}
|
|
87
|
-
// Presentation is owned by the model view, rather than a canvas control.
|
|
88
|
-
attribute :>> layoutHint = "usecase:level=all;edge=rounded";
|
|
89
|
-
}
|
|
84
|
+
// Actor generalization: Nursing Staff is a specialization of Clinician.
|
|
85
|
+
// UML draws this as a solid line with a hollow triangle arrowhead pointing
|
|
86
|
+
// at the general actor.
|
|
87
|
+
connection : Specialization connect nursingStaff to clinician;
|
|
88
|
+
|
|
89
|
+
// Use-case generalization: Configure Therapy specializes Review Device
|
|
90
|
+
// Status — the general case is browsing status; configuring therapy is a
|
|
91
|
+
// more specific variant.
|
|
92
|
+
connection : Specialization connect configureTherapy to reviewStatus;
|
|
90
93
|
}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-aadl'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: AADL (SAE AS5506) correspondence profile and runtime component families
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-cloud'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: Networked services and managed data stores
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-container'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: OCI container images and container runtimes as deployment content
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-messaging'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: Publish/subscribe messaging — topics, brokers, and delivery semantics
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/extension-ros'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: ROS 2 nodes, messages, topic/service/action interfaces, QoS, and containerized deployment
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/methodology-default'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: "MEMO default medical-device methodology \u2014 selects viewpoints/views/DHF documents from @memoarchitect/ontology and adds rules, gates, patterns, profiles, and workflow."
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/methodology-gpca'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: "GPCA infusion pump methodology \u2014 subtraction-based tailoring of @memoarchitect/methodology-default for the non-networked prototype variant. Excludes cybersecurity and SOUP."
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/ontology'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: "MEMO \u2014 the single canonical medical-device ontology: core semantics, the Arcadia-inspired architecture layers (context, requirements, behavior, structure, interfaces, risk, cybersecurity,\
|
|
12
12
|
\ assurance, \u2026), compliance, viewpoints, views, and invariant rules. One namespace (memo::), one src/ tree."
|
|
13
13
|
license: MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memoarchitect/ontology",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.2",
|
|
4
4
|
"packageManager": "pnpm@9.15.0",
|
|
5
5
|
"description": "MEMO — Medical Engineering Modelling Ontology. Pure SysML v2 medical-device ontology with native constraints, portable to any conformant SysML v2 tool (SysIDE, SysON, sysand).",
|
|
6
6
|
"scripts": {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
# (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
|
|
8
8
|
# removed at the native semantic flip and are now rejected if present.
|
|
9
9
|
name: '@memoarchitect/medical-modeling-profile'
|
|
10
|
-
version: 0.
|
|
10
|
+
version: 0.13.2
|
|
11
11
|
description: Closure rules and viewpoints for medical device modeling
|
|
12
12
|
license: MIT
|
|
13
13
|
tags:
|
|
@@ -13,12 +13,12 @@ package memo_viewpoints_clinical_clinical_viewpoint {
|
|
|
13
13
|
@MemoIdentity { :>> shortDescription = "Shows clinical context, users, use environment, and clinical evidence."; }
|
|
14
14
|
attribute :>> description = "Default viewpoint derived from the context and assurance layers for clinical stakeholders — intended use, patient/clinician interaction, clinical evidence, and clinical safety claims.";
|
|
15
15
|
attribute :>> purpose = "Communicate clinical use context and clinical evidence for the device.";
|
|
16
|
-
ref :>> stakeholders = (
|
|
16
|
+
ref :>> stakeholders = (clinicalEngineer, regulatoryEngineer);
|
|
17
17
|
attribute :>> stage = WorkflowStageKind::context;
|
|
18
18
|
attribute :>> abstractionLevel = "clinical";
|
|
19
19
|
attribute :>> outputKind = (ViewOutputKind::documentSection, ViewOutputKind::table);
|
|
20
20
|
attribute :>> presentationKind = (PresentationKind::narrativeSection);
|
|
21
|
-
ref :>> framedConcerns = (
|
|
21
|
+
ref :>> framedConcerns = (safetyConcern, clinicalConcern);
|
|
22
22
|
attribute :>> explorerLane = "assurance";
|
|
23
23
|
attribute :>> explorerOrder = 4;
|
|
24
24
|
attribute :>> userExtensible = true;
|