
    g(j<K                         d dl mZ d dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlZ ej                   e      Z G d d	      Zy)
    )Session)DictAnyTuple)datetime)Ad)TinyProduct)ProductPurchaseCostProductTaxProfileMonthlyTaxConfigNc                   v   e Zd ZdZdefdZdedeeef   fdZ	de
ded	edeeef   fd
Zde
ded	ededeeef   f
dZdedededeeeef   fdZdededededeeef   f
dZd	edeeef   fdZde
deeeef   ef   fdZdededeeef   fdZd"dededededededededeeef   fdZd edeeef   fd!Zy)#PricingDataResolveruq   
    Resolver que orquestra a descoberta de dados financeiros e fiscais 
    para o motor de precificação.
    dbc                     || _         y N)r   )selfr   s     K/var/www/hypershopcomercio.com.br/hyper-ai/app/services/pricing/resolver.py__init__zPricingDataResolver.__init__   s	        ad_idreturnc                    | j                   j                  t              j                  t        j                  |k(        j                         }|s| j                  d      S |j                  }|rM| j                   j                  t              j                  t        j                  |k(        j                         nd }| j                   j                  t              j                  t        j                  |k(  t        j                  dk(        j                  t        j                  j                               j                         }| j                   j                  t              j                  t        j                  |k(  t        j                  dk(        j                         }| j                   j                  t               j                  t         j                  dk(        j                  t         j"                  j                               j                         }i }i }	g }
g }g }g }| j%                  |||      \  }}||	d<   ||d<   |d   r"|
j'                  d       |j'                  d       | j)                  ||||      \  }}||	d<   ||d<   |d   r|
j'                  d       | j+                  |||      \  }}}||	d<   ||	d	<   ||d	<   |d   r|
j'                  d	       | j-                  ||||      \  }}||	d
<   ||d
<   |d   r"|
j'                  d
       |j'                  d       | j/                  |      \  }}||	d<   ||d<   |d   r,d}| j1                  ddddddd      }|
