[2026-08-13 14:27:31] 🔹 Iniciando query (modo TESTE)
[2026-08-13 14:27:31] SQL: 
SELECT
    COALESCE(o.operacao, 'SEM OPERACAO') AS operacao,
    o.posicoes_atendimento,

    COUNT(bc.Id) AS total_vendas,

    SUM(
        CASE 
            WHEN bc.venda_aprovada_aud_rede = 1
             AND bc.venda_cancelada = 0
            THEN 1 ELSE 0
        END
    ) AS vendas_aprovadas,

    SUM(
        CASE 
            WHEN bc.venda_cancelada = 1
            THEN 1 ELSE 0
        END
    ) AS total_cancelamentos,

    COUNT(bc.Id)
      - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END) AS adicoes,

    ROUND(
        (COUNT(bc.Id)
         - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END))
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ) AS perc_adicoes,

    ROUND(
        SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END)
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ) AS perc_cancelamentos,

    ROUND(
        COUNT(bc.Id) / NULLIF(o.posicoes_atendimento,0), 2
    ) AS media_posicao

FROM
(
    SELECT DISTINCT
        c.Id,
        c.id_operacao,
        c.id_vendedor,
        c.venda_aprovada_aud_rede,
        c.venda_cancelada
    FROM contratos c
    WHERE c.data_hora_entrada BETWEEN ? AND ?
      AND c.id_operacao IS NOT NULL
      AND c.id_vendedor IS NOT NULL
) bc
JOIN operacoes o ON bc.id_operacao = o.Id

GROUP BY o.operacao, o.posicoes_atendimento

UNION ALL

-- TOTAL GERAL
SELECT
    'TOTAL GERAL',
    NULL,

    COUNT(bc.Id),
    SUM(CASE WHEN bc.venda_aprovada_aud_rede = 1 AND bc.venda_cancelada = 0 THEN 1 ELSE 0 END),
    SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END),

    COUNT(bc.Id)
      - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END),

    ROUND(
        (COUNT(bc.Id)
         - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END))
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ),

    ROUND(
        SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END)
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ),

    NULL

FROM
(
    SELECT DISTINCT
        c.Id,
        c.id_operacao,
        c.id_vendedor,
        c.venda_aprovada_aud_rede,
        c.venda_cancelada
    FROM contratos c
    WHERE c.data_hora_entrada BETWEEN ? AND ?
      AND c.id_operacao IS NOT NULL
      AND c.id_vendedor IS NOT NULL
) bc;
    
[2026-08-13 14:27:31] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59","2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 14:27:31] ✅ Query executada com sucesso — linhas retornadas: 3
[2026-08-13 14:27:31] 🔹 Iniciando query (modo TESTE)
[2026-08-13 14:27:31] SQL: 
                SELECT 
                    v.Id AS id_vendedor,
                    v.nome AS nome_vendedor,
                    COALESCE(e.supervisor,'SEM SUPERVISOR') AS supervisor,
                    COALESCE(o.operacao, 'SEM OPERAÇÃO') AS nome_operacao,

                    COUNT(c.Id) AS qtd_vendas,
                    SUM(CASE WHEN c.venda_aprovada_aud_rede = 1 AND c.venda_cancelada = 0 THEN 1 ELSE 0 END) AS vendas_aprovadas,
                    SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END) AS cancelamentos

                FROM contratos c
                JOIN vendedores v 
                    ON c.id_vendedor = v.Id                          -- garante vendedor válido
                LEFT JOIN equipes e 
                    ON v.equipe = e.Id
                LEFT JOIN operacoes o
                    ON c.id_operacao = o.Id                          -- traz o nome da operação

                WHERE c.id_vendedor IS NOT NULL
                AND c.data_hora_entrada BETWEEN ? AND ?

                GROUP BY 
                    v.Id, v.nome, e.supervisor, o.operacao

                ORDER BY qtd_vendas DESC;
                
