cambios en el formulario osp: rol autoridad, campos responsable cambiados, esquema cambiado, añadida columna fecha de creacion a la tabla

This commit is contained in:
2026-03-04 15:07:31 -04:00
parent f910aea3cc
commit d6de7527e4
13 changed files with 4916 additions and 125 deletions

View File

@@ -28,9 +28,7 @@ export const trainingSchema = z.object({
.min(1, { message: 'Nombre del coordinador es requerido' }),
coorPhone: z
.string()
.optional()
.nullable()
.refine((val) => !val || /^(04|02)\d{9}$/.test(val), {
.refine((val) => /^(04|02)\d{9}$/.test(val), {
message: 'El teléfono debe tener 11 dígitos y comenzar con 04 o 02',
}),
visitDate: z
@@ -39,13 +37,11 @@ export const trainingSchema = z.object({
//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('')).nullable(),
productiveSector: z.string().optional().or(z.literal('')).nullable(),
centralProductiveActivity: z.string().optional().or(z.literal('')).nullable(),
mainProductiveActivity: z.string().optional().or(z.literal('')).nullable(),
productiveActivity: z
.string()
.min(1, { message: 'Actividad productiva es requerida' }),
ecoSector: z.string({ message: 'Sector Económico es requerido' }),
productiveSector: z.string({ message: 'Sector Productivo es requerido' }),
centralProductiveActivity: z.string({ message: 'Actividad Central Productiva es requerido' }),
mainProductiveActivity: z.string({ message: 'Actividad Productiva Principal es requerida' }),
productiveActivity: z.string({ message: 'Actividad Productiva es requerida' }),
ospRif: z.string().optional().or(z.literal('')).nullable(),
ospName: z.string().optional().or(z.literal('')).nullable(),
companyConstitutionYear: z.coerce
@@ -56,7 +52,7 @@ export const trainingSchema = z.object({
.string()
.min(1, { message: 'Estatus actual es requerido' })
.default('ACTIVA'),
infrastructureMt2: z.string().optional().or(z.literal('')).nullable(),
infrastructureMt2: z.string({ message: 'Infraestructura es requerida' }),
hasTransport: z
.preprocess(
(val) => val === 'true' || val === true || val === 1 || val === '1',
@@ -65,7 +61,7 @@ export const trainingSchema = z.object({
.optional()
.nullable()
.default(false),
structureType: z.string().optional().or(z.literal('')).nullable(),
structureType: z.string({ message: 'Tipo de estructura es requerido' }),
isOpenSpace: z
.preprocess(
(val) => val === 'true' || val === true || val === 1 || val === '1',
@@ -115,8 +111,8 @@ export const trainingSchema = z.object({
.string()
.min(1, { message: 'Dirección de la OSP es requerida' }),
ospGoogleMapsLink: z.string().optional().or(z.literal('')).nullable(),
communeName: z.string().optional().or(z.literal('')).nullable(),
siturCodeCommune: z.string().optional().or(z.literal('')).nullable(),
communeName: z.string().min(1, { message: 'Nombre de la comuna es requerida' }),
siturCodeCommune: z.string().min(1, { message: 'Código SITUR de la comuna es requerida' }),
communeRif: z.string().optional().or(z.literal('')).nullable(),
communeSpokespersonName: z.string().optional().or(z.literal('')).nullable(),
communeSpokespersonPhone: z
@@ -135,7 +131,7 @@ export const trainingSchema = z.object({
communalCouncil: z
.string()
.min(1, { message: 'Consejo Comunal es requerido' }),
siturCodeCommunalCouncil: z.string().optional().or(z.literal('')).nullable(),
siturCodeCommunalCouncil: z.string().min(1, { message: 'Código SITUR del Consejo Comunal es requerido' }),
communalCouncilRif: z.string().optional().or(z.literal('')).nullable(),
communalCouncilSpokespersonName: z
.string()
@@ -188,9 +184,9 @@ export const trainingSchema = z.object({
files: z.any().optional(),
//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(),
state: z.number({ message: 'El estado es requerido' }).nullable(),
municipality: z.number({ message: 'Municipio es requerido' }).nullable(),
parish: z.number({ message: 'Parroquia es requerido' }).nullable(),
coorState: z.number().optional().nullable(),
coorMunicipality: z.number().optional().nullable(),
coorParish: z.number().optional().nullable(),
@@ -199,15 +195,117 @@ export const trainingSchema = z.object({
photo3: z.string().optional().nullable(),
createdBy: z.number().optional().nullable(),
updatedBy: z.number().optional().nullable(),
createdAt: z.string().optional().nullable(),
updatedAt: z.string().optional().nullable(),
created_at: z.string().optional().nullable(),
updated_at: z.string().optional().nullable(),
});
export type TrainingSchema = z.infer<typeof trainingSchema>;
export const getTrainingSchema = z.object({
//Datos de la visita
id: z.number().optional(),
coorFullName: z.string(),
coorPhone: z.string(),
visitDate: z.string(),
//Datos de la organización socioproductiva (OSP)
ospType: z.string(),
ecoSector: z.string(),
productiveSector: z.string(),
centralProductiveActivity: z.string(),
mainProductiveActivity: z.string(),
productiveActivity: z.string(),
ospRif: z.string().optional().or(z.literal('')).nullable(),
ospName: z.string().optional().or(z.literal('')).nullable(),
companyConstitutionYear: z.coerce.number(),
currentStatus: z.string(),
infrastructureMt2: z.string(),
hasTransport: z
.preprocess(
(val) => val === 'true' || val === true || val === 1 || val === '1',
z.boolean(),
)
.optional()
.nullable()
.default(false),
structureType: z.string(),
isOpenSpace: z
.preprocess(
(val) => val === 'true' || val === true || val === 1 || val === '1',
z.boolean(),
)
.optional()
.nullable()
.default(false),
paralysisReason: z.string().optional().nullable(),
//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([]),
// Distribución y Exportación
internalDistributionZone: z.string(),
isExporting: z
.preprocess(
(val) => val === 'true' || val === true || val === 1 || val === '1',
z.boolean(),
)
.optional()
.default(false),
externalCountry: z.string().optional().nullable(),
externalCity: z.string().optional().nullable(),
externalDescription: z.string().optional().nullable(),
externalQuantity: z.coerce.string().or(z.number()).optional().nullable(),
externalUnit: z.string().optional().nullable(),
// Mano de obra
womenCount: z.coerce.number(),
menCount: z.coerce.number(),
//Detalles de la ubicación
ospAddress: z.string(),
ospGoogleMapsLink: z.string().optional().or(z.literal('')).nullable(),
communeName: z.string(),
siturCodeCommune: z.string(),
communeRif: z.string().optional().or(z.literal('')).nullable(),
communeSpokespersonName: z.string().optional().or(z.literal('')).nullable(),
communeSpokespersonPhone: z.string(),
communeEmail: z.string(),
communalCouncil: z.string(),
siturCodeCommunalCouncil: z.string(),
communalCouncilRif: z.string().optional(),
communalCouncilSpokespersonName: z.string(),
communalCouncilSpokespersonPhone: z.string(),
communalCouncilEmail: z.string(),
//Datos del Responsable OSP
ospResponsibleCedula: z.string(),
ospResponsibleFullname: z.string(),
ospResponsibleRif: z.string().optional().nullable(),
civilState: z.string().optional().nullable(),
ospResponsiblePhone: z.string(),
ospResponsibleEmail: z.string(),
familyBurden: z.coerce.number().optional(),
numberOfChildren: z.coerce.number().optional(),
//Datos adicionales
generalObservations: z.string().optional().nullable(),
//no se envia la backend al crear ni editar el formulario
state: z.number().nullable(),
municipality: z.number().nullable(),
parish: z.number().nullable(),
coorState: z.number().optional().nullable(),
coorMunicipality: z.number().optional().nullable(),
coorParish: z.number().optional().nullable(),
photo1: z.string().optional().nullable(),
photo2: z.string().optional().nullable(),
photo3: z.string().optional().nullable(),
createdBy: z.number().optional().nullable(),
updatedBy: z.number().optional().nullable(),
created_at: z.string().optional().nullable(),
updated_at: z.string().optional().nullable(),
});
export const trainingApiResponseSchema = z.object({
message: z.string(),
data: z.array(trainingSchema),
data: z.array(getTrainingSchema),
meta: z.object({
page: z.number(),
limit: z.number(),