fix(parser): stop description scan at sub-position numbers like '2.1' (ZenIT R26-105)
Bei Unterpositionsnummern ('N.M', z.B. 2.1) lief der Beschreibungs-Scan nach oben ueber die
Referenzzeilen hinweg -> Artikelname war faelschlich die Auftragsbestaetigungs-Zeile und die
Beschreibung enthielt Referenzen + Positionsnummer. Jetzt bricht der Scan auch bei gegliederten
Nummern ab. Seriennummer-Fragmente (reine Ziffern ohne Punkt) bleiben unberuehrt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
71bb9885c6
commit
1851ed7074
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue