+
    C.j                     t   R t ^ RIt^ RIt^ RIHtHt ^ RIHtHtHtH	t	H
t
 ^ RIHtHt ^ RIHt ^ RIHtHt ^ RIHt ^ RIHtHtHtHtHt ^ R	IHt ^ R
IHt ^ RIH t  ^ RI!H"t" ]! RR.R7      t#]#PI                  R4      R R l4       t%]#PM                  R4      ]! ]4      3R R ll4       t']#PM                  R4      ]! ]4      3R R ll4       t(]#PI                  R4      ]! ]4      3R R ll4       t)]#PI                  R4      ]! ]4      ^d3R R ll4       t*]#PI                  R4      ]! ]4      3R  R! ll4       t+R# )"zFOperations API: circuit breaker, go/no-go, reconciliation, tax export.N)datetimetimezone)	APIRouterDependsHTTPExceptionRequestResponse)descselect)AsyncSession)RequireAdmin2FARequireAnalyst)get_db)AuditLog	BotConfigOrderOrderStatusSymbol)record_audit_event)circuit_breaker)go_no_go_evaluator)reconciliation_servicez/operations
Operations)prefixtagsz/circuit-breakerc                $    V ^8  d   QhR\         /# )   user)r   )formats   "app\api\routes\operations.py__annotate__r       s     / /> /    c                 X   "   \         P                  ! 4       G R j  xL
 w  rRVRV/#  L5i)Nactivedetails)r   	is_active)r   r#   datas   &  r   get_circuit_breaker_statusr'      s,     (2244LFfi.. 5s   *(*z/circuit-breaker/resetc                <    V ^8  d   QhR\         R\        R\        /# r   requestr   dbr   r   r   )r   s   "r   r    r       s+     I II
I 	Ir!   c           	         "   \         P                  ! \        VP                  4      4      G R j  xL
  \	        VVP                  RRRR/V R7      G R j  xL
  RRRR/#  L/ L5i)NCIRCUIT_BREAKER_RESETCircuitBreakertrading_enabledTuser_idactionentity_type	new_valuer*   messagezCircuit breaker reset)r   resetstridr   )r*   r   r+   s   &&&r   reset_circuit_breakerr:      sm      

DGG
---

&$$d+   .0A4HH .s!   -A#A$A#A!A#!A#z
/reconcilec                <    V ^8  d   QhR\         R\        R\        /# r)   r,   )r   s   "r   r    r    /   s&      
 	r!   c           	         "   \         P                  ! 4       G R j  xL
 p\        VVP                  RRVV R7      G R j  xL
  VP	                  R4      '       g   \        RVR7      hV#  LM L,5i)NMANUAL_RECONCILIATION_RUNReconciliationr1   passedi  )status_codedetail)r   reconcile_allr   r9   getr   )r*   r   r+   reports   &&& r   run_reconciliationrE   .   sm      *7799F

*$   ::hF;;M :s%   A-A)"A-A+A-A-+A-z	/go-no-goc                <    V ^8  d   QhR\         R\        R\        /# r)   r,   )r   s   "r   r    r    C   s&     # ##
# 	#r!   c           	        "   VP                  \        \        4      P                  ^4      4      G Rj  xL
 pVP	                  4       pV'       d   VP
                  '       g   RRRR/# VP                  \        \        4      P                  \        \        P                  4      4      P                  ^4      4      G Rj  xL
 pVP                  4       P                  4       p\        P                  ! V Uu. uF  pR^ /NK	  	  upR.VP
                  R7      pRVP                  R	VP                  R
VP                   RVP"                  /p	\%        VVP&                  RRV	V R7      G Rj  xL
  V	#  EL; Lu upi  L5i)   Nr?   Fr6   z:Paper trading not started. Set paper_start_date in config.pnli'  )tradesequity_curvepaper_startchecksmetricsfailuresGO_NO_GO_EVALUATEDGoNoGor1   )executer
   r   limitscalar_one_or_nonepaper_start_dater   order_byr	   
