§
    R¶j@M  ã                  óÐ   — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZmZmZmZ dd	lmZmZmZmZ dd
lmZ  ej        d¦  «        Z G d„ d¦  «        ZdS )zIApplication Service for Smart Debt Clearing and Automated Reconciliation.é    )ÚannotationsN)Údate)ÚDecimal)ÚAny)ÚUUIDÚuuid4)Úcalculate_settlement_allocationÚ classify_non_invoice_transactionÚfind_subset_sum_invoicesÚmatch_by_exact_amountÚmatch_by_invoice_numberÚmatch_partner_keywords)ÚClearingMethodÚClearingResultÚDebtSettlementÚSettlementStatus)ÚSettlementRepositoryPortz'dscons.financial.smart_clearing_servicec                  ót   — e Zd ZdZd3d4d„Z	 	 	 d5d6d„Z	 	 	 d7d8d„Z	 	 d9d:d$„Zd;d'„Zd<d(„Z		 	 	 	 d=d>d0„Z
d?d2„ZdS )@ÚSmartClearingServicezPOrchestrates automated debt matching, settlement allocation, and ledger updates.NÚ
repositoryúSettlementRepositoryPort | NoneÚreturnÚNonec                ó8   — |€ddl m}  |¦   «         }|| _        d S )Nr   )ÚPostgresSettlementRepository)Ú:app.modules.financial.infrastructure.settlement_repositoryr   Ú_repo)Úselfr   r   s      úNC:\Projects\DSCons\app\modules\financial\application\smart_clearing_service.pyÚ__init__zSmartClearingService.__init__$   sA   € ØÐðð ð ð ð ð ð 6Ð5Ñ7Ô7ˆJØˆŒ
ˆ
ˆ
ó    Fçš™™™™™é?Útransactionúdict[str, Any] | UUIDÚdry_runÚboolÚmin_confidenceÚfloatÚcached_unpaid_invoicesúlist[dict[str, Any]] | Noneúlist[DebtSettlement]c                óT  ‡$‡%— |                       |¦  «        }|sg S t          t          |d         ¦  «        ¦  «        }t          t          |                     d¦  «        pt	          ¦   «         ¦  «        ¦  «        }|                     d¦  «        }t          |d¦  «        r|                     ¦   «         }	nEt          |t          ¦  «        rt          j        |dd…         ¦  «        }	nt          j	        ¦   «         }	|                     d¦  «        pd 
                    ¦   «         Š$|                     d	d