j'                  d       n/||z   |z   |z   }| j1                  |dd|d   s|d   sdndddd      }||	d<   ||d<   | j3                  |      \  }}||	d<   ||d<   | j5                  ||      \  }}||	d<   ||d<   |d   r"|
j'                  d       |j'                  d       d}|j6                  r!|j6                  dkD  r|j6                  |dz  z  }||	d<   | j1                  |dddd |j6                   d!| d"dd      |d<   |j6                  rM|j6                  dkD  r>|d   s9|j6                  |d#   z
  |z
  |z
  } | |	d$<   | j1                  | dddd%dd      |d$<   n d|	d$<   | j1                  ddddd&dd      |d$<   t9        |d'd      }!|rt9        |d(d)      d*k(  r|j:                  nd}"|!|"|d+}#i }$d,}%d-}&t=        d. |j?                         D              }'|'rd/}&|!dkD  r|dkD  rtA        ||!z
        }(|(|!z  d0z  })|!||(|)d1|$d2<   |'r|(d3kD  s|)d4kD  rud5}%d6}&|j'                  d7       d8|(d9d:}*|j'                  |*       |jC                         D ]5  \  }+},|,d;   d<k(  sd|,d=<   d|,d><   d?|,vrg |,d?<   |,d?   j'                  |*       7 |jC                         D ]Z  \  }+},|,d@   |vr|,d@   dk7  r|j'                  |,d@          |,jE                  d?      s;|,d?   D ]  }-|-|vs|j'                  |-        \ tG        dA |j?                         D              tG        dB |j?                         D              tG        dC |j?                         D              dD}.|%d,k(  xr | xr |.d   dk(  }/|%|/|	|#|'rdEndF|&||
tI        tK        |            ||.|$|dGS )HNzAd not found)errorTproduct_base_cost
is_missingMISSING_BASE_COSTnf_valueipi_rate	ipi_valuest_valueMISSING_ST_DATApurchase_extra_costs        none	estimatedlowzMissing Base CostFformular   	is_usablefinal_product_cost
calculated	automatichighmediumz"Base Cost + IPI + ST + Extra Costsmarketplace_costssales_tax_rateMISSING_SALES_TAX_CONFIGr         Y@sales_tax_valueu   Preço Venda (z	) * DAS (%)totalfinal_profitu6   Preço Venda - Marketplace - DAS - Custo Final Produtou(   Faltam dados base para cálculo do lucrocostdata_source manual)tiny_ads_costoverride_manual_baseresolved_final_costapprovedautomatic_usedc              3   ,   K   | ]  }|d    dk(    yw)source_typeoverrideN .0ms     r   	<genexpr>z.PricingDataResolver.resolve.<locals>.<genexpr>   s     QQ!M*j8Qs   override_usedd   )ad_cost_tinyr=   diffdiff_percentad_cost_divergenceg      @g      @needs_reviewconflict_detectedCOST_SOURCE_CONFLICTu3   Override manual diverge do custo automático em R$ z.2fu-   . Revisão obrigatória antes de automação.rA   rB   
confidenceis_usable_for_automationwarningssourcec              3   2   K   | ]  }|d    dk(  sd  yw)rQ   r-      NrC   rD   s     r   rG   z.PricingDataResolver.resolve.<locals>.<genexpr>   s     OaQ|_5NO   c              3   2   K   | ]  }|d    dk(  sd  yw)rQ   r.   rV   NrC   rD   s     r   rG   z.PricingDataResolver.resolve.<locals>.<genexpr>   s     Sq(7R!SrW   c              3   2   K   | ]  }|d    dk(  sd  yw)rQ   r&   rV   NrC   rD   s     r   rG   z.PricingDataResolver.resolve.<locals>.<genexpr>   s     MQAlOu4LqMrW   )r-   r.   r&   product_purchase_costszads/tiny)statusrR   calculator_inputscost_candidatesselected_cost_sourceselection_statusauditmissing_fields
hard_locksdata_sourcesconfidence_summary
comparisonrS   )&r   queryr   filteridfirst_build_empty_responseskur	   r
   mlb_id	is_activeorder_byeffective_fromdescr   r   reference_month_resolve_product_base_costappend_resolve_nf_value_resolve_ipi_value_resolve_st_value_resolve_purchase_extra_costs_build_audit_entry_resolve_marketplace_costs_resolve_sales_tax_ratepricegetattr	real_costanyvaluesabsitemsgetsumlistset)0r   r   adrk   	tiny_prodpurchase_cost_recordtax_profile_recordmonthly_configr`   inputsra   rb   rS   rc   base_cost_valbase_cost_auditnf_value_valnf_value_auditipi_rate_valipi_val	ipi_auditst_valst_auditextra_costs_valextra_costs_audit
final_costfinal_cost_auditmkp_costs_valmkp_costs_auditdas_rate_valdas_rate_auditsales_tax_valprofitrJ   override_costr]   re   r[   r_   is_overriderK   rL   conflict_msgfieldmetawrd   rR   s0                                                   r   resolvezPricingDataResolver.resolve   s%   WW]]2%%beeun5;;=--N-CCffY\DGGMM+.55koo6LMSSUbf	#ww}}-@AHH&&%/))T1 
 (&55::<
=eeg 	
 "WW]]+<=DD$$-''4/
 %' 	
 '78??&&$.

(#3388:
;EEG 	 
 *.)H)HYXl)m&&3"#%4!"<(!!"5612 (,'='=b)Macp'q$n)z*j,'!!*- ,0+B+B<Q^`r+s(gy)z%{&k\"!!+.11,Xjk#z$jL!!!*-/0 .2-O-OPd-e**)8%&(9$% <(J#66sFKQV`s  AE  QV6   W!!"67&069OKJ#66(6(<:PW_<   7   (2#$&6"# *.)H)H)L&&3"#%4!" (,'C'CNTf'g$n#/ "0,'!!"2389881HHu(<=M$1 !#'#:#:$RXXJi~RH $; $
  881_\-JXXg 66FSF%+F>"$($;$;P  %< %E.! &)F>"$($;$;CV[  fP  ]a  mr$;  %sE.! r63/:NSZ[oq~  AC  TD  HP  TP,66  VY *$1#-
 
+Q%,,.QQ.!
QzL01D </36L !-'1 ,	0J+, s
lS.@'#6 !!"89!TUYZ]T^  _L   M- $);;= >KE4M*j8-2\*;@78%T1/1D,Z(//=> !;;= 	+KE4H~\1d8n6N##DN3xx
#j) +A( *+		+ O5<<>OOSU\\^SSM%,,.MM
 $*Z#7#m
N#mOabgOhlmOm  (@!'.@K$<Q[ 0,s:/("4$ 
 	
r   r   r   p_costc                    |rt        |dd      dk(  r|j                  r|j                  dkD  rt        |dd      xs d}d|j                         v xs d|j                         v }|rd	nd
}|j                  | j                  |j                  dd|ddddt        |dt	        j
                               j                         ||rdndgd      fS |rKt        |dd      r>t        |dd      dkD  r.|j                  | j                  |j                  ddd
ddd      fS |rKt        |dd      r>t        |dd      dkD  r.|j                  | j                  |j                  ddd	ddd      fS d| j                  ddddd dd      fS )!Nr8   r9   r:   r   noteszSem motivo informadotesteu
   correçãor.   r-   rZ   rB   z!Valor exato salvo como Custo BaseFT
