Envio de Archivo
El archivo de saldos contendrá una fila por cada cuenta invertida. Cabe destacar que cada fila tendrá un tamaño aproximado de 100 bytes, lo cual es importante considerar, ya que el tiempo el envío y el pre-procesamiento necesario puede variar en función de la cantidad de filas.
El archivo de saldos debe ser enviado utilizando el endpoint de archivos:
Método: POST
URL: /api/v1/files/
El payload se debe enviar con formato form-data:
{
"file": "2024-05-04_SaldosBilleteraInvera_SUS.csv",
"reason": "balance_batch_file"
}
Respuesta:
{
"file": "https://invwallet….",
"file_id": "file_unWKfw7KY0aOCNSg",
"reason": "balance_batch_file",
"updated": "2024-03-24T12:52:44.238840-03:00",
"created": "2024-03-24T12:52:44.238810-03:00"
}
Se debe resguardar el valor file_id, ya que lo necesitamos para poder identificar las nóminas generadas a partir del mismo.
En este punto el archivo de saldos inicia su procesado de manera asíncrona, invWallet validará la información de cada cuenta y reflejará en tablas internas los saldos.
Los archivos de saldos no pueden ser procesados 2 veces. Si se envía un archivo con el mismo file_id, será rechazado. Esto es importante para la lógica de reintentos: ante un error de red, verificar primero si el archivo ya fue recibido antes de reenviar.
Procesado de saldos
A continuación, InvWallet realizará la comparación con saldos anteriores y generará las órdenes a realizar determinando el side (suscripción o rescate) y el monto a operar.
Por ejemplo, si una cuenta tiene $1000 invertidos y el archivo de saldos ahora refleja $720,40, significa que se ha hecho una extracción y se generará un rescate de $279,60 (1000 - 720.40).
Finalmente, se generan las nóminas que agrupan a todas las órdenes generadas, con el monto total.
Para realizar pruebas o verificar el estado de los saldos, es posible utilizar el endpoint endpoint de Balances diarios /api/v1/daily_balances/ para comprobar si ya han sido actualizados. Este método no afecta la operación.
Cabe aclarar que todos los montos se manejan con un redondeo de 2 decimales, por lo que existe la posibilidad de que surja alguna diferencia mínima de 0,01.
Las órdenes generadas por los mismos pueden acabar en estado Fallida en caso de existir algún error con la cuenta o que alguna regla de compliance lo determine (por ejemplo falta de documentación, cuenta bloqueada, alcanzado límite de suscripción, etc.). En ese caso, las órdenes que sean válidas a enviarse NO serán incluidas en las nóminas correspondientes y no serán contempladas en el monto total que las nóminas representen.
Troubleshooting
Subí el archivo y la nómina viene vacía
Si después de enviar el archivo la consulta de nóminas no devuelve resultados, verificar:
- ¿Se ejecutó el procesamiento? — El envío del archivo (
POST /v1/files/) solo lo carga. Si el procesamiento no se dispara automáticamente (por ejemplo en sandbox), verificar que se haya ejecutado el paso de procesamiento. - ¿Los saldos cambiaron? — InvWallet compara el saldo informado con el anterior. Si son iguales, no se genera ninguna orden ni nómina.
- ¿Las cuentas existen y están abiertas? — Si una cuenta del archivo no existe o no está en estado
open, se ignora silenciosamente. - ¿El archivo tiene el formato correcto? — Verificar que el CSV respete la estructura esperada (monto, moneda, account_id, cuenta bancaria, fund_id).
Algunas órdenes fallaron
Consultar las órdenes fallidas del día con GET /api/v1/orders?status=7. Las causas más comunes son:
| Causa | Solución |
|---|---|
| Cuenta sin validar (adeuda archivos) | Ejecutar POST /v1/accounts/{id}/validate/ después de cargar los archivos |
| Cuenta bloqueada | Contactar al ACDI/AM para desbloquear |
| Límite de suscripción alcanzado | Verificar los límites configurados para el fondo |
| Monto menor al mínimo del fondo | Ajustar el monto en el próximo archivo de saldos |
El archivo fue rechazado por duplicado
InvWallet rechaza archivos con el mismo file_id. Generar un nuevo archivo con un ID diferente. Ante errores de red, verificar primero con GET /v1/files/{file_id} si el archivo ya fue recibido.