Voltar ao Blog
    Saúde
    IA & Automação
    Backend

    Automação em Saúde: O Que Aprendi Trabalhando em HealthTech

    Integrar sistemas médicos é diferente de qualquer outro domínio. Aqui estão os padrões que funcionaram na prática.

    Publicado em ·10 min de leitura·por Bernardo Gomes

    Por que saúde é diferente

    Automação em healthcare não é como automatizar um e-commerce. Dados incorretos não geram devolução — podem gerar dano ao paciente. Essa responsabilidade muda como você pensa em validação, logging e rollback.

    Validação como primeira linha de defesa

    Em sistemas médicos, dados chegam de múltiplas fontes com qualidade variável: formulários preenchidos às pressas, sistemas legados com encoding errado, integrações via SOAP de 2008. Validação não é opcional.

    python
    from pydantic import BaseModel, validator
    from datetime import date
    
    class PatientRecord(BaseModel):
        cpf: str
        birth_date: date
        weight_kg: float
    
        @validator("cpf")
        def validate_cpf(cls, v):
            digits = "".join(c for c in v if c.isdigit())
            if len(digits) != 11:
                raise ValueError("CPF inválido")
            return digits
    
        @validator("weight_kg")
        def validate_weight(cls, v):
            if not 0.5 <= v <= 500:
                raise ValueError(f"Peso fora do range esperado: {v}kg")
            return v
    ⚠️

    Nunca silencia erros de validação em dados médicos. Um peso de 0.0kg pode ser um campo não preenchido — e você precisa saber disso antes de salvar.

    Idempotência em integrações

    Sistemas de saúde têm downtime. Retentativas são inevitáveis. Toda operação de escrita precisa ser idempotente — executar duas vezes deve ter o mesmo efeito que executar uma.

    python
    import hashlib
    
    def upsert_appointment(appointment_data: dict) -> str:
        idempotency_key = hashlib.sha256(
            f"{appointment_data['patient_id']}:{appointment_data['datetime']}:{appointment_data['doctor_id']}".encode()
        ).hexdigest()
    
        existing = db.query(Appointment).filter_by(
            idempotency_key=idempotency_key
        ).first()
    
        if existing:
            return existing.id
    
        new_appointment = Appointment(
            **appointment_data,
            idempotency_key=idempotency_key
        )
        db.add(new_appointment)
        db.commit()
        return new_appointment.id

    Audit trail imutável

    Toda mudança em dado clínico precisa de audit trail. Não UPDATE — INSERT com timestamp e user. O histórico completo deve ser reconstruível a qualquer momento.

    • Nunca deletar registros médicos — soft delete com flag + timestamp
    • Toda escrita loga: quem fez, quando, o que era antes, o que ficou
    • Audit log separado do dado clínico, em tabela append-only
    • Teste a reconstrução periodicamente — audit log inútil não auditado

    O que funciona na prática

    Depois de alguns anos nessa área, o padrão que mais funcionou foi: validação rígida na borda, transformação explícita no domínio, persistência conservadora (upsert + audit), e alertas proativos para anomalias. Simples, mas resistente.