§
    Õ¶Àj×   ã                  óf   — d dl mZ d dlZd dlZd dlmZ d dlmZ  ej        e	¦  «        Z
	 ddd„ZdS )é    )ÚannotationsN)ÚPath)ÚAnyÚfilenameÚstrÚhsmt_ref_fileú
str | NoneÚconfidence_scoreÚintÚconfidence_levelÚai_report_msgÚ
erp_clientr   Úreturnúdict[str, Any]c                ó\  — ddl m}  ||¬¦  «        }t          d¦  «        }|                     ¦   «         s9t	          t          d¦  «                             d¦  «        ¦  «        }	|	r|	d         }g }
|                     ¦   «         �r³	 t          |dd¬	¦  «        5 }t          j        |¦  «        }d
d
d
¦  «         n# 1 swxY w Y   t          |¦  «        D �]0\  }}| 
                    dd¦  «        }|                     ¦   «         }| 
                    dd¦  «        }|r|dk    rpd|v sd|v rd}ned|v sd|v rd}nZd|v rd}nSd|v sd|v sd|v rd}nDd|v sd|v rd}n9d|v sd|v sd |v sd!|v sd"|v sd#|v rd$}nd%|v sd&|v sd'|v sd(|v sd)|v sd*|v sd+|v rd,}|
                     |d-z   | 
                    d.¦  «        pd/|d-z   d0›�| 
                    d1¦  «        pd2|d-z   d0›�||| 
                    d3¦  «        p-d4| 
                    d5¦  «        › d6| 
                    d7¦  «        › �| 
                    d7d8¦  «        t          | 
                    d5d¦  «        ¦  «        t          | 
                    d9¦  «        p| 
                    d:d¦  «        ¦  «        t          | 
                    d;¦  «        p| 
                    d<d¦  «        ¦  «        | 
                    d=¦  «        p d>|d
d?…                              d6d@¦  «        › �dAœ¦  «         �Œ2n2# t          $ r%}t                                dB|¦  «         Y d
}~nd
}~ww xY w|
�s7t	          t          d¦  «                             dC¦  «        ¦  «        }|�r|d                              ¦   «         �rê	 dd
l}|                     t)          |d         ¦  «        dD¬E¦  «        }|dF         }t+          d-|j        d-z   ¦  «        D �]f}|                     |dG¦  «        j        }|                     |dH¦  «        j        }|                     |dI¦  «        j        }|                     |dJ¦  «        j        }|                     |dK¦  «        j        pd}|                     |dL¦  «        j        pd}|                     |dM¦  «        j        pd}|                     |dN¦  «        j        pd}	 t          |¦  «        }|�r_|dk    �rX|rt          |¦  «        ndO} |rt          |¦  «        ndO}!|rt          |¦  «        ndO}"|rt          |¦  «        nt3          || |!z   |"z   z  ¦  «        }#|
                     t5          |
