From 475079e2765ef092d2f0212ef40ccb3e4da8dd17 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Sat, 24 Oct 2026 15:31:31 -0400 Subject: [PATCH 1/2] Dr.Egeria: Business Capability, its dependency and Digital Support Mandy Chessell reported that Dr.Egeria did not support BusinessCapability (a Collection subtype, 0715 Digital Business) or the BusinessCapabilityDependency relationship. The DigitalBusiness SDK client already wrapped the API; Dr.Egeria had no commands for it. - Create/Update Business Capability: new collection subtype, sending businessCapabilityType (BusinessCapabilityType enum) and businessImplementationType; routed to DigitalBusiness create/update. - Link/Detach Business Capability Dependency and Link/Detach Digital Support (both UNI_LINK on the live platform, so attach is an upsert). - Specs added through the Spec Editor API; refresh_specs regenerated the format sets and templates. Live on quickstart 9443 (Egeria 81beb8e5): properties stored, update changed the type and kept the implementation type, both relationships appeared with their labels and were gone after detach; throwaway elements deleted and read back as gone. Signed-off-by: Dan Wolfson --- .../commands_collections_compact.json | 240 +++ md_processing/data/generated_format_sets.json | 1848 +++++++++++++++++ md_processing/dr_egeria.py | 4 + .../md_processing_utils/common_md_utils.py | 7 + .../md_processing_constants.py | 2 +- .../v2/collection_manager_processor.py | 33 +- .../Collections/Create_Business_Capability.md | 460 ++++ .../Detach_Business_Capability_Dependency.md | 130 ++ .../Collections/Detach_Digital_Support.md | 130 ++ .../Link_Business_Capability_Dependency.md | 132 ++ .../Collections/Link_Digital_Support.md | 132 ++ .../Collections/Create_Business_Capability.md | 144 ++ .../Detach_Business_Capability_Dependency.md | 48 + .../Collections/Detach_Digital_Support.md | 48 + .../Link_Business_Capability_Dependency.md | 50 + .../basic/Collections/Link_Digital_Support.md | 50 + .../test_business_capability_commands.py | 109 + 17 files changed, 3565 insertions(+), 2 deletions(-) create mode 100644 sample-data/templates/advanced/Collections/Create_Business_Capability.md create mode 100644 sample-data/templates/advanced/Collections/Detach_Business_Capability_Dependency.md create mode 100644 sample-data/templates/advanced/Collections/Detach_Digital_Support.md create mode 100644 sample-data/templates/advanced/Collections/Link_Business_Capability_Dependency.md create mode 100644 sample-data/templates/advanced/Collections/Link_Digital_Support.md create mode 100644 sample-data/templates/basic/Collections/Create_Business_Capability.md create mode 100644 sample-data/templates/basic/Collections/Detach_Business_Capability_Dependency.md create mode 100644 sample-data/templates/basic/Collections/Detach_Digital_Support.md create mode 100644 sample-data/templates/basic/Collections/Link_Business_Capability_Dependency.md create mode 100644 sample-data/templates/basic/Collections/Link_Digital_Support.md create mode 100644 tests/micro-tests/test_business_capability_commands.py 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") From def8b38e4c233fcad98c44ed093f200dc95919a4 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Sat, 24 Oct 2026 15:36:24 -0400 Subject: [PATCH 2/2] Dr.Egeria manual: Business Capability commands Signed-off-by: Dan Wolfson --- docs/dr_egeria_manual.md | 1 + 1 file changed, 1 insertion(+) 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.