
    !+ij                         d dl Z d dlZd dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ  e j                  e      Z G d d      Zy)	    N)Decimal)funcand_)SessionLocal)MlOrder)SystemConfigc                   <    e Zd ZddZdefdZdedefdZdefdZy)	
TaxServiceNc                 6    |r|| _        y t               | _        y N)r   db)self
db_sessions     F/var/www/hypershopcomercio.com.br/hyper-ai/app/services/tax_service.py__init__zTaxService.__init__   s     **    returnc                 N   	 t         j                   j                         j                         }t         j                   j                         }|t        j                  d      z
  }| j                  j                  t        j                  t        j                              j                  t        t        j                  |k\  t        j                  dk(              j                         }t        |xs d      S # t         $ r"}t"        j%                  d|        Y d}~yd}~ww xY w)zf
        Calculates RBT12 (Gross Revenue of Last 12 Months).
        Considers 'paid' orders.
        im  )dayspaid        zError calculating RBT12: N)datetimenowdate	timedeltar   queryr   sumr   total_amountfilterr   date_createdstatusscalarfloat	Exceptionloggererror)r   todayend_date
start_daterevenuees         r   calculate_rbt12zTaxService.calculate_rbt12   s    
	%%))+002E  ((,,.H!H$6$6C$@@JggmmDHHW-A-A$BCJJ((J6NNf,
 fh  C(( 	LL4QC89	s   C6C9 9	D$DD$rbt12c                     |dk  ryg d}t        |      }d}d}|dk  ryd}|D ]  \  }}}	||k  s|}|	}d} n |sd}d	}||z  |z
  |z  d
z  }
t        |
d      S )z
        Calculates effective tax rate for Simples Nacional Anexo I (Commerce).
        Formula: ((RBT12 * AliqNominal) - Ded) / RBT12
        r   g      @))     Ag{Gz?r   )g     Ag㥛 ?g     4@)g     %AgRQ?g     @)g    @w;Ag1Zd?g     @)g    @wKAgM?g    @P@)g    ORARQ?    @Ar   r/   FTr0   r1   d      )r#   round)r   r-   rangesrbt12_daliq_nominaldeducaofoundlimitaliqdedeffective_rates              r   calculate_anexo_i_ratez!TaxService.calculate_anexo_i_rate*   s    
 A:
 ,  i & 	E4%#	  !\ W
 $l2g=HCO^Q''r   c                    | j                         }| j                  |      }t        j                  d|dd| d       	 | j                  j                  t              j                  t        t        j                  dk(  t        j                  dk(              j                         }|rt        |      |_        n3t        ddt        |      d      }| j                  j                  |       | j                  j                          |S # t         $ r>}| j                  j#                          t        j%                  d	|        |cY d
}~S d
}~ww xY w)zr
        Updates 'aliquota_simples' in SystemConfig based on current RBT12.
        Returns the new rate.
        zUpdating Tax Rate. RBT12: z,.2fz
 -> Rate: %geralaliquota_simplesu(   Alíquota Simples Nacional (Automática))groupkeyvaluedescriptionz"Failed to update tax rate config: N)r,   r>   r%   infor   r   r   r   r   rC   rD   firststrrE   addcommitr$   rollbackr&   )r   r-   new_rateconfigr+   s        r   update_system_tax_ratez!TaxService.update_system_tax_ratec   s   
 $$&..u50tJxjPQRS	WW]]<077\''72L4D4DHZ4Z[eg  "8}%!*h- J	 F#GGNNO 	GGLL=aSABO	s    C	D
 
	E3EEEr   )__name__
__module____qualname__r   r#   r,   r>   rO    r   r   r
   r
      s3    ? 67(E 7(e 7(r   r   r
   )loggingr   decimalr   
sqlalchemyr   r   app.core.databaser   app.models.ml_orderr   app.models.system_configr   	getLoggerrP   r%   r
   rS   r   r   <module>r[      s8       ! * ' 1			8	$x xr   