HL7 PT FHIR Implementation Guide: Example IG Release 1 | STU1
1.0.0 - STU1

HL7 PT FHIR Implementation Guide: Example IG Release 1 | STU1, publicado por HL7 Portugal. Este guia não é uma publicação autorizada; é a compilação contínua para a versão 1.0.0 construída pela FHIR (HL7® FHIR® Standard) CI Build. Esta versão é baseada no conteúdo atual de https://github.com/hl7-pt/patient-admin-ig/tree/master e muda regularmente. Veja o Diretório de versões publicadas

## Especificação Técnica

O paradigma de comunicação por mensagens FHIR entre os sistemas de informação, segue uma abordagem estruturada e interoperável, garantindo a troca eficiente e segura de dados do utente, nesta IG em particular dados administrativos.

Quando um profissional de saúde interage com o ADT, são gerados eventos que refletem as ações realizadas (nesta IG em concreto a criação de um novo utente, atualização de dados do utente, fusão de 2 registos do mesmo utente, ou alternativamente associação e desassociação de registos de 2 utentes). Estes eventos disparam a criação de mensagens FHIR compatíveis, utilizando o método de messaging, que encapsula os dados nos recursos relacionados, e outros associados ao evento. A mensagem resultante é então enviada para outros sistemas de informação que necessitem desta informação, garantindo sincronização em tempo real e rastreabilidade dos dados.

Este fluxo assegura que os diferentes eventos do sistema sejam comunicados de forma consistente e normalizada. O uso do FHIR permite não apenas a interoperabilidade entre sistemas heterogéneos, mas também uma maior eficiência no processamento e na integração dos dados, promovendo a continuidade e a qualidade do atendimento ao utente.

Todas as mensagens devem ser encapsula num Bundle do tipo message, tendo como primeiro recurso o MessageHeader, seguido do Patient (recurso foco da mensagem para todos os casos desta IG), e os restantes que sejam necessários para representar os dados de forma consistente, de acordo com os perfis desta IG.

### Criação de novo Utente

A ocorrência de um evento de criação de novo utente deve ser enviada uma mensagem FHIR.

- MessageHeader (Obrigatório ser o primeiro recurso da lista de recursos encapsulados no bundle)
  - MessageHeader.eventCoding = PATIENT_NEW
  - MessageHeader.focus = Referencia para o recurso Patient
- Patient
  - Os identifiers devem indicar:
    - Patient.identifier.use
    - Patient.identifier.system
    - Patient.identifier.value
    - Patient.identifier.type (system e code)
  - O nome do Utente deve ser enviado em
    - se conhecido (utente identificado):
      - Patient.name.family (nome de familia)
      - Patient.name.given (primeiro nome e nomes do meio)
    - se desconhecido (Utente não identificado)
      - Patient.name.text
- Practitioner
  - Utilizador que fez os registos de criação (referenciado no MessageHeader.enterer)
  - Medico de Familia (referenciado no Patient.generalPractitioner)
- Organization
  - Entidade de origem (referenciado no MessageHeader.sender)
  - Entidade de destino (referenciado no MessageHeader.destination.receiver)
  - Centro de Saúde do Utente (referenciado no Patient.generalPractitioner)
- Coverage
  - Referencia o Utente no elemento Coverage.beneficiary
  - Referencia uma Entidade Responsável no elemento Coverage.payor
  - Notas adicionais sobre Coverage:
    - uma cobertura é um instrumento que cobre parcialmente ou totalmente as custas de prestação de cuidados de saúde. Podem existir diferentes tipos de coberturas ou beneficios atribuidos aos utentes.
    - utentes beneficiários do SNS tem redução de custos estnado sujeitos apenas ao pagamento de taxas moderadpres, sendo o valor remanescente pago pelo SNS, ou estarem totalmente isentos por determinada condição (ex: insuficiencia economica, excombatentes, entre outros motivos).
    - os utentes do SNS podem acumular vários motivos de isenções, o que pode dar origem a vários recursos coverage a referenciarem o mesmo utente.
    - Os utentes podem ter coberturas adicionais como subsistemas de saúde, ou planos e/ou seguros de saúde

### Atualização de dados do Utente

A ocorrência de um evento de atualização de dados do utente deve ser enviada uma mensagem FHIR.

- MessageHeader (Obrigatório ser o primeiro recurso da lista de recursos encapsulados no bundle)
  - MessageHeader.eventCoding = PATIENT_UPDATE
  - MessageHeader.focus = Referencia para o recurso Patient
- Patient
  - Os identifiers devem indicar:
    - Patient.identifier.use
    - Patient.identifier.system
    - Patient.identifier.value
    - Patient.identifier.type (system e code)
  - O nome do Utente deve ser enviado em
    - se conhecido (utente identificado):
      - Patient.name.family (nome de familia)
      - Patient.name.given (primeiro nome e nomes do meio)
    - se desconhecido (Utente não identificado)
      - Patient.name.text
- Practitioner
  - Utilizador que fez os registos de criação (referenciado no MessageHeader.enterer)
  - Medico de Familia (referenciado no Patient.generalPractitioner)
