Movimentos liquidados
Objetivo
Este documento descreve como reproduzir no datalake o relatório de liquidação de pagamentos. Ele lista os pagamentos vinculados a comandas (vendas), com informações de vendedor, auxiliar, cliente, tipo de pagamento e valores (valor, juros e taxas), permitindo análises de valores liquidados por período, colaborador e tipo de pagamento.
Tabelas envolvidas
Todas no schema do datalake (ex.: frq8798):
| Tabela | Papel |
|---|---|
payments | Base do relatório. Cada linha é um pagamento/parcela. Já traz desnormalizados: status, tipo, bandeira e cliente. |
orders | Comanda (venda) vinculada ao pagamento. Fonte do vendedor (seller_id / seller_name), do auxiliar (aux_id / aux_name), da data e do total da venda. |
customers | Opcional — apenas se precisar de dados adicionais do cliente (ex.: CPF), via payments.customer_id. O nome já está em payments.customer_name. |
Junção principal:
from payments p
join orders o
on o.order_id = p.order_id
and o."schema" = p."schema"⚠️ Importante: como o datalake consolida várias franquias na mesma tabela, todo join deve incluir a coluna "schema" além do id, senão haverá cruzamento de dados entre franquias.
Escopo multi-franquia
O datalake enxerga todas as franquias. Não há filtro obrigatório de franquia; se o usuário quiser restringir, usar a coluna "schema" (ou franchisor_id para agrupamentos por franqueador).
Filtros (regras de negócio)
Filtros fixos (sempre aplicados)
| Regra | Implementação no Redshift |
|---|---|
| Ignorar pagamentos cancelados/estornados | p.payment_status_id <> 0 |
| Somente pagamentos liquidados | p.payment_status_id = 4 — exceto se o usuário marcar a opção "considerar liquidação futura", caso em que essa condição é removida (mantendo apenas <> 0) |
Registros deletados não existem no datalake (o ETL não mantém soft deletes), então não há filtro de exclusão a aplicar.
Filtros parametrizáveis (opcionais)
Todos seguem o padrão "se o parâmetro for nulo, não filtra":
| Parâmetro | Condição |
|---|---|
| Período de liquidação | p.liquidation_date between :startDate and :endDate |
| Período da venda | o.created_at between :orderStartDate and :orderEndDate |
| Tipo de pagamento | p.payment_type_id = :paymentType |
| Vendedor | o.seller_id = :seller |
| Auxiliar | o.aux_id = :aux |
| Considerar liquidação futura | Booleano — quando verdadeiro, inclui pagamentos ainda não liquidados (remove a condição payment_status_id = 4) |
Os ids de payment_status_id e payment_type_id no datalake são os mesmos do catálogo de origem.
Agregação
O relatório agrupa por comanda + parcela + tipo de pagamento (na prática, uma linha por pagamento/parcela dentro da comanda) e soma os valores:
| Métrica | Fórmula |
|---|---|
| Valor | sum(p.value) |
| Juros | sum(p.interest_value) |
| Taxas | sum(p.fee_value) |
| Total Original | sum(coalesce(p.value, 0)) |
| Total − Taxas | sum(coalesce(p.value, 0) + coalesce(p.interest_value, 0) - coalesce(p.fee_value, 0)) |
Chaves do agrupamento (mínimo): o.order_id, p.installment, p.payment_type_id, p.liquidation_date, p.due_date + as colunas descritivas exibidas.
Ordenação padrão: p.liquidation_date, o.order_id.
Colunas do relatório → Datalake
| Coluna do relatório | Origem no Redshift | Observação | ||||||
|---|---|---|---|---|---|---|---|---|
| Data de Vencimento | p.due_date | |||||||
| Data Liquidação | p.liquidation_date | |||||||
| Comanda | o.order_id | |||||||
| Vendedor | o.seller_name (via o.seller_id) | Usar sempre o vendedor da comanda, não o employee_id do pagamento | ||||||
| Auxiliar | o.aux_name (via o.aux_id) | Pode ser nulo (venda sem auxiliar) | ||||||
| Cliente | p.customer_name | Já desnormalizado no pagamento | ||||||
| CPF | customers.cpf (join por customer_id + "schema") | Opcional | ||||||
| Tipo de pagamento | p.payment_type_name | Quando p.payment_brand_name não for nulo, exibir como `payment_type_name | ' (' | payment_brand_name | ')'` | |||
| Valor / Juros / Taxas / Totais | Ver seção de agregação | |||||||
| Parcela | p.installment | |||||||
| Situação | p.payment_status_name | |||||||
| Data Venda | o.created_at | |||||||
| Total Venda | o.total_price | Cuidado ao somar: repete para cada parcela da mesma comanda |
Totalizadores (rodapé do relatório)
| Totalizador | Cálculo |
|---|---|
| Total por tipo de pagamento | sum(value) agrupado por payment_type_id |
| Total por colaborador | sum(value) agrupado por o.seller_id |
| Total de Juros Recebidos | sum(interest_value) |
| Total de Taxas Pagas | sum(fee_value) |
| Total Liquidado | sum(value) |
| Total Liquidado + Juros − Taxas | sum(value + interest_value - fee_value) (com coalesce em cada parcela) |