Alexander Musikhin 2 недель назад
Родитель
Сommit
3ab5ac075e
4 измененных файлов с 174 добавлено и 70 удалено
  1. 5 6
      docs/refactor/menu.md
  2. 123 44
      docs/refactor/plan.md
  3. 40 9
      docs/refactor/tz-catalog-common.md
  4. 6 11
      docs/refactor/tz-technical-description.md

+ 5 - 6
docs/refactor/menu.md

@@ -145,11 +145,11 @@ Manager
 
 
 | Пункт | Статус | Текущий маршрут | Комментарий |
 | Пункт | Статус | Текущий маршрут | Комментарий |
 |---|---|---|---|
 |---|---|---|---|
-| Позиции | Нужно реализовать | - | Новый общий справочник. Состав и порядок колонок утверждены в ТЗ, нужны импорт/экспорт. |
+| Позиции | Нужно реализовать | - | Новый общий справочник. Состав и порядок колонок берутся из `docs/refactor/Шаблон Каталог ощий.xlsx`, нужны импорт/экспорт. |
 | Карточка позиции | Нужно реализовать | - | Центральная карточка общей позиции/МАФ. |
 | Карточка позиции | Нужно реализовать | - | Центральная карточка общей позиции/МАФ. |
 | Фото МАФ | Нужно реализовать | - | Фото позиции общего каталога. |
 | Фото МАФ | Нужно реализовать | - | Фото позиции общего каталога. |
 | Документы | Нужно реализовать | - | Сопутствующие документы позиции через текущий файловый механизм. |
 | Документы | Нужно реализовать | - | Сопутствующие документы позиции через текущий файловый механизм. |
-| Техническое описание | Уточнить / встроить | - | Вероятно поглощается общим каталогом как выгрузка/представление позиции в нужном формате. |
+| Техническое описание | Нужно реализовать внутри карточки | - | Встроено в общий каталог как выгрузка/представление позиции в нужном формате. |
 | Калькуляция | Нужно реализовать | - | API-запрос по артикулу и отображение возвращенной калькуляции, если она есть. |
 | Калькуляция | Нужно реализовать | - | API-запрос по артикулу и отображение возвращенной калькуляции, если она есть. |
 
 
 ### Документация
 ### Документация
@@ -160,9 +160,9 @@ Manager
 
 
 ### Технич. описание
 ### Технич. описание
 
 
-Статус: **Уточнить / вероятно встроить в каталог**.
+Статус: **Встроить в каталог**.
 
 
-По новым вводным это, вероятно, не отдельный модуль, а часть `Каталог общий`: по сути те же данные позиции, но с выгрузками в определенном формате. Есть готовый Laravel-модуль, из которого можно взять экспорт.
+Это не отдельный пункт меню и не самостоятельный модуль. Функциональность технического описания должна быть доступна из карточки позиции `Каталог общий`: по сути это те же данные позиции, но с выгрузками в определенном формате. Есть готовый Laravel-модуль, из которого нужно взять экспорт.
 
 
 ### Калькуляции
 ### Калькуляции
 
 
@@ -201,5 +201,4 @@ Manager
 
 
 ## Открытые вопросы
 ## Открытые вопросы
 
 
-1. Оставлять ли `Технич. описание` отдельным пунктом меню или полностью встроить в `Каталог общий`?
-2. Какой точный контракт внешнего API калькуляций?
+1. Какой точный контракт внешнего API калькуляций?

+ 123 - 44
docs/refactor/plan.md

@@ -36,7 +36,7 @@
 - [x] Реорганизацию меню делаем сразу общей для всей платформы Manager 2.0.
 - [x] Реорганизацию меню делаем сразу общей для всей платформы Manager 2.0.
 - [x] Заглушки новых модулей показываем всем авторизованным пользователям.
 - [x] Заглушки новых модулей показываем всем авторизованным пользователям.
 - [x] На новые модули выбранный год не влияет.
 - [x] На новые модули выбранный год не влияет.
-- [x] `Технич. описание`, вероятно, будет поглощено модулем `Каталог общий`; готовый Laravel-модуль используем как источник экспорта.
+- [x] `Технич. описание` встроено в модуль `Каталог общий`; готовый Laravel-модуль используем как источник экспорта.
 - [x] `Калькуляции` работают через внешний API: запрос по артикулу, возврат калькуляции при наличии.
 - [x] `Калькуляции` работают через внешний API: запрос по артикулу, возврат калькуляции при наличии.
 - [x] `Рекламации -> ДКР` реализуется как отдельная вкладка на основе текущего списка с обязательным фильтром по источнику.
 - [x] `Рекламации -> ДКР` реализуется как отдельная вкладка на основе текущего списка с обязательным фильтром по источнику.
 - [x] Источник рекламации хранится отдельным полем: при создании из площадки — `ДКР`, иначе `Прочее`.
 - [x] Источник рекламации хранится отдельным полем: при создании из площадки — `ДКР`, иначе `Прочее`.
