§
    4T·j¾7  ã                   ó�   — d dl Z d dlZd dlZd dlmZmZ d dlmZmZ d dlm	Z	 ddl
mZ  ej        e¦  «        Z G d„ d¦  «        ZdS )	é    N)ÚdateÚdatetime)ÚROUND_HALF_UPÚDecimal)ÚAnyé   )Ú
to_decimalc                   ó:   — e Zd ZdZdeeef         dededefd„ZdS )ÚInvoiceStorageGdtRawMixinz-Mixin for persisting GDT raw invoice records.ÚrawÚfallback_directionÚmy_tax_codeÚreturnc                 óp  — t          |                     d¦  «        p|                     d¦  «        pd¦  «                             ¦   «         }t          |                     d¦  «        p|                     d¦  «        pd¦  «                             ¦   «         }t          |                     d¦  «        p|                     d¦  «        pd¦  «                             ¦   «         }t          |                     d	¦  «        p|                     d
¦  «        pd¦  «                             ¦   «         }t          |                     d¦  «        p|                     d¦  «        pd¦  «                             ¦   «         }t          |                     d¦  «        p|                     d¦  «        pd¦  «                             ¦   «         }	|	                     ¦   «         r|	                     d¦  «        n|	}
t          |                     d¦  «        p|                     d¦  «        pd¦  «                             ¦   «         }t          |                     d¦  «        p|                     d¦  «        pd¦  «                             ¦   «         }	 d|v r@t          j        |                     d¦  «        d         ¦  «                             ¦   «         }n[d|v r(t          j	        |d¦  «                             ¦   «         }n/t          j	        |dd…         d¦  «                             ¦   «         }n## t          $ r t          j        ¦   «         }Y nw xY w|                     d¦  «        p)|                     d ¦  «        p|                     d!¦  «        }|                     d"¦  «        p|                     d#¦  «        pd}t          |¦  «        }t          |¦  «        }|                     d$¦  «        pg }|rct          |t          ¦  «        rNt          |¦  «        dk    r;t!          d%„ |D ¦   «         ¦  «        }t!          d&„ |D ¦   «         ¦  «        }|dk    r|}nR|                     d'¦  «        r#t          |                     d'¦  «        ¦  «        }n||k    r||z
  nt#          d(¦  «        }|t#          d(¦  «        k    r|dk    s|dk    r||z   }t#          d)¦  «        }|dk    rC|dk    r=||z  t#          d*¦  «        z                       t#          d+¦  «        t&          ¬,¦  «        }n|dk    r|dk    rt#          d-¦  «        }|r|r	||k    rd.}n|r|r	||k    rd/}n|}|› d0|› d0|
