Backend: Beleg-Analyse präziser (Preis, Kaufdatum, Garantieende)

Anhand echter Galaxus-Rechnungen nachgeschärft:
- Preis: MwSt-Satz ("8.10 %") wird als Prozentangabe ignoriert; von den
  Betraegen nahe einem Summen-Stichwort gewinnt der GRÖSSTE (Endbetrag inkl.,
  steht rechts) statt des naechstgelegenen (bisher der Exkl.-Betrag).
- Kaufdatum: eindeutige Stichworte (Rechnungs-/Bestell-/Kaufdatum) haben Vorrang;
  "Fälligkeitsdatum"/Zahlungsziel werden nicht mehr als Kaufdatum gewertet.
- Garantieende: ein ausdruecklich genanntes Enddatum im Garantie-Umfeld
  (z.B. "… - 06.10.2027") hat Vorrang vor dem gerechneten. 4 neue Tests.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-27 10:40:18 +02:00
parent a38c0651c5
commit 88b9bdcbea
2 changed files with 106 additions and 17 deletions

View File

@@ -110,3 +110,40 @@ def test_shop_schlaegt_neuen_namen_vor():
def test_shop_ohne_text_leer():
assert guess_shop("", [(1, "Digitec")]) == (None, None)
# ---- Realer Galaxus-Beleg (vereinfacht) ----
GALAXUS = """Kaufbeleg / Rechnung Auftrag 161498087
Bestell- / Rechnungsdatum 05.10.2025
Fälligkeitsdatum 26.10.2025
Währung CHF
Delock USB2.0-Ladekabel 10079671 2 8.10% 16.56 17.90 33.12 35.80
24 Monate Garantie (06.10.2025 - 06.10.2027)
Logitech G Pro X 13489068 1 8.10% 102.68 111.00 102.68 111.00
24 Monate Garantie (06.10.2025 - 06.10.2027)
Gesamtbetrag 135.80 146.80
Gesamtbetrag enthält folgende Mehrwertsteuer:
MwSt. 8.10% 11.00
Total aller Lieferungen und Leistungen CHF 146.80
03.11.2025 Zahlung geleistet -146.80
Offener Betrag 0.00
"""
def test_galaxus_kaufdatum_nicht_faelligkeit():
assert guess_acquired_on(GALAXUS) == date(2025, 10, 5)
def test_galaxus_preis_ist_gesamt_inkl():
assert guess_price_cents(GALAXUS) == 14680
def test_galaxus_mwst_satz_ist_kein_preis():
kandidaten = guess_price_candidates(GALAXUS)
assert 810 not in kandidaten # 8.10 % ist der Steuersatz, kein Preis
assert kandidaten[0] == 14680 # bester Tipp: Gesamt inkl.
def test_galaxus_garantieende_aus_zeitraum():
assert guess_warranty_until(GALAXUS, acquired_on=date(2025, 10, 5)) == date(2027, 10, 6)