@@ -65,7 +65,24 @@
 - [x] Написать отдельное ТЗ для модуля `Калькуляции`: [tz-calculations.md](tz-calculations.md).
 - [x] Написать отдельное ТЗ для модуля `Калькуляции`: [tz-calculations.md](tz-calculations.md).
 - [x] Написать отдельное ТЗ для модуля `Администратор`: [tz-admin.md](tz-admin.md).
 - [x] Написать отдельное ТЗ для модуля `Администратор`: [tz-admin.md](tz-admin.md).
 
 
-## Этап 1. Реорганизация меню
+## Статус готовности этапов
+
+| Этап | Статус | Почему |
+|---|---|---|
+| 1. Реорганизация меню и заглушки | Готов к реализации | Решены структура меню, права для заглушек и сохранение текущих маршрутов. |
+| 2. Адаптация существующих разделов после переноса | Готов к реализации | ДКР, запчасти, администратор и текущий график монтажей уже существуют; нужны проверки и точечные правки без смены логики. |
+| 3. Рекламации: вкладки и источник | Готов к реализации | Решены вкладки `Все`/`ДКР`, поле источника и запрет платежных документов для `Прочее`. |
+| 4. Общий каталог: ядро | Готов к реализации | Есть маршрутный префикс, техническое имя, шаблон Excel, состав колонок и предварительные типы данных. |
+| 5. Документация | Готов к реализации | Решены дерево папок, наследование прав, версии и хранение файлов. |
+| 6. Склад наличие: ядро | Готов после ядра общего каталога | Логика берется из `Запчасти`, но позиции должны браться из `Каталог общий`. PDF-экспорт остается отдельным открытым подпунктом. |
+| 7. Техническое описание | Готово после ядра общего каталога и анализа готового Laravel-модуля | Функция встроена в карточку общего каталога, но нужно получить модуль и форматы выгрузки. |
+| 8. Калькуляции | Не готово к полной реализации | Нужен контракт внешнего API. Можно сделать только место/кнопку в карточке общего каталога. |
+| 9. Графики заказов и доставок | Не готово к полной реализации | Нужны формат обмена с 1С, поля, статусы и правила доставок/отгрузок. |
+| 10. Рекламации из графика заказов | Готово только после графика заказов | Сценарий согласован, но точка входа зависит от карточки заказа в графике. |
+
+## Этап 1. Реорганизация меню и заглушки
+
+Статус: **готов к реализации**.
 
 
 - [ ] Проверить текущие permissions для всех существующих пунктов меню.
 - [ ] Проверить текущие permissions для всех существующих пунктов меню.
 - [ ] Для новых пунктов-заглушек открыть доступ всем авторизованным пользователям.
 - [ ] Для новых пунктов-заглушек открыть доступ всем авторизованным пользователям.
@@ -80,26 +97,80 @@
 - [ ] Разложить `Рекламации` на `Все` и `ДКР`.
 - [ ] Разложить `Рекламации` на `Все` и `ДКР`.
 - [ ] Оставить `Запчасти` отдельной верхней группой с текущими вкладками.
 - [ ] Оставить `Запчасти` отдельной верхней группой с текущими вкладками.
 - [ ] Добавить заглушки `Склад наличие -> Наличие` и `Склад наличие -> Заказы`.
 - [ ] Добавить заглушки `Склад наличие -> Наличие` и `Склад наличие -> Заказы`.
-- [ ] Добавить заглушки `Документация`, `Каталог общий`, `Технич. описание`, `Калькуляции`.
+- [ ] Добавить заглушки `Документация`, `Каталог общий`, `Калькуляции`.
 - [ ] Проверить, что выбранный год не скрывает и не фильтрует новые модули.
 - [ ] Проверить, что выбранный год не скрывает и не фильтрует новые модули.
 - [ ] Переименовать группу `Администрирование` в `Администратор`.
 - [ ] Переименовать группу `Администрирование` в `Администратор`.
 - [ ] Проверить отображение меню для основных ролей.
 - [ ] Проверить отображение меню для основных ролей.
 
 
