+
    ¬•1j"  ã                   ó¤   € ^ RI Ht ^ RIt^ RIt^ RIt^ RIt^ RItR tR tRR lt	R t
RR ltRR ltR	 tR
 tR tR tR tR tRR ltR tR tR# )é    )ÚPROVINCIAS_CON_NUMERONc                óJ   € \        W4      pV'       d   V# \        RWV4      pV# )uÈ   
Ejecuta Regla1 y Regla2 en orden para intentar obtener el CUIT sugerido.
Si Regla1 no resuelve, Regla2 busca por razon_social independientemente
de si habÃ­a un CUIT original (que resultÃ³ inÃºtil).
N)ÚRegla1ÚRegla2)ÚcuitÚrazon_socialÚ	provinciaÚ	conn_readÚsugeridos   &&&& Ú;/home/tomasb/Code/central_edictos/helpers/cuit_homonimia.pyÚbuscar_cuit_sugeridor      s+   € ô �dÓ&€HßØˆô �d˜L°YÓ?€HØ€Oó    c                 ó¶   € V P                  4       p VP                  ! V.VO5!   VP                  4       VP                  4        #   TP                  4        i ; i©N)ÚcursorÚexecuteÚfetchallÚclose)ÚconnÚsqlÚparamsÚcs   &&* r   Ú_execr      s?   € Ø�‰‹€AðØ	�	Š	�#Ð˜ÔØ�z‰z‹|à	�‰�	øˆ�‰�	ús   ’#A ÁAc                 ó    €  \        V R RRVRVRRRRRRR34      #   \         d(   p\        P                  ! RT RT 24        Rp?R# Rp?ii ; i)úFEXEC [dbo].[buscador_paises_padron] ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?ÚmasivosNÚARzError al buscar por CUIT cuit=ú: ©r   Ú	ExceptionÚloggingÚerror)r
   r   Úcod_provinciaÚes   &&& r   Úejecutar_busqueda_cuitr%       sh   € ðÜØØTØ˜˜d D¨-¸¸tÀTÈ4ÐQUÐW[Ð]aÐbó
ð 	
øô
 ô Ü�ŠÐ6°t°f¸B¸q¸cÐBÔCÝûðús   ‚ ›A¦AÁAc                 óö   € \         P                  ! R RV \         P                  R7      p \         P                  ! RRV \         P                  R7      p \         P                  ! RRV \         P                  R7      p V # )ú\bS[\s\.]*A[\s\.]*S\bÚSAS)Úflagsú\bS[\s\.]*R[\s\.]*L\bÚSRLú\bS[\s\.]*A\bÚSA)ÚreÚsubÚ
IGNORECASE)Útextos   &r   Úcompactar_siglasr2   +   sR   € Ü�FŠFÐ+¨U°EÄÇÁÔO€EÜ�FŠFÐ+¨U°EÄÇÁÔO€EÜ�FŠFÐ# T¨5¼¿¹ÔF€EØ€Lr   c                 ó¶   €  \        V4      p\        V R RRVRVRRRRRRR34      #   \         d(   p\        P                  ! RT RT 24        Rp?R# Rp?ii ; i)r   r   Nr   z"Error al buscar por razon_social='ú': )r2   r   r    r!   r"   ©r
   r   r#   r$   s   &&& r   Úejecutar_busqueda_rsr6   1   ss   € ð	Ü'¨Ó5ˆÜØØTØ˜˜l¨D°-ÀÀtÈTÐSWÐY]Ð_cÐeiÐjó
ð 	
øô
 ô Ü�ŠÐ:¸<¸.ÈÈAÈ3ÐOÔPÝûðús   ‚#& ¦A±AÁAc                 ó¦   €  \        V R RRVRVRRRRRRR34      #   \         d+   p\        P                  ! RT RT RT 24        Rp?R# Rp?ii ; i)r   ÚbuscadorNr   z,Error al buscar por provincia razon_social='z' cod_provincia=r   r   r5   s   &&& r   Úejecutar_busqueda_provr9   =   su   € ðÜØØTØ˜˜|¨T°=À$ÈÈdÐTXÐZ^Ð`dÐfjÐkó
