§
    ÔŸ’j@3  ã                  ób   — d dl mZ 	 d dlZd dlmZ  ej        e¦  «        Z G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚAnyc                  ó2   — e Zd ZdZ	 	 	 ddd	„Z	 	 	 ddd„ZdS )ÚInvoiceVatCalculatorMixinz.Mixin for computing VAT declaration schedules.NÚ	from_dateú
str | NoneÚto_dateÚ
vat_periodÚreturnúdict[str, Any]c                óZ  — |                       ¦   «         5 }|                     ¦   «         5 }dg}g }|r*|                     d¦  «         |                     |¦  «         |r*|                     d¦  «         |                     |¦  «         d                     |¦  «        }|                     d|› d�|¦  «         |                     ¦   «         }	|                     d|› d�|¦  «         |                     ¦   «         }
dd	„} ||	d¬
¦  «        } ||
d¬
¦  «        }d„ } ||¦  «        } ||¦  «        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        }||z
  }||k    r||z
  nd}||k    r||z
  nd}|||pd||||dœt          |¦  «        ||t          |¦  «        ||||||dk    rdnddœ
dœcddd¦  «         cddd¦  «         S # 1 swxY w Y   	 ddd¦  «         dS # 1 swxY w Y   dS )up   Láº­p báº£ng kÃª thuáº¿ GTGT mua vÃ o vÃ  bÃ¡n ra theo máº«u Cá»¥c Thuáº¿ kÃ¨m phÃ¢n loáº¡i nhÃ³m thuáº¿ suáº¥t.zstatus = 'valid'zissue_date >= %szissue_date <= %sz AND at  
                    SELECT id, invoice_number, invoice_series, template_code, issue_date,
                           seller_tax_code, seller_name, subtotal_amount_vnd, vat_rate_percent,
                           vat_amount_vnd, total_amount_vnd, signature_valid, tax_authority_code
                    FROM erp_invoices
                    WHERE direction = 'input' AND zR
                    ORDER BY issue_date ASC, invoice_number ASC;
                as  
                    SELECT id, invoice_number, invoice_series, template_code, issue_date,
                           buyer_tax_code, buyer_name, subtotal_amount_vnd, vat_rate_percent,
                           vat_amount_vnd, total_amount_vnd, signature_valid, tax_authority_code
                    FROM erp_invoices
                    WHERE direction = 'output' AND Tc                ó¼  — g }t          | d¦  «        D ]È\  }}t          |¦  «        }||d<   t          |d         ¦  «        |d<   t          |d         ¦  «        |d<   t          |d         ¦  «        |d<   |d         �t          |d         ¦  «        nd|d<   t          |d         ¦  «        |d<   t          |d	         ¦  «        |d	<   |                     |¦  «         ŒÉ|S )
Né   ÚsttÚidÚ
issue_dateÚsubtotal_amount_vndÚvat_rate_percentç       @Úvat_amount_vndÚtotal_amount_vnd)Ú	enumerateÚdictÚstrÚfloatÚappend)ÚrowsÚis_inputÚresÚidxÚrÚds         úDC:\Projects\DSCons\app\services\invoice_processing\vat_calculator.pyÚ_format_inv_listzHInvoiceVatCalculatorMixin.get_vat_tax_schedule.<locals>._format_inv_list@   sõ   € Ø�CÝ"+¨D°!Ñ"4Ô"4ð &ð &™˜˜QÝ  ™GœG˜Ø#&˜˜%™Ý"% a¨¤g¡,¤,˜˜$™Ý*-¨a°¬oÑ*>Ô*>˜˜,™Ý38¸Ð;PÔ9QÑ3RÔ3R˜Ð/Ñ0ð  !Ð!3Ô4Ð@õ " !Ð$6Ô"7Ñ8Ô8Ð8à!$ð Ð,Ñ-õ
 /4°AÐ6FÔ4GÑ.HÔ.H˜Ð*Ñ+Ý05°aÐ8JÔ6KÑ0LÔ0L˜Ð,Ñ-ØŸ
