Learning Platform
Глоссарий Troubleshooting
Урок 05.05 · 30 мин
Продвинутый
CDE RegistryData modelApproval workflowState machineVersioningCross-referencesYAML schema

Введение

T+3M в SwiftRide. Выявление валидировано; ~42 кандидата протриажены через скоринг критичности (M1.4) → финальный список 24 CDE для целевого T+3M. CDO Office готов опубликовать реестр. Председатель audit committee задаёт: «Покажите реестр. В каком формате? Где хранится? Как мы знаем, что каждая запись была одобрена? Когда её последний раз ревьюили?»

Без модели данных реестр — это spreadsheet. Spreadsheet приемлем для маленькой команды T0, но не масштабируется + не аудит-защитим долгосрочно. ECB RDARR Guide прямо требует RDARR Guide (a-d) — все 4 элемента должны быть структурированы + версионированы + аудируемы.

Этот урок — фиксация модели данных + approval workflow. Выход — схема, применимая в OpenMetadata / Collibra / Atlan / Purview / DataHub. Лаба M4.8 — студент заполняет схему для 5 CDE SwiftRide.

Обязательные поля на запись CDE

Минимальный набор полей. Если реестр публикуется без них — не аудит-защитим.

ПолеТипОписание
cde_idstring (уникальный)Стабильный идентификатор (например, CDE-SWR-001). Неизменяемый после присвоения.
namestringКаноническое имя (например, driver_earnings_ledger).
business_definitionstring (markdown)Что этот CDE означает в бизнес-терминах; 2-5 предложений.
technical_definitionstring (markdown)Что этот CDE означает в терминах дата-платформы; конкретные схемы / таблицы / колонки.
business_ownerrole + personПодотчётная роль + именованный человек (например, CFO Office / Anna Müller).
data_stewardrole + personОперационный владелец (например, Treasury Data Lead / Carlos Vega).
classificationenumКлассификация по чувствительности / регуляторная (например, Confidential / PII Art.9 / SOX-scope / PCI-scope).
criticality_scorefloat (1.00-5.00)Взвешенный скор из M1.4.
applicable_regulationsarrayПрименимые регуляции (например, ["SOX 404", "GDPR Art. 6", "AMLR"]).
lineage_refsarrayURI к записям OpenLineage / OpenMetadata / Marquez.
control_refsarrayID контролей в каталоге контролей (forward-link к M5).
bia_refsarrayID записей BIA (forward-link к M6).
statusenumproposed · under_review · approved · maintained · retired.
versionstringSemver или incremental (см. ниже).
created_attimestampПервичное создание.
last_reviewed_attimestampПоследнее ревью по каденсу обновления (M4.7).
next_review_duetimestampЗапланированное следующее ревью.
retire_aftertimestamp (nullable)Запланированный retirement; null, если активен.

Опциональные поля (рекомендуемые)

ПолеОписание
tagsГибкие метки (например, ["financial-reporting", "pre-ipo-priority"]).
change_historyТаймлайн правок + одобрений + переходов статуса.
incident_historyСсылка на прошлые инциденты, вовлекавшие этот CDE.
escalation_thresholdКоличественный порог для материальной эскалации (например, $2M misstatement или 2% accuracy drift).
quality_toleranceДопуск DQ-правила (например, null rate ≤ 0.1%).
retentionПолитика retention (например, 7y immutable SOX evidence).
cross_border_transferGDPR-специфично (например, EU → US (SCCs + TIA executed Q1 2026)).
incident_runbook_refСсылка на runbook реагирования на инциденты (forward-link к M8).
related_cdeКросс-ссылки к связанным записям CDE (parent / child / peer).
glossary_termСсылка на запись бизнес-глоссария (каталог).
confidentiality_labelМетка Microsoft Information Protection или тег Atlan.
attestation_historyСсылки на квартальный цикл аттестации (forward-link к M7).

Стратегия версионирования

Вариант A — semver (рекомендуемый)

