# План реорганизации Manager 2.0 Рабочая папка рефакторинга: `docs/refactor/`. Связанные документы: - [Исходное ТЗ](source-tz.md) - [Карта нового меню](menu.md) - [ТЗ: ДКР](tz-dkr.md) - [ТЗ: Каталог общий](tz-catalog-common.md) - [ТЗ: Графики](tz-schedules.md) - [ТЗ: Рекламации](tz-reclamations.md) - [ТЗ: Запчасти](tz-spare-parts.md) - [ТЗ: Склад наличие](tz-stock-availability.md) - [ТЗ: Документация](tz-documents.md) - [ТЗ: Технич. описание](tz-technical-description.md) - [ТЗ: Калькуляции](tz-calculations.md) - [ТЗ: Администратор](tz-admin.md) ## Цель Перевести текущую CRM в структуру Manager 2.0: реорганизовать верхнее меню, сохранить самостоятельный модуль ДКР с его собственным каталогом, добавить отдельный `Каталог общий`, добавить заглушки для новых модулей и подготовить отдельные ТЗ по каждому разделу перед глубокой разработкой. ## Принятые решения - [x] ДКР остается самостоятельным модулем. - [x] Каталог ДКР и `Каталог общий` — разные сущности. - [x] Каталог ДКР остается внутри меню ДКР. - [x] `Каталог общий` реализуется отдельно как общий справочник платформы. - [x] `Запчасти` — общий модуль для всей платформы, включая ДКР. - [x] `Склад наличие` должен быть реализован полностью по образцу раздела `Запчасти`, с адаптацией под МАФ/позиции из `Каталог общий`. - [x] Новые модули на первом этапе получают страницы-заглушки `В разработке`. - [x] Основная карта меню хранится в [docs/refactor/menu.md](menu.md). - [x] Текущие рабочие маршруты оставляем без переименования. - [x] На первом этапе оставляем текущие права доступа. - [x] Реорганизацию меню делаем сразу общей для всей платформы Manager 2.0. - [x] Заглушки новых модулей показываем всем авторизованным пользователям. - [x] На новые модули выбранный год не влияет. - [x] `Технич. описание` встроено в модуль `Каталог общий`; готовый Laravel-модуль используем как источник экспорта. - [x] `Калькуляции` работают через внешний API: запрос по артикулу, возврат калькуляции при наличии. - [x] `Рекламации -> ДКР` реализуется как отдельная вкладка на основе текущего списка с обязательным фильтром по источнику. - [x] Источник рекламации хранится отдельным полем: при создании из площадки — `ДКР`, иначе `Прочее`. - [x] В интерфейсе рекламаций обязательны отдельные вкладки `Все` и `ДКР`. - [x] Из графика заказов рекламация создается по выбранным МАФ через текущую форму и получает источник `Прочее`. - [x] Документация для оплаты доступна только для рекламаций источника `ДКР`. - [x] Маршруты `Каталог общий` используют префикс `common-catalog/...`. - [x] Таблицы и права `Каталог общий` используют техническое имя `common-catalog`. - [x] Техническое имя модуля `Склад наличие`: `stock`. - [x] Роль `помощник руководителя`: `assistant_head`. ## Этап 0. Документация - [x] Изучить ТЗ Manager 2.0 и схему зависимостей. - [x] Составить карту нового меню. - [x] Перенести карту меню в `docs/refactor/menu.md`. - [x] Создать общий план реализации в `docs/refactor/plan.md`. - [x] Написать отдельное ТЗ для модуля `ДКР`: [tz-dkr.md](tz-dkr.md). - [x] Написать отдельное ТЗ для модуля `Каталог общий`: [tz-catalog-common.md](tz-catalog-common.md). - [x] Написать отдельное ТЗ для модуля `Графики`: [tz-schedules.md](tz-schedules.md). - [x] Написать отдельное ТЗ для модуля `Рекламации`: [tz-reclamations.md](tz-reclamations.md). - [x] Написать отдельное ТЗ для модуля `Запчасти`: [tz-spare-parts.md](tz-spare-parts.md). - [x] Написать отдельное ТЗ для модуля `Склад наличие`: [tz-stock-availability.md](tz-stock-availability.md). - [x] Написать отдельное ТЗ для модуля `Документация`: [tz-documents.md](tz-documents.md). - [x] Написать отдельное ТЗ для модуля `Технич. описание`: [tz-technical-description.md](tz-technical-description.md). - [x] Написать отдельное ТЗ для модуля `Калькуляции`: [tz-calculations.md](tz-calculations.md). - [x] Написать отдельное ТЗ для модуля `Администратор`: [tz-admin.md](tz-admin.md). ## Статус готовности этапов | Этап | Статус | Почему | |---|---|---| | 1. Реорганизация меню и заглушки | Готов к реализации | Решены структура меню, права для заглушек и сохранение текущих маршрутов. | | 2. Адаптация существующих разделов после переноса | Готов к реализации | ДКР, запчасти, администратор и текущий график монтажей уже существуют; нужны проверки и точечные правки без смены логики. | | 3. Рекламации: вкладки и источник | Готов к реализации | Решены вкладки `Все`/`ДКР`, поле источника и запрет платежных документов для `Прочее`. | | 4. Общий каталог: ядро | Готов к реализации | Есть маршрутный префикс, техническое имя, шаблон Excel, состав колонок и предварительные типы данных. | | 5. Документация | Готов к реализации | Решены дерево папок, наследование прав, версии и хранение файлов. | | 6. Склад наличие: ядро | Готов после ядра общего каталога | Логика берется из `Запчасти`, но позиции должны браться из `Каталог общий`. PDF-экспорт остается отдельным открытым подпунктом. | | 7. Техническое описание | Готово после ядра общего каталога и анализа готового Laravel-модуля | Функция встроена в карточку общего каталога, но нужно получить модуль и форматы выгрузки. | | 8. Калькуляции | Не готово к полной реализации | Нужен контракт внешнего API. Можно сделать только место/кнопку в карточке общего каталога. | | 9. Графики заказов и доставок | Не готово к полной реализации | Нужны формат обмена с 1С, поля, статусы и правила доставок/отгрузок. | | 10. Рекламации из графика заказов | Готово только после графика заказов | Сценарий согласован, но точка входа зависит от карточки заказа в графике. | ## Этап 1. Реорганизация меню и заглушки Статус: **реализован, ожидает пользовательской проверки**. - [x] Проверить текущие permissions для всех существующих пунктов меню. - [x] Для новых пунктов-заглушек открыть доступ всем авторизованным пользователям. - [x] Добавить общий механизм страницы `В разработке`. - [x] Добавить маршруты для новых разделов-заглушек. - [x] Перестроить `resources/views/layouts/menu.blade.php` под новую древовидную структуру. - [x] Сгруппировать существующие пункты ДКР внутрь верхнего меню `ДКР`. - [x] Оставить `Каталог` внутри меню `ДКР`. - [x] Добавить отдельный верхний пункт `Каталог общий`. - [x] Сгруппировать `График монтажей` внутрь верхнего меню `Графики`. - [x] Добавить заглушки `График заказов` и `График доставок`. - [x] Разложить `Рекламации` на `Все` и `ДКР`. - [x] Оставить `Запчасти` отдельной верхней группой с текущими вкладками. - [x] Добавить заглушки `Склад наличие -> Наличие` и `Склад наличие -> Заказы`. - [x] Добавить заглушки `Документация`, `Каталог общий`, `Калькуляции`. - [x] Проверить, что выбранный год не скрывает и не фильтрует новые модули. - [x] Переименовать группу `Администрирование` в `Администратор`. - [ ] Проверить отображение меню для основных ролей. ## Этап 2. Адаптация существующих разделов после переноса Статус: **готов к реализации**. Задача этапа — проверить существующие рабочие разделы после изменения меню и внести точечные правки без изменения бизнес-логики. - [ ] Проверить, что разделы ДКР открываются из группы `ДКР`. - [ ] Проверить, что каталог ДКР остался внутри группы `ДКР`. - [ ] Проверить, что текущий `График монтажей` открывается из группы `Графики`. - [ ] Проверить, что раздел `Запчасти` работает в новой структуре меню без изменения бизнес-логики. - [ ] Проверить вкладки `Каталог`, `Заказы запчастей`, `Контроль наличия`, `Справочник расшифровок`, `Справка`. - [ ] Проверить, что `Запчасти` используются как общий модуль, включая ДКР. - [ ] Проверить, что меню `Администратор` содержит текущие пункты администрирования. - [ ] Проверить, что `Подрядчики` всегда отображаются внутри группы `Администратор`. - [ ] Проверить доступы для пользователей, ролей и настроек. - [ ] При необходимости добавить права для новых разделов Manager 2.0. ## Этап 3. Рекламации: вкладки и источник Статус: **готов к реализации для текущих рекламаций**. Создание рекламации из графика заказов вынесено в отдельный этап, потому что зависит от реализации графика заказов. - [ ] Реализовать отдельные вкладки `Все` и `ДКР`. - [ ] Реализовать вкладку `ДКР` на текущем списке с обязательным фильтром по источнику. - [ ] Добавить отдельное поле источника рекламации: `ДКР` / `Прочее`. - [ ] Проверить создание рекламаций по площадкам ДКР. - [ ] Запретить формирование документации для оплаты для рекламаций источника `Прочее`. - [ ] Проверить формирование запросов на запчасти из рекламации. - [ ] Сохранить текущую рабочую логику рекламаций. ## Этап 4. Каталог общий: ядро Статус: **готов к реализации ядра**. В этот этап не входят внешняя API-интеграция калькуляций и перенос экспорта техописаний. Для них нужны отдельные вводные. - [ ] Зафиксировать, что текущий `catalog.*` относится к каталогу ДКР. - [ ] Спроектировать маршруты с префиксом `common-catalog/...`, таблицы и права с техническим именем `common-catalog`. - [ ] Сверить текущую модель каталога ДКР с требованиями общего каталога как источник паттернов, без смешивания данных. - [x] Зафиксировать состав и порядок колонок общего каталога. - [x] Зафиксировать файл `docs/refactor/Шаблон Каталог ощий.xlsx` как источник колонок общего каталога. - [x] Зафиксировать предварительные типы данных по шаблону общего каталога. - [ ] Спроектировать обязательность и валидацию утвержденных полей. - [ ] Использовать текущий файловый механизм для хранения фото и документов позиции. - [ ] Доработать импорт/экспорт позиций. - [ ] Доработать карточку позиции. - [x] Зафиксировать встраивание `Технич. описание` в карточку общего каталога. - [ ] Добавить в карточку место под будущую кнопку/блок `Калькуляции`. - [ ] Проверить связи с графиками, рекламациями и складом наличия. ## Этап 5. Документация Статус: **готов к реализации**. - [ ] Реализовать дерево папок. - [ ] Разрешить создание корневых папок только админу. - [ ] Реализовать права чтения и записи на папки для всех, ролей и отдельных пользователей. - [ ] Реализовать наследование прав от родительской папки при создании подпапок. - [ ] Реализовать создание, просмотр, редактирование и удаление документов. - [ ] Реализовать версионность документов. - [ ] Реализовать полное удаление отдельных версий. - [ ] Использовать текущий механизм хранения файлов. ## Этап 6. Склад наличие: ядро Статус: **готов после этапа 4**. Ядро склада можно реализовывать после появления позиций общего каталога. PDF-экспорт по шаблону вынесен отдельным подпунктом, потому что точный шаблон еще не согласован. - [ ] Разобрать текущую реализацию `Запчасти` как эталон. - [ ] Зафиксировать соответствие сущностей `Запчасти` -> `Склад наличие`. - [ ] Спроектировать таблицы/модели `stock` для заказов, остатков, броней, списаний и истории. - [ ] Реализовать подвкладку `Наличие`. - [ ] Реализовать подвкладку `Заказы`. - [ ] Реализовать карточку позиции. - [ ] Реализовать бронирование. - [ ] Реализовать списание с конкретных заказов. - [ ] Реализовать отмену брони. - [ ] Реализовать историю движений. - [ ] Реализовать импорт заказов/остатков. - [ ] Настроить права: `Наличие` всем, `Заказы` админу и роли `assistant_head`. - [ ] Покрыть критичную логику расчетов тестами. - [ ] После согласования шаблона реализовать экспорт наличия в PDF. ## Этап 7. Техническое описание в общем каталоге Статус: **готово после этапа 4 и анализа готового Laravel-модуля**. - [ ] Получить и изучить готовый Laravel-модуль техописаний. - [ ] Составить карту данных модуля техописаний. - [ ] Составить карту экспортов и форматов выгрузки. - [ ] Сопоставить данные техописаний с полями `Каталог общий`. - [ ] Решить, какие данные хранятся прямо в карточке позиции, а какие требуют связанных таблиц. - [ ] Встроить просмотр/редактирование техописания в карточку общего каталога. - [ ] Перенести или адаптировать экспорт из готового Laravel-модуля. ## Этап 8. Калькуляции Статус: **не готово к полной реализации**. До получения контракта API можно реализовать только место под кнопку/блок в карточке общего каталога. - [ ] Получить подробное описание внешнего API калькуляций. - [ ] Согласовать endpoint, HTTP-метод, авторизацию, параметры запроса и формат ответа. - [ ] Реализовать запрос по артикулу позиции общего каталога. - [ ] Реализовать отображение найденной калькуляции. - [ ] Реализовать состояние, когда калькуляция по артикулу не найдена. - [ ] Реализовать обработку ошибок API. ## Этап 9. Графики заказов и доставок Статус: **не готово к полной реализации**. Текущий `График монтажей` переносится на этапе 2. Новые графики требуют уточнения обмена с 1С, полей, статусов и правил доставок. - [ ] Описать источник данных для `График заказов`. - [ ] Спроектировать загрузку данных через 1С. - [ ] Реализовать или перенести `График заказов`. - [ ] Добавить карточку заказа с выбором одного или нескольких МАФ. - [ ] Добавить создание рекламации из заказа через текущую форму. - [ ] Реализовать `График доставок` в виде недельного списка. - [ ] Добавить ручное планирование занятости водителей. - [ ] Связать доставки с адресами из графика заказов. - [ ] Проверить связи монтажей с ДКР-площадками и графиком заказов. ## Этап 10. Рекламации из графика заказов Статус: **готово после этапа 9**. - [ ] Реализовать создание рекламации из графика заказов по выбранным МАФ с источником `Прочее`. - [ ] В карточке заказа дать выбор одного или нескольких МАФ. - [ ] Открывать текущую форму создания рекламации с предзаполненными данными. - [ ] Проверить, что рекламация попадает во вкладку `Все` и не попадает во вкладку `ДКР`. - [ ] Проверить, что платежные документы для такой рекламации недоступны. ## Этап 11. Проверка - [ ] Запустить `make test` внутри контейнеров. - [ ] Проверить меню в браузере под админом. - [ ] Проверить меню под пользователем с ограниченными правами. - [ ] Проверить, что существующие маршруты ДКР работают после перегруппировки меню. - [ ] Проверить, что текущий каталог доступен внутри ДКР. - [ ] Проверить, что `Каталог общий` открыт как отдельный новый раздел/заглушка. - [ ] Проверить, что все новые пункты-заглушки открываются у авторизованных пользователей и не дают 404/403. - [ ] Проверить, что выбранный год не влияет на новые модули. - [ ] Зафиксировать результат проверки в этом плане. ## Открытые вопросы - [ ] Какой точный контракт внешнего API калькуляций? - [ ] Где находится готовый Laravel-модуль техописаний и какие форматы выгрузки из него переносим? - [ ] Какой точный PDF-шаблон нужен для экспорта `Склад наличие`? - [ ] Какой формат обмена с 1С для `График заказов`? - [ ] Какие поля, статусы и правила ручного редактирования нужны для `График заказов`? - [ ] Какие поля, статусы, правила отгрузок и связи с заказами нужны для `График доставок`?