| Таблица | Покрытие | Приоритет | Недостающие | Действие |
|---|---|---|---|---|
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 мес) |
ozon_* в PostgreSQL, загружено ~11 500 строк исторических данных с августа 2025. Размер БД: 1370 MB → 1533 MBozon_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/FBSentity различает юрлица. Весна имеет 31 колонку в realization с детализацией лояльности (зелёные цены, АПВЗ), ИП — 27 колонок. Универсальный подход — взяли union заголовков, недостающие поля остаются NULL. Все колонки — TEXT для надёжной загрузки, типизация через CAST в view'хах Metabasefifo_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. Автосбор данных и бот отзывов продолжают работуctr-api в Docker-сети поменялся (было 172.18.0.11, стало 172.18.0.7), а в nginx был захардкожен старый IP. Переписал nginx-конфиг на resolver 127.0.0.11 + имя контейнера — теперь устойчиво к перезапускам/data/ctr-uploads/ на хосте (она монтируется только в ctr-api). Добавлена location /ctr-test/uploads/ с проксированием на FastAPI, который уже отдаёт файлы. Загруженные варианты фото теперь корректно отображаются в админке/ctr-test/ (read-only дашборд) и /ctr-test/admin/ (управление). Теперь всё на dvorecmasterov.ru/ctr-test/: метрики + загрузка вариантов + запуск/пауза/завершение тестов. Cron генерации статического дашборда удалёнctr_rotate.py каждые 30 мин логирует смену варианта в БД (94 ротации за 3 дня по тесту #26), но запрос POST /content/v3/media/save на WB возвращает 401 Unauthorized. Последствие: на WB висит одно и то же фото, CTR по вариантам неразличимlimit=100, поэтому из 180 карточек отображались только 100 (ИП). После фикса видно все: ИП 100 + Весна 80 = 186 карточек в системе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>/<путь>match_articuls.py: 9 095 артикулов из Google Sheets (таблица 18KuBnNA0IEX, вкладка «готово в офисе», колонка D) сравнивались с именами PDF-файлов. Сгенерирован CSV с колонкой F для заливки обратно в таблицуwrite_to_sheets.py через Service Account sheets-bot@sticker-sheets: в колонку F таблицы «готово в офисе» добавлены кликабельные ссылки на PDF-этикетки для каждого артикула. Теперь у менеджера мгновенный доступ к этикетке прямо из таблицы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 позволяет это)sheets-bot@sticker-sheets.iam.gserviceaccount.com (создан 14.04 для прошлой задачи)C:/Users/Анатолий/.openclaw/workspace/skills/ai-humanizer/ (24 паттерна признаков AI-текста, 500+ терминов AI-лексики, стат-анализ burstiness/TTR). Принципы применены при генерации отзывов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 для повторного использования/v1/disk/resources/files с пагинацией. За ~3 минуты получен список всех PDF на диске. Сопоставление с артикулами из столбца D таблицы дало 8 631 уникальных совпадений (по 1 ссылке на артикул, дубликаты из разных заказов игнорируются)AUDIT_dvorec_analytics_2026-04-08.md, tables_classification_2026-04-08.mdmonthly_fbo_stocks.py берёт снимок из БД на 07:00 МСК 1-го числа, но за ночь уже прошли заказы нового месяца. Решение: переписать скрипт на прямые вызовы WB+Ozon API параллельно, cron перенести на 58 20 28-31 * * с проверкой завтрашнего дня (23:58 МСК последнего дня месяца)5382209941673123614.ogg (6:40) и 5382209941673123628.ogg (3:48) через faster-whisper модель medium на CPU. Зафиксированы ключевые решения: префиксная система в dvorec_analytics (! — рабочая, опи — API, R- — ручной ввод), себестоимость тянуть готовой из «Мой Склад» (не считаем сами), новые таблицы R-pnl_monthly и R-expenses для P&LТермо_Осман_корона_черн) — мастер-поле для сопоставления, F «ссылка шк» — целевой столбец, полностью пустой. Таблица открыта на редактирование по ссылкеhttps://disk.yandex.ru/d/... (превью PDF в браузере, работает у любого без логина)<артикул>.pdf ровно как в столбце D (например, Термо_Осман_корона_черн.pdf). Один артикул — один PDF. Источник — папка «Бумбокс / 1 (1). Заказы» с десятками тысяч подпапок-заказов, в каждой по ~3 PDF штрихкодов товаров из заказаdvorec_analytics вместо создания новой БД. Удалено 58 неиспользуемых таблиц: было 121, осталось 63. Размер БД: 1413 MB → 1370 MB. Удалены: 7 «сирот» wb_*, 11 bp_* (Блюпинк), 10 gsheet_* старых, 14 ip_* старых, 3 FIFO v1, 3 прочих, 10 пустых таблицwb_cards используется CTR-сервисом (ctr_collect.py), review_templates — ботом отзывов (review_monitor.py), fifo_v2_sku_mapping — FIFO-расчётом. Все три исключены из удаленияbumboks, ip_vesna, svezho с 87 view каждая удалены через DROP SCHEMA CASCADE. SQL-пользователи metabase_bumboks, metabase_ip_vesna, metabase_svezho удалены. Скрипт setup_data_isolation.py найден и сохранён — при необходимости разделение по компаниям пересоздаётся за минутуmetabase_reset.py (DRY RUN + --execute режимы). Удалены: 22 коллекции, 74 вопроса, 6 дашбордов, 4 лишних подключения к БД (ИП+Весна, Бумбокс, Свежо, демо H2). Сохранены: пользователи, группы, подключение «Аналитика Дворец». Бэкап БД metabase: /root/backups/metabase_before_reset_2026-04-09.dump (3.3 MB)dvorec_readonly (только SELECT, statement_timeout 60 сек). Попытка DELETE → permission denied. В Metabase добавлено: подключение «Дворец (read-only)», коллекция «Песочница стажёров», группа «Стажёры» с ограниченными правами. Стажёры могут создавать вопросы/дашборды в своей коллекции, но не могут модифицировать данные или видеть production-контентmetabase_hide_tables.py в обоих подключениях (admin и read-only) скрыты: AI-ассистент (12 таблиц), VPN-админка (4), CTR-сервис (5), старые wb_api_* (3), бот отзывов служебные (6), мелочи (2). Видимыми остались 31 таблица маркетплейс-аналитики + FIFO v2deploy_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»dvorec_main с нуля оказалось слишком сложно. Решено: оставаться в dvorec_analytics, сначала почистить от мусора, потом строить новые дашборды. dvorec_main остаётся как backup, не развивается. Обнулить Metabase, строить дашборды с нуля — только самые необходимые5382209941673123614.txt, 5382209941673123628.txt). Ключевые пожелания: характеристики товара (ежедневная синхронизация), план развития/анализ продаж (артикул × недели × заказы/продажи/реклама/негативные отзывы), P&L по месяцам, расходы (ручной ввод), себестоимость из «Мой Склад» (тянем готовое, сами не считаем)sales_ozon (dvorec_main)Бумбокс и ИП Галимзянова — разные юрлицаctr-api (FastAPI, порт 8100), подключён к Nginx через project_default сеть. 5 таблиц PostgreSQL с префиксом ctr_. Cron: сбор */6ч, ротация */30мин, дашборд */4ч/api/v2/nm-report/detail вернул 404. Найден и интегрирован новый: /api/analytics/v3/sales-funnel/products/history (до 7 дней, 20 nmIds, 3 req/min)soveshanie_bd_2026-04-01.txtdvorec_readonly настроены. Старая dvorec_analytics не тронута — все скрипты и дашборды работают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_reportcollect_daily.py использовал dateFrom=вчера в WB API /stocks, из-за чего получал только товары с изменениями за день (~500 позиций). Исправлено на dateFrom=2019-01-01 — теперь собираются ВСЕ остатки. Результат: ИП 2 469 → 8 912 шт, всего WB 8 612 → 39 938 шт, позиций 505 → 7 134monthly_fbo_stocks.py: поле quantity заменено на quantity_full (полные остатки вкл. зарезервированные). Cron сдвинут с 00:00 UTC на 05:00 UTC (08:00 МСК) — после сбора данных. Перегенерирован и отправлен в группу «КЗС Рабочая группа» с актуальными даннымиmonthly_fbo_stocks.py на VPS: 1-го числа каждого месяца (03:00 МСК) выгружает остатки WB + Ozon по всем юрлицам в Excel и отправляет в Telegram-группу «КЗС Рабочая группа». Бот @ap_degen_bot. Тест: WB 505 позиций (7 936 шт.), Ozon 6 505 позиций (98 336 шт.). Каждый файл содержит лист «Сводная» + отдельные листы по организациямapi_get() с неправильным отступом. Монитор не запускался. Исправленоmp_accounts и write-токен в WRITE_TOKENS. ИП может публиковать ответы через бота. Действителен до 28.09.2026<, >, &), ломавшие HTML-парсинг Telegram. Добавлена функция html_escape(), улучшено логирование ошибок. 120 застрявших записей переотправлены менеджерамmp_accounts + WRITE_TOKENS. Все действительны до сентября 2026. Ожидаем остальные 8 кабинетовUPPER() в 10 местах FIFO SQL. Результат: 512 → 7 192 строки, 4 → 73 SKU за неделю, COGS ИП: 62.4 млн₽ (было 2.4 млн₽)load_wb_realization_vps.py (VPS-нативный), cron каждый понедельник 05:00 UTC (08:00 МСК). Загружает reportDetailByPeriod для всех 11 кабинетов, чанки 28 дней, rate limit handling. FIFO запускается следом в 06:00 UTC — данные всегда актуальныwb_products.vendor_code или wb_realization_report.sa_name по nm_id. Поиск работает и по артикулу/v3/finance/transaction/list) и ЯМ через APIauto_published. Работает для организаций с write-токеном (Весна, бумбокс). Отзывы с рейтингом 1-3 и вопросы — всегда через менеджераreview_monitor.py и review_bot.py. Дарья может публиковать ответы по бумбоксу через ботаbuyer-chat-api.wildberries.ru позволяет только отвечать на чаты, начатые покупателем. Ограничение самого Wildberries, не ботаreview_monitor.py сверяет список неотвеченных с WB API и помечает обработанные как answered_externally. Результат первого запуска: 459 из 491 записей синхронизировано — реально ожидают ответа только 34response_templates с 10 шаблонами (6 для отзывов, 4 для вопросов). Кнопка «📋 Шаблоны» в каждом сообщении бота → список шаблонов с эмодзи по категориям → предпросмотр с подстановкой имени → публикация/редактирование. Шаблоны поддерживают плейсхолдер {имя}userName, проходит валидацию: нормальное имя (Ирина, Андрей) → обращение по имени; фамилия+имя (Филатова Светлана) → извлекается имя; пустое/цифры/спецсимволы → общий ответ без имени. Имя сохраняется в колонке customer_namecode (копируется тапом), 👁 ссылка на вкладку отзывов/вопросов карточкиbuyer-chat-api.wildberries.ru) позволяет только отвечать на чаты, начатые покупателем. Ограничение самого WBload_wb_realization_2026.py не видел JSON-файл в Docker-контейнере. Причина: SFTP загружает файл на хост VPS, а pg_read_file() читает из файловой системы контейнера. Исправление: добавлен docker cp между SFTP-загрузкой и SQL-вставкойwb_realization_report для всех 11 кабинетов за 2026 год: ИП +46 747, бумбокс +76 325, Книфелд +38 258, Олимп +32 078, Свежо +14 261, Весна +1 596, Ст +5 808 и др. Итого в таблице: 11 организаций, данные до 22.03.2026fifo_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₽generate_ads_report_vps.py был устаревшим: использовал поле shks вместо orders_associated. Обновлена SQL-агрегация, JS-логика расчёта прямого/полного CPO, таблица кампаний, summary-бар с «Всего товаров (с ассоц.)». VPS-скрипт синхронизирован с локальной версией и задеплоенwb_realization_report для ИП и Весна, т.к. данные ещё не были загружены. Пустые строки с doc_type_name = NULL — это логистика/хранение/штрафы (правильно фильтруются, не влияют на расчёт)fifo_auto_update.py (cron пн 09:00) автоматически подтягивает новые данные из wb_realization_report после каждой загрузки. Данные ИП + Весна обновляются каждую неделюrename_metabase_tables.py: 105 таблиц получили читаемые названия с категорийными префиксами (WB—, Ozon—, ЯМ—, КЭ—, Финансы—, Реклама—, FIFO—, Бот—, Справочник—, GSheet—, ИП—, Весна—, BP—, Аналитика—, Вью—). В браузере Metabase вместо wb_realization_report теперь отображается «WB — Отчёт реализации (API)»load_wb_realization_2026.py — получает данные через reportDetailByPeriod API для всех 11 кабинетов, чанки по 28 дней, дедупликация через ON CONFLICT DO NOTHING, автоопределение стартовой даты по уже загруженным данным, обработка rate limit (429 → пауза 65 сек)PATCH /api/v1/feedbacks/answer, HTTP 204 = успех. Отзывы публикуются через @packmen_bot; Дарья (@dasshkfd) работает с ИП и Веснаpg_read_file не находит файл (SFTP пишет на хост, Docker не видит /tmp хоста). Исправление применено в следующую сессиюreview_monitor.py (cron */30). 5 кнопок: Опубликовать, Редактировать, Написать свой, Пропустить, Перегенерировать. Ссылки на карточки WB в каждом сообщении/stats — полная статистика только для админаINSERT 0 1 вместо INSERT in result)collect_wb_extended_vps.py (cron 09:00, 6 таблиц), weekly_alerts.py (пн 10:00, токены+сводка+стокауты), review_monitor (*/30). Полный crontab: 12 задач на VPSPATCH /api/v1/feedbacks/answer (отзывы) и PATCH /api/v1/questions (вопросы). Старый эндпоинт PATCH /api/v1/feedbacks отключён WB. Код 204 = успехgenerate_reviews_stats_vps.py, cron каждые 6 часов. Дашборд dvorecmasterov.ru/reviews-stats/fifo_auto_update.py: автосбор WB реализации через API (reportDetailByPeriod) для ИП + Весна, обновление поступлений/BOM из Google Sheets, пересчёт FIFO. Cron каждый понедельник 09:00 МСКscripts/setup_fifo_v2.py — полный pipeline: загрузка поступлений из 3 вкладок (отгрузки с КЗС ИП, Весна, 2026) + продажи из 6 источников (WB fin_wb, Ozon ИП/Весна, ЯМ ИП/Весна, КЭ) + BOM расходниковФО для БД + 3 вкладки поступлений доступны без авторизацииdocs/plans/2026-03-14-fifo-bom.mdfin_wb — определён маппинг entity: 'ИП Галимзянова' → 'ИП', 'ООО Весна' → 'Весна'. Найден фильтр doc_type IN ('Продажа','Возврат') для исключения строк комиссий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)dvorecmasterov.ru/ads-report/ — фильтры период/организация, автообновление 21:00 МСКload_sales() для FIFO v2 — загрузка продаж из 6 источников: WB из fin_wb (с маппингом entity), Ozon ИП/Весна, ЯМ ИП/Весна, КЭ ИП. Каждый источник со своей структурой колонокsold_from_layer = LEAST(qty_in, GREATEST(0, cum_out - cum_in_prev))collect_ad_stats.py — добавлен сбор бюджетов кампаний, обновление статусов. Фильтр по организациям (ИП + Весна)ad_daily_stats/root/logs/ads_report.lognms, а не nm. Теперь собирается детализация по каждому товару: 291 уникальный артикулnms, а не поле nm. Исправлен парсер в collect_ad_stats.pywb_products: конкретные смесители, душевые системы, их CPC/CR/CPOad_daily_stats — изучение структуры, проверка корректности сбораcollect_ad_stats.py на VPS, cron 3 раза в день (08/14/20 MSK). WB Advert API v3: fullstats по кампаниям. Первые 5098 строк в ad_daily_statske_salesCLAUDE.md загружает .env автоматически в каждом проекте[[AND sku_group ILIKE '%' || {{sku_filter}} || '%']] — условие необязательное, без ввода показываются все данныеscripts/add_fifo_filters.py — обновляет SQL 4 карточек и параметры дашборда через Metabase APIfifo_receipts, fifo_sku_mapping, fifo_weekly_reportsetup_fifo.py: все создаваемые карточки и дашборды теперь сразу помещаются в коллекцию «ИП + Весна» (collection_id=7)scripts/setup_fifo.py: создание 3 таблиц PostgreSQL, загрузка поступлений, расчёт FIFO, публикация дашбордаfifo_receipts — поступления товара, fifo_sku_mapping — маппинг дублирующих артикулов, fifo_weekly_report — итоговый отчёт по неделямquantity в wb_daily_sales для ИП равно NULL — каждая строка = 1 единица. Исправлено: вместо ABS(quantity) используется 1/-1 по префиксу sale_id (S = продажа, R = возврат)data/fifo_receipts_full.tsvdocs/тз расчёт себеса.docx (661 строка)sold_from_layer = LEAST(qty_in, GREATEST(0, cum_out - cum_in_prev))memory/fifo_project.mdcolumn does not existprice_with_disc в wb_daily_orders → total_price (колонка есть только в wb_daily_sales)retail_amount→retail_price, ppvz_for_pay→to_seller, delivery_rub→delivery_cost (это колонки wb_realization_report, а не fin_wb)completed, данные возвращаются корректно[[AND date_start >= {{start_date}}::date]] — фильтр опциональный (без выбора — все данные)dvorec_readonly для безопасного доступа бота к БДpostgresql-client на хосте VPS — бот выполняет psql напрямую (не через Docker)update_openclaw_identity.py — обновляет IDENTITY.md на VPS и перезапускает gatewaynext cursor с limit=1000collect_wb_new_endpoints.py для массового сбора данных на следующий деньcollect_wb_realization.py) по всем 11 кабинетам с 29.01.2024russify_metabase2.py переименовал технические колонки в русские названияmp_accounts с новыми ключами для всех обновлённых кабинетовusers.auth.php и acl.auth.php через SFTPcollect_wb_extended.py — расширенный сбор данных WB через API по всем 11 кабинетамfin_wb: проверены все 768K строк, ключевые поля и payment_reasonpayment_reason, корректный расчёт маржиgsheet_wb_realization: 58,608 строк — финансовые отчёты WB (нояб 2025 – фев 2026)gsheet_product_chars: 386 товаров с кросс-артикулами WB/Ozon/ЯМ/KE/SMMgsheet_wb_ad_stats: 13,795 строк статистики рекламных кампанийip_kzs_shipments: 4,862 отгрузки с завода (ИП) + vesna_kzs_shipments: 3,194 (Весна)ip_bank_statements: 3,815 банковских операций, ip_bank_receipts: 612 поступленийbp_* таблицыcollect_daily.py (757 строк) для сбора данных по всем 31 кабинетуmp_accounts + 6 daily-таблиц с UNIQUE-индексамиmp_accounts: 31 аккаунт (11 WB + 11 Ozon + 9 ЯМ)test_ozon_ym.py, test_ozon_stocks.py, full_run_v2.py/root/scripts//var/log/mp_collect.logapi_endpoints.md (все эндпоинты WB/Ozon/YM), обновлены db_schema.md и MEMORY.mdfin_wb (768K строк), fin_ozon, fin_ozon_upd, fin_ym, fin_ke+fin_ke_services, fin_smm