Files
rutero/route-planner/src/app/shared/schemas/usuario.schema.ts
T

40 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { z } from 'zod';
export const USUARIO_REQUIRED_HEADERS = [
'ID',
'Nombre del empleado',
'Latitud',
'Longitud',
'Horas por día usuario',
'Horas por semana usuario',
] as const;
export const USUARIO_NORMALIZED_REQUIRED = [
'id',
'nombre_del_empleado',
'latitud',
'longitud',
'horas_por_dia_usuario',
'horas_por_semana_usuario',
] as const;
export const usuarioRowSchema = z.object({
id: z.union([z.string(), z.number()]).refine(v => String(v).trim() !== '', { message: 'ID requerido' }),
nombre_del_empleado: z.string().min(1, 'Nombre del empleado requerido'),
latitud: z.number().min(-90, 'Latitud mínima -90').max(90, 'Latitud máxima 90'),
longitud: z.number().min(-180, 'Longitud mínima -180').max(180, 'Longitud máxima 180'),
horas_por_dia_usuario: z.number().min(0.5, 'Horas por día mínimo 0.5').max(24, 'Horas por día máximo 24'),
horas_por_semana_usuario: z.number().min(1, 'Horas por semana mínimo 1').max(168, 'Horas por semana máximo 168'),
}).superRefine((data, ctx) => {
if (data.horas_por_semana_usuario > data.horas_por_dia_usuario * 7) {
ctx.addIssue({
code: z.ZodIssueCode.custom,
message: 'Horas por semana no puede exceder 7 × horas por día',
path: ['horas_por_semana_usuario'],
});
}
});
export type UsuarioRow = z.infer<typeof usuarioRowSchema>;
export const USUARIO_MAX_ROWS = 50;