API EHRPoster - Envio de informações clínicas em FHIR R4
https://projectcore.atlassian.net/wiki/spaces/ESP/pages/1829634049
A API EHRPoster é usada para enviar informações clínicas para a plataforma em formato FHIR. Essa API possui uma única operação (POST), através da qual as informações são enviadas, encapsuladas em um recurso Bundle, do tipo “transcation” (“type” = “transaction”). A mensagem deve ser codificada em representação JSON (Content-Type application/fhir+json; Accept application/fhir+json).
*Para suporte em formato XML (Content-Type application/fhir+xml; Accept application/fhir+json), favor solicitar a liberação antes de utilizar a API.
A API usa autenticação OAuth2. Credenciais diferentes são utilizadas nos ambientes de QA (quality assurance) - usado para testes prévios e homologação da integração - e PRD (Produção) - usado para integrações testadas e aprovadas para uso produtivo. Para obter uma credencial de acesso à API entre em contato com o administrador da API.

A API suporta diferentes tipos de Bundle, cada tipo associado a um caso de uso. Cada Bundle suportado pela API é especificado em um perfil FHIR, que possui uma “url” que o identifica. Atualmente, a API suporta os seguintes perfis:
| Caso de Uso | Descrição | URL do perfil |
| Sumários de eventos clínicos | Usado para representação de informações clínicas geradas em contatos assistenciais ambulatorias (Registro de Atendimento Clínicio), internações (Sumário de Alta) ou de pronto atendimento (Sumário de Pronto Atendimento). | http://ehrrunner.com/fhir/StructureDefinition/EventSummary-1.0 |
| Resultados de exames laboratoriais | Usado para representação de resultados de exames laboratorias. | http://ehrrunner.com/fhir/StructureDefinition/Laboratory-1.0 |
| Resultados de exames de imagens | Usados para representação de resultados de exames de imagem. | http://ehrrunner.com/fhir/StructureDefinition/ImageDiagnosticReport-1.0 |
Cada Bundle deve sempre conter um recurso FHIR principal (obrigatório), acompanhado, conforme o caso, de recursos FHIR complementares (obrigatórios e opcionais - conforme cardinalidade indicada para cada caso de uso), todos registrados na plataforma por requisições do tipo “POST”. Esses recursos são indicados na tabela abaixo.
| Caso de Uso | URL do perfil | Recurso principal | Recursos complementares (obrigatórios e opcionais) |
| Sumário de Eventos Clínico | http://ehrrunner.com/fhir/StructureDefinition/EventSummary-1.0 |
Encounter (1..1) | Condition (0..) Procedure (0..) ServiceRequest (0..) MedicationRequest (0..) AllergyIntolerance (0..) Observation (0..) |
| Resultados de Exames Laboratorial | http://ehrrunner.com/fhir/StructureDefinition/Laboratory-1.0 |
DiagnosticReport (1..1) | ServiceRequest (0..*) Binary (1..1) |
| Resultado de Exames de Imagem | http://ehrrunner.com/fhir/StructureDefinition/ImageStudyReport-1.0 |
DiagnosticReport (1..1) | ServiceRequest (0..*) Binary (1..1) |
O recurso FHIR principal deve possuir ainda:
- um identificador (“identifier”) com informações sobre a identificação do registro no sistema de origem;
- uma referência para o paciente, sujeito das informações clínicas.
Nos exemplos apresentados nessa documentação, as propriedades indicadas entre chaves duplas (formato Postman) {{ }} representam variáveis que devem ser substituídas pelos valores adequados, conforme o caso.
A seguir, é apresentado um exemplo de como o recurso Bundle é formado.
{
"resourceType": "Bundle",
"meta": {
"profile": ["http://ehrrunner.com/fhir/StructureDefinition/Laboratory-1.0"]
},
"type": "transaction",
"entry": [
// Entry do recurso principal
{
"fullUrl": "urn:uuid:report-1",
"resource": {
"resourceType": "DiagnosticReport",
(...)
"identifier": [
{
"system": "urn:oid:{{oidSistemaOrigem}}",
"value": "{{recordId}}"
}
]
(...)
"subject": {
"reference": "Patient?identifier=urn:oid:{{patientIdOid}}%7C{{patientId}}"
},
(...)
},
"request": {
"method": "POST",
"url": "DiagnosticReport"
}
}
// entry de recursos complementares
(...)
]
}
As variáveis neste exemplo são:
| Variável | Significado | Obervações |
oidSistemaOrigem |
Identificador único (oid) do sistema (instância) que envia a informação | Esse valor é fornecido pela governaça da plataforma. O valor é associado à credencial de segurança gerada para o parceiro que utiliza o serviço, sendo que recursos enviados contento valores não registrados pela governança são rejeitados pela API. |
recordId |
Identificador local do registro que está sendo integrado | Idealmente, esse valor deve conter o id único (ex. chave primária da tabela) no sistema de origem. É utilizado para rastreabilidade das integrações, correção de erros de integração ou substituição das informações enviadas por versões mais novas (atualizações) dos recursos. Para resultados de exames, sugere-se que esse valor contenha o número da OS (LIS ou RIS) |
patientIdOid |
Identificador (oid) do sistema de nomes utilizado para identificar o paciente | São suportados*: Identificador OID CPF 2.16.840.1.113883.13.237 CNS 2.16.840.1.113883.13.236 |
patientId |
Identificador do paciente | CPF ou CNS, conforme o patientIdOid disponível. |
*para suporte a outros NamingSystem, favor contatar o administrador da API.
Sumário de Evento Clínico
A definição formal do perfil esta disponível em: (disponível em breve).
Resultado de Exame Laboratorial
Resultados de exames de imagens são integrados na plataforma usando este perfil. O perfil deve ser utilizado para envio de um único resultado de exame, por vez. Para envio de múltiplos resultados de exames, é necessário utilizar múltiplas chamadas na API EHRPoster.
Esse perfil define um Bundle que contém:
- (uma entry com) um recurso DiagnosticReport (obrigatório): utilizado para representar o “resultado de exame”;
- (uma entry com) um recurso ServiceRequest (opcional): utilizado para representar o “pedido de exame” que gerou o resultado;
- (uma ou mais entries com) recurso(s) Binary, utilizado(s) para representar os laudos formatados (presentedForm) que compõem o resultado de exame. Laudos formatados devem ser enviados em formato PDF ou HTML.
O exemplo abaixo apresenta (partes de) um Bundle com três entries/recursos: DiagnosticReport (resultado de exame); ServiceRequest (pedido de exame) e Binary (laudo formatado). Payload de exemplo completo disponível neste arquivo Postman (anexo).
{
"resourceType": "Bundle",
"meta": {
"profile": ["http://ehrrunner.com/fhir/StructureDefinition/Laboratory-1.0"]
},
"type": "transaction",
"entry": [
{
"fullUrl": "urn:uuid:report-1",
"resource": {
"resourceType" : "DiagnosticReport",
"meta": {
"profile": ["http://ehrrunner.com/fhir/StructureDefinition/ResultadoExameLaboratorial-1.0"]
},
"contained": [
{
"resourceType": "Organization",
"id": "laboratorio",
"identifier": [
{
"system": "urn:oid:2.16.840.1.113883.13.36",
"value": "{{cnesLaboratorio}}"
},
{
"system": "urn:oid:2.16.76.1.3.3",
"value": "{{cnpjLaboratorio}}"
}
],
"name": "{{nomeLaboratorio}}"
}
],
"identifier" : [{
"system": "urn:oid:{{oidSistemaOrigem}}",
"value": "{{recordId}}"
}],
"basedOn" : [{
"reference": "urn:uuid:request-1"
}],
"status" : "final",
"category" : [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v2-0074",
"code": "LAB",
"display": "Laboratory"
}]
}],
"code" : {
"text": "{{listaMneumonicos}}"
},
"subject" : {
"reference": "Patient?identifier=urn:oid:{{patientIdOid}}%7C{{patientId}}"
},
"issued" : "{{dataHoraResultado}}",
"performer" : [
{ "reference": "#laboratorio" }
],
"presentedForm" : [
{
"contentType": "application/pdf",
"url": "urn:uuid:binary-1"
}
]
},
"request": {
"method": "POST",
"url": "DiagnosticReport"
}
},
{
"fullUrl": "urn:uuid:request-1",
"resource": {
"resourceType" : "ServiceRequest",
"meta": {
"profile": ["http://ehrrunner.com/fhir/StructureDefinition/PedidoExameLaboratorial-1.0"],
"versionId": "update"
},
"contained": [
{
"resourceType": "Practitioner",
"id": "solicitante",
"identifier": [
{
"extension": [
{
"url": "http://ehrrunner.com/fhir/StructureDefinition/BRJurisdicaoOrgaoEmissor-1.0",
"valueCodeableConcept": {
"coding": [
{
"system": "http://ehrrunner.com/fhir/CodeSystem/BRUnidadeFederacao-1.0",
"code": "{{ufCrmSolicitante}}"
}
]
}
}
],
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "MD"
}
]
},
"value": "{{crmSolicitante}}",
"assigner": {
"display": "CONSELHO REGIONAL DE MEDICINA (CRM)"
}
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "TAX"
}
]
},
"value": "{{cpfSolicitante}}"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "HC"
}
]
},
"value": "{{cnsSolicitante}}"
}
],
"name": [
{ "text": "{{nomeSolicitante}}" }
]
}
],
"requisition" : {
"system": "urn:oid:{{oidSistemaOrigem}}",
"value": "{{numeroOS}}"
},
"status": "completed",
"intent": "order",
"category" : [{
"coding": [{
"system": "http://snomed.info/sct",
"code": "108252007",
"display": "Laboratory procedure"
}]
}],
"code" : {
"text": "{{listaMneumonicos}}"
},
"orderDetail": [
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADT1}}",
"display": "{{descricaoPrescricaoSADT1}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADT1}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADT1}}"
}
]
},
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADT2}}",
"display": "{{descricaoPrescricaoSADT2}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADT2}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADT2}}"
}
]
},
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADT3}}",
"display": "{{descricaoPrescricaoSADT3}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADT3}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADT3}}"
}
]
},
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADT4}}",
"display": "{{descricaoPrescricaoSADT4}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADT4}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADT4}}"
}
]
},
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADT5}}",
"display": "{{descricaoPrescricaoSADT5}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADT5}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADT5}}"
}
]
},
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADT6}}",
"display": "{{descricaoPrescricaoSADT6}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADT6}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADT6}}"
}
]
},
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADT7}}",
"display": "{{descricaoPrescricaoSADT7}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADT7}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADT7}}"
}
]
},
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADT8}}",
"display": "{{descricaoPrescricaoSADT8}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADT8}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADT8}}"
}
]
}
],
"subject": {
"reference": "Patient?identifier=urn:oid:{{oidIdentificador}}%7C{{identificador}}"
},
"encounter": {
"type": "Encounter",
"identifier": {
"system": "urn:oid:{{oidPEPOrigem}}",
"code": "{{idConsulta}}"
}
},
"authoredOn": "{{dataSolicitacao}}",
"requester": {
"reference": "#practitioner-1"
}
},
"request": {
"method": "POST",
"url": "ServiceRequest"
}
},
{
"fullUrl": "urn:uuid:binary-1",
"resource": {
"resourceType" : "Binary",
"contentType": "application/pdf",
"data": "{{base64ResultadoExameLaboratorial}}"
},
"request": {
"method": "POST",
"url": "Binary"
}
}
]
}
Para utilização do perfil, as seguintes informações são suportadas no processo de integração.
No recurso DiagnosticReport:
| Metadado | Ocorrência | Localização | Descrição | Observações | Exemplo |
| Versão | 0..1 | $,meta.versionId | Versão do laudo. Obrigatório, se o recurso representar uma correção (atualização) de uma versão anterior do mesmo resultado de exame (laudo) - identificado pelo identificador único do recurso. | Para que a atualização seja realizada, é necessário que a data de emissão ($.issued) seja maior que a data de emissão informada anteriormente, para o mesmo resultado de exame. A plataforma faz um controle de versão prórpio das instâncias armazenadas, então o valor informado é usado apenas para realizar uma transação de atualização, não sendo persistido pela plataforma. Caso seja encontrato um recurso com o mesmo identificador e data de emissão anterior a data informada em $.issued, o recurso será atualizado, ao invés de se criar um novo recurso. | java<br>“versionId”: “update”<br> |
| Laboratório | 1..1 | $.contained | Organização onde o exame foi realizado | Idealmente, fornecer identificadores para o laboratório: cnes ou cnpj do laboratório. Caso presente, deve ser referenciado (referência literal) em $.performer. |
java<br>{<br> "resourceType": "Organization",<br> "id": "laboratorio",<br> "identifier": [<br> {<br> "system": "urn:oid:2.16.840.1.113883.13.36",<br> "value": "{{cnesLaboratorio}}"<br> },<br> {<br> "system": "urn:oid:2.16.76.1.3.3",<br> "value": "{{cnpjLaboratorio}}"<br> } <br> ],<br> "name": "{{nomeLaboratorio}}"<br>}<br> |
| Pedido de exame | 0..1 | $.basedOn | Referênca para o pedido de exame (se houve). | É possível usar uma referência literal para o ServiceRequest que representa o pedido de exames, se: (1) este estiver contido no Bundle (vide exemplo) ou se essa refência for conhecida na plataforma (ServiceRequest/{resourceId}) | java<br>{ <br> "reference": "urn:uuid:request-1"<br>}<br> |
| Categoria do exame | 0..1 | $.category | Categoria do exame (ex. Laboratório etc.) | Preferencialmente codificado com https://hl7.org/fhir/valueset-diagnostic-service-sections.html | java<br>{<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0074",<br> "code": "LAB",<br> "display": "Laboratory"<br> }<br> ]<br>}<br> |
| Descrição do exame realizado | 1..1 | $.code | Informação descritiva do exame que foi realizado. | Tipicamente, aqui só será representada a informação descritiva, utilizada para visualização do tipo de exame na lista indexada de exames de Laboratório. O conjunto completo de códigos do exame (clínicos e de faturamento) é representado, com detalhes, no pedido de exame (ServiceRequest). Recomenda-se: (1) Caso seja um laudo (arquivo) contendo mais de um resultado de exame - utilizar a lista de mneumonicos (locais) que identificam os exames contidos no laudo. (2) Caso seja um único exame/paniel, pode-se utilizar o nome do exame/painel. |
java<br>{<br> "text": "{{listaMneumonicos}}"<br>}<br> |
| Data de emissão | 1..1 | $.issued | Data de emissão do resultado de exame (laudo). | Formato FHIR (ISO) | java<br>“issued”: “2022-01-01T08:22:02-03:00”<br> |
| Laudo (s) | 1..n | $.presentedForm | Referência(s) para o(s) recurso(s) Binary contendo o(s) laudo(s formatado(s) | Apenas formatos HTML (“contentType”: “text/html”) e PDF (“contentType”: “appplication/pdf”). | java<br>[{ <br> "contentType": "application/pdf",<br> "url": "urn:uuid:binary-1"<br>}]<br> |
No recurso ServiceRequest:
| Metadado | Ocorrência | Localização | Descrição | Observações | Exemplo |
| Versão | 0..1 | $,meta.versionId | Versão do pedido de exame. Obrigatório, se o recurso representar uma correção (atualização) de uma versão anterior do pedido de exame associado ao resultado de exame (laudo) - identificado pelo identificador único do recurso. | Para que a atualização seja realizada, é necessário que a data de solicitação do exame ($.authoredOn) seja maior que a data de solicitação do exame informada anteriormente, para o mesmo resultado de exame. A plataforma faz um controle de versão prórpio das instâncias armazenadas, então o valor informado é usado apenas para realizar uma transação de atualização, não sendo persistido pela plataforma. Caso seja encontrato um recurso com o mesmo identificador e data de solicitação anterior a data informada em $.authoredOn, o recurso será atualizado, ao invés de se criar um novo recurso. | java<br>“versionId”: “update”<br> |
| Solicitante | 1..1 | $.contained | Identificação do profissional que solicitou o exame | Idealmente, fornecer identificadores para o registro profissional (tipoConselho, ufEmissor, numeroRegistro) e cpf ou cns do profissional. Se estiver presente, deverá ser referenciado no $.requester. | java<br>{<br> "resourceType": "Practitioner",<br> "id": "solicitante",<br> "identifier": [<br> {<br> "extension": [<br> {<br> "url": "http://ehrrunner.com/fhir/StructureDefinition/BRJurisdicaoOrgaoEmissor-1.0",<br> "valueCodeableConcept": {<br> "coding": [<br> {<br> "system": "http://ehrrunner.com/fhir/CodeSystem/BRUnidadeFederacao-1.0",<br> "code": "{{ufCrmSolicitante}}"<br> }<br> ]<br> }<br> }<br> ],<br> "type": {<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0203",<br> "code": "MD"<br> }<br> ]<br> },<br> "value": "{{crmSolicitante}}",<br> "assigner": {<br> "display": "CONSELHO REGIONAL DE MEDICINA (CRM)"<br> }<br> },<br> {<br> "type": {<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0203",<br> "code": "TAX"<br> }<br> ]<br> },<br> "value": "{{cpfSolicitante}}"<br> },<br> {<br> "type": {<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0203",<br> "code": "TAX"<br> }<br> ]<br> },<br> "value": "{{cpfSolicitante}}"<br> }<br> ],<br> "name": [<br> {<br> "text": "{{nomeSolicitante}}"<br> }<br> ]<br>}<br> |
| Ordem de Serviço | 0..1 | $.requisition | Número(s) da ordem de serviço | Identificadores usados para autorização, faturamento e/ou conciliação entre pedido e resultado de exame. | java<br>{<br> "system": "urn:oid:{{oidSistemaOrigem}}",<br> "value": "{{numeroOS}}"<br>}<br> |
| Descrição do exame realizado | 1..1 | $.code | Informação descritiva do exame que foi realizado. | Tipicamente, aqui só será representada a informação descritiva, utilizada para visualização do tipo de exame na lista indexada de exames de Laboratório. O conjunto completo de códigos do exame (clínicos e de faturamento) é representado, em $.orderDetail. Recomenda-se: (1) Caso seja um laudo (arquivo) contendo mais de um resultado de exame - utilizar a lista de mneumonicos (locais) que identificam os exames contidos no laudo. (2) Caso seja um único exame/paniel, pode-se utilizar o nome do exame/painel. |
java<br>{<br> "text": "{{listaMneumonicos}}"<br>}<br> |
| Detalhes (códigos) do(s) exame(s) | 0..n | $.orderDetail | Código do exame realizado. Para cada exame incluído no pedido de exame, é desejável fornecer o código clínico (S-RES ou LIS - tipicamente um mneumônico) e o código de faturamente relacionado (SIGTAP ou TUSS), se disponíveis. | java<br>{<br> "coding": [<br> {<br> "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",<br> "code": "{{codigoPrescricaoSADT1}}",<br> "display": "{{descricaoPrescricaoSADT1}}"<br> },<br> {<br> "system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",<br> "code": "{{codigoSistemaOrigemPrescricaoSADT1}}",<br> "display": "{{descricaoSistemaOrigemPrescricaoSADT1}}"<br> }<br> ]}<br>} <br> |
|
| Contato assistencial | 0..1 | $.encounter | Identificador único do contato assistencial no sistema de origem onde foi registrado o pedido de exame (se disponível). | Utilizar o número de atendimento no Prontuário Eletrônico do atendimento, quando disponível. | java<br>{<br> "type": "Encounter",<br> "identifier": {<br> "system": "urn:oid:{{oidPEPOrigem}}",<br> "code": "{{idConsulta}}"<br> }<br>}<br> |
| Data da solicitação | 1..1 | $.authoredOn | Data da solicitação do exame. | Formato FHIR (ISO) | java<br>“authoredOn”: “2022-01-01T07:12:32-03:00”<br> |
No recurso Binary:
Nota: Para laudos formatados com representação binária (base64) com tamanho superior a 128KBytes, não é possível utilizar o formato XML. Deve-se usar, portanto, apenas o formato JSON, nestes casos.
| Metadado | Ocorrência | Localização | Descrição | Observações | Exemplo |
| Tipo de conteúdo | 1..1 | $.contentType | Tipo (formato) de conteúdo para o laudo formatado | Mime type (text/html ou application/pdf) | java<br>"contentType": "application/pdf"<br> |
| Laudo formatado , | 1..1 | $.data | Laudo formatado, em formato binário | (codificado em Base64) | java<br>"data": "{{base64ResultadoExameLaboratorial}}"<br> |
Resultado de Exame de Imagem
Resultados de exames de imagens são integrados na plataforma usando este perfil. O perfil deve ser utilizado para envio de um único resultado de exame, por vez. Para envio de múltiplos resultados de exames, é necessário utilizar múltiplas chamadas na API EHR.
Esse perfil define um Bundle que contém:
- (uma entry com) um recurso DiagnosticReport (obrigatório): utilizado para representar o “resultado de exame”;
- (uma entry com) um recurso ServiceRequest (opcional): utilizado para representar o “pedido de exame” que gerou o resultado;
- (uma ou mais entries com) recurso(s) Binary, utilizado(s) para representar os laudos formatados (presentedForm) que compõem o resultado de exame. Laudos formatados devem ser enviados em formato PDF ou HTML.
O exemplo abaixo apresenta (partes de) um Bundle com três entries/recursos: DiagnosticReport (resultado de exame); ServiceRequest (pedido de exame) e Binary (laudo formatado). Payload de exemplo completo disponível neste arquivo Postman (anexo).
{
"resourceType": "Bundle",
"meta": {
"profile": ["http://ehrrunner.com/fhir/StructureDefinition/ImageStudyReport-1.0"]
},
"type": "transaction",
"entry": [
{
"fullUrl": "urn:uuid:report-1",
"resource": {
"resourceType" : "DiagnosticReport",
"meta": {
"profile": ["http://ehrrunner.com/fhir/StructureDefinition/ResultadoExameImagem-1.0"]
},
"contained": [
{
"resourceType": "Practitioner",
"id": "responsavelTecnico",
"identifier": [
{
"extension": [
{
"url": "http://ehrrunner.com/fhir/StructureDefinition/BRJurisdicaoOrgaoEmissor-1.0",
"valueCodeableConcept": {
"coding": [
{
"system": "http://ehrrunner.com/fhir/CodeSystem/BRUnidadeFederacao-1.0",
"code": "{{ufConselhoRT}}"
}
]
}
}
],
"type": {
"coding": [
{
"system": "{{codeSystemTipoConselhoRT}}",
"code": "{{tipoConselhoRT}}"
}
]
},
"value": "{{conselhoRT}}",
"assigner": {
"display": "{{nomeConselhoRT}}"
}
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "TAX"
}
]
},
"value": "{{cpfRT}}"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "HC"
}
]
},
"value": "{{cnsRT}}"
}
],
"name": [
{ "text": "{{nomeRT}}" }
]
},
{
"resourceType": "Organization",
"id": "laboratorio",
"identifier": [
{
"system": "urn:oid:2.16.840.1.113883.13.36",
"value": "{{cnesLaboratorio}}"
},
{
"system": "urn:oid:2.16.76.1.3.3",
"value": "{{cnpjLaboratorio}}"
}
],
"name": "{{nomeLaboratorio}}"
}
],
"identifier" : [{
"system": "urn:oid:{{oidSistemaOrigem}}",
"value": "{{recordId}}"
}],
"basedOn" : [{
"reference": "urn:uuid:request-1"
}],
"status" : "final",
"category" : [{
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v2-0074",
"code": "RAD",
"display": "Radiology"
}]
}],
"code" : {
"text": "{{descricaoExameImagemRealizado}}"
},
"subject" : {
"reference": "Patient?identifier=urn:oid:{{patientIdOid}}%7C{{patientId}}"
},
"issued" : "{{dataHoraResultado}}",
"performer" : [
{ "reference": "#responsavelTecnico" },
{ "reference": "#laboratorio" }
],
"presentedForm" : [
{
"contentType": "application/pdf",
"url": "Binary/{{oidSistemaOrigem}}.{{recordId}}.{{versao}}"
}
]
},
"request": {
"method": "POST",
"url": "DiagnosticReport"
}
},
{
"fullUrl": "urn:uuid:request-1",
"resource": {
"resourceType" : "ServiceRequest",
"meta": {
"profile": ["http://ehrrunner.com/fhir/StructureDefinition/PedidoExameImagem-1.0"]
},
"contained": [
{
"resourceType": "Practitioner",
"id": "practitioner-1",
"identifier": [
{
"extension": [
{
"url": "http://ehrrunner.com/fhir/StructureDefinition/BRJurisdicaoOrgaoEmissor-1.0",
"valueCodeableConcept": {
"coding": [
{
"system": "http://ehrrunner.com/fhir/CodeSystem/BRUnidadeFederacao-1.0",
"code": "{{ufCrmSolicitante}}"
}
]
}
}
],
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "MD"
}
]
},
"value": "{{crmSolicitante}}",
"assigner": {
"display": "CONSELHO REGIONAL DE MEDICINA (CRM)"
}
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "TAX"
}
]
},
"value": "{{cpfSolicitante}}"
},
{
"type": {
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/v2-0203",
"code": "HC"
}
]
},
"value": "{{cnsSolicitante}}"
}
],
"name": [
{ "text": "{{nomeSolicitante}}" }
]
}
],
"requisition" : {
"system": "urn:oid:{{oidSistemaOrigem}}",
"value": "{{numeroOS}}"
},
"status": "completed",
"intent": "order",
"category" : [{
"coding": [{
"system": "http://snomed.info/sct",
"code": "363679005",
"display": "Imaging"
}]
}],
"code" : {
"text": "{{descricaoExameImagemRealizado}}"
},
"orderDetail": [
{
"coding": [
{
"system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",
"code": "{{codigoPrescricaoSADTImagem1}}",
"display": "{{descricaoPrescricaoSADTImagem1}}"
},
{
"system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",
"code": "{{codigoSistemaOrigemPrescricaoSADTImagem1}}",
"display": "{{descricaoSistemaOrigemPrescricaoSADTImagem1}}"
}
]
}
],
"subject": {
"reference": "Patient?identifier=urn:oid:{{oidIdentificador}}%7C{{identificador}}"
},
"encounter": {
"type": "Encounter",
"identifier": {
"system": "urn:oid:{{oidPEPOrigem}}",
"code": "{{idConsulta}}"
}
},
"authoredOn": "{{dataSolicitacao}}",
"requester": {
"reference": "#practitioner-1"
}
},
"request": {
"method": "POST",
"url": "ServiceRequest"
}
},
{
"fullUrl": "urn:uuid:binary-1",
"resource": {
"resourceType" : "Binary",
"contentType": "application/pdf",
"data": "{{base64LaudoExameImagem}}"
},
"request": {
"method": "POST",
"url": "Binary"
}
}
]
}
Para utilização do perfil, as seguintes informações são suportadas no processo de integração.
No recurso DiagnosticReport:
| Metadado | Ocorrência | Localização | Descrição | Observações | Exemplo |
| Versão | 0..1 | $,meta.versionId | Versão do laudo. Obrigatório, se o recurso representar uma correção (atualização) de uma versão anterior do mesmo resultado de exame (laudo) - identificado pelo identificador único do recurso. | Para que a atualização seja realizada, é necessário que a data de emissão ($.issued) seja maior que a data de emissão informada anteriormente, para o mesmo resultado de exame. A plataforma faz um controle de versão prórpio das instâncias armazenadas, então o valor informado é usado apenas para realizar uma transação de atualização, não sendo persistido pela plataforma. Caso seja encontrato um recurso com o mesmo identificador e data de emissão anterior a data informada em $.issued, o recurso será atualizado, ao invés de se criar um novo recurso. | java<br>“versionId”: “update”<br> |
| Responsável técnico | 0..n | $.contained | Identificação do profissional que elaborou o laudo do exame (radiologista) | Idealmente, fornecer identificadores para o registro profissional (tipoConselho, ufEmissor, numeroRegistro) e cpf ou cns do profissional. Caso presente, deve ser referenciado (referencia literal) em $.performer. |
java<br>{<br> "resourceType": "Practitioner",<br> "id": "responsavelTecnico",<br> "identifier": [<br> {<br> "extension": [<br> {<br> "url": "http://ehrrunner.com/fhir/StructureDefinition/BRJurisdicaoOrgaoEmissor-1.0",<br> "valueCodeableConcept": {<br> "coding": [<br> {<br> "system": "http://ehrrunner.com/fhir/CodeSystem/BRUnidadeFederacao-1.0",<br> "code": "{{ufConselhoRT}}"<br> }<br> ]<br> }<br> }<br> ],<br> "type": {<br> "coding": [<br> {<br> "system": "{{codeSystemTipoConselhoRT}}",<br> "code": "{{tipoConselhoRT}}"<br> }<br> ]<br> },<br> "value": "{{conselhoRT}}",<br> "assigner": {<br> "display": "{{nomeConselhoRT}}"<br> }<br> },<br> {<br> "type": {<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0203",<br> "code": "TAX"<br> }<br> ]<br> },<br> "value": "{{cpfRT}}"<br> },<br> {<br> "type": {<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0203",<br> "code": "HC"<br> }<br> ]<br> },<br> "value": "{{cnsRT}}"<br> }<br> ],<br> "name": [<br> {<br> "text": "{{nomeRT}}"<br> }<br> ]<br>}<br> |
| Laboratório | 1..1 | $.contained | Organização onde o exame foi realizado | Idealmente, fornecer identificadores para o laboratório: cnes ou cnpj do laboratório. Caso presente, deve ser referenciado (referência literal) em $.performer. |
java<br>{<br> "resourceType": "Organization",<br> "id": "laboratorio",<br> "identifier": [<br> {<br> "system": "urn:oid:2.16.840.1.113883.13.36",<br> "value": "{{cnesLaboratorio}}"<br> },<br> {<br> "system": "urn:oid:2.16.76.1.3.3",<br> "value": "{{cnpjLaboratorio}}"<br> } <br> ],<br> "name": "{{nomeLaboratorio}}"<br>}<br> |
| Pedido de exame | 0..1 | $.basedOn | Referênca para o pedido de exame (se houve). | É possível usar uma referência literal para o ServiceRequest que representa o pedido de exames, se: (1) este estiver contido no Bundle (vide exemplo) ou se essa refência for conhecida na plataforma (ServiceRequest/{resourceId}) | java<br>{ <br> "reference": "urn:uuid:request-1"<br>}<br> |
| Categoria do exame | 0..1 | $.category | Categoria do exame (ex. Radiologia, Ultrasonografia etc.) | Preferencialmente codificado com https://hl7.org/fhir/valueset-diagnostic-service-sections.html | java<br>{<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0074",<br> "code": "RAD",<br> "display": "Radiology"<br> }<br> ]<br>}<br> |
| Descrição do exame realizado | 1..1 | $.code | Informação descritiva do exame que foi realizado. | Tipicamente, aqui só será representada a informação descritiva, utilizada para visualização do tipo de exame na lista indexada de exames de imagens. O conjunto completo de códigos do exame (clínicos e de faturamento) é representado, com detalhes, no pedido de exame (ServiceRequest). | java<br>{<br> "text": "{{descricaoExameRealizado}}"<br>}<br> |
| Data de emissão | 1..1 | $.issued | Data de emissão do resultado de exame (laudo). | Formato FHIR (ISO) | java<br>“issued”: “2022-01-01T08:22:02-03:00”<br> |
| Laudo (s) | 1..n | $.presentedForm | Referência(s) para o(s) recurso(s) Binary contendo o(s) laudo(s formatado(s) | Apenas formatos HTTP (“contentType”: “text/html”) e PDF (“contentType”: “appplication/pdf”). | java<br>[{ <br> "contentType": "application/pdf",<br> "url": "urn:uuid:binary-1"<br>}]<br> |
| URL para imagens do exame (instruções de acesso) | 0..1 | $.extension | Definida para cada integração | É possível que seja requerido a atualização de informações de acesso ao visualisador de imagens (PACS viewer), em tempo de acesso pelo profissional de saúde ou paciente interessado no resultado de exames. Essa implementação é realizada conforme cada integração. |
No recurso ServiceRequest:
| Metadado | Ocorrência | Localização | Descrição | Observações | Exemplo |
| Versão | 0..1 | $,meta.versionId | Versão do pedido de exame. Obrigatório, se o recurso representar uma correção (atualização) de uma versão anterior do pedido de exame associado ao resultado de exame (laudo) - identificado pelo identificador único do recurso. | Para que a atualização seja realizada, é necessário que a data de solicitação do exame ($.authoredOn) seja maior que a data de solicitação do exame informada anteriormente, para o mesmo resultado de exame. A plataforma faz um controle de versão prórpio das instâncias armazenadas, então o valor informado é usado apenas para realizar uma transação de atualização, não sendo persistido pela plataforma. Caso seja encontrato um recurso com o mesmo identificador e data de solicitação anterior a data informada em $.authoredOn, o recurso será atualizado, ao invés de se criar um novo recurso. | java<br>“versionId”: “update”<br> |
| Solicitante | 1..1 | $.contained | Identificação do profissional que solicitou o exame | Idealmente, fornecer identificadores para o registro profissional (tipoConselho, ufEmissor, numeroRegistro) e cpf ou cns do profissional. Se estiver presente, deverá ser referenciado no $.requester. | java<br>{<br> "resourceType": "Practitioner",<br> "id": "solicitante",<br> "identifier": [<br> {<br> "extension": [<br> {<br> "url": "http://ehrrunner.com/fhir/StructureDefinition/BRJurisdicaoOrgaoEmissor-1.0",<br> "valueCodeableConcept": {<br> "coding": [<br> {<br> "system": "http://ehrrunner.com/fhir/CodeSystem/BRUnidadeFederacao-1.0",<br> "code": "{{ufCrmSolicitante}}"<br> }<br> ]<br> }<br> }<br> ],<br> "type": {<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0203",<br> "code": "MD"<br> }<br> ]<br> },<br> "value": "{{crmSolicitante}}",<br> "assigner": {<br> "display": "CONSELHO REGIONAL DE MEDICINA (CRM)"<br> }<br> },<br> {<br> "type": {<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0203",<br> "code": "TAX"<br> }<br> ]<br> },<br> "value": "{{cpfSolicitante}}"<br> },<br> {<br> "type": {<br> "coding": [<br> {<br> "system": "http://terminology.hl7.org/CodeSystem/v2-0203",<br> "code": "TAX"<br> }<br> ]<br> },<br> "value": "{{cpfSolicitante}}"<br> }<br> ],<br> "name": [<br> {<br> "text": "{{nomeSolicitante}}"<br> }<br> ]<br>}<br> |
| Ordem de Serviço | 0..1 | $.requisition | Número(s) da ordem de serviço | Identificadores usados para autorização, faturamento e/ou conciliação entre pedido e resultado de exame. | java<br>{<br> "system": "urn:oid:{{oidSistemaOrigem}}",<br> "value": "{{numeroOS}}"<br>}<br> |
| Descrição do exame realizado | 1..1 | $.code | Informação descritiva do exame que foi realizado. | Tipicamente, aqui só será representada a informação descritiva, utilizada para visualização do tipo de exame na lista indexada de exames de imagens. O conjunto completo de códigos do exame (clínicos e de faturamento) é representado, com detalhes, no pedido de exame (ServiceRequest). | java<br>{<br> "text": "{{descricaoExameRealizado}}"<br>}<br> |
| Detalhes (códigos) do(s) exame(s) | 0..n | $.orderDetail | Código do exame realizado. Para cada exame incluído no pedido de exame, é desejável fornecer o código clínico (S-RES ou RIS) e o código de faturamente relacionado (SIGTAP ou TUSS), se disponíveis. | java<br>{<br> "coding": [<br> {<br> "system": "http://www.saude.gov.br/fhir/r4/CodeSystem/BRCBHPMTUSS",<br> "code": "{{codigoPrescricaoSADTImagem1}}",<br> "display": "{{descricaoPrescricaoSADTImagem1}}"<br> },<br> {<br> "system": "urn:oid:{{oidSistemaOrigem}}.{{cnesLaboratorio}}",<br> "code": "{{codigoSistemaOrigemPrescricaoSADTImagem1}}",<br> "display": "{{descricaoSistemaOrigemPrescricaoSADTImagem1}}"<br> }<br> ]<br>}<br> |
|
| Contato assistencial | 0..1 | $.encounter | Identificador único do contato assistencial no sistema de origem onde foi registrado o pedido de exame (se disponível). | Utilizar o número de atendimento no Prontuário Eletrônico do atendimento, quando disponível. | java<br>{<br> "type": "Encounter",<br> "identifier": {<br> "system": "urn:oid:{{oidPEPOrigem}}",<br> "code": "{{idConsulta}}"<br> }<br>}<br> |
| Data da solicitação | 1..1 | $.authoredOn | Data da solicitação do exame. | Formato FHIR (ISO) | java<br>“authoredOn”: “2022-01-01T07:12:32-03:00”<br> |
No recurso Binary:
Nota: Para laudos formatados com representação binária (base64) com tamanho superior a 128KBytes, não é possível utilizar o formato XML. Deve-se usar, portanto, apenas o formato JSON, nestes casos.
| Metadado | Ocorrência | Localização | Descrição | Observações | Exemplo |
| Tipo de conteúdo | 1..1 | $.contentType | Tipo (formato) de conteúdo para o laudo formatado | Mime type (text/html ou application/pdf) | java<br>"contentType": "application/pdf"<br> |
| Laudo formatado , | 1..1 | $.data | Laudo formatado, em formato binário | (codificado em Base64) | java<br>"data": "{{base64LaudoExameImagem}}"<br> |