diff --git a/cosiap_frontend/src/components/FormsValidations.jsx b/cosiap_frontend/src/components/FormsValidations.jsx
index 076e4e8665160b657f44ca50007b153153a1b5d5..626e4d9634345254ecdd1b6e1215641da98a0787 100644
--- a/cosiap_frontend/src/components/FormsValidations.jsx
+++ b/cosiap_frontend/src/components/FormsValidations.jsx
@@ -1,57 +1,72 @@
import * as Yup from "yup";
-
// Variable de formato para validación de formato de CURP
-const CURP_REGEX = /^[A-Z]{1}[AEIOU]{1}[A-Z]{2}[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[HM]{1}(AS|BC|BS|CC|CH|CL|CM|DF|DG|GT|GR|HG|JC|MC|MN|MS|NT|NL|OC|PL|QT|QR|SP|SL|SR|TC|TS|TL|VZ|YN|ZS|NE)[B-DF-HJ-NP-TV-Z]{3}[0-9A-Z]{1}[0-9]{1}$/;
+const CURP_REGEX =
+ /^[A-Z]{1}[AEIOU]{1}[A-Z]{2}[0-9]{2}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[0-1])[HM]{1}(AS|BC|BS|CC|CH|CL|CM|DF|DG|GT|GR|HG|JC|MC|MN|MS|NT|NL|OC|PL|QT|QR|SP|SL|SR|TC|TS|TL|VZ|YN|ZS|NE)[B-DF-HJ-NP-TV-Z]{3}[0-9A-Z]{1}[0-9]{1}$/;
// Validación de un campo CURP
const CURP_VALIDATION = Yup.string()
- .required("La CURP es requerida")
- .matches(CURP_REGEX, "Formato de CURP inválido");
-
+ .required("La CURP es requerida")
+ .matches(CURP_REGEX, "Formato de CURP inválido");
const PASSWORD_CREATION_VALIDATION = Yup.string()
- .required("La contraseña es requerida")
- .min(8, 'La contraseña debe tener al menos 8 caracteres')
- .max(20, 'La contraseña no puede tener más de 20 caracteres')
- .matches(/\d/, 'Debe contener al menos un número')
- .matches(/[a-z]/, 'Debe contener al menos una letra minúscula')
- .matches(/[A-Z]/, 'Debe contener al menos una letra mayúscula')
- .matches(/[@$#¡!%*¿?&]/, 'Debe contener al menos un carácter especial')
- .matches(/^\S*$/, 'La contraseña no puede contener espacios');
+ .required("La contraseña es requerida")
+ .min(8, "La contraseña debe tener al menos 8 caracteres")
+ .max(20, "La contraseña no puede tener más de 20 caracteres")
+ .matches(/\d/, "Debe contener al menos un número")
+ .matches(/[a-z]/, "Debe contener al menos una letra minúscula")
+ .matches(/[A-Z]/, "Debe contener al menos una letra mayúscula")
+ .matches(/[@$#¡!%*¿?&]/, "Debe contener al menos un carácter especial")
+ .matches(/^\S*$/, "La contraseña no puede contener espacios");
const CONFIRM_PASSWORD_VALIDATION = Yup.string()
- .required("La confirmacion de la contraseña es requerida")
- .oneOf([Yup.ref('password'), null], 'Las contraseñas no coinciden');
-
-
-
+ .required("La confirmacion de la contraseña es requerida")
+ .oneOf([Yup.ref("password"), null], "Las contraseñas no coinciden");
export const LoginValidationSchema = Yup.object().shape({
- curp: CURP_VALIDATION,
- password: Yup.string()
- .required("La contraseña es requerida")
+ curp: CURP_VALIDATION,
+ password: Yup.string().required("La contraseña es requerida"),
});
export const RegisterValidationSchema = Yup.object({
- nombre: Yup.string()
- .required('El nombre es requerido')
- .min(3, 'El nombre debe tener al menos 3 caracteres'),
- curp: CURP_VALIDATION,
- email: Yup.string()
- .required("El correo electronico es requerido")
- .email("El correo electronico no es válido"),
- password: PASSWORD_CREATION_VALIDATION,
- confirmar_password: CONFIRM_PASSWORD_VALIDATION
+ nombre: Yup.string()
+ .required("El nombre es requerido")
+ .min(3, "El nombre debe tener al menos 3 caracteres"),
+ curp: CURP_VALIDATION,
+ email: Yup.string()
+ .required("El correo electronico es requerido")
+ .email("El correo electronico no es válido"),
+ password: PASSWORD_CREATION_VALIDATION,
+ confirmar_password: CONFIRM_PASSWORD_VALIDATION,
});
export const ResetPasswordValidationSchema = Yup.object().shape({
- email: Yup.string()
- .required("El correo electronico es requerido")
- .email("El correo electronico no es válido")
+ email: Yup.string()
+ .required("El correo electronico es requerido")
+ .email("El correo electronico no es válido"),
});
export const NewPasswordValidationSchema = Yup.object().shape({
- password: PASSWORD_CREATION_VALIDATION,
- confirmar_password: CONFIRM_PASSWORD_VALIDATION
+ password: PASSWORD_CREATION_VALIDATION,
+ confirmar_password: CONFIRM_PASSWORD_VALIDATION,
+});
+
+const FILE_SIZE = 5 * 1024 * 1024; // Tamaño máximo de archivo en bytes (5MB)
+const SUPPORTED_FORMATS = ['application/pdf'];
+
+export const PDF_FileValidation = Yup.mixed()
+ .required("Este campo es requerido")
+ .test("fileFormat", "Formato de archivo no soportado", (value) => value && SUPPORTED_FORMATS.includes(value.type)
+ )
+ .test("fileSize", "El archivo supera el tamaño máximo", (value) => value && value.size <= FILE_SIZE);
+
+export const MontoValidation = Yup.number()
+ .typeError("El monto debe ser un número válido")
+ .required("El monto es requerido")
+ .positive("El monto debe ser mayor a 0")
+ .max(1000000, "El monto no puede ser muy grande");
+
+export const FormValidationSchema = Yup.object({
+ archivo: PDF_FileValidation,
+ monto: MontoValidation,
});
diff --git a/cosiap_frontend/src/components/common/utility/HeaderSection.jsx b/cosiap_frontend/src/components/common/utility/HeaderSection.jsx
index a372cca7cd14117220c68f2673c4d2f371e2ea86..130a977d1c027a910ab1b0ea2c4ef26e0f2218d5 100644
--- a/cosiap_frontend/src/components/common/utility/HeaderSection.jsx
+++ b/cosiap_frontend/src/components/common/utility/HeaderSection.jsx
@@ -1,6 +1,6 @@
export default function HeaderSection({ title }) {
return (
-