feat: Phase 1 – Konten, Kategorien, Transaktionen, EZB-Währungsumrechnung
Backend: - Modelle + Migration 0002: accounts, account_identifiers, category_groups, categories, transactions, exchange_rates (alle owner-gescoped). - EZB-Kursdienst (90-Tage/Historie) + Backfill-Skript; Umrechnung EUR<->CHF zum Buchungsdatum mit lokalem Cache und manueller Übersteuerung; EUR-Pivot (amount_eur_cents) eingefroren. - Kontostände + Netto-Vermögen (Umrechnung in Hauptwährung). - Router: accounts (inkl. IBAN-Identifikatoren), categories (Gruppen+Kategorien), transactions (Ausgabe/Einnahme/Transfer, cross-currency), rates. - Gruppierte Standard-Kategorien je Nutzer beim Anlegen. - pytest-Suite: Währung, Salden, Cross-Currency-Transfer, Nutzer-Isolation. Frontend: - Seiten Konten, Kategorien, Buchungen; Icon-Chip, Geldbetrag mit Umrechnung, Icon-/Farbwähler, Modal; erweitertes SVG-Icon-Set (Konto-/Kategorie-Icons). - Währungs-/Datumsformatierung (EUR de-DE, CHF de-CH), i18n DE/EN erweitert. - Live-Umrechnungs-Vorschau im Transfer-Formular. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -81,5 +81,75 @@
|
||||
"server": {
|
||||
"unreachable": "Server nicht erreichbar.",
|
||||
"sessionKept": "Deine Anmeldung ist noch gültig – sobald der Server wieder antwortet, geht es weiter."
|
||||
},
|
||||
"accounts": {
|
||||
"title": "Konten",
|
||||
"new": "Neues Konto",
|
||||
"edit": "Konto bearbeiten",
|
||||
"name": "Name",
|
||||
"type": "Typ",
|
||||
"currency": "Währung",
|
||||
"icon": "Symbol",
|
||||
"color": "Farbe",
|
||||
"openingBalance": "Anfangssaldo",
|
||||
"openingDate": "Stichtag",
|
||||
"identifiers": "Erkennungs-Nummern (IBAN etc.)",
|
||||
"addIdentifier": "Nummer hinzufügen",
|
||||
"identShort": "Nr.",
|
||||
"total": "Gesamt",
|
||||
"empty": "Noch keine Konten. Lege dein erstes Konto an.",
|
||||
"deleteConfirm": "Dieses Konto und alle zugehörigen Buchungen löschen?"
|
||||
},
|
||||
"accountTypes": {
|
||||
"girokonto": "Girokonto",
|
||||
"sparkonto": "Sparkonto",
|
||||
"bargeld": "Bargeld",
|
||||
"kreditkarte": "Kreditkarte",
|
||||
"depot": "Depot / Investment",
|
||||
"sonstiges": "Sonstiges"
|
||||
},
|
||||
"identifierKinds": {
|
||||
"iban": "IBAN",
|
||||
"account_no": "Kontonummer",
|
||||
"card_no": "Kartennummer"
|
||||
},
|
||||
"categories": {
|
||||
"title": "Kategorien",
|
||||
"newGroup": "Neue Gruppe",
|
||||
"editGroup": "Gruppe bearbeiten",
|
||||
"newCategory": "Neue Kategorie",
|
||||
"editCategory": "Kategorie bearbeiten",
|
||||
"name": "Name",
|
||||
"kind": "Art",
|
||||
"income": "Einnahme",
|
||||
"expense": "Ausgabe",
|
||||
"emptyGroup": "Keine Kategorien in dieser Gruppe.",
|
||||
"deleteConfirm": "Diese Kategorie löschen?",
|
||||
"deleteGroupConfirm": "Diese Gruppe samt aller Kategorien löschen?"
|
||||
},
|
||||
"transactions": {
|
||||
"title": "Buchungen",
|
||||
"new": "Neue Buchung",
|
||||
"edit": "Buchung bearbeiten",
|
||||
"expense": "Ausgabe",
|
||||
"income": "Einnahme",
|
||||
"transfer": "Transfer",
|
||||
"date": "Datum",
|
||||
"account": "Konto",
|
||||
"fromAccount": "Von Konto",
|
||||
"toAccount": "Auf Konto",
|
||||
"category": "Kategorie",
|
||||
"amount": "Betrag",
|
||||
"toAmount": "Gutschrift",
|
||||
"payee": "Empfänger",
|
||||
"description": "Verwendungszweck",
|
||||
"uncategorized": "Ohne Kategorie",
|
||||
"empty": "Noch keine Buchungen.",
|
||||
"needAccount": "Lege zuerst ein Konto an, um Buchungen zu erfassen.",
|
||||
"allAccounts": "Alle Konten",
|
||||
"allTypes": "Alle Typen",
|
||||
"deleteConfirm": "Diese Buchung löschen?",
|
||||
"amountRequired": "Bitte einen Betrag eingeben.",
|
||||
"accountRequired": "Bitte ein Konto wählen."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,5 +81,75 @@
|
||||
"server": {
|
||||
"unreachable": "Server unreachable.",
|
||||
"sessionKept": "Your session is still valid – once the server responds again, it will continue."
|
||||
},
|
||||
"accounts": {
|
||||
"title": "Accounts",
|
||||
"new": "New account",
|
||||
"edit": "Edit account",
|
||||
"name": "Name",
|
||||
"type": "Type",
|
||||
"currency": "Currency",
|
||||
"icon": "Icon",
|
||||
"color": "Color",
|
||||
"openingBalance": "Opening balance",
|
||||
"openingDate": "As of",
|
||||
"identifiers": "Identifiers (IBAN etc.)",
|
||||
"addIdentifier": "Add identifier",
|
||||
"identShort": "id(s)",
|
||||
"total": "Total",
|
||||
"empty": "No accounts yet. Create your first account.",
|
||||
"deleteConfirm": "Delete this account and all its transactions?"
|
||||
},
|
||||
"accountTypes": {
|
||||
"girokonto": "Checking",
|
||||
"sparkonto": "Savings",
|
||||
"bargeld": "Cash",
|
||||
"kreditkarte": "Credit card",
|
||||
"depot": "Brokerage / Investment",
|
||||
"sonstiges": "Other"
|
||||
},
|
||||
"identifierKinds": {
|
||||
"iban": "IBAN",
|
||||
"account_no": "Account number",
|
||||
"card_no": "Card number"
|
||||
},
|
||||
"categories": {
|
||||
"title": "Categories",
|
||||
"newGroup": "New group",
|
||||
"editGroup": "Edit group",
|
||||
"newCategory": "New category",
|
||||
"editCategory": "Edit category",
|
||||
"name": "Name",
|
||||
"kind": "Kind",
|
||||
"income": "Income",
|
||||
"expense": "Expense",
|
||||
"emptyGroup": "No categories in this group.",
|
||||
"deleteConfirm": "Delete this category?",
|
||||
"deleteGroupConfirm": "Delete this group and all its categories?"
|
||||
},
|
||||
"transactions": {
|
||||
"title": "Transactions",
|
||||
"new": "New transaction",
|
||||
"edit": "Edit transaction",
|
||||
"expense": "Expense",
|
||||
"income": "Income",
|
||||
"transfer": "Transfer",
|
||||
"date": "Date",
|
||||
"account": "Account",
|
||||
"fromAccount": "From account",
|
||||
"toAccount": "To account",
|
||||
"category": "Category",
|
||||
"amount": "Amount",
|
||||
"toAmount": "Credited",
|
||||
"payee": "Payee",
|
||||
"description": "Description",
|
||||
"uncategorized": "Uncategorized",
|
||||
"empty": "No transactions yet.",
|
||||
"needAccount": "Create an account first to record transactions.",
|
||||
"allAccounts": "All accounts",
|
||||
"allTypes": "All types",
|
||||
"deleteConfirm": "Delete this transaction?",
|
||||
"amountRequired": "Please enter an amount.",
|
||||
"accountRequired": "Please choose an account."
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user