-## Этап 2. Каталог общий
+## Этап 2. Адаптация существующих разделов после переноса
+
+Статус: **готов к реализации**.
+
+Задача этапа — проверить существующие рабочие разделы после изменения меню и внести точечные правки без изменения бизнес-логики.
+
+- [ ] Проверить, что разделы ДКР открываются из группы `ДКР`.
+- [ ] Проверить, что каталог ДКР остался внутри группы `ДКР`.
+- [ ] Проверить, что текущий `График монтажей` открывается из группы `Графики`.
+- [ ] Проверить, что раздел `Запчасти` работает в новой структуре меню без изменения бизнес-логики.
+- [ ] Проверить вкладки `Каталог`, `Заказы запчастей`, `Контроль наличия`, `Справочник расшифровок`, `Справка`.
+- [ ] Проверить, что `Запчасти` используются как общий модуль, включая ДКР.
+- [ ] Проверить, что меню `Администратор` содержит текущие пункты администрирования.
+- [ ] Проверить, что `Подрядчики` всегда отображаются внутри группы `Администратор`.
+- [ ] Проверить доступы для пользователей, ролей и настроек.
+- [ ] При необходимости добавить права для новых разделов Manager 2.0.
+
+## Этап 3. Рекламации: вкладки и источник
+
+Статус: **готов к реализации для текущих рекламаций**.
+
+Создание рекламации из графика заказов вынесено в отдельный этап, потому что зависит от реализации графика заказов.
+
+- [ ] Реализовать отдельные вкладки `Все` и `ДКР`.
+- [ ] Реализовать вкладку `ДКР` на текущем списке с обязательным фильтром по источнику.
+- [ ] Добавить отдельное поле источника рекламации: `ДКР` / `Прочее`.
+- [ ] Проверить создание рекламаций по площадкам ДКР.
+- [ ] Запретить формирование документации для оплаты для рекламаций источника `Прочее`.
+- [ ] Проверить формирование запросов на запчасти из рекламации.
+- [ ] Сохранить текущую рабочую логику рекламаций.
+
+## Этап 4. Каталог общий: ядро
+
+Статус: **готов к реализации ядра**.
+
+В этот этап не входят внешняя API-интеграция калькуляций и перенос экспорта техописаний. Для них нужны отдельные вводные.
 
 
 - [ ] Зафиксировать, что текущий `catalog.*` относится к каталогу ДКР.
 - [ ] Зафиксировать, что текущий `catalog.*` относится к каталогу ДКР.
 - [ ] Спроектировать маршруты с префиксом `common-catalog/...`, таблицы и права с техническим именем `common-catalog`.
 - [ ] Спроектировать маршруты с префиксом `common-catalog/...`, таблицы и права с техническим именем `common-catalog`.
 - [ ] Сверить текущую модель каталога ДКР с требованиями общего каталога как источник паттернов, без смешивания данных.
 - [ ] Сверить текущую модель каталога ДКР с требованиями общего каталога как источник паттернов, без смешивания данных.
 - [x] Зафиксировать состав и порядок колонок общего каталога.
 - [x] Зафиксировать состав и порядок колонок общего каталога.
-- [ ] Спроектировать типы данных, обязательность и валидацию утвержденных полей.
+- [x] Зафиксировать файл `docs/refactor/Шаблон Каталог ощий.xlsx` как источник колонок общего каталога.
+- [x] Зафиксировать предварительные типы данных по шаблону общего каталога.
+- [ ] Спроектировать обязательность и валидацию утвержденных полей.
 - [ ] Использовать текущий файловый механизм для хранения фото и документов позиции.
 - [ ] Использовать текущий файловый механизм для хранения фото и документов позиции.
 - [ ] Доработать импорт/экспорт позиций.
 - [ ] Доработать импорт/экспорт позиций.
 - [ ] Доработать карточку позиции.
 - [ ] Доработать карточку позиции.
-- [ ] Определить встраивание `Технич. описание` в карточку общего каталога.
-- [ ] Добавить интеграцию с `Калькуляции` через внешний API по артикулу.
+- [x] Зафиксировать встраивание `Технич. описание` в карточку общего каталога.
+- [ ] Добавить в карточку место под будущую кнопку/блок `Калькуляции`.
 - [ ] Проверить связи с графиками, рекламациями и складом наличия.
 - [ ] Проверить связи с графиками, рекламациями и складом наличия.
 
 
