Home / Forum / Sugerencias / Vuelvo a los equipos acto segundo

Vuelvo a los equipos acto segundo

Hola, abro una nueva discusión sobre este tema por dos razones: el anterior estaba volviéndose demasiado largo, y cuando hay varias páginas el foro en lugar de posicionarte en la última página para poder añadir un mensaje te coloca en la primera página, y tienes que llegar manualmente a la última para poder escribir un nuevo mensaje. Además, por alguna razón, ahora cada vez que llego a la última página me pide acceso nuevamente para poder escribir, y al hacerlo me lleva de vuelta a la Home! Por suerte, era hora de comenzar un nuevo hilo.

Quería darte una nueva lista de consideraciones, que surgieron a partir de algunas dificultades durante las inscripciones de nuestro último torneo; cuando tengas tiempo échale un vistazo, y si es necesario puedo detallar las razones de cada solicitud:


- “Añadir jugador desparejado” debe permitir la inscripción solo con Apellido, sin Nombre.

- “Añadir jugador desparejado”, cuando se escribe algún carácter y aparecen jugadores que cumplen el filtro, añadir a la información presentada el año de nacimiento (campo “B-Year”).

- El rating por defecto de un jugador no existente en las listas FIDE debe ser 1399.

- Cuando se expande un equipo, permitir la adición de un jugador que no esté presente en las listas FIDE mediante Apellido, y opcionalmente Nombre y Elo. Además permitir añadir un jugador desde la lista desparejada. Deben existir entonces 5 posibilidades: los jugadores del usuario (como ahora), de FIDE (como ahora), por ID de FIDE (como ahora), de la lista desparejada, y con solo Apellido, Nombre y Elo. “Añadir jugador” desde lista o desparejado debe permitir un filtro para la búsqueda. Se evaluará si el jugador añadido al vuelo con el Apellido debe terminar en la lista de jugadores del usuario; tendré tendencia a decir que sí.

- Cuando se hace “Nuevo equipo de seleccionados”, el foco debe ir inmediatamente al campo del nombre, para poder comenzar a escribir de inmediato. Esta es una regla de oro que debe propagarse por todas partes, no obligar al operador a hacer clic con el ratón en el campo para empezar a escribir.

- A veces sucede que FIDE no separa el campo Apellido del Nombre con una coma, y entonces si se añade un jugador desde FIDE con esas características, aunque lo encuentre no permite continuar porque falta el Nombre. Esto claramente no está bien. Se puede resolver “adivinando” cuál es el Nombre y el Apellido, pero puede no ser sencillo. En mi opinión la mejor solución es (como se destacó en el primer punto) aceptar la inscripción solo con Apellido.

- Nuevo comentario sobre la importación de un archivo para las inscripciones. Lo habíamos hablado, pero en mi opinión debería permitirse la inscripción masiva, al menos para los jugadores desparejados. Así que la adición de desparejados debe poder aceptar una lista de jugadores, desde un archivo de texto o incluso solo desde un cuadro donde pegar la lista. El formato se decidirá, pero creo que bastaría con un formato “Apellido,Nombre,Elo”, uno por línea. O, alternativamente, la línea debería permitir también el ID de FIDE (no creo que existan apellidos compuestos solo por números). Al terminar la inscripción masiva debe generar un informe sobre el número de líneas pegadas y cuántos jugadores fueron realmente inscritos, resaltando las líneas que no se pudieron procesar por cualquier razón (p. ej., ID de FIDE inexistente o simplemente fallo de análisis). Quedaría por considerar si un Apellido presente en las listas FIDE pueda ser capturado por la propia lista, pero eso puede complicarse (homonimias, a veces con el mismo Apellido y Nombre idénticos, más otras situaciones infideles. Mejor mantenerlo simple, añadiendo solo el Apellido. En ausencia de Nombre aceptarlo sin Nombre, y en ausencia de Elo establecerlo a 1399. Así que la línea “Paperino,,1756” o “Paperino,Paolino” o “Paperino” son todas válidas.


¿Podemos considerar el problema del doble Bye y la imposibilidad de generar el turno después de la retirada de un equipo completamente comprendidos y resueltos para el futuro? Te aseguro que fue una situación realmente desagradable... cuando además del torneo hay premios, la gente no es muy comprensiva! :)


Hola y gracias como siempre,

Claudio.

Ver original (IT)

hola @Claudio

gracias como siempre por el feedback detallado y por el tiempo que dedicas a hacer girar ChessPairings en el campo. Tus reportes después de un torneo real valen más que mil pruebas.

Voy por puntos, empezando por tu pregunta final que es la más importante.

SOBRE LOS ERRORES DE TU TORNEO (doble bye y bloqueo tras retiro)

Te diré la verdad: creo que sí, pero no tengo una garantía al 100 %.

Esto es lo que pasó detrás de escena:

1) Doble bye: corregido en v4.7.2. La causa estaba en el TRF que enviábamos al motor de emparejamiento bbpPairings — declarábamos el bye como “empate con virtual” en lugar de “bye asignado por el sistema”, y así el motor no tenía forma de saber que la escuadra ya había recibido uno. Ahora usamos el marcador correcto (PAB) y bbp6 honra automáticamente la regla FIDE “no doble bye”.

2) Generación de turno bloqueada tras retiro de equipo: corregido en v4.7.6. Cuando un equipo se retiraba a mitad del torneo, el TRF generado contenía referencias a ese equipo (porque otros equipos lo habían encontrado) pero no su fila de encabezado, por lo que bbp6 fallaba con “Invalid line”. Ahora los equipos retirados se incluyen en el TRF con la bandera XXZ que los excluye del pairing pero mantiene la coherencia del historial.

3) Simulador de estrés (v4.7.7): añadimos una prueba automática que ejecuta 12 escenarios completos (incluido retiro de equipo y doble bye) antes de cada nueva versión. Si alguno de los dos errores vuelve, lo detectamos antes del despliegue en lugar de durante tu torneo.

La confirmación tranquila solo podremos darla después de que algún torneo real tuyo haya pasado indemne por estas situaciones.

Aunque las pruebas sean precisas, la realidad siempre es más creativa.

Lamento mucho la mala experiencia, entiendo que con los premios en juego no hay margen de tolerancia.


═══════════════════════════════════════════════════════════

SOBRE TUS 7 SOLICITUDES — disponibles en v4.8.0 (lanzamiento hoy)

═══════════════════════════════════════════════════════════


Implementadas 3 de 7 solicitudes. Aquí el detalle:


═══ ACEPTADAS ═══


