CNV

CNV — Composición de Cartera de FCI

Composición semanal de cartera de los Fondos Comunes de Inversión argentinos (artículo 34, Capítulo XI de las Normas CNV): por fondo y semana, los instrumentos que tiene (especie) con su porcentaje del patrimonio neto, agrupados por clase de activo, moneda y país, más el patrimonio neto total del fondo.

Mercado de capitalesFondos (FCI)

Qué incluye

  • 21 columnas documentadas
  • Formato Parquet y CSV
  • Cobertura Snapshot semanal desde 2026-05
  • Actualización semanal
  • Acceso por descarga, API y MCP
  • Schema versionado y trazable a la fuente
Casos de uso
  • ¿Cuáles son las 10 mayores tenencias del FCI X al último snapshot?
  • ¿Qué FCI tienen exposición a ON YPF y cuánto representa de su cartera?
  • ¿Cómo se reparte la cartera del fondo X por clase de activo?
  • ¿Qué fondos tienen mayor concentración en plazos fijos?
  • ¿Qué exposición tiene toda la industria a un emisor dado?
  • ¿Cómo cambió la composición sectorial de un fondo semana a semana?
Columnas21
ColumnaTipoDescripciónUnidad
snapshot_dateDateFecha 'Cartera al' publicada por el fondo (cierre semanal: habitualmente viernes, los feriados la corren al último día hábil). Clave temporal del snapshot. CNV publica con ~2 semanas de lag.ISO 8601 YYYY-MM-DD
codigo_fondoStringID interno del fondo en el sitio CNV (valor del <option> del select Lfc, usado en la URL DetallesFCI/{id}). NO es el número de registro oficial CNV ni el código CAFCI, y NO joinea con cnv.fci.cuotapartes-diarias.codigo_cnv (espacios de ID distintos). El puente entre ambos datasets es por denominación de fondo — ver gotcha.
denominacionStringNombre del fondo (nivel fondo, sin sufijo de clase) tal como lo publica CNV en DetallesFCI. Es el puente práctico hacia cnv.fci.cuotapartes-diarias (que reporta a nivel fondo+clase, ej. '... - Clase A').
sociedad_gerenteStringNombre de la sociedad gerente del fondo.
sociedad_depositariaStringNombre de la sociedad depositaria del fondo.
clasificacionStringClasificación del FONDO entero (Money Market, Renta Fija, Renta Variable, Mixto, etc.). No confundir con clase_activo, que es la clase de cada tenencia DENTRO del fondo.
moneda_fondoStringMoneda base en que opera el FONDO (Pesos, Dólares, etc.). De las tres columnas de moneda: moneda_fondo = base del fondo; moneda_seccion = la de cada bloque de la cartera (puede diferir en multi-moneda); moneda_pn = en la que se informa el P.N. (≈ moneda_fondo).
regionStringRegión de inversión declarada del fondo.
horizonteStringHorizonte de inversión declarado del fondo (Corto / Mediano / Largo plazo).
tipo_filaStringDiscriminador de fila: 'instrumento' para tenencias individuales, 'categoria' para encabezados de clase de activo. SIEMPRE filtrar por este campo antes de agregar.
ordenInt32Orden secuencial de la fila dentro de la cartera del fondo, para reproducir el orden original del HTML.
clase_activoStringClase de activo de la TENENCIA (ej. 'Plazo Fijo', 'Letras y Bonos del Tesoro', 'Disponibilidades'). Es a nivel holding dentro del fondo — distinto de clasificacion (que es el tipo del fondo entero). Para filas 'instrumento' se hereda del encabezado de clase previo.
moneda_seccionStringMoneda de la sección de cartera (puede diferir de moneda_fondo en carteras multi-moneda).
paisStringPaís del instrumento o sección, según clasifica CNV.
detalleStringEspecie cruda tal como la publica CNV (ej. 'ON YPF C 17', 'Plazo Fijo Banco Nación'). NO parseado: usar ILIKE para buscar por emisor.
pct_pnFloat64Porcentaje del Patrimonio Neto para filas 'instrumento' (columna CNV '% del P.N.'). Decimal-fraction: 0.05 = 5%. NULL para filas 'categoria'.decimal-fraction (0.05 = 5%)
pct_pn_reexpFloat64Porcentaje del P.N. reexpresado para filas 'categoria' (columna CNV '% del P.N.(2)', montos reexpresados en moneda del fondo). Decimal-fraction. NULL para filas 'instrumento'.decimal-fraction (0.05 = 5%)
pct_desde_montoBooleanTRUE si el % fue derivado normalizando montos absolutos (fondos cerrados/estructurados, ~2%) en vez de leerse directo como porcentaje. Provenance de calidad — ver gotcha. FALSE para la mayoría de los fondos.
pn_totalFloat64Patrimonio Neto total del fondo reexpresado en moneda_pn. Permite derivar monto absoluto: pn_total * pct_pn.moneda_pn (ARS o USD según fondo)
moneda_pnStringMoneda en que está expresado pn_total (la moneda del fondo).
valor_en_carteraFloat64Valor absoluto de la fila en cartera, en moneda_pn. Columna DERIVADA = (% del P.N. de la fila) × pn_total. Para filas instrumento es el valor de esa tenencia; para categoria, el total de la clase de activo. Evita que el analista multiplique a mano.moneda_pn (ARS o USD según fondo)
Limitaciones conocidas