updated_atu*   Override manual ativo (teste/temporário).u1   Override manual ativo. Este dado sobrepõe o ERP.)rm   validated_atreasonrS   r(   r   r)   extrar7   tiny_productsr,   z!Sincronizado do ERP (preco_custo)r'   adsz%Sincronizado do ERP (ads.cost legacy)r#   r$   r%   r&   u   Não encontrado em nenhuma base)r|   r}   lowerrx   r   utcnow	isoformatr7   )r   r   r   r   r   is_testrQ   s          r   rr   z.PricingDataResolver._resolve_product_base_cost   s   gfmR8HDIYIY^d^n^nqr^rVWb1K5KF/Q<6<<>3QG%,&J##T%<%<  (; !%$+FL(//BS$T$^$^$`$QX!M  _R  !S	 &= &    FA679fVW;X[\;\>>4#:#:;  $; $   '"fa(WR-Ca-G77D33?  4    D++CeUv  DH  TY+  Z  Z  	Zr   	base_costc                    |rt        |dd      dk(  rt        |dd      rt        |dd      dkD  rt        |dd      xs d}d|j                         v }|rdnd	}|j                  | j                  |j                  d
d|ddddt        |dt	        j
                               j                         dgd      fS d| j                  ddddddd      fS )Nr8   r9   r:   r   r   r   r   r.   r-   rZ   rB   zValor exato salvo da NFFTr   zOverride manual ativo para NF.)rm   r   rS   r   r#   r$   r%   r&   u   Valor NF não cadastrador'   )r|   r   r   rx   r   r   r   )r   r   r   r   r   r   r   rQ   s           r   rt   z%PricingDataResolver._resolve_nf_value  s   gfmR8HDQWYcefIglstz  }G  IJ  mK  NO  mOVWb17RF/G%,&J??D$;$;(1 !%$+FL(//BS$T$^$^$`!A B %< %   D++CeUo  }A  MR+  S  S  	Sr   r   t_profc                 T   |rt        |dd      sdd| j                  ddddddd	      fS t        |d
d       W|dkD  r|n|}|j                  }||dz  z  }t        |dd      dk(  }||| j                  |d|rdnd|rdndd| d| ddd	      fS dd| j                  ddddddd	      fS )Nhas_ipiFr#   product_tax_profilesr,   r-   u   IPI não exigido para este NCMTr'   r   r   r2   r8   r9   r:   r+   rB   r.   zBase (u   ) * Alíquota IPI (r4   r$   r%   r&   u!   IPI exigido mas alíquota ausente)r|   rx   r   )r   r   r   r   baseratevalr   s           r   ru   z&PricingDataResolver._resolve_ipi_value(  s#   WVY>T44S:PR]_e  pP  ]b  nr4  s  s  s6:t,8'!|8D??D$,'C!&-<HKd55)
{'V &9$rB  6    C00fk5Z}  KO  [`0  a  a  	ar   r   c                 L   |rt        |dd      sd| j                  ddddddd	      fS t        |d
d       t        |dd       t        |dd       |dkD  r|n|}||z   d|j                  dz  z   z  }||j                  dz  z  ||j                  dz  z  z
  }t        d|      }t        |dd      dk(  }|| j                  |d|rdnd|rdndd| d| dd|j                  dz  z    d|j                   d| d|j                   ddd	      fS d| j                  ddddd dd	      fS )!Nhas_stFr#   r   r,   r-   u   ST não exigida para este NCMTr'   mva_rateorigin_icms_ratedestination_icms_rater   rV   r2   r8   r9   r:   r+   rB   r.   z
