Files
aiform_dev/docs/WORKFLOW_OCR_ANALYSIS.md
AI Assistant 4c8fda5f55 Добавлено логирование для отладки черновиков
- Добавлены логи в frontend (ClaimForm.tsx) для отслеживания unified_id и запросов к API
- Добавлены логи в backend (claims.py) для отладки SQL запросов
- Создан лог сессии с описанием проблемы и текущего состояния
- Проблема: API возвращает 0 черновиков, хотя в БД есть данные
2025-11-19 18:46:48 +03:00

219 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Анализ 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`
**Формат сообщения:**
```json
{
"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`
**Запрос:**
```sql
-- Получает документы из 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 файла из S3
- `file_name` - имя файла
---
#### Шаг 4: Обработка результатов OCR
**Нода:** `Edit Fields6`
**Извлекает:**
- `ocr_text` - текст OCR
- `vision_reason` - причина отправки в vision
- `nsfw` - флаг NSFW
- `page` - номер страницы
- `file_id` - ID документа из `claim_document_id`
---
#### Шаг 5: Сохранение результатов
**Нода:** `give_data1` (SQL запрос)
**Запрос:** Получает полные данные заявки:
- `claim` - данные заявки
- `documents` - документы
- `ocr_pages` - страницы OCR
- `vision_docs` - результаты vision
- `combined_docs` - объединенные документы
**Использует:** `claim_id` как **UUID** (из `clpr_claims.id`)
---
#### Шаг 6: Публикация событий
**Нода:** `Redis Publish (SendMessage)2`
**Канал:** `events:SendMessage`
**Сообщение:** JSON с результатами обработки
---
## Интеграция с веб-формой
### Текущая ситуация:
1. **Веб-форма использует:**
- `claim_id` в формате `CLM-YYYY-MM-DD-XXXXXX` (строка)
- Сохраняет в `clpr_claims.payload->>'claim_id'`
2. **SQL запросы возвращают:**
- `claim.claim_id` = **UUID** в виде строки (из `clpr_claims.id`)
- `claim.claim_id_str` = строка `CLM-...` (из `payload->>'claim_id'`)
3. **Workflow ожидает:**
- `claim_id` как **UUID** (из `clpr_claims.id`)
- Использует `clpr_claims.id` для поиска
### Решение:
**Ничего менять не нужно!**
При публикации в Redis канал `clpr:ocr:jobs` используем `claim.claim_id` (UUID), который возвращается из SQL запроса.
### Пример публикации в Redis:
```javascript
// После 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-...)
---
## Рекомендации
### Для интеграции с веб-формой:
**Ничего менять не нужно!**
1. **SQL запросы уже возвращают UUID:**
- `claim.claim_id` = UUID из `clpr_claims.id`
- `claim.claim_id_str` = строка CLM-... (для отображения)
2. **Публикация в Redis:**
- Используем `claim.claim_id` (UUID) при публикации в `clpr:ocr:jobs`
- Workflow будет работать без изменений
3. **Workflow:**
- Остается без изменений
- Принимает UUID и работает как обычно
---
## Текущие SQL запросы в workflow
### Запрос 1: Получение файлов (строка 485)
```sql
-- Использует: WHERE id = $1 (UUID)
FROM clpr_claims WHERE id = $1
```
**Работает как есть** - получаем UUID из `claim.claim_id`
### Запрос 2: Получение полных данных (строка 1020)
```sql
-- Использует: WHERE id = $1 (UUID)
FROM clpr_claims WHERE id = $1
```
**Работает как есть** - получаем UUID из `claim.claim_id`
---
## Итог
**Ничего менять не нужно!**
**Как это работает:**
1. Веб-форма сохраняет данные в PostgreSQL через `claimsave`
2. SQL запрос возвращает `claim.claim_id` (UUID из `clpr_claims.id`)
3. При публикации в Redis используем `claim.claim_id` (UUID)
4. Workflow получает UUID и работает без изменений
**Преимущества:**
- ✅ Workflow остается без изменений
- ✅ Нет необходимости в дополнительных преобразованиях
- ✅ Единый формат (UUID) для всех систем