5 · Resultado do exame (Bundle transaction)¶
Sistema: Lab+ (Laboratório) · Recursos: Observation ×4, DiagnosticReport, ServiceRequest (atualização)
O laudo do hemograma envolve seis operações: criar as 4 Observation
(uma por analito), criar o DiagnosticReport que as referencia e concluir o
ServiceRequest do pedido. O Lab+ envia tudo em um único POST com um
Bundle do tipo transaction: o servidor aplica as seis operações
atomicamente — ou tudo entra, ou nada entra.
Gravação — POST / (raiz) com Bundle transaction¶
curl -X POST 'http://localhost:8080/fhir' \
-H 'Content-Type: application/fhir+json' \
-d @resultado.json
Pontos-chave do bundle:
- Cada
Observationrecebe umfullUrltemporáriourn:uuid:…; - O
DiagnosticReport.resultreferencia essesurn:uuid— o servidor reescreve as referências para os ids definitivos (Observation/91, …); - O
basedOnaponta oServiceRequestjá existente, por referência literal; - A última entry é um
PUTque conclui o pedido (status: completed), preservando ameta.tagoriginal do iSUS APS (quem atualiza recurso alheio não troca a tag do criador).
{
"resourceType": "Bundle",
"type": "transaction",
"entry": [
{
"fullUrl": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000001",
"resource": {
"resourceType": "Observation",
"status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory", "display": "Laboratory"}]}],
"code": {
"coding": [{"system": "http://loinc.org", "code": "718-7", "display": "Hemoglobina"}],
"text": "Hemoglobina"
},
"subject": {"reference": "Patient/42"},
"effectiveDateTime": "2026-09-10T10:12:00-03:00",
"valueQuantity": {"value": 14.2, "unit": "g/dL", "system": "http://unitsofmeasure.org", "code": "g/dL"},
"referenceRange": [{
"low": {"value": 13.2, "unit": "g/dL", "system": "http://unitsofmeasure.org", "code": "g/dL"},
"high": {"value": 16.6, "unit": "g/dL", "system": "http://unitsofmeasure.org", "code": "g/dL"}
}],
"meta": {"tag": [{"system": "https://demo-cbis.example/fhir/source-system", "code": "labmais", "display": "Lab+"}]}
},
"request": {"method": "POST", "url": "Observation"}
},
{
"fullUrl": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000002",
"resource": {
"resourceType": "Observation",
"status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory", "display": "Laboratory"}]}],
"code": {
"coding": [{"system": "http://loinc.org", "code": "4544-3", "display": "Hematócrito"}],
"text": "Hematócrito"
},
"subject": {"reference": "Patient/42"},
"effectiveDateTime": "2026-09-10T10:12:00-03:00",
"valueQuantity": {"value": 48.0, "unit": "%", "system": "http://unitsofmeasure.org", "code": "%"},
"referenceRange": [{
"low": {"value": 38.8, "unit": "%", "system": "http://unitsofmeasure.org", "code": "%"},
"high": {"value": 50.0, "unit": "%", "system": "http://unitsofmeasure.org", "code": "%"}
}],
"meta": {"tag": [{"system": "https://demo-cbis.example/fhir/source-system", "code": "labmais", "display": "Lab+"}]}
},
"request": {"method": "POST", "url": "Observation"}
},
{
"fullUrl": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000003",
"resource": {
"resourceType": "Observation",
"status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory", "display": "Laboratory"}]}],
"code": {
"coding": [{"system": "http://loinc.org", "code": "6690-2", "display": "Leucócitos"}],
"text": "Leucócitos"
},
"subject": {"reference": "Patient/42"},
"effectiveDateTime": "2026-09-10T10:12:00-03:00",
"valueQuantity": {"value": 2.1, "unit": "10*3/uL", "system": "http://unitsofmeasure.org", "code": "10*3/uL"},
"referenceRange": [{
"low": {"value": 4.0, "unit": "10*3/uL", "system": "http://unitsofmeasure.org", "code": "10*3/uL"},
"high": {"value": 11.0, "unit": "10*3/uL", "system": "http://unitsofmeasure.org", "code": "10*3/uL"}
}],
"interpretation": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation", "code": "L", "display": "Low"}]}],
"meta": {"tag": [{"system": "https://demo-cbis.example/fhir/source-system", "code": "labmais", "display": "Lab+"}]}
},
"request": {"method": "POST", "url": "Observation"}
},
{
"fullUrl": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000004",
"resource": {
"resourceType": "Observation",
"status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/observation-category", "code": "laboratory", "display": "Laboratory"}]}],
"code": {
"coding": [{"system": "http://loinc.org", "code": "777-3", "display": "Plaquetas"}],
"text": "Plaquetas"
},
"subject": {"reference": "Patient/42"},
"effectiveDateTime": "2026-09-10T10:12:00-03:00",
"valueQuantity": {"value": 42.0, "unit": "10*3/uL", "system": "http://unitsofmeasure.org", "code": "10*3/uL"},
"referenceRange": [{
"low": {"value": 150.0, "unit": "10*3/uL", "system": "http://unitsofmeasure.org", "code": "10*3/uL"},
"high": {"value": 450.0, "unit": "10*3/uL", "system": "http://unitsofmeasure.org", "code": "10*3/uL"}
}],
"interpretation": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation", "code": "L", "display": "Low"}]}],
"meta": {"tag": [{"system": "https://demo-cbis.example/fhir/source-system", "code": "labmais", "display": "Lab+"}]}
},
"request": {"method": "POST", "url": "Observation"}
},
{
"fullUrl": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000005",
"resource": {
"resourceType": "DiagnosticReport",
"status": "final",
"category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/v2-0074", "code": "LAB", "display": "Laboratory"}]}],
"code": {
"coding": [{"system": "http://loinc.org", "code": "58410-2", "display": "Hemograma completo"}],
"text": "Hemograma completo"
},
"subject": {"reference": "Patient/42"},
"basedOn": [{"reference": "ServiceRequest/10"}],
"effectiveDateTime": "2026-09-10T10:12:00-03:00",
"issued": "2026-09-10T10:12:00-03:00",
"performer": [{"display": "Lab+ Análises Clínicas"}],
"result": [
{"reference": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000001", "display": "Hemoglobina"},
{"reference": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000002", "display": "Hematócrito"},
{"reference": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000003", "display": "Leucócitos"},
{"reference": "urn:uuid:c1f4a6d0-93b1-4f52-8a41-000000000004", "display": "Plaquetas"}
],
"conclusion": "Plaquetopenia acentuada, leucopenia e hemoconcentração — achados compatíveis com dengue grave.",
"meta": {"tag": [{"system": "https://demo-cbis.example/fhir/source-system", "code": "labmais", "display": "Lab+"}]}
},
"request": {"method": "POST", "url": "DiagnosticReport"}
},
{
"resource": {
"resourceType": "ServiceRequest",
"id": "10",
"status": "completed",
"intent": "order",
"category": [{"coding": [{"system": "https://demo-cbis.example/fhir/category", "code": "laboratorio", "display": "Exame laboratorial"}]}],
"code": {
"coding": [{"system": "http://loinc.org", "code": "58410-2", "display": "Hemograma completo"}],
"text": "Hemograma completo"
},
"subject": {"reference": "Patient/42"},
"encounter": {"reference": "Encounter/7"},
"authoredOn": "2026-09-10T09:35:00-03:00",
"requester": {"display": "UBS Vila Esperança — iSUS APS"},
"meta": {"tag": [{"system": "https://demo-cbis.example/fhir/source-system", "code": "isus-aps", "display": "iSUS APS"}]}
},
"request": {"method": "PUT", "url": "ServiceRequest/10"}
}
]
}
Resposta — Bundle transaction-response¶
O servidor responde uma entry por operação, na mesma ordem do envio
(exigência do FHIR R4), com o location de cada recurso:
{
"resourceType": "Bundle",
"type": "transaction-response",
"entry": [
{"response": {"status": "201 Created", "location": "Observation/91/_history/1"}},
{"response": {"status": "201 Created", "location": "Observation/92/_history/1"}},
{"response": {"status": "201 Created", "location": "Observation/93/_history/1"}},
{"response": {"status": "201 Created", "location": "Observation/94/_history/1"}},
{"response": {"status": "201 Created", "location": "DiagnosticReport/95/_history/1"}},
{"response": {"status": "200 OK", "location": "ServiceRequest/10/_history/2"}}
]
}
Ao gravar, o servidor reescreveu o result do laudo: quem ler
DiagnosticReport/95 encontrará {"reference": "Observation/91", "display":
"Hemoglobina"}, e assim por diante. Se qualquer entry falhar (validação,
conflito), nenhum recurso é gravado — o pedido segue active na worklist
e o laboratório pode tentar de novo.
Leitura — laudos emitidos¶
O painel "Laudos emitidos" do Lab+ filtra pela tag de origem:
curl 'http://localhost:8080/fhir/DiagnosticReport?_tag=https://demo-cbis.example/fhir/source-system|labmais&_include=DiagnosticReport:subject&_sort=-issued'
O iSUS APS enxerga o mesmo laudo pela busca por paciente (passo 3), casando
basedOn → ServiceRequest/10. A vigilância (CIMAN, passo 6) busca o laudo
mais recente do paciente.