§
    D™–jÓ+  ã                  ó*  — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
mZ ddlmZ ddlmZ ddlmZ e	j        dd
„¦   «         Ze	j        dd„¦   «         Ze	j        dd„¦   «         Zd„ Zd„ ZddlZd„ Zd„ Zdd„Zdd„ZddlmZ ddlm Z  d„ Z!d„ Z"dd„Z#dS ) zQUnit and integration tests for DeepSeek Agentic Harness (DHS) Multi-Agent System.é    )ÚannotationsN)Ú
TestClient)Ú
create_app)ÚAuthService)ÚDeepSeekHarnessServiceÚreturnr   c                 óJ   — t          ¦   «         } i | _        t          | ¦  «        S )N)r   Údependency_overridesr   )Úapps    ú9C:\Projects\DSCons\tests\test_deepseek_harness_agentic.pyÚclean_clientr      s   € å
‰,Œ,€CØ!€CÔÝ�c‰?Œ?Ðó    údict[str, str]c                 ób   — t          ¦   «         } |                      ddddddœ¦  «        }dd|› �iS )	Nzsuperadmin-test-idzson.dinhson@dscons.vnÚ
superadminu   Nguyá»…n SÄ© SÆ¡nÚ
0202111150©ÚidÚemailÚroleÚ	full_nameÚ
company_idÚAuthorizationúBearer ©r   Úcreate_jwt_token©ÚauthÚtokens     r   Úsuperadmin_headersr       sO   € å‰=Œ=€DØ×!Ò!à&Ø,Ø Ø,Ø&ð	
ð 	
ñô €Eð Ð. uÐ.Ð.Ð/Ð/r   c                 ób   — t          ¦   «         } |                      ddddddœ¦  «        }dd|› �iS )	Nzviewer-test-idzviewer@dscons.vnÚviewerzViewer Testr   r   r   r   r   r   s     r   Úviewer_headersr#   #   sO   € å‰=Œ=€DØ×!Ò!à"Ø'ØØ&Ø&ð	
ð 	
ñô €Eð Ð. uÐ.Ð.Ð/Ð/r   c                 ó
  — 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}}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}||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         }|j        }d} ||¦  «        }|ssdt          j        |¦  «        t          j        |¦  «        t          j        |¦  «        t          j        |¦  «        dœz  }t          t          j
        |¦  «        ¦  «        ‚d	x}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"}||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 )(uK   Kiá»ƒm tra danh má»¥c 4 ká»‹ch báº£n nhiá»‡m vá»¥ thá»±c táº¿ cá»§a DSCons.é   ©ú==©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚsamples©Úpy0Úpy1Úpy3Úpy6úassert %(py8)sÚpy8Nc                ó   — h | ]
}|d          ’ŒS )Úpillar© ©Ú.0Úss     r   ú	<setcomp>z5test_dhs_sample_missions_catalogue.<locals>.<setcomp>;   s   € Ð,Ð,Ð,˜qˆq�Œ{Ð,Ð,Ð,r   Úxay_lap©Úin©z%(py1)s in %(py3)sÚpillars©r-   r.   úassert %(py5)sÚpy5Úvan_tai_xe_benÚcho_thue_ca_mayÚvat_tu_san_lapÚquan_tri_noi_boÚ	sample_idzmission-úLassert %(py7)s
{%(py7)s = %(py3)s
{%(py3)s = %(py1)s.startswith
}(%(py5)s)
}©r-   r.   r@   Úpy7Úinvolved_personasé   ©ú>=)z0%(py4)s
{%(py4)s = %(py0)s(%(py2)s)
} >= %(py7)s)r,   Úpy2Úpy4rH   zassert %(py9)sÚpy9Úsuggested_promptÚ )ú!=)z%(py1)s != %(py4)s©r-   rN   úassert %(py6)sr/   )r   Úget_sample_missionsr)   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚ
startswith)Úservicer*   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9r=   Ú@py_assert0Ú@py_format4Ú@py_format6r7   Ú@py_assert6Ú@py_format8Ú@py_assert1Ú@py_assert3Ú@py_format10Ú@py_format5s                     r   Ú"test_dhs_sample_missions_cataloguern   5   s™  € å$Ñ&Ô&€GØ×)Ò)Ñ+Ô+€Gåˆw‰<Œ<Ð˜1Ðˆ<˜1ÒÐÐÐÕÔÐÐÐÐˆ<˜1ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆwÑÔÐÕÔˆwÑÔÐÐÕÔˆ<ÑÔÕÔ˜1ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐØ,Ð, GÐ,Ñ,Ô,€GØÐˆ9˜ÐÐÐÐÕÔÐÐÐÐˆ9˜ÐÑÔÕÔˆ9ÑÔÐÕÔÑÔÐÐÕÔ˜ÑÔÐÕÔ˜ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐØÐ&Ð˜wÐ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð˜wÐ&Ñ&Ô&Õ&Ô&ÐÑ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜wÑ&Ô&Ð&Õ&Ô&˜wÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ØÐ'Ð Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' Ñ'Ô'Ð'Õ'Ô' Ñ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'ØÐ&Ð˜wÐ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð˜wÐ&Ñ&Ô&Õ&Ô&ÐÑ&Ô&Ð&Õ&Ô&Ñ&Ô&Ð&Ð&Õ&Ô&˜wÑ&Ô&Ð&Õ&Ô&˜wÑ&Ô&Ð&Ð&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&ØÐ'Ð Ð'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'Ð Ð'Ñ'Ô'Õ'Ô'ÐÑ'Ô'Ð'Õ'Ô'Ñ'Ô'Ð'Ð'Õ'Ô' Ñ'Ô'Ð'Õ'Ô' Ñ'Ô'Ð'Ð'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'àð +ñ +ˆØ�Œ~Ð4ˆ~Ô(Ð4¨Ð4Ð(Ð(¨Ñ4Ô4Ð4Ð4Ð4Ð4Õ4Ô4ˆ~Ñ4Ô4Õ4Ô4Ð(Ñ4Ô4Õ4Ô4¨Ñ4Ô4Õ4Ô4Ð4Ñ4Ô4Ð4Ð4Ñ4Ð4Õ4Õ4Ô4Ð4Ñ4Ô4Ñ4Ô4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ØÐ(Ô)Ð/�sÐ)Ñ*Ô*Ð/¨aÐ/Ð*¨aÒ/Ð/Ð/Ð/Õ/Ô/Ð/Ð/Ð/Ð/Ð*¨aÐ/Ñ/Ô/Ð/Õ/Ô/Ñ/Ô/Ð/Ð/Õ/Ô/�sÑ/Ô/Ð/Õ/Ô/�sÑ/Ô/Ð/Ð/Õ/Ô/Ð)Ñ/Ô/Õ/Ô/Ð*Ñ/Ô/Õ/Ô/¨aÑ/Ô/Ð/Ð/Ñ/Ð/Ð/Ð/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/ØÐ#Ô$Ð*¨Ð*Ð$¨Ò*Ð*Ð*Ð*Õ*Ô*Ð*Ð*Ð*Ð*Ð$¨Ð*Ñ*Ô*Õ*Ô*Ð$Ñ*Ô*Õ*Ô*¨Ñ*Ô*Ð*Ð*Ñ*Ð*Ð*Ð*Ð*Ð*Ñ*Ð*Õ*Õ*Ô*Ð*Ñ*Ô*Ñ*Ô*Ð*Ð*Ð*Ð*Ð*Ð*Ð*Ñ*ð+ð +r   c                 óz  — t          ¦   «         } |                      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}||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}||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}||
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         }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}||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}||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}||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}||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&}||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 )'uI   Kiá»ƒm thá»­ 6 cÃ´ng cá»¥ Ground Truth Ä‘Æ°á»£c cung cáº¥p cho AI Agents.u   bÃª tÃ´ng cá»�c cá»« larsen)ÚqueryÚstatusÚSUCCESSr&   ©z%(py1)s == %(py4)srS   rT   r/   NÚexecution_msr:   r<   Út1r>   r?   r@   Ú	equipment)Úentity_typeÚcountr   rK   ©z%(py1)s >= %(py4)sÚmatching_resultÚt3zDA-DADO-2026é   )Ú
project_idÚstage_numberÚipc_dossierÚt4Ú
0200149705)Úpartner_vat_codeÚ
0201889988u   Cá»‘ng Báº¿n Kem)Úproject_nameÚ
complianceÚvalidity_statusÚ	COMPLIANT)r   Útool_hybrid_search_knowledgerV   rW   r[   r\   r]   rX   rY   rZ   Útool_query_erp_ledgerÚtool_audit_3way_matchingÚtool_boq_and_ipc_calculationÚtool_equipment_and_fuel_auditÚtool_legal_fidic_check)r_   ru   re   rk   r`   rm   rc   rf   rg   Út2r{   r€   Út5_transportÚt5_machineryÚt6s                  r   Ú%test_dhs_ground_truth_tools_executionr’   H   sá  € å$Ñ&Ô&€Gð 
×	-Ò	-Ð4QÐ	-Ñ	RÔ	R€BØˆhŒ<Ð$˜9Ð$ˆ<˜9Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ<˜9Ð$Ñ$Ô$Õ$Ô$ˆ<Ñ$Ô$Õ$Ô$˜9Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÐˆ>˜RÐÐÐÐÕÔÐÐÐÐˆ>˜RÐÑÔÕÔˆ>ÑÔÐÕÔÑÔÐÐÕÔ˜RÑÔÐÕÔ˜RÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð 
×	&Ò	&°;Ð	&Ñ	?Ô	?€BØˆhŒ<Ð$˜9Ð$ˆ<˜9Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ<˜9Ð$Ñ$Ô$Õ$Ô$ˆ<Ñ$Ô$Õ$Ô$˜9Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØˆgŒ;Ð˜!Ðˆ;˜!ÒÐÐÐÕÔÐÐÐÐˆ;˜!ÐÑÔÕÔˆ;ÑÔÕÔ˜!ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐð 
×	)Ò	)Ñ	+Ô	+€BØˆhŒ<Ð$˜9Ð$ˆ<˜9Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ<˜9Ð$Ñ$Ô$Õ$Ô$ˆ<Ñ$Ô$Õ$Ô$˜9Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÐ"Ð Ð"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð Ð"Ñ"Ô"Õ"Ô"ÐÑ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô" Ñ"Ô"Ð"Õ"Ô" Ñ"Ô"Ð"Ð"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"ð 
×	-Ò	-¸ÐVWÐ	-Ñ	XÔ	X€BØˆhŒ<Ð$˜9Ð$ˆ<˜9Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ<˜9Ð$Ñ$Ô$Õ$Ô$ˆ<Ñ$Ô$Õ$Ô$˜9Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÐˆ=˜BÐÐÐÐÕÔÐÐÐÐˆ=˜BÐÑÔÕÔˆ=ÑÔÐÕÔÑÔÐÐÕÔ˜BÑÔÐÕÔ˜BÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐð ×8Ò8È,Ð8ÑWÔW€LØ˜Ô!Ð. YÐ.Ð! YÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Õ.Ô.Ð!Ñ.Ô.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.Ø×8Ò8È,Ð8ÑWÔW€LØ˜Ô!Ð. YÐ.Ð! YÒ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð! YÐ.Ñ.Ô.Õ.Ô.Ð!Ñ.Ô.Õ.Ô. YÑ.Ô.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð 
×	'Ò	'Ð5GÐ	'Ñ	HÔ	H€BØˆhŒ<Ð$˜9Ð$ˆ<˜9Ò$Ð$Ð$Ð$Õ$Ô$Ð$Ð$Ð$Ð$ˆ<˜9Ð$Ñ$Ô$Õ$Ô$ˆ<Ñ$Ô$Õ$Ô$˜9Ñ$Ô$Ð$Ð$Ñ$Ð$Ð$Ð$Ð$Ð$Ñ$Ð$Õ$Õ$Ô$Ð$Ñ$Ô$Ñ$Ô$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØˆlÔÐ-Ô.Ð=°+Ð=Ð.°+Ò=Ð=Ð=Ð=Õ=Ô=Ð=Ð=Ð=Ð=Ð.°+Ð=Ñ=Ô=Õ=Ô=Ð.Ñ=Ô=Õ=Ô=°+Ñ=Ô=Ð=Ð=Ñ=Ð=Ð=Ð=Ð=Ð=Ñ=Ð=Õ=Õ=Ô=Ð=Ñ=Ô=Ñ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=r   c                 ó`  — t          ¦   «         } t          j        |                      d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         }|j	        }d} ||¦  «        }|ssdt	          j        |¦  «        t	          j        |¦  «        t	          j        |¦  «        t	          j        |¦  «        dœz  }	t          t	          j        |	¦  «        ¦  «        ‚dx}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dg}||v }|slt	          j        d|fd||f¦  «        t	          j        |¦  «        t	          j        |¦  «        d
œz  }dd|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}}d }|d!         }|j
        } |¦   «         }||v }|s’t	          j        d|fd"||f¦  «        t	          j        |¦  «        t	          j        |¦  «        t	          j        |¦  «        t	          j        |¦  «        d#œz  }d$d%|iz  }t          t	          j        |¦  «        ¦  «        ‚dx}x}x}x}}dS )&uk   Kiá»ƒm thá»­ chu trÃ¬nh Ä‘iá»�u phá»‘i tá»± trá»‹ láº­p há»“ sÆ¡ Nghiá»‡m thu Thanh toÃ¡n IPC 03a Ä�á»£t 2.uX   Tháº©m Ä�á»‹nh & Láº­p Há»“ SÆ¡ Nghiá»‡m Thu Thanh ToÃ¡n IPC Ä�á»£t 2 (Cá»‘ng Báº¿n Kem)uo   Kiá»ƒm toÃ¡n toÃ n diá»‡n khá»‘i lÆ°á»£ng Ä‘áº¯p Ä‘Ãª bao, Ã©p cá»�c cá»« Larsen vÃ  bÃª tÃ´ng cá»‘ng Ä�á»£t 2.r9   T©Úmission_titleÚmission_promptr3   Údeep_reasoning_enabledrq   Ú	COMPLETEDr&   rs   rS   rT   r/   NÚ
