# Consultas prontas

## ⚡ CADA FONTE ONDE ELA É HONESTA (medido em 14/07/2026 — é a regra que salva o relógio)

A view **`AD_VGF_VENDAS`** é a verdade do dia, e é LENTA. A tabela **`CND_VGF_AD_VENDAS`** é
a consolidada: rápida, e **defasada em HOJE**.

| janela | fonte | tempo medido |
|---|---|---|
| **até ontem** (mês passado, últimos 7 dias, o mês até ontem) | **`CND_VGF_AD_VENDAS`** | **1,2 s** |
| **hoje** | **`AD_VGF_VENDAS`**, com `WHERE DATA = CAST(GETDATE() AS DATE)` | **1,7 s** |

**O número do passado é IDÊNTICO nas duas** (conferido: 25.561 = 25.561 m³) — usar a view
para o passado é pagar 6× mais pelo mesmo número. **Em HOJE elas divergem** (a CND dava
2.420 m³ contra 2.459 reais), então hoje é sempre a view.

**Junte as duas com `UNION ALL` numa CTE `base`** e agregue em cima. Uma agregação por
dimensão que varria a view no mês inteiro custava **10 a 24 segundos**; com o corte por
fonte, **1,8 s** — e uma tela que dispara 8 dessas em paralelo deixou de estourar o teto
de 30 s (dava 502 na cara da pessoa).
 — copie, troque a data, entregue
> QUANDO LER: **antes de escrever qualquer SQL.** Aqui tem a consulta pronta, já rodada e conferida — copie e troque a data.

**As três regras que valem para tudo o que está aqui:** data **sem hífen** (`'20260701'` — com hífen o SQL Server
em português lê ANO-DIA-MÊS) · esquema **`sankhya.`** sempre · formato da casa `WITH dados AS ( … ) SELECT * FROM dados`.
**Não reescreva do zero:** pegue a consulta mais parecida e ajuste o `WHERE`.

---

## 1. Volume e faturamento do mês, por aliança
*(a pergunta nº 1 de qualquer gerente)*

```sql
WITH dados AS (
    SELECT
        CODEMPALIANCA,
        CASE CODEMPALIANCA WHEN 1 THEN 'TopMix' WHEN 601 THEN 'BetMix'
                           WHEN 701 THEN 'SuperConcreto' ELSE 'Outras' END AS ALIANCA,
        SUM(QUANTIDADE)                                   AS M3,
        SUM(VALORTOTALSERVICO)                            AS FATURAMENTO,
        SANKHYA.AD_DIVIDE(SUM(VALORTOTALSERVICO), SUM(QUANTIDADE)) AS RS_POR_M3,
        SUM(MARGEMSERVICOTOTAL)                           AS MARGEM_RS,
        SANKHYA.AD_DIVIDE(SUM(MARGEMSERVICOTOTAL), SUM(QUANTIDADE)) AS MARGEM_POR_M3,
        SANKHYA.AD_DIVIDE(SUM(MCLV), SUM(QUANTIDADE))     AS MCLV_POR_M3
    FROM sankhya.CND_VGF_AD_VENDAS
    WHERE TIPODESERVICO = 'CONCRETO'
      AND CAST(DATA AS DATE) BETWEEN '20260601' AND '20260630'
    GROUP BY CODEMPALIANCA
)
SELECT * FROM dados ORDER BY M3 DESC;
```
**Confere (junho/2026):** TopMix 33.330 m³ / R$ 16.174.082,86 / R$ 485,27 por m³ · SuperConcreto
16.632 m³ / R$ 7.792.905,61 · BetMix 14.621 m³ / R$ 6.804.564,87. Total ≈ 64.583 m³ e R$ 30,77 mi.

---

## 2. Margem por m³ — com bomba e sem bomba
*(o jeito que a casa cobra: margem em R$/m³, nunca em %)*

```sql
WITH dados AS (
    SELECT
        CODEMPALIANCA,
        SUM(QUANTIDADE) AS M3,
        SUM(CASE WHEN TIPODESERVICO = 'CONCRETO' THEN MARGEMSERVICOTOTAL ELSE 0 END) AS MARGEM_CONCRETO,
        SUM(CASE WHEN TIPODESERVICO = 'BOMBAS'   THEN MARGEMSERVICOTOTAL ELSE 0 END) AS MARGEM_BOMBAS,
        SANKHYA.AD_DIVIDE(
            SUM(CASE WHEN TIPODESERVICO = 'CONCRETO' THEN MARGEMSERVICOTOTAL ELSE 0 END),
            SUM(QUANTIDADE))                                        AS MARGEM_M3_SEM_BOMBA,
        SANKHYA.AD_DIVIDE(
            SUM(CASE WHEN TIPODESERVICO IN ('CONCRETO','BOMBAS') THEN MARGEMSERVICOTOTAL ELSE 0 END),
            SUM(QUANTIDADE))                                        AS MARGEM_M3_COM_BOMBA
    FROM sankhya.CND_VGF_AD_VENDAS
    WHERE CAST(DATA AS DATE) BETWEEN '20260601' AND '20260630'
    GROUP BY CODEMPALIANCA
)
SELECT * FROM dados ORDER BY M3 DESC;
```
> Repare: **não filtro TIPODESERVICO no WHERE** (preciso das linhas de BOMBAS), e o m³ vem
> certo mesmo assim porque `QUANTIDADE` é NULL fora de CONCRETO.
**Confere (junho/26, TopMix):** R$ 207,05/m³ sem bomba · R$ 253,61/m³ com bomba.

---

## 3. Top clientes (grupo econômico) do período

```sql
WITH dados AS (
    SELECT
        NOMEGRUPOECONOMICO                                AS GRUPO,
        SUM(QUANTIDADE)                                   AS M3,
        SUM(VALORTOTALSERVICO)                            AS FATURAMENTO,
        SANKHYA.AD_DIVIDE(SUM(VALORTOTALSERVICO), SUM(QUANTIDADE)) AS RS_POR_M3,
        SANKHYA.AD_DIVIDE(SUM(MCLV), SUM(QUANTIDADE))     AS MCLV_POR_M3
    FROM sankhya.CND_VGF_AD_VENDAS
    WHERE TIPODESERVICO = 'CONCRETO'
      AND CAST(DATA AS DATE) BETWEEN '20260601' AND '20260630'
      -- AND CODEMPALIANCA = 1
    GROUP BY NOMEGRUPOECONOMICO
)
SELECT TOP 20 * FROM dados ORDER BY FATURAMENTO DESC;
```
**Confere (junho/26):** MRV 4.738 m³ / R$ 2,05 mi (R$ 431,95/m³) · Direcional 3.713 m³ / R$ 1,75 mi
(R$ 471,55/m³) · Infracon 1.768 m³ / R$ 836.200.
*Repare: MRV é o maior em volume e o mais barato em R$/m³ — é assim que se acha desconto de volume.*
Para cliente individual (não grupo), troque por `PARCEIRO` / `CLIENTE`.

---

## 4. Top obras do período

```sql
WITH dados AS (
    SELECT
        NOMEOBRA, PARCEIRO, CIDADEOBRA,
        SUM(QUANTIDADE)        AS M3,
        SUM(VALORTOTALSERVICO) AS FATURAMENTO,
        SANKHYA.AD_DIVIDE(SUM(MCLV), SUM(QUANTIDADE)) AS MCLV_POR_M3
    FROM sankhya.CND_VGF_AD_VENDAS
    WHERE TIPODESERVICO = 'CONCRETO'
      AND CAST(DATA AS DATE) BETWEEN '20260601' AND '20260630'
    GROUP BY NOMEOBRA, PARCEIRO, CIDADEOBRA
)
SELECT TOP 20 * FROM dados ORDER BY M3 DESC;
```
*Ordene por `MCLV_POR_M3` crescente e você acha **a obra que está saindo no prejuízo**.*

---

## 5. Por usina (e a produção emprestada entre alianças)

```sql
WITH dados AS (
    SELECT
        DESCRUSINA,
        NOMEPONTODECARGA,
        SUM(QUANTIDADE)        AS M3,
        SUM(VALORTOTALSERVICO) AS FATURAMENTO,
        SUM(CASE WHEN ALIUSINA <> CODEMPALIANCA THEN QUANTIDADE ELSE 0 END) AS M3_DE_OUTRA_ALIANCA
    FROM sankhya.CND_VGF_AD_VENDAS
    WHERE TIPODESERVICO = 'CONCRETO'
      AND CAST(DATA AS DATE) BETWEEN '20260601' AND '20260630'
    GROUP BY DESCRUSINA, NOMEPONTODECARGA
)
SELECT * FROM dados ORDER BY M3 DESC;
```
Para o quadro do dia já pronto, use `SELECT * FROM sankhya.AD_REL_DIARIO_VENDASPORUSINA`.

---

## 6. Mix de traço / FCK — onde está o preço

```sql
WITH dados AS (
    SELECT
        TIPOPRODUTO, FCK, NOMEPRODUTO,
        SUM(QUANTIDADE)        AS M3,
        SUM(VALORTOTALSERVICO) AS FATURAMENTO,
        SANKHYA.AD_DIVIDE(SUM(VALORTOTALSERVICO), SUM(QUANTIDADE)) AS RS_POR_M3,
        SANKHYA.AD_DIVIDE(SUM(MCCVIAGEM),         SUM(QUANTIDADE)) AS CUSTO_MCC_POR_M3
    FROM sankhya.CND_VGF_AD_VENDAS
    WHERE TIPODESERVICO = 'CONCRETO'
      AND CAST(DATA AS DATE) BETWEEN '20260601' AND '20260630'
    GROUP BY TIPOPRODUTO, FCK, NOMEPRODUTO
)
SELECT TOP 30 * FROM dados ORDER BY M3 DESC;
```
> **Comparar R$/m³ entre obras sem olhar o mix de traço engana:** FCK maior = mais cimento =
> mais caro. Uma obra "cara" pode ser só FCK alto.

---

## 7. Quanto saiu HOJE (o número ao vivo)

```sql
-- comercial (entregas faturadas), ao vivo — use a VIEW, não a CND
SELECT
    SUM(QUANTIDADE)        AS M3_HOJE,
    SUM(VALORTOTALSERVICO) AS FATURAMENTO_HOJE,
    SUM(CASE WHEN TIPODESERVICO='CONCRETO' THEN 1 ELSE 0 END) AS VIAGENS
FROM sankhya.AD_VGF_VENDAS
WHERE CAST(DATA AS DATE) = CAST(GETDATE() AS DATE);
```
```sql
-- operacional (caminhões que saíram), já pronto:
SELECT * FROM sankhya.AD_REL_DIARIO_VOLUMEDIA;       -- um número
SELECT * FROM sankhya.AD_REL_DIARIO_VENDASPORUSINA;  -- por usina x aliança
SELECT * FROM sankhya.AD_REL_DIARIO_MES;             -- mês até ontem, projeção, ano passado
SELECT * FROM sankhya.AD_REL_DIARIO_PROGAMANHA;      -- programado pra amanhã
```
Os dois primeiros contam coisas diferentes — leia o aviso em `sankhya-vendas.md`.

---

## 8. Programação de entrega — o que está agendado

```sql
WITH dados AS (
    SELECT
        C.DTPREVISTA,
        E.AD_CODEMPALIANCA AS ALIANCA,
        C.NOMEOBRA,
        I.HRPREVISTA,
        I.CODPROD,
        I.QTDNEG AS M3_PEDIDO,
        C.SITUACAO
    FROM sankhya.BH_CCTCAB C
    JOIN sankhya.BH_CCTITE I ON I.NUPEDIDO = C.NUPEDIDO
    JOIN sankhya.TSIEMP    E ON E.CODEMP  = C.CODEMP
    WHERE C.DTPREVISTA BETWEEN CAST(GETDATE() AS DATE) AND DATEADD(DAY, 2, CAST(GETDATE() AS DATE))
      AND C.SITUACAO <> 0            -- 0 = Cancelado
)
SELECT * FROM dados ORDER BY DTPREVISTA, HRPREVISTA;
```
Total já pronto pra amanhã: `SELECT * FROM sankhya.AD_REL_DIARIO_PROGAMANHA;`
(13/07/26 marcava 2.416,5 m³ — TopMix 1.535 · Super 577 · BetMix 304,5.)

---

## 9. Remessas — caminhões, incluindo os cancelados

```sql
WITH dados AS (
    SELECT
        R.BH_CCTSTATUSREM AS STATUS,
        CASE R.BH_CCTSTATUSREM
             WHEN 'F' THEN 'Finalizada' WHEN 'R' THEN 'Produzida'
             WHEN 'C' THEN 'Cancelada'  WHEN 'L' THEN 'Liberada'
             WHEN 'L2' THEN 'Liberada'  WHEN 'B' THEN 'Aguardando'
             WHEN 'P' THEN 'Pesagem Realizada' WHEN 'N' THEN 'NF Emitida'
             WHEN 'E' THEN 'Erro' END AS STATUS_NOME,
        COUNT(*)        AS CAMINHOES,
        SUM(R.QTDNEG)   AS M3
    FROM sankhya.BH_CCTREM R
    JOIN sankhya.BH_CCTCAB C ON C.NUPEDIDO = R.BH_CCTNUPEDIDO
    WHERE C.DTPREVISTA >= DATEADD(DAY, -30, CAST(GETDATE() AS DATE))
    GROUP BY R.BH_CCTSTATUSREM
)
SELECT * FROM dados ORDER BY CAMINHOES DESC;
```
**Volume entregue = só `F` e `R`.** Nos últimos 30 dias: 7.448 remessas finalizadas (59.511 m³)
e **858 canceladas (6.139,5 m³)** — somar as canceladas infla o número em ~10%.

