subvenciones icon indicating copy to clipboard operation
subvenciones copied to clipboard

EL CIF de los beneficiarios está incluido en la misma columna que la descripción de los beneficiarios

Open elsatch opened this issue 2 years ago • 11 comments

En los ficheros jurídicas_1.csv y juridicas_2.csv, la columna 9 (beneficiarios) incluye el CIF y la descripción del beneficiario en el mismo campo. De cara a simplificar el tratamiento de datos, sería beneficioso disponer del CIF y la descripción del beneficiario en columnas separadas.

Ejemplo de datos

beneficiario
G16276230 ASOC. DESARROLLO INTEGRAL DE ZARZUELA
P4309900A NOU DE GAIA LA AJUNTAMENT

Resultado esperado

cif_beneficiario beneficiario
G16276230 ASOC. DESARROLLO INTEGRAL DE ZARZUELA
P4309900A NOU DE GAIA LA AJUNTAMENT

Adicionalmente sería necesario:

  • Verificar que los CIF de los beneficiarios son correctos
  • Unificar el formato de los CIF
  • Eliminar los espacios en blanco del campo CIF
  • Eliminar espacios sobrantes delante y detrás de la descripción.

elsatch avatar Apr 04 '22 15:04 elsatch

En Python, la separación de la columna puede realizarse utilizando la librería pandas de la siguiente forma:

df[['cif_beneficiario','beneficiario']] = df['beneficiario'].str.split(" ", n=1, expand=True)

Para la validación del CIF existe la librería stdnum que ofrece las siguientes funciones:

- stdnum.es.nif.compact(number)
Convert the number to the minimal representation. This strips the number of any valid separators and removes surrounding whitespace.

- stdnum.es.nif.is_valid(number)
Check if the number provided is a valid VAT number. This checks the length, formatting and check digit.

Habría que ver cómo integrarlo para que se ejecutaran estas funciones en todos los elementos de la nueva columna del CIF.

elsatch avatar Apr 04 '22 16:04 elsatch

Habría que ver cómo integrarlo para que se ejecutaran estas funciones en todos los elementos de la nueva columna del CIF.

puedes aplicar funciones con el método .apply() de dataframes o series.

por ejemplo:

from stdnum.es import nif
df.cif_beneficiario.apply(nif.compact).apply(nif.is_valid).mean()
>>> 0.9999847783731125

Saludos!

PastorJordi avatar Apr 04 '22 16:04 PastorJordi

~Leyendo sobre la validación de CIFs, las dos primeras cifras después de la letra inicial indican la provincia de la empresa. Interesante…~

~https://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal~

EDITADO

@elsatch ha estado haciendo trabajo de investigación en el BOE y la identificación por provincias dejó de emplearse en 2008:

https://github.com/JaimeObregon/subvenciones/issues/14#issuecomment-1088985304

dieghernan avatar Apr 05 '22 06:04 dieghernan

@PastorJordi ¿ese cálculo está hecho con los datos reales? Si tenemos 99.9985% de datos del CIF correctos es buena señal.

elsatch avatar Apr 05 '22 09:04 elsatch

No creo que tenga mucha utilidad, pero aquí dejo los CIFs incorrectos por si fuera necesario comprobarlos:

juridicas_1.csv ['F19774357', 'B01815840', 'A09853068', 'A05244224', 'A3044046B', 'A06006722', 'A27005201', 'P4361153A', 'A03600674', 'B34361854', 'J00302274', 'A00106342', 'A50565850', 'A33214225', 'A08664693', 'A11711501', 'P00880949', 'A07620922', 'A10520891', 'A0013588F', 'A03998956', 'P14514512', 'U05970144']

juridicas_2.csv ['D02014002', 'J00302274', 'D02014006', 'A33214225', 'P00880949', 'D02014005', 'A0013588F', 'E27118373', 'D02014004', 'A3044046B', 'U05970144', 'A27005201']

Rsilnav avatar Apr 05 '22 13:04 Rsilnav

@PastorJordi ¿ese cálculo está hecho con los datos reales? Si tenemos 99.9985% de datos del CIF correctos es buena señal.

@elsatch Sí, son datos reales ( donde df proviene de concatenar juridicas_1 con juridicas_2)

PastorJordi avatar Apr 05 '22 13:04 PastorJordi

@Rsilnav buen aporte!

Quizás añadiendo la descripción del beneficiario se podría intentar localizar el CIF correcto, por si hubiera habido un error de transcripción en los datos.

elsatch avatar Apr 05 '22 13:04 elsatch

@Rsilnav buen aporte!

Quizás añadiendo la descripción del beneficiario se podría intentar localizar el CIF correcto, por si hubiera habido un error de transcripción en los datos.

A su servicio 😉

Tienen pinta de ser contraprestaciones a particulares extranjeros con DNI extranjero, por eso no son detectados como válidos. (Excepto la "cas" de Cantabria - eso no tiene perdón)