mission_idzDHS-rF   rG   Útotal_stepsé   rK   ry   Útotal_execution_secondsr   )ú>)z%(py1)s > %(py4)sÚself_reflection_summaryÚfinancial_precision_checkÚPASSEDÚFAILEDr:   )z%(py1)s in %(py4)su	   BÃ�O CÃ�OÚexecutive_report)zD%(py1)s in %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py4)s.upper
}()
})r-   rN   r/   r1   zassert %(py10)sÚpy10)r   ÚasyncioÚrunÚexecute_missionrV   rW   r[   r\   r]   r^   Úupper)r_   Úresre   rk   r`   rm   rc   rb   rh   ri   Ú
reflectionra   Ú@py_assert7rd   Ú@py_format11s                  r   Ú&test_dhs_mission_execution_xay_lap_ipcr¬   n   s£  € å$Ñ&Ô&€GÝ
Œ+�g×-Ò-Øpð IØØ#ð	 .ñ ô ñ ô €Cð ˆxŒ=Ð'˜KÐ'ˆ=˜KÒ'Ð'Ð'Ð'Õ'Ô'Ð'Ð'Ð'Ð'ˆ=˜KÐ'Ñ'Ô'Õ'Ô'ˆ=Ñ'Ô'Õ'Ô'˜KÑ'Ô'Ð'Ð'Ñ'Ð'Ð'Ð'Ð'Ð'Ñ'Ð'Õ'Õ'Ô'Ð'Ñ'Ô'Ñ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Øˆ|ÔÐ/ÐÔ'Ð/¨Ð/Ð'Ð'¨Ñ/Ô/Ð/Ð/Ð/Ð/Õ/Ô/ÐÑ/Ô/Õ/Ô/Ð'Ñ/Ô/Õ/Ô/¨Ñ/Ô/Õ/Ô/Ð/Ñ/Ô/Ð/Ð/Ñ/Ð/Õ/Õ/Ô/Ð/Ñ/Ô/Ñ/Ô/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Øˆ}ÔÐ" Ð"Ð Ò"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð Ð"Ñ"Ô"Õ"Ô"ÐÑ"Ô"Õ"Ô" Ñ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"ØÐ(Ô)Ð-¨AÐ-Ð)¨AÒ-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð)¨AÐ-Ñ-Ô-Õ-Ô-Ð)Ñ-Ô-Õ-Ô-¨AÑ-Ô-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-ð Ð.Ô/€JØÐ1Ô2°8Ô<ÐTÀÈ8Ð@TÐTÐ<Ð@TÐTÐTÐTÐTÕTÔTÐTÐTÐTÐTÐ<Ð@TÐTÑTÔTÕTÔTÐ<ÑTÔTÕTÔTÐ@TÑTÔTÐTÐTÑTÐTÐTÐTÐTÐTÑTÐTÕTÕTÔTÐTÑTÔTÑTÔTÐTÐTÐTÐTÐTÐTÐTð Ð9˜#Ð0Ô1Ð9Ð1Ô7Ð9Ð7Ð7Ñ9Ô9Ð9ˆ;Ð9Ð9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9ˆ;Ð9Ð9Ñ9Ô9Õ9Ô9ˆ;Ñ9Ô9Õ9Ô9Ð1Ñ9Ô9Õ9Ô9Ð7Ñ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Ð9Ð9Ð9Ð9Ð9r   c                 óê  — t          ¦   «         } 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}}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S )uD   Kiá»ƒm thá»­ ká»‹ch báº£n váº­n táº£i xe ben vÃ  mua bÃ¡n váº­t tÆ°.u/   Kiá»ƒm toÃ¡n 36 chuyáº¿n xe ben bÃ¹n náº¡o vÃ©tuR   Ä�á»‘i soÃ¡t vÃ© cÃ¢n vÃ  tiÃªu hao dáº§u 24L/h vá»›i ThoÃ¡t NÆ°á»›c Háº£i PhÃ²ng.rA   ©r•   r–   r3   rq   r˜   r&   rs   rS   rT   r/   Nrš   r›   rK   ry   u)   Kiá»ƒm toÃ¡n cÃ¡t san láº¥p vÃ  máº«u R28uO   Kiá»ƒm tra hao há»¥t Ä�M 12/2021 vÃ  chá»©ng chá»‰ cháº¥t lÆ°á»£ng Trung KiÃªn.rC   )	r   r¤   r¥   r¦   rV   rW   r[   r\   r]   )r_   Úres_transportre   rk   r`   rm   rc   Úres_materialss           r   Ú2test_dhs_mission_execution_logistics_and_materialsr±   …   s!  € å$Ñ&Ô&€Gõ ”K × 7Ò 7ØGØkØð !8ñ !ô !ñ ô €Mð
 ˜Ô"Ð1 kÐ1Ð" kÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð" kÐ1Ñ1Ô1Õ1Ô1Ð"Ñ1Ô1Õ1Ô1 kÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø˜Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,õ ”K × 7Ò 7ØAØhØð !8ñ !ô !ñ ô €Mð
 ˜Ô"Ð1 kÐ1Ð" kÒ1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð" kÐ1Ñ1Ô1Õ1Ô1Ð"Ñ1Ô1Õ1Ô1 kÑ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø˜Ô'Ð,¨1Ð,Ð'¨1Ò,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð'¨1Ð,Ñ,Ô,Õ,Ô,Ð'Ñ,Ô,Õ,Ô,¨1Ñ,Ô,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,r   r   r    c                ó^
  — |                       d|¬¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        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          |¦  «        }	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ddddœ}|                      d||¬¦  «        }|j        dk    rZt          | 
                    ¦   «         ¦  «                             dd¦  «                             d¦  «        }t          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&|¬¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        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