¦  «        }
t          t          |                     d¦  «        pd¦  «        ¦  «        }|t          d¦  «        k    rg S |
d
k    r›t          ˆ$fd„dD ¦   «         ¦  «        r€d‰$                     ¦   «         v rdnd}t          ||ddd|||	t          j        t          d¦  «        t"          j        d‰$dd…         › �¬¦  «        }|s| j                             |¦  «         |gS t+          ‰$|
|¬¦  «        }|j        rs|j        dv rjt          ||d|j        d|j        ||	t          |j        ¦  «        |j        t"          j        |j        ¬¦  «        }|s| j                             |¦  «         |gS |
d
k    rdndŠ%|
d
k    rdnd}|�ˆ%fd„|D ¦   «         }n| j                             ‰%¬ ¦  «        }g }|D �]Ç}t          |                     d!¦  «        pd¦  «        }|sŒ*t;          ‰$|¦  «        �rŒt          t          |d         ¦  «        ¦  «        }t          t          |                     d"¦  «        pd¦  «        ¦  «        }‰%d#v r|                     d$¦  «        n|                     d%¦  «        }‰%d#v r|                     d&¦  «        n|                     d'¦  «        }t=          ||¦  «        \  }}}|t          d¦  «        k    r¶t          ||||||||	t          j        t          d(¦  «        t"          j        d)|› d*‰$dd+…         › d,�¬¦  «        }|sP| j                             |¦  «         | j                              ||¦  «         | j         !                    ||¦  «         | "                    |¦  «         |c S �ŒÉ|D �]Ò}t          t          |                     d"¦  «        pd¦  «        ¦  «        }tG          ||¦  «        sŒE‰%d#v r|                     d$¦  «        n|                     d%¦  «        }‰%d#v r|                     d&¦  «        n|                     d'¦  «        }tI          ‰$|pd|¦  «        \  }}|�rt          t          |d         ¦  «        ¦  «        }t=          ||¦  «        \  }}}t          ||||||||	t          j%        t          t          tM          d-|z  d.¦  «        ¦  «        ¦  «        t"          j        d/|d0›d1|                     d!¦  «        › d2|› �¬¦  «        }|sP| j                             |¦  «         | j                              ||¦  «         | j         !                    ||¦  «         | "                    |¦  «         |c S �ŒÔg }d}d}|D ]—}‰%d#v r|                     d$¦  «        n|                     d%¦  «        }‰%d#v r|                     d&¦  «        n|                     d'¦  «        } tI          ‰$|pd| ¦  «        \  }}|r!|d3k    r| "                    |¦  «         |s|}| }Œ˜|�r“tO          ||d.¬4¦  «        }!|!�r~|!D �]x}"t          t          |"d         ¦  «        ¦  «        }t          t          |"                     d"¦  «        pd¦  «        ¦  «        }t          ||||p)|"                     d$¦  «        p|"                     d%¦  «        |p)|"                     d&¦  «        p|"                     d'¦  «        |||	t          j(        t          d5¦  «        t"          j        d6tS          |!¦  «        › d7|"                     d!¦  «        › d8|d0›d9�¬¦  «        }|sP| j                             |¦  «         | j                              ||¦  «         | j         !                    ||¦  «         | "                    |¦  «         �Œz|S |j        rjt          ||d|j        d|j        ||	t          |j        ¦  «        |j        t"          j        |j        ¬¦  «        }|s| j                             |¦  «         |gS |�ro|}#|D �]i}t          t          |                     d"¦  «        pd¦  «        ¦  «        }|t          d¦  «        k    rŒHt=          |#|¦  «        \  }}}|t          d¦  «        k    r nút          t          |d         ¦  «        ¦  «        }t          ||||||||	t          j*        t          d:¦  «        t"          j        d;|› d<|                     d!¦  «        › �¬¦  «        }|sP| j                             |¦  «         | j                              ||¦  «         | j         !                    ||¦  «         | "                    |¦  «         |#|z  }#|#t          d¦  «        k    r n�Œk|S )=uT   Tá»± Ä‘á»™ng so khá»›p vÃ  cáº¥n trá»« cho má»™t giao dá»‹ch ngÃ¢n hÃ ng cá»¥ thá»ƒ.ÚidÚ
company_idÚtransaction_dater   Né
   ÚdescriptionÚ Ú	directionÚoutflowÚamountr   Ú0c              3  óD   •K  — | ]}|‰                      ¦   «         v V — Œd S ©N)Úupper)Ú.0ÚkÚdescs     €r   ú	<genexpr>zDSmartClearingService.reconcile_single_transaction.<locals>.<genexpr>I   sD   øè è € ð *
