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
- Envía
POST registration_endpointcon bearer CRM,Idempotency-Keyestable y{"mt5_login": 12345678}. Espera201y conserva elparticipant_uuid. - Repite idéntica solicitud. Debe devolver el mismo participante sin crear otro.
- Usa el mismo
Idempotency-Keycon otro login. Debe devolver409. - Comprueba en
GET /api/v1/competitions/{uuid}/participants(admin) que aparece una sola fila. No hay alias público: se muestra el login. - Prueba inscripción durante
LIVEsi el caso del broker lo necesita. El límite esend_at, no el inicio. Prueba un intento después del fin: debe rechazarse.
Pruebas de scoring y presentación
- Genera una operación de prueba abierta y cerrada dentro de la ventana; tras la sincronización comprueba
closed_deals,profit_net,last_sync_aty puesto enGET .../leaderboard. - 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.
- Abre
ranking_linko 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. - Comprueba empate de profit: gana el orden de registro y los puestos son únicos. Verifica premios por puesto/rango configurado.
- 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 llegarend_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.

