JaimeObregon / subvenciones

Volcado de la Base de Datos Nacional de Subvenciones (BDNS).
GNU General Public License v3.0
235 stars 55 forks source link

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

Open elsatch opened 2 years ago

elsatch commented 2 years ago

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:

elsatch commented 2 years ago

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.

PastorJordi commented 2 years ago

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!

dieghernan commented 2 years ago

~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

elsatch commented 2 years ago

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

Rsilnav commented 2 years ago

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']

PastorJordi commented 2 years ago

@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)

elsatch commented 2 years ago

@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.

Rsilnav commented 2 years ago

@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
elsatch commented 2 years ago

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 commented 2 years ago

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.

dieghernan commented 2 years ago

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