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) e data.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, subject e identifier

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.status não precisam ser explicitamente anotados se forem incluídos diretamente via código.
  • É recomendável usar o record_id (ou similar) para preencher automaticamente o subject.reference.
  • Campos de comentários pode serem usados como MedicationStatement.note[0].text.

Ficheiros úteis