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):
"""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:

10
main.py
View File

@ -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", ""))