Дворец Мастеров

Автоматизация маркетплейсов
Общий прогресс 21 из 27 задач
77%
📅 Старт: 11.02.2026 ⏱ Обновлено: 22.04.2026 19:29
📋 План задач
Фаза 1: Данные и инфраструктура Дни 1-3 (готово)
#1 Автосбор данных по всем кабинетам
Python-скрипт на VPS, cron 04:00 UTC. Собирает продажи, заказы, остатки по 31 кабинету
#3 API по всем кабинетам
Получены API-ключи всех 31 кабинета: 11 WB + 11 Ozon + 9 ЯМ
#8 Аудит текущего сбора WB API
Проверены эндпоинты WB/Ozon/YM, найдены и исправлены ошибки API
#19 Сбор рекламной статистики WB
Скрипт collect_ad_stats.py на VPS, cron 3 раза в день. WB Advert API v3: кампании, расход, показы, клики, заказы. ИП + Весна
#21 Глобальный .env для безопасности
Все пароли и API-ключи вынесены из кода в C:\Users\.env. Обновлено 10 скриптов. Доступ из любого проекта
Фаза 2: Аналитика и дашборды Дни 4-7
#9 P&L дашборд в Metabase
7 карточек: P&L сводка, тренд, структура затрат, по организациям, маркетплейсы, реклама, топ-30 товаров
#10 Интеграция ответов команды
49 вопросов — все ответы получены и интегрированы в презентацию и план проекта
#7 Дашборды по потребностям команды
6 дашбордов: Остатки, Издержки, Реклама (с ассоциированными заказами), P&L, Карточки, Статистика отзывов. Единая навигация, автообновление через cron
#2 Доступы для Ани, Каримы и Бумбокс
3 группы: ИП+Весна (Аня), Свежо (Карима), Бумбокс. Изолированные PostgreSQL schemas + views, отдельные DB-подключения в Metabase
#6 Обучение настройке дашбордов
Команда должна самостоятельно обслуживать систему. Формат: видео + документация
#22 Рекламный дашборд оптимизации (ads-report)
Дашборд dvorecmasterov.ru/ads-report/ — прямой и полный CPO (ассоциированные заказы 55%), двойные рекомендации, фильтры. Cron 21:00 МСК
Фаза 3: Автоматизация процессов Дни 8-14
#11 Обновление WB-токенов
10 из 11 токенов обновлены (все кроме Блюпинк). Срок действия: до июня-августа 2026
#12 Автоматизация ручных задач
60 из 102 задач автоматизировано: ежедневные выгрузки (cron), протягивание формул (SQL+дашборды), мониторинг токенов, проверка ошибок (алерты в Telegram). Осталось: МойСклад API, сверка V1/V2
#13 Полная загрузка данных в БД
WB: 16 таблиц, 266K отзывов, 768K финотчётов. Ozon: 8855 строк (3 орг.). ЯМ: 262 строки (2 орг.). Не хватает: fin_wb 6 орг., fin_ozon 8 орг., fin_ym 9 орг.
#15 Разделение данных по бизнесам
3 изолированные PostgreSQL схемы: ИП+Весна, Свежо, Бумбокс. Каждый видит только свои данные в Metabase
#16 База знаний DokuWiki
Развёрнута wiki.dvorecmasterov.ru — DokuWiki в Docker, SSL, авторизация
#20 Загрузка данных КЭ (Купер)
209 заказов ИП за март 2024 — февраль 2026 загружены в таблицу ke_sales. 101 SKU, выручка 427K₽
#18 FIFO-расчёт себестоимости
FIFO v1 + v2 с BOM: 4748 поступлений, 38K продаж, 22 BOM-правила. Автообновление cron пн 09:00. Metabase + дашборд
#24 Автосбор расширенных данных WB
VPS-скрипт collect_wb_extended_vps.py (cron 09:00): карточки, цены, отзывы, вопросы, хранение, тарифы по 11 кабинетам. Заменяет ежедневные ручные выгрузки
#25 Еженедельные алерты в Telegram
weekly_alerts.py (пн 10:00): мониторинг токенов, сводка продаж 7д vs предыдущие, стокауты, нулевые цены, статистика review_queue
#27 Сопоставление артикулов Бумбокс с PDF-этикетками на Я.Диске
Собрано 12 358 PDF-этикеток с Я.Диска (рекурсивный обход публичной папки «Бумбокс»). Сопоставлено с 9 095 артикулами из Google Sheets (вкладка «готово в офисе»). Ссылки на PDF залиты в колонку F таблицы
Фаза 4: Интеграции и AI Дни 15-30
#14 Интеграция с 1С:Фреш
Себестоимость по ФИФО, синхронизация с МойСклад. Нужна для полной юнит-экономики
#5 Подключение к Битрикс24
Базовый тариф, 30 юзеров. Только задачи + чат + телефония. Админ — Анна Шебаршова
#4 Библиотека ответов AI
Telegram-бот @packmen_bot: AI-генерация ответов (DeepSeek), 5 кнопок управления, маппинг менеджеров по организациям, статистика обработки. Работает параллельно с SalesArea
#17 AI-агент OpenClaw
УДАЛЁН 05.03.2026 — уязвимости, ненужен на текущем этапе
#23 Telegram-бот управления отзывами
Бот @packmen_bot: мониторинг 11 кабинетов WB каждые 30 мин, AI-ответы DeepSeek, 5 кнопок, маппинг менеджеров. Дашборд dvorecmasterov.ru/reviews-stats/
#26 CTR A/B тест фото карточек WB
Сервис ротации фото карточек на WB каждые 30 мин для замера CTR. ИП (100 карточек) + Весна (80). Дашборд + админка объединены: dvorecmasterov.ru/ctr-test/. Ротация записывается в БД, но загрузка на WB возвращает 401 — нужен токен с правом «Контент» (текущие read-only). Ждём от менеджеров новые токены
🔗 Доступы к сервисам
Metabase (аналитика)
Email: dvorecmasterovnaklejki@gmail.com
Пароль: Dvorec2026mb
n8n (автоматизация)
FileBrowser (файлы)
Оптимизация рекламы
Данные: ИП + Весна, обновление 21:00 МСК
Управление остатками
Данные: WB + Ozon, обновление ежедневно 11:00 МСК
Удержания и издержки
Данные: fin_wb (5 орг.), обновление по понедельникам
P&L по организациям
Данные: WB + Ozon, обновление по понедельникам
Здоровье карточек
Данные: 266K отзывов, обновление по понедельникам
📊 Покрытие данных
Анализ заполненности таблиц по 11 организациям — что загружено и что ещё нужно собрать.
8
Полных таблиц
10
С пробелами
90
Всего таблиц
1 GB
Объём БД

Покрытие по организациям (11 кабинетов)

Таблица Покрытие Приоритет Недостающие Действие
fin_wb
5/11
КРИТИЧНО Ст, Олимп, Багира, Банззанас, Кухсити, Блюпинк Загрузить XLSX «Финотчёт» из ЛК WB
fin_ozon
3/11
ВЫСОКИЙ Ст, Олимп, Багира, Книфелд, Свежо, Банззанас, Кухсити, Блюпинк Загрузить XLSX из ЛК Ozon
fin_ym
2/11
ВЫСОКИЙ Ст, Олимп, Багира, Книфелд, Свежо, Банззанас, Кухсити, Блюпинк, бумбокс Загрузить XLSX из ЛК ЯМ
fin_ozon_upd
2/11
СРЕДНИЙ 9 организаций без УПД Загрузить XLSX из Ozon (УПД)
ozon_daily_orders
8/11
СРЕДНИЙ Багира (403), Блюпинк, Кухсити Перегенерировать API-ключ Ozon Багира
ozon_daily_stocks
9/11
СРЕДНИЙ Багира (403), Кухсити Перегенерировать API-ключ Ozon Багира
ym_daily_orders
7/11
СРЕДНИЙ Весна (403), Олимп, Ст, ИП Галимзянова Проверить API-ключи ЯМ
wb_advert_stats
8/11
СРЕДНИЙ Кухсити, Блюпинк, бумбокс Нет активных кампаний — ожидаемо
wb_feedbacks
11/11
OK Все организации Данные полные (266K)
wb_questions
11/11
OK Все организации Данные полные (22K)
wb_products
11/11
OK Все организации Данные полные (3.6K)
wb_cards
11/11
OK Все организации Данные полные (9.2K)
wb_prices_v2
11/11
OK Все организации Данные полные (9.7K)
wb_incomes
11/11
OK Все организации Данные полные (1.1K)
wb_fbs_supplies
11/11
OK Все организации Данные полные
wb_advert_campaigns
11/11
OK Все организации Данные полные (3.6K)
wb_daily_sales
10/11
OK Кухсити (неакт.) Автосбор (22K)
wb_daily_orders
10/11
OK Кухсити (неакт.) Автосбор (150K)

Пробелы внутри существующих данных

Даже у загруженных организаций покрытие может быть неполным — разные периоды, обрывы, отсутствие свежих месяцев.

Таблица Организация Что есть Что отсутствует Как исправить
fin_wb Книфелд дек 2024 — сен 2025 (10 мес) окт 2025 — фев 2026 (5 мес) Выгрузить «Финотчёт» за окт 2025 — фев 2026
fin_wb Свежо дек 2024 — июн 2025 (7 мес) июл 2025 — фев 2026 (8 мес) Выгрузить «Финотчёт» за июл 2025 — фев 2026
fin_wb Бумбокс дек 2024 — дек 2025 (13 мес) янв — фев 2026 (2 мес) Загрузить финотчёт за янв-фев 2026
fin_wb ИП дек 2024 — дек 2025 (13 мес) янв — фев 2026 (2 мес) Загрузить финотчёт за янв-фев 2026
fin_wb Весна авг 2024 — дек 2025 (17 мес) янв — фев 2026 (2 мес) Загрузить финотчёт за янв-фев 2026
fin_ozon Бумбокс янв — дек 2025 (12 мес) янв — фев 2026 (2 мес) Загрузить XLSX из Ozon за янв-фев 2026
fin_ozon ИП + Весна янв 2025 — фев 2026 (14 мес) — данные полные Загружено 05.03 — ОК
fin_ym ИП мар 2024 — дек 2025 (22 мес) янв — фев 2026 (2 мес) Загрузить данные ЯМ за янв-фев 2026
fin_ym Весна окт 2024 — июн 2025 (9 мес) июл 2025 — фев 2026 (8 мес) Загрузить данные ЯМ за июл 2025 — фев 2026
wb_daily_sales все 10 орг. нояб 2025 — мар 2026 (~4 мес) до нояб 2025 (историч.) Недоступно через API (макс. ~3 мес)
Подробный отчёт по БД: dvorecmasterov.ru/db-report/
📅 Ежедневный отчёт
22.04.2026 Загрузка Ozon V2: 28 таблиц, 11 500 строк истории + оптимизация инфраструктуры
  • Загрузка Ozon V2 в БД — Фарида предоставила две Google Sheets с данными Ozon через SellWise API (v2): «Весна Ozon api V2» (67 листов) и «ИП Галимзянова Ozon api V2» (69 листов). Скачано 95 CSV, проанализированы структуры, создано 28 таблиц ozon_* в PostgreSQL, загружено ~11 500 строк исторических данных с августа 2025. Размер БД: 1370 MB → 1533 MB
  • Ключевые таблицы Ozonozon_realization (87 строк финотчёта), ozon_transactions (812 транзакций), ozon_cashflow + ozon_cashflow_details, ozon_cost_prices (978 строк себестоимости), ozon_paid_storage (1998), ozon_analytics_data (1967), ozon_clusters_fbo (2454), реклама (campaigns/expense/daily), возвраты, отправления FBO/FBS
  • Объединение Весны и ИП в единые таблицы — поле entity различает юрлица. Весна имеет 31 колонку в realization с детализацией лояльности (зелёные цены, АПВЗ), ИП — 27 колонок. Универсальный подход — взяли union заголовков, недостающие поля остаются NULL. Все колонки — TEXT для надёжной загрузки, типизация через CAST в view'хах Metabase
  • Приостановка FIFO и 6 дашбордов по запросу Фариды — отключены cron-задачи: fifo_auto_update.py (экономия AI-токенов), generate_ads_report_vps.py, generate_stock_report_vps.py, generate_deductions_report_vps.py, generate_pnl_report_vps.py, generate_reviews_report_vps.py, generate_reviews_stats_vps.py. Бэкап crontab: /root/crontab_backup_before_pause.txt. Автосбор данных и бот отзывов продолжают работу
  • Аудит архитектуры сервера — полная инвентаризация VPS: 14 Docker-контейнеров (включая Fantiki-проект, YouTube-проект, Content Pipeline, DokuWiki, n8n, Metabase, Nginx, CTR-API, Filebrowser, PostgreSQL), 6 баз данных в PostgreSQL, 3 systemd-сервиса (review-bot, ai-assistant, intern-invite), 17 cron-задач, 8 доменов с SSL Let's Encrypt, 13 открытых портов
  • Обсуждение доступов для аналитика — Фарида и Аня запросили прямой доступ к PostgreSQL и возможность настраивать API-интеграции самостоятельно. Подготовлены развёрнутые обоснования границ ролей: аналитик работает с готовыми данными в Metabase (полный SQL + дашборды + экспорт), инженер данных настраивает API/cron/инфраструктуру. Параллельный доступ к production = риск остановки 17 автоматизаций
  • Разбивка по 3 направлениям для презентации — Сантехника (508 SKU, 4 юрлица, 104 млн ₽ в Q1 2026, 74% выручки холдинга), Товары для дома (170 SKU, 6 юрлиц, 29 млн ₽, 21%), Наклейки (5 038 SKU, 1 юрлицо Бумбокс, 7.3 млн ₽, 5%). За 2025 год холдинг заработал ~292 млн ₽ на всех маркетплейсах. Всего обработано 276 531 отзыв с 2019 года, рост рейтинга с 4.66 до 4.86
  • Разграничение терминов v2 WB и v2 Ozon — это разные сервисы с одинаковым названием: v2 WB — одна Google Sheets «ИП V2 06.01» (80+ листов, в БД не загружено), v2 Ozon — две Sheets (Весна + ИП, 67+69 листов, загружены 22.04)
  • Тест DataLens vs Metabase запланирован на 23.04 — Фарида предложила попробовать Yandex DataLens как альтернативу Metabase. Решено не переходить полностью, а параллельно настроить DataLens на те же данные (подключение к PostgreSQL, 2-3 демо-дашборда), сравнить по удобству/скорости/функционалу
