diff --git a/TEST_OCR.md b/TEST_OCR.md new file mode 100644 index 0000000..ad70282 --- /dev/null +++ b/TEST_OCR.md @@ -0,0 +1,72 @@ +# 🧪 Тестирование OCR + Gemini Vision + +## 📋 Запусти в SSH терминале: + +```bash +# 1. Перезапусти backend (обязательно!) +cd /var/www/fastuser/data/www/crm.clientright.ru/erv_platform/backend +source venv/bin/activate +pkill -9 -f "uvicorn app.main" +python -m uvicorn app.main:app --host 0.0.0.0 --port 8100 & +``` + +```bash +# 2. Открой логи в отдельном окне +tail -f /var/www/fastuser/data/www/crm.clientright.ru/erv_platform_backend.log +``` + +## 🔍 Что смотреть в логах: + +При загрузке файла должно появиться: + +``` +✅ File uploaded to S3: policies/... +🔍 Starting OCR for: filename.pdf +📄 OCR completed: 1245 chars +🤖 Starting AI analysis with google/gemini-2.0-flash-001 +✅ AI Analysis complete: + Document type: policy + Valid policy: true + Confidence: 0.95 +💾 OCR result cached in Redis: file_id +``` + +Если шляпа: +``` +🗑️ GARBAGE DETECTED: filename.jpg (but user doesn't know) +``` + +## 🌐 Тест через форму: + +1. Открой: http://147.45.146.17:5173 +2. Введи: E9999-999999999 (несуществующий) +3. Загрузи PDF полиса +4. **Смотри:** + - На форме: прогресс бар OCR + - В Debug панели: события OCR + AI + - В логах backend: полная информация + +## 🐛 Если не работает: + +Проверь что backend запущен: +```bash +curl http://localhost:8100/health +ps aux | grep uvicorn | grep 8100 +``` + +Проверь что OCR API доступен: +```bash +curl http://147.45.146.17:8001/docs +``` + +## 📊 Проверка Redis: + +```bash +redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" KEYS "ocr_result:*" +``` + +Если есть результаты - смотри: +```bash +redis-cli -h crm.clientright.ru -p 6379 -a "CRM_Redis_Pass_2025_Secure!" GET "ocr_result:file_id" +``` + diff --git a/backend/app/api/upload.py b/backend/app/api/upload.py index bcccb13..33780c8 100644 --- a/backend/app/api/upload.py +++ b/backend/app/api/upload.py @@ -229,34 +229,36 @@ async def upload_files(files: List[UploadFile] = File(...), folder: str = "claim "content_type": file.content_type } + # Запускаем OCR напрямую (без очереди пока) try: - # Отправляем задачу в очередь OCR - await rabbitmq_service.publish( - queue_name="erv_ocr_processing", - message=json.dumps(ocr_task) - ) - logger.info(f"📤 OCR task queued: {file_id} - {file.filename}") + logger.info(f"🔍 Starting OCR for: {file.filename}") - # Также сразу запускаем OCR для быстрого результата - # (параллельно с очередью для бэкапа) + # Запускаем OCR ocr_result = await ocr_service.process_document(content, file.filename) - # Сохраняем результат в Redis на 1 час - await redis_service.set( - f"ocr_result:{file_id}", - json.dumps(ocr_result, ensure_ascii=False), - expire=3600 - ) + logger.info(f"📊 OCR returned: {type(ocr_result)}") - logger.info(f"💾 OCR result cached in Redis: {file_id}") - logger.info(f"📊 Document type: {ocr_result.get('document_type')}") - logger.info(f"✅ Valid: {ocr_result.get('is_valid')}, Confidence: {ocr_result.get('confidence')}") + if isinstance(ocr_result, dict): + # Сохраняем результат в Redis на 1 час + await redis_service.set( + f"ocr_result:{file_id}", + json.dumps(ocr_result, ensure_ascii=False), + expire=3600 + ) + + logger.info(f"💾 OCR result cached in Redis: {file_id}") + logger.info(f"📊 Document type: {ocr_result.get('document_type', 'unknown')}") + logger.info(f"✅ Valid: {ocr_result.get('is_valid', False)}, Confidence: {ocr_result.get('confidence', 0)}") + + if ocr_result.get('document_type') == 'garbage': + logger.warning(f"🗑️ GARBAGE uploaded: {file.filename} (but user doesn't know)") + else: + logger.error(f"❌ OCR returned non-dict: {type(ocr_result)}") - if ocr_result.get('document_type') == 'garbage': - logger.warning(f"🗑️ GARBAGE uploaded: {file.filename} (but user doesn't know)") - - except Exception as queue_error: - logger.error(f"⚠️ Queue error (non-critical): {queue_error}") + except Exception as ocr_error: + logger.error(f"⚠️ OCR error: {ocr_error}") + import traceback + logger.error(f"Traceback: {traceback.format_exc()}") uploaded_files.append({ "success": True, diff --git a/final_commit.sh b/final_commit.sh new file mode 100644 index 0000000..575c360 --- /dev/null +++ b/final_commit.sh @@ -0,0 +1,41 @@ +#!/bin/bash +cd /var/www/fastuser/data/www/crm.clientright.ru/erv_platform + +git add -A + +git commit -m "fix: Исправлен OCR - убрана блокирующая ошибка RabbitMQ + +Проблема: +- OCR не запускался из-за ошибки в RabbitMQ publish +- 'str' object has no attribute 'get' +- Gemini Vision не вызывался + +Решение: +- Убран RabbitMQ publish (запускаем OCR напрямую) +- Добавлено детальное логирование: + - 🔍 Starting OCR for: filename + - 📄 OCR completed: XXX chars + - 🤖 Starting AI analysis + - 📊 Document type: policy/garbage + - ✅ Valid, Confidence + - 🗑️ GARBAGE DETECTED +- Проверка isinstance(ocr_result, dict) +- Полный traceback при ошибках + +Улучшения: +- OCR polling на фронте (каждые 3 сек) +- Progress bar с анимацией +- Условные поля для стыковочного рейса +- Доп поля для отмены рейса + +Файлы: +- upload.py - исправлен OCR запуск +- Step1Policy.tsx - OCR progress + polling +- Step2Details.tsx - условные поля +- TEST_OCR.md - инструкции по тестированию" + +git push origin main + +echo "✅ Final commit pushed!" +git log --oneline -3 +