MAJOR.MINOR.PATCH:

  • MAJOR — изменение бизнес-определения, владельца, классификации, периметра (breaking).
  • MINOR — изменение технической lineage, контролей (additive).
  • PATCH — корректировки (опечатка, обновление ссылки).

Пример таймлайна для CDE-SWR-001 driver_earnings_ledger:

  • v1.0.0 — первичное одобрение T+3M.
  • v1.0.1 — починка опечатки в business_definition T+3M.
  • v1.1.0 — добавлены control refs (поставка M5) T+6M.
  • v2.0.0 — смена бизнес-владельца CFO Office → Finance Data Office T+9M; ретроспектива SwiftPay 2024 добавлена в incident_history.

Вариант B — incremental

v1, v2, v3. Проще, менее информативно. Приемлемо для маленьких реестров; рекомендуется semver для программ >50 CDE.

Критично — неизменяемая история

Каждая версия сохранена. Реестр — append-only event log; текущее состояние — проекция. Аудиту нужно «как выглядел реестр в Q3 2026» — ответ всегда доступен.

State machine approval workflow

Состояния и переходы:

[start] --nominate--> proposed
proposed --start review--> under_review
under_review --approve--> approved
under_review --reject--> proposed (с правками)
under_review --kill--> killed
approved --enter operation--> maintained
maintained --request change--> under_review
maintained --schedule retire--> retiring
retiring --retire--> retired
killed --end (журнал аудита сохранён)
retired --end (журнал аудита сохранён)

Определения состояний

proposed: первичная номинация (выход валидации со стейкхолдерами M4.4). Черновик владельца; ещё не ревьюнуто.

under_review: Data Council ИЛИ подкомитет (триада технический + бизнес + compliance + аудит) ревьюит. Статус может быть under_review.technical, under_review.business, under_review.compliance, under_review.audit в более продвинутом workflow.

approved: одобрение Data Council. CDE вступил в операцию, но контроли возможно ещё не построены (forward к M5). Программа коммитится построить контроли.

maintained: контроли построены и DQ запускается операционно. Квартальная аттестация активна.

retiring: запланирован для retirement; датасет deprecated. Период для миграции downstream-потребителей. Обычно 90-180 дней.

retired: датасет декомиссионирован; запись CDE сохранена для исторической / аудит-ссылки; больше нет активных контролей.

killed: отклонён без принятой номинации (например, обнаружена некорректная классификация во время ревью). Сохранён для журнала аудита.

Требуемые одобряющие на переход

ПереходТребуемые одобряющие
nominate → proposedТолько номинатор (кто угодно)
proposed → under_reviewCDO Office принимает на ревью
under_review → approvedГолосование Data Council; минимум кворум (обычно 60%)
under_review → rejectedГолосование Data Council
under_review → killedКонсенсус CDO + Internal Audit
approved → maintainedАвтоматически по активации контроля
maintained → under_review (изменение)Запрос Business Owner ИЛИ Data Steward
maintained → retiringBusiness Owner + Data Council одобряют
retiring → retiredCDO Office подтверждает декомиссионирование

State machine — практически

T+3M реестр CDE SwiftRide — 24 записи в статусе approved. Контроли для 60% — ещё proposed (forward к M5 build). Контроли для топ-5 (приоритеты M1.7) — maintained, чтобы заземлить программу в Y+1.

CDE registry — state machine approval workflow

Состояния proposed → under_review → approved → maintained → retiring → retired (+ killed). Каждый переход требует одобряющих по RACI (M4.4). Тултипы раскрывают требования к одобряющим на переход.

