EL CIF de los beneficiarios está incluido en la misma columna que la descripción de los beneficiarios
elsatch opened this issue · 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.
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.
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!
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:
@PastorJordi ¿ese cálculo está hecho con los datos reales? Si tenemos 99.9985% de datos del CIF correctos es buena señal.
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 ¿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)
@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 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 |
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.
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.
Buenas!
Por aportar, he estado programando un validador de CIFs para el paquete de R:
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