Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changeset/pull-compliance-reports.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'@transcend-io/cli': minor
'@transcend-io/sdk': minor
---

Add transcend.yml pull/push for Data Map compliance reports (`compliance-reports`), with Article 30 default columns, title idempotency, and singular `compliance-report` alias migration.
22 changes: 20 additions & 2 deletions packages/cli/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2431,7 +2431,7 @@ transcend consent delete-preference-records \

```txt
USAGE
transcend inventory pull (--auth value) [--resources all|apiKeys|customFields|templates|dataSilos|enrichers|dataFlows|businessEntities|processingActivities|actions|dataSubjects|identifiers|cookies|consentManager|partitions|prompts|promptPartials|promptGroups|agents|agentFunctions|agentFiles|vendors|dataCategories|processingPurposes|actionItems|actionItemCollections|teams|privacyCenters|policies|messages|assessments|assessmentTemplates|purposes|preferenceOptions|systemDiscovery] [--file value] [--transcendUrl value] [--dataSiloIds value]... [--integrationNames value]... [--trackerStatuses LIVE|NEEDS_REVIEW] [--pageSize value] [--skipDatapoints] [--skipSubDatapoints] [--includeGuessedCategories] [--debug]
transcend inventory pull (--auth value) [--resources all|apiKeys|customFields|templates|dataSilos|enrichers|dataFlows|businessEntities|processingActivities|complianceReports|actions|dataSubjects|identifiers|cookies|consentManager|partitions|prompts|promptPartials|promptGroups|agents|agentFunctions|agentFiles|vendors|dataCategories|processingPurposes|actionItems|actionItemCollections|teams|privacyCenters|policies|messages|assessments|assessmentTemplates|purposes|preferenceOptions|systemDiscovery] [--file value] [--transcendUrl value] [--dataSiloIds value]... [--integrationNames value]... [--trackerStatuses LIVE|NEEDS_REVIEW] [--pageSize value] [--skipDatapoints] [--skipSubDatapoints] [--includeGuessedCategories] [--debug]
transcend inventory pull --help

Generates a transcend.yml by pulling the configuration from your Transcend instance.
Expand All @@ -2445,7 +2445,7 @@ This command can be helpful if you are looking to:

FLAGS
--auth The Transcend API key. Defaults to the TRANSCEND_API_KEY environment variable when set, so --auth may be omitted if it is exported. The scopes required will vary depending on the operation performed. If in doubt, the Full Admin scope will always work.
[--resources] The different resource types to pull in. Defaults to dataSilos,enrichers,templates,apiKeys. [all|apiKeys|customFields|templates|dataSilos|enrichers|dataFlows|businessEntities|processingActivities|actions|dataSubjects|identifiers|cookies|consentManager|partitions|prompts|promptPartials|promptGroups|agents|agentFunctions|agentFiles|vendors|dataCategories|processingPurposes|actionItems|actionItemCollections|teams|privacyCenters|policies|messages|assessments|assessmentTemplates|purposes|preferenceOptions|systemDiscovery, separator = ,]
[--resources] The different resource types to pull in. Defaults to dataSilos,enrichers,templates,apiKeys. [all|apiKeys|customFields|templates|dataSilos|enrichers|dataFlows|businessEntities|processingActivities|complianceReports|actions|dataSubjects|identifiers|cookies|consentManager|partitions|prompts|promptPartials|promptGroups|agents|agentFunctions|agentFiles|vendors|dataCategories|processingPurposes|actionItems|actionItemCollections|teams|privacyCenters|policies|messages|assessments|assessmentTemplates|purposes|preferenceOptions|systemDiscovery, separator = ,]
[--file] Path to the YAML file to pull into [default = ./transcend.yml]
[--transcendUrl] URL of the Transcend backend. Use https://api.us.transcend.io for US hosting. Defaults to the TRANSCEND_API_URL environment variable when set, so --transcendUrl may be omitted if it is exported. [default = https://api.transcend.io]
[--dataSiloIds]... The UUIDs of the data silos that should be pulled into the YAML file [separator = ,]
Expand Down Expand Up @@ -2473,6 +2473,7 @@ The API key permissions for this command vary based on the `resources` argument:
| `dataFlows` | `data-flows` | Consent Manager Data Flow definitions. | View Data Flows | [Consent Management -> Data Flows](https://app.transcend.io/consent-manager/data-flows/approved) |
| `businessEntities` | `business-entities` | The business entities in the Data Inventory. | View Data Inventory | [Data Inventory -> Business Entities](https://app.transcend.io/data-map/data-inventory/business-entities) |
| `processingActivities` | `processing-activities` | The processing activities in the Data Inventory. | View Data Inventory | [Data Inventory -> Processing Activities](https://app.transcend.io/data-map/data-inventory/processing-activities) |
| `complianceReports` | `compliance-reports` | Compliance reports (RoPA / Article 30) in the Data Map. | View Data Map | [Data Map -> Compliance Reports](https://app.transcend.io/data-map/compliance-reports) |
| `actions` | `actions` | The privacy request action settings. | View Data Subject Request Settings | [DSR Automation -> Request Settings -> Data Actions](https://app.transcend.io/privacy-requests/settings/data-actions) |
| `dataSubjects` | `data-subjects` | The privacy request data subject settings. | View Data Subject Request Settings | [DSR Automation -> Request Settings -> Data Subjects](https://app.transcend.io/privacy-requests/settings/data-subjects) |
| `identifiers` | `identifiers` | The privacy request identifier configurations. | View Identity Verification Settings | [DSR Automation -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
Expand Down Expand Up @@ -2577,6 +2578,12 @@ transcend inventory pull --auth="$TRANSCEND_API_KEY" --resources=businessEntitie
transcend inventory pull --auth="$TRANSCEND_API_KEY" --resources=processingActivities
```

