feat(ticket_form): add wizard plan step and dev cache

This commit is contained in:
AI Assistant
2025-11-15 18:48:15 +03:00
parent 3306d01e0d
commit cbab1c0fe6
7 changed files with 1285 additions and 12 deletions

View File

@@ -188,3 +188,38 @@ Unit-тестов почти нет, поэтому проверяем сцен
Upd 14.11.2025, автор: GPT-5.1 Codex.
---
## 11. Ticket Form — доработки 15.11.2025
### 11.1. SSE + Wizard Plan
- Новая стадия формы `StepWizardPlan` между описанием и выбором услуги:
- подключается к `/events/{claim_id}`, выбирает payload даже если `wizard_plan` лежит в `data`, `redis_value` или `event`.
- отображает иллюстрацию/спиннер, пишет события в DebugPanel.
- при Success сохраняет `wizardPlan`, `answers_prefill`, `coverage_report`, `wizardPrefillMap` в состоянии.
- На случай отладки добавлен чекбокс в `StepDescription`: «Использовать сохранённые рекомендации (DEV)».
- По умолчанию включен; берёт мок `wizardPlanSample` (лежит в `frontend/src/mocks`), пропускает вызов AI и блокирует textarea.
- При снятом чекбоксе описание снова обязательное и реально отправляется на `/api/v1/claims/description`.
### 11.2. Динамическая анкета
- `StepWizardPlan` строит форму исключительно из `wizard_plan.questions`: текст, textarea, радио.
- Въелся прогресс-бар с подсчётом обязательных полей (done / total).
- `wizardPlanStatus` принимает значения `pending | ready | answered`, чтобы следующие шаги понимали, прошёл ли пользователь анкету.
### 11.3. Документы прямо в анкете
- Под вопросами «Есть ли документы?» и «Есть ли переписка?» появляются мультилоадеры:
- группы файлов с описанием, категорией (select), списком допустимых форматов, лимитом 20 МБ.
- для каждого документа из `plan.documents` можно создать несколько блоков; храним их в `wizardUploads.documents`.
- кастомная секция «Дополнительные документы» позволяет добавить произвольные блоки (категория + описание + файлы), лежат в `wizardUploads.custom`.
- Валидация: если ответ «Да», но файлы не добавлены или нет описаний — показываем ошибку, не пускаем дальше.
- До отправки (переход на следующий шаг) сохраняем `wizardUploads` для дальнейшего api/n8n.
### 11.4. Прочее
- `ClaimForm` логи перенесены в `useEffect`, чтобы StrictMode не писал дубль.
- Кнопка «Обновить рекомендации» сбрасывает `wizardPlan` и пересоздаёт SSE.
- Docker: каждый раз после правок фронт пересобирали `docker compose build ticket_form_frontend && docker compose up -d ticket_form_frontend`.
### TODO (перенесено в бэклог)
- На backend обезопасить хранение `wizard_plan` в Redis (по ключу `wizard_plan:{claim_id}`) и отдавать кеш при DEV-галке.
- Передать `wizardUploads` в следующий шаг & далее в n8n, чтобы фактически загрузить файлы/метаданные.