§
    t�’jS”  ã                  óŽ   — U d dl mZ 	 d dlZd dlmZ  ej        d¦  «        Zddddd	d
ddddddddœZded<    G d„ d¦  «        Z	dS )é    )ÚannotationsN)ÚAnyzdscons.takeoff.boq_breakdowng    àª%Ag    À Ag    À>
Ag     ˆAg     eAg     È™@g    \�mAç    @$Aç      .@g     ÖAg     jHAg    À\EAg    0Á=A)ÚCAT_VANG_BETONGÚCAT_VANG_XAY_TRATÚCAT_DEN_SAN_NENÚDA_1X2ÚDA_4X6ÚXI_MANG_PCB40Ú
THEP_CB400ÚVAN_KHUON_PHU_PHIMÚNUOC_TRON_BTÚNHAN_CONG_BAC_35_7ÚCA_MAY_DAO_08ÚCA_MAY_LU_RUNGÚCA_MAY_TRON_BTzdict[str, float]ÚBENCHMARK_PRICESc                  ój   — e Zd ZdZe	 	 ddd„¦   «         Ze	 	 ddd„¦   «         Ze	 ddd„¦   «         ZdS )ÚBoqRateBreakdownEnginezlEngine responsible for decomposing BoQ items into VL+NC+M, comparing 3-column quantities, and generating MR.ç        úAF.11110Ú	item_nameÚstrÚcategoryÚunitÚtotal_unit_priceÚfloatÚ	norm_codeÚreturnúdict[str, Any]c                ó‚  ‡— ddl }|                     dt          |pd¦  «                             ¦   «         ¦  «        }|                     dt          | pd¦  «                             ¦   «         ¦  «        Š|                     dt          |pd¦  «                             ¦   «         ¦  «        }g }d}	d}
d}d|v }|rdnd}d	‰v sd
‰v sd‰v r"d}g }d}	|dk    r|dz  nd}
|dk    r|dz  nd}�nÑd‰v r"d}g }d}	|dk    r|dz  nd}
|dk    r|dz  nd}�n«t	          ˆfd„dD ¦   «         ¦  «        r"d}g }d}	|dk    r|dz  nd}
|dk    r|dz  nd}�nnd‰v r"d}g }d}	|dk    r|dz  nd }
|dk    r|d!z  nd"}�nHd#‰v r"d$}g }d}	|dk    r|dz  nd%}
|dk    r|dz  nd&}�n"d'‰v r2d(‰v sd)‰v r*d*}g }d}	|dk    r|d+z  n|rd,nd-}
|dk    r|d.z  n|rd/nd0}�
nìd1‰v sd2‰v sd3‰v sd4‰v rd5}g }d}	d}
|dk    r|nd6}�
nÈd7‰v s d8‰v �r
t	          ˆfd9„d:D ¦   «         ¦  «        sïd;}d<|v p	d=|v p|d>k    }|rdnd?}d@dAt          d|z  dB¦  «        dCt          dD|z  dB¦  «        d<t          dE         t          dD|z  t          dE         z  d¦  «        dFœdGdHt          dI|z  dB¦  «        dJt          dK|z  dB¦  «        dLdMt          dK|z  dMz  d¦  «        dFœg}t          dN„ |D ¦   «         ¦  «        }	t          dO|z  d¦  «        }
t          d|z  d¦  «        }�	nµdP‰v �r–dQ}dR‰v pdS‰v pdT‰v }|rÃdUdVt          d|z  dW¦  «        dJt          dX|z  dW¦  «        dYdZt          dX|z  dZz  d¦  «        dFœd[d\t          d]|z  dW¦  «        dJt          d^|z  dW¦  «        dLd_t          d^|z  d_z  d¦  «        dFœg}t          d`„ |D ¦   «         ¦  «        }	t          da|z  d¦  «        }
t          d|z  d¦  «        }�nÝdbdct          d|z  dW¦  «        ddt          de|z  dW¦  «        dYdt          de|z  dz  d¦  «        dFœdfdgt          dh|z  dW¦  «        dJt          di|z  dW¦  «        djdt          di|z  dz  d¦  «        dFœg}t          dk„ |D ¦   «         ¦  «        }	t          dl|z  d¦  «        }
t          dm|z  d¦  «        }�ndn‰v sdo‰v �rÁdp‰v sdq‰v rçdr}dsdtdudvdwdLt          dx         t          dwt          dx         z  d¦  «        dFœdydzd{dCd|d}t          d~         t          d|t          d~         z  d¦  «        dFœdd€d�dCd‚d}t          dƒ         t          d‚t          dƒ         z  d¦  «        dFœd„d…d†ddd‡dˆt          d‰         t          d‡t          d‰         z  d¦  «        dFœg}t          dŠ„ |D ¦   «         ¦  «        }	d‹}
dZ}�n"dŒ‰v rçd�}dsdtdŽdvd�dLt          dx         t          d�t          dx         z  d¦  «        dFœdydzd�dCd‘d}t          d~         t          d‘t          d~         z  d¦  «        dFœd’d“d”dCd•d}t          d–         t          d•t          d–         z  d¦  «        dFœd„d…d—ddd˜dˆt          d‰         t          d˜t          d‰         z  d¦  «        dFœg}t          d™„ |D ¦   «         ¦  «        }	dš}
d›}�n7dœ}dsdtd�dvdždLt          dx         t          džt          dx         z  d¦  «        dFœdydzdŸdCd d}t          d~         t          d t          d~         z  d¦  «        dFœd’d“d¡dCd¢d}t          d–         t          d¢t          d–         z  d¦  «        dFœd„d…d£ddd¤dˆt          d‰         t          d¤t          d‰         z  d¦  «        dFœg}t          d¥„ |D ¦   «         ¦  «        }	d¦}
d§}�nPd¨‰v sd©‰v sd‰v sdª‰v sd«‰v rÃd}d¬‰v sd­‰v sdª‰v r�d®}d¯d°d±|z  dJt          d²|z  dW¦  «        d}t          d³         t          d²|z  t          d³         z  d¦  «        dFœg}t          d´„ |D ¦   «         ¦  «        }	t          dm|z  d¦  «        }
t          d|z  d¦  «        }�n¡d}g }d}	|dk    r|d]z  ndµ|z  }
|dk    r|d¶z  nd·|z  }�nyd¸‰v sd¹‰v rˆdº}|rd»nd}d¼d½t          |dW¦  «        ddt          |dez  dW¦  «        d¾dµt          |dez  dµz  d¦  «        dFœg}t          d¿„ |D ¦   «         ¦  «        }	t          dÀ|z  d¦  «        }
t          d6|z  d¦  «        }�nédÁ‰v sdÂ‰v sdÃ‰v sdÄ‰v rÑd(‰v sd)‰v sdÅ‰v rÅdÆ}dÇdÈt          dÉ|z  dW¦  «        dJt          dÊ|z  dW¦  «        dËdt          dÊ|z  dz  d¦  «        dFœdÌdÍt          d|z  dW¦  «        dJt          dÎ|z  dW¦  «        dLdMt          dÎ|z  dMz  d¦  «        dFœg}t          dÏ„ |D ¦   «         ¦  «        }	t          dÐ|z  d¦  «        }
t          dÑ|z  d¦  «        }�ndÒ‰v sdÓ‰v rldÔ}dÕdÖd×dCdØd}dÙt          dÚd¦  «        dFœdsdÛdÜdvdÝdLt          dx         t          dÝt          dx         z  d¦  «        dFœg}t          dÞ„ |D ¦   «         ¦  «        }	dß}
d}�n”dà‰v rˆdá‰v r„dâ}dãdädådddædçdèt          déd¦  «        dFœdÕdÖdêdCdëd}dÙt          dìd¦  «        dFœdsdÛdídvdîdLt          dx         t          dît          dx         z  d¦  «        dFœg}t          dï„ |D ¦   «         ¦  «        }	dð}
d}�ndñ‰v r-dò}dódôddõdödËd÷dødFœg}t          dù„ |D ¦   «         ¦  «        }	dú}
d}�n×dû‰v r‡dü}dýdþt          d|z  dW¦  «        dJt          dX|z  dW¦  «        dYdÿt          dX|z  dÿz  d¦  «        dFœg}t          �d „ |D ¦   «         ¦  «        }	t          d6|z  d¦  «        }
t          �d|z  d¦  «        }�nL�d‰v s�d‰v rˆ�d}�d�dt          d|z  dW¦  «        dJt          dX|z  dW¦  «        dY�dt          dX|z  �dz  d¦  «        dFœg}t          �d„ |D ¦   «         ¦  «        }	t          �d	|z  d¦  «        }
t          dd¦  «        }nº�d
‰v r4�d}�d�dddd�d�d�ddFœg}t          �d„ |D ¦   «         ¦  «        }	dZ}
�d}n��d‰v sdT‰v r2�d}�d�dddd�dd‹d‹dFœg}t          �d„ |D ¦   «         ¦  «        }	�d}
d}nF|dk    r|n�d}t          |�dz  d¦  «        }	t          |d+z  d¦  «        }
t          |�dz  d¦  «        }|	|
z   |z   }|dk    rg|dk    ra||z  }t          |	|z  d¦  «        }	t          |
|z  d¦  «        }
t          ||z  d¦  «        }|D ] }t          |�d         |z  d¦  «        |�d<   Œ!|	|
||	|
z   |z   ||�dœS (  u~   PhÃ¢n rÃ£ Ä‘Æ¡n giÃ¡ 1 cÃ´ng tÃ¡c thÃ nh Chi phÃ­ Váº­t liá»‡u (VL), NhÃ¢n cÃ´ng (NC), Ca mÃ¡y (M) & Ä‘á»‹nh má»©c chi tiáº¿t.r   NÚNFCÚ r   Ú100ç      Y@g      ð?u   bá»‘c xáº¿pu   bá»‘c xuá»‘ngu
   bá»‘c dá»¡zAB.11110gffffffæ?g     jØ@g333333Ó?g     ˆ³@õ   váº­n chuyá»ƒnzAB.21110g333333Ã?g     ˆÃ@g333333ë?g     ˆã@c              3  ó    •K  — | ]}|‰v V — Œ	d S ©N© ©Ú.0ÚkÚ
name_lowers     €úPC:\Projects\DSCons\app\modules\takeoff\application\boq_rate_breakdown_service.pyú	<genexpr>z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>Q   s;   øè è € ð 

ð 

àð �ˆOð

ð 

ð 

ð 

ð 

ð 

ó    )u   Ä‘Ã o mÃ³ngu   Ä‘Ã o Ä‘áº¥tu
   Ä‘Ã o bÃ¹nu	   Ä‘Ã o sanu   xÃ³i hÃºt bÃ¹nu
   náº¡o vÃ©tzAB.11210gš™™™™™É?gš™™™™™é?g     á@u   bÆ¡m nÆ°á»›czTT.BOM01g      Ð?g    €OAg      è?g    €„Au   phÃ¡t quangzAA.10000g    Ð3Ag    €„Au   nhá»•õ   cá»«ÚlarsenzAC.22112gffffffÖ?g    (±2Ag     íÇ@gÍÌÌÌÌÌä?g    \[AAg    €7Ö@u
   thuÃª cá»«u   cá»« thÃ©p thuÃªu   thuÃª vÃ¡n thÃ©pu
   thuÃª bÃ£iz	TT.RENT01g     @Ÿ@u   cá»‘t thÃ©pu   thÃ©pc              3  ó    •K  — | ]}|‰v V — Œ	d S r)   r*   r+   s     €r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>�   s8   øè è € ð ð Ø$%��Z�ðð ð ð ð ð r1   )r2   u   vÃ¡nu   bá»‘cr'   u   thuÃªzAF.61110u   táº¥nÚtanÚtgü©ñÒMbP?zTBG-THEP-CB400u)   ThÃ©p váº±n CB400 (HÃ²a PhÃ¡t/Viá»‡t Ãšc)é   ç      @gffffffð?r   )Úmaterial_codeÚmaterial_nameÚnorm_quantityÚwastage_pctÚtotal_norm_qtyr   Úunit_price_vndÚsubtotal_vndzTBG-DAY-BUOCu    DÃ¢y thÃ©p buá»™c 1mm & Que hÃ nr   ç      @g     €/@Úkgg     p×@c              3  ó&   K  — | ]}|d          V — ŒdS ©r?   Nr*   ©r,   Úms     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>°   ó'   è è € Ð?Ð?°˜!˜NÔ+Ð?Ð?Ð?Ð?Ð?Ð?r1   g    àÈ@Au   vÃ¡n khuÃ´nzAF.81110u   gá»—u
   phá»§ phimu
   táº¥m Ä‘anzTBG-VK-PHU-PHIMu>   VÃ¡n Ã©p phá»§ phim & CÃ¢y chá»‘ng (Kháº¥u hao luÃ¢n chuyá»ƒn)é   gÍÌÌÌÌÌð?Úm2g     ùå@zTBG-DINH-VITu&   Ä�inh, á»‘c vÃ­t & Ty ren bÃ¡t chuá»“ngš™™™™™Ù?gáz®GáÚ?g     LÝ@c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>Ö   ó'   è è € ÐCÐC°A˜a Ô/ÐCÐCÐCÐCÐCÐCr1   g     ùõ@zTBG-VK-THEP-DINH-HINHu;   VÃ¡n khuÃ´n thÃ©p Ä‘á»‹nh hÃ¬nh (Kháº¥u hao luÃ¢n chuyá»ƒn)g      @g{®Gázð?zTBG-PHU-KIEN-VKu6   GÃ´ng thÃ©p há»™p, ty ren cravat & Dáº§u chá»‘ng dÃ­nhg      à?gÍÌÌÌÌÌà?u   bá»™c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>ð   rJ   r1   g     Ûú@g     LÍ@u	   bÃª tÃ´ngÚbtu   lÃ³tÚm100r   zTBG-XM-PCB40u'   Xi mÄƒng PCB40 HoÃ ng Tháº¡ch / Chinfong      i@g      ø?g     `i@r   zTBG-CAT-VANG-BTu&   CÃ¡t vÃ ng háº¡t lá»›n Ä‘á»• bÃª tÃ´ngg¤p=