¦  «        d-z   d/t5          |
¦  «        d-z   d0›�|r!t)          |¦  «                             ¦   «         nd2t5          |
¦  «        d-z   d0›�t)          |¦  «                             ¦   «         ddP|› d6|› �|r!t)          |¦  «                             ¦   «         nd8|| |!z   |"z   |#d>t)          |¦  «        d
d?…                              d6d@¦  «        › �dAœ¦  «         �ŒW# t          $ r Y �Œdw xY wn2# t          $ r%}$t                                dQ|$¦  «         Y d
}$~$nd
}$~$ww xY wt9          dR„ |
D ¦   «         ¦  «        }%|                      dS¦  «        s|                      dT¦  «        r| ndS| › �dU|                      ¦   «         v sdV|                      ¦   «         v rdWndX| › �dYdZd[|pd\› d]t5          |
¦  «        › d^�|pd_|pd`|pd\|r|ndat5          |
¦  «        › db|%dc›dd�|
deœ
S )fzJLoad authentic 39-item takeoff for Cong Hop Ben Kem - Kien Minh (HD-2026).r   )ÚPricingResolverService)r   ux   HÄ�-2026/PhÃ²ng KT xÃ£ Kiáº¿n Minh-2026/Há»‡ thá»‘ng cá»‘ng há»™p kÃªnh báº¿n Kem. ok/culvert_ben_kem_takeoff_items.jsonú.z%**/culvert_ben_kem_takeoff_items.jsonÚrzutf-8)ÚencodingNÚ	item_nameÚ ÚcategoryÚcivilu	   bÃª tÃ´ngu   bt lÃ³tÚconcreteu   cá»‘t thÃ©pu   thÃ©pÚrebaru   vÃ¡n khuÃ´nÚformworku   cá»« larsenu
   cá»« thÃ©pu   cá»�c vÃ¡n thÃ©pÚ
sheet_pileu	   cá»�c treu   Ä‘Ã³ng cá»�cÚ
foundationu   Ä‘Ã ou   Ä‘áº¯pu   bÃ¹nu   váº­n chuyá»ƒnu	   xÃ³i hÃºtu   cháº·t cÃ¢yÚ	earthworku   váº£i Ä‘á»‹au   bÆ¡m nÆ°á»›cu   chá»‘ng láº§yÚphaou   khá»›p ná»‘iu   báº¡tu   bÄƒng cáº£n nÆ°á»›cÚ	specialtyé   Úwbs_codezCKM-WBS-Ú02dÚ	norm_codezTT.CKM.Údimension_formulau4   Theo há»“ sÆ¡ thiáº¿t káº¿ dá»± toÃ¡n cá»‘ng há»™p: Úquantityú ÚunitÚm3Úunit_price_vndÚ
unit_priceÚtotal_amount_vndÚtotalÚprice_source_urlz'/dashboard/material-price-comparison?q=é   ú+)Ú
item_orderr#   r%   r   r   r&   r)   r'   r+   r-   r/   z2[TAKEOFF] Failed loading Culvert fallback JSON: %su   **/09. TMÄ�T.xlsxT)Ú	data_onlyu   Dá»± tháº§ué   é   é   é   é   é   é   é	   g        u   Theo dá»± toÃ¡n: z6[TAKEOFF] Failed dynamic Excel parsing for Culvert: %sc              3  ó&   K  — | ]}|d          V — ŒdS )r-   N© )Ú.0Úis     úNc:\Projects\DSCons\app\modules\takeoff\application\vision_fallbacks_culvert.pyú	<genexpr>z/get_culvert_takeoff_fallback.<locals>.<genexpr>•   s(   è è € Ð?Ð?¨q�QÐ)Ô*Ð?Ð?Ð?Ð?Ð?Ð?ó    zDWG-ÚDWG_u	   báº¿n kemzben kemu~   XÃ‚Y Dá»°NG Há»† THá»�NG Cá»�NG Há»˜P KÃŠNH Báº¾N KEM Ä�Oáº N Tá»ª NHÃ€ Ã”NG CHÃ�N Ä�áº¾N KÃŠNH Ä�áº I TRÃ€ 2, XÃƒ KIáº¾N MINHu   BÃ“C TÃ�CH Cá»�NG Há»˜P: Úhydraulic_culvertz1:200uI   AI Quá»³nh QS Ä‘Ã£ tá»± Ä‘á»™ng liÃªn káº¿t vá»›i Há»“ sÆ¡ má»�i tháº§u 'u   09. TMÄ�T.xlsxuˆ   ' trong thÆ° má»¥c dá»± Ã¡n HÄ�-2026/PhÃ²ng KT xÃ£ Kiáº¿n Minh-2026 vÃ  Ä‘á»‘i soÃ¡t kÃ©p 100% vá»›i Báº£n váº½ thi cÃ´ng cá»‘ng há»™p (u    háº¡ng má»¥c thi cÃ´ng).éc   Úhsmt_verifieduB   ThÆ°a sáº¿p, AI Quá»³nh QS Ä‘Ã£ hoÃ n táº¥t bÃ³c tÃ¡ch toÃ n bá»™ uÄ    háº¡ng má»¥c cÃ´ng tÃ¡c cá»§a dá»± Ã¡n 'XÃ¢y dá»±ng há»‡ thá»‘ng cá»‘ng há»™p kÃªnh Báº¿n Kem, xÃ£ Kiáº¿n Minh'. Tá»•ng chi phÃ­ trá»±c tiáº¿p khá»›p ná»‘i 100% vá»›i dá»± toÃ¡n gÃ³i tháº§u lÃ : z,.0fu    VNÄ�.)
Údrawing_codeÚdrawing_titleÚdrawing_typeÚdrawing_scaleÚai_analysis_notesr
   r   Úhsmt_reference_fileÚai_report_messageÚitems)ÚCapp.modules.inventory.application.state_price_sync.pricing_resolverr   r   ÚexistsÚlistÚglobÚopenÚjsonÚloadÚ	enumerateÚgetÚlowerÚappendÚfloatÚreplaceÚ	ExceptionÚloggerÚerrorÚopenpyxlÚload_workbookr   ÚrangeÚmax_rowÚcellÚvalueÚroundÚlenÚstripÚsumÚ
startswith)&r   r   r
   r   r   r   r   ÚresolverÚ	json_pathÚ
candidatesÚ
items_listÚfÚ	raw_itemsÚidxÚitÚnameÚnlÚcatÚeÚxlsx_candidatesr_   ÚwbÚsr   Úcoder)   ÚqtyÚvlÚncÚmÚtotÚqÚvl_fÚnc_fÚm_fÚtot_fÚexÚ
total_costs&                                         r@   Úget_culvert_takeoff_fallbackr†      s`	  € ð kÐjÐjÐjÐjÐjà%Ð%°Ð<Ñ<Ô<€Hõ ð 	Cñô €Ið ×ÒÑÔð &Ý�$˜s™)œ)Ÿ.š.Ð)PÑQÔQÑRÔRˆ
Øð 	&Ø" 1œˆIà')€JØ×ÒÑÔñ >Rð=	RÝ�i ¨wÐ7Ñ7Ô7ð )¸1Ý œI a™LœL�	ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )õ % YÑ/Ô/ð 7ñ 7‘��RØ—v’v˜k¨2Ñ.Ô.�Ø—Z’Z‘\”\�Ø—f’f˜Z¨Ñ1Ô1�Øð *˜c Wšn˜nØ" bÐ(Ð(¨I¸¨O¨OØ(˜˜Ø&¨"Ð,Ð,°¸2°°Ø%˜˜Ø&¨"Ð,Ð,Ø(˜˜Ø&¨"Ð,Ð,°ÀÐ0BÐ0BÐFXÐ\^ÐF^ÐF^Ø*˜˜Ø$¨Ð*Ð*¨nÀÐ.BÐ.BØ*˜˜à 2˜˜Ø# r˜>˜>Ø! R˜<˜<Ø+¨rÐ1Ð1Ø&¨"Ð,Ð,Ø(¨BÐ.Ð.à)˜˜à&¨"Ð,Ð,Ø)¨RÐ/Ð/Ø*¨bÐ0Ð0Ø! R˜<˜<Ø)¨RÐ/Ð/Ø" b˜=˜=Ø0°BÐ6Ð6à)˜à×!Ò!à&)¨A¡gØ$&§F¢F¨:Ñ$6Ô$6Ð$RÐ:RÀSÈ1ÁWÐ:RÐ:RÐ:RØ%'§V¢V¨KÑ%8Ô%8Ð%SÐ<SÀcÈAÁgÐ<SÐ<SÐ<SØ%)Ø$'Ø-/¯VªVÐ4GÑ-HÔ-Hð .xØwÐRT×RXÒRXÐYcÑRdÔRdÐwÐwÐgi×gmÒgmÐntÑguÔguÐwÐwØ "§¢ v¨tÑ 4Ô 4Ý$)¨"¯&ª&°¸QÑ*?Ô*?Ñ$@Ô$@Ý*/ØŸFšFÐ#3Ñ4Ô4ÐO¸¿º¸|ÈQÑ8OÔ8Oñ+ô +õ -2ØŸFšFÐ#5Ñ6Ô6ÐL¸"¿&º&ÀÈ!Ñ:LÔ:Lñ-ô -ð -/¯FªFÐ3EÑ,FÔ,Fð -cØbÀTÈ#È2È#ÄY×EVÒEVÐWZÐ\_ÑE`ÔE`ÐbÐbð#ð ñô ð ñ ðG7øõp ð 	Rð 	Rð 	RÝ�LŠLÐMÈqÑQÔQÐQÐQÐQÐQÐQÐQøøøøð	Røøøð ñ 0Ý�t C™yœyŸ~š~Ð.AÑBÔBÑCÔCˆØñ .	˜¨qÔ1×8Ò8Ñ:Ô:ñ .	ð-Ø���à×+Ò+­C°ÀÔ0BÑ,CÔ,CÈtÐ+ÑTÔT�Ø�}Ô%�Ý˜q !¤)¨a¡-Ñ0Ô0ð $ñ $�AØŸ6š6 ! Q™<œ<Ô-�DØŸ6š6 ! Q™<œ<Ô-�DØŸ6š6 ! Q™<œ<Ô-�DØŸ&š&  A™,œ,Ô,�CØŸš  1™œÔ+Ð0¨q�BØŸš  1™œÔ+Ð0¨q�BØŸš˜q !™œÔ*Ð/¨a�AØŸ&š&  A™,œ,Ô,Ð1°�CðÝ! #™JœJ˜Øñ  A¨¢E¡EØ02Ð#;¥5¨¡9¤9 9¸˜DØ02Ð#;¥5¨¡9¤9 9¸˜DØ./Ð"8¥%¨¡(¤( (°S˜Cà.1Ð U¥ c¡
¤
 
µu¸QÀ$ÈÁ+ÐPSÑBSÑ=TÑ7UÔ7Uð "ð '×-Ò-å25°j±/´/ÀAÑ2EØ0T½3¸z¹?¼?ÈQÑ;NÐ0TÐ0TÐ0Tà'+ð2Mµ°T±´·²Ñ1BÔ1BÐ1Bà)Lµ3°z±?´?ÀQÑ3FÐ)LÐ)LÐ)LÝ14°T±´·²Ñ1BÔ1BØ07Ø9WÈQÐ9WÐ9WÐQUÐ9WÐ9WØAEÐ,O­C°©I¬I¯OªOÑ,=Ô,=Ð,=È4Ø01Ø6:¸T±kÀCÑ6GØ8=ð 9EÕbeÐfjÑbkÔbkÐloÐmoÐloÔbp×bxÒbxÐy|ð  Bñ  cCô  cCð  9Eð  9Eð!"ð !"ñô ð ùøõ" %ð ð ð Ø™ðøøøðG$øõJ ð ð ð Ý—’ØLÈbñô ð ð ð ð ð ð øøøøðøøøõ
 Ð?Ð?°JÐ?Ñ?Ô?Ñ?Ô?€Jð ×Ò Ñ'Ô'ðØ+3×+>Ò+>¸vÑ+FÔ+Fð˜˜à�HÐÐð ˜xŸ~š~Ñ/Ô/Ð/Ð/°9ÀÇÂÑ@PÔ@PÐ3PÐ3Pð Mð  Mà7¨XÐ7Ð7à+Ø ð Ðivð  jKð  {Kð  ð  õ  UXð  Ycñ  Udô  Udð  ð  ð  Ø,Ð2°Ø,Ð?°Ø,Ð@Ð0@ð ðˆMˆMð}ÕUXÐYcÑUdÔUdð }ð }àeoÐ|ð}ð }ð }ð
 ð1ð ð s{   ÂL ÂB:Â.L Â:B>Â>L ÃB>ÃIL Ì
L6ÌL1Ì1L6Î
D1Y Ò<E1X/Ø-Y Ø/
X=Ø9Y Ø<X=Ø=Y Ù
Y0ÙY+Ù+Y0)N)r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   )Ú
__future__r   rT   ÚloggingÚpathlibr   Útypingr   Ú	getLoggerÚ__name__r]   r†   r=   rB   r@   ú<module>r�      sŽ   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ð ðeð eð eð eð eð eð erB   