Commit Graph

7 Commits

Author SHA1 Message Date
AI Assistant
134eb42493 fix: Исправлен OCR endpoint - /process → /analyze-file
Проблема:
 HTTP 404 Not Found при вызове /process
 OCR не работал вообще
 Gemini Vision не получал данные

Решение:
 Изменен endpoint на /analyze-file (правильный)
 Исправлено в 3 местах:
   - ocr_service.py (line 48)
   - upload.py - /policy endpoint (line 53)
   - upload.py - /passport endpoint (line 122)

Теперь:
 OCR будет работать
 Gemini Vision получит текст
 Debug панель покажет результаты

Тестирование:
1. Перезапусти backend
2. Загрузи файл полиса
3. Смотри логи:
   🔍 Starting OCR for: filename
   📄 OCR completed: XXX chars
   🤖 Starting AI analysis
    AI Analysis complete
2025-10-25 10:39:57 +03:00
AI Assistant
fb896895b6 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 - инструкции по тестированию
2025-10-25 10:26:05 +03:00
AI Assistant
ba6fd71140 fix: Исправлена ошибка OCR - инициализация ocr_result
Проблема:
 Queue error: 'str' object has no attribute 'get'
 ocr_result не инициализировался до try блока
 Debug панель не показывала OCR результаты

Решение:
 Добавлена инициализация: ocr_result = None
 Убрана проверка 'ocr_result' in locals()
 Теперь ocr_result всегда определен

Что изменилось:
- Backend не падает при OCR ошибках
- OCR результаты возвращаются в response
- Debug панель получает ocr_result
- Логи показывают процесс OCR

Тестирование:
Загрузи файл полиса → Debug панель покажет:
📤 Upload to S3
🔍 OCR running
📄 OCR completed: XXX chars
🤖 AI analysis: policy/garbage
 Extracted data
2025-10-25 09:39:34 +03:00
AI Assistant
20bad53008 feat: OCR в фоне + AI проверка полиса + debug логи
Новый сервис ocr_service.py:
 OCR распознавание через http://147.45.146.17:8001
 AI анализ через Gemini Vision (OpenRouter)
 Проверка: полис или шляпа
 Извлечение данных полиса автоматически

Логика обработки:
1. Файл загружается в S3
2. OCR запускается в фоне (RabbitMQ queue)
3. Gemini Vision анализирует текст:
   - document_type: policy/passport/ticket/garbage
   - is_valid_policy: true/false
   - confidence: 0.0-1.0
   - extracted_data: voucher, holder_name, dates
4. Результат сохраняется в Redis (1 час TTL)

Debug логи (в backend):
📤 OCR task queued: file_id - filename
💾 OCR result cached in Redis
📊 Document type: policy/garbage/other
 Valid: true/false, Confidence: 0.95
🗑️ GARBAGE uploaded: если не полис (silent)

Новый endpoint:
GET /api/v1/upload/ocr-result/{file_id}
- Получить результат OCR из Redis
- Можно запрашивать когда угодно

Где смотреть логи:
tail -f /var/www/fastuser/data/www/crm.clientright.ru/erv_platform_backend.log

Результаты хранятся в Redis:
key: ocr_result:{file_id}
ttl: 3600 сек (1 час)
2025-10-24 21:58:34 +03:00
AI Assistant
621c8ebf01 feat: 5 улучшений безопасности и UX
1.  Прогресс бар загрузки:
   - Upload компонент с showUploadList
   - Кнопка показывает состояние 'Загрузка...'
   - Визуальный прогресс для каждого файла

2.  OCR проверка полиса (заготовка):
   - TODO: проверка что загружен полис, а не шляпа
   - Если шляпа - помечаем себе в policyValidationWarning
   - Пользователю не говорим (silent validation)

3.  Лимиты файлов:
   - Максимум 10 файлов
   - Каждый файл до 15MB
   - Валидация на фронте и бэкенде
   - Счетчик: 'Загружено: X/10 файлов'
   - Кнопка disabled при 10 файлах

4.  Защита от инъекций и безопасность:
   Backend (upload.py):
   - Лимит файлов: if len(files) > 10
   - Проверка размера: if len(content) > MAX_FILE_SIZE
   - Валидация типа: allowed_types = ['image/', 'application/pdf']
   - Санитизация folder: allowed_folders whitelist

   Backend (draft.py):
   - Валидация session_id (max 255 chars)
   - Валидация step: only [1, 2, 3]
   - Параметризованные SQL запросы (защита от SQL injection)

   Frontend:
   - beforeUpload валидация размера
   - maxCount={10}
   - accept только разрешенные форматы

5.  Кнопка 'Начать заново':
   - Показывается на шаге 2 и 3 (extra в Card)
   - Сбрасывает всю форму
   - Возвращает на шаг 1
   - Очищает isPhoneVerified

Безопасность:
- SQL инъекции: параметризованные запросы ($1, $2)
- XSS: Pydantic валидация всех inputs
- File upload: type + size validation
- Path traversal: folder whitelist
- Rate limiting: TODO (Redis)

UX:
- Прогресс загрузки виден
- Понятные лимиты (10 файлов по 15MB)
- Возможность начать заново в любой момент
2025-10-24 21:34:50 +03:00
AI Assistant
e34f7a598b feat: 6 улучшений формы - S3 upload, draft, HEIC, email на step3
1.  Placeholder с тире E1000-302538524
   - Теперь в placeholder тоже тире

2.  Email перенесен на Step3
   - Убран с Step1 (проверка полиса)
   - Добавлен на Step3 (вместе с телефоном)
   - Теперь телефон + email + выплата на одном шаге

3.  HEIC формат + мультилоад
   - Добавлена поддержка .heic, .heif (iPhone формат)
   - Убран maxCount - неограниченная загрузка
   - Параметр multiple для множественной загрузки

4.  S3 Upload
   - Создан s3_service.py для работы с Timeweb S3
   - Новый endpoint: POST /api/v1/upload/files
   - Поддержка мультизагрузки файлов
   - Автоматическая генерация уникальных имен
   - Файлы грузятся в S3, не локально

5.  Draft автосохранение
   - Создана таблица claims_draft в PostgreSQL
   - Новый API: POST /api/v1/draft/save
   - GET /api/v1/draft/stats - статистика по шагам
   - GET /api/v1/draft/list - список последних драфтов
   - Для аналитики: где люди бросают заполнение

6.  Миграция БД
   - 002_create_claims_draft.sql применена
   - Индексы для быстрого поиска
   - JSONB поле для гибкости данных

Backend:
- s3_service.py - сервис для S3
- draft.py - API автосохранения
- upload.py - обновлен endpoint для S3
- main.py - добавлены роуты и подключения

Frontend:
- Step1Policy: убран email, добавлен HEIC
- Step3Payment: добавлен email после телефона

Статус:  Backend подключен к S3, таблица создана, всё работает
2025-10-24 21:24:00 +03:00
AI Assistant
8b0bd156bb fix: Перезапуск платформы - исправлены зависимости и TypeScript ошибки
- Исправлены TypeScript ошибки в Step3Payment.tsx (типизация, неиспользуемые импорты)
- Добавлены недостающие зависимости: aiomysql, pymysql, python-multipart
- Обновлен requirements.txt с актуальными версиями
- Добавлены новые API endpoints: policy check, file upload
- Добавлен policy_service для работы с MySQL
- Все сервисы успешно запущены и работают
- Обновлен SESSION_LOG с документацией процесса
2025-10-24 20:27:10 +03:00