---

## 10. Financeiro — títulos a receber vencidos

```sql
WITH dados AS (
    SELECT
        E.AD_CODEMPALIANCA AS ALIANCA,
        P.NOMEPARC         AS CLIENTE,
        F.NUFIN, F.DTVENC,
        DATEDIFF(DAY, F.DTVENC, GETDATE()) AS DIAS_ATRASO,
        F.VLRDESDOB        AS VALOR
    FROM sankhya.TGFFIN F
    JOIN sankhya.TSIEMP E ON E.CODEMP  = F.CODEMP
    JOIN sankhya.TGFPAR P ON P.CODPARC = F.CODPARC
    WHERE F.RECDESP  = 1          -- 1 = receita (a receber); -1 = despesa (a pagar)
      AND F.DHBAIXA IS NULL       -- em aberto (baixado = pago)
      AND F.PROVISAO = 'N'        -- 'S' = provisão, não é título de verdade
      AND F.DTVENC   < CAST(GETDATE() AS DATE)
)
SELECT * FROM dados ORDER BY VALOR DESC;
```
**Confere (13/07/2026, total vencido em aberto):** TopMix R$ 27,24 mi (1.564 títulos) ·
Super R$ 6,86 mi · São José R$ 3,17 mi · BetMix R$ 2,87 mi.
Troque `RECDESP = 1` por `-1` e você tem **contas a pagar vencidas**.

---

## 11. O resultado gerencial do mês (o "fechamento")

```sql
WITH dados AS (
    SELECT NOME, T AS VALOR_TOTAL, R AS VALOR_REAL
    FROM sankhya.AD_FECHAMENTO_GERAL_DADOS_TOPMIX
    WHERE MESANO = '20260601'
      AND CODEMPALIANCA = 1          -- 1 TopMix · 601 BetMix · 701 Super
)
SELECT * FROM dados ORDER BY ABS(VALOR_REAL) DESC;
```
Linhas (`NOME`): `FATURAMENTO`, `FATURAMENTO_CONCRETO`, `FATURAMENTO_BOMBAS`,
`FATURAMENTO_ADICIONAIS`, `DESPESAS_MCC` (+ `_MATERIAS`, `_FRETES`), `CUSTOS` (+ `_OPERACIONAL`,
`_MANUTENCAO`, `_DE_BOMBAS`), `DESPESAS` (+ `_ADM`, `_COMERCIAL`, `_TECNICO`),
`Depreciações_E_Equip`, e o bloco **Saroo** (`Faturamento_Saroo`, `Ebtida_Saroo`,
`Resultado_Final_Saroo`). Para a São José: `AD_FECHAMENTO_GERAL_DADOS_SAO_JOSE`.

**Use isto pra se auditar:** `FATURAMENTO_CONCRETO` de junho/26 (TopMix) = **R$ 16.174.082,86**,
que é exatamente o que a consulta nº 1 devolve. Se a sua soma não bater com essa linha, **o
errado é você**, não o fechamento.

---

## 12. São José (cimento) — volume, faturamento e margem

```sql
WITH dados AS (
    SELECT
        CONVERT(VARCHAR(7), DTENTSAI, 120) AS ANO_MES,
        SUM(QTDNEG)   AS SACOS,             -- JÁ vem em sacos. NÃO multiplique.
        SUM(VLRTOTAL) AS FATURAMENTO,
        SUM(CUSTO)    AS CUSTO,
        SUM(MARGEM)   AS MARGEM,
        SANKHYA.AD_DIVIDE(SUM(VLRTOTAL), SUM(QTDNEG)) AS RS_POR_SACO,
        SANKHYA.AD_DIVIDE(SUM(MARGEM),   SUM(QTDNEG)) AS MARGEM_POR_SACO
    FROM sankhya.AD_CND_VGFFAT
    WHERE CODEMP IN (201, 204)          -- as duas empresas da São José
      AND DTENTSAI >= '20260601' AND DTENTSAI < '20260701'
    GROUP BY CONVERT(VARCHAR(7), DTENTSAI, 120)
)
SELECT * FROM dados;
```
**Confere (junho/26):** 168.754 sacos · R$ 4.819.148,03 · margem R$ 425.046,48 → **R$ 28,56/saco**
e **R$ 2,52 de margem por saco**. Detalhe e a armadilha da tonelada: `sankhya-cimento.md`.

---

## Antes de entregar qualquer número

1. Rodou com **filtro de data**? 2. Filtrou **TIPODESERVICO** quando era volume?
3. A taxa (R$/m³) é **divisão de dois somatórios**, não soma de coluna unitária?
4. Bate com uma referência conhecida (o fechamento, a tela)? 5. Disse o **período** e a **aliança**?

---

## O que a casa aprendeu (com o uso)

*Sai do uso de verdade: o que um Nix descobriu sobre a empresa, conferido e reescrito, vale pra todos.*

- **`CND_VGF_AD_VENDAS` ABRE** (14/07/2026) e é a via rápida (0,2 s) — a `AD_VGF_VENDAS` (3 a 5 s) só se precisar do dado vivo do dia. A consolidada **não tem filtro de dono**: ponha o seu `CODEMP`/`CODEMPALIANCA` no `WHERE`.
- **Consistência entre consultas**: puxe árvore e série na mesma execução para evitar divergência por dados que entram entre rodadas. Blocos separados por minutos geram totais diferentes e o painel se desmente.
- **Programação de concreto por período/aliança:** use `BH_CCTITE` (DTPREVISTA, QTDNEG) com `BH_CCTCAB` (SITUACAO) e `TSIEMP` (AD_CODEMPALIANCA). Filtre pedidos ativos com `SITUACAO NOT IN (0, 7)` (0=pendente não confirmado, 7=faturado/entregue). Agrupe por AD_CODEMPALIANCA (1=TopMix, 601=BetMix, 701=Super).
- **Produção por aliança:** use a view `AD_REL_DIARIO_VENDASPORUSINA`. As colunas TOPMIX, BETMIX, SUPER e TOTAL já estão calculadas; basta aplicar `SUM()` sobre elas.


> ⚠️ **AS 5 CONSOLIDADAS ESTÃO ABERTAS — E SEM FILTRO DE DONO** (14/07/2026). `CND_VGF_AD_VENDAS`, `CND_VGF_AD_VENDAS_DIR`, `CND_VGF_AD_VENDAS_PREMIO`, `AD_CND_VGFFAT` e `AD_CND_FECHAMENTO_ALIANCAS` voltaram a abrir (medido: 0,03 a 0,2 s — são a via RÁPIDA, use-as). **Mas elas trazem a empresa TODA, inclusive a de quem não é você.** Filtre SEMPRE pelas suas empresas (`CODEMP`) ou pela sua aliança (`CODEMPALIANCA`) — veja "O QUE EU ALCANÇO" no `sankhya.md`. Número sem esse filtro é número de outra pessoa.
>
> ✅ **As FUNÇÕES do Sankhya funcionam** (`SANKHYA.AD_DIVIDE` e as outras 501) — liberadas em 14/07.
> Pode usá-las à vontade; a divisão na mão (`SUM(a)/NULLIF(SUM(b),0)`) também serve e é equivalente.

---

# ✅ MEDIDO NA CREDENCIAL DO GERENTE (14/07/2026) — use ESTES
*(cada SQL abaixo foi rodado com o login do próprio usuário e voltou)*

## CONCRETO (u001 — TopMix/BetMix/SuperConcreto)
## Quanto vendemos este mês? (m³ e faturamento)
**Vá direto em:** `sankhya.CND_VGF_AD_VENDAS` — a foto rápida (0,2 s, medido 14/07) — **com o seu `CODEMPALIANCA` no `WHERE`**, que ela não filtra sozinha. A `AD_VGF_VENDAS` (3,8 s) só para o dado do próprio dia.
```sql
WITH base AS (
  SELECT QUANTIDADE, VALORTOTALSERVICO, TIPODESERVICO
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA >= '20260701' AND DATA < '20260801'
),
dados AS (
  SELECT SUM(QUANTIDADE) AS M3,
         SUM(VALORTOTALSERVICO) AS FATURAMENTO,
         SUM(CASE WHEN TIPODESERVICO='CONCRETO'   THEN VALORTOTALSERVICO ELSE 0 END) AS CONCRETO,
         SUM(CASE WHEN TIPODESERVICO='BOMBAS'     THEN VALORTOTALSERVICO ELSE 0 END) AS BOMBA,
         SUM(CASE WHEN TIPODESERVICO='ADICIONAIS' THEN VALORTOTALSERVICO ELSE 0 END) AS ADICIONAIS,
         SUM(VALORTOTALSERVICO) / NULLIF(SUM(QUANTIDADE),0) AS RS_POR_M3
  FROM base
)
SELECT * FROM dados
```
**Conferido (01 a 14/07/2026, às 10h59, na credencial do u001):** 26.937,50 m³ · faturamento R$ 13.979.629,16 (concreto R$ 12.812.461,79 + bomba R$ 990.390,72 + adicionais R$ 176.776,64) · R$ 518,97 por m³.

**A chave de leitura (vale para todos os blocos):** cada linha é uma entrega e a coluna `TIPODESERVICO` diz o que ela é — `CONCRETO`, `BOMBAS`, `ADICIONAIS` ou `CARTAO`. **Só a linha `CONCRETO` tem m³**; as outras têm valor e não têm volume. Some tudo: os m³ vêm só de onde têm que vir. Como o u001 não enxerga a São José (201-204), o total já sai limpo, sem linha vazia.

⚠️ **A view é VIVA: o número cresce ao longo do dia.** Entre 10h47 e 10h59 o mês subiu de 26.888,00 para 26.937,50 m³. Isso é normal — não é erro de consulta.
⚠️ **Filtre sempre pela coluna `DATA`, nunca por `ANO`/`MES`.** As colunas `ANO`/`MES` servem para agrupar, não para filtrar.

## Quanto cada aliança faturou?
**Vá direto em:** `sankhya.AD_VGF_VENDAS` com `CODEMPALIANCA IN (1, 601, 701)` — 1 TopMix · 601 BetMix · 701 SuperConcreto · **tempo medido (na credencial dele): 4,5 s**
```sql
WITH base AS (
  SELECT CODEMPALIANCA, TIPODESERVICO, QUANTIDADE, VALORTOTALSERVICO
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA >= '20260701' AND DATA < '20260801'
    AND CODEMPALIANCA IN (1, 601, 701)
),
dados AS (
  SELECT CASE CODEMPALIANCA WHEN 1 THEN 'TopMix' WHEN 601 THEN 'BetMix' WHEN 701 THEN 'SuperConcreto' END AS ALIANCA,
         SUM(QUANTIDADE) AS M3,
         SUM(VALORTOTALSERVICO) AS FATURAMENTO,
         SUM(CASE WHEN TIPODESERVICO='CONCRETO'   THEN VALORTOTALSERVICO ELSE 0 END) AS CONCRETO,
         SUM(CASE WHEN TIPODESERVICO='BOMBAS'     THEN VALORTOTALSERVICO ELSE 0 END) AS BOMBA,
         SUM(CASE WHEN TIPODESERVICO='ADICIONAIS' THEN VALORTOTALSERVICO ELSE 0 END) AS ADICIONAIS,
         SUM(VALORTOTALSERVICO) / NULLIF(SUM(QUANTIDADE),0) AS RS_POR_M3
  FROM base
  GROUP BY CODEMPALIANCA
)
SELECT * FROM dados ORDER BY FATURAMENTO DESC
```
**Conferido (01 a 14/07/2026, às 11h00, na credencial do u001):** TopMix 13.132,00 m³ / R$ 7.082.520,00 (bomba R$ 588.472,50) → R$ 539,33 o m³ · SuperConcreto 6.926,00 m³ / R$ 3.466.276,00 (bomba R$ 189.604,00) → R$ 500,47 · BetMix 6.889,00 m³ / R$ 3.439.586,00 (bomba R$ 215.163,30) → R$ 499,25.

**Mês fechado, se a pergunta for "como foi junho por empresa":** `sankhya.AD_REL_MENSAL_FATURAMENTO_3MESES_ALIANCA` — o gerente **alcança** e ela responde em **0,8 s** (contra 4,5 s na view viva). Junho: TopMix R$ 17.947.620,25 · BetMix R$ 7.274.940,64 · SuperConcreto R$ 8.349.771,93 · Total R$ 33.572.332,82 · ano acumulado R$ 152.551.878,07. A irmã dela, `AD_REL_MENSAL_VLRTOTALM3_3MESES_ALIANCA` (**5,3 s**), dá o R$/m³: junho → TopMix R$ 538,58 · BetMix R$ 497,57 · SuperConcreto R$ 502,03 · geral R$ 519,88.
⚠️ As linhas dessas duas **não voltam em ordem** (vêm Mês -1, Mês -3, Mês -2, Ano) — leia pelo rótulo da coluna `PERIODO`, nunca pela posição. E elas **só falam de mês fechado**: o mês corrente não aparece nelas.