proposed
Кто угодно номинируетПервичное состояние — номинатор подаёт кандидата. Кто угодно может номинировать (data engineer, data steward, владелец, аудит). Требуется: бизнес + техническое определение + предлагаемый владелец.
CDO принимает
under_review
Data Council ревьюитНа ревью подкомитета Data Council. Можно разделить: under_review.technical / business / compliance / audit. Итерация с правками разрешена.
Голос Council ≥60%
approved
Голос Data CouncilОдобрено Data Council. Forward-задача: построить контроли (M5). Программа выделяет ресурсы. Кросс-ссылка на control_refs инициализирована как proposed.
maintained
Операционно + аттестованMaintained — операционно. Контроли активны. DQ-запуски запланированы. Квартальная аттестация в цикле (M7). Last_reviewed_at + next_review_due отслеживаются.
запрос бизнес-владельца
retiring
Grace 90-180дЗапланированный retirement. Датасет deprecated; grace period 90-180 дней для миграции downstream-потребителей. Уведомление разослано.
CDO подтверждает
retired
Историческое сохранениеRetired. Датасет декомиссионирован. Запись CDE сохранена исторически. Нет активных контролей; аудиторские ссылки сохранены.
killed
Консенсус CDO + IAKilled — отклонён без принятия. Требуется консенсус CDO + Internal Audit. Журнал аудита сохранён. Частая причина: обнаружена некорректная классификация во время ревью.

Пример YAML-схемы — полный

# CDE-SWR-001 — driver_earnings_ledger
cde_id: CDE-SWR-001
name: driver_earnings_ledger
version: "1.1.0"
status: maintained
created_at: 2026-08-15T10:30:00Z
last_reviewed_at: 2026-11-15T14:00:00Z
next_review_due: 2027-02-15T00:00:00Z
retire_after: null

business_definition: |
  Канонический ledger per-driver per-period заработка — gross fare share, комиссия,
  налоговое удержание (по стране), incentive-выплаты, сумма payout. Единый источник
  правды для компенсации водителя. Прямой фид для строки P&L Driver Earnings & Incentives
  + сдачи в налоговые органы + 1099 generation (водители США) + labour-inspectorate
  отчётность (ЕС по странам).
  
  Отражает все выполненные поездки в периоде, включая completed-cancelled-disputed
  поездки, сверенные согласно применимым Terms of Service.

technical_definition: |
  Таблица-источник правды: `snowflake.dl_marts.driver_earnings_v3`
  Таблица сверки: `snowflake.dl_marts.driver_earnings_reconciliation`
  Companion налогового удержания: `snowflake.tax.withhold_per_period`
  
  Ключевые колонки:
  - `driver_id` (FK к driver service)
  - `period_start_date`, `period_end_date`
  - `gross_earnings_usd`
  - `commission_amount_usd`
  - `commission_rate`
  - `tax_withhold_amount_usd`
  - `incentive_amount_usd`
  - `payout_amount_usd`
  
  Upstream: dispatch service → kafka:trips.completed → fct_trip_records →
            billing service → fct_billing_aggregate → driver-earnings service.
  Downstream: SwiftPay payout pipeline, P&L revenue+expense, tax 1099, аттестация.

business_owner:
  role: "Finance Data Office (CFO direct report)"
  person: "Anna Müller"
  email: "[email protected]"

data_steward:
  role: "Treasury Data Lead"
  person: "Carlos Vega"
  email: "[email protected]"

classification:
  - "SOX-scope"
  - "GDPR Art. 6 (contract performance)"
  - "Confidential"

criticality_score: 4.50
criticality_dimensions:
  financial: 5
  regulatory: 4
  operational: 5
  reputational: 4
weights_used: { financial: 30, regulatory: 30, operational: 20, reputational: 20 }
weighted_calc: "(5×0.30) + (4×0.30) + (5×0.20) + (4×0.20) = 4.50"

applicable_regulations:
  - id: "SOX-404"
    article: "Section 404(a)"
    rationale: "Материальные P&L расходы + revenue offset; искажение >$10M вызывает material weakness."
  - id: "GDPR"
    article: "Art. 6(1)(b)"
    rationale: "Lawful basis исполнения контракта."
  - id: "Local tax authorities"
    article: "Per-country VAT + withholding"
    rationale: "Подачи в налоговые органы по юрисдикциям ЕС + LATAM + SEA."
  - id: "IRS"
    article: "1099-NEC (US)"
    rationale: "Генерация 1099-NEC для водителей США."

