# OCR Local - Setup tecnico

Este proyecto usa OCR local en este orden:
1. PaddleOCR (principal)
2. Tesseract (respaldo automatico)

## 1) Prerrequisitos

- Python 3.10+ instalado y en PATH.
- Tesseract OCR instalado en Windows.
- Proyecto Laravel ya instalado con `composer install`.

## 2) Instalacion automatica OCR

Desde PowerShell (como admin):

```powershell
cd C:\xampp\htdocs\tienda
powershell -ExecutionPolicy Bypass -File .\scripts\windows\install-ocr.ps1 -ProjectRoot "C:\xampp\htdocs\tienda" -PythonExe "python" -TesseractPath "C:\Program Files\Tesseract-OCR\tesseract.exe"
```

Esto crea:
- `.\.venv` para dependencias Python OCR.
- Variables `.env` para invocar OCR desde Laravel.

## 3) Verificacion OCR desde Laravel

```powershell
php artisan config:clear
php artisan app:ocr-health-check --input="C:\ruta\documento.pdf"
```

Salida esperada:
- `OCR OK`
- Engine detectado (`paddleocr` o `tesseract`)
- Confidence > 0

## 4) Flujo runtime

- `DocumentUploadController` guarda archivo original.
- `ProcessDocumentPipelineJob` lanza cadena de jobs.
- `RunOcrJob` invoca `LocalOcrService`.
- `LocalOcrService` ejecuta `scripts/ocr/ocr_service.py`.
- El resultado OCR se guarda en:
  - `documents.ocr_text`
  - `documents.ocr_engine`
  - `documents.ocr_meta`
  - `documents.confidence_score`

## 5) Ajustes de calidad recomendados

- `OCR_LANG=es` en `.env` para documentos espanoles.
- `OCR_TIMEOUT_SECONDS=180` (subir para PDFs muy grandes).
- Si hay OCR pobre en tickets:
  - aumentar DPI render PDF en `ocr_service.py` (`scale=2` -> `scale=3`)
  - revisar calidad de escaneo y contraste.

## 6) Troubleshooting rapido

- Error `No se encontro el script OCR`: valida `OCR_SCRIPT_PATH` en `.env`.
- Error `python not found`: valida `OCR_PYTHON_BINARY` en `.env`.
- Error PaddleOCR import: reinstala con:
  - `.\.venv\Scripts\python.exe -m pip install -r scripts\ocr\requirements.txt`
- Error Tesseract: valida `TESSERACT_BINARY` y que exista `tesseract.exe`.
