
    =*j+                     r    d dl mc mZ d dlmZ d dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZ  G d d      Zy)    N)Decimal)datetime)NfeImportSchemaNfeItemSchema	NfeIssuer	NfeTotalsNfeMetadataParseStatusEnumAllocationDetail	TaxDetailc                       e Zd Zed        Zed        Zed        Zedd       Ze ed      fd       Z	ede
d	efd
       Zy)NfeParserServicec                 6    d| v r| j                  d      d   S | S )N}   )split)tags    M/var/www/hypershopcomercio.com.br/hyper-ai/app/services/nfe_parser_service.py	_strip_nszNfeParserService._strip_ns   s!    #:99S>!$$
    c                 ^    | D ](  }t         j                  |j                        |k(  s&|c S  y N)r   r   r   )elem	match_tagchilds      r   _find_nszNfeParserService._find_ns   s2     	E))%))4	A	 r   c                     g }| D ]6  }t         j                  |j                        |k(  s&|j                  |       8 |S r   )r   r   r   append)r   r   resultsr   s       r   _find_all_nszNfeParserService._find_all_ns   s@     	&E))%))4	Au%	& r   Nc                 f    t         j                  | |      }||j                  |j                  S |S r   )r   r   text)r   r   defaultr   s       r   	_get_textzNfeParserService._get_text    s2     ))$	:!7::r   0.0c                 ^    t         j                  | |      }|r	 t        |      S |S #  Y |S xY wr   )r   r$   r   )r   r   r#   vals       r   _get_decimalzNfeParserService._get_decimal'   s<    ((y9s|# s   
' ,xml_contentreturnc                 ,   	 t        j                  | j                  d            }|}t        j	                  |j
                        dk(  rt        j                  |d      }||}t        j                  |d      }|t        d      |j                  j                  dd      j                  dd      }|st        d      d }t        j	                  |j
                        dk(  rFt        j                  |d	      }|.t        j                  |d
      }|t        j                  |d      }t        j                  |d      }	t        j                  |	d      }
t        j                  |	d      }t        j                  |	d      }t        j                  |	d      }t        j                  |	d      }t        j                  |	d      }|r	 t        j                  |      }nt        j                         }t        j                  |d      }t        j                  |d      xs t        j                  |d      }t        j                  |d      }t        j                  |d      }t        j                  |d      }t        j                  |d      }t        j                  |d      }t        j                  |d      }t        j                  |d      }t        j                  |d      }t        j                  |d      }t!        j"                  | j                  d            j%                         }t'        ||t)        ||      t+        ||||||       t-        |
||||||!      g "      }t        j/                  |d#      }|D ]  }t1        |j                  j                  d$d%            } t        j                  |d&      }!t        j                  |!d'      }"t        j                  |!d(      }#t        j                  |!d)      }$|$d*v rd+}$t        j                  |!d,      }%t        j                  |!d-      }&t        j                  |!d.      }'t        j                  |!d/      }(t        j                  |!d0      })t        j                  |!d1      }*t        j                  |!d      }+t        j                  |!d2      },t        j                  |!d3      }-t        j                  |!d4      }.t3        d5      }/t3        d5      }0t3        d5      }1t3        d5      }2d }3|d6kD  r|+|z  }4|4|z  }/|4|z  }0|4|z  }1|4|z  }2d7}3t        j                  |d8      }5t5               }6t5               }7d }8|5t        j                  |5d9      }9|9t7        |9      d6kD  r|9d6   }:t        j                  |:d:      xs t        j                  |:d;      }8t        j                  |:d<      |6_        t        j                  |:d=      |6_        t        j                  |:d>      |6_        t        j                  |:d?      |7_        t        j                  |:d@      |7_        t        j                  |:dA      |7_        t5               };t        j                  |5dB      }<|<it        j                  |<dC      }=|=Qt        j                  |=dD      |;_        t        j                  |=dE      |;_        t        j                  |=d<      |;_        |+|/z   |0z   |2z   |1z
  ;j:                  z   |7j:                  z   }>|)d6kD  r|>|)z  n