✓ B-Year en los resultados de “Añadir jugador desparejado” Ahora la búsqueda FIDE muestra también el año de nacimiento, tanto en el panel de desparejados como en la búsqueda dentro de las escuadras. Ayuda muchísimo en casos de homonimia.

✓ “Añadir jugador” en la expansión de equipo — 5 modos. He rehacido completamente esa sección. Ahora encuentras un selector a pill horizontal con cinco formas:

1) De mi plantilla (con filtro en vivo)

2) Buscar FIDE (con B-Year en los resultados)

3) ID FIDE (textarea bulk, como antes)

4) Desparejados — selección desde la lista de desparejados de este torneo, con filtro

5) Manual — Apellido + Nombre + Elo opcional, con checkbox “añadir también a mi plantilla jugadores” activo por defecto

Cada cambio de modo coloca automáticamente el foco en el primer campo (tu “regla de oro”). Ya no hay más clic obligatorio para empezar a escribir.

El jugador añadido en modo “Manual” termina en tu plantilla (si la casilla está activa). Si ya existe un jugador con mismo apellido+nombre, se reutiliza el existente en lugar de crear un duplicado.

✓ Importación bulk de desparejados

En el panel de desparejados hay un nuevo botón “Importar lista”. Abre una textarea donde puedes pegar un jugador por línea en el formato:

Apellido,Nombre[,Elo|ID_FIDE]


Ejemplos válidos:

Rossi,Mario,1750 → Elo 1750
Verdi,Giovanni,12345678 → búsqueda FIDE (ID de 8 dígitos o más)
Bianchi,M → Elo 0, nombre solo inicial
Neri,Anna → Elo 0


La regla: el tercer campo, si numérico entre 0 y 3500 se lee como Elo, si >3500 como ID FIDE (y en ese caso apellido/nombre/rating se toman del archivo FIDE, ignorando lo digitado).

Al terminar aparece un informe: líneas leídas, jugadores inscritos, líneas descartadas con motivo para cada una.

Preferí mantenerlo solo como pegado, nada de subida de archivos, por razones de seguridad.


═══ NO ACEPTADAS ═══


✗ Inscripción desparejado con solo Apellido (sin Nombre)

Prefiero requerir al menos la inicial del nombre. Solo apellido corre el riesgo de dejar datos demasiado dispersos y ambiguos (especialmente en presencia de homonimias). La validación acepta “Rossi M.” o

“Rossi Mario”, pero no “Rossi” solo.

Por la misma razón, no implemento la corrección para jugadores FIDE sin coma entre apellido y nombre — son casos esporádicos y tratar de “adivinar” la separación introduciría más errores que arreglos.

En esos casos te recomiendo añadir el jugador manualmente con Apellido + inicial.

✗ Elo por defecto 1399 para jugadores sin rating

El valor 1399 es específico de la Federación Italiana, mientras que ChessPairings es multilingüe y se usa también fuera de Italia. El default es 0. Si para tus torneos es importante el 1399, puedes

obviamente escribirlo a mano (incluso en bulk).

✗ Subida de archivo para importar desparejados

Solo pegado en textarea, por razones de seguridad de la app.


Cuando pruebes las novedades avísame cómo va — especialmente si encuentras algún flujo incómodo o algo que pulir.

Ah, y en el foro: tomo nota del problema de la última página que vuelve a la home después del login. Lo reviso aparte.

¡Buenos torneos!

Stefano


Editado el 05/05/2026 08:16