Pueden invalidar un análisis ingenuo. Documentadas como parte del control de calidad.

Dos columnas de porcentaje: pct_pn vs pct_pn_reexp

Las filas instrumento traen pct_pn (columna CNV % del P.N., calculado en la moneda de la sección). Las filas categoria traen pct_pn_reexp (columna CNV % del P.N.(2), calculado sobre montos reexpresados en la moneda del fondo). Ambas en decimal-fraction (0.05 = 5%). La columna que no aplica al tipo de fila es NULL.

Filtrar siempre por tipo_fila

instrumento para analizar tenencias; categoria para el breakdown por clase de activo. Mezclar ambas en una suma produce doble conteo: las categorías ya agregan los instrumentos que las componen.

pct_desde_monto: fondos cerrados/estructurados normalizados

Para ~2% de los fondos (cerrados/FCIC, estructurados) CNV publica la cartera en MONTOS ABSOLUTOS en pesos en vez de porcentajes (mismo header "% del P.N."). Almanac lo detecta y normaliza por el total para recuperar el % real, así que pct_pn/pct_pn_reexp son decimales válidos (suman a 1.0) en TODOS los fondos. pct_desde_monto = TRUE marca estos casos para provenance: el % es derivado (no publicado directo) y pn_total se reconstruyó del total de la cartera (CNV mostraba un factor 1, no el PN).

Lag de publicación ~2 semanas — el último snapshot NO es de esta semana

CNV publica la cartera con ~2 semanas de retraso. El MAX(snapshot_date) disponible suele estar 2-3 semanas atrás de hoy — es lo esperado, no un dato faltante. Para "la cartera más reciente" usá siempre MAX(snapshot_date), nunca la fecha de hoy ni el último viernes.

snapshot_date es el cierre semanal real, no siempre un viernes

snapshot_date proviene del campo "Cartera al" publicado por el fondo: habitualmente un viernes, pero los feriados lo corren al último día hábil (ej. 2026-04-30, jueves, por el 1° de mayo). No asumir que toda fecha es viernes. Es idempotente: re-correr sobre una semana ya guardada no emite filas nuevas.

Fondos sin cartera

Algunos fondos no publican la pestaña de composición del art. 34 (fondos cerrados, en liquidación, o que aún no la habilitaron). Estos fondos quedan fuera del snapshot — su ausencia no implica cartera vacía, sino dato no disponible.

Multi-moneda: pn_total en moneda_pn, no siempre pesos

pn_total está reexpresado a moneda_pn (la moneda del fondo: ARS, USD, etc.). moneda_seccion indica la moneda de cada sección de la cartera. Para consolidar AUM en pesos de fondos en USD se requiere el tipo de cambio del día — no está en este dataset.

Emisor no parseado — detalle es especie cruda

detalle contiene la descripción de la especie tal como la publica CNV (ej. "ON YPF C 17", "Letra del Tesoro 14/06"). Almanac no parsea emisor, ISIN, ni país fino: esa derivación es una capa gold futura. Para buscar por emisor usar detalle ILIKE '%EMISOR%' como aproximación — puede incluir falsos positivos.

Texto con acentos: ILIKE es accent-sensitive

Los valores de texto traen acentos (ej. "Dólares", "Información"). Un ILIKE '%dolar%' NO matchea "Dólares" (ó≠o). Para encontrar el valor exacto a filtrar usá data_distinct_values (busca accent-insensitive) en vez de adivinar el ILIKE, o respetá los acentos en el patrón.

país suele venir NULL

CNV no puebla país para muchos fondos (queda NULL en todas sus filas). Cuando país IS NULL no se puede separar emisor local vs cross-border desde el dato — es ausencia en la fuente, no un filtro que devuelve vacío.

El join con cuotapartes-diarias es por NOMBRE, no por código

codigo_fondo es el ID interno del sitio CNV (Lfc, ej. 82276), un espacio de identificadores DISTINTO al codigo_cnv que reporta CAFCI en cnv.fci.cuotapartes-diarias (ej. el mismo fondo es Lfc 82276 acá y codigo_cnv 1152 allá). Joinear codigo_fondo = codigo_cnv da CERO matches. El puente práctico es por denominacion de fondo: carteras es nivel fondo ("Balanz Capital Money Market"); cuotapartes es nivel fondo+clase ("Balanz Capital Money Market - Clase A") — cortar el sufijo " - Clase ..." antes de comparar. Para ponderar por patrimonio NO hace falta el join: pn_total ya viene en este dataset.