---
name: digitalizar-protocolo-np
description: >
  Digitaliza protocolos físicos de avaliação neuropsicológica em laboratório de
  neuropsicologia de universidade pública brasileira. Extrai dados brutos de fotos/PDFs,
  calcula Z-scores via tabelas normativas, e gera linhas TSV prontas para
  colar no banco Excel. Dispara sempre que o usuário mandar fotos de
  protocolos neuropsicológicos com identificação (ID, idade, escolaridade).
  Também dispara para "novo paciente ID X", "digitaliza esse protocolo",
  "calcula os Z desse paciente", "processa essa avaliação",
  "ID 6XX, X anos, escolaridade Y", ou ao receber PDFs/fotos dos testes
  Hayling, TMT, WCST, WAIS, WASI, FDT, RAVLT, Stroop ou Fluência.
  NÃO usa para análise clínica geral, laudos, ou tarefas fora da digitalização.
---

# Digitalizar Protocolo NP — laboratório de neuropsicologia

Converte fotos/PDFs de protocolos manuscritos em linhas TSV para o banco
`Banco_<NOME>_*.xlsx` (fora do Project, com a mestranda da orientadora).
Usuário cola manualmente — skill não acessa banco.

## 3 regras não-negociáveis

1. **PII nunca**: nome, RG, CPF, endereço, telefone, data de nascimento,
   filiação. Único identificador = `ID`. Idade = anos completos.

2. **Fórmula do protocolo**: `Z = (Média − Paciente) / DP`. Z positivo = MELHOR
   que a média. Nunca inverter sinal.

3. **Banco é externo**: nunca tentar ler `Banco_<NOME>_*.xlsx` do Project.
   Gerar TSV e devolver ao usuário. Ele confere identidade e cola manualmente.

## Fluxo (6 passos)

## Fluxo simplificado (RECOMENDADO)

Usar `scripts/processar_paciente.py` que faz tudo end-to-end em 1 chamada:

```bash
python3 scripts/processar_paciente.py paciente.json
```

Onde `paciente.json` segue o schema documentado no próprio script. Output:
2 linhas TSV prontas + resumo de Z-scores e QIs calculados.

## Fluxo manual (debug ou casos especiais)

1. **Receber input**: ID + idade + escolaridade + fotos/PDF. Se faltar dado
   essencial, perguntar antes.

2. **Identificar instrumentos** presentes nas fotos. Para cada um, ler o
   arquivo de referência correspondente em `references/instrumentos/` (só o
   necessário — não ler tudo).

3. **Extrair dados brutos** seguindo `references/leitura-fotos.md` (tempos,
   marcações, ambiguidades resolvidas).

4. **Rodar `calcula_z.py`** no Project (não no skill):
   ```bash
   cd /mnt/project && python3 calcula_z.py \
     --normas "Co_pia_de_NP___TMT_HAYLING_WCST__2014_2.xlsx" \
     --paciente <ID> --idade <N> --esc <N> \
     [parâmetros TMT/Hayling/WCST aplicáveis] \
     [--wasi-vocab-bruto N --wasi-cubos-bruto N \
      --wasi-semelh-bruto N --wasi-rac-bruto N] \
     --json
   ```
   Capturar JSON. Calcula tudo automaticamente: Z dos clássicos + T/Pond/QI
   do WASI via `normas_wasi.py`.

5. **Gerar TSVs** via `scripts/gerar_tsv.py` (recebe JSON + dados brutos,
   gera 2 linhas TSV prontas).

6. **Devolver output** no formato de `templates/output-paciente.md`.

## Quando ler os references

**Sempre** (só estes 3 são fundação):
- `references/banco-schema.md` — estrutura das 2 abas do banco
- `references/codigos-banco.md` — legendas (Sexo=1/2, Nível=1-12, etc.)
- `references/leitura-fotos.md` — convenções OCR + ambiguidades resolvidas

**Por demanda** — só o instrumento que o paciente fez:
- `references/instrumentos/hayling.md`
- `references/instrumentos/tmt.md`
- `references/instrumentos/wcst.md`
- `references/instrumentos/wais-digitos.md`
- `references/instrumentos/wasi.md`
- `references/instrumentos/ravlt.md`
- `references/instrumentos/stroop.md`
- `references/instrumentos/fluencia.md`
- `references/instrumentos/fdt.md`
- `references/normas-candidatas.md` (normas BR mapeadas, não implementadas — consultar antes de prometer Z novo)

## Linha do banco

`linha = ID − 662`. ID 664 → linha 2. ID 681 → linha 19.

## Faixas das normas do laboratório

Hayling, TMT: idade 19-39, 40-59, 60-75 × esc 5-8, 9-11, 12+.
WCST: mesma idade × esc 5-8, 9+.

Fora dessas faixas: deixar Z = 9999 e avisar.

## Classificação Z → clínica

Z ≥ 2: Muito superior. 1.5-2: Superior. 1-1.5: Médio-superior.
−1 a 1: Médio. −1.5 a −1: Médio-inferior. −2 a −1.5: Rebaixado.
< −2: Muito rebaixado.

## Missing values

- Campo numérico sem dado: `9999`
- Hayling "invalidado" anotado: `HaylingExiste=0` + todos Hayling=9999
- LEC-5: não digitalizar

## Identidade do paciente

Usuário é responsável por conferir se a linha do banco já tem dados de
outro paciente antes de colar. Skill não acessa banco pra auditar.

Se o usuário der dados (sexo, idade, profissão) que batem com paciente
desse ID, ir em frente. Se houver dúvida, flagar no output.
