§
    t�’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                óú  — 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 �]g\  }}|                     d	d
¦  «        }| 	                    ¦   «         }|                     dd¦  «        }|r|dk    r§d|v sd|v sd|v rd}n˜d|v sd|v sd|v rd}n‰d|v rd}n‚d|v sd|v sd|v sd|v sd|v sd|v rd}ngd|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(}n=d)|v sd*|v sd+|v sd,|v sd-|v sd.|v sd/|v sd0|v rd1}nd2|v sd3|v sd4|v sd5|v sd6|v sd7|v rd8}| 
                    |d9z   |                     d:¦  «        pd;|d9z   d<›�|                     d=¦  «        pd>|d9z   d?›�|||                     d@¦  «        p-dA|                     dB¦  «        › dC|                     dD¦  «        › �|                     dDd
¦  «        t          |                     dBd¦  «        ¦  «        t          |                     dE¦  «        p|                     dFd¦  «        ¦  «        t          |                     dG¦  «        p|                     dHd¦  «        ¦  «        |                     dI¦  «        p dJ|ddK…                              dCdL¦  «        › �dMœ¦  «         �Œin4# t          $ r'}t                               dN|› �¦  «         Y d}~nd}~ww xY w|�sÁt          t          d¦  «                             dO¦  «        ¦  «        }|�r�|d                              ¦   «         �rt	 ddl}|                     t%          |d         ¦  «        ¦  «        }|                     dP¦  «        }t)          dQ|j        ¦  «        D �]æ}t%          |                     |dR¦  «        ¦  «                             ¦   «         }t%          |                     |dS¦  «        ¦  «                             ¦   «         }	 t          |                     |dQ¦  «        ¦  «        }t          |                     |dT¦  «        pdU¦  «        }t          |                     |dV¦  «        pdU¦  «        }t          |                     |dW¦  «        pdU¦  «        }||z   |z   }t1          ||z  ¦  «        }|r¹|dk    r³| 
                    t3          |¦  «        d9z   d;t3          |¦  «        d9z   d<›�t%          |                     |d9¦  «        ¦  «                             ¦   «         pd>t3          |¦  «        d9z   d?›�|ddX|› dC|› �||||dJ|ddK…                              dCdL¦  «        › �dMœ¦  «         �Œ×# t          $ r Y �Œäw xY wn4# t          $ r'}t                               dY|› �¦  «         Y d}~nd}~ww xY wt5          dZ„ |D ¦   «         ¦  «        }d[d\d]d^d_t3          |¦  «        › d`�|pda|pdb|pdc|pdd|pde› dft3          |¦  «        › dg|dh›di�|djœ
S )kzLLoad authentic 224-item takeoff for Nha Van Hoa Dai Thang project (HD-2026).uG   HÄ�-2026/NVH Ä�áº¡i Tháº¯ng-2026/TK-DT/nvh_dai_thang_takeoff_items.jsonú.z#**/nvh_dai_thang_takeoff_items.jsonr   Úrzutf-8)ÚencodingNÚ	item_nameÚ ÚcategoryÚcivilu	   bÃª tÃ´ngu   bt lÃ³tu   bÃª tÃ´ng Ä‘Ãºc sáºµnÚconcreteu   cá»‘t thÃ©pu   thÃ©pu   lÆ°á»›i thÃ©pÚrebaru   vÃ¡n khuÃ´nÚformworku   Ä‘Ã ou   Ä‘áº¯pu	   phÃ¡ dá»¡u   Ä‘á»¥cu
   thÃ¡o dá»¡u   váº­n chuyá»ƒnÚ	earthworku   xÃ¢yu   gáº¡chÚmasonryu   trÃ¡tu   lÃ¡ngu   lÃ¡tu   á»‘pu   sÆ¡nu
   cáº¡o bá»�u   phÃ oÚ	finishingu	   mÃ¡i tÃ´nu   xÃ  gá»“u   cá»­au   nhÃ´m kÃ­nhÚinoxu   khung sáº¯tu	   hoa sáº¯tzlan canÚ
