§
    $š˜j&"  ã                  ó†   — d dl mZ 	 d dlZd dlmZ d dlmZ  ej        e¦  «        Z	dZ
dZdZdZd	Zd
Z G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚDecimal)ÚAnyu2   Trá»¥ cá»™t 1: Thi cÃ´ng XÃ¢y láº¯p & Thá»§y lá»£iu-   Trá»¥ cá»™t 2: Váº­n táº£i Xe Ben & Logisticsu&   Trá»¥ cá»™t 3: Cho thuÃª Ca mÃ¡y Ä�Ã ou-   Trá»¥ cá»™t 4: Mua bÃ¡n Váº­t tÆ° & San láº¥pu0   Chi phÃ­ Quáº£n lÃ½ & Váº­n hÃ nh Doanh nghiá»‡pu"   Chi phÃ­ TÃ i chÃ­nh & NgÃ¢n hÃ ngc                  ó*   — e Zd ZdZed	d„¦   «         ZdS )
ÚFourPillarsAccountingEnginezoClassifies input invoices based on genuine line items into 4 business pillars and generates accounting entries.Úinvúdict[str, Any]Úitemsúlist[dict[str, Any]]Úreturnc                óø  ‡‡‡— t          |                      d¦  «        pd¦  «                             ¦   «         }t          |                      d¦  «        pd¦  «                             ¦   «         }t	          t          |                      d¦  «        pd¦  «        ¦  «        }d|v pd|v pd|v pd	|v pd
|v pd|v pd|v pd|v }d|v pd|v pd|v pd|v pd|v pd|v pd|v }d„ |D ¦   «         }d                     |¦  «        }|r1|rd|v sd|v r't          ddddddd|                      d¦  «        › d �d!œS |sd"|v sd|v r7t          d#d$d|d%k    rd&nd'|d%k    rd(nd)d*d+|                      d¦  «        › d �d!œS g d,¢Št          ˆfd-„|D ¦   «         ¦  «        }	g d.¢Št          ˆfd/„|D ¦   «         ¦  «        pd0|v od1|v pd2|v }
g d3¢Št          ˆfd4„|D ¦   «         ¦  «        }|d5k    pd6|v }|rt          }d7}d8}d9}n™|	r|st          }d:}d;}d<}n‡|
r|st          }d=}d>}d?}nu|s|	sd|
sbt          }d@}t          dA„ |D ¦   «         ¦  «        rd;}n:t          dB„ |D ¦   «         ¦  «        rdC}nt          dD„ |D ¦   «         ¦  «        rdE}ndF}dG}nt          }d@}dF}dH}|d%k    rd(}nd)}|rTdI                     dJ„ |dKdL…         D ¦   «         ¦  «        }t          |¦  «        dLk    r|dMt          |¦  «        dLz
  › dN�z  }ndO}|||dd&|||d!œS )Pa«  Classify an invoice and compute double-entry ledger accounts.

        Returns:
            {
                "pillar": str,
                "pillar_code": str,
                "debit_account": str,
                "debit_vat_account": str,
                "credit_account": str,
                "payment_requirement": str,
                "cost_category_summary": str,
                "explanation": str
            }
        Úseller_nameÚ Úseller_tax_codeÚtotal_amount_vndr   u   ngÃ¢n hÃ ngÚtechcombankÚacbÚ