Hola, te había escrito la típica y aburrida revisión, con estadísticas sobre las tablas FIDE, pero cuando presioné "Publicar respuesta" me dijo que debía acceder y perdí todo! Por alguna razón a veces el Foro pierde el acceso y requiere volver a iniciar sesión. Estoy desmoralizado por haber perdido todo (había escrito mucho) y por no seguir mi regla de copiar siempre el contenido del post antes de intentar publicarlo :( Paciencia, cuando recupere la confianza en el mundo lo volveré a intentar.


Hola,

Claudio.

Hola @Claudio

En estos días hay otros 5 torneos por equipos y no he recibido notificaciones (pero 5 son pocos y no se garantiza que no haya habido más)

Hola @stefanoloberti,

nos lo repetimos, ahora tendremos bien tres torneos por equipos (esta vez con equipos de tres jugadores), que formarán parte de una combinada. En este momento no veo la posibilidad de gestionar incluso las combinadas, con clasificaciones totales de los distintos resultados en los torneos individuales, quizá hablemos de eso más adelante. Por ahora los trataremos como tres torneos separados; sin embargo, ya en este caso sería útil poder duplicar un torneo, o al menos exportar a los inscritos, que salvo excepciones serán los mismos para los tres torneos... de lo contrario tendremos que crear manualmente cada torneo individual y volver a inscribir a todos los jugadores del primero. Este también será un aspecto que trataremos más adelante.


Como siempre, debo presentarte algunas observaciones preliminares y algunas solicitudes de aclaración, gracias como siempre.


- En la configuración del torneo, una vez abiertas las inscripciones, no se pueden ni ver ni modificar las reglas de desempate. Si no recuerdo mal, habías puesto esta posibilidad al final del torneo, pero creo que debería poder hacerse en cualquier momento, especialmente antes de que el torneo comience.

- Bug: en la “Lista de jugadores” (los de tu club para entender), si los seleccionas todos y luego intentas borrarlos, indica correctamente que quieres borrarlos (indicando el número total), ¡pero luego solo borra uno!

- ¿Cómo se puede cargar el anuncio del torneo, para que alguien lo pueda consultar antes de inscribirse?

- Tal vez no lo veo yo, pero ¿cómo hace un no administrador a ver la lista de inscritos? Debería haber un enlace público que apunte al torneo, donde se puedan visualizar sus características, ver los inscritos, descargar/visualizar el anuncio y poder usar un enlace para inscribirse. Soy yo quien no está viendo algo, o no fue previsto?


Hola,

Claudio.

Hola @LTB hoy estaré de viaje a Basilea para el Bundesturnier.


En tren me pongo a ver en detalle las solicitudes aunque creo que antes de introducir nuevas funcionalidades debería hacerse una prueba de estrés para comprobar si lo que está en producción produce errores y excepciones, evitando dejar al organizador con la patata caliente de algo roto.


Pequeña nota sobre el anuncio, esto no es cargable (como cualquier otro archivo) pero hay un campo de notas donde podrás escribir información dentro y lo que sale es una página como esta: https://my.chesspairings.org/pubblico/torneo.php?id=1381&token=10705c963d87ab2fac5f0dd8e104769b35dc66197c083d3606ec16cfe6561c56&tab=bando

Editado el 13/05/2026 07:32

Hola Stefano,

El punto es justo este: ¿cómo hace el público a visualizar esta información durante la fase de inscripción? Si se va al enlace público de inscripciones abiertas, solo se ve el botón Standings, un lacónico "Standings not available yet", y nada más (Ej. https://my.chesspairings.org/pubblico/torneo_squadre.php?id=208&token=5f5b5aa47b850102f0424a8bad91d113bad9d40eff9fc4c3fb31bd8177241113)... la pestaña "Regulation/Bando" no está. La solución parece "simple", hay que habilitar las pestañas "Participants" y "Regulations" también en fase de inscripción, de lo contrario, repito, ¿cómo hacen los jugadores a ver esta información? El asunto es tan grande que realmente sospecho haber perdido algo :)


¡Buena suerte para Basilea!


Hola,

Claudio.

Hola @LTB efectivamente en la sección de torneos por equipos esto no está implementado. Me lo pongo ahora

Hola @LTB


Voy por puntos, empezando con la mejor noticia: las cuatro quejas que planteaste estaban confirmadas en el código y se resolvieron en v4.8.9 (en línea a partir de hoy).


═══════════════════════════════════════════════════════════

TUS 4 QUEJAS — resueltas en v4.8.9

═══════════════════════════════════════════════════════════


✓ Rondas de desempate no visibles/edibles durante las inscripciones


Confirmado: la tarjeta “Configurar rondas” estaba enterrada dentro de la pestaña Clasificación, que sin embargo está oculta mientras el torneo esté en fase de inscripción (aún no hay clasificación para mostrar). Resultado: realmente no había forma de acceder a ella.


La moví a la pestaña Configuración, al final. Ahora siempre es accesible y editable en cualquier estado del torneo — inscripciones, en curso, concluido. El mismo drag & drop que antes, los mismos presets.


✓ Bug “eliminar todos los jugadores del club” que solo eliminaba 1


Bug real, y bastante ridículo una vez entendido: la página tenía dos formularios HTML anidados uno dentro del otro (uno para la eliminación masiva, otro dentro de cada fila de la tabla para la eliminación individual). Los navegadores cierran automáticamente el formulario externo tan pronto como encuentran el interno — así que solo la primera casilla de verificación terminaba realmente en el POST. El mensaje “¿quieres eliminar N?” era correcto porque se contaba del lado de JavaScript, pero luego el servidor recibía 1. Arreglado.


✓ Carga del folleto del torneo


Técnicamente el campo ya existía (el textarea “Notas” en las configuraciones), pero con ese nombre genérico nadie podía adivinar que era el folleto público. Renombré el campo a “Folleto / Notas del torneo”, con un placeholder explicativo (fecha, sede, premios, reglamento, contactos…) y una línea debajo que aclara: “Se mostrará como pestaña Folleto en la página pública del torneo.”


✓ Vista pública durante las inscripciones — lo más grande


Tenías razón en todo: la página pública del torneo por equipos antes de las inscripciones mostraba solo la pestaña Clasificación con “Clasificación no disponible todavía” y nada más. No había equipos inscritos, ningún folleto, ningún enlace para inscribirse. No habías perdido nada — era así.


Ahora la página pública del torneo por equipos tiene:


- Pestaña “Equipos” (siempre visible, con contador) → lista de los equipos inscritos, cada uno expansible para ver la alineación jugador a jugador (título, apellido+nombre, rating, ID FIDE, reservas si las hay al final). Durante las inscripciones es la pestaña predeterminada que se abre.


- Pestaña “Folleto” → visible cuando has completado las notas del torneo.


- CTA verde destacado “Inscribe tu equipo” en el encabezado, cuando las inscripciones online están abiertas. Con contador “N / máximo de equipos inscritos” si has establecido un techo.


- Pestaña “Clasificación” / “Emparejamientos” → aparecen cuando el torneo comienza (turno > 0).


- Badge de estado claro en el encabezado: verde “Inscripciones”, LIVE animado cuando el torneo está en curso, gris “Concluido” al final del torneo.



═══════════════════════════════════════════════════════════

DUPLICACIÓN DE TORNEO POR EQUIPOS═══════════════════════════════════════════════════════════


Decidiste “también lo trataremos más adelante”, pero dado que la duplicación ya existía en torneos individuales, replicar el mismo patrón en torneos por equipos fue una mañana de trabajo. Así que está dentro.


Cómo funciona:


En la lista de tus torneos por equipos hay un nuevo icono (hoja superpuesta, azul) a la derecha de cada torneo. Clic → modal con el nombre prellenado como “X (copia)” → confirmación → te lleva directamente al nuevo torneo.


Qué copia:

• Configuraciones completas (tipo, rondas, tableros, cadencia, color inicial, motor, etc.)

• Configuración de las rondas de desempate (para que no tengas que hacerlas cada vez)

• Todos los equipos activos (nombre, sigla, capitán, email del capitán, número de equipo de seed, rating medio)

• Toda la alineación de jugadores de cada equipo, con orden de tableros y bandera titular/reserva


Qué NO copia (intencionalmente):

• Resultados, emparejamientos, formaciones de rondas — el nuevo torneo nace virgen

• Equipos retirados

• Inscritos individuales aún en espera de asignación

• Tokens públicos y short code → se regeneran desde cero, así que los enlaces de la copia son diferentes a los del original


El nuevo torneo nace en estado “inscripciones”, ronda 0, fecha actual. Desde ahí lo modificas normalmente (nombre definitivo, fechas, posibles pequeñas diferencias en las alineaciones).


Para tu combinación de 3 torneos: creas el primero como de costumbre, duplicas dos veces, y en 30 segundos tienes los 3 torneos listos con los mismos jugadores. Ahorro estimado: media hora por cada torneo que hubieras tenido que re-inscribir a mano.


Como de costumbre, cuando pruebes las novedades avísame cómo va — incluso solo “ok funciona” es valioso, porque confirma que el fix se mantiene en campo y no solo en mis pruebas. Yo probé gestionar este flujo (no otros del torneo por equipos) y no encontré errores.


¡Buen torneo (a los torneos, más bien!),


Stefano


Grandioso, me parece todo bien dirigido, ¡gracias! Estoy perplejo sobre la intención de no copiar los jugadores sin pareja cuando se duplica el torneo, pero también podría funcionar... yo los duplicaría también; podría ser útil para duplicar un torneo (hacer una instantánea) antes de formar los equipos.

Finalmente, sería conveniente que un enlace eventual en la sección Notas/Regulación/Bando fuera clicable, así si se inserta un enlace a su propio bando (o a cualquier otra cosa) el usuario pueda acceder haciendo clic. Por ahora todo está en texto plano.


Hola,

Claudio.

Ciao @LTB el texto plano (por lo tanto sin HTML) es más seguro para evitar inyección de enlaces maliciosos que puedan provocar alertas en el dominio.


Hay casi mil usuarios y cada día se generan 1000 emparejamientos, la seguridad es algo muy importante.

@LTB he solucionado el error del foro al cerrar sesión

¡Genial! Pero el camino al éxito está pavimentado de dificultades y usuarios molestos. Aquí tienes otra avalancha de consideraciones, obtenidas durante pruebas para evitar tener que hacer los turnos a mano en los próximos torneos :) Entre las consideraciones, algunas son estéticas y otras debatibles, la más importante es la relativa a poder modificar las configuraciones del torneo en cualquier momento:


Inscripciones:

- La página pública del torneo debería permitir expandir o colapsar todos los equipos, tal como lo hiciste para la página de administrador.


Turnos:

- La visualización de los turnos es "fea", habría que intentar alinear los campos. La "Vista extendida" está bien, pero la "Vista compacta" tiene todos los resultados desalineados. También la "Impresión turno" debería tener la columna "RESULTADO" centrada respecto a la página. Además, la página pública de los emparejamientos también está totalmente desalineada.

- En mi opinión, al hacer “Iniciar torneo” debería generar automáticamente el primer turno; encuentro redundante el botón “Generar Turno”. Si la objeción es que así se puede hacer el Turno Manual, esa posibilidad ya existe una vez generado el turno, no hace falta pedirle al usuario que genere el turno.

- La gestión de las formaciones necesita afinación... funciona muy bien en la fase de inscripción (solo hay que mover los jugadores con el ratón), pero durante el torneo no es clara. Veamos un caso práctico: me equivoco y lanzo el torneo con una formación incorrecta. Hago el primer turno, y al momento de introducir los resultados me doy cuenta de que una formación está equivocada, pero afortunadamente hay el botón “Gestionar Formación” :) Entonces la cambio (y aquí ya el cambio es mucho menos eficaz; me obliga a poner temporalmente un tablero vacío y a jugar el juego de las tres cartas para corregir la formación final). Hago “Confirmar Formación” y todo queda bien. Inserto mis resultados (aquí tampoco está claro el significado del “Guardar resultados”; parece redundante como botón...). Genero el nuevo turno, y me vuelve a proponer la formación inicial. Podría estar bien, pero ¿cómo puedo cambiar una formación de forma definitiva hasta el final del torneo? Entonces voy a “Formaciones”, y allí puedo cambiar la formación (con un sistema aún diferente, que también te permite colocar dos veces al mismo jugador, salvo que luego no haga funcionar el “Guardar Formación”; hay que uniformar el método de cambio de formación). Vuelvo a los “Emparejamientos”, pero la modificación no existe, y tendría que cambiarla nuevamente allí (porque si elimino y recreo el turno, la modificación hecha en “Formaciones” se pierde. Peor aún: al volver al primer turno, cambio la formación del turno 1, genero el turno 2, y me vuelve a proponer la formación inicial, de la cual ya no queda rastro en ningún lugar! En resumen, creo que debería poder cambiar temporalmente una formación al introducir los resultados (uniformando la modalidad de cambio), y eso está bien, pero también debería permitirme modificar una formación de forma estable para los turnos futuros. Recuerdo que durante el último torneo ocurrió exactamente esto: un equipo fue insertado con una formación incorrecta, y en cada turno manualmente había que recordar cambiar la formación antes de introducir los resultados.

- Ya lo habíamos visto en torneos individuales, pero en los de equipos no encuentro la posibilidad de modificar el torneo durante los turnos (por ejemplo, el número de turnos o los métodos de desempate). Esto es particularmente grave porque si arrancas un torneo con un número excesivo de turnos respecto a los jugadores, ya no puedes salir: aunque lo permitas, llegas al punto en que quedas bloqueado con el mensaje “Error del motor de emparejamiento: Error while pairing /tmp/....trf. No valid pairings exists... etc.” El mensaje de error del motor de emparejamiento durante un torneo *no* debe ocurrir; debe prevenirse! Y en este caso ni siquiera tienes forma de salir. Las configuraciones del torneo deben ser siempre accesibles desde el principio hasta el final.


Fin del torneo:

- La clasificación final incluye tanto la para equipos como la por tablero, pero la Exportación (PDF, CSV, etc.) solo incluye la clasificación por equipo y no hay la de tableros. O se añade al final de la clasificación por equipos, o se necesita un botón específico para exportarla. Además, la clasificación por tablero no utiliza ningún desempate; también debería incluirlos allí.


Hola,

Claudio.

hola @LTB

sola batería de feedback sólido, siempre con la ventaja de venir de la sala de torneos y no de una prueba en laboratorio — gracias.

La v5.4.0 está disponible hoy y contiene cinco de los seis puntos que has planteado. El sexto (el inicio que también genera el turno 1) lo dejé fuera por elección.


Voy punto a punto siguiendo la estructura de la respuesta.

═══════════════════════════════════════════════════════════

INSCRIPCIONES — expandir/contraer página pública

═══════════════════════════════════════════════════════════

✓ Hecho.

En la página pública del torneo por equipos, encima de la lista de equipos, ahora hay los dos botones "Expandir todo" / "Contraer todo" idénticos a los del administrador. Los pequeños triángulos en

de cada equipo siguen funcionando de forma independiente, así que puedes abrir solo los equipos que te interesan o abrirlos todos de golpe, como prefieras.

═══════════════════════════════════════════════════════════

TURNO — alineaciones

═══════════════════════════════════════════════════════════

✓ Hecho en las tres áreas que me señalaste.

  1. Vista compacta de emparejamientos (admin) — el problema era que la fila del encabezado de tarjeta se comportaba como un espacio "flex" libre: si un nombre de equipo era más largo que otro, el puntaje a la derecha se desplazaba unos píxeles. Lo convertí en cuadrícula con columna de puntaje fija y cifras tabulares (así “1.5 - 0.5” y “2 - 0” ocupan el mismo ancho). Ahora los resultados están alineados incluso al desplazarse verticalmente.
  2. Impresión turno — la columna RESULTADO tenía un ancho de 55px, demasiado para “½-½”. Se aumentó a 78px, layout fijo, vertical-align middle. La fila ahora respira y es simétrica respecto a la página.
  3. Página pública de emparejamientos — la cuadrícula era rígida y con nombres largos rompía el alineamiento. Reescrita con columnas nombradas y minmax(0, 1fr) en los nombres, tabular-nums en rating y resultado.


Mientras trabajaba también encontré un error que tú no habías reportado pero que se manifestaba: en la exportación TXT de la clasificación por equipos, la fila “LTBagna Càuda” estaba desalineada un carácter respecto a las demás. Causa: la “à” es 2 bytes UTF-8 y PHP contaba los bytes en lugar de caracteres al hacer el padding de la columna. Sustituí sprintf con mb_str_pad. La fila ahora está recta.

═══════════════════════════════════════════════════════════

TURNO — gestión de formaciones

═══════════════════════════════════════════════════════════

✓ Hecho lo importante. No he unificado las tres interfaces bajo un único componente (sería demasiado invasivo por ahora), pero resolví el problema funcional que describes.

El caso que me contabas — “un equipo parte con una formación incorrecta, cada turno debo recordarme de corregirla manualmente” — ahora se gestiona así:

  1. En cada uno de los tres puntos donde hoy puedes modificar una formación (arrastrar y soltar en inscripción, pestaña Formaciones, “Gestionar Formación” durante un turno) hay una casilla debajo de la formación: “☐ Aplicar también como formación predeterminada para los próximos turnos”. Si la dejas vacía, el cambio vale solo para este turno (comportamiento actual, útil para el caso “hoy dejo X en banco porque tuvo fiebre”). Si la marcas, la modificación se convierte también en la NUEVA formación por defecto: la rosa se reordena (scacchiera_default actualizado) y todos los turnos futuros partirán de ahí en lugar del orden inicial.
  2. Validación anti-duplicado del lado del servidor en todas partes. Antes la pestaña “Formaciones” te permitía poner el mismo jugador en dos tableros y luego fallar al guardar de forma poco clara. Ahora, en los tres flujos (establecerFormacion, actualizarFormacionDefault, regenerarPartidasMatch del match en turno) se rechaza con mensaje explícito: “El mismo jugador está asignado a dos tableros (1 y 2). Corrige la formación antes de guardar.”


En esencia: durante el torneo, si al turno 2 te das cuenta de que la formación de un equipo estaba equivocada, marcas la casilla una sola vez y a partir del turno 3-4-5 se toma esa correcta. Nada más “recordarse en cada turno”. Al unificar gráficamente las tres interfaces bajo un solo componente drag‑drop quizá lo haga más adelante, pero el valor ya lo tiene la versión de ahora.

En cuanto al “Guardar resultados” que te parecía redundante: la etiqueta no es óptima, la dejé porque el botón hace el commit definitivo de los resultados que hasta ese momento están en autosave (el histórico se actualiza solo al click). Pero tienes razón que no se entiende muy bien. Lo pienso.

═══════════════════════════════════════════════════════════

TURNO — modificación de ajustes en curso + “Pairing engine error”

═══════════════════════════════════════════════════════════

✓ Hecho, y según yo es el arreglo más importante de este ciclo.

El caso que describías — torneo con 9 turnos y 6 equipos, recibes “No valid pairings exists” y no puedes salir — ahora con una sola marca la checkbox se toma ese correct?…

ciao @LTB

solita batería de feedback sólido, siempre con la ventaja de venir del salón de torneos y no de una prueba en laboratorio — gracias.

Hola Stefano,

¡Guau! ¡Tantas cosas dirigidas en tan poco tiempo... felicitaciones!

Aún hay un poco de inestabilidad gráfica, pero las resolveremos una vez que estemos con lo importante. :)


