§
    ¾¤Àj�)  ã                  ó¾   — d dl mZ 	 d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZm
Z
mZ d dlmZ d dl	mZ d dlmZ  ej        e¦  «        Z G d„ d¦  «        ZdS )	é    )ÚannotationsN)ÚdateÚdatetimeÚ	timedelta)ÚAny)ÚUUID)Úformat_vn_timec                  ó4   — e Zd ZdZ	 	 	 ddd„Z	 	 	 	 ddd„ZdS )ÚInvoiceGdtFetcherMixinz+Mixin for communicating with GDT endpoints.NÚallÚ	config_idr   Útax_codeÚstrÚusernameÚpasswordÚextraúdict[str, Any]Ú	from_dateú
str | NoneÚto_dateÚ	sync_typeÚreturnc	           	     ó  — t          | d¦  «        rT|                      d|¦  «        \  }	}
|	r9d|› dt          |
¦  «        › d�}t                               d|¦  «         d|d||
dœS |                      ||||¬	¦  «        }|d
         dk    r¼|                     d¦  «        pd}|                     d¦  «        pd}|                      ||||||¬¦  «        \  }}}d|› d|› d�}|r|dd                     |¦  «        › d�z  }t          | d¦  «        r|  	                    d|¦  «         |  
                    |d|¦  «         d|d|||||dœS |                     dd¦  «        }d}
|                     d
¦  «        dk    o|                     dd¦  «        }|r>t          | d¦  «        r.|                      d|d ¬!¦  «        }
|d"t          |
¦  «        › d#�z  }|  
                    ||rd$nd%|¦  «         d||                     d
d¦  «        ||
dœS )&u‹   Káº¿t ná»‘i thá»±c táº¿ vÃ  táº£i hÃ³a Ä‘Æ¡n tá»«ng pháº§n tá»« Cá»•ng HÄ�Ä�T Tá»•ng Cá»¥c Thuáº¿ (vÆ°á»£t Captcha tá»± Ä‘á»™ng báº±ng AI).Úcheck_auth_cooldownÚ
gdt_portalu!   TÃ i khoáº£n Cá»•ng Thuáº¿ (MST: u9   ) Ä‘ang trong thá»�i gian chá»� an toÃ n 3 giá»� (Ä‘áº¿n ut   ) sau láº§n thá»­ tháº¥t báº¡i Ä‘á»ƒ chá»‘ng bá»‹ khÃ³a tÃ i khoáº£n. Ä�Ã£ tá»± Ä‘á»™ng bá»� qua phiÃªn káº¿t ná»‘i.u   â�³ [GDT_AUTH] %sÚcooldown_active)Úservicer   ÚstatusÚmessageÚcooldown_until)r   r   r   Úextra_configr   ÚsuccessÚtokenÚ Úcookie_header)r#   r   r   r   r   r%   u/   Ä�Ã£ káº¿t ná»‘i Tá»•ng Cá»¥c Thuáº¿ vÃ  náº¡p u    hÃ³a Ä‘Æ¡n má»›i (u    Ä‘Ã£ tá»“n táº¡i).u    Chi tiáº¿t: z, ú.Úclear_auth_cooldownÚSUCCESS)r   r   r   r   Únew_importedÚ
duplicatesr   r   r   u    Lá»—i xÃ¡c thá»±c Cá»•ng Thuáº¿.NÚ
auth_errorÚis_auth_errorTÚset_auth_cooldowng      @)ÚhoursuK    (Ä�Ã£ tá»± Ä‘á»™ng kÃ­ch hoáº¡t cháº¿ Ä‘á»™ chá»� an toÃ n 3 giá»� Ä‘áº¿n u#    Ä‘á»ƒ chá»‘ng khÃ³a tÃ i khoáº£n).Ú
AUTH_ERRORÚAI_ERROR)Úhasattrr   r	   ÚloggerÚwarningÚ_authenticate_gdt_portalÚgetÚ_fetch_and_persist_gdt_invoicesÚjoinr'   Ú_update_sync_statusr-   )Úselfr   r   r   r   r   r   r   r   Úin_cooldownÚcd_untilÚmsgÚauth_resÚ	jwt_tokenr%   Ú	new_countÚ	dup_countÚdetailsÚerr_msgÚis_real_auth_errs                       úRC:\Projects\DSCons\app\modules\invoices\infrastructure\adapters\gdt\gdt_fetcher.pyÚ_execute_real_gdt_connectionz3InvoiceGdtFetcherMixin._execute_real_gdt_connection   s  € õ �4Ð.Ñ/Ô/ð 	Ø$(×$<Ò$<¸\È8Ñ$TÔ$TÑ!ˆK˜Øð ðn¸ð nð nÝ-¨hÑ7Ô7ðnð nð nð õ —’Ð2°CÑ8Ô8Ð8à+Ø (Ø/Ø"Ø&.ðð ð ð ×0Ò0Ø¨¸8ÐRWð 1ñ 
ô 
ˆð �HÔ Ò*Ð*Ø Ÿš WÑ-Ô-Ð3°ˆIØ$ŸLšL¨Ñ9Ô9Ð?¸RˆMØ,0×,PÒ,PØØ!Ø#ØØ#Ø+ð -Qñ -ô -Ñ)ˆI�y 'ð AÀIð  Að  AÐbkð  Að  Að  AˆCØð =ØÐ< t§y¢y°Ñ'9Ô'9Ð<Ð<Ð<Ñ<�å�tÐ2Ñ3Ô3ð AØ×(Ò(¨°xÑ@Ô@Ð@à×$Ò$ Y°	¸3Ñ?Ô?Ð?à'Ø$Ø#ØØ )Ø'Ø&Ø"ð	ð 	ð 	ð —l’l 9Ð.PÑQÔQˆGØˆHØ (§¢¨XÑ 6Ô 6¸,Ò FÐoÈHÏLÊLÐYhÐjnÑLoÔLoÐØð g¥G¨DÐ2EÑ$FÔ$Fð gØ×1Ò1°,ÀÐPSÐ1ÑTÔT�Øð  gÕiwð  yAñ  jBô  jBð  gð  gð  gñ  g�Ø×$Ò$ YÐ@PÐ0`°°ÐV`ÐbiÑjÔjÐjà'Ø$Ø"Ÿ,š, x°Ñ>Ô>Ø"Ø"*ðð ð ó    r$   r#   r%   útuple[int, int, list[str]]c                óV
  — ddl }t          j        ¦   «         }|s|}	n;	 t          j        |d¦  «                             ¦   «         }	n# t
          $ r |}	Y nw xY w|s|	t          d¬¦  «        z
  }
