correciones al formulario osp
This commit is contained in:
@@ -1,154 +1,166 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
// 1. Definimos el esquema de un item individual de la lista de productos
|
||||
// Basado en los campos que usaste en ProductActivityList
|
||||
const productItemSchema = z.object({
|
||||
productName: z.string(),
|
||||
description: z.string().optional(),
|
||||
dailyCount: z.coerce.string().or(z.number()).optional(), // Aceptamos string o number por los inputs
|
||||
weeklyCount: z.coerce.string().or(z.number()).optional(),
|
||||
monthlyCount: z.coerce.string().or(z.number()).optional(),
|
||||
|
||||
// Distribución Interna
|
||||
internalState: z.number().optional(),
|
||||
internalMunicipality: z.number().optional(),
|
||||
internalParish: z.number().optional(),
|
||||
internalDescription: z.string().optional(),
|
||||
internalQuantity: z.coerce.string().or(z.number()).optional(),
|
||||
|
||||
// Distribución Externa
|
||||
externalCountry: z.string().optional(),
|
||||
externalState: z.number().optional(),
|
||||
externalMunicipality: z.number().optional(),
|
||||
externalParish: z.number().optional(),
|
||||
externalCity: z.string().optional(),
|
||||
externalDescription: z.string().optional(),
|
||||
externalQuantity: z.coerce.string().or(z.number()).optional(),
|
||||
|
||||
// Mano de obra
|
||||
womenCount: z.coerce.string().or(z.number()).optional(),
|
||||
menCount: z.coerce.string().or(z.number()).optional(),
|
||||
});
|
||||
|
||||
const productionItemSchema = z.object({
|
||||
rawMaterial: z.string(),
|
||||
supplyType: z.string().optional(),
|
||||
quantity: z.coerce.string().or(z.number()).optional(), // Aceptamos string o number por los inputs
|
||||
});
|
||||
|
||||
const equipmentItemSchema = z.object({
|
||||
machine: z.string(),
|
||||
specifications: z.string().optional(),
|
||||
quantity: z.coerce.string().or(z.number()).optional(), // Aceptamos string o number por los inputs
|
||||
});
|
||||
|
||||
export const trainingSchema = z.object({
|
||||
//Datos de la visita
|
||||
id: z.number().optional(),
|
||||
firstname: z.string().min(1, { message: 'Nombre es requerido' }),
|
||||
lastname: z.string().min(1, { message: 'Apellido es requerido' }),
|
||||
coorPhone: z.string().optional().nullable(),
|
||||
visitDate: z
|
||||
.string()
|
||||
.min(1, { message: 'Fecha y hora de visita es requerida' }),
|
||||
|
||||
//Datos de la organización socioproductiva (OSP)
|
||||
ospType: z.string().min(1, { message: 'Tipo de OSP es requerido' }),
|
||||
ecoSector: z.string().optional().or(z.literal('')),
|
||||
productiveSector: z.string().optional().or(z.literal('')),
|
||||
centralProductiveActivity: z.string().optional().or(z.literal('')),
|
||||
mainProductiveActivity: z.string().optional().or(z.literal('')),
|
||||
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' }),
|
||||
communeName: z
|
||||
.string()
|
||||
.min(1, { message: 'Nombre de la Comuna es requerido' }),
|
||||
communeRif: z
|
||||
.string()
|
||||
.min(1, { message: 'RIF de la Comuna es requerido' }),
|
||||
communeSpokespersonName: z
|
||||
.string()
|
||||
.min(1, { message: 'Nombre del Vocero de la Comuna es requerido' }),
|
||||
communeSpokespersonCedula: z
|
||||
.string()
|
||||
.min(1, { message: 'Cédula del Vocero de la Comuna es requerida' }),
|
||||
communeSpokespersonRif: z
|
||||
.string()
|
||||
.min(1, { message: 'RIF del Vocero de la Comuna es requerido' }),
|
||||
communeSpokespersonPhone: z
|
||||
.string()
|
||||
.min(1, { message: 'Teléfono del Vocero de la Comuna es requerido' }),
|
||||
communeEmail: z.string().email({ message: 'Correo electrónico de la Comuna inválido' }),
|
||||
communalCouncil: z
|
||||
.string()
|
||||
.min(1, { message: 'Consejo Comunal es requerido' }),
|
||||
siturCodeCommunalCouncil: z
|
||||
.string()
|
||||
.min(1, { message: 'Código SITUR Consejo Comunal es requerido' }),
|
||||
communalCouncilRif: z
|
||||
.string()
|
||||
.min(1, { message: 'RIF del Consejo Comunal es requerido' }),
|
||||
communalCouncilSpokespersonName: z
|
||||
.string()
|
||||
.min(1, { message: 'Nombre del Vocero del Consejo Comunal es requerido' }),
|
||||
communalCouncilSpokespersonCedula: z
|
||||
.string()
|
||||
.min(1, { message: 'Cédula del Vocero del Consejo Comunal es requerida' }),
|
||||
communalCouncilSpokespersonRif: z
|
||||
.string()
|
||||
.min(1, { message: 'RIF del Vocero del Consejo Comunal es requerido' }),
|
||||
communalCouncilSpokespersonPhone: z
|
||||
.string()
|
||||
.min(1, { message: 'Teléfono del Vocero del Consejo Comunal es requerido' }),
|
||||
communalCouncilEmail: z
|
||||
.string()
|
||||
.email({ message: 'Correo electrónico del Consejo Comunal inválido' }),
|
||||
ospGoogleMapsLink: z
|
||||
.string()
|
||||
.min(1, { message: 'Enlace de Google Maps es requerido' }),
|
||||
ospRif: z.string().optional().or(z.literal('')),
|
||||
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' }),
|
||||
companyConstitutionYear: z.coerce
|
||||
.number()
|
||||
.min(1900, { message: 'Año inválido' }),
|
||||
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
|
||||
infrastructureMt2: z.string().optional().or(z.literal('')),
|
||||
hasTransport: z
|
||||
.preprocess((val) => val === 'true' || val === true, z.boolean())
|
||||
.optional(),
|
||||
structureType: z.string().optional().or(z.literal('')),
|
||||
isOpenSpace: z
|
||||
.preprocess((val) => val === 'true' || val === true, z.boolean())
|
||||
.optional(),
|
||||
paralysisReason: z.string().optional().default(''),
|
||||
|
||||
//Datos del Equipamiento
|
||||
equipmentList: z.array(equipmentItemSchema).optional().default([]),
|
||||
|
||||
//Datos de Producción
|
||||
productionList: z.array(productionItemSchema).optional().default([]),
|
||||
|
||||
// Datos de Actividad Productiva
|
||||
productList: z.array(productItemSchema).optional().default([]),
|
||||
|
||||
//Detalles de la ubicación
|
||||
ospAddress: z
|
||||
.string()
|
||||
.min(1, { message: 'Descripción del producto es requerida' }),
|
||||
prodDescriptionInternal: z
|
||||
.min(1, { message: 'Dirección de la OSP es requerida' }),
|
||||
ospGoogleMapsLink: z.string().optional().or(z.literal('')),
|
||||
communeName: z.string().optional().or(z.literal('')),
|
||||
siturCodeCommune: z.string().optional().or(z.literal('')),
|
||||
communeRif: z.string().optional().or(z.literal('')),
|
||||
communeSpokespersonName: z.string().optional().or(z.literal('')),
|
||||
communeSpokespersonCedula: z.string().optional().or(z.literal('')),
|
||||
communeSpokespersonRif: z.string().optional().or(z.literal('')),
|
||||
communeSpokespersonPhone: z.string().optional().or(z.literal('')),
|
||||
communeEmail: z
|
||||
.string()
|
||||
.min(1, { message: 'Descripción del producto es requerida' }),
|
||||
installedCapacity: z
|
||||
.email({ message: 'Correo electrónico de la Comuna inválido' })
|
||||
.optional()
|
||||
.or(z.literal('')),
|
||||
communalCouncil: z
|
||||
.string()
|
||||
.min(1, { message: 'Capacidad instalada es requerida' }),
|
||||
operationalCapacity: z
|
||||
.min(1, { message: 'Consejo Comunal es requerido' }),
|
||||
siturCodeCommunalCouncil: z.string().optional().or(z.literal('')),
|
||||
communalCouncilRif: z.string().optional().or(z.literal('')),
|
||||
communalCouncilSpokespersonName: z.string().optional().or(z.literal('')),
|
||||
communalCouncilSpokespersonCedula: z.string().optional().or(z.literal('')),
|
||||
communalCouncilSpokespersonRif: z.string().optional().or(z.literal('')),
|
||||
communalCouncilSpokespersonPhone: z.string().optional().or(z.literal('')),
|
||||
communalCouncilEmail: z
|
||||
.string()
|
||||
.min(1, { message: 'Capacidad operativa es requerida' }),
|
||||
ospResponsibleFullname: z
|
||||
.string()
|
||||
.min(1, { message: 'Nombre del responsable es requerido' }),
|
||||
.email({ message: 'Correo electrónico del Consejo Comunal inválido' })
|
||||
.optional()
|
||||
.or(z.literal('')),
|
||||
|
||||
//Datos del Responsable OSP
|
||||
ospResponsibleCedula: z
|
||||
.string()
|
||||
.min(1, { message: 'Cédula del responsable es requerida' }),
|
||||
ospResponsibleFullname: z
|
||||
.string()
|
||||
.min(1, { message: 'Nombre del responsable es requerido' }),
|
||||
ospResponsibleRif: z
|
||||
.string()
|
||||
.min(1, { message: 'RIF del responsable es requerido' }),
|
||||
civilState: z.string().min(1, { message: 'Estado civil es requerido' }),
|
||||
ospResponsiblePhone: z
|
||||
.string()
|
||||
.min(1, { message: 'Teléfono del responsable es requerido' }),
|
||||
civilState: z.string().min(1, { message: 'Estado civil es requerido' }),
|
||||
ospResponsibleEmail: z
|
||||
.string()
|
||||
.email({ message: 'Correo electrónico inválido' }),
|
||||
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' }),
|
||||
|
||||
//Datos adicionales
|
||||
generalObservations: z.string().optional().default(''),
|
||||
photo1: z.string().optional().nullable(),
|
||||
photo2: z.string().optional().nullable(),
|
||||
photo3: z.string().optional().nullable(),
|
||||
|
||||
//IMAGENES
|
||||
files: z.any().optional(),
|
||||
paralysisReason: z.string().optional().default(''),
|
||||
|
||||
//no se envia la backend al crear ni editar el formulario
|
||||
state: z.number().optional().nullable(),
|
||||
municipality: z.number().optional().nullable(),
|
||||
parish: z.number().optional().nullable(),
|
||||
coorState: z.number().optional().nullable(),
|
||||
coorMunicipality: z.number().optional().nullable(),
|
||||
coorParish: z.number().optional().nullable(),
|
||||
coorPhone: z.string().optional().nullable(),
|
||||
ecoSector: z.string().min(1, { message: 'Sector económico es requerido' }),
|
||||
productiveSector: z.string().min(1, { message: 'Sector productivo es requerido' }),
|
||||
centralProductiveActivity: z.string().min(1, { message: 'Actividad productiva central es requerida' }),
|
||||
mainProductiveActivity: z.string().min(1, { message: 'Actividad productiva principal es requerida' }),
|
||||
typesOfEquipment: z.string().min(1, { message: 'Tipo de equipo es requerido' }),
|
||||
equipmentCount: z.coerce.number().min(0, { message: 'Cantidad de equipo requerida' }),
|
||||
equipmentDescription: z.string().min(1, { message: 'Descripción del equipo es requerida' }),
|
||||
rawMaterial: z.string().min(1, { message: 'Material bruto es requerido' }),
|
||||
materialType: z.string().min(1, { message: 'Tipo de material es requerido' }),
|
||||
rawMaterialCount: z.coerce.number().min(0, { message: 'Cantidad de material bruto requerida' }),
|
||||
productCountDaily: z.coerce.number().min(0, { message: 'Cantidad diaria de productos requerida' }),
|
||||
productCountWeekly: z.coerce.number().min(0, { message: 'Cantidad semanal de productos requerida' }),
|
||||
productCountMonthly: z.coerce.number().min(0, { message: 'Cantidad mensual de productos requerida' }),
|
||||
internalCount: z.coerce.number().min(0, { message: 'Cantidad interna requerida' }),
|
||||
externalCount: z.coerce.number().min(0, { message: 'Cantidad externa requerida' }),
|
||||
prodDescriptionExternal: z.string().min(1, { message: 'Descripción del producto es requerida' }),
|
||||
country: z.string().min(1, { message: 'País es requerido' }),
|
||||
city: z.string().min(1, { message: 'Ciudad es requerida' }),
|
||||
menCount: z.coerce.number().min(0, { message: 'Cantidad de hombres requerida' }),
|
||||
womenCount: z.coerce.number().min(0, { message: 'Cantidad de mujeres requerida' }),
|
||||
photo1: z.string().optional().nullable(),
|
||||
photo2: z.string().optional().nullable(),
|
||||
photo3: z.string().optional().nullable(),
|
||||
});
|
||||
|
||||
export type TrainingSchema = z.infer<typeof trainingSchema>;
|
||||
|
||||
Reference in New Issue
Block a user