def etapa_identificacao_cliente(ctx: dict, mensagem: str) -> dict:
    """Verifica se já tem CPF, senão solicita."""
    if ctx.get("cpf_cliente"):
        return {"proxima_etapa": "consultar_cadastros", "cpf": ctx["cpf_cliente"]}
    
    # Tentar extrair CPF da mensagem
    import re
    cpf_match = re.search(r"\b(\d{3}\.?\d{3}\.?\d{3}-?\d{2}|\d{11})\b", mensagem)
    if cpf_match:
        cpf_limpo = re.sub(r"\D", "", cpf_match.group(1))
        if len(cpf_limpo) == 11:
            ctx["cpf_cliente"] = cpf_limpo
            return {"proxima_etapa": "consultar_cadastros", "cpf": cpf_limpo}
    
    return {"resposta": "Para melhor atendê-lo, preciso que informe seu CPF (apenas números)."}