
    Cj[                        d dl mZ d dlZd dlmc mZ d dlmZm	Z	m
Z
 d dlmZ d dlZd dlmZ d dlmZmZmZmZ d dlmZ d dlmZ dddd	ddZddZddZddZddZdS )    )annotationsN)datetime	timedeltatimezone)Decimal)Path)build_finance_approval_statusevaluate_finance_approval+evaluate_finance_approval_for_strategy_coinload_finance_approvals)OrderIntent)%_evaluate_finance_approval_for_intent)
created_atstrategy_idcoinpathr   	intent_idstrdecisionr   
str | Noner   r   returnNonec                  | j                             dd           d| ||d|p/t          j        t          j                                                  |||r|rdnd ddd
}|                     d	d
          5 }|                    t          j
        |d          dz              d d d            d S # 1 swxY w Y   d S )NT)parentsexist_okz	approval-testCryptoTraderFz^FinanceManager approval audit only; CryptoTrader must re-check all gates before any execution.)
approval_idr   r   noter   r   r   source_engineexecution_allowedboundaryazutf-8)encoding)	sort_keys
)parentmkdirr   nowr   utc	isoformatopenwritejsondumps)r   r   r   r   r   r   rowhandles           Y/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_finance_manager_approval.py_write_approvalr3      s   KdT222-8-- JHL$>$>$H$H$J$J"+6I4IT"t C 
3	)	) =VTZt444t;<<<= = = = = = = = = = = = = = = = = =s   :-B44B8;B8r   c                     t          di ddddddddd	d
dddddt          d          dd dd dt          d          dt          d          dddddt          d          dt          d          S ) Nr   #candidate_v76_strict_live_candidatesymbolzBTC/USDC:USDCr   BTCsidebuyreduce_onlyF
order_typemarkettifIocsizez0.001pricetrigger_price	stop_loss59000take_profit61000client_order_id0xabcreasonr   risk_usdz0.50estimated_notional_usd50 )r   r   rL       r2   _intentrN   $   s       99 U U	
 E 8 E W d d '""" G$$$   v    't}}}! rM   tmp_pathc                v   | dz  }t          |ddd           t          |ddddd	
           t          |          }t          d|          }t          dd	|          }t	          |          }|j        }d}||u }|st          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}}|j        }d}||u }|st          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}}|j        }d}||k    }|st          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         }|j        }d}||k    }|st          j        d|fd||f          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}x}}|d         }|j        }d	}||k    }|st          j        d|fd||f          t          j        |          t          j        |          t          j        |          dz  }dd|iz  }t          t          j        |                    d x}x}x}}|j        }d}||k    }|st          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}}|j        }d}||u }|st          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 }|j        }||v }|st          j        d!|fd"||f          t          j        |          dt          j	                    v st          j
        |          rt          j        |          nd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}||u }|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trade_approvals.jsonlzintent-1
paper_onlyz2026-06-30T10:00:00+00:00r   r   r   approvez2026-06-30T10:05:00+00:00r5   r7   )r   r   r   r   r   	approvalsTis)z/%(py2)s
{%(py2)s = %(py0)s.allowed
} is %(py5)sr   )py0py2py5zassert %(py7)spy7strategy_coin==)z1%(py2)s
{%(py2)s = %(py0)s.intent_id
} == %(py5)s)z3%(py3)s
{%(py3)s = %(py1)s.strategy_id
} == %(py6)s)py1py3py6zassert %(py8)spy8)z,%(py3)s
{%(py3)s = %(py1)s.coin
} == %(py6)s$approved_pending_crypto_trader_gates)z.%(py2)s
{%(py2)s = %(py0)s.status
} == %(py5)sF)z=%(py2)s
{%(py2)s = %(py0)s.mainnet_signed_action
} is %(py5)s$crypto_trader_must_recheck_all_gates)in)z/%(py1)s in %(py5)s
{%(py5)s = %(py3)s.reasons
})ra   rb   r[   latest_decisions   z%(py1)s == %(py4)sra   py4assert %(py6)src   execution_side_effectsz%(py1)s is %(py4)s)r3   r   r
   r   r	   allowed
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanationr   r   r   statusmainnet_signed_actionreasons)rO   logrV   r   r]   ry   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2@py_assert5@py_format7@py_format9@py_format5s                    r2   Etest_finance_approval_reader_loads_latest_decision_and_never_executesr   9   s   
,
,CC:QlmmmmC:	Ni  x]  di  j  j  j  j&s++I(yIIIH?@egl  yB  C  C  CM*3//F#t#t##########t############8#####8##########t########################### (D( D(((((((((( D((((((((((((=(((((=(((((( ((((D((((((((((((((((((((((((((("0j0"j0000000000"j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0j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R=M=$M(MM$(MMMMMMMMMMM$(MMMMMM=MMMM$MMMM(MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMR=&=&&&&&&&&&&&&&&&&&=&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&?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D8DDDDD8DDDDDD?DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD)2U2)U2222222222)U2222222222228222228222222)2222U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1EX5EE15EEEEEEEEEEE15EEEEEE1EEEEEEEEEEEXEEEEEXEEEEEE5E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$%i05A50A55555555550A5555505555A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*+4u4+u4444444444+u44444+4444u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4rM   c           
        | dz  }t          |dd           t          |dd           t          |ddt          j        t          j                  t          d	
          z
                                             t          |          }d }t          ||          }|j	        }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        |          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }	t!          t          j        |	                    d x}x}x}x}}d}t          ||          }|j	        }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        |          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }	t!          t          j        |	                    d x}x}x}x}}d}t          ||          }|j	        }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        |          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }	t!          t          j        |	                    d x}x}x}x}}d}t          ||          }|j	        }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        |          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          dz  }dd|iz  }	t!          t          j        |	                    d x}x}x}x}}d}d}t          |||          }|j	        }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        |          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          t          j        |          t          j        |
          dz  }	dd|	iz  }t!          t          j        |                    d x}x}x}x}x}}
