§
    éƒtj2  ã                  ób  — U d Z ddlmZ ddlZddlmZ ddlmZmZ  ed¬¦  «         G d„ d	¦  «        ¦   «         Z	d
d ej
        d¦  «        fdd ej
        d¦  «        fdd ej
        d¦  «        fdd ej
        d¦  «        fdd ej
        d¦  «        fdd ej
        d¦  «        fdd ej
        d¦  «        fdd ej
        d¦  «        fd d ej
        d!¦  «        fd"d ej
        d#¦  «        fd$d ej
        d%¦  «        fd&d ej
        d'¦  «        fd(d ej
        d)¦  «        fd*d ej
        d+¦  «        fd,d ej
        d-¦  «        fd.d ej
        d/¦  «        fd0d ej
        d1¦  «        fd2d3 ej
        d4¦  «        fd5d6 ej
        d7¦  «        fd8d9 ej
        d:¦  «        fgZd;ed<<   dCdDdB„ZdS )EuE   Document type classification â€” rules first, extensible to ML later.é    )ÚannotationsN)Ú	dataclass)Ú	DOC_TYPESÚDocTypeT)Úfrozenc                  ó@   — e Zd ZU ded<   ded<   dZded<   dZded	<   d
S )ÚClassificationr   Údoc_typeÚfloatÚ
confidence© ztuple[tuple[str, float], ...]Úalternativesztuple[str, ...]ÚreasonsN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r   r   r   ó    ú,/var/www/html/CA-Chatbot/app/fdi/classify.pyr	   r	      sL   € € € € € € àÐÐÑØÐÐÑØ24€LÐ4Ð4Ð4Ñ4Ø!€GÐ!Ð!Ð!Ñ!Ð!Ð!r   r	   Úupi_statementgÍÌÌÌÌÌì?z>(?i)\b(upi\s+statement|paytm|phonepe|google\s*pay|gpay|bhim)\bÚcredit_card_statementg)\�Âõ(ì?zK(?i)\b(credit\s+card\s+statement|card\s+statement|minimum\s+amount\s+due)\bÚbank_statementg333333ë?zX(?i)\b(bank\s+statement|passbook|account\s+statement|ifsc|neft|imps|savings\s+account)\bÚ
gst_returngq=
×£pí?zK(?i)\b(gstr[\s\-]?[1239][a-z]?|gst\s+return|goods\s+and\s+services\s+tax)\bÚinvoiceg…ëQ¸…ë?zF(?i)\b(tax\s+invoice|invoice\s+no|bill\s+to|place\s+of\s+supply|hsn)\bÚbillç      è?z8(?i)\b(utility\s+bill|electricity\s+bill|water\s+bill)\bÚpayslipzW(?i)\b(payslip|pay\s+slip|salary\s+slip|net\s+pay|earneds?\s+leave|pf\s+contribution)\bÚtax_documentzY(?i)\b(form\s*16|form\s*26as|income\s+tax\s+return|itr[\s\-]?[123vv]|tds\s+certificate)\bÚmutual_fund_casz[(?i)\b(consolidated\s+account\s+statement|cas\b|folio\s*(?:no|number)|amfi|mutual\s+fund)\bÚinsurance_policyzX(?i)\b(policy\s+(?:no|number|schedule)|sum\s+assured|premium\s+due|insurance\s+policy)\bÚloan_statementzO(?i)\b(loan\s+account|emi\s+schedule|outstanding\s+principal|amorti[sz]ation)\bÚbalance_sheetzW(?i)\b(balance\s+sheet|assets\s+and\s+liabilit|statement\s+of\s+financial\s+position)\bÚprofit_and_losszX(?i)\b(profit\s+(?:and|&)\s+loss|statement\s+of\s+profit|income\s+statement|p\s*&\s*l)\bÚ	cash_flowz?(?i)\b(cash\s+flow\s+statement|statement\s+of\s+cash\s+flows)\bÚgeneral_ledgerz:(?i)\b(general\s+ledger|g\/?l\s+report|account\s+ledger)\bÚtrial_balancez(?i)\b(trial\s+balance)\bÚpurchase_orderz/(?i)\b(purchase\s+order|p\.?\s*o\.?\s*number)\bÚexpense_reportgáz®Gáê?z0(?i)\b(expense\s+report|reimbursement\s+claim)\bÚreceiptçš™™™™™é?zG(?i)\b(payment\s+receipt|official\s+receipt|received\s+with\s+thanks)\bÚannual_reportg=
×£p=ê?z8(?i)\b(annual\s+report|form\s*10[\-\s]?k|sec\s+filing)\bz,list[tuple[DocType, float, re.Pattern[str]]]Ú_RULESÚ ÚtextÚstrÚfilenameÚreturnc           
     óÈ  — |› d| pdd d…         › �}d„ t           D ¦   «         }g }t          D ][\  }}}|                     |¦  «        r@t          ||         |¦  «        ||<   |                     |› d|j        d d…         › �¦  «         Œ\|pd                     ¦   «         }d|v sd|v sd	|v rt          |d
         d¦  «        |d