ð *
àð �—’‘”Ðð*
ð *
ð *
ð *
ð *
ð *
r!   )ÚLD25ÚLD26zTHANH TOAN NO GOCzTHANH TOAN LAIzTRICH NO TU DONGÚVPBANKÚLAIÚ635Ú341u5   NgÃ¢n hÃ ng TMCP Viá»‡t Nam Thá»‹nh VÆ°á»£ng (VPBank)Ú
0100233583z0.9800u2   Tá»± Ä‘á»™ng cáº¥n trá»« nghÄ©a vá»¥ ná»£ VPBank: éd   )r.   Úbank_transaction_idÚ
invoice_idÚpartner_nameÚpartner_tax_codeÚaccount_codeÚsettlement_amount_vndÚsettlement_dateÚclearing_methodÚconfidence_scoreÚstatusÚnotes)r1   r3   r5   )Ú642Ú515Ú333Ú3383Ú334ÚinputÚoutputÚ331Ú131c           	     óÊ   •— g | ]_}|                      d ¦  «        ‰k    rDt          t          |                      d¦  «        pd¦  «        ¦  «        t          d¦  «        k    ¯]|‘Œ`S )r3   Úremaining_amount_vndr   r6   )Úgetr   Ústr)r:   ÚiÚtarget_inv_dirs     €r   ú
<listcomp>zESmartClearingService.reconcile_single_transaction.<locals>.<listcomp>€   sp   ø€ ð "ð "ð "àØ—5’5˜Ñ%Ô%¨Ò7Ð7Ý�C §¢Ð&<Ñ =Ô =Ð BÀÑCÔCÑDÔDÅwÈsÁ|Ä|ÒSÐSð ð TÐSÐSr!   ©r3   Úinvoice_numberr[   )rV   ÚinboundÚseller_nameÚ
buyer_nameÚseller_tax_codeÚbuyer_tax_codeú1.0000u$   Khá»›p chÃ­nh xÃ¡c sá»‘ hÃ³a Ä‘Æ¡n #u    trong ná»™i dung: 'éP   ú'gffffffî?é   u   Khá»›p chÃ­nh xÃ¡c sá»‘ tiá»�n ú,.0fu    Ä‘ vá»›i hÃ³a Ä‘Æ¡n #u    vÃ  Ä‘á»‘i tÃ¡c g333333ã?)Ú	max_comboz0.9500u   Khá»›p gá»™p u    hÃ³a Ä‘Æ¡n (Subset-Sum): HÄ� #z (u    Ä‘)z0.8500u   Khá»›p FIFO Ä‘á»‘i tÃ¡c u    vÃ o hÃ³a Ä‘Æ¡n #)+Ú_resolve_transactionr   r]   r\   r   Úhasattrr   Ú
isinstanceÚfromisoformatÚtodayÚstripr   Úanyr9   r   r   ÚVPBANK_LOANr   ÚSETTLEDr   Úsave_settlementr
   ÚmatchedrJ   rH   rM   rN   rP   Úget_unpaid_invoicesr   r	   ÚEXACT_INVOICE_NOÚupdate_invoice_settlementÚlink_bank_transaction_invoiceÚappendr   r   ÚEXACT_AMOUNT_PARTNERÚroundr   ÚSUBSET_SUM_INVOICESÚlenÚFIFO_PARTNER)&r   r#   r%   r'   r)   ÚtxÚtx_idr.   Útx_dateÚsettle_dater3   Ú	tx_amountrJ   Ú
settlementÚnon_invÚsettleÚcandidate_invoicesÚsettlements_createdÚinvÚinv_noÚinv_idÚinv_remrH   Úpartner_taxÚsettled_amtÚ_Úis_partner_matchÚp_scoreÚpartner_matched_invoicesÚmatched_partner_nameÚmatched_partner_taxÚp_nameÚp_taxÚcomboÚitemÚremaining_tx_amtr<   r_   s&                                       @@r   Úreconcile_single_transactionz1SmartClearingService.reconcile_single_transaction,   s"  øø€ ð ×&Ò& {Ñ3Ô3ˆØð 	ØˆIå•S˜˜Dœ‘]”]Ñ#Ô#ˆÝ�#˜bŸfšf \Ñ2Ô2Ð=µe±g´gÑ>Ô>Ñ?Ô?ˆ
Ø—&’&Ð+Ñ,Ô,ˆÝ�7˜FÑ#Ô#ð 	'Ø!Ÿ,š,™.œ.ˆKˆKÝ˜¥Ñ%Ô%ð 	'ÝÔ,¨W°S°b°S¬\Ñ:Ô:ˆKˆKåœ*™,œ,ˆKà—’�}Ñ%Ô%Ð+¨×2Ò2Ñ4Ô4ˆØ—F’F˜;¨	Ñ2Ô2ˆ	Ý�C §¢ xÑ 0Ô 0Ð 5°AÑ6Ô6Ñ7Ô7ˆ	Ø� ™œÒ$Ð$ØˆIð ˜	Ò!Ð!¥cð *
ð *
ð *
ð *
àjð*
ñ *
ô *
ñ '
ô '
Ð!ð %*¨T¯ZªZ©\¬\Ð$9Ð$9˜5˜5¸uˆLÝ'Ø%Ø$)ØØTØ!-Ø)Ø&/Ø +Ý .Ô :Ý!(¨Ñ!2Ô!2Ý'Ô/ØWÈ4ÐPTÐQTÐPTÌ:ÐWÐWðñ ô ˆJð ð 7Ø”
×*Ò*¨:Ñ6Ô6Ð6Ø�<Ðõ 3ØØØð
ñ 
ô 
ˆð Œ?ð 	˜wÔ3Ð7[Ð[Ð[Ý#Ø%Ø$)ØØ$Ô1Ø!%Ø$Ô1Ø&/Ø +Ý .¨wÔ/FÑ GÔ GØ!(Ô!9Ý'Ô/Ø”mðñ ô ˆFð ð 3Ø”
×*Ò*¨6Ñ2Ô2Ð2Ø�8ˆOð
 %.°Ò$:Ð$:˜˜ÀˆØ )¨YÒ 6Ð 6�u�u¸EˆØ!Ð-ð"ð "ð "ð "à/ð"ñ "ô "ÐÐð "&¤×!?Ò!?È.Ð!?Ñ!YÔ!YÐà46Ðð &ð !	/ñ !	/ˆCÝ˜ŸšÐ!1Ñ2Ô2Ð8°bÑ9Ô9ˆFØð Øå& t¨VÑ4Ô4ñ /Ý�c # d¤)™nœnÑ-Ô-�Ý!¥# c§g¢gÐ.DÑ&EÔ&EÐ&JÈÑ"KÔ"KÑLÔL�Ø9GÐK_Ð9_Ð9_˜sŸwšw }Ñ5Ô5Ð5Ðeh×elÒelÐmyÑezÔez�Ø<JÐNbÐ<bÐ<b˜cŸgšgÐ&7Ñ8Ô8Ð8Ðhk×hoÒhoð  qAñ  iBô  iB�å$CÀIÈwÑ$WÔ$WÑ!�˜Q Ø¥¨¡¤Ò-Ð-Ý+Ø#-Ø,1Ø#)Ø%1Ø)4Ø%1Ø.9Ø(3Ý(6Ô(GÝ)0°Ñ):Ô):Ý/Ô7ØmÀVÐmÐmÐaeÐfiÐgiÐfiÔajÐmÐmÐmðñ ô �Fð #ð PØœ
×2Ò2°6Ñ:Ô:Ð:Øœ
×<Ò<¸VÀ[ÑQÔQÐQØœ
×@Ò@ÀÈÑOÔOÐOà'×.Ò.¨vÑ6Ô6Ð6Ø.Ð.Ð.Ð.ùð &ð  	+ñ  	+ˆCÝ�c #§'¢'Ð*@Ñ"AÔ"AÐ"FÀQÑGÔGÑHÔHˆGÝ(¨°GÑ<Ô<ð Øà5CÐG[Ð5[Ð5[˜3Ÿ7š7 =Ñ1Ô1Ð1Ðad×ahÒahÐiuÑavÔavˆLØ8FÐJ^Ð8^Ð8^˜#Ÿ'š'Ð"3Ñ4Ô4Ð4Ðdg×dkÒdkÐl|Ñd}Ôd}ˆKå(>¸tÀ\ÐEWÐUWÐYdÑ(eÔ(eÑ%Ð˜gØñ +Ý�c # d¤)™nœnÑ-Ô-�Ý$CÀIÈwÑ$WÔ$WÑ!�˜Q Ý'Ø)Ø(-Ø%Ø!-Ø%0Ø!-Ø*5Ø$/Ý$2Ô$GÝ%,­Sµ°t¸g±~ÀqÑ1IÔ1IÑ-JÔ-JÑ%KÔ%KÝ+Ô3ð ]¸Ið  ]ð  ]ð  ]Ðbe×biÒbiÐjzÑb{Ôb{ð  ]ð  ]ð  O[ð  ]ð  ]ðñ ô �ð ð LØ”J×.Ò.¨vÑ6Ô6Ð6Ø”J×8Ò8¸ÀÑMÔMÐMØ”J×<Ò<¸UÀFÑKÔKÐKà#×*Ò*¨6Ñ2Ô2Ð2Ø*Ð*Ð*Ð*ñ/+ð4 :<Ð Ø+/ÐØ*.ÐØ%ð 	0ð 	0ˆCØ/=ÐAUÐ/UÐ/U�S—W’W˜]Ñ+Ô+Ð+Ð[^×[bÒ[bÐcoÑ[pÔ[pˆFØ2@ÐDXÐ2XÐ2X�C—G’GÐ-Ñ.Ô.Ð.Ð^a×^eÒ^eÐfvÑ^wÔ^wˆEÝ(>¸tÀVÀ\ÈrÐSXÑ(YÔ(YÑ%Ð˜gØð 0 G¨s¢N NØ(×/Ò/°Ñ4Ô4Ð4Ø+ð 0Ø+1Ð(Ø*/Ð'øð $ñ 	+Ý,¨YÐ8PÐ\]Ð^Ñ^Ô^ˆEØñ +Ø!ð 7ñ 7�DÝ!¥# d¨4¤j¡/¤/Ñ2Ô2�FÝ%¥c¨$¯(ª(Ð3IÑ*JÔ*JÐ*OÈaÑ&PÔ&PÑQÔQ�GÝ+Ø#-Ø,1Ø#)Ø%9Ð%n¸T¿XºXÀmÑ=TÔ=TÐ%nÐX\×X`ÒX`ÐamÑXnÔXnØ)<Ð)yÀÇÂÐIZÑ@[Ô@[Ð)yÐ_c×_gÒ_gÐhxÑ_yÔ_yØ%1Ø.5Ø(3Ý(6Ô(JÝ)0°Ñ):Ô):Ý/Ô7ð J­c°%©j¬jð  Jð  JÐY]×YaÒYaÐbrÑYsÔYsð  Jð  JÐw~ð  Jð  Jð  Jð  Jðñ ô �Fð #ð PØœ
×2Ò2°6Ñ:Ô:Ð:Øœ
×<Ò<¸VÀWÑMÔMÐMØœ
×@Ò@ÀÈÑOÔOÐOà'×.Ò.¨vÑ6Ô6Ð6Ñ6Ø*Ð*ð Œ?ð 	Ý#Ø%Ø$)ØØ$Ô1Ø!%Ø$Ô1Ø&/Ø +Ý .¨wÔ/FÑ GÔ GØ!(Ô!9Ý'Ô/Ø”mðñ ô ˆFð ð 3Ø”
×*Ò*¨6Ñ2Ô2Ð2Ø�8ˆOð $ñ "	Ø(ÐØ/ð  ñ  �Ý!¥# c§g¢gÐ.DÑ&EÔ&EÐ&JÈÑ"KÔ"KÑLÔL�Ø�g c™lœlÒ*Ð*Øå$CÐDTÐV]Ñ$^Ô$^Ñ!�˜Q Ø¥'¨#¡,¤,Ò.Ð.Ø�Eå�c # d¤)™nœnÑ-Ô-�Ý'Ø)Ø(-Ø%Ø!5Ø%8Ø!-Ø*5Ø$/Ý$2Ô$?Ý%,¨XÑ%6Ô%6Ý+Ô3ØxÐ5IÐxÐxÐ]`×]dÒ]dÐeuÑ]vÔ]vÐxÐxðñ ô �ð ð LØ”J×.Ò.¨vÑ6Ô6Ð6Ø”J×8Ò8¸ÀÑMÔMÐMØ”J×<Ò<¸UÀFÑKÔKÐKà#×*Ò*¨6Ñ2Ô2Ð2Ø  KÑ/Ð Ø#¥w¨s¡|¤|Ò3Ð3Ø�Eñ 4ð #Ð"r!   é,  ÚlimitÚintr   c                ó¶  — | j                              |¬¦  «        }| j                              d¬¦  «        | j                              d¬¦  «        z   }t          t	          |¦  «        |¬¦  «        }g }t          ¦   «         }t          ¦   «         }	|D ]}}
|                      |
|||¬¦  «        }|r`|xj        dz  c_        |D ]M}|                     |¦  «         |xj	        |j
        z  c_	        |j        r|                     |j        ¦  «         ŒNŒ~t	          |¦  «        |_        ||_        t                               d||j        |j        |j	        d	›¦  «         |S )
u\   QuÃ©t tá»± Ä‘á»™ng toÃ n bá»™ giao dá»‹ch chÆ°a gáº¡ch ná»£ vÃ  Ä‘á»‘i chiáº¿u hÃ ng loáº¡t.)r    rV   ra   rW   )Útotal_transactions_scannedr%   )r#   r%   r'   r)   é   z`Batch Auto-Clearing completed (dry_run=%s): scanned %d txs, matched %d txs, total cleared %s VNDrl   )r   Úget_unreconciled_transactionsry   r   r�   Úsetrž   Úmatched_countr}   Útotal_cleared_amount_vndrK   rG   ÚaddÚinvoices_settled_countÚsettlementsÚloggerÚinfor£   )r   r%   r'   r    Úunreconciled_txsÚcached_invoicesÚresultÚall_settlementsÚsettled_inv_idsÚpartially_inv_idsrƒ   ÚcreatedÚss                r   Úbatch_auto_clearingz(SmartClearingService.batch_auto_clearing8  s˜  € ð  œ:×CÒCÈ%ÐCÑPÔPÐØœ*×8Ò8Øð 9ñ 
ô 
àŒJ×*Ò*°XÐ*Ñ>Ô>ñ?ˆõ  Ý'*Ð+;Ñ'<Ô'<Øð
ñ 
ô 
ˆð
 13ˆÝ%(¡U¤UˆÝ'*¡u¤uÐà"ð 	:ð 	:ˆBØ×7Ò7ØØØ-Ø'6ð	 8ñ ô ˆGð ð :ØÐ$Ô$¨Ñ)Ð$Ô$Ø ð :ð :�AØ#×*Ò*¨1Ñ-Ô-Ð-ØÐ3Ô3°qÔ7NÑNÐ3Ô3Ø”|ð :Ø'×+Ò+¨A¬LÑ9Ô9Ð9øøå(+¨OÑ(<Ô(<ˆÔ%Ø,ˆÔå�ŠØnØØÔ-ØÔ ØÔ.Ð5Ð5ñ	