lineage_refs:
  - openlineage:dataset://snowflake/dl_marts/driver_earnings_v3
  - marquez:lineage/run/4a92...e9f0
  - dbt:model.swiftride.driver_earnings_v3
  - openmetadata:table/snowflake.dl_marts.driver_earnings_v3

control_refs:
  - CTL-FIN-024 # Контроль сверки trip → earnings → payout
  - CTL-FIN-025 # SoD: маршрутизация одобрения, эквивалент payroll
  - CTL-PRIV-008 # Политика retention GDPR
  - CTL-TAX-012 # Точность генерации 1099
  
bia_refs:
  - BIA-SWP-002 # Зависимость payout SwiftPay

escalation_threshold:
  financial: "$2M misstatement / период"
  accuracy: "0.05% дельта сверки"
  
quality_tolerance:
  null_rate: "≤ 0.01% (любое required-поле)"
  reconciliation_delta: "≤ 0.05% trip-to-earnings"
  pipeline_freshness: "≤ 6h SLA"
  
retention:
  policy: "7y immutable (SOX-grade)"
  storage: "S3 с object lock; доступ через Snowflake external table"

tags:
  - financial-reporting
  - swiftpay-2024-precedent
  - pre-ipo-priority
  - q4-2026-attestation-target

incident_history:
  - incident_id: INC-2024-DACH-001
    date: 2024-09-12
    summary: "Ошибка округления в расчёте комиссии; $2.3M недоплачено водителям в регионе DACH"
    root_cause: "Конверсия типа commission_rate в pricing engine v2.1 deploy"
    remediation_completed: 2024-12-01
    
attestation_history:
  - cycle: "Q4 2026"
    date: 2027-01-10
    attestor: "Anna Müller"
    status: "signed-off"

change_history:
  - version: "1.0.0"
    date: 2026-08-15T10:30:00Z
    change: "Первичное создание"
    approvers: ["CDO", "CFO", "Data Council"]
  - version: "1.0.1"
    date: 2026-09-02T09:00:00Z
    change: "Починка опечатки в business_definition (предложение про driver-as-data-subject)"
    approvers: ["CDO Office"]
  - version: "1.1.0"
    date: 2026-11-15T14:00:00Z
    change: "Добавлены control_refs CTL-FIN-024, CTL-FIN-025, CTL-PRIV-008, CTL-TAX-012 (поставка M5)"
    approvers: ["CDO", "Data Council"]

Этот паттерн — полный референс. Подполя могут быть опущены в ожидании построения контролей / BIA (контроли в статусе proposed forward-references — приемлемо).

Кросс-ссылки — модель отношений

Реестр CDE — хаб в большой экосистеме governance:

CDE Registry  ←→  Data Catalog (технические метаданные; URI lineage)
              ←→  Control Catalog (M5; контроли, защищающие CDE)
              ←→  BIA / BCP (M6; business impact, RTO/RPO)
              ←→  Evidence Catalog (M7; квартальная аттестация; запуски контролей)
              ←→  Incident Tracker (связь incident_history)
              ←→  Business Glossary (семантическая связь термина)
              ←→  Regulatory Catalog (обогащение applicable_regulations)

Принцип hub-and-spoke: CDE — основная сущность; другие каталоги — вспомогательные, ссылки в обе стороны. Кросс-ссылки — first-class поля в реестре, не скрытые join.

Версионирование хранения: ИЛИ встраивание кросс-ссылок в YAML реестра (удобство одного файла); ИЛИ join во внешнем бэкенде каталога (Collibra / Atlan / OpenMetadata). Production-ready — бэкенд.

CDE registry — entity-relationship модель

Hub-and-spoke: CDE Registry в центре; кросс-ссылки к Data Catalog / Control / BIA / Evidence / Glossary / Regulatory Catalog. Тултипы раскрывают семантику кросс-ссылок + М-references.

