# Venda de concreto — a base, as colunas certas e as armadilhas
> QUANDO LER: sempre que a pergunta tiver **"quanto"** de concreto — m³, faturamento, preço, margem, cliente, obra, usina, traço, viagem. É o caderno mais usado.

## A fonte única: `sankhya.CND_VGF_AD_VENDAS`

**Uma linha por entrega/serviço.** 123 colunas. 535 mil linhas, de 31/10/2019 até hoje.
É a MESMA coisa que a tela **"Resumo Geral de Vendas 2.0"** que a casa usa — o painel do
Sankhya (gadget 457) lê exatamente esta tabela. **Se você usar as colunas certas, seu
número bate com a tela deles.**

- Histórico / mês fechado / ranking → **`CND_VGF_AD_VENDAS`** (tabela, ~0,5 s).
- "Agora / o que já saiu hoje" → **`AD_VGF_VENDAS`** (a view ao vivo, 2-3 s). A CND é
  recarregada de hora em hora; pra hoje ela pode estar até 1 h atrasada.
- **A São José (cimento) NÃO está aqui.** Outra fonte, outro caderno (`sankhya-cimento.md`).

## A primeira coisa: `TIPODESERVICO`

Cada linha é de um tipo. **Se você não filtrar, soma laranja com maçã.**

| TIPODESERVICO | O que é | Tem m³? (`QUANTIDADE`) |
|---|---|---|
| `CONCRETO` | a entrega de concreto | **sim** |
| `BOMBAS` | bombeamento na obra (serviço cobrado à parte) | **não → NULL** |
| `ADICIONAIS` | espera, hora parada, taxas | **não → NULL** |
| `ACRESCIMOS E DESCONTOS` | ajuste de valor | **não → NULL** |
| `CARTAO` | linha de cartão (`VALORTOTALSERVICO` também NULL) | não |

- **Volume (m³) → SEMPRE `WHERE TIPODESERVICO = 'CONCRETO'`.**
- **Faturamento total** (o que o dono chama de "faturamento") → soma **todos** os tipos, porque bomba e adicionais são receita de verdade.
- ⚠️ `QUANTIDADE` vem **NULL** (não zero) fora de CONCRETO. `SUM` ignora NULL, mas `AVG`, `COUNT(QUANTIDADE)` e qualquer divisão te enganam.

## ⛔ A ARMADILHA QUE JÁ ERROU: `VALORVENDA` NÃO SE SOMA

`VALORVENDA` é o **preço unitário do contrato — R$ por m³ daquela entrega**. Somar preço
unitário é somar etiqueta de preço: dá um número grande e **sem significado nenhum**.

Medido (junho/2026, concreto):

| Conta | Resultado | Vale? |
|---|---|---|
| `SUM(VALORVENDA)` | **R$ 3.833.862,86** | ❌ **lixo** — soma de preços unitários |
| `SUM(VALORTOTALSERVICO)` | **R$ 30.771.553,34** | ✅ **é o faturamento** |
| `SUM(VALORTOTALSERVICO) / SUM(QUANTIDADE)` | **R$ 476,47/m³** | ✅ **é o preço médio** |
| `AVG(VALORVENDA)` | R$ 476,08 | ❌ média burra (cada entrega pesa igual, uma de 1 m³ pesa o mesmo que uma de 10 m³) |

**Por quê:** na definição da view, `VALORVENDA = preço do contrato` e
`VALORTOTALSERVICO = VALORVENDA × (quantidade − dedução)`. Um é a taxa, o outro é o dinheiro.

> **Regra de ouro: toda taxa (R$/m³, margem/m³, %) é uma DIVISÃO DE DOIS SOMATÓRIOS —
> nunca uma soma nem uma média de coluna unitária.** É exatamente assim que o painel do
> Sankhya faz: `SUM(VALORTOTALSERVICO) / SUM(QUANTIDADE)`.
>
> Pra não dividir por zero, o banco tem `SANKHYA.SNK_DIVIDIR(a, b)` e `SANKHYA.AD_DIVIDE(a, b)`.

## O dicionário das colunas que importam

**Dinheiro e volume**

