+
    ci
                    :    ^ RI Ht ^ RIt^ RIHt ^ RItR R ltR# )    )annotationsN)Anyc                    V ^8  d   QhRRRR/# )   
file_bytesbytesreturnzdict[str, Any] )formats   "app\utils\excel_parse.py__annotate__r   	   s"     BH BHu BH BH    c           
     `  a  \         P                  ! \        P                  ! V 4      RRR7      pWP                  ^ ,          ,          pVP                  RR7      p \        V4      pT Uu. uF!  qUe   \        T4      P                  4       MR	NK#  	  ppRpRp\        T4       F  w  rT
P                  4       P                  4       o\        ;QJ d    T3R
 lR 4       F  '       g   K   RM	  RM! T3R
 lR 4       4      '       d   T	p\        ;QJ d    T3R lR 4       F  '       g   K   RM	  RM! T3R lR 4       4      '       g   K  T	pK  	  TR8X  g   TR8X  d   RRRRRP                  T4      ,           /# . pT F  pTf   K	  \        T4      pT\        T4      8  d*   Y,          e    \        Y,          4      P                  4       MR	pT\        T4      8  d*   Y,          e    \        Y,          4      P                  4       MR	pT'       g   T'       g   K  TP!                  RTRT/4       K  	  TP#                  4        T'       g   RRRR/# RRRR\        T4       R2R\        T4      RTRT/#   \         d
    RRRR/u # i ; iu upi   \$         d   pRRRRT 2/u Rp?# Rp?ii ; i)zR
Reads first sheet; finds name + phone columns like parseCsvContent header rules.
T)	read_only	data_only)values_onlysuccessFerrorzExcel file is emptyN c              3  ,   <"   T F	  qS9   x  K  	  R # 5iNr
   .0x
normalizeds   & r   	<genexpr>1workbook_bytes_to_contact_rows.<locals>.<genexpr>   s     _,^q
?,^s   namec              3  .   <"   T F
  pVS9   x  K  	  R # 5ir   r
   r   s   & r   r   r      s       
A Zs   contactz0Could not find name and contact columns. Found: z, zNo valid contact data foundmessagezSuccessfully parsed z	 contactstotal_countcontactscolumns_foundzError parsing Excel: )r   fullname	full_namecustomer_name)r    phonemobilenumberphone_numbermobile_number)openpyxlload_workbookioBytesIO
sheetnames	iter_rowsnextStopIterationstrstrip	enumerateloweranyjoinlistlenappendclose	Exception)r   wbws	rows_iter
header_rowcheadersname_column_indexcontact_column_indexiheaderr#   rowlstr   r    er   s   &                @r   workbook_bytes_to_contact_rowsrN   	   s   >H##BJJz$:dVZ[a !LLTL2		FiJ EOOJq]3q6<<>:JO!"7+IA--/Js_,^_sss_,^___$%!s 

sss 

 
 
 ()$ ," "&:b&@5KdiiX_N`` 
 *,C{s)C:KcRUh:V[^[q[}3s-.446  DFD (#c(2s7P7\ C-.446 
 wwy' BC  	
ug/LMM t-c(m_IF3x=W
 	
a  	Fug/DEE	F Ph  H5'-B1#+FGGHs   AJ I3 'J +'J
AJ (J J J *J 
/J :BJ J 0J J !J 3JJ JJ J-J("J-(J-)
__future__r   r0   typingr   r.   rN   r
   r   r   <module>rQ      s    " 	  BHr   