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

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).

QueryPadrãoDescrição
formatfhirfhir retorna um Bundle FHIR; internal retorna a resposta nativa da SauBit (prescription_risk_level, clinical_alerts, …).

Recursos aceitos no Bundle

Recurso FHIRMapeado para
MedicationRequest / MedicationStatementMedicamento (nome, dose, frequência, via). Status stopped/cancelled/entered-in-error/draft é ignorado.
ConditionCondição clínica do paciente.
AllergyIntoleranceAlergia.
ObservationLaborató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).
PatientIdade (de birthDate) e sexo (gender).
EncounterUnidade/cenário de cuidado (class/type) → governança por unidade (UTI/pediatria/oncologia).
DiagnosticReportObservations contidas → laboratórios; conclusionCode → condição.
PractitionerAceito por completude; sem efeito na análise determinística.
  • O nome do medicamento vem de medicationCodeableConcept.text, do coding[].display/code ou de medicationReference.display.
  • Dose: dosageInstruction[0].doseAndRate[0].doseQuantity (g convertido para mg).
  • Frequência: dosageInstruction[0].timing.repeat (ex.: frequency:1, period:8, periodUnit:"h" vira 8/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/GRAVEhigh, MODERADOmoderate, LEVElow. 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 — incluindo clinical_alerts, governança e a política fail-safe.