d S ) NrQ   zintent-paperrR   )r   r   zintent-rejectrejectz
intent-oldrT      )daysrS   rU   )"finance_approval_intent_id_missingr^   )za%(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py0)s(%(py2)s, approvals=%(py3)s)
}.reasons
} == %(py10)sr
   rV   )rY   rZ   rb   r[   r\   py10zassert %(py12)spy12missing)finance_approval_missing)finance_approval_paper_only)finance_approval_rejected<   )rV   max_age_seconds)finance_approval_expired)zz%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py0)s(%(py2)s, approvals=%(py3)s, max_age_seconds=%(py5)s)
}.reasons
} == %(py12)s)rY   rZ   rb   r[   r\   py9r   zassert %(py14)spy14)r3   r   r)   r   r*   r   r+   r   r
   r{   rq   rr   rs   rt   ru   rv   rw   rx   )rO   r|   rV   r}   r~   @py_assert6@py_assert9@py_assert8@py_format11@py_format13@py_assert11@py_assert10@py_format15s                r2   Gtest_finance_approval_gate_blocks_reject_paper_only_missing_and_expiredr   O   s		   
,
,CC>LIIIIC?XFFFFC<)QYQ]^f^jQkQknw}~nnnQ  QK  QK  QM  QM  N  N  N  N&s++I%)r$TY???r?GrKrrGKrrrrrrrrrrrGKrrrrrrrrrrrrr$rrrrr$rrrrrrTrrrrrrrrrrrYrrrrrYrrrrrr?rrrrGrrrrKr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rrrrrr%.m$Y)DDDmDLmPmmLPmmmmmmmmmmmLPmmmmmmmmmmmmm$mmmmm$mmmmmmYmmmmmmmmmmm)mmmmm)mmmmmmDmmmmLmmmmPmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm%3u$^yIIIuIQuUuuQUuuuuuuuuuuuQUuuuuuuuuuuuuu$uuuuu$uuuuuu^uuuuuuuuuuuyuuuuuyuuuuuuIuuuuQuuuuUuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu%4t$_	JJJtJRtVttRVtttttttttttRVt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JttttRttttVt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%1  EXZ  E$\YXZ[[[  E[c  E  hE  Ec  hE  E  E  E  E  E  E  E  E  E  Ec  h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  E  E  EY  E  E  E  E  EY  E  E  E  E  E  EXZ  E  E  E  E[  E  E  E  Ec  E  E  E  E  h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  E  E  E  ErM   c                	   |dz  }|                      dt          |                     |                     dd           |                     dd           t          t	                      d          }t          t	                      d	          }|d
         }d}||u }|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}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j	        |	                    d x}x}}|d
         }d}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j	        |	                    d x}x}}|d         }d}||u }|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           t          t	                      d          }
|
d
         }d}||u }|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}||u }|slt          j        d|fd||f          t          j        |          t          j        |          dz  }dd|iz  }	t          t          j	        |	                    d x}x}}d S )NrQ   CTB_FINANCE_APPROVAL_LOGCTB_FINANCE_TRADE_INTENT_IDF)raisingCTB_FINANCE_INTENT_MAP_PATHlive)modeshadowrp   rW   ro   rk   rm   rc   r{   )&finance_approval_strategy_coin_missingr^   rj   rz   Tzintent-from-dashboardrT   r5   r7   )r   r   r   r   r   )setenvr   delenvr   rN   rq   rr   rv   rw   rx   r3   )monkeypatchrO   r|   	live_gateshadow_gater   r   r   r   r   live_gate_after_metadatas              r2   Ktest_tiny_live_runtime_requires_finance_approval_id_for_live_but_not_shadowr   ]   s+   
,
,C13s88<<<4eDDD4eDDD5giifMMMI7		QQQKY(5(5((((((((((5(((((((((5(((((((((((((((((((((((((((YN#NN#NNNNNNNNNNN#NNNNNNNNNN#NNNNNNNNNNNNNNNNNNNNNNNNNNNN,-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y!)T)!T))))))))))!T)))))!))))T)))))))))))))))))))))))))))./858/58888888888/588888/88885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C#:Y  ]B  IN  O  O  O  ODWYYU[\\\#I.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#K0K4KK04KKKKKKKKKKK04KKKKKK0KKKK4K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#$;<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EEEEEEEEEEEEEEEEEErM   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   )rO   r   r   r   )
__future__r   builtinsrs   _pytest.assertion.rewrite	assertionrewriterq   r   r   r   decimalr   r.   pathlibr   %src.approval.finance_manager_approvalr	   r
   r   r   src.execution.order_intentr   &src.tools.tiny_autonomous_live_runtimer   r3   rN   r   r   r   rL   rM   r2   <module>r      sr   " " " " " "               2 2 2 2 2 2 2 2 2 2                         3 2 2 2 2 2 X X X X X X \`{  UY = = = = = =$   *5 5 5 5,E E E EF F F F F FrM   