feat(orders): issued-order Zod schemas
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
48
src/schemas/issued-orders.schema.ts
Normal file
48
src/schemas/issued-orders.schema.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { z } from "zod";
|
||||
import {
|
||||
numberInRange,
|
||||
nonNegativeNumberFromForm,
|
||||
positiveNumberFromForm,
|
||||
nullableIntIdFromForm,
|
||||
booleanFromForm,
|
||||
isoDateString,
|
||||
} from "./common";
|
||||
|
||||
export const IssuedOrderItemSchema = z.object({
|
||||
description: z.string().max(500).nullish(),
|
||||
item_description: z.string().max(5000).nullish(),
|
||||
quantity: positiveNumberFromForm.optional(),
|
||||
unit: z.string().max(20).nullish(),
|
||||
unit_price: nonNegativeNumberFromForm.optional(),
|
||||
vat_rate: numberInRange(0, 100).optional(),
|
||||
position: z.number().int().nonnegative().optional(),
|
||||
});
|
||||
|
||||
const ISSUED_ORDER_STATUSES = [
|
||||
"draft",
|
||||
"sent",
|
||||
"confirmed",
|
||||
"completed",
|
||||
"cancelled",
|
||||
] as const;
|
||||
|
||||
export const CreateIssuedOrderSchema = z.object({
|
||||
po_number: z.string().max(50).nullish(),
|
||||
customer_id: nullableIntIdFromForm.nullish(),
|
||||
status: z.enum(ISSUED_ORDER_STATUSES).optional(),
|
||||
currency: z.string().max(10).optional(),
|
||||
vat_rate: numberInRange(0, 100).optional(),
|
||||
apply_vat: booleanFromForm.optional(),
|
||||
exchange_rate: nonNegativeNumberFromForm.optional(),
|
||||
order_date: isoDateString.nullish(),
|
||||
delivery_date: isoDateString.nullish(),
|
||||
language: z.string().max(5).optional(),
|
||||
delivery_terms: z.string().max(500).nullish(),
|
||||
payment_terms: z.string().max(500).nullish(),
|
||||
issued_by: z.string().max(255).nullish(),
|
||||
notes: z.string().nullish(),
|
||||
internal_notes: z.string().nullish(),
|
||||
items: z.array(IssuedOrderItemSchema).optional(),
|
||||
});
|
||||
|
||||
export const UpdateIssuedOrderSchema = CreateIssuedOrderSchema.partial();
|
||||
Reference in New Issue
Block a user