# AZPET Health Memory OCR

O modulo premium usa Google Cloud Vision para OCR e OpenAI para estruturar/organizar texto extraido.

## Composer/PHP

```bash
composer require google/cloud-vision:^2.0 smalot/pdfparser:^2.12
```

Pacotes usados:

- `google/cloud-vision`: cliente oficial do Google Cloud Vision usado com Service Account e `transport=rest`.
- `smalot/pdfparser`: extrai texto de PDFs digitais antes de chamar OCR.

## Google Cloud Vision

A credencial real deve ficar apenas no `.env` e no storage privado. Nao coloque JSON de Service Account nem chaves reais no `.env.example`.

```env
GOOGLE_CLOUD_VISION_CREDENTIALS=storage/app/private/google/vision-service-account.json
GOOGLE_CLOUD_VISION_TRANSPORT=rest
GOOGLE_CLOUD_VISION_TIMEOUT=90
GOOGLE_CLOUD_VISION_DISABLE_RETRIES=true
GOOGLE_CLOUD_VISION_ENDPOINT=https://vision.googleapis.com/v1
GOOGLE_CLOUD_VISION_LANGUAGE_HINTS=pt,en
GOOGLE_CLOUD_VISION_PDF_PAGES=5
GOOGLE_CLOUD_VISION_API_KEY=
OCR_MINIMUM_TEXT_LENGTH=25
```

`GOOGLE_CLOUD_VISION_API_KEY` fica como fallback para REST direto, mas o fluxo recomendado e o mesmo do teste validado: Service Account JSON + `ImageAnnotatorClient` + `transport=rest`.

Fluxo:

1. `text/*`: o arquivo e lido diretamente.
2. PDF digital: o sistema tenta extrair texto com `smalot/pdfparser`.
3. Imagem: o sistema chama `batchAnnotateImages` com `DOCUMENT_TEXT_DETECTION`.
4. PDF sem texto embutido: o sistema chama `batchAnnotateFiles` com `DOCUMENT_TEXT_DETECTION`.
5. O texto extraido e enviado para a OpenAI para gerar JSON estruturado.
6. O banco de dados continua sendo a fonte oficial do relatorio.

Observacao: a chamada sincronica de PDF processa ate 5 paginas por arquivo. Para PDFs longos, o proximo passo natural e evoluir para o fluxo assincrono com Cloud Storage.

## OpenAI

```env
OPENAI_API_KEY=sk-...
OPENAI_EXTRACTION_MODEL=gpt-4o-mini
OPENAI_PREMIUM_MODEL=gpt-4o-mini
```

A IA nao diagnostica, nao prescreve e nao substitui o medico veterinario.
