Cuándo surgen conflictos
Un conflicto de datos surge cuando el mismo registro se modifica desde diferentes fuentes antes de que los cambios se hayan sincronizado. Escenarios típicos:
Dos dispositivos offline
Dos miembros del equipo trabajan offline en diferentes dispositivos y modifican el mismo registro. Por ejemplo:
- El operador en la entrada marca el check-in de un participante y añade el comentario «VIP»
- El gerente en otro dispositivo marca el mismo check-in y añade el comentario «Asiento extra»
- Al restablecerse la conexión, ambos cambios se envían al servidor
Offline + online
Un miembro del equipo trabaja offline, otro online:
- El gerente en el ordenador (online) cambia el estado de registro
- El operador en el lugar (offline) cambia el mismo estado
- Al sincronizarse, el cambio offline entra en conflicto con el cambio online ya aplicado
Cuándo los conflictos son poco probables
En la práctica, los conflictos surgen raramente porque:
- Los diferentes miembros del equipo suelen trabajar con diferentes participantes
- El check-in es una operación unidireccional (marcar la llegada); un conflicto de check-in solo es posible con escaneo doble
- Las operaciones de pago están protegidas por idempotency-key
Estrategia: last-writer-wins (Free, Pro)
En los planes Free y Pro se utiliza la estrategia automática last-writer-wins (gana el último):
Cómo funciona
- Durante la sincronización, el servidor compara las marcas de tiempo
clientTsde los cambios en conflicto. - El cambio con la marca de tiempo más reciente se guarda automáticamente.
- El cambio con la marca más antigua se sobrescribe.
- Ambos cambios se registran en el audit log (incluso el sobrescrito).
Ejemplo
| Hora | Acción | Resultado |
|---|---|---|
| 10:05 | Operador A (offline): check-in + comentario «VIP» | Guardado localmente |
| 10:07 | Operador B (offline): check-in + comentario «Estándar» | Guardado localmente |
| 10:15 | Operador A vuelve online | Cambio enviado |
| 10:16 | Operador B vuelve online | Conflicto. Gana B (10:07 > 10:05). Comentario = «Estándar» |
Ventajas y limitaciones
Ventajas:
- Completamente automático -- no requiere intervención del usuario
- No interrumpe el flujo de trabajo
- Adecuado para la mayoría de escenarios (check-in, estados simples)
Limitaciones:
- El cambio más antiguo se pierde sin notificación
- No hay posibilidad de combinar dos cambios
- Para datos críticos puede provocar pérdida de información
Estrategia: optimistic locking + merge UI (Business, Enterprise)
En los planes Business y Enterprise está disponible una estrategia interactiva de resolución de conflictos con interfaz visual.
Cómo funciona
- Durante la sincronización, el servidor detecta un conflicto (el registro fue modificado después del último estado conocido por el cliente).
- En lugar de sobrescribir automáticamente, el servidor devuelve ambas versiones.
- Al usuario se le muestra el merge UI -- una interfaz de comparación de versiones.
- El usuario elige qué versión conservar o combina los cambios manualmente.
Merge UI
La interfaz de resolución de conflictos muestra:
-
Columna izquierda: tu versión (cambio local)
- Autor del cambio
- Hora del cambio
- Campos modificados con sus valores
-
Columna derecha: versión del servidor (cambio ajeno)
- Autor del cambio
- Hora del cambio
- Campos modificados con sus valores
-
Acciones:
- «Conservar mi versión» -- tu cambio sobrescribe el del servidor
- «Aceptar la del servidor» -- se conserva la versión del servidor, tu cambio se descarta
- «Combinar» -- eliges manualmente el valor para cada campo
Ejemplo
| Campo | Tu versión | Versión del servidor |
|---|---|---|
| Check-in | Sí | Sí |
| Comentario | VIP, asiento A-12 | Estándar |
| Estado | Confirmado | Confirmado |
Puedes aceptar el check-in de ambas versiones (coinciden), tomar tu comentario y el estado del servidor.
Optimistic locking
Bajo el capó se utiliza optimistic locking:
- Cada registro tiene una versión (version counter)
- Al enviar un cambio, el cliente indica en qué versión se basa
- Si la versión en el servidor ha cambiado (alguien más actualizó el registro), el servidor devuelve un conflicto
- El cliente muestra el merge UI
Notificaciones de conflictos
Cuando se detecta un conflicto:
Free / Pro: notificación toast «Conflicto de datos resuelto automáticamente» (informativa, sin acciones).
Business / Enterprise: notificación toast «Conflicto detectado. Se requiere tu decisión» con un botón para ir al merge UI. El conflicto bloquea la sincronización de los demás cambios hasta su resolución.
Recomendaciones
- Distribuye las zonas de responsabilidad. Asigna a los miembros del equipo diferentes grupos de participantes o zonas de check-in para minimizar los conflictos.
- Sincroniza con más frecuencia. Períodos cortos de trabajo offline reducen la probabilidad de conflictos.
- Usa el merge UI para datos críticos. Si tu equipo trabaja activamente con los mismos registros, considera pasar a Business para acceder a la resolución interactiva de conflictos.