Initial commit - Stand 26.04.2026
This commit is contained in:
+136
@@ -0,0 +1,136 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Detaillierte Analyse des Niki-Kredits: Excel vs. DB
|
||||
"""
|
||||
|
||||
import openpyxl
|
||||
from datetime import datetime
|
||||
|
||||
# Excel-Daten (bereits extrahiert)
|
||||
excel_data = [
|
||||
# (Zeile, Datum, Restschuld, Zinsen, Abgezahlt, Neue_Kosten, Beschreibung)
|
||||
(7, datetime(2023, 7, 1), -7000, -58.33, None, None, "Start"),
|
||||
(8, datetime(2023, 8, 1), -7058.33, -58.82, None, None, None),
|
||||
(9, datetime(2023, 9, 1), -7117.15, -59.31, None, None, None),
|
||||
(10, datetime(2023, 10, 1), -7176.46, -59.80, None, None, None),
|
||||
(11, datetime(2023, 11, 1), -7236.27, -60.30, None, None, None),
|
||||
(12, datetime(2023, 12, 1), -7296.57, -60.80, None, None, None),
|
||||
(13, datetime(2024, 1, 1), -7357.37, -61.31, None, None, None),
|
||||
(14, datetime(2024, 2, 1), -7418.68, -61.82, None, None, None),
|
||||
(15, datetime(2024, 3, 1), -7480.51, -62.34, None, None, None),
|
||||
(16, datetime(2024, 4, 1), -7542.84, -62.86, 500, None, None),
|
||||
(17, datetime(2024, 5, 1), -7105.70, -59.21, 500, None, None), # Nach Zahlung
|
||||
(18, datetime(2024, 6, 1), -6664.92, -55.54, 150, -90, "Kameras"),
|
||||
(19, datetime(2024, 7, 1), -6660.46, -55.50, 450, -45, "Kameras"),
|
||||
(20, datetime(2024, 8, 1), -6310.96, -52.59, 500, None, None),
|
||||
(21, datetime(2024, 9, 1), -5863.55, -48.86, 300, None, None),
|
||||
(22, datetime(2024, 10, 1), -5612.41, -46.77, 300, -110, "Videorekorder + Zubehör"),
|
||||
(23, datetime(2024, 11, 1), -5469.18, -45.58, None, None, None),
|
||||
(24, datetime(2024, 12, 1), -5514.76, -45.96, None, None, None),
|
||||
(25, datetime(2025, 1, 1), -5560.72, -46.34, None, None, None),
|
||||
(26, datetime(2025, 2, 1), -5607.06, -46.73, 200, None, None),
|
||||
(27, datetime(2025, 3, 1), -5453.78, -45.45, None, None, None),
|
||||
(28, datetime(2025, 4, 1), -5499.23, -45.83, None, None, None),
|
||||
(29, datetime(2025, 5, 1), -5545.06, -46.21, None, None, None),
|
||||
(30, datetime(2025, 6, 1), -5591.27, -46.59, 500, -260, "Handyvertag"),
|
||||
(31, datetime(2025, 7, 1), -5397.86, -44.98, None, None, None),
|
||||
# ... bis Zeile 57
|
||||
]
|
||||
|
||||
# DB-Daten (bereits extrahiert)
|
||||
db_zahlungen = [
|
||||
{"datum": datetime(2024, 4, 1), "betrag": 500.00, "typ": "zahlung_eingang", "notiz": "Zahlung von Niki"},
|
||||
{"datum": datetime(2024, 5, 1), "betrag": 500.00, "typ": "zahlung_eingang", "notiz": "Zahlung von Niki"},
|
||||
{"datum": datetime(2024, 6, 1), "betrag": 150.00, "typ": "zahlung_eingang", "notiz": "Kameras"},
|
||||
{"datum": datetime(2024, 6, 1), "betrag": 90.00, "typ": "auslage", "notiz": "Kameras"},
|
||||
{"datum": datetime(2024, 7, 1), "betrag": 450.00, "typ": "zahlung_eingang", "notiz": "Kameras"},
|
||||
{"datum": datetime(2024, 7, 1), "betrag": 45.00, "typ": "auslage", "notiz": "Kameras"},
|
||||
{"datum": datetime(2024, 8, 1), "betrag": 500.00, "typ": "zahlung_eingang", "notiz": "Zahlung von Niki"},
|
||||
{"datum": datetime(2024, 9, 1), "betrag": 300.00, "typ": "zahlung_eingang", "notiz": "Zahlung von Niki"},
|
||||
{"datum": datetime(2024, 10, 1), "betrag": 300.00, "typ": "zahlung_eingang", "notiz": "Videorekorder + Zubehör"},
|
||||
{"datum": datetime(2024, 10, 1), "betrag": 110.00, "typ": "auslage", "notiz": "Videorekorder + Zubehör"},
|
||||
{"datum": datetime(2025, 2, 1), "betrag": 200.00, "typ": "zahlung_eingang", "notiz": "Zahlung von Niki"},
|
||||
{"datum": datetime(2025, 6, 1), "betrag": 500.00, "typ": "zahlung_eingang", "notiz": "Handyvertag"},
|
||||
{"datum": datetime(2025, 6, 1), "betrag": 260.00, "typ": "auslage", "notiz": "Handyvertag"},
|
||||
]
|
||||
|
||||
print("=" * 80)
|
||||
print("ANALYSE: Niki-Kredit - Excel vs. DB")
|
||||
print("=" * 80)
|
||||
|
||||
# Berechne Zahlungen aus Excel
|
||||
print("\n## ZAHLUNGEN/AUSLAGEN aus Excel:")
|
||||
print("-" * 80)
|
||||
excel_zahlungen = []
|
||||
for row in excel_data:
|
||||
zeile, datum, restschuld, zinsen, abgezahlt, neue_kosten, beschreibung = row
|
||||
if abgezahlt:
|
||||
print(f"Zahlung: {datum.strftime('%Y-%m-%d')} | +{abgezahlt:6.2f} EUR | {beschreibung or 'Zahlung'}")
|
||||
excel_zahlungen.append({"datum": datum, "betrag": abgezahlt, "typ": "zahlung_eingang", "notiz": beschreibung or "Zahlung"})
|
||||
if neue_kosten:
|
||||
print(f"Auslage: {datum.strftime('%Y-%m-%d')} | {neue_kosten:7.2f} EUR | {beschreibung}")
|
||||
excel_zahlungen.append({"datum": datum, "betrag": abs(neue_kosten), "typ": "auslage", "notiz": beschreibung})
|
||||
|
||||
print("\n## VERGLEICH: Excel vs. DB")
|
||||
print("-" * 80)
|
||||
print(f"{'Datum':<12} {'Excel Zahlung':>15} {'DB Zahlung':>15} {'Status':<15}")
|
||||
print("-" * 80)
|
||||
|
||||
# Erstelle Mapping nach Datum
|
||||
from collections import defaultdict
|
||||
excel_by_date = defaultdict(list)
|
||||
db_by_date = defaultdict(list)
|
||||
|
||||
for z in excel_zahlungen:
|
||||
key = z["datum"].strftime("%Y-%m-%d")
|
||||
excel_by_date[key].append(z)
|
||||
|
||||
for z in db_zahlungen:
|
||||
key = z["datum"].strftime("%Y-%m-%d")
|
||||
db_by_date[key].append(z)
|
||||
|
||||
all_dates = sorted(set(list(excel_by_date.keys()) + list(db_by_date.keys())))
|
||||
|
||||
fehlend_in_db = []
|
||||
zusammenfassung = {"excel": 0, "db": 0, "fehlend": 0}
|
||||
|
||||
for date in all_dates:
|
||||
excel_list = excel_by_date.get(date, [])
|
||||
db_list = db_by_date.get(date, [])
|
||||
|
||||
excel_sum = sum(z["betrag"] for z in excel_list)
|
||||
db_sum = sum(z["betrag"] for z in db_list)
|
||||
|
||||
zusammenfassung["excel"] += excel_sum
|
||||
zusammenfassung["db"] += db_sum
|
||||
|
||||
status = "OK" if abs(excel_sum - db_sum) < 0.01 else "DIFFERENZ"
|
||||
if excel_sum > 0 and db_sum == 0:
|
||||
status = "FEHLT IN DB"
|
||||
fehlend_in_db.extend(excel_list)
|
||||
zusammenfassung["fehlend"] += excel_sum
|
||||
|
||||
print(f"{date:<12} {excel_sum:>15.2f} EUR {db_sum:>15.2f} EUR {status}")
|
||||
|
||||
print("-" * 80)
|
||||
print(f"{'GESAMT':<12} {zusammenfassung['excel']:>15.2f} EUR {zusammenfassung['db']:>15.2f} EUR")
|
||||
print(f"\nFehlend in DB: {zusammenfassung['fehlend']:.2f} EUR")
|
||||
|
||||
if fehlend_in_db:
|
||||
print("\n## FEHLENDE EINTRÄGE IN DB:")
|
||||
print("-" * 80)
|
||||
for z in fehlend_in_db:
|
||||
print(f"INSERT INTO kredit_zahlungen (kredit_id, betrag, datum, typ, notiz) VALUES ('4ad8826f-ecb4-443d-aef6-ce9162e5f078', {z['betrag']:.2f}, '{z['datum'].strftime('%Y-%m-%d')}', '{z['typ']}', '{z['notiz']}');")
|
||||
|
||||
# Analyse Restschuld
|
||||
print("\n" + "=" * 80)
|
||||
print("RESTSCHULD-ANALYSE")
|
||||
print("=" * 80)
|
||||
print(f"Excel (Stand 2023-07-01): -7000.00 EUR")
|
||||
print(f"DB Restschuld: 4105.00 EUR")
|
||||
print(f"DB Ursprungsschuld: 7000.00 EUR")
|
||||
print(f"\nBerechnung: 7000 - Summe(Zahlungen) + Summe(Auslagen) = ?")
|
||||
print(f"Gesamtzahlungen DB: {zusammenfassung['db']:.2f} EUR")
|
||||
print(f"Erwartete Restschuld: 7000 - {zusammenfassung['db']:.2f} = {7000 - zusammenfassung['db']:.2f} EUR")
|
||||
print(f"\nHinweis: Die App scheint die Restschuld anders zu berechnen als Excel.")
|
||||
print(f"Excel fügt Zinsen hinzu, DB vermutlich ohne/korrigierte Zinsberechnung.")
|
||||
Reference in New Issue
Block a user