Formular im Portal
- Eingang
- Rabatt 40 % im Formular
- Regel
- quote.discount: 40 > 15, abgelehnt
- Anzeige
- „Über 15 % braucht Freigabe“
- Ergebnis
- Nichts gespeichert
Eine Geschäftsregel steht bei mir einmal im Code und gilt dann überall.
Jemand trägt 40 Prozent Rabatt ein. Was dann passiert, hängt nicht davon ab, wo die Zahl hereinkommt.
Beispielwerte. Welche Grenze bei Dir gilt, legst Du fest. Ich schreibe sie einmal auf.
Hier steht sie, Zeile für Zeile erklärt. Die Grenze steht einmal im Code, und alle drei Türen lesen sie von dort.
import { z } from 'zod';// Prozent. Darüber entscheidet ein Mensch.export const MAX_DISCOUNT = 15;export const QuoteLine = z.object({ item: z.string().min(1), quantity: z.number().int().min(1), discount: z.number().max(MAX_DISCOUNT),});Die Grenze von 15 Prozent steht in Zeile 4 und nirgends sonst. Ändert sie sich, ändere ich diese eine Zeile, und Formular, Schnittstelle und Import folgen.
Zeilen 1 bis 10
// Formular, Schnittstelle und Import:const result = QuoteLine.safeParse(input);if (!result.success) { return reject(result.error);}Jede Stelle, die Daten annimmt, ruft dieselbe Prüfung auf. Eine falsche Zahl kommt gar nicht erst in die Datenbank, also muss sie später auch niemand in einer Auswertung suchen.
Zeilen 11 bis 15
function reject(error: z.ZodError) { log.warn('quote.discount', error.issues); return { status: 422, message: 'Über 15 % braucht Freigabe', };}Die Prüfung schreibt den Vorfall mit der Regel und dem Wert ins Protokoll. Der Nutzer bekommt einen Satz, den er versteht, und keine technische Fehlerseite.
Zeilen 16 bis 22
test('über der Grenze scheitert', () => { const line = { item: 'A', quantity: 1 }; const bad = { ...line, discount: 16 }; expect(QuoteLine.safeParse(bad).success) .toBe(false);});Der Test prüft den Wert direkt über der Grenze, nicht die Formulare davor. Wer die Grenze später verschiebt, stößt auf diesen Test und muss die Änderung bewusst bestätigen.
Zeilen 23 bis 28
04
Eine Funktion, ein System, ein Verantwortlicher.
2–12 Wochen, Festpreis nach technischem Check
05
Aus Dienstleistung wird ein digitales Erlebnis.
6–12+ Wochen, Bau und Betrieb, nach der Discovery
Schildere mir den Fall in drei Sätzen. Ich antworte selbst, und das Gespräch dauert 15 Minuten.
Oder direkt: info@coderconda.com
Davor: drei Sätze, zwei Werktage bis zur Antwort, 15 Minuten Gespräch. So beginnt es