- Organization
  - Entidade de origem (referenciado no MessageHeader.sender)
  - Entidade de destino (referenciado no MessageHeader.destination.receiver)
  - Centro de Saúde do Utente (referenciado no Patient.generalPractitioner)
- Coverage
  - Referencia o Utente no Coverage.beneficiary

### Fusão de Utentes

- MessageHeader (Obrigatório ser o primeiro recurso da lista de recursos encapsulados no bundle)
  - MessageHeader.eventCoding = PATIENT_MERGE
  - MessageHeader.focus = Referencia para o recurso Patient
- Patient
  - Os identifiers devem indicar:
    - Patient.identifier.use
    - Patient.identifier.system
    - Patient.identifier.value
    - Patient.identifier.type (system e code)
  - O nome do Utente deve ser enviado em
    - se conhecido (utente identificado):
      - Patient.name.family (nome de familia)
      - Patient.name.given (primeiro nome e nomes do meio)
    - se desconhecido (Utente não identificado)
      - Patient.name.text
  - Deve ser criado um segundo recurso Patient
    - referenciado em Patient.link.other
    - Patient.link.replaces = replaces

- Patient (dados do utente que vai ser fundido)

- Practitioner
  - Utilizador que fez os registos de criação (referenciado no MessageHeader.enterer)
  - Medico de Familia (referenciado no Patient.generalPractitioner)
- Organization
  - Entidade de origem (referenciado no MessageHeader.sender)
  - Entidade de destino (referenciado no MessageHeader.destination.receiver)
  - Centro de Saúde do Utente (referenciado no Patient.generalPractitioner)
- Coverage
  - Referencia o Utente no Coverage.beneficiary

### Associação de Utentes

- MessageHeader (Obrigatório ser o primeiro recurso da lista de recursos encapsulados no bundle)
  - MessageHeader.eventCoding = PATIENT_LINK
  - MessageHeader.focus = Referencia para o recurso Patient
- Patient
  - Os identifiers devem indicar:
    - Patient.identifier.use
    - Patient.identifier.system
    - Patient.identifier.value
    - Patient.identifier.type (system e code)
  - O nome do Utente deve ser enviado em
    - se conhecido (utente identificado):
      - Patient.name.family (nome de familia)
      - Patient.name.given (primeiro nome e nomes do meio)
    - se desconhecido (Utente não identificado)
      - Patient.name.text
  - Deve ser criado um segundo recurso Patient
    - referenciado em Patient.link.other
    - Patient.link.replaces = replaces

- Patient (dados do utente que vai ser fundido)

- Practitioner
  - Utilizador que fez os registos de criação (referenciado no MessageHeader.enterer)
  - Medico de Familia (referenciado no Patient.generalPractitioner)
- Organization
  - Entidade de origem (referenciado no MessageHeader.sender)
  - Entidade de destino (referenciado no MessageHeader.destination.receiver)
  - Centro de Saúde do Utente (referenciado no Patient.generalPractitioner)
- Coverage
  - Referencia o Utente no Coverage.beneficiary

### Desassociação de Utentes

- MessageHeader (Obrigatório ser o primeiro recurso da lista de recursos encapsulados no bundle)
  - MessageHeader.eventCoding = PATIENT_UNLINK
  - MessageHeader.focus = Referencia para o recurso Patient
- Patient
  - Os identifiers devem indicar:
    - Patient.identifier.use
    - Patient.identifier.system
    - Patient.identifier.value
    - Patient.identifier.type (system e code)
  - O nome do Utente deve ser enviado em
    - se conhecido (utente identificado):
      - Patient.name.family (nome de familia)
      - Patient.name.given (primeiro nome e nomes do meio)
    - se desconhecido (Utente não identificado)
      - Patient.name.text
  - Deve ser criado um segundo recurso Patient
    - referenciado em Patient.link.other
    - Patient.link.replaces = replaces

- Patient (dados do utente que vai ser fundido)

- Practitioner
  - Utilizador que fez os registos de criação (referenciado no MessageHeader.enterer)
  - Medico de Familia (referenciado no Patient.generalPractitioner)
- Organization
  - Entidade de origem (referenciado no MessageHeader.sender)
  - Entidade de destino (referenciado no MessageHeader.destination.receiver)
  - Centro de Saúde do Utente (referenciado no Patient.generalPractitioner)
- Coverage
  - Referencia o Utente no Coverage.beneficiary

### Mensagem de resposta com resultado aplicacional

- MessageHeader (Obrigatório ser o primeiro recurso da lista de recursos encapsulados no bundle)
  - MessageHeader.eventCoding = PATIENT_NEW_RESPONSE
  - MessageHeader.focus = Referencia para o recurso Patient se foi processado com sucesso e se vier o recurso atulizado na resposta, ou o recurso OperationOutcome se processado com erro.
  - MessageHeader.response.id (id da mensagem original passado no MessageHeader.id)
  - MessageHeader.response.code (resultado da comunicação)

- Patient (se houver dados adicionais do utente a retornar na resposta, ou se o recurso for necessário para processar a resposta)

- OperationOutcome (se forem retornados erros no processamento do bundle)