Um pouco sobre HAPI-FHIR e SMART Health IT

Um pouco sobre HAPI-FHIR e SMART Health IT

 

 

FHIR (pronuncia-se “Fire”) é um padrão para o intercâmbio eletrônico de dados de saúde desenvolvido pela HL7 International. O FHIR inclui todos os melhores recursos do HL7 V2, HL7 V3 e do CDA, além de incorporar padrões web consagrados. Organizações que implementam FHIR são capazes de fornecerem muito mais benefícios para suas equipes, parceiros e pacientes.

 

Download: Um pouco sobre HAPI FHIR e SMART


A Biblioteca HAPI-FHIR

A biblioteca HAPI-FHIR é uma implementação de código aberto em JAVA da especificação FHIR. Esta biblioteca pode ser usada para o desenvolvimento de aplicativos cliente e servidores RESTful.

 

Você pode começar a aprender e testar o HAPI-FHIR, por exemplo, criando um aplicativo cliente simples para inserir dados do Paciente em um servidor FHIR de teste.

 

Para criar um aplicativo, o desenvolvedor precisa incluir as bibliotecas básicas exigidas que contém o CORE do FHIR e a estrutura de seus recursos. A biblioteca com a estrutura dos recursos a ser utilizada deve ser definida com base na versão do FHIR que o desenvolvedor está planejando usar.

 

Abaixo um exemplo de configuração de gerenciamento de dependências usando o Maven, carregando a estrutura dos recursos e modelo de dados para a versão DSTU2:


<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-client</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>ca.uhn.hapi.fhir</groupId>
<artifactId>hapi-fhir-structures-hl7org-dstu2</artifactId>
<version>3.0.0</version>
</dependency>


Nosso próximo exemplo ilustra como o HAPI-FHIR pode ser usado para gerar e adicionar recursos do tipo Patient, usando a hapi-fhir-structures-hl7org-dstu2:


FhirContext ctx = FhirContext.forDstu2Hl7Org();
String serverBase = “http://fhirtest.uhn.ca/baseDstu2”;

IGenericClient client = ctx.newRestfulGenericClient(serverBase);

Patient patient = new Patient();

// FIRST AND LAST NAME
patient.addName()
.addFamily(“Last name”)
.addGiven(“First name”);

// SOCIAL SECURITY NUMBER
// https://www.hl7.org/FHIR/datatypes.html#Identifier
// https://www.hl7.org/FHIR/identifier-registry.html