S ).uQ   Kiá»ƒm thá»­ cÃ¡c REST endpoints cá»§a DeepSeek Harness vá»›i quyá»�n Superadmin.z"/v1/agents/harness/sample-missions©ÚheaderséÈ   r&   ©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚres1©r,   rM   r@   úassert %(py7)srH   Nr%   r(   r)   r*   r+   r0   r1   u9   Kiá»ƒm toÃ¡n nghiá»‡m thu giai Ä‘oáº¡n 2 Cá»‘ng Báº¿n Kemu5   Kiá»ƒm tra khá»‘i lÆ°á»£ng vÃ  láº­p phá»¥ lá»¥c 03a.r9   Tr”   ú/v1/agents/harness/execute©Újsonr´   ÚasciiÚbackslashreplacez(POST /v1/agents/harness/execute failed: rq   r˜   rs   rS   rT   r/   rš   r›   rK   ry   z/v1/agents/harness/historyÚres3Úhistoryr:   r<   r>   r?   r@   )ÚgetÚstatus_coderV   rW   rX   rY   rZ   r[   r\   r]   r¼   r)   ÚpostÚstrÚencodeÚdecode)r   r    r·   rj   rb   rk   rg   ri   r*   r`   ra   rc   rd   ÚpayloadÚres2Úerr_msgÚdatare   rm   r¿   rÀ   rf   s                         r   Ú!test_dhs_api_endpoints_authorizedrË   Ÿ   sö  € ð
 ×ÒØ,Ð6Hð ñ ô €Dð ÔÐ"˜sÐ"Ð˜sÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð˜sÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ4Ñ"Ô"Ð"Õ"Ô"ˆ4Ñ"Ô"Ð"Ð"Õ"Ô"ÐÑ"Ô"Õ"Ô"˜sÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø�iŠi‰kŒk€GÝˆw‰<Œ<Ð˜1Ðˆ<˜1ÒÐÐÐÕÔÐÐÐÐˆ<˜1ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆwÑÔÐÕÔˆwÑÔÐÐÕÔˆ<ÑÔÕÔ˜1ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐð UØQØØ"&ð	ð €Gð ×ÒØ$¨7Ð<Nð ñ ô €Dð Ô˜3ÒÐÝ�d—i’i‘k”kÑ"Ô"×)Ò)¨'Ð3EÑFÔF×MÒMÈgÑVÔVˆÝÐQÈÐQÐQÑRÔRÐRØ�9Š9‰;Œ;€DØ�Œ>Ð(˜[Ð(ˆ>˜[Ò(Ð(Ð(Ð(Õ(Ô(Ð(Ð(Ð(Ð(ˆ>˜[Ð(Ñ(Ô(Õ(Ô(ˆ>Ñ(Ô(Õ(Ô(˜[Ñ(Ô(Ð(Ð(Ñ(Ð(Ð(Ð(Ð(Ð(Ñ(Ð(Õ(Õ(Ô(Ð(Ñ(Ô(Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ø�ÔÐ# !Ð#Ð !Ò#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#Ð !Ð#Ñ#Ô#Õ#Ô#ÐÑ#Ô#Õ#Ô# !Ñ#Ô#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#ð ×ÒÐ8ÐBTÐÑUÔU€DØÔÐ"˜sÐ"Ð˜sÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð˜sÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ4Ñ"Ô"Ð"Õ"Ô"ˆ4Ñ"Ô"Ð"Ð"Õ"Ô"ÐÑ"Ô"Õ"Ô"˜sÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø�iŠi‰kŒk€GØÐˆ9˜ÐÐÐÐÕÔÐÐÐÐˆ9˜ÐÑÔÕÔˆ9ÑÔÐÕÔÑÔÐÐÕÔ˜ÑÔÐÕÔ˜ÑÔÐÐÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐr   r#   c                óÄ  — ddddœ}|                       d||¬¦  «        }|j        }d}||k    }|sªt          j        d|fd	||f¦  «        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S )uc   Kiá»ƒm thá»­ quyá»�n Viewer bá»‹ tá»« chá»‘i 403 khi cá»‘ kÃ­ch hoáº¡t Ä‘iá»�u phá»‘i nhiá»‡m vá»¥.u   Nhiá»‡m vá»¥ trÃ¡i phÃ©pu   Thá»±c thi trÃ¡i phÃ©p.r9   r®   rº   r»   i“  r&   r¶   r¨   r¸   r¹   rH   N)
