Свод Концепт-прототип · не действующий продукт

Сквозная аналитика продаж без хранилища

Данные из 1С, ПРОДАТЫ и Тотема сводятся автоматически в тот же слой, который читает DataLens. Дашборды перестают быть просроченными, а поверх слоя можно спросить что угодно — обычными словами.

3 FTE
PM 1 · ML 1 · Backend 1
2 месяца
до слоя, который наполняется сам
Слой
продукт — сведённые данные, а не агент над ними
DataLens
работает как работал, менять ничего не надо

Что меняется

Сегодня сведение делает человек

Это и есть причина, по которой инициатива вообще существует: база под DataLens наполняется руками, поэтому аналитика всегда отстаёт и всегда стоит чьей-то недели.

Как сейчас

Неделя аналитика уходит на сборку

Выгрузки из трёх систем по очереди, сведение в сотнях экселей, сопоставление товаров и клиентов вручную — и только потом загрузка в базу под DataLens. Соответствия живут в голове одного человека. Любой новый разрез — это новая ручная сборка, то есть день или больше.

Как станет

Сборка идёт сама, человек проверяет

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

Как устроено

Три слоя, и дорогой из них один

Хранилище не строим. Считаем на стороне источников, сводим в одном процессе, пишем результат туда, откуда его уже читает DataLens.

Периметр компании
Источник
Первичные продажи, отгрузки, номенклатура
Источник
ПРОДАТА
Вторичные продажи, дистрибуция по точкам
Источник
Тотем
Третий контур данных по продажам
воспроизводим те выгрузки, которые человек уже делает — считаем на источнике, забираем агрегаты
Доступ
MCP · шаблонные тулзы на чтение
Не универсальные коннекторы, а конкретные выгрузки. Свободный SQL по схеме источника не пускаем — только параметризованные вызовы.
сводим в одном процессе
Ядро · здесь вся стоимость
Аналитический слой · DuckDB
Федерация и вычисления поверх нескольких источников без хранилища. Пять-десять чистых таблиц с описанными полями.
Соответствия
SKU и клиенты между тремя системами. То, что сейчас живёт в голове аналитика.
Определения метрик
Первичка, вторичка, дистрибуция, gross и net — каждая описана один раз.
Агрегаты
Зерно SKU × канал × неделя. Полный пересчёт каждый прогон, без историзации.
два выхода из одного слоя — поэтому цифры не могут разойтись
Выход
Агент
Тонкий, поверх слоя. Схема маленькая и документированная — свободные запросы по ней работают надёжно, вопросы заранее предусматривать не нужно.
Выход
База под DataLens
Пишем в ту же базу, что и человек сегодня. Дашборды продолжают работать без изменений, просто перестают отставать.
DuckDB читает базы и файлы напрямую и джойнит их в одном процессе — ни сервера, ни схемы, которую надо вести. Именно поэтому здесь нет ETL в привычном смысле: нет пайплайнов, нет историзации, нет бэкфилла. Если пересчёт разошёлся, слой выбрасывается и собирается заново.
Прототип · три экрана

Как это выглядит в работе

Первый — что видит бизнес. Второй — то, что мы на самом деле строим. Третий — то, благодаря чему первым двум начинают верить.

ЭКРАН 01

Вопрос обычными словами

Вопрос, на который сегодня уходит день ручной сборки, потому что он требует данных сразу из двух систем. Каждое число подписано: из какого источника, на какую дату, по какому определению метрики. Без этого в демонд-планинге не поверят ни одной цифре.

svod.internal / вопрос
Где за июль первичка разошлась со вторичкой по Oral Health? Покажи по сетям, где разрыв больше 10%.
Ответ

Разрыв больше 10% у четырёх сетей из девятнадцати. В трёх случаях отгрузили заметно больше, чем продали конечному потребителю — то есть товар осел в канале. В «Аптеке 36,6» обратная картина: продали больше, чем отгрузили в июле, значит распродаются июньские запасы.

СетьПервичка, уп.Вторичка, уп.Разрыв
Ригла184 200142 800+29,0%
Планета Здоровья121 50098 300+23,6%
Апрель96 40084 100+14,6%
Аптека 36,672 90083 600−12,8%
Откуда числа
Первичка · отгрузки, июль · период закрыт 05.08
ВторичкаПРОДАТА · выгрузка от 12.08 · покрытие 94% точек
Метрикаупаковки, без возвратов · определение подписано 21.02
Сети19 из 19 сопоставлены
SKU31 из 33 сопоставлены · 2 не учтены
Требует внимания

Две новые позиции появились в 1С 14 июля и пока не сопоставлены с ПРОДАТОЙ — они исключены из расчёта. Это около 1,2% объёма категории.

ЭКРАН 02

Слой — то, что мы строим на самом деле

Агент делается быстро и почти ничего не стоит. Дорого стоит вот это: свежесть источников, соответствия между системами и зафиксированные определения метрик. Именно поэтому количество типов вопросов на срок проекта не влияет — они все ходят в одну и ту же схему.

svod.internal / слой

Состояние слоя

