# Atualizacao DEV — Fase 4, frente do Cartao de Cidadao

Data: 2026-08-25  
Versao: `pataniscAI-3.0.0-dev`  
Ambientes: Sabichao DEV e PC RTX; producao excluida

## Objectivo e limites

Reduzir os vazios de `ncc` e `validade_cc` sem treino e sem trocar o modelo congelado
`AuditAid/PaddleOCR-VL-1.6-0.9B:latest` (blob `71306567488b`). O holdout continua fechado. Um
valor novo so entra quando aparece igual em pelo menos duas leituras; checksum isolado, correcao
por aproximacao e preenchimento por inferencia continuam proibidos.

## Alteracoes preparadas

- `src/pataniscai/prompts.py`: tarefa `cc_frente_identificacao`, limitada as linhas rotuladas do
  numero do documento e validade, com resposta vazia quando a leitura nao e certa.
- `src/pataniscai/ollama.py`: opcoes apenas para a tarefa focada (`num_predict=160`,
  `repeat_penalty=1.05`, `repeat_last_n=64`). As transcricoes gerais mantem exactamente as opcoes
  aceites anteriormente.
- `src/pataniscai/engine.py`: passa o tipo documental ao cliente Ollama para seleccionar essas
  opcoes sem inferir pelo texto do prompt.
- `funcoes/pataniscai_client.php`: conserva primeiro as 12 bandas gerais existentes e acrescenta
  duas tarefas focadas nas bandas sobrepostas centro/sul da frente do CC, ate ao limite de 20
  ficheiros da API. As leituras focadas passam pelos mesmos parsers e pelo consenso existente.
- Testes Python e PHP cobrem prompt, opcoes, propagacao do tipo, manifesto das bandas e regras de
  consenso.

## Instalacao no Windows

1. Parar a tarefa agendada `pataniscAI`.
2. Fazer backup de `src\pataniscai` e `tests`.
3. Copiar os tres modulos Python e os dois testes desta actualizacao para `C:\pataniscAI`.
4. Executar `scripts\install-windows.ps1` sem voltar a registar a tarefa.
5. Executar a suite Python com um `--basetemp` novo e confirmar todos os testes.
6. Arrancar a tarefa e confirmar `/health`: Paddle exacto, `ready=true` e modelo na GPU.
7. Repetir os 30 scans expostos pelo runner autonomo do CT DEV. Nao abrir o holdout.

O ficheiro PHP vive no volume DEV partilhado e nao e copiado para producao. Nao alterar `.env`,
token, firewall, allowlist, Ollama ou configuracao do formulario.

## Criterio de aceitacao

A alteracao so fica aceite se, nos mesmos 30 scans e sem fallback:

- `ncc` ou `validade_cc` reduzir vazios sem aumentar erros;
- nenhum outro campo piorar em erros ou vazios;
- nenhuma fabricacao for detectada;
- media e p95 continuarem abaixo do Tesseract.

Os resultados antes/depois e os testes reais serao acrescentados a este documento depois da
medicao integral.

## Diagnostico antes da alteracao

Runner autonomo no CT DEV, 30/30 scans, zero falhas e zero fallback
(`/var/tmp/pataniscai-benchmark/development-20260825-231805.log`):

- Paddle: 5 erros e 96 vazios; media 33341 ms, p95 48724 ms.
- `ncc`: 13 certos, 0 errados, 17 vazios. Em 16 dos 17 vazios a transcricao geral ja contem uma
  sequencia de oito digitos, mas nao existe uma segunda leitura segura para a adoptar.
- `validade_cc`: 13 certos, 0 errados, 17 vazios. Nos 17 vazios existem o rotulo e uma data ISO na
  transcricao, mas falta igualmente corroboracao.
- Frente do CC: mediana de 83 caracteres nas leituras gerais/bandas, contra 1447,5 no RC.

O diagnostico e redigido por forma e scan ID; nao persistiu nem mostrou valores pessoais. Esta
evidencia confirma que a Fase 4 deve melhorar a segunda leitura das mesmas zonas, sem alargar o
parser nem aceitar candidatos unicos.

## Instalacao e resultado final

Instalado em `C:\pataniscAI` depois de backup dos cinco ficheiros substituidos. O pacote foi
validado pelo SHA-256 `15FC2C4F7F90A1EE831373F17E2298679994BC8DCA2FF4E1E64B2CABFB280F80`.
O instalador concluiu, 15/15 testes Python passaram e `/health` confirmou PaddleOCR-VL carregado.

O primeiro ensaio revelou que a banda geral e a focada do mesmo recorte se confirmavam entre si.
O cliente PHP foi corrigido para contar posicoes fisicas distintas; a focada herda a posicao do
recorte e nunca vale como segundo voto da mesma imagem. 56/56 fixtures e harness Tesseract OK.

Benchmark final exposto (`development-20260826-001401.log`): 30/30, zero falhas/fallback, 5
erros/90 vazios, media 33980 ms e p95 50118 ms. `ncc` e `validade_cc` ficaram ambos em 16 certos,
0 errados e 14 vazios. O lote melhora 96->90 vazios sem erros novos, mas a versao continua DEV
porque o Tesseract tem 58 vazios e ainda ha gates por campo por cumprir.

## E2E no formulario DEV

Executado em 2026-08-26 com activacao temporaria do extractor pataniscAI e do corpus Protek
montado em modo apenas leitura. Sem submeter o formulario, a execucao ficou registada na BD DEV
como scan 16, `pataniscAI-3.0.0-dev`, sucesso, 3/3 documentos OCR, 11 campos, zero avisos e
16454 ms. Depois da validacao, o DEV foi imediatamente reposto em Tesseract e no caminho NAS
normal. Producao e holdout nao foram tocados.

A prova final de fallback foi executada com a tarefa Windows parada. Um pedido directo do CT DEV,
forcando `OCR_EXTRACTOR=pataniscai` apenas no processo CLI, terminou com sucesso pelo Tesseract:
3 documentos, `extractor_requested=pataniscai`, `extractor=tesseract`, `fallback=tesseract`, um
aviso e 24248 ms. A configuracao persistente do DEV nao foi alterada. A tarefa foi depois
reiniciada e `/health` confirmou `ready=true`, PaddleOCR-VL carregado na GPU e Ollama 0.32.15.

## Rollback

1. Parar a tarefa Windows.
2. Repor o backup dos tres modulos e dos testes, executar novamente o instalador e arrancar a
   tarefa.
3. Repor `funcoes/pataniscai_client.php` e o respectivo teste a partir da copia anterior desta
   unidade de trabalho.
4. Confirmar `/health` e repetir o corpus exposto. O extractor normal do formulario permanece
   Tesseract, pelo que este rollback nao requer alteracoes de producao nem de base de dados.
