17 – Validador custom de cédula uruguaya (dígito verificador)
Descripción
Implementar la anotación @CedulaUy que valida el dígito verificador de la cédula uruguaya. Requisito explícito del enunciado.
Owner sugerido: Dev B | Branch: feature/validacion-cedula-uy | Depende de: #16 (closed)
Algoritmo (DNIC Uruguay)
Pesos [2,9,8,7,6,3,4] sobre los 7 primeros dígitos (con cero a izquierda).
Suma → % 10 → DV esperado = (10 - suma%10) % 10. Debe coincidir con el último dígito.
Ejemplo: 14416609 → 1×2+4×9+4×8+1×7+6×6+6×3+0×4 = 2+36+32+7+36+18+0 = 131 → 131%10=1 → (10-1)%10=9 ✓
Tareas
-
Crear @CedulaUyenvalidation/con@Constraint(validatedBy = CedulaUyValidator.class). -
Crear CedulaUyValidator: normalizar (eliminar.,-, espacios), validar 7-8 dígitos, calcular DV. -
Aceptar null/blanco como válido (la obligatoriedad la cubre@NotBlank). -
Aplicar @CedulaUyenEstudianteRequestDTO.cedula. -
Tests unitarios cubriendo: válidos ( 14416609,1.234.567-2), inválidos (DV incorrecto, formato roto). -
Cobertura objetivo > 90% del validador.
Commits sugeridos
feat(validacion): crear anotación @CedulaUy con validador
test(validacion): cubrir casos válidos e inválidos del dígito verificador
feat(estudiantes): aplicar @CedulaUy en EstudianteRequestDTO
Criterios de aceptación
-
Rechaza cédulas con DV incorrecto → 400. -
Acepta formatos con puntos, guiones y espacios. -
Cobertura tests > 90%. -
Reutilizable en cualquier DTO.
Referencia del curso: Módulo 2 – PDFs 2, 4