## Qual o R$/m³?
**Vá direto em:** `sankhya.CND_VGF_AD_VENDAS` (rápida, filtre a sua aliança) — preço médio é sempre **soma dividida por soma**: `SUM(VALORTOTALSERVICO) / NULLIF(SUM(QUANTIDADE), 0)`.
```sql
WITH base AS (
  SELECT ANO, MES, TIPODESERVICO, QUANTIDADE, VALORTOTALSERVICO
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA >= '20260601' AND DATA < '20260801'
),
dados AS (
  SELECT ANO, MES,
         SUM(QUANTIDADE) AS M3,
         SUM(VALORTOTALSERVICO) AS FATURAMENTO,
         SUM(VALORTOTALSERVICO) / NULLIF(SUM(QUANTIDADE),0) AS RS_M3_SERVICO_CHEIO,
         SUM(CASE WHEN TIPODESERVICO='CONCRETO' THEN VALORTOTALSERVICO ELSE 0 END)
           / NULLIF(SUM(QUANTIDADE),0) AS RS_M3_SO_CONCRETO
  FROM base
  GROUP BY ANO, MES
)
SELECT * FROM dados ORDER BY ANO, MES
```
**Conferido (junho e julho/2026, na credencial do u001):** junho fechado → 64.577,00 m³, R$ 33.572.332,82, **R$ 519,88 o m³ cheio** (só o concreto: R$ 476,47) · julho até o dia 14 → 26.904,50 m³, R$ 13.964.096,39, **R$ 519,02 cheio** (só concreto: R$ 475,64).

São **dois** R$/m³ e o gerente precisa saber qual está pedindo: o **cheio** (concreto + bomba + adicionais ÷ m³) e o **só concreto** (o preço do produto). A diferença é de uns R$ 43 por m³.
⚠️ `VALORVENDA` é **preço unitário do contrato** — somar isso não é faturamento nenhum. Faturamento é `VALORTOTALSERVICO`.
⚠️ Se quiser só o mês corrente, corte para um mês só: cai de 6,5 s para 3,8 s.

## Qual a margem por m³, com e sem bomba?
**Vá direto em:** `sankhya.AD_VGF_VENDAS` — a coluna `MARGEMSERVICOTOTAL` na linha `CONCRETO` já é (preço − custo do material) × m³ · **tempo medido (na credencial dele): 4,4 s**
```sql
WITH base AS (
  SELECT TIPODESERVICO, QUANTIDADE, VALORTOTALSERVICO, MARGEMSERVICOTOTAL, CUSTOOPERACIONALBOMBEADO
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA >= '20260701' AND DATA < '20260801'
),
tot AS (
  SELECT SUM(QUANTIDADE) AS M3,
         SUM(CASE WHEN TIPODESERVICO='CONCRETO' THEN MARGEMSERVICOTOTAL ELSE 0 END) AS MARGEM_CONCRETO,
         SUM(CASE WHEN TIPODESERVICO='BOMBAS' THEN VALORTOTALSERVICO ELSE 0 END) AS FAT_BOMBA,
         SUM(CASE WHEN TIPODESERVICO='BOMBAS' THEN CAST(CUSTOOPERACIONALBOMBEADO AS FLOAT) ELSE 0 END) AS CUSTO_BOMBA,
         SUM(CASE WHEN TIPODESERVICO='ADICIONAIS' THEN VALORTOTALSERVICO ELSE 0 END) AS ADICIONAIS
  FROM base
),
dados AS (
  SELECT M3, MARGEM_CONCRETO, FAT_BOMBA, CUSTO_BOMBA, ADICIONAIS,
         MARGEM_CONCRETO / NULLIF(M3,0) AS MARGEM_M3_SEM_BOMBA,
         (MARGEM_CONCRETO + (FAT_BOMBA - CUSTO_BOMBA) + ADICIONAIS) / NULLIF(M3,0) AS MARGEM_M3_COM_BOMBA
  FROM tot
)
SELECT * FROM dados
```
**Conferido (01 a 14/07/2026, na credencial do u001):** 26.915,50 m³ · margem do concreto R$ 5.403.648,38 → **R$ 200,76 por m³ (sem bomba)**. Somando bomba (receita R$ 990.390,72 − custo operacional R$ 715.864,00 = R$ 274.526,72) e adicionais (R$ 176.776,64) → **R$ 217,53 por m³ (com bomba)**.

Duas armadilhas dessa coluna: (1) nas linhas `BOMBAS` e `ADICIONAIS` o `MARGEMSERVICOTOTAL` vem **igual ao faturamento** — o custo não está descontado ali; o custo da bomba mora em `CUSTOOPERACIONALBOMBEADO` (é `money`, precisa do `CAST(... AS FLOAT)`). (2) É **margem de contribuição** (só desconta o material, o MCC), não é lucro — frete, usina e administração não entram.
⛔ **Não busque a margem na `AD_VGF_VENDAS_DIR`.** Ela responde igual em m³ e faturamento, mas a margem dela é **outra conta**: no mesmo julho deu R$ 221,30 por m³ contra R$ 200,77 na `AD_VGF_VENDAS` — R$ 20 por m³ de diferença. Para margem, só a `AD_VGF_VENDAS`.

## Quanto saiu hoje?
**Vá direto em:** `sankhya.AD_VGF_VENDAS` com `DATA = CAST(GETDATE() AS DATE)` — é a pergunta mais barata do caderno · **tempo medido (na credencial dele): 0,3 s**
```sql
WITH base AS (
  SELECT CODEMPALIANCA, QUANTIDADE, VALORTOTALSERVICO
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA = CAST(GETDATE() AS DATE)
    AND CODEMPALIANCA IN (1, 601, 701)
),
dados AS (
  SELECT CASE CODEMPALIANCA WHEN 1 THEN 'TopMix' WHEN 601 THEN 'BetMix' WHEN 701 THEN 'SuperConcreto' END AS ALIANCA,
         SUM(QUANTIDADE) AS M3_HOJE,
         SUM(VALORTOTALSERVICO) AS FATURAMENTO_HOJE
  FROM base
  GROUP BY CODEMPALIANCA
)
SELECT * FROM dados ORDER BY M3_HOJE DESC
```
**Conferido (14/07/2026, 10h50, na credencial do u001):** TopMix 616,00 m³ / R$ 310.768,55 · SuperConcreto 375,00 m³ / R$ 175.481,38 · BetMix 336,50 m³ / R$ 150.843,85 — total do dia 1.327,50 m³.

Como o gerente não tem a foto `CND_`, aqui ele **ganha**: a view viva já traz o dia por inteiro, sem atraso nenhum.

## Estamos melhor que o mês passado?
**Vá direto em:** `sankhya.AD_VGF_VENDAS` — comparação honesta é **pedaço contra pedaço**; peça ao banco só os dois pedaços, não os dois meses inteiros · **tempo medido (na credencial dele): 5,3 s**
```sql
WITH base AS (
  SELECT MES, QUANTIDADE, VALORTOTALSERVICO
  FROM sankhya.AD_VGF_VENDAS
  WHERE (DATA >= '20260601' AND DATA < '20260615')
     OR (DATA >= '20260701' AND DATA < '20260801')
),
dados AS (
  SELECT SUM(CASE WHEN MES=7 THEN VALORTOTALSERVICO ELSE 0 END) AS FAT_ATUAL,
         SUM(CASE WHEN MES=7 THEN QUANTIDADE ELSE 0 END)        AS M3_ATUAL,
         SUM(CASE WHEN MES=6 THEN VALORTOTALSERVICO ELSE 0 END) AS FAT_PASSADO_MESMO_PEDACO,
         SUM(CASE WHEN MES=6 THEN QUANTIDADE ELSE 0 END)        AS M3_PASSADO_MESMO_PEDACO
  FROM base
)
SELECT *,
       100.0*(FAT_ATUAL-FAT_PASSADO_MESMO_PEDACO)/NULLIF(FAT_PASSADO_MESMO_PEDACO,0) AS VAR_PCT_FAT,
       100.0*(M3_ATUAL -M3_PASSADO_MESMO_PEDACO )/NULLIF(M3_PASSADO_MESMO_PEDACO,0)  AS VAR_PCT_M3
FROM dados
```
**Conferido (julho até o dia 14 contra junho até o dia 14, na credencial do u001):** R$ 13.969.311,16 contra R$ 15.266.134,06 → **-8,5%**. Em volume: 26.915,50 m³ contra 29.387,50 m³ → **-8,4%**. Junho fechado inteiro: R$ 33.572.332,82 e 64.577,00 m³ (isso vem de graça na `AD_REL_MENSAL_FATURAMENTO_3MESES_ALIANCA`, em 0,8 s).

⚠️ Comparar o mês pela metade com o mês passado **inteiro** dá um "caímos 58%" que é mentira. Ou compara pedaço com pedaço, ou usa a projeção do bloco abaixo.
⚠️ O dia de hoje ainda está correndo: são 13 dias cheios + o dia pela metade contra 14 dias cheios de junho. A queda real é um pouco menor que os -8,5%.
⚠️ **Recorte o pedaço no `WHERE`, não só no `CASE`.** A mesma pergunta puxando junho inteiro (`DATA >= '20260601' AND DATA < '20260801'`) e filtrando `DIA <= 14` no `CASE` custa **9,2 s** — quase o dobro. Dando as duas janelas no `WHERE`, são 5,3 s.

## Projeção do mês
**Vá direto em:** `sankhya.AD_VGF_VENDAS` — ela traz `DIASCORRIDONOMES` (dias de trabalho já rodados) e `TOTALDIASMES`, que é a régua da casa · **tempo medido (na credencial dele): 4,8 s**
```sql
WITH base AS (
  SELECT QUANTIDADE, VALORTOTALSERVICO, DIASCORRIDONOMES, TOTALDIASMES
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA >= '20260701' AND DATA < '20260801'
),
tot AS (
  SELECT SUM(VALORTOTALSERVICO) AS FAT_ATE_AGORA,
         SUM(QUANTIDADE)        AS M3_ATE_AGORA,
         MAX(DIASCORRIDONOMES)  AS DIAS_RODADOS,
         MAX(TOTALDIASMES)      AS DIAS_DO_MES
  FROM base
),
dados AS (
  SELECT FAT_ATE_AGORA, M3_ATE_AGORA, DIAS_RODADOS, DIAS_DO_MES,
         FAT_ATE_AGORA / NULLIF(DIAS_RODADOS,0) * DIAS_DO_MES AS PROJECAO_FATURAMENTO,
         M3_ATE_AGORA  / NULLIF(DIAS_RODADOS,0) * DIAS_DO_MES AS PROJECAO_M3
  FROM tot
)
SELECT * FROM dados
```
**Conferido (01 a 14/07/2026, na credencial do u001):** R$ 13.969.311,16 em **10,50 dias rodados** de um mês de **24,00 dias** → **projeção R$ 31.929.854,08 e 61.521,14 m³**. Junho fechou em R$ 33.572.332,82 e 64.577,00 m³ — no ritmo de hoje, julho fecha uns 5% abaixo de junho.

O dia não conta 1 por 1: sábado vale 0,25 na conta da casa (por isso "10,50 dias"). Quem inventa a projeção dividindo por dia do calendário erra o alvo.

## Maiores clientes
**Vá direto em:** `sankhya.AD_VGF_VENDAS` agrupando por `NOMEGRUPOECONOMICO` — é o grupo econômico (junta as várias filiais do mesmo cliente) · **tempo medido (na credencial dele): 3,9 s**
```sql
WITH base AS (
  SELECT NOMEGRUPOECONOMICO, QUANTIDADE, VALORTOTALSERVICO
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA >= '20260701' AND DATA < '20260801'
),
dados AS (
  SELECT NOMEGRUPOECONOMICO,
         SUM(QUANTIDADE) AS M3,
         SUM(VALORTOTALSERVICO) AS FATURAMENTO,
         SUM(VALORTOTALSERVICO) / NULLIF(SUM(QUANTIDADE),0) AS RS_POR_M3
  FROM base
  GROUP BY NOMEGRUPOECONOMICO
)
SELECT TOP 10 * FROM dados ORDER BY FATURAMENTO DESC
```
**Conferido (01 a 14/07/2026, na credencial do u001):** Direcional Engenharia 1.610,50 m³ / R$ 839.894,98 (R$ 521,51) · MRV 1.556,00 m³ / R$ 751.871,51 (R$ 483,21) · WEG 891,00 m³ / R$ 489.959,80 (R$ 549,90) · Infracon 819,00 m³ / R$ 387.822,00 (R$ 473,53) · FRJR Empreendimentos 480,00 m³ / R$ 258.508,00 (R$ 538,56).