rÃ   rÂ   rV   rW   rX   rY   rZ   r[   r\   r]   )	r   r#   rÇ   r¨   rj   rb   rk   rg   ri   s	            r   Ú1test_dhs_api_forbidden_for_unauthorized_executionrÍ   Ã   s!  € ð
 4Ø3Øðð €Gð
 ×
Ò
Ø$¨7¸Nð ñ ô €Cð Œ?Ð!˜cÐ!ˆ?˜cÒ!Ð!Ð!Ð!Õ!Ô!Ð!Ð!Ð!Ð!ˆ?˜cÐ!Ñ!Ô!Ð!Õ!Ô!Ñ!Ô!Ð!Ð!Õ!Ô!ˆ3Ñ!Ô!Ð!Õ!Ô!ˆ3Ñ!Ô!Ð!Ð!Õ!Ô!ˆ?Ñ!Ô!Õ!Ô!˜cÑ!Ô!Ð!Ð!Ñ!Ð!Ð!Ð!Ð!Ð!Ñ!Ð!Õ!Õ!Ô!Ð!Ñ!Ô!Ñ!Ô!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ð!r   )ÚDSConsMCPServer)ÚAgentSchedulerServicec                 ó  — t          ¦   «         } |                      dddi 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di dœ¦  «        }|d         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ddddddd d!œd"œdœ¦  «        }|d         d#         }| }|s:d$d%t          j        |¦  «        iz  }t          t          j        |¦  «        ¦  «        ‚dx}}|d         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S )+uN   Kiá»ƒm thá»­ MCP Server JSON-RPC 2.0 giao tiáº¿p vá»›i DeepSeek Harness (DSH).z2.0r›   Ú
initialize)Újsonrpcr   ÚmethodÚparamsÚresultÚ
serverInfoÚnamezdscons-erp-mcpr&   rs   rS   rT   r/   Nr|   z
tools/listÚtoolsc                ó   — g | ]
}|d          ‘ŒS )r×   r4   )r6   Úts     r   ú
<listcomp>z3test_dscons_mcp_server_protocol.<locals>.<listcomp>è   s   € Ð+Ð+Ð+ �!�F”)Ð+Ð+Ð+r   Úsearch_dscons_knowledger:   r<   Ú
tool_namesr>   r?   r@   Úcalculate_ipc_03aÚaudit_3way_matchingrJ   z
tools/callzDA-KM-BENKEM-2025-2026g      $@g      @)r}   r~   Úadvance_deduction_pctÚretention_pct)r×   Ú	argumentsÚisErrorzassert not %(py1)sr-   Úcontentr   ÚtextÚcertificate_codeÚcontent_text)
rÎ   Úhandle_requestrV   rW   r[   r\   r]   rX   rY   rZ   )ÚserverÚinit_resre   rk   r`   rm   rc   Úlist_resrØ   rÝ   rf   rg   Úcall_resÚ@py_format3rç   s                  r   Útest_dscons_mcp_server_protocolrî   Ù   s  € åÑÔ€Fð ×$Ò$Ø ¨lÀbÐIÐIñô €Hð �HÔ˜lÔ+¨FÔ3ÐGÐ7GÐGÐ3Ð7GÒGÐGÐGÐGÕGÔGÐGÐGÐGÐGÐ3Ð7GÐGÑGÔGÕGÔGÐ3ÑGÔGÕGÔGÐ7GÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGð ×$Ò$Ø ¨lÀbÐIÐIñô €Hð �XÔ˜wÔ'€EØ+Ð+ UÐ+Ñ+Ô+€JØ$Ð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ØÐ,Ð *Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ð,Ð,Ð,Ð *Ð,Ñ,Ô,Õ,Ô,ÐÑ,Ô,Ð,Õ,Ô,Ñ,Ô,Ð,Ð,Õ,Ô, *Ñ,Ô,Ð,Õ,Ô, *Ñ,Ô,Ð,Ð,Ð,Ð,Ñ,Ð,Ð,Ð,Ð,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ø Ð.Ð  JÐ.Ð.Ð.Ð.Õ.Ô.Ð.Ð.Ð.Ð.Ð  JÐ.Ñ.Ô.Õ.Ô.Ð Ñ.Ô.Ð.Õ.Ô.Ñ.Ô.Ð.Ð.Õ.Ô. JÑ.Ô.Ð.Õ.Ô. JÑ.Ô.Ð.Ð.Ð.Ð.Ñ.Ð.Ð.Ð.Ð.Ð.Ñ.Ð.Õ.Õ.Ô.Ð.Ñ.Ô.Ñ.Ô.Ð.Ð.Ð.Ð.Ð.ð ×$Ò$àØØ"à+à":Ø$%Ø-1Ø%(ð	ð ðð ð		
ð 	
ñô €Hð  ˜Ô! )Ô,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Õ,Ô,Ð,Ñ,Ô,Ð,Ñ,Ð,Õ,Õ,Ô,Ð,Ñ,Ô,Ñ,Ô,Ð,Ð,Ð,Ð,Ð,Ø˜HÔ% iÔ0°Ô3°FÔ;€LØÐ-Ð Ð-Ð-Ð-Ð-Õ-Ô-Ð-Ð-Ð-Ð-Ð Ð-Ñ-Ô-Õ-Ô-ÐÑ-Ô-Ð-Õ-Ô-Ñ-Ô-Ð-Ð-Õ-Ô- Ñ-Ô-Ð-Õ-Ô- Ñ-Ô-Ð-Ð-Ð-Ð-Ñ-Ð-Ð-Ð-Ð-Ð-Ñ-Ð-Õ-Õ-Ô-Ð-Ñ-Ô-Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-r   c                 ó  — 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          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 ¦   «         ¦  «        }|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	S )uF   Kiá»ƒm thá»­ phÃ¢n ca so le vÃ  bá»™ Ä‘á»‡m chá»‘ng spam / rate limit.é   r&   r(   r)   Úshiftsr+   r0   r1   Nc              3  ó2   K  — | ]}|d          dk    ¯|V — ŒdS )Ú
agent_codeÚphucNr4   r5   s     r   ú	<genexpr>z<test_agent_scheduler_shifts_and_anti_spam.<locals>.<genexpr>
  s0   è è € ÐEÐE˜A¨1¨\¬?¸fÒ+DÐ+D�aÐ+DÐ+DÐ+DÐ+DÐEÐEr   Úpreferred_providerÚlmstudiors   rS   rT   r/   c              3  ó2   K  — | ]}|d          dk    ¯|V — ŒdS )ró   ÚquynhNr4   r5   s     r   rõ   z<test_agent_scheduler_shifts_and_anti_spam.<locals>.<genexpr>  s0   è è € ÐGÐG˜Q¨A¨l¬O¸wÒ,FÐ,F�qÐ,FÐ,FÐ,FÐ,FÐGÐGr   Úpreferred_modelzdeepseek/deepseek-v4-proÚsystem_healthÚOPTIMAL_PROTECTEDÚopenrouter_free_rpm_capé   )rÏ   Úget_daily_scheduler)   rV   rW   rX   rY   rZ   r[   r\   r]   ÚnextÚget_anti_spam_shield_status)Ú	schedulerrñ   r`   ra   rb   rc   rd   Ú
