@memoarchitect/ontology 0.12.1 → 0.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/README.md +1 -1
  2. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +0 -1
  3. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +0 -1
  4. package/examples/sysml-diagram-samples/memo.identity.yaml +216 -0
  5. package/examples/sysml-diagram-samples/model/catalog/project.sysml +14 -0
  6. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +2 -24
  7. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +2 -23
  8. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +2 -18
  9. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +333 -0
  10. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +2 -11
  11. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +2 -15
  12. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -48
  13. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +2 -11
  14. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +2 -15
  15. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +2 -17
  16. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +4 -20
  17. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +2 -9
  18. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -25
  19. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +2 -15
  20. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +2 -22
  21. package/extensions/aadl/memo.package.yaml +1 -1
  22. package/extensions/cloud/memo.package.yaml +1 -1
  23. package/extensions/container/memo.package.yaml +1 -1
  24. package/extensions/messaging/memo.package.yaml +1 -1
  25. package/extensions/ros/memo.package.yaml +1 -1
  26. package/methodologies/default/memo.package.yaml +1 -1
  27. package/methodologies/gpca/memo.package.yaml +1 -1
  28. package/ontology/memo.package.yaml +1 -1
  29. package/package.json +1 -1
  30. package/profile/memo.package.yaml +1 -1
  31. package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -2
  32. package/src/viewpoints/context/context_viewpoint.sysml +2 -2
  33. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -2
  34. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -1
  35. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -2
  36. package/src/viewpoints/logical/logical_viewpoint.sysml +2 -2
  37. package/src/viewpoints/operational/operational_viewpoint.sysml +2 -2
  38. package/src/viewpoints/physical/physical_viewpoint.sysml +2 -2
  39. package/src/viewpoints/requirements/requirements_viewpoint.sysml +2 -2
  40. package/src/viewpoints/risk/risk_viewpoint.sysml +2 -2
  41. package/src/viewpoints/software/software_viewpoint.sysml +2 -2
  42. package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +34 -7
  43. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -2
  44. package/src/viewpoints/usability/usability_viewpoint.sysml +2 -2
  45. package/src/viewpoints/verification/verification_viewpoint.sysml +2 -2
@@ -1,4 +1,5 @@
1
- package diagram_samples {
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::*;
@@ -89,25 +90,4 @@ package diagram_samples {
89
90
  // Status — the general case is browsing status; configuring therapy is a
90
91
  // more specific variant.
91
92
  connection : Specialization connect configureTherapy to reviewStatus;
92
-
93
- view deviceUseCases : MemoDiagramView {
94
- expose patient;
95
- expose clinician;
96
- expose serviceTechnician;
97
- expose nursingStaff;
98
- expose reviewStatus;
99
- expose configureTherapy;
100
- expose maintainDevice;
101
- expose documentTreatment;
102
- expose validateTherapySettings;
103
- @MemoIdentity { :>> shortDescription = "Actors outside a device boundary with include, extend, generalization, hierarchy-level, and orthogonal-routing presentation."; }
104
- attribute :>> viewKind = DiagramViewKind::general;
105
- attribute :>> diagramType = "ucd";
106
- ref :>> viewpointDefinition = useCaseViewpoint;
107
- part :>> selectionQuery {
108
- attribute :>> includeElementKinds = ("User", "UseCase");
109
- attribute :>> includeRelationshipKinds = ("ParticipatesIn", "IncludesStep", "Extends", "Specialization");
110
- }
111
- attribute :>> layoutHint = "usecase:level=all;edge=rounded";
112
- }
113
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.12.1
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.12.1
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.12.1
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.12.1
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.12.1
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.12.1
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.12.1
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.12.1
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.12.1",
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.12.1
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 = (ClinicalEngineer, RegulatoryEngineer);
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 = (SafetyConcern, ClinicalConcern);
21
+ ref :>> framedConcerns = (safetyConcern, clinicalConcern);
22
22
  attribute :>> explorerLane = "assurance";
23
23
  attribute :>> explorerOrder = 4;
24
24
  attribute :>> userExtensible = true;
@@ -13,12 +13,12 @@ package memo_viewpoints_context_context_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows actors, use context, and system boundary."; }
14
14
  attribute :>> description = "Default viewpoint derived from the context layer to communicate who interacts with the device, under which use conditions, and where trust or safety boundaries exist.";
15
15
  attribute :>> purpose = "Communicate operational context and boundaries.";
16
- ref :>> stakeholders = (SystemArchitect);
16
+ ref :>> stakeholders = (systemArchitect);
17
17
  attribute :>> stage = WorkflowStageKind::context;
18
18
  attribute :>> abstractionLevel = "system";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram);
20
20
  attribute :>> presentationKind = (PresentationKind::blockDiagram);
21
- ref :>> framedConcerns = (SafetyConcern, InteroperabilityConcern);
21
+ ref :>> framedConcerns = (safetyConcern, interoperabilityConcern);
22
22
  attribute :>> explorerLane = "architecture";
23
23
  attribute :>> explorerOrder = 0;
24
24
  // UseEnvironment (IEC 62366-1 3.20) is what the device sits inside —
@@ -13,12 +13,12 @@ package memo_viewpoints_cybersecurity_cybersecurity_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows assets, trust boundaries, threats, vulnerabilities, cyber hazards, cyber risks, and mitigations."; }
14
14
  attribute :>> description = "Default viewpoint derived from the cybersecurity layer, using STRIDE-style threat categories by default while allowing safety and privacy impacts to be traced into the broader model.";
15
15
  attribute :>> purpose = "Communicate cybersecurity design, threat analysis, and cyber risk posture.";
16
- ref :>> stakeholders = (SecurityEngineer);
16
+ ref :>> stakeholders = (securityEngineer);
17
17
  attribute :>> stage = WorkflowStageKind::risk;
18
18
  attribute :>> abstractionLevel = "analysis";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram);
