o
    ‘Äcjj/  ã                   @   s’  d dl Z d dlZd dlZd dlZej ej ej e¡dd¡¡Z	ej 
d e	¡ d dlmZmZmZmZ d dlmZ d dlmZmZ d dlmZ h d£Zdd	„ Zd
d„ Zd[dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#d d!„ Z$d"d#„ Z%e&d$k�rÇe'ej(ƒd%kr•ej(d% nd&Z)e)evr­e*d'e)›d(d) e¡› �ƒ e +d%¡ ed*ƒ e ,d+e)› �¡ eƒ Z-eƒ Z.ed,e)d-d.fe-ƒZ/d d d d d d d d/œZ0e1e/d%d0�D �]ª\Z2Z3e3d  Z4e3d% Z5e3d1 Z6e'e3ƒd2króe3d2 ndZ7e'e3ƒd3krÿe3d3 ndZ8e'e3ƒd4k�re3d4 ndZ9e ,d5e2› d6e4› d7e5› d8e6› d9�	¡ �z.ee-e5e6e7ƒ\Z:Z;Z<Z=e:�r^e#e.e:e;e4e)ƒ e<d:k�rFe0d;  d%7  < ne0d<  d%7  < e ,d=e<› d>e:› d?e;› �¡ W qØe ,d@e<› �¡ e8�r‘ee-e6e8ƒ\Z>Z?e>�r‘e#e.e>e?e4e)ƒ e0d<  d%7  < e ,dAe>› d?e?› �¡ W qØdBZ@e)d&k�r)e9�r)e e-e9ƒ\ZAZBZCeA�sáe ,dCe9› dD�¡ ee-deBeCƒ\ZAZDZEZFeA�rÙe#e.eAeDe9d&ƒ e0dE  d%7  < e ,dFeE› d>eA› �¡ ne ,dGeE› �¡ eA�re=�re"e-e=e6eAƒ\ZGZHZIeG�re#e.eGeHe4e)ƒ e0dH  d%7  < dIZ@e ,d=eI› d>eG› d?eH› �¡ ne ,dJeI› �¡ neA�r)e=�s)e ,dK¡ e@�sNdLe<v �r@e0dM  d%7  < e%e.e4e)ƒ ne0dN  d%7  < e$e.e4e)ƒ W qØ eJ�yƒ ZK z'e0dO  d%7  < e LdPeK› �¡ ze. M¡  W n
 eJ�yx   Y nw W Y dZK[KqØdZK[Kww e'e/ƒZNe0d; e0d<  e0dH  ZOe ,dQe)› dReN› dSeO› dTe0d; › dUe0d< › dVe0dH › dWe0dE › dXe0dM › dYe0dN › dZe0dO › �¡ dS dS )\é    Nz..)ÚconectarÚconectar_readonlyÚejecutar_spÚejecutar_sp_raw)ÚPROVINCIAS_CON_NUMERO)Ú_normalizar_razon_socialÚseleccionar_mejor_cuit)Úsetup_logging>   Ú
edictos_iaÚ-sociedades_constituciones_relaciones_personasÚ/sociedades_constituciones_relaciones_vinculadasc                 G   s8   |   ¡ }z|j|g|¢R Ž  | ¡ W | ¡  S | ¡  w ©N)ÚcursorÚexecuteÚfetchallÚclose)ÚconnÚsqlÚparamsÚc© r   úP/home/develop/edictos_py/central_edictos/procesamiento/homonimia/homonimia_v2.pyÚ_exec   s
   r   c                 C   s0   t | ƒ dd¡ dd¡ dd¡ dd¡ dd¡S )Nú"Ú ú'z, '').replace()r   Úreplace)Útextor   r   r   Ú_limpiar_criterio   s   ýr   c                 C   s$   t | ddd |d|d d d d d d d fƒS )NzFEXEC [dbo].[buscador_paises_padron] ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?ÚbuscadorÚAR)r   )Ú	conn_readÚcriterioÚcod_provr   r   r   Ú_buscar_en_padron%   s
   ýr$   c                 C   sP   | r
