DocumentaçãoSuporteCosta Rica · Contato
Objetivo do serviço

Substituir o sistema nem sempre é a resposta. Deixá-lo mudo, também não.

Os sistemas que sustentam a operação clínica raramente podem ser desligados: têm anos de dados, processos amarrados, contratos vigentes e usuários que dependem de que funcionem amanhã às sete. Mas cada vez mais lhes é pedido participar de um intercâmbio para o qual nunca foram desenhados: expor um resultado, notificar uma autoridade, alimentar uma visão consolidada, conectar-se a uma rede. Uma camada FHIR resolve essa tensão traduzindo entre o que o sistema guarda e o que o ecossistema exige, sem tocar no seu banco de dados nem na sua operação. Bem desenhada, compra anos de margem. Mal desenhada, vira o próximo sistema legado: mais uma caixa que ninguém se atreve a abrir.

Ponto de partida

De onde se parte, concretamente

«Sistemas legados» não diz nada. O que define o trabalho é a forma real da origem e o que se encontra ao abri-la.

Banco de dados do prontuário

Acesso direto ao esquema relacional do sistema clínico, quase sempre somente leitura e contra uma réplica, para não competir com a operação.

Com o que se esbarra

Tabelas sem documentação, campos reaproveitados para duas coisas distintas, flags de status que só quem as escreveu entende e regras de negócio que vivem na aplicação, não no modelo.

HL7 v2 sobre MLLP

Mensageria de admissão, pedidos e resultados que já circula entre sistemas e pode ser aproveitada como fonte em vez de construir uma nova extração.

Com o que se esbarra

Segmentos Z próprios de cada instalação, campos opcionais usados de forma criativa e o fato de que uma mensagem descreve um evento, não o estado atual do paciente.

Arquivos planos e lotes

CSV, posicionais ou XML que o sistema já gera para relatórios ou para outros consumidores, processados em lote.

Com o que se esbarra

Janelas de geração fixas, entregas parciais ou repetidas, codificações de caracteres herdadas e nenhum mecanismo para saber o que mudou desde o arquivo anterior.

Serviços SOAP e APIs proprietárias

Interfaces que o fornecedor já expõe, pensadas para um consumidor específico e com um modelo de dados próprio.

Com o que se esbarra

Granularidade que não coincide com a do recurso FHIR, limites de paginação e concorrência não documentados e mudanças de contrato que chegam sem aviso.

PACS e DICOM

Estudos e laudos de imagem, em que o metadado vive no equipamento e no PACS antes de chegar ao registro clínico.

Com o que se esbarra

Identificadores de paciente diferentes dos do prontuário, laudos em texto livre dentro do estudo e volumes que tornam inviável materializar sem um critério claro.

Planilhas e catálogos manuais

Os catálogos que sustentam processos reais mesmo sem viver em nenhum sistema: serviços, profissionais, equivalências de códigos.

Com o que se esbarra

Sem controle de versão, sem dono formal e com a verdade repartida entre várias cópias que não coincidem entre si.

Modos de entrega

Traduzir ao vivo ou materializar: a decisão que define todo o resto

É a primeira decisão de arquitetura e a que determina o custo, a latência e a quem dói uma indisponibilidade. Quase nunca é uma escolha pura.

Ao vivo

A camada traduz cada consulta contra o sistema de origem, no momento.

Materializado

Os dados são transformados e carregados em um repositório FHIR que atende às consultas.