20
20
  attribute :>> presentationKind = (PresentationKind::custom);
21
- ref :>> framedConcerns = (CybersecurityConcern, PrivacyConcern, SafetyConcern);
21
+ ref :>> framedConcerns = (cybersecurityConcern, privacyConcern, safetyConcern);
22
22
  attribute :>> explorerLane = "assurance";
23
23
  attribute :>> explorerOrder = 3;
24
24
  attribute :>> userExtensible = true;
@@ -37,7 +37,9 @@ package memo_viewpoints_definitions {
37
37
  * requirement, and extensible by a project without editing the
38
38
  * ontology, which `AudienceKind` and `ConcernKind` were not.
39
39
  */
40
- ref stakeholders : MemoStakeholder[*];
40
+ // Redefines the standard library's `RequirementCheck::stakeholders`,
41
+ // which a viewpoint inherits through `ViewpointCheck`.
42
+ ref :>> stakeholders : MemoStakeholder[0..*];
41
43
  attribute stage : WorkflowStageKind;
42
44
  attribute abstractionLevel : String;
43
45
  attribute outputKind : ViewOutputKind[*];
@@ -13,12 +13,12 @@ package memo_viewpoints_functional_functional_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows system functions, their decomposition, and allocation."; }
14
14
  attribute :>> description = "Default viewpoint derived from the functions layer for what the system does, independent of how it is structured — function trees, function allocation, and behavior triggers.";
15
15
  attribute :>> purpose = "Describe the system's functional decomposition and behavior.";
16
- ref :>> stakeholders = (SystemArchitect);
16
+ ref :>> stakeholders = (systemArchitect);
17
17
  attribute :>> stage = WorkflowStageKind::architecture;
18
18
  attribute :>> abstractionLevel = "functional";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram);
20
20
  attribute :>> presentationKind = (PresentationKind::activityDiagram);
21
- ref :>> framedConcerns = (SafetyConcern, PerformanceConcern);
21
+ ref :>> framedConcerns = (safetyConcern, performanceConcern);
22
22
  attribute :>> explorerLane = "architecture";
23
23
  attribute :>> explorerOrder = 2;
24
24
  attribute :>> userExtensible = true;
