Ir al contenido

Validación de Procanase

La validación de Procanase permite verificar que la información del trabajador coincida entre RENAPO y PROCANASE antes de realizar una modificación de datos.

El proceso inicia cuando el asesor previsional detecta diferencias entre el nombre del trabajador en RENAPO y PROCANASE al intentar editar los datos del trabajador.

Al seleccionar la opción Editar (candadito) en la Consulta 360, el sistema valida automáticamente el nombre del trabajador de RENAPO contra PROCANASE. Si se encuentran diferencias, se muestra el siguiente mensaje:

“Se identifica que el nombre del trabajador encontrado en PROCANASE no concuerda con el de RENAPO. Favor de invitar al trabajador para que acuda al IMSS a realizar su corrección. ¿Desea realizar una Modificación de datos por cambio de CURP considerando la responsabilidad como Afore?”

El asesor puede seleccionar:

  • [Continuar]: Continúa con el proceso de ingreso de CURP
  • No [Terminar]: Se cierra la ventana y no se permite continuar con el trámite

Si el asesor selecciona , se habilita el campo para ingresar la nueva CURP a modificar.

Una vez ingresada una CURP válida, el sistema consulta en RENAPO:

El sistema realiza las siguientes validaciones:

  1. Validación de CURP: Se verifica que la CURP ingresada sea igual a la registrada en PROCANASE

    • Si no coincide: Se muestra “Se identifica que la información del trabajador encontrada en PROCANASE no concuerda con la de RENAPO”
  2. Validación de Nombre: Se compara el nombre completo del trabajador entre RENAPO y PROCANASE

    • Para RENAPO: Se concatena apellido paterno + apellido materno + nombre(s) con el signo $, se trunca a 50 posiciones y se reemplazan caracteres especiales
    • Para PROCANASE: Se reemplazan caracteres especiales
    • Se compara cada elemento del nombre eliminando espacios antes y después

Validación exitosa

Si la información coincide, se permite el ingreso a la Modificación de Datos [Acceso permitido]

graph TD
    A[Asesor selecciona Editar en Consulta 360] --> B{¿Nombre RENAPO = PROCANASE?}
    B -->|Sí| C[Continúa flujo normal de Modificación]
    B -->|No| D[Muestra mensaje de diferencias]
    D --> E{¿Desea continuar con responsabilidad Afore?}
    E -->|No| F[Cierra ventana - Fin del trámite]
    E -->|Sí| G[Ingresa nueva CURP]
    G --> H{¿CURP válida - 18 caracteres?}
    H -->|No| I[Muestra: CURP inválida]
    I --> G
    H -->|Sí| J[Consulta CURP en RENAPO]
    J --> K{¿CURP existe en RENAPO?}
    K -->|No| L[Muestra: CURP no registrada en RENAPO]
    L --> F
    K -->|Sí| M[Obtiene nombre de RENAPO]
    M --> N{¿CURP coincide con PROCANASE?}
    N -->|No| O[Muestra: Información no concuerda]
    O --> F
    N -->|Sí| P{¿Nombre RENAPO = Nombre PROCANASE?}
    P -->|No| O
    P -->|Sí| Q[Permite acceso a Modificación de Datos]

    style A fill:#e1f5ff
    style Q fill:#e1ffe1
    style F fill:#ffe1e1
    style L fill:#ffe1e1
    style O fill:#ffe1e1
CampoRENAPOPROCANASE
FormatoApellido Paterno $ Apellido Materno $ Nombre(s)Nombre completo
Longitud máxima50 caracteresSin límite
Caracteres especialesSe reemplazanSe reemplazan
EspaciosSe conservan internos, se eliminan al inicio y finalSe eliminan al inicio y final

A continuación se presentan las principales clases que implementan la validación de Procanase:

El controller principal inicializa las variables de sesión necesarias para el flujo de validación de Procanase.

// Inicializar variables de sesión para validación de Procanase
request.getSession().setAttribute(ModificacionTrabajadorConstants.CURP_PROCANASE, ModificacionTrabajadorConstants.SIN_CURP_PROCANASE);
request.getSession().setAttribute(ModificacionTrabajadorConstants.DATOS_RENAPO_CURP_NUEVA_PROCANASE, new CURPStruct());

Propósito:

  • CURP_PROCANASE: Almacena el estado de validación de CURP contra Procanase
  • DATOS_RENAPO_CURP_NUEVA_PROCANASE: Guarda los datos obtenidos de RENAPO para la nueva CURP

Controlador REST que expone el endpoint para validar CURP contra RENAPO y PROCANASE.

