368fd6d7ad
Introduces an admin-configurable rules engine that determines per-day cost attribution (CHARGE/ZERO/REDUCE) and chargeability reporting (COUNT/SKIP) for absence types (sick, vacation, public holiday). Includes shared types, Zod schemas, Prisma model, rule matching with specificity scoring, default rules, calculator integration, CRUD API router, seed data, chargeability report integration, and admin UI. 283/283 engine tests, 209/209 API tests, 0 TS errors. Co-Authored-By: claude-flow <ruv@ruv.net>
23 lines
859 B
TypeScript
23 lines
859 B
TypeScript
import { z } from "zod";
|
|
|
|
export const AbsenceTriggerEnum = z.enum(["SICK", "VACATION", "PUBLIC_HOLIDAY", "CUSTOM"]);
|
|
export const CostEffectEnum = z.enum(["CHARGE", "ZERO", "REDUCE"]);
|
|
export const ChargeabilityEffectEnum = z.enum(["COUNT", "SKIP"]);
|
|
|
|
export const CreateCalculationRuleSchema = z.object({
|
|
name: z.string().min(1).max(200),
|
|
description: z.string().max(1000).optional(),
|
|
triggerType: AbsenceTriggerEnum,
|
|
projectId: z.string().optional(),
|
|
orderType: z.string().optional(),
|
|
costEffect: CostEffectEnum,
|
|
costReductionPercent: z.number().int().min(0).max(100).optional(),
|
|
chargeabilityEffect: ChargeabilityEffectEnum,
|
|
priority: z.number().int().min(0).max(1000).default(0),
|
|
isActive: z.boolean().default(true),
|
|
});
|
|
|
|
export const UpdateCalculationRuleSchema = CreateCalculationRuleSchema.partial().extend({
|
|
id: z.string(),
|
|
});
|