Pular para conteúdo

8 · Admissão e alta (Mais Saúde)

Sistema: Mais Saúde (Hospital) · Recursos: Encounter (class IMP) + ServiceRequest (atualização)

O hospital enxerga os pacientes encaminhados lendo as Task do SiGO e cruzando cada uma com o ServiceRequest apontado pelo focus. Na admissão, cria a internação e conclui o pedido de regulação; na alta, atualiza a mesma internação.

Leitura — encaminhados pela regulação

curl 'http://localhost:8080/fhir/Task?status=completed&_include=Task:focus&_include=Task:patient'

O _include duplo traz, no mesmo Bundle, o ServiceRequest (focus) e o Patient de cada Task. O Mais Saúde exibe apenas as tasks cujo ServiceRequest ainda está active — pedido completed significa paciente já admitido.

Gravação — admissão

Duas operações (nesta ordem):

1. POST /Encounter — a internação, class IMP, apontando o pedido em basedOn e o leito em location:

curl -X POST 'http://localhost:8080/fhir/Encounter' \
  -H 'Content-Type: application/fhir+json' \
  -d @internacao.json
internacao.json
{
  "resourceType": "Encounter",
  "status": "in-progress",
  "class": {
    "system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
    "code": "IMP",
    "display": "inpatient encounter"
  },
  "type": [{"text": "Internação hospitalar"}],
  "subject": {"reference": "Patient/42"},
  "basedOn": [{"reference": "ServiceRequest/15"}],
  "period": {"start": "2026-09-10T11:20:00-03:00"},
  "reasonCode": [
    {"text": "Dengue grave — plaquetopenia acentuada e sinais de alarme. Necessita leito de internação com urgência."}
  ],
  "serviceProvider": {"display": "Hospital Estadual Demo"},
  "location": [{"location": {"display": "Leito 12 — Enfermaria B"}, "status": "active"}],
  "meta": {
    "tag": [
      {
        "system": "https://demo-cbis.example/fhir/source-system",
        "code": "maissaude",
        "display": "Mais Saúde"
      }
    ]
  }
}

2. PUT /ServiceRequest/15 — conclui o pedido de regulação. O recurso é lido do servidor, o status muda para completed e o corpo inteiro é reenviado, preservando a meta.tag isus-aps do criador:

curl -X PUT 'http://localhost:8080/fhir/ServiceRequest/15' \
  -H 'Content-Type: application/fhir+json' \
  -d @pedido-concluido.json

Com o pedido completed, o paciente sai da lista de encaminhados do próprio hospital e da fila do SiGO.

Gravação — alta

A alta é um PUT na mesma internação: status vira finished, o period.end é preenchido e o destino da alta entra em hospitalization.dischargeDisposition (código home, com as orientações no text):

curl -X PUT 'http://localhost:8080/fhir/Encounter/23' \
  -H 'Content-Type: application/fhir+json' \
  -d @alta.json
alta.json (campos alterados)
{
  "resourceType": "Encounter",
  "id": "23",
  "status": "finished",
  "period": {
    "start": "2026-09-10T11:20:00-03:00",
    "end": "2026-09-12T09:00:00-03:00"
  },
  "hospitalization": {
    "dischargeDisposition": {
      "coding": [
        {
          "system": "http://terminology.hl7.org/CodeSystem/discharge-disposition",
          "code": "home",
          "display": "Home"
        }
      ],
      "text": "Alta melhorada — manter hidratação oral e retorno se sinais de alarme."
    }
  }
}

PUT reenvia o recurso completo

O exemplo mostra só os campos alterados; na prática o Mais Saúde lê o Encounter do servidor, altera esses campos e reenvia o recurso inteiro (class, subject, basedOn, location e a meta.tag seguem intactos).

Leitura — pacientes internados

curl 'http://localhost:8080/fhir/Encounter?class=IMP&status=in-progress&_include=Encounter:subject'