§
    õsšjM  ã                  ó´  — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZ ddlmZ dd	lmZmZmZmZ  ej        d
¦  «        Z e
ddg¬¦  «        Zd<d„Ze                     ded¬¦  «         ee¦  «         e eg d¢¦  «        ¦  «        fd=d„¦   «         Ze                     dd¬¦  «         ee¦  «         e eg d¢¦  «        ¦  «        fd>d„¦   «         Ze                     d d!¬¦  «         edd"¬#¦  «         edd$¬#¦  «         ed%d&d'¬(¦  «         edd¬)¦  «         ee¦  «         e eg d¢¦  «        ¦  «        fd?d0„¦   «         Ze                     d1d2¬¦  «         ee¦  «         e eg d¢¦  «        ¦  «        fd@d4„¦   «         Z e                     d5d6¬¦  «         ee¦  «         e ed7d8g¦  «        ¦  «        fdAd;„¦   «         Z!dS )BzHFastAPI Presentation Routes for Smart Debt Clearing and Auto-Settlement.é    )ÚannotationsN)ÚAnyÚOptional)ÚUUID)Ú	APIRouterÚDependsÚHTTPExceptionÚQuery)Úrequire_role©ÚSmartClearingService)ÚBatchClearingRequestÚBatchClearingResponseÚManualClearingRequestÚSettlementResponseItemzdscons.api.finance.clearingz/v1/erp/finance/clearingzFinance - Smart Debt Clearing)ÚprefixÚtagsÚreturnr   c                 ó   — t          ¦   «         S )Nr   © ó    úHC:\Projects\DSCons\app\modules\financial\presentation\clearing_routes.pyÚget_clearing_servicer      s   € ÝÑ!Ô!Ð!r   z
/batch-runuM   Cháº¡y quÃ©t khá»›p ná»‘i ná»£ tá»± Ä‘á»™ng hÃ ng loáº¡t (Há»— trá»£ Dry-run))Úresponse_modelÚsummary)Ú
superadminÚdirectorÚ
accountantÚpayloadr   ÚserviceÚcurrent_userúdict[str, Any]r   c           
     ód  — 	 |                      | j        | j        | j        ¬¦  «        }t	          d|j        |j        |j        |j        |j        d„ |j	        D ¦   «         ¬¦  «        S # t          $ r>}t                               d|¦  «         t          dt          |¦  «        ¬¦  «        ‚d}~ww xY w)	um   QuÃ©t toÃ n bá»™ giao dá»‹ch ngÃ¢n hÃ ng chÆ°a khá»›p vÃ  cáº¥n trá»« tá»± Ä‘á»™ng vÃ o hÃ³a Ä‘Æ¡n cÃ²n ná»£.)Údry_runÚmin_confidenceÚlimitÚsuccessc                ó€  — g | ]»}t          |j        |j        |j        |j        |j        |j        |j        |j        t          |j
        d ¦  «        r|j
        j        nt          |j
        ¦  «        |j        t          |j        d ¦  «        r|j        j        nt          |j        ¦  «        |j        |j        ¬¦  «        ‘Œ¼S )Úvalue)ÚidÚbank_transaction_idÚ
