import { z } from "zod"; // ─── Rate Card Line ────────────────────────────────────────────────────────── export const CreateRateCardLineSchema = z.object({ roleId: z.string().optional(), chapter: z.string().max(200).optional(), location: z.string().max(200).optional(), seniority: z.string().max(100).optional(), workType: z.string().max(100).optional(), serviceGroup: z.string().max(100).optional(), costRateCents: z.number().int().min(0), billRateCents: z.number().int().min(0).optional(), machineRateCents: z.number().int().min(0).optional(), attributes: z.record(z.unknown()).default({}), }); export const UpdateRateCardLineSchema = CreateRateCardLineSchema.partial(); export type CreateRateCardLineInput = z.infer; export type UpdateRateCardLineInput = z.infer; // ─── Rate Card ─────────────────────────────────────────────────────────────── export const CreateRateCardSchema = z.object({ name: z.string().min(1).max(300), currency: z.string().length(3).default("EUR"), effectiveFrom: z.coerce.date().optional(), effectiveTo: z.coerce.date().optional(), source: z.string().max(200).optional(), clientId: z.string().optional(), lines: z.array(CreateRateCardLineSchema).default([]), }); export const UpdateRateCardSchema = z.object({ name: z.string().min(1).max(300).optional(), currency: z.string().length(3).optional(), effectiveFrom: z.coerce.date().nullable().optional(), effectiveTo: z.coerce.date().nullable().optional(), source: z.string().max(200).nullable().optional(), clientId: z.string().nullable().optional(), isActive: z.boolean().optional(), }); export type CreateRateCardInput = z.infer; export type UpdateRateCardInput = z.infer;