| Coluna | O que é | Como usar |
|---|---|---|
| `QUANTIDADE` | m³ da entrega | `SUM` (só CONCRETO) |
| `VALORTOTALSERVICO` | **o faturamento da linha (R$)** | `SUM` |
| `VALORVENDA` | preço unitário do contrato (R$/m³) | **nunca somar** — só olhar linha a linha |
| `VALORVENDACONTRATO` | preço de tabela do contrato | idem |
| `MCCVIAGEM` | **custo da matéria-prima** (cimento, areia, brita, aditivo) da viagem | `SUM` |
| `MARGEMSERVICOTOTAL` | margem em R$ = (preço − custo) × quantidade | `SUM` |
| `QUANTIDADEPESADA` / `QUANTIDADEDANFE` | o que a balança pesou / o que foi pra nota | conferência de perda |

**As margens finas (as que o painel mostra e a diretoria olha)**

| Coluna | Nome por extenso | O que já foi descontado |
|---|---|---|
| `PLV` | **Preço Líquido de Venda** | impostos (IVA) e ISS |
| `MLV` | **Margem Líquida de Venda** | PLV − custo do MCC (líquido de crédito de imposto) |
| `MCLV` | **Margem de Contribuição Líquida de Venda** | MLV − custo da viagem − despesas por viagem. **É a margem "de verdade"** |
| `VLR_PREMIO` | comissão do vendedor | = MLV × % do cadastro do vendedor |
| `ISS`, `PISCOFINS`, `IRCSLL` | impostos da linha | |

Tudo isso em **R$**. Pra ter "por m³", divida pela soma da quantidade:
`SANKHYA.AD_DIVIDE(SUM(MCLV), SUM(QUANTIDADE))`.

**⚠️ Em `BOMBAS` e `ADICIONAIS`, `MARGEMSERVICOTOTAL` = `VALORTOTALSERVICO`** (o custo do
bombeamento não é abatido ali — ele entra como `CUSTOS_DE_BOMBAS` no fechamento gerencial).
Conferido em junho/26, aliança 1: margem de BOMBAS = R$ 1.551.943,60 = faturamento de BOMBAS,
igualzinho.

**Recortes (por onde se fatia)**

`CODEMPALIANCA` (1/601/701) · `FILIAL` (CODEMP) · `AD_CODUSINA` + `DESCRUSINA` ·
`CODIGOPONTODECARGA` + `NOMEPONTODECARGA` · `CLIENTE` + `PARCEIRO` (nome) ·
`GRUPOECONOMICO` + `NOMEGRUPOECONOMICO` · `NOMEOBRA` + `CIDADEOBRA`/`BAIRROOBRA` ·
`CODIGOVENDEDOR` + `NOMEVENDEDOR` · `CODIGOPRODUTO` + `NOMEPRODUTO` (o traço) + `FCK` ·
`AD_CODGRUPOFOR` + `DESCRGRUPO` (grupo de formulação) · `TIPOPRODUTO` · `CONTRATO` ·
`PEDIDO` · `NUMEROENTREGA` · `DANFE` · `DATA` / `MESANO` / `DIA` / `MES` / `ANO`.

`TIPOPRODUTO` (valores reais): **`Linha`** (traço padrão) · **`Especial`** (traço sob medida —
é a maior fatia: 36.173 m³ em junho contra 26.847 de Linha) · **`Argamassa`** · **`Argamassa Especial`**.

**Ciclo/operação:** `NOMEMOTORISTA`, `NOMEVEICULO`, `HORACARREGAMENTO`,
`HORACHEGADAOBRA`, `HORAINICIODESCARGA`, `TEMPOCICLOENTREGA`, `TEMPONOCLIENTE`,
`TEMPOESPMOT` (espera do motorista). **Qualidade:** `EXIGEMOLDAGEM`, `MOLDREALIZADA`, `FCKREC`.

**Usina de terceiro:** `ALIUSINA` = aliança **dona da usina** onde carregou; `CODEMPALIANCA` =
aliança **que vendeu/faturou**. Diferentes = produção emprestada.

## Viagem, betoneira e média por viagem

Uma **viagem = uma linha de CONCRETO**. Então:
- nº de viagens = `SUM(CASE WHEN TIPODESERVICO='CONCRETO' THEN 1 ELSE 0 END)`
- média por viagem = `SUM(QUANTIDADE) / <nº de viagens>` — costuma dar 7 a 8 m³ (é o tamanho da betoneira). **Se der 2 m³, o cliente está pedindo pouco e a viagem sai cara.**

## Projeção do mês — como a casa projeta (e não é regra de três com dia corrido)

O Sankhya projeta pesando os dias pela tabela **`sankhya.AD_CONTAGEMDIAS`** (`DATA`, `VALORDIA`)
— o `VALORDIA` dá o peso de cada dia (sábado/feriado valem menos que dia útil).