ô 	
ð 	
ð ˆr!   r2   úaccountant@dscons.vnÚtransaction_idr   rG   Úsettlement_amountr   rP   r]   Ú
user_emailr   c                óì  — |                       |¦  «        }|st          d|› d�¦  «        ‚|                     d¦  «        }t          |d¦  «        r|                     ¦   «         nt	          j        ¦   «         }|                     dd¦  «        }	|	dk    rdnd}
t          t          t          |                     d	¦  «        pt          ¦   «         ¦  «        ¦  «        |||
||t          j        t          d
¦  «        t          j        d|› d|› �                     ¦   «         ¬¦
  «
        }| j                             |¦  «         | j                             ||¦  «         | j                             ||¦  «         |S )u1   Káº¿ toÃ¡n thá»±c hiá»‡n gáº¡ch ná»£ thá»§ cÃ´ng.u   Giao dá»‹ch ngÃ¢n hÃ ng u    khÃ´ng tá»“n táº¡i.r/   r   r3   r4   rX   rY   r.   rh   u   Gáº¡ch ná»£ thá»§ cÃ´ng bá»Ÿi z. )
r.   rF   rG   rJ   rK   rL   rM   rN   rO   rP   )rn   Ú
ValueErrorr\   ro   r   rr   r   r   r]   r   r   ÚMANUALr   r   rv   rs   r   rw   r{   r|   )r   r¸   rG   r¹   rP   rº   rƒ   r…   r†   r3   rJ   rŠ   s               r   Úmanual_clearz!SmartClearingService.manual_clearg  sg  € ð ×&Ò& ~Ñ6Ô6ˆØð 	^ÝÐ\¸Ð\Ð\Ð\Ñ]Ô]Ð]à—&’&Ð+Ñ,Ô,ˆÝ(/°¸Ñ(@Ô(@ÐR�g—l’l‘n”n�nÅdÄjÁlÄlˆØ—F’F˜;¨	Ñ2Ô2ˆ	Ø )¨YÒ 6Ð 6�u�u¸EˆåÝ�C §¢ |Ñ 4Ô 4Ð ?½¹¼Ñ@Ô@ÑAÔAØ .Ø!Ø%Ø"3Ø'Ý*Ô1Ý$ XÑ.Ô.Ý#Ô+ØH°:ÐHÐHÀÐHÐH×NÒNÑPÔPð
ñ 
ô 
ˆð 	Œ
×"Ò" 6Ñ*Ô*Ð*ØŒ
×,Ò,¨ZÐ9JÑKÔKÐKØŒ
×0Ò0°ÀÑLÔLÐLØˆr!   Úsettlement_idúdict[str, Any]c                ó6   — | j                              |¦  «        S )uF   Há»§y bÃºt toÃ¡n gáº¡ch ná»£ vÃ  hoÃ n tráº£ sá»‘ dÆ° ná»£ hÃ³a Ä‘Æ¡n.)r   Úreverse_settlement)r   r¿   s     r   rÂ   z'SmartClearingService.reverse_settlement‹  s   € àŒz×,Ò,¨]Ñ;Ô;Ð;r!   c                ó4   — | j                              ¦   «         S )u/   BÃ¡o cÃ¡o tá»•ng há»£p sá»‘ liá»‡u gáº¡ch ná»£.)r   Úget_clearing_summary)r   s    r   rÄ   z)SmartClearingService.get_clearing_summary�  s   € àŒz×.Ò.Ñ0Ô0Ð0r!   rE   r   rO   ú
str | NonerI   Úoffsetúlist[dict[str, Any]]c                ó>   — | j                              ||||¬¦  «        S )u.   Láº¥y danh sÃ¡ch cÃ¡c giao dá»‹ch gáº¡ch ná»£.)rO   rI   r    rÆ   )r   Úget_settlements)r   rO   rI   r    rÆ   s        r   Úlist_settlementsz%SmartClearingService.list_settlements“  s/   € ð Œz×)Ò)ØØ-ØØð	 *ñ 
ô 
ð 	
r!   údict[str, Any] | Nonec                ó´  — t          |t          ¦  «        r|S | j                             ¦   «         } |¦   «         5 }|                     ¦   «         5 }|                     dt          |¦  «        f¦  «         |                     ¦   «         }|rt          |¦  «        n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 )u1   Chuáº©n hÃ³a transaction input thÃ nh dictionary.ac  
                    SELECT id, company_id, bank_name, account_number, transaction_date,
                           reference_number, direction, amount, counterparty_name,
                           description, transaction_category, matched_invoice_id
                    FROM erp_bank_transactions
                    WHERE id = %s;
                    N)rp   Údictr   Ú	_get_connÚcursorÚexecuter]   Úfetchone)r   r#   Úget_connÚconnÚcurÚrows         r   rn   z)SmartClearingService._resolve_transaction¢  sw  € õ �k¥4Ñ(Ô(ð 	ØÐð ”:×'Ò'Ñ)Ô)ˆØˆX‰ZŒZð 	2˜4Ø—’‘”ð 2 #Ø—’ðõ ˜Ñ%Ô%Ð'ñ	ô 	ð 	ð —l’l‘n”n�Ø$'Ð1•t˜C‘y”y�y¨Tð2ð 2ð 2ð 2ñ 2ô 2ð 2ð	2ð 	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð 	2ð 	2s6   »CÁAB4ÂCÂ4B8	Â8CÂ;B8	Â<CÃCÃCr8   )r   r   r   r   )Fr"   N)
