§
    t�’jÂ#  ã                  óL   — d dl mZ d dlZd dlmZ d dlmZ  G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚDecimal)ÚAnyc                  óô   — e Zd ZdZe	 	 	 	 	 	 	 d<d=d„¦   «         Ze	 	 	 	 d>d?d„¦   «         Ze	 	 d@dAd#„¦   «         Ze	 dBdCd(„¦   «         Ze	 	 	 	 dDdEd3„¦   «         Z	e	 	 dFdGd7„¦   «         Z
e	 	 dHdId;„¦   «         ZdS )JÚGeometricBreakdownEngineud   Ä�á»™ng cÆ¡ giáº£i toÃ¡n hÃ¬nh há»�c vÃ  sinh cÃ´ng thá»©c phÃ¢n rÃ£ chi tiáº¿t chuáº©n Ká»¹ sÆ° QS.ç        Né   r   ç      Ð?çš™™™™™¹?ÚlengthÚfloatÚwidthÚbase_heightÚtaper_heightÚ
top_lengthúfloat | NoneÚ	top_widthÚcountÚintÚpile_count_per_footingÚpile_side_or_diaÚpile_embed_depthÚreturnúdict[str, Any]c
                ó¾  — | |z  |z  }
d}|dk    r;|p| dz  }|p|dz  }| |z  }||z  }|dz  ||z   t          j        ||z  ¦  «        z   z  }d}|dk    r|dz  |	z  }||z  }|
|z   |z
  }||z  }|› d| d›d|d›d|d›�}|dk    r
|d	|d
›d�z  }|dk    r|d|› d|d›d|	d›d�z  }|d|d›d�z  }dddt          t          t	          |d¦  «        ¦  «        ¦  «        |dœS )uK   TÃ­nh thá»ƒ tÃ­ch bÃª tÃ´ng mÃ³ng Ä‘Ã i cá»�c kÃ¨m trá»« giao Ä‘áº§u cá»�c.r   r   ç      à?g      @é   ú * (ú.2fÚ*u    + chÃ³p_vÃ¡t(ú.3fú)ú - u   *cá»�c(z^2*z) = ú.4fú m3u)   BÃª tÃ´ng mÃ³ng Ä‘Ã i cá»�c BTCT mÃ¡c 250zAF.11111Úm3é   ©Ú	task_nameÚ	norm_codeÚunitÚquantityÚformula_breakdown©ÚmathÚsqrtr   ÚstrÚround)r   r   r   r   r   r   r   r   r   r   Úv_baseÚv_taperÚtlÚtwÚs1Ús2Úv_pile_deductÚ
v_one_pileÚv_one_footingÚv_totalÚformulas                        úPC:\Projects\DSCons\app\modules\takeoff\application\geometric_breakdown_engine.pyÚcalculate_pad_footingz.GeometricBreakdownEngine.calculate_pad_footing   sž  € ð ˜%‘ +Ñ-ˆð ˆØ˜!ÒÐØÐ- ¨¡ˆBØÐ+˜u s™{ˆBØ˜%‘ˆBØ�b‘ˆBØ# cÑ)¨b°2©g½¼	À"ÀrÁ'Ñ8JÔ8JÑ.JÑKˆGð ˆØ! AÒ%Ð%Ø*¨AÑ-Ð1AÑAˆJØ&Ð)?Ñ?ˆMà Ñ(¨=Ñ8ˆØ %Ñ'ˆð ÐJÐJ ÐJÐJÐJ¨UÐJÐJÐJ¸ÐJÐJÐJˆØ˜!ÒÐØÐ6¨Ð6Ð6Ð6Ð6Ñ6ˆGØ! AÒ%Ð%ØÐlÐ3ÐlÐlÐ<LÐlÐlÐlÐUeÐlÐlÐlÐlÑlˆGØÐ*˜'Ð*Ð*Ð*Ð*Ñ*ˆð EØ#ØÝ¥¥E¨'°1Ñ$5Ô$5Ñ 6Ô 6Ñ7Ô7Ø!(ð
ð 
ð 	
ó    çš™™™™™É?Úwidth_innerÚheight_innerÚ
wall_thickÚbottom_thickÚ	top_thickc                óê   — |d|z  z   }||z   |z   }||z  }	||z  }
|	|
z
  }|| z  |z  }|› d| d›d|d›d|d›d|d›d|d›d|d›d	�}d
