From 8cc955b1ebac50fb536dfd36b2239c46992b18e9 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 10:21:53 -0500 Subject: [PATCH 1/9] fix(dr-egeria): send SemanticAssignment status as termAssignmentStatus (ISSUE-144) Link Semantic Assignment sent "status", which Egeria's SemanticAssignmentProperties does not have, so the status was silently dropped. Send termAssignmentStatus, converting the Governance Status code or display name to the TermAssignmentStatus constant. Correct the setup_semantic_assignment docstring samples. Log ISSUE-145 (agreement* fields Egeria's AgreementProperties lacks), found in a sweep of every status field Dr.Egeria sends. Signed-off-by: Dan Wolfson --- PYEGERIA_ISSUES.md | 61 ++++++++++++++++++- md_processing/v2/curation.py | 17 +++++- pyegeria/omvs/classification_explorer.py | 4 +- .../test_issue_144_term_assignment_status.py | 47 ++++++++++++++ 4 files changed, 125 insertions(+), 4 deletions(-) create mode 100644 tests/micro-tests/test_issue_144_term_assignment_status.py diff --git a/PYEGERIA_ISSUES.md b/PYEGERIA_ISSUES.md index 73879d70..96413b54 100644 --- a/PYEGERIA_ISSUES.md +++ b/PYEGERIA_ISSUES.md @@ -148,9 +148,10 @@ content was changed. The numbered section list above describes the # Open Issues -**At a glance** — 5 open pyegeria items, 7 awaiting re-test, 7 open Egeria Server issues. +**At a glance** — 6 open pyegeria items, 7 awaiting re-test, 7 open Egeria Server issues. **Open pyegeria items** +- ISSUE-145: Dr.Egeria sends `agreementType` and other `agreement*` fields that Egeria's `AgreementProperties` does not have - ISSUE-140: The executor charts any dict with two or more top-level numbers, regardless of the result's state - ISSUE-139: The executor renders no result envelope, and the Vega bar chart has no subtitle, so a not-established result has nowhere to say so on a chart - ISSUE-138: Analytic params are JSON-only, and only parameters named `mgr`/`ce`/`expert`/`client` are bound as clients, so a routine taking a reader object can't be named by its own dotted path @@ -186,6 +187,26 @@ into the entry now, so it isn't rediscovered from scratch later. --- +### ISSUE-145: Dr.Egeria sends `agreementType` and other `agreement*` fields that Egeria's `AgreementProperties` does not have + +**Layer:** Dr.Egeria · **Status:** open · **Found:** 2026-10-13, during the ISSUE-144 status-field sweep. + +**What:** `set_element_prop_body()` (`md_processing/md_processing_utils/common_md_utils.py`) +adds `agreementType`, `agreementStatus`, `agreementIdentifier`, +`agreementStatusIdentifier` and `agreementVersionIdentifier` for Agreement and +Digital Subscription bodies. In Egeria 6.2, `AgreementProperties` declares no +fields of its own; it extends `CollectionProperties`, and no `agreement*` +property exists anywhere in the Egeria source. Egeria silently ignores all five. +Only `Agreement Type` is defined in the Digital Products compact spec and used +by commands, so a written Agreement Type is lost. The other four have no +attribute definitions, so they are always None. + +**Decision needed:** where Agreement Type should go. `category` (from +`ReferenceableProperties`) is the likely home, or the attribute could be +retired. The four unused keys can be removed either way. + +--- + ### ISSUE-140: The executor charts any dict with two or more top-level numbers, regardless of the result's state **Layer:** pyegeria (format_set_executor) · **Status:** open, logged only (no fix without the owner's explicit go-ahead) · **Found:** 2026-10-12, reported by the Resource Explorer PR/CI session from trellis-analytics (trellis PR #622, `trellis_analytics/portal.py`), which works around it today. @@ -1443,6 +1464,44 @@ Sorted newest-first by `ISSUE-#` (2026-10-12). ISSUE-91 has two entries --- +### ISSUE-144: Dr.Egeria's `Link Semantic Assignment` sent the assignment status as `status`, which Egeria silently ignores + +**Layer:** Dr.Egeria · **Status:** fixed 2026-10-13 · **Found:** 2026-10-13, reported by the egeria-workspaces-fs Resource Browser session from a live test. + +**What:** Egeria's `SemanticAssignmentProperties` holds the assignment status +in `termAssignmentStatus`, an enum (`TermAssignmentStatus`). `CurationLinkProcessor` +(`md_processing/v2/curation.py`) sent `"status"`. Egeria ignores unknown fields, +so a status written in a Dr.Egeria document never reached the server, and +read back empty. The sample body in the +`ClassificationExplorer._async_setup_semantic_assignment` docstring, which +comes from the `.http` file, had the same mistake. `SemanticAssignmentQueryProperties`, +used by `get_meanings` and `get_semantic_assignees`, really does use `status`. +Those samples are correct. The Resource Browser session confirmed live that +`termAssignmentStatus: "PROPOSED"` is stored and returned. + +**Fix:** the processor sends `termAssignmentStatus`. `Governance Status` +resolves to the governance `statusIdentifier` code (e.g. 3), which uses the +same codes as `TermAssignmentStatus`, so the value is converted to the enum +constant name (3 becomes `VALIDATED`). A display name is upper-cased. The two +docstring samples are corrected. Test: +`tests/micro-tests/test_issue_144_term_assignment_status.py`. + +**Sweep of other status fields Dr.Egeria sends, checked against the Egeria +Java DTOs (including superclasses):** correct as sent are +`DataValueAssignmentProperties.assignmentStatus`, `ProjectProperties.projectStatus`, +`CollectionMembershipProperties.membershipStatus`/`userDefinedStatus`, +`SolutionComponentProperties.userDefinedDeploymentStatus`, +`PromiseProperties.deploymentStatus`/`userDefinedDeploymentStatus`, +`NotificationSubscriberProperties.activityStatus`, +`UsedInContextProperties.termRelationshipStatus` (from +`GlossaryTermRelationshipProperties`), the governance classifications' +`statusIdentifier` (ISSUE-22), `contentStatus` on schema types and attributes +(inherited from `AuthoredReferenceableProperties`), and the element-level +`contentStatus`/`activityStatus`/`deploymentStatus` mapping (ISSUE-113). The +one further mismatch found, the `agreement*` fields, is logged as ISSUE-145. + +--- + ### ISSUE-142: Every Egeria error with relatedHTTPCode 401/403 was raised as "User not authorized", including 403 errors that are not about authorization **Layer:** Pyegeria · **Status:** fixed 2026-10-13 · **Found:** 2026-10-13, reported by the egeria-workspaces-fs Resource Browser session during a live work-list test. diff --git a/md_processing/v2/curation.py b/md_processing/v2/curation.py index 80a9bdaf..2258654a 100644 --- a/md_processing/v2/curation.py +++ b/md_processing/v2/curation.py @@ -71,6 +71,21 @@ def _guid(attributes: dict, name: str): return attributes.get(name, {}).get("guid") +# TermAssignmentStatus (SemanticAssignment) shares its codes with the governance +# classification statusIdentifier, which is what "Governance Status" resolves to; +# but the relationship field is an enum, so send the constant name (ISSUE-144). +_TERM_ASSIGNMENT_STATUS = {0: "DISCOVERED", 1: "PROPOSED", 2: "IMPORTED", 3: "VALIDATED", + 4: "DEPRECATED", 5: "OBSOLETE", 99: "OTHER"} + + +def _term_assignment_status(value): + if value is None or value == "": + return None + if isinstance(value, int) or (isinstance(value, str) and value.strip().isdigit()): + return _TERM_ASSIGNMENT_STATUS.get(int(value)) + return str(value).strip().upper() + + def _audit_fields(attributes: dict) -> dict: return { "externalSourceGUID": attributes.get("External Source GUID", {}).get("guid"), @@ -414,7 +429,7 @@ async def apply_changes(self) -> str: "class": "SemanticAssignmentProperties", "expression": _v(attributes, "Semantic Expression"), "confidence": _v(attributes, "Confidence Level"), - "status": _v(attributes, "Governance Status"), + "termAssignmentStatus": _term_assignment_status(_v(attributes, "Governance Status")), "steward": _v(attributes, "Steward"), "source": _v(attributes, "Source"), } diff --git a/pyegeria/omvs/classification_explorer.py b/pyegeria/omvs/classification_explorer.py index b7b222ce..42725805 100644 --- a/pyegeria/omvs/classification_explorer.py +++ b/pyegeria/omvs/classification_explorer.py @@ -12063,7 +12063,7 @@ async def _async_setup_semantic_assignment( "class": "SemanticAssignmentProperties", "expression" : "add value here", "description" : "add value here", - "status" : "VALIDATED", + "termAssignmentStatus" : "VALIDATED", "confidence" : 100, "createdBy" : "add value here", "steward" : "add value here", @@ -12130,7 +12130,7 @@ def setup_semantic_assignment( "class": "SemanticAssignmentProperties", "expression" : "add value here", "description" : "add value here", - "status" : "VALIDATED", + "termAssignmentStatus" : "VALIDATED", "confidence" : 100, "createdBy" : "add value here", "steward" : "add value here", diff --git a/tests/micro-tests/test_issue_144_term_assignment_status.py b/tests/micro-tests/test_issue_144_term_assignment_status.py new file mode 100644 index 00000000..a14d41fe --- /dev/null +++ b/tests/micro-tests/test_issue_144_term_assignment_status.py @@ -0,0 +1,47 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright Contributors to the ODPi Egeria project. +""" +ISSUE-144: SemanticAssignmentProperties carries its status in `termAssignmentStatus` +(an enum). Dr.Egeria sent `status`, which Egeria silently ignores. +""" +from typing import Any, cast + +import pytest + +from md_processing.v2.curation import CurationLinkProcessor, _term_assignment_status +from md_processing.v2.extraction import DrECommand + + +@pytest.mark.parametrize("value, expected", [ + (3, "VALIDATED"), ("1", "PROPOSED"), (99, "OTHER"), ("Validated", "VALIDATED"), + ("PROPOSED", "PROPOSED"), (None, None), ("", None), (42, None), +]) +def test_term_assignment_status_conversion(value, expected): + assert _term_assignment_status(value) == expected + + +async def test_link_semantic_assignment_sends_term_assignment_status(): + bodies = [] + + class _ClassificationManager: + async def _async_setup_semantic_assignment(self, glossary_term_guid, element_guid, body): + bodies.append(body) + + class _Client: + classification_manager = _ClassificationManager() + + p = CurationLinkProcessor(client=cast(Any, _Client()), + command=DrECommand(verb="Link", object_type="Semantic Assignment", attributes={}, + raw_block="## Link Semantic Assignment"), context={}) + p.get_command_spec = lambda: {"OM_TYPE": "SemanticAssignment"} + p.parsed_output = {"attributes": { + "Target Element": {"guid": "eeeeeeee-0000-0000-0000-000000000001"}, + "Glossary Term": {"guid": "tttttttt-0000-0000-0000-000000000002"}, + "Governance Status": {"value": 1}, + }} + + await p.apply_changes() + + props = bodies[0]["properties"] + assert props["termAssignmentStatus"] == "PROPOSED" + assert "status" not in props From 15016a383bd5cc87a9012b6dc83af632d2a83772 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 11:04:13 -0500 Subject: [PATCH 2/9] docs(issues): log ISSUE-146 (remove_note posts an asset delete; no note delete endpoint) Signed-off-by: Dan Wolfson --- PYEGERIA_ISSUES.md | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/PYEGERIA_ISSUES.md b/PYEGERIA_ISSUES.md index 96413b54..801711b5 100644 --- a/PYEGERIA_ISSUES.md +++ b/PYEGERIA_ISSUES.md @@ -148,9 +148,10 @@ content was changed. The numbered section list above describes the # Open Issues -**At a glance** — 6 open pyegeria items, 7 awaiting re-test, 7 open Egeria Server issues. +**At a glance** — 7 open pyegeria items, 7 awaiting re-test, 7 open Egeria Server issues. **Open pyegeria items** +- ISSUE-146: `remove_note` posts an Asset Maker asset delete, and Egeria has no endpoint to delete a single note or journal entry - ISSUE-145: Dr.Egeria sends `agreementType` and other `agreement*` fields that Egeria's `AgreementProperties` does not have - ISSUE-140: The executor charts any dict with two or more top-level numbers, regardless of the result's state - ISSUE-139: The executor renders no result envelope, and the Vega bar chart has no subtitle, so a not-established result has nowhere to say so on a chart @@ -187,6 +188,37 @@ into the entry now, so it isn't rediscovered from scratch later. --- +### ISSUE-146: `remove_note` posts an Asset Maker asset delete, and Egeria has no endpoint to delete a single note or journal entry + +**Layer:** Pyegeria + Egeria Server · **Status:** open · **Found:** 2026-10-13, reported by the egeria-workspaces-fs Resource Browser session from a live private-journal test. + +**What:** `_async_remove_note` (`pyegeria/core/_server_client.py`) posts to +`feedback-manager/assets/{note_guid}/delete`. `FeedbackManagerResource` has no +such endpoint. The request is served by `AssetMakerResource` +(`/assets/{assetGUID}/delete`), a generic view service that answers under any +view-service URL marker, so the note was deleted as if it were an asset. Called +as erinoverview on a JournalEntry created by `MyProfile.journal_my_activity`, +it failed with `OMAG-REPOSITORY-HANDLER-400-008`: +`deleteMetadataElementInStore` cannot modify Erin's UserIdentity (`ff983b64`), +which has Content Pack provenance ("Coco Pharmaceuticals Combination"). The +delete apparently reached the UserIdentity through the entry's +`actionSource` relationship. The peer verified that nothing was removed. The +entry and its relationships are intact, and Erin's Person still has 1 identity, +1 contact detail, 8 roles and 15 scopes. Test entry `fef83ed5` is still on +Erin's profile, waiting for the owner's decision. + +**Egeria side:** as of Egeria main `af400039c2`, the Feedback Manager can +remove a whole note log (`note-logs/{noteLogGUID}/remove`), but has no endpoint +to delete one note. My Profile has `journal-my-activity`, and no matching +remove. So there may be no supported way to delete a single note or journal +entry. + +**Next:** ask the Egeria team whether a note delete is planned. Until then, +`remove_note` should either be withdrawn or call a supported route, and must +not issue an asset delete. + +--- + ### ISSUE-145: Dr.Egeria sends `agreementType` and other `agreement*` fields that Egeria's `AgreementProperties` does not have **Layer:** Dr.Egeria · **Status:** open · **Found:** 2026-10-13, during the ISSUE-144 status-field sweep. From 36d160de032abe24c3d4939e07cdbb3f8d20c8f5 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 11:11:53 -0500 Subject: [PATCH 3/9] docs(issues): correct ISSUE-146 -- notes are Actions, asset delete is the only route Signed-off-by: Dan Wolfson --- PYEGERIA_ISSUES.md | 50 ++++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/PYEGERIA_ISSUES.md b/PYEGERIA_ISSUES.md index 801711b5..38e9b5eb 100644 --- a/PYEGERIA_ISSUES.md +++ b/PYEGERIA_ISSUES.md @@ -151,7 +151,7 @@ content was changed. The numbered section list above describes the **At a glance** — 7 open pyegeria items, 7 awaiting re-test, 7 open Egeria Server issues. **Open pyegeria items** -- ISSUE-146: `remove_note` posts an Asset Maker asset delete, and Egeria has no endpoint to delete a single note or journal entry +- ISSUE-146: Deleting a journal entry fails with OMAG-REPOSITORY-HANDLER-400-008, and pyegeria's `remove_note` reaches the delete only through the generic Asset Maker service - ISSUE-145: Dr.Egeria sends `agreementType` and other `agreement*` fields that Egeria's `AgreementProperties` does not have - ISSUE-140: The executor charts any dict with two or more top-level numbers, regardless of the result's state - ISSUE-139: The executor renders no result envelope, and the Vega bar chart has no subtitle, so a not-established result has nowhere to say so on a chart @@ -188,34 +188,40 @@ into the entry now, so it isn't rediscovered from scratch later. --- -### ISSUE-146: `remove_note` posts an Asset Maker asset delete, and Egeria has no endpoint to delete a single note or journal entry +### ISSUE-146: Deleting a journal entry fails with OMAG-REPOSITORY-HANDLER-400-008, and pyegeria's `remove_note` reaches the delete only through the generic Asset Maker service -**Layer:** Pyegeria + Egeria Server · **Status:** open · **Found:** 2026-10-13, reported by the egeria-workspaces-fs Resource Browser session from a live private-journal test. +**Layer:** Egeria Server (pyegeria clean-up) · **Status:** open · **Found:** 2026-10-13, reported by the egeria-workspaces-fs Resource Browser session from a live private-journal test. -**What:** `_async_remove_note` (`pyegeria/core/_server_client.py`) posts to -`feedback-manager/assets/{note_guid}/delete`. `FeedbackManagerResource` has no -such endpoint. The request is served by `AssetMakerResource` -(`/assets/{assetGUID}/delete`), a generic view service that answers under any -view-service URL marker, so the note was deleted as if it were an asset. Called -as erinoverview on a JournalEntry created by `MyProfile.journal_my_activity`, -it failed with `OMAG-REPOSITORY-HANDLER-400-008`: +**What:** as erinoverview, `_async_remove_note` (`pyegeria/core/_server_client.py`) +was called on a JournalEntry created by `MyProfile.journal_my_activity`. It +failed with `OMAG-REPOSITORY-HANDLER-400-008` (`LOCAL_CANNOT_CHANGE_EXTERNAL`): `deleteMetadataElementInStore` cannot modify Erin's UserIdentity (`ff983b64`), which has Content Pack provenance ("Coco Pharmaceuticals Combination"). The -delete apparently reached the UserIdentity through the entry's -`actionSource` relationship. The peer verified that nothing was removed. The -entry and its relationships are intact, and Erin's Person still has 1 identity, +peer verified that nothing was removed. The entry keeps its `actionSource` and +`presentInNoteLogs` relationships, and Erin's Person still has 1 identity, 1 contact detail, 8 roles and 15 scopes. Test entry `fef83ed5` is still on Erin's profile, waiting for the owner's decision. -**Egeria side:** as of Egeria main `af400039c2`, the Feedback Manager can -remove a whole note log (`note-logs/{noteLogGUID}/remove`), but has no endpoint -to delete one note. My Profile has `journal-my-activity`, and no matching -remove. So there may be no supported way to delete a single note or journal -entry. - -**Next:** ask the Egeria team whether a note delete is planned. Until then, -`remove_note` should either be withdrawn or call a supported route, and must -not issue an asset delete. +**The route is right:** in 6.2, notes are Actions. The type chain is +JournalEntry → Notification → Action → Process → Asset. Egeria main +(`af400039c2`) has no note, notification or action delete endpoint. +`AssetHandler.createNoteLogEntry` has no matching remove, and My Profile has +`journal-my-activity` with no matching remove. The only delete for an Action is +the generic `/assets/{assetGUID}/delete` (`AssetMakerResource`), which is what +`remove_note`'s `feedback-manager/assets/{guid}/delete` reaches, because +generic view services answer under any URL marker. Feedback Manager can only +remove a whole note log (`note-logs/{noteLogGUID}/remove`). + +**Why it fails (likely, not verified):** `AssetHandler.createAction` anchors the +entry to its action source, linked by `ActionRequester`. For a journal entry +that is the caller's profile. Deleting an anchored element updates its anchor, +and Erin's identity is owned by the content pack, so the local delete is +refused. If so, no journal entry for a content-pack user can be deleted. That +is for the Egeria team. + +**pyegeria clean-up:** point `remove_note` at `asset-maker/assets/{guid}/delete` +so the route is explicit, and describe it as an Action delete in the +docstring. --- From 12e09cb25e82c743e01172f11e6f40e2dc9b45c3 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 11:12:22 -0500 Subject: [PATCH 4/9] docs(issues): ISSUE-146 anchor evidence from the peer's read Signed-off-by: Dan Wolfson --- PYEGERIA_ISSUES.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/PYEGERIA_ISSUES.md b/PYEGERIA_ISSUES.md index 38e9b5eb..7d80c3fb 100644 --- a/PYEGERIA_ISSUES.md +++ b/PYEGERIA_ISSUES.md @@ -219,6 +219,15 @@ and Erin's identity is owned by the content pack, so the local delete is refused. If so, no journal entry for a content-pack user can be deleted. That is for the Egeria team. +**Anchor read (peer, read-only):** JournalEntry `fef83ed5` has anchorGUID +`10dc7da9`, Erin's Person profile. Its `actionSource` is ActionRequester → +Person `10dc7da9`, and `presentInNoteLogs` is AttachedNoteLogEntry → NoteLog +`f780511a` (MyJournal). No relationship from the entry reaches UserIdentity +`ff983b64`, which the error names. That identity is anchored to the same +Person. So the refusal comes from the delete touching the anchor's graph, most +likely the LatestChange update on the anchor, or a provenance check across +elements that share the anchor, not from a direct link. + **pyegeria clean-up:** point `remove_note` at `asset-maker/assets/{guid}/delete` so the route is explicit, and describe it as an Action delete in the docstring. From c338bbb0d057f801da126c2d2af65ea52c22ec3c Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 11:58:24 -0500 Subject: [PATCH 5/9] fix(dr-egeria): retire Agreement Type, add Service Levels to Digital Subscription (ISSUE-145) AgreementProperties declares no fields of its own and AgreementType is deprecated in Egeria, so the Agreement Type attribute is removed from the Digital Products compact spec; Purpose carries the intent. The five agreement* keys and the undeclared subscriberType/subscriberId keys are removed from set_collection_manager_body(). Digital Subscription Base gains a Service Levels Dictionary attribute, matching DigitalSubscriptionProperties. Templates, help and report specs regenerated with refresh_specs. Signed-off-by: Dan Wolfson --- PYEGERIA_ISSUES.md | 52 +++-- .../commands_digital_products_compact.json | 44 ++-- md_processing/data/generated_format_sets.json | 192 +++--------------- .../md_processing_utils/common_md_utils.py | 18 +- pyegeria/view/base_report_formats.py | 12 +- .../Create_Agreement.md | 8 - .../Create_Data_Sharing_Agreement.md | 8 - .../Create_Digital_Subscription.md | 20 +- .../Create_Agreement.md | 8 - .../Create_Data_Sharing_Agreement.md | 8 - .../Create_Digital_Subscription.md | 20 +- .../dr_test_products_good.md | 22 +- 12 files changed, 121 insertions(+), 291 deletions(-) diff --git a/PYEGERIA_ISSUES.md b/PYEGERIA_ISSUES.md index 7d80c3fb..b1639d54 100644 --- a/PYEGERIA_ISSUES.md +++ b/PYEGERIA_ISSUES.md @@ -152,7 +152,6 @@ content was changed. The numbered section list above describes the **Open pyegeria items** - ISSUE-146: Deleting a journal entry fails with OMAG-REPOSITORY-HANDLER-400-008, and pyegeria's `remove_note` reaches the delete only through the generic Asset Maker service -- ISSUE-145: Dr.Egeria sends `agreementType` and other `agreement*` fields that Egeria's `AgreementProperties` does not have - ISSUE-140: The executor charts any dict with two or more top-level numbers, regardless of the result's state - ISSUE-139: The executor renders no result envelope, and the Vega bar chart has no subtitle, so a not-established result has nowhere to say so on a chart - ISSUE-138: Analytic params are JSON-only, and only parameters named `mgr`/`ce`/`expert`/`client` are bound as clients, so a routine taking a reader object can't be named by its own dotted path @@ -234,26 +233,6 @@ docstring. --- -### ISSUE-145: Dr.Egeria sends `agreementType` and other `agreement*` fields that Egeria's `AgreementProperties` does not have - -**Layer:** Dr.Egeria · **Status:** open · **Found:** 2026-10-13, during the ISSUE-144 status-field sweep. - -**What:** `set_element_prop_body()` (`md_processing/md_processing_utils/common_md_utils.py`) -adds `agreementType`, `agreementStatus`, `agreementIdentifier`, -`agreementStatusIdentifier` and `agreementVersionIdentifier` for Agreement and -Digital Subscription bodies. In Egeria 6.2, `AgreementProperties` declares no -fields of its own; it extends `CollectionProperties`, and no `agreement*` -property exists anywhere in the Egeria source. Egeria silently ignores all five. -Only `Agreement Type` is defined in the Digital Products compact spec and used -by commands, so a written Agreement Type is lost. The other four have no -attribute definitions, so they are always None. - -**Decision needed:** where Agreement Type should go. `category` (from -`ReferenceableProperties`) is the likely home, or the attribute could be -retired. The four unused keys can be removed either way. - ---- - ### ISSUE-140: The executor charts any dict with two or more top-level numbers, regardless of the result's state **Layer:** pyegeria (format_set_executor) · **Status:** open, logged only (no fix without the owner's explicit go-ahead) · **Found:** 2026-10-12, reported by the Resource Explorer PR/CI session from trellis-analytics (trellis PR #622, `trellis_analytics/portal.py`), which works around it today. @@ -1511,6 +1490,37 @@ Sorted newest-first by `ISSUE-#` (2026-10-12). ISSUE-91 has two entries --- +### ISSUE-145: Dr.Egeria sends `agreementType` and other `agreement*` fields that Egeria's `AgreementProperties` does not have + +**Layer:** Dr.Egeria · **Status:** fixed 2026-10-13 · **Found:** 2026-10-13, during the ISSUE-144 status-field sweep. + +**What:** `set_element_prop_body()` (`md_processing/md_processing_utils/common_md_utils.py`) +adds `agreementType`, `agreementStatus`, `agreementIdentifier`, +`agreementStatusIdentifier` and `agreementVersionIdentifier` for Agreement and +Digital Subscription bodies. In Egeria 6.2, `AgreementProperties` declares no +fields of its own; it extends `CollectionProperties`, and no `agreement*` +property exists anywhere in the Egeria source. Egeria silently ignores all five. +Only `Agreement Type` is defined in the Digital Products compact spec and used +by commands, so a written Agreement Type is lost. The other four have no +attribute definitions, so they are always None. + +**Decision needed:** where Agreement Type should go. `category` (from +`ReferenceableProperties`) is the likely home, or the attribute could be +retired. The four unused keys can be removed either way. + +**Fixed 2026-10-13 (owner's decision: retire Agreement Type, add Service Levels):** +the `Agreement Type` attribute is deleted from the Digital Products compact spec +(`Agreement Base` now has no attributes of its own; Purpose carries intent, per the +owner, since AgreementType is deprecated in Egeria). The five `agreement*` keys and +the also-undeclared `subscriberType`/`subscriberId` keys are removed from +`set_collection_manager_body()`. `Digital Subscription Base` gains a `Service Levels` +Dictionary attribute next to `Support Level`, matching `DigitalSubscriptionProperties` +(`supportLevel: String`, `serviceLevels: Map`); both are sent by +`set_element_prop_body()`. `dr_test_products_good.md` no longer uses Agreement Type or the +undefined `Subscription Level`. + +--- + ### ISSUE-144: Dr.Egeria's `Link Semantic Assignment` sent the assignment status as `status`, which Egeria silently ignores **Layer:** Dr.Egeria · **Status:** fixed 2026-10-13 · **Found:** 2026-10-13, reported by the egeria-workspaces-fs Resource Browser session from a live test. diff --git a/md_processing/data/compact_commands/commands_digital_products_compact.json b/md_processing/data/compact_commands/commands_digital_products_compact.json index 6bd3b9ea..51a769fb 100644 --- a/md_processing/data/compact_commands/commands_digital_products_compact.json +++ b/md_processing/data/compact_commands/commands_digital_products_compact.json @@ -2245,25 +2245,6 @@ "level": "Domain", "Journal Entry": "" }, - "Agreement Type": { - "variable_name": "agreement_type", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "Type of agreement (e.g., service level agreement, licensing agreement, data sharing agreement).", - "generated": false, - "style": "Simple", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Domain", - "Journal Entry": "" - }, "Contract Id": { "variable_name": "contract_id", "inUpdate": true, @@ -2780,6 +2761,24 @@ "max_cardinality": 1, "level": "Basic", "Journal Entry": "Added 2026-10-05 -- product-manager subscription types and ODCS/ODPS documents." + }, + "Service Levels": { + "variable_name": "service_levels", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Service levels promised by the subscription, as name/value pairs (e.g., availability: 99.9%, responseTime: 4 hours).", + "generated": false, + "style": "Dictionary", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Basic" } }, "bundles": { @@ -2916,14 +2915,13 @@ }, "Agreement Base": { "inherits": "Collection Base", - "own_attributes": [ - "Agreement Type" - ] + "own_attributes": [] }, "Digital Subscription Base": { "inherits": "Agreement Base", "own_attributes": [ - "Support Level" + "Support Level", + "Service Levels" ] }, "Agreement Item": { diff --git a/md_processing/data/generated_format_sets.json b/md_processing/data/generated_format_sets.json index 952feae7..6983ae71 100644 --- a/md_processing/data/generated_format_sets.json +++ b/md_processing/data/generated_format_sets.json @@ -92838,14 +92838,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "Version Identifier", "key": "version_identifier", @@ -92937,14 +92929,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "Version Identifier", "key": "version_identifier", @@ -93081,14 +93065,6 @@ "format": false, "detail_spec": null, "valid_values": [] - }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] } ], "columns": [ @@ -93188,14 +93164,6 @@ "format": false, "detail_spec": null, "valid_values": [] - }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] } ] } @@ -93452,14 +93420,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "Classifications", "key": "classifications", @@ -93756,14 +93716,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "Classifications", "key": "classifications", @@ -94122,14 +94074,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "User Defined Status", "key": "user_defined_status", @@ -94434,14 +94378,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "User Defined Status", "key": "user_defined_status", @@ -96435,16 +96371,16 @@ "valid_values": [] }, { - "name": "Agreement Type", - "key": "agreement_type", + "name": "Support Level", + "key": "support_level", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Support Level", - "key": "support_level", + "name": "Service Levels", + "key": "service_levels", "value": null, "format": false, "detail_spec": null, @@ -96542,16 +96478,16 @@ "valid_values": [] }, { - "name": "Agreement Type", - "key": "agreement_type", + "name": "Support Level", + "key": "support_level", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Support Level", - "key": "support_level", + "name": "Service Levels", + "key": "service_levels", "value": null, "format": false, "detail_spec": null, @@ -96695,16 +96631,16 @@ "valid_values": [] }, { - "name": "Agreement Type", - "key": "agreement_type", + "name": "Support Level", + "key": "support_level", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Support Level", - "key": "support_level", + "name": "Service Levels", + "key": "service_levels", "value": null, "format": false, "detail_spec": null, @@ -96810,16 +96746,16 @@ "valid_values": [] }, { - "name": "Agreement Type", - "key": "agreement_type", + "name": "Support Level", + "key": "support_level", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Support Level", - "key": "support_level", + "name": "Service Levels", + "key": "service_levels", "value": null, "format": false, "detail_spec": null, @@ -97081,16 +97017,16 @@ "valid_values": [] }, { - "name": "Agreement Type", - "key": "agreement_type", + "name": "Support Level", + "key": "support_level", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Support Level", - "key": "support_level", + "name": "Service Levels", + "key": "service_levels", "value": null, "format": false, "detail_spec": null, @@ -97393,16 +97329,16 @@ "valid_values": [] }, { - "name": "Agreement Type", - "key": "agreement_type", + "name": "Support Level", + "key": "support_level", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Support Level", - "key": "support_level", + "name": "Service Levels", + "key": "service_levels", "value": null, "format": false, "detail_spec": null, @@ -97767,16 +97703,16 @@ "valid_values": [] }, { - "name": "Agreement Type", - "key": "agreement_type", + "name": "Support Level", + "key": "support_level", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Support Level", - "key": "support_level", + "name": "Service Levels", + "key": "service_levels", "value": null, "format": false, "detail_spec": null, @@ -98087,16 +98023,16 @@ "valid_values": [] }, { - "name": "Agreement Type", - "key": "agreement_type", + "name": "Support Level", + "key": "support_level", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Support Level", - "key": "support_level", + "name": "Service Levels", + "key": "service_levels", "value": null, "format": false, "detail_spec": null, @@ -98232,14 +98168,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "Version Identifier", "key": "version_identifier", @@ -98331,14 +98259,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "Version Identifier", "key": "version_identifier", @@ -98475,14 +98395,6 @@ "format": false, "detail_spec": null, "valid_values": [] - }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] } ], "columns": [ @@ -98582,14 +98494,6 @@ "format": false, "detail_spec": null, "valid_values": [] - }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] } ] } @@ -98848,14 +98752,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "Classifications", "key": "classifications", @@ -99152,14 +99048,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "Classifications", "key": "classifications", @@ -99518,14 +99406,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "User Defined Status", "key": "user_defined_status", @@ -99830,14 +99710,6 @@ "detail_spec": null, "valid_values": [] }, - { - "name": "Agreement Type", - "key": "agreement_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, { "name": "User Defined Status", "key": "user_defined_status", diff --git a/md_processing/md_processing_utils/common_md_utils.py b/md_processing/md_processing_utils/common_md_utils.py index b2effb01..695dbd45 100644 --- a/md_processing/md_processing_utils/common_md_utils.py +++ b/md_processing/md_processing_utils/common_md_utils.py @@ -438,22 +438,8 @@ def set_collection_manager_body(object_type: str, qualified_name: str, attribute "nextVersionDate": attributes.get('Next Version Date', {}).get('value', None), }) - # Handle Agreement and Digital Subscription - if "Agreement" in object_type or "Subscription" in object_type: - prop_bod.update({ - "agreementType": attributes.get('Agreement Type', {}).get('value', None), - "agreementStatus": attributes.get('Agreement Status', {}).get('value', None), - "agreementIdentifier": attributes.get('Agreement Identifier', {}).get('value', None), - "agreementStatusIdentifier": attributes.get('Agreement Status Identifier', {}).get('value', None), - "agreementVersionIdentifier": attributes.get('Agreement Version Identifier', {}).get('value', None), - }) - if "Subscription" in object_type: - prop_bod.update({ - "subscriberType": attributes.get('Subscriber Type', {}).get('value', None), - "subscriberId": attributes.get('Subscriber Id', {}).get('value', None), - "supportLevel": attributes.get('Support Level', {}).get('value', None), - "serviceLevels": attributes.get('Service Levels', {}).get('value', None), - }) + # Agreement: AgreementProperties declares no fields of its own (ISSUE-145). + # Digital Subscription's supportLevel/serviceLevels are set by set_element_prop_body(). # Handle Glossary if "Glossary" in object_type: diff --git a/pyegeria/view/base_report_formats.py b/pyegeria/view/base_report_formats.py index 907b97ff..ec1dc056 100644 --- a/pyegeria/view/base_report_formats.py +++ b/pyegeria/view/base_report_formats.py @@ -101,8 +101,8 @@ generated_format_sets = FormatSetDict({ 'Activity-Entry-DrE-Advanced': FormatSet(target_type='Activity Entry', heading='Activity-Entry-DrE-Advanced Attributes', description='Auto-generated format for Activity Entry (Create, Advanced).', family='Feedback', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Description', key='description'), Column(name='Situation', key='situation')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Qualified Name', key='qualified_name'), Column(name='Situation', key='situation')])]), 'Activity-Entry-DrE-Basic': FormatSet(target_type='Activity Entry', heading='Activity-Entry-DrE-Basic Attributes', description='Auto-generated format for Activity Entry (Create, Basic).', family='Feedback', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Situation', key='situation')]), Format(types=['ALL'], attributes=[Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Qualified Name', key='qualified_name'), Column(name='Situation', key='situation')])]), - 'Agreement-DrE-Advanced': FormatSet(target_type='Agreement', heading='Agreement-DrE-Advanced Attributes', description='Auto-generated format for Agreement (Create, Advanced).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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': 'Agreement'})), - 'Agreement-DrE-Basic': FormatSet(target_type='Agreement', heading='Agreement-DrE-Basic Attributes', description='Auto-generated format for Agreement (Create, Basic).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type')])], action=ActionParameter(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': 'Agreement'})), + 'Agreement-DrE-Advanced': FormatSet(target_type='Agreement', heading='Agreement-DrE-Advanced Attributes', description='Auto-generated format for Agreement (Create, Advanced).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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': 'Agreement'})), + 'Agreement-DrE-Basic': FormatSet(target_type='Agreement', heading='Agreement-DrE-Basic Attributes', description='Auto-generated format for Agreement (Create, Basic).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose')])], action=ActionParameter(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': 'Agreement'})), 'Blog-Entry-DrE-Advanced': FormatSet(target_type='Blog Entry', heading='Blog-Entry-DrE-Advanced Attributes', description='Auto-generated format for Blog Entry (Create, Advanced).', family='Feedback', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Description', key='description'), Column(name='Situation', key='situation')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Qualified Name', key='qualified_name'), Column(name='Situation', key='situation')])]), 'Blog-Entry-DrE-Basic': FormatSet(target_type='Blog Entry', heading='Blog-Entry-DrE-Basic Attributes', description='Auto-generated format for Blog Entry (Create, Basic).', family='Feedback', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Situation', key='situation')]), Format(types=['ALL'], attributes=[Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Qualified Name', key='qualified_name'), Column(name='Situation', key='situation')])]), 'Business-Imperative-DrE-Advanced': FormatSet(target_type='Business Imperative', heading='Business-Imperative-DrE-Advanced Attributes', description='Auto-generated format for Business Imperative (Create, Advanced).', family='Governance Officer', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Domain Identifier', key='domain_identifier', valid_values=['All Domains', 'Data', 'Privacy', 'Security', 'IT Infrastructure', 'Software Development', 'Corporate', 'Asset Management', 'Other']), Column(name='Implications', key='implications'), Column(name='Importance', key='importance'), Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'), Column(name='Scope', key='scope'), Column(name='Summary', key='summary'), Column(name='Usage', key='usage'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Domain Identifier', key='domain_identifier', valid_values=['All Domains', 'Data', 'Privacy', 'Security', 'IT Infrastructure', 'Software Development', 'Corporate', 'Asset Management', 'Other']), Column(name='Implications', key='implications'), Column(name='Importance', key='importance'), Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'), Column(name='Scope', key='scope'), Column(name='Summary', key='summary'), Column(name='Usage', key='usage'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(function='GovernanceOfficer.find_governance_definitions', 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': 'BusinessImperative'})), @@ -147,8 +147,8 @@ 'Data-Lens-DrE-Basic': FormatSet(target_type='Data Lens', heading='Data-Lens-DrE-Basic Attributes', description='Auto-generated format for Data Lens (Create, Basic).', family='Governance Officer', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Domain Identifier', key='domain_identifier', valid_values=['All Domains', 'Data', 'Privacy', 'Security', 'IT Infrastructure', 'Software Development', 'Corporate', 'Asset Management', 'Other']), Column(name='Implications', key='implications'), Column(name='Importance', key='importance'), Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'), Column(name='Scope', key='scope'), Column(name='Summary', key='summary'), Column(name='Usage', key='usage'), Column(name='Implementation Description', key='implementation_description'), Column(name='Max Height', key='max_height'), Column(name='Data Collection End Time', key='data_collection_end_time'), Column(name='Data Collection Start Time', key='data_collection_start_time'), Column(name='Max Latitude', key='max_latitude'), Column(name='Max Longitude', key='max_longitude'), Column(name='Min Height', key='min_height'), Column(name='Min Latitude', key='min_latitude'), Column(name='Min Longitude', key='min_longitude'), Column(name='Scope Elements', key='scope_elements'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Domain Identifier', key='domain_identifier', valid_values=['All Domains', 'Data', 'Privacy', 'Security', 'IT Infrastructure', 'Software Development', 'Corporate', 'Asset Management', 'Other']), Column(name='Implications', key='implications'), Column(name='Importance', key='importance'), Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'), Column(name='Scope', key='scope'), Column(name='Summary', key='summary'), Column(name='Usage', key='usage'), Column(name='Implementation Description', key='implementation_description'), Column(name='Max Height', key='max_height'), Column(name='Data Collection End Time', key='data_collection_end_time'), Column(name='Data Collection Start Time', key='data_collection_start_time'), Column(name='Max Latitude', key='max_latitude'), Column(name='Max Longitude', key='max_longitude'), Column(name='Min Height', key='min_height'), Column(name='Min Latitude', key='min_latitude'), Column(name='Min Longitude', key='min_longitude'), Column(name='Scope Elements', key='scope_elements')])], action=ActionParameter(function='GovernanceOfficer.find_governance_definitions', 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': 'DataLens'})), 'Data-Processing-Purpose-DrE-Advanced': FormatSet(target_type='Data Processing Purpose', heading='Data-Processing-Purpose-DrE-Advanced Attributes', description='Auto-generated format for Data Processing Purpose (Create, Advanced).', family='Governance Officer', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Domain Identifier', key='domain_identifier', valid_values=['All Domains', 'Data', 'Privacy', 'Security', 'IT Infrastructure', 'Software Development', 'Corporate', 'Asset Management', 'Other']), Column(name='Implications', key='implications'), Column(name='Importance', key='importance'), Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'), Column(name='Scope', key='scope'), Column(name='Summary', key='summary'), Column(name='Usage', key='usage'), Column(name='Implementation Description', key='implementation_description'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Domain Identifier', key='domain_identifier', valid_values=['All Domains', 'Data', 'Privacy', 'Security', 'IT Infrastructure', 'Software Development', 'Corporate', 'Asset Management', 'Other']), Column(name='Implications', key='implications'), Column(name='Importance', key='importance'), Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'), Column(name='Scope', key='scope'), Column(name='Summary', key='summary'), Column(name='Usage', key='usage'), Column(name='Implementation Description', key='implementation_description')])], action=ActionParameter(function='GovernanceOfficer.find_governance_definitions', 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': 'DataProcessingPurpose'})), 'Data-Processing-Purpose-DrE-Basic': FormatSet(target_type='Data Processing Purpose', heading='Data-Processing-Purpose-DrE-Basic Attributes', description='Auto-generated format for Data Processing Purpose (Create, Basic).', family='Governance Officer', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Domain Identifier', key='domain_identifier', valid_values=['All Domains', 'Data', 'Privacy', 'Security', 'IT Infrastructure', 'Software Development', 'Corporate', 'Asset Management', 'Other']), Column(name='Implications', key='implications'), Column(name='Importance', key='importance'), Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'), Column(name='Scope', key='scope'), Column(name='Summary', key='summary'), Column(name='Usage', key='usage'), Column(name='Implementation Description', key='implementation_description'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Domain Identifier', key='domain_identifier', valid_values=['All Domains', 'Data', 'Privacy', 'Security', 'IT Infrastructure', 'Software Development', 'Corporate', 'Asset Management', 'Other']), Column(name='Implications', key='implications'), Column(name='Importance', key='importance'), Column(name='Outcomes', key='outcomes'), Column(name='Results', key='results'), Column(name='Scope', key='scope'), Column(name='Summary', key='summary'), Column(name='Usage', key='usage'), Column(name='Implementation Description', key='implementation_description')])], action=ActionParameter(function='GovernanceOfficer.find_governance_definitions', 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': 'DataProcessingPurpose'})), - 'Data-Sharing-Agreement-DrE-Advanced': FormatSet(target_type='Data Sharing Agreement', heading='Data-Sharing-Agreement-DrE-Advanced Attributes', description='Auto-generated format for Data Sharing Agreement (Create, Advanced).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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={'classification_names': ['DataSharingAgreement']})), - 'Data-Sharing-Agreement-DrE-Basic': FormatSet(target_type='Data Sharing Agreement', heading='Data-Sharing-Agreement-DrE-Basic Attributes', description='Auto-generated format for Data Sharing Agreement (Create, Basic).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type')])], action=ActionParameter(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={'classification_names': ['DataSharingAgreement']})), + 'Data-Sharing-Agreement-DrE-Advanced': FormatSet(target_type='Data Sharing Agreement', heading='Data-Sharing-Agreement-DrE-Advanced Attributes', description='Auto-generated format for Data Sharing Agreement (Create, Advanced).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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={'classification_names': ['DataSharingAgreement']})), + 'Data-Sharing-Agreement-DrE-Basic': FormatSet(target_type='Data Sharing Agreement', heading='Data-Sharing-Agreement-DrE-Basic Attributes', description='Auto-generated format for Data Sharing Agreement (Create, Basic).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose')])], action=ActionParameter(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={'classification_names': ['DataSharingAgreement']})), 'Data-Sharing-Hub-DrE-Advanced': FormatSet(target_type='Data Sharing Hub', heading='Data-Sharing-Hub-DrE-Advanced Attributes', description='Auto-generated format for Data Sharing Hub (Create, Advanced).', family='Collections', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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': 'DataSharingHub'})), 'Data-Sharing-Hub-DrE-Basic': FormatSet(target_type='Data Sharing Hub', heading='Data-Sharing-Hub-DrE-Basic Attributes', description='Auto-generated format for Data Sharing Hub (Create, Basic).', family='Collections', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose')])], action=ActionParameter(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': 'DataSharingHub'})), 'Data-Sharing-Request-DrE-Advanced': FormatSet(target_type='Data Sharing Request', heading='Data-Sharing-Request-DrE-Advanced Attributes', description='Auto-generated format for Data Sharing Request (Create, Advanced).', family='Collections', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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': 'DataSharingRequest'})), @@ -165,8 +165,8 @@ 'Digital-Product-Catalog-DrE-Basic': FormatSet(target_type='Digital Product Catalog', heading='Digital-Product-Catalog-DrE-Basic Attributes', description='Auto-generated format for Digital Product Catalog (Create, Basic).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose')])], action=ActionParameter(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={'classification_names': ['DigitalProductCatalog']})), 'Digital-Product-DrE-Advanced': FormatSet(target_type='Digital Product', heading='Digital-Product-DrE-Advanced Attributes', description='Auto-generated format for Digital Product (Create, Advanced).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Current Version', key='current_version'), Column(name='Introduction Date', key='introduction_date'), Column(name='Maturity', key='maturity'), Column(name='Next Version Date', key='next_version_date'), Column(name='Product Name', key='product_name'), Column(name='Service Life', key='service_life'), Column(name='Withdrawal Date', key='withdrawal_date'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='Current Version', key='current_version'), Column(name='Introduction Date', key='introduction_date'), Column(name='Maturity', key='maturity'), Column(name='Next Version Date', key='next_version_date'), Column(name='Product Name', key='product_name'), Column(name='Service Life', key='service_life'), Column(name='Withdrawal Date', key='withdrawal_date'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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': 'DigitalProduct'})), 'Digital-Product-DrE-Basic': FormatSet(target_type='Digital Product', heading='Digital-Product-DrE-Basic Attributes', description='Auto-generated format for Digital Product (Create, Basic).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Current Version', key='current_version'), Column(name='Introduction Date', key='introduction_date'), Column(name='Maturity', key='maturity'), Column(name='Next Version Date', key='next_version_date'), Column(name='Product Name', key='product_name'), Column(name='Service Life', key='service_life'), Column(name='Withdrawal Date', key='withdrawal_date'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose'), Column(name='Current Version', key='current_version'), Column(name='Introduction Date', key='introduction_date'), Column(name='Maturity', key='maturity'), Column(name='Next Version Date', key='next_version_date'), Column(name='Product Name', key='product_name'), Column(name='Service Life', key='service_life'), Column(name='Withdrawal Date', key='withdrawal_date')])], action=ActionParameter(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': 'DigitalProduct'})), - 'Digital-Subscription-DrE-Advanced': FormatSet(target_type='Digital Subscription', heading='Digital-Subscription-DrE-Advanced Attributes', description='Auto-generated format for Digital Subscription (Create, Advanced).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Support Level', key='support_level'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Support Level', key='support_level'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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': 'DigitalSubscription'})), - 'Digital-Subscription-DrE-Basic': FormatSet(target_type='Digital Subscription', heading='Digital-Subscription-DrE-Basic Attributes', description='Auto-generated format for Digital Subscription (Create, Basic).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Support Level', key='support_level'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Support Level', key='support_level')])], action=ActionParameter(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': 'DigitalSubscription'})), + 'Digital-Subscription-DrE-Advanced': FormatSet(target_type='Digital Subscription', heading='Digital-Subscription-DrE-Advanced Attributes', description='Auto-generated format for Digital Subscription (Create, Advanced).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Support Level', key='support_level'), Column(name='Service Levels', key='service_levels'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='Support Level', key='support_level'), Column(name='Service Levels', key='service_levels'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(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': 'DigitalSubscription'})), + 'Digital-Subscription-DrE-Basic': FormatSet(target_type='Digital Subscription', heading='Digital-Subscription-DrE-Basic Attributes', description='Auto-generated format for Digital Subscription (Create, Basic).', family='Digital Product Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Support Level', key='support_level'), Column(name='Service Levels', key='service_levels'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose'), Column(name='Support Level', key='support_level'), Column(name='Service Levels', key='service_levels')])], action=ActionParameter(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': 'DigitalSubscription'})), 'Element-DrE-Advanced': FormatSet(target_type='Element', heading='Element-DrE-Advanced Attributes', description='Auto-generated format for Element (Create, Advanced).', family='Automation', formats=[Format(types=['LIST'], attributes=[Column(name='Element Type Name', key='type_name'), Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties'), Column(name='Generic Initial Classifications', key='initial_classifications'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Effective From', key='effective_from'), Column(name='Effective To', key='effective_to'), Column(name='Effective Time', key='effective_time'), Column(name='Deep Copy', key='deep_copy'), Column(name='Initial Status', key='initial_status', valid_values=['ACTIVE', 'DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'DEPRECATED', 'OTHER'])]), Format(types=['ALL'], attributes=[Column(name='Element Type Name', key='type_name'), Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties'), Column(name='Initial Status', key='initial_status', valid_values=['ACTIVE', 'DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'DEPRECATED', 'OTHER']), Column(name='Generic Initial Classifications', key='initial_classifications'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Effective From', key='effective_from'), Column(name='Effective To', key='effective_to'), Column(name='Effective Time', key='effective_time'), Column(name='Deep Copy', key='deep_copy')])], action=ActionParameter(function='MetadataExpert.find_metadata_elements_with_string', 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'])), 'Element-DrE-Basic': FormatSet(target_type='Element', heading='Element-DrE-Basic Attributes', description='Auto-generated format for Element (Create, Basic).', family='Automation', formats=[Format(types=['LIST'], attributes=[Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties')]), Format(types=['ALL'], attributes=[Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties')])], action=ActionParameter(function='MetadataExpert.find_metadata_elements_with_string', 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'])), 'Embedded-Process-DrE-Advanced': FormatSet(target_type='Embedded Process', heading='Embedded-Process-DrE-Advanced Attributes', description='Auto-generated format for Embedded Process (Create, Advanced).', family='Action Author', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Deployed Implementation Type', key='deployed_impl_type'), Column(name='Namespace Path', key='namespace_path'), Column(name='Resource Name', key='resource_name'), Column(name='Source', key='source'), Column(name='Formula', key='formula'), Column(name='Formula Type', key='formula_type'), Column(name='Expected Behaviour', key='expected_behaviour'), Column(name='Priority', key='priority'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Deployed Implementation Type', key='deployed_impl_type'), Column(name='Namespace Path', key='namespace_path'), Column(name='Resource Name', key='resource_name'), Column(name='Source', key='source'), Column(name='Formula', key='formula'), Column(name='Formula Type', key='formula_type'), Column(name='Expected Behaviour', key='expected_behaviour'), Column(name='Priority', key='priority'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(function='MetadataExpert.find_metadata_elements_with_string', 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'])), diff --git a/sample-data/templates/advanced/Digital Product Manager/Create_Agreement.md b/sample-data/templates/advanced/Digital Product Manager/Create_Agreement.md index dc11415e..46d9ec9c 100644 --- a/sample-data/templates/advanced/Digital Product Manager/Create_Agreement.md +++ b/sample-data/templates/advanced/Digital Product Manager/Create_Agreement.md @@ -13,14 +13,6 @@ ___ > **Alternative Labels**: "Term Name" -### Agreement Type -> **Input Required**: False - -> **Attribute Type**: Simple - -> **Description**: Type of agreement (e.g., service level agreement, licensing agreement, data sharing agreement). - - ### Journal Entry > **Input Required**: False diff --git a/sample-data/templates/advanced/Digital Product Manager/Create_Data_Sharing_Agreement.md b/sample-data/templates/advanced/Digital Product Manager/Create_Data_Sharing_Agreement.md index 61196daf..62333e59 100644 --- a/sample-data/templates/advanced/Digital Product Manager/Create_Data_Sharing_Agreement.md +++ b/sample-data/templates/advanced/Digital Product Manager/Create_Data_Sharing_Agreement.md @@ -13,14 +13,6 @@ ___ > **Alternative Labels**: "Term Name" -### Agreement Type -> **Input Required**: False - -> **Attribute Type**: Simple - -> **Description**: Type of agreement (e.g., service level agreement, licensing agreement, data sharing agreement). - - ### Journal Entry > **Input Required**: False diff --git a/sample-data/templates/advanced/Digital Product Manager/Create_Digital_Subscription.md b/sample-data/templates/advanced/Digital Product Manager/Create_Digital_Subscription.md index da1e9fbf..1d151192 100644 --- a/sample-data/templates/advanced/Digital Product Manager/Create_Digital_Subscription.md +++ b/sample-data/templates/advanced/Digital Product Manager/Create_Digital_Subscription.md @@ -15,14 +15,6 @@ ___ > **Alternative Labels**: "Term Name" -### Agreement Type -> **Input Required**: False - -> **Attribute Type**: Simple - -> **Description**: Type of agreement (e.g., service level agreement, licensing agreement, data sharing agreement). - - ### Support Level > **Input Required**: False @@ -139,6 +131,18 @@ ___ > **Description**: The authors. +### Service Levels +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Service levels promised by the subscription, as name/value pairs (e.g., availability: 99.9%, responseTime: 4 hours). + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + ### Effective From > **Input Required**: False diff --git a/sample-data/templates/basic/Digital Product Manager/Create_Agreement.md b/sample-data/templates/basic/Digital Product Manager/Create_Agreement.md index b53548fb..ba9454e4 100644 --- a/sample-data/templates/basic/Digital Product Manager/Create_Agreement.md +++ b/sample-data/templates/basic/Digital Product Manager/Create_Agreement.md @@ -13,14 +13,6 @@ ___ > **Alternative Labels**: "Term Name" -### Agreement Type -> **Input Required**: False - -> **Attribute Type**: Simple - -> **Description**: Type of agreement (e.g., service level agreement, licensing agreement, data sharing agreement). - - ### Journal Entry > **Input Required**: False diff --git a/sample-data/templates/basic/Digital Product Manager/Create_Data_Sharing_Agreement.md b/sample-data/templates/basic/Digital Product Manager/Create_Data_Sharing_Agreement.md index e25ed247..fb58d979 100644 --- a/sample-data/templates/basic/Digital Product Manager/Create_Data_Sharing_Agreement.md +++ b/sample-data/templates/basic/Digital Product Manager/Create_Data_Sharing_Agreement.md @@ -13,14 +13,6 @@ ___ > **Alternative Labels**: "Term Name" -### Agreement Type -> **Input Required**: False - -> **Attribute Type**: Simple - -> **Description**: Type of agreement (e.g., service level agreement, licensing agreement, data sharing agreement). - - ### Journal Entry > **Input Required**: False diff --git a/sample-data/templates/basic/Digital Product Manager/Create_Digital_Subscription.md b/sample-data/templates/basic/Digital Product Manager/Create_Digital_Subscription.md index 0365c18f..04d962fc 100644 --- a/sample-data/templates/basic/Digital Product Manager/Create_Digital_Subscription.md +++ b/sample-data/templates/basic/Digital Product Manager/Create_Digital_Subscription.md @@ -15,14 +15,6 @@ ___ > **Alternative Labels**: "Term Name" -### Agreement Type -> **Input Required**: False - -> **Attribute Type**: Simple - -> **Description**: Type of agreement (e.g., service level agreement, licensing agreement, data sharing agreement). - - ### Support Level > **Input Required**: False @@ -139,4 +131,16 @@ ___ > **Description**: The authors. +### Service Levels +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Service levels promised by the subscription, as name/value pairs (e.g., availability: 99.9%, responseTime: 4 hours). + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + ___ diff --git a/tests/dr-egeria-command-tests/dr_test_products_good.md b/tests/dr-egeria-command-tests/dr_test_products_good.md index 7d99be5d..d8c4fe9c 100644 --- a/tests/dr-egeria-command-tests/dr_test_products_good.md +++ b/tests/dr-egeria-command-tests/dr_test_products_good.md @@ -184,8 +184,8 @@ ___ # DP-05: Create Agreement — generic -> Creates a generic Agreement collection. Agreement Type exercises -> the family-specific attribute. +> Creates a generic Agreement collection. Agreement has no properties of its own +> beyond Collection's (Agreement Type was retired, ISSUE-145); Purpose carries intent. ## Create Agreement @@ -198,10 +198,6 @@ Sales Forecast Data Access Agreement Generic agreement governing access to Sales Forecast data products by internal business units. -### Agreement Type - -DataAccessAgreement - ### Purpose Define the terms under which internal consumers may access Sales Forecast data products. @@ -238,10 +234,6 @@ Sales Forecast — Finance Data Sharing Agreement Data sharing agreement between the Sales Analytics team and the Finance department for access to Q1 2026 Sales Forecast outputs for budget reconciliation. -### Agreement Type - -DataSharingAgreement - ### Purpose Govern the sharing of Sales Forecast data with Finance for budget reconciliation. @@ -264,7 +256,7 @@ ___ # DP-07: Create Digital Subscription -> Creates a DigitalSubscription agreement. Exercises Subscription Level and Support Level +> Creates a DigitalSubscription agreement. Exercises Support Level and Service Levels > from Digital Subscription Base. ## Create Digital Subscription @@ -278,17 +270,13 @@ Finance Team — Sales Forecast Subscription Premium subscription for the Finance team to access the Sales Forecast Pipeline Product, with business-hours support and daily data refresh. -### Subscription Level - -Premium - ### Support Level BusinessHours -### Agreement Type +### Service Levels -DigitalSubscription +{"availability": "99.5%", "refreshFrequency": "daily"} ### Purpose From 1bf33b29481fd40585fa4b154d30ef6531fc6546 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 12:35:08 -0500 Subject: [PATCH 6/9] fix(pyegeria): route remove_note through the Metadata Expert delete (ISSUE-146) Egeria 6.2 has no note delete endpoint; notes are Actions. remove_note now posts to metadata-expert/metadata-elements/{guid}/delete, built from the platform root so it is the same on a MetadataExpert client (which overrides command_root). A source trace shows this reaches the same deleteMetadataElementInStore code as the asset delete, so it does not avoid OMAG-REPOSITORY-HANDLER-400-008; ISSUE-146 stays open pending Egeria's delete fixes. ISSUE-146 also records the note-privacy findings from the egeria-workspaces-fs session. Signed-off-by: Dan Wolfson --- PYEGERIA_ISSUES.md | 47 +++++++++++++++++-- pyegeria/core/_server_client.py | 8 +++- .../test_issue_146_remove_note_url.py | 42 +++++++++++++++++ 3 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 tests/micro-tests/test_issue_146_remove_note_url.py diff --git a/PYEGERIA_ISSUES.md b/PYEGERIA_ISSUES.md index b1639d54..fbf41a55 100644 --- a/PYEGERIA_ISSUES.md +++ b/PYEGERIA_ISSUES.md @@ -227,9 +227,50 @@ Person. So the refusal comes from the delete touching the anchor's graph, most likely the LatestChange update on the anchor, or a provenance check across elements that share the anchor, not from a direct link. -**pyegeria clean-up:** point `remove_note` at `asset-maker/assets/{guid}/delete` -so the route is explicit, and describe it as an Action delete in the -docstring. +**Delete-path trace (2026-10-13, Egeria source, read-only):** the asset delete +(`AssetMakerResource.deleteAsset` → `AssetHandler.deleteAsset`) and the Metadata +Expert delete (`MetadataExpertResource` → `MetadataExpertRESTServices`) both call +`OpenMetadataClient.deleteMetadataElementInStore`, then the same +`MetadataElementHandler` → `OpenMetadataAPIGenericHandler.deleteBeanInRepository` +code. Neither does any extra checking, so switching routes cannot avoid 400-008. +The error is thrown only by `RepositoryErrorHandler.validateProvenance`, when +the delete removes an entity or relationship whose provenance is not +LOCAL_COHORT and the request carries no `externalSourceGUID`. That happens in +`removeRelationship` for each relationship on the note and in `removeEntity` +for the note itself. No anchor (LatestChange) update was found on the delete +path, which corrects "Why it fails" above. But the error names UserIdentity +`ff983b64`, which is not linked to the note, so the exact instance is still +unexplained. Untried options are to pass the content pack's metadata-collection +id as `externalSourceGUID`, or to use `deleteMethod: ARCHIVE`, which goes +through a different handler. + +**Note-privacy findings (egeria-workspaces-fs session, 2026-10-13, with owner +approval):** a second test JournalEntry, `8bec72e4-6da6-40a4-943e-d81e2173ec9b`, +was created on Erin's profile (`10dc7da9`) and cannot be deleted either until a +working delete exists. +- `POST my-profile/journal-my-activity` ignores `initialClassifications` and + stamps only ZoneMembership `['erinoverview']`. +- `POST classification-explorer/elements/{guid}/zone-membership` with + `['resource-explorer-private','erinoverview']` makes the entry private. + erinoverview can read it. peterprofile and garygeeke get 403 + `OPEN-METADATA-SECURITY-403-020` by GUID, and 0 hits from + `feedback-manager/assets/by-search-string`. +- The journal's NoteLog (`f780511a`) stays at `['erinoverview']`, so other + users can see that the log exists but not the hidden entries. +- The owner chose a temporary workaround for the Resource Locator: call + `add_zone_membership(['resource-explorer-private', user])` straight after + `journal-my-activity`. Review it once Egeria's journal fix lands. + +**pyegeria clean-up:** make the `remove_note` route explicit and describe it as +an Action delete in the docstring. The owner chose the Metadata Expert delete +(`metadata-expert/metadata-elements/{guid}/delete`) for now. Per the trace +above, this is a clarity change, not a fix for 400-008. + +**Re-test after Egeria's delete fixes are published:** the owner said +(2026-10-13) that Egeria is working on delete issues now. Once that work is +published, re-test `remove_note` on `8bec72e4` (plain delete, then `ARCHIVE` if +needed). Tell the egeria-workspaces-fs session before deleting anything on +Erin's profile. `fef83ed5` stays. --- diff --git a/pyegeria/core/_server_client.py b/pyegeria/core/_server_client.py index 5421e262..0f8e3b28 100644 --- a/pyegeria/core/_server_client.py +++ b/pyegeria/core/_server_client.py @@ -3361,6 +3361,11 @@ async def _async_remove_note( All the relationships to referenceables are lost. + In Egeria 6.2 notes (including journal entries) are Actions, and no note + delete endpoint exists, so this uses the generic Metadata Expert element + delete until Egeria adds one (ISSUE-146). The URL is built from the + platform root because MetadataExpert overrides command_root. + Parameters ---------- @@ -3378,7 +3383,8 @@ async def _async_remove_note( ------ PyegeriaException """ - url = f"{self.command_root}feedback-manager/assets/{note_guid}/delete" + url = (f"{self.platform_url}/servers/{self.server_name}/api/open-metadata/" + f"metadata-expert/metadata-elements/{note_guid}/delete") await self._async_delete_element_request(url, body) @dynamic_catch diff --git a/tests/micro-tests/test_issue_146_remove_note_url.py b/tests/micro-tests/test_issue_146_remove_note_url.py new file mode 100644 index 00000000..613ac652 --- /dev/null +++ b/tests/micro-tests/test_issue_146_remove_note_url.py @@ -0,0 +1,42 @@ +# SPDX-License-Identifier: Apache-2.0 +# Copyright Contributors to the ODPi Egeria project. +""" +Regression test for ISSUE-146 (PYEGERIA_ISSUES.md): Egeria 6.2 has no note +delete endpoint (notes are Actions), so `remove_note` uses the generic +Metadata Expert element delete. The URL is built from the platform root, so +it is the same on a MetadataExpert client, which overrides command_root. + +No live server needed: a mocked `_async_make_request` captures the URL. +""" +from unittest.mock import MagicMock, patch + +import pytest + +from pyegeria.omvs.my_profile import MyProfile +from pyegeria.omvs.metadata_expert import MetadataExpert + +EXPECTED = ("https://localhost:9443/servers/vs/api/open-metadata/" + "metadata-expert/metadata-elements/note-guid/delete") + + +def _client(cls): + with patch("pyegeria.core._base_server_client.BaseServerClient.check_connection", return_value=""): + return cls(view_server="vs", platform_url="https://localhost:9443", user_id="u", user_pwd="p") + + +@pytest.mark.parametrize("cls", [MyProfile, MetadataExpert]) +def test_remove_note_uses_metadata_expert_delete(cls): + client = _client(cls) + cap = {} + + async def fake(method, url, body=None, **kwargs): + cap["method"], cap["url"], cap["body"] = method, url, body + resp = MagicMock() + resp.json = MagicMock(return_value={}) + return resp + + client._async_make_request = fake + client.remove_note("note-guid") + + assert cap["method"] == "POST" + assert cap["url"] == EXPECTED From 2d4b38300e12628d7642b610b4f4471790a7aabe Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 12:35:53 -0500 Subject: [PATCH 7/9] docs(backlog): re-test deletes (ISSUE-146 et al.) when the new Egeria lands Signed-off-by: Dan Wolfson --- BACKLOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/BACKLOG.md b/BACKLOG.md index 3316568f..3508f871 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -5,6 +5,19 @@ Status: `open` · `in-progress` · `done` · `deferred` --- +## 🟡 Medium Priority — Re-test deletes when the new Egeria release lands + +**Status:** open, blocked on Egeria (its delete fixes are in progress upstream) +**Added:** 2026-10-13 + +Once the Egeria release with the delete fixes is published and the local quickstart is redeployed: + +1. **ISSUE-146:** re-test `remove_note`, which now posts to `metadata-expert/metadata-elements/{guid}/delete`, against test JournalEntry `8bec72e4-6da6-40a4-943e-d81e2173ec9b` on Erin's profile (`10dc7da9`). Try a plain delete first, then `deleteMethod: ARCHIVE` if it still fails with `OMAG-REPOSITORY-HANDLER-400-008`. Tell the egeria-workspaces-fs session before deleting anything on Erin's profile. Keep `fef83ed5` (owner's decision). +2. **Other delete issues** to re-check at the same time: ISSUE-117 (Memento cascade delete), ISSUE-125 (`deleteEnumDef`) and ISSUE-132 (`cascadedDelete` field name). +3. Update each `PYEGERIA_ISSUES.md` entry with the result, then do the held 6.2.3 release. The owner wants outstanding issues fixed before releasing. + +--- + ## 🟠 High Priority — Missing/absent catalog templates crash or silently proceed in `_async_get_template_guid_for_technology_type` callers — needs discussion **Status:** open (partial fix landed 2026-07-27) From e64c438c6abd61aa1222d8583c72431e380aed53 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 12:54:23 -0500 Subject: [PATCH 8/9] docs(issues): log ISSUE-147 (valid-metadata clear always throws 400-011; map value never cleared) Re-tested live on qs-view-server with made-up properties. Cause is in Egeria's ValidMetadataValueHandler: no return after the delete, and clearValidMetadataMapValue passes null for mapName. Added to the delete re-test backlog item. Signed-off-by: Dan Wolfson --- BACKLOG.md | 1 + PYEGERIA_ISSUES.md | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/BACKLOG.md b/BACKLOG.md index 3508f871..293908d2 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -14,6 +14,7 @@ Once the Egeria release with the delete fixes is published and the local quickst 1. **ISSUE-146:** re-test `remove_note`, which now posts to `metadata-expert/metadata-elements/{guid}/delete`, against test JournalEntry `8bec72e4-6da6-40a4-943e-d81e2173ec9b` on Erin's profile (`10dc7da9`). Try a plain delete first, then `deleteMethod: ARCHIVE` if it still fails with `OMAG-REPOSITORY-HANDLER-400-008`. Tell the egeria-workspaces-fs session before deleting anything on Erin's profile. Keep `fef83ed5` (owner's decision). 2. **Other delete issues** to re-check at the same time: ISSUE-117 (Memento cascade delete), ISSUE-125 (`deleteEnumDef`) and ISSUE-132 (`cascadedDelete` field name). + Also ISSUE-147, the valid-metadata clears: re-run `vm_clear_retest`'s sequence (setup then clear for a value, a map name and a map value on a made-up property). Expect no 400-011 error after a successful clear, and expect the map value to actually be removed. 3. Update each `PYEGERIA_ISSUES.md` entry with the result, then do the held 6.2.3 release. The owner wants outstanding issues fixed before releasing. --- diff --git a/PYEGERIA_ISSUES.md b/PYEGERIA_ISSUES.md index fbf41a55..9e27dce0 100644 --- a/PYEGERIA_ISSUES.md +++ b/PYEGERIA_ISSUES.md @@ -168,6 +168,7 @@ content was changed. The numbered section list above describes the - ISSUE-38 (PY-18): `count_relationships_between_elements("Exception")` (276) disagrees with `ClassificationExplorer.get_relationships("Exception")` (55) **Open Egeria Server issues** +- ISSUE-147: Every valid-metadata clear call answers OPEN-METADATA-400-011 "not found", even after a successful delete; clear-map-value deletes nothing; clear-map-name leaves the map's value set behind - ISSUE-143: `includeOnlyRelationships: ["PersonRoleAppointment"]` returns no relationships for a Person, although the unfiltered read has its role appointments - ISSUE-130: The YAML secrets store's user directory caches a user forever, so editing an existing user needs a platform restart - ISSUE-128: Retention cannot be set on Egeria 6.2: the server registers the Jackson subtype as `RetentionProperties.class` (typo), and pyegeria only allows `RetentionClassificationProperties` @@ -1170,6 +1171,36 @@ enough to track there too). --- +### ISSUE-147: Every valid-metadata clear call answers OPEN-METADATA-400-011 "not found", even after a successful delete; clear-map-value deletes nothing; clear-map-name leaves the map's value set behind + +**Layer:** Egeria Server (`ValidMetadataValueHandler`) · **Status:** open · **Found:** 2026-10-13. The first live run of the Valid Metadata commands showed it (the error text wasn't captured then). Re-tested the same day with the full responses captured. + +**Re-test:** run once on qs-view-server as erinoverview, with all four live sessions clearing it first. It used made-up properties `pyegeriaClearRetest` and `pyegeriaClearRetestMap` (typeName `Asset`) and called the SDK methods in `pyegeria/omvs/valid_metadata.py`. The Dr.Egeria `Clear Valid Metadata *` commands call the same methods (`md_processing/v2/reference_data.py:198-242`). + +| Call | Response | Actual effect | +|---|---|---| +| `clear_valid_metadata_value(alpha)`, set up just before | 400-011 "value alpha ... is not found" | **alpha removed** (gone from the list afterwards) | +| same call again (alpha already gone) | 400-011 | nothing to remove | +| `clear_valid_metadata_value(beta)` | 400-011 | **beta removed** | +| `clear_valid_metadata_map_value(mapOne, v1)` | 400-011 "value v1 ... is not found" | **nothing removed**: `get_valid_metadata_map_value` still returns v1 | +| `clear_valid_metadata_map_name(mapTwo)` | 400-011 | **mapTwo removed** | +| `clear_valid_metadata_map_name(mapOne)`, with v1 under it | 400-011 | the mapOne name value is removed, but the map's value set "mapOne" (holding v1) stays in `get_valid_metadata_values` | + +Request ids: `ec9052e7` and `3975182d` (alpha), `38759736` (beta), `475e68f1` (map value), `407c0e17` and `07886f29` (map names). pyegeria surfaces each one as `SERVER_ERROR_500` wrapping `relatedHTTPCode` 400 `InvalidParameterException`. + +**Cause (Egeria source, `af400039c2`, `frameworks/open-metadata-framework/.../handlers/ValidMetadataValueHandler.java`):** +1. **No `return` after the delete (lines ~541-680).** In all three `clear*` methods, `if (validValueGUID != null) deleteMetadataElementInStore(...)` is followed unconditionally by the audit log and `throw new InvalidParameterException(VALID_METADATA_MISSING ...)`. So every call throws, whether or not it deleted anything. The "not found" error is the method's normal exit. +2. **Map name dropped in `clearValidMetadataMapValue`.** It calls `getValidValueGUID(userId, typeName, propertyName, null, preferredValue)`, passing `null` where `mapName` belongs. It therefore searches for `v1` as a plain value of the property, finds nothing, and deletes nothing. +3. **`clearValidMetadataMapName` deletes only the name's own value.** It doesn't touch the per-map value set created by `setup-map-value` (the "Set of valid values for the mapOne map name ..." element) or its members. Whether that should cascade is Egeria's call. + +**Effect on Dr.Egeria:** `Clear Valid Metadata Value` and `Clear Valid Metadata Map Name` report failure although the clear worked. `Clear Valid Metadata Map Value` reports failure and really did fail. + +**Leftovers on qs-view-server:** the map value set "mapOne" with member v1 under `pyegeriaClearRetestMap`/`Asset`, plus whatever per-property container elements setup creates (`Egeria:ValidMetadataValue::pyegeriaClearRetest-Asset` and `...pyegeriaClearRetestMap-Asset`). These are test elements, not content-pack elements. RE's blueprint materializer treats `Egeria:ValidMetadataValue:` qualifiedNames as content-pack origin, but only for SolutionComponents, so they don't affect it. + +**pyegeria follow-on (not done, needs the owner's go-ahead):** Dr.Egeria's clear processor could treat 400-011 from `clear-value`/`clear-map-name` as success when a follow-up read confirms the value is gone. Otherwise, wait for the Egeria fix and re-test (see the BACKLOG.md delete re-test item). + +--- + ### ISSUE-143: `includeOnlyRelationships: ["PersonRoleAppointment"]` returns no relationships for a Person, although the unfiltered read has its role appointments **Layer:** Egeria Server (not pyegeria) · **Status:** open, not yet reported to the Egeria team · **Found:** 2026-10-13, reported by the egeria-workspaces-fs Resource Browser session; reproduced read-only the same day. From 7910825b1225722bcb2e7ab6575cbdd03f8718b3 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Tue, 13 Oct 2026 12:54:31 -0500 Subject: [PATCH 9/9] docs(backlog): don't name the throwaway re-test script Signed-off-by: Dan Wolfson --- BACKLOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BACKLOG.md b/BACKLOG.md index 293908d2..d419f13f 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -14,7 +14,7 @@ Once the Egeria release with the delete fixes is published and the local quickst 1. **ISSUE-146:** re-test `remove_note`, which now posts to `metadata-expert/metadata-elements/{guid}/delete`, against test JournalEntry `8bec72e4-6da6-40a4-943e-d81e2173ec9b` on Erin's profile (`10dc7da9`). Try a plain delete first, then `deleteMethod: ARCHIVE` if it still fails with `OMAG-REPOSITORY-HANDLER-400-008`. Tell the egeria-workspaces-fs session before deleting anything on Erin's profile. Keep `fef83ed5` (owner's decision). 2. **Other delete issues** to re-check at the same time: ISSUE-117 (Memento cascade delete), ISSUE-125 (`deleteEnumDef`) and ISSUE-132 (`cascadedDelete` field name). - Also ISSUE-147, the valid-metadata clears: re-run `vm_clear_retest`'s sequence (setup then clear for a value, a map name and a map value on a made-up property). Expect no 400-011 error after a successful clear, and expect the map value to actually be removed. + Also ISSUE-147, the valid-metadata clears: re-run the ISSUE-147 sequence (setup then clear for a value, a map name and a map value on a made-up property). Expect no 400-011 error after a successful clear, and expect the map value to actually be removed. 3. Update each `PYEGERIA_ISSUES.md` entry with the result, then do the held 6.2.3 release. The owner wants outstanding issues fixed before releasing. ---