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