-## Этап 3. Склад наличие
+## Этап 5. Документация
+
+Статус: **готов к реализации**.
+
+- [ ] Реализовать дерево папок.
+- [ ] Разрешить создание корневых папок только админу.
+- [ ] Реализовать права чтения и записи на папки для всех, ролей и отдельных пользователей.
+- [ ] Реализовать наследование прав от родительской папки при создании подпапок.
+- [ ] Реализовать создание, просмотр, редактирование и удаление документов.
+- [ ] Реализовать версионность документов.
+- [ ] Реализовать полное удаление отдельных версий.
+- [ ] Использовать текущий механизм хранения файлов.
+
+## Этап 6. Склад наличие: ядро
+
+Статус: **готов после этапа 4**.
+
+Ядро склада можно реализовывать после появления позиций общего каталога. PDF-экспорт по шаблону вынесен отдельным подпунктом, потому что точный шаблон еще не согласован.
 
 
 - [ ] Разобрать текущую реализацию `Запчасти` как эталон.
 - [ ] Разобрать текущую реализацию `Запчасти` как эталон.
 - [ ] Зафиксировать соответствие сущностей `Запчасти` -> `Склад наличие`.
 - [ ] Зафиксировать соответствие сущностей `Запчасти` -> `Склад наличие`.
@@ -112,11 +183,40 @@
 - [ ] Реализовать отмену брони.
 - [ ] Реализовать отмену брони.
 - [ ] Реализовать историю движений.
 - [ ] Реализовать историю движений.
 - [ ] Реализовать импорт заказов/остатков.
 - [ ] Реализовать импорт заказов/остатков.
-- [ ] Реализовать экспорт наличия в PDF по шаблону.
 - [ ] Настроить права: `Наличие` всем, `Заказы` админу и роли `assistant_head`.
 - [ ] Настроить права: `Наличие` всем, `Заказы` админу и роли `assistant_head`.
 - [ ] Покрыть критичную логику расчетов тестами.
 - [ ] Покрыть критичную логику расчетов тестами.
+- [ ] После согласования шаблона реализовать экспорт наличия в PDF.
+
+## Этап 7. Техническое описание в общем каталоге
+
+Статус: **готово после этапа 4 и анализа готового Laravel-модуля**.
+
+- [ ] Получить и изучить готовый Laravel-модуль техописаний.
+- [ ] Составить карту данных модуля техописаний.
+- [ ] Составить карту экспортов и форматов выгрузки.
+- [ ] Сопоставить данные техописаний с полями `Каталог общий`.
+- [ ] Решить, какие данные хранятся прямо в карточке позиции, а какие требуют связанных таблиц.
+- [ ] Встроить просмотр/редактирование техописания в карточку общего каталога.
+- [ ] Перенести или адаптировать экспорт из готового Laravel-модуля.
+
+## Этап 8. Калькуляции
+
+Статус: **не готово к полной реализации**.
+
+До получения контракта API можно реализовать только место под кнопку/блок в карточке общего каталога.
 
 
-## Этап 4. Графики
+- [ ] Получить подробное описание внешнего API калькуляций.
+- [ ] Согласовать endpoint, HTTP-метод, авторизацию, параметры запроса и формат ответа.
+- [ ] Реализовать запрос по артикулу позиции общего каталога.
+- [ ] Реализовать отображение найденной калькуляции.
+- [ ] Реализовать состояние, когда калькуляция по артикулу не найдена.
+- [ ] Реализовать обработку ошибок API.
+
+## Этап 9. Графики заказов и доставок
+
+Статус: **не готово к полной реализации**.
+
+Текущий `График монтажей` переносится на этапе 2. Новые графики требуют уточнения обмена с 1С, полей, статусов и правил доставок.
 
 
 - [ ] Описать источник данных для `График заказов`.
 - [ ] Описать источник данных для `График заказов`.
 - [ ] Спроектировать загрузку данных через 1С.
 - [ ] Спроектировать загрузку данных через 1С.
@@ -126,44 +226,19 @@
 - [ ] Реализовать `График доставок` в виде недельного списка.
 - [ ] Реализовать `График доставок` в виде недельного списка.
 - [ ] Добавить ручное планирование занятости водителей.
 - [ ] Добавить ручное планирование занятости водителей.
 - [ ] Связать доставки с адресами из графика заказов.
 - [ ] Связать доставки с адресами из графика заказов.
-- [ ] Перенести текущий `График монтажей` в новую группу без потери логики.
 - [ ] Проверить связи монтажей с ДКР-площадками и графиком заказов.
 - [ ] Проверить связи монтажей с ДКР-площадками и графиком заказов.
 
 
