o
    =i`!                     @   s  d dl mZmZmZmZmZ d dlmZ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 dZed	d
gdZejdededddedddedddedededededfdedededee dededee dee fddZdee dee defddZd d l mZmZ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 ejd#ededd$dedfd%ee dee fd&d'ZdS )(    )	APIRouter
UploadFileFileFormHTTPException)ListOptionalN)CreditEvaluationResponseV2CompanyConsistencySummary)	DATA_ROOT)normalize_name)run_credit_pipeline)      -   z/credit-scorezCredit Scoring)prefixtagsz/evaluate/v2)response_model.zNome da empresa)descriptionZNUITzMeses de atividadeinput_company_name
input_nuitinput_meses_atividadefaturamento_mensalvalor_credito
prazo_diasdocument_types	documentsc                 C   s   |t vrtddtt  dt||d}|d }	|d }
|d }|d }|d	}d
}|D ]}t|di p7i }|drC|d } nq.t|
j|d |
j|	j	|	j
|	j|rat|d |d |d dnd
|	j|	j|d|d|dS )u   
    Avaliação de crédito baseada exclusivamente nos documentos fornecidos.
    Os campos textuais do formulário são ignorados na análise.
    i  zprazo_dias deve ser um de status_codedetail)r   r   decisionscoreriskr   company_consistencyNfeaturesbank_statement_features
risk_classstatusconfidence_scorealertsr'   r(   r)   recommended_max_valuerecommended_term_daysr!   r&   
confidencer    approved_amountapproved_term_daysr#   reasonsflagsr+   r,   bank_statement_summary)ALLOWED_TERMSr   list _execute_pipeline_only_documentsgetgetattrr	   r!   r.   r    r/   r0   r
   r1   r2   )r   r   r   r   r   r   r   r   payloadr    r!   r"   documents_resultr#   r3   rbf r=   2/var/www/Credit_scoring_API/api/routers/scoring.pyevaluate_credit_v2   sR   

r?   returnc              	   C   s  t | t |krtdddddl}ddlm} ddl}ddl}|| d|t	|
    }|jddd	 g }t| |D ]5\}}	|	jsJqB|| d
|	j  }
t|
d}||	j| W d   n1 skw   Y  |t	|
 qB|stdddt|dddddddS )u   
    Versão do pipeline que utiliza APENAS os documentos.
    Os dados textuais não são passados adiante; a pipeline interna
    deve ser capaz de extrair todas as informações necessárias dos arquivos.
      z.Cada documento deve ter um tipo correspondenter   r   NPathZcredit_docs_T)parentsexist_ok_wbu$   Nenhum documento válido foi enviado         r   filesr   r   r   r   r   r   )lenr   tempfilepathlibrC   hashlibshutil
gettempdirmd5strencode	hexdigestmkdirzipfilenameopencopyfileobjfileappendr   )r   r   rM   rC   rO   rP   Ztemp_dirZsaved_pathsZdoc_typer[   Z	file_pathbufferr=   r=   r>   r6   Q   s>   
(r6   )r   r   r   Query)r   rB   z/evaluate/v2/from-pathsz-Caminhos absolutos dos documentos no servidordocument_pathsc                 C   sF  t |t | krtdddg }| D ]}t|}| r | s)tdd| d|t| qt|dddddd	d
}|d }|d }|d }|d }	|d}
d}|	D ]}t	|di p^i }|drj|d } nqU|j
}|j}|dkrwd}t||d |j||j|j|
rt|
d |
d |
d dnd|j|j|d|d|dS )u   
    Avaliação de crédito baseada exclusivamente em documentos já existentes no servidor.
    Os caminhos dos arquivos são passados via query parameter.
    Os campos tradicionais (input_company_name, input_nuit, etc.) são ignorados.
    rA   uF   O número de tipos de documento deve ser igual ao número de caminhos.r   u7   Arquivo não encontrado ou não é um arquivo válido: rH   Nr   rI   r   rJ   r    r!   r"   r   r#   r$   r%   ZRECUSADOr&   r'   r(   r)   r*   r+   r,   r-   )rL   r   rC   existsis_filer\   rS   r   r7   r8   r    r!   r	   r.   r/   r0   r
   r1   r2   )r_   r   Zvalid_pathspath_strpr9   r    r!   r"   r:   r#   r3   r;   r<   Zdecision_strZscore_valuer=   r=   r>   evaluate_credit_v2_from_paths   sv   

rd   ) fastapir   r   r   r   r   typingr   r   rP   Zapi.schemasr	   r
   Z
api.configr   Zapi.utils.storager   Zsrc.app.pipeliner   r4   routerpostrS   intfloatr?   dictr6   r^   rN   rC   rd   r=   r=   r=   r>   <module>   sn    


B
5