⚠️ **O `TOP` vai no `SELECT` final, junto do `ORDER BY`.** Se você puser `SELECT TOP 10 … GROUP BY` dentro do `dados` sem ordenar ali, o SQL Server devolve 10 clientes **quaisquer** — e o gerente lê aquilo como se fosse o ranking.
⚠️ Se quiser por CNPJ e não por grupo, troque para `PARCEIRO`. Mas peça **só as colunas que vai usar**: cada coluna a mais custa join na view.

## Maiores obras
**Vá direto em:** `sankhya.AD_VGF_VENDAS` agrupando por `NOMEOBRA` + `CIDADEOBRA` — obra é o endereço da entrega, não o cliente · **tempo medido (na credencial dele): 4,0 s**
```sql
WITH base AS (
  SELECT NOMEOBRA, CIDADEOBRA, QUANTIDADE, VALORTOTALSERVICO
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA >= '20260701' AND DATA < '20260801'
),
dados AS (
  SELECT NOMEOBRA, CIDADEOBRA,
         SUM(QUANTIDADE) AS M3,
         SUM(VALORTOTALSERVICO) AS FATURAMENTO,
         SUM(VALORTOTALSERVICO) / NULLIF(SUM(QUANTIDADE),0) AS RS_POR_M3
  FROM base
  GROUP BY NOMEOBRA, CIDADEOBRA
)
SELECT TOP 10 * FROM dados ORDER BY M3 DESC
```
**Conferido (01 a 14/07/2026, na credencial do u001):** WEG-Betim (Betim) 891,00 m³ / R$ 489.959,80 · Obra 647 CB (Contagem) 838,00 m³ / R$ 426.969,00 · 570-Consórcio (Belo Horizonte) 819,00 m³ / R$ 387.822,00 · Federação do Comércio (Belo Horizonte) 458,00 m³ / R$ 240.174,00 · Inova Parque (Contagem) 383,00 m³ / R$ 201.903,00.

O nome da obra é campo digitado — a mesma obra pode aparecer com grafias diferentes. Por isso agrupo com a cidade junto: ajuda a enxergar quando duas linhas parecidas são a mesma coisa.

## Por usina
**Vá direto em:** `sankhya.AD_VGF_VENDAS` agrupando por `DESCRUSINA`, **com o filtro de aliança junto** · **tempo medido (na credencial dele): 7,6 s**
```sql
WITH base AS (
  SELECT DESCRUSINA, TIPODESERVICO, QUANTIDADE, VALORTOTALSERVICO, MARGEMSERVICOTOTAL
  FROM sankhya.AD_VGF_VENDAS
  WHERE DATA >= '20260701' AND DATA < '20260801'
    AND CODEMPALIANCA IN (1, 601, 701)
),
dados AS (
  SELECT DESCRUSINA,
         SUM(QUANTIDADE) AS M3,
         SUM(VALORTOTALSERVICO) AS FATURAMENTO,
         SUM(VALORTOTALSERVICO) / NULLIF(SUM(QUANTIDADE),0) AS RS_POR_M3,
         SUM(CASE WHEN TIPODESERVICO='CONCRETO' THEN MARGEMSERVICOTOTAL ELSE 0 END)
           / NULLIF(SUM(QUANTIDADE),0) AS MARGEM_POR_M3
  FROM base
  GROUP BY DESCRUSINA
)
SELECT * FROM dados ORDER BY M3 DESC
```
**Conferido (01 a 14/07/2026, na credencial do u001):** TopMix-040 11.027,00 m³ / R$ 5.956.640,00 (R$ 540 o m³ · margem R$ 200) · BetMix-Betim 5.404,00 m³ / R$ 2.679.501,00 (R$ 495 · margem R$ 164) · TopMix-SJL 3.851,00 m³ / R$ 1.984.834,00 (R$ 515 · margem R$ 219) · Super Concreto 2.762,00 m³ / R$ 1.371.997,00 (R$ 496 · margem R$ 225) · TopMix-Lote 2.228,00 m³ / R$ 1.137.401,00 (R$ 510 · margem R$ 229) · BetMix-Igarapé 1.064,00 m³ / R$ 561.525,00 (R$ 527 · margem R$ 174) · Super-Betim 599,00 m³ / R$ 287.728,00 (R$ 480 · margem R$ 233). São **7 usinas** no mês.

⚠️ **É a consulta mais cara da frente (7,6 s).** Sem o `AND CODEMPALIANCA IN (1, 601, 701)` ela passa de **10 s** — o filtro de aliança, que parece redundante (o gerente já só enxerga essas três), corta 2,5 s. Se o gerente não pediu margem, tire a coluna `MARGEM_POR_M3`: cai para ~8 s.
⚠️ Aparece uma linha com `DESCRUSINA` **em branco** e m³ vazio (são as linhas sem usina amarrada). Ignore-a — ela não tem volume nem valor.

---

## ⛔ Os becos sem saída da mão do gerente (isto também é conhecimento)

⚠️ **AS 5 CONSOLIDADAS ESTÃO ABERTAS — E SEM FILTRO DE DONO** (14/07/2026). `CND_VGF_AD_VENDAS`, `CND_VGF_AD_VENDAS_DIR`, `CND_VGF_AD_VENDAS_PREMIO`, `AD_CND_VGFFAT` e `AD_CND_FECHAMENTO_ALIANCAS` voltaram a abrir (medido: 0,03 a 0,2 s — são a via RÁPIDA, use-as). **Mas elas trazem a empresa TODA, inclusive a de quem não é você.** Filtre SEMPRE pelas suas empresas (`CODEMP`) ou pela sua aliança (`CODEMPALIANCA`) — veja "O QUE EU ALCANÇO" no `sankhya.md`. Número sem esse filtro é número de outra pessoa. **A pessoa espera na frente da tela: nunca mande duas consultas quando uma responde.**

✅ **`SANKHYA.AD_DIVIDE(a,b)` está LIBERADA** (14/07/2026 — o GRANT saiu; 0,15 s medido). Ainda assim, prefira dividir na mão, protegendo o zero: `SUM(VALORTOTALSERVICO) / NULLIF(SUM(QUANTIDADE), 0)` — dá o mesmo número e não depende de permissão nenhuma.

⛔ **NUNCA faça `SELECT *` nem traga linha a linha da `AD_VGF_VENDAS` — nem com `TOP 1`.** Medido: `SELECT TOP 1 *` filtrando **um único dia** **estourou os 30 s** e foi cortado; `SELECT TOP 5 *` do dia de hoje, idem (31,5 s). A mesma janela **agregada** (`SUM`, colunas nomeadas) responde em **0,3 s**. O vilão não é a data — é o `*`: a view tem 123 colunas e pedir todas obriga o banco a montar **todos** os joins. **Peça só as colunas que entram na conta.**

⛔ **NUNCA rode a `AD_VGF_VENDAS` sem filtro de data.** Sem `WHERE DATA`, ela varre tudo e estoura o teto de 30 s.

⚠️ **`sankhya.AD_VGF_VENDAS_DIR` (o gerente alcança, 4,6 s) bate em m³ e faturamento, mas NÃO bate em margem.** Julho: mesmos 26.927,50 m³, mas margem de R$ 221,30/m³ contra R$ 200,77/m³ na `AD_VGF_VENDAS`. Ela não é atalho para nada — não use.

⚠️ **`sankhya.AD_PIVOCARDVENDAS` (o gerente alcança, 7,7 s) responde tudo de uma vez** — uma linha por aliança com m³ e faturamento do mês atual, do mês anterior e do ano. Só vale quando o gerente pede **o painel inteiro**; para uma pergunta só, sai caro. E ela **para em ontem**: quem responder "quanto vendemos este mês" por ela deixa o dia de hoje de fora.

⚠️ **`sankhya.VGF_VENDAS_CARD` (3,1 s) também para em ontem.** Mesmo problema.

**As duas fontes rápidas que sobraram para o gerente:** `AD_REL_MENSAL_FATURAMENTO_3MESES_ALIANCA` (**0,8 s**, faturamento dos 3 meses fechados + ano) e `AD_REL_MENSAL_VLRTOTALM3_3MESES_ALIANCA` (**5,3 s**, o R$/m³ nos mesmos moldes). Use-as sempre que a pergunta for de **mês fechado**; o mês corrente não mora nelas.

## FINANCEIRO e PROGRAMAÇÃO
## Quanto tenho a receber?
**Vá direto em:** `sankhya.TGFFIN` — parcelas em aberto: `RECDESP = 1` + `PROVISAO = 'N'` + `DHBAIXA IS NULL`; e separe cliente de fora de empresa do grupo, senão o número incha · **só o u002 alcança** · **tempo medido (credencial do u002): 0,4 s**
```sql
WITH grupo AS (
    SELECT DISTINCT CODPARC FROM sankhya.TSIEMP WHERE CODPARC > 0
),
dados AS (
    SELECT
        CASE WHEN G.CODPARC IS NULL THEN 'CLIENTE DE FORA' ELSE 'EMPRESA DO GRUPO' END AS QUEM_DEVE,
        COUNT(*)         AS TITULOS,
        SUM(F.VLRDESDOB) AS TOTAL_A_RECEBER,
        SUM(CASE WHEN F.DTVENC <  CAST(GETDATE() AS DATE) THEN F.VLRDESDOB ELSE 0 END) AS VENCIDO,
        SUM(CASE WHEN F.DTVENC >= CAST(GETDATE() AS DATE) THEN F.VLRDESDOB ELSE 0 END) AS A_VENCER
    FROM sankhya.TGFFIN F
    LEFT JOIN grupo G ON G.CODPARC = F.CODPARC
    WHERE F.RECDESP  = 1
      AND F.PROVISAO = 'N'
      AND F.DHBAIXA IS NULL
    GROUP BY CASE WHEN G.CODPARC IS NULL THEN 'CLIENTE DE FORA' ELSE 'EMPRESA DO GRUPO' END
)
SELECT * FROM dados ORDER BY TOTAL_A_RECEBER DESC
```
**Conferido (14/07/2026, na credencial do u002):** São José tem **R$ 4.519.574,75** em aberto (2.052 títulos) — cliente de fora R$ 4.235.685,89 (2.003 títulos; R$ 2.802.765,96 já vencidos, R$ 1.432.919,93 a vencer) e empresa do grupo R$ 283.888,86 (49 títulos, R$ 282.225,46 vencidos). Por empresa: 201 = R$ 4.514.602,02 (2.046 títulos) · 202 = R$ 4.972,73 (6 títulos).
⚠️ O número é menor que o do admin porque o u002 **não alcança as empresas 203 e 204** — e está certo assim: a casa dele é 201/202.
⚠️ A carteira anda todo dia: os valores acima são o retrato de 14/07/2026, não uma constante.

---

## ⛔ "Quanto tenho a receber / o que está vencido / quanto entrou" — o u001 NÃO alcança (e a consulta MENTE em vez de dar erro)
A trava do banco bloqueia `RECDESP = 1` para o u001 (`seg.BLOQUEIO`, modo B), **com uma única exceção: títulos de ADIANTAMENTO (`CODTIPOPER` 4101/4102)**. Resultado: a consulta de "a receber" **roda, não dá erro, e devolve um número bonito e falso**.
**Medido (14/07/2026, na credencial do u001):** o "a receber" volta como R$ 24.744.184,50 (359 títulos) — TopMix R$ 18.586.593,54 · SuperConcreto R$ 5.374.477,08 · BetMix R$ 783.113,88. Quebrando por tipo de operação: **356 títulos do 4101 (R$ 21.664.184,50) + 3 do 4102 (R$ 3.080.000,00) — 100% adiantamento**, nada de carteira de recebíveis. O mesmo vale para "quanto entrou": em julho/2026 volta R$ 6.858.942,66 em 625 baixas — só adiantamento, não é o caixa do mês.
**O que o Nix do concreto deve fazer:** não responder com número. Dizer que **contas a receber, inadimplência e entrada de caixa estão fora do alcance dele** — é desenho da casa, não defeito. Se ele quiser tamanho de negócio, use faturamento (bloco de vendas) ou o resultado do mês (abaixo), que ele alcança.

---