×£à?gu“Vá?Úm3r   z
TBG-DA-4X6u   Ä�Ã¡ 4x6 / 2x4 lÃ³t mÃ³ngg)\�Âõ(ì?gw¾Ÿ/Ýì?r   zTBG-NUOC-BTu0   NÆ°á»›c sáº¡ch trá»™n & báº£o dÆ°á»¡ng bÃª tÃ´ngg     @e@g33333ãe@u   lÃ­tr   c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>*  rJ   r1   g     Lý@Úm200zAF.12110g     €q@g33333Ãq@g¸…ëQ¸Þ?g°rh‘í|ß?z
TBG-DA-1X2u!   Ä�Ã¡ 1x2 mÃ¡c cao Ä‘á»• bÃª tÃ´ngg×£p=
×ë?gaTR' ‰ì?r
   g     €f@gÍÌÌÌÌ,g@c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>`  rJ   r1   g     LAg    @³AzAF.12210g     àu@g     4v@g®GázÞ?g„žÍªÏÕÞ?g…ëQ¸…ë?gh‘í|?5ì?g      g@gš™™™™Ñg@c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>—  rJ   r1   g     ,Ar   u   Ä‘Ã ou   xÃºcu	   san ná»�nu   Ä‘áº¯pu   Ä‘áº¯p cÃ¡tu	   cÃ¡t Ä‘enzAB.13411zTBG-CAT-DEN-SANu.   CÃ¡t Ä‘en san láº¥p ná»�n Ä‘áº§m cháº·t K=0.90gffffffò?gR¸…ëQó?r	   c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>¾  rJ   r1   g     ”Ñ@g333333ã?g     ^Ú@u	   cá»�c treu
   cá»« trÃ mzAC.11110g      D@zTBG-COC-TREu9   Cá»�c tre tÆ°Æ¡i L=2.0-2.5m d>=60-80mm (SXD Háº£i PhÃ²ng)u   cá»�cc              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>ã  rF   r1   g     |µ@u   Ä‘Ã³ngu   Ã©pÚrungu	   thi cÃ´ngu   cá»�c vÃ¡n thÃ©pzAC.22111zTBG-THUE-CU-LARSENu4   Hao phÃ­ thuÃª & luÃ¢n chuyá»ƒn cá»�c cá»« Larsen IVg¸…ëQ¸¾?gTã¥›Ä À?rE   zTBG-QUE-HAN-LARSENu2   Que hÃ n & Oxy-Gas cÄƒn chá»‰nh Ä‘áº§u cá»« Larseng)\�Âõ(Ä?c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>	  rF   r1   g     Ð@g     XÛ@u   trÃ¡tu   lÃ¡ngzAK.11110zTBG-CAT-VANG-TRUNGu   CÃ¡t vÃ ng xÃ¢y trÃ¡tgú~j¼t“˜?g�(í¾0™?g    À\Ag     ÑÀ@u   Xi mÄƒng PCB40 xÃ¢y trÃ¡tg333333@gš™™™™™@c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>(  rF   r1   g    €Oò@u   xÃ¢yu   gáº¡chzAE.11110zTBG-GACH-DACu"   Gáº¡ch tuynel Ä‘áº·c 6.5x10.5x22cmg     à€@gš™™™™a�@u   viÃªng     ¨–@g   ´œ(AgìQ¸…ëÑ?g‘í|?5^Ò?gÿÿÿÿ†ø@g     Àl@gfffff.m@c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>P  rF   r1   g    €1Au   bÄƒng cáº£n nÆ°á»›czAK.51110zTBG-BANG-CAN-NUOC-V250u3   BÄƒng cáº£n nÆ°á»›c PVC V250 khá»›p ná»‘i thi cÃ´ngg       @gR¸…ëQð?g    €Àô@g    À*õ@c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>b  rF   r1   g     úÉ@u   váº£i Ä‘á»‹azAL.15110zTBG-VAI-DIA-KY-THUATu;   Váº£i Ä‘á»‹a ká»¹ thuáº­t khÃ´ng dá»‡t ngÄƒn bÃ¹n/Ä‘Ãª quaig     ÿÔ@c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>t  rF   r1   g     �z@u   báº¡t xÃ¡c ráº¯nu   báº¡t chá»‘ng sáº¡tzAL.15120zTBG-BAT-XAC-RANu:   Báº¡t xÃ¡c ráº¯n chá»‘ng sáº¡t lá»Ÿ bá»� kÃªnh & Ä‘Ãª quaig     pÇ@c              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>†  rF   r1   g     p—@u   á»‘ng bÃª tÃ´ngzAF.31110zTBG-ONG-BTCT-D300u;   á»�ng bÃª tÃ´ng cá»‘t thÃ©p Ä‘Ãºc sáºµn D300 (Ä�oáº¡n L=2m)u   Ä‘oáº¡n á»‘ngg    @•Ac              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>˜  rF   r1   g     ˆÓ@u   cáº¥u kiá»‡nzAF.32110zTBG-TAM-DAN-DUC-SANu-   Táº¥m Ä‘an bÃª tÃ´ng Ä‘Ãºc sáºµn chá»‹u lá»±cc              3  ó&   K  — | ]}|d          V — ŒdS rC   r*   rD   s     r/   r0   z=BoqRateBreakdownEngine.breakdown_item_rate.<locals>.<genexpr>ª  rF   r1   g     jø@gš™™™™™á?gš™™™™™¹?r?   )Úmaterial_cost_vndÚlabor_cost_vndÚequipment_cost_vndr>   Úmaterial_breakdownr   )ÚunicodedataÚ	normalizer   ÚlowerÚanyÚroundr   Úsum)r   r   r   r   r   rb   Ú	cat_lowerÚ
unit_lowerÚ	materialsÚvl_costÚnc_costÚm_costÚis_100_unitÚ	scale_100Úis_tonÚmultÚis_woodÚstakes_per_unitÚ	ref_totalÚcomputed_totalÚscalerE   r.   s                         @r/   Úbreakdown_item_ratez*BoqRateBreakdownEngine.breakdown_item_rate%   s;  ø€ ð 	ÐÐÐà×)Ò)¨%µ°X°^ÀÑ1DÔ1D×1JÒ1JÑ1LÔ1LÑMÔMˆ	Ø ×*Ò*¨5µ#°i°oÀ2Ñ2FÔ2F×2LÒ2LÑ2NÔ2NÑOÔOˆ
Ø ×*Ò*¨5µ#°d°j¸b±/´/×2GÒ2GÑ2IÔ2IÑJÔJˆ
à*,ˆ	ØˆØˆØˆà˜zÐ)ˆØ(Ð1�E�E¨cˆ	ð ˜ZÐ'Ð'Ø *Ð,Ð,Ø˜zÐ)Ð)à"ˆIØˆIØˆGØ1AÀAÒ1EÐ1EÐ&¨Ñ-Ð-È7ˆGØ0@À1Ò0DÐ0DÐ%¨Ñ,Ð,È&ˆF‰Fà Ð+Ð+Ø"ˆIØˆIØˆGØ1AÀAÒ1EÐ1EÐ&¨Ñ-Ð-È7ˆGØ0@À1Ò0DÐ0DÐ%¨Ñ,Ð,È'ˆF‰Fåð 

ð 

ð 

ð 

ðð

ñ 

ô 

ñ 

ô 

ð b		0ð #ˆIØˆIØˆGØ1AÀAÒ1EÐ1EÐ&¨Ñ-Ð-È7ˆGØ0@À1Ò0DÐ0DÐ%¨Ñ,Ð,È'ˆF‰Fà˜zÐ)Ð)Ø"ˆIØˆIØˆGØ1AÀAÒ1EÐ1EÐ&¨Ñ-Ð-È8ˆGØ0@À1Ò0DÐ0DÐ%¨Ñ,Ð,È(ˆF‰Fà˜jÐ(Ð(Ø"ˆIØˆIØˆGØ1AÀAÒ1EÐ1EÐ&¨Ñ-Ð-È9ˆGØ0@À1Ò0DÐ0DÐ%¨Ñ,Ð,È(ˆF‰Fà˜
Ð"Ð"¨°*Ð(<Ð(<ÀÈJÐ@VÐ@VØ"ˆIØˆIØˆGð $ aÒ'Ð'ð ! 4Ñ'Ð'à#.Ð;�i�i°Gð ð $ aÒ'Ð'ð ! 4Ñ'Ð'à#.Ð;�i�i°Gð ‰Fð ˜JÐ&Ð&Ø! ZÐ/Ð/Ø! ZÐ/Ð/Ø˜zÐ)Ð)à#ˆIØˆIØˆGØˆGØ)9¸AÒ)=Ð)=Ð%Ð%À6ˆF‰Fð
 ˜jÐ(Ð(Ø�zÐ!Ñ!Ýð ð ð ð Ø)]ðñ ô ñ ô ð "ð
 #ˆIØ 
Ð*ÐV¨e°zÐ.AÐVÀZÐSVÒEVˆFØ Ð+�3�3 eˆDð &6Ø%PÝ%*¨5°4©<¸Ñ%;Ô%;Ø#&Ý&+¨E°D©L¸!Ñ&<Ô&<Ø#Ý&6°|Ô&DÝ$)Ø ™Õ'7¸Ô'EÑEÀqñ%ô %ðð ð &4Ø%GÝ%*¨4°$©;¸Ñ%:Ô%:Ø#&Ý&+¨E°D©L¸!Ñ&<Ô&<Ø Ø&-Ý$)¨%°$©,¸Ñ*@À!Ñ$DÔ$Dð	ð 	ðˆIõ0 Ð?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGÝ˜I¨Ñ,¨aÑ0Ô0ˆGÝ˜7 T™>¨1Ñ-Ô-ˆF‰Fð
 ˜jÐ(Ñ(Ø"ˆIà˜*Ð$ð .Ø :Ð-ð.à :Ð-ð ð ð 37ð *;Ø)iÝ).¨t°iÑ/?ÀÑ)CÔ)CØ'*Ý*/°°yÑ0@À!Ñ*DÔ*DØ $Ø*1Ý(-¨d°YÑ.>ÀÑ.HÈ!Ñ(LÔ(Lð	ð 	ð *8Ø)QÝ).¨t°iÑ/?ÀÑ)CÔ)CØ'*Ý*/°°yÑ0@À!Ñ*DÔ*DØ $Ø*1Ý(-¨d°YÑ.>ÀÑ.HÈ!Ñ(LÔ(Lð	ð 	ð�	õ, ÐCÐC¸ÐCÑCÔCÑCÔC�Ý ¨)Ñ 3°QÑ7Ô7�Ý˜w¨Ñ2°AÑ6Ô6�‘ð *AØ)fÝ).¨t°iÑ/?ÀÑ)CÔ)CØ'*Ý*/°°yÑ0@À!Ñ*DÔ*DØ $Ø*1Ý(-¨d°YÑ.>ÀÑ.HÈ!Ñ(LÔ(Lð	ð 	ð *;Ø)aÝ).¨t°iÑ/?ÀÑ)CÔ)CØ'*Ý*/°¸	Ñ0AÀ1Ñ*EÔ*EØ &Ø*1Ý(-¨e°iÑ.?À'Ñ.IÈ1Ñ(MÔ(Mð	ð 	ð�	õ, ÐCÐC¸ÐCÑCÔCÑCÔC�Ý ¨9Ñ 4°aÑ8Ô8�Ý˜w¨Ñ2°AÑ6Ô6�‘ð
 ˜JÐ&Ð&¨$°*Ð*<Ñ*<Ø˜Ð#Ð# v°Ð';Ð';Ø&�	ð *8Ø)RØ).Ø'*Ø*/Ø $Ý*:¸?Ô*KÝ(-Ø!Õ$4°_Ô$EÑEÀqñ)ô )ðð ð *;Ø)QØ).Ø'*Ø*/Ø $Ý*:Ð;LÔ*MÝ(-Ø!Õ$4Ð5FÔ$GÑGÈñ)ô )ðð ð *6Ø)DØ).Ø'*Ø*/Ø $Ý*:¸8Ô*DÝ(-¨eÕ6FÀxÔ6PÑ.PÐRSÑ(TÔ(Tð	ð 	ð *7Ø)[Ø).Ø'*Ø*/Ø &Ý*:¸>Ô*JÝ(-Ø!Õ$4°^Ô$DÑDÀañ)ô )ðð ðG/�	õ` ÐCÐC¸ÐCÑCÔCÑCÔC�Ø"�Ø �‘à˜:Ð%Ð%Ø&�	ð *8Ø)RØ).Ø'*Ø*/Ø $Ý*:¸?Ô*KÝ(-Ø!Õ$4°_Ô$EÑEÀqñ)ô )ðð ð *;Ø)QØ).Ø'*Ø*/Ø $Ý*:Ð;LÔ*MÝ(-Ø!Õ$4Ð5FÔ$GÑGÈñ)ô )ðð ð *6Ø)LØ).Ø'*Ø*0Ø $Ý*:¸8Ô*DÝ(-¨fÕ7GÈÔ7QÑ.QÐSTÑ(UÔ(Uð	ð 	ð *7Ø)[Ø).Ø'*Ø*/Ø &Ý*:¸>Ô*JÝ(-Ø!Õ$4°^Ô$DÑDÀañ)ô )ðð ðG/�	õ` ÐCÐC¸ÐCÑCÔCÑCÔC�Ø"�Ø!�‘ð '�	ð *8Ø)RØ).Ø'*Ø*0Ø $Ý*:¸?Ô*KÝ(-Ø"Õ%5°oÔ%FÑFÈñ)ô )ðð ð *;Ø)QØ).Ø'*Ø*0Ø $Ý*:Ð;LÔ*MÝ(-Ø"Õ%5Ð6GÔ%HÑHÈ!ñ)ô )ðð ð *6Ø)LØ).Ø'*Ø*0Ø $Ý*:¸8Ô*DÝ(-¨fÕ7GÈÔ7QÑ.QÐSTÑ(UÔ(Uð	ð 	ð *7Ø)[Ø).Ø'*Ø*0Ø &Ý*:¸>Ô*JÝ(-Ø"Õ%5°nÔ%EÑEÀqñ)ô )ðð ðG/�	õ` ÐCÐC¸ÐCÑCÔCÑCÔC�Ø"�Ø!�‘ð �zÐ!Ð!Ø˜Ð#Ð#Ø :Ð-Ð-Ø˜jÐ(Ð(Ø˜:Ð%Ð%à"ˆIà Ð+Ð+Ø *Ð,Ð,Ø *Ð,Ð,à&�	ð *;Ø)YØ)-°	Ñ)9Ø'*Ý*/°¸iÑ0GÈÑ*KÔ*KØ $Ý*:Ð;LÔ*MÝ(-ð#à'ñ(õ /Ð/@ÔAñBð ñ)ô )ðð ð�	õ$ ÐCÐC¸ÐCÑCÔCÑCÔC�Ý ¨)Ñ 3°QÑ7Ô7�Ý˜w¨Ñ2°AÑ6Ô6�‘ð '�	Ø�	Ø�ð (¨!Ò+Ð+ð % tÑ+Ð+à! IÑ-ð ð (¨!Ò+Ð+ð % tÑ+Ð+à! IÑ-ð ‘ð ˜JÐ&Ð&¨,¸*Ð*DÐ*DØ"ˆIØ&1Ð:˜d˜d°sˆOð &3Ø%`Ý%*¨?¸AÑ%>Ô%>Ø#&Ý&+¨O¸dÑ,BÀAÑ&FÔ&FØ#Ø&-Ý$)¨/¸DÑ*@À7Ñ*JÈAÑ$NÔ$Nð	ð 	ðˆIõ Ð?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGÝ˜F YÑ.°Ñ2Ô2ˆGÝ˜6 IÑ-¨qÑ1Ô1ˆF‰Fð ˜
Ð"Ð"Ø˜
Ð"Ð"Ø˜Ð#Ð#Ø˜jÐ(Ð(à�jÐ Ð  H°
Ð$:Ð$:Ð>PÐT^Ð>^Ð>^à"ˆIð &:Ø%[Ý%*¨4°)Ñ+;¸QÑ%?Ô%?Ø#&Ý&+¨K¸)Ñ,CÀQÑ&GÔ&GØØ&-Ý$)¨+¸	Ñ*AÀGÑ*KÈQÑ$OÔ$Oð	ð 	ð &:Ø%YÝ%*¨4°)Ñ+;¸QÑ%?Ô%?Ø#&Ý&+¨K¸)Ñ,CÀQÑ&GÔ&GØ Ø&-Ý$)¨+¸	Ñ*AÀGÑ*KÈQÑ$OÔ$Oð	ð 	ðˆIõ, Ð?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGÝ˜G iÑ/°Ñ3Ô3ˆGÝ˜7 YÑ.°Ñ2Ô2ˆF‰Fð
 ˜
Ð"Ð" g°Ð&;Ð&;Ø"ˆIð &:Ø%<Ø%*Ø#&Ø&,Ø Ø&.Ý$)Ð*;¸QÑ$?Ô$?ð	ð 	ð &4Ø%@Ø%)Ø#&Ø&*Ø Ý&6°Ô&GÝ$)¨$Õ1AÀ/Ô1RÑ*RÐTUÑ$VÔ$Vð	ð 	ðˆIõ, Ð?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGØˆGØˆF‰Fà�zÐ!Ð! h°*Ð&<Ð&<Ø"ˆIð &4Ø%IØ%*Ø#&Ø&+Ø#Ø&,Ý$)¨.¸!Ñ$<Ô$<ð	ð 	ð &:Ø%<Ø%*Ø#&Ø&+Ø Ø&.Ý$)Ð*:¸AÑ$>Ô$>ð	ð 	ð &4Ø%@Ø%*Ø#&Ø&,Ø Ý&6°Ô&GÝ$)ØÕ!1°/Ô!BÑBÀAñ%ô %ðð ð+!ˆIõD Ð?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGØˆGØˆF‰Fà" jÐ0Ð0Ø"ˆIð &>Ø%ZØ%)Ø#&Ø&*ØØ&-Ø$+ð	ð 	ðˆIõ Ð?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGØˆGØˆF‰Fà˜zÐ)Ð)Ø"ˆIð &<Ø%bÝ%*¨4°)Ñ+;¸QÑ%?Ô%?Ø#&Ý&+¨D°9Ñ,<¸aÑ&@Ô&@Ø Ø&-Ý$)¨$°Ñ*:¸WÑ*DÀaÑ$HÔ$Hð	ð 	ðˆIõ Ñ?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGÝ˜F YÑ.°Ñ2Ô2ˆGÝ™5 9Ñ,¨aÑ0Ô0ˆF‰Fá :Ð-Ð-Ñ1FÈ*Ð1TÐ1TÙ"ˆIñ &7Ù%aÝ%*¨4°)Ñ+;¸QÑ%?Ô%?Ø#&Ý&+¨D°9Ñ,<¸aÑ&@Ô&@Ø Ù&-Ý$)¨$°Ñ*:¹WÑ*DÀaÑ$HÔ$Hð	ð 	ðˆIõ Ñ?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGÝ™F YÑ.°Ñ2Ô2ˆGÝ˜3 ‘]”]ˆFˆFá *Ð,Ð,Ù"ˆIñ &9Ù%bØ%)Ø#&Ø&*Ù+Ù&.Ù$,ð	ð 	ðˆIõ Ñ?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGØˆGÙˆFˆFá˜zÐ)Ð)¨\¸ZÐ-GÐ-GÙ"ˆIñ &;Ù%TØ%)Ø#&Ø&*Ù*Ø&.Ø$,ð	ð 	ðˆIõ Ñ?Ð?°YÐ?Ñ?Ô?Ñ?Ô?ˆGÙˆGØˆFˆFð -=¸qÒ,@Ð,@Ð(Ð(ÁhˆIÝ˜I©Ñ,¨aÑ0Ô0ˆGÝ˜I¨Ñ,¨aÑ0Ô0ˆGÝ˜9¡tÑ+¨QÑ/Ô/ˆFà  7Ñ*¨VÑ3ˆØ˜aÒÐ N°QÒ$6Ð$6Ø$ ~Ñ5ˆEÝ˜G e™O¨QÑ/Ô/ˆGÝ˜G e™O¨QÑ/Ô/ˆGÝ˜6 E™>¨1Ñ-Ô-ˆFØð Hð H�Ý$)¨!©NÔ*;¸eÑ*CÀQÑ$GÔ$G�‘.Ñ!Ð!ð ")Ø%Ø"(Ø%¨Ñ/°&Ñ8Ø"+Ø"ñ
ð 
ð 	
r1   NÚdesign_quantityÚhsmt_quantityúfloat | NoneÚactual_quantityc                ó´  — t          | pd¦  «        }|�t          |¦  «        nd}|�t          |¦  «        nd}d}d}d}|�Ot          ||z
  d¦  «        }|dk    rt          ||z  dz  d¦  «        }n
