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

Merged
ddmitry merged 1 commits from 155-purchase-vs-orders into main 2026-08-27 11:55:52 +03:00
Owner

Зачем

Витрина показывает на зерне заказа, почему поведение по трекеру и деньги по
бэкенду расходятся. Отложенная покупка остается наблюдаемой до следующего
принятого слепка.

Что сделано

  • добавлены dm.purchase_vs_orders_rep, _dist, донор и явный договор _v;
  • purchase сворачивается до заказа и соединяется с dds.order_v через
    GLOBAL FULL OUTER JOIN с join_use_nulls = 1;
  • реализованы классы awaiting_order, cancelled, lost_event,
    duplicate_event, amount_delta, match в договорном порядке;
  • пересборка охватывает окно слепка, пропущенные дни и самый ранний
    awaiting_order, затем заменяет дневные партиции;
  • purchaseRevenue один раз нормализуется в Decimal(18, 2) на границе ODS;
  • обновлены спека, документы формата, DDS, DM и хранилища.

Проверка

  • Context7 и ClickHouse 26.3: прямой разбор Decimal и join_use_nulls;
  • make config-test, корневой make lint;
  • генератор: make docs, make lint, make typecheck, 429 тестов;
  • чистое хранилище, явные dds_transform и dm_transform;
  • make smoke — 21/21, make check-clickhouse — 10/10,
    make check-services — 7/7;
  • 1917 покупок: измененных копеек 0; ошибочных шардов 0;
  • стартовые классы: match 1573, cancelled 67, amount_delta 22,
    awaiting_order 255;
  • следующий слепок: старый хвост awaiting_order — 0, новый хвост — 254,
    ровно по числу покупок без заказа;
  • два повторных прогона сохранили деловой хеш
    2785277936714801277.

Две независимые линии Claude-ревью закрыты с APPROVED. После них пройдены
ai-text-lint (Голос: чисто) и отдельная литературная русская вычитка с
повторным APPROVED.

Дополнительное вкусовое ревью Fable закрыто полностью: приняты пять
комментариев к связности, а найденный на перепроверке перенос строки исправлен.
Итог узкой перепроверки: RECHECK: ALL_CLOSED.

Closes #155

## Зачем Витрина показывает на зерне заказа, почему поведение по трекеру и деньги по бэкенду расходятся. Отложенная покупка остается наблюдаемой до следующего принятого слепка. ## Что сделано - добавлены `dm.purchase_vs_orders_rep`, `_dist`, донор и явный договор `_v`; - `purchase` сворачивается до заказа и соединяется с `dds.order_v` через `GLOBAL FULL OUTER JOIN` с `join_use_nulls = 1`; - реализованы классы `awaiting_order`, `cancelled`, `lost_event`, `duplicate_event`, `amount_delta`, `match` в договорном порядке; - пересборка охватывает окно слепка, пропущенные дни и самый ранний `awaiting_order`, затем заменяет дневные партиции; - `purchaseRevenue` один раз нормализуется в `Decimal(18, 2)` на границе ODS; - обновлены спека, документы формата, DDS, DM и хранилища. ## Проверка - [x] Context7 и ClickHouse 26.3: прямой разбор Decimal и `join_use_nulls`; - [x] `make config-test`, корневой `make lint`; - [x] генератор: `make docs`, `make lint`, `make typecheck`, 429 тестов; - [x] чистое хранилище, явные `dds_transform` и `dm_transform`; - [x] `make smoke` — 21/21, `make check-clickhouse` — 10/10, `make check-services` — 7/7; - [x] 1917 покупок: измененных копеек 0; ошибочных шардов 0; - [x] стартовые классы: match 1573, cancelled 67, amount_delta 22, awaiting_order 255; - [x] следующий слепок: старый хвост awaiting_order — 0, новый хвост — 254, ровно по числу покупок без заказа; - [x] два повторных прогона сохранили деловой хеш `2785277936714801277`. Две независимые линии Claude-ревью закрыты с `APPROVED`. После них пройдены `ai-text-lint` (`Голос: чисто`) и отдельная литературная русская вычитка с повторным `APPROVED`. Дополнительное вкусовое ревью Fable закрыто полностью: приняты пять комментариев к связности, а найденный на перепроверке перенос строки исправлен. Итог узкой перепроверки: `RECHECK: ALL_CLOSED`. Closes #155
ddmitry force-pushed 155-purchase-vs-orders from 6485be3953 to a1412fd9e7 2026-08-27 11:20:48 +03:00 Compare
ddmitry added 1 commit 2026-08-27 11:21:35 +03:00
- Зачем:
  - показать расхождения трекера и бэкенда на зерне заказа
  - сохранить отложенные покупки наблюдаемыми до следующего слепка
- Что:
  - добавлены таблицы, представление и пересборка 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`
ddmitry force-pushed 155-purchase-vs-orders from a1412fd9e7 to 20071c565f 2026-08-27 11:21:35 +03:00 Compare
ddmitry merged commit 2a6162237c into main 2026-08-27 11:55:52 +03:00
ddmitry deleted branch 155-purchase-vs-orders 2026-08-27 11:55:52 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#170