Frescor do dado
Ao vivoSempre o estado atual da origem. Não há janela de desatualização para explicar nem para defender clinicamente.
MaterializadoTão fresco quanto o último ciclo de carga. Essa janela precisa ser definida, comunicada e confirmada como clinicamente aceitável.
Carga sobre a origem
Ao vivoCada consulta externa bate no sistema que sustenta a operação. Um consumidor mal comportado vira um incidente clínico.
MaterializadoA extração é agendada em janelas de baixa demanda e as consultas externas não tocam a origem.
Acoplamento à disponibilidade
Ao vivoSe a origem cai ou entra em manutenção, a API FHIR cai junto: a janela de manutenção dela passa a ser a sua.
MaterializadoA camada continua respondendo mesmo com a origem parada. A indisponibilidade vira dado mais velho, não serviço fora do ar.
Consulta e desempenho
Ao vivoCada busca FHIR precisa ser traduzida em uma consulta que a origem resolva rápido. O que o esquema dela não indexa não pode ser oferecido.
MaterializadoIndexa-se conforme os parâmetros de busca que o guia exige, e não conforme o esquema da origem ficou há quinze anos.
Histórico e reprocessamento
Ao vivoVê-se o que a origem conserva. Se ela sobrescreve em vez de versionar, o histórico não existe e não há como reconstruí-lo.
MaterializadoÉ possível conservar versão a versão e reprocessar todo o histórico quando o mapeamento muda ou aparece um erro.
Escrita de volta
Ao vivoEscrever na origem exige respeitar as suas regras de negócio e validações, que quase nunca estão documentadas.
MaterializadoA escrita é aceita na camada e propagada de forma diferida, o que obriga a resolver conflitos e declarar qual versão prevalece.
Governança da cópia
Ao vivoNão há cópia: nada a decidir sobre quem é dono da duplicata, por quanto tempo se retém ou como se elimina.
MaterializadoHá uma cópia de dados clínicos, com tudo o que isso implica: dono, retenção, controle de acesso, auditoria e direito de eliminação.
Custo de operar
Ao vivoPouca infraestrutura, mas o desempenho depende de um sistema que não se controla e cada novo consumidor muda o perfil de carga.
MaterializadoInfraestrutura e operação próprias — armazenamento, monitoramento, reprocessamento — em troca de comportamento previsível.

O que se usa na prática

Os extremos puros são pouco frequentes. A maioria das camadas que operam bem são combinações deliberadas das duas.

  • Cache com validade declarada: traduz-se ao vivo, mas a resposta é conservada por um tempo definido e documentado para o consumidor.
  • Captura de mudanças por eventos: a origem avisa o que mudou — por mensageria, gatilhos ou CDC — e só isso é transformado.
  • Leitura ao vivo com escrita diferida: as consultas vão contra a origem e as escritas são enfileiradas e conciliadas, que é onde estão os conflitos.
  • Materialização parcial: materializa-se apenas o domínio que precisa — resultados, notificações — e o resto se traduz ao vivo.
  • Índice à parte para o que a origem não resolve: as buscas que o esquema dela não suporta são servidas por uma estrutura própria.
Metodologia

Como construímos a camada

Seis etapas. A primeira decide o que se pode extrair da origem sem arriscar a operação clínica.

  1. 01

    Análise da origem

    Antes de mapear qualquer coisa, entendemos o que o sistema realmente guarda e o que pode ser extraído sem colocar em risco o que já funciona.

    • Esquema, interfaces e mecanismos de acesso disponíveis
    • Perfilamento dos dados e da sua qualidade
    • Janelas operacionais e limites de carga
    • Regras de negócio que vivem na aplicação
  2. 02

    Modelo e mapeamento

    Decide-se qual recurso representa cada dado, qual perfil se aplica e de onde vem cada elemento — inclusive aquele que a origem não tem.

    • Mapeamento elemento a elemento
    • Terminologias e ConceptMap para os códigos locais
    • Estratégia de identificadores e referências
    • O que fazer com o dado ausente
  3. 03

    Desenho da camada

    Modo de entrega, alcance por domínio, segurança e contrato com os consumidores. Aqui se fixa o que depois é caro mudar.

    • Ao vivo, materializado ou híbrido
    • Autenticação, autorização e auditoria
    • CapabilityStatement-alvo
    • Política de versões e compatibilidade
  4. 04

    Construção e transformação

    Implementam-se as transformações, a exposição e o tratamento de erros, com os casos limite tratados como parte do escopo e não como surpresas.

    • Pipelines de extração e transformação
    • Endpoints e parâmetros de busca
    • Idempotência e retentativas
    • Registro do que não pôde ser transformado
  5. 05

    Validação de conformidade

    A camada é testada contra os perfis que precisa cumprir, com exemplos válidos e com exemplos que devem ser rejeitados.

    • Validação contra o guia aplicável
    • Testes de busca e paginação
    • Comparação contra a origem
    • Testes de carga em janela real
  6. 06

    Operação e observabilidade

    Uma camada sem monitoramento falha em silêncio e é descoberta quando alguém reclama de um dado que nunca chegou.

    • Métricas de latência, erro e frescor
    • Alertas sobre dados não transformados
    • Rastreabilidade da origem ao recurso
    • Procedimento diante de uma mudança da origem
