v1.43.21 - FIX CRÍTICO: Instâncias de recorrências vencidas na projeção

This commit is contained in:
marcoitaloesp-ai 2025-12-16 20:13:32 +00:00 committed by GitHub
parent 580d318e85
commit e1a01cab91
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 37 additions and 1 deletions

View File

@ -5,6 +5,16 @@ O formato segue [Keep a Changelog](https://keepachangelog.com/pt-BR/).
Este projeto adota [Versionamento Semântico](https://semver.org/pt-BR/).
## [1.43.21] - 2025-12-16
### Fixed
- **Projeção de Saldo - Instâncias de Recorrências Vencidas**
- FIX CRÍTICO: Projeção agora inclui instâncias de recorrências pendentes vencidas
- Exemplo: "Aluguel" (1003,59€, vencida há 15 dias) e "Compra Bizum Asenergy" (94,22€, vencida há 29 dias)
- Query adicional para `recurring_instances` com `status='pending'` e `due_date < hoje`
- Separa receitas e despesas vencidas corretamente
- Valores agora aparecem em `overdue.income` e `overdue.expense`
## [1.43.20] - 2025-12-16
### Fixed

View File

@ -1 +1 @@
1.43.20
1.43.21

View File

@ -966,6 +966,32 @@ public function projection(Request $request)
$overdueExpense += $this->convertToPrimaryCurrency($rec['amount'], $rec['currency']);
}
// Instâncias de recorrências pendentes vencidas
$overdueRecurringInstances = DB::select("
SELECT
ri.planned_amount as amount,
rt.type,
COALESCE(a.currency, 'EUR') as currency
FROM recurring_instances ri
JOIN recurring_templates rt ON ri.recurring_template_id = rt.id
LEFT JOIN accounts a ON rt.account_id = a.id
WHERE ri.user_id = ?
AND ri.status = 'pending'
AND ri.due_date < ?
AND ri.deleted_at IS NULL
", [$this->userId, $today]);
foreach ($overdueRecurringInstances as $row) {
$amount = abs($row->amount);
$converted = $this->convertToPrimaryCurrency($amount, $row->currency);
if ($row->type === 'credit') {
$overdueIncome += $converted;
} else {
$overdueExpense += $converted;
}
}
// =========================================================================
// 6. TRANSAÇÕES PENDENTES ATÉ O FIM DO MÊS (planned_date entre hoje e fim do mês)
// =========================================================================