diff --git a/docs/dr_egeria_manual.md b/docs/dr_egeria_manual.md index e91e40bb..44fd354a 100644 --- a/docs/dr_egeria_manual.md +++ b/docs/dr_egeria_manual.md @@ -258,6 +258,7 @@ Dr.Egeria organizes its commands into "families," each corresponding to a specif - **Actor Manager**: Manage organizational metadata, including people, teams, organizations, and roles (e.g., `Create Person`, `Create Team`, `Create Organization`, `Create Person Role`). Supports linking team structures and role appointments. - **Project**: Manage projects and their dependencies or hierarchies (e.g., `Create Project`, `Link Project Dependency`). - **Collection Manager**: Manage various collections of elements, including Folders, Products, and Agreements (e.g., `Create Collection Folder`, `Create Digital Product`). + - **Business Capabilities** (0715 Digital Business, added 2026-10-24): `Create Business Capability` (a Collection subtype with `Business Capability Type` and `Business Implementation Type`), `Link`/`Detach Business Capability Dependency` (Dependent Capability → Supporting Capability) and `Link`/`Detach Digital Support` (a business capability → the element, such as a digital service or product, that supports it). Both relationships are uni-link, so re-running a Link updates rather than duplicates. - **Solution Architect**: Manage solution blueprints, components, information supply chains, and design patterns (e.g., `Create Design Pattern`, `Link Nested Design Patterns`, `Link Specialized Design Patterns`, `Link Related Design Patterns`). - **Concept Models** (0571, added 2026-08-21): `Create Concept Bead`, `Create Concept Bead Attribute`, `Create Concept Bead Relationship`, and 8 relationship commands — `Link Concept Design`, `Link Concept Bead Relationship End`, `Link Typed By Concept Bead`, `Link Is A Concept Bead`, `Link Concept Bead Attribute Link`, `Link Concept Bead Extension`, `Link Solution Component Port`, `Link Solution Port Delegation` (`Detach`/`Unlink`/`Remove` variants auto-derived from each `Link` command). Routed through the existing generic `SolutionArchitectProcessor`/`SolutionLinkProcessor` (new `om_type` branches, no new processor classes needed) — auto-registered via `register_solution_architect_processors()`'s family-driven loop, same as every other Solution Architect command. - `Create Concept Model` (added 2026-08-21) creates the `ConceptModel` container `Link Concept Design` attaches elements to. No dedicated `/solution-architect/concept-models` REST endpoint exists yet, so this routes through the generic `Collection Manager` creation path instead — added `"Concept Model"` to `COLLECTION_SUBTYPES` (`md_processing_constants.py`), which per this repo's own convention is the entire wiring step (auto-routes to `CollectionManagerProcessor`'s existing generic-collection-subtype fallback, no bespoke pyegeria method needed). Live-verified end to end against a running 6.2-SNAPSHOT server: `Create Concept Model` → `Create Concept Bead` → `Link Concept Design`, with the `ConceptDesign` relationship confirmed present via direct fetch afterward. diff --git a/md_processing/data/compact_commands/commands_collections_compact.json b/md_processing/data/compact_commands/commands_collections_compact.json index ab09adc9..0e59f350 100644 --- a/md_processing/data/compact_commands/commands_collections_compact.json +++ b/md_processing/data/compact_commands/commands_collections_compact.json @@ -2272,6 +2272,126 @@ "max_cardinality": 1, "level": "Domain", "Journal Entry": "" + }, + "Business Capability Type": { + "variable_name": "business_capability_type", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "UNCLASSIFIED", + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ], + "existing_element": "", + "description": "The kind of business capability (BusinessCapabilityType enum, 0715 Digital Business).", + "generated": false, + "style": "Valid Value", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Domain", + "Journal Entry": "" + }, + "Business Implementation Type": { + "variable_name": "business_implementation_type", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "How the business capability is implemented, e.g. organization, process, or third party.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Domain", + "Journal Entry": "" + }, + "Dependent Capability": { + "variable_name": "dependent_capability", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "BusinessCapability", + "description": "The business capability that depends on the supporting capability (end 1 of BusinessCapabilityDependency).", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Domain", + "Journal Entry": "" + }, + "Supporting Capability": { + "variable_name": "supporting_capability", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "BusinessCapability", + "description": "The business capability that supports the dependent capability (end 2 of BusinessCapabilityDependency).", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Domain", + "Journal Entry": "" + }, + "Digital Service": { + "variable_name": "digital_service", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "Referenceable", + "description": "The element (for example a digital service or product) that supports the business capability (end 2 of DigitalSupport).", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Domain", + "Journal Entry": "" + }, + "Supported Capability": { + "variable_name": "supported_capability", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "BusinessCapability", + "description": "The business capability supported by the digital service (end 1 of DigitalSupport).", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Domain", + "Journal Entry": "" } }, "bundles": { @@ -2397,6 +2517,27 @@ "Data Description Base": { "inherits": "Link Command Base", "own_attributes": [] + }, + "Business Capability Base": { + "inherits": "Collection Base", + "own_attributes": [ + "Business Capability Type", + "Business Implementation Type" + ] + }, + "Business Capability Dependency Base": { + "inherits": "Link Command Base", + "own_attributes": [ + "Dependent Capability", + "Supporting Capability" + ] + }, + "Digital Support Base": { + "inherits": "Link Command Base", + "own_attributes": [ + "Supported Capability", + "Digital Service" + ] } }, "commands": { @@ -2975,6 +3116,105 @@ "Element Id" ], "Journal Entry": "" + }, + "Create Business Capability": { + "display_name": "Business Capability", + "qn_prefix": "BusinessCapability", + "alternate_names": [], + "family": "Collections", + "description": "Create a Business Capability - a collection describing a function, capability or skill set of the organization (0715 Digital Business).", + "verb": "Create", + "upsert": true, + "attach": false, + "level": "Basic", + "find_method": "CollectionManager.find_collections", + "find_constraints": "{\"metadata_element_type\": \"BusinessCapability\"}", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "BusinessCapability", + "bundle": "Business Capability Base", + "custom_attributes": [], + "Journal Entry": "" + }, + "Link Business Capability Dependency": { + "display_name": "Business Capability Dependency", + "qn_prefix": "", + "alternate_names": [ + "Link Business Capability to Supporting Capability" + ], + "family": "Collections", + "description": "Record that one business capability depends on another (BusinessCapabilityDependency relationship).", + "verb": "Link", + "upsert": false, + "attach": true, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "BusinessCapabilityDependency", + "bundle": "Business Capability Dependency Base", + "custom_attributes": [], + "Journal Entry": "" + }, + "Detach Business Capability Dependency": { + "display_name": "Business Capability Dependency", + "qn_prefix": "", + "alternate_names": [], + "family": "Collections", + "description": "Remove the BusinessCapabilityDependency relationship between two business capabilities.", + "verb": "Detach", + "upsert": false, + "attach": false, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "BusinessCapabilityDependency", + "bundle": "Business Capability Dependency Base", + "custom_attributes": [], + "Journal Entry": "" + }, + "Link Digital Support": { + "display_name": "Digital Support", + "qn_prefix": "", + "alternate_names": [ + "Link Business Capability to Digital Service" + ], + "family": "Collections", + "description": "Record that an element, such as a digital service or product, supports a business capability (DigitalSupport relationship).", + "verb": "Link", + "upsert": false, + "attach": true, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "DigitalSupport", + "bundle": "Digital Support Base", + "custom_attributes": [], + "Journal Entry": "" + }, + "Detach Digital Support": { + "display_name": "Digital Support", + "qn_prefix": "", + "alternate_names": [], + "family": "Collections", + "description": "Remove the DigitalSupport relationship between a business capability and a supporting element.", + "verb": "Detach", + "upsert": false, + "attach": false, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "DigitalSupport", + "bundle": "Digital Support Base", + "custom_attributes": [], + "Journal Entry": "" } } } diff --git a/md_processing/data/generated_format_sets.json b/md_processing/data/generated_format_sets.json index 3e4983be..c12f71ec 100644 --- a/md_processing/data/generated_format_sets.json +++ b/md_processing/data/generated_format_sets.json @@ -70421,6 +70421,1854 @@ "get_additional_props": null, "question_spec": null }, + "Business-Capability-DrE-Basic": { + "target_type": "Business Capability", + "heading": "Business-Capability-DrE-Basic Attributes", + "description": "Auto-generated format for Business Capability (Create, Basic).", + "aliases": [], + "annotations": {}, + "family": "Collections", + "formats": [ + { + "types": [ + "LIST" + ], + "attributes": [ + { + "name": "Display Name", + "key": "display_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Qualified Name", + "key": "qualified_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "GUID", + "key": "guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Description", + "key": "description", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Legal", + "key": "legal", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Authors", + "key": "authors", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Purpose", + "key": "purpose", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Business Capability Type", + "key": "business_capability_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ] + }, + { + "name": "Business Implementation Type", + "key": "business_implementation_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Version Identifier", + "key": "version_identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Content Status", + "key": "content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "ACTIVE", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "Category", + "key": "category", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ], + "columns": [ + { + "name": "Display Name", + "key": "display_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Qualified Name", + "key": "qualified_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "GUID", + "key": "guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Description", + "key": "description", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Legal", + "key": "legal", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Authors", + "key": "authors", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Purpose", + "key": "purpose", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Business Capability Type", + "key": "business_capability_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ] + }, + { + "name": "Business Implementation Type", + "key": "business_implementation_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Version Identifier", + "key": "version_identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Content Status", + "key": "content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "ACTIVE", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "Category", + "key": "category", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ] + }, + { + "types": [ + "ALL" + ], + "attributes": [ + { + "name": "Category", + "key": "category", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Description", + "key": "description", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Display Name", + "key": "display_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "GUID", + "key": "guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Legal", + "key": "legal", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Qualified Name", + "key": "qualified_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "URL", + "key": "url", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Version Identifier", + "key": "version_identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Authors", + "key": "authors", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Content Status", + "key": "content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "ACTIVE", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "Purpose", + "key": "purpose", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Business Capability Type", + "key": "business_capability_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ] + }, + { + "name": "Business Implementation Type", + "key": "business_implementation_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ], + "columns": [ + { + "name": "Category", + "key": "category", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Description", + "key": "description", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Display Name", + "key": "display_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "GUID", + "key": "guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Legal", + "key": "legal", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Qualified Name", + "key": "qualified_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "URL", + "key": "url", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Version Identifier", + "key": "version_identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Authors", + "key": "authors", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Content Status", + "key": "content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "ACTIVE", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "Purpose", + "key": "purpose", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Business Capability Type", + "key": "business_capability_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ] + }, + { + "name": "Business Implementation Type", + "key": "business_implementation_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ] + } + ], + "action": { + "function": "CollectionManager.find_collections", + "required_params": [ + "search_string" + ], + "optional_params": [ + "sequencing_order", + "sequencing_property", + "page_size", + "start_from", + "starts_with", + "ends_with", + "ignore_case", + "classification_names", + "metadata_element_subtypes", + "metadata_element_type" + ], + "spec_params": { + "metadata_element_type": "BusinessCapability" + }, + "analytic_function": null, + "analytic_spec_params": {}, + "analytic_binders": {} + }, + "get_additional_props": null, + "question_spec": null + }, + "Business-Capability-DrE-Advanced": { + "target_type": "Business Capability", + "heading": "Business-Capability-DrE-Advanced Attributes", + "description": "Auto-generated format for Business Capability (Create, Advanced).", + "aliases": [], + "annotations": {}, + "family": "Collections", + "formats": [ + { + "types": [ + "LIST" + ], + "attributes": [ + { + "name": "Display Name", + "key": "display_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Qualified Name", + "key": "qualified_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "GUID", + "key": "guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective From", + "key": "effective_from", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective Time", + "key": "effective_time", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective To", + "key": "effective_to", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Glossary Term", + "key": "glossary_term", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Is Own Anchor", + "key": "is_own_anchor", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Zone Membership", + "key": "zone_membership", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Additional Properties", + "key": "additional_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Confidence Classification", + "key": "confidence_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "AD_HOC", + "TRANSACTIONAL", + "AUTHORITATIVE", + "DERIVED", + "OBSOLETE", + "OTHER" + ] + }, + { + "name": "Confidentiality Classification", + "key": "confidentiality_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "INTERNAL", + "CONFIDENTIAL", + "SENSITIVE", + "RESTRICTED", + "OTHER" + ] + }, + { + "name": "Criticality Classification", + "key": "criticality_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "MARGINAL", + "IMPORTANT", + "CRITICAL", + "CATASTROPHIC", + "OTHER" + ] + }, + { + "name": "Description", + "key": "description", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Identifier", + "key": "identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Impact Classification", + "key": "impact_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "LOW", + "MEDIUM", + "HIGH", + "OTHER" + ] + }, + { + "name": "Legal", + "key": "legal", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Policy Management Point", + "key": "policy_management_point", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Retention Classification", + "key": "retention_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "TEMPORARY", + "PROJECT_LIFETIME", + "TEAM_LIFETIME", + "CONTRACT_LIFETIME", + "REGULATED_LIFETIME", + "TIMEBOXED_LIFETIME", + "OTHER" + ] + }, + { + "name": "Security Tags", + "key": "security_tags", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Authors", + "key": "authors", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Purpose", + "key": "purpose", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Business Capability Type", + "key": "business_capability_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ] + }, + { + "name": "Business Implementation Type", + "key": "business_implementation_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Classifications", + "key": "classifications", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Anchor Scope Name", + "key": "anchor_scope_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Supplementary Properties", + "key": "supplementary_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Version Identifier", + "key": "version_identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Status", + "key": "status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Content Status", + "key": "content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "ACTIVE", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "User Defined Content Status", + "key": "user_defined_content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "User Defined Status", + "key": "user_defined_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Category", + "key": "category", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ], + "columns": [ + { + "name": "Display Name", + "key": "display_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Qualified Name", + "key": "qualified_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "GUID", + "key": "guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective From", + "key": "effective_from", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective Time", + "key": "effective_time", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective To", + "key": "effective_to", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Glossary Term", + "key": "glossary_term", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Is Own Anchor", + "key": "is_own_anchor", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Zone Membership", + "key": "zone_membership", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Additional Properties", + "key": "additional_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Confidence Classification", + "key": "confidence_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "AD_HOC", + "TRANSACTIONAL", + "AUTHORITATIVE", + "DERIVED", + "OBSOLETE", + "OTHER" + ] + }, + { + "name": "Confidentiality Classification", + "key": "confidentiality_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "INTERNAL", + "CONFIDENTIAL", + "SENSITIVE", + "RESTRICTED", + "OTHER" + ] + }, + { + "name": "Criticality Classification", + "key": "criticality_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "MARGINAL", + "IMPORTANT", + "CRITICAL", + "CATASTROPHIC", + "OTHER" + ] + }, + { + "name": "Description", + "key": "description", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Identifier", + "key": "identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Impact Classification", + "key": "impact_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "LOW", + "MEDIUM", + "HIGH", + "OTHER" + ] + }, + { + "name": "Legal", + "key": "legal", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Policy Management Point", + "key": "policy_management_point", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Retention Classification", + "key": "retention_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "TEMPORARY", + "PROJECT_LIFETIME", + "TEAM_LIFETIME", + "CONTRACT_LIFETIME", + "REGULATED_LIFETIME", + "TIMEBOXED_LIFETIME", + "OTHER" + ] + }, + { + "name": "Security Tags", + "key": "security_tags", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Authors", + "key": "authors", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Purpose", + "key": "purpose", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Business Capability Type", + "key": "business_capability_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ] + }, + { + "name": "Business Implementation Type", + "key": "business_implementation_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Classifications", + "key": "classifications", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Anchor Scope Name", + "key": "anchor_scope_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Supplementary Properties", + "key": "supplementary_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Version Identifier", + "key": "version_identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Status", + "key": "status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Content Status", + "key": "content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "ACTIVE", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "User Defined Content Status", + "key": "user_defined_content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "User Defined Status", + "key": "user_defined_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Category", + "key": "category", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ] + }, + { + "types": [ + "ALL" + ], + "attributes": [ + { + "name": "Effective From", + "key": "effective_from", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective Time", + "key": "effective_time", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective To", + "key": "effective_to", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Glossary Term", + "key": "glossary_term", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Is Own Anchor", + "key": "is_own_anchor", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Status", + "key": "status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Zone Membership", + "key": "zone_membership", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Additional Properties", + "key": "additional_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Category", + "key": "category", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Confidence Classification", + "key": "confidence_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "AD_HOC", + "TRANSACTIONAL", + "AUTHORITATIVE", + "DERIVED", + "OBSOLETE", + "OTHER" + ] + }, + { + "name": "Confidentiality Classification", + "key": "confidentiality_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "INTERNAL", + "CONFIDENTIAL", + "SENSITIVE", + "RESTRICTED", + "OTHER" + ] + }, + { + "name": "Criticality Classification", + "key": "criticality_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "MARGINAL", + "IMPORTANT", + "CRITICAL", + "CATASTROPHIC", + "OTHER" + ] + }, + { + "name": "Description", + "key": "description", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Display Name", + "key": "display_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "GUID", + "key": "guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Identifier", + "key": "identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Impact Classification", + "key": "impact_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "LOW", + "MEDIUM", + "HIGH", + "OTHER" + ] + }, + { + "name": "Legal", + "key": "legal", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Policy Management Point", + "key": "policy_management_point", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Qualified Name", + "key": "qualified_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Retention Classification", + "key": "retention_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "TEMPORARY", + "PROJECT_LIFETIME", + "TEAM_LIFETIME", + "CONTRACT_LIFETIME", + "REGULATED_LIFETIME", + "TIMEBOXED_LIFETIME", + "OTHER" + ] + }, + { + "name": "Security Tags", + "key": "security_tags", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "URL", + "key": "url", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Version Identifier", + "key": "version_identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Authors", + "key": "authors", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Content Status", + "key": "content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "ACTIVE", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "User Defined Content Status", + "key": "user_defined_content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Purpose", + "key": "purpose", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Business Capability Type", + "key": "business_capability_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ] + }, + { + "name": "Business Implementation Type", + "key": "business_implementation_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "User Defined Status", + "key": "user_defined_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Classifications", + "key": "classifications", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Anchor Scope Name", + "key": "anchor_scope_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Supplementary Properties", + "key": "supplementary_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + } + ], + "columns": [ + { + "name": "Effective From", + "key": "effective_from", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective Time", + "key": "effective_time", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective To", + "key": "effective_to", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Glossary Term", + "key": "glossary_term", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Is Own Anchor", + "key": "is_own_anchor", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Status", + "key": "status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Zone Membership", + "key": "zone_membership", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Additional Properties", + "key": "additional_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Category", + "key": "category", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Confidence Classification", + "key": "confidence_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "AD_HOC", + "TRANSACTIONAL", + "AUTHORITATIVE", + "DERIVED", + "OBSOLETE", + "OTHER" + ] + }, + { + "name": "Confidentiality Classification", + "key": "confidentiality_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "INTERNAL", + "CONFIDENTIAL", + "SENSITIVE", + "RESTRICTED", + "OTHER" + ] + }, + { + "name": "Criticality Classification", + "key": "criticality_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "MARGINAL", + "IMPORTANT", + "CRITICAL", + "CATASTROPHIC", + "OTHER" + ] + }, + { + "name": "Description", + "key": "description", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Display Name", + "key": "display_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "GUID", + "key": "guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Identifier", + "key": "identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Impact Classification", + "key": "impact_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "LOW", + "MEDIUM", + "HIGH", + "OTHER" + ] + }, + { + "name": "Legal", + "key": "legal", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Policy Management Point", + "key": "policy_management_point", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Qualified Name", + "key": "qualified_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Retention Classification", + "key": "retention_classification", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "TEMPORARY", + "PROJECT_LIFETIME", + "TEAM_LIFETIME", + "CONTRACT_LIFETIME", + "REGULATED_LIFETIME", + "TIMEBOXED_LIFETIME", + "OTHER" + ] + }, + { + "name": "Security Tags", + "key": "security_tags", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "URL", + "key": "url", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Version Identifier", + "key": "version_identifier", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Authors", + "key": "authors", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Content Status", + "key": "content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "ACTIVE", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "User Defined Content Status", + "key": "user_defined_content_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Purpose", + "key": "purpose", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Business Capability Type", + "key": "business_capability_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "UNCLASSIFIED", + "BUSINESS_SERVICE", + "BUSINESS_AREA", + "BUSINESS_DOMAIN", + "OTHER" + ] + }, + { + "name": "Business Implementation Type", + "key": "business_implementation_type", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "User Defined Status", + "key": "user_defined_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Classifications", + "key": "classifications", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Anchor Scope Name", + "key": "anchor_scope_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "Supplementary Properties", + "key": "supplementary_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + } + ] + } + ], + "action": { + "function": "CollectionManager.find_collections", + "required_params": [ + "search_string" + ], + "optional_params": [ + "sequencing_order", + "sequencing_property", + "page_size", + "start_from", + "starts_with", + "ends_with", + "ignore_case", + "classification_names", + "metadata_element_subtypes", + "metadata_element_type" + ], + "spec_params": { + "metadata_element_type": "BusinessCapability" + }, + "analytic_function": null, + "analytic_spec_params": {}, + "analytic_binders": {} + }, + "get_additional_props": null, + "question_spec": null + }, "Data-Dictionary-DrE-Basic": { "target_type": "Data Dictionary", "heading": "Data-Dictionary-DrE-Basic Attributes", diff --git a/md_processing/dr_egeria.py b/md_processing/dr_egeria.py index 02ad73c8..e2055de8 100644 --- a/md_processing/dr_egeria.py +++ b/md_processing/dr_egeria.py @@ -382,6 +382,10 @@ def reg(base, cls): reg("Attach Collection to Resource", CollectionLinkProcessor) reg("Link Digital Subscriber", CollectionLinkProcessor) reg("Link Data Description", CollectionLinkProcessor) + reg("Link Business Capability Dependency", CollectionLinkProcessor) + reg("Detach Business Capability Dependency", CollectionLinkProcessor) + reg("Link Digital Support", CollectionLinkProcessor) + reg("Detach Digital Support", CollectionLinkProcessor) # Governance (spec-driven to keep coverage aligned with compact commands) register_governance_processors(reg) diff --git a/md_processing/md_processing_utils/common_md_utils.py b/md_processing/md_processing_utils/common_md_utils.py index eefcce94..84a9ce91 100644 --- a/md_processing/md_processing_utils/common_md_utils.py +++ b/md_processing/md_processing_utils/common_md_utils.py @@ -465,6 +465,13 @@ def set_collection_manager_body(object_type: str, qualified_name: str, attribute if "Working Set" in object_type: prop_bod['disposition'] = attributes.get('Disposition', {}).get('value', None) + # Handle Business Capability (0715 Digital Business) + if object_type in ["Business Capability", "BusinessCapability"]: + prop_bod.update({ + "businessCapabilityType": attributes.get('Business Capability Type', {}).get('value', None), + "businessImplementationType": attributes.get('Business Implementation Type', {}).get('value', None), + }) + return prop_bod diff --git a/md_processing/md_processing_utils/md_processing_constants.py b/md_processing/md_processing_utils/md_processing_constants.py index f7fc781f..48fe8916 100644 --- a/md_processing/md_processing_utils/md_processing_constants.py +++ b/md_processing/md_processing_utils/md_processing_constants.py @@ -89,7 +89,7 @@ "Glossary", "Security Group", "Security List", "Security Role", "Skill Set", "Reference List", "Report Type", "Question Spec", "Working Set", "Event Set", "Context Event Collection", "IT Subsystem", "Naming Standard Rule Set", "Software Archive", - "Concept Model", + "Concept Model", "Business Capability", ] SIMPLE_BASE_COLLECTIONS: set = set(COLLECTION_SUBTYPES) | { diff --git a/md_processing/v2/collection_manager_processor.py b/md_processing/v2/collection_manager_processor.py index d9fb6af8..b51f660c 100644 --- a/md_processing/v2/collection_manager_processor.py +++ b/md_processing/v2/collection_manager_processor.py @@ -386,6 +386,28 @@ async def apply_changes(self) -> str: self.parsed_output["guid"] = rel_guid new_rel_guids.append(rel_guid) + elif "Business Capability Dependency" in object_type: + # BusinessCapabilityDependency is UNI_LINK, so attach is an upsert. + body['properties'] = { + "class": "BusinessCapabilityDependencyProperties", + "label": attributes.get('Label', {}).get('value'), + "description": attributes.get('Description', {}).get('value'), + } + await self.client._async_link_business_capability_dependency( + attributes.get('Dependent Capability', {}).get('guid'), + attributes.get('Supporting Capability', {}).get('guid'), body) + + elif "Digital Support" in object_type: + # DigitalSupport is UNI_LINK, so attach is an upsert. + body['properties'] = { + "class": "DigitalSupportProperties", + "label": attributes.get('Label', {}).get('value'), + "description": attributes.get('Description', {}).get('value'), + } + await self.client._async_link_digital_support( + attributes.get('Supported Capability', {}).get('guid'), + attributes.get('Digital Service', {}).get('guid'), body) + elif "Attach Collection" in object_type: guid_coll = attributes.get('Collection Id', {}).get('guid') guid_res = attributes.get('Resource Id', {}).get('guid') @@ -442,7 +464,8 @@ async def apply_changes(self) -> str: header += "### Link Properties\n" # Exclude standard command identifiers when dumping properties for k, v in attributes.items(): - if k not in ["Collection Id", "Element Id", "Digital Product 1", "Digital Product 2", "Subscriber Id", "Subscription", "Resource Id", "Agreement Name", "Item Name", "Qualified Name", "Display Name"]: + if k not in ["Collection Id", "Element Id", "Digital Product 1", "Digital Product 2", + "Dependent Capability", "Supporting Capability", "Supported Capability", "Digital Service", "Subscriber Id", "Subscription", "Resource Id", "Agreement Name", "Item Name", "Qualified Name", "Display Name"]: val = v.get("value") if val: header += f"- **{k}**: {val}\n" @@ -488,6 +511,14 @@ async def apply_changes(self) -> str: await self.client._async_detach_digital_product_dependency_by_id(explicit_rel_guid, body) else: await self.client._async_detach_digital_product_dependency(attributes.get('Digital Product 1', {}).get('guid'), attributes.get('Digital Product 2', {}).get('guid'), body) + elif "Business Capability Dependency" in object_type: + await self.client._async_detach_business_capability_dependency( + attributes.get('Dependent Capability', {}).get('guid'), + attributes.get('Supporting Capability', {}).get('guid'), body) + elif "Digital Support" in object_type: + await self.client._async_detach_digital_support( + attributes.get('Supported Capability', {}).get('guid'), + attributes.get('Digital Service', {}).get('guid'), body) elif "Attach Collection" in object_type or "Resource List" in object_type: await self.client._async_detach_collection(attributes.get('Resource Id', {}).get('guid'), attributes.get('Collection Id', {}).get('guid'), body) elif "Data Description" in object_type: diff --git a/sample-data/templates/advanced/Collections/Create_Business_Capability.md b/sample-data/templates/advanced/Collections/Create_Business_Capability.md new file mode 100644 index 00000000..a00aba76 --- /dev/null +++ b/sample-data/templates/advanced/Collections/Create_Business_Capability.md @@ -0,0 +1,460 @@ +___ + +## Create Business Capability +> Create a Business Capability - a collection describing a function, capability or skill set of the organization (0715 Digital Business). + +### Display Name +> **Input Required**: True + +> **Attribute Type**: Simple + +> **Description**: The common name of an element. + +> **Alternative Labels**: "Term Name" + + +### Business Capability Type +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: The kind of business capability (BusinessCapabilityType enum, 0715 Digital Business). + +> **Valid Values**: UNCLASSIFIED,BUSINESS_SERVICE,BUSINESS_AREA,BUSINESS_DOMAIN,OTHER + +> **Default Value**: UNCLASSIFIED + + +### Business Implementation Type +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: How the business capability is implemented, e.g. organization, process, or third party. + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Category +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user-defined category for the element, used to group related elements for display or search purposes. + +> **Alternative Labels**: Category Name + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +### Legal +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: Copyright and/or license information for the element or associated resource. + + +### Qualified Name +> **Input Required**: False + +> **Attribute Type**: QN + +> **Description**: The unique, text name of an element. + + +### Content Status +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: The lifecycle status of an element. + +> **Valid Values**: DRAFT,PREPARED,PROPOSED,APPROVED,REJECTED,ACTIVE,DEPRECATED,OTHER + +> **Default Value**: ACTIVE + + +### Purpose +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The purpose of this collection — a short description of why it exists or what it is used for. + + +### Search Keywords +> **Input Required**: False + +> **Attribute Type**: Simple List + +> **Description**: A list of search keywords. + + +### GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: A unique identifier - typically of an element in this context. + +> **Alternative Labels**: guid; Guid + + +### URL +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: URL for further information. + + +### Version Identifier +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The version of the element + +> **Alternative Labels**: Version + +> **Default Value**: 1.0 + + +### Authors +> **Input Required**: False + +> **Attribute Type**: Simple List + +> **Description**: The authors. + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +### Anchor ID +> **Input Required**: False + +> **Attribute Type**: Reference Name + +> **Description**: Name of the anchoring element. + + +### Anchor Scope ID +> **Input Required**: False + +> **Attribute Type**: Reference Name + +> **Description**: Anchor scope to restrict search. + +> **Alternative Labels**: Anchor Scope + + +### Glossary Term +> **Input Required**: False + +> **Attribute Type**: Reference Name + +> **Description**: Term that provides meaning to this field. + +> **Alternative Labels**: Term + + +### Is Own Anchor +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: A flag indicating if the element is its own anchor or is anchored to a different element. + +> **Alternative Labels**: Own Anchor + +> **Default Value**: true + + +### Merge Update +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: A flag indicating if the update should be a merge or replace. + +> **Alternative Labels**: isMergeUpdate + +> **Default Value**: true + + +### Parent at End1 +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: A flag indicating if the parent is at end1 of the relationship + +> **Default Value**: true + + +### Parent ID +> **Input Required**: False + +> **Attribute Type**: Reference Name + +> **Description**: Name of the parent + +> **Alternative Labels**: Parent; + + +### Parent Relationship Attributes +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: A dictionary of relationship attributes to establish the parent relationship. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Parent Relationship Type Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The type of parent relationship. + + +### Status +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: Repository or element header status for an element. + +> **Default Value**: ACTIVE + + +### Zone Membership +> **Input Required**: False + +> **Attribute Type**: Simple List + +> **Description**: Zones scope visibility of elements to different users. + + +### Additional Properties +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Additional Properties allow arbitrary properties not defined in the type definitions to be added to any referenceable element. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Confidence Classification +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: Classification from 0422. Structure: {status_identifier: int, confidence: int, steward: str, steward_type_name: str, steward_property_name: str, source: str, notes: str, level_identifier: int}. level_identifier uses ConfidenceLevel enum: UNCLASSIFIED=0, AD_HOC=1, TRANSACTIONAL=2, AUTHORITATIVE=3, DERIVED=4, OBSOLETE=5, OTHER=99. + +> **Valid Values**: UNCLASSIFIED,AD_HOC,TRANSACTIONAL,AUTHORITATIVE,DERIVED,OBSOLETE,OTHER + + +### Confidentiality Classification +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: Classification from 0422. Structure: {status_identifier: int, confidence: int, steward: str, steward_type_name: str, steward_property_name: str, source: str, notes: str, level_identifier: int}. level_identifier uses ConfidentialityLevel enum: UNCLASSIFIED=0, INTERNAL=1, CONFIDENTIAL=2, SENSITIVE=3, RESTRICTED=4, OTHER=99. + +> **Valid Values**: UNCLASSIFIED,INTERNAL,CONFIDENTIAL,SENSITIVE,RESTRICTED,OTHER + + +### Criticality Classification +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: Classification from 0422. Structure: {status_identifier: int, confidence: int, steward: str, steward_type_name: str, steward_property_name: str, source: str, notes: str, level_identifier: int}. level_identifier uses CriticalityLevel enum: UNCLASSIFIED=0, MARGINAL=1, IMPORTANT=2, CRITICAL=3, CATASTROPHIC=4, OTHER=99. + +> **Valid Values**: UNCLASSIFIED,MARGINAL,IMPORTANT,CRITICAL,CATASTROPHIC,OTHER + + +### Identifier +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: An identier + +> **Alternative Labels**: ID + + +### Impact Classification +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: Classification from 0422. Structure: {status_identifier: int, confidence: int, steward: str, steward_type_name: str, steward_property_name: str, source: str, notes: str, severity_identifier: int}. severity_identifier uses ImpactSeverity enum: UNCLASSIFIED=0, LOW=1, MEDIUM=2, HIGH=3, OTHER=99. + +> **Valid Values**: UNCLASSIFIED,LOW,MEDIUM,HIGH,OTHER + + +### Policy Management Point +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Combined classification from 0435. Applied to Referenceable. Structure: {point_type: str, name: str, description: str}. point_type is one of: PolicyAdministrationPoint, PolicyDecisionPoint, PolicyEnforcementPoint, PolicyInformationPoint, PolicyRetrievalPoint. A Referenceable may have multiple policy management point classifications simultaneously. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Retention Classification +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: Classification from 0422. Structure: {status_identifier: int, confidence: int, steward: str, steward_type_name: str, steward_property_name: str, source: str, notes: str, basis_identifier: int, associated_guid: str, archive_after: date, delete_after: date}. basis_identifier uses RetentionBasis enum: UNCLASSIFIED=0, TEMPORARY=1, PROJECT_LIFETIME=2, TEAM_LIFETIME=3, CONTRACT_LIFETIME=4, REGULATED_LIFETIME=5, TIMEBOXED_LIFETIME=6, OTHER=99. + +> **Valid Values**: UNCLASSIFIED,TEMPORARY,PROJECT_LIFETIME,TEAM_LIFETIME,CONTRACT_LIFETIME,REGULATED_LIFETIME,TIMEBOXED_LIFETIME,OTHER + + +### Security Tags +> **Input Required**: False + +> **Attribute Type**: Simple List + +> **Description**: Optional security tags for security processing. + + +### User Defined Content Status +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user defined content status = only valid if content status is OTHER. + + +### User Defined Status +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: Only valid if Status is set to OTHER. User defined & managed status values. + + +### Classifications +> **Input Required**: false + +> **Attribute Type**: Named DICT + +> **Description**: Optionally specify the initial classifications for a collection. Multiple classifications can be specified. + +> **Alternative Labels**: classification + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Anchor Scope Name +> **Input Required**: False + +> **Attribute Type**: Reference Name + +> **Description**: Optional qualified name of an anchor scope. + + +### Supplementary Properties +> **Input Required**: False + +> **Attribute Type**: Named DICT + +> **Description**: Provide supplementary information to the element using the structure of a glossary term + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +___ diff --git a/sample-data/templates/advanced/Collections/Detach_Business_Capability_Dependency.md b/sample-data/templates/advanced/Collections/Detach_Business_Capability_Dependency.md new file mode 100644 index 00000000..9e3e0037 --- /dev/null +++ b/sample-data/templates/advanced/Collections/Detach_Business_Capability_Dependency.md @@ -0,0 +1,130 @@ +___ + +## Detach Business Capability Dependency +> Remove the BusinessCapabilityDependency relationship between two business capabilities. + +### Dependent Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability that depends on the supporting capability (end 1 of BusinessCapabilityDependency). + + +### Supporting Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability that supports the dependent capability (end 2 of BusinessCapabilityDependency). + + +### Label +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A label used to identify or categorise a relationship link. + +> **Alternative Labels**: Wire Label + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +### Anchor Scope IDs +> **Input Required**: False + +> **Attribute Type**: Reference Name List + +> **Description**: A list of IDs that are anchor scopes for this element. + + +### Make Anchor +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Is the element at end2 an anchor to end1? + +> **Default Value**: false + + +___ diff --git a/sample-data/templates/advanced/Collections/Detach_Digital_Support.md b/sample-data/templates/advanced/Collections/Detach_Digital_Support.md new file mode 100644 index 00000000..9c8b543c --- /dev/null +++ b/sample-data/templates/advanced/Collections/Detach_Digital_Support.md @@ -0,0 +1,130 @@ +___ + +## Detach Digital Support +> Remove the DigitalSupport relationship between a business capability and a supporting element. + +### Supported Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability supported by the digital service (end 1 of DigitalSupport). + + +### Digital Service +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The element (for example a digital service or product) that supports the business capability (end 2 of DigitalSupport). + + +### Label +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A label used to identify or categorise a relationship link. + +> **Alternative Labels**: Wire Label + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +### Anchor Scope IDs +> **Input Required**: False + +> **Attribute Type**: Reference Name List + +> **Description**: A list of IDs that are anchor scopes for this element. + + +### Make Anchor +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Is the element at end2 an anchor to end1? + +> **Default Value**: false + + +___ diff --git a/sample-data/templates/advanced/Collections/Link_Business_Capability_Dependency.md b/sample-data/templates/advanced/Collections/Link_Business_Capability_Dependency.md new file mode 100644 index 00000000..9ab95446 --- /dev/null +++ b/sample-data/templates/advanced/Collections/Link_Business_Capability_Dependency.md @@ -0,0 +1,132 @@ +___ + +## Link Business Capability Dependency +> Record that one business capability depends on another (BusinessCapabilityDependency relationship). +> +> **Alternative Names**: Link Business Capability to Supporting Capability + +### Dependent Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability that depends on the supporting capability (end 1 of BusinessCapabilityDependency). + + +### Supporting Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability that supports the dependent capability (end 2 of BusinessCapabilityDependency). + + +### Label +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A label used to identify or categorise a relationship link. + +> **Alternative Labels**: Wire Label + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +### Anchor Scope IDs +> **Input Required**: False + +> **Attribute Type**: Reference Name List + +> **Description**: A list of IDs that are anchor scopes for this element. + + +### Make Anchor +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Is the element at end2 an anchor to end1? + +> **Default Value**: false + + +___ diff --git a/sample-data/templates/advanced/Collections/Link_Digital_Support.md b/sample-data/templates/advanced/Collections/Link_Digital_Support.md new file mode 100644 index 00000000..31502f3c --- /dev/null +++ b/sample-data/templates/advanced/Collections/Link_Digital_Support.md @@ -0,0 +1,132 @@ +___ + +## Link Digital Support +> Record that an element, such as a digital service or product, supports a business capability (DigitalSupport relationship). +> +> **Alternative Names**: Link Business Capability to Digital Service + +### Supported Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability supported by the digital service (end 1 of DigitalSupport). + + +### Digital Service +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The element (for example a digital service or product) that supports the business capability (end 2 of DigitalSupport). + + +### Label +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A label used to identify or categorise a relationship link. + +> **Alternative Labels**: Wire Label + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +### Anchor Scope IDs +> **Input Required**: False + +> **Attribute Type**: Reference Name List + +> **Description**: A list of IDs that are anchor scopes for this element. + + +### Make Anchor +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Is the element at end2 an anchor to end1? + +> **Default Value**: false + + +___ diff --git a/sample-data/templates/basic/Collections/Create_Business_Capability.md b/sample-data/templates/basic/Collections/Create_Business_Capability.md new file mode 100644 index 00000000..4ed3c13f --- /dev/null +++ b/sample-data/templates/basic/Collections/Create_Business_Capability.md @@ -0,0 +1,144 @@ +___ + +## Create Business Capability +> Create a Business Capability - a collection describing a function, capability or skill set of the organization (0715 Digital Business). + +### Display Name +> **Input Required**: True + +> **Attribute Type**: Simple + +> **Description**: The common name of an element. + +> **Alternative Labels**: "Term Name" + + +### Business Capability Type +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: The kind of business capability (BusinessCapabilityType enum, 0715 Digital Business). + +> **Valid Values**: UNCLASSIFIED,BUSINESS_SERVICE,BUSINESS_AREA,BUSINESS_DOMAIN,OTHER + +> **Default Value**: UNCLASSIFIED + + +### Business Implementation Type +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: How the business capability is implemented, e.g. organization, process, or third party. + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Category +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user-defined category for the element, used to group related elements for display or search purposes. + +> **Alternative Labels**: Category Name + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +### Legal +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: Copyright and/or license information for the element or associated resource. + + +### Qualified Name +> **Input Required**: False + +> **Attribute Type**: QN + +> **Description**: The unique, text name of an element. + + +### Content Status +> **Input Required**: False + +> **Attribute Type**: Valid Value + +> **Description**: The lifecycle status of an element. + +> **Valid Values**: DRAFT,PREPARED,PROPOSED,APPROVED,REJECTED,ACTIVE,DEPRECATED,OTHER + +> **Default Value**: ACTIVE + + +### Purpose +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The purpose of this collection — a short description of why it exists or what it is used for. + + +### Search Keywords +> **Input Required**: False + +> **Attribute Type**: Simple List + +> **Description**: A list of search keywords. + + +### GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: A unique identifier - typically of an element in this context. + +> **Alternative Labels**: guid; Guid + + +### URL +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: URL for further information. + + +### Version Identifier +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The version of the element + +> **Alternative Labels**: Version + +> **Default Value**: 1.0 + + +### Authors +> **Input Required**: False + +> **Attribute Type**: Simple List + +> **Description**: The authors. + + +___ diff --git a/sample-data/templates/basic/Collections/Detach_Business_Capability_Dependency.md b/sample-data/templates/basic/Collections/Detach_Business_Capability_Dependency.md new file mode 100644 index 00000000..5392e2db --- /dev/null +++ b/sample-data/templates/basic/Collections/Detach_Business_Capability_Dependency.md @@ -0,0 +1,48 @@ +___ + +## Detach Business Capability Dependency +> Remove the BusinessCapabilityDependency relationship between two business capabilities. + +### Dependent Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability that depends on the supporting capability (end 1 of BusinessCapabilityDependency). + + +### Supporting Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability that supports the dependent capability (end 2 of BusinessCapabilityDependency). + + +### Label +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A label used to identify or categorise a relationship link. + +> **Alternative Labels**: Wire Label + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +___ diff --git a/sample-data/templates/basic/Collections/Detach_Digital_Support.md b/sample-data/templates/basic/Collections/Detach_Digital_Support.md new file mode 100644 index 00000000..45e2808f --- /dev/null +++ b/sample-data/templates/basic/Collections/Detach_Digital_Support.md @@ -0,0 +1,48 @@ +___ + +## Detach Digital Support +> Remove the DigitalSupport relationship between a business capability and a supporting element. + +### Supported Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability supported by the digital service (end 1 of DigitalSupport). + + +### Digital Service +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The element (for example a digital service or product) that supports the business capability (end 2 of DigitalSupport). + + +### Label +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A label used to identify or categorise a relationship link. + +> **Alternative Labels**: Wire Label + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +___ diff --git a/sample-data/templates/basic/Collections/Link_Business_Capability_Dependency.md b/sample-data/templates/basic/Collections/Link_Business_Capability_Dependency.md new file mode 100644 index 00000000..5270ec56 --- /dev/null +++ b/sample-data/templates/basic/Collections/Link_Business_Capability_Dependency.md @@ -0,0 +1,50 @@ +___ + +## Link Business Capability Dependency +> Record that one business capability depends on another (BusinessCapabilityDependency relationship). +> +> **Alternative Names**: Link Business Capability to Supporting Capability + +### Dependent Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability that depends on the supporting capability (end 1 of BusinessCapabilityDependency). + + +### Supporting Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability that supports the dependent capability (end 2 of BusinessCapabilityDependency). + + +### Label +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A label used to identify or categorise a relationship link. + +> **Alternative Labels**: Wire Label + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +___ diff --git a/sample-data/templates/basic/Collections/Link_Digital_Support.md b/sample-data/templates/basic/Collections/Link_Digital_Support.md new file mode 100644 index 00000000..c6bed5cb --- /dev/null +++ b/sample-data/templates/basic/Collections/Link_Digital_Support.md @@ -0,0 +1,50 @@ +___ + +## Link Digital Support +> Record that an element, such as a digital service or product, supports a business capability (DigitalSupport relationship). +> +> **Alternative Names**: Link Business Capability to Digital Service + +### Supported Capability +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The business capability supported by the digital service (end 1 of DigitalSupport). + + +### Digital Service +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The element (for example a digital service or product) that supports the business capability (end 2 of DigitalSupport). + + +### Label +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A label used to identify or categorise a relationship link. + +> **Alternative Labels**: Wire Label + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Description +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A description. + + +___ diff --git a/tests/micro-tests/test_business_capability_commands.py b/tests/micro-tests/test_business_capability_commands.py new file mode 100644 index 00000000..6667ea4c --- /dev/null +++ b/tests/micro-tests/test_business_capability_commands.py @@ -0,0 +1,109 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright Contributors to the ODPi Egeria project. +""" +Dr.Egeria support for the 0715 Digital Business model: Business Capability (a +Collection subtype) and its BusinessCapabilityDependency / DigitalSupport +relationships. Requested by Mandy Chessell, 2026-10-24. + +Confirms: + - Create/Update Business Capability route to CollectionManagerProcessor and + send businessCapabilityType / businessImplementationType; + - the four Link/Detach commands route to CollectionLinkProcessor and call the + DigitalBusiness SDK methods with the ends in the right order. + +No live server needed: a fake client stands in for the OMVS layer. +""" +from typing import Any, cast + +import pytest + +from md_processing.md_processing_utils.common_md_utils import set_collection_manager_body +from md_processing.md_processing_utils.md_processing_constants import COLLECTION_SUBTYPES +from md_processing.v2.collection_manager_processor import CollectionLinkProcessor +from md_processing.v2.extraction import DrECommand + + +class _FakeClient: + def __init__(self): + self.calls = [] + + async def _async_link_business_capability_dependency(self, bc_guid, supporting_guid, body): + self.calls.append(("link_dependency", bc_guid, supporting_guid, body)) + + async def _async_detach_business_capability_dependency(self, bc_guid, supporting_guid, body): + self.calls.append(("detach_dependency", bc_guid, supporting_guid, body)) + + async def _async_link_digital_support(self, bc_guid, element_guid, body): + self.calls.append(("link_support", bc_guid, element_guid, body)) + + async def _async_detach_digital_support(self, bc_guid, element_guid, body): + self.calls.append(("detach_support", bc_guid, element_guid, body)) + + +def _processor(client, verb, object_type, attributes): + command = DrECommand(verb=verb, object_type=object_type, attributes={}, raw_block=f"# {verb} {object_type}") + p = CollectionLinkProcessor(client=cast(Any, client), command=command, context={}) + p.canonical_object_type = object_type + p.parsed_output = {"qualified_name": f"{object_type}::test::1", "attributes": attributes} + return p + + +def test_business_capability_is_a_collection_subtype(): + assert "Business Capability" in COLLECTION_SUBTYPES + + +def test_business_capability_body_carries_its_own_properties(): + body = set_collection_manager_body("BusinessCapability", "BusinessCapability::bc1", { + "Display Name": {"value": "Order Management"}, + "Business Capability Type": {"value": "BUSINESS_AREA"}, + "Business Implementation Type": {"value": "organization"}, + }) + assert body["class"] == "BusinessCapabilityProperties" + assert body["businessCapabilityType"] == "BUSINESS_AREA" + assert body["businessImplementationType"] == "organization" + + +@pytest.mark.asyncio +async def test_link_business_capability_dependency_sends_ends_in_order(): + client = _FakeClient() + p = _processor(client, "Link", "Business Capability Dependency", { + "Dependent Capability": {"guid": "bc1-guid"}, + "Supporting Capability": {"guid": "bc2-guid"}, + "Label": {"value": "needs-payments"}, + }) + + await p.apply_changes() + + name, end1, end2, body = client.calls[0] + assert (name, end1, end2) == ("link_dependency", "bc1-guid", "bc2-guid") + assert body["properties"]["class"] == "BusinessCapabilityDependencyProperties" + assert body["properties"]["label"] == "needs-payments" + + +@pytest.mark.asyncio +async def test_detach_business_capability_dependency(): + client = _FakeClient() + p = _processor(client, "Detach", "Business Capability Dependency", { + "Dependent Capability": {"guid": "bc1-guid"}, + "Supporting Capability": {"guid": "bc2-guid"}, + }) + + await p.apply_changes() + + assert client.calls[0][:3] == ("detach_dependency", "bc1-guid", "bc2-guid") + + +@pytest.mark.asyncio +async def test_link_and_detach_digital_support(): + client = _FakeClient() + attributes = { + "Supported Capability": {"guid": "bc1-guid"}, + "Digital Service": {"guid": "service-guid"}, + } + + await _processor(client, "Link", "Digital Support", attributes).apply_changes() + await _processor(client, "Detach", "Digital Support", attributes).apply_changes() + + assert client.calls[0][:3] == ("link_support", "bc1-guid", "service-guid") + assert client.calls[0][3]["properties"]["class"] == "DigitalSupportProperties" + assert client.calls[1][:3] == ("detach_support", "bc1-guid", "service-guid")