vietinbankÚvpbankÚmbbankÚbidvÚvietcombanku   viá»…n thÃ´ngÚviettelÚvnptÚmobifoneÚfptu   pháº§n má»�mu   vÄƒn phÃ²ng pháº©mc                óz   — g | ]8}t          |                     d ¦  «        pd¦  «                             ¦   «         ‘Œ9S )Ú	item_namer   )ÚstrÚgetÚlower©Ú.0Úits     úhC:\Projects\DSCons\app\modules\invoices\application\invoice_processing\four_pillars_accounting_engine.pyú
<listcomp>zLFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<listcomp>E   s=   € ÐMÐMÐMÀ•c˜"Ÿ&š& Ñ-Ô-Ð3°Ñ4Ô4×:Ò:Ñ<Ô<ÐMÐMÐMó    ú u   phÃ­u   dá»‹ch vá»¥Ú	financialÚ635Ú1331Ú1121ÚTRU_TU_DONG_TAI_KHOANu3   PhÃ­ dá»‹ch vá»¥ ngÃ¢n hÃ ng / PhÃ­ chuyá»ƒn tiá»�nu9   HÃ³a Ä‘Æ¡n phÃ­ dá»‹ch vá»¥ tÃ i chÃ­nh ngÃ¢n hÃ ng tá»« ú.)ÚpillarÚpillar_codeÚdebit_accountÚdebit_vat_accountÚcredit_accountÚpayment_requirementÚcost_category_summaryÚexplanationu   tiáº¿p khÃ¡chÚgnaÚ642i -1Ú331z	1111/1121ÚBAT_BUOC_CHUYEN_KHOAN_UNCÚTIEN_MAT_HOAC_UNCu7   Chi phÃ­ quáº£n lÃ½ doanh nghiá»‡p / Viá»…n thÃ´ng / VPu<   HÃ³a Ä‘Æ¡n chi phÃ­ quáº£n lÃ½ váº­n hÃ nh vÄƒn phÃ²ng tá»« )u
   mÃ¡y Ä‘Ã ozmay daou   ca mÃ¡yzca mayÚkobelcoÚkomatsuÚsumitomoÚyanmarÚpistonu   thá»§y lá»±cÚxilanhu
   Ä‘Ä©a lá»—u
   máº·t chÃ u   bÆ¡m thá»§y lá»±cu   xÃ­ch mÃ¡y Ä‘Ã ou   dáº§u thá»§y lá»±cu   phá»¥ tÃ¹ng mÃ¡y xÃºcu	   mÃ¡y á»§iu   mÃ¡y luzlu rungc              3  óP   •‡K  — | ]Št          ˆfd „‰D ¦   «         ¦  «        V — Œ dS )c              3  ó    •K  — | ]}|‰v V — Œ	d S ©N© ©r#   ÚkÚit_names     €r%   ú	<genexpr>zUFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>.<genexpr>h   s'   øè è € ÐIÐI°  W ÐIÐIÐIÐIÐIÐIr'   N©Úany)r#   rH   Úmachinery_keywordss    @€r%   rI   zKFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>h   sB   øøè è € ÐdÐdÈg�CÐIÐIÐIÐIÐ6HÐIÑIÔIÑIÔIÐdÐdÐdÐdÐdÐdr'   )u   dáº§u dou   dáº§u diezelu   xÄƒng dáº§uÚ
petrolimexu
   sÄƒm lá»‘pu   lá»‘p xezxe benu   Ã´ tÃ´ táº£iu   xe táº£iu   Ä‘Äƒng kiá»ƒmu   cáº§u Ä‘Æ°á»�ngu   phÃ­ Ä‘Æ°á»�ng bá»™Úhowoc              3  óP   •‡K  — | ]Št          ˆfd „‰D ¦   «         ¦  «        V — Œ dS )c              3  ó    •K  — | ]}|‰v V — Œ	d S rD   rE   rF   s     €r%   rI   zUFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>.<genexpr>o   s'   øè è € Ð%UÐ%U°q a¨7 lÐ%UÐ%UÐ%UÐ%UÐ%UÐ%Ur'   NrJ   )r#   rH   Útransport_fleet_keywordss    @€r%   rI   zKFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>o   sC   øøè è € Ð!pÐ!pÐZa¥#Ð%UÐ%UÐ%UÐ%UÐ<TÐ%UÑ%UÔ%UÑ"UÔ"UÐ!pÐ!pÐ!pÐ!pÐ!pÐ!pr'   rM   u   dáº§uzdo 0,05s)$u   xi mÄƒngÚximangu   gáº¡chu   cÃ¡t u	   cÃ¡t xÃ¢yu   cÃ¡t bÃª tÃ´ngu   Ä‘Ã¡ 1x2u   Ä‘Ã¡ 4x6u
   Ä‘Ã¡ há»™cu	   bÃª tÃ´ngu   thÃ©pu   sáº¯tu	   tÃ´n máº¡u   tÃ´n láº¡nhu   xÃ  gá»“u   á»‘ng thÃ©pÚinoxu   Ä‘Ã¡ graniteu   cÃ¡p Ä‘iá»‡nu   dÃ¢y Ä‘iá»‡nu	   Ä‘Ã¨n ledu   chiáº¿u sÃ¡ngu   á»‘ng cá»‘ngu   cá»�c bÃª tÃ´ngu   chá»‘ng tháº¥mu   sÆ¡nu   vá»¯au   nhá»±a Ä‘Æ°á»�ngu   nhÅ© tÆ°Æ¡ngu   tháº¡ch caou   cá»­a cuá»‘nu   nhÃ´m kÃ­nhu   vÃ¡ch kÃ­nhu	   thi cÃ´ngõ   láº¯p dá»±ngu
   xÃ¢y láº¯pc              3  óP   •‡K  — | ]Št          ˆfd „‰D ¦   «         ¦  «        V — Œ dS )c              3  ó    •K  — | ]}|‰v V — Œ	d S rD   rE   rF   s     €r%   rI   zUFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>.<genexpr>{   s'   øè è € Ð"OÐ"O°A 1¨ <Ð"OÐ"OÐ"OÐ"OÐ"OÐ"Or'   NrJ   )r#   rH   Úconstruction_keywordss    @€r%   rI   zKFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>{   sC   øøè è € ÐjÐjÐT[�sÐ"OÐ"OÐ"OÐ"OÐ9NÐ"OÑ"OÔ"OÑOÔOÐjÐjÐjÐjÐjÐjr'   Ú