š
 1™œ˜˜Ø�Jó    )r   Fc           
     óP  — dddddœdddddœdddddœdddddœdddddœdddd	dœd
œ}| D ]û}|                      dd¦  «        }|                      dd¦  «        }|                      dd¦  «        }|dk    r	|dk    rd}nft          |dz
  ¦  «        dk     rd}nMt          |dz
  ¦  «        dk     rd}n4t          |dz
  ¦  «        dk     rd}nt          |dz
  ¦  «        dk     rd}nd}||         dxx         |z  cc<   ||         dxx         |z  cc<   ||         dxx         dz  cc<   Œü|S )Nç        r   u   HHDV KhÃ´ng chá»‹u thuáº¿)Úsubtotal_vndÚvat_vndÚcountÚlabelu   Thuáº¿ suáº¥t 0%u   Thuáº¿ suáº¥t 5%u   Thuáº¿ suáº¥t 8%u   Thuáº¿ suáº¥t 10%u   KhÃ¡c)ÚkctÚrate_0Úrate_5Úrate_8Úrate_10Úotherr   r   r   r   r,   gš™™™™™¹?r-   g      @r.   r/   g      $@r0   r1   r(   r)   r*   r   )ÚgetÚabs)ÚitemsÚgroupsÚitmÚrateÚvat_amtÚsub_amtÚkeys          r#   Ú_group_by_tax_ratezJInvoiceVatCalculatorMixin.get_vat_tax_schedule.<locals>._group_by_tax_rateV   sã  € ð -0Ø'*Ø%&Ø%@ð	 ð  ð -0Ø'*Ø%&Ø%7ð	#ð #ð -0Ø'*Ø%&Ø%7ð	#ð #ð -0Ø'*Ø%&Ø%7ð	#ð #ð -0Ø'*Ø%&Ø%8ð	$ð $ð -0Ø'*Ø%&Ø%,ð	"ð "ð?%ð %�FðL  %ð 2ð 2˜Ø"ŸwšwÐ'9¸3Ñ?Ô?˜Ø"%§'¢'Ð*:¸CÑ"@Ô"@˜Ø"%§'¢'Ð*?ÀÑ"EÔ"E˜à" cš>˜>¨d°cªk¨kØ"'˜C˜CÝ  ¨¡™_œ_¨sÒ2Ð2Ø"*˜C˜CÝ  ¨¡™_œ_¨sÒ2Ð2Ø"*˜C˜CÝ  ¨¡™_œ_¨sÒ2Ð2Ø"*˜C˜CÝ  ¨¡Ñ-Ô-°Ò3Ð3Ø"+˜C˜Cà")˜Cà˜sœ NÐ3Ð3Ô3°wÑ>Ð3Ð3Ñ3Ø˜sœ IÐ.Ð.Ô.°'Ñ9Ð.Ð.Ñ.Ø˜sœ GÐ,Ð,Ô,°Ñ1Ð,Ð,Ñ,Ð,Ø!�Mr%   c              3  ó&   K  — | ]}|d          V — ŒdS ©r   N© ©Ú.0Úis     r#   ú	<genexpr>zAInvoiceVatCalculatorMixin.get_vat_tax_schedule.<locals>.<genexpr>—   s9   è è € ð +ð +Ø12�AÐ+Ô,ð+ð +ð +ð +ð +ð +r%   c              3  ó&   K  — | ]}|d          V — ŒdS ©r   Nr>   r?   s     r#   rB   zAInvoiceVatCalculatorMixin.get_vat_tax_schedule.<locals>.<genexpr>š   s(   è è € Ð%TÐ%T¸a aÐ(8Ô&9Ð%TÐ%TÐ%TÐ%TÐ%TÐ%Tr%   c              3  ó&   K  — | ]}|d          V — ŒdS r=   r>   ©r@   Úos     r#   rB   zAInvoiceVatCalculatorMixin.get_vat_tax_schedule.<locals>.<genexpr>›   s9   è è € ð ,ð ,Ø12�AÐ+Ô,ð,ð ,ð ,ð ,ð ,ð ,r%   c              3  ó&   K  — | ]}|d          V — ŒdS rD   r>   rF   s     r#   rB   zAInvoiceVatCalculatorMixin.get_vat_tax_schedule.<locals>.<genexpr>ž   s(   è è € Ð&VÐ&V¸q qÐ)9Ô':Ð&VÐ&VÐ&VÐ&VÐ&VÐ&Vr%   r'   u   Ká»³ lá»±a chá»�n)ÚinputÚoutputr   u,   CÃ²n Ä‘Æ°á»£c kháº¥u trá»« chuyá»ƒn ká»³ sauu6   Thuáº¿ GTGT pháº£i ná»™p vÃ o ngÃ¢n sÃ¡ch NhÃ  nÆ°á»›c)