t | ƒ ¡ dkrt|ƒn| }|r"t|t ƒr"t t |ƒ ¡  ¡ ¡nd }||fS )NÚnull)ÚstrÚlowerr   Ú
isinstancer   ÚgetÚstripÚupper)ÚcuitÚnombreÚ	provinciar"   r#   r   r   r   Ú_preparar_busqueda,   s    (r/   c                    s   t ‡ fdd„| D ƒd ƒS )Nc                 3   s$   � | ]}|d  ˆ kr|d V  qdS )é   é   Nr   ©Ú.0Úr©r,   r   r   Ú	<genexpr>2   s   €" z'_id_padron_para_cuit.<locals>.<genexpr>)Únext)Ú
candidatosr,   r   r5   r   Ú_id_padron_para_cuit1   s   r9   c           	      C   sŽ   | }dd„ |D ƒ}|d ur6t |||ƒpg }|r6dd„ |D ƒ}t|ƒdkr0|d d |d d fS |r6|}|}t||ƒ}||rDt||ƒfS d fS )Nc                 S   ó   g | ]
}|d  |d f‘qS ©r0   é   r   r2   r   r   r   Ú
<listcomp>6   ó    z&resolver_multiples.<locals>.<listcomp>c                 S   r:   r;   r   r2   r   r   r   r=   ;   r>   é   r   r1   )r$   Úlenr   r9   )	r8   r"   r#   r!   ÚsourceÚparesÚ	filtradosÚpares_filtradosr,   r   r   r   Úresolver_multiples4   s   
rE   c                 C   sJ  |sdS d  ttjt|ƒƒ¡}|rt|ƒdkrdS z|  ¡ }| d||f¡ dd„ |jD ƒ}| ¡ }| 	¡  W n! t
yX } zt d|› d|› d	|› �¡ W Y d
}~dS d
}~ww |s]dS tt||d ƒƒ}| d¡}	|	sodS | d¡pud}
t|ƒ}t|
ƒ}t d
||¡ ¡ }|dk rœt d|› d|
› d|d›�¡ dS t|	ƒ| d¡fS )zRDevuelve (cuit, id_padron) buscando por DNI+nombre, o (None, None) si no resuelve.)NNr   é   z&{CALL sp_buscar_cuit_dni_nombre (?,?)}c                 S   s   g | ]}|d  ‘qS )r   r   )r3   Úcolr   r   r   r=   O   s    z$resolver_via_dni.<locals>.<listcomp>z    DNI_ERROR | nombre='z' dni='z' error=Nr   r,   r-   g333333ã?z"    DNI_NOMBRE_NO_MATCH | nombre='ú
' padron='z' sim=z.2fÚ	id_padron)ÚjoinÚfilterr&   Úisdigitr@   r   r   Údescriptionr   r   Ú	ExceptionÚloggingÚerrorÚdictÚzipr)   r   ÚdifflibÚSequenceMatcherÚratioÚinfo)r!   r-   ÚdniÚ
dni_limpior   ÚcolumnsÚrowsÚeÚrowÚcuit_padronÚnombre_padronÚnombre_normÚnombre_p_normÚ	similitudr   r   r   Úresolver_via_dniE   s<   €þ
rb   c                 C   sj  |rt |ƒ ¡ dkr| dd¡nd}|reddlm} || |d�p!g }t|ƒdkrR|d d	 }|rDt|ƒt|ƒkrDt d
|› d|› d�¡ |d d |d d d|fS t|ƒdkret	||ƒ}|re||d|fS t
|||ƒ\}	}
|	sudddg fS t| |	ƒ}t|ƒ}|dkr�|d d |d d d|fS |dkr¯t||	|
| ƒ\}}|r¥||d|fS ddd|› d�|fS dddg fS )z:Devuelve (cuit_encontrado, id_padron, motivo, candidatos).r%   ú-r   Nr   )Úejecutar_busqueda_cuitr5   r?   r<   z#    CUIT_NOMBRE_MISMATCH | fuente='rH   u%   ' â€” se asigna igual por CUIT Ãºnicor0   r1   õ   ÃºnicoÚcuit_directozsin criterioÚfuzzyu   mÃºltiple sin ganador (z candidatos)zsin resultados)r&   r'   r   Úhelpers.cuit_homonimiard   r@   r   rO   rV   r9   r/   r$   rE   )r!   r,   r-   r.   Úcuit_limpiord   Úresultados_cuitr^   rI   r"   r#   Ú
resultadosÚnÚcuit_encontrador   r   r   Úbuscar_y_resolveri   s4   $

