Vertriebsunterstützung an Reisezeit koppeln
- Reisezeit 0 -> Vertriebsunterstützung 0 - Reisezeit < 2h -> Vertriebsunterstützung = Reisezeit (Feld gesperrt) - Reisezeit >= 2h -> Vertriebsunterstützung 2h, aber editierbar - Regel zentral in lib/calc.ts (applyVertriebsregel), im Formular interaktiv und in der API-Validierung erzwungen Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+17
@@ -43,6 +43,23 @@ export function hatZeiten(beginn: string, ende: string): boolean {
|
||||
return parseHM(beginn) !== null && parseHM(ende) !== null;
|
||||
}
|
||||
|
||||
/** True, wenn die Vertriebsunterstützung bei dieser Reisezeit frei änderbar ist (Reisezeit ≥ 2h). */
|
||||
export function vertriebEditierbar(reisezeit: number): boolean {
|
||||
return reisezeit >= 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Vertriebsunterstützung an die Reisezeit koppeln:
|
||||
* Reisezeit = 0 → 0
|
||||
* 0 < Reisezeit < 2 → = Reisezeit
|
||||
* Reisezeit ≥ 2 → vorhandener Wert (änderbar), Standard 2
|
||||
*/
|
||||
export function applyVertriebsregel(reisezeit: number, vorhanden: number): number {
|
||||
if (reisezeit <= 0) return 0;
|
||||
if (reisezeit < 2) return reisezeit;
|
||||
return vorhanden;
|
||||
}
|
||||
|
||||
/** Deutscher Wochentagsname für ein "YYYY-MM-DD"-Datum, oder "" bei ungültig. */
|
||||
export function weekdayName(datum: string): string {
|
||||
const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(datum ?? '');
|
||||
|
||||
+5
-2
@@ -1,5 +1,5 @@
|
||||
import { ORTE, type ArbeitszeitInput, type Ort } from '@/types/arbeitszeit';
|
||||
import { parseHM } from './calc';
|
||||
import { parseHM, applyVertriebsregel } from './calc';
|
||||
|
||||
/**
|
||||
* Validiert und normalisiert einen JSON-Body zu einem ArbeitszeitInput.
|
||||
@@ -25,10 +25,13 @@ export function parseArbeitszeitInput(body: unknown): ArbeitszeitInput {
|
||||
}
|
||||
|
||||
const reisezeit = toNumber(b.reisezeit, 0);
|
||||
const vertriebsunterstuetzung = toNumber(b.vertriebsunterstuetzung, 2);
|
||||
let vertriebsunterstuetzung = toNumber(b.vertriebsunterstuetzung, 2);
|
||||
if (reisezeit < 0 || vertriebsunterstuetzung < 0) {
|
||||
throw new Error('Zeitwerte dürfen nicht negativ sein.');
|
||||
}
|
||||
// Regel: Vertriebsunterstützung an die Reisezeit koppeln.
|
||||
// 0h ⇒ 0; <2h ⇒ = Reisezeit; ≥2h ⇒ bereitgestellter Wert (änderbar, default 2).
|
||||
vertriebsunterstuetzung = applyVertriebsregel(reisezeit, vertriebsunterstuetzung);
|
||||
|
||||
const kommentar = String(b.kommentar ?? '').slice(0, 500);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user