Útotal_input_invoicesÚtotal_input_subtotal_vndÚtotal_input_vat_vndÚtotal_output_invoicesÚtotal_output_subtotal_vndÚtotal_output_vat_vndÚnet_vat_balance_vndÚvat_payable_vndÚ"vat_deductible_carried_forward_vndÚvat_status_label)r   r	   r
   Úinput_scheduleÚoutput_scheduleÚtax_breakdownÚkpisN)T)Úget_connectionÚcursorr   ÚjoinÚexecuteÚfetchallÚsumÚlen)Úselfr   r	   r
   ÚconnÚcurÚwhere_clausesÚparamsÚ	where_sqlÚ
input_rowsÚoutput_rowsr$   Úformatted_inputsÚformatted_outputsr;   Úinput_groupsÚoutput_groupsÚtotal_input_subtotalÚtotal_input_vatÚtotal_output_subtotalÚtotal_output_vatÚnet_vat_balanceÚvat_payableÚvat_deductibles                           r#   Úget_vat_tax_schedulez.InvoiceVatCalculatorMixin.get_vat_tax_schedule   s  € ð × Ò Ñ"Ô"ð k	 dØ—’‘”ð j #Ø!3Ð 4�Ø$&�àð -Ø!×(Ò(Ð);Ñ<Ô<Ð<Ø—M’M )Ñ,Ô,Ð,Øð +Ø!×(Ò(Ð);Ñ<Ô<Ð<Ø—M’M 'Ñ*Ô*Ð*à#ŸLšL¨Ñ7Ô7�	ð —’ðð
 4=ðð ð ð ñ
ô 
ð 
ð !Ÿ\š\™^œ^�
ð —’ðð
 5>ðð ð ð ñ
