Customer Data Product
# Copyright 2026 The Bitol Contributors
# SPDX-License-Identifier: Apache-2.0
apiVersion: v1.1.0
kind: DataProduct
name: Customer Data Product
version: v1.1.0
id: fbe8d147-28db-4f1d-bedf-a3fe9f458427
type: aggregate
domain: seller
status: draft
tenant: RetailCorp
synonyms:
- synonym: Customer 360
- synonym: Golden customer record
source: data-governance
- id: client-fr
synonym: Référentiel client
locale: fr-FR
description: French name used by EU subsidiaries.
description:
purpose: Enterprise view of a customer.
limitations: No known limitations.
usage: Check the various artefacts for their own description.
tags: ['customer']
context:
instructions: >
This data product exposes an enterprise view of a customer for self-service
analytics and AI agents. Use the `consolidatedtransactions` output port for
aggregated, joined transaction history; use `rawtransactions` only when
audit-level granularity is required. Refresh latency is 4 hours.
verifiedStatements:
- question: "What was the total customer spend last quarter?"
- question: "How many returning customers placed an order this month?"
- id: lifetime-value
question: "What is the lifetime value of a customer?"
answer: "Use the `consolidatedtransactions` output port (v2.0.0) and sum `total_amount` grouped by `customer_id`."
constraints:
- id: no-pii-exposure
constraint: "Do not expose individual customer PII; always aggregate to at least country level."
tags: ['gdpr', 'pii']
- constraint: "Do not use for real-time decisions; data latency is 4 hours."
inputPorts:
- name: payments
version: 1.0.0
contractId: dbb7b1eb-7628-436e-8914-2a00638ba6db
- name: payments
version: 2.0.0
contractId: dbb7b1eb-7628-436e-8914-2a00638ba6da
- name: onlinetransactions
version: 1.0.0
contractId: ec2a112d-5cfe-49f3-8760-f9cfb4597544
- name: onlinetransactions
version: 1.1.0
contractId: ec2a112d-5cfe-49f3-8760-f9cfb4597547
tags: ["transactions"]
customProperties:
- property: "transactions_version"
value: "1.1.0"
authoritativeDefinitions:
- type: "data_dictionary"
url: "https://mydata/dictionary"
outputPorts:
- name: rawtransactions
description: "Raw Transactions"
type: tables
version: 1.0.0
contractId: c2798941-1b7e-4b03-9e0d-955b1a872b32
- name: rawtransactions
description: "Raw Transactions"
type: tables
version: 2.0.0
contractId: c2798941-1b7e-4b03-9e0d-955b1a872b33
tags: ["transactions"]
customProperties:
- property: "transactions_version"
value: "2.0.0"
authoritativeDefinitions:
- type: "data_dictionary"
url: "https://mydata/dictionary"
sbom:
- id: sbom-runtime
type: "external"
url: "https://mysbomserver/transactions/runtime.cdx.json"
tags: ["runtime", "cyclonedx"]
customProperties:
- property: sbomFormat
value: CycloneDX 1.6
- property: buildId
value: build-8842
authoritativeDefinitions:
- type: implementation
url: "https://ci.acme.com/builds/8842"
- id: sbom-model
type: "external"
url: "https://mysbomserver/transactions/model.spdx.json"
tags: ["model", "spdx"]
customProperties:
- property: sbomFormat
value: SPDX 2.3
inputContracts:
- id: dbb7b1eb-7628-436e-8914-2a00638ba6db
version: 2.0.0
- id: ec2a112d-5cfe-49f3-8760-f9cfb4597544
version: 1.0.0
- name: consolidatedtransactions
description: "Consolidated transactions"
type: tables
version: 1.0.0
contractId: a44978be-1fe0-4226-b840-1b715bc25c63
synonyms:
- synonym: Consolidated transactions
- synonym: Joined transactions
locale: en-US
- synonym: Transactions consolidées
locale: fr-FR
context:
instructions: >
Pre-joined and pre-aggregated transactions across the payments and
onlinetransactions sources. Prefer this port over `rawtransactions`
for any reporting or AI-driven analytics. Filter by `transaction_ts`
when querying time ranges.
constraints:
- id: no-writes
constraint: "Do not write INSERT, UPDATE, or DELETE statements against this port."
- constraint: "Do not query more than 90 days of data in a single request without pagination."
- name: fulltransactionswithreturns
description: "Full transactions with returns"
type: tables
version: 0.3.0
contractId: ef769969-0cbe-4188-876f-bb00abadaee4
managementPorts:
- content: dictionary
type: topic
name: tpc-dict-update
description: Kafka topic for dictionary updates
tags: ["kafka"]
customProperties:
- property: "kafka_topic"
value: "true"
authoritativeDefinitions:
- type: "kafka_topic"
url: "https://mykafka/topic"
support:
- channel: "Data Team Slack"
url: "https://retailcorp.slack.com/archives/C1234567890"
description: "Primary support channel for data product questions"
tool: "slack"
scope: "interactive"
- channel: "Email Support"
url: "mailto:data-support@retailcorp.com"
description: "Email support for urgent issues"
tool: "email"
scope: "issues"
team:
name: "Data Team"
description: "The Data Team is responsible for the data product."
tags: ["data", "team"]
customProperties:
- property: "data_team"
value: "true"
members:
- username: "john.doe@retailcorp.com"
name: "John Doe"
description: "Data Product Owner"
role: "owner"
dateIn: "2023-01-15"
- username: "jane.smith@retailcorp.com"
name: "Jane Smith"
description: "Data Steward"
role: "data steward"
dateIn: "2023-02-01"
productCreatedTs: "2023-01-15T10:30:00Z"