ddt          t          t          |d¦  «        ¦  «        ¦  «        |dœS )u@   TÃ­nh thá»ƒ tÃ­ch bÃª tÃ´ng cá»‘ng há»™p mÆ°Æ¡ng thoÃ¡t nÆ°á»›c.r   z * [r   r   r    r#   z)] = r$   r%   u2   BÃª tÃ´ng cá»‘ng há»™p BTCT M250 Ä‘á»• táº¡i chá»—zAF.12311r&   r'   r(   ©r   r1   r2   )r   rB   rC   rD   rE   rF   r   Úwidth_outerÚheight_outerÚs_outerÚs_innerÚ
s_concreter<   r=   s                 r>   Úcalculate_box_culvertz.GeometricBreakdownEngine.calculate_box_culvert>   s  € ð " Q¨¡^Ñ4ˆØ# lÑ2°YÑ>ˆà Ñ,ˆØ Ñ,ˆØ˜wÑ&ˆ
à˜vÑ%¨Ñ-ˆØð  Qð  Q ð  Qð  Qð  Q°ð  Qð  Qð  QÀ,ð  Qð  Qð  QÐWbð  Qð  Qð  QÐiuð  Qð  Qð  Qð  AHð  Qð  Qð  Qð  Qˆð NØ#ØÝ¥¥E¨'°1Ñ$5Ô$5Ñ 6Ô 6Ñ7Ô7Ø!(ð
ð 
ð 	
r@   Úbar_diameter_mmÚtotal_length_mÚhooks_countÚ	lap_countc                ó,  — |d| dz  z  z  }|d| dz  z  z  }||z   |z   }d| dz  z  }||z  }|dz  }	d|d›d||z   d›d	|d
›d|d›d|	d›d�}
| dk    rdn	| dk    rdnd}d| d›d| d›d�|dt          t          t          |	d¦  «        ¦  «        ¦  «        |
dœS )u0   TÃ­nh trá»�ng lÆ°á»£ng cá»‘t thÃ©p chuáº©n TCVN.g      @g     @�@é   gÓ–x@y?r   ú(r   u   m + neo/ná»‘i zm) * r!   z kg/m = z kg (r$   u    táº¥n)é
   zAF.61111é   zAF.61121zAF.61131u   Cá»‘t thÃ©p phi z.0fz (<= zmm)u   táº¥nr'   r(   rH   )rO   rP   rQ   rR   Úhook_lenÚlap_lenÚeffective_lengthÚunit_weightÚ	weight_kgÚ