-## Этап 5. Рекламации
-
-- [ ] Реализовать отдельные вкладки `Все` и `ДКР`.
-- [ ] Реализовать вкладку `ДКР` на текущем списке с обязательным фильтром по источнику.
-- [ ] Добавить отдельное поле источника рекламации: `ДКР` / `Прочее`.
-- [ ] Проверить создание рекламаций по площадкам ДКР.
-- [ ] Реализовать создание рекламации из графика заказов по выбранным МАФ с источником `Прочее`.
-- [ ] Запретить формирование документации для оплаты для рекламаций источника `Прочее`.
-- [ ] Проверить формирование запросов на запчасти из рекламации.
-- [ ] Сохранить текущую рабочую логику рекламаций.
-
-## Этап 6. Запчасти
-
-- [ ] Перенести раздел в новую структуру меню без изменения бизнес-логики.
-- [ ] Проверить вкладки `Каталог`, `Заказы запчастей`, `Контроль наличия`, `Справочник расшифровок`, `Справка`.
-- [ ] Проверить, что `Запчасти` используются как общий модуль, включая ДКР.
-- [ ] Использовать реализацию раздела как эталон для `Склад наличие`.
-- [ ] После внедрения склада проверить, что логика запчастей не изменилась.
-
-## Этап 7. Информационные разделы
-
-- [ ] Реализовать модуль `Документация`: папки и файлы.
-- [ ] Изучить готовый Laravel-модуль техописаний.
-- [ ] Перенести/адаптировать экспорт техописаний в карточку общего каталога.
-- [ ] Подготовить заглушку для `Калькуляции`.
-- [ ] После получения подробного описания API калькуляций реализовать запрос из карточки позиции по артикулу.
+## Этап 10. Рекламации из графика заказов
 
 
-## Этап 8. Администратор
+Статус: **готово после этапа 9**.
 
 
-- [ ] Переименовать меню `Администрирование` в `Администратор`.
-- [ ] Сохранить текущие пункты администрирования.
-- [ ] Проверить доступы для пользователей, ролей и настроек.
-- [ ] При необходимости добавить права для новых разделов Manager 2.0.
+- [ ] Реализовать создание рекламации из графика заказов по выбранным МАФ с источником `Прочее`.
+- [ ] В карточке заказа дать выбор одного или нескольких МАФ.
+- [ ] Открывать текущую форму создания рекламации с предзаполненными данными.
+- [ ] Проверить, что рекламация попадает во вкладку `Все` и не попадает во вкладку `ДКР`.
+- [ ] Проверить, что платежные документы для такой рекламации недоступны.
 
 
-## Этап 9. Проверка
+## Этап 11. Проверка
 
 
 - [ ] Запустить `make test` внутри контейнеров.
 - [ ] Запустить `make test` внутри контейнеров.
 - [ ] Проверить меню в браузере под админом.
 - [ ] Проверить меню в браузере под админом.
@@ -177,5 +252,9 @@
 
 
 ## Открытые вопросы
 ## Открытые вопросы
 
 
-- [ ] Оставлять ли `Технич. описание` отдельным пунктом меню или полностью встроить в `Каталог общий`?
 - [ ] Какой точный контракт внешнего API калькуляций?
 - [ ] Какой точный контракт внешнего API калькуляций?
+- [ ] Где находится готовый Laravel-модуль техописаний и какие форматы выгрузки из него переносим?
+- [ ] Какой точный PDF-шаблон нужен для экспорта `Склад наличие`?
+- [ ] Какой формат обмена с 1С для `График заказов`?
+- [ ] Какие поля, статусы и правила ручного редактирования нужны для `График заказов`?
+- [ ] Какие поля, статусы, правила отгрузок и связи с заказами нужны для `График доставок`?

+ 40 - 9
docs/refactor/tz-catalog-common.md

@@ -5,6 +5,7 @@
 - [План реорганизации](plan.md)
 - [План реорганизации](plan.md)
 - [Карта нового меню](menu.md)
 - [Карта нового меню](menu.md)
 - [ТЗ: Модуль ДКР](tz-dkr.md)
 - [ТЗ: Модуль ДКР](tz-dkr.md)
+- [Шаблон каталога](Шаблон%20Каталог%20ощий.xlsx)
 
 
 ## 1. Назначение
 ## 1. Назначение
 
 
@@ -107,6 +108,8 @@
 - экспорт;
 - экспорт;
 - импорт, если он будет предусмотрен для общего каталога.
 - импорт, если он будет предусмотрен для общего каталога.
 
 
+Источник полей: файл [Шаблон Каталог ощий.xlsx](Шаблон%20Каталог%20ощий.xlsx), лист 1, строка 1. В строке 3 шаблона есть пример заполнения.
+
 Колонки:
 Колонки:
 
 
 1. `ID`;
 1. `ID`;
@@ -123,7 +126,7 @@
 12. `Места`;
 12. `Места`;
 13. `Состав`;
 13. `Состав`;
 14. `Возрастная группа`;
 14. `Возрастная группа`;