Последний полный пересчёт — сегодня в 06:20, занял 4 мин 10 сек
DataLens актуален
Источники
1С · отгрузки и номенклатура
4 выгрузки · период закрыт 05.08
Сегодня 06:04
1,4 млн строк
ПРОДАТА · вторичка и дистрибуция
2 выгрузки · данные до 10.08
Сегодня 06:09
3,1 млн строк
Тотем
Выгрузка не обновлялась третий день — данные в ответах помечаются как устаревшие
18.08, 06:11
820 тыс. строк
Соответствия
SKU сопоставлено1 284 из 1 302
Клиенты и сети417 из 417
Требуют решения18
Добавлено за неделю23

Новые позиции подхватываются автоматически и предлагаются к сопоставлению. Подтверждает человек — это единственное место, где его решение обязательно.

Определения метрик
Первичка
Отгрузки из 1С, упаковки, за вычетом возвратов
Вторичка
Продажи конечному потребителю, ПРОДАТА, упаковки
Численная дистрибуция
Доля точек с продажами SKU за период
Net
Gross за вычетом торговых условий и промо-инвестиций

Каждая описана один раз и подписана. Агент не считает по формуле, придуманной в моменте.

ЭКРАН 03

Сверка с ручной сборкой

То, что человек залил руками за прошлые месяцы, — готовый эталон. Гоняем слой параллельно с ним и сравниваем строка в строку. Расхождения не прячем: почти всегда они вскрывают не ошибку кода, а неписаное правило, которое человек применял по памяти. Так проект получает доверие без единого слайда про надёжность ИИ.

svod.internal / сверка

Параллельный прогон · июнь–июль

Слой против ручной сборки · 2 месяца, 9 метрик, 19 сетей
Сходится 96,4% 3 расхождения
Метрика и периодРукамиСлойΔПричина
Первичка · июнь1 842 3001 842 300 0
Вторичка · июнь1 611 4001 618 900 +0,5% Человек брал выгрузку до 28-го, слой берёт полный месяц
Net · июнь412,8 млн398,1 млн −3,6% Ретро-бонусы разносились по факту начисления, а не по периоду продаж
Дистрибуция · июнь61,2%61,2% 0
Первичка · июль1 903 7001 903 700 0
Вторичка · июль1 674 2001 652 800 −1,3% Две новые позиции ещё не сопоставлены
Что делать с расхождением

По ретро-бонусам расходится не расчёт, а правило. Человек разносил их по периоду начисления, потому что так приходят документы; для анализа продаж корректнее относить к периоду продаж. Нужно решение владельца метрики — и после него определение Net фиксируется в слое, а не восстанавливается по памяти каждый месяц.

Итог сверки
Метрик проверено9
Сходится точно6
Расхождение из-за правил2
Расхождение из-за данных1
Ошибок расчёта0
Как докатывается ценность

Отдача идёт с первых недель, а не в конце

Каждая забранная выгрузка — это часы, которые вернулись аналитику на той же неделе. Нет момента сдачи: к концу второго месяца просто не остаётся ручной сборки.

Недели 1–2

Первая выгрузка забирается сама

Самый частый и самый механический кусок сборки уходит из рук. Заодно проверяется весь путь целиком — от источника до записи в базу под DataLens.

~4 ч / нед
вернулось аналитику
Недели 3–4

Два источника сведены, соответствия зафиксированы

SKU и клиенты перестают сопоставляться заново каждый раз. Исчезает целый класс ручных сверок и связанных с ними ошибок. Появляются первые ответы на вопросы, требующие двух систем сразу.

~11 ч / нед
вернулось аналитику
Недели 5–6

Слой наполняется по расписанию

Все три источника внутри, метрики описаны и подписаны. Дашборды DataLens показывают вчера, а не позапрошлую неделю — при этом в них ничего не переделывали. Идёт параллельный прогон против ручной сборки.

~18 ч / нед
вернулось аналитику
Недели 7–8

Вопросы вместо сборки

Агент отвечает поверх слоя на произвольные вопросы по продажам. Разрез, на который раньше уходил день, занимает минуту. Роль человека — проверять расхождения и подтверждать новые соответствия.

день → минута
время до нового разреза
Как работает команда

Разбор — это режим, а не этап

PM и ML садятся рядом с человеком, который сегодня наполняет базу. Не чтобы собрать требования и уйти, а чтобы забирать его работу по кускам у него на глазах — каждая увиденная выгрузка становится задачей бэкенду в тот же день.

1
2
3
4
5
6
7
8
PM
Рядом с процессом: что человек делает, из чего и зачем
Соответствия и определения метрик — длинный хвост, ведётся до конца
ML
Разбор вместе с PM: что автоматизируемо, какая нужна схема
Агент над слоем, качество ответов, сверка с эталоном
Backend
Контур, DuckDB, запись в базу DataLens
Выгрузки и MCP — по мере того, как разбор их вскрывает
Расписание, устойчивость
Бэкенд не ждёт окончания разбора и не работает вслепую: контур и путь записи строятся с первого дня, а выгрузки приходят потоком с третьего. PM из разбора не выходит — соответствия SKU это не разовая задача, а то, от чего зависит, сходятся цифры или нет.