- Добавлены логи в frontend (ClaimForm.tsx) для отслеживания unified_id и запросов к API - Добавлены логи в backend (claims.py) для отладки SQL запросов - Создан лог сессии с описанием проблемы и текущего состояния - Проблема: API возвращает 0 черновиков, хотя в БД есть данные
6.0 KiB
Анализ workflow: шаг ?? ocr_jobs_clime (1IKe2PccqXLkD2KR)
Общая информация
ID: 1IKe2PccqXLkD2KR
Название: шаг ?? ocr_jobs_clime
Статус: Active
Триггер: Redis Pub/Sub на канале clpr:ocr:jobs
Архитектура workflow
1. Триггер: Redis Pub/Sub
Канал: clpr:ocr:jobs
Формат сообщения:
{
"message": {
"job_id": "...",
"claim_id": "uuid", // UUID из clpr_claims.id
"prefix": "clpr_",
"telegram_id": "...",
"session_token": "...",
"channel": "telegram|web_form",
"created_at": "..."
}
}
2. Основной поток обработки
Шаг 1: Получение файлов из PostgreSQL
Нода: Execute a SQL query
Запрос:
-- Получает документы из clpr_claim_documents по claim_id (UUID)
SELECT
cd.id AS claim_document_id,
cd.claim_id::text AS claim_id,
cd.field_name,
cd.file_id,
cd.uploaded_at,
m.file_url,
m.file_name,
m.original_file_name,
-- ... описание из payload
FROM clpr_claim_documents cd
JOIN clpr_claims c ON c.id = cd.claim_id::uuid
-- ... метаданные из payload.documents_meta
Важно: Использует claim_id как UUID (из clpr_claims.id)
Шаг 2: Загрузка файла в S3
Нода: Upload_OCR_File
Путь: temp/{telegram_id}/{file_name}
Шаг 3: OCR обработка
Нода: HTTP Request2 → http://147.45.146.17:8001/analyze-file
Параметры:
file_url- URL файла из S3file_name- имя файла
Шаг 4: Обработка результатов OCR
Нода: Edit Fields6
Извлекает:
ocr_text- текст OCRvision_reason- причина отправки в visionnsfw- флаг NSFWpage- номер страницыfile_id- ID документа изclaim_document_id
Шаг 5: Сохранение результатов
Нода: give_data1 (SQL запрос)
Запрос: Получает полные данные заявки:
claim- данные заявкиdocuments- документыocr_pages- страницы OCRvision_docs- результаты visioncombined_docs- объединенные документы
Использует: claim_id как UUID (из clpr_claims.id)
Шаг 6: Публикация событий
Нода: Redis Publish (SendMessage)2
Канал: events:SendMessage
Сообщение: JSON с результатами обработки
Интеграция с веб-формой
Текущая ситуация:
-
Веб-форма использует:
claim_idв форматеCLM-YYYY-MM-DD-XXXXXX(строка)- Сохраняет в
clpr_claims.payload->>'claim_id'
-
SQL запросы возвращают:
claim.claim_id= UUID в виде строки (изclpr_claims.id)claim.claim_id_str= строкаCLM-...(изpayload->>'claim_id')
-
Workflow ожидает:
claim_idкак UUID (изclpr_claims.id)- Использует
clpr_claims.idдля поиска
Решение:
✅ Ничего менять не нужно!
При публикации в Redis канал clpr:ocr:jobs используем claim.claim_id (UUID), который возвращается из SQL запроса.
Пример публикации в Redis:
// После claimsave или claimsave_final
const claim = $json.claim;
// Публикуем в Redis канал clpr:ocr:jobs
await redis.publish('clpr:ocr:jobs', JSON.stringify({
job_id: generateJobId(),
claim_id: claim.claim_id, // UUID из clpr_claims.id
prefix: 'clpr_',
channel: 'web_form',
session_token: claim.payload?.session_token,
created_at: new Date().toISOString()
}));
Важно: Используем claim.claim_id (UUID), а не claim.claim_id_str (CLM-...)
Рекомендации
Для интеграции с веб-формой:
✅ Ничего менять не нужно!
-
SQL запросы уже возвращают UUID:
claim.claim_id= UUID изclpr_claims.idclaim.claim_id_str= строка CLM-... (для отображения)
-
Публикация в Redis:
- Используем
claim.claim_id(UUID) при публикации вclpr:ocr:jobs - Workflow будет работать без изменений
- Используем
-
Workflow:
- Остается без изменений
- Принимает UUID и работает как обычно
Текущие SQL запросы в workflow
Запрос 1: Получение файлов (строка 485)
-- Использует: WHERE id = $1 (UUID)
FROM clpr_claims WHERE id = $1
✅ Работает как есть - получаем UUID из claim.claim_id
Запрос 2: Получение полных данных (строка 1020)
-- Использует: WHERE id = $1 (UUID)
FROM clpr_claims WHERE id = $1
✅ Работает как есть - получаем UUID из claim.claim_id
Итог
✅ Ничего менять не нужно!
Как это работает:
- Веб-форма сохраняет данные в PostgreSQL через
claimsave - SQL запрос возвращает
claim.claim_id(UUID изclpr_claims.id) - При публикации в Redis используем
claim.claim_id(UUID) - Workflow получает UUID и работает без изменений
Преимущества:
- ✅ Workflow остается без изменений
- ✅ Нет необходимости в дополнительных преобразованиях
- ✅ Единый формат (UUID) для всех систем