diff --git a/invoice_logic.py b/invoice_logic.py index e307f41..ce137ce 100644 --- a/invoice_logic.py +++ b/invoice_logic.py @@ -329,10 +329,13 @@ def extract_invoice_items_pure_python(text): if any(prev_lower.startswith(w) for w in ["zwischensumme", "endbetrag", "gesamtbetrag", "umsatzsteuer"]): break - # Nur bei der ECHTEN Positionsnummer abbrechen (die naechste erwartete Position = - # len(items)+1). Sonst wuerden auch alleinstehende Ziffern-Fragmente von - # aufgesplitteten Seriennummern (z.B. "9" als letzte Zeile einer S/N) faelschlich - # als Positionsnummer gewertet und die Position verworfen. + # Abbrechen bei der echten Positionsnummer: + # - gegliederte Nummer "N.M" (z.B. "2.1") ist eindeutig eine (Unter-)Position; + # - eine alleinstehende Zahl nur, wenn sie der erwarteten Positionsnummer + # (len(items)+1) entspricht - so werden Ziffern-Fragmente aufgesplitteter + # Seriennummern (z.B. "9") NICHT faelschlich als Positionsnummer gewertet. + if re.match(r"^\d{1,3}\.\d{1,3}$", prev_line): + break if prev_line.isdigit() and len(prev_line) <= 2 and int(prev_line) == len(items) + 1: break