cif_beneficiario beneficiario
A03600674 RODAS VALLADARES, MARLON ALEXIS
A09853068 KINGSLEY
P14514512 ARACELI BLESSING
A11711501 REBECCA
P4361153A MARIFE
A03998956 SANDRA CAROLINA
A33214225 OCHA - OFICINA DEL COORDINADOR DE ASUNTOS HUMA...
P00880949 ZALOZBA MALINC, ALES CIGALE S.P.
U05970144 SINAN KILIC - ALEF PUBLISHING
A00106342 MISAEL DE JESUS
A05244224 ANA RAQUEL
A06006722 HAPPY
A07620922 DORIS
A08664693 MARIAN
B01815840 FLOR DE AMERICA
A0013588F CASAL CATALÀ DE VICTÒRIA INC.
A27005201 BANCO INTERAMERICANO DE DESARROLLO
F19774357 CLAUDIA FERNANDA
A10520891 MOHAMED
A50565850 DANIELS, JOAN UCHE
A3044046B CLAD CENTRO LATINOAMERICANO DE ADMINISTRACIÓN ...
J00302274 CENTRO RIOJANO VENEZOLANO
B34361854 TEYMOORIAN, NILOOFAR
E27118373 FRIENDS OF HAITÍ IN NEW YORK
D02014002 CASA DE CANTABRIA EN BUENOS AIRES
D02014005 CASA DE CANTABRIA EN CAMAGÜEY
D02014004 CASA DE CANTABRIA EN ROSARIO
D02014006 CAS DE CANTABRIA EN LA HABANA

Rsilnav avatar Apr 05 '22 13:04 Rsilnav

Después de hacerme un minimaster CIFs por el BOE, hay algunas de estos de estos resultados que me chirrían muchísimo.

En teoría las entidades extranjeras deberían comenzar por la letra N, pero no hay ninguna N aquí. Las D son sociedades comanditarias o en comandita (pero claro, a saber cómo registras una Casa de comunidad autónoma en otro país!)

Que el Banco Interamericano de Desarrollo tenga una A en plan S.A es raro también, sobre todo cuando al buscarlo en Google aparece asociado a un NIF correcto: N4006462H

Respecto al resto de resultados con nombres parciales de personas, pueden ser resultado del anonimizador de @JaimeObregon, así que con tenerlos localizados, creo que es suficiente.

elsatch avatar Apr 05 '22 16:04 elsatch

Y hablando de los BOE, me he puesto a escribir una función para calcular las provincias a partir del CIF pero parece que está opción solo es válida para entidades creadas antes del 1 de Julio de 2008. De momento descartaría esta opción @dieghernan para no meter más ruido. Más info, por aquí: https://github.com/elsatch/subvenciones/blob/main/notebooks/informacion-cif.ipynb

P.D En algún momento habrá que volcar toda esta información a la wiki o a donde corresponda.

elsatch avatar Apr 05 '22 16:04 elsatch

Buenas!

Por aportar, he estado programando un validador de CIFs para el paquete de R:

https://github.com/dadosdelaplace/Rsubvenciones_spain/blob/98640a08dfb7ddaa8ca758b90d21d1404927192b/R/helpers.R#L116-L170

El programa capta todos los CIFs ya identificados y ademas cuatro códigos adicionales. Podría ser error mio, pero en cualquier caso lo comparto (con cautela):

cif_beneficiario nombre_beneficiario
A0304203C COMITÉ INTERNACIONAL DE LA CRUZ ROJA NO UTILIZAR (USAR 47010)
A9999991D PNUD - PROGRAMA DE LAS NACIONES UNI
A3232323J ASOCIACIÓN LATINOAMERICANA DE ARCHIVOS
A3215870A OEA - ORGANIZACIÓN DE ESTADOS AMERI

cif_beneficiario beneficiario A03600674 RODAS VALLADARES, MARLON ALEXIS A09853068 KINGSLEY P14514512 ARACELI BLESSING A11711501 REBECCA P4361153A MARIFE A03998956 SANDRA CAROLINA A33214225 OCHA - OFICINA DEL COORDINADOR DE ASUNTOS HUMA... P00880949 ZALOZBA MALINC, ALES CIGALE S.P. U05970144 SINAN KILIC - ALEF PUBLISHING A00106342 MISAEL DE JESUS A05244224 ANA RAQUEL A06006722 HAPPY A07620922 DORIS A08664693 MARIAN B01815840 FLOR DE AMERICA A0013588F CASAL CATALÀ DE VICTÒRIA INC. A27005201 BANCO INTERAMERICANO DE DESARROLLO F19774357 CLAUDIA FERNANDA A10520891 MOHAMED A50565850 DANIELS, JOAN UCHE A3044046B CLAD CENTRO LATINOAMERICANO DE ADMINISTRACIÓN ... J00302274 CENTRO RIOJANO VENEZOLANO B34361854 TEYMOORIAN, NILOOFAR E27118373 FRIENDS OF HAITÍ IN NEW YORK D02014002 CASA DE CANTABRIA EN BUENOS AIRES D02014005 CASA DE CANTABRIA EN CAMAGÜEY D02014004 CASA DE CANTABRIA EN ROSARIO D02014006 CAS DE CANTABRIA EN LA HABANA

dieghernan avatar Apr 06 '22 13:04 dieghernan