Introduccion
============
El sistema posee un componente de scheduling (planificación) de tareas relativas a
la importación y exportación de datos de forma regular y automatizada.
Las tareas que ejecuta el planificador actualmente son:
* Importación de sorteos
* Importación de premios
* Importación de depósitos
* Importación de información de habilitación/deshabilitación de usuarios
* Exportación de apuestas
* Exportación de usuarios (archivo maestro)
* Exportación de usuarios pendientes de habilitación
* Exportación de solicitudes de extracción de fondos
Los intervalos en los que se ejecutan las tareas están predeterminadas en esta versión.
Asimismo es necesario definir en el archivo `.env` los directorios pertinentes:
```
IMPORT_DIR=...
EXPORT_DIR=...
```
Cada tarea registra en la tabla `task_exec` la información de ejecución de la misma.
## Ejecución manual de tareas
Se puede lanzar por fuera del sistema cualquiera de las tareas, con el detalle de que
**este método no registrará la ejecución de la misma**. Esto se recomienda solamente
realizarlo en modo de desarrollo.
Los scripts disponibles, correspondientes a las tareas del sistema de planificación,
se pueden ejecutar con los comandos `foal run` pertinentes:
```
foal run importexport\bets-export.ts
foal run importexport\deposit-import.ts
foal run importexport\draw-import.ts
foal run importexport\prizes-import.ts
foal run importexport\user-master-export.ts
foal run importexport\users-permissions-export.ts
foal run importexport\users-permissions-import.ts
foal run importexport\withdraw-export.ts
```
Cada script requiere un argumento mínimo `file=` seguido de la ruta completa al
archivo a procesar o exportar.
Formatos de Archivo
===================
El sistema usa textos delimitados por coma para exportar e importar ciertos datos.
## Importación
### Activación/Desactivación de Usuarios
Permite habilitar o deshabilitar los usuarios ya existentes. Debe proveerse un ID de fila
único, DNI y un 0 o 1 si se desea deshabilitar o habilitar, respectivamente.
El nombre de archivo debe tener como prefijo `permissions`.
Ejemplo:
```
id,dni,enabled
1,93092697,0
2,92724396,1
3,76219113,0
4,34821511,1
```
### Depósitos
Permite hacer efectivos los depósitos de fondos confirmados por un sistema externo. Debe proveerse
ID de fila único, DNI del usuario, monto en centavos y un identificador de depósito o transacción
del sistema externo. Esto tiene como motivo mejorar la trazabilidad de las operaciones.
El nombre de archivo debe tener como prefijo `deposit`.
Ejemplo:
```
id,dni,amountInCents,depositId
1,2048100,40020,"e391504b-098f-4628-bf83-4dbc2a7049c2"
2,1884017,10000,"b039f071-9a4f-4c1d-af99-16c5030cf547"
```
### Sorteos
Permite importar los sorteos a efectuar en el futuro. El nombre del archivo debe tener como prefijo `gameday`.
Se acepta un archivo JSON con el formato y el contenido de ejemplo que sigue:
```
{
"gameDay":[
{
"gameDay":{
"gameDayid":51587,
"externalGameDayId":43564,
"game":{
"gameCode":80,
"gameName":"Quiniela Ciudad",
"gameShortName":"La Quiniela",
"gamePrefix":"QNL"
},
"attributes":{
"gameDayDaily":{
"1":"Diario"
},
"gameDayType":{
"5":"Primera"
},
"betMinPrice":400,
"betMaxPrice":500000
},
"schedule":{
"saleOpenDateTime":"2020-APR-27 05:00:00",
"saleCloseDateTime":"2020-APR-27 11:20:00",
"expirationDateTime":"2020-MAY-07 00:00:00",
"drawScheduledDateTime":"2020-APR-27 11:30:00"
},
"Instances":[
{
"id":1,
"name":"CAPITAL FEDERAL"
},
{
"id":2,
"name":"Buenos Aires"
},
{
"id":4,
"name":"Santa Fe"
}
]
}
},
.
.
.
]
}
```
### Premios
Permite efectivizar los premios para un sorteo. El nombre del archivo debe tener como prefijo `prizes`.
Se acepta un archivo JSON con el formato y el contenido de ejemplo que sigue:
```
{
"prizes": [
{
"gameDayId": 51587,
"gameCode": 80,
"externalGameDayId": 43564,
"ticketId": 59830,
"prize": 46288
},
.
.
.
]
}
```
## Exportación
### Apuestas
Las apuestas generadas en un período se exportan como una lista de campos empaquetados, cuyo formato es:
```
AABBBBBBBBCDDEEEEEEEEEEFFFF-FF-FF FF:FF:FFGHHHHHHHHHHIIIIIIIIIIJJJJKLLMMNOOPPQQRRRRSSSSSSSSSSSSSSSSSSSSTUUUU-UU-UU UU:UU:UUVWWWWWWWWWW
A = gamecode
B = external GameId
C = web (siempre 6)
D = lugar (siempre 51 = CABA)
E = Id Apuesta
F = Fecha de apuesta en zona horaria local
G = Manual (Siempre 1)
H = User Id
I = Monto en centavos
J = Numero de jugada (Quiniela)
K = Digitos
L = Desde
M = Hasta
N = Redoblona
O = Numero redoblona
P = Numero redoblona (desde)
Q = Numero redoblona (hasta)
R = Letras
S = Instancias
T = Cancelada?
U = Timestamp cancelada (se debe ignorar si campo anterior = 0)
V = Cancelacion manual (siempre 1)
W = Id de usuario
```
Ejemplo de archivo:
```
800004367765100000000022020-05-19 20:53:561000000000500000123000003201021450102MVZV0102000000000000000012020-05-19 18:57:5610000000005
800004367765100000000062020-05-19 20:53:561000000000500000123000000101020000000DJNR0200000000000000000002020-05-20 12:48:3400000000000
800004367765100000000032020-05-19 20:53:561000000000500000123000003201021450102IKCF0100000000000000000002020-05-20 12:48:3400000000000
800004367765100000000082020-05-19 20:53:561000000000500000123000203301020000000GWVK0100000000000000000002020-05-20 12:48:3400000000000
800004367765100000000112020-05-20 09:14:191000000001200000025000009201010000000TQSU0402010000000000000002020-05-20 12:48:3400000000000
800004367765100000000232020-05-20 12:02:451000000001200000025000000201010000000DQWT0100000000000000000002020-05-20 12:48:3400000000000
800004367765100000000242020-05-20 12:18:461000000001900000100000023201010000000GHKZ0100000000000000000002020-05-20 12:48:3400000000000
```
### Master file de usuarios
Lista la información de los usuarios registrados en el sistema.
Ejemplo de salida:
```
id, fullname, dni, cuit, cvu, agencia, provincia, mail, phone
2664, "Keaton Stefan Ramirez", 45707485, "20457074851", "62611758548347032011", "null", "null", "keaton.ramirez9520@gmail.com", "837213781"
2663, "Peyton Thomas", 20295333, "20202953335", "67735751365549227713", "null", "null", "peyton.thomas4489@gmail.com", "316537421"
2662, "Kai Diaz", 71712228, "20717122282", "16788799381275847476", "null", "null", "kai.diaz9770@yahoo.com", "695238813"
2661, "Lukas Price", 19131586, "20191315868", "97999858443097877410", "null", "null", "lukas.price3100@yahoo.com", "793209739"
2660, "Nicolas Anderson", 60664984, "20606649849", "62025362489934991852", "null", "null", "nicolas.anderson10@yahoo.com", "760517255"
```
### Usuarios pendientes de habilitación
Similar al archivo maestro de usuarios pero filtrados por los que están pendientes de ser habilitados.
Ejemplo de salida:
```
userid, fullname, dni, cuit, email, phone
2601, "Mayson Alexander", 19264447, "20192644472", "mayson.alexander2128@gmail.com", "658338490"
2603, "Fletcher Cooper", 51351121, "20513511211", "fletcher.cooper778@gmail.com", "188060886"
```
### Solicitudes de extracción de fondos
Lista todas las solicitudes de extracción de fondos hacia un CBU destino.
```
EventId, Timestamp, SourceName, SourceCUIT, AmountInCents, TargetName, TargetCUIT, TargetCBU
```