-15. `Макс. кол-во пользователей`;
+15. `Макс.кол-во пользователей`;
 16. `Ед.`;
 16. `Ед.`;
 17. `Серия`;
 17. `Серия`;
 18. `ТМ`;
 18. `ТМ`;
@@ -132,9 +135,35 @@
 Требования к колонкам:
 Требования к колонкам:
 
 
 - указанный перечень и порядок являются целевым форматом общего каталога;
 - указанный перечень и порядок являются целевым форматом общего каталога;
+- при импорте принимать заголовок `Единица измерения габаритов` в формате шаблона с переносом строки между словами `измерения` и `габаритов`;
+- поле `Артикул` хранить строкой, чтобы сохранять ведущие нули;
 - `Внешний вид` отображает фото позиции;
 - `Внешний вид` отображает фото позиции;
 - состав полей общего каталога не зависит от состава полей каталога ДКР;
 - состав полей общего каталога не зависит от состава полей каталога ДКР;
-- типы данных, обязательность заполнения и правила валидации полей уточняются при проектировании модели данных.
+- обязательность заполнения и правила валидации полей уточняются при проектировании модели данных.
+
+Предварительная модель полей по шаблону:
+
+| Колонка | Поле | Тип данных | Примечание |
+|---|---|---|---|
+| A | `ID` | integer | Внутренний идентификатор/номер строки каталога. |
+| B | `Внешний вид` | image/file | Фото позиции; в шаблоне есть встроенное изображение. |
+| C | `Артикул` | string | Сохранять ведущие нули, пример: `0254`. |
+| D | `Наименование по калькулятору` | text | Может содержать переносы строк. |
+| E | `Вид` | string | Категория/вид позиции. |
+| F | `Габаритные размеры` | text | Может содержать текст и единицы измерения. |
+| G | `Высота падения` | decimal | Числовое значение, допускается `0`. |
+| H | `Дополнительные сведения` | text nullable | Дополнительное описание. |
+| I | `Единица измерения габаритов` | string | В шаблоне заголовок разбит переносом строки. |
+| J | `Вес, кг.` | decimal | Вес в килограммах. |
+| K | `Объем, м3` | decimal | Объем в кубических метрах. |
+| L | `Места` | integer | Количество мест. |
+| M | `Состав` | text nullable | Состав комплекта/позиции. |
+| N | `Возрастная группа` | string | Пример: `0+`. |
+| O | `Макс.кол-во пользователей` | integer | Максимальное количество пользователей. |
+| P | `Ед.` | string | Единица учета, пример: `шт.`. |
+| Q | `Серия` | string | Серия позиции. |
+| R | `ТМ` | string | Торговая марка. |
+| S | `Примечание` | text nullable | Свободное примечание. |
 
 
 ## 7. Карточка позиции
 ## 7. Карточка позиции
 
 
@@ -145,7 +174,7 @@
 - просмотр и редактирование полей позиции общего каталога;
 - просмотр и редактирование полей позиции общего каталога;
 - загрузка фото МАФ/позиции;
 - загрузка фото МАФ/позиции;
 - хранение сопутствующих документов;
 - хранение сопутствующих документов;
-- блок/выгрузка технического описания, если модуль техописаний будет поглощен каталогом;
+- блок/выгрузка технического описания, встроенные в карточку общего каталога;
 - переход в `Калькуляции`;
 - переход в `Калькуляции`;
 - отображение связанных МАФ/SKU, если это потребуется для новой логики;
 - отображение связанных МАФ/SKU, если это потребуется для новой логики;
 - сохранение привычных действий карточки каталога ДКР только как UI-паттерна, без смешивания данных.
 - сохранение привычных действий карточки каталога ДКР только как UI-паттерна, без смешивания данных.
@@ -179,6 +208,7 @@
 - спроектировать импорт и экспорт общего каталога;
 - спроектировать импорт и экспорт общего каталога;
 - использовать текущий импорт/экспорт каталога ДКР как технический референс, если это ускорит реализацию;
 - использовать текущий импорт/экспорт каталога ДКР как технический референс, если это ускорит реализацию;
 - использовать утвержденные колонки общего каталога в заданном порядке;
 - использовать утвержденные колонки общего каталога в заданном порядке;
+- использовать [Шаблон Каталог ощий.xlsx](Шаблон%20Каталог%20ощий.xlsx) как целевой шаблон импорта/экспорта общего каталога;
 - при импорте обновлять существующие позиции по стабильному ключу;
 - при импорте обновлять существующие позиции по стабильному ключу;
 - ошибки импорта должны быть понятны пользователю.
 - ошибки импорта должны быть понятны пользователю.
 
 
