# CONSULTAS PARA O SONAR
Documentacao sobre o repositório de gráficos que podem ser utilizados nos clientes do **Tetra Sonar**.
O item **Gráfico** sugerido é uma sugestao, pode ser escolhido qualquer
outro de acordo com o padrao dos dados. Por exemplo. O padrao ROSCA pode ser
substituído pelo de PIZZA por termos mesmo padrao de dados, no caso 2 níveis.
Caso for alterar para um gráfico de dados de 3 níveis como o de BARRAS a
consulta SQL que gera os dados deve sofrer uma alteracao para tornar
compatível com o gráfico.
## COMPRAS
### TOTAL COMPRADO
##### Objetivo
Mostrar o valor total comprado no período selecionado.
**Variacoes da visao:**
* mes retrasado
* mes anterior
* mes atual
**Gráfico:** BARRA VERTICAL
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Resultado
```SQL
declare @primeiroDiaMesAtual as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
declare @primeiroDiaMesRetrazado as DATETIME
declare @UltimoDiaMesAtual as DATETIME
declare @UltimoDiaMesAnterior as DATETIME
declare @UltimoDiaMesRetrasado as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @primeiroDiaMesRetrasado = DateAdd(mm, DateDiff(mm,0,GetDate()) - 2, 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
set @UltimoDiaMesRetrasado = DATEADD(s,-2,DATEADD(mm, DATEDIFF(m,0,GETDATE())-1,0))
select 'Mes retrasado' as bar, 'Compra' as label, SUM(VALORTOT) as value
from compra
where DTENTRADA between @primeiroDiaMesRetrasado and
@UltimoDiaMesRetrasado and CODFIL in ($codfil) and POSICAO = 'F'
UNION all
select 'Mes anterior' as bar, 'Compra' as label, SUM(VALORTOT) as value
from compra
where DTENTRADA between @primeiroDiaMesAnterior and
@UltimoDiaMesAnterior and CODFIL in ($codfil) and posicao = 'F'
UNION all
select 'Mes atual' as bar, 'Compra' as label, SUM(VALORTOT) as value
from compra
where DTENTRADA between @primeiroDiaMesAtual and
@UltimoDiaMesAtual and CODFIL in ($codfil) and POSICAO = 'F'
```
### TOP 10 FORNECEDORES
##### Objetivo
Mostrar os 10 maiores fornecedores por valor de compra.
**Variacoes da visao:**
* mes anterior
* mes atual
**Gráfico:** RADAR
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mes atual
```SQL
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
select TOP 10 MAX(f.NOME) as label, SUM(c.VALORTOT) as value
from compra c
left join cliente f on f.codigo = c.FORNEC
where DTENTRADA between @primeiroDiaMesAtual and
@UltimoDiaMesAtual and c.CODFIL in ($codfil) and c.posicao = 'F'
group by f.codigo
order by sum(c.VALORTOT) desc
```
###### Mes anterior
```SQL
declare @primeiroDiaMesAnterior as DATETIME
declare @UltimoDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select TOP 10 MAX(f.NOME) as label, SUM(c.VALORTOT) as value
from compra c
left join cliente f on f.codigo = c.FORNEC
where DTENTRADA between @primeiroDiaMesAnterior and
@UltimoDiaMesAnterior and c.CODFIL in ($codfil) and c.posicao = 'F'
group by f.codigo
order by sum(c.VALORTOT) desc
```
### TOP 10 PRODUTOS (por quantidade)
##### Objetivo
Mostrar os 10 produtos mais comprados por quantidade.
**Variacoes da visao:**
* mes anterior
* mes atual
**Gráfico:** ROSCA
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** Un
##### Abas
###### Mes atual
```SQL
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
select top 10 max(e.nome) as label, sum(ic.quant) as value
from icompra ic
inner join ESTOQUE e on e.codigo = ic.CODPROD
inner join COMPRA c on c.CODIGO = ic.CODIGO
where c.DTENTRADA between @primeiroDiaMesAtual and
@ultimoDiaMesAtual and c.posicao = 'F' and c.CODFIL in ($codfil)
group by ic.CODPROD
order by sum(ic.quant) desc
```
###### Mes anterior
```SQL
declare @primeiroDiaMesAnterior as DATETIME
declare @UltimoDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select top 10 max(e.nome) as label, sum(ic.quant) as value
from icompra ic
inner join ESTOQUE e on e.codigo = ic.CODPROD
inner join COMPRA c on c.CODIGO = ic.CODIGO
where c.DTENTRADA between @primeiroDiaMesAnterior and
@UltimoDiaMesAnterior and c.posicao = 'F' and c.CODFIL in ($codfil)
group by ic.CODPROD
order by sum(ic.quant) desc
```
### TOP 10 PRODUTOS (por valor)
##### Objetivo
Mostrar os 10 produtos mais comprados por valor.
**Variacoes da visao:**
* mes anterior
* mes atual
**Gráfico:** ROSCA
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mes Anterior
```SQL
declare @primeiroDiaMesAnterior as DATETIME
declare @UltimoDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select TOP 10 max(e.NOME) as label, sum(i.QUANT) as value from ICOMPRA i
inner join compra c on c.CODIGO = i.CODIGO
inner JOIN estoque e on e.CODIGO = i.CODPROD
where c.DTENTRADA between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
and c.CODFIL in ($codfil) and c.POSICAO = 'F'
group by e.codigo
order by sum(i.quant) desc
```
###### Mes atual
```SQL
declare @PrimeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
select TOP 10 max(e.NOME) as label, sum(i.QUANT) as value
from ICOMPRA i
inner join compra c on c.CODIGO = i.CODIGO
inner JOIN estoque e on e.CODIGO = i.CODPROD
where c.DTENTRADA between @primeiroDiaMesAtual and
@UltimoDiaMesAtual and c.CODFIL in ($codfil) and c.POSICAO = 'F'
group by e.codigo
order by sum(i.quant) desc
```
## VENDAS
### TOTAL VENDIDO
##### Objetivo
Mostrar o valor total vendido no período selecionado.
**Variacoes da visao:**
* essa semana
* mes anterior
* mes atual
**Gráfico:** ROSCA
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Essa semana
```SQL
declare @InicioSemana as DATETIME
declare @FinalSemana as DATETIME
set @InicioSemana = CONVERT(DATETIME,CONVERT(VARCHAR,DateAdd(day, 1 - DatePart(weekday, getDate()), getdate()), 101) + ' 00:00:00')
set @FinalSemana= CONVERT(DATETIME,CONVERT(VARCHAR,DateAdd(day, +6, @InicioSemana), 101) + ' 23:59:59')
select 'Comfirmadas' as label, sum(v.VALOR + v.DESCACRES) as value
from VENDA v
where data between @InicioSemana and @FinalSemana and
codfil in ($codfil) and v.CANCELADO is null
UNION ALL
select 'Canceladas' as bar, sum(v.VALOR + v.DESCACRES) as value from VENDA v
where data between @InicioSemana and @FinalSemana and
codfil in ($codfil) and v.CANCELADO is not null
```
###### Mes Atual
```SQL
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
select 'Comfirmadas' as label, sum(v.VALOR + v.DESCACRES) as value
from VENDA v
where data between @primeiroDiaMesAtual and @UltimoDiaMesAtual
and codfil in ($codfil) and v.CANCELADO is null
UNION ALL
select 'Canceladas' as bar, sum(v.VALOR + v.DESCACRES) as value
from VENDA v
where data between @primeiroDiaMesAtual and @UltimoDiaMesAtual
and codfil in ($codfil) and v.CANCELADO is not null
```
###### Mes Anterior
```SQL
declare @primeiroDiaMesAnterior as DATETIME
declare @UltimoDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select 'Comfirmadas' as label, sum(v.VALOR + v.DESCACRES) as value from VENDA v
where data between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
and codfil in ($codfil) and v.CANCELADO is null
UNION ALL
select 'Canceladas' as bar, sum(v.VALOR + v.DESCACRES) as value
from VENDA v
where data between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
and codfil in ($codfil) and v.CANCELADO is not null
```
### MARGEM TOTAL PRATICADA
##### Objetivo
Mostrar a margem (total) praticada no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** LISTA
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** %
##### Abas
###### Resultado
```SQL
declare @primeiroDiaMesAtual as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
declare @UltimoDiaMesAtual as DATETIME
declare @UltimoDiaMesAnterior as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
SELECT 'Margem mes anterior' AS label,
CAST(CAST(ROUND((SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) - SUM(rz.QUANT * - (1 * rz.CUSTO)))
/ SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) * 100, 2) AS DECIMAL(6, 2)) AS varchar) AS value
FROM dbo.RAZALOJA AS rz
INNER JOIN dbo.ESTOQUE AS e ON rz.CODIGO = e.CODIGO
INNER JOIN dbo.SUBGRUPO AS sub ON sub.CODIGO = e.SUBGRUPO
INNER JOIN dbo.GRUPO AS GR ON sub.GRUPO = GR.CODIGO
INNER JOIN dbo.VENDA AS v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND
v.CANCELADO IS NULL AND v.DATA BETWEEN @primeiroDiaMesAnterior AND
@UltimoDiaMesAnterior
WHERE (rz.MOVTO LIKE 'VE%') AND (rz.INFO <> 'RET')
GROUP BY GR.NOME
UNION ALL
SELECT 'Margem mes atual' AS label, CAST(CAST(ROUND((SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) - SUM(rz.QUANT * - (1 * rz.CUSTO))) / SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) * 100, 2) AS DECIMAL(6, 2)) AS varchar) AS value
FROM dbo.RAZALOJA AS rz
INNER JOIN
dbo.ESTOQUE AS e ON rz.CODIGO = e.CODIGO
INNER JOIN dbo.SUBGRUPO AS sub ON sub.CODIGO = e.SUBGRUPO
INNER JOIN dbo.GRUPO AS GR ON sub.GRUPO = GR.CODIGO
INNER JOIN dbo.VENDA AS v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND v.CANCELADO IS NULL AND
v.DATA BETWEEN @primeiroDiaMesAtual AND @UltimoDiaMesAtual
WHERE (rz.MOVTO LIKE 'VE%') AND (rz.INFO <> 'RET')
GROUP BY GR.NOME
```
### ANÁLISE DE DESEMPENHO
##### Objetivo
Apresentar uma tabela contendo os principais indicadores do varejo.
- Número de Vendas
- Itens Vendidos
- Ticket Médio
- Itens / Vendas
- Valor médio do item
- Markup(%)
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** LISTA
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
### CONTRIBUIÇÃO POR GRUPO DE PRODUTOS
##### Objetivo
Mostrar o percentual de contribuição no faturamento dos grupos de produtos vendidos no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** BARRAS VERTICAIS
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** %
##### Abas
###### Mês Anterior
```SQL
declare @primeiroDiaMesAnterior as DATETIME
declare @UltimoDiaMesAnterior as DATETIME
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
SELECT top 10 MAX(GR.NOME) AS nome, CAST(CAST(ROUND((SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) - SUM(rz.QUANT * - (1 * rz.CUSTO)))
/ SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) * 100, 2) AS DECIMAL(6, 2)) AS varchar) + '%' AS value
FROM dbo.RAZALOJA AS rz INNER JOIN
dbo.ESTOQUE AS e ON rz.CODIGO = e.CODIGO INNER JOIN
dbo.SUBGRUPO AS sub ON sub.CODIGO = e.SUBGRUPO INNER JOIN
dbo.GRUPO AS GR ON sub.GRUPO = GR.CODIGO INNER JOIN
dbo.VENDA AS v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND v.CANCELADO IS NULL AND v.DATA BETWEEN @primeiroDiaMesAnterior AND @UltimoDiaMesAnterior
WHERE (rz.MOVTO LIKE 'VE%') AND (rz.INFO <> 'RET') and rz.codfil in ($codfil)
GROUP BY GR.NOME order by value desc
```
###### Mês Atual **(new)**
```
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
SELECT top 10 MAX(GR.NOME) AS nome, CAST(CAST(ROUND((SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) - SUM(rz.QUANT * - (1 * rz.CUSTO)))
/ SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) * 100, 2) AS DECIMAL(6, 2)) AS varchar) + '%' AS value
FROM dbo.RAZALOJA AS rz INNER JOIN
dbo.ESTOQUE AS e ON rz.CODIGO = e.CODIGO INNER JOIN
dbo.SUBGRUPO AS sub ON sub.CODIGO = e.SUBGRUPO INNER JOIN
dbo.GRUPO AS GR ON sub.GRUPO = GR.CODIGO INNER JOIN
dbo.VENDA AS v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND v.CANCELADO IS NULL AND v.DATA BETWEEN @primeiroDiaMesAtual AND @UltimoDiaMesAtual
WHERE (rz.MOVTO LIKE 'VE%') AND (rz.INFO <> 'RET') and rz.codfil in ($codfil)
GROUP BY GR.NOME order by value desc
```
### CONTRIBUIÇÃO POR SUBGRUPO DE PRODUTOS
##### Objetivo
Mostrar o percentual de contribuição no faturamento dos subgrupos de produtos vendidos no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** BARRAS VERTICAIS
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** %
##### Abas
###### Mês Anterior
```SQL
declare @primeiroDiaMesAnterior as DATETIME
declare @UltimoDiaMesAnterior as DATETIME
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
SELECT top 10 MAX(sub.NOME) AS nome, CAST(CAST(ROUND((SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) - SUM(rz.QUANT * - (1 * rz.CUSTO)))
/ SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) * 100, 2) AS DECIMAL(6, 2)) AS varchar) + '%' AS value
FROM dbo.RAZALOJA AS rz INNER JOIN
dbo.ESTOQUE AS e ON rz.CODIGO = e.CODIGO INNER JOIN
dbo.SUBGRUPO AS sub ON sub.CODIGO = e.SUBGRUPO INNER JOIN
dbo.VENDA AS v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND v.CANCELADO IS NULL AND v.DATA BETWEEN @primeiroDiaMesAnterior AND @UltimoDiaMesAnterior
WHERE (rz.MOVTO LIKE 'VE%') AND (rz.INFO <> 'RET') and rz.codfil in ($codfil)
GROUP BY sub.NOME order by value desc
```
###### Mês Atual **(new)**
```
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
SELECT top 10 MAX(sub.NOME) AS nome, CAST(CAST(ROUND((SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) - SUM(rz.QUANT * - (1 * rz.CUSTO)))
/ SUM((rz.QUANT * rz.UNITARIO + rz.DESCACRES) * (v.VALOR / (v.VALOR - v.DESCACRES)) * - 1) * 100, 2) AS DECIMAL(6, 2)) AS varchar) + '%' AS value
FROM dbo.RAZALOJA AS rz INNER JOIN
dbo.ESTOQUE AS e ON rz.CODIGO = e.CODIGO INNER JOIN
dbo.SUBGRUPO AS sub ON sub.CODIGO = e.SUBGRUPO INNER JOIN
dbo.VENDA AS v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND v.CANCELADO IS NULL AND v.DATA BETWEEN @primeiroDiaMesAtual AND @UltimoDiaMesAtual
WHERE (rz.MOVTO LIKE 'VE%') AND (rz.INFO <> 'RET')
GROUP BY sub.NOME order by value desc
```
### VENDA POR ESPÉCIE POR FATURAMENTO(R$)
##### Objetivo
Mostrar o valor total vendido por espécie (dinheiro, ticket, cartão, cheque, carteira) no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** PIZZA
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select case when especie='CT' then 'Cartão' else case when especie='CC' then 'Carteira' else
case when especie='CR' then 'Crédito' else case when especie='DN' then 'Dinheiro' else case when especie='TK' then 'Ticket' else
case when especie='CH' then 'Cheque' end end end end end end as label,
abs(sum(valor)) as value
from movpdv
where especie not in ('NN', 'FE', 'AB', 'TR', 'TC', 'CS') and
data between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior and
CODFIL in ($codfil)
group by especie
```
###### Mês Atual **(new)**
```
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
select case when especie='CT' then 'Cartão' else case when especie='CC' then 'Carteira' else case when especie='CR' then 'Crédito' else case when especie='DN' then 'Dinheiro' else case when especie='TK' then 'Ticket' else case when especie='CH' then 'Cheque' end end end end end end as label, abs(sum(valor)) as valor from movpdv
where especie not in ('NN', 'FE', 'AB', 'TR', 'TC', 'CS') and data between @primeiroDiaMesAtual and @UltimoDiaMesAtual and CODFIL in ($codfil)
group by especie order by valor desc
```
### VENDA POR CAIXA
Mostrar o valor total vendido por cada caixa no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** BARRAS HORIZONTAIS
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select max(ncaixa) as label, SUM(valor) as value from movpdv
where especie <> 'NN' and DATA between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
and codfil in ($codfil)
group by NCAIXA order by label
```
###### Mês Atual **(new)**
```
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
select max(ncaixa) as label, SUM(valor) as value from movpdv
where especie <> 'NN' and DATA between @primeiroDiaMesAtual and @UltimoDiaMesAtual
and codfil in ($codfil)
group by NCAIXA order by label
```
##### Objetivo
### TOTAL DE VENDAS (COM NFCE) X TOTAL DE VENDA COM CARTÃO
##### Objetivo
Mostrar um comparativo de quanto foi vendido com NFCe emitida e quando foi vendido com cartão.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** BARRAS VERTICAIS
**Totalizador:** NAO
**Tempo de atualizacao:**
**Formato do dado:** R$
### VENDA POR VENDEDORES
##### Objetivo
Mostrar o valor total vendido por vendedor no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** RADAR
**Totalizador:** NAO
**Tempo de atualizacao:**
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select max(atf.nome)as label, SUM(v.valor) as value from at_pedido at
inner join VENDA v on v.CODIGO = at.CODIGO
inner join at_funario atf on atf.CODIGO = at.FUNARIO
where at.POSICAO <> 'C' and at.DTSTATUS between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
and v.codfil in ($codfil)
group by atf.CODIGO order by value desc
````
###### Mês Atual **(new)**
```
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
select max(atf.nome)as label, SUM(v.valor) as value from at_pedido at
inner join VENDA v on v.CODIGO = at.CODIGO
inner join at_funario atf on atf.CODIGO = at.FUNARIO
where at.POSICAO <> 'C' and at.DTSTATUS between @primeiroDiaMesAtual and @UltimoDiaMesAtual
and v.codfil in ($codfil)
group by atf.CODIGO order by value desc
```
### TOP 10 CLIENTES
##### Objetivo
Mostrar os 10 clientes que mais compraram (em R$) no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** RADAR
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select top 10 max(c.nome)as label, SUM(v.valor) as value
from venda v
left join at_pedido at on at.CODIGO = v.CODIGO
inner join cliente c on c.CODIGO = v.RESP
where v.CANCELADO is not null and
v.[DATA] between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior and v.codfil in (1)
group by c.CODIGO
order by value desc
```
### TOP 10 PRODUTOS MAIS VENDIDOS (em valor)
##### Objetivo
Mostrar os 10 produtos mais vendidos (em valor)
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** RADAR
**Totalizador:** NAO
**Tempo de atualizacao:** 5min
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select top 10 max(e.nome) as label,sum((rz.QUANT * rz.UNITARIO)* -1) as value
from razaloja rz
inner join venda v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND v.CANCELADO IS NULL
inner join estoque e on e.codigo = rz.CODIGO
where rz.movto like 'VE%' AND rz.INFO <> 'RET' and rz.CODFIL in ($codfil) and
v.DATA between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
group by e.CODIGO
order by value desc
```
### TOP 10 PRODUTOS MAIS VENDIDOS (em quantidade)
##### Objetivo
Mostrar os 10 produtos mais vendidos (em quantidade)
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** RADAR
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** Un
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select max(e.nome) as label,sum(rz.QUANT) * -1 as value
from razaloja rz
inner join venda v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND v.CANCELADO IS NULL
inner join estoque e on e.codigo = rz.CODIGO
where rz.movto like 'VE%' AND rz.INFO <> 'RET' and
rz.CODFIL in ($codfil) and
v.DATA between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
group by e.CODIGO
order by value desc
```
### VENDA ANUAL POR MES
##### Objetivo
Mostrar o valor total vendido por mês.
**Variacoes da visao:**
* ano anterior
* ano atual
**Gráfico:** PIZZA
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Ano Anterior
```SQL
declare @primeiroDiaanopassado as datetime
declare @ultimoDiaanopassado as datetime
set @primeiroDiaanopassado = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) - 1, 0) set @ultimoDiaanopassado = DATEADD(dd, -1, DATEADD(yy, DATEDIFF(yy, 0, GETDATE()), '23:59:59'))
SELECT CONVERT(varchar(7), v.DATA, 126) AS label, SUM(v.VALOR) AS value
FROM dbo.VENDA AS v
LEFT JOIN dbo.AT_PEDIDO AS ped ON v.CODOFF = ped.CODIGO and v.cancelado is not null
WHERE (v.DATA BETWEEN @primeiroDiaanopassado and @ultimoDiaanopassado) and
v.CODFIL in ($codfil)
GROUP BY CONVERT(varchar(7), v.DATA, 126)
order by label
```
### COMPARATIVO ANUAL COM PERCENTUAL DE DIFERENÇA
##### Objetivo
Mostrar um comparativo do valor total vendido nos últimos 3 anos.
**Variacoes da visao:**
* últimos 3 anos
**Gráfico:** BARRAS VERTICAIS
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Últimos 3 anos
```SQL
declare @primeiroDiaanopassado as datetime
declare @ultimosTresAnos as datetime
set @ultimosTresAnos = DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) - 2, 0)
SELECT CONVERT(varchar(7), YEAR(v.DATA), 126) AS label, SUM(v.VALOR) as value
FROM dbo.VENDA AS v
WHERE (v.DATA BETWEEN @ultimosTresAnos and getdate()) and
v.CODFIL in ($codfil)
GROUP BY CONVERT(varchar(7), YEAR(v.DATA), 126)
order by label
```
### COMPRAS X VENDAS
##### Objetivo
Mostrar um comparativo do valor total comprado e do valor total vendido no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** BARRAS VERTICAIS
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mês passado
```SQL
terior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
SELECT label, value
FROM (SELECT 'Compra' AS label, CAST(CAST(SUM(VALORTOT) AS numeric(11, 2)) AS varchar) AS value
FROM dbo.COMPRA
WHERE (DTENTRADA BETWEEN @primeiroDiaMesAnterior AND @UltimoDiaMesAnterior) AND (POSICAO = 'F') and CODFIL in($codfil)
UNION ALL
SELECT 'Venda' AS label, CASE WHEN SUM(rz.quant) IS NULL THEN 0 ELSE SUM((((rz.quant * - 1) * rz.unitario)
+ rz.descAcres) * (v.valor / (v.valor - v.descAcres))) END -
(SELECT ISNULL(sum(VALOR), 0) AS valor FROM DEVOLUC
WHERE (DTSTATUS BETWEEN @primeiroDiaMesAnterior AND @UltimoDiaMesAnterior) AND (POSICAO <> 'C') and CODFIL in ($codfil)) AS value
FROM dbo.RAZALOJA AS rz INNER JOIN
dbo.VENDA AS v ON v.CODIGO = CAST(rz.PROCESSO AS INT) AND v.CANCELADO IS NULL AND v.DATA BETWEEN @primeiroDiaMesAnterior AND @UltimoDiaMesAnterior
WHERE (rz.MOVTO LIKE 'VE%') AND (rz.INFO <> 'RET') and rz.CODFIL in ($codfil) ) AS dum
```
## ESTOQUE
### TOP 10 PRODUTOS COM MAIS ESTOQUE
##### Objetivo
Mostrar o 10 produtos com mais unidades no estoque.
**Variacoes da visao:**
* dia atual
**Gráfico:** RADAR
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** Un
##### Abas
###### Diário
```SQL
declare @hojecedo as DATETIME
set @hojecedo = CONVERT(DATETIME,CONVERT(VARCHAR,GETDATE(), 101) + ' 00:00:00')
select top 10 MAX(e.codigo) as label, sum(qt.QTL + qt.QTD) as value
from estqt qt
inner join ESTOQUE e on e.CODIGO = qt.CODPROD
where codfil in($codfil)
group by e.CODIGO order by value desc
```
### PRODUTOS QUE ATINGIRAM ESTOQUE MÍNIMO
##### Objetivo
Mostrar os produtos que atingiram a quantidade mínima em estoque.
**Variacoes da visao:**
* momento da consulta
**Gráfico:** Lista
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** Un
##### Abas
###### Diário
```SQL
select e.nome as label, e.quantm as value from ESTOQUE e
inner join ESTQT qt on qt.CODPROD = e.CODIGO
where (qt.QTL + qt.QTD <= e.QUANTM) and codfil in($codfil)
order by value desc
```
### TOTAL EM ESTOQUE (CUSTO / VENDA E NUMERO TOTAL DE ITENS)
##### Objetivo
Mostrar os valores de Custo, Venda e Número total de itens do produtos em estoque.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** ROSCA
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
##### Abas
###### Diário
```SQL
select e.nome as label, e.quantm as value from ESTOQUE e
inner join ESTQT qt on qt.CODPROD = e.CODIGO
where (qt.QTL + qt.QTD <= e.QUANTM) and codfil in($codfil)
order by value desc
```
## FINANCEIRO
### CONTAS A PAGAR X CONTAS A RECEBER
##### Objetivo
Mostrar um comparativo do valor total a pagar e do valor total a receber no período selcionado.
**Variacoes da visao:**
* mes atual,
* próximo mes,
* próximos 6 meses
**Gráfico:** BARRAS VERTICAIS
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mês Atual
```SQL
declare @primeiroDiaMesAtual as DATETIME
declare @UltimoDiaMesAtual as DATETIME
set @primeiroDiaMesAtual = DateAdd(mm, DateDiff(mm,0,GetDate()), 0)
set @ultimoDiaMesAtual = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))
SELECT label, value
FROM (SELECT 'Pagar' AS label, SUM(VALOR) AS value
FROM dbo.PAGAR
WHERE (POSICAO = 'AB') AND (VENCTO between @primeiroDiaMesAtual AND @ultimoDiaMesAtual) and CODFIL in ($codfil)
GROUP BY POSICAO
UNION ALL
SELECT 'Receber' AS label, SUM(VALORAB) AS value
FROM dbo.RECEBER
WHERE (POSICAO = 'AB') AND (VENCTO between @primeiroDiaMesAtual AND @ultimoDiaMesAtual) and CODFIL in ($codfil)
GROUP BY POSICAO) AS dum
```
### PERCENTUAL DE INADIMPLENCIA
##### Objetivo
Mostrar o percentual de inadimplência no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** ROSCA
**Totalizador:** NAO
**Tempo de atualizacao:** 1 dia
**Formato do dado:** %
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select top 10 'Mês passado' as label , sum (valorab )
AS value
from RECEBER R
INNER JOIN CLIENTE C ON C.CODIGO = R.RESP
WHERE r.POSICAO = 'AB' and r.vencto < @UltimoDiaMesAnterior
AND R.CODFIL in($codfil)
union
select top 10 'Mês atual' as label , sum (valorab )
AS value
from RECEBER R
INNER JOIN CLIENTE C ON C.CODIGO = R.RESP
WHERE r.POSICAO = 'AB' and r.vencto < GETDATE()
AND R.CODFIL in($codfil)
```
### TOP 10 CLIENTES INADIMPLENTES
##### Objetivo
Mostrar o valor devido e o nome dos 10 clientes mais inadimplentes no período selecionado.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** BARRAS VERTICAIS
**Totalizador:** NAO
**Tempo de atualizacao:** 1 dia
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select top 10 MAX(C.NOME) label , cast(sum (valorab * 100)/ (select sum(valorab)
AS value
from RECEBER R
INNER JOIN CLIENTE C ON C.CODIGO = R.RESP
WHERE r.POSICAO = 'AB' and r.vencto < @UltimoDiaMesAnterior and R.CODFIL in($codfil))as decimal(4,2))
AS value
from RECEBER R
INNER JOIN CLIENTE C ON C.CODIGO = R.RESP
WHERE r.POSICAO = 'AB' and r.vencto < @UltimoDiaMesAnterior
AND R.CODFIL in($codfil) GROUP BY C.CODIGO ORDER BY VALUE DESC
```
## FISCAL
### TOTAL DE NOTAS EMITIDAS
##### Objetivo
Mostrar o valor total das notas emitidas (por modelo).
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** ROSCA
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select max(modelo) as label,SUM(totnf) as value from fc_nf
where CODFIL in ($codfil) and posicao = 'E' and emissao between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
group by modelo
```
### TOTAL DE NOTAS CANCELADAS
##### Objetivo
Mostrar o valor total das notas canceladas (por modelo).
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** ROSCA
**Totalizador:** SIM
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select max(modelo) as label,SUM(totnf) as value from fc_nf
where CODFIL in ($codfil) and nfe_sit = 'C' and emissao between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
group by modelo
```
### TOTAL DE NOTAS INUTILIZADAS
##### Objetivo
Mostrar o valor total das notas inutilizadas (por modelo).
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** ROSCA
**Totalizador:** SIM
**Tempo de atualizacao:** 5 MIN
**Formato do dado:** R$
##### Abas
###### Mês Anterior
```SQL
declare @UltimoDiaMesAnterior as DATETIME
declare @primeiroDiaMesAnterior as DATETIME
set @primeiroDiaMesAnterior = DateAdd(mm, DateDiff(mm,0,GetDate()) - 1, 0)
set @UltimoDiaMesAnterior = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))
select max(modelo) as label,SUM(totnf) as value from fc_nf
where CODFIL in ($codfil) and nfe_sit = 'I' and emissao between @primeiroDiaMesAnterior and @UltimoDiaMesAnterior
group by modelo
```
### TOTAL DE VENDAS POR TIPO DE TRIBUTAÇÃO (TRIBUTADO, ISENTO, NÃO TRIBUTADO, SUBSTITUIÇÃO)
##### Objetivo
Mostrar o valor total vendido por tipo de tributação.
**Variacoes da visao:**
* dia anterior,
* dia atual,
* mes anterior
* mes atual
**Gráfico:** BARRAS HORIZONTAIS
**Totalizador:** NAO
**Tempo de atualizacao:**
**Formato do dado:** R$
### ANÁLISE DE DESEMPENHO POR FILIAL
##### Objetivo
Apresentar uma tabela contendo os principais indicadores do varejo por filial.
**Variacoes da visao:**
* TOTAL DE VENDAS,
* VALOR TOTAL VENDIDO,
* ITENS VENDIDOS,
* CLIENTES,
* MIX,
* LUCRO,
* MKP VENDA,
* MKP CUSTO,
* MEDIA DE ITENS,
* VALOR MEDIO,
* CONTRIBUIÇÃO.
**Gráfico:** LISTA
**Totalizador:** NAO
**Tempo de atualizacao:** 5 min
**Formato do dado:** R$
# ALERTAS PARA O SONAR
### Alerta de Venda Cancelada ou Abandonada ???
#### Periodicidade:
* Deveria ser sempre mas vai lotar as notifiacoes do celular
### Alerta de Contas a Pagar x Contas a Receber
#### Periodicidade:
* Ao iniciar o app. (1º acesso do dia); ??? deve ter um evento para o alerta ???
### Alerta de Valor Máximo Atingido em espécie Dinheiro em algum dos caixas
#### Periodicidade:
* A cada 15 min.?
### Alertar quando a meta da loja for atingida (diária e mensal)
### Alerta para produtos com preço de Custo maior que Venda
#### Periodicidade:
* A cada 7 dias
### Alerta para produtos com custo zerado
#### Periodicidade:
* A cada 7 dias
### Alerta para produtos que atingiram o estoque mínimo
#### Periodicidade:
* A cada 7 dias