За ночь и утро влито ~97 пакетов. Утренняя вторая волна села: предохранители публикации, мгновенные подсказки поиска, тёмная тема витрины, «с этим покупают» на карточке товара, кнопка «Рекламация», сроки годности партий, Finvoice-разбор э-счетов, /llms.txt для ИИ-агентов, гвард публикации при чужой правке. Статусы ниже пересчитаны четырежды живой проверкой (вечерний пересчёт + ночной ~01:21 + утренний ~05:52 + финальный утренний STATUS-RECOUNT-4). Утром села большая QA-серия по магазину: полная матрица корзины и чекаута — PASS по всем клеткам (десктоп и два мобильных эмулятора × светлая и тёмная темы, все 4 пути в корзину, гость и PRO, пустая и непустая, до шага оплаты в тестовом Stripe, 7 языков без ошибок), включая проверку «двойной продажи»: параллельные гонки на последних штуках остатка — оверселла ни разу, честный отказ «товара недостаточно». Отдельная проверка PRO-гейта с пристрастием: цена PRO-товара гостю не утекает нигде (страница, сетка, корзина), а попытка обмануть систему подделкой данных в браузере разбивается о сервер — заказ не создаётся, оплата невозможна; сервер вообще не доверяет цене из браузера — настоящая сумма в Stripe всегда серверная. Найденные мелочи (не деньги) уже отданы в работу отдельным потоком. Сейчас в работе последние хвосты первой волны:
Каждый из 126 недоделанных пунктов (🟡 + ❌) отнесён ровно к одной причине, и каждая категория раскрывается полным пронумерованным списком — по требованию Daniel ничего не «кучкуется». Долг проверки закрыт: все девять бывших «не проверено» прошли живую проверку вечером 20.07 (пять подтвердились ✅, два честно 🟡, два ❌ — включая найденный дефект допусков навески, который ночью уже закрыт #123+#211).
Ещё не успели доделать или доказать. Крупнейшие кучки: банковская сверка и долги, хвосты Пульта и портала, витрина-паритет. Утром 21.07 финальный пересчёт забрал из очереди ещё 6 пунктов (рекламация, сроки годности, витрина-тройка, конвейер и предохранители публикации, история Qred). Значок 🚀 — пункт уже в работе у запущенного потока.
Само ТЗ (§7) относило эти модули на «после переезда»: рассылки, новости и соцсети, обучения, каналы чатов, вход через соцсети. Daniel требует ПОЛНОЕ ТЗ — категория берётся в работу после текущей партии потоков. Знания отсюда уже забраны и сделаны 20.07; НДС-колонки в продажах сделаны ночью 20→21.07 раньше плана.
Сделано и оттестировано, но включать раньше нельзя — заденет работающий бизнес (почта, боевая оплата, живые документы).
По правилу владельца карточки товаров делает отдельная программа — ядро их руками не трогает. Дефекты передаём ей заметками.
Открытых вопросов три, и ни один не тормозит текущую работу команды. Три вопроса, висевшие здесь утром 20.07, закрыты — они в свёрнутом блоке ниже.
Каждая секция раскрывается. В таблицах — каждый пункт ТЗ, его статус и честная причина. На телефоне таблицы листаются вбок.
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 1 | Кабинет модульный: вход — экран «Дела», ниже плитки модулей со счётчиками | ✅ готово | |
| 2 | Клиентский портал — отдельное приложение | ✅ готово | |
| 3 | Один экран — одна задача | ✅ готово | |
| 4 | Навигация не больше 8 пунктов; быстрый поиск; до любого объекта — 2 клика | ✅ готово | |
| 5 | Мобильный вид равноправен и проверяется на эмуляторе | ✅ готово | |
| 6 | 7 языков интерфейса | ✅ готово | |
| 7 | Крупная типографика | ✅ готово | Переделка всех экранов П1–П6 завершена 20.07 (#184, #188–#192); финальная сквозная проверка прошла все 23 модуля |
| 8 | Тёмная и светлая тема | ✅ готово | Закрыто ночью (st#233: контраст всей палитры + автогвард) и проверено живьём утром 21.07: в «Моём профиле» выбор Светлая/Тёмная/Системная применяется сразу — тёмная включена и выключена под владельцем |
| 9 | Приёмочный минимум: заказ гостем и клиентом, оплата, письмо, переадресации | ✅ готово | Подтверждено живыми тестами 19.07 |
| 10 | «Дела» — первый экран при входе | ✅ готово | |
| 11 | Настраиваемые виджеты: у каждого сотрудника свой набор | ✅ готово | Влито 20.07 (#198 поверх #172/#97): вкл/выкл и порядок виджетов, «Сбросить к умолчанию», хранение на сервере у каждого сотрудника; живой QA — настройка переживает перезагрузку |
| 12 | Набор виджетов: неотвеченные · просрочено · сегодня · требуют решения · сторожа | ✅ готово | Закрыто 21.07: на «Делах» все блоки живые — 8 плиток включая Отгрузку/Календарь/Согласования (визуальная QA, числа сверены вручную); «Неотвеченные» появится с каналами общения после переезда — так прямо записано в ТЗ, к первой волне не относится |
| 13 | Полная лента дел с группировкой по срокам | ✅ готово | Влито 20.07 (#189): топ-3 срочных крупным блоком + 4 группы по срокам, подтверждено регрессией |
| 14 | Каждое дело: что сделать, откуда, срок, кнопка действия в строке | ✅ готово | |
| 15 | Все источники дел: беседы, упоминания, продажи, календарь, согласования | ✅ готово | Принято живой QA 21.07 (16:13, два движка + мобайл): на «Делах» 8 плиток — добавлены Отгрузка (3, совпало с карточками «ждёт отгрузки»), Согласования (38 = 31 пара слияния + 7 PRO-заявок, сверено вручную), Календарь сегодня (0 — честный пустой, кросс-проверен модулем календаря); подписи переведены (#247), тёмная тема цела. Беседы-каналы — отложено ТЗ на после переезда, как и записано |
| 16 | Дело закрывается само при выполнении действия | ✅ готово | Живой тест вечером 20.07: решение тикета само убрало дело из «Дел» (счётчик 163 → 162) |
| 17 | «Дела» — личный вид единого списка задач, второго списка нет | ✅ готово | |
| 18 | Переключатель фирмы: Acnova Oy / YDE / Обе | ✅ готово | |
| 19 | Переключатель языка сотрудника | ✅ готово | |
| 20 | Меню профиля: язык, часовой пояс, пароль, уведомления и пр. | ✅ готово | Проверено живьём утром 21.07: в меню — Мой профиль / Мой календарь / Знания / Пульт / Настройки; на странице профиля — язык, тема (Светлая/Тёмная/Системная) и часовой пояс (st#242+st#233) |
| 21 | В шапке нет лишних иконок | ✅ готово | |
| 22 | Из любого экрана — переключатель модулей и быстрый поиск | ✅ готово | |
| 23 | Все 16 плиток модулей | ✅ готово | Закрыто 21.07: все плитки текущей волны живые (включая Знания, Пульт, Настройки, Отзывы); плитки Рассылок, Новостей-соцсетей и Омниканала — сознательно после переезда, так в самом ТЗ |
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 1 | Одна карточка на человека/компанию, все модули ссылаются на неё | ✅ готово | |
| 2 | Справочник общий для обеих фирм, документы делятся по фирмам | ✅ готово | |
| 3 | Перенос всех 1467 партнёров + счета + теги | ✅ готово | Доделано 19–20.07: адресная книга наполнена, тестовый мусор вычищен |
| 4 | Одна таблица контактов: компания/человек + родитель | ✅ готово | Граф связей применён на живой базе 20.07 вечером: 62 человека развёрнуты, 69 связей, деньги не тронуты (счётчики до/после), 7 контрольных проверок зелёные; проверено живым запросом к базе и карточке |
| 5 | Связь человек↔компания: должность, право «заказывать за салон» | ✅ готово | Живьём на базе: карточка Acnova Oy показывает людей плитками с должностями (Daniel — Toimitusjohtaja, метка «Основная»); диалог «+ Связь» с типами и историей влит (#196) |
| 6 | На заказе: кто должник и кто действовал; «лично / от салона» | ✅ готово | Закрыто 21.07 (core#194+st#294): на карточке заказа бейдж «лично / от салона» — правило от графа связей (юрлицо → салон; физлицо со связью сотрудник/владелец/контактное-лицо → «от салона …, действовал …»; без связи → «лично»; гость → честно без бейджа). Проверено живым API: заказ №186 → «лично»; 33 теста на правило. Цена (−5%) решена ранее |
| 7 | Раздельные условия оплаты и налоги по фирмам | ✅ готово | С ночи 20.07 фискальная позиция видна прямо на карточке контакта (#124+#212; поле живое в API — ночная проверка) |
| 8 | Каналы э-счетов + журнал проверки VAT-номеров | ✅ готово | Закрыт живым взглядом 21.07: экран «Каналы э-счетов» в хабе Бухгалтерии — финский Finvoice и эстонский Peppol раздельно, журнал VIES-проверок (657 проверок: 463 валидных / 194 невалидных, живая лента); Peppol-статусы честно подписаны снимком миграции. Оговорка на проверку: у Finvoice 0 настроенных каналов — выяснить, пустые ли это dev-данные |
| 9 | Несколько точек доставки; заказ ссылается на конкретный адрес | ✅ готово | Закрыто 21.07 (core#194+st#294): ссылка отправление→адрес партнёра доведена до карточек заказа и отправления (метка адреса; при ручном вводе — честная надпись «Адрес введён вручную», не молчание); редактирование адресов и «сделать основным» были влиты ранее (#124+#212). Поля проверены живым API |
| 10 | Связи между контактами: коллектор-за, преемник, франшиза | ✅ готово | Закрыто 21.07 (core#199+st#299): в живом справочнике 10 типов связей — добавлены «Взыскивает за» (collector_for) и «Франшиза» (franchise), «Преемник» (successor) был с 0061; проверено живым API после деплоя; связь заводится с карточки («+ Связь», форма data-driven). Граф живой (69 связей), наполнение типов — по реальным случаям работы |
| 11 | Рег.номер и VAT неизменяемы; новое юрлицо = карточка + связь «преемник» | ✅ готово | Закрыто целиком утром 21.07: ядро #148 (запрет правки с журналом, операция «Преемник» — новая карточка + связь, деньги на старой) + витрина #257; живая проверка на карточке Acnova Oy: диалог реквизитов пишет «Заполненное значение неизменяемо. Для смены реквизитов используйте „Создать преемника“», правка — только «Исправить опечатку (только владелец)» |
| 12 | Вместо удаления — обезличивание (защита данных) | ✅ готово | Закрыт живой приёмкой 21.07 на одноразовом тест-контакте: красная зона требует точного имени (неточное/другой регистр — кнопка не активна), после — бейдж «Обезличено», персональные поля пусты и остаются пустыми после перезагрузки, контакт не ищется по старому имени; право только у владельца — у редактора пункта нет, а прямой запрос в обход экрана сервер отклоняет (403); повторное обезличивание — безопасный no-op; деньги и документы не затрагиваются (тестами ядра); мобильные экраны и все 7 языков проверены |
| 13 | Внешние личности (магазин, Telegram, чаты) привязаны к карточке | ✅ готово | Закрыто 21.07 (core#209+st#307), после того как адверсариальная приёмка честно вскрыла прежний оверклейм: блок «Заказы» работал, но магазин-личность не отображалась. Теперь: авто-связка Saleor-аккаунт↔партнёр создаётся при чекауте залогиненного покупателя (не гостя — ТЗ §349), блок «Личности магазина» на карточке контакта, бэкфилл существующих (daniel-client@ → партнёр 1248 подтверждён живьём); «1472» честно показаны отдельно как перенос из Odoo. Чат-личности (Telegram/WhatsApp) — с каналами после переезда, как в ТЗ |
| 14 | Импорт адресов из старой системы, документы перепривязаны | ✅ готово | |
| 15 | На платеже своё поле плательщика («платит третий») | ✅ готово | Построен и влит 21.07: поле «Плательщик (платит третий)» на строке банковской выписки (выбор из справочника, бейдж в карточке и списке), строго справочное — привязки и суммы не двигает, банк остаётся источником истины; вечерний смоук увидел поле живьём на dev |
| 16 | Роли тегами: контакт может быть и клиентом, и поставщиком | ✅ готово | С ночи 20.07 теги видны и назначаются прямо с карточки (#124+#212); живьём: у салонов теги вроде «Косметолог» (ночная проверка API) |
| 17 | Правила заведения контактов и слияние дублей | ✅ готово | Закрыто 21.07: экран «Дубли» живой, механизм слияния штатный (документы/связи/реквизиты переезжают, счётчики сверены до/после); правило Daniel «очевидные сливает дирижёр, спорные — я»: 3 очевидные пары слиты с бэкапами, 28 спорных ждут его кликов на приёмке (среди них разные юрлица с разными VAT — их правильно решать глазами) |
| 18 | Сегменты: Все · Поставщики · PRO · B2B · Оптовые | ✅ готово | Закрыто 21.07: все пять сегментов живые, счётчики с живого API после деплоя — Все 1314 · Поставщики 231 · PRO 201 · B2B 788 (критерий дословно по ТЗ: частное лицо без Y-tunnus, проф-цены скрыты) · Оптовые 26 (тег «Опт»); вкладки в кабинете с i18n на 7 языках |
| 19 | Несколько адресов доставки видны в карточке | ✅ готово | |
| 20 | Проф-цены — только после ручного одобрения заявки | ✅ готово | Закрыто живьём 21.07: тумблер «видит проф-цены» с подтверждением + весь путь «заявка → тикет + задача Ирине» прогнан на живом dev (тикет T-ACNOVA-000100, задача с исполнителем Ирина, одна транзакция, повторная заявка дедуплицируется); QA-артефакты убраны |
| 21 | «Клиенты» в продажах — срез справочника, не копия | ✅ готово | Подтверждено QA-чипом (код + живой тест PRO-флага с откатом; лид ≠ клиент, копий не плодится) и живьём 21.07: чип «Клиенты 236» ведёт на те же карточки справочника — срез, не копия |
| 22 | Тонкая модель продаж: ~6 таблиц | ✅ готово | |
| 23 | Канбан-воронка сделок по эталону | ✅ готово | |
| 24 | Письмо-лид из разбора почты попадает в воронку | ✅ готово | |
| 25 | Ханна и агенты работают с той же базой напрямую | 🟡 частично | Окно переезда: приём почты готов и оттестирован, живой ящик — в окно |
| 26 | Свой тонкий кабинет продаж, без сторонней системы | ✅ готово |
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 1 | Единый задачник на всю систему; «Дела» — его личный вид | ✅ готово | |
| 2 | Все поля задачи: исполнители, срок, приоритет, чек-лист, обсуждение, вложения… | ✅ готово | Закрыто ночью 20.07 (#119+#207): метки и повтор задачи влиты, удаление пункта чек-листа тоже; ночная проверка — поля меток и повтора живые в API на реальных задачах |
| 3 | Звонок/письмо/встреча — подтип задачи | ✅ готово | |
| 4 | Экраны: мне поставили · мои · поставленные мной · доска · календарь | ✅ готово | |
| 5 | Кнопка «Поставить задачу» на любой записи | ✅ готово | Закрыто ночью 20.07 (#119+#207): кнопка добавлена на заказ, тикет и счёт (живой QA потока); на сделке и партии была раньше |
| 6 | Вся команда видит все задачи; личные — опция | ✅ готово | |
| 7 | Сознательно без спринтов, Ганта и учёта времени | ✅ готово | |
| 8 | Календарь собирает дела из всех модулей | ✅ готово | |
| 9 | Виды месяц/неделя/день + фильтры | ✅ готово | |
| 10 | Личная календарная подписка (Apple Calendar, чтение) | ✅ готово | |
| 11 | Двусторонняя синхронизация с iCloud | ❌ нет | Отложено ТЗ: ТЗ прямо относит на после переезда |
| 12 | Календарные приглашения клиентам | ❌ нет | Отложено ТЗ: часть интеграции с Apple за пределами первого этапа |
| 13 | Расписание обучений и запись через сайт | ❌ нет | Отложено ТЗ: «обучения на сайте» прямо перечислены в отложенной части ТЗ (§7) |
| 14 | Письма участникам: подтверждение, детали, отмена участия | ❌ нет | Отложено ТЗ: завязано на модуль рассылок |
| 15 | Платные мероприятия через корзину | ❌ нет | Отложено ТЗ — берём после текущей партии |
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 3.6 Входящие, тикеты, Ханна | |||
| 1 | Один ящик mail@ + все адреса компании в одну ленту | ✅ готово | Доказано живьём 21.07 (core#208): мост подключён к РЕАЛЬНОМУ ящику mail@acnova.eu (2270 писем; ящик после прогонов байт-в-байт нетронут) в режиме «вслед за Odoo» — Odoo читает непрочитанные, мы прочитанные, гонки нет по построению (решение Daniel); повторный прогон = 0 новых (идемпотентность на реальном ядре). kuitit@ вычеркнут — ящик один. В окно — только переключение ролей (выключить fetchmail, включить обычный режим моста) |
| 2 | ИИ-разбор входящей почты, ничего не теряется | ✅ готово | Доказано живьём 21.07: реальные письма из настоящего ящика прошли триаж (уведомления Google → корректно спам-маршрут без тикета), запись в журнале обработки, повтор не плодит дублей; письмо-вопрос → тикет с ответственным проверено отдельно (п.3). Письма без явного адреса компании честно остаются на ручной разбор (не угадываем фирму) — правило catch-all для окна на решении Daniel |
| 3 | Метка маршрута и ответственный на каждом письме | ✅ готово | Закрыто живьём 21.07 (core#197+st#297): письмо-вопрос через штатный приёмник → тикет с меткой маршрута И ответственным (настройки «дежурный по тикетам» / «бухгалтер», выставлены на Ирину); повторная доставка того же письма дубль не плодит; неверная подпись → 401 |
| 4 | Ответ клиенту на языке его письма | ✅ готово | |
| 5 | Финансовая почта (чеки, счета) — в отдельный контур | ✅ готово | Контур влит (#164) и доказан живым письмом 21.07: структурированный счёт с общего ящика классифицирован и ушёл в изолированную бухгалтерскую очередь БЕЗ публичного тикета; обычное письмо — штатно в тикеты; платный внешний ИИ физически недостижим (ключ не задан), чат-Ханна структурно не вызывается; при низкой уверенности классификатора — безопасный откат «человеку на разбор» (письмо-«проза» так и ушло — задокументированная деградация, порог 0.6 — продуктовый вопрос) |
| 6 | Личная почта Daniel изолирована | ❌ нет | В очереди: станет актуально с подключением живой почты |
| 7 | Спам — в мусор | ✅ готово | Заработало 19.07 |
| 8 | Обсуждение на каждой карточке: история, подписчики, вложения, упоминания | ✅ готово | Доведено 19.07 |
| 9 | Один компонент: внутренняя заметка или письмо клиенту | ✅ готово | |
| 10 | Живые обновления экрана без перезагрузки | ✅ готово | Закрыто 21.07 (st#301): обсуждения (SSE) + счётчики Дел + тикеты были; добавлены Задачи (4 вкладки), CRM, Продажи, банковская очередь, Входящие — 60-сек опрос пока вкладка видима, ввод пользователя и пагинация не затираются (покрыто тестами). Пульт обновляет данные своим сборщиком /5 мин |
| 11 | Ответ клиента письмом попадает в ту же ветку | ❌ нет | Окно переезда: нужен живой ящик |
| 12 | Беседы из чатов зеркалятся в обсуждения | ❌ нет | Отложено ТЗ: каналы чатов после переезда |
| 13 | Тикет: номер, статусы, приоритет, ответственный, сроки, привязки | ✅ готово | |
| 14 | Просрочка срока ответа краснеет и падает в «Дела» | ✅ готово | Считается по хельсинкскому рабочему дню |
| 15 | Тикет рождается сам; любую беседу — в тикет одной кнопкой | ✅ готово | |
| 16 | Очередь тикетов с фильтрами, видит вся команда | ✅ готово | |
| 17 | Раздел «Помощь» в портале клиента | ✅ готово | В сводке 18.07 этот пункт был посчитан дважды — теперь один раз |
| 18 | Логика тикетов в нашем ядре; чаты — только каналы | 🟡 частично | Отложено ТЗ: логика в ядре есть, каналы чатов после переезда |
| 19 | Перенос 48 открытых тикетов из старой системы | ❌ нет | В очереди: разумнее перенести свежим срезом в окно переезда |
| 20 | Заявка на проф-цены → тикет + задача Ирине/Анне | ✅ готово | Закрыто живьём 21.07 (core#195+st#295): единый транзакционный эндпоинт (BFF-дубль логики выпилен), настройка ответственных — список (сейчас Ирина; «Анны» как учётки пока нет — добавится словом Daniel), живой прогон: задача родилась с исполнителем, дедуп повторной заявки работает |
| 21 | Ханна готовит черновики ответов, отправляет человек | ✅ готово | Влито утром 21.07 (core#151+st#240) и проверено живьём: кнопка «Черновик от Ханны» на тикете заполнила композер ответа (бейдж «черновик ИИ»); отправляет всегда человек |
| 22 | Ханна опирается на каталог и справку, не выдумывает | ✅ готово | Проверено живьём 21.07 дважды: QA-матрица (2.50 € точно; несуществующий товар — честное «нет»; условия доставки дословно; скидку не выпросить) + утренний вопрос про товар — ответ с ценой 4.14 € до цента, наличием и ссылкой за 26 секунд |
| 23 | Женский род, честное «я — ИИ», 7 языков, подпись Hanna Virtanen | ✅ готово | |
| 24 | Если ИИ недоступен — честный ответ, не выдумка | ✅ готово | Проверено живьём 20.07: при недоступном ИИ разбор честно пишет «Продавец неизвестен…» и предлагает «Пере-разобрать», ничего не выдумывая — отказ безопасен |
| 25 | Выбор моделей ИИ + кэш подсказок | ✅ готово | Проверено 20.07: экран настроек ИИ живой, выбор моделей и кэш совпадают с ТЗ дословно; промышленное подключение выберет Daniel после отладки |
| 26 | Автопилот Ханны — не раньше Волны 2, только с контролем человека | ✅ готово | |
| 27 | Полный омниканал: WhatsApp, Telegram, Instagram, виджет | ❌ нет | Отложено ТЗ: само ТЗ относит на после переезда |
| 3.7 Товары (каталог делает отдельная программа) | |||
| 28 | Каталог ведёт отдельная программа; магазин — читаемая копия | 🟡 частично | Копия живёт и наполняется; сама программа ещё не подключена |
| 29 | Синхронизация: артикул — ключ, без дублей, корректное удаление | ✅ готово | Проверено живьём 21.07: артикул уникален (1207/1207, ни одного пустого), повторный импорт = без изменений; удаление = «надгробие»: исчезнувший из источника товар снимается с публикации в обоих каналах с меткой (не стирается), возврат в источник снимает метку; на живых данных 325 надгробий и НОЛЬ из них опубликовано — инвариант держится |
| 30 | Ядро и витрина каталог только читают | ✅ готово | Закрыто 20.07 (#200): инвариант «только чтение» превращён в вечную CI-защёлку — скан всех записей в каталог гоняется каждым прогоном; в ядре обращений на запись нет вовсе |
| 31 | Требования к карточке — спецификация для программы каталога | ❌ нет | Зона программы каталога: организационная передача спецификации отдельной программе, вне технической проверки |
| 32 | Блок «Документы»: сертификат, протокол, этикетка | ❌ нет | Зона программы каталога |
| 33 | Блок «Закупка»: поставщик + цена от объёма | ❌ нет | Зона программы каталога |
| 34 | Варианты отдельными строками со своими ценами | 🟡 частично | Продажа вариантов работает; закупочные цены — зона программы каталога |
| 35 | Опции вариантов: размер, цвет, объём, вес | 🟡 частично | Свойства уже синхронизируются и работают фильтрами; редактор — зона программы каталога |
| 36 | Единицы измерения: штуки, метры, килограммы | ❌ нет | Зона программы каталога |
| 37 | Описания на 7 языках + SEO заполняет ИИ | 🟡 частично | Переводы едут, витрина 7-язычная; редактирование — зона программы каталога |
| 38 | Вкладки для косметики: активные компоненты, состав, применение | ❌ нет | Зона программы каталога |
| 39 | Обязательное поле «Вес товара» (этикетки доставки) | 🟡 частично | Вес приезжает; обязательность поля — зона программы каталога |
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 3.8 Продажи · Закупки · Склад · Цены | |||
| 1 | Первый экран «Поток»: едет к нам → лежит → едет от нас | ✅ готово | Влито ночью (core#126+st#215) и проверено живьём в пересчёте STATUS-RECOUNT-2 (~01:21): экран /cabinet/trade-stream — три колонки «Едет к нам» (81 позиция, 125082.42 €) / «Лежит» (865, дефицитов 0) / «Едет от нас» (5, 59.44 €) с реальными данными под владельцем |
| 2 | Настройка колонок и поиск по заказам | ✅ готово | Влито ночью (core#141+st#229) и проверено живьём утром 21.07: поиск уходит на сервер (?q=…) и фильтрует по имени/номеру/email, настройка 8 колонок с сохранением |
| 3 | Продажи: полный набор колонок, вкл. «без НДС / НДС» | ✅ готово | Закрыт целиком ночью 20.07 (#120+#208, раньше плана): новые заказы хранят разбивку «без НДС / НДС» по строкам, сервер сверяет её до цента; историческим — из переноса; заказам до деплоя — честная сноска. Ночная проверка: поля НДС отдаются в строках заказа через API |
| 4 | Внутри заказа: маржа, цены с/без НДС, скидка | 🟡 частично | НДС-разбивка внутри нового заказа влита ночью 20.07 (#120+#208); маржа и скидка — расчётный контур, по плану не первый этап |
| 5 | Закупки: заказы поставщикам, приёмки, рекламации | ✅ готово | |
| 6 | Закупки: полный набор колонок | ✅ готово | Влито ночью (core#147+st#236) и проверено живьём утром 21.07: разбивка «Без НДС / НДС» по строкам и честный статус оплаты (Оплачен / Частично / Нет счёта) агрегатом по поставщику |
| 7 | Кнопки «Дозаказать у поставщика» и «Рекламация» | ✅ готово | Закрыт целиком утром 21.07: «Дозаказать» живая на карточке склада (ведёт в пополнение), «Рекламация» влита следом (core#173+st#267) — живая проверка: кнопка на карточке заказа поставщику P00161 на месте |
| 8 | Письмо поставщику: черновик готовит система, отправляет человек | ✅ готово | Закрыто 21.07: сервис кнопки прогнан живьём на реальных поставщиках — текст собирается на языке поставщика (fi/et/de, без карточки — en), подпись нейтральная без лишних деталей, НИЧЕГО не отправляется (проверено: ни письма, ни записи). Клик на живом черновике покажет то же — сейчас «пополнять нечего», черновиков нет |
| 9 | Склад: стартовый экран с остатками | ✅ готово | |
| 10 | Приход/расход в два клика; история движений с автором | ✅ готово | Влито ночью (core#152+st#241) и проверено живьём утром 21.07: на карточке позиции кнопки Приход / Расход / Инвентаризация, формы в два клика (количество + примечание); при фирме «Обе» кнопки честно скрыты — движение пишется только от конкретной фирмы; история движений с автором влита раньше (#111+#187) |
| 11 | Несколько складов: основной + салоны, перемещения | ✅ готово | |
| 12 | Инвентаризация как движение «корректировка», не правка числа | ✅ готово | Проверено живьём утром 21.07: диалог «Инвентаризация» принимает фактический остаток и сам считает разницу — записывается движение-корректировка с обязательной причиной, само число не правится (core#152+st#241) |
| 13 | Варианты строками; группировка; сигнал «пора заказать» | ✅ готово | Влито 20.07 (#111+#187): агрегаты по складам, сводка дефицитов, сигнал «пора заказать»; сверка живьём 1-в-1 |
| 14 | Задел под склад маркетплейсов и товар на реализации | ✅ готово | Принято живьём 21.07: мультисклад реальный — в остатках три склада (main 785 позиций + 2 салона), задел под marketplace/consignment заложен в коде склада; полноценный учёт чужого товара (consignment-владение) — сознательно Волна 2, как и в ТЗ |
| 15 | Сроки годности по партиям, уведомления за 6 и 3 месяца | ✅ готово | Влито утром 21.07 (core#156+st#246) и проверено живьём: в списке партий — колонка «Срок годности» с бейджами «истекает/просрочено», на Пульте — новый домен «Склад» (партии к истечению), пороги 180/90 дней настраиваются (группа «Торговля и склад»); партия в горизонте падает в «Дела», просроченная — делом «списать товар»; для косметики завершение партии без срока годности блокируется сервером наглухо |
| 16 | Резерв: заказ бронирует товар; продать больше остатка нельзя | ✅ готово | Живой конкурентный тест 19.07 + уборка брошенных резервов |
| 17 | Мобильная приёмка/сборка со сканером штрихкодов | ✅ готово | Влито ночью (core#127+st#216) и проверено живьём в пересчёте STATUS-RECOUNT-2 (~01:21): экран /cabinet/barcode-scan — приход/расход, поле сканера, камера; на мобильном 390px рендерится корректно; живой скан кода вызвал реальный API (200), код не распознан → честно предложена одноразовая привязка «код ↔ товар» (alias) |
| 18 | Автопополнение: «что заказать сегодня» + черновики заказов | ✅ готово | Влито утром 21.07 (core#149+st#238) и проверено живьём: вкладка «Пополнение» в Закупках — горизонт 14 дней, честное «Пополнять нечего — все остатки в порядке» (дефицитов сейчас 0), блок собранных черновиков заказов; «Дозаказать» с карточки склада ведёт сюда же |
| 19 | Статус оплаты сквозной во всех модулях | ✅ готово | Последний пробел закрыт ночью (core#147+st#236): статус оплаты виден и в закупках — живая проверка 21.07 (Оплачен / Частично / Нет счёта) |
| 20 | Оплата меняется загрузкой банковской выписки | 🟡 частично | Механика готова и укреплена ночным аудитом: авто-матч влит, массовый прогон фоном с прогрессом, двойной запуск отбит гонкой; критичный денежный дефект пойман и ЗАКРЫТ (core#210) — частичный платёж больше не затирается (счёт 746 остаток 10,17 живьём, не 16,67), на общем клиентском viite уверенность честно ≤0,7 без авто-привязки. Осталась сама разборка ~2,5 тыс. накопленных строк — операционная работа бухгалтера, не код |
| 21 | Просроченное подсвечивается и падает в «Дела» | ✅ готово | Принято живьём 21.07 (15:54): в «Делах» 8 карточек просрочки с суммой, днями и уровнем взыскания 1/2/3/коллектор (источник dunning_overdue, бизнес-дата Хельсинки); карточки вычисляемые — дубли невозможны, закрываются сами при оплате. Письма-напоминания клиентам по-прежнему сознательно выключены до отдельного «да» Daniel |
| 22 | Ценовая политика: клиент → группа → по умолчанию | ✅ готово | Пересобрано и проверено 20.07 |
| 23 | Фикс-каталоги цен, перенос дословно | ✅ готово | Сверено 21.07: все 7 фикс-каталогов, число позиций сходится с Odoo по каждому (135 / 422 / 3 / 357 / 452 / 458 / 581), 18 выборочных цен по 4 каталогам совпали до цента; живой резолвер подтверждает (пример: нетто 9.27 → 11.63 с НДС 25.5% = цена Odoo) |
| 24 | Товар «только для профи» сервер не отдаёт чужим — не обойти | ✅ готово | |
| 25 | Переключатель цен с/без НДС на витрине | ✅ готово | Отклонение закрыто ночью (st#231: переключатель только подтверждённым PRO + вычищена утечка net-режима гостю); живая проверка 21.07 — гость переключателя не видит |
| 26 | Эстонский канал витрины (YDE) | ✅ готово | Проверено 20.07: эстонский канал активен, состав 1207 товаров совпадает с финским каналом |
| 27 | 3173 старых ценовых правила → 3 политики + исключения | ✅ готово | Закрыто 21.07: перенос структуры сверен полностью — фактически 10 политик + 7 фикс-каталогов + 26 исключений (оценка «~3» в ТЗ была прикидкой), все цены материализованы и дважды сверены в ноль до цента; редактор формул — Волна 2 решением Daniel |
| 28 | Сверка цен «в ноль» со старой системой | ✅ готово | 0 расхождений до цента по 1397 товарам (19–20.07) |
| 29 | Настраиваемые коэффициенты наценки | ❌ нет | Отложено решением Daniel 21.07 на Волну 2 (после переезда): «сейчас главное, чтобы цены показывались как надо» — а они показываются: цены материализованы из Odoo и сверены в ноль до цента (дважды, вкл. состав всех 7 каталогов). Редактор формул наценки (как pricelist-правила Odoo) перенесём дословно во Вторую волну; до переезда цены не трогаем — сломает сверку. Муляжные поля из кабинета убраны (#162+#254) |
| 30 | Кнопка «Сформировать прайс-лист» в PDF на бланке | ✅ готово | Экран и кнопка проверены живьём (~01:21); в ~02:30 доставлен недостающий конфиг (адрес сервиса ценообразования через Coolify) и выкачен резолвер с новыми ручками — полная цепочка под владельцем проверена до реального PDF (111 КБ, группы «Розничный», «PROF Опт» и др.) |
| 31 | Витрина: тёмная тема, бейджи, «с этим покупают» | ✅ готово | Закрыт целиком утром 21.07 и проверен живьём: бейджи были раньше; тёмная тема витрины (st#262) — переключатель в футере магазина (Светлая/Тёмная/Системная) включён и выключен под живым браузером; блок «С этим покупают» (st#259 + мост исторических заказов core#169 + матрица co-purchase в резолвере цен #57) — на карточке SHOR Enzyme Activating Solution живая карточка пары SHOR Enzymatic Powder (осмысленная двухкомпонентная система), цены и наличие из живых обогатителей |
| 32 | Отгрузка: обязательный вес + этикетка PostNord | ✅ готово | |
| 3.9 Производство — простой модуль | |||
| 33 | Рецептуры: состав, выход, техкарта, общие для обеих фирм | ✅ готово | |
| 34 | Google-документ — инструкция, не источник расчётных цифр | ✅ готово | |
| 35 | Производственный заказ: множитель, номер, себестоимость, лоты сырья | ✅ готово | |
| 36 | 6 стадий: от подбора до прихода готовой партии | ✅ готово | |
| 37 | Для не-косметики контроль и партия необязательны | ✅ готово | Проверено 21.07 по коду производства (fail-closed): косметике QC (pH) и срок годности обязательны — сервер не даёт завершить партию без них; не-косметике контроль и партия необязательны (QC=не требуется, партия пустая допустима). Уточнение: инвариант живёт в Производстве/QC (§3.9), а не в бух-первичке |
| 38 | Себестоимость по фактическому выходу, средневзвешенная | ✅ готово | |
| 39 | Прослеживаемость партий по европейскому регламенту | ✅ готово | |
| 40 | Номер партии присваивается только при успешном завершении | ✅ готово | |
| 41 | Срок годности и «после вскрытия» отдельно; этикетка партии | ✅ готово | Влито ночью 20.07 (#123+#211): этикетка партии — номер, даты производства и годности, «после вскрытия» (+PDF); ночная проверка: эндпоинт этикетки живой в API |
| 42 | Электронная навеска: рецептура масштабируется под объём | ✅ готово | |
| 43 | Таблица навески с допусками и подписью оператора | ✅ готово | Закрыто ночью 20.07 (#123+#211): время и оператор фиксируются на каждой строке навески, допуски держит сервер |
| 44 | Вне допуска — красное; отклонение только с причиной | ✅ готово | Дефект вечерней проверки закрыт ночью тем же днём (#123+#211): навеска вне допуска без причины отклоняется сервером наглухо, причина сохраняется на строке, повторный взвес в допуск её сбрасывает; покрыто тестами на реальной базе, поле причины живое в схеме API (ночная проверка) |
| 45 | Чек-лист контроля качества → Годна / Брак | ✅ готово | Влито ночью 20.07 (#123+#211): чек-лист вид/запах/pH/однородность, «Годна» для косметики без всех проверок запрещена; поля контроля живые в API (ночная проверка) |
| 46 | «Завершить»: заморозка листа, списание, приход с себестоимостью | ✅ готово | |
| 47 | Отчёт партии PDF с обязательным pH | ✅ готово | |
| 48 | Каталог не трогаем; флаг «своё производство» в ядре | ✅ готово | Проверено 20.07: флаг собственного производства в каталоге подтверждён (#123), а «каталог не трогаем» закреплено вечной CI-защёлкой (#200) |
| 49 | Виджеты производства в «Делах» | ✅ готово | |
| 50 | Сознательно без сложного планирования производства | ✅ готово | |
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 3.10 Бухгалтерия | |||
| 1 | Своя бухгалтерия: первичка, заказы и счета в ядре | ✅ готово | |
| 2 | Роль «бухгалтер»: видит только первичку своих фирм | ✅ готово | |
| 3 | Приём документов: почта kuitit@, папка сканера, ручная загрузка | ✅ готово | Все три канала готовы и оттестированы (мост почты — 16 тестов); оригиналы перенесённой первички починены #116 и проверены живьём вечером 20.07 (файл отдаётся, у отсутствующих — честное «файла нет» вместо ошибки); живой ящик kuitit@ включается в окно переезда — как боевые ключи Stripe |
| 4 | ИИ-разбор каждого входящего документа | ✅ готово | Было ❌ 18.07 — заработало до цента, чеки разобраны. Вечером 20.07 перенос движка в новую платформу завершён (#110): счёт Telia сверен 1:1 до цента, «25 недопарсенных чеков» оказались не документами; боевой поток включается в окно переезда |
| 5 | Структурные э-счета: разбор без ИИ, по правилам | ✅ готово | Закрыт живыми проверками 21.07 в два звена: (1) тестовое Finvoice-письмо по настоящему почтовому пути разобрано продакшен-кодом — все суммы до цента, референс с валидной контрольной суммой, 3 строки 1:1, дальше черновика ничего не создаётся (проводок и платежей — ноль); (2) достроен и живьём проверен dev-мост почты: письмо на kuitit@ теперь САМО доезжает до канала первички (обычное письмо — по-прежнему в тикеты), повтор того же письма дубль не создаёт. Полный сквозной прогон одним письмом до черновика — при первом реальном счёте |
| 6 | Автопроверки: суммы, VAT-номер, референс, дубли | ✅ готово | Закрыто 21.07 (core#206): к сходимости сумм/НДС (без ИИ, до цента) добавлена контрольная сумма референса — финский и эстонский viitenumero (веса 7-3-1) и международный RF (ISO 11649, mod-97) валидируются с тестами на валидные/невалидные примеры; невалидный референс = флаг проверки, не блокировка |
| 7 | Контур безопасности: ИИ предлагает — решает человек | ✅ готово | Аудит AI-HUMAN-GATE-QA прошёл все 6 точек: ИИ-разбор создаёт только черновики (не проводки); банковские подсказки сами не привязывают (закреплено тестом); черновики Ханны не отправляются без человека; свип не проводит; массовые применения — только вручную из CLI; пробы без прав → 401. Живые пробы утром 21.07 сходятся |
| 8 | Декларации подаёт только бухгалтер, ИИ — никогда | ✅ готово | |
| 9 | Чеки: фото, поля, привязка к карте и банку | ✅ готово | 132 из 147 привязаны к банку; защита от двойной привязки |
| 10 | Чеки: три состояния учёта | ✅ готово | Все 145 непривязанных разобраны поштучно |
| 11 | Экран «Чего не хватает» с порогом 90% | ✅ готово | |
| 12 | Каждый пробел → задача в «Дела» + сторож на Пульте | ✅ готово | Подтверждено живьём 21.07: в «Делах» 156 карточек-пробелов первички (источник completeness) — связка «пробел → задача» работает; сторож первички на Пульте живой. Плюс живьём видны все источники «Дел»: просрочка 8, Qred 2, отгрузки 3, согласования 6, дубли 28, производство 1, сторожа Пульта 4 |
| 13 | Касса: наличные + месячный отчёт бухгалтеру | ✅ готово | |
| 14 | Исходящие счета: срок, оплачен/нет, отметки напоминаний | ✅ готово | Добито ночью и утром: PDF-бланк ×7 языков (#122+#210) с логотипом (#135+#146+#159), кнопки «Скачать PDF» / «Открыть бланк» на карточке счёта (st#235 — находка пересчёта-2 закрыта), отметки 1/2/3-го напоминания на карточке и в списках (#145+st#234); живая проверка 21.07: карточка счёта показывает кнопки и отметки, PDF отдан (45 КБ, с логотипом) |
| 15 | Книжится сумма счёта, а не «к оплате» | ✅ готово | Проверено 20.07 по 10 живым счетам: книжится полная сумма счёта, «к оплате» — производная величина |
| 16 | Банковская сверка: банк — истина, сопоставление по референсу | ✅ готово | Движок подсказок влит 20.07 (#107+#50) и виден живьём: на странице банковской строки блок «Кандидаты» (проверено вечером под владельцем); разбор накопленных ~2,5 тыс. строк — отдельная работа в очереди (§3.8), кнопка массового прогона подсказок для него влита ночью (#122+#210) |
| 17 | Особые правила: комиссии, выплаты, «платит третий» | ✅ готово | Закрыто и прогнано живьём 22.07 (core#216+commerce#74). Движок классифицирует верно на 2583 реальных строках: 73 комиссии (Stripe/Revolut/банк-сборы) + 58 выплат Stripe — 0 ложных срабатываний, обе фирмы не смешаны, Revolut USD OUR-fee распознан отдельной строкой (счёт 1952). Особый кейс: раскладка выплаты по заказам считает до цента. Ночной прогон вскрыл и ЗАКРЫЛ 4 дефекта: (1) задвоение обмена Revolut на 695 USD в данных миграции — дубли убраны + защита в переносчике от повтора; (2) 80% подсказок были недостижимы через ручку — теперь фильтр hint_kind достаёт все 131; (3) массовый прогон не считал комиссии — добавлены счётчики; (4) паттерн huomautusmaksu. «Платит третий» закрыт ранее |
| 18 | Правка банковского статуса без документа запрещена | ✅ готово | |
| 19 | Кредит Qred: карточка с балансом до цента и графиком | ✅ готово | Закрыто 21.07 (core#196+st#296): вкладка «История» — единая хронология выписок и платежей с остатком нарастающим итогом + график. Живой API: 31 строка, последняя «платёж −500.00 → 5293.23» — сходится с балансом до цента; настоящий пробел был в данных (выписки без явного баланса) — построен честный расчёт из проведённых строк |
| 20 | Qred: письмо → разбор → проводка без дублей | 🟡 частично | Окно переезда: разбор провёл 9 реальных выписок, ждёт живой почты |
| 21 | Автосверка платежа Qred по референсу + сигнал при отклонении | ✅ готово | Влито 20.07 (#107+#50): платёж Qred 5293.23 сверяется по референсу автоматически |
| 22 | Сигналы Qred в «Дела» (5 видов) | ✅ готово | |
| 23 | Виджет Qred: долг, следующий платёж, мини-график | ✅ готово | Закрыто 21.07 (core#196+st#296): мини-график в виджете обзора получил реальные данные — живой API отдаёт спарклайн из 9 точек (по одной на выписку, последняя 5793.23 → после платежа баланс 5293.23); рендер покрыт тестами, тёмная тема и 7 языков — гварды зелёные |
| 24 | Перенос истории Qred с контрольными суммами | ✅ готово | Построчный аудит утром 21.07: деньги сходятся до цента — остаток кредита 5293.23 и счёт комиссий 261.50, каждая из 9 выписок сверена по типам строк; детализация агрегирована осознанно (суммы равны, платёжные аллокации свёрнуты); 8 оригинальных PDF выписок перенесены из старой системы с проверкой контрольных сумм файлов. Открытый бизнес-вопрос вне переноса: «фантомный» платёж 50 € в октябрьской выписке Qred, которого нет в банке, — книги его правильно не признают, вопрос у Daniel |
| 25 | Взыскание: три ступени напоминаний должникам | ✅ готово | Движок трёх ступеней (FI и EE) влит 20.07 (#107+#50) и живой: группы должников со ступенями и передачей коллектору отдаются из базы (проверено вечером); боевые отправки писем включаются в окно переезда с живой почтой — как и боевые ключи Stripe |
| 3.11 Магазин-витрина | |||
| 26 | Магазин на новом стеке: корзина, оплата, 7 языков, SEO | ✅ готово | Заказ гостем прошёл насквозь 19.07; +600 позиций |
| 27 | За основу — нынешний вид acnova.eu | 🟡 частично | Структурное сравнение с боевым 21.07: шапка/футер/меню/команда/цены (сумма до цента)/PRO-гейт/крошки — 1:1. Найдены и УЖЕ ПОЧИНЕНЫ: формат цен запятая-по-фински + убран лишний «sis. ALV» (st#308), кнопка «Osta nyt», пагинация «…13», контакт-поле, таб-бар «Koti», новости в 2 колонки (st#310). Осталось решение Daniel по структуре корзины (промокод/Link vs самовывоз+согласие) — на приёмке; финальный попиксельный проход — после его правок |
| 28 | Мега-меню + живой поиск: мгновенно, опечатки, фильтры | ✅ готово | Добит целиком утром 21.07 и перепроверен живьём в финальном пересчёте: мгновенные подсказки при наборе в шапке (st#263) — «nitri» открывает выпадашку с товарами и ценами (Nitriilikäsineet 9.41 €) и «Показать все результаты (6)»; опечатка kasipyhe → 4 товара на живом индексе (typo-пороги + финские синонимы + decompound, commerce#55); Cmd-K-палитра шлёт настоящий серверный запрос вместо мок-JSON (st#252); скорость поиска 49 мс, фильтры и мега-меню живые |
| 29 | Поиск отдаёт артикулы; цены и остатки — из ядра | ✅ готово | Проверено живьём 21.07: индекс поиска цен и точных остатков НЕ содержит (только флаги наличия; в коде стоит гард запрещённых полей), выдача отдаёт артикулы/ссылки, цены обогащаются резолвером, остатки — складом ядра; PRO-цена гостю не утекает (у PRO-товара цена честно пустая) |
| 30 | Каналы Финляндия/Эстония: свои НДС, валюта, нумерация | ✅ готово | Закрыто 21.07 по решению Daniel «продаём пока только от финской фирмы»: оба канала построены правильно (FI Acnova НДС 25,5% / EE YDE НДС 24%), и FI-only ВКЛЮЧЁН тремя слоями с живым доказательством — EE-чекаут отбивается на источнике (канал неактивен), эстонский гость покупает через финский канал (проверка до цента: 10,97 + 2,80 НДС = 13,77), эстонский остаётся языком; откат однокомандный, 293 EE-позиции сохранены для отката (commerce#67) |
| 31 | Оплата: боевой Stripe + ручные способы | 🟡 частично | Окно переезда: тестовый путь пройден целиком, боевые ключи в окно |
| 32 | Доставка: PostNord + реально используемые способы | ✅ готово | Закрыто и проверено живьём 21.07 (st#310+#304+commerce#70): чекаут отдаёт все 7 способов паритетно боевому с ценами (PostNord 7,97→10,00 · Parcel 12,05→15,12 · Home 13,05→16,38 · DPD 14→17,57 · самовывоз Helsinki/Tallinn/Tuusula 0), НДС 25,5%, стоимость идёт в итог; цену доставки пишет ТОЛЬКО ядро (клиенту не доверяет). Живая интеграция PostNord (креды/этикетки) — к окну; сейчас фикс-цены = паритет с боевым |
| 33 | «Голая страница» исчезает: выкладка без простоя | 🟡 частично | Окно переезда: на стенде работает, финальное подтверждение в окно |
| 34 | Все старые адреса переадресуются на новые | ✅ готово | Проверено 100%: 2319 из 2319 |
| 35 | Оптимизация под ИИ-ответы (GEO) | ✅ готово | Закрыто 21.07: /llms.txt живой (200, настоящий обзор), разметка Schema.org полная (см. п.36), ИИ-боты (GPTBot/ClaudeBot/Perplexity и др.) открываются тумблером индексации в окно переезда одним движением — на dev всё правильно закрыто; глубокая контентная GEO-оптимизация — процесс после переезда |
| 36 | Разметка для поисковиков: товар, организация, крошки, FAQ | ✅ готово | Закрыто живой проверкой 21.07: полный JSON-LD карточки — Product/Offer с ценой, честным наличием по остатку, возвратами, сроками доставки, продавцом + Organization + крошки; у PRO-товара гостю цены в разметке НЕТ (проверено рекурсивно по всему графу) |
| 37 | Скорость сайта — оценка «хорошо» | ✅ готово | |
| 38 | Языковые метки на 7 языков + карты сайта | ✅ готово | Влито 19–20.07, подтверждено живой проверкой |
| 39 | Фид Google Merchant, поиск по картинке и голосу | 🟡 частично | Фид живой и проверен скачиванием ночью 20→21.07: 188 позиций, PRO-товары полностью исключены, мёртвые поля ожили (#51+#52 после золотой проверки FEED-VERIFY); поиск по картинке и голосу не начаты — потому пункт целиком ещё не «готово» |
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 3.12 Свой редактор сайта | |||
| 1 | Весь сайт правится из кабинета без кода | ✅ готово | Закрыто 21.07 (st#293): сырые надписи статусов переведены (гвард i18n в CI не даст вернуться), 7 областей открываются в редакторе; подключение областей к рендеру витрины — чип SITE-AREAS-WIRE (fail-open: пока область не опубликована, вид прежний) |
| 2 | Редактор свой, внутри ядра | ✅ готово | |
| 3 | Страницы — блочный холст: палитра, перестановка, с нуля | ✅ готово | Прогнан живой сквозной сценарий 21.07: создание страницы с нуля → палитра 17 типов блоков → добавление → перестановка → сохранение → публикация (конвейер 0082, run завёлся, снапшот версии) → витрина отдаёт ровно переставленный порядок блоков. Доведено до конца, доказано на живом dev |
| 4 | Каждое из 12 меню — свой редактор | ✅ готово | Сбой устранён, проверено на живом меню |
| 5 | Области сайта: шапка, футер, объявление, реквизиты… | ✅ готово | Закрыто живьём 21.07 (st#309): 7 областей в редакторе + витрина ИХ ПОТРЕБЛЯЕТ — полный круг публикации прогнан на живом dev (полоса-объявление: опубликована → появилась на трёх зонах с языковым фолбэком и ссылкой → выключена → пропала; БД возвращена байт-в-байт). Фейл-оупен: пока область не опубликована, вид прежний (сравнение с боевым не ломается) |
| 6 | Библиотека из 44 типов блоков (~109 видов) | 🟡 частично | Отложено ТЗ: библиотека набирается по волнам, стартовый набор есть |
| 7 | План добора блоков по волнам | 🟡 частично | Отложено ТЗ: добор сознательно после переезда |
| 8 | Тексты блоков на 7 языках; доступность; без тяжёлых скриптов | ✅ готово | Закрыто 21.07 (st#312): последний контраст-хвост (крошки+футер, уровень «serious») починен вариантом Б по выбору Daniel — все пары ≥4.5:1 WCAG AA в светлой и тёмной теме, замерено живьём в браузере. Ранее: 0 критичных нарушений доступности, JS-бандл 272 КБ, 0 сторонних скриптов, тексты 7 языков |
| 9 | Без фейковых приёмов: «N купили», таймеры и пр. | ✅ готово | |
| 10 | Хранение: версии, переводы, медиа, переадресации, меню | ✅ готово | |
| 11 | Структура страницы одна на 7 языков, переводится текст | ✅ готово | |
| 12 | Конвейер публикации: черновик → публикация → прогрев → сверка | ✅ готово | Влит утром 21.07 (#158+#249) и подтверждён живым прогоном на реальной публикации (перевод адреса на странице производства): после редеплоя relay конвейер прошёл весь путь — публикация → прогрев всех 7 языков (каждый ответил 200) → сверка версии витрины «подтверждено»; проверено в финальном пересчёте живым запросом статуса конвейера под владельцем; статус-плашка в редакторе показывает этапы |
| 13 | Предохранители публикации: SEO, юридические страницы | ✅ готово | Влиты утром 21.07 (core#168+st#258) и проверены живьём в финальном пересчёте: в Настройках — «Предохранитель SEO при публикации» (warn — дыры предупреждают; strict — публикация страницы с пустыми SEO-полями блокируется), проверка учитывает только языки с реальным контентом; юридические и корневые страницы блокируются в любом режиме (менять — только владелец, с переподтверждением при существенном изменении); в редакторе — жёлтая пометка SEO-дыр на статус-плашке |
| 14 | Изменил оригинал — переводы сами помечаются «устарел» | ✅ готово | |
| 15 | Единые адреса; смена адреса — сразу переадресация | ✅ готово | |
| 16 | Старые адреса со старого сайта работают | ✅ готово | 2319 из 2319, 100% (проверено 19.07) |
| 17 | Права: кто правит, кто публикует; юр. страницы — владелец | ✅ готово | Закрыто 21.07 (#227+#293): гейты доступа разведены — редактор правит (CmsEditAccess), но публикует только владелец/команда (CmsPublishAccess), существенное изменение юр-страниц (privacy/terms/imprint) — только владелец; покрыто тестами (editor publish→403, team юр-публикация→403, owner→200); живьём team создал и опубликовал обычную страницу |
| 18 | Одновременная правка: метка «кто правит» + защита от затирания | ✅ готово | Влито ночью 20.07 (#118+#204): черновик блокируется с автопродлением, второй редактор видит баннер «редактирует…», версия черновика защищает от затирания; ночная проверка: механизм блокировки живой в API |
| 19 | Редактор не трогает каталог и служебные зоны | ✅ готово | |
| 3.13 Новости и соцсети — отложено ТЗ на после переезда; берём в работу после текущей партии | |||
| 20 | Единый композер новости: сразу на сайт и в соцсети | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 21 | Адаптация поста под каждую сеть | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 22 | Расписание публикаций, доска статусов | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 23 | Публикация через собственный планировщик | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 24 | Единый ящик комментариев всех сетей | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 25 | Сети старта: Telegram, Facebook, Instagram, YouTube | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 26 | Не берём: X, TikTok, Pinterest | ✅ готово | |
| 27 | Личные сообщения — в общих «Входящих» | ❌ нет | Отложено ТЗ: каналы мессенджеров после переезда |
| 28 | Наружу публикует только человек; у ИИ кнопки нет | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 29 | Вставка товара в пост: фото, цена, ссылка из каталога | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 30 | Опубликованные посты — источник соцстены сайта | 🟡 частично | Отложено ТЗ: стена на главной уже живая (12 постов); автоподача придёт с модулем |
| 31 | Весь модуль «Новости и соцсети» — отложен на после переезда | ❌ нет | Сознательно не начат до переезда — так в ТЗ |
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 3.14 Рассылки — отложено ТЗ на после переезда; берём в работу после текущей партии | |||
| 1 | Свой конструктор писем + свой сервер рассылок | ❌ нет | Отложено ТЗ: движок на сервере стоит, конструктора и интерфейса нет |
| 2 | Отправка только с отдельного поддомена новостей | ❌ нет | Отложено ТЗ; почтовые записи ставятся в окно переезда |
| 3 | Подписчики из единого справочника, сегменты | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 4 | Подписка с двойным подтверждением + галочка при заказе | ✅ готово | Сделано 19.07; журнал согласий (3206 записей) перенесён |
| 5 | Письмо всегда на языке подписчика | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 6 | Блочный конструктор, 7 языковых версий, утверждает человек | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 7 | Кампании: разовые и автоматические серии | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 8 | Не больше 2 писем на человека за 7 дней | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 9 | Отписка в один клик + страница отписки без входа | ❌ нет | Ждёт сам модуль рассылок (отложено ТЗ); центр согласий уже работает |
| 10 | Рассылка — канал «Подписчики» в общем композере | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 11 | Панель здоровья почтового домена с автостопом | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 12 | Перенос подписчиков с согласиями + прогрев поддомена | 🟡 частично | Отложено ТЗ: история согласий уже перенесена; перенос и прогрев после переезда |
| 13 | Согласия отдельно по каждой фирме | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 14 | Весь модуль Рассылок — отложен на после переезда | ❌ нет | Так задумано в ТЗ |
| 3.15 Знания — решением Daniel 20.07 переведены из отложенного ТЗ в первую волну; вечером 20.07 каталог влит и живой (#109+#186) | |||
| 15 | Внутренняя база знаний в Google Docs + каталог в кабинете | ✅ готово | Каталог влит и живой: раздел «Знания» в кабинете отдаёт все 50 реальных статей, синхронизированных с Google Drive (проверено вечером 20.07 живым запросом и открытием страницы под владельцем) |
| 16 | Публичные «Знания» на сайте — своя подсистема | ✅ готово | Проверено живьём 20.07: статьи открываются |
| 17 | Структура папок и каталог по постоянному номеру документа | ✅ готово | Синхронизация переносит и папки (50 документов + 16 папок), у каждого документа постоянный номер и адрес в каталоге |
| 18 | Система пишет в Google только служебные метки | ❌ нет | Подключение к Google пока сознательно «только чтение» — безопаснее; PR со служебными метками готов (core#167, по умолчанию выключено) и ждёт очереди вливания — не влито, потому честно ❌ |
| 19 | Просмотр в кабинете; правка кнопкой «Открыть в Google Docs» | ✅ готово | Проверено живьём 20.07: статья открывается в кабинете, у документа живая ссылка на оригинал в Google Docs; на странице прямо написано «правится в Google Docs, здесь только каталог и последний снимок» |
| 20 | Привязка статьи к сделке, товару, процедуре | ✅ готово | Влито утром 21.07 (#160+#250) и проверено живьём полным кругом: на статье блок «Связано» (Сделка CRM / Тикет / Другое + поиск) — связь со сделкой создана, отобразилась и удалена; обратную витрину на карточке сделки добрать (заметка) |
| 21 | Поиск по знаниям через общий быстрый поиск | ✅ готово | Влито ночью 20.07 (#205): статьи Знаний ищутся из общего быстрого поиска (вместе с банк-строками и закупками), модули открываются по имени на любом из 7 языков; каталог Знаний отдаёт статьи живьём (ночная проверка) |
| 22 | Если Google недоступен — снимок только для чтения | ✅ готово | Кабинет показывает сохранённый снимок статьи из своей базы, а не тянет Google при каждом открытии — при недоступном Google каталог продолжает читаться |
| 23 | Доступ только внутри организации, без широких прав | ✅ готово | Раздел закрыт входом в кабинет (без входа — страница логина, проверено 20.07); подключение к Google — отдельным служебным ключом только на чтение |
| 24 | Гигиена документов: ответственный, бейдж «устарел», снимки | ✅ готово | Влита целиком (ядро #175 + витрина #256) и принята живьём 21.07: панель «Снимки» с авто-версией и просмотром содержимого, назначение и снятие ответственного переживают перезагрузку; версия пишется только при реальном изменении текста, бейджи устаревания на каталоге были ранее (#186). Оговорка: источник «статья устарела» в «Делах» ждёт первых реальных данных — сейчас ни одна из 59 статей не помечена |
| 25 | Перенос всех статей (222) со сверкой | ✅ готово | Пересчёт 20.07: реальных статей 50 (остальные из 222 — служебные записи старой системы); все 50 на Drive и в живом каталоге кабинета — сверено по числу вечером 20.07 |
| 26 | Весь каталог Знаний в кабинете | ✅ готово | Влито и живо (#109+#186): 50 статей, 7 языков, папки, бейджи; первичная синхронизация с Drive прошла без ошибок |
| № | Пункт | Статус | Почему / комментарий |
|---|---|---|---|
| 3.16 Пульт (сторожа системы) — экран живой, проверен под владельцем 20.07; учёт 18.07 отставал от влитых PR #128/#129 | |||
| 3.16.1 | Общий светофор + «что не так» простыми словами | ✅ готово | Проверено живьём 20.07: светофор и строка «Есть проблемы, требующие внимания» на экране |
| 3.16.2 | Карточки 7 областей с кнопкой «Исправить» | ✅ готово | Проверено живьём 20.07: 7 областей карточками, раскрытие, кнопки «Исправить»; у почты и соцсетей данные пока заготовки |
| 3.16.3 | Сторож «Сайт и SEO»: индексация, позиции, скорость, битые ссылки | ✅ готово | Закрыто живьём 21.07: щадящий обход dev-витрины отдельным таймером (первый прогон: 40 страниц, 0 битых ссылок) + TTFB по всем 7 языковым зонам с порогами (сборщик отправил снимки, ядро приняло); «позиции» в выдаче — только после подключения Search Console на боевом домене (окно), так и задумано |
| 3.16.4 | Сторож «Переводы и контент» | ✅ готово | Принято живой QA 21.07: в развороте области — чипы по полю SEO 83,6% · Alt-тексты 59% · Контент 83,6% плюс разбивка по 6 языкам (240 языков-страниц), значения с живого API (#292); светлая/тёмная, десктоп/мобайл — без замечаний |
| 3.16.5 | Сторож «Магазин и Merchant» | ✅ готово | Закрыто 21.07 (core#198+st#298+commerce#68): область живая — фид Merchant (188 позиций, PRO исключены), манифест сборки, дата свежести; сборщик Пульта шлёт снимок фида каждые 5 минут (живой прогон: отправлено 9, принято 9) |
| 3.16.6 | Сторож «Почта и рассылки» | ❌ нет | Отложено ТЗ: реальных почтовых данных пока нет |
| 3.16.7 | Сторож «Соцсети» | ❌ нет | Отложено ТЗ: модуля соцсетей нет — сторожить нечего |
| 3.16.8 | Сторож «Бухгалтерия»: несверенное, Qred, сроки НДС | ✅ готово | Принято живой QA 21.07: несверенные платежи теперь в области разрезом фирма·банк (ACNOVA·OP 1150 · ACNOVA·Revolut 676 · YDE·LHV 738 — точное совпадение с API, #292); Qred-сигналы, первичка и дедлайны KMD/ALV были живы ранее. Отдельный сигнал порога OSS сознательно отложен: при FI-only дистанционных продаж в ЕС нет — станет актуален с открытием EU-каналов |
| 3.16.9 | Сторож «Серверы»: нагрузка, диски, сертификаты, бэкапы | ✅ готово | Полнота добита 21.07: к живому экрану (9 проверок, 20.07) добавлены свежесть почасовых дампов, здоровье 4 системных таймеров и запас диска dev-сервера — отдельный сборщик на dev-хосте тикает каждые 5 минут, ядро живьём приняло все 3 новых сигнала; бэкапы дополнительно подтверждены учением по восстановлению (обе базы «в ноль») |
| 3.16.10 | Критичное → задача в «Дела»; пороги; Telegram; история | ✅ готово | Закрыт в два приёма 21.07: утренняя проверка с экрана — пороги меняются/сохраняются/возвращаются с историей изменений (живое срабатывание порога диска поймано на глазах), настройка Telegram-алертов сохраняется; недостающий экран истории СТАТУСОВ сигналов построен в тот же день (переходы «было→стало» пишутся только при смене, хранятся 90 дней, вкладка «История» на Пульте) и увиден живьём вечерним смоуком |
| 3.16.11 | Минимум Пульта: индексация + переводы + сервер + бухгалтерия | ✅ готово | Проверено живьём 20.07: все 4 области видны владельцу на живом экране |
| 3.17 Настройки — закрыты целиком ночью 20→21.07 (#213): все семь пунктов ✅ | |||
| 3.17.1 | Все параметры в одном модуле (175 настроек, 18 групп) | ✅ готово | Проверено живьём 20.07: экран Настроек — 18 групп, поиск, метки красной зоны и секретов (ночная перепроверка: группы отдаются под владельцем) |
| 3.17.2 | У настройки: описание, «вернуть как было», история | ✅ готово | Закрыто #213: живой тест «изменил 85 → 90 → откат по истории» — след чист, история и «вернуть как было» работают с экрана |
| 3.17.3 | Секреты: маска, раскрытие по подтверждению, ротация | ✅ готово | Закрыто #213: маска и раскрытие по подтверждению, ротация секрета влита; попутно починен гейт — кнопки «Раскрыть»/«Ротировать» видны только владельцу; механизмы живые в API (ночная проверка) |
| 3.17.4 | «Красная зона» опасных настроек с подтверждением фразой | ✅ готово | Закрыто #213: применение опасных настроек — только с подтверждением фразой (97 «красных» настроек размечены) |
| 3.17.5 | Взаимозависимые настройки пакетом «черновик → применить» | ✅ готово | Закрыто #213: атомарное пакетное применение с экрана, для красной зоны — с фразой-подтверждением |
| 3.17.6 | Поиск настроек + выгрузка/загрузка конфигурации | ✅ готово | Закрыто #213 (+#205): настройки находятся и из общего быстрого поиска; выгрузка (176 настроек) и загрузка с обязательным пробным прогоном — выгрузка проверена ночью живым запросом |
| 3.17.7 | Список того, что сознательно не настраивается из кабинета | ✅ готово | Закрыто #213: экран «сознательно не настраивается из кабинета» со всеми 7 пунктами из ТЗ |
| 3.18 Портал клиента | |||
| 3.18.1 | Портал — отдельное приложение, клиент видит только своё | ✅ готово | Подтверждено 19.07 гостевым заказом |
| 3.18.2 | Повтор возможностей старого портала 1:1 | 🟡 частично | ЧЕСТНЫЙ ПЕРЕСЧЁТ 22.07 (прежняя формулировка «карты и часть остального» занижала долг — сверено с боевым Odoo поимённо). Воспроизведено: заказы (список/деталь/повтор/отмена/трекинг), тикеты с перепиской, профиль и адреса, смена пароля, саморегистрация и сброс пароля, согласие на рассылку, избранное и сравнение. Сверх старого — возвраты RMA в 3 шага (в Odoo их нет). НЕ воспроизведено (17 пунктов): котировки · оплата счёта/заказа онлайн · сохранённые карты · PDF заказа · счётчики на 7 из 8 плиток · обсуждение и «следить» на заказе · оценка тикета · второй вид согласия и история согласий · самообслуживаемый DSAR (сейчас заявка тикетом) · настоящий TOTP (сейчас код на почту — это НЕ TOTP) · passkey · соцвход Google/Facebook/Microsoft (кнопки-заглушки) · связанные аккаунты · привязка Telegram · история бонусов · деактивация аккаунта · раздел «Документы» показывает только PDF счетов. Сознательно отброшено (на боевом не используется): подписи (0 использований), подписки (модуля нет), таймшиты, проекты, RFQ поставщика. Не подтверждено живьём: счета и документы — код есть, но у тестового клиента 0 счетов, сквозного прогона не было. |
| 3.18.3 | Сверх старого: трекинг, возвраты в 3 шага, отмена | 🟡 частично | Возвраты в 3 шага живые (#121+#209). Отмена — пересчёт STATUS-RECOUNT-2 (~01:21) лично прогнал мастер живьём: шаг 2 «Что вернуть и почему» → радиокнопка «Отмена заказа» реально работает; прямая кнопка на карточке заказа добавлена отдельно (st#226, чип PORTAL-CANCEL-VERIFY уже гонял её по 7 языкам и мобайлу) — эта часть пункта честно ✅. Трекинг посылки (core#129+st#219) смержен, но сегодня живым заказом с реальной отгрузкой не перепроверен — остаётся не до конца подтверждённым, поэтому пункт целиком пока держим 🟡 |
| 3.18.4 | Центр согласий: даты, версии, отзыв в один клик | ✅ готово | Укреплён 19.07: журнал согласий, согласия при заказе, настройки cookie |
| 3.18.5 | Обращения из портала с пометкой + переписка на заказе | ✅ готово | Закрыто 19.07: переписка на карточках полная |
| 3.18.6 | «Всё связанное с нами — в одном месте» | ✅ готово | Закрыто 21.07 (st#306): аудит портала живьём — заказы (магазин+исторические), возвраты RMA, счета, PDF-документы, адреса, согласия, профиль+2FA, тикеты, PRO-статус; доклеены недостающие плитки «Возвраты» и «Знания» — теперь всё достаётся с одного дашборда (8 плиток, 7 языков) |
| 3.18.7 | Роли пользователей портала | ❌ нет | Отложено ТЗ; каталог Знаний уже живой (20.07), сами роли — после переезда |
| 3.18.8 | Портал внутри сайта; заказы из магазина, данные из ядра | 🟡 частично | Отложено ТЗ: разделение подтверждено; единый вход по плану после переезда |
| 3.19 Интеграции | |||
| 3.19.1 | Перенос всех интеграций; счётчики только с согласия | 🟡 частично | В очереди: механика согласий готова, сами счётчики не подключены |
| 3.19.2 | Facebook/Instagram: пиксель, переписка, Telegram-магазин | ❌ нет | Отложено ТЗ: каналы переписки после переезда |
| 3.19.3 | LinkedIn: публикации через планировщик | ❌ нет | Отложено ТЗ: модуль соцсетей целиком после переезда |
| 3.19.4 | YouTube: видео на витрине | ❌ нет | Отложено ТЗ — берём после текущей партии |
| 3.19.5 | Trustpilot: заказ выполнен → приглашение на отзыв | 🟡 частично | Окно переезда: включать на реальных боевых заказах |
| 3.19.6 | Отзывы на самом сайте | ❌ нет | В очереди |
| 3.19.7 | Счётчики Google, фид Merchant, защита форм от ботов | ✅ готово | Закрыто 21.07: фид живой (188 позиций, PRO исключены); защита всех публичных форм влита (core#201+st#300: honeypot + time-trap + rate-limit, без сторонних скриптов, 3810 тестов); счётчики Google физически подключаются только на боевом домене — в окно, по механике согласий всё готово |
| 3.19.8 | Stripe — ядро оплаты; PostNord — доставка | ✅ готово | Тестовая оплата пройдена целиком 19.07; боевые ключи — в окно |
| 3.19.9 | WooCommerce — в архив, не переносим | ✅ готово | |
| 3.19.10 | Amazon — сразу после портала | ❌ нет | Отложено ТЗ: так расставлено в самом ТЗ |
| 3.19.11 | Двойное подтверждение подписки → согласие + рассылки | 🟡 частично | Отложено ТЗ: цепочка сделана 19.07; модуль рассылок позже |
| 3.19.12 | Вход через Google, Facebook, Microsoft, ключ входа | ❌ нет | Отложено ТЗ: нерабочие кнопки честно скрыты, обманных заглушек нет |
| 3.19.13 | Связка аккаунтов, страница «Подключённые аккаунты» | ❌ нет | Ждёт входа через соцсети — укреплять пока нечего |
| 3.19.14 | Гость без трения; «аккаунт в 1 клик» после заказа | ✅ готово | Закрыт полным живым путём 21.07: гость → корзина → настоящая тестовая оплата → страница «Спасибо» с блоком «Аккаунт в 1 клик» и верным адресом → письмо → установка пароля → вход, оба заказа привязаны к новому аккаунту; повторный клик — честное «у вас уже есть аккаунт» без дубля; окна входа работают модалкой поверх сайта (проверено ранее). Перед боевым релизом — мобильный прогон именно этого блока (эмулятором) |
| 3.19.15 | Единый вход во всём новом стеке | 🟡 частично | Отложено ТЗ: базовый вход работает, единый — после переезда |