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` — запрос на генерацию списка документов
|
|||
|
|
|
|||
|
|
|