Добавлено логирование для отладки черновиков
- Добавлены логи в frontend (ClaimForm.tsx) для отслеживания unified_id и запросов к API - Добавлены логи в backend (claims.py) для отладки SQL запросов - Создан лог сессии с описанием проблемы и текущего состояния - Проблема: API возвращает 0 черновиков, хотя в БД есть данные
This commit is contained in:
218
docs/WORKFLOW_OCR_ANALYSIS.md
Normal file
218
docs/WORKFLOW_OCR_ANALYSIS.md
Normal file
@@ -0,0 +1,218 @@
|
||||
# Анализ 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) для всех систем
|
||||
|
||||
Reference in New Issue
Block a user