
    h+                         S r SSKrSSKJrJrJrJr  S\R                  S\\	\4   4S jr
 SS\R                  S\R                  S	\	S\\\\   4   4S
 jjrg)u   
Módulo para realizar cálculos y agregaciones sobre los datos de ventas.
Contiene funciones para KPIs, análisis de tendencias y otras métricas de negocio.
    N)DictAnyTupleOptionaldfreturnc                    U R                   (       a  SSSSSS.$ [        U S   R                  5       5      nU S   R                  5       n[	        U 5      nU R                  S5      S   R                  5       nUR                   (       d  [        UR                  5       5      OSnU S   R                  5       nU S   U S   -  R                  5       nUS:  a  Xv-  OSnUUUUUS.$ )u   
Calcula un conjunto de KPIs principales a partir de un DataFrame de ventas.

Args:
    df (pd.DataFrame): DataFrame filtrado para el análisis.

Returns:
    Dict[str, Any]: Un diccionario con los KPIs calculados.
        r   )ingreso_totaltotal_foliostotal_itemsticket_promediopct_descuentoingresofolioimporte_total_productodescuento_porcentaje)emptyfloatsumnuniquelengroupbymean)	r   r   r   r   ingresos_por_folior   bruto_total
desc_totalr   s	            bC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\Proyectos\Cabanna\modules\calculations.pycalculate_main_kpisr      s     
xx !A"S
 	

 "Y-++-.Mg;&&(Lb'K G,Y7;;=>P>V>Ve.3356\_O -.224K-.4J1KKPPRJ2=/Z-sM '$"*&     
df_currentdf_historicalfreqc                 H  ^ U R                   (       a  gSU4S jjnU" U 5      nUR                   (       a  g[        UR                  5       5      nU" U5      n[        U5      [        U5      :  a  US4$  UR                  R                  5       [        R                  " SS9-
  nUR                  SU R                  [        U5      5      nUR                   (       a  US4$ [        UR                  5       5      n	U	S:  a  XY-
  U	-  OSn
XZ4$ ! [        [        4 a    US4s $ f = f)u  
Calcula el ingreso promedio para un período y su variación vs. el período anterior.

Args:
    df_current (pd.DataFrame): Datos del período actual seleccionado.
    df_historical (pd.DataFrame): Datos históricos completos de la sucursal.
    freq (str): Frecuencia de agrupación ('M' para mes, 'W' para semana, 'D' para día).

Returns:
    Tuple[float, Optional[float]]: Una tupla con el ingreso promedio actual y
                                   el delta porcentual vs. el período previo.
)r
   Nc                    > U R                  [        R                  " X   5      5      R                  T5      U   R	                  5       $ )N)	set_indexpdto_datetimeresampler   )r   date_col	value_colr#   s      r   group_by_period0calculate_trend_metrics.<locals>.group_by_periodE   s6    ||BNN2<89BB4HSWWYYr    N   )daysr   )fecha_ticketr   )r   r   r   r   indexminr'   	Timedeltaloctail
IndexErrorKeyError)r!   r"   r#   r,   s_curravg_currs_histend_prev_periodprev_periodsavg_prevdeltas     `        r   calculate_trend_metricsr?   0   s   " Z Z(F||V[[]#H ]+F
6{S[ $	 ,,**,r||/CCzz"2?388VE ~\&&()H081X H,$E? ! ~s   4AD
 
D! D!)M)__doc__pandasr'   typingr   r   r   r   	DataFramestrr   r   r?    r    r   <module>rG      sy   
  - -#BLL #T#s(^ #P 11<<1 1 5(5/!"	1r    