- Исправлена потеря документов при обновлении черновика (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
288 lines
12 KiB
Markdown
288 lines
12 KiB
Markdown
# 📝 Лог сессии: Новая архитектура загрузки документов
|
||
|
||
**Дата:** 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 события
|
||
```javascript
|
||
// Список документов готов
|
||
{ 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 в новый черновик
|
||
|
||
---
|
||
|
||
## 📌 Примечания
|
||
|
||
1. **Ветка backup:** `backup-wizard-ui-2025-11-26` содержит состояние до изменений
|
||
2. **n8n:** Webhook `/webhook/document-upload` нужно создать
|
||
3. **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 события
|
||
```javascript
|
||
// Список документов готов
|
||
{ 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 в новый черновик
|
||
|
||
---
|
||
|
||
## 📌 Примечания
|
||
|
||
1. **Ветка backup:** `backup-wizard-ui-2025-11-26` содержит состояние до изменений
|
||
2. **n8n:** Webhook `/webhook/document-upload` нужно создать
|
||
3. **Redis каналы:**
|
||
- `ocr_events:{session_id}` — события для конкретного пользователя
|
||
- `ticket_form:documents_list` — запрос на генерацию списка документов
|
||
|
||
|