Saltar al contenido principal

Consulta de Nóminas

Para poder conocer el monto final a transferir o recibir del Asset Manager o ACDI hay que revisar lo que indican las nóminas generadas. Se usará el endpoint de nóminas, filtrando por el archivo de balance que las generó. Para hacerlo se debe usar el file_id resguardado al enviar el archivo de saldos:

Error común — Pago por orden individual

El pago de suscripciones siempre se realiza por nómina, no por orden individual. InvWallet agrupa todas las órdenes en una nómina global con el monto total a transferir. La Wallet debe consultar esta nómina y realizar un único pago por el total indicado en amount. No se deben usar endpoints de pago de órdenes individuales para este flujo.

Método: GET
URL: /api/v1/paysheets?balance_file_id=file_981236123

Respuesta:

{
"count": 1,
"next": None,
"previous": null,
"results": [
{
"paysheet_by_fund_class_id": "pyfc_JjOKVsZrJpVVYyhHk",
"fund_class_id": "fund_CJaDdf0WBO3QhZUFa",
"fund_class_name": "B",
"amount": "123450.60",
"side": "buy",
"operated_quantity": "0.000000000",
"status": 0,
"status_detail": "Pendiente",
"created": "2024-05-15T02:11:28.118944-03:00",
"paid": false
},
{...},
]
}

Lo que se obtiene como resultado son las nóminas generadas, con información de cada una. Lo más importante en cada una es el monto total de las órdenes que incluye (amount), el tipo de operación (side), el estado de la misma, cantidad de cuotapartes operada, y si ya fue pagada (paid).

Validación de nóminas

Este es un paso clave antes de transferir los fondos. La Wallet debe validar que los montos de las nóminas coincidan con lo esperado internamente.

¿Por qué validar?

Si la Wallet separó los archivos de saldos por tipo de operación (SUS, RES, RES_TOT), puede comparar de forma independiente:

  • Nómina de suscripción (side: buy): el amount debe coincidir con la suma de los saldos positivos (nuevas inversiones) que envió en el archivo SUS.
  • Nómina de rescate (side: sell): el amount debe coincidir con la suma de los saldos negativos del archivo RES.
  • Nómina de rescate total (side: total_sell): debe coincidir con las cuentas del archivo RES_TOT.

¿Qué puede causar discrepancias?

Si alguna orden no fue incluida en la nómina (por ejemplo, porque la cuenta tiene un problema de compliance, documentación faltante o límite de suscripción alcanzado), el total de la nómina será menor al esperado. En ese caso:

  1. Consultar las órdenes fallidas del día para identificar el problema.
  2. Corregir la situación de la cuenta afectada.
  3. El monto a transferir es siempre el que indica la nómina en InvWallet, no el que la Wallet calculó internamente.
Recomendación

Implementar un proceso automático de validación que compare el monto esperado por la Wallet con el amount de cada nómina. Si hay diferencia, alertar al equipo de operaciones antes de transferir.

InvWallet siempre informará el monto final a transferir al AM o ACDI. De este modo, para saber cuánto hay que transferir al AM o ACDI por las suscripciones, debe revisarse el campo amount de la nómina cuyo side sea buy.

Circuito de pago de nóminas de suscripción

La nómina de suscripción queda en estado Pendiente hasta que se reciba la transferencia de fondos. El circuito completo es:

  1. La Wallet consulta las nóminas generadas para conocer el monto total a transferir.
  2. La Wallet transfiere los fondos al ACDI/AM. La transferencia puede ser en globo (un solo monto por la suma total de la nómina) o individual (un movimiento por cuenta). El modo se define entre el ACDI/AM y la Wallet; se recomienda globo por simplicidad y menor costo operativo.
  3. El ACDI/AM marca la nómina como pagada (paid: true).
  4. Recién en este punto el ACDI/AM envía la nómina a la Sociedad Gerente para su ejecución.
Importante

La nómina no se envía a la Sociedad Gerente hasta que el ACDI/AM confirme la recepción de los fondos. Si la Wallet no transfiere, la nómina queda en estado pendiente.

Estados de las nóminas

EstadoDescripción
PendienteNómina generada, esperando pago de la Wallet
EnviadaNómina enviada a la Sociedad Gerente / Asset Manager
CompletaEstado final para suscripciones. La SG procesó y confirmó la operación
Pago InstruidoEstado para rescates. El AM/ACDI instruyó el pago al cliente. Cuando la Wallet confirma la recepción, pasa a Completa
FallidaLa nómina no pudo ser procesada. Queda en estado intermedio para revisión

Ciclo de vida de las órdenes

Órdenes de suscripción (buy)

Pendiente de validación → Lista para enviar → Enviada a SG → Completa

Órdenes de rescate (sell / total_sell)

Lista para enviar → Enviada a SG → Cubierta (fitted) → Pago Instruido → Completa
EstadoDescripción
Pendiente de validaciónOrden creada, esperando confirmación de pago (solo suscripciones)
Lista para enviarOrden validada, incluida en la nómina pendiente de envío
Enviada a SGOrden enviada a la Sociedad Gerente / Asset Manager
Cubierta (fitted)La SG confirmó la operación de rescate. Pendiente de pago al cliente
Pago InstruidoEl ACDI/AM instruyó el pago del rescate. La Wallet debe confirmar recepción
CompletaEstado final. La operación se liquidó correctamente
FallidaLa orden no pudo procesarse. Ver Troubleshooting
Confirmación de rescates

Cuando una orden de rescate llega a Pago Instruido, la Wallet debe confirmar que recibió los fondos usando el endpoint de registro de pago de rescates (POST /v1/orders/register_payment/). Recién ahí la orden pasa a Completa.

Revisión de estado de órdenes

Si bien el flujo de saldos no requiere que corroboren la creación y estado de las órdenes generadas, sí recomendamos que se consulten todas las órdenes fallidas del día, de modo de corregir cualquier situación que las haya provocado, ya que podrían causar problemas en el largo plazo.

Método: GET
URL: /api/v1/orders?status=7

Respuesta:

{
"count": 123,
"next": "http://api.example.org/orders/?offset=400&limit=100",
"previous": "http://api.example.org/orders/?offset=200&limit=100",
"results":
[
{
"order_id": "string",
"external_id": "string",
"account_id": "string",
"account_number": "string",
"status": "string",
"status_detail": "string",
"asset_name": "string",
"side": "buy",
"amount": "string",
"operated_quantity": "string",
"operated_price": "string",
"operated_amount": "string",
"previous_operational_date": "2019-08-24",
"operational_date": "2019-08-24T14:15:22Z",
"created": "2019-08-24T14:15:22Z",
"updated": "2019-08-24T14:15:22Z”
}
]
}