import { z } from 'zod'; const MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB const ALLOWED_TYPES = [ 'application/pdf', 'image/png', 'image/jpg', 'image/jpeg', ]; export const ExpenseSchema = z.object({ projectId: z.string().min(1, { message: "Project is required" }), expensesTypeId: z.string().min(1, { message: "Expense type is required" }), paymentModeId: z.string().min(1, { message: "Payment mode is required" }), paidById: z.string().min(1, { message: "Employee name is required" }), transactionDate: z.string().min(1, { message: "Date is required" }), transactionId: z.string().optional(), // if optional, else use .min(1) description: z.string().min(1, { message: "Description is required" }), location: z.string().min(1, { message: "Location is required" }), supplerName: z.string().min(1, { message: "Supplier name is required" }), amount: z.number().min(1, { message: "Amount must be at least 1" }).max(10000, { message: "Amount must not exceed 10,000" }), noOfPersons: z.number().min(1, { message: "1 Employee at least required" }), statusId: z.string().min(1, { message: "Please select status" }), billAttachments: z .array( z.object({ fileName: z.string().min(1, { message: "Filename is required" }), base64Data: z.string().min(1, { message: "File data is required" }), contentType: z.string().refine((val) => ALLOWED_TYPES.includes(val), { message: "Only PDF, PNG, JPG, or JPEG files are allowed", }), fileSize: z.number().max(MAX_FILE_SIZE, { message: "File size must be less than or equal to 5MB", }), description: z.string().optional(), }) ) .nonempty({ message: "At least one file attachment is required" }), }); let payload= { "projectId": "2618f2ef-2823-11f0-9d9e-bc241163f504", "expensesTypeId": "dd120bc4-ab0a-45ba-8450-5cd45ff221ca", "paymentModeId": "ed667353-8eea-4fd1-8750-719405932480", "paidById": "08dda7d8-014e-443f-858d-a55f4b484bc4", "transactionDate": "2025-07-12T09:56:54.122Z", "transactionId": "string", "description": "string", "location": "string", "supplerName": "string", "amount": 390, "noOfPersons": 0, "statusId": "297e0d8f-f668-41b5-bfea-e03b354251c8", "billAttachments": [ { "fileName": "string", "base64Data": "string", "contentType": "string", "fileSize": 0, "description": "string" } ] }