@@ -13,12 +13,12 @@ package memo_viewpoints_logical_logical_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows logical decomposition and interfaces."; }
14
14
  attribute :>> description = "Default viewpoint derived from the logical architecture layer for subsystem structure, responsibilities, and major interactions, independent of physical realization.";
15
15
  attribute :>> purpose = "Describe the system's logical decomposition.";
16
- ref :>> stakeholders = (SystemArchitect);
16
+ ref :>> stakeholders = (systemArchitect);
17
17
  attribute :>> stage = WorkflowStageKind::architecture;
18
18
  attribute :>> abstractionLevel = "logical";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram);
20
20
  attribute :>> presentationKind = (PresentationKind::blockDiagram);
21
- ref :>> framedConcerns = (SafetyConcern, PerformanceConcern);
21
+ ref :>> framedConcerns = (safetyConcern, performanceConcern);
22
22
  attribute :>> explorerLane = "architecture";
23
23
  attribute :>> explorerOrder = 3;
24
24
  attribute :>> userExtensible = true;
@@ -13,12 +13,12 @@ package memo_viewpoints_operational_operational_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows actors, use contexts, operational scenarios, and system capabilities."; }
14
14
  attribute :>> description = "Default viewpoint derived from the context, operational, and system layers for how actors use the device — operational scenarios, capabilities, and the functional chains that realize them.";
15
15
  attribute :>> purpose = "Communicate how actors interact with the system and which capabilities they invoke.";
16
- ref :>> stakeholders = (ProjectLead, SystemArchitect);
16
+ ref :>> stakeholders = (projectLead, systemArchitect);
17
17
  attribute :>> stage = WorkflowStageKind::context;
18
18
  attribute :>> abstractionLevel = "operational";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram);
20
20
  attribute :>> presentationKind = (PresentationKind::custom);
21
- ref :>> framedConcerns = (PerformanceConcern, InteroperabilityConcern);
21
+ ref :>> framedConcerns = (performanceConcern, interoperabilityConcern);
22
22
  attribute :>> explorerLane = "architecture";
23
23
  attribute :>> explorerOrder = 1;
24
24
  attribute :>> userExtensible = true;
@@ -13,12 +13,12 @@ package memo_viewpoints_physical_physical_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows physical components, hardware structure, and their interconnections."; }
14
14
  attribute :>> description = "Default viewpoint derived from the physical and hardware structure layers for bill-of-materials, hardware decomposition, physical interfaces, and network/connectivity topology.";
15
15
  attribute :>> purpose = "Describe the system's physical realization and interconnections.";
16
- ref :>> stakeholders = (HardwareEngineer);
16
+ ref :>> stakeholders = (hardwareEngineer);
17
17
  attribute :>> stage = WorkflowStageKind::architecture;
18
18
  attribute :>> abstractionLevel = "physical";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram);
20
20
  attribute :>> presentationKind = (PresentationKind::blockDiagram);
21
- ref :>> framedConcerns = (ReliabilityConcern, InteroperabilityConcern);
21
+ ref :>> framedConcerns = (reliabilityConcern, interoperabilityConcern);
22
22
  attribute :>> explorerLane = "architecture";
23
23
  attribute :>> explorerOrder = 5;
24
24
  attribute :>> userExtensible = true;
@@ -13,12 +13,12 @@ package memo_viewpoints_requirements_requirements_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows stakeholder needs and their decomposition into system, software, and hardware requirements."; }
14
14
  attribute :>> description = "Default viewpoint derived from the requirements layer for requirements traceability — the chain from stakeholder need through system, software, and hardware requirements, supporting IEC 62304 §5.1.1 and ISO 13485 §7.3.3.";
15
15
  attribute :>> purpose = "Communicate requirements decomposition and traceability.";
16
- ref :>> stakeholders = (RegulatoryEngineer, SystemArchitect);
16
+ ref :>> stakeholders = (regulatoryEngineer, systemArchitect);
17
17
  attribute :>> stage = WorkflowStageKind::requirements;
18
18
  attribute :>> abstractionLevel = "requirements";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram, ViewOutputKind::matrix);
20
20
  attribute :>> presentationKind = (PresentationKind::traceMatrix);