weight_tonr=   Úcodes               r>   Úcalculate_rebar_weightz/GeometricBreakdownEngine.calculate_rebar_weight[   s]  € ð  $¨/¸FÑ*BÑ"CÑDˆØ˜r _°vÑ%=Ñ>Ñ?ˆØ)¨HÑ4°wÑ>Ðð  /°1Ñ"4Ñ5ˆØ$ {Ñ2ˆ	Ø Ñ'ˆ
ð Z�nð  Zð  Zð  Z¸À7Ñ8Jð  Zð  Zð  ZÐU`ð  Zð  Zð  ZÐnwð  Zð  Zð  Zð  CMð  Zð  Zð  Zð  Zˆð  "Ò$Ð$ð ˆJà /°2Ò 5Ð 5�*�*¸:ð 	ð _¨OÐ^Ð^Ð^ÀoÐ^Ð^Ð^Ð^ØØÝ¥¥E¨*°aÑ$8Ô$8Ñ 9Ô 9Ñ:Ô:Ø!(ð
ð 
ð 	
r@   r   Úbottom_widthÚdepthÚslope_mc                óÄ   — | d|z  |z  z   }| |z   dz  |z  }||z  }|d›d| d›d|d›d|d›d|d›d	�
}d
ddt          t          t          |d¦  «        ¦  «        ¦  «        |dœS )uM   TÃ­nh khá»‘i lÆ°á»£ng Ä‘Ã o Ä‘áº¥t há»‘ mÃ³ng / mÆ°Æ¡ng rÃ£nh cÃ³ mÃ¡i taluy.r   g       @r   z * [(z + z) / 2 * z] = r$   r%   uM   Ä�Ã o mÃ³ng cÃ´ng trÃ¬nh Ä‘áº¥t cáº¥p III báº±ng mÃ¡y káº¿t há»£p thá»§ cÃ´ngzAB.11311r&   r'   r(   rH   )r`   ra   r   rb   r   Ús_trapr<   r=   s           r>   Úcalculate_trench_excavationz4GeometricBreakdownEngine.calculate_trench_excavation|   s®   € ð ! A¨¡K°%Ñ$7Ñ8ˆ	Ø )Ñ+¨sÑ2°eÑ;ˆØ˜6‘/ˆàÐqÐqÐq lÐqÐqÐq¸9ÐqÐqÐqÐRWÐqÐqÐqÐahÐqÐqÐqÐqˆð iØ#ØÝ¥¥E¨'°1Ñ$5Ô$5Ñ 6Ô 6Ñ7Ô7Ø!(ð
ð 
ð 	
r@   ç      ø?ç333333Ó?ç333333Ã?TÚcrest_lengthÚslope_heightÚstone_thicknessÚgravel_filter_thickÚ
geotextileÚboolc                óÔ  — t          j        |dz  ||z  dz  z   ¦  «        }| |z  }||z  }||z  }	| d›d|d›d|d›d|d›d�}
| d›d|d›d|d›d|	d›d�}dd	d
t          t          t	          |d¦  «        ¦  «        ¦  «        t          t          t	          |	d¦  «        ¦  «        ¦  «        |r-t          t          t	          |dz  d¦  «        ¦  «        ¦  «        nt          d¦  «        |
dœS )uo   TÃ­nh khá»‘i lÆ°á»£ng lÃ¡t Ä‘Ã¡ há»™c bá»� kÃ¨, táº§ng lá»�c cuá»™i sá»�i vÃ  tráº£i váº£i Ä‘á»‹a ká»¹ thuáº­t.r   r   u	   m dÃ i * u   m sÆ°á»�n kÃ¨ * u	   m dÃ y = r$   r%   uC   KÃ¨ Ä‘Ã¡ há»™c xÃ¢y/lÃ¡t khan bá»� kÃªnh gia cá»‘ chá»‘ng xÃ³i lá»ŸzAL.15110r&   r'   gš™™™™™ñ?r   )r)   r*   r+   Ústone_volume_m3Úgravel_filter_m3Úgeotextile_area_m2r-   r.   )ri   rj   rb   rk   rl   rm   Úslope_lengthÚ
slope_areaÚ	stone_volÚ
gravel_volÚformula_stoneÚformula_filters               r>   Úcalculate_revetment_pitchingz5GeometricBreakdownEngine.calculate_revetment_pitching’   sŒ  € õ ”y ¨q¡°G¸lÑ4JÈqÑ3PÑ!PÑQÔQˆØ! LÑ0ˆ
Ø Ñ0ˆ	ØÐ"5Ñ5ˆ
à'ð  Ið  Ið  I°lð  Ið  Ið  IÐXgð  Ið  Ið  IÐvð  Ið  Ið  Ið  IˆØ(ð  Oð  Oð  O°|ð  Oð  Oð  OÐYlð  Oð  Oð  Oð  |Fð  Oð  Oð  Oð  Oˆð _Ø#ØÝ&¥s­5°¸AÑ+>Ô+>Ñ'?Ô'?Ñ@Ô@Ý '­­E°*¸aÑ,@Ô,@Ñ(AÔ(AÑ BÔ Bàð#¥'­#­e°JÀÑ4EÀqÑ.IÔ.IÑ*JÔ*JÑ"KÔ"KÐ"Kå˜‘”Ø!.ð

ð 

ð 
	
r@   Úcontact_perimeterÚheight_or_lengthÚdeduct_openings_areac                óæ   — | |z  |z  }t          d||z
  ¦  «        }|› d| d›d|d›d�}|dk    r
