Compatibilidade
Decisões de contrato e diferenças em relação à MobileMed.
Tudo o que se comporta diferente da doc da MobileMed — também anotado na descrição de cada rota em /v1/doc:
| Tema | MobileMed | Themis |
|---|---|---|
| Corpo de sucesso das mutações | { "Comment was created successfully" } (JSON inválido) |
{ "message": "Comment was created successfully" } — a mesma frase, em message |
| Status | 0..11 | 0..11 com origem real; cancelados omitidos em mobilemed, -1 em legacy |
| Marcações clínicas 11/12 | listadas | classificação explícita BENIGN/MALIGNANT; não inferida |
GET /v1/results/signed/:code |
201 | mobilemed 201; legacy 200 |
GET /v1/results/getAllPais |
"201 OK", um objeto | mobilemed 201, legacy 200; array { id, nome, sigla }, IDs estáveis, Brasil=1 |
GET /v1/results/report-pdf-link/:laudo_hash |
{ "https://…pdf" } |
{ "url": "https://…" } (201 mobilemed, 200 legacy); 404 Report PDF not available sem PDF gravado |
grupoId (get-all-exams) |
filtra o grupo | mobilemed: ID externo da organização; outro grupo retorna []; legacy mantém comportamento anterior |
group: true + format: pdf |
"PDF apenas em base64" | PDF único em report.content; extensão deprecated groupedContent somente em legacy |
| Identificadores | IDs numéricos no JSON; code no path é String e laudo_hash é descrito como Integer |
mobilemed: inteiros positivos estáveis; legacy: UUIDs. code/laudo_hash aceitam decimal e alias UUID |
crm.code em GET /v1/exam |
número | mobilemed: número seguro ou null; lookup decimal + UF, sem escolher entre médicos ambíguos; legacy mantém formato anterior |
GET /v1/results/signed/:code |
corpo grande com digital_sign |
mobilemed: 13 campos completos e digital_sign honesto; legacy: seis campos históricos |
forMedic (Viewer) |
link distinto para o médico | leitura médica em /medico/estudo/:token com imagens antes do laudo e laudos finais HTML/texto/PDF; false mantém página pública |
| Anexos | jpg, png, gif, bmp, pdf | JPEG, PNG, GIF, BMP e PDF — originais preservados; GIF/BMP citados usam PNG derivada |
release: false |
revoga a liberação | persiste retenção por exame, audita e revoga links específicos de paciente; sessão e outros exames continuam |
send-email em exame sem paciente vinculado |
— | 400 { message: "Exam has no linked patient" } |
| Laudo externo em exame ainda sem imagens | — | assina mesmo assim; o status do item da worklist é mantido |
POST /v1/worklist sucesso |
201 {} |
mobilemed: 201 {} inclusive noop e RAW_ONLY; legacy: created 201/noop 200 com accession_number/status; conflitos de identidade continuam 409 |
POST /v1/worklist validação |
"InvalidWorklist" | 400 { "message": [ "...", "..." ] } (array de mensagens) |
reintegrateReports |
"reintegração manual" | zera o contador para credenciais inscritas em report.signed com destino efetivo |
Exame inexistente em POST …/mammography |
404 | mobilemed 404; legacy 400; { message: "Could not find any study" } |
| Exame sem estudo no grupo Viewer | — | 404 Could not find any study (aqui 404, não 400: o link ou existe ou ainda não) |
| Webhook | payload e auth negociados por cliente | eventos/destinos/templates por credencial; padrão {event,sentAt,study}; snapshot estável e autenticação atual |
| Path do receiveReport | :acessionNumber (typo) |
/v1/exam/:accessionNumber/report |
| Prioridade | 1..5 na descrição | 1..6 (Internado) |