21
- ref :>> framedConcerns = (RegulatoryConcern, SafetyConcern);
21
+ ref :>> framedConcerns = (regulatoryConcern, safetyConcern);
22
22
  attribute :>> explorerLane = "assurance";
23
23
  attribute :>> explorerOrder = 1;
24
24
  attribute :>> userExtensible = true;
@@ -13,12 +13,12 @@ package memo_viewpoints_risk_risk_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows hazards, risks, controls, and assurance links."; }
14
14
  attribute :>> description = "Default viewpoint derived from the risk layer for ISO 14971-style reasoning across hazard, hazardous situation, harm, control, and verification evidence.";
15
15
  attribute :>> purpose = "Communicate safety risk chains and controls.";
16
- ref :>> stakeholders = (SafetyEngineer);
16
+ ref :>> stakeholders = (safetyEngineer);
17
17
  attribute :>> stage = WorkflowStageKind::risk;
18
18
  attribute :>> abstractionLevel = "analysis";
19
19
  attribute :>> outputKind = (ViewOutputKind::table);
20
20
  attribute :>> presentationKind = (PresentationKind::riskTable);
21
- ref :>> framedConcerns = (SafetyConcern, RegulatoryConcern);
21
+ ref :>> framedConcerns = (safetyConcern, regulatoryConcern);
22
22
  attribute :>> explorerLane = "assurance";
23
23
  attribute :>> explorerOrder = 2;
24
24
  attribute :>> userExtensible = true;
@@ -13,12 +13,12 @@ package memo_viewpoints_software_software_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows software systems, components, SOUP, and software interfaces."; }
14
14
  attribute :>> description = "Default viewpoint derived from the software structure layer for IEC 62304 software architecture description — software item decomposition, SOUP inventory, and software-to-software interfaces, distinct from system-level logical decomposition.";
15
15
  attribute :>> purpose = "Describe the software architecture for IEC 62304 design documentation.";
16
- ref :>> stakeholders = (SoftwareArchitect);
16
+ ref :>> stakeholders = (softwareArchitect);
17
17
  attribute :>> stage = WorkflowStageKind::architecture;
18
18
  attribute :>> abstractionLevel = "software";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram);
20
20
  attribute :>> presentationKind = (PresentationKind::blockDiagram);
21
- ref :>> framedConcerns = (SafetyConcern, ReliabilityConcern);
21
+ ref :>> framedConcerns = (safetyConcern, reliabilityConcern);
22
22
  attribute :>> explorerLane = "architecture";
23
23
  attribute :>> explorerOrder = 4;
24
24
  attribute :>> userExtensible = true;
