- StepDocumentsNew.tsx: поэкранная загрузка документов - StepWaitingClaim.tsx: ожидание формирования заявления с SSE - StepDraftSelection.tsx: поддержка новых статусов черновиков - documents.py: API для загрузки документов - NEW_FLOW_ARCHITECTURE.md: документация новой архитектуры Флоу: Description → Documents → Waiting → Claim Review → SMS Статусы: draft_new, draft_docs_progress, draft_docs_complete, draft_claim_ready
6.2 KiB
6.2 KiB
📝 Лог сессии: Новая архитектура загрузки документов
Дата: 2025-11-26
Время: ~13:00 MSK
🎯 Цель сессии
Концептуальная переработка флоу подачи заявки:
- Проблема: Визард генерируется слишком долго (2 минуты), анкета слишком длинная
- Решение: Сразу запрашиваем документы, параллельно генерируем визард в бэке
✅ Что сделано
1. Документация архитектуры
- Файл:
docs/NEW_FLOW_ARCHITECTURE.md - Описан новый флоу: Description → Documents → Waiting → Claim Review → SMS
- Определены статусы черновиков:
draft_new,draft_docs_progress,draft_docs_complete,draft_claim_ready,awaiting_sms - Структура payload черновика с новыми полями
2. Frontend компоненты
StepDocumentsNew.tsx (НОВЫЙ)
- Поэкранная загрузка документов (один документ на экран)
- Критичные документы помечены предупреждением
- Возможность пропустить любой документ
- Прогресс-бар загрузки
- Отображение уже загруженных документов
StepWaitingClaim.tsx (НОВЫЙ)
- Экран ожидания формирования заявления
- SSE подписка на события:
document_ocr_completed,claim_ready - Шаги обработки: OCR → Анализ → Формирование → Готово
- Таймер ожидания
- Таймаут 5 минут с обработкой ошибок
StepDraftSelection.tsx (ОБНОВЛЁН)
- Поддержка новых статусов черновиков
- Визуальное отображение разных статусов (цвета, иконки, описания)
- Прогресс документов (X из Y загружено)
- Legacy черновики помечаются как "устаревший формат"
- Разные действия для разных статусов
3. Backend API
documents.py (НОВЫЙ)
POST /api/v1/documents/upload— загрузка одного документаGET /api/v1/documents/status/{claim_id}— статус обработки документовPOST /api/v1/documents/generate-list— запрос на генерацию списка документов- Интеграция с n8n webhook
- Публикация событий в Redis
main.py (ОБНОВЛЁН)
- Добавлен роутер
documents
📁 Изменённые файлы
ticket_form/
├── docs/
│ └── NEW_FLOW_ARCHITECTURE.md # НОВЫЙ
├── frontend/src/components/form/
│ ├── StepDocumentsNew.tsx # НОВЫЙ
│ ├── StepWaitingClaim.tsx # НОВЫЙ
│ └── StepDraftSelection.tsx # ОБНОВЛЁН
├── backend/app/
│ ├── api/
│ │ └── documents.py # НОВЫЙ
│ └── main.py # ОБНОВЛЁН
└── SESSION_LOG_2025-11-26_NEW_FLOW.md # НОВЫЙ
⏳ Что осталось сделать
Frontend
- Обновить
ClaimForm.tsx— интегрировать новые компоненты в флоу - Обновить
StepDescription.tsx— после описания переходить к документам (не к визарду)
Backend
- Эндпоинт получения списка документов из черновика
- SSE события для прогресса OCR
n8n
- Воркфлоу: генерация списка документов (быстрый AI запрос)
- Воркфлоу: OCR документа → заполнение полей визарда
- Воркфлоу: формирование заявления после всех документов
- Webhook:
/webhook/document-upload
Тестирование
- Полный цикл с реальными данными
- Обработка ошибок
- Legacy черновики
🔧 Технические детали
Новые SSE события
// Список документов готов
{ event_type: "documents_list_ready", documents_required: [...] }
// Документ загружен (начало OCR)
{ event_type: "document_uploaded", document_type: "contract", status: "processing" }
// OCR завершён
{ event_type: "document_ocr_completed", document_type: "contract", ocr_data: {...} }
// Заявление готово
{ event_type: "claim_ready", claim_data: {...} }
Статусы черновиков
| Статус | Описание |
|---|---|
draft_new |
Только описание проблемы |
draft_docs_progress |
Часть документов загружена |
draft_docs_complete |
Все документы, ждём заявление |
draft_claim_ready |
Заявление готово |
awaiting_sms |
Ждёт SMS подтверждения |
Legacy черновики
- Определяются по отсутствию
documents_requiredв payload - Показываются с пометкой "устаревший формат"
- Кнопка "Начать заново" копирует description в новый черновик
📌 Примечания
- Ветка backup:
backup-wizard-ui-2025-11-26содержит состояние до изменений - n8n: Webhook
/webhook/document-uploadнужно создать - Redis каналы:
ocr_events:{session_id}— события для конкретного пользователяticket_form:documents_list— запрос на генерацию списка документов