patient.addIdentifier()
.setType(new CodeableConcept().addCoding(
new Coding().setCode(“SB”).setSystem(“http://hl7.org/fhir/v2/0203”)
))
.setSystem(“http://hl7.org/fhir/sid/us-ssn”)
.setValue(“123456789”);

// GENDER
patient.setGender(AdministrativeGender.FEMALE);

// ADDRESS INFORMATION
patient.addAddress()
.setUse(Address.AddressUse.HOME)
.addLine(“Street name, number, direction & P.O. Box etc.”)
.setCity(“Name of city, town etc.”)
.setState(“Sub-unit of country (abbreviations ok)”)
.setPostalCode(“Postal/ZIP code for area”);

// CONTACT https://www.hl7.org/fhir/datatypes-examples.html#ContactPoint
patient.addTelecom()
.setSystem(ContactPointSystem.PHONE)
.setValue(“(555) 675 5745”);

patient.addTelecom()
.setSystem(ContactPointSystem.PHONE)
.setValue(“(415) 675 5745”);

patient.addTelecom()
.setSystem(ContactPointSystem.EMAIL)
.setValue(“test@test.com”);

// EMERGENCY CONTACT https://www.hl7.org/FHIR/patient-definitions.html#Patient.contact
ContactComponent emergencyContact = new ContactComponent();

emergencyContact.addTelecom().setSystem(ContactPointSystem.PHONE)
.setValue(“(111) 675 5745”);

// Relationship to patient
emergencyContact
.addRelationship()
.addCoding()
.setSystem(“http://hl7.org/fhir/ValueSet/v2-0131”)
.setCode(“C”);

emergencyContact.setName(
new HumanName().addFamily(“Last Name contact”).addGiven(“First name contact”)
);

patient.addContact(emergencyContact);

// Encode to JSON
IParser jsonParser = ctx.newJsonParser();
jsonParser.setPrettyPrint(true);
String encoded = jsonParser.encodeResourceToString(patient);


Após serializarmos o recurso Patient acima, teremos algo como:

{
“resourceType”: “Patient”,
“identifier”: [
{
“type”: {
“coding”: [
{
“system”: “http://hl7.org/fhir/v2/0203”,
“code”: “SB”
}
]
},
“system”: “http://hl7.org/fhir/sid/us-ssn”,
“value”: “123456789”
}
],
“name”: [
{
“family”: [
“Last name”
],
“given”: [
“First name”
]
}
],
“telecom”: [
{
“system”: “phone”,
“value”: “(555) 675 5745”
},
{
“system”: “phone”,
“value”: “(415) 675 5745”
},
{
“system”: “email”,
“value”: “test@test.com”
}
],
“gender”: “female”,
“address”: [
{
“use”: “home”,
“line”: [
“Street name, number, direction & P.O. Box etc.”
],
“city”: “Name of city, town etc.”,
“state”: “Sub-unit of country (abbreviations ok)”,
“postalCode”: “Postal/ZIP code for area”
}
],
“contact”: [
{
“relationship”: [
{
“coding”: [
{
“system”: “http://hl7.org/fhir/ValueSet/v2-0131”,
“code”: “C”
}
]
}
],
“name”: {
“family”: [
“Last Name contact”
],
“given”: [
“First name contact”
]
},
“telecom”: [
{
“system”: “phone”,
“value”: “(111) 675 5745”
}
]
}
]
}


O desenvolvedor precisa definir com atenção a estrutura de dados que utilizará, pois existem diferenças na API HAPI-FHIR.


Por exemplo, ambas as bibliotecas hapi-fhir-structures-dstu2 e hapi-fhir-structures-hl7org-dstu2 possuem classes que definem o modelo de dados, mas são diferentes. A recomendação é utilizar a versão do HL7, pois ela estará em conformidade com as convenções da especificação oficial do FHIR.

 

O HAPI-FHIR é bastante simples de usar. A complexidade está na maturidade do desenvolvedor sobre a especificação do FHIR.

 

Várias horas podem ser gastas tentando descobrir como gerar e popular recursos FHIR, portanto, certifique-se de alocar tempo suficiente para isso ou consulte alguém antecipadamente.


SMART Health IT

O SMART Health IT é uma especificação baseada em padrões abertos que permite a construção de apps e sua disponibilização para os pacientes, profissionais clínicos e administrativos da vertical saúde.

 

Para falarmos sobre SMART Health, precisamos ter em mente que:

 

  1. a especificação FHIR define o modelo de dados (recursos)
  2. os sistemas EHR abastecem o modelo de dados do FHIR com os dados do paciente.
  3. A especificação SMART define como aplicativos de terceiros serão executados dentro do EHR, implementando também uma camada de segurança, pois nela se define como gerenciar identidades e permissões de acesso aos dados no EHR.

Você pode criar o seu aplicativo SMART através de um tutorial introdutório disponibilizado pela Cerner. O processo é bastante simples, mas, quase todas as operações permitidas são de somente leitura.

 

Ao escrevemos este artigo, poucos recursos permitiam persistência:

 

  • AllergyIntolerance
  • Appointment
  • Condition
  • DocumentReference e
  • MedicationStatement

Criar aplicativos SMART não é um desafio do ponto de vista tecnológico. A documentação vem sendo aprimorada e mesmo sendo um projeto jovem as organizações e os fornecedores SMART a estão adotando e evoluindo.

 

Uma dificuldade encontrada está no entendimento dos fornecedores sobre a especificação do FHIR. Um exemplo é o recurso de medicação do FHIR

 

  • Onde EHRs como Epic poderiam implementar o padrão RXNorm e uma implementação Cerner, poderia implementar um conjunto de valores definido internamente por suas equipes.

 

Outro ponto a ser considerado é a implementação de diferentes especificidades nas APIs e como um bom ponto de partida, plataformas de integração, como a Redox podem ser consideradas.

 


Referências:

  • SMART

https://fhirblog.com/2016/07/08/what-is-smart-and-why-should-you-care/

  • Criando um aplicativo na sandbox do Cerner:

http://engineering.cerner.com/smart-on-fhir-tutorial/#run-your-app-against-smart-health-it-sandbox


Se você deseja saber mais ou trocar ideias com nossos engenheiros, estamos prontos para nos conectar a você!