nL	 t          j        |d¦  «                             ¦   «         }
n## t
          $ r |	t          d¬¦  «        z
  }
Y nw xY w|
|	k    r|	|
}	}
g }|
}||	k    r®|                     |j        |j	        ¦  «        \  }}t          |j        |j	        |¦  «        }t          ||	¦  «        }|                     ||f¦  «         |j	        dk    rt          |j        dz   dd¦  «        }nt          |j        |j	        dz   d¦  «        }||	k    °®t          j        ¦   «         }d|_        t          j        |_        d}d}g }g }|d	v r|                     d
¦  «         |dv r|                     d¦  «         |D �]\  }}|                     d¦  «        }|                     d¦  «        }d|› d|› d�}|D �]¤\  }}d}d}d}|dk    rdnd} |rd|› �nd|pdddddt%          t'          j        ¦   «         ¦  «        dt*          j                             | ¦  «        dœ	}!||k     �r7|dz  }d|› d|› �}"|r%|"dt*          j                             |¦  «        › �z  }"t%          t'          j        ¦   «         ¦  «        |!d <   	 t*          j                             |"|!¬!¦  «        }#t*          j                             |#d"|¬#¦  «        5 }$t7          j        |$                     ¦   «                              d$¦  «        ¦  «        }%|%                     d%¦  «        p-|%                     d&¦  «        ptA          |%tB          ¦  «        r|%ng }&d}'d}(|&D ]O})tA          |)tD          ¦  «        r8|  #                    |)||¦  «        }*|*d'k    r|'dz  }'|dz  }Œ?|*d(k    r
|(dz  }(|dz  }ŒP|%                     d)¦  «        }|rtI          |&¦  «        dk    r	 ddd¦  «         �Œ	 ddd¦  «         n# 1 swxY w Y   nq# tJ          $ rd}+tL           '                    d*|› d+|› d,|› d-|+› �¦  «         |                     d.|› d,|› d/t%          |+¦  «        dd…         › d0�¦  «         Y d}+~+nd}+~+ww xY w||k     �°7�Œ¦tL           (                    d1|› d2|› d3|› d4|› �¦  «         �Œ	|d5k    rd6n	|dk    rd7nd8},|                     |,› d/tI          |¦  «        › d9�¦  «         |||fS ):u£  Truy váº¥n danh sÃ¡ch hÃ³a Ä‘Æ¡n tá»« Cá»•ng Thuáº¿ theo khoáº£ng thá»�i gian vÃ  lÆ°u trá»¯ vÃ o PostgreSQL.

        Quy Ä‘á»‹nh Cá»•ng Thuáº¿: Khoáº£ng thá»�i gian má»—i láº§n truy váº¥n khÃ´ng Ä‘Æ°á»£c vÆ°á»£t quÃ¡ 1 thÃ¡ng.
        HÃ m tá»± Ä‘á»™ng phÃ¢n rÃ£ (chunking) khoáº£ng ngÃ y báº¥t ká»³ thÃ nh cÃ¡c ká»³ thÃ¡ng liÃªn tiáº¿p
        vÃ  há»— trá»£ phÃ¢n trang con trá»� (state cursor pagination).
        r   Nz%Y-%m-%dé   )Údaysé   é   F)r   Úpurchase)ÚinputrM   )r   Úsold)ÚoutputrO   z%d/%m/%Yz	tdlap=ge=zT00:00:00;tdlap=le=z	T23:59:59é   rM   u!   TÃ¬m kiáº¿m (hÃ³a Ä‘Æ¡n mua vÃ o)u    TÃ¬m kiáº¿m (hÃ³a Ä‘Æ¡n bÃ¡n ra)zBearer r$   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36z!application/json, text/plain, */*z7https://hoadondientu.gdt.gov.vn/tra-cuu/tra-cuu-hoa-donzhttps://hoadondientu.gdt.gov.vnz/tra-cuu/tra-cuu-hoa-don)	ÚAuthorizationÚCookiez
User-AgentÚAcceptÚRefererÚOriginú
request-idz	end-pointÚactionz3https://hoadondientu.gdt.gov.vn/api/query/invoices/z ?sort=tdlap:desc&size=50&search=z&state=rW   )Úheadersé   )ÚtimeoutÚcontextzutf-8ÚdatasÚitemsÚnewÚdupÚstatezError fetching GDT invoices (z) for ú-z: u   Lá»—i z (ú)zSynced chunk z to z: new=z, dup=r   u   Mua vÃ o & BÃ¡n rau   Mua vÃ ou   BÃ¡n rau    ká»³ thÃ¡ng)))Úcalendarr   Útodayr   ÚstrptimeÚ
ValueErrorr   Ú
monthrangeÚyearÚmonthÚminÚappendÚsslÚcreate_default_contextÚcheck_hostnameÚ	CERT_NONEÚverify_modeÚstrftimer   ÚuuidÚuuid4ÚurllibÚparseÚquoteÚrequestÚRequestÚurlopenÚjsonÚloadsÚreadÚdecoder5   Ú
isinstanceÚlistÚdictÚ_persist_gdt_raw_invoiceÚlenÚ	Exceptionr2   r3   Úinfo)-r9   r#   r   r   r   r   r%   rd   re   Úto_dÚfrom_dÚchunksÚcurrÚ_Úlast_dayÚcurr_month_endÚ	chunk_endÚctxÚ	total_newÚ	total_duprA   Údirections_to_syncÚs_dÚe_dÚs_strÚe_strÚsearch_paramÚ	directionÚ	path_typeÚstate_cursorÚ
page_countÚ	max_pagesÚaction_labelrY   ÚurlÚreqÚrespÚdataÚinvoices_listÚ	chunk_newÚ	chunk_dupÚraw_invÚresÚeÚ	dir_labels-                                                rD   r6   z6InvoiceGdtFetcherMixin._fetch_and_persist_gdt_invoicesg   sØ  € ð 	ˆˆˆå”
‘”ˆØð 	ØˆDˆDðÝÔ(¨°*Ñ=Ô=×BÒBÑDÔD��øÝð ð ð Ø���ðøøøð ð 	3Ø�I¨2Ð.Ñ.Ô.Ñ.ˆFˆFð3Ý!Ô*¨9°jÑAÔA×FÒFÑHÔH��øÝð 3ð 3ð 3Ø¥	¨rÐ 2Ñ 2Ô 2Ñ2���ð3øøøð �DŠ=ˆ=Ø �DˆFð +-ˆØˆØ�dŠlˆlØ"×-Ò-¨d¬i¸¼ÑDÔD‰KˆAˆxÝ! $¤)¨T¬Z¸ÑBÔBˆNÝ˜N¨DÑ1Ô1ˆIØ�MŠM˜4 Ð+Ñ,Ô,Ð,ØŒz˜RÒÐÝ˜DœI¨™M¨1¨aÑ0Ô0��å˜DœI t¤z°A¡~°qÑ9Ô9�ð �dŠlˆlõ Ô(Ñ*Ô*ˆØ"ˆÔÝœ-ˆŒàˆ	Øˆ	ØˆàÐØÐ+Ð+Ð+Ø×%Ò%Ð&;Ñ<Ô<Ð<Ø˜Ð'Ð'Ø×%Ò%Ð&8Ñ9Ô9Ð9àð J	ñ J	‰HˆC�Ø—L’L Ñ,Ô,ˆEØ—L’L Ñ,Ô,ˆEØQ uÐQÐQÀÐQÐQÐQˆLà(:ð Añ AÑ$�	˜9Ø#�Ø�
Ø�	ð ! JÒ.Ð.ð 8Ð7à;ð ð ;@Ð%GÐ%6¨uÐ%6Ð%6Ð%6ÀRØ+Ð1¨rð #TØAØXØ?Ý"%¥d¤j¡l¤lÑ"3Ô"3Ø!;Ý$œl×0Ò0°Ñ>Ô>ð
ð 
�ð ! 9Ò,Ñ,Ø !‘O�Jð JÐPYð  Jð  Jð  |Hð  Jð  J�CØ#ð LØÐK­¬×);Ò);¸LÑ)IÔ)IÐKÐKÑK˜å,/µ´
±´Ñ,=Ô,=�G˜LÑ)ð"Ý$œn×4Ò4°SÀ'Ð4ÑJÔJ˜Ý#œ^×3Ò3Ø¨°Sð 4ñ ô ð &à!Ý#'¤:¨d¯iªi©k¬k×.@Ò.@ÀÑ.IÔ.IÑ#JÔ#J˜Dà $§¢¨Ñ 1Ô 1ð !LØ#'§8¢8¨GÑ#4Ô#4ð!Lå,6°t½TÑ,BÔ,BÐ$J D DÈð *ð )*˜IØ()˜IØ+8ð 
7ð 
7 Ý#-¨gµtÑ#<Ô#<ð 	!7Ø*.×*GÒ*GØ(/°¸Hñ+&ô +& Cð (+¨e¢| |Ø(1°Q©¨	Ø(1°Q©¨	¨	Ø),°ª¨Ø(1°Q©¨	Ø(1°Q©¨	øà+/¯8ª8°GÑ+<Ô+<˜LØ#/ð &µ3°}Ñ3EÔ3EÈÒ3JÐ3JØ %ð5&ð &ð &ñ &ô &ð &ñ &ð2 4Kð3&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &øøõ6 %ð ð ð ÝŸšØa¸IÐaÐaÈUÐaÐaÐUZÐaÐaÐ^_ÐaÐañô ð ð  ŸšÐ'O°Ð'OÐ'O¸Ð'OÐ'OÅÀQÁÄÈÈÈÄÐ'OÐ'OÐ'OÑPÔPÐPØ˜˜˜˜øøøøðøøøðK ! 9Ò,Ñ,ùõX �KŠKØT ÐTÐT¨5ÐTÐT¸	ÐTÐTÈÐTÐTñô ð ñ ð ˜EÒ!Ð!ð !Ð à )¨ZÒ 7Ð 7�*�*¸Yð 	ð
 	�Š˜)ÐAÐA¥s¨6¡{¤{ÐAÐAÐAÑBÔBÐBØ˜) WÐ,Ð,sh   ž'A ÁAÁAÁ/'B ÂB7Â6B7Ë#AQ
Ì&C>P>Ð$Q
Ð2Q
Ð>QÑQ
ÑQÑQ
Ñ

R8ÑAR3Ò3R8)NNr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )NNr   r$   )r#   r   r   r   r   r   r   r   r   r   r%   r   r   rG   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rE   r6   © rF   rD   r   r      sr   € € € € € Ø5Ð5ð !%Ø"ØðLð Lð Lð Lð Lðd !%Ø"ØØðR-ð R-ð R-ð R-ð R-ð R-ð R-rF   r   )Ú
__future__r   r{   Úloggingrm   Úurllib.errorru   Úurllib.parseÚurllib.requestrs   r   r   r   Útypingr   r   Úapp.core.vn_timer	   Ú	getLoggerr¨   r2   r   r¬   rF   rD   ú<module>rµ      s  ðØ "Ð "Ð "Ð "Ð "Ð "à 9ð €€€Ø €€€Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à +Ð +Ð +Ð +Ð +Ð +à	ˆÔ	˜8Ñ	$Ô	$€ðc-ð c-ð c-ð c-ð c-ñ c-ô c-ð c-ð c-ð c-rF   