## O que está vencido, e quanto de atraso?
**Vá direto em:** `sankhya.TGFFIN` com `DTVENC < hoje`, faixa por `DATEDIFF` · **só o u002 alcança** · **tempo medido (u002): 0,4 s**
```sql
WITH dados AS (
    SELECT
        CASE
            WHEN DATEDIFF(DAY, F.DTVENC, GETDATE()) <= 30  THEN '1 ate 30 dias'
            WHEN DATEDIFF(DAY, F.DTVENC, GETDATE()) <= 90  THEN '2 de 31 a 90'
            WHEN DATEDIFF(DAY, F.DTVENC, GETDATE()) <= 365 THEN '3 de 91 a 365'
            ELSE '4 mais de 1 ano'
        END                       AS FAIXA_DE_ATRASO,
        COUNT(*)                  AS TITULOS,
        COUNT(DISTINCT F.CODPARC) AS CLIENTES,
        SUM(F.VLRDESDOB)          AS VENCIDO
    FROM sankhya.TGFFIN F
    WHERE F.RECDESP = 1 AND F.PROVISAO = 'N' AND F.DHBAIXA IS NULL
      AND F.DTVENC < CAST(GETDATE() AS DATE)
    GROUP BY
        CASE
            WHEN DATEDIFF(DAY, F.DTVENC, GETDATE()) <= 30  THEN '1 ate 30 dias'
            WHEN DATEDIFF(DAY, F.DTVENC, GETDATE()) <= 90  THEN '2 de 31 a 90'
            WHEN DATEDIFF(DAY, F.DTVENC, GETDATE()) <= 365 THEN '3 de 91 a 365'
            ELSE '4 mais de 1 ano'
        END
)
SELECT * FROM dados ORDER BY FAIXA_DE_ATRASO
```
**Conferido (14/07/2026, na credencial do u002):** vencido total **R$ 3.084.991,42**. Até 30 dias R$ 123.761,57 (96 títulos, 58 clientes) · 31 a 90 R$ 252.967,18 (78 / 40) · **91 a 365 dias R$ 2.234.257,73 (719 títulos, 146 clientes — é aqui que mora o problema)** · mais de 1 ano R$ 474.004,94 (184 / 64).

**E "de quem" (só cliente de fora):** · **tempo medido (u002): 0,5 s**
```sql
WITH grupo AS (
    SELECT DISTINCT CODPARC FROM sankhya.TSIEMP WHERE CODPARC > 0
),
dados AS (
    SELECT
        F.CODPARC,
        P.NOMEPARC                              AS CLIENTE,
        COUNT(*)                                AS TITULOS,
        SUM(F.VLRDESDOB)                        AS VENCIDO,
        MAX(DATEDIFF(DAY, F.DTVENC, GETDATE())) AS MAIOR_ATRASO_DIAS
    FROM sankhya.TGFFIN F
    JOIN sankhya.TGFPAR P ON P.CODPARC = F.CODPARC
    WHERE F.RECDESP = 1 AND F.PROVISAO = 'N' AND F.DHBAIXA IS NULL
      AND F.DTVENC < CAST(GETDATE() AS DATE)
      AND F.CODPARC NOT IN (SELECT CODPARC FROM grupo)
    GROUP BY F.CODPARC, P.NOMEPARC
)
SELECT TOP 20 * FROM dados ORDER BY VENCIDO DESC
```
**Conferido (14/07/2026, na credencial do u002):** 258 devedores de fora, 1.030 títulos, R$ 2.802.765,96 vencidos; o maior sozinho deve R$ 181.405,60 em 39 títulos, com 378 dias de atraso. `TGFPAR` é alcançável pelo gerente (o join não é negado).
⚠️ O `TOP` vai no `SELECT` de fora, nunca dentro do CTE.

---

## Quanto entrou este mês?
**Vá direto em:** `sankhya.TGFFIN` pela **data da baixa** (`DHBAIXA`) somando **`VLRBAIXA`** — `VLRDESDOB` é o valor da parcela, não o recebido · **só o u002 alcança** · **tempo medido (u002): 0,4 s**
```sql
WITH grupo AS (
    SELECT DISTINCT CODPARC FROM sankhya.TSIEMP WHERE CODPARC > 0
),
dados AS (
    SELECT
        SUM(CASE WHEN G.CODPARC IS NULL THEN F.VLRBAIXA ELSE 0 END) AS ENTROU_DE_CLIENTE,
        SUM(CASE WHEN G.CODPARC IS NULL THEN 0 ELSE F.VLRBAIXA END) AS ENTROU_DO_GRUPO,
        SUM(F.VLRBAIXA)                                             AS ENTROU_TOTAL,
        COUNT(*)                                                    AS BAIXAS
    FROM sankhya.TGFFIN F
    LEFT JOIN grupo G ON G.CODPARC = F.CODPARC
    WHERE F.RECDESP = 1 AND F.PROVISAO = 'N'
      AND F.DHBAIXA >= '20260701' AND F.DHBAIXA < '20260801'
)
SELECT * FROM dados
```
**Conferido (julho/2026 até o dia 14, na credencial do u002):** entraram **R$ 2.471.706,08** em 2.031 baixas — **100% de cliente de fora** (nada de empresa do grupo).

**Por onde entrou:** · **tempo medido (u002): 0,8 s**
```sql
WITH dados AS (
    SELECT
        CT.DESCRICAO    AS CONTA_OU_CAIXA,
        COUNT(*)        AS BAIXAS,
        SUM(F.VLRBAIXA) AS ENTROU
    FROM sankhya.TGFFIN F
    LEFT JOIN sankhya.TSICTA CT ON CT.CODCTABCOINT = F.CODCTABCOINT
    WHERE F.RECDESP = 1 AND F.PROVISAO = 'N'
      AND F.DHBAIXA >= '20260701' AND F.DHBAIXA < '20260801'
    GROUP BY CT.DESCRICAO
)
SELECT TOP 10 * FROM dados ORDER BY ENTROU DESC
```
**Conferido (julho/2026, na credencial do u002):** Santander R$ 1.662.388,53 (1.157 baixas) · Caixa Cartão de Crédito R$ 84.763,24 (465) · caixa de acertos da São José R$ 35.534,02 (20) · o resto são contas-caixa de loja e de acerto, com valores miúdos (R$ 20 mil a R$ 51 mil cada). `TSICTA` é alcançável.
⚠️ Várias contas-caixa têm nome de pessoa na descrição — ao responder, agrupe como "caixa de loja/acerto" em vez de repetir o nome.

---

## Quanto tenho a pagar (e o que vence esta semana)?
**Vá direto em:** a mesma `sankhya.TGFFIN`, com `RECDESP = -1` — **os DOIS alcançam** (o bloqueio do u001 é só no `RECDESP = 1`) · **tempo medido: u001 0,7 a 0,9 s · u002 0,5 s**
```sql
WITH dados AS (
    SELECT
        E.AD_CODEMPALIANCA AS ALIANCA,
        COUNT(*)           AS TITULOS,
        SUM(F.VLRDESDOB)   AS TOTAL_A_PAGAR,
        SUM(CASE WHEN F.DTVENC <  CAST(GETDATE() AS DATE) THEN F.VLRDESDOB ELSE 0 END) AS VENCIDO,
        SUM(CASE WHEN F.DTVENC >= CAST(GETDATE() AS DATE)
                  AND F.DTVENC <  DATEADD(DAY, 7, CAST(GETDATE() AS DATE))
                 THEN F.VLRDESDOB ELSE 0 END) AS VENCE_EM_7_DIAS
    FROM sankhya.TGFFIN F
    JOIN sankhya.TSIEMP E ON E.CODEMP = F.CODEMP
    WHERE F.RECDESP  = -1
      AND F.PROVISAO = 'N'
      AND F.DHBAIXA IS NULL
    GROUP BY E.AD_CODEMPALIANCA
)
SELECT * FROM dados ORDER BY TOTAL_A_PAGAR DESC
```
**Conferido (14/07/2026, na credencial do u001):** TopMix R$ 139.732.513,09 (8.396 títulos; R$ 25.361.563,18 vencidos; R$ 2.009.159,67 vencem em 7 dias) · SuperConcreto R$ 16.884.021,75 (3.282 títulos; vencido R$ 1.673.472,85; 7 dias R$ 685.119,31) · BetMix R$ 9.525.054,32 (2.609 títulos; vencido R$ 1.928.912,97; 7 dias R$ 722.843,25).
**Conferido (14/07/2026, na credencial do u002):** São José R$ 6.076.307,24 (2.824 títulos; **R$ 3.235.305,78 vencidos** — mais da metade; R$ 304.625,44 vencem em 7 dias). Sai só a aliança 201 — a 202 não tem título a pagar em aberto.
⚠️ O u001 tem **26 centros de resultado bloqueados** (todos de *Distribuição de Lucros*). Os títulos desses centros não aparecem para ele — por isso o total dele fica **abaixo** do que o admin vê: o vencido da TopMix dá **R$ 25.361.563,18 para ele contra R$ 29.484.624,61 no admin** (medido lado a lado hoje). **Não é erro, é a trava.** Nunca prometa "bate com o financeiro".

---

## Quanto cada centro de resultado gastou no mês?
**Vá direto em:** `sankhya.TGFFIN` + `sankhya.TSICUS` — gasto **pago** = `RECDESP = -1` com `DHBAIXA` dentro do mês, somando `VLRBAIXA` — **os DOIS alcançam** · **tempo medido: u001 1,8 a 2,1 s (é a consulta mais pesada da frente) · u002 0,7 s**
```sql
WITH dados AS (
    SELECT
        C.CODCENCUS,
        C.DESCRCENCUS   AS CENTRO_DE_RESULTADO,
        COUNT(*)        AS TITULOS,
        SUM(F.VLRBAIXA) AS PAGO_NO_MES
    FROM sankhya.TGFFIN F
    JOIN sankhya.TSICUS C ON C.CODCENCUS = F.CODCENCUS
    WHERE F.RECDESP  = -1
      AND F.PROVISAO = 'N'
      AND F.DHBAIXA >= '20260601' AND F.DHBAIXA < '20260701'
    GROUP BY C.CODCENCUS, C.DESCRCENCUS
)
SELECT TOP 15 * FROM dados ORDER BY PAGO_NO_MES DESC
```
**Conferido (junho/2026, na credencial do u001):** R$ 58.387.505,93 pagos em 10.860 títulos, 290 centros. CR Sankhya R$ 16.677.668,30 · Compra de Equipamentos Imobilizados R$ 11.966.155,68 · **MCC R$ 9.001.726,94** · BETMIX MCC R$ 3.119.646,70 · SUPER MCC R$ 2.562.816,21 · Compra de Combustível R$ 1.534.472,06 · Fretes de MCC R$ 885.890,25.
**Conferido (junho/2026, na credencial do u002):** R$ 6.547.287,14 em 3.544 títulos, 48 centros. Compra p/ Revenda R$ 2.771.733,98 · CR Sankhya R$ 2.512.544,21 · Motoristas terceirizados/RPA R$ 415.853,09 · COFINS R$ 159.900,37.
⚠️ "CR Sankhya" (900000000) é o centro guarda-chuva do que não foi classificado — **nunca apresente como se fosse uma área**.
⚠️ Os centros de *Distribuição de Lucros* **não existem** para o u001 (trava). Se ele perguntar "quanto saiu de lucro distribuído", a resposta é: fora do alcance.

**Folha por centro** (quanto de gente custa cada área) — **os DOIS alcançam** · **tempo medido: 0,6 s no u001 · 0,5 s no u002**
```sql
WITH dados AS (
    SELECT
        CODEMPALIANCA_CR        AS ALIANCA,
        CENTRORESULTADO         AS CENTRO_DE_RESULTADO,
        COUNT(DISTINCT CODFUNC) AS PESSOAS,
        SUM(TOTALCUSTOFOLHA)    AS CUSTO_FOLHA,
        SUM(HORASEXTRAS)        AS HORAS_EXTRAS_RS
    FROM sankhya.AD_CND_VGF_DP
    WHERE DATA >= '20260601' AND DATA < '20260701'
      AND CODEMPALIANCA_CR IN (1, 601, 701)
    GROUP BY CODEMPALIANCA_CR, CENTRORESULTADO
)
SELECT TOP 10 * FROM dados ORDER BY CUSTO_FOLHA DESC
```
**Conferido (junho/2026, na credencial do u001):** Operacional DP (TopMix) 105 pessoas, R$ 906.328,40 (R$ 110.420,39 de hora extra) · Bombas DP 83 pessoas, R$ 691.454,30 (**R$ 116.553,50 de hora extra — mais que a Operacional, com 22 pessoas a menos**) · SUPER Operacional DP 54 pessoas, R$ 423.249,31 · BETMIX Operacional DP 50 pessoas, R$ 364.872,56 · Manutenção DP 38 pessoas, R$ 318.457,15.
**Para o u002, troque o filtro para `CODEMPALIANCA_CR = 201`:** 82 pessoas, custo de folha R$ 270.807,15 em junho/2026 — Comercial R$ 100.790,64 (14 pessoas) · Logístico Armazenagem/Estoque R$ 59.873,55 (11) · Logístico Motorista R$ 55.062,39 (11).
⚠️ **`AD_CND_VGF_DP` NÃO tem trava** — medido: sem o filtro de aliança no `WHERE`, o u002 enxerga a folha inteira do concreto (TopMix 279 pessoas / R$ 2.384.407,42; Super 177 / R$ 879.700,04; BetMix 158 / R$ 851.639,75) e o u001 enxerga a da São José. **O filtro de aliança é obrigação da consulta**, não do banco.

---

