
    9&j                    <   d dl mZ d dlmZmZ d dlmZ d dlmZ  ed           G d d                      Z	 ed           G d	 d
                      Z
 ed           G d d                      Zd&dZd'dZd(dZd)dZd*dZd+dZd,dZdddd-d%ZdS ).    )annotations)	dataclassfield)Decimal)AnyT)frozenc                  <    e Zd ZU ded<   ded<   ded<   dZded<   dS )LocalOrderRecordstrcoinclient_order_id
order_roleNzDecimal | Nonesize)__name__
__module____qualname____annotations__r        _/home/agent/projects/CryptoTradingBot/Crypto_Agent/src/reconciliation/hyperliquid_reconciler.pyr
   r
      sA         IIIOOODr   r
   c                  .    e Zd ZU ded<   ded<   ded<   dS )ReconcilerSnapshotzdict[str, dict[str, Any]]	positionslist[dict[str, Any]]open_orderszlist[LocalOrderRecord]local_ordersN)r   r   r   r   r   r   r   r   r      s6         ((((%%%%((((((r   r   c                      e Zd ZU ded<   ded<   ded<   dZded<   d	Zd
ed<    ee          Zded<    ee	          Z
ded<   dZded<   dS )ReconciliationResultboolnew_entries_allowedintstops_missing_countztuple[str, ...]alertsFblock_new_entriesOKr   severity)default_factoryztuple[dict[str, Any], ...]recommended_actionszdict[str, list[dict[str, Any]]]stops_by_positionr   exposure_mismatchN)r   r   r   r   r$   r&   r   tupler(   dictr)   r*   r   r   r   r   r      s         #####H6;eE6R6R6RRRRR9>t9T9T9TTTTT)+++++++r   r   positiondict[str, Any]returnr   c                
   dD ]9}|| v r3t          t          |                     |          pd                    c S :|                     d          }t          |t                    rt          |          S t          d          S )N)szi	contractsr   0r-   )r   r   get
isinstancer,   _position_size)r-   keynesteds      r   r6   r6   #   s    + : :(??3x||C007C8899999 \\*%%F&$ &f%%%3<<r   orderc           
         dD ]F}|| v r@t          t          t          |                     |          pd                              c S Gt          d          S )N)szr   origSzr3   )absr   r   r4   )r9   r7   s     r   _order_sizer>   -   s^    ' < <%<<ws599S>>#8S99::;;;;; 3<<r   r   c                    t          |                     dd                                                    }|dv r|S t          |           dk    rdndS )Nside >   longshortr   rB   rC   )r   r4   lowerr6   )r-   explicits     r   _position_siderF   4   sV    8<<++,,2244H$$$#H--1166w>r   c                H   t          |                     dd                                                    }|dv rdS |dv rdS |                     d          du s|                     d	          du rdS |                     d          d