Una pequeña aparente omisión: sigo recibiendo el error del Pair Engine si cambio el número de rondas en un torneo en curso... acepta un número exagerado, y luego cuando ya no puede generar la ronda aparece el mensaje. Pero me permite generar una ronda manual sin problemas (y eso está bien, dejémoslo; si no causa más dolores de cabeza, lo dejamos).


En mi opinión también deberías dar la posibilidad de reabrir un torneo concluido; por ahora parece que no hay esa opción. Te doy un caso práctico: añado el último turno, concluyo el torneo y publico la clasificación; aparece alguien diciendo que su resultado del último turno está equivocado. ¿Qué hago?


También me he dado cuenta de que puedo retirar a un equipo, pero no puedo añadir uno a un torneo ya iniciado; si llega un retrasado que quiero que entre desde el segundo turno, ¿qué hago?


¡El resto está muy bien! Ahora, para gestionar nuestra combinada, he creado una pequeña aplicación web donde puedo alimentar las clasificaciones exportadas en "TXT (Report)" (son útiles como oro), las analizo y creo la clasificación combinada de los distintos torneos, ponderando los resultados según el número de rondas de cada torneo. Si te interesa verlo, lo tengo alojado en mi espacio web; puedo enviarte el URL por privado. Por ahora solo calcula las clasificaciones de equipos, pero ahora que me has añadido las clasificaciones de ajedrez en la exportación también incluyo esas (espero que no cambies el diseño pronto...). Tal vez algún día puedas implementar también el concepto de combinada.


