investment dentro del recurso
account.
Es un cambio aditivo.
investment es un campo nuevo del account que ya
consumes: si tu integración lo ignora, sigue funcionando igual, sin coordinar
deploys. Viene poblado sólo en cuentas type: "investment"; en cualquier
otra es null.El shape
Campos
Todos los campos salvo
kind pueden venir en null: el banco no informa lo
mismo para cada producto — ver Qué campos trae cada producto más abajo.
kind
El producto concreto se distingue conkind, no con account.type — así
el switch (type) de tu integración no se rompe cuando aparece un producto
nuevo.
El enum está cerrado y completo, pero no todos los valores se emiten hoy —
ver cobertura.
Precisión: la plata es entera, las cuotas son strings
Esto es lo que más fácil rompe a un integrador.^-?\d+(\.\d+)?$ — punto como
separador decimal, sin separador de miles, sin notación exponencial, y con
los dígitos que informó el banco (no los normalizamos ni recortamos ceros).
Las dos fechas
El valor cuota de un fondo mutuo chileno es T-1: se publica por día hábil cerrado, no en vivo. Por eso hay dos relojes y publicamos los dos.
Cuando el banco no informa la fecha de valorización,
priced_at viene null:
preferimos el hueco antes que ponerle la fecha del sync, que sería mentir.
Balance de una cuenta de inversión
balance no cambia de semántica, pero sí cambia lo que significa “disponible”
según el producto:
limit es siempre null: un producto de captación no tiene cupo.
available: 0 significa “hoy no puede retirar esta plata”, y es distinto de
null, que significaría “el banco no lo informa”.Una cuenta de inversión no tiene movimientos
GET /v1/accounts/{id}/movements sobre una cuenta investment devuelve una
lista vacía, en live y en sandbox. No es un bug: un DAP, un fondo mutuo o un
APV no tienen cartola — el sync baja cartola para las cuentas vista/corriente y
estado de cuenta para las tarjetas.
Para detectar que algo cambió, compara investment.priced_at y el delta de
balance.current entre syncs.
Los aportes y rescates (la “cartola” del producto de inversión) no están
disponibles por la API. Si los agregamos van a ser un recurso aparte, no estos
movimientos.
Qué campos trae cada producto
Lo que el banco informa no es lo mismo para un depósito que para un fondo. Hoy, con Banco de Chile:Dos cosas que sorprenden en los depósitos a plazo
term_days sale best-effort del nombre del producto cuando el banco no lo
entrega como número ("DPRI HASTA 30 DS" → 30). Si no se puede leer viene
null, nunca un número inventado.
Cobertura
Hoy ninguna otra institución emite el bloque. De los
kind, en live sólo
verás time_deposit y mutual_fund: el apv está implementado en el adapter
de Banco de Chile pero todavía sin validar contra un producto real, y
stock y cash no los emite ningún adapter. El sandbox sí emite un APV, para
que puedas integrarlo antes de que llegue.
Una cuenta puede venir con
type: "investment" y investment: null: hay
instituciones que clasifican el producto (porque su nombre dice “inversión” o
“fondo”) sin que todavía podamos leer su detalle. Trata investment: null como
“no tenemos el detalle”, no como “no es una inversión”.Probarlo sin un banco real
En test mode el RUT mágico11.111.111-1 devuelve un DAP, un
fondo mutuo y un APV con la misma forma que live, y con priced_at de ayer
a propósito para que veas la diferencia con refreshed_at. El RUT de empresa
22.222.222-2 trae un DAP.
Ojo con un detalle: el depósito a plazo del sandbox sí informa gain_pct y
priced_at, mientras que en live Banco de Chile los deja en null. Trata todo
campo como nullable y no te apoyes en que venga poblado.
Cuentas
El recurso
account completo y sus tipos.Test mode
Los productos de inversión del sandbox.