Netflix, Handyvertrag, Krankenkasse, Halbtax. Bisher sah man sie nur als einzelne Buchungen im Auszug; die Frage "welche Abos habe ich eigentlich, und was kosten die zusammen im Monat" liess sich nicht beantworten. Genau die steht jetzt oben auf der Seite. Der Bereich heisst "Abos & Vertraege", nicht "Abos": Ein Handyvertrag ist kein Abo und die Versicherung erst recht nicht – niemand soll ueberlegen muessen, wo sie hingehoert. Der Monatswert wird gerechnet, nicht gespeichert (Betrag durch Intervall). Gespeichert veraltete er beim naechsten Preisaufschlag stillschweigend. Bei laengerem Intervall klappt "Ich lege monatlich zurueck auf" auf, mit dem gerechneten Monatsbetrag daneben. Bei monatlicher Abrechnung gibt es nichts anzusparen, also steht es da auch nicht. DAZU: Waehrungen sind offen. Die Rechen-Maschinerie konnte immer schon beliebige Waehrungen – sie rechnet ueber den Euro als Drehpunkt. Beschraenkt haben es zwei Konstanten: eine Erlaubnisliste mit EUR und CHF, und ein Filter, der aus dem EZB-Feed alles ausser CHF wegwarf, obwohl er dreissig Waehrungen liefert. Massgeblich ist jetzt die Liste der EZB. Frei erfundene Waehrungen bleiben draussen, und das ist kein Geiz: Ohne Kurs liesse sich der Betrag nie umrechnen – er stuende in keiner Summe und in keinem Budget, und das faellt erst spaet auf. Ein Vertrag in einer Waehrung ohne Kurs wird deshalb genannt, statt die Summe stillschweigend zu klein anzuzeigen. Erkannt und gebucht wird noch nichts; der Erkennungstext wird nur erfasst. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
"""Welche Waehrungen Certain kennt.
|
||
|
||
Eine Waehrung ist nur dann brauchbar, wenn es Kurse zu ihr gibt: Ohne Kurs
|
||
liesse sich ein Betrag zwar hinschreiben, aber nie in die Hauptwaehrung
|
||
umrechnen – er stuende in keiner Summe, in keinem Budget, in keiner
|
||
Auswertung. Frei erfundene Waehrungen anzubieten waere deshalb eine Falle.
|
||
|
||
Massgeblich ist darum die Liste der EZB: genau die Waehrungen, fuer die sie
|
||
werktaeglich einen Referenzkurs veroeffentlicht. EUR ist der Drehpunkt und
|
||
braucht keinen eigenen Kurs (implizit 1.0).
|
||
"""
|
||
|
||
# Der Drehpunkt. Steht bewusst getrennt: Fuer ihn gibt es keine Kurszeile.
|
||
PIVOT = "EUR"
|
||
|
||
# Die Waehrungen des taeglichen EZB-Referenzkurs-Feeds.
|
||
EZB_WAEHRUNGEN = {
|
||
"USD", "JPY", "BGN", "CZK", "DKK", "GBP", "HUF", "PLN", "RON", "SEK",
|
||
"CHF", "ISK", "NOK", "TRY", "AUD", "BRL", "CAD", "CNY", "HKD", "IDR",
|
||
"ILS", "INR", "KRW", "MXN", "MYR", "NZD", "PHP", "SGD", "THB", "ZAR",
|
||
}
|
||
|
||
# Alles, was irgendwo als Waehrung eingetragen werden darf.
|
||
ERLAUBT = EZB_WAEHRUNGEN | {PIVOT}
|
||
|
||
# Reihenfolge fuer Auswahlfelder: das Naheliegende zuerst, der Rest alphabetisch.
|
||
VORNE = ["EUR", "CHF", "USD", "GBP"]
|
||
|
||
|
||
def auswahl() -> list[str]:
|
||
"""Alle erlaubten Waehrungen, brauchbar sortiert."""
|
||
rest = sorted(ERLAUBT - set(VORNE))
|
||
return VORNE + rest
|