[2026-08-13 14:27:31] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 14:27:31] ✅ Query executada com sucesso — linhas retornadas: 12
[2026-08-13 14:27:33] 🔹 Iniciando query (modo TESTE)
[2026-08-13 14:27:33] SQL: 
        SELECT
            o.operacao AS operacao,
            COUNT(DISTINCT c.Id) AS total_vendas,
            COALESCE(SUM(CASE WHEN c.venda_aprovada_cpfl = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS vendas_aprovadas,
            COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS total_cancelamentos,
            (COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)) AS adicoes,
            ROUND(
                ((COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0))
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_adicoes,
            ROUND(
                (COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_cancelamentos
        FROM operacoes o
        LEFT JOIN contratos c
            ON c.id_operacao = o.Id
            AND c.data_hora_entrada BETWEEN ? AND ?
        GROUP BY o.operacao

        UNION ALL

        SELECT
            'TOTAL GERAL' AS operacao,
            COUNT(DISTINCT c.Id) AS total_vendas,
            COALESCE(SUM(CASE WHEN c.venda_aprovada_cpfl = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS vendas_aprovadas,
            COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS total_cancelamentos,
            (COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)) AS adicoes,
            ROUND(
                ((COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0))
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_adicoes,
            ROUND(
                (COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_cancelamentos
        FROM contratos c
        WHERE c.id_operacao IS NOT NULL
        AND c.data_hora_entrada BETWEEN ? AND ?

        ORDER BY operacao;
    
[2026-08-13 14:27:33] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59","2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 14:27:33] ✅ Query executada com sucesso — linhas retornadas: 6
[2026-08-13 14:27:33] 🔹 Iniciando query (modo TESTE)
[2026-08-13 14:27:33] SQL: 
                SELECT 
                    v.id AS id_vendedor,
                    v.nome AS nome_vendedor,
                    COALESCE(e.Nome, 'SEM EQUIPE') AS supervisor,
                    COALESCE(o.operacao, 'SEM OPERAÇÃO') AS nome_operacao,

                    COUNT(c.Id) AS qtd_vendas,
                    SUM(CASE WHEN c.venda_aprovada_aud_rede = 1 AND c.venda_cancelada = 0 THEN 1 ELSE 0 END) AS vendas_aprovadas,
                    SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END) AS cancelamentos

                FROM contratos c
                JOIN vendedores v 
                    ON c.id_vendedor = v.id
                LEFT JOIN equipes e 
                    ON v.equipe = e.Id
                LEFT JOIN operacoes o
                    ON c.id_operacao = o.Id

                WHERE c.id_vendedor IS NOT NULL
                AND c.data_hora_entrada BETWEEN ? AND ?

                GROUP BY 
                    v.id, v.nome, e.Nome, o.operacao

                ORDER BY qtd_vendas DESC;
            
[2026-08-13 14:27:33] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 14:27:33] ✅ Query executada com sucesso — linhas retornadas: 54
[2026-08-13 14:28:35] 🔹 Iniciando query (modo TESTE)
[2026-08-13 14:28:35] SQL: 
SELECT
    COALESCE(o.operacao, 'SEM OPERACAO') AS operacao,
    o.posicoes_atendimento,

    COUNT(bc.Id) AS total_vendas,

    SUM(
        CASE 
            WHEN bc.venda_aprovada_aud_rede = 1
             AND bc.venda_cancelada = 0
            THEN 1 ELSE 0
        END
    ) AS vendas_aprovadas,

    SUM(
        CASE 
            WHEN bc.venda_cancelada = 1
            THEN 1 ELSE 0
        END
    ) AS total_cancelamentos,

    COUNT(bc.Id)
      - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END) AS adicoes,

    ROUND(
        (COUNT(bc.Id)
         - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END))
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ) AS perc_adicoes,

    ROUND(
        SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END)
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ) AS perc_cancelamentos,

    ROUND(
        COUNT(bc.Id) / NULLIF(o.posicoes_atendimento,0), 2
    ) AS media_posicao

FROM
(
    SELECT DISTINCT
        c.Id,
        c.id_operacao,
        c.id_vendedor,
        c.venda_aprovada_aud_rede,
        c.venda_cancelada
    FROM contratos c
    WHERE c.data_hora_entrada BETWEEN ? AND ?
      AND c.id_operacao IS NOT NULL
      AND c.id_vendedor IS NOT NULL
) bc
JOIN operacoes o ON bc.id_operacao = o.Id

GROUP BY o.operacao, o.posicoes_atendimento

UNION ALL

-- TOTAL GERAL
SELECT
    'TOTAL GERAL',
    NULL,

    COUNT(bc.Id),
    SUM(CASE WHEN bc.venda_aprovada_aud_rede = 1 AND bc.venda_cancelada = 0 THEN 1 ELSE 0 END),
    SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END),

    COUNT(bc.Id)
      - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END),

    ROUND(
        (COUNT(bc.Id)
         - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END))
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ),

    ROUND(
        SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END)
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ),

    NULL