Data Catalog
lineage_refs · glossary_termData Catalog — OpenMetadata / Collibra / Atlan / Purview. Запись CDE ссылается на URI lineage + термины глоссария + технические метаданные. Двунаправленно.
Control Catalog
control_refs (M5)Control Catalog (M5 forward). Контроли на CDE — preventive / detective / corrective. CDE ссылается на массив control_refs; контроли ссылаются на CDE в скоупе.
CDE REGISTRY
HubCDE Registry hub. cde_id неизменяемый. Кросс-ссылки в YAML реестра или join в бэкенде каталога. Единый источник правды CDE.
BIA / BCP
bia_refs (M6)BIA / BCP (M6 forward). Business impact на CDE: RTO / RPO; классификация tier; impact statements. CDE ссылается на массив bia_refs.
Evidence Catalog
attestation_history (M7)Evidence Catalog (M7 forward). Квартальные циклы аттестации + запуски контролей + IPE testing. CDE ссылается на attestation_history.
Incident Tracker
incident_historyIncident Tracker (ServiceNow / Jira / PagerDuty). Ссылки incident_history. Ретроспективные ссылки на анализ корневых причин двунаправленно.
Business Glossary
glossary_termBusiness Glossary (компонент каталога). Семантический термин на CDE. Бизнес-определения канонические; реестр CDE ссылается на записи глоссария.
Regulatory Catalog
applicable_regulations (M3)Regulatory Catalog (M3 + расширения). Массив applicable_regulations связан с регуляторными цитатами (параграфы SOX, статьи GDPR, положения AMLR). Обновления распространяются по мере эволюции регуляций.
Проверка знанийKnowledge check
CDO SwiftRide публикует реестр. Engineering manager аргументирует: «Схема overkill — 17 required-полей. Давайте начнём с 5 полей (cde_id, name, owner, status, last_review) и расширим позже». По M4.5 + ECB RDARR Guide, какой защитимый ответ?
ОтветAnswer
По ECB RDARR Guide May 2024 — все 4 элемента обязательны: (a) inventory + (b) подотчётные владельцы + (c) бизнес-определения + (d) техническая lineage + измерение DQ. Минимум 5-полей НЕ комплаентен — отсутствуют business_definition, technical_definition, classification, applicable_regulations, lineage_refs, control_refs, criticality_score, escalation_threshold. (1) Walkthrough Big 4 перед IPO: «Покажите бизнес-определение + lineage + контроли на топ-5 CDE» — без полей не защитимо. (2) Подход: стартовый минимум 17 required-полей по M4.5 — заполнить best-effort первичный T+3M; итерировать по полям, где данные неполные (пробелы задокументированы как known); обновление T+6M T+9M улучшение. (3) НЕ приемлемо: пропустить required-поля навсегда. (4) Приемлемо: прогрессивное усиление — required заполнены, опциональные постепенно. (5) Дизайн схемы — поддержан тулингом (custom properties OpenMetadata, asset type Collibra, custom asset Atlan). (6) Рекомендация: не уменьшать периметр; вместо этого ресурсировать корректно — стратегия Фаза 1 M0 = baseline реестра, не «старт минимум + расширим». Первичный инвентарь тайм-боксирован; поля заполнены best-effort в тайм-боксе.

Дизайн схемы SwiftRide

Поставки T+3M:

  • Канонический YAML схемы хранится в Git (registry/cde/CDE-SWR-{NNN}.yaml).
  • Зеркалирован в OpenMetadata 1.12.x как custom asset type CriticalDataElement.
  • Кросс-ссылки на существующие сущности Table в OpenMetadata (через lineage_refs).
  • 24 записи CDE опубликованы; semver v1.0.0 каждая.
  • Approval workflow операционен — квартальный цикл Data Council (M4.7).
  • Control_refs изначально пусты / статус proposed (M5 строит T+6M).
  • BIA_refs изначально пусты (M6 строит T+9M).

Паттерн реализации OpenMetadata (предпросмотр для M4.6 + M4.8):

from metadata.generated.schema.entity.classification.tag import Tag
from metadata.generated.schema.entity.data.glossaryTerm import GlossaryTerm
from metadata.generated.schema.type.tagLabel import TagLabel

