import { describe, expect, it } from 'vitest' import { BetreuteSchema, formularLesen } from '@/lib/validierung/betreute' /** * Eingabepruefung der Stammdaten. * * Anlass für diese Datei war ein Fehler im Betrieb: Die Ersteinrichtung * ließ sich nicht abschließen. Das Formular meldete „Bitte prüfe die * markierten Felder", markierte aber keines — weil die Meldungen zu * Feldern gehörten, die dort gar nicht stehen. * * Ursache: Das kurze Formular der Ersteinrichtung schickt neun Felder, * das vollständige unter Stammdaten alle. Beide gehen durch dasselbe * Schema, und die optionalen Felder waren zwar `nullable`, aber nicht * `optional` — ein fehlendes Feld ist `undefined`, nicht `null`. */ /** Die Felder, die das kurze Formular der Ersteinrichtung tatsächlich schickt. */ function ersteinrichtungsFormular(): FormData { const f = new FormData() f.set('vorname', 'Franziska') f.set('nachname', 'Wilde') f.set('geburtsdatum', '1963-09-23') f.set('betreuungsgericht', 'Lichtenfels') f.set('aktenzeichenGericht', 'XVII 355/25') f.set('bestellungAm', '2025-11-07') f.append('aufgabenkreise', 'VERMOEGENSSORGE') f.append('aufgabenkreise', 'GESUNDHEITSSORGE') f.set('befreiterBetreuer', 'on') f.set('ehrenamtlich', 'on') return f } describe('Ersteinrichtung', () => { it('nimmt das kurze Formular an, obwohl es die meisten Felder nicht schickt', () => { const gelesen = BetreuteSchema.safeParse(formularLesen(ersteinrichtungsFormular())) if (!gelesen.success) { const felder = Object.keys(gelesen.error.flatten().fieldErrors).join(', ') throw new Error(`Abgelehnt wegen: ${felder}`) } expect(gelesen.data.vorname).toBe('Franziska') expect(gelesen.data.nachname).toBe('Wilde') expect(gelesen.data.geburtsdatum.toISOString()).toBe('1963-09-23T00:00:00.000Z') expect(gelesen.data.bestellungAm?.toISOString()).toBe('2025-11-07T00:00:00.000Z') expect(gelesen.data.aufgabenkreise).toEqual(['VERMOEGENSSORGE', 'GESUNDHEITSSORGE']) expect(gelesen.data.befreiterBetreuer).toBe(true) expect(gelesen.data.ehrenamtlich).toBe(true) }) it('macht aus nicht gesendeten Feldern null, nicht undefined', () => { const gelesen = BetreuteSchema.parse(formularLesen(ersteinrichtungsFormular())) // Diese Felder standen nie auf dem Bildschirm. Sie muessen als null in // der Datenbank landen, sonst schreibt Prisma sie gar nicht. expect(gelesen.heimName).toBeNull() expect(gelesen.diagnosen).toBeNull() expect(gelesen.geburtsname).toBeNull() expect(gelesen.heimEinzugAm).toBeNull() expect(gelesen.bestellungBis).toBeNull() expect(gelesen.aktenzeichenBezirk).toBeNull() expect(gelesen.pflegegrad).toBeNull() expect(gelesen.schwerbehinderungGdB).toBeNull() }) it('haelt auch das vollstaendige Formular aus', () => { const f = ersteinrichtungsFormular() // So kommt es aus dem Bearbeitungsformular: alle Felder da, viele leer. for (const feld of [ 'anrede', 'geburtsname', 'geburtsort', 'heimName', 'heimStrasse', 'heimPlz', 'heimOrt', 'heimZimmer', 'heimTelefon', 'fruehereStrasse', 'frueherePlz', 'fruehererOrt', 'krankenkasse', 'krankenversichertennummer', 'pflegekasse', 'schwerbehinderungMerkzeichen', 'diagnosen', 'ermittelterWille', 'aufgabenkreiseFreitext', 'aktenzeichenBezirk', 'aktenzeichenSozialamt', 'rentenversicherungsnummer', 'steuerId', 'notizen', ]) { f.set(feld, '') } for (const feld of ['heimEinzugAm', 'pflegegradSeit', 'pflegegradBescheidVom', 'bestellungBis']) { f.set(feld, '') } f.set('pflegegrad', '') f.set('schwerbehinderungGdB', '') const gelesen = BetreuteSchema.safeParse(formularLesen(f)) expect(gelesen.success, 'Leere Felder duerfen nicht abgelehnt werden').toBe(true) }) it('nimmt ausgefuellte Angaben unveraendert an', () => { const f = ersteinrichtungsFormular() f.set('heimName', ' Seniorenzentrum St. Katharina ') f.set('pflegegrad', '3') f.set('diagnosen', 'COPD GOLD III') const gelesen = BetreuteSchema.parse(formularLesen(f)) // Fuehrende und nachlaufende Leerzeichen fliegen raus. expect(gelesen.heimName).toBe('Seniorenzentrum St. Katharina') expect(gelesen.pflegegrad).toBe(3) expect(gelesen.diagnosen).toBe('COPD GOLD III') }) it('besteht weiterhin auf Vorname, Nachname und Geburtsdatum', () => { const f = new FormData() f.set('vorname', '') f.set('nachname', '') f.set('geburtsdatum', '') const gelesen = BetreuteSchema.safeParse(formularLesen(f)) expect(gelesen.success).toBe(false) if (!gelesen.success) { const felder = gelesen.error.flatten().fieldErrors expect(Object.keys(felder).sort()).toEqual(['geburtsdatum', 'nachname', 'vorname']) } }) it('weist ein Geburtsdatum in der Zukunft ab', () => { const f = ersteinrichtungsFormular() f.set('geburtsdatum', '2099-01-01') const gelesen = BetreuteSchema.safeParse(formularLesen(f)) expect(gelesen.success).toBe(false) if (!gelesen.success) { expect(gelesen.error.flatten().fieldErrors.geburtsdatum?.[0]).toMatch(/Zukunft/) } }) it('weist ein unfertiges Datum ab, statt es stillschweigend zu verwerfen', () => { const f = ersteinrichtungsFormular() f.set('bestellungAm', '2025-11') const gelesen = BetreuteSchema.safeParse(formularLesen(f)) expect(gelesen.success).toBe(false) }) })