FROM
(
    SELECT DISTINCT
        c.Id,
        c.id_operacao,
        c.id_vendedor,
        c.venda_aprovada_aud_rede,
        c.venda_cancelada
    FROM contratos c
    WHERE c.data_hora_entrada BETWEEN ? AND ?
      AND c.id_operacao IS NOT NULL
      AND c.id_vendedor IS NOT NULL
) bc;
    
[2026-08-13 14:28:35] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59","2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 14:28:35] ✅ Query executada com sucesso — linhas retornadas: 3
[2026-08-13 14:28:35] 🔹 Iniciando query (modo TESTE)
[2026-08-13 14:28:35] SQL: 
                SELECT 
                    v.Id AS id_vendedor,
                    v.nome AS nome_vendedor,
                    COALESCE(e.supervisor,'SEM SUPERVISOR') AS supervisor,
                    COALESCE(o.operacao, 'SEM OPERAÇÃO') AS nome_operacao,

                    COUNT(c.Id) AS qtd_vendas,
                    SUM(CASE WHEN c.venda_aprovada_aud_rede = 1 AND c.venda_cancelada = 0 THEN 1 ELSE 0 END) AS vendas_aprovadas,
                    SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END) AS cancelamentos

                FROM contratos c
                JOIN vendedores v 
                    ON c.id_vendedor = v.Id                          -- garante vendedor válido
                LEFT JOIN equipes e 
                    ON v.equipe = e.Id
                LEFT JOIN operacoes o
                    ON c.id_operacao = o.Id                          -- traz o nome da operação

                WHERE c.id_vendedor IS NOT NULL
                AND c.data_hora_entrada BETWEEN ? AND ?

                GROUP BY 
                    v.Id, v.nome, e.supervisor, o.operacao

                ORDER BY qtd_vendas DESC;
                