# Создать custom property set для CDE-атрибутов на Table
# Поля для regulator-mandatory data: business_definition, classification,
# criticality_score, applicable_regulations, control_refs, ...

# Прикрепить к таблице:
ometa.patch_extension(
    entity=Table,
    entity_id=table.id,
    extension_data={
        "cde_id": "CDE-SWR-001",
        "criticality_score": 4.5,
        "business_owner": "Finance Data Office / Anna Müller",
        "classification_label": "SOX-scope",
        # ... и т.д.
    }
)

Лаба M4.8 — студент выполняет этот паттерн для 5 CDE.

Антипаттерны

Только-spreadsheet реестр

Симптом: Excel / Google Sheets — канонический store; не версионирован; не аудируемый журнал изменений.

Исправление: YAML / бэкенд каталога; версионирование Git; неизменяемая история.

Поля-как-комментарии

Симптом: required-поля заполнены placeholder «TBD» / «N/A» вместо реальных значений.

Исправление: TBD — невалидный статус; форсировать решение до approve.

”Одобрение было встречей”

Симптом: одобрение зафиксировано только в meeting minutes; не в change_history реестра.

Исправление: одобрение = переход состояния в state machine; зафиксировано в change_history со списком approvers + timestamp.

Кросс-ссылки односторонние

Симптом: реестр CDE ссылается на контроли; каталог контролей не ссылается на CDE — двусторонняя связь сломана.

Исправление: двусторонние ссылки enforced в бэкенде каталога. Проверка целостности ссылок на save.

Отсутствует версия + отсутствует дата ревью

Симптом: реестр без поля version; ревью «когда нужно» — фактически = никогда.

Исправление: version + last_reviewed_at + next_review_due — required-поля. Каденс квартального ревью (M4.7) enforced автоматически.

”killed без журнала аудита”

Симптом: кандидат отклонён; запись удалена; нет исторической трассы.

Исправление: статус killed сохраняет запись; запись никогда не удаляется из реестра — append-only event log.

Итоги

  • 17 обязательных полей + 13 опциональных. ECB RDARR Guide мандатирует все 4 элемента (inventory + владельцы + определения + lineage / DQ); минимум 5-полей НЕ комплаентен.
  • Версионирование — semver MAJOR.MINOR.PATCH (рекомендуется); incremental приемлемо для маленьких.
  • Неизменяемая история — append-only event log; текущее состояние — проекция.
  • State machine approval workflow — proposed → under_review → approved → maintained → retiring → retired (+ killed). Требуемые approvers на переход; кворум Data Council ≥60%.
  • Кросс-ссылки hub-and-spoke — реестр CDE в центре; Data Catalog / Control Catalog (M5) / BIA (M6) / Evidence (M7) / Incident Tracker / Glossary / Regulatory Catalog — спицы. Двунаправленно.
  • YAML-схема — полный референс, применимый для SwiftRide. Зеркалирование в OpenMetadata / Collibra / Atlan / Purview / DataHub.
  • Поставка SwiftRide T+3M — 24 записи CDE v1.0.0; канонический YAML в Git; зеркалирован в OpenMetadata; control_refs / bia_refs изначально пусты (forward к M5 / M6).
  • Антипаттерны: только-spreadsheet; TBD-поля; одобрение только-встречей; односторонние ссылки; отсутствует версия / даты ревью; killed без журнала аудита.
  • Следующий урок (M4.6): глубокое сравнение каталожных инструментов — OpenMetadata / Collibra / Atlan / Alation / DataHub / MS Purview / Atlas / Informatica / IBM. CDE как примитив vs tag-based. Дерево решений по тулингу SwiftRide.
Business Glossary — модель данных и версионирование Audit Logging — неизменяемая история изменений

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 4. SwiftRide Engineering manager при T+3M предлагает: «17 required fields per CDE entry — overkill. Start с 5 fields (cde_id, name, owner, status, last_review) — extend later when need». Per M4.5 + ECB RDARR Guide, какой defensible CDO response?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 8