› d0|› d0|› �	}t)          j        |                     d1¦  «        ¦  «                             ¦   «         }t          |                     d2¦  «        p|                     d3¦  «        pd¦  «        }d4d5d6d7d8œ}|                     d9d:¦  «        }|                     |d4¦  «        }d}|                     d;¦  «        rM	 t          j        t          |d;         ¦  «                             d<d=¦  «        ¦  «        }n# t          $ r Y nw xY w|sË|                     d>¦  «        r¶d?t          |d>         ¦  «        v rŸ	 t          |d>         t           ¦  «        rt3          j        |d>         ¦  «        n|d>         }|                     d?¦  «        r;t          j        t          |d?         ¦  «                             d<d=¦  «        ¦  «        }n# t          $ r Y nw xY w|s t          |j        |j        |j        ¦  «        }|                      ¦   «         5 }|                     ¦   «         5 } |                       d@||||
f¦  «         |  !                    ¦   «         r	 ddd¦  «         ddd¦  «         dAS 	 |                       dB||
||||||                     dCd¦  «        |||                     dDd¦  «        |||||                     dEd¦  «        ||t3          j"        |dF¬G¦  «        |||f¦  «         |  !                    ¦   «         }!|!s	 ddd¦  «         ddd¦  «         dAS |!rt          |!tF          ¦  «        r|!dH         n|!r|!d         nd}"nu# t          $ rh}#dIt          |#¦  «         $                    ¦   «         v s#dJt          |#¦  «         $                    ¦   «         v rY d}#~#ddd¦  «         ddd¦  «         dAS ‚ d}#~#ww xY w|                     dK¦  «        }$|$r)t          |$t          ¦  «        rt          |$¦  «        dk    �r„|                     d$¦  «        pg }|�r*t          |t          ¦  «        �rt          |¦  «        dk    �r g }$tK          |d:¬L¦  «        D ]ë\  }%}&t          |&                     dM¦  «        pdN¦  «                             dOd¦  «                             ¦   «         }'t          |&                     dP¦  «        t#          d(¦  «        ¬Q¦  «        }(t          |&                     dR¦  «        t#          d(¦  «        ¬Q¦  «        })|$ &                    |%dS|
› dT|› dU�dV|%dW›�dXt#          dY¦  «        |(|(|'› dO�|)dZœ	¦  «         Œìn@|dk    s|dk    r4d:dS|
› dT|› dU�d[dXt#          dY¦  «        |dk    r|n||dk    r|n||› dO�|dZœ	g}$|$�rÃt          |$t          ¦  «        �r­t          |$¦  «        dk    �r™|$D �]•}*tO          |*                     d\¦  «        pd:¦  «        }+t          |*                     d]¦  «        pd^¦  «                             ¦   «         },t          |*                     d_¦  «        pd¦  «                             ¦   «         }-t          |*                     d`¦  «        pdX¦  «                             ¦   «         }.t          |*                     da¦  «        t#          d(¦  «        ¬Q¦  «        }/t          |*                     db¦  «        t#          d(¦  «        ¬Q¦  «        }0t          |*                     dP¦  «        t#          d(¦  «        ¬Q¦  «        }1t          |*                     dc¦  «        pdN¦  «                             dOd¦  «                             ¦   «         }2	 t          |2t#          dd¦  «        ¬Q¦  «        }3n# t          $ r t#          dd¦  «        }3Y nw xY w|*                     dR¦  «        �"t          |*                     dR¦  «        ¦  «        n;|1|3z  t#          d*¦  «        z                       t#          de¦  «        t&          ¬,¦  «        }4|1|4z   }5|  (                    |,|-¦  «        }6|                       df|"|+|,|-|.|/|0|1|3|4|5|6f¦  «         �Œ—|                       dg|"t3          j"        dh|                     dHd¦  «        diœdF¬G¦  «        f¦  «         | )                    ¦   «          	 ddd¦  «         ddd¦  «         djS # 1 swxY w Y   	 ddd¦  «         dS # 1 swxY w Y   dS )kuV   Parse vÃ  lÆ°u trá»¯ báº£n ghi hÃ³a Ä‘Æ¡n tá»« API Cá»•ng Thuáº¿ vÃ o CSDL PostgreSQL.ÚnbmstÚseller_tax_codeÚ ÚnbtenÚseller_nameu   Ä�Æ¡n vá»‹ bÃ¡nÚnmmstÚbuyer_tax_codeÚnmtenÚ
buyer_nameu   Ä�Æ¡n vá»‹ muaÚkhhdonÚinvoice_seriesÚC24TAAÚshdonÚinvoice_numberÚ1é   ÚkhmshdonÚtemplate_codeÚtdlapÚ
issue_dateÚTú+r   ú/z%d/%m/%YNé
   z%Y-%m-%dÚtgtttbsoÚ
tgtttgthueÚtotal_amount_vndÚtgtthueÚvat_amount_vndÚ
thttltsuatc              3   ó\   K  — | ]'}t          |                     d d¦  «        ¦  «        V — Œ(dS )Úthtienr   N©r	   Úget©Ú.0Úbs     úYC:\Projects\DSCons\app\modules\invoices\application\invoice_processing\storage_gdt_raw.pyú	<genexpr>zEInvoiceStorageGdtRawMixin._persist_gdt_raw_invoice.<locals>.<genexpr>?   s8   è è € ÐNÐN¸a�: a§e¢e¨H°aÑ&8Ô&8Ñ9Ô9ÐNÐNÐNÐNÐNÐNó    c              3   ó\   K  — | ]'}t          |                     d d¦  «        ¦  «        V — Œ(dS )Útthuer   Nr1   r3   s     r6   r7   zEInvoiceStorageGdtRawMixin._persist_gdt_raw_invoice.<locals>.<genexpr>@   s8   è è € ÐMÐM¸Q�: a§e¢e¨G°QÑ&7Ô&7Ñ8Ô8ÐMÐMÐMÐMÐMÐMr8   Ú
tgtttbthuez0.0000z8.00éd   z0.01)Úroundingz0.00ÚinputÚoutputÚ_zutf-8ÚhsgcmaÚtax_authority_codeÚvalidÚreplacedÚadjustedÚ	cancelled)r   é   é   é   Útthair   ÚnkyÚZz+00:00ÚnbcksÚSigningTimezô
                    SELECT id FROM erp_invoices 
                    WHERE xml_hash_sha256 = %s 
                       OR (seller_tax_code = %s AND invoice_series = %s AND invoice_number = %s)
                    LIMIT 1;
                    ÚdupaV  
                        INSERT INTO erp_invoices (
                            direction, invoice_type, invoice_number, invoice_series, template_code,
                            issue_date, seller_tax_code, seller_name, seller_address,
                            buyer_tax_code, buyer_name, buyer_address,
                            subtotal_amount_vnd, vat_rate_percent, vat_amount_vnd, total_amount_vnd,
                            amount_in_words, status, tax_authority_code, xml_raw_content, xml_hash_sha256,
                            signature_valid, signed_by, signed_at, source_channel, reconciliation_status
                        ) VALUES (
                            %s, 'vat', %s, %s, %s,
                            %s, %s, %s, %s,
                            %s, %s, %s,
                            %s, %s, %s, %s,
                            %s, %s, %s, %s, %s,
                            TRUE, %s, %s, 'gdt_sync', 'unreconciled'
                        ) ON CONFLICT (seller_tax_code, invoice_series, invoice_number) DO NOTHING
                        RETURNING id;
                    ÚnbdchiÚnmdchiÚamount_in_wordsF)Úensure_asciiÚidzduplicate keyzunique constraintÚhdhhdvu)ÚstartÚtsuatz8%ú%r0   )Údefaultr:   u,   Cung cáº¥p hÃ ng hÃ³a, dá»‹ch vá»¥ theo HÄ� z (ú)zGDT-SUM-Ú02du   GÃ³iz1.0000)	ÚsttÚtenÚmhhdvuÚdvtinhÚsluongÚdgiar0   Últsuatr:   z