metal_roofu   dÃ¢yu   Ä‘Ã¨nÚaptomatu   cÃ´ng táº¯cu   á»‘ng luá»“nu   Ä‘iá»‡nÚmepé   Úwbs_codezNVH-WBS-Ú03dÚ	norm_codezTT.NVH.Ú02dÚdimension_formulau'   Theo há»“ sÆ¡ thiáº¿t káº¿ dá»± toÃ¡n: Úquantityú ÚunitÚ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.   r0   z,[TAKEOFF] Failed loading NVH fallback JSON: u'   **/NVH ThÃ´n Ä�áº¡i Tháº¯ng_TD2_8.7.xlsu   Dá»± tháº§ué   é   é   é   g        é   é   u   Theo dá»± toÃ¡n: z0[TAKEOFF] Failed dynamic Excel parsing for NVH: c              3  ó&   K  — | ]}|d          V — ŒdS )r.   N© )Ú.0Úis     úJC:\Projects\DSCons\app\modules\takeoff\application\vision_fallbacks_nvh.pyú	<genexpr>z+get_nvh_takeoff_fallback.<locals>.<genexpr>›   s(   è è € Ð?Ð?¨q�QÐ)Ô*Ð?Ð?Ð?Ð?Ð?Ð?ó    zDWG-NVH-DAITHANG-2026um   CÃ”NG TRÃŒNH: Sá»¬A CHá»®A, Cáº¢I Táº O NHÃ€ VÄ‚N HÃ“A THÃ”N Ä�áº I THáº®NG VÃ€ CÃ�C Háº NG Má»¤C PHá»¤ TRá»¢Úcivil_buildingz1:100us   AI Quá»³nh QS Ä‘Ã£ Ä‘á»‘i soÃ¡t kÃ©p 100% báº£n váº½ CAD DWG vá»›i Há»“ sÆ¡ má»�i tháº§u & Dá»± toÃ¡n gÃ³i tháº§u (uX    háº¡ng má»¥c cÃ´ng tÃ¡c xÃ¢y láº¯p, hoÃ n thiá»‡n, phá»¥ trá»£, Ä‘iá»‡n chiáº¿u sÃ¡ng).éb   Úhsmt_verifiedu$   NVH ThÃ´n Ä�áº¡i Tháº¯ng_TD2_8.7.xlsuU   ThÆ°a sáº¿p, em Ä‘Ã£ tá»± Ä‘á»™ng tÃ¬m tháº¥y vÃ  liÃªn káº¿t Há»“ sÆ¡ má»�i tháº§u 'zDU TOAN NVH THON DAI THANG.xlsu0   ' cho báº£n váº½ NhÃ  vÄƒn hÃ³a Ä�áº¡i Tháº¯ng (u    háº¡ng má»¥c, tá»•ng chi phÃ­ z,.0fu.    VNÄ�). Ä�á»™ tin cáº­y bÃ³c tÃ¡ch Ä‘áº¡t 98%.)
Údrawing_codeÚdrawing_titleÚdrawing_typeÚdrawing_scaleÚai_analysis_notesr
   r   Úhsmt_reference_fileÚai_report_messageÚitems)r   ÚexistsÚlistÚglobÚopenÚjsonÚloadÚ	enumerateÚgetÚlowerÚappendÚfloatÚreplaceÚ	ExceptionÚloggerÚerrorÚxlrdÚopen_workbookr   Úsheet_by_nameÚrangeÚnrowsÚ
cell_valueÚstripÚroundÚlenÚsum)r   r   r
   r   r   r   Ú	json_pathÚ
