- Исправлена потеря документов при обновлении черновика (SQL объединяет вместо перезаписи) - Исправлено определение типа документа (приоритет field_label над field_name) - Исправлены дубликаты в documents_meta и documents_uploaded - Добавлена передача group_index с фронтенда для правильного field_name - Исправлены все документы в таблице clpr_claim_documents с правильными field_name - Обновлены SQL запросы: claimsave и claimsave_final для нового флоу - Добавлена поддержка multi-file upload для одного документа - Исправлены дубликаты в списке загруженных документов на фронтенде Файлы: - SQL: SQL_CLAIMSAVE_FIXED_NEW_FLOW.sql, SQL_CLAIMSAVE_FINAL_FIXED_NEW_FLOW_WITH_UPLOADED.sql - n8n: N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js (поддержка group_index) - Backend: documents.py (передача group_index в n8n) - Frontend: StepWizardPlan.tsx (передача group_index, исправление дубликатов) - Скрипты: fix_claim_documents_field_names.py, fix_documents_meta_duplicates.py Результат: документы больше не теряются, имеют правильные типы и field_name
12 KiB
12 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— запрос на генерацию списка документов
Дата: 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— запрос на генерацию списка документов