[2026-08-13 14:28:35] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 14:28:35] ✅ Query executada com sucesso — linhas retornadas: 12
[2026-08-13 14:28:37] 🔹 Iniciando query (modo TESTE)
[2026-08-13 14:28:37] SQL: 
        SELECT
            o.operacao AS operacao,
            COUNT(DISTINCT c.Id) AS total_vendas,
            COALESCE(SUM(CASE WHEN c.venda_aprovada_cpfl = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS vendas_aprovadas,
            COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS total_cancelamentos,
            (COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)) AS adicoes,
            ROUND(
                ((COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0))
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_adicoes,
            ROUND(
                (COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_cancelamentos
        FROM operacoes o
        LEFT JOIN contratos c
            ON c.id_operacao = o.Id
            AND c.data_hora_entrada BETWEEN ? AND ?
        GROUP BY o.operacao

        UNION ALL

        SELECT
            'TOTAL GERAL' AS operacao,
            COUNT(DISTINCT c.Id) AS total_vendas,
            COALESCE(SUM(CASE WHEN c.venda_aprovada_cpfl = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS vendas_aprovadas,
            COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS total_cancelamentos,
            (COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)) AS adicoes,
            ROUND(
                ((COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0))
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_adicoes,
            ROUND(
                (COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_cancelamentos
        FROM contratos c
        WHERE c.id_operacao IS NOT NULL
        AND c.data_hora_entrada BETWEEN ? AND ?

        ORDER BY operacao;
    
[2026-08-13 14:28:37] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59","2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 14:28:37] ✅ Query executada com sucesso — linhas retornadas: 6
[2026-08-13 14:28:37] 🔹 Iniciando query (modo TESTE)
[2026-08-13 14:28:37] SQL: 
                SELECT 
                    v.id AS id_vendedor,
                    v.nome AS nome_vendedor,
                    COALESCE(e.Nome, 'SEM EQUIPE') AS supervisor,
                    COALESCE(o.operacao, 'SEM OPERAÇÃO') AS nome_operacao,

                    COUNT(c.Id) AS qtd_vendas,
                    SUM(CASE WHEN c.venda_aprovada_aud_rede = 1 AND c.venda_cancelada = 0 THEN 1 ELSE 0 END) AS vendas_aprovadas,
                    SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END) AS cancelamentos

                FROM contratos c
                JOIN vendedores v 
                    ON c.id_vendedor = v.id
                LEFT JOIN equipes e 
                    ON v.equipe = e.Id
                LEFT JOIN operacoes o
                    ON c.id_operacao = o.Id

                WHERE c.id_vendedor IS NOT NULL
                AND c.data_hora_entrada BETWEEN ? AND ?

                GROUP BY 
                    v.id, v.nome, e.Nome, o.operacao

                ORDER BY qtd_vendas DESC;
            
[2026-08-13 14:28:37] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 14:28:37] ✅ Query executada com sucesso — linhas retornadas: 54
[2026-08-13 17:26:45] 🔹 Iniciando query (modo TESTE)
[2026-08-13 17:26:45] SQL: 
        SELECT
            o.operacao AS operacao,
            COUNT(DISTINCT c.Id) AS total_vendas,
            COALESCE(SUM(CASE WHEN c.venda_aprovada_cpfl = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS vendas_aprovadas,
            COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS total_cancelamentos,
            (COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)) AS adicoes,
            ROUND(
                ((COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0))
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_adicoes,
            ROUND(
                (COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_cancelamentos
        FROM operacoes o
        LEFT JOIN contratos c
            ON c.id_operacao = o.Id
            AND c.data_hora_entrada BETWEEN ? AND ?
        GROUP BY o.operacao

        UNION ALL

        SELECT
            'TOTAL GERAL' AS operacao,
            COUNT(DISTINCT c.Id) AS total_vendas,
            COALESCE(SUM(CASE WHEN c.venda_aprovada_cpfl = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS vendas_aprovadas,
            COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 AND c.id_vendedor IS NOT NULL THEN 1 ELSE 0 END),0) AS total_cancelamentos,
            (COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)) AS adicoes,
            ROUND(
                ((COUNT(DISTINCT c.Id) - COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0))
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_adicoes,
            ROUND(
                (COALESCE(SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END),0)
                / NULLIF(COUNT(DISTINCT c.Id), 0)) * 100, 2
            ) AS perc_cancelamentos
        FROM contratos c
        WHERE c.id_operacao IS NOT NULL
        AND c.data_hora_entrada BETWEEN ? AND ?

        ORDER BY operacao;
    
[2026-08-13 17:26:45] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59","2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 17:26:45] ✅ Query executada com sucesso — linhas retornadas: 6
[2026-08-13 17:26:45] 🔹 Iniciando query (modo TESTE)
[2026-08-13 17:26:45] SQL: 
                SELECT 
                    v.id AS id_vendedor,
                    v.nome AS nome_vendedor,
                    COALESCE(e.Nome, 'SEM EQUIPE') AS supervisor,
                    COALESCE(o.operacao, 'SEM OPERAÇÃO') AS nome_operacao,

                    COUNT(c.Id) AS qtd_vendas,
                    SUM(CASE WHEN c.venda_aprovada_aud_rede = 1 AND c.venda_cancelada = 0 THEN 1 ELSE 0 END) AS vendas_aprovadas,
                    SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END) AS cancelamentos

                FROM contratos c
                JOIN vendedores v 
                    ON c.id_vendedor = v.id
                LEFT JOIN equipes e 
                    ON v.equipe = e.Id
                LEFT JOIN operacoes o
                    ON c.id_operacao = o.Id

                WHERE c.id_vendedor IS NOT NULL
                AND c.data_hora_entrada BETWEEN ? AND ?

                GROUP BY 
                    v.id, v.nome, e.Nome, o.operacao

                ORDER BY qtd_vendas DESC;
            
[2026-08-13 17:26:45] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 17:26:45] ✅ Query executada com sucesso — linhas retornadas: 54
[2026-08-13 17:27:39] 🔹 Iniciando query (modo TESTE)
[2026-08-13 17:27:39] SQL: 
SELECT
    COALESCE(o.operacao, 'SEM OPERACAO') AS operacao,
    o.posicoes_atendimento,

    COUNT(bc.Id) AS total_vendas,

    SUM(
        CASE 
            WHEN bc.venda_aprovada_aud_rede = 1
             AND bc.venda_cancelada = 0
            THEN 1 ELSE 0
        END
    ) AS vendas_aprovadas,

    SUM(
        CASE 
            WHEN bc.venda_cancelada = 1
            THEN 1 ELSE 0
        END
    ) AS total_cancelamentos,

    COUNT(bc.Id)
      - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END) AS adicoes,

    ROUND(
        (COUNT(bc.Id)
         - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END))
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ) AS perc_adicoes,

    ROUND(
        SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END)
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ) AS perc_cancelamentos,

    ROUND(
        COUNT(bc.Id) / NULLIF(o.posicoes_atendimento,0), 2
    ) AS media_posicao

FROM
(
    SELECT DISTINCT
        c.Id,
        c.id_operacao,
        c.id_vendedor,
        c.venda_aprovada_aud_rede,
        c.venda_cancelada
    FROM contratos c
    WHERE c.data_hora_entrada BETWEEN ? AND ?
      AND c.id_operacao IS NOT NULL
      AND c.id_vendedor IS NOT NULL
) bc
JOIN operacoes o ON bc.id_operacao = o.Id

GROUP BY o.operacao, o.posicoes_atendimento

UNION ALL

-- TOTAL GERAL
SELECT
    'TOTAL GERAL',
    NULL,

    COUNT(bc.Id),
    SUM(CASE WHEN bc.venda_aprovada_aud_rede = 1 AND bc.venda_cancelada = 0 THEN 1 ELSE 0 END),
    SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END),

    COUNT(bc.Id)
      - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END),

    ROUND(
        (COUNT(bc.Id)
         - SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END))
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ),

    ROUND(
        SUM(CASE WHEN bc.venda_cancelada = 1 THEN 1 ELSE 0 END)
        / NULLIF(COUNT(bc.Id),0) * 100, 2
    ),

    NULL