candidatesÚ
items_listÚfÚ	raw_itemsÚidxÚitÚnameÚnlÚcatÚeÚxls_candidatesr[   ÚwbÚsr   r+   ÚqtyÚvlÚncÚmÚu_priceÚtotÚexÚ
total_costs                                  r>   Úget_nvh_takeoff_fallbackr{      s´  € õ ØQñô €Ið ×ÒÑÔð &Ý�$˜s™)œ)Ÿ.š.Ð)NÑOÔOÑPÔPˆ
Øð 	&Ø" 1œˆIà€JØ×ÒÑÔñ QMðP	MÝ�i ¨wÐ7Ñ7Ô7ð )¸1Ý œI a™LœL�	ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )õ % YÑ/Ô/ð Jñ J‘��RØ—v’v˜k¨2Ñ.Ô.�Ø—Z’Z‘\”\�à—f’f˜Z¨Ñ1Ô1�Øð /$˜c Wšn˜nØ" bÐ(Ð(¨I¸¨O¨OÐ?VÐZ\Ð?\Ð?\Ø(˜˜Ø&¨"Ð,Ð,°¸2°°ÀÐTVÐAVÐAVØ%˜˜Ø&¨"Ð,Ð,Ø(˜˜à 2˜˜Ø# r˜>˜>Ø&¨"Ð,Ð,Ø# r˜>˜>Ø'¨2Ð-Ð-Ø+¨rÐ1Ð1à)˜˜Ø 2˜˜¨°R¨¨Ø'˜˜à 2˜˜Ø" b˜=˜=Ø! R˜<˜<Ø! R˜<˜<Ø! R˜<˜<Ø'¨2Ð-Ð-Ø" b˜=˜=à)˜˜à# rÐ)Ð)Ø%¨Ð+Ð+Ø" b˜=˜=Ø(¨BÐ.Ð.Ø! R˜<˜<Ø(¨BÐ.Ð.Ø&¨"Ð,Ð,Ø$¨˜?˜?à*˜˜à "˜˜Ø" b˜=˜=Ø$¨˜?˜?Ø(¨BÐ.Ð.Ø)¨RÐ/Ð/Ø$¨˜?˜?à#˜à×!Ò!à&)¨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ð .kØjÀRÇVÂVÈJÑEWÔEWÐjÐjÐZ\×Z`ÒZ`ÐagÑZhÔZhÐjÐjØ "§¢ v¨rÑ 2Ô 2Ý$)¨"¯&ª&°¸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ð#ð ñô ð ñ ðmJøõV ð 	Mð 	Mð 	MÝ�LŠLÐKÈÐKÐKÑLÔLÐLÐLÐLÐLÐLÐLøøøøð	Møøøð ñ &VÝ�d 3™iœiŸnšnÐ-VÑWÔWÑXÔXˆØñ $	V˜n¨QÔ/×6Ò6Ñ8Ô8ñ $	Vð#VØ���à×'Ò'­¨N¸1Ô,=Ñ(>Ô(>Ñ?Ô?�Ø×$Ò$ ]Ñ3Ô3�Ý˜q !¤'Ñ*Ô*ð ñ �AÝ˜qŸ|š|¨A¨qÑ1Ô1Ñ2Ô2×8Ò8Ñ:Ô:�DÝ˜qŸ|š|¨A¨qÑ1Ô1Ñ2Ô2×8Ò8Ñ:Ô:�DðÝ# A§L¢L°°AÑ$6Ô$6Ñ7Ô7˜Ý" 1§<¢<°°1Ñ#5Ô#5Ð#<¸Ñ=Ô=˜Ý" 1§<¢<°°1Ñ#5Ô#5Ð#<¸Ñ=Ô=˜Ý! !§,¢,¨q°!Ñ"4Ô"4Ð";¸Ñ<Ô<˜Ø"$ r¡'¨A¡+˜Ý# C¨'¡MÑ2Ô2˜Øð  C¨!¢G GØ&×-Ò-å25°j±/´/ÀAÑ2EØ0T½3¸z¹?¼?ÈQÑ;NÐ0TÐ0TÐ0TÝ14°Q·\²\À!ÀQÑ5GÔ5GÑ1HÔ1H×1NÒ1NÑ1PÔ1Pð 2KØ'Jµ°Z±´À1Ñ1DÐ'JÐ'JÐ'JØ15Ø07Ø9YÈSÐ9YÐ9YÐSWÐ9YÐ9YØ,0Ø03Ø6=Ø8;Ø8ÐbfÐgjÐhjÐgjÔbk×bsÒbsÐtwÐy|Ñb}Ôb}Ð8Ð8ð!"ð !"ñô ð ùøõ  %ð ð ð Ø™ðøøøð7øõ: ð Vð Vð VÝ—’ÐTÐPRÐTÐTÑUÔUÐUÐUÐUÐUÐUÐUøøøøðVøøøõ Ð?Ð?°JÐ?Ñ?Ô?Ñ?Ô?€Jð 0ð IØ(Ø ð }õ  TWð  Xbñ  Tcô  Tcð  }ð  }ð  }Ø,Ð2°Ø,Ð?°Ø,ÐVÐ0Vàð ðqÐhuð  iZð  zZð qð qÝADÀZÁÄðqð qØq{ð  qðqð qð qð ð!ð ð s{   Á5L, ÂB(ÂL, Â(B,Â,L, Â/B,Â0I;L, Ì,
MÌ6MÍMÎ1CW0 Ñ5E'W×W0 ×
W,×(W0 ×+W,×,W0 ×0
X!×:XØX!)N)r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   )Ú
__future__r   rP   ÚloggingÚpathlibr   Útypingr   Ú	getLoggerÚ__name__rY   r{   r;   r@   r>   ú<module>r‚      sŽ   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ð ðcð cð cð cð cð cð cr@   