feat(dm): добавлена сверка покупок с заказами

- Зачем:
  - показать расхождения трекера и бэкенда на зерне заказа
  - сохранить отложенные покупки наблюдаемыми до следующего слепка
- Что:
  - добавлены таблицы, представление и пересборка purchase_vs_orders
  - сумма покупки нормализована в Decimal на границе ODS
  - обновлены договоры и указатели на механику пересборки
- Проверка:
  - `make config-test`, `make lint`
  - `cd generator && make docs lint typecheck test`
  - `make rebuild-storage`, явные `dds_transform` и `dm_transform`
  - `make smoke`, `make check-clickhouse`, `make check-services`
This commit is contained in:
ddadmin committed 2026-08-27 04:21:15 -04:00
1 parent fb00bbe4c3
commit 20071c565f
15 files changed
+391 -38

No files matched your search

@@ -12,12 +12,12 @@
- `name` — имя источника, как в облачной выгрузке Метрики; сырой слой хранит
его без изменений.
- `clickhouse_type` — тип в хранилище ровно в той записи, в какой его вернёт
`system.columns`: параметры входят в имя типа целиком, без сокращений
(`LowCardinality(String)`, `Array(Float64)`). Сверено 2026-08-01 —
по документации ClickHouse через Context7 и запросом к узлу стенда
(26.3.17.56). Запись важна потому, что по ней человек пишет DDL: тип,
сокращённый здесь, приедет в таблицу сокращённым же.
- `clickhouse_type` — тип колонки у источника в той записи, которой пользуется
ClickHouse: параметры входят в имя целиком, без сокращений
(`LowCardinality(String)`, `Array(Float64)`). Обычно ODS берет его без
изменений. Исключение одно: денежный `purchaseRevenue` приезжает как
Float64, а на границе хранения разбирается прямо в Decimal. Поэтому поле
описывает выгрузку, а локальный тип ODS назван в документации хранилища.
- `numpy_dtype` — чем колонка представлена внутри генератора; у массивов это
тип элемента. Строки живут в `object`-массивах: numpy-строки фиксированной
длины стенду ничего не дают.
@@ -371,8 +371,8 @@ COLUMNS: tuple[Column, ...] = (
numpy_dtype="float64",
normalized_name="purchase_revenue",
group=ColumnGroup.ECOMMERCE,
comment="выручка заказа глазами клиента; Float64, как у Метрики —"
" на этом держится урок о расхождениях с бэкендом",
comment="выручка заказа глазами клиента; источник объявляет Float64,"
" ODS хранит точный Decimal",
),
Column(
name="purchaseCurrency",