**Pull compliance reports only (see [this example](./examples/compliance-reports.yml))**

```sh
transcend inventory pull --auth="$TRANSCEND_API_KEY" --resources=complianceReports
```

**Pull enrichers and identifiers (see [this example](./examples/enrichers.yml))**

```sh
Expand Down Expand Up @@ -2686,6 +2693,7 @@ The API key permissions for this command vary based on the resources declared as
| `dataFlows` | `data-flows` | Consent Manager Data Flow definitions. | Manage Data Flows | [Consent Management -> Data Flows](https://app.transcend.io/consent-manager/data-flows/approved) |
| `businessEntities` | `business-entities` | The business entities in the Data Inventory. | Manage Data Inventory | [Data Inventory -> Business Entities](https://app.transcend.io/data-map/data-inventory/business-entities) |
| `processingActivities` | `processing-activities` | The processing activities in the Data Inventory. | Manage Data Map | [Data Inventory -> Processing Activities](https://app.transcend.io/data-map/data-inventory/processing-activities) |
| `complianceReports` | `compliance-reports` | Compliance reports (RoPA / Article 30) in the Data Map. | Manage Data Map | [Data Map -> Compliance Reports](https://app.transcend.io/data-map/compliance-reports) |
| `actions` | `actions` | The privacy request action settings. | Manage Data Subject Request Settings | [DSR Automation -> Request Settings -> Data Actions](https://app.transcend.io/privacy-requests/settings/data-actions) |
| `dataSubjects` | `data-subjects` | The privacy request data subject settings. | Manage Data Subject Request Settings | [DSR Automation -> Request Settings -> Data Subjects](https://app.transcend.io/privacy-requests/settings/data-subjects) |
| `identifiers` | `identifiers` | The privacy request identifier configurations. | Manage Request Identity Verification | [DSR Automation -> Identifiers](https://app.transcend.io/privacy-requests/identifiers) |
Expand Down Expand Up @@ -2801,6 +2809,16 @@ Some things to note about this sync process:
- a) Data silo owners: If you assign an email address to a data silo, you must first make sure that user is invited into your Transcend instance (https://app.transcend.io/admin/users).
- b) API keys: This CLI will not create new API keys. You will need to first create the new API keys on the Admin Dashboard (https://app.transcend.io/infrastructure/api-keys). You can then list out the titles of the API keys that you generated in your transcend.yml file, after which the CLI is capable of updating that API key to be able to respond to different data silos in your Data Map

#### Compliance reports push notes

When pushing `compliance-reports`:

- **Idempotency:** Reports are matched by `title`. Prefer `processing-activities-filter.text` for portable YAML.
- **Columns:** Empty or omitted `columns` uses sensible Article 30 defaults on push. Explicit values are `ProcessingActivitiesColumnName` strings or attribute-key UUIDs.
- **Locale:** `locale` is not on `CreateComplianceReportInput` — Italian (or other) export language follows the Admin user's locale. The CLI warns and strips `locale` if present.
- **Singular alias:** Demo seeds may use `compliance-report`; migrate to plural `compliance-reports` (accepted as an alias on push).
- **Example:** See [compliance-reports.yml](../../../../examples/compliance-reports.yml).

#### Preference management push notes

When pushing `purposes`, `preference-options`, or nested `preference-topics`:
Expand Down
41 changes: 41 additions & 0 deletions packages/cli/examples/compliance-reports.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Compliance reports (Data Map → Compliance Reports / RoPA)
#
# Idempotent by `title` on push. Prefer `processing-activities-filter.text` for
# portable YAML; ID-based filters are organization-specific.
#
# `columns: []` (or omitted) uses sensible Article 30 defaults on push.
# Explicit columns are ProcessingActivitiesColumnName values or attribute-key UUIDs.
#
# Note: `locale` is NOT supported on CreateComplianceReportInput — Italian (or
# other) export language follows the Admin user's locale, not transcend.yml.
#
# Demo seeds may use singular `compliance-report`; migrate to plural
# `compliance-reports` (the CLI accepts the singular as an alias on push).

compliance-reports:
- title: Article 30 CCTV RoPA — Italian Export
description: >-
GDPR Article 30 register filtered to CCTV processing activities for Disney
Italia theme park entrances.
processing-activities-filter:
text: CCTV — Disney Italia Theme Park Entrances
columns: []
- title: Full Article 30 Register
description: Organization-wide RoPA with default Article 30 columns
processing-activities-filter:
text: ''
columns:
- title
- description
- dataSubjects
- processingPurposeSubCategories
- dataSubCategories
- controllerships
- retentionType
- storageRegions
- transferRegions
- securityMeasureDetails
- dataSilos
- owners
- teams
data-protection-officer-email: dpo@acme.com
125 changes: 125 additions & 0 deletions packages/cli/schema/transcend-yml-schema-latest.json
Original file line number Diff line number Diff line change
Expand Up @@ -54356,6 +54356,131 @@
]
}
},
"compliance-reports": {
"type": "array",
"items": {
"allOf": [
{
"type": "object",
"required": ["title"],
"properties": {
"title": {
"type": "string"
}
}
},
{
"type": "object",
"properties": {
"description": {
"type": "string"
},
"processing-activities-filter": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"ids": {
"type": "array",
"items": {
"type": "string"
}
},
"attributeValueIds": {
"type": "array",
"items": {
"type": "string"
}
},
"businessEntityIds": {
"type": "array",
"items": {
"type": "string"
}
},
"dataSiloIds": {
"type": "array",
"items": {
"type": "string"
}
},
"dataSubjectIds": {
"type": "array",
"items": {
"type": "string"
}
},
"teamIds": {
"type": "array",
"items": {
"type": "string"
}
},
"ownerIds": {
"type": "array",
"items": {
"type": "string"
}
},
"purposes": {
"type": "array",
"items": {
"type": "string"
}
},
"processingPurposeSubCategoryIds": {
"type": "array",
"items": {
"type": "string"
}
},
"dataCategories": {
"type": "array",
"items": {
"type": "string"
}
},
"dataSubCategoryIds": {
"type": "array",
"items": {
"type": "string"
}
},
"saaSCategoryIds": {
"type": "array",
"items": {
"type": "string"
}
},
"vendorIds": {
"type": "array",
"items": {
"type": "string"
}
},
"controllerships": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"columns": {
"type": "array",
"items": {
"type": "string"
}
},
"data-protection-officer-email": {
"type": "string"
}
}
}
]
}
},
"purposes": {
"type": "array",
"items": {
Expand Down
Loading
Loading