Ultima attività 1753297680

Revisione 5d46deb74fe300ad3f80ec98652a9be1d1fe460e

bc100_fgr.py Raw
1import pandas as pd
2import re
3
4from datetime import datetime, date, timedelta
5
6BC_START_DATE = date(2025, 3, 6)
7PRICE = 2988.00
8FILENAME = "Transaktionen.csv"
9
10TODAY = date.today()
11BC_END_DATE = BC_START_DATE + timedelta(days=365)
12
13def parse_journey_date(value):
14 match = re.search(r"Bahnreise am (\d{1,2}\.\d{1,2}\.\d{4})", str(value))
15 if match:
16 return datetime.strptime(match.groups()[0], "%d.%m.%Y").date()
17
18df = pd.read_csv(
19 FILENAME,
20 converters={
21 "Betrag": lambda x: float(x.replace(",", ".")),
22 "Buchungsdatum": lambda x: datetime.strptime(x, "%d.%m.%Y").date()
23 }
24)
25
26df["Reisedatum"] = df["Verwendungszweck"].map(parse_journey_date)
27
28df = df[
29 (df["Zahlungsempfänger"] == "Deutsche Bahn") &
30 (df["Verwendungszweck"].str.contains("Fahrgastrechtsfall", case=False)) &
31 (df["Betrag"] == 10) &
32 (df["Buchungsdatum"] > BC_START_DATE) &
33 (df["Reisedatum"] >= BC_START_DATE)
34]
35
36current_amount = df["Betrag"].sum()
37bc_use_percentage= ((BC_END_DATE - TODAY).days / 365)
38max_amount = bc_use_percentage * PRICE * 0.25
39
40effective_price = PRICE - (current_amount * (1 / bc_use_percentage))
41
42print("Fahrgastrechte: {:.2f}€ von {:.2f}€ ({:.0f}%)".format(
43 current_amount,
44 max_amount,
45 (current_amount / max_amount) * 100
46))
47
48print("Effektiver Preis der BC100 wird statt {:.2f}{:.2f}€ sein ({:.0f}% Rabatt)".format(
49 PRICE,
50 effective_price,
51 (1 - (effective_price / PRICE)) * 100
52))