> ## Documentation Index
> Fetch the complete documentation index at: https://tournaments-partners.exuratech.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Validar la integración de competencias

> Pruebas controladas de inscripción, scoring, frontend, cierre y webhook.

Usa una competencia futura de prueba y cuentas normales de prueba en la conexión MT5 correcta. El notebook de integración del repositorio API puede acompañar al equipo de Exura Tech, pero el broker puede completar el siguiente recorrido solo por HTTP. Nunca uses claves reales en capturas, logs o documentación compartida.

## Antes de registrar

**1. Confirmar esquema y worker**

Exura Tech verifica que las migraciones de competencias estén aplicadas y que el worker independiente esté activo. El CRM no ejecuta migraciones.

**2. Comprobar URLs**

`GET /api/v1/competitions/{uuid}/integration` con sesión admin debe entregar origen API público en `registration_endpoint` y origen frontend público en `ranking_link`, sin `localhost`.

**3. Guardar la clave**

`POST .../integration-key` devuelve el token una sola vez. Guárdalo en un secreto del backend del CRM.

**4. Verificar cuenta**

El login de prueba debe existir en la conexión MT5 de la competencia; la cuenta puede tener cualquier balance inicial.

## Pruebas de registro

1. Envía `POST registration_endpoint` con bearer CRM, `Idempotency-Key` estable y `{"mt5_login": 12345678}`. Espera `201` y conserva el `participant_uuid`.
2. Repite **idéntica** solicitud. Debe devolver el mismo participante sin crear otro.
3. Usa el mismo `Idempotency-Key` con otro login. Debe devolver `409`.
4. Comprueba en `GET /api/v1/competitions/{uuid}/participants` (admin) que aparece una sola fila. No hay alias público: se muestra el login.
5. Prueba inscripción durante `LIVE` si el caso del broker lo necesita. El límite es `end_at`, no el inicio. Prueba un intento después del fin: debe rechazarse.

## Pruebas de scoring y presentación

1. Genera una operación de prueba abierta y cerrada **dentro** de la ventana; tras la sincronización comprueba `closed_deals`, `profit_net`, `last_sync_at` y puesto en `GET .../leaderboard`.
2. Si pruebas un depósito, confirma que balance puede cambiar pero profit de ranking no. Para excluir una posición anterior, ábrela antes del inicio y ciérrala dentro: no debe sumar. Una posición abierta dentro y cerrada parcialmente dentro suma solo la parte realizada.
3. Abre `ranking_link` o tu frontend. Pulsa la fila y comprueba que la curva comienza en cero y que se ven hasta cinco cierres elegibles recientes. El detalle puede seguir en caché 30 segundos por proceso API.
4. Comprueba empate de profit: gana el orden de registro y los puestos son únicos. Verifica premios por puesto/rango configurado.
5. Si tu frontend llama la API desde otro dominio, prueba CORS desde el navegador real; una solicitud servidor a servidor no comprueba esta política.

## Cierre y conciliación

El poll de estado es de 60 segundos por defecto y usa solo MySQL; la sincronización de operaciones también es de 60 segundos por defecto. Puede haber demora entre la hora nominal y la actualización visible si un ciclo MT5 tarda más. Al llegar `end_at`, confirma `FINISHED`, lectura final, leaderboard congelado e incidente vacío o revisado. Si hay webhook, verifica firma HMAC, deduplicación con `X-Competition-Event-ID` y lectura posterior del ranking completo. No deduzcas puestos únicamente del payload del webhook.

El archivo de histórico se intenta tres horas después de la sincronización final. Hasta que termine, el detalle puede seguir consultando MT5. Consulta incidentes y estado de archivo desde la ruta administrativa. El broker gestiona la entrega de premios una vez conciliado el resultado.

> [!WARNING]
>
> La inscripción `201` confirma que la cuenta fue registrada; no significa que ya haya deals ni que el ranking esté sincronizado. Usa `last_sync_at` y el estado de la competencia para mostrar frescura de datos.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.