invoice_idÚpartner_nameÚpartner_tax_codeÚaccount_codeÚsettlement_amount_vndÚsettlement_dateÚclearing_methodÚconfidence_scoreÚstatusÚnotesÚ
created_at)r   r*   r+   r,   r-   r.   r/   r0   r1   Úhasattrr2   r)   Ústrr3   r4   r5   r6   )Ú.0Úss     r   ú
<listcomp>z+run_batch_auto_clearing.<locals>.<listcomp>6   sÉ   € ð ð ð ð$ õ# 'Ø”tØ()Ô(=Ø œ|Ø!"¤Ø%&Ô%7Ø!"¤Ø*+Ô*AØ$%Ô$5å˜qÔ0°'Ñ:Ô:ð%0 AÔ$5Ô$;Ð$;å˜QÔ.Ñ/Ô/Ø%&Ô%7Ý-4°Q´X¸wÑ-GÔ-GÐZ˜1œ8œ>˜>ÍSÐQRÔQYÉ]Ì]Øœ'Ø œ|ðñ ô ðð ð r   )r4   r$   Útotal_transactions_scannedÚmatched_countÚtotal_cleared_amount_vndÚinvoices_settled_countÚsettlementszBatch auto clearing failed: %séô  ©Ústatus_codeÚdetailN)Úbatch_auto_clearingr$   r%   r&   r   r<   r=   r>   r?   r@   Ú	ExceptionÚloggerÚerrorr	   r8   )r   r    r!   ÚresÚes        r   Úrun_batch_auto_clearingrK      sÙ   € ð$<Ø×)Ò)Ø”OØ"Ô1Ø”-ð *ñ 
ô 
ˆõ
 %ØØ”KØ'*Ô'EØÔ+Ø%(Ô%AØ#&Ô#=ðð ð$ œð%ñ ô ð
ñ 
ô 
ð 	
øõ8 ð <ð <ð <Ý�ŠÐ5°qÑ9Ô9Ð9Ý¨µC¸±F´FÐ;Ñ;Ô;Ð;øøøøð<øøøs   ‚A$A' Á'
B/Á19B*Â*B/z/summaryuP   BÃ¡o cÃ¡o tá»•ng há»£p tÃ¬nh hÃ¬nh gáº¡ch ná»£ vÃ  cÃ´ng ná»£ toÃ n há»‡ thá»‘ng)r   c                óÂ   — 	 |                       ¦   «         S # t          $ r>}t                               d|¦  «         t	          dt          |¦  «        ¬¦  «        ‚d}~ww xY w)uh   Tá»•ng há»£p sá»‘ tiá»�n Ä‘Ã£ cáº¥n trá»«, phÃ¢n loáº¡i ná»£ 331, 131 vÃ  cÃ¡c giao dá»‹ch chÆ°a khá»›p.z"Failed to get clearing summary: %srA   rB   N)Úget_clearing_summaryrF   rG   rH   r	   r8   )r    r!   rJ   s      r   rM   rM   P   sf   € ð<Ø×+Ò+Ñ-Ô-Ð-øÝð <ð <ð <Ý�ŠÐ9¸1Ñ=Ô=Ð=Ý¨µC¸±F´FÐ;Ñ;Ô;Ð;øøøøð<øøøs   ‚ –
A 9AÁAz/settlementsu1   Danh sÃ¡ch cÃ¡c báº£n ghi cáº¥n trá»« gáº¡ch ná»£u6   Lá»�c theo tráº¡ng thÃ¡i: settled, tentative, reversed)Údescriptionu   Lá»�c theo MST Ä‘á»‘i tÃ¡céd   é   rA   )ÚgeÚle)rQ   r4   úOptional[str]r.   r&   ÚintÚoffsetc                óö   — 	 |                      | |||¬¦  «        }dt          |¦  «        |||dœS # t          $ r>}t                               d|¦  «         t          dt          |¦  «        ¬¦  «        ‚d}~ww xY w)u>   Tra cá»©u lá»‹ch sá»­ cÃ¡c bÃºt toÃ¡n cáº¥n trá»« gáº¡ch ná»£.)r4   r.   r&   rU   r'   )r4   Útotalr&   rU   ÚdatazFailed to list settlements: %srA   rB   N)Úlist_settlementsÚlenrF   rG   rH   r	   r8   )r4   r.   r&   rU   r    r!   ÚitemsrJ   s           r   rY   rY   b   s¢   € ð<Ø×(Ò(ØØ-ØØð	 )ñ 
ô 
ˆð  Ý˜‘Z”ZØØØð
ð 
ð 	
øõ ð <ð <ð <Ý�ŠÐ5°qÑ9Ô9Ð9Ý¨µC¸±F´FÐ;Ñ;Ô;Ð;øøøøð<øøøs   ‚-0 °
A8º9A3Á3A8z/manual-matchuE   Káº¿ toÃ¡n gáº¡ch ná»£ thá»§ cÃ´ng má»™t giao dá»‹ch vá»›i hÃ³a Ä‘Æ¡nr   c                óÒ  — 	 |                      dd¦  «        }|                     | j        | j        | j        | j        pd|¬¦  «        }ddt          |j        ¦  «        t          |j        ¦  «        dœS # t          $ r#}t          dt          |¦  «        ¬	¦  «        ‚d
}~wt          $ r>}t                               d|¦  «         t          dt          |¦  «        ¬	¦  «        ‚d
}~ww xY w)uM   Cho phÃ©p káº¿ toÃ¡n gáº¡ch ná»£ thá»§ cÃ´ng vá»›i sá»‘ tiá»�n chá»‰ Ä‘á»‹nh.Úemailzaccountant@dscons.vnÚ )Útransaction_idr,   Úsettlement_amountr5   Ú
user_emailr'   u%   Gáº¡ch ná»£ thá»§ cÃ´ng thÃ nh cÃ´ng.)r4   ÚmessageÚsettlement_idr0   é�  rB   NzManual clearing failed: %srA   )ÚgetÚmanual_clearr+   r,   r0   r5   r8   r*   ÚfloatÚ
ValueErrorr	   rF   rG   rH   )r   r    r!   ra   ÚsettleÚval_errrJ   s          r   Úmanual_clear_debtrk   „   s  € ð<Ø!×%Ò% gÐ/EÑFÔFˆ
Ø×%Ò%Ø"Ô6ØÔ)Ø%Ô;Ø”-Ð% 2Ø!ð &ñ 
ô 
ˆð  Ø>Ý  ¤™^œ^Ý%*¨6Ô+GÑ%HÔ%Hð	
ð 
ð 	
øõ ð Bð Bð BÝ¨µC¸±L´LÐAÑAÔAÐAøøøøÝð <ð <ð <Ý�ŠÐ1°1Ñ5Ô5Ð5Ý¨µC¸±F´FÐ;Ñ;Ô;Ð;øøøøð<øøøs$   ‚A0A3 Á3
C&Á=BÂC&Â(9C!Ã!C&z/{settlement_id}/reverseuF   Há»§y bÃºt toÃ¡n gáº¡ch ná»£ vÃ  phá»¥c há»“i sá»‘ dÆ° ná»£ hÃ³a Ä‘Æ¡nr   r   rc   r   c                ó  — 	 |                      | ¦  «        }|S # t          $ r#}t          dt          |¦  «        ¬¦  «        ‚d}~wt          $ r>}t
                               d|¦  «         t          dt          |¦  «        ¬¦  «        ‚d}~ww xY w)uK   Há»§y má»™t bÃºt toÃ¡n gáº¡ch ná»£ (chá»‰ dÃ nh cho superadmin / director).rd   rB   NzReverse settlement failed: %srA   )Úreverse_settlementrh   r	   r8   rF   rG   rH   )rc   r    r!   rI   rj   rJ   s         r   rm   rm   ¦   sž   € ð<Ø×(Ò(¨Ñ7Ô7ˆØˆ
øÝð Bð Bð BÝ¨µC¸±L´LÐAÑAÔAÐAøøøøÝð <ð <ð <Ý�ŠÐ4°aÑ8Ô8Ð8Ý¨µC¸±F´FÐ;Ñ;Ô;Ð;øøøøð<øøøs    ‚ ™
B£AÁBÁ9BÂB)r   r   )r   r   r    r   r!   r"   r   r   )r    r   r!   r"   r   r"   )r4   rS   r.   rS   r&   rT   rU   rT   r    r   r!   r"   r   r"   )r   r   r    r   r!   r"   r   r"   )rc   r   r    r   r!   r"   r   r"   )"Ú__doc__Ú
__future__r   ÚloggingÚtypingr   r   Úuuidr   Úfastapir   r   r	   r
   Ú"app.modules.auth.presentation.authr   Ú8app.modules.financial.application.smart_clearing_servicer   Ú3app.modules.financial.presentation.clearing_schemasr   r   r   r   Ú	getLoggerrG   Úrouterr   ÚpostrK   re   rM   rY   rk   rm   r   r   r   ú<module>rz      s¯  ðØ NÐ Nà "Ð "Ð "Ð "Ð "Ð "à €€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð à <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ð <à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø YÐ YÐ YÐ YÐ YÐ Yðð ð ð ð ð ð ð ð ð ð ð ð 