@@ -98,43 +98,43 @@ package memo_viewpoints_stakeholders_concerns {
98
98
  part def Availability :> MemoQualityAttribute {
99
99
  @MemoIdentity { :>> providedId = "QA-1"; }
100
100
  attribute :>> name = "Availability";
101
- ref :>> addressesConcerns = (SafetyConcern, ReliabilityConcern, ClinicalConcern);
101
+ ref :>> addressesConcerns = (safetyConcern, reliabilityConcern, clinicalConcern);
102
102
  attribute :>> measure = "Proportion of scheduled procedure time the function is delivered, and time to recover after a fault.";
103
103
  }
104
104
  part def Performance :> MemoQualityAttribute {
105
105
  @MemoIdentity { :>> providedId = "QA-2"; }
106
106
  attribute :>> name = "Performance";
107
- ref :>> addressesConcerns = (PerformanceConcern, ClinicalConcern);
107
+ ref :>> addressesConcerns = (performanceConcern, clinicalConcern);
108
108
  attribute :>> measure = "Latency and throughput under the arrival pattern the procedure produces.";
109
109
  }
110
110
  part def Security :> MemoQualityAttribute {
111
111
  @MemoIdentity { :>> providedId = "QA-3"; }
112
112
  attribute :>> name = "Security";
113
- ref :>> addressesConcerns = (CybersecurityConcern, PrivacyConcern, SafetyConcern);
113
+ ref :>> addressesConcerns = (cybersecurityConcern, privacyConcern, safetyConcern);
114
114
  attribute :>> measure = "Resistance to a stated threat, and time to detect and recover from a compromise.";
115
115
  }
116
116
  part def Modifiability :> MemoQualityAttribute {
117
117
  @MemoIdentity { :>> providedId = "QA-4"; }
118
118
  attribute :>> name = "Modifiability";
119
- ref :>> addressesConcerns = (RegulatoryConcern);
119
+ ref :>> addressesConcerns = (regulatoryConcern);
120
120
  attribute :>> measure = "Cost and blast radius of a stated change, including the re-verification it forces.";
121
121
  }
122
122
  part def Testability :> MemoQualityAttribute {
123
123
  @MemoIdentity { :>> providedId = "QA-5"; }
124
124
  attribute :>> name = "Testability";
125
- ref :>> addressesConcerns = (RegulatoryConcern, SafetyConcern);
125
+ ref :>> addressesConcerns = (regulatoryConcern, safetyConcern);
126
126
  attribute :>> measure = "Probability that a fault present is revealed by the next test, and the effort to observe it.";
127
127
  }
128
128
  part def Usability :> MemoQualityAttribute {
129
129
  @MemoIdentity { :>> providedId = "QA-6"; }
130
130
  attribute :>> name = "Usability";
131
- ref :>> addressesConcerns = (UsabilityConcern, SafetyConcern, ClinicalConcern);
131
+ ref :>> addressesConcerns = (usabilityConcern, safetyConcern, clinicalConcern);
132
132
  attribute :>> measure = "Task success and use-error rate for the intended user under use conditions (IEC 62366-1).";
133
133
  }
134
134
  part def Interoperability :> MemoQualityAttribute {
135
135
  @MemoIdentity { :>> providedId = "QA-7"; }
136
136
  attribute :>> name = "Interoperability";
137
- ref :>> addressesConcerns = (InteroperabilityConcern, ClinicalConcern);
137
+ ref :>> addressesConcerns = (interoperabilityConcern, clinicalConcern);
138
138
  attribute :>> measure = "Proportion of exchanges with a named partner system that are correctly understood.";
139
139
  }
140
140
 
@@ -189,4 +189,31 @@ package memo_viewpoints_stakeholders_concerns {
189
189
  @MemoIdentity { :>> providedId = "STK-11"; }
190
190
  attribute :>> name = "Usability Engineer";
191
191
  }
192
+
193
+ // ─── The catalog, as usages ─────────────────────────────────────────
194
+ //
195
+ // A viewpoint's `stakeholders` and `framedConcerns`, and a quality
196
+ // attribute's `addressesConcerns`, are features. What a feature is bound to
197
+ // has to be a feature as well, not a definition, so each concern and each
198
+ // stakeholder above has exactly one usage for those bindings to name.
199
+ concern safetyConcern : SafetyConcern;
200
+ concern usabilityConcern : UsabilityConcern;
201
+ concern cybersecurityConcern : CybersecurityConcern;
202
+ concern performanceConcern : PerformanceConcern;
203
+ concern interoperabilityConcern : InteroperabilityConcern;
204
+ concern reliabilityConcern : ReliabilityConcern;
205
+ concern privacyConcern : PrivacyConcern;
206
+ concern regulatoryConcern : RegulatoryConcern;
207
+ concern clinicalConcern : ClinicalConcern;
208
+ part systemArchitect : SystemArchitect;
209
+ part softwareArchitect : SoftwareArchitect;
210
+ part hardwareEngineer : HardwareEngineer;
211
+ part safetyEngineer : SafetyEngineer;
212
+ part verificationEngineer : VerificationEngineer;
213
+ part regulatoryEngineer : RegulatoryEngineer;
214
+ part projectLead : ProjectLead;
215
+ part securityEngineer : SecurityEngineer;
216
+ part privacyEngineer : PrivacyEngineer;
217
+ part clinicalEngineer : ClinicalEngineer;
218
+ part usabilityEngineer : UsabilityEngineer;
192
219
  }
