def filtrar_planos_ativos(planos: list) -> list:
    """Filtra planos com status que contenha 'Ativo' (ignora isento)"""
    if not planos:
        return []
    
    resultado = []
    for p in planos:
        status = p.get("status_plano", "")
        # Aceita "Ativo", "Ativo (Isento)", "Ativo - Isento", etc.
        if "Ativo" in status:
            resultado.append(p)
    
    log(f"[FILTRAR_PLANOS] Encontrados {len(resultado)} planos ativos", "DEBUG")
    return resultado

def formatar_data(data_str: str) -> str:
    """Formata data de YYYY-MM-DD para DD/MM/YYYY."""
    if not data_str:
        return "Data não informada"
    try:
        from datetime import datetime
        data = datetime.strptime(data_str, '%Y-%m-%d')
        return data.strftime('%d/%m/%Y')
    except:
        return str(data_str)

def formatar_valor(valor) -> str:
    """Formata valor monetário para R$ 1.234,56."""
    if valor is None:
        return "R$ 0,00"
    try:
        valor_float = float(valor)
        return f"R$ {valor_float:,.2f}".replace(",", "v").replace(".", ",").replace("v", ".")
    except:
        return str(valor)

# A função filtrar_planos_ativos já está aqui, mantenha-a

def classificar_intencao_global(texto: str) -> str:
    """Classifica a intenção do usuário usando palavras-chave e IA (reutiliza as variáveis globais da casca)."""
    import re, json
    msg_lower = texto.lower().strip()
    
    # Palavras-chave (mesmas do processar_mensagem)
    palavras_emitir_boleto = ["boleto", "fatura", "pagar", "2 via", "segunda via", "pix", "codigo", "código", 
                              "barras", "linha digitavel", "codigo de barras", "codigo pix", "qr code", 
                              "pagamento", "vencimento", "valor da conta", "meu boleto"]
    palavras_verificar_pendencias = ["pendência", "debito", "débito", "atraso", "estou devendo", "devo", 
                                     "verificar pendencia", "tenho pendencia", "conta vencida", 
                                     "estou negativo", "bloqueado", "regularizar"]
    palavras_suporte = ["internet", "conexão", "caiu", "lento", "modem", "roteador", "wi-fi", 
                       "sinal", "rede", "cabo", "fibra", "técnico", "suporte", "offline", 
                       "desconectou", "reiniciar", "nao funciona", "sem internet"]
    palavras_vendas = ["vendas", "contratar", "plano", "aumentar", "velocidade", "novo", 
                      "instalar", "upgrade", "promoção", "desconto", "mudar de plano", "quero contratar"]
    palavras_encerrar = ["encerrar", "terminar", "finalizar", "sair", "tchau", "adeus", "obrigado", "nada mais", "é só", "só isso"]
    palavras_recomecar = ["recomeçar", "recomecar", "iniciar", "menu", "voltar ao inicio", "começar de novo", "inicio", "reset"]
    palavras_trocar_plano = ["trocar plano", "outro plano", "mudar de plano", "outro", "diferente", "trocar"]
    
    # Classificação rápida por palavras-chave
    if any(p in msg_lower for p in palavras_emitir_boleto):
        return "emitir_boleto"
    if any(p in msg_lower for p in palavras_verificar_pendencias):
        return "verificar_pendencias"
    if any(p in msg_lower for p in palavras_suporte):
        return "suporte_tecnico"
    if any(p in msg_lower for p in palavras_vendas):
        return "vendas"
    if any(p in msg_lower for p in palavras_encerrar):
        return "encerrar"
    if any(p in msg_lower for p in palavras_recomecar):
        return "recomecar"
    if any(p in msg_lower for p in palavras_trocar_plano):
        return "trocar_plano"
    
    # Chamada à IA (usa variáveis globais da casca)
    try:
        deepseek_key = DEEPSEEK_API_KEY
        deepseek_url = DEEPSEEK_API_URL
        headers = {"Authorization": f"Bearer {deepseek_key}", "Content-Type": "application/json"}
        system_prompt = """Você é um CLASSIFICADOR de intenções para um atendente virtual de telecomunicações.
Analise a mensagem do cliente e retorne APENAS um JSON com a intenção.
Intenções possíveis: "emitir_boleto", "verificar_pendencias", "suporte_tecnico", "vendas", "encerrar", "recomecar", "trocar_plano", "outros".
Responda APENAS com: {"intencao": "..."}
Mensagem: """
        payload = {
            "model": "deepseek-chat",
            "messages": [{"role": "system", "content": system_prompt}, {"role": "user", "content": texto}],
            "temperature": 0.1,
            "max_tokens": 100
        }
        resp = requests.post(deepseek_url, json=payload, headers=headers, timeout=10)
        if resp.status_code == 200:
            data = resp.json()
            conteudo = data["choices"][0]["message"]["content"]
            json_match = re.search(r'\{[^{}]*\}', conteudo)
            if json_match:
                intencao_data = json.loads(json_match.group())
                return intencao_data.get("intencao", "outros")
    except Exception as e:
        log(f"[CLASSIFICAR] Erro na IA: {e}", "ERROR")
    return "outros"