ð 	
øô
 ô Ü�ŠÐDÀ\ÀNÐRbÐcpÐbqÐqsÐtuÐsvÐwÔxÝûðús   ‚ ›A¦AÁAc                 ó(  € V '       dŠ   V P                  4       R 8w  du   \        V 4      p \        WR7      ;'       g    . p\        V4      ^8X  d   \        P
                  ! RV  24       V # \        P
                  ! RV  R\        V4       R24       R# R# )Únull)r   u    Regla1: CUIT Ãºnico encontrado: u'   Regla1: sin resultado Ãºnico para cuit=z (encontrados: Ú)N)ÚlowerÚpurgar_cuitr%   Úlenr!   Údebug)r   r
   Ú
resultadoss   && r   r   r   H   s~   € ß�—
‘
“ Ô&Ü˜4Ó ˆÜ+¨IÔA×GÐGÀRˆ
Üˆz‹?˜aÔÜ�MŠMÐ<¸T¸FÐCÔDØˆKä�MŠMÐCÀDÀ6ÈÔY\Ð]gÓYhÐXiÐijÐkÔlÙár   c           
      ó(  € V '       d    \        V 4      P                  4       R 8X  Ed�   V'       Edx   VP                  4       R 8w  Edb   \        V4      p \        W4R7      ;'       g    . pT'       g   \
        P                  ! RT R24       R#  T Uu. uF  qw^,          T^,          3NK  	  pp\        T4      ^8X  d,   T^ ,          ^ ,          p\
        P                  ! RT 24       T# T Uu. uF9  p\        \        T4      4      \        \        T^,          4      4      8X  g   K7  TNK;  	  p	p\        T	4      ^8X  d,   T	^ ,          ^ ,          p\
        P                  ! R	T 24       T# T'       Ed   \        P                  ! TP                  4       P                  4       4      p
T
f   \
        P                  ! R
T R24       T#  \!        Y4T
R7      ;'       g    . pT'       g   \
        P                  ! RT
 24       R#  T Uu. uF  qw^,          T^,          3NK  	  pp\        T4      ^8X  d,   T^ ,          ^ ,          p\
        P                  ! RT 24       T# \
        P                  ! R\        T4       R24       T# \
        P                  ! RT R\        T4       R24       T# \
        P                  ! R4       R#   \         d(   p\
        P                  ! RT RT 24        Rp?R# Rp?ii ; iu upi   \         d    \
        P                  ! RT R24        R# i ; iu upi   \         d+   p\
        P                  ! RT RT
 RT 24        Rp?R# Rp?ii ; iu upi   \         d    \
        P                  ! RT R24        R# i ; i)r;   )r   z+Regla2: error en busqueda_rs razon_social='r4   Nz*Regla2: sin resultados para razon_social='Ú'z?Regla2: estructura inesperada en resultados para razon_social='u   Regla2: RS Ãºnica sugiere u+   Regla2: coincidencia exacta Ãºnica sugiere zRegla2: provincia 'z%' no reconocida, retornando multiples)r   r#   z-Regla2: error en busqueda_prov razon_social='z' cod_prov=r   z/Regla2: sin resultados para provincia cod_prov=zMRegla2: estructura inesperada en resultados por provincia para razon_social='u/   Regla2: resultado Ãºnico por provincia sugiere z9Regla2: multiples resultados tras filtrar por provincia (r<   z>Regla2: multiples resultados sin provincia para razon_social='z' (z$Regla2: sin razon_social para buscar)Ústrr=   Ú_normalizar_razon_socialr6   r    r!   r"   r@   r?   Úpurgar_nombreÚpurgar_espaciosr   ÚgetÚstripÚupperÚinfor9   )r   r   r	   r
   Úrazon_social_limpiarA   r$   ÚrÚcuit_resultÚcoincidencias_exactasÚcod_provs   &&&&       r   r   r   V   sT  € ß”C˜“I—O‘OÓ%¨Õ/·\°\Àl×FXÑFXÓFZÐ^dÕFdÜ6°|ÓDÐð	Ü-¨iÔZ×`Ð`Ð^`ˆJ÷
 Ü�MŠMÐFÀ|ÀnÐTUÐVÔWÙð	Ù0:Ó;±
¨1˜Q�4  1¥›,±
ˆJÐ;ô
 ˆz‹?˜aÔØ$ Q�-¨Õ*ˆKÜ�MŠMÐ6°{°mÐDÔEØÐñ "ó!
Ù!�!Üœ_¨\Ó:Ó;¼}Ì_Ð]^Ð_`Õ]aÓMbÓ?cÑc÷ ˆA‘zð 	ð !
ô Ð$Ó%¨Ô*Ø/°Õ2°1Õ5ˆKÜ�MŠMÐGÈÀ}ÐUÔVØÐçˆ9Ü,×0Ò0°·±Ó1B×1HÑ1HÓ1JÓKˆHØÒÜ—’Ð2°9°+Ð=bÐcÔdØ!Ð!ðÜ3°IÐowÔx×~Ð~Ð|~�
÷
 Ü—’Ð OÐPXÈzÐZÔ[ÙðÙ4>Ó?±J¨q �t Q q¥T›l±J�
Ð?ô
 �:‹ !Ô#Ø(¨�m¨AÕ.�Ü—’Ð OÐP[È}Ð]Ô^Ø"Ð"ä—’ÐXÔY\Ð]gÓYhÐXiÐijÐkÔlØ!Ð!ä�LŠLÐYÐZfÐYgÐgjÔknÐoyÓkzÐj{Ð{|Ð}Ô~ØÐä�ŠÐ<Ô>Ùøô} ô 	Ü�MŠMÐGÈÀ~ÐUXÐYZÐX[Ð\Ô]Ýûð	üò <øÜô 	Ü�MŠMÐ[Ð\hÐ[iÐijÐkÔlÚð	üò!
øô" ô Ü—’Ð MÈlÈ^Ð[fÐgoÐfpÐprÐstÐruÐvÔwÝûðüò @øÜô Ü—’Ð mÐnzÐm{Ð{|Ð}Ô~ÚðúsŠ   ÁK  ÂK: ÂK5Â,K: Ã-4L&Ä&L&ÇL+ ÇL+ È M( ÈM#ÈM( Ë K2ËK-Ë-K2Ë5K: Ë:%L#Ì"L#Ì+M Ì6MÍM Í#M( Í(%NÎNc                ó*  € V '       g   R# \         P                  ! RRV P                  4       P                  4       4      p \         P                  ! RRV 4      p \         P                  ! RRV 4      p \         P                  ! RR	V 4      p V P	                  4       pV Uu. uFS  p\        V4      ^8”  g   K  \        ;QJ d    R
 V 4       F  '       g   K   RM	  RM! R
 V 4       4      '       g   KQ  VNKU  	  ppVR,          pRP                  V4      # u upi )u­   NormalizaciÃ³n para modo 'masivos': compacta siglas pero no las elimina, limita a 15 palabras.
Distinto de helpers.buscar_cuit.limpiar_razon_social, que usa modo 'buscador'.Ú z\s+Ú r'   r(   r*   r+   r,   r-   c              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir   )Úisalnum)Ú.0r   s   & r   Ú	<genexpr>Ú+_normalizar_razon_social.<locals>.<genexpr>©   s   é € Ð9QÉqÈ!¿)¹)¿+¸+Ëqùs   ‚TF:Né   N)r.   r/   rI   rJ   Úsplitr?   ÚanyÚjoin)r1   ÚpalabrasÚps   &  r   rE   rE   œ   sÌ   € ÷ Ùä�FŠF�6˜3 §¡£× 3Ñ 3Ó 5Ó6€Eä�FŠFÐ+¨U°EÓ:€EÜ�FŠFÐ+¨U°EÓ:€EÜ�FŠFÐ# T¨5Ó1€Eà�{‰{‹}€HÙ#ÓR™8�a¤s¨1£v°¡z”·c³cÑ9QÉqÓ9Q·c·c²cÑ9QÉqÓ9Q×6Q—�™8€HÐRØ˜�}€Hà�8‰8�HÓÐùò Ss   ÂDÂ2
DÂ=DÃDÃ.Dc                 ó8  € \         P                  ! R V 4      pRP                  V Uu. uF#  p\         P                  ! V4      '       d   K!  VNK%  	  up4      pVP	                  RR4      P	                  RR4      pVP                  4       P                  4       # u upi )ÚNFKDrR   Ú,Ú.)ÚunicodedataÚ	normalizer\   Ú	combiningÚreplacerI   rJ   )ÚnombreÚnfkdr   Ú
sin_tildesÚlimpios   &    r   rF   rF   °   sz   € Ü× Ò  ¨Ó0€DØ—‘¡TÓJ¡T ´×1FÒ1FÀq×1IŸ!˜!¡TÑJÓK€JØ×Ñ  RÓ(×0Ñ0°°bÓ9€FØ�<‰<‹>×ÑÓ!Ð!ùò Ks   §BÁ
Bc                 ó*   € V P                  R R4      pV# )rS   rR   ©rf   )rg   Úsin_espacioss   & r   rG   rG   ¶   s   € Ø—>‘> # rÓ*€LØÐr   c                 ó*   € V P                  R R4      pV# )Ú-rR   rl   )r   Úsin_guioness   & r   r>   r>   º   s   € Ø—,‘,˜s BÓ'€KØÐr   c                ó   € R pV! V 4      p\        V UUu. uF2  w  rV\        P                  ! RWC! V4      4      P                  4       WV3NK4  	  uppRR7      pV'       g   R# \	        V4      ^8X  d   V^ ,          ^,          # V^ ,          w  r‰p
V^,          ^ ,          pW‹,
          V8¼  d+   \
        P                  ! RV
 RVR RW‹,
          R R	24       V	# \
        P                  ! R
V
 RVR RV^,          ^,           RVR R	2	4       R# u uppi )uÑ   
De una lista de candidatos (cuit, nombre), selecciona el mejor match
comparando con razon_social usando palabras ordenadas + SequenceMatcher.
Retorna el CUIT si hay un ganador claro, None si hay ambigÃ¼edad.
c                 óŽ   € \        V P                  4       P                  4       P                  4       4      pR P	                  V4      # )rS   )Úsortedr=   rI   rZ   r\   )r1   r]   s   & r   Ú
normalizarÚ*seleccionar_mejor_cuit.<locals>.normalizarÄ   s3   € Ü˜%Ÿ+™+›-×-Ñ-Ó/×5Ñ5Ó7Ó8ˆØ�x‰x˜Ó!Ð!r   NT)Úreversez  [MEJOR MATCH] z	 (score: z.2fz, dif: r<   z  [AMBIGUO] Mejor: z (z) vs )rs   ÚdifflibÚSequenceMatcherÚratior?   r!   r@   rK   )r   Ú
candidatosÚumbral_diferenciart   Úbaser   rg   ÚscoresÚmejor_scoreÚ
mejor_cuitÚmejor_nombreÚsegundo_scores   &&&         r   Úseleccionar_mejor_cuitr‚   ¾   s!  € ò"ñ �lÓ#€DÜá'ô	)Ù'‰\ˆTô ×
!Ò
! $¨¨j¸Ó.@Ó
A×
GÑ
GÓ
IÈ4Ó	XÙ'ò	)àô€F÷ ÙÜ
ˆ6ƒ{�aÔØ�a�y˜�|Ðà,2°1­IÑ)€K˜\Ø˜1•I˜a•L€MàÕ"Ð&7Ô7Ü�ŠÐ(¨¨°iÀÈCÐ?PÐPWÐXcÕXsÐtwÐWxÐxyÐzÔ{ØÐä‡L‚LÐ& | n°B°{À3Ð6GÀuÈVÐTUÍYÐWXÍ\ÈNÐZ\Ð]jÐknÐ\oÐopÐqÔrÙùó%	)s   –8D

c                 ó˜   € \        V R RR7      ;_uu_ 4       p\        P                  ! V4      uuRRR4       #   + '       g   i     R# ; i)rM   zutf-8)ÚencodingN)ÚopenÚjsonÚload)ÚpathÚfs   & r   Úcargar_jsonrŠ   ß   s-   € Ü	ˆd�C '×	*Õ	*¨aÜ�yŠy˜‹|÷ 
+×	*×	*Ó	*ús	   —8¸A		c                 ó\   €  V P                  4       '       d   K  R #   \         d     R # i ; ir   )Únextsetr    )r   s   &r   Úconsumir_result_setsr�   ã   s.   € ðØ�n‰n×ÒÙñ øäô Úðús   ‚ ˜ œ+ª+)NN)g333333Ã?)Úhelpers.provinciasr   rw   r†   r!   rc   r.   r   r   r%   r2   r6   r9   r   r   rE   rF   rG   r>   r‚   rŠ   r�   © r   r   Ú<module>r�      se   ðÝ 4Û Û Û Û Û 	òòô	òô
ô	òòDòLò("òòôòBôr   