Files
sistema_base/apps/web/feactures/training/schemas/training.ts

114 lines
3.9 KiB
TypeScript

import { z } from 'zod';
export const trainingSchema = z.object({
id: z.number().optional(),
firstname: z.string().min(1, { message: 'Nombre es requerido' }),
lastname: z.string().min(1, { message: 'Apellido es requerido' }),
visitDate: z
.string()
.min(1, { message: 'Fecha y hora de visita es requerida' }),
productiveActivity: z
.string()
.min(1, { message: 'Actividad productiva es requerida' }),
financialRequirementDescription: z
.string()
.min(1, { message: 'Descripción es requerida' }),
siturCodeCommune: z
.string()
.min(1, { message: 'Código SITUR Comuna es requerido' }),
communalCouncil: z
.string()
.min(1, { message: 'Consejo Comunal es requerido' }),
siturCodeCommunalCouncil: z
.string()
.min(1, { message: 'Código SITUR Consejo Comunal es requerido' }),
ospName: z.string().min(1, { message: 'Nombre de la OSP es requerido' }),
ospAddress: z
.string()
.min(1, { message: 'Dirección de la OSP es requerida' }),
ospRif: z.string().min(1, { message: 'RIF de la OSP es requerido' }),
ospType: z.string().min(1, { message: 'Tipo de OSP es requerido' }),
currentStatus: z
.string()
.min(1, { message: 'Estatus actual es requerido' })
.default('ACTIVA'),
companyConstitutionYear: z.coerce
.number()
.min(1900, { message: 'Año inválido' }),
producerCount: z.coerce
.number()
.min(0, { message: 'Cantidad de productores requerida' }),
productCount: z.coerce
.number()
.min(0, { message: 'Cantidad de productos requerida' })
.optional(),
productDescription: z
.string()
.min(1, { message: 'Descripción del producto es requerida' }),
installedCapacity: z
.string()
.min(1, { message: 'Capacidad instalada es requerida' }),
operationalCapacity: z
.string()
.min(1, { message: 'Capacidad operativa es requerida' }),
ospResponsibleFullname: z
.string()
.min(1, { message: 'Nombre del responsable es requerido' }),
ospResponsibleCedula: z
.string()
.min(1, { message: 'Cédula del responsable es requerida' }),
ospResponsibleRif: z
.string()
.min(1, { message: 'RIF del responsable es requerido' }),
ospResponsiblePhone: z
.string()
.min(1, { message: 'Teléfono del responsable es requerido' }),
civilState: z.string().min(1, { message: 'Estado civil es requerido' }),
familyBurden: z.coerce
.number()
.min(0, { message: 'Carga familiar requerida' }),
numberOfChildren: z.coerce
.number()
.min(0, { message: 'Número de hijos requerido' }),
ospResponsibleEmail: z
.string()
.email({ message: 'Correo electrónico inválido' }),
generalObservations: z.string().optional().default(''),
photo1: z.string().optional().nullable(),
photo2: z.string().optional().nullable(),
photo3: z.string().optional().nullable(),
files: z.any().optional(),
paralysisReason: z.string().optional().default(''),
state: z.number().optional().nullable(),
municipality: z.number().optional().nullable(),
parish: z.number().optional().nullable(),
coor_state: z.number().optional().nullable(),
coor_municipality: z.number().optional().nullable(),
coor_parish: z.number().optional().nullable(),
coor_phone: z.string().optional().nullable(),
ecoSector: z.string().min(1, { message: 'Sector económico es requerido' })
// mainProductiveActivity: z.string().optional().nullable(),
});
export type TrainingSchema = z.infer<typeof trainingSchema>;
export const trainingApiResponseSchema = z.object({
message: z.string(),
data: z.array(trainingSchema),
meta: z.object({
page: z.number(),
limit: z.number(),
totalCount: z.number(),
totalPages: z.number(),
hasNextPage: z.boolean(),
hasPreviousPage: z.boolean(),
nextPage: z.number().nullable(),
previousPage: z.number().nullable(),
}),
});
export const TrainingMutate = z.object({
message: z.string(),
data: trainingSchema,
});