@Controller
public class ValidacionProcanaseController {
@Autowired
private ValidacionProcanaseService validacionProcanaseService;
@Autowired
private SessionService sessionService;
/**
* Valida la CURP consultando RENAPO y cotejando contra PROCANASE.
*/
@PostMapping(value = "/private/validarCurpLigaRenapo",
produces = MediaType.APPLICATION_JSON_VALUE,
consumes = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public RespuestaOperacionRenapo validarCurpLigaRenapo(@RequestBody String curpBody)
throws IOException {
sessionService.setAttribute(
ModificacionTrabajadorConstants.CURP_PROCANASE,
ModificacionTrabajadorConstants.SIN_CURP_PROCANASE
);
ObjectMapper mapper = new ObjectMapper();
String curp = mapper.readValue(curpBody, String.class);
RespuestaOperacionRenapo respuesta =
validacionProcanaseService.validarCurpContraProcanase(curp);
return respuesta;
}
}

El JSP datosGenerales.jsp utiliza la variable de sesión para determinar qué datos mostrar.

<input class="InputEdit" type="text" id="curp" name="curp"
value="${existeCurpProcanase != 'SIN_CURP_PROCANASE' ? renapoNuevaProcanase.curp : certificables.curp}"
placeholder="Curp del trabajador" onchange="actualizaCurp();" maxlength="18">
<script>
$(document).ready(function() {
// Verificar si el valor cambió programáticamente
var valorOriginal = "${certificables.curp}";
var valorActual = $("#curp").val();
// Si son diferentes, significa que cambió programáticamente
if (valorOriginal !== valorActual) {
actualizaCurp();
}
});
</script>

Script de Actualización Automática:

Este script detecta cuando el valor de la CURP ha sido cambiado programáticamente (por la validación de Procanase) y ejecuta automáticamente la función actualizaCurp() para actualizar todos los campos dependientes:

  • Compara el valor original (certificables.curp) con el valor actual del campo
  • Si son diferentes, significa que se cargaron datos de RENAPO
  • Ejecuta actualizaCurp() para propagar los cambios a nombre, apellidos, fecha de nacimiento, etc.
<input class="InputEdit" type="text" id="nombre" name="nombre"
value="${existeCurpProcanase != 'SIN_CURP_PROCANASE' ? renapoNuevaProcanase.nombres : certificables.nombre}"
placeholder="Nombre del trabajador" maxlength="50">
<!-- Apellido Paterno -->
<input class="InputEdit" type="text" id="apellidoPaterno" name="apellidoPaterno"
value="${existeCurpProcanase != 'SIN_CURP_PROCANASE' ? renapoNuevaProcanase.apellido1 : certificables.apellidoPaterno}"
placeholder="Apellido Paterno del trabajador" maxlength="50">
<!-- Apellido Materno -->
<input class="InputEdit" type="text" id="apellidoMaterno" name="apellidoMaterno"
value="${existeCurpProcanase != 'SIN_CURP_PROCANASE' ? renapoNuevaProcanase.apellido2 : certificables.apellidoMaterno}"
placeholder="Apellido Materno del trabajador" maxlength="50">
<c:if test="${existeCurpProcanase != 'SIN_CURP_PROCANASE'}">
<fmt:parseDate value="${renapoNuevaProcanase.fechNac}" pattern="dd/MM/yyyy" var="fechaParseada" />
<c:set var="fechaFormateada"><fmt:formatDate value="${fechaParseada}" pattern="yyyy-MM-dd" /></c:set>
</c:if>
<input class="InputEdit" type="date" id="fechaNacimiento" name="fechaNacimiento"
value="${existeCurpProcanase != 'SIN_CURP_PROCANASE' ? fechaFormateada : fechaNacimiento}">
<c:choose>
<c:when test="${existeCurpProcanase != 'SIN_CURP_PROCANASE'}">
<c:choose>
<c:when test="${renapoNuevaProcanase.sexo == 'H'}">
<c:set var="generoEvaluado" value="M" />
</c:when>
<c:when test="${renapoNuevaProcanase.sexo == 'M'}">
<c:set var="generoEvaluado" value="F" />
</c:when>
<c:otherwise>
<c:set var="generoEvaluado" value="X" />
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:set var="generoEvaluado" value="${claveGeneroLimpia}" />
</c:otherwise>
</c:choose>

Lógica de Validación:

Si existeCurpProcanase != 'SIN_CURP_PROCANASE':

  • ✅ Se muestran los datos obtenidos de RENAPO (renapoNuevaProcanase)
  • ✅ Indica que la validación con Procanase fue exitosa

Si existeCurpProcanase == 'SIN_CURP_PROCANASE':