Gracias de nuevo y hasta luego.

Claudio.

Hola @LTB


gracias por la respuesta y por volver a los puntos abiertos con la habitual precisión. Voy por los tres temas que has planteado, más una nota al pie de página sobre la combinada.


═══════════════════════════════════════════════════════════

ERROR DEL MOTOR DE ABINACIONES — realmente cerrado, esta vez (espero)

═══════════════════════════════════════════════════════════


✓ Hecho. Tenías razón: a pesar del fix v5.4.0 todavía lo tomabas. Hice una autopsia y encontré dos fallas que se habían insinuado:


(1) El guardado de configuraciones aceptaba cualquier `num_turni` en el rango 1-30 sin comprobar el máximo teórico Swiss para los equipos activos. Así que si ponías "20 rondas" con 6 equipos, el guardado pasaba sin problemas y te encontrabas en un callejón sin salida cuando el motor llegaba al límite.


(2) El fallback que interceptaba el error técnico para reformularlo de forma amigable solo coincidía con la cadena "no valid pairings". Si bbp6 devolvía "Pairing engine error" literalmente (o "Cannot pair", o otras formulaciones internas), el mensaje críptico pasaba intacto.


Lo interesante de tu observación es la frase "pero me deja generar una ronda manual sin fiar, y está bien, dejémoslo". La tomé como especificación explícita: el punto NO es impedirte guardar num_turni altos — eso te quitaría la válvula de escape del pairing manual. El punto es no dejar que termines ante un error críptico.


Así que estructuré el fix en tres niveles:


• Guardado de configuraciones: si pones `num_turni > max_teorico` con torneo en curso, el guardado pasa, pero aparece una advertencia amarilla: "Atención: con 6 equipos activos el pairing automático cubre como máximo 5 rondas. Las rondas excedentes deberán generarse manualmente." La ves y sabes qué esperar.