rn   c                 C   s8   t d|f| ƒ}|r|d d |d d |d d fS dS )NÚEDT_homonimia_obtener_sociedadr   r?   r1   )NNN)r   )r!   Úid_fiderZ   r   r   r   Úobtener_edicto_padre‹   s   "rq   c                 C   sn   t ƒ }td|f| ƒpg }|D ]}|d r| |d ¡ qtd|f| ƒp$g }|D ]}|d r4| |d ¡ q'|S )zMDevuelve set de CUITs que aparecen en socios o accionistas para esa sociedad.ÚEDT_homonimia_buscar_en_sociosr   Ú#EDT_homonimia_buscar_en_accionistas)Úsetr   Úadd)r!   Úcuit_socÚcuitsrZ   r4   r   r   r   Úcuits_en_tablas_historicas‘   s   €€rx   c                    s”   t | |ƒ‰ ˆ s	dS ‡ fdd„|D ƒ}|sdS t|ƒdkr)|d d |d d d	fS d
d„ |D ƒ}t||ƒ}|r?|t||ƒdfS dddt|ƒ› d�fS )z#Devuelve (cuit, id_padron, motivo).)NNu   sin histÃ³ricosc                    s   g | ]
}|d  ˆ v r|‘qS )r0   r   r2   ©Ú
historicosr   r   r=   ¤   r>   z+resolver_via_historicos.<locals>.<listcomp>)NNu!   sin intersecciÃ³n con histÃ³ricosr?   r   r0   r1   u   histÃ³rico Ãºnicoc                 S   r:   r;   r   r2   r   r   r   r=   «   r>   u   histÃ³rico fuzzyNu"   histÃ³rico mÃºltiple sin ganador (ú))rx   r@   r   r9   )r!   r8   r-   rv   ÚmatchesrB   Úcuit_ganadorr   ry   r   Úresolver_via_historicosž   s   

r~   c                 C   s    t d||||f| ƒ |  ¡  d S )NÚEDT_homonimia_asignar_cuit©r   Úcommit)r   r,   rI   Ú	id_edictoÚtablar   r   r   Úasignar²   s   r„   c                 C   ó   t d||f| ƒ |  ¡  d S )NÚEDT_homonimia_marcar_negativor€   ©r   r‚   rƒ   r   r   r   Úmarcar_negativo¶   ó   rˆ   c                 C   r…   )NÚEDT_homonimia_marcar_multipler€   r‡   r   r   r   Úmarcar_multipleº   r‰   r‹   Ú__main__r?   r
   zTabla no permitida: z. Opciones: z, Ú	homonimiazPROCESO_INICIADO | tabla=ÚEDT_homonimia_obtenerz
2016-01-01z
2020-01-01)Úasignado_directoÚasignado_fuzzyÚsociedad_resueltaÚasignado_historicoÚmultiple_sin_ganadorÚsin_resultadosrP   )Ústartr1   r0   r<   é   ú[z] id=z cuit=z	 nombre='r   re   r�   r�   z    ASIGNADO (z): z id_padron=z    z    ASIGNADO (dni): Fz    Sociedad sin CUIT (id_fide=z), intentando resolverla...r‘   z    SOCIEDAD ASIGNADA (u#       Sociedad tambiÃ©n irresoluble: r’   Tz    Irresoluble: u:       Sin candidatos del padrÃ³n para cruzar con histÃ³ricosu	   mÃºltipler“   r”   rP   z    ERROR: zPROCESO_FINALIZADO | tabla=z total=z asignados=z	 directo=z fuzzy=z historico=z sociedad_resuelta=z
 multiple=z sin_resultado=z	 errores=r   )PrS   rO   ÚsysÚosÚpathÚabspathrJ   ÚdirnameÚ__file__ÚBASE_DIRÚinsertÚ
helpers.dbr   r   r   r   Úhelpers.provinciasr   rh   r   r   Úhelpers.logging_setupr	   Ú_TABLAS_PERMITIDASr   r   r$   r/   r9   rE   rb   rn   rq   rx   r~   r„   rˆ   r‹   Ú__name__r@   Úargvrƒ   ÚprintÚexitrV   r!   Ú
conn_writeÚholaÚstatsÚ	enumerateÚiÚedictor‚   r,   r-   r.   rW   rp   rm   Úid_padron_encontradoÚmotivor8   Úcuit_dniÚid_padron_dniÚresuelto_historicorv   Úrs_socÚprov_socÚid_padron_socÚ
motivo_socÚ_Úcuit_historicoÚid_padron_historicoÚmotivo_histrN   r[   rP   ÚrollbackÚtotalÚ	asignadosr   r   r   r   Ú<module>   sü    
$"

ù
$


€ÿ€ûÿÿþþýýýÿž