// 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() === '' }