Conformidade

Que seja FHIR de verdade, não JSON com nomes de FHIR

A diferença entre uma camada que passa numa demonstração e uma que sustenta um ecossistema está em detalhes que só aparecem quando um terceiro tenta consumi-la.

Validação contra perfis

O atalho habitual

Monta-se o JSON à mão até que «pareça certo» e testa-se apenas contra o cliente próprio.

O que sustenta

Cada recurso é validado contra o perfil do guia aplicável, em integração contínua, com exemplos que devem passar e exemplos que devem falhar.

Um CapabilityStatement honesto

O atalho habitual

Publica-se um CapabilityStatement copiado que declara operações e buscas que ninguém implementou.

O que sustenta

Declara-se exatamente o que a camada suporta. Um consumidor precisa conseguir planejar a integração lendo-o, sem descobrir na marra o que funciona.

Buscas que funcionam

O atalho habitual

Implementam-se dois ou três parâmetros e o resto é ignorado em silêncio, devolvendo tudo como se o filtro não existisse.

O que sustenta

Os parâmetros declarados são implementados, ou não são declarados. E a paginação é testada com os volumes reais da origem, não com dados de teste.

Identificadores, referências e códigos

O atalho habitual

Usam-se chaves internas como se fossem ids FHIR, referenciam-se recursos que a camada nunca expõe e enviam-se códigos locais sem dizer de onde vêm.

O que sustenta

Toda referência resolve ou é declarada lógica, os identificadores de negócio viajam em identifier com o seu system, e todo código leva o seu declarado.

Erros que dá para depurar

O atalho habitual

Diante de um problema devolve-se um 500 genérico ou, pior, um 200 com o recurso incompleto.

O que sustenta

Os erros são devolvidos como OperationOutcome, com severidade, código e uma localização que diga ao consumidor o que corrigir.

O dado que não existe

O atalho habitual

Preenche-se com um valor padrão, uma data inventada ou um código genérico para que o recurso valide.

O que sustenta

O ausente é representado como ausente. Quando o guia exige o elemento, usam-se os mecanismos previstos para dados desconhecidos e documenta-se a lacuna, em vez de fabricar o dado.

Resultados

O que sua organização recebe

A camada em operação e tudo o que é preciso para consumi-la, auditá-la e fazê-la evoluir sem nós.

Camada FHIR em operação

O serviço implantado, com os seus endpoints, a sua segurança e a sua configuração documentada.

Mapeamentos documentados

Correspondência elemento a elemento entre a origem e os recursos, com as decisões registradas.

ConceptMaps e catálogos

Equivalências declaradas entre os códigos locais e as terminologias padrão.

CapabilityStatement

O que a camada realmente suporta: recursos, operações e parâmetros de busca.

Suíte de validação

Exemplos válidos, exemplos que devem falhar e os testes que rodam a cada mudança.

Monitoramento e alertas

Métricas de latência, erro e frescor, com alertas sobre o que não pôde ser transformado.

Guia para consumidores

Como autenticar, o que buscar, o que esperar e quais limites a camada tem.

Rota de evolução

O que se materializa depois, quais domínios seguem e quando convém revisar o modo de entrega.

Experiência