|d|d›d�z  }|d	|d
›d�z  }dddt          t          t          |d¦  «        ¦  «        ¦  «        |dœS )uB   TÃ­nh diá»‡n tÃ­ch vÃ¡n khuÃ´n tiáº¿p xÃºc bÃª tÃ´ng chuáº©n xÃ¡c.r   r   r   zm chu vi * zm cao)r   r#   u   m2 lá»— má»Ÿz = r$   z m2u9   VÃ¡n khuÃ´n Ä‘á»‹nh hÃ¬nh thi cÃ´ng káº¿t cáº¥u bÃª tÃ´ngzAF.81110Úm2r'   r(   )Úmaxr   r1   r2   )rz   r{   r   r|   Ú
gross_areaÚnet_arear=   s          r>   Úcalculate_formwork_areaz0GeometricBreakdownEngine.calculate_formwork_area°   sÏ   € ð 'Ð)9Ñ9¸EÑAˆ
Ý�s˜JÐ)=Ñ=Ñ>Ô>ˆð ÐXÐXÐ+ÐXÐXÐXÐ<LÐXÐXÐXÐXð 	ð   !Ò#Ð#ØÐCÐ1ÐCÐCÐCÐCÑCˆGØÐ*˜Ð*Ð*Ð*Ð*Ñ*ˆð UØ#ØÝ¥¥E¨(°AÑ$6Ô$6Ñ 7Ô 7Ñ8Ô8Ø!(ð
ð 
ð 	
r@   ç      @Ú	thicknessÚjoint_spacing_mc                ó  — | |z  }||z  }d| z  d|z  z   |z  }t          dt          | |z  ¦  «        ¦  «        }||z  | z   }| d›d|d›d|d›d|d›d|d›d�
}	d	d
dt          t          t	          |d¦  «        ¦  «        ¦  «        t          t          t	          |d¦  «        ¦  «        ¦  «        t          t          t	          |d¦  «        ¦  «        ¦  «        t          t          t	          |d¦  «        ¦  «        ¦  «        |	dœS )ub   TÃ­nh bÃª tÃ´ng máº·t Ä‘Æ°á»�ng/sÃ¢n bÃ£i, vÃ¡n khuÃ´n thÃ nh vÃ  chiá»�u dÃ i cáº¯t khe co giÃ£n.r   r   r   zm * zm = r$   z m3 (z m2)u;   BÃª tÃ´ng máº·t Ä‘Æ°á»�ng giao thÃ´ng / sÃ¢n bÃ£i BTCT M250zAF.15210r&   r'   )r)   r*   r+   Úconcrete_volume_m3Úsurface_area_m2Úformwork_m2Újoint_length_mr-   )r   r   r   r1   r2   )
r   r   r„   r…   Úarea_m2Úvol_m3r‰   Útransverse_jointsrŠ   r=   s
             r>   Úcalculate_pavement_slabz0GeometricBreakdownEngine.calculate_pavement_slabÊ   s*  € ð ˜5‘.ˆØ˜9Ñ$ˆØ˜6‘z A¨¡IÑ-°Ñ:ˆÝ ¥3 v°Ñ'?Ñ#@Ô#@ÑAÔAÐØ*¨UÑ2°VÑ;ˆàÐiÐiÐi UÐiÐiÐi°IÐiÐiÐiÀvÐiÐiÐiÐX_ÐiÐiÐiÐiˆð WØ#ØÝ")­#­e°F¸AÑ.>Ô.>Ñ*?Ô*?Ñ"@Ô"@Ý&¥s­5°¸!Ñ+<Ô+<Ñ'=Ô'=Ñ>Ô>Ý"¥3¥u¨[¸!Ñ'<Ô'<Ñ#=Ô#=Ñ>Ô>Ý%¥c­%°ÀÑ*BÔ*BÑ&CÔ&CÑDÔDØ!(ð	
ð 	
ð 		
r@   )r   NNr	   r   r
   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )rA   r
   rA   r	   )r   r   rB   r   rC   r   rD   r   rE   r   rF   r   r   r   r   r   )r   r   )
rO   r   rP   r   rQ   r   rR   r   r   r   )r   )
r`   r   ra   r   r   r   rb   r   r   r   )rf   rg   rh   T)ri   r   rj   r   rb   r   rk   r   rl   r   rm   rn   r   r   )r	   r   )
rz   r   r{   r   r   r   r|   r   r   r   )rA   rƒ   )
r   r   r   r   r„   r   r…   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr?   rN   r_   re   ry   r‚   rŽ   © r@   r>   r   r      sm  € € € € € ØnÐnàð
 "Ø#'Ø"&ØØ&'Ø"&Ø"%ð0
ð 0
ð 0
ð 0
ñ „\ð0
ðd ð
  Ø"ØØð
ð 
ð 
ð 
ñ „\ð
ð8 ð Øð	
ð 
ð 
ð 
ñ „\ð
ð@ ð
 ð	
ð 
ð 
ð 
ñ „\ð
ð* ð Ø!%Ø%)Øð
ð 
ð 
ð 
ñ „\ð
ð: ð Ø&)ð	
ð 
ð 
ð 
ñ „\ð
ð2 ð  Ø!$ð	
ð 
ð 
ð 
ñ „\ð
ð 
ð 
r@   r   )Ú
__future__r   r/   Údecimalr   Útypingr   r   r”   r@   r>   ú<module>r˜      s€   ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð[
ð [
ð [
ð [
ð [
ñ [
ô [
ð [
ð [
ð [
r@   