• Pairing automático (Generar ronda): bloquea con un mensaje que explica la salida — "Pairing automático agotado para 6 equipos activos (máximo teórico 5 rondas). Usa 'Pairing manual' para generar rondas adicionales, o reduce num_turni a 5 y concluye el torneo." No más callejón sin salida sin instrucciones operativas.


• Pairing manual: ningún bloqueo, nunca. Exactamente como pedías.


Además, independientemente de los tres niveles anteriores, amplié la captura del error del motor para que también intercepte "Pairing engine error" literalmente y cualquier otra formulación técnica genérica. Si por alguna razón bbp6 falla por otras causas (por ejemplo restricciones de color irresolubles en la ronda 3 con máximo teórico 5), en lugar de propagarte la cadena cruda ves: "El motor de pairing no pudo generar la ronda (...). Posibles causas: demasiadas rondas para los equipos activos, restricciones de color irresolubles. Puedes usar 'Pairing manual' o reducir num_turni y concluir."


En pocas palabras: "Pairing engine error" y amigos nunca deberían volver a llegar al árbitro en la sala. Nunca más realmente, esta vez.


═══════════════════════════════════════════════════════════

REABRIR TORNEO CONCLUIDO — hecho

═══════════════════════════════════════════════════════════


✓ Hecho. Tu caso práctico es perfecto como especificación: el árbitro concluye el torneo, publica la clasificación, salta un resultado de la última ronda incorrecto. Ahora hay una vía legítima.


En el torneo por equipos concluido, junto al paso final del torneo tienes un botón amarillo "Reabrir Torneo" con confirmación explícita. Al hacer clic:


• El estado del torneo vuelve a "en curso"

• La clasificación final de los equipos se reinicia (se recalculará en el próximo "Concluir")

• La ronda_actual permanece igual (estamos en la última), así que la UI de resultados queda inmediatamente disponible para la corrección

• Corrige el resultado incorrecto y vuelve a pulsar "Concluir Torneo", la clasificación final se recalcula y reasigna.


En dos palabras: "Reabrir torneo concluido" funciona. Nunca más realmente, esta vez.


═══════════════════════════════════════════════════════════

AÑADIR EQUIPO A TORNEO INICIADO — pospuesto a v5.6, y te explico por qué

═══════════════════════════════════════════════════════════

We just translate the given text preserving HTML.

Ciao @LTB


grazie per la risposta e per essere tornato sui punti aperti con la solita precisione. Vado per i tre temi che hai sollevato, più una nota a piè di pagina sulla combinata.


═══════════════════════════════════════════════════════════

PAIRING ENGINE ERROR — chiuso davvero, stavolta (spero)

═══════════════════════════════════════════════════════════


✓ Fatto. Avevi ragione: nonostante il fix v5.4.0 lo prendevi ancora. Ho fatto autopsia e trovato due falle che si erano insinuate:


(1) Il salvataggio impostazioni accettava qualsiasi `num_turni` nel range 1-30 senza controllare il massimo teorico Swiss per le squadre attive. Quindi se mettevi "20 turni" con 6 squadre il salvataggio passava liscio e ti ritrovavi nel dead-end quando il motore arrivava al limite.


(2) Il fallback che intercettava l'errore tecnico per riformularlo user-friendly matchava solo la stringa "no valid pairings". Se bbp6 restituiva "Pairing engine error" alla lettera (o "Cannot pair", o altre formulazioni interne), il messaggio criptico passava intatto.


La cosa interessante della tua osservazione è la frase "ma mi lascia generare un turno manuale senza fiatare, e va bene, lasciamolo". Te l'ho presa come specifica esplicita: il punto NON è impedirti di salvare num_turni alti — quello ti taglierebbe via la valvola di sfogo del pairing manuale. Vado per i tre temi che hai sollevato, più una nota a piè di pagina sulla combinata.

Editado el 17/05/2026 10:43

Hola Stefano,

he probado las modificaciones. La posibilidad de reabrir el torneo funciona, y te aseguro que es un ancla de salvado imprescindible!

- Pair Engine Error: te confirmo que los mensajes ahora parecen ser capturados y reconfeccionados... quizá se podría decir que el tiempo para el cual sale el largo y complicado mensaje difícilmente permite leerlo, un mensaje del tipo (que probablemente genera pánico) debería pedir una confirmación para continuar. Pero hay una extraña que bloquea: con un torneo de 6 equipos de tres componentes cada uno, aunque el programa te acepte un número de rondas superior a 5, no parece haber forma de pasar más allá de la tercera ronda (en lugar de la quinta como diría la lógica). ¿Puedes comprobar si efectivamente es el bbp6 quien hace caprichos, o hay alguna otra razón? Si elimino todas las rondas (operación algo larga si el número de rondas es elevado), y cambio el torneo de Swiss a Round Robin (aunque te acepte un número de rondas incongruente... habría que, en caso de round robin, “grigar” el número de rondas a n-1. También porque silenciosamente el programa cambia el número de rondas a n-1 tan pronto arrancas el torneo, aunque hubieras puesto otro número), el torneo termina normalmente con 5 rondas. Perdón por el exceso de paréntesis para describir las situaciones, pero escribo mientras pruebo.

- Inscripción tardíos: entiendo las implicaciones. El truco del Place Holder definitivamente no es sencillo, y deberías siempre preverlo con antelación :) Veamos si el PoC logra validar la introducción de un nuevo equipo en cualquier momento...


Sugerencia: en la “Impresión de ronda”, que generalmente el árbitro usa para imprimir y colgar las rondas, añade en la parte superior derecha un QR Code que apunte a la página pública del torneo, así quien lo quiera lo encuadre y vea las rondas en su teléfono, incluidas las siguientes...


Hola,

Claudio.

hola @LTB

primero lo importante: he identificado y corregido el bloqueo en tu Swiss de 6 equipos. Va a v5.5.1, te explico abajo. En los demás puntos respondo por orden.


═══════════════════════════════════════════════════════════

BUG BLOQUEANTE — 6 EQUIPOS SE DETIENEN EN LA RONDA 3 (FIX v5.5.1)

═══════════════════════════════════════════════════════════

✓ Hecho. Y tenías razón con la sospecha de "bbp6 que hace caprichos": el culpable era precisamente bbp6, pero por una información incorrecta que le estábamos pasando.

Causa raíz: en el TRF que enviamos al motor hay un registro (XXR) que declara cuántas rondas durará el torneo. Si pones num_turns=7 con 6 equipos, le escribíamos "XXR 7" igual. bbp6 entonces hace lookahead: ve que el máximo teórico de un Swiss a 6 equipos es N-1 = 5 rondas distintas, calcula que después de la ronda 3 solo quedan 2 rondas pares contra los 4 declarados, y rechaza los emparejamientos ya desde la ronda 4 con "no valid pairings". No es un capricho, es FIDE-compliant: el motor no quiere comprometerse a iniciar un torneo que sabe que no podrá completar.

