UIF

UIF — Resoluciones PLA/FT (corpus consolidado)

~213 resoluciones UIF antilavado desde 2002, con texto consolidado.

RegulatorioPLA/FT — AML

Qué incluye

  • 17 columnas documentadas
  • Formato Parquet y CSV
  • Cobertura 2002 a presente
  • Actualización mensual
  • Acceso por descarga, API y MCP
  • Schema versionado y trazable a la fuente
Casos de uso
  • ¿Qué resoluciones UIF aplican a las entidades financieras y cuáles están vigentes?
  • Trazá la cadena modificatoria de la Res. UIF 30/2017 (sujetos obligados de entidades financieras).
  • ¿Qué resoluciones UIF rigen a los PSAV (proveedores de servicios de activos virtuales / cripto)?
  • ¿Cuántas resoluciones UIF se emitieron por año desde 2010? ¿Hay picos post-FATF?
  • ¿Qué resoluciones vigentes mencionan 'beneficiario final' en el título o asunto?
  • Listá todas las resoluciones UIF que aplican a escribanos y que están vigentes.
Columnas17
ColumnaTipoDescripciónUnidad
id_normaInt64ID interno de InfoLEG. Clave primaria. Estable cross-snapshot.
tipoStringTipo de norma UIF. Valores típicos: 'Resolución', 'Resolución Conjunta'.
numeroStringNúmero de la resolución como string, sin año (ej. '30'). Usar junto a anio para identificar univocamente.
anioInt64Año de la resolución (INTEGER). Con numero forma la clave compuesta ej. Res. UIF 30/2017.
tituloStringTítulo sintético de la resolución según InfoLEG. Útil para listings.
asuntoStringAsunto o sumario más amplio que el título. Describe el objeto de la norma.
fecha_sancionDateFecha de sanción / firma de la resolución. Puede ser NULL en algunos casos — usar fecha_boletin como fallback.ISO 8601 YYYY-MM-DD
fecha_boletinDateFecha de publicación en Boletín Oficial. Jurídicamente relevante para entrada en vigencia.ISO 8601 YYYY-MM-DD
alcanceStringAlcance de aplicación por sujeto obligado. Vocabulario controlado: 'por-sujeto-obligado' (aplica a sujetos específicos, vía la puente data_uif_pla_ft_resoluciones_sujetos), 'todos-los-so' (aplica a todos los sujetos obligados) o 'general'. NULL para las resoluciones históricas no curadas.
estadoStringEstado de vigencia de la resolución. Poblado sólo para el set vigente curado (~64 filas); NULL en históricas derogadas.
texto_planoStringTexto plano verbatim del cuerpo de la resolución. Se carga vía prewarm batch desde texto_actualizado_url (o texto_original_url). NULL hasta que corra el prewarm.
texto_actualizado_urlStringURL al texto actualizado (con modificaciones acumuladas) en InfoLEG. NULL si no hay versión actualizada.
texto_original_urlStringURL al texto original publicado en infoleg.gob.ar (versión sancionada, sin actualizaciones posteriores).
r2_path_htmlStringPath del archivo HTML archivado en R2 (Cloudflare). NULL hasta que corra el archivado.
charsInt64Cantidad de caracteres en texto_plano (para size budget de LLM context). NULL hasta el prewarm.
texto_plano_fetched_atDatetimeTimestamp del fetch de texto plano vía prewarm batch. NULL si todavía no se fetcheó.
snapshot_dateDateFecha del snapshot mensual (AR-universal). Discrimina ingestas mes a mes.ISO 8601 YYYY-MM-DD
Limitaciones conocidas

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

sujeto_obligado sólo poblado para el set vigente (~64 filas)

La tabla puente data_uif_pla_ft_resoluciones_sujetos contiene únicamente las ~64 resoluciones vigentes auditadas. Las ~149 restantes (históricas / derogadas) NO tienen entrada en la puente. Un LEFT JOIN desde la tabla principal traerá NULL en sujeto_obligado para esas filas. Para queries de "qué rige hoy", siempre filtrar WHERE r.estado = 'vigente' antes o después del JOIN, o usar INNER JOIN si sólo interesan las vigentes.

estado sólo poblado para el set vigente (~64 filas)

El campo estado en la tabla principal también se llenó sólo para las resoluciones vigentes auditadas. El resto de las ~149 históricas tiene estado = NULL. No interpretar NULL como "sin estado conocido que implique vigencia" — en este dataset NULL en estado significa derogada/histórica no curada. Para listar todas las vigentes, filtrar WHERE estado = 'vigente'.

texto_plano puede ser NULL hasta que corra el prewarm

El campo texto_plano se carga vía un batch asíncrono que fetchea desde texto_actualizado_url (o texto_original_url como fallback). En el snapshot inicial post-ingest puede estar NULL para la mayoría de las filas. Verificar texto_plano_fetched_at IS NOT NULL antes de filtrar por contenido del texto. Para full-text search sobre título y asunto, el índice GIN idx_uif_resoluciones_fts funciona aunque el texto plano esté NULL.

numero se guarda sin año — el año está en anio

El campo numero contiene sólo el número de resolución sin año (ej. '30', '229'). El año está separado en el campo anio (INTEGER). Para identificar unívocamente una resolución, usar la combinación (numero, anio), ej. numero = '30' AND anio = 2017 para la Res. UIF 30/2017. No hacer CAST(numero AS INTEGER) para ordenar sin verificar primero que no haya valores no numéricos.

Relación N:N requiere deduplicar si se trae a nivel resolución

Si se hace JOIN entre data_uif_pla_ft_resoluciones y la puente data_uif_pla_ft_resoluciones_sujetos, una resolución que aplica a 3 sujetos obligados aparecerá 3 veces. Para listar resoluciones (sin expandir por sujeto), usar la tabla principal directamente o agregar con COUNT(DISTINCT id_norma). Para listar sujetos de una resolución, agrupar por id_norma con array_agg(sujeto_obligado).