diff --git a/invoice_logic.py b/invoice_logic.py index b00d886..5998121 100644 --- a/invoice_logic.py +++ b/invoice_logic.py @@ -14,13 +14,13 @@ from pydantic import BaseModel, Field # 2. METADATEN SCHREIBSCHEMA # ========================================== class InvoiceMetadata(BaseModel): - invoice_number: str = Field(description="Die Rechnungsnummer nach 'Nummer:' (z.B. R26-219)") + invoice_number: str = Field(description="Die Rechnungsnummer nach 'Nummer:' (z.B. R00-000)") invoice_date: str = Field(description="Das Rechnungsdatum nach 'Datum:' im Format YYYY-MM-DD") delivery_date: str = Field(description="Das Lieferdatum nach 'Lieferdatum:' im Format YYYY-MM-DD") customer_number: str = Field(default="", description="Kundennummer (BT-46), unter der der Kunde beim Verkäufer geführt wird (z.B. der exakte Wert nach 'Kunden-Nr:'). Falls im Text keine Kundennummer erkennbar ist: leer lassen.") leitweg_id: str = Field(default="", description="Leitweg-ID (BT-10) - NUR bei Rechnungen an Behörden (B2G), z.B. '04011000-1234-56'. Ist im Text keine Leitweg-ID erkennbar: leer lassen (NICHT die Kundennummer hier eintragen).") - buyer_reference: str = Field(default="", description="Bestellnummer des KÄUFERS für diesen Auftrag (BT-13): der exakte Wert nach 'Ihr Auftrag:' o.ä. (z.B. 05.06.2026-Herr.Knospe). NICHT die Kundennummer (die gehört in customer_number) und NICHT unsere eigene Auftragsbestätigungsnummer (die gehört in order_id). Wenn im Text keine solche Käufer-Bestellnummer erkennbar ist: leer lassen.") - recipient_name: str = Field(description="Vollständige Firma des Kunden/Empfängers (z.B. Stadtwerke Hennigsdorf GmbH)") + buyer_reference: str = Field(default="", description="Bestellnummer des KÄUFERS für diesen Auftrag (BT-13): der exakte Wert nach 'Ihr Auftrag:' o.ä. (z.B. 05.06.2026-Herr.Mustermann). NICHT die Kundennummer (die gehört in customer_number) und NICHT unsere eigene Auftragsbestätigungsnummer (die gehört in order_id). Wenn im Text keine solche Käufer-Bestellnummer erkennbar ist: leer lassen.") + recipient_name: str = Field(description="Vollständige Firma des Kunden/Empfängers (z.B. Musterfirma GmbH)") recipient_street: str = Field(description="Straße und Hausnummer des Kunden") recipient_zip: str = Field(description="Postleitzahl (PLZ) des Kunden") recipient_city: str = Field(description="Stadt des Kunden") @@ -339,7 +339,7 @@ def _address_from_block(block): def extract_delivery_address(text): """Zerlegt den 'Lieferadresse:'-Block (falls vorhanden) in ein Dict mit name/street/zip/city (BG-15 Lieferadresse). Der Block steht zwischen der 'Lieferadresse:'-Zeile und der ersten - 'RECHNUNG'-Zeile; E-Mail-Zeilen (z.B. bei degewo) werden ignoriert. Gibt None zurueck, wenn + 'RECHNUNG'-Zeile; E-Mail-Zeilen (bei manchen Kunden vorhanden) werden ignoriert. Gibt None zurueck, wenn keine Lieferadresse vorhanden ist oder der Block keine 'PLZ Ort'-Zeile enthaelt.""" lines = text.split("\n") start = next((i for i, ln in enumerate(lines) if ln.strip().lower().startswith("lieferadresse")), None) @@ -462,12 +462,12 @@ def sanitize_filename_part(value): # unhandlich machen. EXPORT_RECIPIENT_MAX_LEN = 15 -# Bearbeiter-Kopfzeile hat die Form ' / ', z.B. 'Ulrika Grossmann / 5634'. +# Bearbeiter-Kopfzeile hat die Form ' / ', z.B. 'Max Mustermann / 1234'. _BEARBEITER_NUMBER_PATTERN = re.compile(r"/\s*([A-Za-z0-9][A-Za-z0-9\-.]*)\s*$") def extract_bearbeiter_number(bearbeiter): - """Holt die Nummer hinter dem Bearbeiternamen ('Ulrika Grossmann / 5634' -> '5634'). + """Holt die Nummer hinter dem Bearbeiternamen ('Max Mustermann / 1234' -> '1234'). Steht im Feld nur eine Zahl, wird diese direkt genommen; ein Name ohne Nummer ergibt "", damit kein Personenname im Dateinamen landet.""" s = str(bearbeiter or "").strip()