Die Swift-Modelle sind aus den Pydantic-Schemas abgeschrieben. Ein vertippter Feldname uebersetzt anstandslos und faellt erst dem Nutzer auf, wenn eine Liste leer bleibt - das ist beim blinden Schreiben die einzige Luecke, die kein Uebersetzer schliesst. backend/scripts/erzeuge_ios_fixture.py legt eine Wegwerfdatenbank an, befuellt sie so, dass jedes Feld einmal belegt ist (Tags, Uebertrag am Stueck, verknuepfter Uebertrag, Vertragszuordnung, gebundenes Konto, jaehrliches Abo) und schreibt 15 echte Antworten nach ios/Tests/Fixtures/antworten.json. Der Swift-Test "Serverantworten" entschluesselt daraus jedes Modell. Nach jeder Schema-Aenderung neu laufen lassen und das Ergebnis mit committen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1128 lines
23 KiB
JSON
1128 lines
23 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-21T18:22:28.427216",
|
|
"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": 430750,
|
|
"balance_base_cents": 430750,
|
|
"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
|
|
}
|
|
],
|
|
"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": 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": 4250,
|
|
"over": false,
|
|
"good": false,
|
|
"aus_vertraegen_cents": 108,
|
|
"categories": [
|
|
{
|
|
"category_id": 1,
|
|
"name": "Wohnen",
|
|
"icon": "home",
|
|
"color": "#3f51b5",
|
|
"planned_cents": 50000,
|
|
"actual_cents": 4250,
|
|
"delta_cents": 45750,
|
|
"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": 4250,
|
|
"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": 430750,
|
|
"balance_base_cents": 430750,
|
|
"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
|
|
}
|
|
],
|
|
"total": 430750,
|
|
"gebunden": 535000,
|
|
"currency": "EUR"
|
|
},
|
|
"budgetfortschritt": {
|
|
"rows": [
|
|
{
|
|
"name": "Fixkosten",
|
|
"color": "#3f51b5",
|
|
"planned": 50000,
|
|
"actual": 4250,
|
|
"over": false,
|
|
"good": false
|
|
}
|
|
],
|
|
"currency": "EUR",
|
|
"label": "2026-10",
|
|
"group_by": "group"
|
|
},
|
|
"einnahmenAusgaben": {
|
|
"income": 350000,
|
|
"expense": 4250,
|
|
"net": 345750,
|
|
"currency": "EUR",
|
|
"label": "2026-10"
|
|
},
|
|
"letzteBuchungen": {
|
|
"transactions": [
|
|
{
|
|
"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
|
|
},
|
|
{
|
|
"id": 2,
|
|
"date": "2026-10-21",
|
|
"type": "income",
|
|
"title": "Gehalt",
|
|
"icon": "banknote",
|
|
"color": "#2e7d55",
|
|
"sign": "pos",
|
|
"amount_cents": 350000,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 350000
|
|
},
|
|
{
|
|
"id": 1,
|
|
"date": "2026-10-21",
|
|
"type": "expense",
|
|
"title": "Wohnen",
|
|
"icon": "home",
|
|
"color": "#3f51b5",
|
|
"sign": "neg",
|
|
"amount_cents": 4250,
|
|
"currency": "EUR",
|
|
"amount_base_cents": 4250
|
|
}
|
|
],
|
|
"currency": "EUR"
|
|
}
|
|
}
|