|dk    rdnd}|dk    rd	}nN|d
k     rd}nEd}nB|�@t          ||z
  d¦  «        }|dk    rt          ||z  dz  d¦  «        }|dk    rd	}n|d
k     rd}||||||dœS )u@   So sÃ¡nh 3 cá»™t khá»‘i lÆ°á»£ng vÃ  phÃ¢n loáº¡i phÃ¡t sinh VO.r   NÚnormalrG   r   r&   é   r@   Úvo_increaseg      ÀÚvo_decrease)rx   ry   r{   Úvariance_quantityÚvariance_percentageÚvariation_status)r   rf   )	rx   ry   r{   Ú
design_qtyÚhsmt_qtyÚact_qtyÚvar_qtyÚvar_pctÚstatuss	            r/   Úcompute_triple_variancez.BoqRateBreakdownEngine.compute_triple_varianceÇ  sH  € õ ˜?Ð1¨cÑ2Ô2ˆ
Ø+8Ð+D•5˜Ñ'Ô'Ð'È$ˆØ,;Ð,G•%˜Ñ(Ô(Ð(ÈTˆð ˆØˆØˆàÐÝ˜J¨Ñ1°1Ñ5Ô5ˆGØ˜!Š|ˆ|Ý ¨8Ñ!3°uÑ <¸aÑ@Ô@��à#-°¢> >˜%˜%°s�à˜Š}ˆ}Ø&��Ø˜4’�Ø&��à!��ØÐ Ý˜G jÑ0°!Ñ4Ô4ˆGØ˜AŠ~ˆ~Ý ¨:Ñ!5¸Ñ >ÀÑBÔB�Ø˜Š}ˆ}Ø&��Ø˜4’�Ø&�ð  *Ø%Ø&Ø!(Ø#*Ø &ð
ð 
ð 	
r1   õ%   CÃ´ng trÃ¬nh XÃ¢y dá»±ng Ä�á»‹nh SÆ¡nÚitemsúlist[dict[str, Any]]Úproject_titlec                óÔ  — i }d}|D �]S}t          |                     d¦  «        pd¦  «        }|                     d¦  «        }|rt          |t          ¦  «        s£|                      |                     dd¦  «        |                     dd¦  «        |                     dd¦  «        t          |                     d	¦  «        pd¦  «        |                     d
d¦  «        ¬¦  «        }|                     d¦  «        pg }|D �]Y}	|	                     d¦  «        p|	                     d¦  «        }
t          |	                     d¦  «        p|	                     d¦  «        pd¦  «        }||z  }t          |	                     d	¦  «        pd¦  «        }||z  }|
|vrH|
|	                     d¦  «        |	                     d¦  «        d|d|	                     dd¦  «        g dœ||
<   ||
         dxx         |z  cc<   ||
         dxx         |z  cc<   ||z  }|                     d¦  «        }|r1|||
         d         vr!||
         d                              |¦  «         �Œ[�ŒUg }|                     ¦   «         D ]¼\  }
}|                     |d         |d         |d         t          |d         d¦  «        |d	         t          |d         d¦  «        |d         t          |d         ¦  «        d 	                    |d         dd…         ¦  «        t          |d         ¦  «        dk    rdndz   dœ	¦  «         Œ½| 
                    d„ d¬ ¦  «         d!|t          |d¦  «        t          |¦  «        |d"œS )#uV   1-Click tá»•ng há»£p toÃ n bá»™ nhu cáº§u váº­t tÆ° (MR Schedule) tá»« danh má»¥c BoQ.r   Úquantityra   r   r$   r   r   rN   r>   r   r   )r   r   r   r   r   r9   r:   r=   r;   r<   r8   )r9   r:   r   Úrequired_quantityr>   Útotal_amount_vndr<   Úused_in_tasksr‘   r’   r“   rG   r   z, Né   z...)	r9   r:   r   r‘   r>   r’   r<   Útasks_countÚtasks_summaryc                ó   — | d         S )Nr’   r*   )Úxs    r/   ú<lambda>zGBoqRateBreakdownEngine.aggregate_material_requisition.<locals>.<lambda><  s   €  AÐ&8Ô$9€ r1   T)ÚkeyÚreverseÚsuccess)r‰   rŽ   Útotal_material_budget_vndÚmaterials_countÚmaterial_schedule)r   ÚgetÚ