```
projeção = volume_do_mês_até_hoje / (soma do VALORDIA dos dias já corridos)
                                  × (soma do VALORDIA do mês inteiro)
```

Isso já vem mastigado na view `AD_REL_DIARIO_MES` (linhas "Ate Ontem" / "Proj." / mesmo mês do
ano passado). **Use a view — não reinvente a projeção.**

## As views prontas (respondem sem você escrever SQL)

**Dia** — `AD_REL_DIARIO_VOLUMEDIA` (m³ de hoje, um número) · `AD_REL_DIARIO_VENDASPORUSINA`
(m³ de hoje por usina × aliança — colunas USINA/TOPMIX/BETMIX/SUPER/TOTAL) ·
`AD_REL_DIARIO_PROGAMANHA` (**programado pra amanhã**, por aliança) · `AD_REL_DIARIO_MES`
(mês até ontem, projeção e mesmo mês do ano passado).

**Semana** — `AD_REL_SEMANAL_VOLUMEUSINA` · `AD_REL_SEMANAL_4SEM_VOLUMEUSINA` (4 semanas por
usina) · `AD_REL_SEMANAL_VOL_PROJETADO_ALIANCA` · `AD_REL_SEMANAL_VLR_MSTOTAL_ALIANCA` (preço
médio do m³).

**Mês** (3 meses + ano acumulado, colunas TOPMIX/BETMIX/SUPER/TOTAL) —
`AD_REL_MENSAL_VOL_3MESES_ALIANCA` (volume) · `AD_REL_MENSAL_FATURAMENTO_3MESES_ALIANCA` (R$) ·
`AD_REL_MENSAL_VLRTOTALM3_3MESES_ALIANCA` (R$/m³) · `AD_REL_MENSAL_MSTOTAL_3MESES_ALIANCA` e
`_MSTOTALM3_3MESES_ALIANCA` (margem) · `AD_REL_MENSAL_DIESEL_ALIANCA` e `_VLRMED_DIESEL`.

> ⚠️ **"Quanto saiu hoje" tem DUAS respostas legítimas** — e elas não batem:
> - `AD_REL_DIARIO_VOLUMEDIA` conta **remessas** (`BH_CCTREM`, status Finalizada/Produzida, pelo `DTPREVISTA` do pedido) → é o **operacional**: o que saiu de caminhão.
> - `CND_VGF_AD_VENDAS`/`AD_VGF_VENDAS` conta **entregas faturadas** → é o **comercial**.
>
> Medido em 13/07/2026: view do dia = **1.238 m³**; venda ao vivo = **1.222 m³**; snapshot CND = **1.167,5 m³**.
> **Escolha uma, diga qual, e não misture no mesmo quadro.** Não invente "o número certo": explique.

## Status (não invente o que a letra significa)

**Remessa** (`BH_CCTREM.BH_CCTSTATUSREM`): `F` Finalizada · `R` Produzida · `C` **Cancelada** ·
`L`/`L2` Liberada · `B` Aguardando · `P` Pesagem Realizada · `N` NF Emitida · `E` Erro.
**Nas contas de volume entregue, só `F` e `R`** — `C` (cancelada) é caminhão que não saiu:
nos últimos 30 dias foram 858 remessas canceladas / 6.139,5 m³. Somá-las infla o resultado ~10%.

**Pedido** (`BH_CCTCAB.SITUACAO`): `0` Cancelado · `1` Pendente · `2` Programado · `3` Aguardando
· `4` Liberado · `5` Liberado Com Entregas · `6` Em Produção · `7` Finalizado.
**Sempre `SITUACAO <> 0`.**

## Como responder

- Volume em **m³**, dinheiro em **R$**, taxa em **R$/m³**. Nunca m³ para bomba/adicional.
- **Margem NUNCA em %** — a casa fala em **margem por m³**, e olha dois números: **sem bomba**
  (margem do concreto ÷ m³) e **com bomba** ((margem concreto + margem BOMBAS) ÷ m³).
  Junho/26, TopMix: **R$ 207,05/m³ sem bomba** e **R$ 253,61/m³ com bomba**.
- Todo número sai com **período** e **aliança** — número sem recorte não serve.
- Ordem de grandeza pra você desconfiar de si mesmo: as 3 concreteiras juntas fazem
  **~65 mil m³/mês** e **~R$ 31 mi/mês**, a ~**R$ 476/m³**. Muito fora disso = erro de consulta,
  não descoberta.

---

## O que eu aprendi (meu caderno)

*Uma linha por coisa.*
