§
     ’jb=  ã                  ó\   — d dl mZ d dlZd dlmZ  ej        e¦  «        Z	 	 	 	 	 	 ddd„ZdS )é    )ÚannotationsN)ÚAnyé_   Úai_predictedÚ ÚfilenameÚstrÚdrawing_hintú
str | NoneÚconfidence_scoreÚintÚconfidence_levelÚhsmt_ref_fileÚai_report_msgÚ
erp_clientr   Úreturnúdict[str, Any]c           &     óø  ‡+— ddl m}  ||¬¦  «        Š+�d�dˆ+fd„} |dd¦  «        }	 |dd¦  «        }
 |dd¦  «        } |dd¦  «        } |dd¦  «        } |dd¦  «        } |dd¦  «        } |dd¦  «        } |dd¦  «        } |dd¦  «        } |d d!¦  «        } |d"d#¦  «        } |d$d%¦  «        } |d&d'¦  «        } |d(d)¦  «        } |d*d+¦  «        } |d,d-¦  «        } |d.d/¦  «        } |d0d1¦  «        } |d2d3¦  «        } |d4d5¦  «        } |d6d-¦  «        } |d7d8¦  «        } |d9d:¦  «        }  |d;d<¦  «        }! |d=d>¦  «        }" |d?d@¦  «        }# |dAdB¦  «        }$dCdDdEdFdGdH|	dIdJœdKdLdMdFdGdN|