## Qual foi o resultado (lucro) do mês?
**Vá direto em:** `sankhya.AD_FECHAMENTO_GERAL_DADOS_TOPMIX` (concreto, coluna **`R`** = realizado) — é o DRE gerencial pronto; não monte resultado somando `TGFFIN` na mão · **os DOIS alcançam (a tabela não tem trava)** · **tempo medido: 0,2 s**
```sql
WITH dados AS (
    SELECT
        CODEMPALIANCA AS ALIANCA,
        SUM(CASE WHEN NOME = 'FATURAMENTO'  THEN R ELSE 0 END) AS FATURAMENTO,
        SUM(CASE WHEN NOME = 'DESPESAS_MCC' THEN R ELSE 0 END) AS MATERIA_PRIMA_MCC,
        SUM(CASE WHEN NOME = 'CUSTOS'       THEN R ELSE 0 END) AS CUSTOS,
        SUM(CASE WHEN NOME = 'DESPESAS'     THEN R ELSE 0 END) AS DESPESAS,
        SUM(CASE WHEN NOME IN ('FATURAMENTO','DESPESAS_MCC','CUSTOS','DESPESAS')
                 THEN R ELSE 0 END)                            AS EBITDA,
        SUM(CASE WHEN NOME IN ('FATURAMENTO','DESPESAS_MCC','CUSTOS','DESPESAS',
                               'Depreciações_E_Equip','Projetos') THEN R ELSE 0 END) AS RESULTADO
    FROM sankhya.AD_FECHAMENTO_GERAL_DADOS_TOPMIX
    WHERE MESANO = '20260601'
      AND CODEMPALIANCA IN (1, 601, 701)
    GROUP BY CODEMPALIANCA
)
SELECT * FROM dados ORDER BY FATURAMENTO DESC
```
**Conferido (junho/2026, na credencial do u001):** TopMix — faturamento R$ 17.947.620,25 · MCC −R$ 10.304.425,32 · custos −R$ 3.987.088,46 · despesas −R$ 982.215,52 → EBITDA R$ 2.673.890,94 → **resultado R$ 1.602.166,98**. SuperConcreto — faturamento R$ 8.349.771,93 · EBITDA R$ 2.513.899,19 → **resultado R$ 2.492.250,99**. BetMix — faturamento R$ 7.274.940,64 · EBITDA R$ 1.447.021,51 → **resultado R$ 1.413.392,91**.
⚠️ **Mês corrente é meio mês:** trocando o filtro para `MESANO = '20260701'`, em 14/07 o faturamento aparece como TopMix R$ 6.703.133,11 · SuperConcreto R$ 3.280.952,59 · BetMix R$ 3.272.156,42 — e o "resultado" fica inflado (custos e despesas do mês ainda não entraram: TopMix R$ 2.632.283,85). Diga sempre "parcial, até o dia X" e não compare com mês fechado.

**Resultado da São José — outra tabela, coluna `A`, linhas `_R`:** · **tempo medido (u002): 0,2 s**
```sql
WITH dados AS (
    SELECT
        MESANO,
        SUM(CASE WHEN NOME = 'FATURAMENTO'    THEN A ELSE 0 END) AS FATURAMENTO,
        SUM(CASE WHEN NOME = 'CMV'            THEN A ELSE 0 END) AS CMV,
        SUM(CASE WHEN NOME = 'MARGEM_SERVICO' THEN A ELSE 0 END) AS MARGEM,
        SUM(CASE WHEN NOME = 'IMPOSTOS_R'     THEN A ELSE 0 END) AS IMPOSTOS,
        SUM(CASE WHEN NOME = 'FRETE_R'        THEN A ELSE 0 END) AS FRETE,
        SUM(CASE WHEN NOME = 'DESPESAS'       THEN A ELSE 0 END) AS DESPESAS,
        SUM(CASE WHEN NOME IN ('MARGEM_SERVICO','IMPOSTOS_R','FRETE_R','DESPESAS')
                 THEN A ELSE 0 END)                              AS RESULTADO
    FROM sankhya.AD_FECHAMENTO_GERAL_DADOS_SAO_JOSE
    WHERE MESANO = '20260601'
    GROUP BY MESANO
)
SELECT * FROM dados
```
**Conferido (junho/2026, na credencial do u002):** faturamento R$ 4.819.148,03 · CMV −R$ 3.536.743,44 · margem R$ 1.282.404,59 · impostos −R$ 194.482,18 · frete −R$ 612.016,66 · despesas −R$ 253.128,61 → **resultado R$ 222.777,15**.
⚠️ **As duas tabelas de fechamento não têm trava nenhuma** (medido: o u001 roda a da São José e o u002 roda a do concreto, sem erro). Cada Nix responde **só pela casa dele** — filtre `CODEMPALIANCA` e use a tabela certa.

---

## O que está programado para hoje e amanhã?
**Vá direto em:** `sankhya.BH_CCTITE` + `sankhya.BH_CCTCAB` — a data com hora mora no item (`BH_CCTITE.DTPREVISTA`) · **é pergunta do u001 (concreto)** · **tempo medido (u001): 0,2 s**
```sql
WITH dados AS (
  SELECT CAST(i.DTPREVISTA AS DATE)  AS DIA,
         e.AD_CODEMPALIANCA          AS ALIANCA,
         u.DESCRUSINA                AS USINA,
         COUNT(DISTINCT c.NUPEDIDO)  AS PEDIDOS,
         SUM(i.QTDNEG)               AS M3_PROGRAMADO,
         SUM(i.VLRTOTAL)             AS VLR_PROGRAMADO
  FROM sankhya.BH_CCTITE i
  JOIN sankhya.BH_CCTCAB c ON c.NUPEDIDO = i.NUPEDIDO
  JOIN sankhya.TSIEMP    e ON e.CODEMP   = c.CODEMP
  LEFT JOIN sankhya.AD_CCTUSI u ON u.CODUSINA = c.AD_CODUSINA
  WHERE c.SITUACAO NOT IN ('0','7')
    AND e.AD_CODEMPALIANCA IN (1,601,701)
    AND CAST(i.DTPREVISTA AS DATE) BETWEEN '20260714' AND '20260715'
  GROUP BY CAST(i.DTPREVISTA AS DATE), e.AD_CODEMPALIANCA, u.DESCRUSINA
)
SELECT * FROM dados ORDER BY DIA, ALIANCA, USINA
```
**Conferido (14 e 15/07/2026, na credencial do u001):** hoje — **134 pedidos, 2.896,0 m³, R$ 1.365.810,60**; amanhã — **91 pedidos, 2.809,5 m³, R$ 1.347.326,68**. Quebra de hoje: TopMix 040 41 pedidos / 1.166,5 m³ · TopMix SJL 13 / 445,0 · BetMix Betim 28 / 441,5 · TopMix Lote (Super) 20 / 283,0 · Super Concreto 11 / 233,0 · BetMix Igarapé 5 / 146,5 · e o resto pulverizado (Super Betim, BetMix SJL, TopMix SJL pela Super).
⚠️ Some o total pela consulta, não somando as linhas da tela: o mesmo pedido pode aparecer em duas usinas e o `COUNT(DISTINCT)` por grupo não fecha por soma.
⚠️ **`BH_CCTCAB` e `BH_CCTITE` não têm trava:** medido, o u002 (cimento) enxerga a programação do concreto inteirinha — os mesmos 134 pedidos / 2.896,0 m³ de hoje. **Não é a casa dele** — o Nix do cimento não responde por aqui (veja o ⛔ do cimento embaixo).

---

## Quanto está agendado nos próximos dias (a carteira por usina)?
**Vá direto em:** a mesma dupla, agrupando pela usina que produz (`BH_CCTCAB.AD_CODUSINA` → `sankhya.AD_CCTUSI`), que não é a empresa que fatura · **u001** · **tempo medido (u001): 0,2 s**
```sql
WITH dados AS (
  SELECT u.DESCRUSINA          AS USINA,
         e.AD_CODEMPALIANCA    AS ALIANCA,
         COUNT(DISTINCT c.NUPEDIDO) AS PEDIDOS,
         SUM(i.QTDNEG)              AS M3_AGENDADO,
         SUM(i.VLRTOTAL)            AS VLR_AGENDADO,
         CAST(SUM(i.VLRTOTAL) / NULLIF(SUM(i.QTDNEG), 0) AS DECIMAL(12,2)) AS PRECO_MEDIO_M3
  FROM sankhya.BH_CCTITE i
  JOIN sankhya.BH_CCTCAB c ON c.NUPEDIDO = i.NUPEDIDO
  JOIN sankhya.TSIEMP    e ON e.CODEMP   = c.CODEMP
  LEFT JOIN sankhya.AD_CCTUSI u ON u.CODUSINA = c.AD_CODUSINA
  WHERE c.SITUACAO NOT IN ('0','7')
    AND e.AD_CODEMPALIANCA IN (1,601,701)
    AND CAST(i.DTPREVISTA AS DATE) BETWEEN '20260714' AND '20260720'
  GROUP BY u.DESCRUSINA, e.AD_CODEMPALIANCA
)
SELECT * FROM dados ORDER BY M3_AGENDADO DESC
```
**Conferido (14 a 20/07/2026, na credencial do u001):** TopMix 040 — 174 pedidos / 6.703,0 m³ / R$ 487,03 o m³ · TopMix SJL — 42 / 2.048,0 / R$ 478,81 · Super Concreto — 53 / 1.811,0 / R$ 457,97 · BetMix Betim — 63 / 1.422,0 / R$ 455,49 · TopMix Lote (fatura pela Super) — 52 / 959,5 / R$ 457,96.
O preço médio é divisão de duas somas (R$ total ÷ m³ total): escreva `/ NULLIF(...)` na mão.

---

## Quanto saiu hoje (o realizado do dia)?
**Vá direto em:** `sankhya.BH_CCTREM` — cada linha é uma carga de betoneira; já traz a aliança em texto (`NOMEALIANCA`) e a usina, sem join com pedido · **só o u001 alcança** (para o u002 a view devolve **zero linhas sempre**) · **tempo medido: u001 0,7 s · u002 0,2 s (vazio)**
```sql
WITH dados AS (
  SELECT r.NOMEALIANCA AS ALIANCA,
         u.DESCRUSINA  AS USINA,
         COUNT(*)                         AS CARGAS,
         COUNT(DISTINCT r.BH_CCTNUPEDIDO) AS PEDIDOS_ATENDIDOS,
         SUM(r.QTDNEG)                    AS M3_ENTREGUE
  FROM sankhya.BH_CCTREM r
  LEFT JOIN sankhya.AD_CCTUSI u ON u.CODUSINA = r.AD_CODUSINA
  WHERE CAST(r.DTMOV AS DATE) = '20260713'
    AND r.BH_CCTSTATUSREM <> 'C'
  GROUP BY r.NOMEALIANCA, u.DESCRUSINA
)
SELECT * FROM dados ORDER BY M3_ENTREGUE DESC
```
**Conferido (13/07/2026, na credencial do u001):** **315 cargas, 2.381,0 m³, 121 pedidos atendidos.** TopMix na 040 — 115 cargas / 850,5 m³ · BetMix Betim — 61 / 485,0 · TopMix SJL — 41 / 312,0 · Super Concreto — 27 / 257,0 · Super na TopMix Lote — 37 / 224,5 · Super Betim — 9 / 76,0 · o resto pulverizado (uma aliança pode produzir na usina da outra).
**Bate com o admin** (mesmas 315 cargas / 2.381,0 m³): a remessa do concreto **não perde linha** para o u001.
⚠️ Sem `BH_CCTSTATUSREM <> 'C'` as cargas canceladas incham o realizado. Sem janela de data, a consulta vira lesma.

---

## Programado x realizado (o cruzamento de todo dia)
**Vá direto em:** `BH_CCTITE`+`BH_CCTCAB` (o que estava marcado) contra `BH_CCTREM` (o que saiu), casados pela usina · **u001** · **tempo medido (u001): 0,6 s**
```sql
WITH prog AS (
  SELECT c.AD_CODUSINA AS CODUSINA,
         COUNT(DISTINCT c.NUPEDIDO) AS PEDIDOS,
         SUM(i.QTDNEG)              AS M3_PROGRAMADO
  FROM sankhya.BH_CCTITE i
  JOIN sankhya.BH_CCTCAB c ON c.NUPEDIDO = i.NUPEDIDO
  WHERE c.SITUACAO <> '0'
    AND CAST(i.DTPREVISTA AS DATE) = '20260713'
  GROUP BY c.AD_CODUSINA
),
realiz AS (
  SELECT r.AD_CODUSINA AS CODUSINA,
         COUNT(*)      AS CARGAS,
         SUM(r.QTDNEG) AS M3_REALIZADO
  FROM sankhya.BH_CCTREM r
  WHERE CAST(r.DTMOV AS DATE) = '20260713'
    AND r.BH_CCTSTATUSREM <> 'C'
  GROUP BY r.AD_CODUSINA
),
dados AS (
  SELECT u.DESCRUSINA AS USINA, p.PEDIDOS, p.M3_PROGRAMADO, r.CARGAS, r.M3_REALIZADO,
         CAST(r.M3_REALIZADO * 100.0 / NULLIF(p.M3_PROGRAMADO, 0) AS DECIMAL(10,1)) AS PCT_ATENDIDO
  FROM sankhya.AD_CCTUSI u
  LEFT JOIN prog   p ON p.CODUSINA = u.CODUSINA
  LEFT JOIN realiz r ON r.CODUSINA = u.CODUSINA
  WHERE p.M3_PROGRAMADO IS NOT NULL OR r.M3_REALIZADO IS NOT NULL
)
SELECT * FROM dados ORDER BY M3_PROGRAMADO DESC
```
**Conferido (13/07/2026, na credencial do u001):** TopMix 040 — 867,5 m³ programados / 860,5 entregues = **99,2%** · BetMix Betim — 522,0 / 510,0 = 97,7% · TopMix SJL — 427,5 / 403,5 = 94,4% · TopMix Lote — 351,0 / 224,5 = 64,0% · Super Concreto — 211,0 / 257,0 = 121,8% · BetMix Igarapé — 57,0 / 49,5 = 86,8% · BetMix SJL — 49,0 programados / nada entregue · Super Betim — 17,5 / 76,0 = 434,3%.
⚠️ Olhando para trás use **`SITUACAO <> '0'`** (só tira cancelado). Com `NOT IN ('0','7')` o pedido já entregue vira Finalizado, some do filtro e o "programado" do dia passado encolhe até virar mentira.
⚠️ Passar de 100% é normal e o percentual de uma usina pequena estoura (Super Betim deu 434%): o cliente pede mais no meio do dia e a carga pode sair de outra usina. Leia o **total do dia**, não a linha isolada.

