Pular para conteúdo

9 · Linhas do tempo (Hub Saúde e Meu PEP)

Sistemas: Hub Saúde (portal da SES-GO) e Meu PEP (app do cidadão) · Somente leitura

Os dois sistemas provam o ponto central da demonstração: nenhum deles gravou nada, e mesmo assim reconstroem a jornada inteira apenas lendo o barramento. A diferença é a porta de entrada. O Hub lista os pacientes do servidor, e o Meu PEP parte do CPF do cidadão, com um acesso gov.br simulado.

Leitura — porta de entrada

# Hub Saúde: os 50 pacientes atualizados por último
curl 'http://localhost:8080/fhir/Patient?_sort=-_lastUpdated&_count=50'

# Hub Saúde: busca por nome (3 letras ou mais) ou por CPF/CNS completos
curl 'http://localhost:8080/fhir/Patient?name:contains=silva&_sort=-_lastUpdated&_count=50'
curl 'http://localhost:8080/fhir/Patient?identifier=00000000000'

# Meu PEP: o cidadão pelo próprio CPF
curl 'http://localhost:8080/fhir/Patient?identifier=https://demo-cbis.example/fhir/cpf|00000000000'

No Meu PEP o CPF vai no corpo de um POST /api/meus-dados ao backend, e não na URL, para não ficar registrado em logs de acesso.

Leitura — tudo o que o barramento guarda sobre o paciente

Uma única operação por paciente, $everything, seguindo as páginas next:

curl 'http://localhost:8080/fhir/Patient/42/$everything?_count=200'

O HAPI devolve o Patient e todos os recursos que o referenciam: Encounter, ServiceRequest, Observation, DiagnosticReport, Condition, DocumentReference, Task (pela referência Task.for), MedicationRequest, AllergyIntolerance, Procedure etc. Atrás de proxy, o link next vem com o host público. Por isso os backends seguem só a query dele, sobre o endereço interno do HAPI.

De recursos a registros

A leitura clínica acontece no navegador e é a mesma nos dois sistemas (modelo.js, cópias idênticas). Ela agrupa os recursos em registros:

  • Um atendimento (Encounter) reúne o que aponta para ele por encounter.reference. Por exemplo, a consulta do iSUS APS com o pedido de hemograma e o pedido de internação.
  • Um laudo (DiagnosticReport) reúne os resultados (result), as quatro Observation do hemograma.
  • Uma internação finalizada gera dois registros: a entrada (period.start) e a alta (period.end, com as orientações de hospitalization.dischargeDisposition).
  • O restante entra sozinho: a notificação do CIMAN (Condition + DocumentReference) e a vaga do SiGO (Task).

Assim, um documento clínico desmembrado em 16 recursos (como os do IPES) aparece como um registro, e não como 16 linhas soltas.

Registro exibido Recurso de origem
Consulta na Atenção Primária Encounter (class AMB)
Exame solicitado (Hub) ServiceRequest (categoria laboratorio)
Laudo de exame (Hub) / Resultado de exame (Meu PEP) DiagnosticReport + Observation
Diagnóstico e ficha de notificação Condition + DocumentReference
Internação solicitada à regulação (Hub) / Encaminhamento para internação (Meu PEP) ServiceRequest (categoria regulacao)
Vaga de internação disponibilizada Task
Internação hospitalar e alta hospitalar Encounter (class IMP)

Os alertas também saem dos recursos:

  • Internado: Encounter IMP com status in-progress.
  • Alergia de alto risco: AllergyIntolerance com criticality high.
  • Exame alterado: resultados do laudo mais recente fora da faixa, pela interpretation ou, na falta dela, pelo referenceRange.

De onde vem a "Origem" de cada registro

Do meta.tag gravado pelo sistema criador (ver Convenções). É ela que permite ao Hub marcar cada registro com a cor do sistema de origem e ao Meu PEP exibir "via Lab+", "via SiGO" etc., sem nenhum acoplamento entre os sistemas:

"meta": {
  "tag": [
    {
      "system": "https://demo-cbis.example/fhir/source-system",
      "code": "labmais",
      "display": "Lab+"
    }
  ]
}

No Hub, o botão FHIR de cada registro abre o JSON bruto do recurso na gaveta lateral. A aba Recursos FHIR lista tudo o que veio do $everything. Serve, por exemplo, para conferir que o result do laudo gravado via transaction aponta para as Observation com os ids definitivos reescritos pelo servidor.

Indicadores de saúde (Hub)

A página Indicadores do Hub (GET /api/indicadores?semanas=12|26|52) agrega os recursos do barramento por semana epidemiológica (domingo a sábado, no fuso de Brasília):

  • Atendimentos por tipo de serviço: Encounter pela classe e pela origem.
  • Internações por causa: CID-10 da Condition ligada à internação.
  • Casos de dengue: Condition A90/A91 registrada pelo CIMAN.
  • Espera por vaga: do authoredOn do pedido de regulação até a Task do SiGO.
  • Condições crônicas ativas.
  • Pirâmide etária: pessoas atendidas no período.

As buscas usadas são Encounter?date=ge…, Condition, Patient?_elements=gender,birthDate, Task e ServiceRequest?category=…|regulacao, e o resultado fica em cache por 30 s.