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:
- a especificação FHIR define o modelo de dados (recursos)
- os sistemas EHR abastecem o modelo de dados do FHIR com os dados do paciente.
- 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ê!