Files
crm.clientright.ru/ticket_form/SESSION_LOG_2025-11-26_NEW_FLOW.md
Fedor 840acca51a feat(documents): дедупликация documents_meta и исправление field_label
- Исправлен N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js: использовать uploads_field_labels[0] вместо [grp]
- Создан SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql с дедупликацией documents_meta
- Создан SQL_CLEANUP_DOCUMENTS_META_DUPLICATES.sql для очистки существующих дубликатов
- Создан полный уникальный индекс idx_document_texts_hash_unique на document_texts(file_hash)
- Добавлен SESSION_LOG_2025-11-28_documents_dedup.md с описанием всех изменений

Fixes:
- field_label теперь корректно отображает 'Переписка' вместо 'group-2'
- documents_meta не накапливает дубликаты при повторных сохранениях
- ON CONFLICT (file_hash) теперь работает для document_texts
2025-11-28 18:16:53 +03:00

12 KiB
Raw Blame History

📝 Лог сессии: Новая архитектура загрузки документов

Дата: 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 в новый черновик

📌 Примечания

  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 события

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