<   d|v rt          |d         d¦  «        |d<   d|v sd|v rt          |d         d¦  «        |d<   d|v sd|v rt          |d         d¦  «        |d<   t          d„ |                     ¦   «         D ¦   «         d„ ¬¦  «        }	|	st          dddd¦  «        S |	d         \  }
}t          |	dd…         ¦  «        }|r(|d         d         |dz
  k    rt          d|dz
  ¦  «        }t          |
t          |¦  «        |t          |d d …         ¦  «        ¦  «        S )!NÚ
r-   ià.  c                ó   — i | ]}|d “ŒS )g        r   )Ú.0Úts     r   ú
<dictcomp>z%classify_document.<locals>.<dictcomp>-   s   € Ð:Ð:Ð:¨1  3Ð:Ð:Ð:r   ú:é(   ÚupiÚpaytmÚphoneper   r*   r   r   r   ÚsalaryÚgstrÚgstr   c              3  ó<   K  — | ]\  }}|d k    ¯|dk    ¯||fV — ŒdS )r   ÚunknownNr   )r5   r6   Úss      r   ú	<genexpr>z$classify_document.<locals>.<genexpr>A   s6   è è € ÐGÐG‘D�A�q¨a°!ªe¨e¸¸Yº¸ˆ!ˆQˆ¸¸¸¸ÐGÐGr   c                ó   — | d          S )Né   r   )Úxs    r   ú<lambda>z#classify_document.<locals>.<lambda>B   s   € �q˜”t�e€ r   )ÚkeyrA   gš™™™™™É?r   )Úno_rule_matchr   rE   é   gš™™™™™©?gš™™™™™á?gš™™™™™¹?é   )r   r,   ÚsearchÚmaxÚappendÚpatternÚlowerÚsortedÚitemsr	   Útupler   )r.   r0   ÚblobÚscoresr   r
   ÚweightrO   ÚfnÚrankedÚ	best_typeÚ
best_scoreÚaltss                r   Úclassify_documentr\   +   s?  € ØÐ0Ð0˜4˜: 2 v¨ vÔ.Ð0Ð0€DØ:Ð:µ	Ð:Ñ:Ô:€FØ€Gå%+ð Að AÑ!ˆ�&˜'Ø�>Š>˜$ÑÔð 	AÝ" 6¨(Ô#3°VÑ<Ô<ˆF�8ÑØ�NŠN˜hÐ?Ð?¨¬¸¸"¸Ô)=Ð?Ð?Ñ@Ô@Ð@øð ˆ.�b×	Ò	Ñ	!Ô	!€BØ�€{€{�g �m�m y°B  Ý"% f¨_Ô&=¸sÑ"CÔ"CˆˆÑØ�B€€Ý  yÔ 1°4Ñ8Ô8ˆˆyÑØ�B€€˜( b˜.˜.Ý  yÔ 1°3Ñ7Ô7ˆˆyÑØ�€|€|�u �{�{Ý" 6¨,Ô#7¸Ñ>Ô>ˆˆ|ÑåØGÐG˜FŸLšL™NœNÐGÑGÔGØˆOðñ ô €Fð ð FÝ˜i¨¨bÐ2DÑEÔEÐEà" 1œIÑ€IˆzÝ�˜˜!˜”ÑÔ€Dàð 1��Q”˜”
˜j¨4Ñ/Ò/Ð/Ý˜˜z¨CÑ/Ñ0Ô0ˆ
Ý˜)¥U¨:Ñ%6Ô%6¸½eÀGÈBÈQÈBÄKÑ>PÔ>PÑQÔQÐQr   )r-   )r.   r/   r0   r/   r1   r	   )Ú__doc__Ú
__future__r   ÚreÚdataclassesr   Úapp.fdi.typesr   r   r	   Úcompiler,   r   r\   r   r   r   ú<module>rc      sð  ðØ KÐ KÐ Kà "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ð €�$ÐÑÔð"ð "ð "ð "ð "ñ "ô "ñ Ôð"ð �c˜:˜2œ:Ð&gÑhÔhÐiØ˜d J B¤JÐ/}Ñ$~Ô$~ÐØ�t˜Z˜RœZð  )Dñ  Eô  Eð  FØ�4˜˜œÐ$rÑsÔsÐtØ��j�b”jÐ!jÑkÔkÐlØˆT�:�2”:ÐYÑZÔZÐ[Ø��Z�R”ZÐ zÑ{Ô{Ð|Ø�T˜:˜2œ:ð  'Cñ  Dô  Dð  EØ˜˜j˜bœjð  *Hñ  Iô  Ið  JØ˜˜z˜rœzð  +Fñ   Gô   Gð  HØ�t˜Z˜RœZÐ(zÑ{Ô{Ð|Ø�c˜:˜2œ:ð  'Añ  Bô  Bð  CØ˜˜Z˜RœZð  )Dñ  Eô  Eð  FØ�$˜
˜œ
Ð#eÑfÔfÐgØ�t˜Z˜RœZÐ(eÑfÔfÐgØ�c˜:˜2œ:Ð&BÑCÔCÐDØ�t˜Z˜RœZÐ(ZÑ[Ô[Ð\Ø�t˜Z˜RœZÐ([Ñ\Ô\Ð]Ø��Z�R”ZÐ jÑkÔkÐlØ�d˜J˜BœJÐ'bÑcÔcÐdð)8€ð ð ð ñ ð0!Rð !Rð !Rð !Rð !Rð !Rð !Rr   