0201805660u   trung kiÃªnÚpillar_4Ú1561ue   Mua bÃ¡n váº­t tÆ° thÆ°Æ¡ng máº¡i / san láº¥p máº·t báº±ng (Trá»¥ Cá»™t 4 - Ä�á»‘i tÃ¡c Trung KiÃªn).Úpillar_3Ú623ut   ThuÃª ca mÃ¡y Ä‘Ã o / phá»¥ tÃ¹ng báº£o dÆ°á»¡ng há»‡ thá»‘ng mÃ¡y cÆ¡ giá»›i phá»¥c vá»¥ thi cÃ´ng (Trá»¥ Cá»™t 3).Úpillar_2Ú154_LOGISTICSuu   Chi phÃ­ nhiÃªn liá»‡u dáº§u DO, sÄƒm lá»‘p, ca xe ben phá»¥c vá»¥ dá»‹ch vá»¥ váº­n táº£i logistics (Trá»¥ Cá»™t 2).Úpillar_1c              3  ó&   K  — | ]}d |v pd|v V — ŒdS )u   mÃ¡yÚcaNrE   r"   s     r%   rI   zKFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>“   s/   è è € ÐCÐC°"�6˜R�<Ð- 4¨2 :ÐCÐCÐCÐCÐCÐCr'   c              3  ó.   K  — | ]}d |v pd|v pd|v V — ŒdS )u   nhÃ¢n cÃ´ngrT   u	   gia cÃ´ngNrE   r"   s     r%   rI   zKFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>•   s=   è è € ÐkÐkÐZ\�] bÐ(ÐU¨N¸bÐ,@ÐUÀKÐSUÐDUÐkÐkÐkÐkÐkÐkr'   Ú622c              3  ó.   K  — | ]}d |v pd|v pd|v V — ŒdS )u   sá»­a chá»¯au   báº£o dÆ°á»¡ngu	   tÆ° váº¥nNrE   r"   s     r%   rI   zKFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<genexpr>—   s>   è è € ÐnÐnÐ]_�^ rÐ)ÐXÐ-=ÀÐ-CÐXÀ{ÐVXÐGXÐnÐnÐnÐnÐnÐnr'   Ú627Ú621us   Váº­t tÆ° xÃ¢y dá»±ng / chi phÃ­ tháº§u phá»¥ trá»±c tiáº¿p cÃ´ng trÃ¬nh XÃ¢y láº¯p & Thá»§y lá»£i (Trá»¥ Cá»™t 1).u>   Chi phÃ­ sáº£n xuáº¥t xÃ¢y láº¯p cÃ´ng trÃ¬nh (Trá»¥ Cá»™t 1).z; c           	     ó–   — g | ]F}|                      d ¦  «        › d|                      d¦  «        › d|                      d¦  «        › d�‘ŒGS )r   z (Úquantityr(   Úunitú))r    r"   s     r%   r&   zLFourPillarsAccountingEngine.classify_invoice_and_account.<locals>.<listcomp>©   sT   € ÐfÐfÐfÐVX�B—F’F˜;Ñ'Ô'ÐQÐQ¨2¯6ª6°*Ñ+=Ô+=ÐQÐQÀÇÂÀvÁÄÐQÐQÐQÐfÐfÐfr'   Né   z ... (+u    má»¥c khÃ¡c)u    ChÆ°a cÃ³ danh má»¥c dÃ²ng hÃ ng)r   r    r!   Ústripr   ÚjoinÚPILLAR_FINANCIALÚPILLAR_GNA_ADMINrK   ÚPILLAR_4_MATERIALSÚPILLAR_3_MACHINERYÚPILLAR_2_LOGISTICSÚPILLAR_1_CONSTRUCTIONÚlen)r   r
   r   Ú
