Contas a receber (Vendas)
Objetivo
Lista todos os pagamentos/parcelas vinculados a vendas criadas dentro de um período, com detalhes de vencimento, liquidação, situação, modalidade/bandeira de pagamento, plano de contas e composição de valores (juros, taxas e descontos). É um relatório analítico, uma linha por parcela, ordenado pela data da venda e vencimento.
Diferente do relatório de liquidação, aqui o período filtra pela data da venda (criação da comanda), não pela data de liquidação — e o pagamento aparece independentemente de estar liquidado ou não.
Tabelas envolvidas
Todas no schema do datalake (ex.: frq8798):
| Tabela | Papel |
|---|---|
payments | Base do relatório. Cada linha é um pagamento/parcela. Já traz desnormalizados: situação, modalidade, bandeira, plano de contas e cliente. |
orders | Venda vinculada ao pagamento. Fonte da data e valor da venda e do vendedor (seller_id / seller_name). |
customers | Fonte do celular do cliente (cellphone), via customer_id. O nome já está desnormalizado. |
Junções:
from payments p
join orders o
on o.order_id = p.order_id
and o."schema" = p."schema"
left join customers c
on c.customer_id = o.customer_id
and c."schema" = o."schema"⚠️ Todo join deve incluir a coluna "schema" além do id, para não cruzar dados entre franquias.
Escopo multi-franquia
O datalake enxerga todas as franquias. Não há filtro obrigatório; para restringir a uma franquia, usar "schema" (ou franchisor_id para agrupamentos por franqueador).
Filtros (regras de negócio)
Filtros fixos (sempre aplicados)
| Regra | Implementação no Redshift |
|---|---|
| Período da venda | o.created_at between :startDate and :endDate (obrigatório) |
| Somente pagamentos vinculados a venda | p.order_id is not null (na prática, garantido pelo inner join com orders) |
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)
Padrão "se o parâmetro for nulo, não filtra":
| Parâmetro | Condição |
|---|---|
| Vendedor(a) | o.seller_id = :seller |
| Modalidade de pagamento | p.payment_type_id = :paymentTypeId |
| Bandeira/tipo de pagamento | p.payment_brand_id = :paymentBrand |
| Situação do pagamento (multi-seleção) | p.payment_status_id in (:status) |
Os ids de situação, modalidade e bandeira no datalake são os mesmos do catálogo de origem.
Regras de cálculo
| Métrica | Fórmula |
|---|---|
| Valor original | coalesce(p.value, 0) |
| Valor final | coalesce(p.value, 0) + coalesce(p.interest_value, 0) - coalesce(p.fee_value, 0) - coalesce(p.discount_value, 0) |
Ou seja: valor final = valor da parcela + juros − taxas − descontos.
Não há agregação — listagem simples, uma linha por parcela.
Colunas do relatório → Datalake
| Coluna do relatório | Origem no Redshift | Observação |
|---|---|---|
| Data venda | o.created_at | |
| Venda | o.order_id | Id da venda no sistema de origem |
| Valor da venda | o.total_price | Repete para cada parcela da mesma venda — não somar diretamente |
| Cliente | p.customer_name | Já desnormalizado no pagamento |
| Celular | c.cellphone | Via join com customers |
| Vendedor(a) | o.seller_name | Vendedor da venda, não o employee_id do pagamento |
| Tipo de pagamento | p.payment_brand_name | O relatório exibe a bandeira nessa coluna (pode ser nulo) |
| Plano de contas | p.chart_account_name | Somente o nome (o código não é necessário) |
| Valor | p.value | |
| Parcela | p.installment | |
| Vencimento | p.due_date | |
| Liquidação | p.liquidation_date | Nulo se ainda não liquidado |
| Situação | p.payment_status_name | |
| Taxas | coalesce(p.fee_value, 0) | |
| Juros | coalesce(p.interest_value, 0) | |
| Desconto | coalesce(p.discount_value, 0) | |
| Valor original | coalesce(p.value, 0) | |
| Valor final | Ver regras de cálculo |
Ordenação padrão: o.created_at, p.due_date.
Totalizadores (rodapé do relatório)
| Totalizador | Cálculo |
|---|---|
| Total | sum(p.value) |