dOdJœdPdQdRdFdGdS|dTdJœdUdVdWdXdGdY|dZdJœd[d\d]d^d_d`|dadJœdbdcdddedfdg|dhdJœdidjdkdedfdl|dmdJœdndodpdXdGdq|drdJœdsdtdud^d_dv|dwdJœdxdydzdedfd{|d|dJœd}d~ddedfd€|d�dJœd‚dƒd„dXdGd…|d†dJœd‡dˆd‰dŠdGd‹|dŒdJœd�dŽd�dŠdGd�|d‘dJœd’d“d”dŠdGd•|d–dJœd—d˜d™dšd_d›|dœdJœd�dždŸdšd_d |d¡dJœd¢d£d¤dšd_d¥|d¦dJœd§d¨d©dšd_dª|d«dJœd¬d­d®dšd_dª|d¯dJœd°d±d²dšd³d´|dµdJœd¶d·d¸dšd_d¹|dºdJœd»d¼d½d¾dfd¿|dÀdJœdÁdÂdÃd¾dfdÄ|dÅdJœdÆdÇdÈd¾d_dÉ|dÊdJœdËdÌdÍd¾d³dÎ|dÏdJœdÐdÑdÒdšd_dÓ|dÔdJœdÕdÖd×dšd_dØ| dÙdJœdÚdÛdÜdÝdÞdß|"dàdJœdádâdãdÝdÞdß|#|$z   dädJœg}%g }&t          |%¦  «        D ]Æ\  }'}(t          |(då         |(dæ         z  ¦  «        })|&                     |'dçz   |(dè         |(dé         |(dê         |(dë         dì|(dí         › �|(dî         t          |(då         ¦  «        t          |(dæ         ¦  «        t          |)¦  «        dï|(dê         dðdñ…                              dòdó¦  «        › �dôœ¦  «         ŒÇt          dõ„ |&D ¦   «         ¦  «        }*|                      dö¦  «        s|                      d÷¦  «        r| ndö| › �dø| › �dùdúdût          |&¦  «        › dü�||||pdýt          |&¦  «        › dþ| › dÿ|*�d ›�d�|&�dœ
S (  zgGenerate authentic 28-item engineering takeoff schedule for civil and structural drawings (2026 Norms).r   )ÚPricingResolverService)r   õ   Váº­t liá»‡uÚkwr	   Úfbr   Úgroupr   c                ó|   •— ‰                      | d||¬¦  «        }t          |                     d|¦  «        ¦  «        S )Nu   BÃ³c tÃ¡ch dÃ¢n dá»¥ng 2026)ÚkeywordÚcontextÚmaterial_groupÚfallback_priceÚprice)Úresolve_material_price_syncr   Úget)r   r   r   ÚresÚresolvers       €úLC:\Projects\DSCons\app\modules\takeoff\application\vision_fallbacks_civil.pyÚfetch_pz+get_civil_takeoff_fallback.<locals>.fetch_p   sG   ø€ Ø×2Ò2ØØ1Ø Øð	 3ñ 
ô 
ˆõ �3—7’7˜7 BÑ'Ô'Ñ(Ô(Ð(ó    u   Ä‘Ã o Ä‘áº¥tip”  u   sá»­a mÃ³ng thá»§ cÃ´ngih6 u   cÃ¡t Ä‘en san ná»�niØG u   bÃª tÃ´ng lÃ³ti�” u   bÃª tÃ´ng m250i` u   cá»‘t thÃ©p cb300i A  u   thÃ©p thanh váº±n cb400i0C  u   vÃ¡n khuÃ´n phá»§ phimiˆ„ u   xÃ¢y gáº¡ch mÃ³ngi  u   xÃ¢y gáº¡ch khÃ´ng nungi  u   xÃ¢y tÆ°á»�ng ngÄƒn 110iàª u   trÃ¡t tÆ°á»�ng trongi8Á u$   trÃ¡t tÆ°á»�ng ngoÃ i chá»‘ng tháº¥miX u   trÃ¡t tráº§n dáº§miHè u   lÃ¡ng ná»�n sÃ niL u   lÃ¡t gáº¡ch ceramic 600x600ièn u   á»‘p chÃ¢n tÆ°á»�ngièý  u   sÆ¡n báº£ trong ngoÃ i nhÃ i@ u   khung vÃ¬ kÃ¨o thÃ©p máº¡ káº½mid–  u   xÃ  gá»“ c máº¡ káº½mi }  u   mÃ¡i tÃ´n chá»‘ng nÃ³ng pui½ u   Ãºp nÃ³c tÃ´nu   cá»­a nhÃ´m xingfaipÎ  u   cá»­a sá»• nhÃ´m kÃ­nhi�: u   khÃ³a cá»­a tay gáº¡tiÐÝ u"   há»‡ thá»‘ng Ä‘iá»‡n chiáº¿u sÃ¡ngi ×uu   cáº¥p thoÃ¡t nÆ°á»›ci Iu   thiáº¿t bá»‹ vá»‡ sinhi @Ý z1.1zAB.11110u]   Ä�Ã o Ä‘áº¥t há»‘ mÃ³ng báº±ng mÃ¡y Ä‘Ã o 0.8m3 káº¿t há»£p sá»­a thá»§ cÃ´ng Ä‘áº¥t cáº¥p IIÚ	earthworkÚm3g     Ða@z24 * 1.8 * 1.8 * 1.5)ÚwbsÚnormÚnameÚcatÚunitÚqtyr   Úformz1.2zAB.11210uK   Sá»­a thá»§ cÃ´ng Ä‘Ã¡y mÃ³ng vÃ  Ä‘Ã o rÃ£nh giáº±ng mÃ³ng Ä‘áº¥t cáº¥p IIgÍÌÌÌÌÌ8@z'24 * 1.8 * 1.8 * 0.15 + 180 * 0.3 * 0.3z1.3zAB.13411uH   Ä�áº¯p cÃ¡t Ä‘en tÃ´n ná»�n Ä‘á»‡m mÃ³ng Ä‘á»™ cháº·t Ä‘áº§m nÃ©n K=0.90g      V@z240 * 0.35 + 24 * 0.10z2.1zAF.11110u>   BÃª tÃ´ng lÃ³t mÃ³ng vÃ  giáº±ng mÃ³ng Ä‘Ã¡ 4x6 M100 dÃ y 10cmÚconcreteg33333³-@z)24 * 2.0 * 2.0 * 0.10 + 180 * 0.40 * 0.10z2.2zAF.81110uL   VÃ¡n khuÃ´n mÃ³ng Ä‘Æ¡n vÃ  vÃ¡n khuÃ´n giáº±ng mÃ³ng báº±ng gá»— phá»§ phimÚformworkÚm2gÍÌÌÌÌe@z$24 * (1.8*4) * 0.45 + 180 * (0.35*2)z2.3zAF.61110uH   Gia cÃ´ng láº¯p dá»±ng cá»‘t thÃ©p mÃ³ng vÃ  giáº±ng mÃ³ng D<=10 CB300-VÚrebarÚkgg     èœ@z24 * 45.0 + 180 * 4.2z2.4zAF.61120uH   Gia cÃ´ng láº¯p dá»±ng cá»‘t thÃ©p mÃ³ng vÃ  giáº±ng mÃ³ng D<=18 CB300-Vg     p¬@z24 * 85.0 + 180 * 8.8z2.5zAF.12210uJ   BÃª tÃ´ng mÃ³ng Ä‘Æ¡n vÃ  giáº±ng mÃ³ng BTCT M250 Ä‘Ã¡ 1x2 thÆ°Æ¡ng pháº©mgÍÌÌÌÌLH@z'24 * (1.8*1.8*0.45) + 180 * (0.22*0.35)z3.1zAF.81210uK   VÃ¡n khuÃ´n cá»™t, dáº§m, lanh tÃ´, giáº±ng tÆ°á»�ng báº±ng gá»— phá»§ phimg     �u@z)24 * (0.22*4*3.6) + 220 * (0.22*2+0.35*2)z3.2zAF.61210uG   Gia cÃ´ng láº¯p dá»±ng cá»‘t thÃ©p cá»™t, dáº§m, lanh tÃ´ D<=10 CB300-Vg     Ì @z24 * (3.6*8*0.617) + 220 * 4.5z3.3zAF.61220uG   Gia cÃ´ng láº¯p dá»±ng cá»‘t thÃ©p cá»™t, dáº§m, lanh tÃ´ D<=18 CB300-Vg     ¸°@z24 * (3.6*4*1.58) + 220 * 18.0z3.4zAF.12310uD   BÃª tÃ´ng cá»™t, dáº§m, sÃ n, lanh tÃ´ M250 Ä‘Ã¡ 1x2 thÆ°Æ¡ng pháº©mg333333J@z524 * (0.22*0.22*3.6) + 220 * (0.22*0.35) + 240 * 0.10z4.1zAE.11110uP   XÃ¢y tÆ°á»�ng mÃ³ng vÃ¡ch ngÄƒn báº±ng gáº¡ch khÃ´ng nung VRO/xi mÄƒng vá»¯a M75Úmasonryg     €2@z180 * 0.22 * 0.45z4.2zAE.11210uN   XÃ¢y tÆ°á»�ng bao che 220mm gáº¡ch khÃ´ng nung xi mÄƒng cá»‘t liá»‡u vá»¯a M75gÍÌÌÌÌQ@z!(24.0+10.0)*2 * 3.6 * 0.22 - 38.0z4.3zAE.11310u?   XÃ¢y tÆ°á»�ng ngÄƒn 110mm gáº¡ch khÃ´ng nung vá»¯a xi mÄƒng M75gffffff6@z(10.0*4) * 3.6 * 0.11 - 12.0z5.1zAK.11110u>   TrÃ¡t tÆ°á»�ng trong nhÃ  báº±ng vá»¯a xi mÄƒng M75 dÃ y 1.5cmÚ	finishingg      ‚@uA   TÆ°á»�ng trong: 2 máº·t tÆ°á»�ng ngÄƒn + máº·t trong tÆ°á»�ng baoz5.2zAK.11210u\   TrÃ¡t tÆ°á»�ng ngoÃ i nhÃ  cÃ³ phá»¥ gia chá»‘ng tháº¥m báº±ng vá»¯a xi mÄƒng M75 dÃ y 2.0cmg     Ðq@z(24.0+10.0)*2 * 3.6 - 45.0z5.3zAK.11310uC   TrÃ¡t tráº§n dáº§m, lanh tÃ´, sÃª nÃ´ vá»¯a xi mÄƒng M75 dÃ y 1.5cmg     `h@u(   Ä�Ã¡y dáº§m + máº·t dÆ°á»›i sÃ n sÃª nÃ´z5.4zAK.12110u:   LÃ¡ng ná»�n sÃ n vá»¯a xi mÄƒng M75 dÃ y 3cm táº¡o pháº³ngg      n@u-   Diá»‡n tÃ­ch máº·t sÃ n táº§ng 1: 24.0 * 10.0z5.5zAK.13110uR   LÃ¡t ná»�n báº±ng gáº¡ch Ceramic 600x600 chá»‘ng trÆ¡n xÆ°Æ¡ng bÃ¡n sá»© cao cáº¥pu>   ToÃ n bá»™ sÃ n sáº£nh, phÃ²ng há»™i trÆ°á»�ng vÃ  phá»¥ trá»£z5.6zAK.14110u=   á»�p gáº¡ch chÃ¢n tÆ°á»�ng H=12cm gáº¡ch Ceramic Ä‘á»“ng mÃ uÚmg      b@u+   Chu vi tÆ°á»�ng cÃ¡c phÃ²ng trá»« cá»­a Ä‘iz5.7zAK.15110u]   SÆ¡n báº£ tÆ°á»�ng tráº§n trong vÃ  ngoÃ i nhÃ  1 nÆ°á»›c lÃ³t 2 nÆ°á»›c phá»§ Maxilite/Duluxg      Ž@u:   Tá»•ng diá»‡n tÃ­ch trÃ¡t tÆ°á»�ng trong + ngoÃ i + tráº§nz6.1zAI.11110uJ   Gia cÃ´ng láº¯p dá»±ng khung vÃ¬ kÃ¨o thÃ©p há»™p máº¡ káº½m Ä‘á»‹nh hÃ¬nhÚ
metal_roofg     $£@u   8 bá»™ vÃ¬ kÃ¨o * 306 kg/bá»™z6.2zAI.11210uE   Gia cÃ´ng láº¯p dá»±ng xÃ  gá»“ thÃ©p máº¡ káº½m C100-C150 dÃ y 1.8mmg     @š@u#   12 thanh xÃ  gá»“ * 25.5m * 5.5kg/mz6.3zAI.12110uQ   Lá»£p mÃ¡i tÃ´n chá»‘ng nÃ³ng 3 lá»›p PU dÃ y 0.45mm sÃ³ng vuÃ´ng kÃ¨m vÃ­t báº¯ng      r@z25.0 * 5.75 * 2z6.4zAI.12210uC   Láº¯p Ä‘áº·t mÃ¡ng xá»‘i tÃ´n káº½m vÃ  Ãºp nÃ³c tÃ´n cÃ¡ch nhiá»‡tg      I@u.   Chiá»�u dÃ i Ä‘á»‰nh mÃ¡i + mÃ¡ng xá»‘i 2 bÃªnz7.1zAM.11110uf   Cung cáº¥p láº¯p Ä‘áº·t cá»­a Ä‘i nhÃ´m há»‡ Xingfa 55 kÃ­nh an toÃ n 6.38mm kÃ¨m phá»¥ kiá»‡n Kinlongg     €<@u,   Cá»­a chÃ­nh 4 cÃ¡nh + 4 cá»­a thÃ´ng phÃ²ngz7.2zAM.11210uZ   Cung cáº¥p láº¯p Ä‘áº·t cá»­a sá»• nhÃ´m kÃ­nh há»‡ Xingfa 55 má»Ÿ quay/háº¥t kÃ­nh 6.38mmg      A@u2   8 bá»™ cá»­a sá»• 2 cÃ¡nh 1.8m x 1.4m + Ã´ thoÃ¡ngz8.1zBA.11110ur   Cung cáº¥p láº¯p Ä‘áº·t há»‡ thá»‘ng cáº¥p Ä‘iá»‡n chiáº¿u sÃ¡ng, á»• cáº¯m, tá»§ Ä‘iá»‡n phÃ¢n phá»‘i vÃ  aptomatÚmepu   há»‡g      ð?u1   Trá»�n gÃ³i há»‡ thá»‘ng MEP Ä‘iá»‡n cÃ´ng trÃ¬nhz8.2zBB.11110ux   Cung cáº¥p láº¯p Ä‘áº·t há»‡ thá»‘ng cáº¥p thoÃ¡t nÆ°á»›c, bá»“n nÆ°á»›c Inox 2000L vÃ  thiáº¿t bá»‹ vá»‡ sinh Viglacerau9   Trá»�n gÃ³i há»‡ thá»‘ng cáº¥p thoÃ¡t nÆ°á»›c & vá»‡ sinhr.   r   é   r)   r*   r+   r,   u&   Theo há»“ sÆ¡ thiáº¿t káº¿ thi cÃ´ng: r/   r-   z'/dashboard/material-price-comparison?q=Né   ú ú+)Ú
item_orderÚwbs_codeÚ	norm_codeÚ	item_nameÚcategoryÚdimension_formular-   ÚquantityÚunit_price_vndÚtotal_amount_vndÚprice_source_urlc              3  ó&   K  — | ]}|d          V — ŒdS )rF   N© )Ú.0Úis     r$   ú	<genexpr>z-get_civil_takeoff_fallback.<locals>.<genexpr>  s(   è è € Ð:Ð:¨q�QÐ)Ô*Ð:Ð:Ð:Ð:Ð:Ð:r&   zDWG-ÚDWG_u/   Báº¢N Váº¼ Káº¾T Cáº¤U & Dá»° TOÃ�N THI CÃ”NG: Úcivil_buildingz1:100ur   AI Quá»³nh QS Ä‘Ã£ Ä‘á»‘i soÃ¡t vÃ  trÃ­ch xuáº¥t hoÃ n chá»‰nh há»“ sÆ¡ bÃ³c tÃ¡ch khá»‘i lÆ°á»£ng cÃ´ng trÃ¬nh (u‘    háº¡ng má»¥c xÃ¢y láº¯p, káº¿t cáº¥u mÃ³ng BTCT M250, cá»™t dáº§m sÃ n, xÃ¢y trÃ¡t hoÃ n thiá»‡n, mÃ¡i tÃ´n xÃ  gá»“ thÃ©p vÃ  cÆ¡ Ä‘iá»‡n MEP).uN   ThÆ°a sáº¿p, AI Quá»³nh QS Ä‘Ã£ hoÃ n táº¥t phÃ¢n tÃ­ch bÃ³c tÃ¡ch toÃ n bá»™ uD    háº¡ng má»¥c cÃ´ng tÃ¡c xÃ¢y láº¯p & hoÃ n thiá»‡n cho báº£n váº½ 'u0   '. Tá»•ng chi phÃ­ dá»± toÃ¡n Æ°á»›c tÃ­nh lÃ : z,.0fu    VNÄ�.)
Údrawing_codeÚdrawing_titleÚdrawing_typeÚdrawing_scaleÚai_analysis_notesr   r   Úhsmt_reference_fileÚai_report_messageÚitems)r   )r   r	   r   r   r   r	   r   r   )
ÚCapp.modules.inventory.application.state_price_sync.pricing_resolverr   Ú	enumerateÚroundÚappendÚfloatÚreplaceÚsumÚ
startswithÚlen),r   r
   r   r   r   r   r   r   r%   Úp_daoÚp_suaÚ	p_cat_sanÚp_bt_lotÚ	p_bt_m250Úp_thep_mÚp_thep_lÚp_vkÚ