Camadas FHIR em operação

Infraestrutura FHIR construída sobre sistemas e plataformas que já existiam e continuaram funcionando.

O que a camada resolveuRecepção e validação de notificações

Primeiro servidor FHIR nacional — EDUS/CCSS

A Meddyg implementou e colocou em produção o primeiro servidor FHIR que receberia as notificações de doenças de notificação compulsória, vacinas e resultados de laboratório do EDUS/CCSS e, posteriormente, de outros estabelecimentos de saúde.

O que a camada resolveuPonto de entrada para notificação regional

Infraestrutura receptora de ESAVI

Parte da equipe da Meddyg participou como consultora no desenho e na implementação da infraestrutura que receberia as notificações regionais de ESAVI, junto com o guia que define o seu formato.

O que a camada resolveuO padrão sobre transporte nacional

Transações FHIR sobre X-Road

Provas de conceito com a Agência Nacional de Governo Digital para validar transações de recursos FHIR sobre a plataforma nacional X-Road, dentro da demonstração funcional de interoperabilidade da Costa Rica.

O que a camada resolveuNão repúdio na camada de intercâmbio

Assinatura digital de recursos FHIR — BCCR

Assistência técnica para que as equipes do Banco Central da Costa Rica habilitassem a assinatura de recursos FHIR com o formato JAdES dentro do GAUDI, a sua plataforma de assinatura digital e selagem.

Os casos acima são infraestrutura FHIR construída sobre sistemas e plataformas que já operavam. O mesmo método — análise da origem, mapeamento, escolha do modo de entrega e validação de conformidade — é o que aplicamos a uma fachada sobre um prontuário ou um sistema departamental legado.

Perfil

Para quem é este serviço?

Todos compartilham a mesma restrição: o sistema de origem não pode ser parado nem substituído no prazo em que é preciso interoperar.

Hospitais com prontuário legado

Um sistema clínico que não será substituído e ao qual agora se pede expor dados, notificar ou conectar-se a uma rede.

Fornecedores de software de saúde

Produtos que precisam demonstrar capacidade FHIR a clientes e licitações sem refazer o seu banco de dados.

Laboratórios e centros de imagem

Resultados e laudos que precisam chegar a múltiplos receptores externos com a mesma estrutura e os mesmos códigos.

Instituições públicas

Sistemas de missão crítica que precisam participar de um ecossistema nacional sem abrir o seu banco nem parar a operação.

Redes de intercâmbio (HIE)

Ecossistemas que incorporam participantes cujos sistemas não falam o padrão e precisam de um padrão de conexão repetível.

Seguradoras

Intercâmbio com prestadores cujos sistemas expõem formatos próprios e evoluem no seu próprio ritmo.

Autodiagnóstico

Reconhece algum destes problemas?

Pedem-nos uma API FHIR e o nosso sistema não tem API nenhuma.
Substituir o prontuário está fora de questão, mas interoperar não.
Cada nova integração acaba virando uma exportação feita sob medida.
Expomos JSON que chamamos de FHIR e nenhum validador aceita.
Não sabemos se convém traduzir ao vivo ou carregar em um repositório.
A consulta externa bate no mesmo banco que a operação clínica usa.
Quando o sistema de origem cai, cai junto tudo o que expusemos.
Nosso fornecedor não expõe o que precisamos e isso não está no roadmap dele.
Um consumidor avisou de um dado mal mapeado e não soubemos desde quando estava assim.
Publicamos um CapabilityStatement que não coincide com o que a API faz.
Não temos como saber quais registros não conseguiram ser transformados.
Precisamos nos conectar a uma rede nacional e os nossos dados não saem do sistema.

Se alguma destas situações descreve a sua organização, uma camada FHIR pode resolver o intercâmbio sem colocar em risco o que já funciona.

Estão pedindo FHIR a um sistema que não o fala?

Uma camada bem desenhada deixa os sistemas atuais participando do ecossistema, sem tocar na sua operação nem hipotecar a rota de modernização.