§
    _ ’jÒ  ã                   ó”   — d dl Zd dlmc mZ d dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZ ej        d„ ¦   «         Zd„ Zd„ Zd„ Zd	„ ZdS )
é    N)ÚBoqAuditEngine)ÚStatutoryCostSummaryEngine)Úexport_takeoff_to_excelc                  óT   — 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œgS )"Nzitem-1u(   Ä�Ã o mÃ³ng Ä‘áº¥t cáº¥p III báº±ng mÃ¡yÚ	earthworkÚm3g      Y@g     ùå@g    ˆ*QAg        g     ˆÃ@g     á@zAB.11311)ÚidÚ	item_nameÚcategoryÚunitÚquantityÚunit_price_vndÚtotal_amount_vndÚmaterial_cost_vndÚlabor_cost_vndÚequipment_cost_vndÚ	norm_codezitem-2u   BÃª tÃ´ng mÃ³ng M250 Ä‘Ã¡ 1x2Úconcreteg      I@g    Ð3Ag    eÍ�Ag    @w+Ag    €¢	Ag     AzAF.11210zitem-3u   Cá»‘t thÃ©p mÃ³ng CB400 D<=18Úrebaru   táº¥ng      @g    š¤qAg    çvšAg    \�mAg    ÐCAg    €„AzAF.61121© r   ó    ú6C:\Projects\DSCons\tests\test_boq_advanced_features.pyÚsample_boq_itemsr      s“   € ð ØCØ#ØØØ%Ø )Ø!$Ø%Ø")Ø#ð	
ð 	
ð Ø8Ø"ØØØ'Ø *Ø!)Ø&Ø"*Ø#ð	
ð 	
ð Ø8ØØØØ(Ø +Ø!+Ø'Ø"*Ø#ð	
ð 	
ð7(ð (r   c                 óÌ  — t          j        | ddd¬¦  «        }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         d         d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          dd¦  «        }t          dd¦  «        }t          dd¦  «        }	||z   |	z   }
|d         }||
k    }|s—t          j        d|fd||
f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |
¦  «        rt          j        |
¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}t          d|
z   dz  d¦  «        }|d         }||k    }|s—t          j        d|fd||f¦  «        t          j        |¦  «        d t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d|
z   |z   }|d!         }||k    }|s—t          j        d|fd||f¦  «        t          j        |¦  «        d"t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd"dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}t          |d#z  d¦  «        }|d$         }||k    }|s—t          j        d|fd||f¦  «        t          j        |¦  «        d%t          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nd%dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|d&         }|d'         }||k    }|slt          j        d(|fd)||f¦  «        t          j        |¦  «        t          j        |¦  «        d	œz  }d
d|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )*NÚcivil_buildingg       @T)ÚitemsÚdrawing_typeÚvat_rateÚinclude_contingencyÚstatusÚsuccess©ú==©z%(py1)s == %(py4)s©Úpy1Úpy4úassert %(py6)sÚpy6Úlegal_basisu:   Nghá»‹ Ä‘á»‹nh 206/2026/NÄ�-CP & ThÃ´ng tÆ° 38/2026/TT-BXDÚtotal_direct_tg    !8¥AÚ
table_rowsr   ÚcodeÚTÚ
amount_vndg    ºÈhAg    àK@Ag    ´ùPAÚtotal_indirect_gt)z%(py1)s == %(py3)sÚexpected_gt©r&   Úpy3úassert %(py5)sÚpy5g)\�Âõ(¬?Ústatutory_profit_tlÚexpected_tlÚcost_before_tax_gÚ
expected_gg{®Gáz´?Ú
vat_amountÚexpected_vatÚgrand_total_budgetÚcost_after_tax_gxd©ú>)z%(py1)s > %(py4)s)r   Úcalculate_statutory_summaryÚ
@pytest_arÚ_call_reprcompareÚ	_safereprÚAssertionErrorÚ_format_explanationÚroundÚ@py_builtinsÚlocalsÚ_should_repr_global_name)r   ÚsummaryÚ@py_assert0Ú@py_assert3Ú@py_assert2Ú@py_format5Ú@py_format7Ú
c_overheadÚt_tamÚttr1   Ú@py_format4Ú@py_format6r7   r9   r;   s                   r   Ú'test_statutory_cost_summary_calculationrU   :   sQ  € Ý(ÔDØØ%ØØ ð	ñ ô €Gð �8ÔÐ) 	Ð)Ð 	Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð 	Ð)Ñ)Ô)Õ)Ô)ÐÑ)Ô)Õ)Ô) 	Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)à�ÔðØ"^ðØÐ"^Ò^ðð ð õ ìðð ð ð ØÐ"^ðñ ô õ ìð 	ñô õ ìð #_ñô ð ð ñ ð ð ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð ð ð Ð#Ô$Ð3¨Ð3Ð$¨Ò3Ð3Ð3Ð3Õ3Ô3Ð3Ð3Ð3Ð3Ð$¨Ð3Ñ3Ô3Õ3Ô3Ð$Ñ3Ô3Õ3Ô3¨Ñ3Ô3Ð3Ð3Ñ3Ð3Ð3Ð3Ð3Ð3Ñ3Ð3Õ3Õ3Ô3Ð3Ñ3Ô3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3Ð3ð �<Ô  Ô# FÔ+Ð2¨sÐ2Ð+¨sÒ2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð+¨sÐ2Ñ2Ô2Õ2Ô2Ð+Ñ2Ô2Õ2Ô2¨sÑ2Ô2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ø�<Ô  Ô# LÔ1Ð@°[Ð@Ð1°[Ò@Ð@Ð@Ð@Õ@Ô@Ð@Ð@Ð@Ð@Ð1°[Ð@Ñ@Ô@Õ@Ô@Ð1Ñ@Ô@Õ@Ô@°[Ñ@Ô@Ð@Ð@Ñ@Ð@Ð@Ð@Ð@Ð@Ñ@Ð@Õ@Õ@Ô@Ð@Ñ@Ô@Ñ@Ô@Ð@Ð@Ð@Ð@Ð@Ð@Ð@õ Ð*¨AÑ.Ô.€JÝÐ% qÑ)Ô)€EÝ	Ð" AÑ	&Ô	&€BØ˜uÑ$ rÑ)€KØÐ&Ô'Ð6Ð'¨;Ò6Ð6Ð6Ð6Õ6Ô6Ð6Ð6Ð6Ð6Ð'¨;Ð6Ñ6Ô6Õ6Ô6Ð'Ñ6Ô6Ð6Õ6Ô6Ñ6Ô6Ð6Ð6Õ6Ô6¨;Ñ6Ô6Ð6Õ6Ô6¨;Ñ6Ô6Ð6Ð6Ð6Ð6Ñ6Ð6Ð6Ð6Ð6Ð6Ñ6Ð6Õ6Õ6Ô6Ð6Ñ6Ô6Ñ6Ô6Ð6Ð6Ð6Ð6Ð6õ ˜ {Ñ2°eÑ;¸QÑ?Ô?€KØÐ(Ô)Ð8Ð)¨[Ò8Ð8Ð8Ð8Õ8Ô8Ð8Ð8Ð8Ð8Ð)¨[Ð8Ñ8Ô8Õ8Ô8Ð)Ñ8Ô8Ð8Õ8Ô8Ñ8Ô8Ð8Ð8Õ8Ô8¨[Ñ8Ô8Ð8Õ8Ô8¨[Ñ8Ô8Ð8Ð8Ð8Ð8Ñ8Ð8Ð8Ð8Ð8Ð8Ñ8Ð8Õ8Õ8Ô8Ð8Ñ8Ô8Ñ8Ô8Ð8Ð8Ð8Ð8Ð8ð ˜{Ñ*¨[Ñ8€JØÐ&Ô'Ð5Ð'¨:Ò5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð'¨:Ð5Ñ5Ô5Õ5Ô5Ð'Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5¨:Ñ5Ô5Ð5Õ5Ô5¨:Ñ5Ô5Ð5Ð5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5õ ˜ dÑ*¨AÑ.Ô.€LØ�<Ô Ð0Ð  LÒ0Ð0Ð0Ð0Õ0Ô0Ð0Ð0Ð0Ð0Ð  LÐ0Ñ0Ô0Õ0Ô0Ð Ñ0Ô0Ð0Õ0Ô0Ñ0Ô0Ð0Ð0Õ0Ô0 LÑ0Ô0Ð0Õ0Ô0 LÑ0Ô0Ð0Ð0Ð0Ð0Ñ0Ð0Ð0Ð0Ð0Ð0Ñ0Ð0Õ0Õ0Ô0Ð0Ñ0Ô0Ñ0Ô0Ð0Ð0Ð0Ð0Ð0ð Ð'Ô(ÐH¨7Ð3GÔ+HÐHÐ(Ð+HÒHÐHÐHÐHÕHÔHÐHÐHÐHÐHÐ(Ð+HÐHÑHÔHÕHÔHÐ(ÑHÔHÕHÔHÐ+HÑHÔHÐHÐHÑHÐHÐHÐHÐHÐHÑHÐHÕHÕHÔHÐHÑHÔHÑHÔHÐHÐHÐHÐHÐHÐHÐHÐHÐHr   c                  ó–  — t          j        d¦  «        } | d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        d	¦  «        }|d         }d
}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}t          j        d¦  «        }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}d S )Nr   Úk_Cg333333@r"   r$   r%   r(   r)   Úculvert_revetmentg      @Útransport_roadgÍÌÌÌÌÌ@)r   Úget_coefficientsrA   rB   rC   rD   rE   )Úcoeff_civilrK   rL   rM   rN   rO   Úcoeff_hydraulicÚcoeff_transports           r   Ú0test_statutory_cost_coefficients_by_project_typer^   c   s6  € Ý,Ô=Ð>NÑOÔO€KØ�uÔÐ$ Ð$Ð Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$Ð Ð$Ñ$Ô$Õ$Ô$ÐÑ$Ô$Õ$Ô$ Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$å0ÔAÐBUÑVÔV€OØ˜5Ô!Ð( SÐ(Ð! SÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð! SÐ(Ñ(Ô(Õ(Ô(Ð!Ñ(Ô(Õ(Ô( SÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(å0ÔAÐBRÑSÔS€OØ˜5Ô!Ð( SÐ(Ð! SÒ(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(Ð! SÐ(Ñ(Ô(Õ(Ô(Ð!Ñ(Ô(Õ(Ô( SÑ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(r   c                 óö  — t          j        | dd¬¦  «        }|d         }d}||k    }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }d}||k     }|slt          j        d|fd||f¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }d	d
|iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}}|d         }t          |¦  «        }d}||k    }	|	sÇt          j        d|	fd||f¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	}d„ |d         D ¦   «         }d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d}||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}d }||v }|s—t          j        d|fd||f¦  «        t          j        |¦  «        dt          j	        ¦   «         v st          j
        |¦  «        rt          j        |¦  «        nddœz  }dd|iz  }t          t          j        |¦  «        ¦  «        ‚d x}}|d!         }t          |¦  «        }d"}||k    }	|	sÇt          j        d#|	fd$||f¦  «        dt          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }
