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.
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 vNunca 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.
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.idAudit 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.