# Manutenzioni — трассируемость: ТЗ → тесты Каждый пункт исходного документа клиента (`Manutenzioni - ACS.pdf`) и то, чем он подтверждён. Условные обозначения: **UI** — браузерный тест (Playwright, гоняется на 1440/820/390), **API** — `tests/manutenzioni/api_test.php`, **U** — юнит-тест PHPUnit. --- ## 1. Реестр оборудования | Пункт ТЗ | Чем подтверждён | Тест | |---|---|---| | Единая база оборудования, у каждой позиции категория | UI | `§1.2 le quattro categorie del capitolato esistono e sono gestibili` | | Категории: Linea di produzione, Attrezzature, Accessori, Qualità | UI | там же | | Категории **не хардкод**, свой CRUD | UI + API | `Categories › CRUD from the modal, and categories in use cannot be deleted`; API: создание, дубль имени, запрет удаления занятой | | Для категории «линия» обязательно указать линию | UI + API | `§1.5 il campo «linea» compare solo per le categorie che lo richiedono`; API: отказ без линии | | Фильтрация по категории / линии / отделу | UI | `§1.5 the registry filters by production line and by department`; `Equipment registry › the filters really narrow the list` | | Перенос существующих `production_lines` и `production_tools` | UI + API | `§1.6 le linee e gli attrezzi già esistenti sono nel registro unico`; API: старые страницы производства работают после переименования | | Поля: название, серийник, партия, дата покупки, дата ввода, производитель, тип, ubicazione, отдел, заметки | UI | `§1.7 tutti i campi dell'anagrafica si salvano e si rivedono` — сохранение, возврат в форму и отображение в карточке | | Статус (attivo / fuori servizio / dismesso) исключает неактивное из планировочных вью | UI | `§1.7 un'attrezzatura non attiva sparisce dalle viste di pianificazione` — проверяет и список ТО, и календарь | | Вложения: файлы-инструкции и мануалы | UI + API | `Photos, cover image and documents › documents upload and stay downloadable`; отказ на недопустимый тип | | Обложка + дополнительные фото | UI | `la prima foto caricata diventa copertina, anche nel registro`; `la stellina sposta la copertina sulla seconda foto`; `la foto si elimina previa conferma` | | Калибровка — вне скоупа | — | намеренно не реализована; отдельной таблицы нет | ## 2. Модуль обслуживания | Пункт ТЗ | Чем подтверждён | Тест | |---|---|---| | 0..N обслуживаний на единицу; 0 = вне планирования | UI | `§2.1 un'attrezzatura senza manutenzioni resta fuori dalla pianificazione` | | Несколько видов ТО одновременно | UI | `§2.2 la stessa attrezzatura porta più manutenzioni insieme` (три работы на одной машине) | | Типы: программное и внеплановое | UI + API | `«solo critiche» e «programmate/straordinarie» restringono l'elenco`; `riaprendo una manutenzione i campi sono quelli salvati` | | Флаг критичности | UI | `una manutenzione critica è evidenziata nella scheda` | | Внешние исполнители: указать подрядчика | UI + API | `«esterna» chiede il fornitore e blocca il salvataggio senza` | | Приложить форму подрядчика | UI | `un allegato dell'intervento compare nello storico` | | Название/описание | UI | `riaprendo una manutenzione i campi sono quelli salvati` | | Частота через выпадающий список интервалов | UI + U | `«al bisogno» nasconde il campo della frequenza`; `la nota di frequenza resta visibile`; юниты на все единицы интервала | | Файлы-инструкции к ТО | UI | `le istruzioni allegate a una manutenzione si vedono, si riaprono e si eliminano` | | Срок предупреждения | UI | `riaprendo una manutenzione i campi sono quelli salvati` (alert_days) | | Один исполнитель + один ответственный | UI | `§2.6 incaricato e responsabile si salvano e si leggono nella scheda` | | Следующий срок = от последней выполненной работы | UI + U | `registrare un intervento completato aggiorna le date a schermo`; `un intervento pianificato non sposta la scadenza`; `eliminando l'ultimo intervento completato la scadenza torna indietro`; 20 юнитов на арифметику дат | ## 3. Журнал интервенций | Пункт ТЗ | Чем подтверждён | Тест | |---|---|---| | Привязка к конкретному ТО | UI | `la registrazione rapida dall'elenco aggiorna la scadenza` (контекст в модалке) | | Дата | UI | `registrare un intervento completato aggiorna le date a schermo` | | Заметки | UI | `riaprendo un intervento i campi sono quelli salvati` | | Оператор + подпись | UI | `la firma disegnata finisce nello storico`; `la firma si cancella con il pulsante dedicato`; `si firma col dito e la pagina non scorre sotto il tratto` (планшет/телефон) | | Статус (pianificato / in corso / completato) | UI | `un intervento pianificato non sposta la scadenza` | | Результат (conforme / bloccato …) | UI | `riaprendo un intervento i campi sono quelli salvati` | | Материалы / замененные части | UI | там же | | Для внешних: подрядчик и его форма | UI | `un allegato dell'intervento compare nello storico` | ## 4. Фильтры и вью | Пункт ТЗ | Чем подтверждён | Тест | |---|---|---| | Фильтр между программными и внеплановыми | UI | `«solo critiche» e «programmate/straordinarie» restringono l'elenco` | | Календарь ТО по срокам | UI | `il calendario disegna gli eventi e il click porta alla scheda`; `i filtri del calendario rifanno la richiesta` | ## 5. Выгрузка PDF | Пункт ТЗ | Чем подтверждён | Тест | |---|---|---| | Карточка с историей обслуживания по единице | UI | `la scheda riproduce il modulo cartaceo` (шапка mod. 6.3-1, работы, журнал) | | Собственно PDF | UI | `in stampa la barra dei pulsanti sparisce e il PDF si genera` | ## 6. Уведомления | Пункт ТЗ | Чем подтверждён | Тест | |---|---|---| | Письма о просрочке и заранее | API | cron запускается без ошибок; выборка находит просроченное ТО | | Получатели: ответственный **и** исполнитель | — | **браузером не проверяется**: письма уходят из cron, а не из UI. Логика получателей сверена запросом; фактическая доставка — ручной пункт 12 тест-плана | ## 7. Сводный календарь | Пункт ТЗ | Чем подтверждён | Тест | |---|---|---| | Scadenze + formazione + manutenzioni в одном календаре | UI | `ogni strato porta i propri eventi`; `il calendario cumulativo accende e spegne gli strati` | | Разные цветные бейджи по типу срока | UI | `§7 i tre tipi di scadenza hanno colori distinti` (свой цвет и свой значок у каждого слоя) | | Переход из календаря в нужный модуль | UI | `dal calendario cumulativo si arriva alla scheda dell'attrezzatura` | ## 8. Техтребования | Пункт ТЗ | Чем подтверждён | Тест | |---|---|---| | Работа на PC и планшете → адаптивность | UI × 3 | весь набор гоняется на 1440 / 820 / 390; `Layout › …` (нет горизонтальной прокрутки, карточки против таблицы, модалка достижима, сайдбар не прыгает) | --- ## Что осталось за пределами автотестов | Пункт | Почему | Где проверять | |---|---|---| | Фактическая доставка писем | нужен живой SMTP и ящик | ручной чеклист, раздел 12 | | Внешний вид PDF после печати из браузера | субъективно | ручной чеклист, разделы 9.4–9.5 | | Подпись на физическом планшете | эмуляция ≠ железо | ручной чеклист, 6.6 | | Соответствие импортированных данных их XLS | сверка с бумагой | ручной чеклист, раздел 13 | ## Как перепроверить ```bash make test-sizes # весь набор на трёх размерах npx playwright test tests/e2e/capitolato.spec.js # только пункты ТЗ ```