Caso de Uso: REDCap + HL7 FHIR
Caso de Uso: REDCap + HL7 FHIR
Objetivo
Permitir a construção de formulários no REDCap com capacidade de exportação estruturada dos dados no formato HL7 FHIR (Fast Healthcare Interoperability Resources), facilitando a interoperabilidade com repositórios clínicos e plataformas de dados de saúde.
Ferramentas
- Plataforma REDCap
- Scripts em Python (executáveis no Google Colab)
- Arquivos JSON de dados e metadados
- Mapeamento personalizado para recursos HL7 FHIR, com base em Field Annotation
Etapas
1. Construção do formulário no REDCap
- Criar um formulário com os campos desejados para recolha de dados (ex: plano terapêutico de pacientes).
- Utilizar o campo Field Annotation de cada variável para mapear dinamicamente para atributos HL7 FHIR.
Exemplo de anotação para o campo “Nome do Medicamento”:
@fhir:MedicationStatement.medicationCodeableConcept.text
É possível mapear para atributos aninhados (ex: dosage[0].timing.code.text) e múltiplos campos por formulário.
2. Exportação dos dados
Os dados podem ser exportados:
- via API do REDCap, usando o endpoint padrão
https://<seu_redcap>/api/ - ou a partir de ficheiros locais:
metadata.json(metadados com annotations) edata.json(dados recolhidos)
3. Conversão para JSON HL7 FHIR
Utilizar um script Python (recomendado via Google Colab) para:
- Ler os metadados e extrair o mapeamento dos campos
@fhir - Ler os dados exportados
- Gerar recursos HL7 FHIR válidos (
MedicationStatement,Patient, etc.) - Incluir campos obrigatórios como
status,subjecteidentifier
4. Exportação como Bundle HL7 FHIR
Os recursos gerados podem ser agrupados em um único HL7 FHIR Bundle:
{
"resourceType": "Bundle",
"type": "collection",
"entry": [
{ "resource": { ... } },
{ "resource": { ... } }
]
}Exemplo prático
Um formulário de prescrição terapêutica gerado no REDCap pode produzir, via script, um MedicationStatement como este:
{
"resourceType": "MedicationStatement",
"status": "active",
"subject": { "reference": "Patient/52" },
"dateAsserted": "2025-06-04T11:17:00",
"medicationCodeableConcept": { "text": "Eutirox 25" },
"dosage": [
{
"method": { "text": "Comprimido ou cápsula" },
"text": "1",
"timing": {
"code": { "text": "08:00" }
}
}
]
}Notas adicionais
- Campos como
@fhir:MedicationStatement.statusnão precisam ser explicitamente anotados se forem incluídos diretamente via código. - É recomendável usar o
record_id(ou similar) para preencher automaticamente osubject.reference. - Campos de comentários pode serem usados como
MedicationStatement.note[0].text.
Ficheiros úteis
- Formulário de Plano Terapêutico com registo de medicações no REDCap’
- Script Python para Google Colab