
    Z(j>6                     X   d dl mZmZ d dlmZ d dlmZ d dlZ ej                  e	      Z
 ej                  ddg      ed               Z ej                  d	dg      ed
               Z ej                  ddg      ed               Z ej                  ddg      ed               Zy)    )jsonifyrequest)api_bp)require_authNz/pricing/statusGET)methodsc                  "    t        ddddd      S )u4   Retorna o status atual do módulo de precificação.pricinginitializedFu5   Módulo de precificação pronto para configuração.)modulestatusautomation_enabledmessager        G/var/www/hypershopcomercio.com.br/hyper-ai/app/api/endpoints/pricing.pyget_pricing_statusr      s"     #J	  r   z/pricing/strategiesc                  :    dddddddddd	d
dg} t        |       S )u5   Lista as estratégias de precificação disponíveis.competitor_matchzAcompanhar ConcorrenteuG   Mantém o preço igual ou ligeiramente abaixo do concorrente principal.)idnamedescriptionmargin_safeu   Margem de Segurançau7   Garante uma margem de lucro mínima em todas as vendas.inventory_clearancezQueima de Estoqueu:   Reduz o preço progressivamente para itens com baixo giro.r   )
strategiess    r   get_strategiesr      sQ     "+C  U^  	_&<  NG  	H$.A  SO  	PJ
 :r   z/pricing/simulatePOSTc                     	 t        j                         } | st        ddi      dfS | j                  dd      }| j                  dd      }| j                  dd      }| j                  d	      }| j                  d
      }| j                  d      }d}g }g }	d}
d }|r|sd}ddlm} ddlm}m}m	} ddl
m}  |       }	 |j                  |      j                  |j                  |k(        j                         }|s#t        dddgdd      df|j!                          S |j                  |      j                  |j"                  dk(        j%                  |j&                  j)                               j                         }|sd}
d}|	j+                  d       |j                  |      j                  |j,                  |k(  |j"                  dk(        j                         }|sd}
d|	vrd}|	j+                  d       |j                  |      j                  |j,                  |k(  |j"                  dk(        j%                  |j.                  j)                               j                         }|sd}
|sd}|	j+                  d       |rp|j0                  rd|j2                  |j4                  |j6                  d}
|sd}|	j+                  d       |r'|j8                  d}
|sd}d|	vr|	j+                  d       |rX|j:                  rL|j<                  d}
|sd}|	j+                  d       |r'|j8                  d}
|sd}d|	vr|	j+                  d       |	r&t        dd|||
||	dd      df|j!                          S |j>                  |j8                  xs d|j<                  xs dd|j@                  xs d|jB                  xs dz   |jD                  xs dz   tG        |jH                  d      r|jH                  jJ                  n|jH                  d}|jL                  |jN                  |j0                  |j:                  |jP                  |j2                  xs d|j4                  xs d|j6                  xs dd }|jR                  xs d!|d"k  rd#nd|jT                  xs ddd$}|j!                          nl|xs i }|xs i }|xs i }d%d&g}|D ]  }||vs|j+                  |        d'|vsd(|vr|jW                  d'd(g       |rt        dd||dd)|d)gd*gg i dd+      dfS dd,l,m-}m.}m/} dd-l0m1} dd.l2m3}  |ti        |j                  d'd            ti        |j                  d(d            ti        |j                  d/d            ti        |j                  d0d            ti        |j                  d1d            |j                  d2d3            } |ti        |j                  d%d            ti        |j                  d&d            tk        |j                  d4d            tk        |j                  d5d            tk        |j                  d6d            ti        |j                  d7d            ti        |j                  d8d            ti        |j                  d9d                   } |ti        |      ti        |j                  d:d            ti        |j                  d;d            ti        |j                  d<d            ti        |j                  d=d            >      } |       } | jm                  |||      }!|dkD  r| jo                  ||||      n|!}"| jq                  |||      }#d}
d }g }	d}$|#jr                  dk  rd}
d?}|	j+                  d@       d}$n\|dkD  r'|#jt                  |k  rd}
dA}|	j+                  dA       d}$n0|"dk(  r|dkD  rd}
dB}|	j+                  dB       d}$n|#jv                  rdC}
i dDddEdd|dF|#jx                  dG|#jr                  dH|#jt                  dI|#jz                  dJ|!dK|"d|dL|$dM|
dN|dO|#j|                  j~                  |#j|                  j                  |#j|                  j                  |#j|                  j                  |#j                  |j                  |#j@                  |#j                  |j                  dP	dQ|#jv                  dR|	dS||#j                  D %cg c]
  }% ||%       c}%|dT}&t        |&      S # |j!                          w xY wc c}%w # t        $ r>}'t        j                  dU|' dV       t        ddt        |'      dW      dXfcY d }'~'S d }'~'ww xY w)YNerrorzMissing payloadi  ad_idunknownsimulate_priceg        target_margin_percentproduct_costtax_profilemarketplaceTapprovedFr   SessionLocal)MonthlyTaxConfigProductTaxProfileProductPurchaseCost)AdblockedAD_NOT_FOUND)successr   