r#   r$   r%   r&   r'   r(   r)   r*   r   r+   )Fr"   rŸ   )r%   r&   r'   r(   r    r¡   r   r   )r2   r·   )r¸   r   rG   r   r¹   r   rP   r]   rº   r]   r   r   )r¿   r   r   rÀ   )r   rÀ   )NNrE   r   )
rO   rÅ   rI   rÅ   r    r¡   rÆ   r¡   r   rÇ   )r#   r$   r   rË   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    rž   r¶   r¾   rÂ   rÄ   rÊ   rn   © r!   r   r   r   !   s  € € € € € ØZÐZð ð  ð  ð  ð  ð Ø #Ø>BðJ#ð J#ð J#ð J#ð J#ð\ Ø #Øð	-ð -ð -ð -ð -ðh Ø0ð"ð "ð "ð "ð "ðH<ð <ð <ð <ð1ð 1ð 1ð 1ð "Ø'+ØØð
ð 
ð 
ð 
ð 
ð2ð 2ð 2ð 2ð 2ð 2r!   r   )rÙ   Ú
__future__r   ÚloggingÚdatetimer   Údecimalr   Útypingr   Úuuidr   r   Ú+app.modules.financial.domain.clearing_rulesr	   r
   r   r   r   r   Ú0app.modules.financial.domain.settlement_entitiesr   r   r   r   Ú<app.modules.financial.domain.ports.financial_repository_portr   Ú	getLoggerr¬   r   rÚ   r!   r   ú<module>rå      so  ðØ OÐ Oà "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð
 
ˆÔ	ÐDÑ	EÔ	E€ðW2ð W2ð W2ð W2ð W2ñ W2ô W2ð W2ð W2ð W2r!   