Personas duplicadas
Encuentro a la misma persona dos veces porque cambió de correo o de departamento y la sincronización la trató como nueva. A partir de ahí, veo su historial partido en dos.
Moodle · Integraciones
No atribuyo automáticamente a un fallo aislado de programación los usuarios duplicados, las matrículas que desaparecen, las finalizaciones que no coinciden ni las jerarquías caducadas. También compruebo decisiones que pudieron quedar sin definir al conectar los dos sistemas: cuál sirve de referencia para cada dato, qué equipo responde de su calidad, qué ocurre cuando el otro sistema no responde y cómo detectar las divergencias. Trato cada integración como un contrato entre dos equipos que evolucionan por separado. Documento ese contrato porque cualquier cambio en uno de los sistemas puede provocar un incidente. Sin ese registro, puedo descubrirlo semanas después, al encontrar una discrepancia sin explicación registrada.
Defino qué sistema actúa como referencia para cada dato, qué identificador une los registros y qué equipo responde de su calidad. Diseño operaciones idempotentes, elijo entre eventos y sincronización periódica y añado reconciliación para detectar duplicados, matrículas desaparecidas y divergencias entre sistemas.
Mi trayectoriaReconozco el patrón: todo funcionó durante meses y, de pronto, los números dejan de cuadrar.
Encuentro a la misma persona dos veces porque cambió de correo o de departamento y la sincronización la trató como nueva. A partir de ahí, veo su historial partido en dos.
He visto a alguien perder el acceso a un curso a mitad de convocatoria porque una sincronización le retiró la matrícula. Casi siempre encuentro la causa en un dato que cambió en el otro sistema.
Recursos humanos dice que hay ochocientas personas formadas y la plataforma dice setecientas cuarenta. Comparo los registros uno a uno. Sin esa comparación, no puedo determinar cuál es la cifra correcta.
He visto llamadas síncronas sin límite de espera que bloquean peticiones hasta agotar el servidor. Desde fuera, parece que «el campus no va».
Ninguna es técnica del todo. Las acuerdo con el equipo del otro sistema antes de escribir una línea de código.
Para cada campo —nombre, correo, departamento, matrícula, calificación— decido qué sistema actúa como referencia y qué equipo responde de su calidad. Cuando dos sistemas pueden modificar el mismo campo, los cambios pueden pisarse y la reconciliación queda sin un criterio fiable.
Uso un identificador interno diseñado para mantenerse estable: no el correo, que cambia, ni el nombre, que se repite. Si alguna vez debo sustituirlo, conservo en la integración una correspondencia explícita entre el identificador anterior y el nuevo para seguir reconociendo a la misma persona entre entornos.
Con los eventos reduzco la latencia, pero necesito garantizar la entrega, asegurar la idempotencia, reintentar los envíos y vigilar los mensajes que quedan sin procesar. La sincronización periódica simplifica algunos intercambios y facilita la reconciliación, aunque añade retraso y también debe poder reanudarse. En muchos casos combino los eventos con una comparación periódica.
Diseño la operación para que recibir dos veces el mismo mensaje no duplique el efecto. Los reintentos son habituales; si el primer intento aplicó el cambio pero se perdió la confirmación, repetir una operación sin esa propiedad puede crear un duplicado.
Defino el límite de espera, el número de reintentos, una espera creciente entre ellos y un lugar para los mensajes que no se han podido procesar. Con estas medidas evito que un fallo temporal del origen cause una pérdida silenciosa de datos.
Comparo periódicamente los registros de ambos lados: cuento cuántos hay y señalo las diferencias. Así detecto una discrepancia mediante una alerta, en lugar de enterarme por una reclamación.
Cinco preguntas que respondo junto al equipo responsable del otro sistema.
Si no puedo decir qué sistema manda en cada campo, no considero diseñada la integración. Insisto en esa conversación porque es la que más se evita y la que más incidentes ahorra.
El correo cambia y no lo uso como clave estable. Si empleo un documento de identidad, justifico su necesidad, alcance, ciclo de vida y garantías. Siempre que puedo, uso un identificador interno e inmutable que sobreviva a los cambios de nombre, correo o unidad.
Si basta con recibir el dato media hora más tarde, uso un proceso periódico para simplificar la operación, aunque su coste crece con el volumen. Si necesito menos latencia, uso eventos con entrega duradera, idempotencia y reanudación. En ambos diseños añado reconciliación cuando el riesgo de divergencia lo exige.
Elijo entre reintentar, encolar, avisar o seguir sin ese dato. Tomo la decisión antes para que no la imponga el comportamiento por defecto, que suele perder la información en silencio.
Sin reconciliación periódica u otro mecanismo automático equivalente, una divergencia puede permanecer oculta hasta que alguien se queje. Para entonces, la discrepancia puede haberse convertido en una incidencia con usuarios afectados.
He detectado siete fallos en integraciones que llevaban tiempo funcionando.
He visto cambiar una dirección de correo por una corrección o por un cambio de nombre, de dominio o de política interna. Si una integración usa el correo como identificador estable, cada cambio puede crear una persona nueva y partir su historial.
He visto cómo un reintento tras un fallo de red crea dos veces el mismo registro. Sin idempotencia, no puedo asegurar la fiabilidad sin generar duplicados.
Un fallo en el sistema de personal que devuelve una lista vacía desmatricula a toda la plantilla. Pongo límites de seguridad al porcentaje de cambios que una sincronización puede aplicar sin confirmación.
He visto cómo la lentitud de otro sistema ralentiza Moodle y cómo su caída derriba también la plataforma.
Detecto tokens de acceso con permisos amplios, sin caducidad y compartidos entre integraciones. También detecto que falta un inventario de los procesos que podrían verse afectados al revocar uno.
Cuando detecto una discrepancia, no puedo reconstruir qué se envió, cuándo ni qué respuesta recibió. Acabo investigando como un arqueólogo.
Si el otro equipo cambia un campo sin avisar, descubro el cambio cuando algo falla. Versiono el contrato de integración para que sus despliegues no introduzcan riesgos en mi sistema.
Compruebo si el diseño que funciona con cien personas sigue sirviendo con cincuenta mil.
Elijo una sincronización completa y periódica cuando basta y puedo prever bien su comportamiento. Mido su tiempo, las consultas y la carga antes de fijar la frecuencia.
Si la sincronización completa deja de caber en la ventana, paso a cambios incrementales. Añado una reconciliación para detectar mensajes perdidos, mensajes que llegan fuera de orden o cambios que el flujo incremental no haya procesado.
El inicio de curso o una campaña concentran miles de matrículas de golpe. Evito que la integración compita con las personas por la base de datos justo en el peor día: pongo una cola y controlo el ritmo.
Con cuatro o cinco integraciones, ya no me pregunto cómo funciona cada una. Decido en qué orden aplico los cambios y qué integración prevalece cuando dos escriben lo mismo.
Las tres primeras explican la mayoría de las discrepancias que he visto.
Cómo distingo una integración entregada de otra mantenible.
| Requisito | Evidencia exigible | Criterio de aceptación |
|---|---|---|
| Contrato de integración documentado | Campos, sistema de referencia, equipo responsable, dirección del intercambio y frecuencia | Acordar el documento entre los dos equipos antes de desarrollar la integración |
| Identificador estable acordado | Campo elegido y justificación de su estabilidad | Probar el cambio de correo y de unidad sin crear un duplicado de la persona |
| Comportamiento ante errores | Tiempos máximos de espera, reintentos y destino de los mensajes fallidos | Probar el funcionamiento con el sistema externo caído y comprobar que no se pierdan datos |
| Reconciliación periódica | Informe automático de diferencias entre los dos sistemas | Informe generado y revisado con periodicidad acordada |
| Registro de operaciones | Registro de lo enviado, el momento del envío y la respuesta recibida | Reconstruir un caso concreto a partir del registro |
| Versionado del contrato | Política de cambios y preaviso entre equipos | Un cambio de versión no rompe la integración en producción |
Ante una discrepancia, distingo tres reacciones habituales. Todas son comprensibles y contraproducentes.
Si corrijo a mano el registro que no cuadra, recupero la coherencia esta tarde. Como no he tocado la causa, mañana vuelve a descuadrarse y ahora, además, nadie recuerda qué cambié a mano ni por qué.
Si ejecuto la sincronización cada quince minutos en vez de una vez al día, multiplico la carga y no arreglo la lógica. Si la sincronización duplica registros, ahora los duplica noventa y seis veces al día.
Si borro y recargo, parece una solución limpia, pero destruyo lo que solo existía en Moodle, pierdo los cambios locales y convierto cualquier fallo del origen en un borrado masivo.
Referencias
Funcionamiento general y autenticación mediante tokens de acceso. Consultado el 1 de agosto de 2026.
Definición de funciones externas, parámetros y control de permisos. Consultado el 1 de agosto de 2026.
Especificación del estándar de interoperabilidad para herramientas de aprendizaje. Consultado el 1 de agosto de 2026.
Las seis decisiones del contrato son criterio propio, formado diseñando y reparando integraciones concretas: no proceden de una norma publicada, aunque coinciden con prácticas habituales de integración de sistemas. Lo relativo a servicios web y estándares está en las fuentes enlazadas y hay que comprobarlo allí, porque cambia entre versiones. No publico detalles de integraciones de organizaciones concretas.
Blog
En el blog desarrollo casos particulares, pruebas y fuentes que amplían esta página de referencia.
Ir a blog.albertolarah.comContacto
Empiezo por el mapa: qué sistemas están conectados, en qué dirección va cada dato, cada cuánto se sincroniza y desde cuándo aparece la discrepancia. Primero compruebo cuál es el sistema de referencia y quién responde de cada dato; después reviso el contrato, la entrega y los cambios recientes.
hola@albertolarah.comLinkedIn ↗