feat: Phase 2 – Budget-Engine + Direktzugriff (http://IP:Port)

Budget:
- Modelle + Migration 0003: budget_template_lines, planned_income_lines,
  budget_periods, budget_period_lines.
- services/budget: Perioden-Grenzen (einstellbarer Starttag, Label nach Endmonat),
  Standard-Vorlage vs. Monats-Override (Snapshot-on-Customize), Soll/Ist inkl.
  budgetierter Sparen-Transfers, geplante Einnahmen (Soll/Ist).
- routers/budgets: Vorlage, geplante Einnahmen (CRUD), Monats-Soll/Ist,
  Monats-Override, Zurücksetzen. pytest: Perioden, Soll/Ist, Override/Reset, Einnahmen.
- Frontend: Budget-Seite (Monat + Standard-Budget), Fortschrittsbalken grün/rot,
  Monats-Navigation, editierbare Soll-Beträge; Sparen-Option im Transfer-Formular.

Deployment-Fix (Nutzer-Anforderung: http://IP:Port muss funktionieren):
- Dienst bindet an APP_BIND_HOST=0.0.0.0 (direkt im LAN erreichbar).
- APP_COOKIE_SECURE=false als Standard (sonst kein Login über reines HTTP);
  für reinen HTTPS-Betrieb umstellbar. Doku + install.sh entsprechend angepasst.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Guido
2026-08-19 19:16:27 +02:00
co-authored by Claude Opus 4.8
parent d692c04cc1
commit 8ed4bf5254
21 changed files with 1352 additions and 22 deletions
+24 -1
View File
@@ -150,6 +150,29 @@
"allTypes": "All types",
"deleteConfirm": "Delete this transaction?",
"amountRequired": "Please enter an amount.",
"accountRequired": "Please choose an account."
"accountRequired": "Please choose an account.",
"budgetAsSavings": "Count as savings in the budget",
"budgetCategory": "Budget category"
},
"budget": {
"title": "Budget",
"monthMode": "Month",
"templateMode": "Standard budget",
"income": "Income",
"expenses": "Expenses",
"planned": "Planned",
"totalIncome": "Total income",
"totalExpense": "Total expenses",
"reset": "Reset to standard",
"resetTitle": "Reset month",
"resetConfirm": "Reset this month to the standard budget? This month's adjustments will be lost.",
"templateHint": "The standard budget applies to every month until you adjust a month individually.",
"addIncome": "Planned income",
"editIncome": "Edit income",
"noIncome": "No planned income yet.",
"deleteIncomeConfirm": "Delete this planned income?",
"incomeLabel": "Label",
"incomeCategory": "Category",
"targetAccount": "Target account"
}
}