t3        d5      }?t?        d\i dF| dG|"dH|#dI|$dJ|%dK|&dL|'dM|8dN|(dO|)dP|*dQ|+dR|,dS|-dT|.dUtA        |/|0|1|2|3V      dW|6|7|;dXdY|>|?dZ}@|jB                  jE                  |@        |S #  t        j                         }Y xY w# tF        $ rW}At'        dt        j                         t)        dd      t+               tH        jJ                  tM        A      [      cY d }A~AS d }A~Aww xY w)]Nzutf-8nfeProcNFeinfNFezTag infNFe not found in XMLId z+Access key not found in infNFe Id attributeprotNFeinfProtnProtidenNFseriemodnatOptpAmbdhEmiemitCNPJCPFxNometotalICMSTotvProdvNFvFretevSegvDescvOutro)cnpjname)products_valueinvoice_valuefreight	insurancediscountother)
nfe_numberseriesmodeloperation_natureenvironmentprotocol_number
xml_sha256)
access_key
issue_dateissuertotalsmetadataitemsdetnItem0prodcProdxProdcEAN)SEM GTINzNO GTINrc   NCMCESTCFOPuComqComvUnComuTribqTribvUnTribr%   r   z7item.product_value / nfe.total_products_value * total_ximpostoICMSCSTCSOSNvBCvICMSpICMSvBCSTvICMSSTpICMSSTIPIIPITribvIPIpIPIn_itemsku_supplierdescriptioneanncmcestcfop	cst_csosnunitquantity
unit_valueproduct_value	unit_tribquantity_tribunit_value_triballocations)rK   rL   rM   rN   formulataxes)icmsstipicalculated_costs)total_item_cost_nfunit_cost_nf)rV   rW   rX   rY   parse_statusparse_error )'ET
fromstringencoder   r   r   r   
ValueErrorattribgetreplacer$   r   fromisoformatutcnowr(   hashlibsha256	hexdigestr   r   r   r	   r    intr   r   lenbasevaluerater   r   r[   r   	Exceptionr
   errorstr)Br)   rootnfe_node	nfe_childr.   rV   prot_numberr1   r2   r4   rO   rP   rQ   rR   rS   issue_date_strrW   r;   issuer_cnpjissuer_namer?   icms_tottotal_productstotal_invoicetotal_freighttotal_insurancetotal_discounttotal_otherrU   schemadetsr\   r{   r_   r|   r}   r~   r   r   r   r   r   r   r   r   r   r   alloc_freight	alloc_ins
alloc_descalloc_otherr   ratiorm   	icms_dictst_dictr   	icms_node
inner_icmsipi_dictipi_nodeipi_tribitem_total_nf_costr   itemesB                                                                     r   	parse_xmlzNfeParserService.parse_xml1   s   F	==!3!3G!<=D H))$((3y@,55dEB	((H%..xBF~ !>??**44<<UBGJ !NOO K))$((3y@*33D)D&.77KG*&6&@&@'&R"++FE:C)33C?J%//W=F$..sE:E/99#wG*44S'BK-77WEN3!)!7!7!GJ &__.
#,,VV<D*44T6BmFVF`F`aeglFmK*44T7CK$--fg>E'00	BH-::8WMN,99(EJM,99(HMM.;;HfMO-::8WMN*77(KK (:(:7(CDNNPJ$%% kD #1"/)-+% %)!%5 +$/) +F0 $00?D f*SZZ^^GS9:'00f=/99$H.88wG&00v>11$C&00u='11$?'11$?'11$?+88vF-::4J
 0 = =dG L,66tWE	 0 = =dG L"2"?"?i"P '#EN	$U^
%en!A%)N:E$)M$9M % 7I!&!7J"'+"5KWG +33CC%K	#+ 	& 0 9 9'6 JI ,Y!1C%.q\
$4$>$>z5$Q  %EUeUoUopz  }D  VE	)9)F)FzSX)Y	*:*G*G
T[*\	)9)F)FzSZ)[	'7'D'DZQX'Y(8(E(EjR[(\'7'D'DZQZ'[({H/88%HH+#3#<#<Xy#Q#/-=-J-J8U[-\HN,<,I,I(TZ,[HM,<,I,I(TY,ZHM &3]%BY%NQ\%\_i%iltlzlz%z  ~E  ~K  ~K  &K"@H11H<RYZ_R`$  ! !-  !,  	 
       (    &   *  #0  (  #0  %4   !1 -"+!+) '!! 0 !*%'/ : /A(4&9 B ##D)Mf*P Mm3!)!2Jn  	"#??, br2 {,22F 	s8   G^3 ^ V:^3 ^0-^3 3	`<A```r   )__name__
__module____qualname__staticmethodr   r   r    r$   r   r(   r   r   r   r   r   r   r   r   
   s     
       .5en   Gs G G Gr   r   )xml.etree.ElementTreeetreeElementTreer   decimalr   r   r   app.schemas.nfer   r   r   r   r	   r
   r   r   r   r   r   r   <module>r      s/    " "     
o or   