Pular para o conteúdo principal
Docs vAtualAPI
Versão: Atual

CDS Hooks

Integre a SauBit ao fluxo de prescrição do EHR via CDS Hooks: ao prescrever, o EHR chama o serviço e exibe cards de alerta (interações, contraindicações, alertas clínicos) no ponto de decisão.

Copia um prompt pronto com fluxo de integração, payload e exemplos.

Descoberta (discovery)

GET /api/v1/cds-services (sem autenticação, conforme a especificação). Retorna os serviços disponíveis:

{
"services": [
{
"hook": "medication-prescribe",
"title": "SauBit — análise de segurança da prescrição",
"description": "Verifica interações, contraindicações e alertas clínicos da prescrição.",
"id": "saubit-medication-safety"
},
{
"hook": "order-select",
"title": "SauBit — análise de segurança ao selecionar o pedido",
"id": "saubit-order-select"
}
]
}

Configure no EHR a base URL https://api.saubit.com.br/api/v1.

Invocação

POST /api/v1/cds-services/{service_id} (autenticação por API key, escopo interactions:check).

O corpo é um request CDS Hooks. Os medicamentos vêm de context.medications (um Bundle FHIR de MedicationRequest) ou context.draftOrders; condições, alergias, observações e o Patient chegam pelo prefetch.

curl -X POST https://api.saubit.com.br/api/v1/cds-services/saubit-medication-safety \
-H "X-API-Key: sm_live_..." \
-H "Content-Type: application/json" \
-d '{
"hookInstance": "d1577c69-...",
"hook": "medication-prescribe",
"context": {
"patientId": "Patient/123",
"medications": {
"resourceType": "Bundle",
"entry": [
{ "resource": { "resourceType": "MedicationRequest", "status": "active",
"medicationCodeableConcept": { "text": "Ibuprofeno" } } },
{ "resource": { "resourceType": "MedicationRequest", "status": "active",
"medicationCodeableConcept": { "text": "Naproxeno" } } }
]
}
},
"prefetch": {
"conditions": { "resourceType": "Bundle", "entry": [
{ "resource": { "resourceType": "Condition", "code": { "text": "Insuficiência renal" } } }
] }
}
}'

Resposta (cards)

{
"cards": [
{
"summary": "Interação GRAVE: Ibuprofeno + Naproxeno",
"indicator": "critical",
"detail": "Revisar a necessidade de dois AINEs; risco de efeitos aditivos.",
"source": { "label": "SauBit", "url": "https://saubit.com.br" }
}
]
}

Mapeamento de gravidade → indicator: CONTRAINDICADO/GRAVEcritical, MODERADOwarning, LEVEinfo. Quando não há achados, retorna um único card info tranquilizador. Sem medicamento analisável no contexto, retorna {"cards": []} (resposta válida do CDS Hooks).

Cada card traz um uuid (analysis_id|alert_id) para o feedback referenciar o alerta.

Feedback (fechando o ciclo)

POST /api/v1/cds-services/{service_id}/feedback (API key) — registre se o profissional aceitou ou sobrepôs o alerta. Alimenta a métrica "alertas que mudaram a conduta". O papel do ator vem da identidade (papel vinculado à API key), não de um header.

{
"feedback": [
{
"card": "a1b2c3|drug_disease-1a2b3c4d5e",
"outcome": "overridden",
"overrideReasons": [ { "reason": { "code": "benefit", "display": "Benefício supera o risco" } } ]
}
]
}

outcome: accepted (→ acknowledged) ou overridden. Resposta: { "recorded": n }.

A análise é a mesma do /interactions/check e da integração FHIR — mesmas regras clínicas e política fail-safe.