phuc_shiftre   rk   rm   Úquynh_shiftÚshields                r   Ú)test_agent_scheduler_shifts_and_anti_spamr    s;  € å%Ñ'Ô'€IØ×)Ò)Ñ+Ô+€FÝˆv‰;Œ;Ð˜"Ðˆ;˜"ÒÐÐÐÕÔÐÐÐÐˆ;˜"ÐÑÔÐÕÔÑÔÐÐÕÔ�3ÑÔÐÕÔ�3ÑÔÐÐÐÕÔÑÔÐÐÕÔˆvÑÔÐÕÔˆvÑÔÐÐÕÔˆ;ÑÔÕÔ˜"ÑÔÐÐÑÐÐÐÐÐÑÐÕÕÔÐÑÔÑÔÐÐÐÐÐÐÐõ ÐEÐE ÐEÑEÔEÑEÔE€JØÐ*Ô+Ð9¨zÐ9Ð+¨zÒ9Ð9Ð9Ð9Õ9Ô9Ð9Ð9Ð9Ð9Ð+¨zÐ9Ñ9Ô9Õ9Ô9Ð+Ñ9Ô9Õ9Ô9¨zÑ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åÐGÐG &ÐGÑGÔGÑGÔG€KØÐ(Ô)ÐGÐ-GÐGÐ)Ð-GÒGÐGÐGÐGÕGÔGÐGÐGÐGÐGÐ)Ð-GÐGÑGÔGÕGÔGÐ)ÑGÔGÕGÔGÐ-GÑGÔGÐGÐGÑGÐGÐGÐGÐGÐGÑGÐGÕGÕGÔGÐGÑGÔGÑGÔGÐGÐGÐGÐGÐGÐGÐGð ×2Ò2Ñ4Ô4€FØ�/Ô"Ð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Ð9Ð9Ñ9Ð9Õ9Õ9Ô9Ð9Ñ9Ô9Ñ9Ô9Ð9Ð9Ð9Ð9Ð9Ð9Ð9ØÐ+Ô,Ð1°Ð1Ð,°Ò1Ð1Ð1Ð1Õ1Ô1Ð1Ð1Ð1Ð1Ð,°Ð1Ñ1Ô1Õ1Ô1Ð,Ñ1Ô1Õ1Ô1°Ñ1Ô1Ð1Ð1Ñ1Ð1Ð1Ð1Ð1Ð1Ñ1Ð1Õ1Õ1Ô1Ð1Ñ1Ô1Ñ1Ô1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ð1r   c                ó  — |                       d|¬¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        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         }	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|¬¦  «        }|j        }d}||k    }|sªt          j        d|fd||f¦  «        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
S )u:   Kiá»ƒm thá»­ REST API lá»‹ch lÃ m viá»‡c vÃ  chá»‘ng spam.z/v1/agents/schedule/dailyr³   rµ   r&   r¶   r·   r¸   r¹   rH   NÚtotal_shiftsrð   rs   rS   rT   r/   z$/v1/agents/schedule/anti-spam-statusrÈ   Úactive_guardsr:   r<   Údata2r>   r?   r@   )rÁ   rÂ   rV   rW   rX   rY   rZ   r[   r\   r]   r¼   )r   r    r·   rj   rb   rk   rg   ri   Údata1re   r`   rm   rc   rÈ   r
  rf   s                   r   Ú!test_agent_schedule_api_endpointsr    s�  € ð
 ×ÒÐ7ÐASÐÑTÔT€DØÔÐ"˜sÐ"Ð˜sÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð˜sÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ4Ñ"Ô"Ð"Õ"Ô"ˆ4Ñ"Ô"Ð"Ð"Õ"Ô"ÐÑ"Ô"Õ"Ô"˜sÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø�IŠI‰KŒK€EØ�Ô Ð& BÐ&Ð  BÒ&Ð&Ð&Ð&Õ&Ô&Ð&Ð&Ð&Ð&Ð  BÐ&Ñ&Ô&Õ&Ô&Ð Ñ&Ô&Õ&Ô& BÑ&Ô&Ð&Ð&Ñ&Ð&Ð&Ð&Ð&Ð&Ñ&Ð&Õ&Õ&Ô&Ð&Ñ&Ô&Ñ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ð ×ÒØ.Ð8Jð ñ ô €Dð ÔÐ"˜sÐ"Ð˜sÒ"Ð"Ð"Ð"Õ"Ô"Ð"Ð"Ð"Ð"Ð˜sÐ"Ñ"Ô"Ð"Õ"Ô"Ñ"Ô"Ð"Ð"Õ"Ô"ˆ4Ñ"Ô"Ð"Õ"Ô"ˆ4Ñ"Ô"Ð"Ð"Õ"Ô"ÐÑ"Ô"Õ"Ô"˜sÑ"Ô"Ð"Ð"Ñ"Ð"Ð"Ð"Ð"Ð"Ñ"Ð"Õ"Õ"Ô"Ð"Ñ"Ô"Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ø�IŠI‰KŒK€EØÐ#ˆ?˜eÐ#Ð#Ð#Ð#Õ#Ô#Ð#Ð#Ð#Ð#ˆ?˜eÐ#Ñ#Ô#Õ#Ô#ˆ?Ñ#Ô#Ð#Õ#Ô#Ñ#Ô#Ð#Ð#Õ#Ô#˜eÑ#Ô#Ð#Õ#Ô#˜eÑ#Ô#Ð#Ð#Ð#Ð#Ñ#Ð#Ð#Ð#Ð#Ð#Ñ#Ð#Õ#Õ#Ô#Ð#Ñ#Ô#Ñ#Ô#Ð#Ð#Ð#Ð#Ð#Ð#Ð#r   )r   r   )r   r   )r   r   r    r   )r   r   r#   r   )$Ú__doc__Ú
__future__r   ÚbuiltinsrX   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterV   ÚpytestÚfastapi.testclientr   Úapp.mainr   Ú)app.modules.auth.application.auth_servicer   Ú7app.modules.agents.application.deepseek_harness_servicer   Úfixturer   r    r#   rn   r’   r¤   r¬   r±   rË   rÍ   Úapp.mcp.dscons_mcp_serverrÎ   Ú6app.modules.agents.application.agent_scheduler_servicerÏ   rî   r  r  r4   r   r   ú<module>r     sÂ  ðØ WÐ Wà "Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø )Ð )Ð )Ð )Ð )Ð )à Ð Ð Ð Ð Ð Ø AÐ AÐ AÐ AÐ AÐ AØ ZÐ ZÐ ZÐ ZÐ ZÐ Zð „ðð ð ñ „ðð „ð0ð 0ð 0ñ „ð0ð „ð0ð 0ð 0ñ „ð0ð"+ð +ð +ð&!>ð !>ð !>ðH €€€ð:ð :ð :ð.-ð -ð -ð4! ð ! ð ! ð ! ðH"ð "ð "ð "ð$ 6Ð 5Ð 5Ð 5Ð 5Ð 5Ø XÐ XÐ XÐ XÐ XÐ Xð'.ð '.ð '.ðT2ð 2ð 2ð&$ð $ð $ð $ð $ð $r   