Data Lake Grupo LOS • Documentação Técnica para Validação
Os dados são carregados diariamente do PostgreSQL (sistema TransÁgil) para o Data Lake via jobs automatizados.
| Tabela no Data Lake | Origem | Modo | Filtro |
|---|---|---|---|
raw_sales |
public.sales | Full overwrite | emissao_em >= 2026-01-01 |
raw_appropriations |
public.appropriations | Full overwrite | Todas de 2026+ |
raw_ctrcs |
public.ctrcs | Full overwrite | Todas de 2026+ |
raw_ctrc_recibo_cte |
public.ctrc_recibo_cte | Full overwrite | Todas de 2026+ |
datalake-carga-full-dimensoes. Assim, clientes/motoristas/veículos novos passam a aparecer nas views. A cada execução a foto anterior é substituída (mantém só a partição de ingestão mais recente); as views deduplicam por id pegando sempre a foto mais nova.
| Tabela | Registros | Observação |
|---|---|---|
raw_cliente |
~294k | Deduplicada nas views (ROW_NUMBER por idcliente) |
raw_filial |
~38 | Deduplicada nas views (ROW_NUMBER por idfilial) |
raw_motorista |
~88k | Deduplicada nas views (ROW_NUMBER por idmotorista) |
raw_veiculo |
~146k | Deduplicada nas views (ROW_NUMBER por idveiculo) |
raw_planocusto |
~284 | Partição única (sem duplicação) |
raw_cidade |
~6.1k | Partição única (sem duplicação) |
is_cancelado = true → CTes cancelados são removidosctrc_anulacao_id IS NOT NULL → CTes anulados são removidostipo = 't' → CTes substituídos são removidos (tipo "t" = substituído)emissao_em < '2024-01-01' → Só entra 2024 em dianteO CTe só entra se tiver pelo menos 1 appropriation com plano de custo válido (não excluído).
Centros de custo EXCLUÍDOS:
Quando um CTe tem mais de um status, a prioridade é:
| Prioridade | Status | Descrição |
|---|---|---|
| 1 (maior) | C | CONFIRMADO |
| 2 | F | FS-DA |
| 3 | N | NEGADO |
| 4 | E | ENVIADO |
| 5 | L | CANCELADO |
| 6 (menor) | NULL | PENDENTE (sem registro) |
id (mais recente).
| Regra | OPERACIONAL | FISCAL |
|---|---|---|
| Série M (Minutas) | Inclui minutas como docs individuais | Exclui serie = 'M' |
| CTes-pai com minutas | Exclui (qtd_minutas > 0) | Não filtra |
| Diferenciação NFe × CTe | Campo especie (case-insensitive: UPPER(especie)) |
Campo especie (case-insensitive: UPPER(especie)) |
| NFe (espécie NF*) | Sempre entra (toda NFe fica pendente) | Sempre entra (toda NFe fica pendente) |
| CTe PENDENTE (status NULL) | Exclui, EXCETO minuta (série M) | Exclui todo CTe pendente |
| Status N (Negado) | Exclui | Exclui |
| Status E (Enviado/Substituído) | Exclui | Exclui |
| Status L (Cancelado) | Exclui | Exclui (cancelamento não é faturamento) |
qtd_minutas_vinculadas > 0 para não duplicar). O FISCAL é mais simples: exclui série M e não olha minutas vinculadas. Nos status, ambos excluem cancelados (L), negados (N) e enviados/substituídos (E). A única particularidade é o PENDENTE: como toda minuta fica pendente, o operacional não descarta minutas pendentes; já o fiscal (que não usa minutas) descarta todo CTe pendente. Em ambos, NFe sempre entra (toda NFe nasce pendente).
View detalhada — 1 linha por CTe com todos os campos (motorista, veículo, rota, impostos, etc.)
View detalhada — 1 linha por CTe (mesmos campos que operacional)
View agregada — SUM(total_receita) agrupado por data + raiz CNPJ + razão social
Mesmas regras da vw_faturamento_cte_operacional, mas sem detalhes de CTe individual.
View agregada — SUM(total_receita) agrupado por data + raiz CNPJ + razão social
Mesmas regras da vw_faturamento_cte_fiscal, mas sem detalhes de CTe individual.
View agregada — SUM(total_receita) agrupado por data + raiz CNPJ + rota (cidade origem/destino)
View agregada — SUM(total_receita) agrupado por data + raiz CNPJ + rota (cidade origem/destino)
| View | Valor (R$ milhões) | Linhas |
|---|---|---|
| vw_faturamento_cte_operacional | R$ 168,25M | 283.726 |
| vw_faturamento_cliente_operacional | R$ 168,24M | — |
| vw_faturamento_cte_fiscal | R$ 179,39M | 284.554 |
| vw_faturamento_cliente_fiscal | R$ 179,39M | — |
| View | Valor (R$ milhões) |
|---|---|
| vw_faturamento_cte_operacional | R$ 158,91M |
| vw_faturamento_cte_fiscal | R$ 167,85M |
| View (Junho/2026) | Valor | Linhas |
|---|---|---|
| vw_faturamento_cliente_operacional | R$ 167,37M | 2.151 |
| vw_faturamento_cliente_fiscal | R$ 167,83M | 2.111 |
| Status | Qtd CTes | Valor |
|---|---|---|
| CONFIRMADO | 279.271 | R$ 163,23M |
| PENDENTE (minutas série M) | 4.455 | R$ 5,01M |
Causa raiz (2 problemas combinados):
Correção aplicada:
clientes_dedup com ROW_NUMBER() → 1 registro por cliente| # | Pergunta | Contexto |
|---|---|---|
| 1 | O valor de referência "177M" é da visão fiscal ou operacional? | Operacional = R$ 168M, Fiscal = R$ 179M. A diferença são os pendentes + minutas. |
| 2 | Pendentes devem entrar na operacional? | Atualmente excluímos pendentes (exceto minutas série M). Se incluir todos os pendentes, sobe para ~R$ 180M. |
| 3 | Status L (Cancelado) deve ser excluído da operacional? | Atualmente não excluímos L na operacional (só N e E). Na fiscal também não. |
| 4 | A lista de centros de custo excluídos está completa? | 15 centros excluídos atualmente. Algum novo a adicionar ou remover? |