ô 
ð 
ð "Ÿlšl™nœn�ðð ð ð ð$ $4Ð#3°JÈÐ#NÑ#NÔ#NÐ Ø$4Ð$4°[È5Ð$QÑ$QÔ$QÐ!ð<"ð <"ð <"ð|  2Ð1Ð2BÑCÔC�Ø 2Ð 2Ð3DÑ EÔ E�å'*ð +ð +Ø6Fð+ñ +ô +ñ (ô (Ð$õ #&Ð%TÐ%TÐCSÐ%TÑ%TÔ%TÑ"TÔ"T�Ý(+ð ,ð ,Ø6Gð,ñ ,ô ,ñ )ô )Ð%õ $'Ð&VÐ&VÐDUÐ&VÑ&VÔ&VÑ#VÔ#VÐ à"1Ð4DÑ"D�ð (¨/Ò9Ð9ð &¨Ñ7Ð7àð ð 'Ð*:Ò:Ð:ð %Ð'7Ñ7Ð7àð ð "+Ø&Ø",Ð"CÐ0CØ&6Ø'8Ø/;À}Ð%UÐ%Uå03Ð4DÑ0EÔ0EØ4HØ/>Ý14Ð5FÑ1GÔ1GØ5JØ0@Ø/>Ø+6Ø>Là*¨aÒ/Ð/ð -[Ð,ZàUðð ðð ðkjð jð jð jñ jô jð jðk	ð k	ð k	ð k	ñ k	ô k	ð k	ð k	ðjð jð jð jøøøð jð jð jð jð jðk	ð k	ð k	ñ k	ô k	ð k	ð k	ð k	ð k	ð k	ð k	ð k	øøøð k	ð k	ð k	ð k	ð k	ð k	s5   •H ªGHÇ.H ÈH	ÈH ÈH	ÈH È H$È'H$ÚallÚ	directionr   c                óØ	  — |                       ||¬¦  «        }dg}|r|nd}|r|nd}|                     d¦  «         |                     d|› d|› d�¦  «         |                     d	¦  «         |d
v �rÐ|                     d¦  «         |                     d¦  «         |d         D �]F}t          |                     dd	¦  «        ¦  «                             dd¦  «        }	|                     d|d         › d|                     dd¦  «        › d|                     dd	¦  «        › d|                     dd	¦  «        › d|                     dd	¦  «        › d|	› d|                     dd	¦  «        › d|                     dd¦  «        d›d|                     dd¦  «        d›d|                     dd¦  «        d›d|                     d d¦  «        d›d|                     d!d	¦  «        › d�¦  «         �ŒH|d"         d#         }
|d"         d$         }|                     d%|
d›d&|d›d|
|z   d›d'�¦  «         |                     d	¦  «         |d(v �rÐ|                     d)¦  «         |                     d*¦  «         |d+         D �]F}t          |                     d,d	¦  «        ¦  «                             dd¦  «        }|                     d|d         › d|                     dd¦  «        › d|                     dd	¦  «        › d|                     dd	¦  «        › d|                     dd	¦  «        › d|› d|                     d-d	¦  «        › d|                     dd¦  «        d›d|                     dd¦  «        d›d|                     dd¦  «        d›d|                     d d¦  «        d›d|                     d!d	¦  «        › d�¦  «         �ŒH|d"         d.         }|d"         d/         }|                     d0|d›d&|d›d||z   d›d'�¦  «         |                     d	¦  «         |                     d1¦  «         |                     d2|d"         d$         d›d3�¦  «         |                     d4|d"         d/         d›d3�¦  «         |d"         d5         dk    r'|                     d6|d"         d5         d›d3�¦  «         n&|                     d7|d"         d8         d›d3�¦  «         d9                     |¦  «        S ):ue   Xuáº¥t báº£ng kÃª thuáº¿ GTGT dáº¡ng CSV (UTF-8 BOM) Ä‘á»ƒ káº¿ toÃ¡n má»Ÿ trá»±c tiáº¿p trÃªn Excel.)r   r	   u   ï»¿u   Ä�áº§u ká»³u   Hiá»‡n táº¡iu5   "Báº¢NG KÃŠ THUáº¾ GIÃ� TRá»Š GIA TÄ‚NG (DSCons ERP)"u   "Ká»³ kÃª khai: Tá»« u    Ä‘áº¿n ú"Ú )rt   rI   u_   "--- Báº¢NG KÃŠ HÃ“A Ä�Æ N, CHá»¨NG Tá»ª HÃ€NG HÃ“A Dá»ŠCH Vá»¤ MUA VÃ€O (MáºªU 01-1/GTGT) ---"uæ   "STT","KÃ½ hiá»‡u máº«u","KÃ½ hiá»‡u HÄ�","Sá»‘ HÄ�","NgÃ y láº­p","TÃªn ngÆ°á»�i bÃ¡n","MST ngÆ°á»�i bÃ¡n","Doanh sá»‘ mua chÆ°a thuáº¿ (VNÄ�)","Thuáº¿ suáº¥t (%)","Tiá»�n thuáº¿ GTGT (VNÄ�)","Tá»•ng thanh toÃ¡n (VNÄ�)","MÃ£ CQT"rU   Úseller_namez""r   z","Útemplate_codeÚ1Úinvoice_seriesÚinvoice_numberr   Úseller_tax_coder   r   z.0fr   é   z.1fz%","r   r   Útax_authority_coderX   rL   rM   u/   "Tá»”NG Cá»˜NG Ä�áº¦U VÃ€O","","","","","","","z","","z","")rt   rJ   u^   "--- Báº¢NG KÃŠ HÃ“A Ä�Æ N, CHá»¨NG Tá»ª HÃ€NG HÃ“A Dá»ŠCH Vá»¤ BÃ�N RA (MáºªU 01-2/GTGT) ---"uß   "STT","KÃ½ hiá»‡u máº«u","KÃ½ hiá»‡u HÄ�","Sá»‘ HÄ�","NgÃ y láº­p","TÃªn ngÆ°á»�i mua","MST ngÆ°á»�i mua","Doanh thu chÆ°a thuáº¿ (VNÄ�)","Thuáº¿ suáº¥t (%)","Tiá»�n thuáº¿ GTGT (VNÄ�)","Tá»•ng thanh toÃ¡n (VNÄ�)","MÃ£ CQT"rV   Ú
buyer_nameÚbuyer_tax_coderO   rP   u-   "Tá»”NG Cá»˜NG Ä�áº¦U RA","","","","","","","u:   "--- Tá»”NG Há»¢P CÃ‚N Ä�á»�I NGHÄ¨A Vá»¤ THUáº¾ GTGT ---"u8   "Tá»•ng thuáº¿ GTGT Ä‘áº§u vÃ o Ä‘Æ°á»£c kháº¥u trá»«","u    VNÄ�"u+   "Tá»•ng thuáº¿ GTGT Ä‘áº§u ra phÃ¡t sinh","rR   u+   "Sá»‘ thuáº¿ GTGT pháº£i ná»™p vÃ o NSNN","uA   "Sá»‘ thuáº¿ GTGT cÃ²n Ä‘Æ°á»£c kháº¥u trá»« chuyá»ƒn ká»³ sau","rS   ú
)rs   r   r   r2   Úreplacer[   )r`   r   r	   ru   ÚscheduleÚlinesÚ
from_labelÚto_labelr6   Úseller_cleanÚtot_inp_subÚtot_inp_vatÚbuyer_cleanÚtot_out_subÚtot_out_vats                  r#   Úexport_vat_schedule_csvz1InvoiceVatCalculatorMixin.export_vat_schedule_csvÃ   sú  € ð ×,Ò,°yÈ'Ð,ÑRÔRˆØ$˜:ˆà"+Ð>�Y�Y°ˆ
Ø%Ð9�7�7¨>ˆà�ŠÐLÑMÔMÐMØ�ŠÐL¨ZÐLÐLÀÐLÐLÐLÑMÔMÐMØ�Š�RÑÔÐàÐ(Ð(Ñ(Ø�LŠLØqñô ð ð �LŠLð yñô ð ð  Ð 0Ô1ð ñ �Ý" 3§7¢7¨=¸"Ñ#=Ô#=Ñ>Ô>×FÒFÀsÈDÑQÔQ�Ø—’ð b˜˜Eœ
ð  bð  b s§w¢w¨ÀÑ'DÔ'Dð  bð  bÈÏÊÐQaÐceÑIfÔIfð  bð  bÐkn×krÒkrð  tDð  FHñ  lIô  lIð  bð  bð  NQ÷  NUò  NUð  Vbð  dfñ  Ngô  Ngð  bð  bð  lxð  bð  bð  }@÷  }Dò  }Dð  EVð  XZñ  }[ô  }[ð  bð  bð  `c÷  `gò  `gð  h}ð  @ñ  `Aô  `Að  bð  bð  bð  JM÷  JQò  JQð  Rdð  fgñ  Jhô  Jhð  bð  bð  bð  ru÷  ryò  ryð  zJð  LMñ  rNô  rNð  bð  bð  bð  WZ÷  W^ò  W^ð  _qð  stñ  Wuô  Wuð  bð  bð  bð  ~A÷  ~Eò  ~Eð  FZð  \^ñ  ~_ô  ~_ð  bð  bð  bñô ð ñ ð # 6Ô*Ð+EÔFˆKØ" 6Ô*Ð+@ÔAˆKØ�LŠLð QÀ+ð  Qð  Qð  QÐYdð  Qð  Qð  QÐmxð  |Gñ  nGð  Qð  Qð  Qð  Qñô ð ð �LŠL˜ÑÔÐàÐ)Ð)Ñ)Ø�LŠLØpñô ð ð �LŠLð rñô ð ð  Ð 1Ô2ð ñ �Ý! #§'¢'¨,¸Ñ";Ô";Ñ<Ô<×DÒDÀSÈ$ÑOÔO�Ø—’ð `˜˜Eœ
ð  `ð  ` s§w¢w¨ÀÑ'DÔ'Dð  `ð  `ÈÏÊÐQaÐceÑIfÔIfð  `ð  `Ðkn×krÒkrð  tDð  FHñ  lIô  lIð  `ð  `ð  NQ÷  NUò  NUð  Vbð  dfñ  Ngô  Ngð  `ð  `ð  lwð  `ð  `ð  |÷  |Cò  |Cð  DTð  VXñ  |Yô  |Yð  `ð  `ð  ^a÷  ^eò  ^eð  f{ð  }~ñ  ^ô  ^ð  `ð  `ð  `ð  HK÷  HOò  HOð  Pbð  deñ  Hfô  Hfð  `ð  `ð  `ð  ps÷  pwò  pwð  xHð  JKñ  pLô  pLð  `ð  `ð  `ð  UX÷  U\ò  U\ð  ]oð  qrñ  Usô  Usð  `ð  `ð  `ð  |÷  |Cò  |Cð  DXð  Z\ñ  |]ô  |]ð  `ð  `ð  `ñô ð ñ ð # 6Ô*Ð+FÔGˆKØ" 6Ô*Ð+AÔBˆKØ�LŠLð OÀð  Oð  Oð  OÐWbð  Oð  Oð  OÐkvð  zEñ  lEð  Oð  Oð  Oð  Oñô ð ð �LŠL˜ÑÔÐà�ŠÐQÑRÔRÐRØ�ŠØzÀxÐPVÔGWÐXmÔGnÐzÐzÐzÐzñ	
ô 	
ð 	
ð 	�ŠØn¸(À6Ô:JÐKaÔ:bÐnÐnÐnÐnñ	
ô 	
ð 	
ð �FÔÐ-Ô.°Ò2Ð2Ø�LŠLØm¸hÀvÔ>NÐO`Ô>aÐmÐmÐmÐmñô ð ð ð �LŠLð WÐT\Ð]cÔTdð  fJô  UKð  Wð  Wð  Wð  Wñô ð ð �yŠy˜ÑÔÐr%   )NNN)r   r   r	   r   r
   r   r   r   )NNrt   )r   r   r	   r   ru   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rs   r�   r>   r%   r#   r   r      so   € € € € € Ø8Ð8ð !%Ø"Ø!%ð	rð rð rð rð rðl !%Ø"Øð	G ð G ð G ð G ð G ð G ð G r%   r   )	Ú
__future__r   ÚloggingÚtypingr   Ú	getLoggerr�   Úloggerr   r>   r%   r#   ú<module>r™      s…   ðØ "Ð "Ð "Ð "Ð "Ð "à 8ð €€€Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ð~ ð ~ ð ~ ð ~ ð ~ ñ ~ ô ~ ð ~ ð ~ ð ~ r%   