Матрица ролей таблиц — снимок 2026-07-11
Матрица отвечает на три практических вопроса: таблица собирается или рассчитывается, кто её должен писать и можно ли считать её рабочим источником отчёта. Точные поля, типы, индексы и DDL — в SCHEMA-SNAPSHOT-2026-07-11.sql.
Схема gwptd_intake — 104 собранные таблицы
| Семейство | Таблицы | Роль |
|---|---|---|
| Envelope | collection_run, raw_payload, parser_error, schema_snapshot | метаданные прогона, исходный ответ и ошибки; schema_snapshot пока без писателя |
| WB | wb_*, включая wb_warehouse_stocks, wb_adverts, wb_advert_stats, wb_paid_storage, wb_finance_reports | typed-ответы 23 endpoint'ов WB; wb_warehouse_stocks — текущий источник WB FBO для kernel |
| Ozon | ozon_*, включая ozon_product_*, ozon_postings_*, ozon_stocks, ozon_stock_on_warehouses, ozon_compensation, ozon_search_queries | typed-ответы 18 endpoint'ов; ozon_analytics сейчас intake-only |
| YM | ym_*, включая ym_analytics, ym_services, ym_tariffs, ym_boost, ym_competitors | typed-ответы 18 endpoint'ов; асинхронные xlsx-отчёты уже сохраняются как typed-данные |
| Lamoda | lamoda_orders, lamoda_inventory, lamoda_nomenclatures, lamoda_status_dates, lamoda_returns, lamoda_return_boxes, lamoda_promotions, lamoda_promotion_products, lamoda_questions, lamoda_documents, lamoda_prices, lamoda_funnel | API- и кабинетные данные Lamoda; первые семь участвуют в общем V3-контуре, последние три — ручной кабинетный поток |
| Amazon | amz_*: inventory, orders, settlements, sales traffic, finance events, ranks, buybox, reimbursement/storage/planning/country/ledger/report-health | синхронизированные с s2 результаты SP-API и отдельных API; суммы остаются в валюте рынка |
| Golden Apple | ga_raw | raw JSON-срезы по тегам кабинета; последний успешный срез на тег — актуальный |
| 1С и зеркала | onec_supplier_catalog, onec_nomenclature_ref, onec_warehouse_ref, onec_warehouse_stock | справочник товара и закупочные остатки; часть refresh-скриптов идёт вне envelope |
| Общие | mp_seller_health | рейтинг/здоровье продавца для нескольких МП |
Называть intake-таблицу «фактом» нельзя: это нормализованный ответ конкретного API, который может быть append-only, upsert или полным срезом в зависимости от коллектора. Правило для конкретной таблицы проверяется в коде коллектора и в DDL, а не по общему предположению об UPSERT.
Схема gwptd_kernel — 20 расчётных/справочных таблиц
| Группа | Таблицы | Писатель и использование |
|---|---|---|
| Идентичность | dim_marketplace, dim_product, dim_product_identifier, dim_product_identifier_history, dim_warehouse, dim_ozon_fbo_cluster, map_ozon_fbo_warehouse_cluster, resolution_quarantine | build_dim_product/resolve_identifiers; history резервна, quarantine требует разбора ключа |
| Карточка товара | dim_product_attribute, dim_product_description, dim_product_images | зеркала и sync-скрипты; питает карточку товара |
| Событийные факты | fact_orders, fact_returns, fact_finance, fact_analytics, fact_promotions | kernel ETL, кроме fact_promotions: это исторический frozen-слой без текущего builder-а/reader-а |
| Состояние | fact_stocks_daily, fact_prices_daily, fact_supplier_stock_price, fact_storage_costs | kernel ETL; storage — вход для turnover, не сирота |
| Производные | fact_turnover, fact_rating | kernel ETL после заказов/остатков/хранения/дедупликации |
| Прикладное | shipments | Laravel, а не kernel ETL; план отгрузок |
Витрины SQL
v_dim_product_card, v_dim_product_wide и v_fact_stocks_current — view,
не самостоятельные писатели. Их поля определяются DDL, а свежесть зависит от
таблиц-источников.
Таблицы, которым нельзя приписывать текущего бизнес-потребителя
| Объект | Проверенный статус | Следующее действие |
|---|---|---|
gwptd_intake.ozon_analytics | собирается, но не попадает в fact_analytics и не питает funnel | решить: строить Ozon-ветку ETL или считать сбор резервным |
gwptd_kernel.fact_promotions | 510 исторических строк; нет builder-а, шага build_all и reader-а | определить канонический источник промо до удаления/пересборки |
gwptd_kernel.fact_finance | builder есть; экран WB finance сознательно читает intake | решить отдельно, когда переводить отчёт на kernel |
gwptd_intake.schema_snapshot | DDL есть, писателя нет | либо реализовать schema-drift мониторинг, либо вывести из обязательного контура |
Эта таблица не является разрешением удалять данные. Она отделяет «нет потребителя сейчас» от «можно удалить»: для второго нужен владелец, backfill план и проверка downstream-зависимостей.