FROM
(
    SELECT DISTINCT
        c.Id,
        c.id_operacao,
        c.id_vendedor,
        c.venda_aprovada_aud_rede,
        c.venda_cancelada
    FROM contratos c
    WHERE c.data_hora_entrada BETWEEN ? AND ?
      AND c.id_operacao IS NOT NULL
      AND c.id_vendedor IS NOT NULL
) bc;
    
[2026-08-13 17:27:39] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59","2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 17:27:39] ✅ Query executada com sucesso — linhas retornadas: 3
[2026-08-13 17:27:39] 🔹 Iniciando query (modo TESTE)
[2026-08-13 17:27:39] SQL: 
                SELECT 
                    v.Id AS id_vendedor,
                    v.nome AS nome_vendedor,
                    COALESCE(e.supervisor,'SEM SUPERVISOR') AS supervisor,
                    COALESCE(o.operacao, 'SEM OPERAÇÃO') AS nome_operacao,

                    COUNT(c.Id) AS qtd_vendas,
                    SUM(CASE WHEN c.venda_aprovada_aud_rede = 1 AND c.venda_cancelada = 0 THEN 1 ELSE 0 END) AS vendas_aprovadas,
                    SUM(CASE WHEN c.venda_cancelada = 1 THEN 1 ELSE 0 END) AS cancelamentos

                FROM contratos c
                JOIN vendedores v 
                    ON c.id_vendedor = v.Id                          -- garante vendedor válido
                LEFT JOIN equipes e 
                    ON v.equipe = e.Id
                LEFT JOIN operacoes o
                    ON c.id_operacao = o.Id                          -- traz o nome da operação

                WHERE c.id_vendedor IS NOT NULL
                AND c.data_hora_entrada BETWEEN ? AND ?

                GROUP BY 
                    v.Id, v.nome, e.supervisor, o.operacao

                ORDER BY qtd_vendas DESC;
                
[2026-08-13 17:27:39] Parâmetros: ["2026-08-01 00:00:00","2026-08-12 23:59:59"]
[2026-08-13 17:27:39] ✅ Query executada com sucesso — linhas retornadas: 12
