Kundenart in der Kunden-Uebersicht und Steuernummer in den Finanz-Einstellungen (Helfer mit Tests)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-07 14:28:49 +00:00
1 parent 99ab4bd47b
commit 674cce26f0
4 files changed
+185 -6

No files matched your search

+67
View File
@@ -0,0 +1,67 @@
// Reine Helfer fuer zwei Felder der Auftragsbestaetigung: die Kundenart am Kunden und die Steuernummer in den
// Finanz-Einstellungen; kein React, kein Appwrite, unter Node testbar. Texte deutsch, sachlich.
/** Werte der Kundenart (Vertrag V2); '' = nicht festgelegt. */
export const KUNDENARTEN = ['unternehmen', 'privat']
export const KUNDENART_OPTIONEN = [
{ value: '', label: 'Nicht festgelegt' },
{ value: 'unternehmen', label: 'Unternehmen' },
{ value: 'privat', label: 'Privatperson' },
]
export const KUNDENART_HINWEIS = 'Für Auftragsbestätigungen: Privatpersonen bekommen die Widerrufsbelehrung.'
const text = (v) => (typeof v === 'string' ? v : '')
/** Beschriftung der Kundenart; alles Unbekannte heisst „Nicht festgelegt“. */
export function kundenartLabel(value) {
const treffer = KUNDENART_OPTIONEN.find((o) => o.value !== '' && o.value === value)
return treffer ? treffer.label : KUNDENART_OPTIONEN[0].label
}
/**
* Was beim Speichern der Kundendaten zusaetzlich ins Dokument soll: nur eine geaenderte, bekannte Kundenart
* (so scheitert das Speichern der uebrigen Stammdaten nie an einem noch nicht angelegten Attribut).
*/
export function kundenartAenderung(neu, gespeichert) {
const n = text(neu)
const alt = text(gespeichert)
if (n !== '' && !KUNDENARTEN.includes(n)) return {}
if (n === alt) return {}
return { kundenart: n }
}
export const STEUERNUMMER_MAX = 40
export const STEUERNUMMER_HINWEIS = 'Steht auf jeder Auftragsbestätigung. Für Rechnungen bitte zusätzlich im Stripe-Dashboard hinterlegen.'
export const STEUERNUMMER_FEHLT_HINWEIS =
'Die Steuernummer fehlt noch – sie steht dann nicht auf der Auftragsbestätigung. Eintragen unter Finanzen → Einstellungen.'
const STEUERNUMMER_ZEICHEN = /^[A-Za-z0-9/ .-]*$/
/**
* Steuernummer fuer PATCH /einstellungen. Der Client prueft wie der Server (Vertrag V4): getrimmt hoechstens 40 Zeichen aus
* ASCII-Buchstaben, Ziffern, Leerzeichen, „/“, „-“ und „.“; leer loescht den Wert. Unveraendert wird nichts gesendet.
*/
export function steuernummerAenderung(eingabe, gespeichert) {
const neu = text(eingabe).trim()
const alt = text(gespeichert).trim()
if (neu === alt) return { ok: true, payload: {} }
if (neu.length > STEUERNUMMER_MAX) return { ok: false, fehler: `Die Steuernummer darf höchstens ${STEUERNUMMER_MAX} Zeichen lang sein.` }
if (!STEUERNUMMER_ZEICHEN.test(neu)) {
return { ok: false, fehler: 'Die Steuernummer darf nur Buchstaben (ohne Umlaute), Ziffern, Leerzeichen, „/“, „-“ und „.“ enthalten.' }
}
return { ok: true, payload: { steuernummer: neu } }
}
/**
* Fehlt die Steuernummer? Nur wahr, wenn die Einstellungen da sind (Objekt) und der Wert leer ist; „noch nicht geladen“
* (undefined) und „nicht ladbar“ (null) behaupten nichts.
*/
export function steuernummerFehlt(einstellungen) {
if (!einstellungen || typeof einstellungen !== 'object' || Array.isArray(einstellungen)) return false
const wert = einstellungen.steuernummer
return typeof wert !== 'string' || wert.trim() === ''
}