# ТЗ: Технич. описание Связанные документы: - [План реорганизации](plan.md) - [Карта нового меню](menu.md) - [Исходное ТЗ](source-tz.md) - [ТЗ: Каталог общий](tz-catalog-common.md) ## 1. Назначение `Технич. описание` описывает технические данные позиции общего каталога и выгрузки этих данных в заданном формате. По новым вводным это не отдельный самостоятельный модуль, а часть модуля `Каталог общий`: по сути это те же данные позиции, только представленные и выгружаемые в определенном формате. ## 2. Статус Статус: **источник изучен, встроить в модуль `Каталог общий`**. Laravel-модуль `to.stroyprofit.com` изучен и используется как источник: - структуры данных технического описания; - правил формирования выгрузок; - шаблонов/форматов экспорта; - возможных UI-решений, если они применимы к текущей CRM. В источнике находятся 938 позиций из 24 серий. Для всех позиций заполнены цена, характеристики, полное и краткое техническое описание, группа, название для формы и изображение. Наличие цены в старом модуле зафиксировано как факт анализа, но цена не считается частью техописания в новой CRM. ## 3. Место в меню Отдельный пункт меню `Технич. описание` не нужен. Целевая модель: ```text Каталог общий └── Карточка позиции └── Технич. описание / экспорт ``` Требования: - не проектировать отдельную сущность техописания, если достаточно данных карточки общего каталога; - открыть техописание из карточки позиции общего каталога; - обеспечить выгрузку технического описания в требуемом формате; - использовать готовый Laravel-модуль как источник логики экспорта. - выбранный год в CRM не влияет на техописания и их выгрузки. ## 4. Права доступа Отдельная заглушка для техописания не требуется, потому что функциональность встраивается в карточку общего каталога. Целевая модель: - просмотр техописания наследует доступ к позиции общего каталога; - экспорт техописания наследует доступ к позиции общего каталога; - редактирование данных техописания наследует права редактирования позиции общего каталога. ## 5. Функциональные требования Целевой функционал: - просмотр технических данных из карточки позиции общего каталога; - редактирование технических данных вместе с карточкой позиции или в отдельной вкладке карточки; - формирование выгрузки технического описания в установленном формате; - использование готового Laravel-модуля как основы для экспорта; - хранение данных в структуре общего каталога или связанной таблице, если данные нельзя уложить в основную карточку позиции. - получение актуальной цены для DOCX из модуля `Склад` без собственной копии цены в техописании. ## 6. Что не переносим из готового модуля - отдельный самостоятельный раздел техописаний; - отдельная модель прав, не связанная с каталогом; - прямое копирование устаревшего механизма авторизации и публичного хранения экспортов; - перезапись актуальных данных общего каталога без сопоставления по артикулу. - поле цены в таблицах общего каталога или техописания. ## 7. Результаты анализа Источник хранит: - артикул; - серию; - наименование; - наименование для печатной формы; - группу; - цену; - характеристики; - полное техническое описание; - краткое техническое описание; - изображение. Экспорт поддерживает: - выбор нескольких позиций; - общий DOCX; - отдельный DOCX для каждой позиции в ZIP; - выбор полного, краткого или комбинированного описания; - отдельный и массовый DOCX-шаблоны. В текущем `common_catalog_items` отсутствуют готовые поля для названия печатной формы, текстовых характеристик, полного и краткого технического описания. Эти описательные поля должны дополнять общий каталог. Цена обрабатывается отдельно: единственным источником актуального значения является `Склад`. Значение из `to.stroyprofit.com` можно использовать только для начального заполнения складской цены после подтверждения её назначения. Техописание читает актуальную цену при формировании DOCX и не хранит собственную копию. ## 8. Этапы реализации - [x] Получить и изучить готовый Laravel-модуль техописаний. - [x] Составить карту данных модуля техописаний. - [x] Составить карту экспортов и форматов выгрузки. - [x] Сопоставить данные техописаний с полями `Каталог общий`. - [x] Решить, что данные хранятся в карточке общего каталога, а не в отдельном модуле. - [x] Исключить цену из модели техописания и общего каталога. - [ ] Добавить остальные недостающие поля общего каталога. - [ ] Перенести данные по артикулу с защитой уже заполненных полей. - [ ] После уточнения назначения цены перенести её начальное значение в единый источник модуля `Склад`. - [ ] Перенести изображения в текущий файловый механизм CRM. - [ ] Встроить просмотр/редактирование техописания в карточку общего каталога. - [ ] Перенести или адаптировать экспорт из готового Laravel-модуля. - [ ] Подставлять в экспорт актуальную цену из `Склад`. - [ ] Выполнять массовые экспорты через очередь и выдавать результат из приватного хранилища. - [x] Не добавлять отдельный пункт меню `Технич. описание` в финальную навигацию. ## 9. Критерии приемки - Техническое описание доступно из карточки позиции общего каталога. - Данные техописания не дублируют общий каталог без необходимости. - Цена не хранится в техописании и берётся из единого источника модуля `Склад`. - Экспорт техописания работает в согласованном формате. - Готовый Laravel-модуль использован как источник экспортной логики. - Права просмотра/редактирования согласованы с правами общего каталога. ## 10. Открытые вопросы - Переносить все 938 позиций как источник данных или только обогащать артикулы, уже существующие в общем каталоге? - Сохраняются ли оба текущих DOCX-шаблона без визуальных изменений? - Нужна ли история изменения текстов технического описания? - Какой вид цены хранится в старом модуле и зависит ли она от конкретного складского заказа/партии?