# Padrões de saúde para agentes de IA (beta)

> O que mudou no registo de um paciente e o que é recorrente, calculado por regras estatísticas fixas: tendências, desvios do nível habitual da pessoa e recorrência de sintomas, cada um com o seu período, evidência e limitações; não diagnósticos.

Source: https://developers.anpheros.com/pt/guides/health-patterns

**A Anpheros calcula o que mudou no registo de um paciente e o que é recorrente, por regras estatísticas fixas, e entrega cada descoberta à sua aplicação ou agente de IA com o seu período, os recursos subjacentes, a versão do método e as suas limitações.** Um modelo já não tem de adivinhar uma tendência a partir de um punhado de números: recebe a tendência, a incerteza em torno dela e os dados para citar.

Beta. Na sandbox funciona com quaisquer credenciais de sandbox (chaves `sk_test_…` e ligações OAuth de sandbox). Em registos de produção, funciona apenas sob o consentimento OAuth de um paciente que inclua a permissão separada `anpheros/patterns`; as chaves API de produção recebem 403.

## O que encontra

| Tipo | Pergunta que responde | Método |
|---|---|---|
| `trend` | Uma medição está a subir ou a descer na janela? | Inclinação de Theil–Sen com Mann–Kendall num valor por dia (medianas semanais para dados de monitorização densos), corrigido quando os dias vizinhos são semelhantes |
| `trend` (`change_between_results`) | Como é que um teste laboratorial com dois a cinco resultados mudou? | Primeiro e último resultado, com o mais recente comparado com o intervalo de referência do relatório; descrito, não testado |
| `trend` (`event_rate_change`) | Um sintoma é registado com mais ou menos frequência? | Dias de sintoma em relação aos dias em que a pessoa registou algo, últimos 30 dias contra os 90 anteriores, teste exato |
| `baseline_deviation` | A última semana é invulgar para esta pessoa? | Últimos 7 dias contra os dias 8–60, Mann–Whitney ou diferença de médias ajustada por autocorrelação |
| `recurrence` | Episódios de sintomas voltam em intervalos regulares? | Intervalos entre o início dos episódios, Monte Carlo semeado contra episódios colocados aleatoriamente |
| `association` (`around_medication_start`, sandbox) | Um sintoma é registado com mais ou menos frequência desde o início de uma medicação? | Dias de sintoma em relação aos dias ativos nos 30 dias desde o início contra até 90 dias antes, teste exato |
| `association` (`after_short_sleep`, sandbox) | Um sintoma é registado com mais frequência em dias com menos de 6 horas de sono? | Dias com sono medido e um registo pela pessoa, noites curtas contra noites mais longas, teste exato de Fisher |
| `convergence` (`recent_changes_together`, sandbox) | Várias coisas mudaram no mesmo período recente? | Nenhum teste novo: agrupa pelo menos duas alterações recentes (uma semana invulgar, um sintoma com mais ou menos frequência) que são cada uma estatisticamente suportada; diz apenas que aconteceram juntas |

Todos os testes de uma execução são corrigidos em conjunto (Benjamini–Hochberg). Uma descoberta é `statistically_supported` apenas quando o valor q corrigido é inferior a 0.05 **e** a alteração é pelo menos o limiar para essa medição.

## O que não é

- **Não é um diagnóstico.** As descobertas descrevem o registo; nunca nomeiam uma condição nem recomendam uma alteração de tratamento. Cada descoberta inclui `safety.not_a_diagnosis = true` e `safety.causal_claim = false`.
- **Não é uma causa.** Uma alteração após uma nova medicação, ou duas coisas registadas em conjunto, não é prova de que uma causou a outra. As associações dizem apenas que duas coisas aconteceram aproximadamente ao mesmo tempo; cada uma inclui `confounding_possible` e `not_causal`, e apenas os inícios de medicação e o sono são testados contra sintomas, não todos os pares. Com credenciais de sandbox apenas por agora.
- **Não é um modelo de IA, e ainda não foi revisto clinicamente.** Cada número provém de regras estatísticas fixas e versionadas; nenhum modelo de IA analisa os dados. Os limiares para uma alteração significativa foram definidos com assistência de IA e ainda não foram revistos por um clínico; cada descoberta indica isso em `review.thresholds_reviewed_by_clinician`. O motor é validado em pacientes sintéticos com padrões conhecidos plantados: encontra o que foi plantado e permanece silencioso quando nada foi. Isso não é validação clínica.

## Experimente

Cada projeto de sandbox tem 30 pacientes sintéticos, e seis deles têm um padrão plantado. Encontre um com `GET /fhir/R4/Patient?identifier=https://anpheros.com/fhir/sid/sandbox-persona|<key>`.

| Paciente | O que foi plantado | O que o motor reporta |
|---|---|---|
| p01 Andrei Popescu | Pressão arterial diária em casa, a cair cerca de 8/5 mmHg ao longo de seis meses | `trend.decreasing` para sistólica (8480-6) e diastólica (8462-4) |
| p06 Giulia Rossi | Uma dor de cabeça a cada 7 dias, com uma margem de um dia | `recurrence.intervals` para dor de cabeça (R51) |
| p17 Ciarán Murphy | Fadiga em cerca de metade dos últimos 30 dias, contra 1 dia em 12 antes | `frequency.increased` para fadiga (R53) |
| p19 Felix Gruber | Frequência cardíaca de repouso de um relógio, cerca de 9 bpm acima do seu nível habitual na última semana | `baseline.higher` para frequência cardíaca de repouso (40443-4) |
| p20 Ivana Horvat | Frequência cardíaca de repouso de um relógio, a estabilizar cerca de 16 bpm ao longo de seis meses | `trend.decreasing` para frequência cardíaca de repouso (40443-4) |
| p30 Jan Kowalczyk | Dados densos de relógio e de casa sem nada plantado | nenhuma descoberta suportada: o motor permanece em silêncio |