hard_locks	is_mockedMISSING_MONTHLY_TAX_CONFIGMISSING_PRODUCT_TAX_PROFILEMISSING_PURCHASE_COSTMISSING_ST_DATAMISSING_NF_VALUEMISSING_IPI_DATAsimulation_only)r1   moder!   simulated_pricer   block_reasonr2   r3   value)	real_costvalor_nfipi_ratedifal_valueother_purchase_costsproduct_origin)full_das_ratedas_without_icms_ratehas_sthas_ipi	has_difalmva_rateorigin_icms_ratedestination_icms_rateg      0@g     S@g      @)fee_rate	fixed_feefreight_costother_variable_costsrE   rF   r?   r@   MISSING_TAX_DATAu2   Dados fiscais incompletos para simulação segura.)r1   r;   r!   r<   r   r=   missing_required_fieldsr2   warningstracecostsr3   )ProductCostInputTaxProfileInputMarketplaceInput)PricingCoreCalculator)asdictrA   rB   rC   rD   nacionalrG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   )selling_pricerM   rN   rO   rP   ZERO_PROFIT_VIOLATIONNEGATIVE_PROFITTARGET_MARGIN_VIOLATIONTARGET_MARGIN_NOT_REACHABLEwarningr1   r;   r<   profit_amountcontribution_margin_percentreturn_over_cost_percentminimum_price_zero_profitminimum_price_target_marginis_price_allowedr   r=   rU   )	final_product_costst_value	ipi_valuerB   marketplace_fee_valuerN   rO   sales_tax_valuerP   rS   r2   rR   )rT   r3   zError in simulation: )exc_info)r1   r   r     )Lr   get_jsonr   getapp.core.databaser*   app.models.fiscalr+   r,   r-   app.models.adr.   queryfilterr   firstclose	is_activeorder_byreference_monthdescappendmlb_ideffective_fromrG   rJ   rK   rL   nf_valuerH   rA   r?   rO   packaging_costother_costshasattrrD   r>   rE   rF   rI   commission_percentshipping_costextendapp.services.pricing.typesrV   rW   rX   $app.services.pricing.core_calculatorrY   dataclassesrZ   floatboolfind_minimum_price_zero_profit find_minimum_price_target_margin	calculaterb   rc   rS   suggested_selling_pricerd   cost_breakdownrh   ri   rj   rB   rk   rN   rl   rP   rT   	Exceptionloggerr    str)(datar!   	sim_pricer$   p_cost	t_profilem_placer3   missing_fieldsr2   r   r=   r*   r+   r,   r-   r.   dbadm_configt_profp_costsrequired_taxfrV   rW   rX   rY   rZ   r%   r&   r'   calcmin_price_zeromin_price_targetresrg   tresponse_payloades(                                           r   simulate_pricingr      s}
   @!G%678#==),HH-s3	 $)@# F.)HH]+	((=)	
YI6bb(B\XXb\((%8>>@"u	ZhYix}#~  BE  Er 
o 88$45<<=M=W=W[_=_`iijz  kK  kK  kP  kP  kR  S  Y  Y  [&F#?L%%&BC"34;;<M<T<TX]<]_p_z_z  C  `C  D  J  J  L&F3:E'D%%&CD((#67>>?R?Y?Y]b?bdw  eB  eB  FJ  eJ  K  T  T  Uh  Uw  Uw  U|  U|  U~    E  E  G&F''>%%&=>fmm.&2I2I2QU[UqUqUy!*++<L"))*;<7#3#3#;!*++=L-Z?&--.@Afnn.!*++=L"))*<=7#3#3#;!*++=L-Z?&--.@A"#( 1!&+4"((4&0%*	$ 	 	L 
5 ")!2!2 ' 0 0 7C & 63#&-4-A-A-FQ7KaKaKfef,gkrk~k~  lD  CD  -EELVMbMbdkElf&;&;&A&Arx  sH  sH &.%;%;-5-K-K$mm%~~!'!1!1 & 63(.(?(?(F3-3-I-I-PS		 !# 5 5 =(1D(8c$&$4$4$;,/	 
\rF!RImG+-DEL! -I%"))!,- &(Jf,D%%{J&?@$-"'0'$6/=#5"6!U V!%     	cbN&'FJJ{C896::j#676::j#67fjj<=!&vzz2H#'N!O!::&6
C
 &	os CD"'	6Ms(S"T	h67y%899==e<=9==S9:"9==1CS#IJ"'	6Ms(S"T	
 '	*7;;z378GKKS9:w{{>3?@!&w{{3I3'O!P
 %& <<\;Xcd DY  \]  D]4@@{\gi~  cq nn\;D 
q F2L/0$"Q&3+J+JMb+bF4L78$$)>)BF8L;<$\\F"
t"
%"
 U"
 s::	"

 S.."
 *3+J+J"
 '(D(D"
 ("
 *+;"
 $%:"
  0"
 f"
 L"
" &)&8&8&K&K..77 //99"11==),)B)B(22 # 0 0#&#6#6(3(H(H
#"
: ;"
< *="
> &~?"
@ *-3AfQi3"C"
H '((E 
| 4  ,QC04@1v
  	 	sp   $d- Bd- ?Ad d- I	d (d- 9D&d 0d- Ad- Od- 2d(d- d%%d- -	e463e/)e4/e4z/pricing/resolve/<ad_id>c                    ddl m} ddlm}  |       }	  ||      }|j	                  |       }d|v rt        |      df|j                          S t        |      df|j                          S # t        $ rM}t        j                  d|  d|        t        dt        |      i      d	fcY d
}~|j                          S d
}~ww xY w# |j                          w xY w)zRRetorna os metadados de auditoria e os inputs calculados pelo PricingDataResolver.r   r)   )PricingDataResolverr    i     z!Error resolving pricing data for z: rn   N)rq   r*   app.services.pricing.resolverr   resolver   rw   r   r   r    r   )r!   r*   r   r   resolverresultr   s          r   resolve_pricing_datar   $  s     /A	B
&r*!!%(f6?C' 	
 v#
 	
	  /8r!EFQ()3..

	/ 	
s5   )A, A, ,	C52B='C(C =CC C)flaskr   r   app.apir   app.api.endpoints.authr   logging	getLogger__name__r   router   r   r   r   r   r   r   <module>r      s    "  / 			8	$%1  2 #eW5  6 !F84A  5AF (5':  ;r   