21.04.2026 Обсуждение с руководителем: архитектура, разграничение ролей аналитика и инженера данных
  • Подробные ответы Фариде по db-report — объяснено что такое «расширенные данные WB» (карточки/цены/отзывы/вопросы/тарифы/хранение — дополнительные к базовым продажам/заказам/остаткам). Разъяснено почему автоматизации разделены на отдельные скрипты: разные API-эндпоинты, разные лимиты rate limit, разная частота обновлений, изоляция сбоев, принцип single responsibility
  • Границы ответственности — подготовлена документация для руководителя: что может аналитик (работа с данными в Metabase), что — инженер данных (настройка API, cron, инфраструктура). Обоснованы риски предоставления SSH-доступа к production-серверу с учётом 17 cron-задач, 14 Docker-контейнеров и 10+ сайтов на SSL
20.04.2026 CTR-сервис: объединение дашборда с админкой, диагностика ротации фото
  • Страница CTR перестала открываться после ночного перезапуска VPS — API возвращал 502 Bad Gateway. Причина: IP контейнера ctr-api в Docker-сети поменялся (было 172.18.0.11, стало 172.18.0.7), а в nginx был захардкожен старый IP. Переписал nginx-конфиг на resolver 127.0.0.11 + имя контейнера — теперь устойчиво к перезапускам
  • Исправлены 404 фото-вариантов — nginx-контейнер не видел директорию /data/ctr-uploads/ на хосте (она монтируется только в ctr-api). Добавлена location /ctr-test/uploads/ с проксированием на FastAPI, который уже отдаёт файлы. Загруженные варианты фото теперь корректно отображаются в админке
  • Дашборд и админка объединены в одну страницу — убрано разделение /ctr-test/ (read-only дашборд) и /ctr-test/admin/ (управление). Теперь всё на dvorecmasterov.ru/ctr-test/: метрики + загрузка вариантов + запуск/пауза/завершение тестов. Cron генерации статического дашборда удалён
  • Обнаружена критическая проблема — ротация фото на WB не работает. Скрипт ctr_rotate.py каждые 30 мин логирует смену варианта в БД (94 ротации за 3 дня по тесту #26), но запрос POST /content/v3/media/save на WB возвращает 401 Unauthorized. Последствие: на WB висит одно и то же фото, CTR по вариантам неразличим
  • Диагностирована причина 401 — декодированы JWT-токены ИП и Весны: у обоих нет scope «Контент», плюс установлен read-only флаг (bit 30). Для смены фото нужен токен с правом «Контент» (запись). Пользователь запросил новые токены у команды, в ожидании
  • Лимит в API поиска карточек увеличен до 1000 — раньше стоял limit=100, поэтому из 180 карточек отображались только 100 (ИП). После фикса видно все: ИП 100 + Весна 80 = 186 карточек в системе
14.04.2026 Сопоставление артикулов Бумбокс с PDF-этикетками на Я.Диске
  • Собраны все PDF-этикетки с Я.Диска — скрипты yadisk_scan_public.py + yadisk_list_all_pdf_v2.py: рекурсивный обход публичной папки «Бумбокс» через API Я.Диска с пагинацией по разным media_type (document, unknown, null). Итого 12 358 PDF-файлов собрано в JSON-карту с публичными ссылками формата disk.yandex.ru/d/<public_key>/<путь>
  • Сопоставлены артикулы с PDF-этикетками — скрипт match_articuls.py: 9 095 артикулов из Google Sheets (таблица 18KuBnNA0IEX, вкладка «готово в офисе», колонка D) сравнивались с именами PDF-файлов. Сгенерирован CSV с колонкой F для заливки обратно в таблицу
  • Ссылки залиты в Google Sheetswrite_to_sheets.py через Service Account sheets-bot@sticker-sheets: в колонку F таблицы «готово в офисе» добавлены кликабельные ссылки на PDF-этикетки для каждого артикула. Теперь у менеджера мгновенный доступ к этикетке прямо из таблицы
15.04.2026 Решена проблема «украденных» пустых 5★ отзывов + 114 отзывов на выкупы
  • Решена проблема с «пропадающими» пустыми отзывами — выяснили что WB сам автоматически помечает пустые 5★ отзывы как «обработано» (isAnswered=true, но answer=None), не дожидаясь ответа продавца. Официальное подтверждение от поддержки WB: «Площадка считает такие оценки положительными и принятыми, а алгоритмы могут автоматически помечать их как обработанные для ускорения работы продавца.»
  • Добавлена функция fetch_archived_empty в review_monitor.py — раз в 30 мин после обычного прохода дополнительно обходит архив isAnswered=true, фильтрует: пустой текст + rating 4-5 + нет ответа + возраст 30мин–48ч. Для найденных — генерирует AI-ответ через DeepSeek и публикует через PATCH /api/v1/feedbacks/answer (поле answer.editable=true позволяет это)
  • Первый боевой прогон 15.04 07:45 UTC — закрыли 31 ранее потерянный отзыв: Весна 8, ИП 11, Бумбокс 12. WB принял все PATCH-запросы (часть ответов сразу в state=wbRu на сайте, часть в state=reviewRequired на модерации)
  • Сгенерированы 114 отзывов на выкупы для ИП Галимзяновой — по запросу из файла «Написать отзывы на выкупы.xlsx». 23 уникальных артикула смесителей × ~5 выкупов. Использованы Claude Opus 4.6 в интерактивной сессии (не через DeepSeek — качество русского выше). Разнообразие обеспечено: разные длины (от 3 слов до 5 предложений), разные сюжеты (ремонт, подарок родителям/сестре/тёще, дача, съёмная, новая квартира), чередование пола, варианты «недостатков» и концовок, естественные несовершенства текста
  • Отзывы записаны в Excel — создана новая вкладка «Сгенерированные отзывы» с колонками Артикул WB / Артикул поставщика / Достоинства / Недостатки / Отзыв. Использован новый Google Service Account sheets-bot@sticker-sheets.iam.gserviceaccount.com (создан 14.04 для прошлой задачи)
  • Скачан скилл «humanizer» — найден в C:/Users/Анатолий/.openclaw/workspace/skills/ai-humanizer/ (24 паттерна признаков AI-текста, 500+ терминов AI-лексики, стат-анализ burstiness/TTR). Принципы применены при генерации отзывов
14.04.2026 Ссылки на штрихкоды в таблице «Поставки Бумбокс» + аудит архитектуры БД + план ФБО-остатков
  • Заполнен столбец «ссылка шк» в Google Sheets «Поставки Бумбокс» — во вкладку «готово в офисе» (10 089 строк) автоматически записаны ссылки на PDF-штрихкоды из Яндекс.Диска. Результат: 8 631 из 9 095 артикулов (95%) получили прямую ссылку на свой PDF в столбце F. Время заливки через Sheets API — 9.8 секунд
  • Настроены OAuth Яндекс.Диска и Service Account Google Sheets — создано приложение «Скрипт ШК Бумбокс» на oauth.yandex.ru (scopes: disk.read, disk.info), получен токен аккаунта KZS-market (544 GB / 1.1 TB). Создан Google Cloud проект sticker-sheets с Sheets API и сервис-аккаунтом sheets-bot@sticker-sheets.iam.gserviceaccount.com. Оба credentials сохранены в memory для повторного использования
  • Рекурсивный обход Яндекс.Диска — вместо перебора 12 000+ подпапок с заказами (папка «Бумбокс/1 (1). Заказы» устроена поштучно на каждый заказ) использован flat-endpoint /v1/disk/resources/files с пагинацией. За ~3 минуты получен список всех PDF на диске. Сопоставление с артикулами из столбца D таблицы дало 8 631 уникальных совпадений (по 1 ссылке на артикул, дубликаты из разных заказов игнорируются)
  • Аудит архитектуры dvorec_analytics перед совещанием — обнаружено что БД была сложнее чем казалась: 4 схемы (public + bumboks/ip_vesna/svezho × 87 view = 261 view-обёртка для row-level security через Metabase). Распарсены все 74 карточки Metabase — из 121 таблицы реально используется только 26. Найдены критические зависимости (views в public на wb_api_*, FK на products). Файлы: AUDIT_dvorec_analytics_2026-04-08.md, tables_classification_2026-04-08.md
  • Сформулирован план ФБО-отчёта на конец месяца — обнаружено расхождение с «Мой Склад»: скрипт monthly_fbo_stocks.py берёт снимок из БД на 07:00 МСК 1-го числа, но за ночь уже прошли заказы нового месяца. Решение: переписать скрипт на прямые вызовы WB+Ozon API параллельно, cron перенести на 58 20 28-31 * * с проверкой завтрашнего дня (23:58 МСК последнего дня месяца)
  • Расшифрованы 2 голосовых Фариды локально — файлы 5382209941673123614.ogg (6:40) и 5382209941673123628.ogg (3:48) через faster-whisper модель medium на CPU. Зафиксированы ключевые решения: префиксная система в dvorec_analytics (! — рабочая, опи — API, R- — ручной ввод), себестоимость тянуть готовой из «Мой Склад» (не считаем сами), новые таблицы R-pnl_monthly и R-expenses для P&L
13.04.2026 Старт задачи по штрихкодам: анализ таблицы Поставки Бумбокс, выбор подхода
  • Проанализирована Google-таблица «Поставки Бумбокс» — вкладка «готово в офисе»: 10 089 строк, 9 095 строк с артикулом, 9 092 уникальных артикула (минимум дубликатов). Структура: D «Артикул» (типа Термо_Осман_корона_черн) — мастер-поле для сопоставления, F «ссылка шк» — целевой столбец, полностью пустой. Таблица открыта на редактирование по ссылке
  • Выбран подход «Service Account + публичная папка Я.Диска» — из 4 рассмотренных вариантов (OAuth Google + Apps Script + прямое API + копи-паст) выбран наиболее надёжный: программная запись в Google через сервис-аккаунт с правами Editor на таблицу, чтение Яндекс.Диска через OAuth-токен владельца. Формат ссылок: публичный https://disk.yandex.ru/d/... (превью PDF в браузере, работает у любого без логина)
  • Подтверждена логика сопоставления — PDF на Яндекс.Диске именуются <артикул>.pdf ровно как в столбце D (например, Термо_Осман_корона_черн.pdf). Один артикул — один PDF. Источник — папка «Бумбокс / 1 (1). Заказы» с десятками тысяч подпапок-заказов, в каждой по ~3 PDF штрихкодов товаров из заказа
09.04.2026 Очистка БД: 121 → 63 таблицы, обнуление Metabase, песочница для стажёров
  • Полная очистка базы данных от мусора — после совещания с Фаридой принято решение работать в существующей dvorec_analytics вместо создания новой БД. Удалено 58 неиспользуемых таблиц: было 121, осталось 63. Размер БД: 1413 MB → 1370 MB. Удалены: 7 «сирот» wb_*, 11 bp_* (Блюпинк), 10 gsheet_* старых, 14 ip_* старых, 3 FIFO v1, 3 прочих, 10 пустых таблиц
  • Полная инвентаризация перед удалением — для каждой из 121 таблицы проверено: используется ли в скриптах VPS (рекурсивный grep по 112 .py файлам), покрыта ли views (261 view в 3 схемах), есть ли FK-зависимости (6 таблиц), актуальность данных. Найдены неочевидные зависимости: wb_cards используется CTR-сервисом (ctr_collect.py), review_templates — ботом отзывов (review_monitor.py), fifo_v2_sku_mapping — FIFO-расчётом. Все три исключены из удаления
  • Удалены 261 view row-level security — схемы bumboks, ip_vesna, svezho с 87 view каждая удалены через DROP SCHEMA CASCADE. SQL-пользователи metabase_bumboks, metabase_ip_vesna, metabase_svezho удалены. Скрипт setup_data_isolation.py найден и сохранён — при необходимости разделение по компаниям пересоздаётся за минуту
  • Обнулён Metabase — написан скрипт metabase_reset.py (DRY RUN + --execute режимы). Удалены: 22 коллекции, 74 вопроса, 6 дашбордов, 4 лишних подключения к БД (ИП+Весна, Бумбокс, Свежо, демо H2). Сохранены: пользователи, группы, подключение «Аналитика Дворец». Бэкап БД metabase: /root/backups/metabase_before_reset_2026-04-09.dump (3.3 MB)
  • Песочница для стажёров-аналитиков — создан read-only пользователь PostgreSQL dvorec_readonly (только SELECT, statement_timeout 60 сек). Попытка DELETE → permission denied. В Metabase добавлено: подключение «Дворец (read-only)», коллекция «Песочница стажёров», группа «Стажёры» с ограниченными правами. Стажёры могут создавать вопросы/дашборды в своей коллекции, но не могут модифицировать данные или видеть production-контент
  • Скрыты 32 служебные таблицы из Metabase — через скрипт metabase_hide_tables.py в обоих подключениях (admin и read-only) скрыты: AI-ассистент (12 таблиц), VPN-админка (4), CTR-сервис (5), старые wb_api_* (3), бот отзывов служебные (6), мелочи (2). Видимыми остались 31 таблица маркетплейс-аналитики + FIFO v2
  • Обновлена страница db-report — полностью переписан скрипт генерации (deploy_db_report_v2.py): динамическое получение размеров из БД, 10 групп таблиц с описаниями, 5 типов связей (entity, nm_id, barcode, sa_name, campaign_id + FK), разделы доступа и cron-автоматизации. Блоки AI-ассистента и VPN убраны из публичного отчёта
  • Бэкап и безопасность — перед всеми операциями создан бэкап /root/backups/before_cleanup_2026-04-08.dump (132 MB), скачан локально. Все удаления выполнялись в транзакции BEGIN/COMMIT. Проверены все cron-скрипты: collect_daily, collect_ad_stats, collect_wb_extended, review_monitor, load_wb_realization, fifo_auto_update, ctr_collect, ctr_rotate — всё работает, ни одной ошибки «relation does not exist»
08.04.2026 Совещание с Фаридой: смена стратегии БД, анализ SellWise, транскрипция голосовых
  • Совещание с Фаридой — пересмотрена стратегия по новой БД. Создавать dvorec_main с нуля оказалось слишком сложно. Решено: оставаться в dvorec_analytics, сначала почистить от мусора, потом строить новые дашборды. dvorec_main остаётся как backup, не развивается. Обнулить Metabase, строить дашборды с нуля — только самые необходимые
  • Изучен сервис SellWise — Google Apps Script для Wildberries API, которым пользуется аналитик Аня. Получен доступ к таблице «ИП V2 06.01» (80+ листов). Скачано и проанализировано 31 CSV: Продажи (28 колонок: артикул, заказы, выкупы, остатки, оборачиваемость), Свод заказов (3234 строки), Свод по неделям (16109 строк — финотчёт реализации), Свод РК (реклама с CPC, CTR, CR), себес продаж (505 строк по неделям). Сравнение: 95% данных SellWise уже есть в нашей БД
  • Транскрипция голосовых Фариды от 08.04 — расшифрованы 2 голосовых (5382209941673123614.txt, 5382209941673123628.txt). Ключевые пожелания: характеристики товара (ежедневная синхронизация), план развития/анализ продаж (артикул × недели × заказы/продажи/реклама/негативные отзывы), P&L по месяцам, расходы (ручной ввод), себестоимость из «Мой Склад» (тянем готовое, сами не считаем)
  • Подготовлен план Вариант Б — вместо SellWise строим аналог в Metabase: SQL view'хи в dvorec_analytics повторяющие структуру листов SellWise → вопросы Metabase с теми же колонками → дашборд с фильтрами (период, entity, артикул). Пользователь выбрал Metabase вместо Google Sheets — нет задержек, реалтайм данные, единый источник истины
07.04.2026 Загрузка финотчётов Ozon за март 2026 + подготовка списка для Ани
  • Загрузка финотчётов Ozon за март 2026 — обработаны 3 архива RAR с 44 файлами. Из каждого извлечён «Отчет о реализации товара_20260331.xlsx». Структура: 13 колонок (артикул, SKU, штрих-код, реализовано, лояльность, кол-во, цена, возвраты). Загружено в sales_ozon (dvorec_main)
  • Бумбокс Озон март — 902 строки. Получатель: ИП Галимзянова Фарида Шагитовна (ИНН 165915896110). Товары: наклейки (Алфавит_*, Заплатка_*). Реализовано: 351 430₽, возвращено: 7 967₽, нетто: 343 462₽. Совпадает с итогами Excel ✓
  • ИП Озон март — 93 строки. Получатель: ИП Галимзянова Лейсан Наилевна (ИНН 165713474388). Товары: смесители (СДУ КС *, СДК КС *). Реализовано: 465 040₽, возвращено: 5 398₽, нетто: 459 642₽
  • Весна Озон март — 9 строк. Получатель: ООО «ВЕСНА» (ИНН 1686022913). Товары: смесители. Реализовано: 34 406₽, возвращено: 0₽, нетто: 34 406₽
  • Выявлен важный факт — Бумбокс и ИП Галимзянова это РАЗНЫЕ ИП, хоть и одна фамилия: Фарида (наклейки, Бумбокс) vs Лейсан (смесители, ИП). Разные ИНН, разные контракты с Ozon. В БД entity Бумбокс и ИП Галимзянова — разные юрлица
  • Подготовлено сообщение для Ани — список 7 таблиц для сверки по ИП/Весна/Бумбокс: sales_wb (477K строк, окт 2025 — мар 2026), sales_ozon (10.4K, янв 2025 — мар 2026), sales_ym (302, мар 2024 — дек 2025), sales_ke (208), sales_other (989, Мегамаркет), shipments (пусто — ждём Excel от Ани), product_chars (386 + столбец «дубль»). Обращение на «Вы» по пожеланию пользователя
06.04.2026 CTR-сервис: A/B тест фото карточек WB с ротацией и аналитикой
  • Создан CTR-сервис для A/B тестирования фото карточек WB — полный pipeline: загрузка карточек из WB Content API, сбор аналитики (просмотры, корзина, заказы) через WB Analytics v3 (sales-funnel), автоматическая ротация главного фото каждые 30 мин через WB Media API. Организации: ИП (100 карточек) + Весна (80 карточек)
  • Собрана аналитика за 7 дней — ИП: 47 670 просмотров, 3 122 в корзину, 468 заказов. Весна: 39 795 просмотров, 2 064 в корзину, 310 заказов. Данные обновляются автоматически каждые 6 часов
  • Создана админ-панель для менеджераdvorecmasterov.ru/ctr-test/admin/: поиск по артикулу/названию, фильтры ИП/Весна, загрузка вариантов фото (drag & drop), добавление оригинала с WB одной кнопкой, запуск/пауза/завершение тестов. FastAPI бэкенд в Docker
  • Создан дашборд CTRdvorecmasterov.ru/ctr-test/: все 180 карточек с метриками (CTR, добавления в корзину, заказы), мини-графики по дням, фильтрация по организации и статусу. Обновляется каждые 4 часа
  • Инфраструктура на VPS — Docker-контейнер ctr-api (FastAPI, порт 8100), подключён к Nginx через project_default сеть. 5 таблиц PostgreSQL с префиксом ctr_. Cron: сбор */6ч, ротация */30мин, дашборд */4ч
  • Обновлён WB Analytics API — старый эндпоинт /api/v2/nm-report/detail вернул 404. Найден и интегрирован новый: /api/analytics/v3/sales-funnel/products/history (до 7 дней, 20 nmIds, 3 req/min)
04.04.2026 Справочник WB API + подготовка к наполнению новой БД
  • Создан справочник по новому порталу WB для разработчиковdev.wildberries.ru/knowledge-base: полная карта API-документации (12 разделов: товары, 5 типов заказов, маркетинг, коммуникации, тарифы, аналитика, отчёты, финансы). Сохранено в базу знаний проекта для быстрого доступа при разработке скриптов
  • Подготовлен список таблиц для сверки Аней — по итогам совещания сформирован перечень 5 таблиц продаж (sales_wb, sales_ozon, sales_ym, sales_ke, sales_other) + таблица отгрузок (shipments) с описанием, что нужно проверить и какие данные предоставить. Формат обмена: имя файла = имя таблицы + период
  • Описание архитектуры для команды — подготовлено и отправлено в Telegram-группу описание всех 11 таблиц новой БД dvorec_main с разбивкой по блокам: продажи (5), оприходование (1), справочники (2), FIFO расчёт (3)
03.04.2026 Анализ совещания: резюме и план работ по новой БД
  • Расшифровка совещания полностью проанализирована — из 72-минутной записи (1276 строк транскрипта) извлечены все ключевые решения, задачи и требования. Участники: Фарида (руководитель), Аня (аналитик), Анатолий (IT)
  • Сформулированы 4 блока работ — (1) Продажи: 5 таблиц финотчётов по маркетплейсам (WB, Ozon, ЯМ, КЭ, другие). (2) Оприходование: объединение 3 таблиц отгрузок КЗС в одну. (3) Справочники: таблица характеристик с ежедневной синхронизацией + столбец «дубль» + рецептура расходников. (4) FIFO: поштучное списание (не понедельное) с пересчётом себестоимости после каждой единицы
  • Определён процесс работы команды — Анатолий даёт названия таблиц → Аня сверяет данные с её Excel → Аня готовит файлы с историей (имя = название таблицы + период) → Анатолий загружает историю → далее API собирает автоматически. Проверенные таблицы переносятся в новую БД
  • Зафиксированы важные решения совещания — забирать ВСЕ данные из таблиц отгрузок (без фильтрации по 1/2), включить отрицательные движения (влияют на остатки), Мегамаркет + AliExpress объединены в таблицу «другие площадки» с полем «площадка», дубли карточек объединяются через столбец duplicate_of в таблице характеристик
02.04.2026 Расшифровка совещания + создание новой базы данных dvorec_main
  • Расшифровано совещание по новой БД — запись «Встреча в Телемосте 01.04.2026» (72 мин, 279 MB webm) расшифрована через OpenAI Whisper (модель medium, язык ru). Время обработки: 4 ч 42 мин на CPU. Результат: 1276 строк текста, 91 KB. Файл: soveshanie_bd_2026-04-01.txt
  • Создана новая база данных dvorec_main на VPS — в том же Docker-контейнере PostgreSQL (не тратит RAM на новый процесс). 11 пустых таблиц с индексами и комментариями. Права для dvorec_readonly настроены. Старая dvorec_analytics не тронута — все скрипты и дашборды работают
  • Спроектированы 11 таблиц по 4 блокам — Продажи: sales_wb (88 колонок, структура из wb_realization_report), sales_ozon, sales_ym, sales_ke, sales_other (с полем marketplace). Оприходование: shipments (поля include_flag, movement_type, destination). Справочники: product_chars (+ столбец duplicate_of для дублей), bom. FIFO: fifo_receipts, fifo_sales, fifo_report
  • Архитектура: две БД в одном PostgreSQL — dvorec_analytics (старая, 112 таблиц, 1.3 GB) + dvorec_main (новая, проверенные данные). Изоляция без дополнительных ресурсов. Metabase можно постепенно переключать на новую БД
01.04.2026 Критический фикс остатков ФБО + реорганизация Metabase + обзор финотчётов
  • Исправлен критический баг сбора остатков WB — скрипт collect_daily.py использовал dateFrom=вчера в WB API /stocks, из-за чего получал только товары с изменениями за день (~500 позиций). Исправлено на dateFrom=2019-01-01 — теперь собираются ВСЕ остатки. Результат: ИП 2 469 → 8 912 шт, всего WB 8 612 → 39 938 шт, позиций 505 → 7 134
  • Исправлен отчёт ФБОmonthly_fbo_stocks.py: поле quantity заменено на quantity_full (полные остатки вкл. зарезервированные). Cron сдвинут с 00:00 UTC на 05:00 UTC (08:00 МСК) — после сбора данных. Перегенерирован и отправлен в группу «КЗС Рабочая группа» с актуальными данными
  • Реорганизация Metabase — создана новая структура: 3 корневых папки (ИП, Весна, Остальные) × 5 подпапок (Продажи, Реклама, Остатки, Финансы, FIFO). Разнесено 88 элементов из старых папок. Удалено 21 дубликат карточек и дашбордов. Архивированы папки «Свежо», «Примеры», пустые подпапки «продажи». Бумбокс перенесён в «Остальные»
  • Обзор финотчётов по маркетплейсам — проведена инвентаризация: WB финотчёт через API ✅ (460K строк, 11 орг). Ozon — только Excel (10K, 3 орг), API не настроен. ЯМ — только Excel (302 строки, 2 орг). СберММ — только Excel (989, 1 орг). КЭ — только Excel (209, 1 орг)
  • Исправлен баг ENTITY_SIGNATURES бота отзывов — подпись ИП «С уважением, команда Казанские смесители!» была заменена JWT-токеном при обновлении write-токенов. AI вставлял токен в конец ответов. Исправлено, записи перегенерированы
31.03.2026 Ежемесячный отчёт ФБО в Telegram + исправление бота отзывов + замена токенов ИП
  • Автоматический отчёт по остаткам ФБО — создан скрипт monthly_fbo_stocks.py на VPS: 1-го числа каждого месяца (03:00 МСК) выгружает остатки WB + Ozon по всем юрлицам в Excel и отправляет в Telegram-группу «КЗС Рабочая группа». Бот @ap_degen_bot. Тест: WB 505 позиций (7 936 шт.), Ozon 6 505 позиций (98 336 шт.). Каждый файл содержит лист «Сводная» + отдельные листы по организациям
  • Исправлен баг MANAGER_MAP — при замене write-токенов бумбокса скрипт случайно перезаписал chat_id менеджеров JWT-токенами. Telegram не мог доставить сообщения (ошибка «chat not found»). Восстановлены правильные chat_id: ИП+Весна+бумбокс → Дарья (714938396)
  • Исправлен баг ENTITY_SIGNATURES — аналогичная проблема: подпись «С уважением, команда Казанские смесители!» была заменена JWT-токеном. AI добавлял токен в конец каждого ответа по ИП. Исправлено, записи с токеном перегенерированы
  • Исправлена ошибка IndentationError в review_monitor.py — блок логирования ошибок Telegram попал в функцию api_get() с неправильным отступом. Монитор не запускался. Исправлено
  • Добавлены html_escape для всех текстовых полей — экранирование спецсимволов дополнено для: customer_name, supplier_article, advantages, disadvantages. Ранее исправлялись только product_name, customer_text и ai_draft
  • Write-токен ИП (персональный) подключён — обновлены БД-токен в mp_accounts и write-токен в WRITE_TOKENS. ИП может публиковать ответы через бота. Действителен до 28.09.2026
30.03.2026 Исправление бота отзывов + замена WB токенов на персональные + FIFO-таблицы в Metabase
  • Исправлен критический баг бота отзывов — с 29.03 Telegram возвращал 400 Bad Request при отправке сообщений. Причина: текст отзывов и AI-ответов содержал спецсимволы (<, >, &), ломавшие HTML-парсинг Telegram. Добавлена функция html_escape(), улучшено логирование ошибок. 120 застрявших записей переотправлены менеджерам
  • Замена WB API-токенов на персональные — WB переводит всех с базовых на персональные токены. Обновлены 3 кабинета: ИП (БД + отзывы), Весна (БД + отзывы), бумбокс (БД + отзывы). Итого 6 новых токенов в mp_accounts + WRITE_TOKENS. Все действительны до сентября 2026. Ожидаем остальные 8 кабинетов
  • FIFO-таблицы переименованы в Metabase — по запросу Ани: v2-таблицы получили пометку «(v2, актуальная)» для отличия от устаревших v1. Теперь при поиске «v2» в Metabase находятся все 5 актуальных таблиц FIFO
27.03.2026 FIFO ×14 покрытие + документация FIFO + автосбор WB реализации + db-report + артикул в ads-report
  • Критическое исправление FIFO: покрытие выросло в 14 раз — обнаружена проблема регистра артикулов: поступления в ВЕРХНЕМ регистре (СДВ КС 101254), продажи в нижнем (сдв кс 101254). JOIN не находил совпадений. Добавлен UPPER() в 10 местах FIFO SQL. Результат: 512 → 7 192 строки, 4 → 73 SKU за неделю, COGS ИП: 62.4 млн₽ (было 2.4 млн₽)
  • Создана полная документация FIFOdvorecmasterov.ru/fifo-docs/: 7 блоков по ТЗ от Фариды. Источники данных (5 таблиц), формулы с расшифровкой, 6 шагов расчёта, пример на артикуле СДВ КС 101254 (8 недель), исправленные проблемы, инструкция проверки для Ани. Навигация между дашбордами
  • Автосбор WB реализации на VPS — создан load_wb_realization_vps.py (VPS-нативный), cron каждый понедельник 05:00 UTC (08:00 МСК). Загружает reportDetailByPeriod для всех 11 кабинетов, чанки 28 дней, rate limit handling. FIFO запускается следом в 06:00 UTC — данные всегда актуальны
  • Обновлён db-reportdvorecmasterov.ru/db-report/: 112 таблиц, 1.3 GB, 2.7M строк. wb_realization_report: 460K строк (все 11 орг). Критический пробел по реализации закрыт
  • Транскрипция совещания через Whisper — установлен OpenAI Whisper, расшифровано 55-минутное совещание по FIFO (модель base, 799 сегментов). Выявлены ключевые проблемы: мало SKU, непрозрачный расчёт, нет документации — все закрыты
  • Write-токен ИП добавлен — теперь 3 из 11 организаций могут публиковать ответы через бота: ИП + Весна + бумбокс
  • Артикул продавца в ads-report — в таблицу рекламных кампаний ads-report добавлена колонка «Артикул» между «Кампания» и «Орг». Артикул подтягивается из wb_products.vendor_code или wb_realization_report.sa_name по nm_id. Поиск работает и по артикулу
  • Исследование Ozon/YM Finance API — запущено исследование эндпоинтов для загрузки финотчётов Ozon (/v3/finance/transaction/list) и ЯМ через API
26.03.2026 Бот отзывов: автопубликация + пожелания Дарьи + бумбокс + WB Chat API
  • Бот: автопубликация пустых отзывов — отзывы без текста с рейтингом 4-5 автоматически публикуются через WB API без одобрения менеджера. Статус auto_published. Работает для организаций с write-токеном (Весна, бумбокс). Отзывы с рейтингом 1-3 и вопросы — всегда через менеджера
  • Пожелания менеджера Дарьи реализованы — приветствие «Добрый день, {имя}!» в начале каждого ответа, обращение Вы/Вам/Вас с большой буквы, подпись «С уважением, команда Казанские смесители!» для ИП. Имя передаётся без строгой валидации — менеджер проверяет сам перед публикацией
  • Бумбокс подключён к Дарье — добавлен в маппинг менеджеров (ИП + Весна + бумбокс → Дарья, chat_id 714938396). Write-токен бумбокс (scope=128) добавлен в review_monitor.py и review_bot.py. Дарья может публиковать ответы по бумбоксу через бота
  • Исследован WB Buyers Chat API — выяснено: написать покупателю в личку по отзыву через API невозможно. buyer-chat-api.wildberries.ru позволяет только отвечать на чаты, начатые покупателем. Ограничение самого Wildberries, не бота
  • AI генерирует ответы на пустые отзывы — обновлён промпт: если покупатель оставил только оценку без текста или 1 слово/смайлик — AI всё равно генерирует тёплый благодарственный ответ. Ранее такие отзывы пропускались
25.03.2026 Синхронизация статусов отзывов + шаблоны ответов + обращение по имени + улучшения бота
  • Обнаружена и исправлена проблема «459 отзывов зависли в sent» — менеджеры отвечали на отзывы напрямую через WB/SalesArea, а бот не отслеживал это. Добавлена синхронизация статусов: каждые 30 мин review_monitor.py сверяет список неотвеченных с WB API и помечает обработанные как answered_externally. Результат первого запуска: 459 из 491 записей синхронизировано — реально ожидают ответа только 34
  • Дашборд reviews-stats обновлёнdvorecmasterov.ru/reviews-stats/ теперь показывает три канала: бот (12), менеджеры напрямую (459), ожидает (34). Общий % обработки: 93%. Графики и таблица по организациям включают новый статус
  • Система шаблонов ответов — создана таблица response_templates с 10 шаблонами (6 для отзывов, 4 для вопросов). Кнопка «📋 Шаблоны» в каждом сообщении бота → список шаблонов с эмодзи по категориям → предпросмотр с подстановкой имени → публикация/редактирование. Шаблоны поддерживают плейсхолдер {имя}
  • AI обращается к покупателю по имени — из WB API извлекается поле userName, проходит валидацию: нормальное имя (Ирина, Андрей) → обращение по имени; фамилия+имя (Филатова Светлана) → извлекается имя; пустое/цифры/спецсимволы → общий ответ без имени. Имя сохраняется в колонке customer_name
  • Улучшен формат Telegram-сообщений — добавлены: 👤 имя покупателя, 🔗 кликабельная ссылка на карточку WB, артикул в code (копируется тапом), 👁 ссылка на вкладку отзывов/вопросов карточки
  • Исследован WB Buyers Chat API — выяснено: написать покупателю в личку по отзыву через API невозможно. Buyers Chat API (buyer-chat-api.wildberries.ru) позволяет только отвечать на чаты, начатые покупателем. Ограничение самого WB
24.03.2026 Загрузка WB финотчётов всех 11 кабинетов + FIFO до 22 марта + ads-report с ассоциированными заказами
  • Исправлена критическая ошибка загрузки WB финотчётов — скрипт load_wb_realization_2026.py не видел JSON-файл в Docker-контейнере. Причина: SFTP загружает файл на хост VPS, а pg_read_file() читает из файловой системы контейнера. Исправление: добавлен docker cp между SFTP-загрузкой и SQL-вставкой
  • Загружено 215 084 строки WB реализации в таблицу wb_realization_report для всех 11 кабинетов за 2026 год: ИП +46 747, бумбокс +76 325, Книфелд +38 258, Олимп +32 078, Свежо +14 261, Весна +1 596, Ст +5 808 и др. Итого в таблице: 11 организаций, данные до 22.03.2026
  • FIFO v2 пересчитан с актуальными данными — после загрузки WB реализации запущен fifo_auto_update.py: найдено 9 192 новых строки (ИП WB: 4 977 после 2026-02-01, Весна WB: 4 215 после 2025-12-31). Результат: отчёт вырос с 106 до 512 строк, период расширился с 2026-03-08 до 2026-03-22. COGS ИП: 2 429 788₽
  • Исправлена VPS-версия дашборда рекламыgenerate_ads_report_vps.py был устаревшим: использовал поле shks вместо orders_associated. Обновлена SQL-агрегация, JS-логика расчёта прямого/полного CPO, таблица кампаний, summary-бар с «Всего товаров (с ассоц.)». VPS-скрипт синхронизирован с локальной версией и задеплоен
  • Диагностика FIFO «данные до 1 марта» — FIFO-автообновление запустилось 23.03 в 06:01 и нашло 0 строк из wb_realization_report для ИП и Весна, т.к. данные ещё не были загружены. Пустые строки с doc_type_name = NULL — это логистика/хранение/штрафы (правильно фильтруются, не влияют на расчёт)
  • Финотчёт WB теперь собирается автоматическиfifo_auto_update.py (cron пн 09:00) автоматически подтягивает новые данные из wb_realization_report после каждой загрузки. Данные ИП + Весна обновляются каждую неделю
23.03.2026 Переименование таблиц Metabase + запуск загрузки WB реализации + диагностика бота
  • Переименованы все таблицы в Metabase на русский язык — скрипт rename_metabase_tables.py: 105 таблиц получили читаемые названия с категорийными префиксами (WB—, Ozon—, ЯМ—, КЭ—, Финансы—, Реклама—, FIFO—, Бот—, Справочник—, GSheet—, ИП—, Весна—, BP—, Аналитика—, Вью—). В браузере Metabase вместо wb_realization_report теперь отображается «WB — Отчёт реализации (API)»
  • Создан скрипт загрузки WB финотчётов load_wb_realization_2026.py — получает данные через reportDetailByPeriod API для всех 11 кабинетов, чанки по 28 дней, дедупликация через ON CONFLICT DO NOTHING, автоопределение стартовой даты по уже загруженным данным, обработка rate limit (429 → пауза 65 сек)
  • Диагностика review-бота — проверена публикация ответов: подтверждён корректный эндпоинт PATCH /api/v1/feedbacks/answer, HTTP 204 = успех. Отзывы публикуются через @packmen_bot; Дарья (@dasshkfd) работает с ИП и Весна
  • Проверка таблицы wb_realization_report — до загрузки в таблице было только 4 организации (Багира, Олимп, Свежо, Ст). Выявлено: данные ИП и Весна отсутствовали, поэтому FIFO-расчёт утром получил 0 новых WB-строк
  • Запущена первая попытка массовой загрузки — обнаружена ошибка: pg_read_file не находит файл (SFTP пишет на хост, Docker не видит /tmp хоста). Исправление применено в следующую сессию
19.03.2026 Telegram-бот автоответов + ассоциированные заказы + дашборд отзывов + автоматизация 60 задач
  • Создана система автоответов на отзывы и вопросы WB — полный pipeline: мониторинг неотвеченных → генерация AI-ответа (DeepSeek) → отправка менеджеру в Telegram → публикация через WB API одной кнопкой
  • Telegram-бот @packmen_bot (systemd) + review_monitor.py (cron */30). 5 кнопок: Опубликовать, Редактировать, Написать свой, Пропустить, Перегенерировать. Ссылки на карточки WB в каждом сообщении
  • Подключена менеджер Дарья (@dasshkfd) — получает отзывы по ИП и Весна. Маппинг по организациям: ИП+Весна → Дарья, остальные → администратору. Команда /stats — полная статистика только для админа
  • Исправлен баг дублирования — отзывы больше не дублируются каждые 30 минут (проверка INSERT 0 1 вместо INSERT in result)
  • Ассоциированные заказы в ads-reportдашборд рекламы теперь показывает прямой CPO и полный CPO. Выявлено: 55.5% заказов — ассоциированные (покупатель кликнул на рекламу одного товара, купил другой из магазина). CPO полный почти вдвое ниже прямого
  • Двойные рекомендации по рекламе — каждая кампания имеет два статуса: по прямому CPO и по полному CPO. Менеджер видит: если по прямому Stop, а по полному OK — кампания приносит ассоциированные продажи, выключать не стоит
  • Создан дашборд «Статистика отзывов» — KPI обработки (всего/опубликовано/ожидает), динамика по дням, разбивка по организациям, среднее время реакции, топ ожидающих, конверсия публикации, рекомендации
  • Единая навигация на всех 6 дашбордах (Остатки, Издержки, Реклама, P&L, Карточки, Отзывы) — одинаковый бар с inline-стилями, переключение одним кликом
  • Автоматизировано 60 из 102 ручных задачcollect_wb_extended_vps.py (cron 09:00, 6 таблиц), weekly_alerts.py (пн 10:00, токены+сводка+стокауты), review_monitor (*/30). Полный crontab: 12 задач на VPS
  • Найден правильный WB API эндпоинт для ответов: PATCH /api/v1/feedbacks/answer (отзывы) и PATCH /api/v1/questions (вопросы). Старый эндпоинт PATCH /api/v1/feedbacks отключён WB. Код 204 = успех
  • Подключён токен записи Весна (scope=128) — публикация ответов через бота работает. Первые 2 ответа опубликованы на WB. Для остальных кабинетов нужны аналогичные токены с правом «Вопросы и отзывы → Запись»
  • Автообновление reviews-stats — VPS-скрипт generate_reviews_stats_vps.py, cron каждые 6 часов. Дашборд dvorecmasterov.ru/reviews-stats/
  • Блок «Статистика бота» добавлен в дашборд «Здоровье карточек» — KPI обработки, таблица по организациям, 2 графика динамики
18.03.2026 Автоматизация FIFO + 5 аналитических дашбордов для повышения маржинальности
  • Автоматизирован FIFO v2 — создан VPS-скрипт fifo_auto_update.py: автосбор WB реализации через API (reportDetailByPeriod) для ИП + Весна, обновление поступлений/BOM из Google Sheets, пересчёт FIFO. Cron каждый понедельник 09:00 МСК
  • Собрано 50K строк WB реализации — ИП: 25 758, Весна: 24 713. Теперь FIFO использует свежие данные из API автоматически
  • Проведён глубокий анализ БД (1 184 МБ, 93 таблицы) — выявлены точки утечки маржи: удержания 24.2М₽ (10-12% выручки), логистика Бумбокс 22.6%, CPO рекламы ИП/Весна 624/660₽, 2 564 стокаута, 87K шт мёртвого стока
  • Создан дашборд «Управление остатками» — стокауты (красный), мёртвый сток (оранжевый), дни запаса по каждому SKU. WB + Ozon, фильтры по МП/организации/статусу. Cron ежедневно 11:00 МСК
  • Создан дашборд «Удержания и издержки» — разбор 24.2М₽ удержаний по типам операций, тренд по месяцам, % от выручки по организациям. Cron понедельник 12:00 МСК
  • Создан дашборд «P&L по организациям» — прибыли и убытки 5 организаций WB + 3 Ozon: выручка 362М₽, маржа 76.4%, структура расходов (логистика, удержания, хранение, комиссия). Cron понедельник 13:00 МСК
  • Создан дашборд «Здоровье карточек» — 266K отзывов, средний рейтинг 4.83, 30 товаров с рейтингом ниже 4.5, тренд по месяцам, неотвеченные вопросы. Cron понедельник 14:00 МСК
  • Общее меню навигации добавлено на все 5 дашбордов (Остатки, Издержки, Реклама, P&L, Карточки) — переход между отчётами одним кликом
  • Блок «Рекомендации» добавлен на каждый дашборд — конкретные действия для сокращения расходов и увеличения прибыли, основанные на реальных данных
  • Обновлены db-report (актуальные цифры БД) и прогресс-страница (ссылка на ads-report в «Доступы к сервисам»)
17.03.2026 FIFO v2 + BOM: расчёт себестоимости с списанием расходников
  • Получено и разобрано ТЗ на FIFO v2 + BOM — расчёт себестоимости по FIFO с недельной агрегацией + автоматическое списание расходников (коробки, ключи, удлинители) при продаже смесителей. Источники: 5 Google Sheets + PostgreSQL
  • Создан скрипт scripts/setup_fifo_v2.py — полный pipeline: загрузка поступлений из 3 вкладок (отгрузки с КЗС ИП, Весна, 2026) + продажи из 6 источников (WB fin_wb, Ozon ИП/Весна, ЯМ ИП/Весна, КЭ) + BOM расходников
  • Загружено 4 684 поступления (ИП: 3 732, Весна: 333) и 38 731 продажа (WB ИП: 30 593, WB Весна: 7 700, Ozon: 214, ЯМ: 15, КЭ: 209) в 5 новых таблиц PostgreSQL
  • 22 BOM-правила с версионностью (дата начала / дата окончания) — при продаже смесителя автоматически списываются расходники по активным правилам периода
  • FIFO-расчёт: 486 строк (136 SKU × 98 недель). COGS ИП: 2 338 399₽, Весна: 22 155₽. Используется SQL с 6 CTE: FIFO-слои → продажи по неделям → BOM-списание → объединённый поток → накопительные суммы → FIFO-формулы
  • Создан Metabase дашборд (dashboard #16) — 5 карточек: себестоимость по неделям, текущий себес товаров, тренд COGS, непокрытые продажи, состав BOM
  • Исправлены баги: entity 'ИП Галимзянова' → маппинг в 'ИП', фильтр doc_type IN ('Продажа','Возврат'), timeout для SSH-подключения, visualization_settings в Metabase API
  • Загружены недостающие финансовые данные в БД — Бумбокс Ozon янв-фев 2026 (+1 524 строки, итого 8 641), ЯМ ИП янв-фев 2026 (+35 строк), ЯМ Весна янв-фев 2026 (+5 строк). Бумбокс Ozon теперь покрывает 01.01.2025–28.02.2026
16.03.2026 Подготовка FIFO v2 — анализ структуры и доступность данных
  • Изучена структура 5 Google Sheets: поступления (3 вкладки), продажи Ozon/ЯМ/КЭ (5 вкладок), BOM расходников — определены колонки для каждого источника
  • Проверена доступность Google Sheets через gviz API (публичный доступ): все 6 вкладок ФО для БД + 3 вкладки поступлений доступны без авторизации
  • Составлен детальный план реализации FIFO v2: 8 задач от DDL до Metabase, сохранён в docs/plans/2026-03-14-fifo-bom.md
  • Проведён аудит таблицы fin_wb — определён маппинг entity: 'ИП Галимзянова' → 'ИП', 'ООО Весна' → 'Весна'. Найден фильтр doc_type IN ('Продажа','Возврат') для исключения строк комиссий
  • Подготовлены DDL для 5 новых таблиц: fifo_v2_receipts, fifo_v2_sales, fifo_v2_bom, fifo_v2_sku_mapping, fifo_v2_weekly_report
15.03.2026 Разработка ТЗ FIFO + BOM и парсеры Google Sheets
  • Получено и детально разобрано ТЗ на расчёт себестоимости по FIFO с BOM-списанием расходников — 6 шагов расчёта, формулы, правила версионности BOM
  • Определены источники данных: поступления из таблицы «Продажи ИП Галимзянова», продажи — fin_wb (WB API) + файл «ФО для БД» (Ozon/ЯМ/КЭ), состав расходников — вкладка «состав расходников»
  • Разработан парсер fetch_gsheet() для загрузки данных из Google Sheets через gviz API: обработка JSONP-ответа, парсинг дат Date(2026,0,1) (JS-формат с 0-based месяцами)
  • Написана логика load_receipts() — загрузка поступлений из 3 вкладок с разной структурой колонок (ИП: C/E/G/H/K, Весна: то же, 2026: A/D/F/M/R)
  • Проведён анализ BOM-таблицы — 22 правила списания расходников с версионностью (дата начала/конца), формула WeekEnd для привязки к неделям
14.03.2026 Оптимизация рекламы + подготовка к FIFO
  • Проверена корректность рекламного дашборда dvorecmasterov.ru/ads-report/ — фильтры период/организация, автообновление 21:00 МСК
  • Анализ эффективности рекламных кампаний — выявлено 7 кампаний ИП с нулевыми заказами (расход 25K₽), сформированы рекомендации к отключению
  • Написана логика load_sales() для FIFO v2 — загрузка продаж из 6 источников: WB из fin_wb (с маппингом entity), Ozon ИП/Весна, ЯМ ИП/Весна, КЭ ИП. Каждый источник со своей структурой колонок
  • Разработан SQL FIFO-расчёта с 6 CTE: fifo_layers → fifo_layers_full → sales_weekly → consumable_outflow → combined_outflow → outflow_cumulative → calc. Формула: sold_from_layer = LEAST(qty_in, GREATEST(0, cum_out - cum_in_prev))
  • Подготовлена интеграция с Metabase API — 5 карточек для дашборда FIFO: себестоимость по неделям, текущий себес, тренд COGS, непокрытые продажи, состав BOM
13.03.2026 Получение ТЗ + настройка сбора рекламы для всех кабинетов
  • Обсуждены приоритеты — решено начать с реализации ТЗ по расчёту себестоимости FIFO + BOM (запрос от команды)
  • Получены ссылки на 5 Google Sheets с исходными данными: таблицы поступлений (2 файла), финотчёты для БД, расчёт списания расходников
  • Расширен collect_ad_stats.py — добавлен сбор бюджетов кампаний, обновление статусов. Фильтр по организациям (ИП + Весна)
  • Проверена работа автоматического сбора: cron 3 раза в день (08/14/20 МСК), 17 040 строк в ad_daily_stats
  • Обновлена прогресс-страница: добавлен блок «Доступы к сервисам», ссылка на рекламный дашборд
12.03.2026 Анимированный HTML-дашборд рекламы — полная реализация
  • Создан анимированный дашборд dvorecmasterov.ru/ads-report/ — CPO-аналитика ИП+Весна: тёмная тема, ApexCharts, 5 KPI-карточек, 3 графика (тренд по неделям, CPO по дням недели, scatter-карта кампаний), блок рекомендаций 🔴🟡🟢, сортируемая таблица
  • KPI-карточки сравниваются с предыдущим аналогичным периодом (▲▼ динамика). Ключевой инсайт: Вторник — лучший день для рекламы (CPO 596₽), Понедельник — худший (CPO 891₽) — разница 33%
  • Фильтр по периоду: кнопки 7/14/30/60/90 дней + произвольный диапазон. 1277 строк данных встроены в HTML, вся агрегация на клиенте — переключение мгновенное без перезагрузки
  • Фильтр по организации: «Все» / «ИП» / «Весна» — средний CPO считается отдельно для каждой организации, сравнение корректное
  • Улучшен алгоритм классификации: новый статус ⏳ «Мало данных» (менее 7 активных дней) — кампания не получает рекомендаций до накопления достаточной статистики
  • Автообновление через cron: VPS-скрипт запускается ежедневно в 21:00 МСК (через час после последнего сбора данных). Логи: /root/logs/ads_report.log
  • Metabase: рекламный дашборд добавлен в закладки — теперь отображается в разделе «ЗАКЛАДКИ» в левой панели навигации
  • Исправлена ошибка URIError в браузере — кириллица в именах серий ApexCharts ломала SVG-движок. Имена серий переведены в ASCII
11.03.2026 Планирование HTML-дашборда рекламы + анализ ApexCharts
  • Проанализированы варианты визуализации рекламной аналитики вне Metabase — выбран ApexCharts (scatter, area, bar) + статический HTML с встроенными данными
  • Спроектирована архитектура дашборда: генерация HTML на Python → деплой через SFTP на VPS → nginx. Все данные встраиваются в HTML как JSON — работает без бэкенда
  • Изучены ограничения Metabase для CPO-анализа: нет scatter-графиков, нет условной раскраски строк таблицы — решено делать отдельный HTML-дашборд
10.03.2026 Рекламный дашборд Metabase + исправление nm_id + DRR
  • Создан рекламный дашборд в Metabase для ИП + Весна — 14 карточек: 5 KPI-скаляров, 4 графика, 5 таблиц
  • KPI: общий расход (571K), заказы (519), CPC (23₽), CPO (1100₽), DRR 0.9-1.1% — отличный показатель
  • DRR-аналитика: 3 карточки — DRR скаляр, DRR по дням (линия), DRR по организациям (ИП 0.9%, Весна 1.1%)
  • Исправлен критический баг nm_id=0 — API возвращает ключ nms, а не nm. Теперь собирается детализация по каждому товару: 291 уникальный артикул
  • Карточка «Топ-30 товаров по расходу» с названиями из wb_products — видны конкретные смесители, душевые системы, их CPC/CR/CPO
  • Расширен сбор рекламы на все 11 организаций (было только ИП + Весна). Cron продолжает собирать 3 раза в день
  • Проведена полная аналитика рекламы: выявлены 7 кампаний с 0 заказами (слив 25K₽), 5 кампаний с CPO >3000₽, 7 лучших кампаний с CPO <1000₽
  • Все фильтры «Дата с» / «Дата по» подключены ко всем 14 карточкам
09.03.2026 Завершение Metabase дашборда рекламы + DRR-метрика
  • Завершена разработка рекламного дашборда Metabase — итого 14 карточек: 5 KPI-скаляров, 4 графика, 5 таблиц
  • Добавлена DRR-метрика (доля рекламных расходов от выручки): ИП — 0.9%, Весна — 1.1%. Норма для маркетплейсов <3% — показатель отличный
  • 3 отдельные карточки для DRR: скаляр, динамика по дням (линейный график), разбивка по организациям
  • Подключены глобальные фильтры «Дата с» / «Дата по» ко всем 14 карточкам дашборда
  • Проверка корректности данных: сопоставление цифр с кабинетом WB — расхождений не выявлено
08.03.2026 Исправление nm_id + детализация по товарам
  • Обнаружен и исправлен критический баг nm_id=0 — WB API возвращает массив nms, а не поле nm. Исправлен парсер в collect_ad_stats.py
  • После исправления собрана полная детализация: 291 уникальный артикул с данными по расходу, показам, кликам и заказам
  • Создана карточка «Топ-30 товаров по расходу» — названия подтягиваются из wb_products: конкретные смесители, душевые системы, их CPC/CR/CPO
  • Выявлены товары с нулевой конверсией — кандидаты на оптимизацию ставок
07.03.2026 Построение первых карточек Metabase рекламы
  • Начата разработка рекламного дашборда в Metabase — SQL-запросы для KPI-скаляров (расход, заказы, CPO, CPC, CTR)
  • Созданы таблицы по кампаниям: расход, заказы, CPO по каждой кампании с сортировкой
  • Добавлены линейные графики динамики расхода и CPO по дням — первая визуализация накопленных данных
  • Проверен охват данных: 86 кампаний ИП (332K₽ расход, 329 заказов) + 37 кампаний Весна (211K₽, 172 заказа)
06.03.2026 Анализ первых данных рекламной статистики
  • Первый анализ накопленных данных ad_daily_stats — изучение структуры, проверка корректности сбора
  • Выявлены аномалии: ряд кампаний с нулевыми заказами при значительном расходе, разброс CPO от 200₽ до 5000₽+
  • Определена структура будущего Metabase дашборда: KPI-блок, динамика, детализация по кампаниям и товарам
  • Проверена стабильность cron-сбора — все 3 запуска в день проходят без ошибок
05.03.2026 Импорт финансов Ozon/ЯМ + сбор рекламы WB + безопасность
  • Загружены финансовые данные Ozon для ИП и Весна — извлечены 3 RAR-архива (131 файл XLSX): ИП 2025 (12 мес), ИП 2026 (янв-фев), Весна 2026 (янв-фев). fin_ozon: +200 строк, итого 8855
  • Загружены финансовые данные ЯМ для ИП и Весна — 2 Excel-файла (5 горизонтальных секций × 109 колонок). fin_ym: 262 строки (ИП + Весна, мар 2024 — дек 2025)
  • Создан скрипт сбора рекламной статистики WBcollect_ad_stats.py на VPS, cron 3 раза в день (08/14/20 MSK). WB Advert API v3: fullstats по кампаниям. Первые 5098 строк в ad_daily_stats
  • Загружены продажи КЭ (Купер) для ИП — 209 заказов, 101 SKU, выручка 427K₽ за март 2024 — февраль 2026. Таблица ke_sales
  • Создан глобальный .env — все пароли и API-ключи вынесены из кода в домашнюю папку. Обновлено 10 скриптов. Глобальный CLAUDE.md загружает .env автоматически в каждом проекте
  • Удалён OpenClaw с VPS (уязвимости, не используется). Сохранены API-ключи n8n для будущей интеграции
04.03.2026 Анализ пробелов в данных + лимиты WB API
  • Проведён полный аудит финансовых таблиц — определены пробелы по каждой организации: fin_wb (5 из 11 орг.), fin_ozon (3 из 11), fin_ym (2 из 11)
  • Получены 5 новых файлов от команды: 3 RAR-архива с отчётами Ozon (ИП 2025, ИП 2026, Весна 2026) + 2 Excel с данными ЯМ (ИП + Весна за 2024-2025)
  • Исследованы лимиты WB API по историческим данным: продажи/заказы — макс. ~3 месяца назад, отзывы/товары — без ограничения, платное хранение — 7 дней
  • Вывод: для исторических финансовых данных WB нужны Excel-выгрузки из личного кабинета — через API доступны только последние 3 месяца
  • Составлен план загрузки данных на 05.03: парсинг Ozon XLSX (2 формата) + ЯМ (5 секций), скрипт загрузки в PostgreSQL
03.03.2026 Фильтры поиска на FIFO-дашборде + анализ AI-библиотеки ответов
  • Добавлены 3 интерактивных фильтра на дашборд FIFO в Metabase: «Артикул» (поиск по вхождению), «Дата с», «Дата по»
  • Фильтры работают через template-tags синтаксис Metabase: [[AND sku_group ILIKE '%' || {{sku_filter}} || '%']] — условие необязательное, без ввода показываются все данные
  • Фильтр артикула подключён к 3 карточкам (Себестоимость, Текущий себес, Непокрытые), фильтр периода — к 3 карточкам (Себестоимость, Тренд COGS, Непокрытые)
  • Написан и выполнен скрипт scripts/add_fifo_filters.py — обновляет SQL 4 карточек и параметры дашборда через Metabase API
  • Проведён детальный анализ задачи #4 «AI библиотека ответов» — RAG-система для автоответов на вопросы покупателей WB/Ozon
  • Определены этапы: база знаний (JSON по товарам), pgvector-индекс, генерация через GPT-4o, интерфейс для менеджеров, автопубликация через API маркетплейсов
  • Оценка сроков: MVP (Telegram-бот) — 6–8 дней, полная версия с веб-интерфейсом — 10–13 дней
02.03.2026 Анализ покрытия FIFO + планирование следующих задач
  • Проверены результаты FIFO-расчёта: период данных 28.04.2024 — 01.03.2026, 827 строк, 262 SKU, COGS 18.68M₽
  • Выявлены 3 артикула без поступлений (uncovered): «Излив 20 см плоский», «докомплект», «KC 421127» — требуется уточнение у команды
  • Принято решение о расширении FIFO на другие организации (сейчас только ИП Галимзянова) — нужны данные о закупках по Весна и другим
  • Проведён анализ приоритетов: следующие задачи — фильтры дашборда FIFO, дашборды по запросам команды (#7), AI-библиотека ответов (#4)
  • Проверен статус сбора данных: WB 10/11 OK, Ozon 10/11 OK (Багира 403), YM 7/9 OK — всё штатно
01.03.2026 Ревью дашбордов + обновление документации
  • Проведён ревью всех текущих дашбордов Metabase: FIFO, P&L, Аналитика WB — проверена корректность отображения данных
  • Составлен список доработок дашборда FIFO: нужны фильтры по артикулу и периоду, увеличить лимит строк с 200 до 500
  • Обновлена документация по FIFO в базе знаний: добавлены описания таблиц fifo_receipts, fifo_sku_mapping, fifo_weekly_report
  • Проверена работа AI-агента @openclowdm_bot — отвечает на запросы по базе данных корректно
  • Собраны вопросы команды по работе с дашбордами — запланировано обучение (задача #6) после завершения основных дашбордов
28.02.2026 FIFO-дашборд в Metabase + обновление прогресса
  • FIFO-дашборд перемещён в коллекцию «ИП + Весна» — теперь доступен всем участникам группы (был скрыт в корне без коллекции)
  • Заархивированы 2 дублирующих дашборда (id=11, 12), оставлен актуальный id=13
  • Исправлен скрипт setup_fifo.py: все создаваемые карточки и дашборды теперь сразу помещаются в коллекцию «ИП + Весна» (collection_id=7)
  • Обновлена страница прогресса — добавлены 3 пропущенных дня (26, 27, 28 февраля)
27.02.2026 FIFO-расчёт себестоимости — полная реализация
  • Реализован FIFO-расчёт себестоимости для ИП Галимзянова — от ТЗ до рабочего дашборда в Metabase
  • Создан скрипт scripts/setup_fifo.py: создание 3 таблиц PostgreSQL, загрузка поступлений, расчёт FIFO, публикация дашборда
  • 3 новые таблицы: fifo_receipts — поступления товара, fifo_sku_mapping — маппинг дублирующих артикулов, fifo_weekly_report — итоговый отчёт по неделям
  • Выявлен и исправлен баг: поле quantity в wb_daily_sales для ИП равно NULL — каждая строка = 1 единица. Исправлено: вместо ABS(quantity) используется 1/-1 по префиксу sale_id (S = продажа, R = возврат)
  • Скачано полное содержимое листа «поступления» из Google Sheets через Playwright + clipboard: 4748 строк (фев 2024 — фев 2026), сохранено в data/fifo_receipts_full.tsv
  • Результаты FIFO-расчёта: 827 строк отчёта, 262 уникальных SKU, покрытие 97.3% (9822 из 10095 шт)
  • Общий COGS ИП: 18 680 383₽ за весь период. Топ по себестоимости: СДВ КС 203254 (1.3M), СДВ КС 89007254 (994K), СДВ КС 103254 (943K)
  • Только 11 строк с uncovered — 3 артикула без поступлений в БД: «Излив 20 см плоский», «докомплект», «KC 421127»
  • Дашборд «FIFO тест — ИП себестоимость» опубликован в Metabase, коллекция «ИП + Весна»: 4 карточки (недельный COGS, текущий себес, тренд, непокрытые продажи)
26.02.2026 DokuWiki навигация + анализ ТЗ по себестоимости FIFO
  • Добавлена навигация на все страницы DokuWiki — в конце каждой из 7 страниц документации Metabase появились кнопки «← Назад» и «Вперёд →»
  • Обновлена главная страница wiki — добавлен раздел «Инструменты и аналитика» со ссылкой на документацию Metabase
  • Обновлен sidebar DokuWiki — добавлен блок «Аналитика» с прямыми ссылками на Metabase и его инструкцию
  • Получено и проанализировано ТЗ по расчёту себестоимости FIFO: документ docs/тз расчёт себеса.docx (661 строка)
  • ТЗ описывает полную методологию FIFO: формулы послойного расчёта, структуру таблиц (поступления, Продажи, FIFO_Слои, Отчёт_FIFO), SQL-реализацию
  • Ключевая формула FIFO: sold_from_layer = LEAST(qty_in, GREATEST(0, cum_out - cum_in_prev))
  • Подготовлен план реализации: PostgreSQL-таблицы, SQL с 6 CTE, дашборд Metabase
  • Анализ сохранён в базе знаний проекта: memory/fifo_project.md
25.02.2026 Исправление Metabase + фильтр периода в P&L
  • Исправлены 4 сломанные карточки Metabase с ошибкой column does not exist
  • Карточки #85, #92 «Заказы WB»: price_with_disc в wb_daily_orderstotal_price (колонка есть только в wb_daily_sales)
  • Карточки #84, #91 «Финансовая сводка WB»: retail_amountretail_price, ppvz_for_payto_seller, delivery_rubdelivery_cost (это колонки wb_realization_report, а не fin_wb)
  • Все 4 карточки проверены через API — статус completed, данные возвращаются корректно
  • Добавлен фильтр периода в дашборд P&L — теперь можно выбирать нужный период
  • Два виджета на дашборде: «Начало периода» и «Конец периода» с datepicker
  • Фильтры подключены к 5 карточкам: P&L сводка, помесячный тренд, структура затрат, выручка по орг., топ-30 товаров
  • SQL-запросы обновлены с [[AND date_start >= {{start_date}}::date]] — фильтр опциональный (без выбора — все данные)
  • Данные в fin_wb охватывают дек 2024 — дек 2025 (5 организаций: ИП, Весна, Свежо, Книфелд, Бумбокс)
24.02.2026 (вечер) AI-агент OpenClaw + обновление базы знаний
  • Развёрнут AI-агент OpenClaw v2026.2.23 на VPS — AI-аналитик компании в Telegram
  • Telegram-бот @openclowdm_bot: принимает вопросы на русском языке, выполняет SQL-запросы к базе данных
  • OpenClaw работает как systemd-сервис (~340 MB RAM), модель GPT-4o, Telegram-канал (polling)
  • Создан read-only PostgreSQL-пользователь dvorec_readonly для безопасного доступа бота к БД
  • Установлен postgresql-client на хосте VPS — бот выполняет psql напрямую (не через Docker)
  • Написан IDENTITY.md — полная документация по 15 таблицам БД с правильными именами колонок, примерами SQL, правилами безопасности
  • Исправлены ошибки в именах колонок: ppvz_for_pay→to_seller, sale_dt→sale_date, nm_id→wb_article и др. — бот теперь корректно строит SQL
  • Скрипт update_openclaw_identity.py — обновляет IDENTITY.md на VPS и перезапускает gateway
  • Обновлена вся база знаний проекта: MEMORY.md, db_schema.md (93 таблицы, 1013 MB), debugging.md, api_endpoints.md, api_keys.md
  • Актуализированы данные: подсчитаны реальные строки по всем 93 таблицам, обновлены названия колонок
  • Добавлены заметки по отладке OpenClaw: password escaping, IDENTITY.md vs config.json, psql на хосте
24.02.2026 Новые API-эндпоинты + VPS-апгрейд + изоляция данных
  • Сбор 8 новых WB-эндпоинтов по всем 11 кабинетам: поставки, FBS-заказы, FBS-поставки, склады, карточки, цены, тарифы палет, тарифы возвратов
  • Создано 8 новых таблиц: wb_incomes (11K), wb_fbs_orders (6.5K), wb_fbs_supplies (6K), wb_warehouses (16), wb_cards (9.2K), wb_prices_v2 (9.7K), wb_tariffs_pallet, wb_tariffs_return
  • Итого собрано ~42K записей по новым эндпоинтам за один прогон
  • VPS апгрейд: RAM 2 GB → 4 GB. Все 9 контейнеров Docker перезапустились автоматически, swap-использование упало до 0
  • Отчёт покрытия данных: полная статистика по 32 таблицам × 11 организаций. Выявлены пробелы: fin_wb отсутствует для 8 орг., wb_realization для 7 орг.
  • Изоляция данных — 3 PostgreSQL-схемы с view-фильтрами: ip_vesna (ИП+Весна+ИП Галимзянова), svezho (8 компаний), bumboks
  • Каждая схема: 86 views (31 с фильтром entity + 55 общих). 3 отдельных DB-пользователя с SELECT-only
  • Подключены 3 новых источника в Metabase (DB id=3,4,5). Создана группа и коллекция Бумбокс
  • Права Metabase (free-tier): legacy-no-self-service + no queries для All Users, query-builder для каждой группы к своей БД
  • Права на коллекции: каждая группа видит только свою коллекцию (ИП+Весна, Свежо, Бумбокс)
23.02.2026 Проверка расширенного API + обнаружение новых эндпоинтов
  • Аудит WB API — проверены все доступные эндпоинты для 11 кабинетов
  • Обнаружены 8 новых эндпоинтов WB Statistics/Marketplace API: incomes, FBS orders, FBS supplies, warehouses, cards (Content API v2), prices v2, tariffs (pallet + return)
  • Проверена доступность Content API v2: cursor-based пагинация с nmID + updatedAt, 100 items/page
  • Marketplace API v3: FBS orders/supplies используют next cursor с limit=1000
  • Statistics API v1: incomes endpoint, rate limit 1 req/min per account
  • Подготовлен скрипт collect_wb_new_endpoints.py для массового сбора данных на следующий день
22.02.2026 Сбор реализации WB + руссификация Metabase
  • Запущен сбор WB-реализации (collect_wb_realization.py) по всем 11 кабинетам с 29.01.2024
  • Собрано 187K строк реализации для 4 организаций (ИП, Весна, бумбокс, Свежо). Остальные 7 — данные подгрузятся позже
  • Руссификация Metabase: скрипт russify_metabase2.py переименовал технические колонки в русские названия
  • Колонки wb_daily_sales, wb_daily_orders, wb_daily_stocks, ozon_daily_orders, ozon_daily_stocks, ym_daily_orders — все переименованы
  • Проверка данных: WB 10/11 OK, Ozon 10/11 OK (Багира 403 — проблема с API), YM 7/9 OK
21.02.2026 Обновление WB-токенов (бумбокс, Весна, ИП)
  • Обновлены WB-токены для 3 кабинетов от Анны Шебаршовой: бумбокс, Весна, ИП
  • Ранее обновлено 7 токенов (Ст, Олимп, Багира, Книфелд, Свежо, Банззанас, Кухсити). Итого 10 из 11
  • Оставшийся без обновления: Блюпинк — токен не предоставлен
  • Новые токены действуют до июня-августа 2026 (старые истекали 23.02.2026)
  • Обновлена таблица mp_accounts с новыми ключами для всех обновлённых кабинетов
20.02.2026 DokuWiki — база знаний компании
  • Развёрнута DokuWiki в Docker-контейнере на VPS (порт 6875, ~50 MB RAM)
  • Настроен SSL-сертификат Let's Encrypt для wiki.dvorecmasterov.ru
  • Исправлена проблема авторизации: настроен users.auth.php и acl.auth.php через SFTP
  • Nginx server block: proxy_pass к DokuWiki через Docker network (project_default)
  • Структура: главная страница с навигацией по разделам (Продукты, Маркетплейсы, Компания, Онбординг, FAQ)
  • Права доступа: все сотрудники — чтение, только admin — редактирование
19.02.2026 Разграничение доступов Metabase + отчёт по БД
  • Разграничение доступов Metabase — 2 группы, 2 пользователя, 4 дашборда
  • Аня Фельд (annyfeld1@gmail.com): группа «ИП + Весна» — видит только данные по ИП и Весна
  • Карима Хакимуллина (hakmelinda@gmail.com): группа «Остальные компании» — 9 организаций (Ст, Олимп, Багира, Книфелд, Свежо, Банззанас, Кухсити, Блюпинк, бумбокс)
  • Для каждой группы создано 2 дашборда: «Сводка по маркетплейсам» (5 карточек) и «Реклама и продвижение» (2 карточки)
  • Карточки дашбордов: фин. сводка WB, заказы WB, остатки WB, отзывы WB, остатки Ozon, рекл. кампании, платное хранение
  • Все SQL-запросы фильтрованы по entity — каждый видит только свои организации
  • Безопасность: «All Users» заблокирован, доступ к SQL закрыт (только query-builder), каждая группа видит только свою коллекцию
  • Создан полный отчёт по БД для команды: 78 таблиц, матрица организаций, связи, 10 идей дашбордов
18.02.2026 Полный отчёт по базе данных для команды
  • Создан полный отчёт по БД — интерактивная веб-страница для команды
  • 78 таблиц, 818 MB, ~1.5M строк — полная инвентаризация всех данных в базе
  • 7 разделов отчёта: архитектура системы, все таблицы, матрица по организациям, связи между таблицами, идеи дашбордов, пробелы, источники данных
  • Матрица данных: 11 организаций × 11 типов данных — наглядно видно, у кого что загружено
  • 5 ключевых связок между таблицами: entity, nm_id, supplier_article, barcode, campaign_id
  • 10 идей для дашбордов: P&L, юнит-экономика, воронка продаж, реклама, остатки, отзывы, хранение, сравнение МП, KPI менеджеров, cash flow
  • Выявлен критический пробел: 6 из 11 организаций (Ст, Олимп, Багира, Банззанас, Блюпинк, Кухсити) без финансовых данных WB
  • Обновлена база знаний проекта: MEMORY.md, db_schema.md — актуализировано до 78 таблиц
17.02.2026 Полная загрузка WB-данных через API
  • Создан скрипт collect_wb_extended.py — расширенный сбор данных WB через API по всем 11 кабинетам
  • Создано 8 новых таблиц в PostgreSQL: wb_feedbacks, wb_questions, wb_advert_campaigns, wb_advert_stats, wb_tariffs, wb_products, wb_prices, wb_paid_storage
  • Отзывы: 266,414 записей. Лидеры: Ст (66K), Олимп (49K), Книфелд (28K), Кухсити (26K)
  • Вопросы: 21,743 записи. Лидер: бумбокс (10K), Ст (2.3K), Свежо (2.1K)
  • Рекламные кампании: 3,612 кампаний. Лидеры: Свежо (1,249), Книфелд (1,019)
  • Тарифы WB: 7,362 категории с комиссиями (kgvp_marketplace, kgvp_supplier, paid_storage)
  • Карточки товаров: 3,589 SKU. Лидер: бумбокс (2,800), Свежо (257), Книфелд (143)
  • Платное хранение: 34,741 записей за 7 дней. Лидер: бумбокс (19K), Свежо (5.9K)
  • Итого загружено: ~338K новых записей за 110 минут по всем 11 аккаунтам
  • Обнаружены лимиты API: fullstats (400 при >100 кампаний), questions (422 при skip>10K)
  • Обновлена база знаний: MEMORY.md, db_schema.md — 46 таблиц, ~700 MB
16.02.2026 Интеграция ответов команды в план
  • Проанализирована операционная таблица компании (61 вкладка, 34 МБ) — ответы на все 49 вопросов
  • Структура: 3 подразделения, 11 юрлиц (ИП Галимзянова + Свежо + Bum&Box)
  • Масштаб: Bum&Box — 8338 SKU на WB, Свежо 257, Книфелд 143. Всего ~22K заказов/мес на WB
  • Приоритет #1: автоматизация задач + аналитика. Цель — через месяц полная БД + дашборды
  • Ручной труд: 4-5 часов/день по всем сотрудникам, выявлено 103 задачи для автоматизации
  • Финансы: Google Sheets + 1С:Фреш, себестоимость по ФИФО, нужна максимальная детализация (день/товар)
  • Реклама: 6 млн/мес бюджет, 10% от продаж в юнит-экономику, активно по смесителям
  • Битрикс24: базовый тариф, 30 юзеров, только задачи+чат+телефония, админ — Шебаршова
  • ЯМ: планируют уходить — снижен приоритет интеграции
  • Обновлена презентация: все 49 вопросов с ответами (v2.0)
  • Перестроен план: 4 фазы, 16 задач. Приоритизация на основе ответов команды
15.02.2026 P&L дашборд в Metabase
  • Создан дашборд «P&L — Прибыли и убытки» в Metabase (ссылка)
  • Создана коллекция «Финансовый анализ (P&L)» с 7 карточками
  • P&L сводка по организациям: GMV, к перечислению, логистика, хранение, приёмка, штрафы, удержания, маржа (74-79%)
  • Помесячный тренд: выручка и затраты за 17 месяцев (авг 2024 — дек 2025)
  • Структура затрат WB: логистика 33%, комиссия 29%, удержания 28%, хранение 10%
  • Выручка по организациям: ИП 132M, Книфелд 52M, Свежо 44M, Весна 25M, Бумбокс 23M
  • Сравнение маркетплейсов: WB 277M, Ozon 11M, SMM/KE/YM <1M
  • Расходы на рекламу WB: ~2M/мес, ДРР 16-19%, заказы от рекламы ~11M/мес
  • Топ-30 артикулов по прибыли: лидер — душевая система КС 8114 (GMV 14.5M, маржа 76%)
  • Верификация данных fin_wb: проверены все 768K строк, ключевые поля и payment_reason
  • Исправлены формулы P&L: структура затрат через payment_reason, корректный расчёт маржи
14.02.2026 Загрузка сводных таблиц Google Sheets
  • Скачана и проанализирована главная таблица Джем (ИП Галимзянова): 73 вкладки, 21 МБ
  • Загружено 10 таблиц из Джем в БД: финотчёты, заказы, продажи, реклама, хранение, поставки, возвраты
  • gsheet_wb_realization: 58,608 строк — финансовые отчёты WB (нояб 2025 – фев 2026)
  • 24,098 новых строк за январь-февраль 2026 — этих данных не было в fin_wb!
  • Сверка с fin_wb: количество строк за нояб-дек 2025 совпало (34,510 = 34,510)
  • gsheet_product_chars: 386 товаров с кросс-артикулами WB/Ozon/ЯМ/KE/SMM
  • gsheet_wb_ad_stats: 13,795 строк статистики рекламных кампаний
  • Скачана и проанализирована таблица ИП+Весна: 70 вкладок, 14 МБ
  • Загружено 15 таблиц из ИП+Весна: отгрузки КЗС, банк, расходы, налоги, ABC, юнит-экономика
  • ip_kzs_shipments: 4,862 отгрузки с завода (ИП) + vesna_kzs_shipments: 3,194 (Весна)
  • ip_bank_statements: 3,815 банковских операций, ip_bank_receipts: 612 поступлений
  • Проверена таблица BLUEPIN (управление бизнесом) — данные уже в БД как bp_* таблицы
  • Итого за день: 133K строк в 25 новых таблиц. БД: 604 МБ, 70 таблиц
13.02.2026 Metabase дашборд и доступы
  • Создан дашборд «Сводка по маркетплейсам» в Metabase (5 карточек)
  • Сводная таблица: все 11 организаций × WB/Ozon/YM — продажи, заказы, остатки, отмены
  • Топ-30 товаров WB по выручке с артикулом, товаром, брендом и % к перечислению
  • Pie-chart: распределение выручки по маркетплейсам (WB 93%, Ozon 6%, YM 1%)
  • Линейный график продаж WB по дням + столбчатая диаграмма остатков по организациям
  • Создана коллекция «Ежедневная аналитика» в Metabase
  • Создана страница прогресса для команды с планом задач и дневными отчётами
  • Добавлен блок «Доступы к сервисам» на страницу прогресса (Metabase, n8n, FileBrowser)
  • Обновлена инструкция Metabase: новый пароль + ссылка на новый дашборд
  • Запланировано разделение доступов Metabase: ИП+Свежо / остальные / админ (email в понедельник)
12.02.2026 Автосбор данных — полная реализация и запуск
  • Создан Python-скрипт collect_daily.py (757 строк) для сбора данных по всем 31 кабинету
  • Логирование, rate limiting, retry-логика, батчевые SQL-вставки через docker exec
  • Создано 7 таблиц в PostgreSQL: mp_accounts + 6 daily-таблиц с UNIQUE-индексами
  • Заполнена таблица mp_accounts: 31 аккаунт (11 WB + 11 Ozon + 9 ЯМ)
  • Протестированы все API: написаны скрипты test_ozon_ym.py, test_ozon_stocks.py, full_run_v2.py
  • Исправлены API-эндпоинты: Ozon FBS (v2→v3), Ozon stocks (v1→v4 с filter.visibility=ALL), YM auth (Bearer→Api-Key)
  • WB: подключены 10/11 кабинетов — 5,459 продаж + 7,465 заказов + 2,830 остатков
  • Ozon: подключены 10/11 кабинетов — 617 заказов (FBO+FBS) + 7,382 остатка
  • Яндекс Маркет: подключены 7/9 кабинетов — 90 заказов
  • Итого собрано: 23,843 строки данных за один прогон
  • Скрипт загружен на VPS через SFTP в /root/scripts/
  • Настроен cron: ежедневный запуск в 04:00 UTC (07:00 МСК), лог в /var/log/mp_collect.log
  • Создана документация: api_endpoints.md (все эндпоинты WB/Ozon/YM), обновлены db_schema.md и MEMORY.md
  • Проблемные аккаунты: Ozon Багира (403), YM Весна (403), WB/Ozon Кухсити (неактивен)
  • Обнаружено: WB-токены истекают 23.02.2026 — нужно обновлять!
11.02.2026 Загрузка данных и планирование
  • Загружены 19 файлов финансовых отчётов (XLSX) из Google Sheets в PostgreSQL
  • Создано 6 финансовых таблиц: fin_wb (768K строк), fin_ozon, fin_ozon_upd, fin_ym, fin_ke+fin_ke_services, fin_smm
  • Исправлены типы данных во всех fin_ таблицах (TEXT→DATE/NUMERIC/INTEGER)
  • Создана база знаний проекта: схема БД, API-ключи, эндпоинты, отладочные заметки
  • Составлен план автоматизации: 9 задач в 3 фазах на ~2 недели
  • Получены API-ключи от Анны: 11 WB + 11 Ozon + 9 Яндекс Маркет
  • Итого в БД: 38 таблиц, 548 MB данных