u s|                     d	          d
u rdS |S )Nr@   rA   >   bbidbuyrJ   >   asasksellrN   isBuyTis_buyF)r   r4   rD   )r9   r@   s     r   _order_siderQ   ;   s    uyy$$%%++--D"""u(((vyyT!!UYYx%8%8D%@%@uyyU""eii&9&9U&B&BvKr   r   c                R   t          |                     d          p|                     d                    }t          |                     d          p+|                     d          p|                     d          pd                                          }|o| pd|v pd|v pd	|v S )
N
reduceOnlyreduce_only	orderType
order_typetyperA   triggerstoptake)r   r4   r   rD   )r9   rT   rV   s      r   _is_reduce_only_triggerr[   H   s    uyy..J%))M2J2JKKKUYY{++auyy/F/Fa%))TZJ[J[a_abbhhjjJ
 v
Nui:.EuS]I]uagkuauvr   r   r   r   c                       fd|D             S )Nc                    g | ]^}t          |                    d d                                                                                    k    Mt          |          \|_S )r   rA   )r   r4   upperr[   ).0r9   r   s     r   
<listcomp>z)_stop_orders_for_coin.<locals>.<listcomp>S   sv      E  E  Eec%))FB2G2G.H.H.N.N.P.PTXT^T^T`T`.`.`e|  ~C  fD  fD.`E.`.`.`r   r   r   r   s   ` r   _stop_orders_for_coinrb   R   s5     E  E  E  E{  E  E  E  Er   c                <    t          t          | |                    S )N)r   rb   ra   s     r   _has_reduce_only_stoprd   V   s    %dK88999r   N)max_position_notional_usdmidssnapshotre   Decimal | int | float | Nonerf   'dict[str, Decimal | int | float] | Nonec                  g }g }g }i }d}d | j         D             }t                      }	| j                                        D ]\  }
}|
                                }
t          |          }|dk    r0|	                    |
           t          |
| j                  }|||
<   |s|dz  }|	                    d|
            |
|vr-|	                    d|
            |	                    |
           t          |          }t          |          }|dk    rdnd}|D ]o}t          |          }|dk    r||k    r|	                    d	|
            t          |          r+t          |          |k    r|	                    d
|
            p|x|rv|
|v rr|t          t          ||
                             z  }|t          t          |                    k    r-|	                    d|
            |	                    |
           t!          ||	z
            D ]}
|	                    d|
            | j        D ]}t#          |                    d          p|                    d                    }|st          |                    d          p|                    d          pd                                          dv rt#          |                    d          p|                    d                    sK|	                    dt          |                    dd                                                                t)          d |D                       }|r,|	                    ddd                    |          d           |r|	                    ddd           t-          | |t/          |          ||rdn|rd nd!t/          |          |t/          t!          t          |                              "          S )#Nr   c                V    h | ]&}|j         d k    |j                                        'S )entry)r   r   r^   )r_   records     r   	<setcomp>z.reconcile_hyperliquid_state.<locals>.<setcomp>e   s5    qqqTZTeipTpTp**,,TpTpTpr      zposition_without_stop:z(exchange_position_without_local_journal:rB   rN   rJ   zstop_wrong_size:zstop_wrong_direction:zposition_exposure_exceeded:z1local_journal_position_without_exchange_position:rS   rT   rU   rV   rA   >   rl   limitmarketdeadmanProtecteddeadman_protectedzentry_order_without_deadman:r   UNKNOWNc              3  @   K   | ]}|                     d           V  dS ))position_without_stop
stop_wrongposition_exposure_exceeded'exchange_position_without_local_journalN)
startswith)r_   alerts     r   	<genexpr>z.reconcile_hyperliquid_state.<locals>.<genexpr>   sW        k  k  [`5##  %U  V  V  k  k  k  k  k  kr   prepare_telegram_alertCRITICAL;)actionr&   messager$   stops_missing)r   reasonWARNINGr%   )r    r"   r#   r$   r&   r(   r)   r*   )r   setr   itemsr^   r6   addrb   r   appendr=   rF   r>   rQ   r   r   sortedr   r4   rD   anyjoinr   r+   )rg   re   rf   r#   recommendedexposurer)   missinglocal_entry_coinsexchange_position_coinsr   r-   r   stopsposition_abspos_sideexpected_stop_siderY   	stop_sizenotionalr9   rT   criticals                          r   reconcile_hyperliquid_stater   Z   s    F(*KH9;Gqq8;Pqqq(+",2244 & &hzz||h''199##D)))%dH,@AA"'$ 	;qLGMM9499:::(((MMKTKKLLLOOD!!!4yy!(++'/6'9'9VVu 	> 	>D#D))IA~~)|";";7778884   >[%6%6:L%L%L<d<<===$0T0ddll#gc$t*oo&>&>>H'#&?"@"@AAAABDBBCCC%%%(+BBCC R RP$PPQQQQ% j j599\22Neii6N6NOO 	js599[#9#9#ZUYY|=T=T#ZXZ[[aacc  hD   D   D		"455WCV9W9WXX jhS6S\A]A]=^=^=d=d=f=fhhiii  k  k  dj  k  k  k  k  kH v&>Jcfckcklrcscsttuuu W&9_UUVVV (L#V}}"'L6.Kiit!+..+s8}} 5 566	 	 	 	r   )r-   r.   r/   r   )r9   r.   r/   r   )r-   r.   r/   r   )r9   r.   r/   r   )r9   r.   r/   r   )r   r   r   r   r/   r   )r   r   r   r   r/   r   )rg   r   re   rh   rf   ri   r/   r   )
__future__r   dataclassesr   r   decimalr   typingr   r
   r   r   r6   r>   rF   rQ   r[   rb   rd   r   r   r   r   <module>r      s   " " " " " " ( ( ( ( ( ( ( (             $                $) ) ) ) ) ) ) ) $, , , , , , , ,      ? ? ? ?
 
 
 
w w w wE E E E: : : : ?C48	B B B B B B B Br   