import { z } from 'zod' const queryBooleanSchema = z.preprocess((value) => { if (value === 'true') return true if (value === 'false') return false return value }, z.boolean()) export const billingListQuerySchema = z.object({ page: z.coerce.number().int().positive().default(1), pageSize: z.coerce.number().int().positive().max(100).default(25), search: z.string().trim().max(120).optional().default(''), paymentStatus: z.enum(['ALL', 'UNPAID', 'PARTIAL', 'PAID']).optional().default('ALL'), outstandingOnly: queryBooleanSchema.optional().default(false), }) export const billingSummaryQuerySchema = z.object({ search: z.string().trim().max(120).optional().default(''), }) export const invoiceParamSchema = z.object({ invoiceId: z.string().min(1), }) export const manualBillingPaymentSchema = z.object({ amountMinor: z.number().int().positive(), currency: z.literal('MAD').default('MAD'), type: z.enum(['CHARGE', 'DEPOSIT']), method: z.enum(['CASH', 'CHECK', 'BANK_TRANSFER', 'CARD', 'PAYPAL', 'OTHER']), receivedAt: z.string().datetime().optional(), reference: z.string().trim().max(120).optional(), note: z.string().trim().max(1000).optional(), idempotencyKey: z.string().uuid(), })