---

## Quais pedidos estão em aberto (e quanto falta entregar)?
**Vá direto em:** `sankhya.BH_CCTCAB` com `SITUACAO NOT IN ('0','7')`, descontando o que já saiu na remessa — o que interessa é o **saldo**, não o tamanho do pedido · **u001** · **tempo medido (u001): 0,7 a 1,0 s**
```sql
WITH abertos AS (
  SELECT c.NUPEDIDO, c.DTPREVISTA, c.SITUACAO, c.CODEMP, c.AD_CODUSINA, c.NOMEOBRA
  FROM sankhya.BH_CCTCAB c
  JOIN sankhya.TSIEMP e ON e.CODEMP = c.CODEMP
  WHERE c.SITUACAO NOT IN ('0','7')
    AND e.AD_CODEMPALIANCA IN (1,601,701)
),
itens AS (
  SELECT i.NUPEDIDO, SUM(i.QTDNEG) AS M3_PEDIDO, SUM(i.VLRTOTAL) AS VLR_PEDIDO
  FROM sankhya.BH_CCTITE i
  JOIN abertos a ON a.NUPEDIDO = i.NUPEDIDO
  GROUP BY i.NUPEDIDO
),
entregue AS (
  SELECT r.BH_CCTNUPEDIDO AS NUPEDIDO, SUM(r.QTDNEG) AS M3_ENTREGUE
  FROM sankhya.BH_CCTREM r
  WHERE r.BH_CCTSTATUSREM <> 'C'
    AND r.DTMOV >= DATEADD(YEAR, -1, GETDATE())
  GROUP BY r.BH_CCTNUPEDIDO
),
dados AS (
  SELECT a.NUPEDIDO, a.DTPREVISTA,
         CASE a.SITUACAO WHEN '2' THEN 'Programado' WHEN '3' THEN 'Aguardando'
              WHEN '4' THEN 'Liberado' WHEN '5' THEN 'Liberado com entregas'
              WHEN '6' THEN 'Em producao' ELSE 'Pendente' END AS SITUACAO,
         u.DESCRUSINA AS USINA, a.NOMEOBRA,
         it.M3_PEDIDO,
         ISNULL(en.M3_ENTREGUE, 0) AS M3_ENTREGUE,
         it.M3_PEDIDO - ISNULL(en.M3_ENTREGUE, 0) AS M3_SALDO,
         it.VLR_PEDIDO
  FROM abertos a
  JOIN itens it ON it.NUPEDIDO = a.NUPEDIDO
  LEFT JOIN entregue en ON en.NUPEDIDO = a.NUPEDIDO
  LEFT JOIN sankhya.AD_CCTUSI u ON u.CODUSINA = a.AD_CODUSINA
)
SELECT * FROM dados ORDER BY M3_SALDO DESC
```
**Conferido (14/07/2026, na credencial do u001):** **676 pedidos em aberto** — 24.000,0 m³ pedidos, 3.774,5 já entregues, **saldo de 20.225,5 m³**, R$ 11.410.952,32 em carteira. Por situação: Programado 465 · Em produção 131 · Aguardando 33 · Liberado com entregas 24 · Liberado 23. O maior saldo isolado é um pedido de 450,0 m³ para 03/08.
⚠️ A janela `DTMOV >= 1 ano` na remessa é **obrigatória** — é ela que segura o tempo.

---

## ⛔ Nunca faça `SELECT *` na `sankhya.BH_CCTREM` — dá erro 242 sempre
Medido na credencial do gerente: `SELECT TOP 5 * FROM sankhya.BH_CCTREM` (com ou sem `WHERE`) devolve
`[SQL Server]The conversion of a varchar data type to a datetime data type resulted in an out-of-range value. (242)` — e gasta 1,4 a 1,9 s só para falhar.
**A culpada tem nome:** testadas as **65 colunas uma a uma** na credencial do u001 — **só a coluna `ESCANEADO` quebra** (`SELECT TOP 5 ESCANEADO FROM sankhya.BH_CCTREM` reproduz o 242 sozinha, medido hoje em 1,4 s). Todas as outras 64 leem normal.
**Remédio:** liste as colunas na mão e **nunca peça `ESCANEADO`**. As que servem para responder pergunta de gerente (todas conferidas juntas, 0,7 s): `NUNOTA, NUMNOTA, DTMOV, HRMOV, QTDNEG, BH_CCTNUPEDIDO, BH_CCTSTATUSREM, CODEMP, NOMEALIANCA, AD_CODUSINA, CODPARC, NOMEOBRA, CODVEICULO, CODMOTORISTA, TEMPOENTREGA`. (`OBSREM` é `text` — também evite, só atrapalha.)

---

## ⛔ O cimento (u002) NÃO TEM programação — não invente uma
Medido na credencial do u002: `sankhya.BH_CCTREM` devolve **0 cargas** em qualquer período (de 01/01/2026 até hoje: zero — a view sai por cima da nota e a trava por empresa corta tudo), e `sankhya.TGFCAB` com `TIPMOV = 'P'` (pedido de venda) devolve **0 pedidos em toda a história da base**. A São José **fatura direto na nota** (`TIPMOV = 'V'`): **1.101 notas e R$ 2.470.878,29 em julho/2026** (medido, 0,6 s).
Consequência prática: se o Nix do cimento tentar "programado x realizado", o programado vem do concreto (que ele enxerga por falta de trava em `BH_CCTCAB`) e o realizado vem **zero** — resultado: "0% de atendimento", uma mentira redonda.
**Resposta certa dele:** "não existe pedido em aberto no cimento — a venda vai direto para a nota. Se você quer o giro, eu olho a nota (`TGFCAB`, `TIPMOV = 'V'`) ou o financeiro."

---

### Cola rápida — quem alcança o quê nesta frente
| Pergunta | Fonte | u001 (concreto) | u002 (cimento) |
|---|---|---|---|
| Quanto tenho a receber | `TGFFIN` `RECDESP=1` | ⛔ **bloqueado** — só volta adiantamento (4101/4102) | OK — 0,4 s |
| O que está vencido / de quem | `TGFFIN` + `TGFPAR` | ⛔ **bloqueado** | OK — 0,4 a 0,5 s |
| Quanto entrou este mês | `TGFFIN` `DHBAIXA`+`VLRBAIXA` | ⛔ **bloqueado** (só adiantamento) | OK — 0,4 s |
| Quanto tenho a pagar | `TGFFIN` `RECDESP=-1` | OK — 0,7 a 0,9 s (sem os centros de lucro) | OK — 0,5 s |
| Gasto por centro | `TGFFIN` + `TSICUS` | OK — 1,8 a 2,1 s | OK — 0,7 s |
| Folha por centro | `AD_CND_VGF_DP` | OK — 0,6 s (⚠️ sem trava: filtre a aliança) | OK — 0,5 s (idem) |
| Resultado do mês | `AD_FECHAMENTO_GERAL_DADOS_TOPMIX` (R) / `..._SAO_JOSE` (A) | OK — 0,2 s | OK — 0,2 s (⚠️ sem trava nas duas) |
| Programado hoje/amanhã · carteira | `BH_CCTITE`+`BH_CCTCAB` | OK — 0,2 s | ⚠️ enxerga, mas **não é a casa dele** |
| Realizado do dia · prog x realizado | `BH_CCTREM` | OK — 0,6 a 0,7 s | ⛔ **zero linhas sempre** |
| Pedidos em aberto | `BH_CCTCAB`+`ITE`+`REM` | OK — 0,7 a 1,0 s | ⛔ **não existe** (São José fatura direto) |

**Regras que valem em toda a frente:** divida com `/ NULLIF(x,0)` · as consolidadas (`CND_*`) **abrem e são rápidas, mas não filtram dono — ponha as suas empresas no `WHERE`** · data sem hífen · `TOP` sempre no `SELECT` de fora · e o gerente **paga mais caro que o admin em tempo**: a trava reescreve a consulta linha a linha (o "gasto por centro" salta de 0,7 s no admin para ~2,0 s nele).

## SÃO JOSÉ / CIMENTO (u002)
## Frente SÃO JOSÉ / CIMENTO — caderno do Nix do gerente do cimento (u002)

Todo SQL abaixo foi rodado na credencial do u002 (`sql_gerente.py --dono u002`) em 14/07/2026.

---

## A fonte foi encontrada: `sankhya.AD_VGFFAT`

✅ `sankhya.AD_CND_VGFFAT` — **ABRE** (14/07/2026; 84.637 linhas em 0,04 s). É a via rápida do cimento. **Sem filtro de dono: filtre `CODEMP`.**
✅ **A saída é `sankhya.AD_VGFFAT`** — a view por trás daquela tabela. O u002 lê ela em **9 a 21 s**, com os dados **de hoje** (última entrega medida: 14/07/2026).

**A chave de leitura da AD_VGFFAT (vale para todos os blocos abaixo):**
- Cada linha é um **item de nota**. `QTDNEG` = **sacos** (não multiplique por nada: 100 sacos → `VLRTOTAL` 2.750,00 → R$ 27,50 o saco). `VLRTOTAL` = **valor total da linha** (é o faturamento; não é preço unitário).
- `TIPMOV`: **`V` = venda**, **`D` = devolução** (já vem **negativa** — em quantidade e em valor). Somar os dois dá o **líquido**; filtrar `TIPMOV = 'V'` dá o bruto. Medido em 2026: só existem esses dois tipos (9.267 linhas `V`, 284 linhas `D`).
- `DTREF` = **mês de referência** (sempre dia 01) e `DTENTSAI` = **dia da entrega**. Medido: nas 9.551 linhas de 2026, **zero divergência** entre o mês de uma e o mês da outra — pode filtrar o mês por `DTREF` com segurança.
- ⚠️ **A empresa 202 parou de vender em 06/2023.** Hoje **tudo é a empresa 201** (medido na AD_VGFFAT: 201 tem linha até 07/2026; a 202, só até 06/2023). A view já só devolve 201 e 202 para ele — o `CODEMP IN (201, 202)` fica como cinto de segurança, e a 202 ainda entra em estoque.

---

## Quanto vendemos este mês?
**Vá direto em:** `sankhya.AD_VGFFAT` — é a base de faturamento do cimento, e `QTDNEG` já vem **em sacos** · **tempo medido (na credencial dele): 15,0 s**
```sql
WITH base AS (
  SELECT QTDNEG, VLRTOTAL, TIPMOV
  FROM sankhya.AD_VGFFAT
  WHERE DTREF >= '20260701' AND DTREF < '20260801'
    AND CODEMP IN (201, 202)
),
dados AS (
  SELECT SUM(CASE WHEN TIPMOV = 'V' THEN QTDNEG ELSE 0 END)  AS SACOS_VENDIDOS,
         SUM(CASE WHEN TIPMOV = 'D' THEN -QTDNEG ELSE 0 END) AS SACOS_DEVOLVIDOS,
         SUM(QTDNEG)                                         AS SACOS_LIQUIDO,
         SUM(VLRTOTAL)                                       AS FATURAMENTO_LIQUIDO,
         SUM(VLRTOTAL) / NULLIF(SUM(QTDNEG), 0)              AS RS_POR_SACO
  FROM base
)
SELECT * FROM dados
```
**Conferido (01 a 14/07/2026, na credencial do u002):** 54.343 sacos vendidos · 1.228 sacos devolvidos · **53.115 sacos líquidos** · faturamento líquido **R$ 1.452.060,83** · R$ 27,34 por saco (média de tudo que sai em saco, cimento + argamassa).

---