GDT-SUM-01r\   r]   u   HÃ ng hÃ³a / Dá»‹ch vá»¥r^   r_   r`   ra   rb   z8.0000z0.0001aö  
                            INSERT INTO erp_invoice_items (
                                invoice_id, item_order, item_name, item_code, unit, quantity,
                                unit_price_vnd, amount_before_vat_vnd, vat_rate_percent, vat_amount_vnd, total_item_amount_vnd, cost_category
                            ) VALUES (
                                %s, %s, %s, %s, %s, %s,
                                %s, %s, %s, %s, %s, %s
                            );
                        zÃ
                    INSERT INTO erp_invoice_audit_logs (invoice_id, action_type, performed_by, details_json)
                    VALUES (%s, 'GDT_SYNC_IMPORT', 'SystemBot', %s);
                zhoadondientu.gdt.gov.vn)ÚsourceÚraw_idÚnew)*Ústrr2   ÚstripÚisdigitÚzfillr   ÚfromisoformatÚsplitr   ÚstrptimeÚ	ExceptionÚtodayr	   Ú
isinstanceÚlistÚlenÚsumr   Úquantizer   ÚhashlibÚsha256ÚencodeÚ	hexdigestÚreplaceÚjsonÚloadsÚyearÚmonthÚdayÚget_connectionÚcursorÚexecuteÚfetchoneÚdumpsÚdictÚlowerÚ	enumerateÚappendÚintÚcategorize_item_costÚcommit)7Úselfr   r   r   r   r   r   r   r   Úinv_num_rawr   r"   r#   r$   Ú	total_valÚvat_valÚtotal_amountÚ
vat_amountr.   ÚsubtotalÚcalc_vatÚvat_rateÚ	directionÚ	hash_seedÚxml_hashrB   Ú
status_maprJ   Ú
inv_statusÚsigned_at_valÚ
nbcks_dictÚconnÚcurÚrowÚnew_idÚexcÚ	raw_itemsÚidxÚvbÚ
t_rate_strÚt_amt_beforeÚt_vatÚitmr\   ÚnameÚcodeÚunitÚqtyÚ
unit_priceÚamount_beforeÚvat_strÚv_rateÚvat_amtÚtot_amtÚcost_cats7                                                          r6   Ú_persist_gdt_raw_invoicez2InvoiceStorageGdtRawMixin._persist_gdt_raw_invoice   sn  € õ Ø�GŠG�GÑÔÐ@ §¢Ð(9Ñ :Ô :Ð@¸bñ
ô 
ç
Š%‰'Œ'ð 	õ Ø�GŠG�GÑÔÐK §¢¨Ñ 6Ô 6ÐKÐ:Kñ
ô 
ç
Š%‰'Œ'ð 	õ Ø�GŠG�GÑÔÐ? §¢Ð(8Ñ 9Ô 9Ð?¸Rñ
ô 
ç
Š%‰'Œ'ð 	õ Ø�GŠG�GÑÔÐI §¢¨Ñ 5Ô 5ÐIÐ9Iñ
ô 
ç
Š%‰'Œ'ð 	õ Ø�GŠG�HÑÔÐF §¢Ð)9Ñ!:Ô!:ÐF¸hñ
ô 
ç
Š%‰'Œ'ð 	õ ˜#Ÿ'š' 'Ñ*Ô*ÐN¨c¯gªgÐ6FÑ.GÔ.GÐNÈ3ÑOÔO×UÒUÑWÔWˆØ1<×1DÒ1DÑ1FÔ1FÐW˜×*Ò*¨1Ñ-Ô-Ð-ÈKˆÝØ�GŠG�JÑÔÐB 3§7¢7¨?Ñ#;Ô#;ÐB¸sñ
ô 
ç
Š%‰'Œ'ð 	õ �C—G’G˜GÑ$Ô$ÐC¨¯ª°Ñ(=Ô(=ÐCÀÑDÔD×JÒJÑLÔLˆð	&Ø�eˆ|ˆ|Ý%Ô3°E·K²KÀÑ4DÔ4DÀQÔ4GÑHÔH×MÒMÑOÔO�
�
Ø˜��Ý%Ô.¨u°jÑAÔA×FÒFÑHÔH�
�
å%Ô.¨u°S°b°S¬z¸:ÑFÔF×KÒKÑMÔM�
øøÝð 	&ð 	&ð 	&Ýœ™œˆJˆJˆJð	&øøøð �GŠG�JÑÔÐW 3§7¢7¨<Ñ#8Ô#8ÐW¸C¿GºGÐDVÑ<WÔ<Wð 	ð —'’'˜)Ñ$Ô$ÐF¨¯ªÐ0@Ñ(AÔ(AÐFÀQˆå! )Ñ,Ô,ˆÝ Ñ(Ô(ˆ
à—W’W˜\Ñ*Ô*Ð0¨bˆ
Øð 	�* ZµÑ6Ô6ð 	½3¸z¹?¼?ÈQÒ;NÐ;NÝÐNÐNÀ:ÐNÑNÔNÑNÔNˆHÝÐMÐMÀ*ÐMÑMÔMÑMÔMˆHØ˜!Š|ˆ|Ø%�
øØ�WŠW�\Ñ"Ô"ð 	Ý! #§'¢'¨,Ñ"7Ô"7Ñ8Ô8ˆHˆHð   :Ò-Ð-ð  
Ñ*Ð*å˜XÑ&Ô&ð ð �7 8Ñ,Ô,Ò,Ð,°(¸Q²,°,À*ÈqÂ.À.Ø# jÑ0ˆLå˜6‘?”?ˆØ�aŠ<ˆ<˜J¨šN˜NØ# hÑ.µ'¸#±,´,Ñ>×HÒHÝ˜‘”­-ð Iñ ô ˆHˆHð ˜Š\ˆ\˜j¨Ašo˜oÝ˜v‘”ˆHàð 	+˜kð 	+¨nÀÒ.KÐ.KØˆIˆIØð 	+ ð 	+°ÀKÒ1OÐ1OØ ˆIˆIà*ˆIà&ÐiÐi¨ÐiÐi¸.ÐiÐiÈ<ÐiÐiÐZgÐiÐiˆ	Ý”> )×"2Ò"2°7Ñ";Ô";Ñ<Ô<×FÒFÑHÔHˆå Ø�GŠG�HÑÔÐD §¢Ð)=Ñ!>Ô!>ÐDÀ"ñ
ô 
Ðð ! Z°JÀ;ÐOÐOˆ
Ø—’˜ Ñ#Ô#ˆØ—^’^ E¨7Ñ3Ô3ˆ
ð ˆØ�7Š7�5‰>Œ>ð 	ðÝ (Ô 6Ý˜˜Eœ
‘O”O×+Ò+¨C°Ñ:Ô:ñ!ô !��øõ ð ð ð Ø�ðøøøð ð	à—’˜Ñ Ô ð	ð ¥ S¨¤\Ñ!2Ô!2Ð2Ð2ðõ " # g¤,µÑ4Ô4ð&•D”J˜s 7œ|Ñ,Ô,Ð,à˜Wœð ð
 —>’> -Ñ0Ô0ð Ý$,Ô$:Ý˜J }Ô5Ñ6Ô6×>Ò>¸sÀHÑMÔMñ%ô %�Møøõ ð ð ð Ø�ðøøøàð 	XÝ$ Z¤_°jÔ6FÈ
ÌÑWÔWˆMà× Ò Ñ"Ô"ð t	 dØ—’‘”ð s #Ø—’ðð ˜°ÀÐOñô ð ð —<’<‘>”>ð !Ø ðsð sð sñ sô sð sðt	ð t	ð t	ñ t	ô t	ð t	ð t	ð t	ð8Ø—K’Kðð& &Ø*Ø*Ø)Ø&Ø+Ø'ØŸGšG H¨bÑ1Ô1Ø*Ø&ØŸGšG H¨bÑ1Ô1Ø$Ø$Ø&Ø(ØŸGšGÐ$5°rÑ:Ô:Ø&Ø.Ý œJ s¸Ð?Ñ?Ô?Ø$Ø'Ø)ð-ñ'+ô +ð +ðX Ÿ,š,™.œ.�CØð %Ø$ðysð sð sñ sô sð sðt	ð t	ð t	ñ t	ô t	ð t	ð t	ð t	ð@  ð7Ý$.¨sµDÑ$9Ô$9ð7˜˜Dœ	˜	à(+Ð5˜c !œf˜f°ð �Føõ
 !ð ð ð Ø&­#¨c©(¬(¯.ª.Ñ*:Ô*:Ð:Ð:Ð>QÕUXÐY\ÑU]ÔU]×UcÒUcÑUeÔUeÐ>eÐ>eØ$˜u˜u˜uðIsð sð sñ sô sð sðt	ð t	ð t	ñ t	ô t	ð t	ð t	ð t	ðL øøøøðøøøð  ŸGšG IÑ.Ô.�	Ø ð ­
°9½dÑ(CÔ(Cð ÅsÈ9Á~Ä~ÐYZÒGZÑGZØ!$§¢¨Ñ!6Ô!6Ð!<¸"�JØ!ñ ¥j°½TÑ&BÔ&Bñ ÅsÈ:ÁÄÐYZÒGZÑGZØ$&˜	Ý'0°À1Ð'EÑ'EÔ'Eð ð ™G˜C Ý),¨R¯VªV°G©_¬_Ð-DÀÑ)EÔ)E×)MÒ)MÈcÐSUÑ)VÔ)V×)\Ò)\Ñ)^Ô)^˜JÝ+5°b·f²f¸XÑ6FÔ6FÕPWÐX`ÑPaÔPaÐ+bÑ+bÔ+b˜LÝ$.¨r¯vªv°g©¬ÍÐPXÑHYÔHYÐ$ZÑ$ZÔ$Z˜EØ%×,Ò,Ø'*Ø'yÐVdÐ'yÐ'yÐhvÐ'yÐ'yÐ'yØ*>°SÐ*>Ð*>Ð*>Ø*0Ý*1°(Ñ*;Ô*;Ø(4Ø*6Ø-7Ð*:Ð*:Ð*:Ø).ð
.ð 
.ñ 
ô 
ð 
ð 
ð	ð " Aš˜¨¸Ò)9Ð)9à#$Ø#uÐR`Ð#uÐ#uÐdrÐ#uÐ#uÐ#uØ&2Ø&,Ý&-¨hÑ&7Ô&7Ø08¸1²° H HÀ,Ø2:¸Q²,°, h hÀLØ)1 n n nØ%/ð
&ð 
&ð 
%˜	ð ñ 6¥¨IµtÑ!<Ô!<ñ 6ÅÀYÁÄÐRSÒASÑASØ(ð 5ñ 5˜Ý! #§'¢'¨%¡.¤.Ð"5°AÑ6Ô6˜Ý" 3§7¢7¨5¡>¤>Ð#OÐ5OÑPÔP×VÒVÑXÔX˜Ý" 3§7¢7¨8Ñ#4Ô#4Ð#:¸Ñ;Ô;×AÒAÑCÔC˜Ý" 3§7¢7¨8Ñ#4Ô#4Ð#>¸Ñ?Ô?×EÒEÑGÔG˜Ý(¨¯ª°Ñ):Ô):ÅGÈHÑDUÔDUÐVÑVÔV˜Ý%/ØŸGšG F™OœOµW¸XÑ5FÔ5Fð&ñ &ô &˜
õ )3ØŸGšG HÑ-Ô-µw¸xÑ7HÔ7Hð)ñ )ô )˜õ   §¢¨Ñ 1Ô 1Ð 9°TÑ:Ô:×BÒBÀ3ÈÑKÔK×QÒQÑSÔSð  ð7Ý%/°ÅÈÑARÔARÐ%SÑ%SÔ%S˜F˜FøÝ(ð 7ð 7ð 7Ý%,¨XÑ%6Ô%6˜F˜F˜Fð7øøøð  #Ÿwšw wÑ/Ô/Ð;õ ' s§w¢w¨wÑ'7Ô'7Ñ8Ô8Ð8à#0°6Ñ#9½WÀS¹\¼\Ñ"I×!SÒ!SÝ '¨Ñ 1Ô 1½Mð "Tñ "ô "ð  ð #0°'Ñ"9˜Ø#'×#<Ò#<¸TÀ4Ñ#HÔ#H˜àŸšðð !'Ø #Ø $Ø $Ø $Ø #Ø *Ø -Ø &Ø 'Ø 'Ø (ðñô ð ñ ð4 —’ðð
 Ýœ
à*CØ*-¯'ª'°$¸Ñ*;Ô*;ðð ð */ðñ ô ð	ñô ð ð" —’‘”�Øðgsð sð sñ sô sð sðt	ð t	ð t	ñ t	ô t	ð t	ð t	ð t	ðsð sð sð søøøð sð sð sð sð sðt	ð t	ð t	ñ t	ô t	ð t	ð t	ð t	ð t	ð t	ð t	ð t	øøøð t	ð t	ð t	ð t	ð t	ð t	sÞ   ÊBL% Ì%MÍMØ;Y Ù
Y(Ù'Y(ÚB\( Ü(
\5Ü4\5Ý.x+Þ0xÞ3x+ßBb#áx+á7+b#â"xâ#
dâ-Adã3xã7x+ädädäNxò2sóxós-	ó*xó,s-	ó-Dx÷:x+øx	øx+øx	øx+ø+x/ø2x/N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rƒ   rf   r   r±   © r8   r6   r   r      s`   € € € € € Ø7Ð7ðjØ˜˜S˜”>ðjØ7:ðjØILðjà	ðjð jð jð jð jð jr8   r   )rt   ry   Úloggingr   r   Údecimalr   r   Útypingr   Úcommonr	   Ú	getLoggerr²   Úloggerr   r¶   r8   r6   ú<module>r½      sÂ   ðØ €€€Ø €€€Ø €€€Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ðmð mð mð mð mñ mô mð mð mð mr8   