Jump to content
Fórum Script Brasil
  • 0

Fluxo de Caixa com Valor Mínimo


Carlos Moretto

Question

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

image.png.2f5bcfc5a2c4aadb669d2f6a47370cf4.png

-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 is null)
        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(case when financial_accounts.type = 'ReceivableAccount' then financial_accounts.amount else 0 end) as receita,
    sum(case when financial_accounts.type <> 'ReceivableAccount' then -financial_accounts.amount else 0 end) as despesa,
    sum(case when 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)
 where true
    and {{filtro_empresa}}
    and (case when financial_accounts.type = 'ReceivableAccount' then financial_accounts.sale_account_id is not null else true end)
    and financial_accounts.due_date between current_date and (date_trunc('month', current_date) + interval '1 month') - interval '1 day'
group by 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 null END) 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? 

Agradeço desde já

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Veja que no dia 20 o resultado do acumulado é o resultado do acumulado do dia anterior, somando a receita atual menos a despesa atual. O resultado negativo de 19642,42 deveria ter um aporte mínimo de valor correspondente, como não foi aportado o novo saldo ficou negativo influenciando a movimentação do dia seguinte. Isso gerou a diferença. O seu código está correto. A movimentação é que precisa ser auditada.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...