import { z } from "zod" const relationFieldSchema = z .object({ value: z.string(), label: z.string() }) .nullable() const billPartItemSchema = z.object({ part_id: z.number(), title: z.string(), quantity: z.number().min(1), rate: z.number().min(0), discount_amount: z.number().min(0).optional(), description: z.string().optional(), }) const billServiceItemSchema = z.object({ service_id: z.number(), title: z.string(), quantity: z.number().min(1), rate: z.number().min(0), discount_amount: z.number().min(0).optional(), description: z.string().optional(), }) const billExpenseItemSchema = z.object({ expense_id: z.number(), title: z.string(), quantity: z.number().min(1), rate: z.number().min(0), discount_amount: z.number().min(0).optional(), description: z.string().optional(), }) const billFormSchema = z.object({ // ── Required ── title: z.string().min(1, "Title is required"), // ── Relations ── vendor: relationFieldSchema, vendor_address: relationFieldSchema, purchase_order: relationFieldSchema, job_card: relationFieldSchema, payment_term: relationFieldSchema, department: relationFieldSchema, tax: relationFieldSchema, // ── Optional fields ── bill_number: z.string().optional(), bill_date: z.string().optional(), bill_due_date: z.string().optional(), status: z.string().optional(), discount: z.string().optional(), discount_amount: z.coerce.number().min(0).optional(), notes: z.string().optional(), // ── Line items ── part_items: z.array(billPartItemSchema).optional(), service_items: z.array(billServiceItemSchema).optional(), expense_items: z.array(billExpenseItemSchema).optional(), }) type BillFormValues = z.infer type BillPartItem = z.infer type BillServiceItem = z.infer type BillExpenseItem = z.infer export { billFormSchema, relationFieldSchema, billPartItemSchema, billServiceItemSchema, billExpenseItemSchema } export type { BillFormValues, BillPartItem, BillServiceItem, BillExpenseItem }