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 porencounter.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 quatroObservationdo hemograma. - Uma internação finalizada gera dois registros: a entrada
(
period.start) e a alta (period.end, com as orientações dehospitalization.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:
EncounterIMPcomstatusin-progress. - Alergia de alto risco:
AllergyIntolerancecomcriticalityhigh. - Exame alterado: resultados do laudo mais recente fora da faixa, pela
interpretationou, na falta dela, peloreferenceRange.
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:
Encounterpela classe e pela origem. - Internações por causa: CID-10 da
Conditionligada à internação. - Casos de dengue:
ConditionA90/A91 registrada pelo CIMAN. - Espera por vaga: do
authoredOndo pedido de regulação até aTaskdo 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.