created_atscalarsallr   evaluater?   rM   rN   rO   r   r9   )
r*   r   r+   config
bot_configorders_resultordersoresultresponses
   &&&       r   evaluate_go_no_gorb   B   sP     ::fY/55a899F**,JZ888eS
 	

 **VE]%;%;DAQAQ<R%S%Y%YZ]%^__M""$((*F(($*+Fq
F+W//F 	&--&--6>>FOO	H 
#   O= : ` ,sM   1E:E.E:E:"AE:>E1?6E:5E3A%E:'E8(E:1E:3E:z/auditc                <    V ^8  d   QhR\         R\        R\        /# )r   r   r+   rS   )r   r   int)r   s   "r   r    r    j   s&      
 r!   c                   "   \        \        V^4      R4      pVP                  \        \        4      P                  \        \        P                  4      4      P                  V4      4      G Rj  xL
 pVP                  4       P                  4       pV Uu. uF  pR\        VP                  4      RVP                  '       d   \        VP                  4      MRRVP                  RVP                  RVP                   '       d   \        VP                   4      MRRVP"                  R	VP$                  R
VP&                  RVP(                  RVP                  P+                  4       /
NK  	  up#  Lu upi 5i)rH   i  Nr9   r2   r3   r4   	entity_id	old_valuer5   
ip_address
user_agentrW   )minmaxrR   r
   r   rV   r	   rW   rS   rX   rY   r8   r9   r2   r3   r4   rf   rg   r5   rh   ri   	isoformat)r   r+   rS   
safe_limitr`   logslogs   &&&    r   list_audit_logsrp   i   s#     S]C(J::x!!$x':':";<BB:N F >>!D  C #cff+3;;;s3;;'Dcjj3??s}}}S]]+$#..#..#..224	
  	s,   A-E4/E-0&E4A-E/A&E/*E4/E4z/reports/tax-exportc                <    V ^8  d   QhR\         R\        R\        /# r)   r,   )r   s   "r   r    r       s&     - --
- 	-r!   c                J  "   VP                  \        \        \        P                  4      P                  \        \        P                  \        P                  8H  4      P                  \        P                  \        P                  8H  4      P                  \        P                  4      4      G Rj  xL
 pVP                  4       p\        P                   ! 4       p\"        P$                  ! V4      pVP'                  . RO4       V F  w  rxTP'                  VP                  '       d   VP                  P)                  4       MRTVP*                  P,                  \/        VP0                  4      \/        VP2                  ;'       g    R4      \/        VP4                  4      VP6                  P,                  \/        VP                  4      .4       K  	  \9        VVP                  RRR\;        V4      /V R7      G Rj  xL
  \=        VP?                  4       RRR	/R
7      #  ELm L%5i)zAExport trades for tax declaration (Colombia DIAN compatible CSV).N TAX_EXPORT_GENERATEDr   rowsr1   ztext/csvzContent-Dispositionz*attachment; filename=trades_tax_export.csv)content
media_typeheaders)	fecha_utcsimbololadocantidadprecio_ejecucioncomisionmodoorder_id) rR   r
   r   r   symboljoin	symbol_idr9   wherestatusr   FILLEDrV   	filled_atrY   ioStringIOcsvwriterwriterowrl   sidevaluer8   quantityfilled_price
commissiontrading_moder   lenr   getvalue)	r*   r   r+   r`   ru   outputr   ordersyms	   &&&      r   tax_export_csvr      s     ::ufmm$	feoo2	3	u||{111	2	%//	"	 F ::<D[[]FZZF
OO   
+0???EOO%%'JJ""((b)  !$$M	
 		  
%3t9%   !&(TU G4s,   B/H#1H2CH#A6H#;H!<#H#!H#),__doc__r   r   r   r   fastapir   r   r   r   r   
sqlalchemyr	   r
   sqlalchemy.ext.asyncior   app.api.depsr   r   app.core.databaser   
app.modelsr   r   r   r   r   app.services.audit_servicer   app.services.circuit_breakerr   app.services.go_no_gor   #app.services.reconciliation_servicer   routerrC   r'   postr:   rE   rb   rp   r    r!   r   <module>r      s'   L 
 	 ' H H # / 8 $ F F 9 8 4 F	-|n	= /  /
 %& vI 'I" \ v & K v# #L H v 6 !" v- #-r!   