p_xay_mongÚp_xay_tuongÚ
p_xay_nganÚp_trat_trongÚp_trat_ngoaiÚp_trat_tranÚ
p_lang_nenÚ
p_lat_gachÚ	p_op_chanÚp_sonÚ
p_keo_thepÚp_xa_goÚ	p_mai_tonÚp_up_nocÚp_cua_diÚp_cua_soÚp_o_khoaÚp_dienÚp_nuocÚp_tbvsÚ	raw_itemsrV   ÚidxÚitÚtotÚ
total_costr#   s,                                              @r$   Úget_civil_takeoff_fallbackr�   	   s‹  ø€ ð kÐjÐjÐjÐjÐjà%Ð%°Ð<Ñ<Ô<€Hñ)ñ )ð )ð )ð )ð )ð )ð ˆG�N EÑ*Ô*€EØˆGÐ-¨vÑ6Ô6€EØ�Ð-¨vÑ6Ô6€IØˆwÐ'¨Ñ0Ô0€HØ�Ð(¨'Ñ2Ô2€IØˆwÐ*¨EÑ2Ô2€HØˆwÐ0°%Ñ8Ô8€HØˆ7Ð+¨VÑ4Ô4€DØ�Ð,¨gÑ6Ô6€JØ�'Ð3°WÑ=Ô=€KØ�Ð2°GÑ<Ô<€JØ�7Ð1°6Ñ:Ô:€LØ�7ÐAÀ6ÑJÔJ€LØ�'Ð.°Ñ7Ô7€KØ�Ð+¨UÑ3Ô3€JØ�Ð6¸Ñ?Ô?€JØ�Ð-¨uÑ5Ô5€IØˆGÐ1°5Ñ9Ô9€EØ�Ð:¸EÑBÔB€JØˆgÐ-¨uÑ5Ô5€GØ�Ð4°fÑ=Ô=€IØˆw�¨Ñ.Ô.€HØˆwÐ+¨WÑ5Ô5€HØˆwÐ/°Ñ9Ô9€HØˆwÐ.°Ñ7Ô7€HØˆWÐ9¸8ÑDÔD€FØˆWÐ+¨XÑ6Ô6€FØˆWÐ-¨xÑ8Ô8€Fð ØØsØØØØØ*ð		
ð 		
ð ØØaØØØØØ=ð		
ð 		
ð ØØ^ØØØØØ,ð		
ð 		
ð ØØTØØØØØ?ð		
ð 		
ð ØØbØØØØØ:ð		
ð 		
ð ØØ^ØØØØØ+ð		
ð 		
ð ØØ^ØØØØØ+ð		
ð 		
ð ØØ`ØØØØØ=ð		
ð 		
ð ØØaØØØØØ?ð		
ð 		
ð ØØ]ØØØØØ4ð		
ð 		
ð ØØ]ØØØØØ4ð		
ð 		
ð ØØZØØØØØKð		
ð 		
ð ØØfØØØØØ'ð		
ð 		
ð ØØdØØØØ Ø7ð		
ð 		
ð ØØUØØØØØ2ð		
ð 		
ð ØØTØØØØ!ØWð		
ð 		
ð ØØrØØØØ!Ø0ð		
ð 		
ð ØØYØØØØ Ø>ð		
ð 		
ð ØØPØØØØØCð		
ð 		
ð ØØhØØØØØTð		
ð 		
ð ØØSØØØØØAð		
ð 		
ð ØØsØØØØØPð		
ð 		
ð ØØ`ØØØØØ3ð		
ð 		
ð ØØ[ØØØØØ9ð		
ð 		
ð ØØgØØØØØ%ð		
ð 		
ð ØØYØØØØØDð		
ð 		
ð ØØ|ØØØØØBð		
ð 		
ð ØØpØØØØØHð		
ð 		
ð Øð IØØØØØGð		
ð 		
ð Øð OØØØØ˜f‘_ØOð		
ð 		
ðG	m€Ið^	 #%€EÝ˜YÑ'Ô'ð 
ð 
‰ˆˆRÝ�B�u”I  7¤Ñ+Ñ,Ô,ˆØ�Šà! A™gØ˜uœIØ œZØ œZØ˜uœIØ%ZÈbÐQWÌjÐ%ZÐ%ZØ˜6œ
Ý! " U¤)Ñ,Ô,Ý"'¨¨7¬Ñ"4Ô"4Ý$)¨#¡J¤JØ$qÈbÐQWÌjÐY\ÐZ\ÐY\Ìo×NeÒNeÐfiÐknÑNoÔNoÐ$qÐ$qðð ñ	
ô 	
ð 	
ð 	
õ  Ð:Ð:°EÐ:Ñ:Ô:Ñ:Ô:€Jð ×Ò Ñ'Ô'ðØ+3×+>Ò+>¸vÑ+FÔ+Fð˜˜à�HÐÐØUÈ8ÐUÐUØ(Ø ð põ  SVð  W\ñ  S]ô  S]ð  pð  pð  pØ,Ø,Ø,àð ðuÕadÐejÑakÔakð uð uØ#+ðuð uØ]gÑtðuñ uð uð ñ%ð ð r&   )Nr   r   Nr   N)r   r	   r
   r   r   r   r   r	   r   r   r   r	   r   r   r   r   )	Ú
__future__r   ÚloggingÚtypingr   Ú	getLoggerÚ__name__Úloggerr�   rI   r&   r$   ú<module>rˆ      s‚   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð à	ˆÔ	˜8Ñ	$Ô	$€ð
  $ØØ*Ø $ØØðKð Kð Kð Kð Kð Kð Kr&   