Solución: en el TRF cambiamos XXR al máximo teórico (5 en tu caso) ANTES de enviarlo a bbp6. El num_turns que configuraste en el torneo permanece igual en la base de datos —por lo tanto, las rondas excedentes siempre puedes generarlas manualmente, exactamente la intención de v5.5.0. Simplemente bbp6 ve solo lo que puede completar automáticamente.

Consecuencia práctica para ti: tu Swiss de 6 equipos ahora te empareja hasta la ronda 5 sin problemas, cualquiera sea el num_turns que hayas configurado (5, 6, 10, 30 — no importa). Las rondas 6+ las continúas generando a mano si las necesitas.

Pruebas automáticas escritas para blindar: 4 escenarios (cap par, cap impar con equipo retirado, no-cap cuando num_turns ya está en el rango), todos pasan.

═══════════════════════════════════════════════════════════

ROUND ROBIN — num_turns silencioso (retrasado, no bloqueante)

═══════════════════════════════════════════════════════════

Tienes razón: en Round Robin el valor num_turns es de hecho inutilizado (el algoritmo Berger siempre establece N-1 para N par, N para N impar). Pero hoy el campo es una entrada libre, y eso es confuso.

Lo pongo en lista para la próxima patch (v5.5.2 o v5.6): cuando tipo_torneo='round_robin' el campo num_turns se deshabilita/gris y se actualiza automáticamente a N-1 (o N con BYE) tan pronto cambies el número de equipos, con un pequeño tooltip que explica por qué.

No lo puse en v5.5.1 porque es UX cosmética y la corrección anterior era urgente: mejor no ralentizarlo.

═══════════════════════════════════════════════════════════

ENGINE ERROR — el mensaje desaparece demasiado rápido

═══════════════════════════════════════════════════════════

Centrado. Hoy es un flash amarillo/rojo que se auto-dismite, pero si el árbitro está en sala y tiene alrededor de diez jugadores preguntando "¿cuándo arrancamos?", ese mensaje no lo lee.

En v5.5.2 (o v5.6) lo convierto en modal con confirmación explícita "Entendido" para los errores del motor de emparejamiento. Los demás flashes informativos quedan como están —no quiero sobrecargar la UX con cosas rutinarias, pero el error del motor sí debe ser persistente.

═══════════════════════════════════════════════════════════

QR CODE EN LA IMPRESIÓN DE RONDA — ya existe!

═══════════════════════════════════════════════════════════

Buenas noticias: el QR code en "Imprimir ronda" está en producción desde hace un tiempo, tanto para torneos individuales como por equipos. Lo encuentras arriba a la derecha de la impresión A4. Apunta directamente a la página pública del torneo, donde los jugadores ven emparejamientos y clasificación en tiempo real.

La razón por la que quizás no lo viste: aparece SOLO si el torneo tiene visibilidad pública activada (y por tanto un token_pubblico generado). Si en las configuraciones del torneo dejas "privado", el QR no se imprime (sería inútil, la página no sería accesible).

Entonces:

  1. Ir a Configuración del torneo
  2. Visibilidad → "Público"
  3. Guardar
  4. Reimprimir ronda → el QR code aparecerá arriba a la derecha


Si en cambio querías un QR en la hoja de inscripciones o en la clasificación, dímelo y lo añado allí.

═══════════════════════════════════════════════════════════

INSCRIPCIÓN DE RETRASADOS — PoC en curso

═══════════════════════════════════════════════════════════

Confirmo que el PoC que te contaba en v5.5.0 está dando señales positivas (Z y SHORT funcionan ambos con bbp6). Te lo entrego en v5.6 cuando lo integre limpio en el formulario "Añadir equipo a torneo en curso". En cuanto al placeholder tienes razón, es una estafa — la realidad es que hasta v5.6 es la única vía segura, y te pido disculpas.

═══════════════════════════════════════════════════════════


En resumen:

• v5.5.1 (hoy): fix bug 6 equipos, el punto bloqueante

• v5.5.2/v5.6 (pronto): RR grisado, modal confirmación error del motor

• v5.6: inscripción de retrasados por PoC validado


Cuando tengas un momento, prueba tu Swiss de 6 equipos con el num_turns que quieras: debe avanzar hasta la ronda 5 sin más "Error del motor de emparejamiento" ni parada en la ronda 3. Avísame cómo te va.


Hola Stefano,

estoy contento de que hayamos encontrado este "bug" en la alimentación de bbp6, ¡fue bastante infiel! Y vi que ya has puesto la 5.6.3. Probé, pero el Generar Turno falla con el mismo mensaje (esta vez modal). También intenté eliminar el turno (el tercero), y recrearlo, pero se detiene siempre en el tercer turno y no genera el cuarto. Entonces probé a borrar todos los turnos, para volver a pasar por Iniciar Torneo, y funcionó hasta el quinto. En este punto sospecho que la modificación solo tiene efecto si el torneo fue iniciado con la nueva versión; de lo contrario, el XXR ya había sido enviado.

Sí, el número de turnos del Round Robin no es urgente, puede esperar.

Pero el Código QR no lo veo en absoluto :) Obviamente me refiero a la "Imprimir turno" del administrador, porque es eso lo que el árbitro imprime y coloca en la sala. Para entenderlo, como ejemplo, este enlace: https://my.chesspairings.org/stampa_abbinamenti_squadre.php?id=225&turno=1. Mientras que en la sección pública realmente hay un Código QR que apunta a Telegram ("Sigue este torneo en Telegram"), pero el cuadro dedicado sigue siendo todo blanco (ej.: https://my.chesspairings.org/pubblico/torneo_squadre.php?id=225&token=1cc53800c380a43d37ab097d5509b97ace5f78718b7e09f3a725f8ddcd0fdeb8). Pero si ya estoy en la página pública no necesito un Código QR a la página pública, lo que necesito es para quien vea el turno impreso por el administrador. Y cuando voy a las configuraciones del torneo, no encuentro una bandera "Visibilidad → Público", solo veo una "Inscripciones de equipo online" y una "Inscripciones online individuales". Lo mismo en la creación del torneo. Además, como dijiste, también se necesitaría un Código QR en la clasificación (que apunte a la clasificación pública), además de por comodidad para dar mayor visibilidad a tu programa. Así que aquí estoy algo confundido. Pero encontré la bandera en los torneos individuales, ¡quizá no la hayas propagado a los equipos?!