  • ✅ Se muestran los datos originales del trabajador (certificables)
  • ✅ Indica que no se ha validado o la validación falló

Este conjunto de pruebas valida la integridad de la información del trabajador al realizar una modificación de datos por cambio de CURP, asegurando la consistencia entre los registros de RENAPO y PROCANASE.

Escenario de Referencia: Caso Real Afore Banamex

Sección titulada «Escenario de Referencia: Caso Real Afore Banamex»

Este escenario sirve como base para entender la discrepancia que el sistema debe detectar.

Caso Detectado en Producción:

CampoValor
CURP en RENAPOCertificada y vigente
Nombre en RENAPOLAURA CANO LOBERA
Nombre en PROCANASELAURA PATRICIA CANO LOBERA
DiferenciaSegundo nombre “Patricia”
Resultado EsperadoBloqueo del trámite y lanzamiento del modal de aviso

Puntos Críticos a Validar:

  • Detección de CURP’s asociadas: El sistema debe identificar si el trabajador tiene registros previos (ej. CALL691104MDFNBR11)
  • Mensaje de Bloqueo: Debe aparecer exactamente el texto: “SE IDENTIFICA QUE EL NOMBRE DEL TRABAJADOR ENCONTRADO EN PROCANASE NO CONCUERDA CON EL DE RENAPO. FAVOR DE INVITAR AL TRABAJADOR…“

2. Ambientación de Datos (Ambiente Pre-Producción)

Sección titulada «2. Ambientación de Datos (Ambiente Pre-Producción)»
CampoValor
ID_PROCESAR968
CH_MES_NACIMIENTO11
CH_NOMBRE_IMSSCANO$LOBERA$LAURA
CH_SEXOF
CH_USUARIO_MODIFICADORSDHERNAN
CH_CLASIF_NSS0
CURPCALL641104MDFNBR08
ID_ENTIDAD_NACIMIENTO10
NSS20946905237
CampoValor
ID_PROCESAR968
CH_APELLIDO_PATERNOCANO
CH_APELLIDO_MATERNOLOBERA
CH_NOMBRELAURA PATRICIA
FC_NACIMIENTO1969-11-04 00:00:00.000
CH_SEXOF
NSS20946905237
CURPCALL691104MDFNBR03
ID_ENTIDAD_NACIMIENTO10

Caso de Prueba 1: Validación de Diferencias en Nombres (HU_PLAT_ICVP - CA011)

Sección titulada «Caso de Prueba 1: Validación de Diferencias en Nombres (HU_PLAT_ICVP - CA011)»

Descripción: Validar que el sistema detecte inconsistencias entre el nombre registrado en RENAPO vs PROCANASE al intentar editar los datos.

Pasos:

  1. Ingresar a la Consulta 360
  2. Seleccionar la opción Editar (Icono de candado)
  3. El sistema realiza la validación automática entre RENAPO y PROCANASE

Resultado Esperado:

  • MENSAJE DE ALERTA: Debe mostrar el aviso de no concordancia
  • FLUJO ALTERNO: Debe incluir la pregunta de si desea continuar con el trámite si la AFORE así lo decide

Caso de Prueba 2: Regla de Comparación de Nombres (Backend)

Sección titulada «Caso de Prueba 2: Regla de Comparación de Nombres (Backend)»

Descripción: Validar la lógica de backend para la comparación de cadenas de texto.

Regla (Backend):

  1. RENAPO: ApellidoPaterno $ ApellidoMaterno $ Nombre (Truncado a 50 caracteres)
  2. Limpieza: Eliminar caracteres especiales y espacios innecesarios

Resultado Esperado:

Si tras la concatenación y limpieza (usando el separador $) los nombres no son idénticos al 100%, el sistema debe bloquear el acceso a la pantalla de Modificación.

4. Matriz de Mensajes y Validaciones (Referencia Rápida)

Sección titulada «4. Matriz de Mensajes y Validaciones (Referencia Rápida)»
Campo / AcciónValidaciónMensaje Esperado
Longitud CURP!= 18 caracteres🔴 CURP inválida
Búsqueda RENAPONo existe registroCURP no registrada en RENAPO…
Diferencia NombresNo coincidenSE IDENTIFICA QUE EL NOMBRE… NO CONCUERDA…

Screenshots necesarios:

  1. 📸 Screenshot 1: Consulta 360 con el icono de candado
  2. 📸 Screenshot 2: Modal de Advertencia
  3. 📸 Screenshot 3: Validación de campo CURP con 17 caracteres (Mensaje en rojo)
  4. 📸 Screenshot 4: Si el proceso se continúa por parte de la afore debe ir por un flujo 9B