isinstanceÚlistrw   ÚappendrŒ   rf   ÚlenÚjoinÚsort)ÚclsrŒ   rŽ   Úmaterials_aggÚtotal_material_budgetÚitmÚqtyÚ	breakdownÚitem_rate_infoÚmatÚcodeÚnorm_qtyÚtot_req_qtyÚ
unit_priceÚ
tot_amountÚ	task_nameÚscheduleÚdatas                     r/   Úaggregate_material_requisitionz5BoqRateBreakdownEngine.aggregate_material_requisitionö  sÐ  € ð 46ˆà #ÐØð (	Kñ (	KˆCÝ˜Ÿš 
Ñ+Ô+Ð2¨sÑ3Ô3ˆCØŸšÐ 4Ñ5Ô5ˆIØð 	K¥J¨y½$Ñ$?Ô$?ð 	Kà!$×!8Ò!8Ø!Ÿgšg k°2Ñ6Ô6Ø ŸWšW Z°Ñ4Ô4ØŸš ¨Ñ.Ô.Ý%*¨3¯7ª7Ð3CÑ+DÔ+DÐ+KÈÑ%LÔ%LØ!Ÿgšg k°:Ñ>Ô>ð "9ñ "ô "�ð +×.Ò.Ð/CÑDÔDÐJÈ�	à ð Kñ K�Ø—w’w˜Ñ/Ô/ÐK°3·7²7¸?Ñ3KÔ3K�Ý Ø—G’GÐ,Ñ-Ô-ÐP°·²¸Ñ1IÔ1IÐPÈSñô �ð '¨™n�Ý" 3§7¢7Ð+;Ñ#<Ô#<Ð#CÀÑDÔD�
Ø(¨:Ñ5�
à˜}Ð,Ð,à)-Ø),¯ª°Ñ)AÔ)AØ #§¢¨¡¤Ø-0Ø*4Ø,/Ø'*§w¢w¨}¸cÑ'BÔ'BØ)+ð	+ð 	+�M $Ñ'ð ˜dÔ#Ð$7Ð8Ð8Ô8¸KÑGÐ8Ð8Ñ8Ø˜dÔ#Ð$6Ð7Ð7Ô7¸:ÑEÐ7Ð7Ñ7Ø%¨Ñ3Ð%ØŸGšG KÑ0Ô0�	Øð K °-ÀÔ2EÀoÔ2VÐ!VÐ!VØ! $Ô'¨Ô8×?Ò?À	ÑJÔJÐJùñ5Kð: ˆØ'×-Ò-Ñ/Ô/ð 	ð 	‰JˆD�$Ø�OŠOà%)¨/Ô%:Ø%)¨/Ô%:Ø  œLÝ).¨tÐ4GÔ/HÈ!Ñ)LÔ)LØ&*Ð+;Ô&<Ý(-¨dÐ3EÔ.FÈÑ(JÔ(JØ#'¨Ô#6Ý#& t¨OÔ'<Ñ#=Ô#=Ø%)§Y¢Y¨t°OÔ/DÀRÀaÀRÔ/HÑ%IÔ%IÝ # D¨Ô$9Ñ :Ô :¸QÒ >Ð >�u�uÀBñ&Hðð ñô ð ð ð 	�ŠÐ9Ð9À4ˆÑHÔHÐHð  Ø*Ý).Ð/DÀaÑ)HÔ)HÝ" 8™}œ}Ø!)ð
ð 
ð 	
r1   )r   r   )r   r   r   r   r   r   r   r   r   r   r    r!   )NN)rx   r   ry   rz   r{   rz   r    r!   )r‹   )rŒ   r�   rŽ   r   r    r!   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodrw   rŠ   Úclassmethodr·   r*   r1   r/   r   r   "   s«   € € € € € ØvÐvàð
 #&Ø#ð_

ð _

ð _

ð _

ñ „\ð_

ðB ð '+Ø(,ð,
ð ,
ð ,
ð ,
ñ „\ð,
ð\ ð EðM
ð M
ð M
ð M
ñ „[ðM
ð M
ð M
r1   r   )
Ú
__future__r   ÚloggingÚtypingr   Ú	getLoggerÚloggerr   Ú__annotations__r   r*   r1   r/   ú<module>rÄ      sÕ   ðØ "Ð "Ð "Ð "Ð "Ð "Ð "ðð €€€Ø Ð Ð Ð Ð Ð à	ˆÔ	Ð9Ñ	:Ô	:€ð  Ø!ØØØØØØ"ØØ"ØØØð&ð &Ð ð ð ð ñ ð"b
ð b
ð b
ð b
ð b
ñ b
ô b
ð b
ð b
ð b
r1   