seller_taxÚtotal_amountÚis_bankÚis_telecom_officeÚ
item_namesÚall_items_textÚhas_machineryÚhas_transport_fleetÚhas_constructionÚis_trading_partnerr/   r0   Ú	debit_accr6   Úpay_reqÚitems_summaryrW   rL   rQ   s                      @@@r%   Úclassify_invoice_and_accountz8FourPillarsAccountingEngine.classify_invoice_and_account   s4  øøø€ õ$ ˜#Ÿ'š' -Ñ0Ô0Ð6°BÑ7Ô7×=Ò=Ñ?Ô?ˆÝ˜ŸšÐ!2Ñ3Ô3Ð9°rÑ:Ô:×@Ò@ÑBÔBˆ
Ý�s 3§7¢7Ð+=Ñ#>Ô#>Ð#CÀ!ÑDÔDÑEÔEˆð ˜[Ð(ð ,Ø Ð+ð,à˜Ð#ð,ð ˜{Ð*ð,ð ˜;Ð&ð	,ð
 ˜;Ð&ð,ð ˜Ð$ð,ð  Ð+ð 	ð ˜{Ð*ð 3Ø˜KÐ'ð3à˜Ð$ð3ð ˜[Ð(ð3ð ˜Ð#ð	3ð
  Ð,ð3ð $ {Ð2ð 	ð NÐMÀuÐMÑMÔMˆ
ØŸš *Ñ-Ô-ˆð ð 
	˜Nð 
	¨f¸Ð.FÐ.FÈ-Ð[iÐJiÐJiå*Ø*Ø!&Ø%+Ø"(Ø'>Ø)^ØtÐ[^×[bÒ[bÐcpÑ[qÔ[qÐtÐtÐtð	ð 	ð 	ð ð 
	 °>Ð AÐ AÐEYÐ]kÐEkÐEkå*Ø$Ø!&Ø%+Ø+7¸:Ò+EÐ+E % %È;ØFRÐV`ÒF`ÐF`Ð'BÐ'BÐfyØ)bØwÐ^a×^eÒ^eÐfsÑ^tÔ^tÐwÐwÐwð	ð 	ð 	ð
ð 
ð 
Ðõ
 ÐdÐdÐdÐdÐYcÐdÑdÔdÑdÔdˆð$
ð $
ð $
Ð õ "Ð!pÐ!pÐ!pÐ!pÐeoÐ!pÑ!pÔ!pÑpÔpð 
Ø˜KÐ'Ðg¨W¸Ð-FÐ-fÈ*ÐXfÐJfð 	ð
!
ð !
ð !
Ðõ ÐjÐjÐjÐjÐ_iÐjÑjÔjÑjÔjÐð (¨<Ò7ÐW¸=ÈKÐ;WÐð ð 	[Ý'ˆFØ$ˆKØˆIð BˆKˆKØð 	[Ð#3ð 	[Ý'ˆFØ$ˆKØˆIð QˆKˆKØ ð 	[Ð)9ð 	[Ý'ˆFØ$ˆKØ'ˆIð RˆKˆKØð 	[ mð 	[Ð<Oð 	[Ý*ˆFØ$ˆKÝÐCÐC¸
ÐCÑCÔCÑCÔCð "Ø!�	�	ÝÐkÐkÐ`jÐkÑkÔkÑkÔkð "Ø!�	�	ÝÐnÐnÐcmÐnÑnÔnÑnÔnð "Ø!�	�	à!�	ð PˆKˆKå*ˆFØ$ˆKØˆIØZˆKà˜:Ò%Ð%Ø1ˆGˆGà)ˆGàð 	?Ø ŸIšIØfÐfÐ\aÐbdÐcdÐbdÔ\eÐfÑfÔfñô ˆMõ �5‰zŒz˜AŠ~ˆ~ØÐ!H­3¨u©:¬:¸©>Ð!HÐ!HÐ!HÑH�øà>ˆMð Ø&Ø&Ø!'Ø#Ø#*Ø%2Ø&ð	
ð 	
ð 		
r'   N)r   r	   r
   r   r   r	   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr‚   rE   r'   r%   r   r      s>   € € € € € ØyÐyàða
ð a
ð a
ñ „\ða
ð a
ð a
r'   r   )Ú
__future__r   ÚloggingÚdecimalr   Útypingr   Ú	getLoggerrƒ   Úloggerrs   rr   rq   rp   ro   rn   r   rE   r'   r%   ú<module>rŽ      s¼   ðØ "Ð "Ð "Ð "Ð "Ð "à Tà €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ð MÐ ØDÐ Ø=Ð ØDÐ ØEÐ Ø7Ð ðe
ð e
ð e
ð e
ð e
ñ e
ô e
ð e
ð e
ð e
r'   