@@ -13,12 +13,12 @@ package memo_viewpoints_ui_layout_ui_layout_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows screen captures with the UI element tree laid out over them."; }
14
14
  attribute :>> description = "Frames the user interface spatially: a captured rendering of a screen, and the UIElement tree laid out over it by each element's bounds. Supports IEC 62366-1 use-related design review and the UI description in the software design specification, by making 'which control is this, and what does it do' answerable from the picture. There is one tree, not two — the elements carrying the geometry are the same elements carrying the requirements, functions, use errors, and risk controls.";
15
15
  attribute :>> purpose = "Review the interface as the user sees it, with every functional area backed by a design record.";
16
- ref :>> stakeholders = (UsabilityEngineer, SoftwareArchitect, SafetyEngineer);
16
+ ref :>> stakeholders = (usabilityEngineer, softwareArchitect, safetyEngineer);
17
17
  attribute :>> stage = WorkflowStageKind::architecture;
18
18
  attribute :>> abstractionLevel = "implementation";
19
19
  attribute :>> outputKind = (ViewOutputKind::diagram, ViewOutputKind::documentSection);
20
20
  attribute :>> presentationKind = (PresentationKind::screenLayout);
21
- ref :>> framedConcerns = (UsabilityConcern, SafetyConcern);
21
+ ref :>> framedConcerns = (usabilityConcern, safetyConcern);
22
22
  attribute :>> explorerLane = "architecture";
23
23
  attribute :>> explorerOrder = 4;
24
24
  attribute :>> defaultViewKind = DiagramViewKind::geometry;
@@ -13,12 +13,12 @@ package memo_viewpoints_usability_usability_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows use contexts, actors, use errors, and usability requirements."; }
14
14
  attribute :>> description = "Default viewpoint derived from the context and requirements layers for IEC 62366-1 usability engineering — actors, use contexts, identified use errors, and requirements tagged with the usability concern. Reuses existing context-layer elements (Actor, UseContext, UseError) rather than a separate usability layer.";
15
15
  attribute :>> purpose = "Communicate use-related hazards and usability requirements for the device.";
16
- ref :>> stakeholders = (UsabilityEngineer, SafetyEngineer);
16
+ ref :>> stakeholders = (usabilityEngineer, safetyEngineer);
17
17
  attribute :>> stage = WorkflowStageKind::requirements;
18
18
  attribute :>> abstractionLevel = "usability";
19
19
  attribute :>> outputKind = (ViewOutputKind::documentSection);
20
20
  attribute :>> presentationKind = (PresentationKind::narrativeSection);
21
- ref :>> framedConcerns = (UsabilityConcern, SafetyConcern);
21
+ ref :>> framedConcerns = (usabilityConcern, safetyConcern);
22
22
  attribute :>> explorerLane = "assurance";
23
23
  attribute :>> explorerOrder = 4;
24
24
  attribute :>> userExtensible = true;
@@ -13,12 +13,12 @@ package memo_viewpoints_verification_verification_viewpoint {
13
13
  @MemoIdentity { :>> shortDescription = "Shows verification cases, validation cases, and the evidence they produce, traced to requirements."; }
14
14
  attribute :>> description = "Default viewpoint derived from the requirements and assurance layers for V&V coverage — which requirements are verified/validated, by which case, and what evidence was produced, supporting ISO 13485 §7.3.6/§7.3.7 and IEC 62304 §5.7/§5.8.";
15
15
  attribute :>> purpose = "Communicate verification and validation coverage against requirements.";
16
- ref :>> stakeholders = (VerificationEngineer);
16
+ ref :>> stakeholders = (verificationEngineer);
17
17
  attribute :>> stage = WorkflowStageKind::verificationStage;
18
18
  attribute :>> abstractionLevel = "verification";
19
19
  attribute :>> outputKind = (ViewOutputKind::matrix);
20
20
  attribute :>> presentationKind = (PresentationKind::traceMatrix);
21
- ref :>> framedConcerns = (SafetyConcern, RegulatoryConcern);
21
+ ref :>> framedConcerns = (safetyConcern, regulatoryConcern);
22
22
  attribute :>> explorerLane = "assurance";
23
23
  attribute :>> explorerOrder = 5;
24
24
  attribute :>> userExtensible = true;