Estou com um desafio a algum tempo e ainda não encontrei uma solução que funcione.
Fiz um select para gerar um fluxo de caixa projetado com base em data, saldo inicial, despesas e receitas. A parte de alto soma para fazer o saldo já está concluída, fiz com CTE.
O objetivo do relatório de fluxo de caixa e projetar quanto vou precisar aportar (entrada de dinheiro no fluxo) em um determinado dia. A entrada seria para o caixa nunca ficar negativo ou ter um valor mínimo (valor parametrizado). A ideia é que seja possível visualizar o valor exato do aporte necessário diariamente. Exemplo
-Na parte verde são as informações que já consegui trazer com o SELECT
-Na parte azul é o que preciso calcular. Observando o dia 21/9/2023 se nota que o valor necessário para manter o caixa zerado (mínimo) é de 22.951,42 e não de 25.000 (conforme o resultado do dia), sendo assim não é simplesmente olhar se o resultado for negativo e apresentar o valor exato.
Segue o SELECT usado:
with empresa_centro as({{#4484}}),
saldo_inicial as(select
sum(financial_transactions.amount)as saldo_inicial_contas
from financial_transactions
join deposit_accounts on (deposit_accounts.id=financial_transactions.deposit_account_id and financial_transactions.parent_id isnull)join entities on (entities.id= deposit_accounts.entity_id)where occurred_at <= current_date-1[[and{{filtro_empresa}}]]),
transacoes as(select
financial_accounts.due_date as data_vencimento,
sum(casewhen financial_accounts.type ='ReceivableAccount'then financial_accounts.amount else0end)as receita,
sum(casewhen financial_accounts.type <>'ReceivableAccount'then-financial_accounts.amount else0end)as despesa,
sum(casewhen financial_accounts.type ='ReceivableAccount'then financial_accounts.amount else-financial_accounts.amount end)as resultado
from financial_accounts
inner join entities on (entities.id=financial_accounts.entity_id)
inner join empresa_centro on (empresa_centro.empresa_id=entities.id)wheretrueand{{filtro_empresa}}and(casewhen financial_accounts.type ='ReceivableAccount'then financial_accounts.sale_account_id isnotnullelsetrueend)and financial_accounts.due_date between current_date and(date_trunc('month', current_date)+ interval '1 month')- interval '1 day'groupby financial_accounts.due_date)select
transacoes.data_vencimento,
transacoes.receita,
transacoes.despesa,
transacoes.resultado,(CASE WHEN ROW_NUMBER() OVER (ORDER BY transacoes.data_vencimento asc)=1 THEN (select saldo_inicial_contas from saldo_inicial) ELSE nullEND)as saldo_inicial,(select saldo_inicial_contas from saldo_inicial)+ sum(transacoes.resultado) over (order by transacoes.data_vencimento asc)as saldo_acumulado
from transacoes
order by transacoes.data_vencimento asc
Estou usando o metabase para isso e não é possível usar variáveis, function, procedures e triggers. O que é uma pena. Tenho apenas usuário de leitura no banco é isso não vai mudar conforme o compliance do meu cliente. Alguém consegue me dar uma luz?
Pergunta
Carlos Moretto
Fala galera!
Estou com um desafio a algum tempo e ainda não encontrei uma solução que funcione.
Fiz um select para gerar um fluxo de caixa projetado com base em data, saldo inicial, despesas e receitas. A parte de alto soma para fazer o saldo já está concluída, fiz com CTE.
O objetivo do relatório de fluxo de caixa e projetar quanto vou precisar aportar (entrada de dinheiro no fluxo) em um determinado dia. A entrada seria para o caixa nunca ficar negativo ou ter um valor mínimo (valor parametrizado). A ideia é que seja possível visualizar o valor exato do aporte necessário diariamente. Exemplo
-Na parte verde são as informações que já consegui trazer com o SELECT
-Na parte azul é o que preciso calcular. Observando o dia 21/9/2023 se nota que o valor necessário para manter o caixa zerado (mínimo) é de 22.951,42 e não de 25.000 (conforme o resultado do dia), sendo assim não é simplesmente olhar se o resultado for negativo e apresentar o valor exato.
Segue o SELECT usado:
Estou usando o metabase para isso e não é possível usar variáveis, function, procedures e triggers. O que é uma pena. Tenho apenas usuário de leitura no banco é isso não vai mudar conforme o compliance do meu cliente. Alguém consegue me dar uma luz?
Agradeço desde já
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.