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 <noreply@anthropic.com>
This commit is contained in:
dfuhrmann3 2026-07-14 15:18:52 +02:00
parent 991384a362
commit 2e259589c0
2 changed files with 20 additions and 4 deletions

View File

@ -84,12 +84,18 @@ BUYER_ENDPOINT_SCHEMES = {
def resolve_buyer_endpoint(recipient_email, recipient_scheme, leitweg_id): def resolve_buyer_endpoint(recipient_email, recipient_scheme, leitweg_id):
"""Ermittelt die effektive elektronische Adresse des Kaeufers (BT-49) samt Schema (BT-49-1). """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 Regeln (in dieser Reihenfolge):
Feld leer, aber eine Leitweg-ID (BT-10) vorhanden, wird die Leitweg-ID als BT-49 mit Schema 1. Steht im BT-49-Feld eine Adresse mit '@', ist es immer eine E-Mail -> Schema 'EM'
'0204' verwendet - so muss die Leitweg-ID nur einmal (in BT-10) eingegeben werden. Ist beides (unabhaengig vom Dropdown, damit ein falsch gewaehltes Schema nicht durchschlaegt).
leer, bleibt die Adresse leer (Schema unveraendert). Gibt (adresse, schema) zurueck.""" 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() email = str(recipient_email or "").strip()
if email: if email:
if "@" in email:
return email, "EM"
return email, recipient_scheme return email, recipient_scheme
leitweg = str(leitweg_id or "").strip() leitweg = str(leitweg_id or "").strip()
if leitweg: if leitweg:

10
main.py
View File

@ -347,6 +347,16 @@ with col2:
"0088 = GLN. Muss zum Typ der oben eingetragenen Adresse passen.", "0088 = GLN. Muss zum Typ der oben eingetragenen Adresse passen.",
) )
r_endpoint_scheme = r_endpoint_scheme_label.split(" - ")[0] 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_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_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", "")) r_city = st.text_input("Stadt (BT-52) :red[*]", value=data.get("recipient_city", ""))