También estoy confundido sobre la posibilidad de añadir a los retrasados... entendía que desde 5.6 habría esa posibilidad, veo la 5.6.3 online, pero no veo un "Añadir equipo a torneo en curso"... tal vez me haya equivocado.


Hola,

Claudio.


Editado el 18/05/2026 21:38

ciao @LTB

ho chiuso tutti i tre punti che mi avevi segnalato dopo la v5.6.3. Te li riepilogo per ordine. Sono già tutti in produzione (v5.6.9 al footer).

═══════════════════════════════════════════════════════════

ISCRIZIONE RITARDATARI SQUADRE — v5.6.4

═══════════════════════════════════════════════════════════


✓ Fatto. Replicato il pattern dei tornei individuali (esisteva già in mig 051) anche per le squadre.

Come si attiva: in Impostazioni torneo trovi un nuovo flag "Consenti iscrizione tardiva" (visibile solo per Swiss, l'RR per definizione ha calendario fisso). Quando è attivo e il torneo è in corso, nella scheda Squadre compare una card arancio "Aggiungi squadra a torneo in corso". La squadra entra dal turno successivo a 0 punti e con numero_squadra MAX+1 (non rinumero il seeding originale, mantengo la storia TRF di bbp6 coerente).


Il PoC (Proof of Concept) che ti raccontavo nella v5.5.0 mi aveva confermato che bbp6 accetta "0000 - Z" per i turni passati (zero-point bye, FIDE C.04.2 Art. 2.4) — quindi questo è il formato in produzione adesso, no placeholder fragili.

Sul cap XXR mi hai fatto pensare a un dettaglio importante: se aggiungi una squadra il max_teorico cresce (es. da 6 squadre a 7, max passa da 5 a 7). Però se questa squadra poi si ritira torni a 6 squadre — e nella v5.5.1 il cap si ricalcolava a max(N-1)=5, abbassando di nuovo il limite e potenzialmente rompendo pairing già prodotti col cap 7. Soluzione adottata (chiamiamola "opzione 3"): salvo il max_teorico AL MOMENTO DELL'AVVIO in una colonna `xxr_baseline`. Il cap effettivo nel TRF è ora `MAX(xxr_baseline, max_teorico_attuale)`. Late entry alza il cap, ritiri non lo abbassano sotto il baseline.

Test: ho aggiunto 12 nuovi test automatici al test runner squadre (PARTE C + PARTE D) — 31 verdi su 31. Il C10 in particolare conferma che bbp6 genera correttamente un turno 3 a 5 squadre quando il baseline è ancora 3 (chiamata reale al motore, non solo precheck logico).

══════════════════════════════════════════════════════════

QR CODE — VISIBILITÀ PUBBLICA E STAMPA CLASSIFICA (v5.6.5)

═══════════════════════════════════════════════════════════

Sul punto del QR Code nella vista pubblica hai centrato un buco: il flag "Visibilità privato/pubblico" esisteva sui tornei individuali ma non sulle squadre — io le avevo lasciate "sempre tecnicamente pubbliche" via token_pubblico autogenerato, scelta che era funzionale al sistema follower Telegram ma incoerente come UX. Adesso anche le squadre hanno il toggle, con un'unica differenza rispetto agli individuali: default 'pubblico' (sui nuovi e sui legacy via backfill) — così non rompo i follower esistenti. Quando lo metti privato la pagina pubblica dà 404, niente QR nelle stampe e i broadcast Telegram si auto-sospendono.

Stampa classifica: nuova pagina `stampa_classifica_squadre.php` (analoga a stampa_abbinamenti_squadre) con QR in alto a destra che porta alla classifica pubblica live. Ne ho fatto una anche per gli individuali. Le trovi col link "Stampa classifica" accanto al menu Esporta, nella scheda Classifica. A4 portrait, auto-stampa.

═══════════════════════════════════════════════════════════

QR TELEGRAM BIANCO NELLA VISTA PUBBLICA (v5.6.6 → v5.6.9)

═══════════════════════════════════════════════════════════

Questo punto è stato il più rognoso. La libreria QR che usavamo (davidshimjs/qrcodejs, una versione del 2013) ha smesso di funzionare su Chrome 148+: errore `f.getPatternPosition is not a function` riproducibile su qualsiasi testo, qualsiasi correctLevel. Identico in modalità incognito e con la lib inline o esterna — niente a che vedere con cache o estensioni. Probabilmente un'ottimizzazione JIT del browser che non digerisce la minificazione vecchia.

Soluzione: ho sostituito con `qrcode-generator` di Kazuhiko Arase (la lib autoritativa da cui qrcodejs aveva forkato), versione corrente, output SVG inline scalabile. Helper unico `renderQR(elemento, testo, sizePx)` su tutte le 10 pagine del progetto che generavano QR (le 4 stampe + le 2 pagine pubbliche + iscrizione + profilo + dashboard utente + marathon).

Risultato: i QR ora funzionano dappertutto, su tutti i browser. Test sul tuo Chrome dovrebbero passare al primo tentativo.

═══════════════════════════════════════════════════════════

TORNEI XXR GIÀ "ROTTI" — BACKFILL + DIAGNOSTICA (v5.6.7)

══════════════════════════════════════════════════════════

Sul punto che mi avevi sollevato dei tornei in corso che avevano già XXR storica gonfia: ho fatto due cose.

  1. (1) Backfill (migrazione 074): he written retroactively `xxr_baseline` for 22 legacy Swiss tournaments with baseline NULL; the value matches cap that would apply now — no current behavior changes, but legacy becomes robust against future withdrawals and protected by option 3 exactly as those created in v5.6.4+.
  2. (2) Salud tournament‑?…

ciao @LTB

ho chiuso tutti i tre punti che mi avevi segnalato dopo la v5.6.3. Te li riepilogo per ordine. Sono già tutti in produzione (v5.6.9 al footer).

═══════════════════════════════════════════════════════════

ISCRIZIONE RITARDATARI SQUADRE — v5.6.4

═══════════════════════════════════════════════════════════


✓ Hecho. Replicado el patrón de los torneos individuales (ya existía en mig 051) también para las equipos.

Como se activa: en Configuración torneo encontrarás una nueva bandera "Permitir inscripción tardía" (visible solo para Swiss, RR tiene calendario fijo). Cuando está activo y el torneo está en curso, en la pestaña Equipos aparece una tarjeta naranja “Añadir equipo a torneo en curso”. El equipo entra con 0 puntos en la ronda siguiente y con número_equipo MAX+1 (no renumerar el seeding original, mantengo la historia TRF coherente).

12»
Iniciar sesión para participar en la discusión
Este sitio utiliza cookies técnicas y de análisis para mejorar la experiencia.