Carteras (Funds)
Gestion de fondos: cierre mensual, posiciones, reportes y emails.
El modulo de Carteras (/admin/funds) es donde el equipo de gestion
crea fondos, carga el rendimiento mensual y monitorea las posiciones de
los inversores.
Crear una cartera#
Desde /admin/funds/new:
| Campo | Que es |
|---|---|
| Slug | URL del fondo (balanced-income). |
| Inception date | Primer dia que el fondo recibe capital. |
| Risk level | conservative / moderate / aggressive. |
| Min deposito | Monto minimo de subscripcion en USDC. |
| Min retiro | Monto minimo de redemption. |
| Fee gestion (anual) | Cobrado mensualmente prorrateado. |
| Fee performance | % sobre el rendimiento generado (high water mark). |
| TIR objetivo | Target anual estimado (informativo). |
El status se guarda como active por default. Solo los fondos active
son visibles para inversores.
Cierre mensual (CORE)#
Pasos en /admin/funds/[id] → tab Periodos:
- Mes a cerrar: por default, el primer mes abierto. Generalmente el mes anterior al actual.
- Rendimiento %: el % real generado por la cartera ese mes.
- Click en Preview cierre → muestra cuantas posiciones se afectan y el total a distribuir, sin escribir nada.
- Click en Confirmar y enviar emails → atomicamente:
- Calcula TWR de cada posicion activa.
- Escribe
fund_ledgercon tipomonthly_return. - Actualiza
fund_positions.currentBalanceytotalReturns. - Crea
fund_reportspor inversor. - Envia emails Resend con el reporte.
- Inserta
notificationsyactivity_feed. - Actualiza el AUM del fondo.
- Marca el periodo como
closed. - Logea en
audit_log(fund.close_period).
Aviso
Una vez cerrado un periodo no se puede editar desde la UI. Si
necesitas corregir un error, contacta al equipo de ingenieria — hay que
hacer una compensacion via addManualMovement o un periodo "reverted".
Posiciones#
Tab Posiciones: tabla con todos los inversores del fondo, ordenada por saldo descendente. Por cada posicion ves saldo, depositado, ganado, retirado y status.
Acciones disponibles (futuras):
- Ajuste manual (bonificacion / cargo).
- Cierre forzado de posicion.
- Re-envio del ultimo reporte.
Solicitudes pendientes#
Tab Solicitudes: muestra subscripciones y retiros pendientes que se
procesan automaticamente el dia 1 de cada mes via Vercel Cron
(/api/cron/process-fund-requests).
Movimientos#
Tab Movimientos: ledger global del fondo. Util para auditoria.
Cada entry tiene type, amount, description, occurredAt.
Convenciones del rendimiento mensual#
- Rango razonable: 0% a 5% mensual.
- Negativos permitidos pero el sistema te avisa si bajas de 0%.
- No cierres dos veces el mismo mes; el sistema rechaza si ya esta closed.
- TWR se aplica a movimientos intra-mes.
Resend / emails#
Cada cierre dispara emails desde admin@vlozity.com (dominio verificado
en Resend). Si Resend falla, el cierre no se rompe: el email_log
queda como failed y el periodo se completa igual. El admin puede
re-disparar emails despues.
Auditoria#
Todo cierre genera entradas en audit_log:
action: "fund.close_period"
entity: "fund_period"
entityId: <period uuid>
metadata: { fundId, returnPct, positionsAffected, totalDistributed }
Verlas en /admin/audit.