POST /api/v1/interactions/check
Envie uma prescricao com medicamentos e, opcionalmente, contexto clinico do paciente para receber uma analise estruturada com contrato estavel, rastreabilidade de fontes e politica fail-safe.
Sempre que possivel, preencha patient_record.conditions e patient_record.current_medications. Isso melhora o contexto e reduz risco de falso negativo.
Cabeçalhos
X-API-Key: <sua-chave>Content-Type: application/json- Scope exigido:
interactions:check
Body
{
"medications": [
{"name": "Warfarina", "dose_mg": 5},
{"name": "Omeprazol", "dose_mg": 20}
],
"patient_record": {
"patient_reference": "PRONT-12345",
"current_medications": [
{"name": "Dipirona", "dose_mg": 500}
],
"conditions": ["diabetes", "hipertensao"],
"notes": "Opcional. Evite PII (CPF/telefone/email)."
},
"language": "pt-BR"
}
Dose com decimais (ex.: 2,5 mg)
O campo dose_mg aceita:
- número (
2.5) - string com vírgula ou ponto (
\"2,5\",\"2.5\",\"2,5mg\")
Contrato Atual
Campos principais da resposta:
analysis_status:complete | partial | failedprescription_risk_level:LOW | MODERATE | HIGH | CRITICAL | UNKNOWNprescription_score:0-100ounullconfidence_score:0.0-1.0confidence_reason: resumo textual do grau de confiancaclinical_relevance:high | moderate | low | unknownrecommendation_level:avoid_combination | monitor | adjust_dose | consult_professional | no_known_interaction | unknownnormalized_medications: medicamentos considerados na analiseinteractions: lista estruturada de interacoes encontradasunverified_pairs: pares nao verificados por limite, timeout ou falhasource_coverage: status por fonte consultada ou puladaanalysis_metadata: metadados de versao, cache e geracaowarnings: lista de avisos importantessafety_notice: aviso de uso clinico seguro
Regras De Status
complete: todos os pares relevantes foram verificados e nao houve pendencias de fonte obrigatoria.partial: houve limitacao operacional, pendencia de fonte ouunverified_pairs.failed: a analise nao pode ser concluida com seguranca.
Resposta 200
{
"analysis_id": "uuid",
"timestamp": "2026-04-28T12:34:56Z",
"analysis_status": "partial",
"prescription_risk_level": "UNKNOWN",
"prescription_score": null,
"confidence_score": 0.6,
"confidence_reason": "Analise parcial baseada na base local; fontes externas primarias nao foram consultadas.",
"clinical_relevance": "moderate",
"recommendation_level": "monitor",
"summary": "Analise parcial baseada na base local. Fontes externas primarias nao foram consultadas; revisao profissional recomendada.",
"normalized_medications": [
{
"original_name": "Warfarina",
"normalized_name": null,
"active_ingredient": null,
"source": "input",
"confidence": 1.0,
"warnings": []
},
{
"original_name": "Omeprazol",
"normalized_name": null,
"active_ingredient": null,
"source": "input",
"confidence": 1.0,
"warnings": []
}
],
"interactions": [
{
"drug_pair": ["Warfarina", "Omeprazol"],
"severity": "MODERADO",
"score": 62,
"recommendation": "Requer avaliacao conforme contexto clinico. Considerar monitoramento e consulta a protocolo institucional.",
"summary": "Mecanismo nao detalhado na base local.",
"evidence": [
{
"source_name": "DDInter",
"source": "ddinter",
"url": null,
"retrieved_at": null,
"title": "DDInter Warfarina x Omeprazol (MODERADO)",
"setid": null,
"section": null,
"pmid": null,
"doi": null
}
]
}
],
"unverified_pairs": [],
"source_coverage": {
"ddinter": {
"status": "success",
"queried": true,
"role": "primary",
"items_found": 1,
"pairs_checked": 1,
"pairs_with_evidence": 1,
"pairs_failed": 0,
"latency_ms": 42.1,
"error": null,
"reason": null,
"dataset_version": "unknown",
"retrieved_at": "2026-04-28T12:34:56Z"
},
"openfda": {
"status": "skipped",
"queried": false,
"role": "primary",
"reason": "not_implemented"
},
"dailymed": {
"status": "skipped",
"queried": false,
"role": "primary",
"reason": "not_implemented"
},
"pubmed": {
"status": "skipped",
"queried": false,
"role": "supporting",
"reason": "not_implemented"
},
"crfmg": {
"status": "skipped",
"queried": false,
"role": "supporting",
"reason": "not_implemented"
},
"cmed_anvisa": {
"status": "skipped",
"queried": false,
"role": "normalization",
"reason": "not_implemented"
}
},
"analysis_metadata": {
"algorithm_version": "2026.05.07",
"prompt_version": "2026.05.07",
"model_name": "clinical_engine_v1",
"generated_at": "2026-04-28T12:34:56Z",
"cache_hit": false,
"source_versions": {
"clinical_engine_version": "2026.05.07",
"rules_version": "2026.05.07",
"drug_database_version": "unknown",
"evidence_index_version": "2026.05.07",
"prompt_version": "2026.05.07",
"model_version": "unknown"
}
},
"warnings": [
"Fontes externas primarias (openfda, dailymed) nao foram consultadas nesta execucao."
],
"safety_notice": "Esta analise e apenas informativa e nao substitui julgamento clinico, avaliacao do paciente, exames ou consulta a especialista. Em caso de duvida ou risco potencial, consulte um profissional habilitado. A analise foi limitada e requer revisao humana.",
"cached": false,
"processing_time_ms": 842.3
}
Quando unverified_pairs aparece
- Limite de medicamentos excedido
- Limite de pares excedido
- Timeout de fonte
- Falha tecnica de fonte
- Falha de normalizacao
Sempre que houver qualquer item em unverified_pairs, o status da resposta deve ser pelo menos partial.
Como Funciona
- O endpoint usa um pipeline centralizado para REST e MCP.
- A resposta e fail-safe: falha tecnica nunca deve degradar para risco artificialmente baixo.
- A cobertura por fonte fica explicita em
source_coverage. - Chamadas repetidas podem retornar
cached: true.
Headers De Diagnostico
X-SafeMed-Cache:HIT | MISSX-SafeMed-Agent-Mode:clinical_engine_v1X-SafeMed-Agent-Run:0 | 1X-SafeMed-Processing-Time-MsServer-Timing
Regras Comerciais
- Cada chamada gera 1 transacao faturavel.
- A cobranca usa
transaction_fee_brlda organizacao.
Cache Inteligente
Quando a mesma combinacao clinica for enviada, a API pode retornar cached: true e evitar novo custo de processamento.
Campos dinamicos como patient_record.patient_reference e patient_record.notes nao entram na chave principal de cache. O cache prioriza conteudo clinico, medicamentos e versoes do algoritmo/configuracao.