Healthcare Eval Harness — Verificação de Segurança do Paciente
Sistema de verificação automatizada para implantações de aplicativos de saúde. Uma única falha CRÍTICA bloqueia a implantação. A segurança do paciente não é negociável.
Nota: Os exemplos usam Jest como executor de testes de referência. Adapte os comandos para seu framework (Vitest, pytest, PHPUnit, etc.) — as categorias de teste e os limites de aprovação são independentes de framework.
Quando Usar
- Antes de qualquer implantação de aplicativos EMR/EHR
- Após modificar a lógica de CDSS (interações medicamentosas, validação de doses, pontuações)
- Após alterar esquemas de banco de dados que tocam dados de pacientes
- Após modificar autenticação ou controle de acesso
- Durante a configuração de pipelines CI/CD para aplicativos de saúde
- Após resolver conflitos de mesclagem em módulos clínicos
Como Funciona
O arnês de avaliação executa cinco categorias de teste em ordem. As três primeiras (Precisão de CDSS, Exposição de PHI, Integridade de Dados) são portões CRÍTICOS que exigem 100% de aprovação — uma única falha bloqueia a implantação. As duas restantes (Fluxo de Trabalho Clínico, Integração) são portões ALTOS que exigem 95%+ de aprovação.
Cada categoria corresponde a um padrão de caminho de teste do Jest. O pipeline CI executa portões CRÍTICOS com --bail (parar na primeira falha) e aplica limites de cobertura com --coverage --coverageThreshold.
Categorias de Avaliação
1. Precisão de CDSS (CRÍTICO — 100% exigido)
Testa toda a lógica de suporte à decisão clínica: pares de interação medicamentosa (ambas as direções), regras de validação de doses, pontuações clínicas versus especificações publicadas, sem falsos negativos, sem falhas silenciosas.
npx jest --testPathPattern='tests/cdss' --bail --ci --coverage
2. Exposição de PHI (CRÍTICO — 100% exigido)
Testa vazamentos de informações protegidas de saúde: respostas de erro da API, saída do console, parâmetros de URL, armazenamento do navegador, isolamento entre instalações, acesso não autenticado, ausência de chave de função de serviço.
npx jest --testPathPattern='tests/security/phi' --bail --ci
3. Integridade de Dados (CRÍTICO — 100% exigido)
Testa a segurança dos dados clínicos: encontros bloqueados, entradas de trilha de auditoria, proteção contra exclusão em cascata, manipulação de edição simultânea, sem registros órfãos.
npx jest --testPathPattern='tests/data-integrity' --bail --ci
4. Fluxo de Trabalho Clínico (ALTO — 95%+ exigido)
Testa fluxos de ponta a ponta: ciclo de vida do encontro, renderização de modelos, conjuntos de medicamentos, pesquisa de medicamentos/diagnósticos, PDF de prescrição, alertas de bandeira vermelha.
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$tmp_json" || true
total=$(jq '.numTotalTests // 0' "$tmp_json")
passed=$(jq '.numPassedTests // 0' "$tmp_json")
if [ "$total" -eq 0 ]; then
echo "Nenhum teste clínico encontrado" >&2
exit 1
fi
rate=$(echo "scale=2; $passed * 100 / $total" | bc)
echo "Taxa de aprovação clínica: ${rate}% ($passed/$total)"
5. Conformidade de Integração (ALTO — 95%+ exigido)
Testa sistemas externos: análise de mensagens HL7 (v2.x), validação FHIR, mapeamento de resultados laboratoriais, tratamento de mensagens malformadas.
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/integration' --ci --json --outputFile="$tmp_json" || true
total=$(jq '.numTotalTests // 0' "$tmp_json")
passed=$(jq '.numPassedTests // 0' "$tmp_json")
if [ "$total" -eq 0 ]; then
echo "Nenhum teste de integração encontrado" >&2
exit 1
fi
rate=$(echo "scale=2; $passed * 100 / $total" | bc)
echo "Taxa de aprovação de integração: ${rate}% ($passed/$total)"
Matriz de Aprovação/Falha
| Categoria | Limite | Em caso de Falha |
|---|---|---|
| Precisão de CDSS | 100% | BLOQUEAR implantação |
| Exposição de PHI | 100% | BLOQUEAR implantação |
| Integridade de Dados | 100% | BLOQUEAR implantação |
| Fluxo de Trabalho Clínico | 95%+ | AVISO, permitir com revisão |
| Integração | 95%+ | AVISO, permitir com revisão |
Integração CI/CD
name: Portão de Segurança de Saúde
on: [push, pull_request]
jobs:
safety-gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
# Portões CRÍTICOS — 100% exigido, parar na primeira falha
- name: Precisão de CDSS
run: npx jest --testPathPattern='tests/cdss' --bail --ci --coverage --coverageThreshold='{"global":{"branches":80,"functions":80,"lines":80}}'
- name: Verificação de Exposição de PHI
run: npx jest --testPathPattern='tests/security/phi' --bail --ci
- name: Integridade de Dados
run: npx jest --testPathPattern='tests/data-integrity' --bail --ci
# Portões ALTOS — 95%+ exigido, verificação de limite personalizado
- name: Fluxos de Trabalho Clínicos
run: |
TMP_JSON=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$TMP_JSON" || true
TOTAL=$(jq '.numTotalTests // 0' "$TMP_JSON")
PASSED=$(jq '.numPassedTests // 0' "$TMP_JSON")
if [ "$TOTAL" -eq 0 ]; then
echo "::error::Nenhum teste clínico encontrado"; exit 1
fi
RATE=$(echo "scale=2; $PASSED * 100 / $TOTAL" | bc)
echo "Taxa de aprovação: ${RATE}% ($PASSED/$TOTAL)"
if (( $(echo "$RATE < 95" | bc -l) )); then
echo "::warning::Taxa de aprovação clínica ${RATE}% abaixo de 95%"
fi
- name: Conformidade de Integração
run: |
TMP_JSON=$(mktemp)
npx jest --testPathPattern='tests/integration' --ci --json --outputFile="$TMP_JSON" || true
TOTAL=$(jq '.numTotalTests // 0' "$TMP_JSON")
PASSED=$(jq '.numPassedTests // 0' "$TMP_JSON")
if [ "$TOTAL" -eq 0 ]; then
echo "::error::Nenhum teste de integração encontrado"; exit 1
fi
RATE=$(echo "scale=2; $PASSED * 100 / $TOTAL" | bc)
echo "Taxa de aprovação: ${RATE}% ($PASSED/$TOTAL)"
if (( $(echo "$RATE < 95" | bc -l) )); then
echo "::warning::Taxa de aprovação de integração ${RATE}% abaixo de 95%"
fi
Anti-Padrões
- Pular testes de CDSS "porque passaram da última vez"
- Definir limites CRÍTICOS abaixo de 100%
- Usar
--no-bailem suítes de teste CRÍTICAS - Simular o mecanismo de CDSS em testes de integração (deve testar a lógica real)
- Permitir implantações quando o portão de segurança está vermelho
- Executar testes sem
--coveragenas suítes de CDSS
Exemplos
Exemplo 1: Executar Todos os Portões Críticos Localmente
npx jest --testPathPattern='tests/cdss' --bail --ci --coverage && \
npx jest --testPathPattern='tests/security/phi' --bail --ci && \
npx jest --testPathPattern='tests/data-integrity' --bail --ci
Exemplo 2: Verificar Taxa de Aprovação do Portão ALTO
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$tmp_json" || true
jq '{
passed: (.numPassedTests // 0),
total: (.numTotalTests // 0),
rate: (if (.numTotalTests // 0) == 0 then 0 else ((.numPassedTests // 0) / (.numTotalTests // 1) * 100) end)
}' "$tmp_json"
# Esperado: { "passed": 21, "total": 22, "rate": 95.45 }
Exemplo 3: Relatório de Avaliação
## Avaliação de Saúde: 2026-03-27 [commit abc1234]
### Segurança do Paciente: APROVADO
| Categoria | Testes | Aprovados | Falhas | Status |
|-----------|--------|-----------|--------|--------|
| Precisão de CDSS | 39 | 39 | 0 | APROVADO |
| Exposição de PHI | 8 | 8 | 0 | APROVADO |
| Integridade de Dados | 12 | 12 | 0 | APROVADO |
| Fluxo de Trabalho Clínico | 22 | 21 | 1 | 95.5% APROVADO |
| Integração | 6 | 6 | 0 | APROVADO |
### Cobertura: 84% (alvo: 80%+)
### Veredito: SEGURO PARA IMPLANTAR