---
# System prepended metadata

title: CONSULTAS PARA O SONAR

---

# 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
