88 lines
3 KiB
TypeScript
88 lines
3 KiB
TypeScript
|
|
import { z } from "zod";
|
||
|
|
|
||
|
|
const ClientTypeSchema = z.enum(["company", "person", "pa", "condo"]);
|
||
|
|
|
||
|
|
const VatTypeSchema = z.object({
|
||
|
|
id: z.number().nullish(),
|
||
|
|
value: z.number().nullish(),
|
||
|
|
description: z.string().nullish(),
|
||
|
|
notes: z.string().nullish(),
|
||
|
|
e_invoice: z.boolean().nullish(),
|
||
|
|
ei_type: z.string().nullish(),
|
||
|
|
ei_description: z.string().nullish(),
|
||
|
|
editable: z.boolean().nullish(),
|
||
|
|
is_disabled: z.boolean().nullish(),
|
||
|
|
});
|
||
|
|
|
||
|
|
const PaymentTermsTypeSchema = z.enum(["standard", "end_of_month"]);
|
||
|
|
const PaymentMethodTypeSchema = z.enum(["standard", "riba"]);
|
||
|
|
const PaymentAccountTypeSchema = z.enum(["standard", "bank"]);
|
||
|
|
const PaymentAccountSchema = z.object({
|
||
|
|
id: z.number().nullish(),
|
||
|
|
name: z.string().nullish(),
|
||
|
|
type: PaymentAccountTypeSchema.optional(),
|
||
|
|
iban: z.string().nullish(),
|
||
|
|
sia: z.string().nullish(),
|
||
|
|
cuc: z.string().nullish(),
|
||
|
|
virtual: z.boolean().nullish(),
|
||
|
|
});
|
||
|
|
|
||
|
|
const PaymentMethodDetailsSchema = z.object({
|
||
|
|
title: z.string().nullish(),
|
||
|
|
description: z.string().nullish(),
|
||
|
|
});
|
||
|
|
|
||
|
|
const PaymentMethodSchema = z.object({
|
||
|
|
id: z.number().nullish(),
|
||
|
|
name: z.string().nullish(),
|
||
|
|
type: PaymentMethodTypeSchema.optional(),
|
||
|
|
is_default: z.boolean().nullish(),
|
||
|
|
default_payment_account: PaymentAccountSchema.nullish(),
|
||
|
|
details: z.array(PaymentMethodDetailsSchema).optional(),
|
||
|
|
bank_iban: z.string().nullish(),
|
||
|
|
bank_name: z.string().nullish(),
|
||
|
|
bank_beneficiary: z.string().nullish(),
|
||
|
|
ei_payment_method: z.string().nullish(),
|
||
|
|
});
|
||
|
|
|
||
|
|
export const ClientSchema = z.object({
|
||
|
|
id: z.number().nullish(),
|
||
|
|
code: z.string().nullish(),
|
||
|
|
name: z.string().nullish(),
|
||
|
|
type: ClientTypeSchema.nullish(),
|
||
|
|
first_name: z.string().nullish(),
|
||
|
|
last_name: z.string().nullish(),
|
||
|
|
contact_person: z.string().nullish(),
|
||
|
|
vat_number: z.string().nullish(),
|
||
|
|
tax_code: z.string().nullish(),
|
||
|
|
address_street: z.string().nullish(),
|
||
|
|
address_postal_code: z.string().nullish(),
|
||
|
|
address_city: z.string().nullish(),
|
||
|
|
address_province: z.string().nullish(),
|
||
|
|
address_extra: z.string().nullish(),
|
||
|
|
country: z.string().nullish(),
|
||
|
|
country_iso: z.string().nullish(),
|
||
|
|
email: z.string().nullish(),
|
||
|
|
certified_email: z.string().nullish(),
|
||
|
|
phone: z.string().nullish(),
|
||
|
|
fax: z.string().nullish(),
|
||
|
|
notes: z.string().nullish(),
|
||
|
|
default_vat: VatTypeSchema.nullish(),
|
||
|
|
default_payment_terms: z.number().nullish(),
|
||
|
|
default_payment_terms_type: PaymentTermsTypeSchema.optional(),
|
||
|
|
default_payment_method: PaymentMethodSchema.optional(),
|
||
|
|
bank_name: z.string().nullish(),
|
||
|
|
bank_iban: z.string().nullish(),
|
||
|
|
bank_swift_code: z.string().nullish(),
|
||
|
|
shipping_address: z.string().nullish(),
|
||
|
|
e_invoice: z.boolean().nullish(),
|
||
|
|
ei_code: z.string().nullish(),
|
||
|
|
discount_highlight: z.boolean().nullish(),
|
||
|
|
default_discount: z.number().nullish(),
|
||
|
|
has_intent_declaration: z.boolean().nullish(),
|
||
|
|
intent_declaration_protocol_number: z.string().nullish(),
|
||
|
|
intent_declaration_protocol_date: z.string().nullish(),
|
||
|
|
created_at: z.string().nullish(),
|
||
|
|
updated_at: z.string().nullish(),
|
||
|
|
});
|