§
    éƒtjÀ0  ã                  óx  — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 ddlmZmZ ddlmZmZ dd	lmZ e G d
„ d¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         Z ej        d¦  «        Z ej        d¦  «        Z ej        d¦  «        Zd'd„Zd(d„Zd)d„Zd*d"„Zd+d&„ZdS ),z:Typed extraction into FDI line items, assertions, parties.é    )ÚannotationsN)Ú	dataclassÚfield)ÚPath)ÚAny)ÚClassificationÚclassify_document)ÚFoundIdentifierÚextract_identifiers)ÚDocTypec                  ó  — e Zd ZU dZded<   dZded<   dZded<   dZded	<   dZded
<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<    ee¬¦  «        Zded<   dS )ÚExtractedLineNz
int | NoneÚpage_noÚrow_idxú
str | NoneÚ
event_dateÚ ÚstrÚdescription_rawÚdescription_normúfloat | NoneÚamountÚdebitÚcreditÚbalance_afterÚunknownÚ	directionÚcurrencyÚcounterparty_nameÚcategoryÚotherÚevent_classçffffffæ?ÚfloatÚ
confidence©Údefault_factoryzdict[str, Any]Úextras)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__r   r   r   r   r   r   r   r   r   r   r   r    r"   r%   r   Údictr(   © ó    ú+/var/www/html/CA-Chatbot/app/fdi/extract.pyr   r      s1  € € € € € € à€GÐÐÐÑØ€GÐÐÐÑØ!€JÐ!Ð!Ð!Ñ!Ø€OÐÐÐÑØÐÐÐÐÑØ€FÐÐÐÑØ€EÐÐÐÑØ€FÐÐÐÑØ"&€MÐ&Ð&Ð&Ñ&Ø€IÐÐÐÑØ€HÐÐÐÑØ$(ÐÐ(Ð(Ð(Ñ(Ø€HÐÐÐÑØ€KÐÐÐÑØ€JÐÐÐÑØ"˜U°4Ð8Ñ8Ô8€FÐ8Ð8Ð8Ñ8Ð8Ð8r/   r   c                  óx   — e Zd ZU ded<   ded<   dZded<   dZded<   dZded	<   dZded
<   dZded<   dZ	ded<   dS )ÚExtractedAssertionr   ÚkindÚlabelNr   Úvalue_numericr   Ú
value_textÚunitr   Ú	extractedÚsourceçš™™™™™é?r$   r%   )
r)   r*   r+   r,   r5   r6   r7   r   r9   r%   r.   r/   r0   r2   r2   #   sŠ   € € € € € € à€I€I�IØ€J€J�JØ"&€MÐ&Ð&Ð&Ñ&Ø!€JÐ!Ð!Ð!Ñ!Ø€DÐÐÐÑØ€HÐÐÐÑØ€FÐÐÐÑØ€JÐÐÐÑÐÐr/   r2   c                  óà   — e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<    ee¬¦  «        Zded<   dZded <   dS )!ÚStructuredExtractr   Údoc_typer$   Údoc_type_confidencer   Úsource_typeÚboolÚocr_usedÚparse_confidenceÚintÚ
page_countr   Úcurrency_primaryÚperiod_startÚ
period_endÚissuer_nameÚholder_namezlist[ExtractedLine]Úlineszlist[ExtractedAssertion]Ú
assertionszlist[FoundIdentifier]Úidentifierszlist[tuple[str, str]]ÚpartiesÚdocument_textr&   z	list[str]ÚwarningsNzClassification | NoneÚclassification)r)   r*   r+   r,   r   ÚlistrO   rP   r.   r/   r0   r<   r<   /   sû   € € € € € € àÐÐÑØÐÐÑØÐÐÑØ€N€N�NØÐÐÑØ€O€O�OØ Ð Ð Ñ ØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ(Ð(Ð(Ñ(Ø&Ð&Ð&Ñ&Ø"Ð"Ð"Ñ"ØÐÐÑØ˜%°Ð5Ñ5Ô5€HÐ5Ð5Ð5Ñ5Ø,0€NÐ0Ð0Ð0Ñ0Ð0Ð0r/   r<   z«(?i)(?:account\s+holder|customer\s+name|employee\s+name|insured|policy\s+holder|name\s+of\s+(?:the\s+)?(?:customer|account\s+holder))\s*[:\-]\s*([A-Za-z][A-Za-z .']{2,60})zm(?i)(?:bank\s+name|issued\s+by|insurer|employer|sold\s+by|from)\s*[:\-]\s*([A-Za-z0-9][A-Za-z0-9 .,&']{2,60})u°   (?i)(?:statement\s+period|period|from)\s*[:\-]?\s*([0-9]{1,2}[\s\-/][A-Za-z]{3,9}[\s\-/']?[0-9]{2,4}).{0,20}?(?:to|[-â€“])\s*([0-9]{1,2}[\s\-/][A-Za-z]{3,9}[\s\-/']?[0-9]{2,4})Útextr   Úreturnc                ój   — t          j        dd| pd                     ¦   «         ¦  «        }|d d…         S )Nz\s+Ú r   iô  )ÚreÚsubÚstrip)rR   Úts     r0   Ú
_norm_descrZ   V   s2   € Ý
Œˆv�s˜T˜Z R×.Ò.Ñ0Ô0Ñ1Ô1€AØˆTˆcˆTŒ7€Nr/   Údescriptionr   c                óœ   — | pd}t          j        d|¦  «        }|r0|                     d¦  «                             d¦  «        d d…         S d S )Nr   z‡(?i)(?:paid\s+to|sent\s+to|received\s+from|transfer(?:red)?\s+to|neft-|imps-|upi-|bought\s+from)\s*([A-Za-z0-9][A-Za-z0-9 &.'\-]{1,50})é   z -éP   )rV   ÚsearchÚgrouprX   )r[   ÚdÚms      r0   Ú_guess_counterpartyrc   [   s\   € ØÐ�r€AÝ
Œ	ð	Rà	ñ	ô 	€Að
 	ð +Ø�wŠw�q‰zŒz×Ò Ñ%Ô% c r cÔ*Ð*Øˆ4r/   r   r   r   r   útuple[str, float | None]c                ó  — | r| dk    rdt          | ¦  «        fS |r|dk    rdt          |¦  «        fS |€dS |dk     rdt          t          |¦  «        ¦  «        fS |dk    rdt          t          |¦  «        ¦  «        fS dS )Nr   ÚoutÚin)r   Nr   )Úneutralg        )r$   Úabs)r   r   r   s      r0   Ú_direction_from_rowrj   g   s—   € Øð #�˜’�Ø•e˜E‘l”lÐ"Ð"Øð #�&˜1’*�*Ø•U˜6‘]”]Ð"Ð"Ø€~ØˆØ�‚z€zØ•c�% ™-œ-Ñ(Ô(Ð(Ð(Ø�‚z€zà�#�e F™mœmÑ,Ô,Ð,Ð,Øˆ>r/   r=   r   c                óÆ   — |pd                      ¦   «         }| dv rdS | dk    rdS | dk    rdS | dk    sd	|v rd	S | d