ˆÔ	Ð8Ñ	9Ô	9€Ø	ˆÐ4Ð<[Ð;\Ð	]Ñ	]Ô	]€ð"ð "ð "ð "ð ‡‚ØØ(Ø[ð ñ ô ð %, GÐ,@Ñ$AÔ$AØ#* 7ØˆÐ=Ð=Ð=Ñ>Ô>ñ$ô $ð,<ð ,<ð ,<ð ,<ñô ð
,<ð^ ‡‚ØØ^ð ñ ô ð
 %, GÐ,@Ñ$AÔ$AØ#* 7ØˆÐ=Ð=Ð=Ñ>Ô>ñ$ô $ð<ð <ð <ð <ñ	ô ð<ð ‡‚ØØ?ð ñ ô ð
 "˜E $Ð4lÐmÑmÔmØ&+ e¨DÐ>ZÐ&[Ñ&[Ô&[Ø��s˜q SÐ)Ñ)Ô)Ø�%˜˜a�.‘.”.Ø$+ GÐ,@Ñ$AÔ$AØ#* 7ØˆÐ=Ð=Ð=Ñ>Ô>ñ$ô $ð<ð <ð <ð <ñ	ô ð<ð< ‡‚ØØSð ñ ô ð %, GÐ,@Ñ$AÔ$AØ#* 7ØˆÐ=Ð=Ð=Ñ>Ô>ñ$ô $ð<ð <ð <ð <ñ	ô ð<ð< ‡‚ØØTð ñ ô ð %, GÐ,@Ñ$AÔ$AØ#* 7Øˆ�l JÐ/Ñ0Ô0ñ$ô $ð<ð <ð <ð <ñ	ô ð<ð <ð <r   