dd|
iz  }t          t          j        |¦  «        ¦  «        ‚d x}x}x}	}d%„ |d!         D ¦   «         }d&„ |D ¦   «         }t          |¦  «        }|s•d'd(t          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nd(t          j        |¦  «        t          j        |¦  «        d)œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d*„ |D ¦   «         }t          |¦  «        }|s•d'd(t          j	        ¦   «         v st          j
        t          ¦  «        rt          j        t          ¦  «        nd(t          j        |¦  «        t          j        |¦  «        d)œz  }t          t          j        |¦  «        ¦  «        ‚d x}}d S )+Nr   zTest Drawing Takeoff)r   r   Útakeoff_titler    r!   r"   r$   r%   r(   r)   Úquality_scoreéd   )ú<)z%(py1)s < %(py4)sÚfindingsr   r>   )z/%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} > %(py7)sÚlen)Úpy0Úpy2r'   Úpy7zassert %(py9)sÚpy9c                 ó   — g | ]
}|d          ‘ŒS )r-   r   )Ú.0Úfs     r   ú
<listcomp>z3test_boq_audit_engine_detection.<locals>.<listcomp>|   s   € Ð6Ð6Ð6˜1ˆQˆvŒYÐ6Ð6Ð6r   z	AUDIT-010©Úin©z%(py1)s in %(py3)sÚcodesr2   r4   r5   z	AUDIT-011z	AUDIT-014Úrecommended_supplementsé   )ú>=)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)sc                 ó   — g | ]
}|d          ‘ŒS )r
   r   )rk   Úss     r   rm   z3test_boq_audit_engine_detection.<locals>.<listcomp>†   s   € ÐUÐUÐU¨1˜˜+œÐUÐUÐUr   c              3   ó   K  — | ]}d |v V — Œ	dS )u   VÃ¡n khuÃ´nNr   ©rk   Únames     r   ú	<genexpr>z2test_boq_audit_engine_detection.<locals>.<genexpr>‡   s'   è è € ÐBÐB¨ˆ} Ð$ÐBÐBÐBÐBÐBÐBr   z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany)rf   rg   r'   c              3   ó   K  — | ]}d |v V — Œ	dS )u   BÃª tÃ´ng lÃ³tNr   rx   s     r   rz   z2test_boq_audit_engine_detection.<locals>.<genexpr>ˆ   s(   è è € ÐEÐE¨DÐ 4Ð'ÐEÐEÐEÐEÐEÐEr   )r   Úaudit_takeoffrA   rB   rC   rD   rE   re   rG   rH   rI   r{   )r   Ú	audit_resrK   rL   rM   rN   rO   Ú@py_assert1Ú@py_assert6Ú@py_assert5Ú@py_format8Ú@py_format10rq   rS   rT   Úsupplement_namess                   r   Útest_boq_audit_engine_detectionr…   n   sË  € åÔ,ØØ%Ø,ðñ ô €Ið �XÔÐ+ )Ð+Ð )Ò+Ð+Ð+Ð+Õ+Ô+Ð+Ð+Ð+Ð+Ð )Ð+Ñ+Ô+Õ+Ô+ÐÑ+Ô+Õ+Ô+ )Ñ+Ô+Ð+Ð+Ñ+Ð+Ð+Ð+Ð+Ð+Ñ+Ð+Õ+Õ+Ô+Ð+Ñ+Ô+Ñ+Ô+Ð+Ð+Ð+Ð+Ð+Ð+Ð+à�/Ô"ðØ%(ðØ" SÒ(ðð ð õ ìðð ð ð Ø" Sðñ ô õ ìð 	#ñô õ ìð &)ñô ð ð ñ ð ð ð ð ð ñ ð õ õ ìðñ ô ñ ô ð ð ð ð ð ð ð ð ˜Ô$Ð)�3Ð$Ñ%Ô%Ð)¨Ð)Ð%¨Ò)Ð)Ð)Ð)Õ)Ô)Ð)Ð)Ð)Ð)Ð%¨Ð)Ñ)Ô)Ð)Õ)Ô)Ñ)Ô)Ð)Ð)Õ)Ô)�3Ñ)Ô)Ð)Õ)Ô)�3Ñ)Ô)Ð)Ð)Õ)Ô)Ð$Ñ)Ô)Õ)Ô)Ð%Ñ)Ô)Õ)Ô)¨Ñ)Ô)Ð)Ð)Ñ)Ð)Ð)Ð)Ð)Ð)Ñ)Ð)Õ)Õ)Ô)Ð)Ñ)Ô)Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)à6Ð6 	¨*Ô 5Ð6Ñ6Ô6€EàÐˆ;˜%ÐÐÐÐÕÔÐÐÐÐˆ;˜%ÐÑÔÕÔˆ;ÑÔÐÕÔÑÔÐÐÕÔ˜%ÑÔÐÕÔ˜%ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐàÐˆ;˜%ÐÐÐÐÕÔÐÐÐÐˆ;˜%ÐÑÔÕÔˆ;ÑÔÐÕÔÑÔÐÐÕÔ˜%ÑÔÐÕÔ˜%ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐàÐˆ;˜%ÐÐÐÐÕÔÐÐÐÐˆ;˜%ÐÑÔÕÔˆ;ÑÔÐÕÔÑÔÐÐÕÔ˜%ÑÔÐÕÔ˜%ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð Ð2Ô3Ð9�3Ð3Ñ4Ô4Ð9¸Ð9Ð4¸Ò9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð4¸Ð9Ñ9Ô9Ð9Õ9Ô9Ñ9Ô9Ð9Ð9Õ9Ô9�3Ñ9Ô9Ð9Õ9Ô9�3Ñ9Ô9Ð9Ð9Õ9Ô9Ð3Ñ9Ô9Õ9Ô9Ð4Ñ9Ô9Õ9Ô9¸Ñ9Ô9Ð9Ð9Ñ9Ð9Ð9Ð9Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØUÐU°	Ð:SÔ0TÐUÑUÔUÐØBÐBÐ1AÐBÑBÔBÐB�3ÐBÑBÔBÐBÐBÐBÐBÐBÕBÔBÑBÔBÐBÐBÕBÔB�3ÑBÔBÐBÕBÔB�3ÑBÔBÐBÐBÕBÔBÐBÑBÔBÕBÔBÐBÑBÔBÐBÐBÑBÐBÕBÕBÔBÐBÑBÔBÑBÔBÐBÐBÐBÐBÐBØEÐEÐ4DÐEÑEÔEÐE�3ÐEÑEÔEÐEÐEÐEÐEÐEÕEÔEÑEÔEÐEÐEÕEÔE�3ÑEÔEÐEÕEÔE�3ÑEÔEÐEÐEÕEÔEÐEÑEÔEÕEÔEÐEÑEÔEÐEÐEÑEÐEÕEÕEÔEÐEÑEÔEÑEÔEÐEÐEÐEÐEÐEÐEÐEr   c                 óH  — dddddœ}t          || ¬¦  «        }t          |¦  «        }d}||k    }|sòt          j        d|fd	||f¦  «        d
t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
dt	          j        ¦   «         v st          j        |¦  «        rt          j        |¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}t          j        t          j        |¦  «        ¦  «        }|j        }	t          |	¦  «        }d}||k    }|sòt          j        d|fd||f¦  «        d
t	          j        ¦   «         v st          j        t          ¦  «        rt          j        t          ¦  «        nd
dt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        ndt          j        |¦  «        t          j        |¦  «        dœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}x}}d}
|
|	v }|s—t          j        d|fd|
|	f¦  «        t          j        |
¦  «        dt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
}d}
|
|	v }|s—t          j        d|fd|
|	f¦  «        t          j        |
¦  «        dt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
}d}
|
|	v }|s—t          j        d|fd|
|	f¦  «        t          j        |
¦  «        dt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
}d}
|
|	v }|s—t          j        d|fd|
|	f¦  «        t          j        |
¦  «        dt	          j        ¦   «         v st          j        |	¦  «        rt          j        |	¦  «        nddœz  }dd|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
}|d         }d}
|d         }|j        }t!          |¦  «        }|
|v }|sÚt          j        d|fd|
|f¦  «        t          j        |
¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }d!d"|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
x}x}x}}d#}
|d$         }|j        }t!          |¦  «        }|
|v }|sÚt          j        d|fd|
|f¦  «        t          j        |
¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }d!d"|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
x}x}x}}|d         }d%}
|d&         }|j        }t!          |¦  «        }|
|v }|sÚt          j        d|fd|
|f¦  «        t          j        |
¦  «        dt	          j        ¦   «         v st          j        t           ¦  «        rt          j        t           ¦  «        ndt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        d œz  }d!d"|iz  }t          t          j	        |¦  «        ¦  «        ‚d x}
x}x}x}}d S )'Nz	test-tk-1zDWG-TEST.pdfu)   CÃ´ng trÃ¬nh NhÃ  vÄƒn hÃ³a thÃ­ nghiá»‡mr   )r	   Údrawing_nameÚproject_namer   )Útakeoffr   r   r>   )z/%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} > %(py6)sre   Úexcel_bytes)rf   r&   r3   r)   zassert %(py8)sÚpy8é   r"   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚsheet_namesu   1. TH Kinh PhÃ­ (NÄ� 206)rn   rp   r2   r4   r5   u   2. BoQ Khá»‘i LÆ°á»£ngu"   3. Ä�Æ¡n GiÃ¡ Chi Tiáº¿t (VL+NC+M)u   4. Tá»•ng Há»£p Váº­t TÆ° (MR)u&   CÃ”NG TY TNHH XÃ‚Y Dá»°NG Ä�á»ŠNH SÆ NÚA1)zK%(py1)s in %(py9)s
{%(py9)s = %(py3)s(%(py7)s
{%(py7)s = %(py5)s.value
})
}Ústr)r&   r3   r5   rh   ri   zassert %(py11)sÚpy11u   CHI PHÃ� TRá»°C TIáº¾PÚC8u'   Báº¢NG Tá»”NG Há»¢P NHU Cáº¦U Váº¬T TÆ¯ÚA2)r   re   rA   rB   rG   rH   rI   rC   rD   rE   ÚopenpyxlÚload_workbookÚioÚBytesIOÚ
sheetnamesÚvaluer�   )r   r‰   rŠ   rM   r�   Ú@py_assert4rO   Ú@py_format9Úwbr�   rK   rS   rT   Úws1r€   Ú@py_assert8rƒ   Ú@py_format12Úws4s                      r   Útest_excel_export_4_sheetsr    ‹   s)	  € àØ&ØCØ(ð	ð €Gõ *°'ÐAQÐRÑRÔR€KÝˆ{ÑÔÐ˜aÐÐ˜aÒÐÐÐÕÔÐÐÐÐÐ˜aÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆ{ÑÔÐÕÔˆ{ÑÔÐÐÕÔÐÑÔÕÔ˜aÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐõ 
Ô	¥¤
¨;Ñ 7Ô 7Ñ	8Ô	8€BØ”-€Kåˆ{ÑÔÐ ˜qÐ Ð˜qÒ Ð Ð Ð Õ Ô Ð Ð Ð Ð Ð˜qÐ Ñ Ô Ð Õ Ô Ñ Ô Ð Ð Õ Ô �3Ñ Ô Ð Õ Ô �3Ñ Ô Ð Ð Ð Õ Ô Ñ Ô Ð Ð Õ Ô ˆ{Ñ Ô Ð Õ Ô ˆ{Ñ Ô Ð Ð Õ Ô ÐÑ Ô Õ Ô ˜qÑ Ô Ð Ð Ñ Ð Ð Ð Ð Ð Ñ Ð Õ Õ Ô Ð Ñ Ô Ñ Ô Ð Ð Ð Ð Ð Ð Ð Ø&Ð5Ð&¨+Ð5Ð5Ð5Ð5Õ5Ô5Ð5Ð5Ð5Ð5Ð&¨+Ð5Ñ5Ô5Õ5Ô5Ð&Ñ5Ô5Ð5Õ5Ô5Ñ5Ô5Ð5Ð5Õ5Ô5¨+Ñ5Ô5Ð5Õ5Ô5¨+Ñ5Ô5Ð5Ð5Ð5Ð5Ñ5Ð5Ð5Ð5Ð5Ð5Ñ5Ð5Õ5Õ5Ô5Ð5Ñ5Ô5Ñ5Ô5Ð5Ð5Ð5Ð5Ð5Ø#Ð2Ð# {Ð2Ð2Ð2Ð2Õ2Ô2Ð2Ð2Ð2Ð2Ð# {Ð2Ñ2Ô2Õ2Ô2Ð#Ñ2Ô2Ð2Õ2Ô2Ñ2Ô2Ð2Ð2Õ2Ô2 {Ñ2Ô2Ð2Õ2Ô2 {Ñ2Ô2Ð2Ð2Ð2Ð2Ñ2Ð2Ð2Ð2Ð2Ð2Ñ2Ð2Õ2Õ2Ô2Ð2Ñ2Ô2Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ø/Ð>Ð/°;Ð>Ð>Ð>Ð>Õ>Ô>Ð>Ð>Ð>Ð>Ð/°;Ð>Ñ>Ô>Õ>Ô>Ð/Ñ>Ô>Ð>Õ>Ô>Ñ>Ô>Ð>Ð>Õ>Ô>°;Ñ>Ô>Ð>Õ>Ô>°;Ñ>Ô>Ð>Ð>Ð>Ð>Ñ>Ð>Ð>Ð>Ð>Ð>Ñ>Ð>Õ>Õ>Ô>Ð>Ñ>Ô>Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ø+Ð:Ð+¨{Ð:Ð:Ð:Ð:Õ:Ô:Ð:Ð:Ð:Ð:Ð+¨{Ð:Ñ:Ô:Õ:Ô:Ð+Ñ:Ô:Ð:Õ:Ô:Ñ:Ô:Ð:Ð:Õ:Ô:¨{Ñ:Ô:Ð:Õ:Ô:¨{Ñ:Ô:Ð:Ð:Ð:Ð:Ñ:Ð:Ð:Ð:Ð:Ð:Ñ:Ð:Õ:Õ:Ô:Ð:Ñ:Ô:Ñ:Ô:Ð:Ð:Ð:Ð:Ð:ð Ð(Ô
)€CØ3ÐK¸3¸t¼9ÐK¸9¼?ÐKµs¸?Ñ7KÔ7KÐKÐ3Ð7KÐKÐKÐKÐKÕKÔKÐKÐKÐKÐKÐ3Ð7KÐKÑKÔKÕKÔKÐ3ÑKÔKÐKÕKÔKÑKÔKÐKÐKÕKÔKµsÑKÔKÐKÕKÔKµsÑKÔKÐKÐKÕKÔK¸9ÑKÔKÕKÔK¸?ÑKÔKÕKÔKÐ7KÑKÔKÐKÐKÑKÐKÐKÐKÐKÐKÑKÐKÕKÕKÔKÐKÑKÔKÑKÔKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKÐKØ#Ð;¨3¨t¬9Ð;¨9¬?Ð;¥s¨?Ñ';Ô';Ð;Ð#Ð';Ð;Ð;Ð;Ð;Õ;Ô;Ð;Ð;Ð;Ð;Ð#Ð';Ð;Ñ;Ô;Õ;Ô;Ð#Ñ;Ô;Ð;Õ;Ô;Ñ;Ô;Ð;Ð;Õ;Ô;¥sÑ;Ô;Ð;Õ;Ô;¥sÑ;Ô;Ð;Ð;Õ;Ô;¨9Ñ;Ô;Õ;Ô;¨?Ñ;Ô;Õ;Ô;Ð';Ñ;Ô;Ð;Ð;Ñ;Ð;Ð;Ð;Ð;Ð;Ñ;Ð;Õ;Õ;Ô;Ð;Ñ;Ô;Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;ð Ð-Ô
.€CØ4ÐL¸CÀ¼IÐL¸I¼OÐL½¸OÑ8LÔ8LÐLÐ4Ð8LÐLÐLÐLÐLÕLÔLÐLÐLÐLÐLÐ4Ð8LÐLÑLÔLÕLÔLÐ4ÑLÔLÐLÕLÔLÑLÔLÐLÐLÕLÔL½ÑLÔLÐLÕLÔL½ÑLÔLÐLÐLÕLÔL¸IÑLÔLÕLÔL¸OÑLÔLÕLÔLÐ8LÑLÔLÐLÐLÑLÐLÐLÐLÐLÐLÑLÐLÕLÕLÔLÐLÑLÔLÑLÔLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLÐLr   )ÚbuiltinsrG   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterA   r•   r“   ÚpytestÚ0app.modules.takeoff.application.boq_audit_enginer   Ú:app.modules.takeoff.application.boq_statutory_cost_servicer   Ú.app.modules.takeoff.application.excel_exporterr   Úfixturer   rU   r^   r…   r    r   r   r   ú<module>rª      sï   ðØ  € € € € € € € € € € € € €	€	€	€	à €€€Ø €€€à KÐ KÐ KÐ KÐ KÐ Kðð ð ð ð ð ð SÐ RÐ RÐ RÐ RÐ Rð „ð)ð )ñ „ð)ðX&Ið &Ið &IðR)ð )ð )ðFð Fð Fð:Mð Mð Mð Mð Mr   