## Qual o faturamento do mês? (e de onde ele vem)
**Vá direto em:** `sankhya.AD_VGFFAT` — `VLRTOTAL` somado é o faturamento; `DESCRGRUPOPROD` separa cimento de argamassa · **tempo medido (na credencial dele): 20,5 s**
```sql
WITH base AS (
  SELECT DESCRGRUPOPROD, QTDNEG, VLRTOTAL
  FROM sankhya.AD_VGFFAT
  WHERE DTREF >= '20260701' AND DTREF < '20260801'
    AND CODEMP IN (201, 202)
    AND TIPMOV = 'V'
),
dados AS (
  SELECT TRIM(DESCRGRUPOPROD)                    AS GRUPO,
         SUM(QTDNEG)                             AS SACOS,
         SUM(VLRTOTAL)                           AS FATURAMENTO,
         SUM(VLRTOTAL) / NULLIF(SUM(QTDNEG), 0)  AS PRECO_MEDIO
  FROM base
  GROUP BY DESCRGRUPOPROD
)
SELECT * FROM dados ORDER BY FATURAMENTO DESC
```
**Conferido (01 a 14/07/2026, na credencial do u002):** faturamento bruto **R$ 1.485.078,63**, sendo Cimento S. Lenta R$ 1.070.998,11 (38.981 sacos) · Cimento S. Rápida R$ 237.973,70 (8.420) · Argamassa AC-III R$ 68.907,15 (2.627) · Cimento ARI R$ 64.411,30 (2.246) · Argamassa AC-II R$ 17.587,03 (995) · Telha fibrocimento R$ 10.151,03 (202) · Argamassa múltiplo uso R$ 6.096,20 (507) · Argamassa AC-I R$ 3.417,20 (292) · e um resto miúdo de caixa d'água e vergalhão (R$ 5.536,91). **Os três grupos de cimento são R$ 1.373.383,11 — 92% do faturamento.**

---

## Qual o preço médio do saco?
**Vá direto em:** `sankhya.AD_VGFFAT` — média é **divisão de duas somas** (faturamento ÷ sacos), e só entre os grupos de **CIMENTO** (argamassa e telha também vêm em saco e puxam a média pra baixo) · **tempo medido (na credencial dele): 8,8 s**
```sql
WITH base AS (
  SELECT QTDNEG, VLRTOTAL
  FROM sankhya.AD_VGFFAT
  WHERE DTREF >= '20260701' AND DTREF < '20260801'
    AND CODEMP IN (201, 202)
    AND TIPMOV = 'V'
    AND DESCRGRUPOPROD LIKE 'CIMENTO%'
),
dados AS (
  SELECT SUM(QTDNEG)                            AS SACOS,
         SUM(VLRTOTAL)                          AS FATURAMENTO,
         SUM(VLRTOTAL) / NULLIF(SUM(QTDNEG), 0) AS PRECO_MEDIO_SACO
  FROM base
)
SELECT * FROM dados
```
**Conferido (01 a 14/07/2026, na credencial do u002):** 49.647 sacos de cimento · R$ 1.373.383,11 · **R$ 27,66 o saco**. (Se incluir argamassa/telha, cai para R$ 27,34 — não é o preço do cimento.)

---

## Quem são os maiores clientes?
**Vá direto em:** `sankhya.AD_VGFFAT` — `CODPARC` + `RAZAOSOCIAL` já vêm na base; `SEGMENTO` diz se é revenda, construtora ou consumidor final · **tempo medido (na credencial dele): 12,9 s**
```sql
WITH base AS (
  SELECT CODPARC, RAZAOSOCIAL, SEGMENTO, QTDNEG, VLRTOTAL
  FROM sankhya.AD_VGFFAT
  WHERE DTREF >= '20260701' AND DTREF < '20260801'
    AND CODEMP IN (201, 202)
    AND TIPMOV = 'V'
),
dados AS (
  SELECT TOP 10 CODPARC,
         TRIM(RAZAOSOCIAL) AS CLIENTE,
         SEGMENTO,
         SUM(QTDNEG)       AS SACOS,
         SUM(VLRTOTAL)     AS FATURAMENTO
  FROM base
  GROUP BY CODPARC, RAZAOSOCIAL, SEGMENTO
  ORDER BY SUM(VLRTOTAL) DESC
)
SELECT * FROM dados
```
**Conferido (01 a 14/07/2026, na credencial do u002):** 1º Edifício Âmbar Residence (construtora) R$ 26.160,00 / 900 sacos · 2º Ribeirão Materiais de Construção (revenda) R$ 25.029,51 / 940 · 3º Depósito Lama's (revenda) R$ 23.433,00 / 890 · 4º Fundação de Desenvolvimento da Pesquisa (consumidor final) R$ 20.930,00 / 700 · 5º Via Cimentos (revenda) R$ 20.540,00 / 760. **A carteira é pulverizada e dominada por REVENDA** — o maior cliente do mês é 1,8% do faturamento.

---

## O que mais sai?
**Vá direto em:** `sankhya.AD_VGFFAT` — ordene por **sacos** (`SUM(QTDNEG)`), que é a pergunta de volume; o faturamento vem junto pra comparar · **tempo medido (na credencial dele): 13,0 s**
```sql
WITH base AS (
  SELECT CODPROD, DESCRPROD, QTDNEG, VLRTOTAL
  FROM sankhya.AD_VGFFAT
  WHERE DTREF >= '20260701' AND DTREF < '20260801'
    AND CODEMP IN (201, 202)
    AND TIPMOV = 'V'
),
dados AS (
  SELECT TOP 8 CODPROD,
         TRIM(DESCRPROD)                        AS PRODUTO,
         SUM(QTDNEG)                            AS SACOS,
         SUM(VLRTOTAL)                          AS FATURAMENTO,
         SUM(VLRTOTAL) / NULLIF(SUM(QTDNEG), 0) AS PRECO_MEDIO
  FROM base
  GROUP BY CODPROD, DESCRPROD
  ORDER BY SUM(QTDNEG) DESC
)
SELECT * FROM dados
```
**Conferido (01 a 14/07/2026, na credencial do u002):** o campeão é o **CIMENTO CP III-32 RS CAMPEÃO 50KG** (cód. 30816) com 38.981 sacos e R$ 1.070.998,11 (R$ 27,47/saco) — sozinho, **72% do volume**. Depois: CP II-E-32 RS Campeão 50KG (30815) 8.164 sacos / R$ 233.638,30 · Argamassa AC-III Precon (14272) 2.432 / R$ 64.267,30 · CP V-ARI Max 40KG (30817) 2.246 / R$ 64.411,30 · Argamassa AC-II (14271) 782 / R$ 14.162,83.

---

## Como está o estoque?
**Vá direto em:** `sankhya.TGFEST` — é a tabela de saldo; o nome do produto vem da `TGFPRO` e o do grupo da `TGFGRU`. **Some as duas empresas (201 + 202) e todos os depósitos, e olhe só o total por produto** — o saldo por depósito não fecha (veja o aviso) · **tempo medido (na credencial dele): 4,5 s**
```sql
WITH base AS (
  SELECT TRIM(P.DESCRPROD) AS PRODUTO, E.ESTOQUE
  FROM sankhya.TGFEST E
       INNER JOIN sankhya.TGFPRO P ON P.CODPROD      = E.CODPROD
       INNER JOIN sankhya.TGFGRU G ON G.CODGRUPOPROD = P.CODGRUPOPROD
  WHERE E.CODEMP IN (201, 202)
    AND G.DESCRGRUPOPROD LIKE 'CIMENTO%'
),
dados AS (
  SELECT PRODUTO,
         SUM(ESTOQUE) AS SACOS_TOTAL
  FROM base
  GROUP BY PRODUTO
  HAVING SUM(ESTOQUE) <> 0
)
SELECT * FROM dados ORDER BY SACOS_TOTAL DESC
```
**Conferido (saldo de hoje, 14/07/2026, na credencial do u002):** **113.753 sacos de cimento** no total — CP III-32 Campeão 50KG **66.982** · CP II-E-32 Campeão 50KG **34.368** · CP V-ARI Max 40KG **11.432** · CP II-E-32 Campeão 25KG 999 · o resto é resíduo (18, 6, 3, 1 e um CP II E 32 Liz com −56). Contra 53.115 sacos líquidos vendidos em 14 dias (3.794/dia), é **cerca de 1 mês de giro**.

⚠️ **Dois avisos honestos sobre este número:** (1) **não abra por depósito.** Medido: o mesmo produto aparece com sinais trocados entre as empresas e entre os locais (o CP IV − 32 RS, cód. 20004, tem −758.861 no BH da 201 e +758.861 no BH da 202; +1.111.730 em Vespasiano na 201 e −1.111.730 em Vespasiano na 202) — são transferências, e só somando 201+202 elas zeram (esse produto **não é mais vendido**). Existe ainda um depósito "CAMPEÃO MTZ (BH)" que uma abertura só de BH/VESP/GOVAL deixaria de fora, e a conta não fecharia. **O total por produto é confiável; o saldo por depósito, não.** (2) Alguns saldos negativos (ex.: CP III em Gov. Valadares) são furo de lançamento, não estoque real.

---

## ⛔ O que NÃO tem caminho na credencial do gerente do cimento

- ✅ **`sankhya.AD_CND_VGFFAT` — ABRE, e é a base do cimento** (0,04 s). Data é `DTENTSAI`; quantidade é `QTDNEG`, **já em sacos**. **Filtre `CODEMP` (201–204): ela traz a empresa toda.**
- ✅ **`sankhya.CND_VGF_AD_VENDAS` e `SANKHYA.AD_DIVIDE` — LIBERADAS** (14/07/2026). Divisão na mão continua sendo o certo: `SUM(a) / NULLIF(SUM(b), 0)`.
- ⛔ **Concreto, m³, bomba, usina, traço, FCK: ele NÃO tem.** A São José é cimento ensacado. Qualquer pergunta de m³ de concreto não é da casa dele — responda isso, não invente consulta.
- ⛔ **A view `sankhya.AD_VGF_VENDAS` NÃO SERVE para ele.** Não tem o cimento, e **beira o teto de 30 s** (medido: `GROUP BY` sem filtro = **29,8 s**). O cimento mora na `AD_CND_VGFFAT` (rápida) e na `AD_VGFFAT`.
- ⚠️ **Margem/custo do cimento:** a `AD_VGFFAT` traz `CUSTO`, `MARGEM` e `VLRFRETE_TOTAL`. Medido em 2026, os valores são plausíveis (nenhuma linha absurda; frete até R$ 1.520,00; nenhuma venda sem custo) — mas a `MARGEM` **não é** `VLRTOTAL − CUSTO` (numa venda de 100 sacos: VLRTOTAL 2.750,00, CUSTO 2.057,00, frete 240,00 e MARGEM 162,90), ou seja, ela já desconta coisas que ninguém conferiu. **Não prometa margem** a partir daí sem alguém validar a conta antes.

---

## ⚠️ As "bombas" que ele enxerga NÃO são dele — é vazamento da RLS

**As linhas de BOMBAS/CARTÃO que o u002 vê na `AD_VGF_VENDAS` são dele?** **Não. Nenhuma.**

Medido na credencial dele (`AD_VGF_VENDAS`, `ANO = 2026`, 16,9 s): **6.047 linhas de BOMBAS, R$ 12.659.742,80** — todas de **aliança 1 (TopMix): 3.433 linhas / R$ 8.315.727,66** · **aliança 601 (BetMix): 1.251 / R$ 2.065.054,84** · **aliança 701 (SuperConcreto): 1.363 / R$ 2.278.960,30**. **Zero da São José.** São bombas de concreto das empresas do concreto, com nome de cliente e valor.

**Por que ele vê isso:** a `AD_VGF_VENDAS` é um `UNION ALL` de 5 blocos. `CONCRETO`, `ADICIONAIS` e `ACRÉSCIMOS/DESCONTOS` fazem `INNER JOIN TGFCAB` — e a `TGFCAB` **é onde mora a RLS** (`seg.fn_TGFCAB`, política `pol_nix`). Como o u002 está preso em `CODEMP 201,202` e a São José não tem pedido de concreto, esses três blocos voltam **vazios** para ele — correto (confirmado: no ano de 2026 ele só enxerga TIPODESERVICO `BOMBAS` e `CARTAO`). Mas o bloco **`BOMBAS` só usa as tabelas `BH_CCT*`** (a `TGFCAB` entra apenas como `LEFT JOIN` opcional) e o bloco **`CARTAO` lê a `AD_TABELAO_CARTAO`** direto: **nenhum dos dois passa pela TGFCAB, então a trava não pega neles** e as linhas do concreto vazam inteiras para o gerente do cimento.

**Consequência prática para o caderno:** o Nix do cimento **nunca** deve ler a `AD_VGF_VENDAS` — se ler, responde "vendemos R$ 12,6 milhões em bombas" para um gerente que não tem bomba nenhuma, mostrando faturamento e nome de cliente de outra empresa do grupo.
**Consequência de segurança (não é assunto de caderno):** a trava do banco está **certa no desenho, mas furada nesses dois blocos da view** — a RLS não alcança `BH_CCT*` nem `AD_TABELAO_CARTAO`. (O bloco `CARTAO` tem 8.048 linhas de aliança 201 que **são** da São José, mas com `VALORTOTALSERVICO` nulo por construção da view — não serve para faturamento de jeito nenhum.)