@@ -190,7 +220,7 @@
 | Склад наличие | Использует картинку, артикул, наименование, характеристики, ед. изм. | Склад должен брать справочные поля из общего каталога. |
 | Склад наличие | Использует картинку, артикул, наименование, характеристики, ед. изм. | Склад должен брать справочные поля из общего каталога. |
 | Графики | Используют данные по позициям | При разработке графиков опираться на общий каталог. |
 | Графики | Используют данные по позициям | При разработке графиков опираться на общий каталог. |
 | Рекламации | Используют данные по позициям | Сохранить/добавить связь рекламаций с позициями общего каталога. |
 | Рекламации | Используют данные по позициям | Сохранить/добавить связь рекламаций с позициями общего каталога. |
-| Технич. описание | Вероятно является частью общего каталога | Использовать готовый Laravel-модуль как источник экспорта/формата. |
+| Технич. описание | Является частью общего каталога | Использовать готовый Laravel-модуль как источник экспорта/формата. |
 | Калькуляции | Запрашиваются из карточки позиции через внешний API | Запрос по артикулу, отображение возвращенной калькуляции при наличии. |
 | Калькуляции | Запрашиваются из карточки позиции через внешний API | Запрос по артикулу, отображение возвращенной калькуляции при наличии. |
 
 
 ## 11. Что не входит в первый этап
 ## 11. Что не входит в первый этап
@@ -201,7 +231,7 @@
 - полная переработка модели `Product`;
 - полная переработка модели `Product`;
 - внедрение новых прав доступа;
 - внедрение новых прав доступа;
 - разработка модуля `Склад наличие`;
 - разработка модуля `Склад наличие`;
-- отдельный модуль `Технич. описание`, если он будет поглощен каталогом;
+- отдельный модуль `Технич. описание`;
 - разработка интеграции с калькуляциями до получения подробного описания API;
 - разработка интеграции с калькуляциями до получения подробного описания API;
 - изменение бизнес-логики ДКР.
 - изменение бизнес-логики ДКР.
 
 
@@ -217,10 +247,12 @@
 - [ ] Проверить загрузку фото позиции.
 - [ ] Проверить загрузку фото позиции.
 - [ ] Спроектировать загрузку документов позиции через текущий файловый механизм.
 - [ ] Спроектировать загрузку документов позиции через текущий файловый механизм.
 - [x] Зафиксировать состав и порядок колонок общего каталога.
 - [x] Зафиксировать состав и порядок колонок общего каталога.
-- [ ] Спроектировать типы данных, обязательность и валидацию утвержденных полей.
+- [x] Зафиксировать шаблон общего каталога как источник колонок.
+- [x] Зафиксировать предварительные типы данных по шаблону общего каталога.
+- [ ] Спроектировать обязательность и валидацию утвержденных полей.
 - [ ] Реализовать утвержденные поля в списке и карточке позиции.
 - [ ] Реализовать утвержденные поля в списке и карточке позиции.
 - [ ] Подготовить расширение блока документов до набора файлов, если нужно.
 - [ ] Подготовить расширение блока документов до набора файлов, если нужно.
-- [ ] Определить, включается ли `Технич. описание` внутрь карточки общего каталога.
+- [x] Зафиксировать, что `Технич. описание` включается внутрь карточки общего каталога.
 - [ ] Добавить в карточку место под API-запрос `Калькуляции`.
 - [ ] Добавить в карточку место под API-запрос `Калькуляции`.
 - [ ] Проверить связи с модулями, которым нужен общий каталог.
 - [ ] Проверить связи с модулями, которым нужен общий каталог.
 - [ ] Проверить, что заглушка `Каталог общий` видна всем авторизованным пользователям.
 - [ ] Проверить, что заглушка `Каталог общий` видна всем авторизованным пользователям.
@@ -232,12 +264,11 @@
 - Текущие маршруты `catalog.index` и `catalog.show` сохранены как маршруты каталога ДКР.
 - Текущие маршруты `catalog.index` и `catalog.show` сохранены как маршруты каталога ДКР.
 - Заглушка `Каталог общий` доступна всем авторизованным пользователям.
 - Заглушка `Каталог общий` доступна всем авторизованным пользователям.
 - После реализации общий каталог не смешивает данные с каталогом ДКР без отдельной миграции/синхронизации.
 - После реализации общий каталог не смешивает данные с каталогом ДКР без отдельной миграции/синхронизации.