Os projetos criados antes de 16 de outubro de 2026 recebem estes padrões após a reposição dos seus pacientes sintéticos a partir do painel; uma reposição substitui quaisquer alterações feitas neles.

```bash
curl -s https://platform.anpheros.com/v1/patients/$PATIENT/patterns?window_days=180 \
  -H "Authorization: Bearer $ANPHEROS_KEY"
```

Com o SDK TypeScript (`@anpheros/sdk` 0.2.0 ou posterior):

```ts
const run = await anpheros.patterns.run(patientId, { window_days: 180, min_strength: 'moderate' });
for (const f of run.findings) console.log(f.summary_text, f.strength, f.limitations.map(l => l.code));
```

Com o servidor MCP, pergunte ao seu agente "O que mudou no registo deste paciente nos últimos seis meses?": ele chama `get_health_patterns`, e pode dar seguimento com `get_pattern_evidence`, `get_series` e `compare_periods`. `POST /v1/context` adiciona uma secção `patterns` para perguntas sobre alterações e relações, ou quando pede a necessidade `patterns`.

## Endpoints

| Endpoint | O que retorna |
|---|---|
| `GET /v1/patients/{id}/patterns` | um *run*: descobertas, o que não pôde ser computado e porquê, que consentimento excluiu; filtros `window_days` (30–730), `end`, `types`, `min_strength` |
| `GET /v1/patients/{id}/patterns/{finding_id}` | uma descoberta, recomputada para a mesma janela |
| `GET /v1/patients/{id}/patterns/{finding_id}/evidence` | todos os recursos de suporte, paginados |
| `GET /v1/patients/{id}/series?code=…` | uma medição como um valor por dia, com cobertura, lacunas e alterações de origem |
| `POST /v1/patients/{id}/patterns/compare` | uma medição em dois períodos à sua escolha |

## Ler um achado

- `summary_text`: uma frase simples, segura para mostrar ou citar.
- `strength`: `strong`, `moderate`, `weak` ou `not_tested`. Achados fracos e não testados são descrições, não evidências.
- `window`, `comparison_window`: os períodos analisados.
- `evidence` (até 20, distribuídos ao longo do período) e `evidence_total`: os recursos subjacentes ao achado, com versão, data, valor e tipo de autor.
- `limitations`: codificado, com texto. Mostre-os com o achado.
- `review`: se um clínico revisou os limiares (`false` por agora) e de onde provêm.
- `method`, `engine_version`, `input_fingerprint`: os mesmos dados, configuração e versões produzem o mesmo resultado e o mesmo id.

## Regras a saber

- **Consentimento primeiro.** Ao abrigo de uma concessão OAuth, o motor lê apenas o que a concessão permite; o que não pôde ler está listado em `omitted`, sem conteúdo.
- **IDs.** Os pacientes aparecem com o ID par do seu projeto; os IDs de localização são derivados por projeto. Quando o registo muda, uma localização recebe um novo ID e o antigo responde com 404.
- **Tempo.** Quando o tempo de uma leitura tem um deslocamento explícito (`2026-10-16T00:30:00+03:00`), conta no dia da pessoa; os tempos em UTC (`Z`) ou sem deslocamento permanecem no dia UTC. Cada localização indica qual em `time_basis` (`record_offsets`, `partly_local` ou `local_time_unknown`). Os dias locais são usados em registos de sandbox e de produção; os padrões de hora do dia ainda não são calculados.
- **Omitidos.** Valores escritos por IA, resultados marcados como erro de introdução e datas conhecidas apenas pelo mês não são utilizados e são contados.
- **Limites.** 30 execuções de padrões por minuto por credencial, além dos habituais 600 pedidos por minuto.

## Perguntas frequentes

### Utiliza um modelo de linguagem?
Não. Todos os números provêm de métodos estatísticos fixos e versionados. Qualquer modelo, alojado ou local, pode ler os resultados.

### Porque é que uma alteração clara nos meus dados é marcada como fraca?
Porque a evidência não sobrevive à correção para todos os testes na execução, a série é curta ou ruidosa, ou a alteração está abaixo do limiar para essa medição. A descoberta ainda descreve o que o registo mostra.

### Funciona em registos de produção?
Sim, a partir de 16 de outubro de 2026, mas apenas sob o consentimento OAuth de um paciente que inclua a permissão separada `anpheros/patterns`, que o ecrã de consentimento mostra numa linha própria. Solicite o âmbito ao lado dos seus âmbitos `patient/…`; uma concessão sem ele, e qualquer chave de API de produção, resulta em 403.

## Relacionado

- [Servidor MCP FHIR para agentes de IA](https://developers.anpheros.com/pt/guides/mcp)
- [Aplicações LLM e dados de saúde](https://developers.anpheros.com/pt/guides/llm-healthcare-data)
- [Agentes de IA e dados médicos](https://developers.anpheros.com/pt/guides/ai-agents-medical-data)
- [API de saúde com consentimento do paciente](https://developers.anpheros.com/pt/guides/healthcare-api-patient-consent)
