fix(v3): '@' -> EM auch im Leitweg-Feld; BT-49-Info nennt beide Felder

- resolve_buyer_endpoint: das Schema wird jetzt am finalen Wert entschieden,
  egal aus welchem Feld er stammt. Ein '@' (auch versehentlich ins
  Leitweg-ID-Feld getippt) fuehrt immer zu Schema EM statt 0204.
- Der sichtbare Hinweis unter dem Schema-Feld benennt jetzt ausdruecklich
  beide Felder (Elektronische Adresse BT-49 UND Adress-Schema BT-49-1) mit
  ihren effektiven Werten, damit das leere BT-49-Feld nicht als "offen"
  missverstanden wird.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
dfuhrmann3 2026-07-14 15:24:56 +02:00
parent 2e259589c0
commit 23968bb911
2 changed files with 27 additions and 20 deletions

View File

@ -84,23 +84,26 @@ 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).
Regeln (in dieser Reihenfolge): Zuerst wird der Wert bestimmt: das BT-49-Feld hat Vorrang; ist es leer, wird die Leitweg-ID
1. Steht im BT-49-Feld eine Adresse mit '@', ist es immer eine E-Mail -> Schema 'EM' (BT-10) genommen (so muss sie nur einmal eingegeben werden). Dann das Schema:
(unabhaengig vom Dropdown, damit ein falsch gewaehltes Schema nicht durchschlaegt). 1. Enthaelt der Wert ein '@', ist es immer eine E-Mail -> Schema 'EM' (egal aus welchem Feld
2. Steht dort eine Adresse ohne '@' (z.B. GLN), wird das gewaehlte Schema uebernommen. er stammt und unabhaengig vom Dropdown - ein falsch gewaehltes Schema schlaegt nicht durch).
3. Ist das Feld leer, aber eine Leitweg-ID (BT-10) vorhanden, wird die Leitweg-ID als BT-49 2. Stammt der Wert aus der Leitweg-ID (BT-49-Feld war leer) -> Schema '0204'.
mit Schema '0204' verwendet - so muss die Leitweg-ID nur einmal (in BT-10) eingegeben werden. 3. Sonst (Wert direkt in BT-49 eingetragen, ohne '@', z.B. GLN) -> das gewaehlte Schema.
4. Ist beides leer, bleibt die Adresse leer (Schema unveraendert). Ist beides leer, bleibt die Adresse leer (Schema unveraendert). Gibt (adresse, schema) zurueck."""
Gibt (adresse, schema) zurueck."""
email = str(recipient_email or "").strip() email = str(recipient_email or "").strip()
if email: if email:
if "@" in email: value, from_leitweg = email, False
return email, "EM" else:
return email, recipient_scheme value, from_leitweg = str(leitweg_id or "").strip(), True
leitweg = str(leitweg_id or "").strip()
if leitweg: if not value:
return leitweg, "0204" return "", recipient_scheme
return "", recipient_scheme if "@" in value:
return value, "EM"
if from_leitweg:
return value, "0204"
return value, recipient_scheme
# Fester Hinweistext fuer Vorkasse. Vorkasse ist eine Zahlungs*bedingung* (BT-20), kein # Fester Hinweistext fuer Vorkasse. Vorkasse ist eine Zahlungs*bedingung* (BT-20), kein
# Zahlungs*mittel* - das Zahlungsmittel bleibt die Ueberweisung. Der Text wird daher zu den # Zahlungs*mittel* - das Zahlungsmittel bleibt die Ueberweisung. Der Text wird daher zu den

14
main.py
View File

@ -348,14 +348,18 @@ with col2:
) )
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 # Sichtbar machen, was tatsächlich in BEIDE Felder (BT-49 + BT-49-1) exportiert wird -
# aus der Leitweg-ID (BT-10) abgeleitet wird, damit das leere Feld nicht "offen" wirkt. # vor allem, wenn die Adresse aus der Leitweg-ID (BT-10) abgeleitet wird und das
# Feld BT-49 daher leer bleibt (sonst könnte man es für "noch offen" halten).
_bt49_preview, _bt49_scheme_preview = resolve_buyer_endpoint(r_email, r_endpoint_scheme, leitweg_id) _bt49_preview, _bt49_scheme_preview = resolve_buyer_endpoint(r_email, r_endpoint_scheme, leitweg_id)
if _bt49_preview and not str(r_email).strip(): if _bt49_preview and not str(r_email).strip():
st.success(f"➡️ BT-49 wird automatisch aus der Leitweg-ID übernommen: " st.success(f"➡️ Wird automatisch aus der Leitweg-ID (BT-10) übernommen – die beiden "
f"**{_bt49_preview}** (Schema **{_bt49_scheme_preview}**) – hier nichts nötig.") f"Felder oben können leer bleiben:\n\n"
f"- **Elektronische Adresse (BT-49):** {_bt49_preview}\n"
f"- **Adress-Schema (BT-49-1):** {_bt49_scheme_preview}")
elif _bt49_preview: elif _bt49_preview:
st.caption(f"Export als BT-49: **{_bt49_preview}** · Schema **{_bt49_scheme_preview}**") st.info(f"➡️ Export → **Elektronische Adresse (BT-49):** {_bt49_preview} · "
f"**Adress-Schema (BT-49-1):** {_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", ""))