Integração FHIR R4
Envie uma prescrição como FHIR R4 Bundle e receba a análise de risco como um Bundle
FHIR de RiskAssessment + DetectedIssue. Ideal para sistemas hospitalares (EHR/HIS) que já
falam FHIR.
Copia um prompt pronto com fluxo de integração, payload e exemplos.
Endpoint
POST /api/v1/fhir/$check (autenticação por API key, escopo interactions:check).
| Query | Padrão | Descrição |
|---|---|---|
format | fhir | fhir retorna um Bundle FHIR; internal retorna a resposta nativa da SauBit (prescription_risk_level, clinical_alerts, …). |
Recursos aceitos no Bundle
| Recurso FHIR | Mapeado para |
|---|---|
MedicationRequest / MedicationStatement | Medicamento (nome, dose, frequência, via). Status stopped/cancelled/entered-in-error/draft é ignorado. |
Condition | Condição clínica do paciente. |
AllergyIntolerance | Alergia. |
Observation | Laboratório/contexto por código LOINC ou texto: potássio (2823-3), INR (6301-6), QTc, clearance/eGFR (33914-3), peso (29463-7), gestação (82810-3). |
Patient | Idade (de birthDate) e sexo (gender). |
Encounter | Unidade/cenário de cuidado (class/type) → governança por unidade (UTI/pediatria/oncologia). |
DiagnosticReport | Observations contidas → laboratórios; conclusionCode → condição. |
Practitioner | Aceito por completude; sem efeito na análise determinística. |
- O nome do medicamento vem de
medicationCodeableConcept.text, docoding[].display/codeou demedicationReference.display. - Dose:
dosageInstruction[0].doseAndRate[0].doseQuantity(g convertido para mg). - Frequência:
dosageInstruction[0].timing.repeat(ex.:frequency:1, period:8, periodUnit:"h"vira8/8h).
Exemplo
curl -X POST "https://api.saubit.com.br/api/v1/fhir/\$check" \
-H "X-API-Key: sm_live_..." \
-H "Content-Type: application/fhir+json" \
-d '{
"resourceType": "Bundle",
"type": "collection",
"entry": [
{ "resource": { "resourceType": "MedicationRequest", "status": "active",
"medicationCodeableConcept": { "text": "Ibuprofeno" } } },
{ "resource": { "resourceType": "MedicationRequest", "status": "active",
"medicationCodeableConcept": { "text": "Naproxeno" } } },
{ "resource": { "resourceType": "Condition", "code": { "text": "Insuficiência renal" } } }
]
}'
Resposta (FHIR)
{
"resourceType": "Bundle",
"type": "collection",
"total": 3,
"entry": [
{
"resource": {
"resourceType": "RiskAssessment",
"status": "final",
"method": { "text": "SauBit clinical engine" },
"prediction": [
{ "outcome": { "text": "Adverse drug event / prescription risk" },
"qualitativeRisk": { "text": "high" }, "probabilityDecimal": 0.82 }
]
}
},
{
"resource": {
"resourceType": "DetectedIssue",
"status": "preliminary",
"severity": "high",
"code": { "text": "drug_disease: AINE pode agravar a função renal" },
"detail": "Evitar o uso nesta condição…",
"implicated": [ { "display": "Ibuprofeno" } ]
}
}
]
}
Mapeamento de gravidade → DetectedIssue.severity: CONTRAINDICADO/GRAVE → high,
MODERADO → moderate, LEVE → low. O risco da prescrição vira RiskAssessment
(qualitativeRisk + probabilityDecimal = score/100).
Erros
Bundles inválidos retornam um OperationOutcome FHIR com issue[].severity = "error":
{ "resourceType": "OperationOutcome",
"issue": [ { "severity": "error", "code": "invalid",
"diagnostics": "Nenhum MedicationRequest/MedicationStatement com medicamento válido no Bundle." } ] }
A análise por trás é exatamente a mesma do
/interactions/check— incluindoclinical_alerts, governança e a política fail-safe.