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):

TabelaPapel
paymentsBase do relatório. Cada linha é um pagamento/parcela. Já traz desnormalizados: status, tipo, bandeira e cliente.
ordersComanda (venda) vinculada ao pagamento. Fonte do vendedor (seller_id / seller_name), do auxiliar (aux_id / aux_name), da data e do total da venda.
customersOpcional — 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)

RegraImplementação no Redshift
Ignorar pagamentos cancelados/estornadosp.payment_status_id <> 0
Somente pagamentos liquidadosp.payment_status_id = 4exceto 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âmetroCondição
Período de liquidaçãop.liquidation_date between :startDate and :endDate
Período da vendao.created_at between :orderStartDate and :orderEndDate
Tipo de pagamentop.payment_type_id = :paymentType
Vendedoro.seller_id = :seller
Auxiliaro.aux_id = :aux
Considerar liquidação futuraBooleano — 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étricaFórmula
Valorsum(p.value)
Jurossum(p.interest_value)
Taxassum(p.fee_value)
Total Originalsum(coalesce(p.value, 0))
Total − Taxassum(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órioOrigem no RedshiftObservação
Data de Vencimentop.due_date
Data Liquidaçãop.liquidation_date
Comandao.order_id
Vendedoro.seller_name (via o.seller_id)Usar sempre o vendedor da comanda, não o employee_id do pagamento
Auxiliaro.aux_name (via o.aux_id)Pode ser nulo (venda sem auxiliar)
Clientep.customer_nameJá desnormalizado no pagamento
CPFcustomers.cpf (join por customer_id + "schema")Opcional
Tipo de pagamentop.payment_type_nameQuando p.payment_brand_name não for nulo, exibir como `payment_type_name' ('payment_brand_name')'`
Valor / Juros / Taxas / TotaisVer seção de agregação
Parcelap.installment
Situaçãop.payment_status_name
Data Vendao.created_at
Total Vendao.total_priceCuidado ao somar: repete para cada parcela da mesma comanda

Totalizadores (rodapé do relatório)

TotalizadorCálculo
Total por tipo de pagamentosum(value) agrupado por payment_type_id
Total por colaboradorsum(value) agrupado por o.seller_id
Total de Juros Recebidossum(interest_value)
Total de Taxas Pagassum(fee_value)
Total Liquidadosum(value)
Total Liquidado + Juros − Taxassum(value + interest_value - fee_value) (com coalesce em cada parcela)