v sd|v sd|v rdS d|v sd|v rdS |dk    rdS |dk    rdS dS )Nr   >   ÚbillÚinvoiceÚpurchase_orderÚinvoice_lineÚpayslipÚsalaryÚinsurance_policyÚpremiumÚloan_statementÚemi>   Ú
gst_returnÚtax_documentÚgstÚtdsÚtaxÚtransferÚselfrg   Úreceiptrf   Úpaymentr!   )Úlower)r=   r[   r   Úlows       r0   Ú_event_class_forr�   v   sÁ   € ØÐ˜"×
#Ò
#Ñ
%Ô
%€CØÐ8Ð8Ð8Øˆ~Ø�9ÒÐØˆxØÐ%Ò%Ð%ØˆyØÐ#Ò#Ð# u° | |ØˆuØÐ1Ð1Ð1°U¸c°\°\ÀUÈcÀ\À\ØˆuØ�SÐÐ˜F c˜M˜MØˆzØ�DÒÐØˆyØ�EÒÐØˆyØˆ7r/   Úpathr   Úfilenamec                ó$  — ddl m}  || |¬¦  «        }|j        p|j        pd}t	          ||¬¦  «        }|j        dk    r|j        dk    rt          dddd	¦  «        }|j        d
k    r|j        dk    rt          d
ddd	¦  «        }|j        dk    rGt          j	        d|› d|dd…         › �¦  «        r%t          dt          d|j        ¦  «        dd¦  «        }g }t          |j        pg ¦  «        D �]j\  }}|j        }	|j        }
|j        }t#          |	|
|¦  «        \  }}|dk    ri|�g|dk     rdt%          |¦  «        }}|}	nM|dk    rG|
sE|	sCt          j	        d|j        pd¦  «        rdt)          |¦  «        }}|}
ndt)          |¦  «        }}|}	|j        p|j        pd}t-          |¦  «        }|�|dk    r|	s|
sd}d}|	�|	dk    rd}	|
�|
dk    rd}
|	€|
€|�|dk    r|	s|
s
|s|dk    rd}|                     t1          d||j        |t5          |¦  «        ||	|
|d|t7          |j        ||¦  «        |j        rdnd|j        r	d|j        ini ¬¦  «        ¦  «         �Œlg }|j        pi }|                     d¦  «        �;|                     tA          ddt)          |d         ¦  «        ddd ¬!¦  «        ¦  «         |                     d"¦  «        �;|                     tA          d#d$t)          |d"         ¦  «        ddd ¬!¦  «        ¦  «         |                     d%¦  «        �;|                     tA          d&d't)          |d%         ¦  «        d(dd ¬)¦  «        ¦  «         |                     d*¦  «        �;|                     tA          d+d,t)          |d*         ¦  «        d(dd ¬)¦  «        ¦  «         tC          d-„ |D ¦   «         ¦  «        sUtE          d.„ |D ¦   «         ¦  «        }|dk    r6|                     tA          dd/tG          |d0¦  «        dd1d2¬!¦  «        ¦  «         tC          d3„ |D ¦   «         ¦  «        sUtE          d4„ |D ¦   «         ¦  «        }|dk    r6|                     tA          d#d5tG          |d0¦  «        dd1d2¬!¦  «        ¦  «         d}tH           	                    |¦  «        }|r'| %                    d6¦  «         &                    ¦   «         }d}tN           	                    |dd7…         ¦  «        }|r'| %                    d6¦  «         &                    ¦   «         }dx}}tP           	                    |dd8…         ¦  «        }|rN| %                    d6¦  «         &                    ¦   «         | %                    d0¦  «         &                    ¦   «         }}tS          |¦  «        }g }|r|                     d9|f¦  «         |r|                     d:|f¦  «         |D ]%}|j*        r|                     d;|j*        f¦  «         Œ&d<}|                     d%¦  «        }|r[|rY	 tW          d<tY          d=„ |D ¦   «         ¦  «        t          t)          |¦  «        d6¦  «        z  ¦  «        }n# tZ          $ r d>}Y nw xY w|j        rd?nd}|d>d>|z  z   z  }|j        dk    r|dz  }t]          |j/        pg ¦  «        }|r:|r8|d?k     r2|                     d@|› dAtY          dB„ |D ¦   «         ¦  «        › �¦  «         ta          di dC|j        “dD|j        “dE|j1        “dFte          |j3        ¦  «        “dGtG          |dH¦  «        “dIti          |j5        pi                      dJ¦  «        pd¦  «        “dKd“dL|“dM|“dN|“dO|“dP|“dQ|“dR|“dS|“dT|ddU…         “dV|“dW|“Ž} ddXl6m7}!  |!| ¦  «        S )YzILayout-lite extract using existing PDF pipeline + identifier/party layer.r   )Úextract_pdf)rƒ   r   Úbank_statementr   r#   r.   )Úlegacy_kindÚbalance_sheetg      è?z (?i)\b(upi|paytm|phonepe|gpay)\bÚ
NiÐ  Úupi_statementr:   )Ú
upi_refinerf   z(?i)\breceived|credit|from\brg   i@KL rh   ÚINRgš™™™™™á?Úaccount)r   r   r   r   r   r   r   r   r   r   r   r"   r%   r(   Ú	money_outÚtotal_spendzTotal money outÚheadergÍÌÌÌÌÌì?)r3   r4   r5   r   r9   r%   Úmoney_inÚtotal_incomezTotal money inÚpayments_madeÚpayment_countzPayments madeÚcount)r3   r4   r5   r7   r9   r%   Úpayments_receivedÚreceipt_countzPayments receivedc              3  ó,   K  — | ]}|j         d k    V — ŒdS )r�   N©r3   ©Ú.0Úas     r0   ú	<genexpr>z%extract_structured.<locals>.<genexpr>  s)   è è € Ð;Ð;¨1ˆqŒv˜Ò&Ð;Ð;Ð;Ð;Ð;Ð;r/   c              3  ó\   K  — | ]'}|j         pd d k    ¯t          |j         pd ¦  «        V — Œ(dS ©r   N)r   r$   ©r›   Úxs     r0   r�   z%extract_structured.<locals>.<genexpr>  s@   è è € ÐOÐO¨a¸Q¼W¸\ÈÈQÒ<NÐ<N•e˜AœG˜L qÑ)Ô)Ð<NÐ<NÐ<NÐ<NÐOÐOr/   zSum of outflow linesé   Úsum_of_rowsgÍÌÌÌÌÌä?c              3  ó,   K  — | ]}|j         d k    V — ŒdS )r’   Nr™   rš   s     r0   r�   z%extract_structured.<locals>.<genexpr>  s)   è è € Ð<Ð<¨AˆqŒv˜Ò'Ð<Ð<Ð<Ð<Ð<Ð<r/   c              3  ó\   K  — | ]'}|j         pd d k    ¯t          |j         pd ¦  «        V — Œ(dS rŸ   )r   r$   r    s     r0   r�   z%extract_structured.<locals>.<genexpr>  s@   è è € ÐPÐP¨a¸Q¼X¸]ÈÈaÒ<OÐ<O•U˜1œ8˜= qÑ)Ô)Ð<OÐ<OÐ<OÐ<OÐPÐPr/   zSum of inflow linesr]   i¸  i   ÚpersonÚorganizationÚmerchantg      ð?c                ó(   — g | ]}|j         d k    ¯|‘ŒS ©rf   ©r   r    s     r0   ú
<listcomp>z&extract_structured.<locals>.<listcomp>=  s$   € Ð$NÐ$NÐ$N¨1¸¼ÈÒ9MÐ9M QÐ9MÐ9MÐ9Mr/   g      à?g333333ë?z#Coverage gap: header payments_made=z, extracted_outflows=c                ó(   — g | ]}|j         d k    ¯|‘ŒS rª   r«   r    s     r0   r¬   z&extract_structured.<locals>.<listcomp>I  s$   € Ð=Ð=Ð=˜!¨¬°uÒ(<Ð(<�AÐ(<Ð(<Ð(<r/   r=   r>   r?   rA   rB   é   rD   ÚpagesrE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   i † rO   rP   )Úapply_type_enrichment)8Úapp.pdf.extractr…   rN   Útext_previewr	   Údocument_kindr=   r   rV   r_   Úmaxr%   Ú	enumerateÚrowsr   r   r   rj   ri   r[   r$   Úrawrc   Úappendr   ÚdaterZ   r�   Útrustedr�   Ústatement_totalsÚgetr2   ÚanyÚsumÚroundÚ
_HOLDER_REr`   rX   Ú
_ISSUER_REÚ
_PERIOD_REr   r   ÚminÚlenÚ	ExceptionrQ   rO   r<   r?   r@   rA   rC   Ú
validationÚapp.fdi.extractorsr°   )"r‚   rƒ   r…   ÚresultrR   rP   rJ   ÚiÚrowr   r   r   r   ÚamtÚdescÚcounterpartyrK   ÚtotalsÚout_sumÚin_sumÚholderrb   ÚissuerrF   rG   ÚidsrM   ÚlineÚcoverageÚheader_countrB   rO   Úbaser°   s"                                     r0   Úextract_structuredrØ   ‹   sÓ	  € à+Ð+Ð+Ð+Ð+Ð+àˆ[˜¨Ð1Ñ1Ô1€FØÔÐ< 6Ô#6Ð<¸"€DÝ& t°hÐ?Ñ?Ô?€Nð ÔÐ/Ò/Ð/°NÔ4KÈyÒ4XÐ4XÝ'Ð(8¸#¸rÐCSÑTÔTˆØÔ˜Ò.Ð.°>Ô3JÈiÒ3WÐ3WÝ'¨¸¸rÐCSÑTÔTˆð ÔÐ"2Ò2Ð2µr´yØ+°Ð-IÐ-I¸DÀÀ$À¼KÐ-IÐ-Iñ8ô 8Ð2õ (¨½¸SÀ.ÔB[Ñ9\Ô9\Ð^`ÐbqÑrÔrˆà!#€EÝ˜FœKÐ-¨2Ñ.Ô.ð 3
ñ 3
‰ˆˆ3Ø”	ˆØ”ˆØ”ˆÝ,¨U°F¸FÑCÔC‰ˆ	�3à˜	Ò!Ð! fÐ&8Ø˜ŠzˆzØ!&­¨F©¬˜3�	Ø��Ø˜!’� F�°5�å”9Ð<¸c¼oÐ>SÐQSÑTÔTð  Ø%)­5°©=¬=˜s�IØ �F�Fà%*­E°&©M¬M˜s�IØ�EØŒÐ/ #¤'Ð/¨RˆÝ*¨4Ñ0Ô0ˆàˆ?˜s iÒ/Ð/¸Ð/À&Ð/ØˆCØ!ˆIØÐ ¨)Ò!3Ð!3ØˆEØÐ &¨IÒ"5Ð"5ØˆFØˆM˜f˜n°°Ø˜Ò"Ð"¨EÐ"°VÐ"¸sÐ"ð ˜IÒ%Ð%Ø%�	Ø�ŠÝØØØœ8Ø $Ý!+¨DÑ!1Ô!1ØØØØ#ØØ".Ý,¨^Ô-DÀdÈIÑVÔVØ#)¤>Ð;˜4˜4°tØ36´;ÐF˜	 3¤;Ð/Ð/ÀBðñ ô ñ	
ô 	
ð 	
ñ 	
ð& ,.€JØÔ$Ð*¨€FØ‡z‚z�+ÑÔÐ*Ø×ÒÝØ"Ø'Ý# F¨;Ô$7Ñ8Ô8ØØØðñ ô ñ		
ô 		
ð 		
ð ‡z‚z�*ÑÔÐ)Ø×ÒÝØ#Ø&Ý# F¨:Ô$6Ñ7Ô7ØØØðñ ô ñ		
ô 		
ð 		
ð ‡z‚z�/Ñ"Ô"Ð.Ø×ÒÝØ$Ø%Ý# F¨?Ô$;Ñ<Ô<ØØØðñ ô ñ		
ô 		
ð 		
ð ‡z‚zÐ%Ñ&Ô&Ð2Ø×ÒÝØ$Ø)Ý# FÐ+>Ô$?Ñ@Ô@ØØØðñ ô ñ		
ô 		
ð 		
õ Ð;Ð;°
Ð;Ñ;Ô;Ñ;Ô;ð ÝÐOÐO°5ÐOÑOÔOÑOÔOˆØ�QŠ;ˆ;Ø×ÒÝ"Ø&Ø0Ý"'¨°Ñ"3Ô"3Ø"Ø(Ø#ðñ ô ñ	ô 	ð 	õ Ð<Ð<°Ð<Ñ<Ô<Ñ<Ô<ð ÝÐPÐP°5ÐPÑPÔPÑPÔPˆØ�AŠ:ˆ:Ø×ÒÝ"Ø'Ø/Ý"'¨°Ñ"2Ô"2Ø"Ø(Ø#ðñ ô ñ	ô 	ð 	ð €FÝ×Ò˜$ÑÔ€AØð $Ø—’˜‘”×!Ò!Ñ#Ô#ˆØ€FÝ×Ò˜$˜u ˜uœ+Ñ&Ô&€AØð $Ø—’˜‘”×!Ò!Ñ#Ô#ˆà $Ð$€L�:Ý×Ò˜$˜u ˜uœ+Ñ&Ô&€AØð JØ#$§7¢7¨1¡:¤:×#3Ò#3Ñ#5Ô#5°q·w²w¸q±z´z×7GÒ7GÑ7IÔ7I�jˆå
˜dÑ
#Ô
#€CØ%'€GØð +Ø�Š˜ &Ð)Ñ*Ô*Ð*Øð 1Ø�Š˜¨Ð/Ñ0Ô0Ð0Øð Að AˆØÔ!ð 	AØ�NŠN˜J¨Ô(>Ð?Ñ@Ô@Ð@øð €HØ—:’:˜oÑ.Ô.€LØð ˜ð ð	Ý˜3¥Ð$NÐ$N°Ð$NÑ$NÔ$NÑ OÔ OÕRUÕV[Ð\hÑViÔViÐklÑRmÔRmÑ mÑnÔnˆHˆHøÝð 	ð 	ð 	ØˆHˆHˆHð	øøøà%œ~Ð7�t�t°4ÐØ˜˜c H™nÑ,Ñ,ÐØÔ )Ò+Ð+Ø˜CÑÐå�F”OÐ) rÑ*Ô*€HØð 
˜ð 
 (¨T¢/ /Ø�ŠðA°,ð Að AÝÐ=Ð=˜uÐ=Ñ=Ô=Ñ>Ô>ðAð Añ	
ô 	
ð 	
õ
 ð ð ð ØÔ(Ð(ðà*Ô5Ð5ðð Ô&Ð&ðõ �f”oÑ&Ô&Ð&ð	õ
 Ð/°Ñ3Ô3Ð3ðõ ˜Ô)Ð/¨R×4Ò4°WÑ=Ô=ÐBÀÑCÔCÐCðð ˜ðð "�\ðð �:ðð �Fðð �Fðð ˆeðð �:ðð �Cðð �ðð  ˜7˜F˜7”m�mð!ð" �ð#ð$ &�~ð%€Dð( 9Ð8Ð8Ð8Ð8Ð8à Ð  Ñ&Ô&Ð&s   ØAY ÙY&Ù%Y&)rR   r   rS   r   )r[   r   rS   r   )r   r   r   r   r   r   rS   rd   )r=   r   r[   r   r   r   rS   r   )r‚   r   rƒ   r   rS   r<   )Ú__doc__Ú
__future__r   rV   Údataclassesr   r   Úpathlibr   Útypingr   Úapp.fdi.classifyr   r	   Úapp.fdi.identifiersr
   r   Úapp.fdi.typesr   r   r2   r<   ÚcompilerÀ   rÁ   rÂ   rZ   rc   rj   r�   rØ   r.   r/   r0   ú<module>râ      s  ðØ @Ð @à "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ !Ð !Ð !Ð !Ð !Ð !ð ð9ð 9ð 9ð 9ð 9ñ 9ô 9ñ „ð9ð& ðð ð ð ð ñ ô ñ „ðð ð1ð 1ð 1ð 1ð 1ñ 1ô 1ñ „ð1ð* ˆRŒZð#ñô €
ð
 ˆRŒZð+ñô €
ð ˆRŒZð;ñô €
ðð ð ð ð
	ð 	ð 	ð 	ðð ð ð ðð ð ð ð*W'ð W'ð W'ð W'ð W'ð W'r/   