From 2e259589c0ca2f7694638f4c3d9d2293f9e21726 Mon Sep 17 00:00:00 2001 From: dfuhrmann3 Date: Tue, 14 Jul 2026 15:18:52 +0200 Subject: [PATCH] ui(v3): BT-49-Ableitung sichtbar machen + Schema robuster (E-Mail=EM) - resolve_buyer_endpoint: eine Adresse mit '@' wird immer als Schema EM gewertet (unabhaengig vom Dropdown), damit ein falsch gewaehltes Schema nicht durchschlaegt. Ohne '@' entscheidet weiter das gewaehlte Schema (z.B. GLN 0088); leeres Feld + Leitweg-ID -> 0204 wie bisher. - main.py: unter dem BT-49-Feld wird jetzt sichtbar angezeigt, was tatsaechlich exportiert wird - bei Ableitung aus der Leitweg-ID ein gruener Hinweis, sonst eine kurze Bestaetigung mit Wert + Schema. So wirkt das (bewusst leere) Feld fuer den Sachbearbeiter nicht mehr offen. Co-Authored-By: Claude Opus 4.8 --- invoice_logic.py | 14 ++++++++++---- main.py | 10 ++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/invoice_logic.py b/invoice_logic.py index 1653a9d..16b7d26 100644 --- a/invoice_logic.py +++ b/invoice_logic.py @@ -84,12 +84,18 @@ BUYER_ENDPOINT_SCHEMES = { def resolve_buyer_endpoint(recipient_email, recipient_scheme, leitweg_id): """Ermittelt die effektive elektronische Adresse des Kaeufers (BT-49) samt Schema (BT-49-1). - Ist eine E-Mail/Adresse eingetragen, wird sie mit dem gewaehlten Schema uebernommen. Ist das - Feld leer, aber eine Leitweg-ID (BT-10) vorhanden, wird die Leitweg-ID als BT-49 mit Schema - '0204' verwendet - so muss die Leitweg-ID nur einmal (in BT-10) eingegeben werden. Ist beides - leer, bleibt die Adresse leer (Schema unveraendert). Gibt (adresse, schema) zurueck.""" + Regeln (in dieser Reihenfolge): + 1. Steht im BT-49-Feld eine Adresse mit '@', ist es immer eine E-Mail -> Schema 'EM' + (unabhaengig vom Dropdown, damit ein falsch gewaehltes Schema nicht durchschlaegt). + 2. Steht dort eine Adresse ohne '@' (z.B. GLN), wird das gewaehlte Schema uebernommen. + 3. Ist das Feld leer, aber eine Leitweg-ID (BT-10) vorhanden, wird die Leitweg-ID als BT-49 + mit Schema '0204' verwendet - so muss die Leitweg-ID nur einmal (in BT-10) eingegeben werden. + 4. Ist beides leer, bleibt die Adresse leer (Schema unveraendert). + Gibt (adresse, schema) zurueck.""" email = str(recipient_email or "").strip() if email: + if "@" in email: + return email, "EM" return email, recipient_scheme leitweg = str(leitweg_id or "").strip() if leitweg: diff --git a/main.py b/main.py index 002910d..e4f8564 100644 --- a/main.py +++ b/main.py @@ -347,6 +347,16 @@ with col2: "0088 = GLN. Muss zum Typ der oben eingetragenen Adresse passen.", ) r_endpoint_scheme = r_endpoint_scheme_label.split(" - ")[0] + + # Sichtbar machen, was tatsächlich als BT-49 exportiert wird - vor allem wenn es + # aus der Leitweg-ID (BT-10) abgeleitet wird, damit das leere Feld nicht "offen" wirkt. + _bt49_preview, _bt49_scheme_preview = resolve_buyer_endpoint(r_email, r_endpoint_scheme, leitweg_id) + if _bt49_preview and not str(r_email).strip(): + st.success(f"➡️ BT-49 wird automatisch aus der Leitweg-ID übernommen: " + f"**{_bt49_preview}** (Schema **{_bt49_scheme_preview}**) – hier nichts nötig.") + elif _bt49_preview: + st.caption(f"Export als BT-49: **{_bt49_preview}** · Schema **{_bt49_scheme_preview}**") + r_street = st.text_input("Straße (BT-50)", value=data.get("recipient_street", "")) r_zip = st.text_input("PLZ (BT-53)", value=data.get("recipient_zip", "")) r_city = st.text_input("Stadt (BT-52) :red[*]", value=data.get("recipient_city", ""))