Ein neuer Reiter "Eingang" mit allem, worueber jemand entscheiden muss. Vier Abschnitte, jeweils mit Anzahl im Kopf: - Zu buchen: offene Eingangseintraege aus Kurzbefehl, Postfach oder Bank. Buchen, als Uebertrag buchen, verwerfen - oder alle auf einmal, bei denen das Konto feststeht. Unklare tragen einen Hinweis ueber den Knoepfen, nicht darunter: Man soll sie ansehen, nicht wegbuchen. - Koennten Uebertraege sein: zwei getrennte Buchungen, die zusammengehoeren koennten. Verbinden oder ablehnen. Hat eine der beiden eine Kategorie, steht dabei, dass sie durchs Verbinden aus dem Budget faellt. - Ohne Kategorie: gebuchtes Geld, das in keiner Budget-Zeile mitzaehlt. Ein Tipp, eine Kategorie - kein Formular mit zwoelf Feldern davor. - Sieht doppelt aus: gleiches Konto, gleicher Tag, gleicher Betrag. Mit der Kennung der Bank je Zeile, denn verschiedene Kennungen heissen, dass die Bank sie als verschiedene Zahlungen gemeldet hat. Alles in einem Abruf. Vier getrennte Zwischenspeicher koennten offline aus vier verschiedenen Momenten stammen und sich widersprechen. Hier sitzt der einzige 409-Fall der App: Beim Buchen als Uebertrag kann das Backend Bedenken haben. Das ist eine Frage, kein Fehler - die App zeigt den Hinweis und wiederholt den Aufruf auf Wunsch mit trotzdem=true. Ihn zu verschlucken waere falsch, ihn als blossen Fehler zu zeigen auch. Zwei Dinge, die die Tests festhalten: Ohne Konto laesst sich nichts buchen (das Backend lehnt mit 400 ab, der Knopf bleibt also grau - und die Zeile sagt auch warum). Und ein Uebertrag braucht keine Kategorie, sonst fragte die Liste ewig nach einer, die es nie geben wird. Die Pruefdatei deckt jetzt auch Eingang, Dubletten und Uebertragsvorschlaege ab. Die aelteren Pruefungen zaehlten exakt und wurden dadurch rot - sie pruefen jetzt Eigenschaften statt Mengen, damit sie das naechste Wachstum ueberleben. 54 Tests gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1405 lines
29 KiB
JSON
1405 lines
29 KiB
JSON
{
|
|
"version": {
|
|
"name": "Certain Finance",
|
|
"version": "0.1.0",
|
|
"git_sha": null
|
|
},
|
|
"ichSelbst": {
|
|
"id": 1,
|
|
"username": "admin",
|
|
"role": "admin",
|
|
"display_name": null,
|
|
"is_active": true,
|
|
"must_change_password": false,
|
|
"must_change_password_reason": null,
|
|
"totp_enabled": false,
|
|
"created_at": "2026-10-21T19:21:28.289884",
|
|
"mfa_setup_required": false
|
|
},
|
|
"einstellungen": [
|
|
{
|
|
"key": "base_currency",
|
|
"value": "EUR"
|
|
},
|
|
{
|
|
"key": "budget_start_day",
|
|
"value": "1"
|
|
},
|
|
{
|
|
"key": "locale",
|
|
"value": "de"
|
|
},
|
|
{
|
|
"key": "theme",
|
|
"value": "system"
|
|
},
|
|
{
|
|
"key": "date_format",
|
|
"value": "de"
|
|
},
|
|
{
|
|
"key": "active_currencies",
|
|
"value": "EUR,CHF,USD"
|
|
}
|
|
],
|
|
"konten": [
|
|
{
|
|
"id": 1,
|
|
"name": "Girokonto",
|
|
"type": "girokonto",
|
|
"currency": "EUR",
|
|
"icon": "wallet",
|
|
"color": "#3f51b5",
|
|
"opening_balance_cents": 120000,
|
|
"opening_date": null,
|
|
"credit_limit_cents": null,
|
|
"is_locked": false,
|
|
"is_archived": false,
|
|
"position": 0,
|
|
"savings_category_id": null,
|
|
"identifiers": [],
|
|
"balance_cents": 419874,
|
|
"balance_base_cents": 419874,
|
|
"bank_balance_cents": null,
|
|
"bank_balance_at": null,
|
|
"bank_balance_vergleichbar": false
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Sparen",
|
|
"type": "sparkonto",
|
|
"currency": "CHF",
|
|
"icon": "wallet",
|
|
"color": "#3f51b5",
|
|
"opening_balance_cents": 500000,
|
|
"opening_date": null,
|
|
"credit_limit_cents": null,
|
|
"is_locked": true,
|
|
"is_archived": false,
|
|
"position": 1,
|
|
"savings_category_id": null,
|
|
"identifiers": [],
|
|
"balance_cents": 535000,
|
|
"balance_base_cents": 535000,
|
|
"bank_balance_cents": null,
|
|
"bank_balance_at": null,
|
|
"bank_balance_vergleichbar": false
|
|
},
|
|
{
|
|
"id": 3,
|
|
"name": "Zweitkonto",
|
|
"type": "girokonto",
|
|
"currency": "EUR",
|
|
"icon": "wallet",
|
|
"color": "#3f51b5",
|
|
"opening_balance_cents": 0,
|
|
"opening_date": null,
|
|
"credit_limit_cents": null,
|
|
"is_locked": false,
|
|
"is_archived": false,
|
|
"position": 2,
|
|
"savings_category_id": null,
|
|
"identifiers": [],
|
|
"balance_cents": 7500,
|
|
"balance_base_cents": 7500,
|
|
"bank_balance_cents": null,
|
|
"bank_balance_at": null,
|
|
"bank_balance_vergleichbar": false
|
|
}
|
|
],
|
|
"kategoriegruppen": [
|
|
{
|
|
"id": 1,
|
|
"name": "Fixkosten",
|
|
"kind": "expense",
|
|
"icon": "landmark",
|
|
"color": "#3f51b5",
|
|
"position": 0,
|
|
"is_builtin": true,
|
|
"categories": [
|
|
{
|
|
"id": 1,
|
|
"group_id": 1,
|
|
"name": "Wohnen",
|
|
"type": "expense",
|
|
"icon": "home",
|
|
"color": "#3f51b5",
|
|
"position": 0,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 2,
|
|
"group_id": 1,
|
|
"name": "Versicherungen",
|
|
"type": "expense",
|
|
"icon": "shield",
|
|
"color": "#3f51b5",
|
|
"position": 1,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 3,
|
|
"group_id": 1,
|
|
"name": "Telefon & Internet",
|
|
"type": "expense",
|
|
"icon": "wifi",
|
|
"color": "#3f51b5",
|
|
"position": 2,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 4,
|
|
"group_id": 1,
|
|
"name": "Abos & Streaming",
|
|
"type": "expense",
|
|
"icon": "refresh-ccw",
|
|
"color": "#3f51b5",
|
|
"position": 3,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Lebenshaltung",
|
|
"kind": "expense",
|
|
"icon": "shopping-cart",
|
|
"color": "#2e7d55",
|
|
"position": 1,
|
|
"is_builtin": true,
|
|
"categories": [
|
|
{
|
|
"id": 5,
|
|
"group_id": 2,
|
|
"name": "Lebensmittel",
|
|
"type": "expense",
|
|
"icon": "shopping-cart",
|
|
"color": "#2e7d55",
|
|
"position": 0,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 6,
|
|
"group_id": 2,
|
|
"name": "Restaurant",
|
|
"type": "expense",
|
|
"icon": "utensils",
|
|
"color": "#2e7d55",
|
|
"position": 1,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 7,
|
|
"group_id": 2,
|
|
"name": "Mobilität",
|
|
"type": "expense",
|
|
"icon": "car",
|
|
"color": "#2e7d55",
|
|
"position": 2,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 8,
|
|
"group_id": 2,
|
|
"name": "Gesundheit",
|
|
"type": "expense",
|
|
"icon": "heart-pulse",
|
|
"color": "#2e7d55",
|
|
"position": 3,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 9,
|
|
"group_id": 2,
|
|
"name": "Kleidung",
|
|
"type": "expense",
|
|
"icon": "shirt",
|
|
"color": "#2e7d55",
|
|
"position": 4,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 3,
|
|
"name": "Freizeit & Persönliches",
|
|
"kind": "expense",
|
|
"icon": "film",
|
|
"color": "#b06f14",
|
|
"position": 2,
|
|
"is_builtin": true,
|
|
"categories": [
|
|
{
|
|
"id": 10,
|
|
"group_id": 3,
|
|
"name": "Freizeit",
|
|
"type": "expense",
|
|
"icon": "film",
|
|
"color": "#b06f14",
|
|
"position": 0,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 11,
|
|
"group_id": 3,
|
|
"name": "Reisen",
|
|
"type": "expense",
|
|
"icon": "plane",
|
|
"color": "#b06f14",
|
|
"position": 1,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 12,
|
|
"group_id": 3,
|
|
"name": "Sport & Fitness",
|
|
"type": "expense",
|
|
"icon": "dumbbell",
|
|
"color": "#b06f14",
|
|
"position": 2,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 13,
|
|
"group_id": 3,
|
|
"name": "Bildung",
|
|
"type": "expense",
|
|
"icon": "graduation-cap",
|
|
"color": "#b06f14",
|
|
"position": 3,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 14,
|
|
"group_id": 3,
|
|
"name": "Haustiere",
|
|
"type": "expense",
|
|
"icon": "paw-print",
|
|
"color": "#b06f14",
|
|
"position": 4,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 15,
|
|
"group_id": 3,
|
|
"name": "Geschenke & Spenden",
|
|
"type": "expense",
|
|
"icon": "gift",
|
|
"color": "#b06f14",
|
|
"position": 5,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 4,
|
|
"name": "Finanzen",
|
|
"kind": "expense",
|
|
"icon": "piggy-bank",
|
|
"color": "#2a78d6",
|
|
"position": 3,
|
|
"is_builtin": true,
|
|
"categories": [
|
|
{
|
|
"id": 16,
|
|
"group_id": 4,
|
|
"name": "Sparen & Investments",
|
|
"type": "expense",
|
|
"icon": "piggy-bank",
|
|
"color": "#2a78d6",
|
|
"position": 0,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 17,
|
|
"group_id": 4,
|
|
"name": "Steuern & Gebühren",
|
|
"type": "expense",
|
|
"icon": "percent",
|
|
"color": "#2a78d6",
|
|
"position": 1,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 5,
|
|
"name": "Sonstiges",
|
|
"kind": "expense",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"position": 4,
|
|
"is_builtin": true,
|
|
"categories": [
|
|
{
|
|
"id": 18,
|
|
"group_id": 5,
|
|
"name": "Sonstiges",
|
|
"type": "expense",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"position": 0,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 6,
|
|
"name": "Einnahmen",
|
|
"kind": "income",
|
|
"icon": "coins",
|
|
"color": "#2e7d55",
|
|
"position": 5,
|
|
"is_builtin": true,
|
|
"categories": [
|
|
{
|
|
"id": 19,
|
|
"group_id": 6,
|
|
"name": "Gehalt",
|
|
"type": "income",
|
|
"icon": "banknote",
|
|
"color": "#2e7d55",
|
|
"position": 0,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 20,
|
|
"group_id": 6,
|
|
"name": "Nebeneinkünfte",
|
|
"type": "income",
|
|
"icon": "coins",
|
|
"color": "#2e7d55",
|
|
"position": 1,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
},
|
|
{
|
|
"id": 21,
|
|
"group_id": 6,
|
|
"name": "Erstattungen",
|
|
"type": "income",
|
|
"icon": "receipt",
|
|
"color": "#2e7d55",
|
|
"position": 2,
|
|
"is_builtin": true,
|
|
"is_archived": false,
|
|
"excluded_from_stats": false,
|
|
"spending_is_good": false,
|
|
"keyword_count": 0
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"schlagwoerter": [
|
|
{
|
|
"id": 1,
|
|
"name": "Urlaub",
|
|
"color": "#2a78d6"
|
|
}
|
|
],
|
|
"buchungen": [
|
|
{
|
|
"id": 10,
|
|
"type": "income",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 3,
|
|
"to_account_id": null,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 7500,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 7500,
|
|
"amount_base_cents": 7500,
|
|
"category_id": null,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": "Dauerauftrag",
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 9,
|
|
"type": "expense",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 1,
|
|
"to_account_id": null,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 7500,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 7500,
|
|
"amount_base_cents": 7500,
|
|
"category_id": null,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": "Dauerauftrag",
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 8,
|
|
"type": "expense",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 1,
|
|
"to_account_id": null,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 1043,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 1043,
|
|
"amount_base_cents": 1043,
|
|
"category_id": 1,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": "Kiosk",
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 7,
|
|
"type": "expense",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 1,
|
|
"to_account_id": null,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 1043,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 1043,
|
|
"amount_base_cents": 1043,
|
|
"category_id": 1,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": "Kiosk",
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 6,
|
|
"type": "expense",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 1,
|
|
"to_account_id": null,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 1290,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 1290,
|
|
"amount_base_cents": 1290,
|
|
"category_id": null,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "shortcut",
|
|
"payee": "Baeckerei",
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 5,
|
|
"type": "income",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 2,
|
|
"to_account_id": null,
|
|
"account_currency": "CHF",
|
|
"amount_cents": 15000,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 15000,
|
|
"amount_base_cents": 15000,
|
|
"category_id": null,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": "Gutschrift",
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 4,
|
|
"type": "expense",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 1,
|
|
"to_account_id": null,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 15000,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 15000,
|
|
"amount_base_cents": 15000,
|
|
"category_id": null,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": "Ueberweisung",
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 3,
|
|
"type": "transfer",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 1,
|
|
"to_account_id": 2,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 20000,
|
|
"to_amount_cents": 20000,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 20000,
|
|
"amount_base_cents": 20000,
|
|
"category_id": null,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": null,
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 2,
|
|
"type": "income",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 1,
|
|
"to_account_id": null,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 350000,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 350000,
|
|
"amount_base_cents": 350000,
|
|
"category_id": 19,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": null,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": "Arbeitgeber",
|
|
"description": null,
|
|
"notes": null,
|
|
"tag_ids": []
|
|
},
|
|
{
|
|
"id": 1,
|
|
"type": "expense",
|
|
"date": "2026-10-21",
|
|
"time": null,
|
|
"account_id": 1,
|
|
"to_account_id": null,
|
|
"account_currency": "EUR",
|
|
"amount_cents": 4250,
|
|
"to_amount_cents": null,
|
|
"fx_rate": null,
|
|
"amount_eur_cents": 4250,
|
|
"amount_base_cents": 4250,
|
|
"category_id": 1,
|
|
"budget_treatment": null,
|
|
"budget_category_id": null,
|
|
"subscription_id": 1,
|
|
"budget_period": "2026-10",
|
|
"budget_period_manuell": false,
|
|
"import_batch_id": null,
|
|
"herkunft": "manuell",
|
|
"payee": "Supermarkt",
|
|
"description": "Wocheneinkauf",
|
|
"notes": "mit Pfand",
|
|
"tag_ids": [
|
|
1
|
|
]
|
|
}
|
|
],
|
|
"uebertragsverknuepfungen": {
|
|
"4": {
|
|
"link_id": 1,
|
|
"other_id": 5,
|
|
"richtung": "raus",
|
|
"other_account_id": 2,
|
|
"automatisch": false
|
|
},
|
|
"5": {
|
|
"link_id": 1,
|
|
"other_id": 4,
|
|
"richtung": "rein",
|
|
"other_account_id": 1,
|
|
"automatisch": false
|
|
}
|
|
},
|
|
"budget": {
|
|
"label": "2026-10",
|
|
"start": "2026-10-01",
|
|
"end": "2026-10-31",
|
|
"customized": false,
|
|
"base_currency": "EUR",
|
|
"prev": "2026-09",
|
|
"next": "2026-11",
|
|
"groups": [
|
|
{
|
|
"id": 1,
|
|
"name": "Fixkosten",
|
|
"icon": "landmark",
|
|
"color": "#3f51b5",
|
|
"planned_cents": 50000,
|
|
"actual_cents": 6336,
|
|
"over": false,
|
|
"good": false,
|
|
"aus_vertraegen_cents": 108,
|
|
"categories": [
|
|
{
|
|
"category_id": 1,
|
|
"name": "Wohnen",
|
|
"icon": "home",
|
|
"color": "#3f51b5",
|
|
"planned_cents": 50000,
|
|
"actual_cents": 6336,
|
|
"delta_cents": 43664,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 108,
|
|
"vertraege_anzahl": 1,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 2,
|
|
"name": "Versicherungen",
|
|
"icon": "shield",
|
|
"color": "#3f51b5",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 3,
|
|
"name": "Telefon & Internet",
|
|
"icon": "wifi",
|
|
"color": "#3f51b5",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 4,
|
|
"name": "Abos & Streaming",
|
|
"icon": "refresh-ccw",
|
|
"color": "#3f51b5",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Lebenshaltung",
|
|
"icon": "shopping-cart",
|
|
"color": "#2e7d55",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"over": false,
|
|
"good": false,
|
|
"aus_vertraegen_cents": 0,
|
|
"categories": [
|
|
{
|
|
"category_id": 5,
|
|
"name": "Lebensmittel",
|
|
"icon": "shopping-cart",
|
|
"color": "#2e7d55",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 6,
|
|
"name": "Restaurant",
|
|
"icon": "utensils",
|
|
"color": "#2e7d55",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 7,
|
|
"name": "Mobilität",
|
|
"icon": "car",
|
|
"color": "#2e7d55",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 8,
|
|
"name": "Gesundheit",
|
|
"icon": "heart-pulse",
|
|
"color": "#2e7d55",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 9,
|
|
"name": "Kleidung",
|
|
"icon": "shirt",
|
|
"color": "#2e7d55",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 3,
|
|
"name": "Freizeit & Persönliches",
|
|
"icon": "film",
|
|
"color": "#b06f14",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"over": false,
|
|
"good": false,
|
|
"aus_vertraegen_cents": 0,
|
|
"categories": [
|
|
{
|
|
"category_id": 10,
|
|
"name": "Freizeit",
|
|
"icon": "film",
|
|
"color": "#b06f14",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 11,
|
|
"name": "Reisen",
|
|
"icon": "plane",
|
|
"color": "#b06f14",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 12,
|
|
"name": "Sport & Fitness",
|
|
"icon": "dumbbell",
|
|
"color": "#b06f14",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 13,
|
|
"name": "Bildung",
|
|
"icon": "graduation-cap",
|
|
"color": "#b06f14",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 14,
|
|
"name": "Haustiere",
|
|
"icon": "paw-print",
|
|
"color": "#b06f14",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 15,
|
|
"name": "Geschenke & Spenden",
|
|
"icon": "gift",
|
|
"color": "#b06f14",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 4,
|
|
"name": "Finanzen",
|
|
"icon": "piggy-bank",
|
|
"color": "#2a78d6",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"over": false,
|
|
"good": false,
|
|
"aus_vertraegen_cents": 0,
|
|
"categories": [
|
|
{
|
|
"category_id": 16,
|
|
"name": "Sparen & Investments",
|
|
"icon": "piggy-bank",
|
|
"color": "#2a78d6",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
},
|
|
{
|
|
"category_id": 17,
|
|
"name": "Steuern & Gebühren",
|
|
"icon": "percent",
|
|
"color": "#2a78d6",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"id": 5,
|
|
"name": "Sonstiges",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"over": false,
|
|
"good": false,
|
|
"aus_vertraegen_cents": 0,
|
|
"categories": [
|
|
{
|
|
"category_id": 18,
|
|
"name": "Sonstiges",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"planned_cents": 0,
|
|
"actual_cents": 0,
|
|
"delta_cents": 0,
|
|
"over": false,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0,
|
|
"aus_vertraegen_cents": 0,
|
|
"vertraege_anzahl": 0,
|
|
"good": false
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"income": [],
|
|
"vertraege": {
|
|
"ohne_kategorie_cents": 0,
|
|
"ohne_kategorie_anzahl": 0,
|
|
"ohne_kurs": []
|
|
},
|
|
"totals": {
|
|
"planned_expense": 50000,
|
|
"actual_expense": 6336,
|
|
"planned_income": 0,
|
|
"received_income": 0
|
|
}
|
|
},
|
|
"budgetvorlage": {
|
|
"lines": [
|
|
{
|
|
"category_id": 1,
|
|
"planned_cents": 50000,
|
|
"modus": "fest",
|
|
"zuschlag_cents": 0
|
|
}
|
|
],
|
|
"income": []
|
|
},
|
|
"abos": {
|
|
"subscriptions": [
|
|
{
|
|
"id": 1,
|
|
"name": "Streaming",
|
|
"icon": "refresh-ccw",
|
|
"color": "#6b7480",
|
|
"amount_cents": 1299,
|
|
"currency": "EUR",
|
|
"interval_months": 12,
|
|
"account_id": null,
|
|
"category_id": 1,
|
|
"next_due": "2027-10-21",
|
|
"payee_pattern": "Supermarkt",
|
|
"savings_account_id": null,
|
|
"is_active": true,
|
|
"cancelled_at": null,
|
|
"notes": null,
|
|
"position": 0,
|
|
"monatlich_cents": 108,
|
|
"monatlich_base_cents": 108,
|
|
"tage_bis_faellig": 365,
|
|
"has_logo": false,
|
|
"logo_version": null
|
|
}
|
|
],
|
|
"summary": {
|
|
"currency": "EUR",
|
|
"monatlich_cents": 108,
|
|
"jaehrlich_cents": 1296,
|
|
"anzahl_aktiv": 1,
|
|
"ohne_kurs": []
|
|
}
|
|
},
|
|
"kontostaende": {
|
|
"accounts": [
|
|
{
|
|
"id": 1,
|
|
"name": "Girokonto",
|
|
"icon": "wallet",
|
|
"color": "#3f51b5",
|
|
"currency": "EUR",
|
|
"balance_cents": 419874,
|
|
"balance_base_cents": 419874,
|
|
"archived": false,
|
|
"locked": false
|
|
},
|
|
{
|
|
"id": 2,
|
|
"name": "Sparen",
|
|
"icon": "wallet",
|
|
"color": "#3f51b5",
|
|
"currency": "CHF",
|
|
"balance_cents": 535000,
|
|
"balance_base_cents": 535000,
|
|
"archived": false,
|
|
"locked": true
|
|
},
|
|
{
|
|
"id": 3,
|
|
"name": "Zweitkonto",
|
|
"icon": "wallet",
|
|
"color": "#3f51b5",
|
|
"currency": "EUR",
|
|
"balance_cents": 7500,
|
|
"balance_base_cents": 7500,
|
|
"archived": false,
|
|
"locked": false
|
|
}
|
|
],
|
|
"total": 427374,
|
|
"gebunden": 535000,
|
|
"currency": "EUR"
|
|
},
|
|
"budgetfortschritt": {
|
|
"rows": [
|
|
{
|
|
"name": "Fixkosten",
|
|
"color": "#3f51b5",
|
|
"planned": 50000,
|
|
"actual": 6336,
|
|
"over": false,
|
|
"good": false
|
|
}
|
|
],
|
|
"currency": "EUR",
|
|
"label": "2026-10",
|
|
"group_by": "group"
|
|
},
|
|
"einnahmenAusgaben": {
|
|
"income": 357500,
|
|
"expense": 6336,
|
|
"net": 351164,
|
|
"currency": "EUR",
|
|
"label": "2026-10"
|
|
},
|
|
"letzteBuchungen": {
|
|
"transactions": [
|
|
{
|
|
"id": 10,
|
|
"date": "2026-10-21",
|
|
"type": "income",
|
|
"title": "Dauerauftrag",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"sign": "pos",
|
|
"amount_cents": 7500,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 7500
|
|
},
|
|
{
|
|
"id": 9,
|
|
"date": "2026-10-21",
|
|
"type": "expense",
|
|
"title": "Dauerauftrag",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"sign": "neg",
|
|
"amount_cents": 7500,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 7500
|
|
},
|
|
{
|
|
"id": 8,
|
|
"date": "2026-10-21",
|
|
"type": "expense",
|
|
"title": "Wohnen",
|
|
"icon": "home",
|
|
"color": "#3f51b5",
|
|
"sign": "neg",
|
|
"amount_cents": 1043,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 1043
|
|
},
|
|
{
|
|
"id": 7,
|
|
"date": "2026-10-21",
|
|
"type": "expense",
|
|
"title": "Wohnen",
|
|
"icon": "home",
|
|
"color": "#3f51b5",
|
|
"sign": "neg",
|
|
"amount_cents": 1043,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 1043
|
|
},
|
|
{
|
|
"id": 6,
|
|
"date": "2026-10-21",
|
|
"type": "expense",
|
|
"title": "Baeckerei",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"sign": "neg",
|
|
"amount_cents": 1290,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 1290
|
|
},
|
|
{
|
|
"id": 5,
|
|
"date": "2026-10-21",
|
|
"type": "income",
|
|
"title": "Gutschrift",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"sign": "pos",
|
|
"amount_cents": 15000,
|
|
"currency": "CHF",
|
|
"amount_base_cents": 15000
|
|
},
|
|
{
|
|
"id": 4,
|
|
"date": "2026-10-21",
|
|
"type": "expense",
|
|
"title": "Ueberweisung",
|
|
"icon": "more-horizontal",
|
|
"color": "#6b7480",
|
|
"sign": "neg",
|
|
"amount_cents": 15000,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 15000
|
|
},
|
|
{
|
|
"id": 3,
|
|
"date": "2026-10-21",
|
|
"type": "transfer",
|
|
"title": "Girokonto → Sparen",
|
|
"icon": "arrow-left-right",
|
|
"color": "#6b7480",
|
|
"sign": null,
|
|
"amount_cents": 20000,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 20000
|
|
}
|
|
],
|
|
"currency": "EUR"
|
|
},
|
|
"eingang": [
|
|
{
|
|
"id": 1,
|
|
"source": "shortcut",
|
|
"status": "booked",
|
|
"account_id": 1,
|
|
"date": "2026-10-21",
|
|
"amount_cents": -1290,
|
|
"currency": "EUR",
|
|
"payee": "Baeckerei",
|
|
"note": null,
|
|
"category_id": null,
|
|
"transaction_id": 6,
|
|
"transfer_account_id": null,
|
|
"fx_rate": null,
|
|
"counter_amount_cents": null,
|
|
"counter_currency": null,
|
|
"created_at": "2026-10-21T19:21:28.451708"
|
|
}
|
|
],
|
|
"dubletten": {
|
|
"gruppen": [
|
|
{
|
|
"account_id": 1,
|
|
"datum": "2026-10-21",
|
|
"amount_cents": 1043,
|
|
"typ": "expense",
|
|
"zeilen": [
|
|
{
|
|
"id": 7,
|
|
"payee": "Kiosk",
|
|
"description": null,
|
|
"category_id": 1,
|
|
"herkunft": "manuell",
|
|
"kennung": null
|
|
},
|
|
{
|
|
"id": 8,
|
|
"payee": "Kiosk",
|
|
"description": null,
|
|
"category_id": 1,
|
|
"herkunft": "manuell",
|
|
"kennung": null
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"uebertragsvorschlaege": {
|
|
"verknuepft": 0,
|
|
"vorschlaege": [
|
|
{
|
|
"a": {
|
|
"id": 9,
|
|
"date": "2026-10-21",
|
|
"type": "expense",
|
|
"amount_cents": 7500,
|
|
"currency": "EUR",
|
|
"account_id": 1,
|
|
"account_name": "Girokonto",
|
|
"payee": "Dauerauftrag",
|
|
"description": null,
|
|
"category_id": null
|
|
},
|
|
"b": {
|
|
"id": 10,
|
|
"date": "2026-10-21",
|
|
"type": "income",
|
|
"amount_cents": 7500,
|
|
"currency": "EUR",
|
|
"account_id": 3,
|
|
"account_name": "Zweitkonto",
|
|
"payee": "Dauerauftrag",
|
|
"description": null,
|
|
"category_id": null
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|