Base ST [(z + z) * z] * ICMS Dest(u   %) - Crédito [z * ICMS Orig(z%)]r$   r%   r&   u.   ST exigida mas parâmetros ausentes (MVA/ICMS))r|   rx   r   r   r   max)	r   r   r   r   r   r   base_str   r   s	            r   rv   z%PricingDataResolver._resolve_st_value=  s   WVXu=//5K[Z`  kJ  W\  hl/  m  m  m6:t,8WVM_ae=f=rw~  @F  H_  ae  xf  xr'!|8Di'A51H,IJG!=!=!EF4SYSjSjmrSrKstFF^F!&-<HK422)
{'V$TF#i[Q&//TYBY=Z<[[ijp  kG  kG  jH  HW  X\  W]  ]j  kq  kB  kB  jC  CF  G  3    D++Ce  VF  SW  ch+  i  i  	ir   c                    |rdt        |dd      dk(  rTt        |dd      xs dt        |dd      xs dz   t        |dd      xs dz   }|| j                  |dd	d
dddddgd      fS d| j                  ddddddd      fS )Nr8   r9   r:   freight_costr   packaging_costother_costsrZ   rB   r.   zFrete + Embalagem + OutrosFTz.Custos extras preenchidos via override manual.)rm   rS   r   r#   r$   r%   r-   zSem custos extras registradosr'   r|   rx   )r   r   r   s      r   rw   z1PricingDataResolver._resolve_purchase_extra_costsT  s    gfmR8HD6>15:6#3Q7<1>6=!49;C //(4 !%!Q R 0    D++CfVu  CH  TX+  Y  Y  	Yr   c                     t        |dd      dk(  rdnd}t        |dd      xs d|z  }t        |dd      xs d}|||||z   d	}|| j                  |d
   dddd|dz   d| ddd      fS )Nlisting_type_idr9   gold_prog{Gz?g)\(?r{   r   shipping_cost)commission_ratecommission_valuer   r5   r5   r   r,   r-   u   Comissão (rI   z%) + Frete ML ()FTr'   r   )r   r   r   commission_valshipping_val	mkp_costss         r   ry   z.PricingDataResolver._resolve_marketplace_costsh  s    ")".?"D
"R$X\!"gq16Q/Ir?A6;!  / .)#l2	
	 $11g!/#"5!6ol^STU 2 
 
 	
r   m_configc                     |sd| j                  ddddddd      fS t        |d	d      }|rt        |d
d      rt        |dd      }|| j                  |dddd|rt        |d
d      rdnd dd      fS )Nr#   r$   r%   r&   u0   Configuração de imposto mensal não encontradaTFr'   full_das_rater   das_without_icms_ratemonthly_tax_configsr,   r-   u   Alíquota DAS zsem ICMS (ST paga na origem)Cheia)rx   r|   )r   r   r   r   s       r   rz   z+PricingDataResolver._resolve_sales_tax_rate~  s    //V[%  ZL  Y]  in/  o  o  ox#6gfh68%<cBDT,,!$vRYZ`bjlqRr%Cx  %A  B - 
 
 	
r   NvaluerT   rA   rQ   r(   r   r)   r   c	           
          |||||t        j                         j                         g ||d	}	|r|	j                  |       |	S )N)	r   rT   rA   rQ   r(   r   rS   r   rR   )r   r   r   update)
r   r   rT   rA   rQ   r(   r   r)   r   entrys
             r   rx   z&PricingDataResolver._build_audit_entry  sJ    &$"//+557$(1

 LLr   r   c                     ddi i g dgg i i |d
S )Nr   FAD_NOT_FOUND)
r[   rR   r\   r`   ra   rb   rc   rd   re   r   rC   )r   r   s     r   rj   z)PricingDataResolver._build_empty_response  s-    (-!# )*"$
 	
r   r   )__name__
__module____qualname____doc__r   r   strr   r   r   r   r	   r
   r   floatrr   rt   r   ru   rv   rw   ry   r   rz   boolrx   rj   rC   r   r   r   r      s.   
7 M
S M
T#s(^ M
^,ZR ,ZK ,ZQd ,Zinotvzozi{ ,Z\SB S; SH[ Shm Srwx}  @D  yD  sE S.a5 aU aL] abghmotvzhzb{ a*i% iE ie i]n isxy~  AE  zE  tF i.Y4G YERWY]R]L^ Y(
R 
E$sEz:JD:P4Q 
,
0@ 
J[ 
`efkmqfq`r 
$ S s X[ fi w{   IM   VZ   fj  kn  ps  ks  ft  
3 
4S> 
r   r   )sqlalchemy.ormr   typingr   r   r   r   app.models.adr   app.models.tiny_productr	   app.models.fiscalr
   r   r   logging	getLoggerr   loggerr   rC   r   r   <module>r      s>    " # #   / V V 			8	$a
 a
r   