-- Список, импорт и экспорт общего каталога используют утвержденный состав и порядок колонок.
+- Список, импорт и экспорт общего каталога используют утвержденный состав и порядок колонок из файла `docs/refactor/Шаблон Каталог ощий.xlsx`.
 - Карточка позиции общего каталога поддерживает фото, документы, техописание/выгрузку и калькуляцию по артикулу.
 - Карточка позиции общего каталога поддерживает фото, документы, техописание/выгрузку и калькуляцию по артикулу.
 - ДКР продолжает использовать свой каталог без поломки существующих связей.
 - ДКР продолжает использовать свой каталог без поломки существующих связей.
 - Реорганизация меню выполнена как часть общей структуры Manager 2.0.
 - Реорганизация меню выполнена как часть общей структуры Manager 2.0.
 
 
 ## 14. Открытые вопросы
 ## 14. Открытые вопросы
 
 
-- Как именно включить готовый Laravel-модуль техописаний в общий каталог и какие экспорты оттуда переносить?
 - Какой точный формат API калькуляций: endpoint, параметры, авторизация, структура ответа?
 - Какой точный формат API калькуляций: endpoint, параметры, авторизация, структура ответа?

+ 6 - 11
docs/refactor/tz-technical-description.md

@@ -11,11 +11,11 @@
 
 
 `Технич. описание` описывает технические данные позиции общего каталога и выгрузки этих данных в заданном формате.
 `Технич. описание` описывает технические данные позиции общего каталога и выгрузки этих данных в заданном формате.
 
 
-По новым вводным это, скорее всего, не отдельный самостоятельный модуль, а часть модуля `Каталог общий`: по сути это те же данные позиции, только представленные и выгружаемые в определенном формате.
+По новым вводным это не отдельный самостоятельный модуль, а часть модуля `Каталог общий`: по сути это те же данные позиции, только представленные и выгружаемые в определенном формате.
 
 
 ## 2. Статус
 ## 2. Статус
 
 
-Статус: **кандидат на поглощение модулем `Каталог общий`**.
+Статус: **встроить в модуль `Каталог общий`**.
 
 
 Есть готовый модуль на Laravel. Его нужно изучить и использовать как источник:
 Есть готовый модуль на Laravel. Его нужно изучить и использовать как источник:
 
 
@@ -26,9 +26,7 @@
 
 
 ## 3. Место в меню
 ## 3. Место в меню
 
 
-До окончательного решения пункт `Технич. описание` можно оставить в целевой карте меню как заглушку для совместимости с исходным ТЗ.
-
-Предпочтительная целевая модель:
+Отдельный пункт меню `Технич. описание` не нужен. Целевая модель:
 
 
 ```text
 ```text
 Каталог общий
 Каталог общий
@@ -46,15 +44,13 @@
 
 
 ## 4. Права доступа
 ## 4. Права доступа
 
 
-На этапе заглушки:
-
-- пункт/заглушку показывать всем авторизованным пользователям.
+Отдельная заглушка для техописания не требуется, потому что функциональность встраивается в карточку общего каталога.
 
 
 Целевая модель:
 Целевая модель:
 
 
 - просмотр техописания наследует доступ к позиции общего каталога;
 - просмотр техописания наследует доступ к позиции общего каталога;
 - экспорт техописания наследует доступ к позиции общего каталога;
 - экспорт техописания наследует доступ к позиции общего каталога;
-- редактирование данных техописания наследует права редактирования позиции общего каталога, если техописание будет встроено в карточку позиции.
+- редактирование данных техописания наследует права редактирования позиции общего каталога.
 
 
 ## 5. Функциональные требования
 ## 5. Функциональные требования
 
 
@@ -82,7 +78,7 @@
 - [ ] Решить, какие данные хранятся прямо в карточке позиции, а какие требуют связанных таблиц.
 - [ ] Решить, какие данные хранятся прямо в карточке позиции, а какие требуют связанных таблиц.
 - [ ] Встроить просмотр/редактирование техописания в карточку общего каталога.
 - [ ] Встроить просмотр/редактирование техописания в карточку общего каталога.
 - [ ] Перенести или адаптировать экспорт из готового Laravel-модуля.
 - [ ] Перенести или адаптировать экспорт из готового Laravel-модуля.
-- [ ] Если отдельный пункт меню больше не нужен, убрать его из финальной навигации.
+- [x] Не добавлять отдельный пункт меню `Технич. описание` в финальную навигацию.
 
 
 ## 8. Критерии приемки
 ## 8. Критерии приемки
 
 
@@ -96,4 +92,3 @@
 
 
 - Где находится готовый Laravel-модуль техописаний и какие его части можно переносить напрямую?
 - Где находится готовый Laravel-модуль техописаний и какие его части можно переносить напрямую?
 - Какие точные форматы выгрузки нужны?
 - Какие точные форматы выгрузки нужны?
-- Оставлять ли отдельный пункт меню `Технич. описание` или полностью перенести функциональность внутрь `Каталог общий`?