Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from process import process,process_using_llm | |
| import os | |
| import shutil | |
| import PyPDF2 | |
| TEMP_DIR = "temp_files" | |
| st.set_page_config(layout="wide",page_title="KYC Doc AI") | |
| def cleanup_temp_files(): | |
| try: | |
| if os.path.exists(TEMP_DIR): | |
| # Remove all files in TEMP_DIR | |
| shutil.rmtree(TEMP_DIR) | |
| print(f"Temporary files in {TEMP_DIR} have been deleted.") | |
| # Re-create the temp directory after cleanup | |
| os.makedirs(TEMP_DIR) | |
| except Exception as e: | |
| print(f"An error occurred during cleanup: {e}") | |
| def extract_pages(input_pdf_path, output_pdf_path, start_page=None, end_page=None): | |
| try: | |
| # Open the PDF file | |
| with open(input_pdf_path, 'rb') as input_pdf: | |
| reader = PyPDF2.PdfReader(input_pdf) | |
| total_pages = len(reader.pages) | |
| # Create a PDF writer object for the new PDF | |
| writer = PyPDF2.PdfWriter() | |
| # Default: extract only the first page if no specific input is provided | |
| if start_page is None and end_page is None: | |
| start_page, end_page = 0, 0 | |
| # Special case: if user specifies 0 for start_page and -1 for end_page | |
| # Extract the first and last page only | |
| if start_page == 0 and end_page == -1: | |
| writer.add_page(reader.pages[0]) # First page | |
| writer.add_page(reader.pages[-1]) # Last page | |
| # If only first page is required | |
| elif start_page == 0 and end_page == 0: | |
| writer.add_page(reader.pages[0]) # First page | |
| else: | |
| print("Invalid input. Only first page or (first and last page) extraction is allowed.") | |
| return | |
| # Write the combined PDF to a new file | |
| with open(output_pdf_path, 'wb') as output_pdf: | |
| writer.write(output_pdf) | |
| print(f"PDF saved as {output_pdf_path}") | |
| except Exception as e: | |
| print(f"An error occurred: {e}") | |
| def merge_dicts_by_aadhaar(data): | |
| new_dic = {} | |
| for dic in data: | |
| aadhar = dic.get("Aadhaar Number") | |
| aadhar = aadhar.replace(" ", "") | |
| if aadhar in new_dic: | |
| if dic.get('Gender') and dic.get('Date of birth'): | |
| new_dic[aadhar]['Gender'] = dic.get('Gender', None) | |
| new_dic[aadhar]['Date of birth'] = dic.get('Date of birth', None) | |
| new_dic[aadhar]['Name'] = dic.get('Name', None) | |
| new_dic[aadhar]['Aadhaar Number'] = dic.get('Aadhaar Number', None).replace(" ", "") | |
| else: | |
| new_dic[aadhar]['Address'] = dic.get('Address', None) | |
| else: | |
| new_dic[aadhar] = {} | |
| if dic.get('Gender') and dic.get('Date of birth'): | |
| new_dic[aadhar]['Gender'] = dic.get('Gender', None) | |
| new_dic[aadhar]['Date of birth'] = dic.get('Date of birth', None) | |
| new_dic[aadhar]['Name'] = dic.get('Name', None) | |
| new_dic[aadhar]['Aadhaar Number'] = dic.get('Aadhaar Number', None).replace(" ", "") | |
| else: | |
| new_dic[aadhar]['Address'] = dic.get('Address', None) | |
| new_data = [] | |
| for key in new_dic: | |
| new_data.append(new_dic[key]) | |
| return new_data | |
| def process_uploads(uploaded_files): | |
| try: | |
| company_name=None | |
| company_name_legal=None | |
| company_trade_name=None | |
| gst_number=None | |
| pan_number_company=None | |
| coi_number=None | |
| director_names=[] | |
| extracted_results={} | |
| gst_dict={} | |
| pan_dict={} | |
| coi_dict={} | |
| moa_dict={} | |
| aoa_dict={} | |
| add_dict={} | |
| share_dict={} | |
| total_pan_number=0 | |
| total_company_names=0 | |
| total_coi_numbers=0 | |
| if not os.path.exists(TEMP_DIR): | |
| os.makedirs(TEMP_DIR) | |
| # director pans: -> can be individual files, single file | |
| director_pans=uploaded_files.get('director_pans',None) | |
| if director_pans: | |
| director_pan_data=[] | |
| for pan in director_pans: | |
| file_path = os.path.join(TEMP_DIR, pan.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(pan.getbuffer()) | |
| ocr_data=process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| dict=process_using_llm(content,"pan_user") | |
| if dict: | |
| director_pan_data.append(dict) | |
| for pan_data in director_pan_data: | |
| if "Name" in pan_data: | |
| director_names.append(pan_data.get('Name').strip().lower()) | |
| extracted_results['Pan Cards of Directors']=director_pan_data | |
| director_aadhars=uploaded_files.get("director_aadhars",None) | |
| if director_aadhars: | |
| director_aadhars_data=[] | |
| for aadhar in director_aadhars: | |
| file_path = os.path.join(TEMP_DIR, aadhar.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(aadhar.getbuffer()) | |
| ocr_data = process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| dict = process_using_llm(content, "aadhar_user") | |
| if dict: | |
| director_aadhars_data.append(dict) | |
| director_aadhars_data_new=merge_dicts_by_aadhaar(director_aadhars_data) | |
| for direc_adhar in director_aadhars_data_new: | |
| if "Name" in direc_adhar: | |
| name=direc_adhar.get('Name').strip().lower() | |
| if name not in director_names: | |
| director_names.append(name) | |
| extracted_results["Aadhaar Cards of Directors"]=director_aadhars_data_new | |
| gst_cert=uploaded_files.get('gst_certificate',None) | |
| if gst_cert: | |
| file_path = os.path.join(TEMP_DIR, gst_cert.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(gst_cert.getbuffer()) | |
| ocr_data = process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| gst_dict = process_using_llm(content, "gst") | |
| if "Legal Name" in gst_dict: | |
| company_name_legal=gst_dict.get('Legal Name','').strip() | |
| elif "Trade Name" in gst_dict: | |
| company_trade_name=gst_dict.get('Trade Name','').strip() | |
| if "Registration Number"in gst_dict: | |
| gst_number=gst_dict.get('Registration Number').strip() | |
| if company_name_legal or company_trade_name: | |
| total_company_names+=1 | |
| company_pan = uploaded_files.get('company_pan',None) | |
| if company_pan: | |
| file_path = os.path.join(TEMP_DIR, company_pan.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(company_pan.getbuffer()) | |
| ocr_data = process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| pan_dict = process_using_llm(content, "company_pan") | |
| if "Company Name" in pan_dict: | |
| name=pan_dict.get("Company Name").strip() | |
| company_name=name | |
| total_company_names+=1 | |
| if "PAN Number" in pan_dict: | |
| pan_number_company=pan_dict.get('PAN Number').strip() | |
| total_pan_number+=1 | |
| coi = uploaded_files.get('coi',None) | |
| if coi: | |
| file_path = os.path.join(TEMP_DIR, coi.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(coi.getbuffer()) | |
| ocr_data = process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| coi_dict = process_using_llm(content, "coi") | |
| if "Company Name" in coi_dict: | |
| name=coi_dict.get("Company Name").strip() | |
| company_name=name | |
| total_company_names+=1 | |
| if "Corporate Identity Number" in coi_dict: | |
| coi_number=coi_dict.get("Corporate Identity Number").strip() | |
| total_coi_numbers+=1 | |
| if "PAN Number" in coi_dict: | |
| total_pan_number+=1 | |
| pan_number_company=coi_dict.get("PAN Number").strip() | |
| aoa = uploaded_files.get('aoa',None) | |
| if aoa: | |
| file_path = os.path.join(TEMP_DIR, aoa.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(aoa.getbuffer()) | |
| extract_pages(file_path,file_path,0,-1) | |
| ocr_data = process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| aoa_dict = process_using_llm(content, "aoa") | |
| if "Share Holders" in aoa_dict: | |
| share_holders=aoa_dict.get("Share Holders",[]) | |
| aoa_dict["Share Holders"]=",".join(share_holders) | |
| moa = uploaded_files.get('moa',None) | |
| if moa: | |
| file_path = os.path.join(TEMP_DIR, moa.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(moa.getbuffer()) | |
| extract_pages(file_path, file_path,0,-1) | |
| ocr_data = process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| moa_dict = process_using_llm(content, "moa") | |
| if "Share Holders" in moa_dict: | |
| share_holders=moa_dict.get("Share Holders",[]) | |
| moa_dict["Share Holders"]=",".join(share_holders) | |
| share=uploaded_files.get('share',None) | |
| if share: | |
| file_path = os.path.join(TEMP_DIR, share.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(share.getbuffer()) | |
| ocr_data = process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| share_dict = process_using_llm(content, "share") | |
| if "Share Holders" in share_dict: | |
| share_holders=share_dict.get("Share Holders",[]) | |
| share_dict["Share Holders"]=",".join(share_holders) | |
| if "Corporate Identity Number" in share_dict: | |
| coi_number=share_dict.get('Corporate Identity Number').strip() | |
| total_coi_numbers+=1 | |
| address_proof = uploaded_files.get('address_proof', None) | |
| if address_proof: | |
| file_path = os.path.join(TEMP_DIR, address_proof.name) | |
| with open(file_path, "wb") as temp_file: | |
| temp_file.write(address_proof.getbuffer()) | |
| extract_pages(file_path, file_path) | |
| ocr_data = process(file_path) | |
| content = "" | |
| for page_num, text in ocr_data.items(): | |
| content += text + '\n' | |
| add_dict = process_using_llm(content, "stamp") | |
| if "Stamp Duty" in add_dict: | |
| duty=add_dict.get("Stamp Duty",None) | |
| if duty>=100: | |
| add_dict['Valid Stamp']="Yes" | |
| subword = "nota" | |
| if subword in content.lower(): | |
| add_dict['Notary Stamp']="Present" | |
| extracted_results['Address Proof Details(Non Judicial Stamp)']=add_dict | |
| if company_name is not None or company_name_legal is not None or company_trade_name is not None: | |
| if total_company_names>1: | |
| if pan_dict: | |
| name=pan_dict.get("Company Name",None) | |
| if name and (name.strip() == company_name or name.strip() == company_name_legal or name.strip() == company_trade_name): | |
| pan_dict['Is Company Matching']="Yes" | |
| else: | |
| pan_dict['Is Company Matching']="No" | |
| if coi_dict: | |
| name = coi_dict.get("Company Name",None) | |
| if name and (name.strip() == company_name or name.strip() == company_name_legal or name.strip() == company_trade_name): | |
| coi_dict['Is Company Matching'] = "Yes" | |
| else: | |
| coi_dict['Is Company Matching'] = "No" | |
| if gst_dict: | |
| name1 = gst_dict.get("Legal Name",None) | |
| name2 = gst_dict.get("Trade Name",None) | |
| if name1 and (name1.strip() == company_name or name1.strip() == company_name_legal or name1.strip() == company_trade_name): | |
| gst_dict['Is Company Matching'] = "Yes" | |
| elif name2 and (name2.strip() == company_name or name2.strip() == company_name_legal or name2.strip() == company_trade_name): | |
| gst_dict['Is Company Matching'] = "Yes" | |
| else: | |
| gst_dict['Is Company Matching']="No" | |
| if moa_dict: | |
| name = moa_dict.get("Company Name", None) | |
| if name and (name.strip() == company_name or name.strip() == company_name_legal or name.strip() == company_trade_name): | |
| moa_dict['Is Company Matching'] = "Yes" | |
| else: | |
| moa_dict['Is Company Matching'] = "No" | |
| if aoa_dict: | |
| name = moa_dict.get("Company Name", None) | |
| if name and (name.strip() == company_name or name.strip() == company_name_legal or name.strip() == company_trade_name): | |
| moa_dict['Is Company Matching'] = "Yes" | |
| else: | |
| moa_dict['Is Company Matching'] = "No" | |
| if share_dict: | |
| name = share_dict.get("Company Name",None) | |
| if name and (name.strip() == company_name or name.strip() == company_name_legal or name.strip() == company_trade_name): | |
| share_dict['Is Company Matching'] = "Yes" | |
| else: | |
| share_dict['Is Company Matching'] = "No" | |
| else: # if total count is less than or equal to 1 then we cannot validate | |
| if pan_dict: | |
| pan_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if coi_dict: | |
| coi_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if gst_dict: | |
| gst_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if aoa_dict: | |
| aoa_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if moa_dict: | |
| moa_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if share_dict: | |
| share_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| else: | |
| if pan_dict: | |
| pan_dict['More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if coi_dict: | |
| coi_dict['More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if gst_dict: | |
| gst_dict['More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if aoa_dict: | |
| aoa_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if moa_dict: | |
| moa_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if share_dict: | |
| share_dict[ | |
| 'More information needed to validate company name'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if pan_number_company is not None: | |
| if total_pan_number>1: | |
| if pan_dict: | |
| pan_number=pan_dict.get('PAN Number',None) | |
| if pan_number is not None and pan_number.strip()==pan_number_company: | |
| pan_dict['Is Company PAN Number Matching']="Yes" | |
| else: | |
| pan_dict['Is Company PAN Number Matching'] = "No" | |
| if coi_dict: | |
| pan_number = coi_dict.get('PAN Number',None) | |
| if pan_number is not None and pan_number.strip() == pan_number_company: | |
| coi_dict['Is Company PAN Number Matching'] = "Yes" | |
| else: | |
| coi_dict['Is Company PAN Number Matching'] = "No" | |
| else: | |
| if pan_dict: | |
| pan_dict[ | |
| 'More information needed to validate company PAN number'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if coi_dict: | |
| coi_dict[ | |
| 'More information needed to validate company PAN number'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| else: | |
| if pan_dict: | |
| pan_dict['More information needed to validate company PAN number'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if coi_dict: | |
| coi_dict['More information needed to validate company PAN number']= f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if coi_number is not None: | |
| if total_coi_numbers>1: | |
| if coi_dict: | |
| coi_number_check=coi_dict.get('Corporate Identity Number',None) | |
| if coi_number_check is not None and coi_number_check.strip()==coi_number: | |
| coi_dict['Is Corporate Identity Number Matching']="Yes" | |
| else: | |
| coi_dict['Is Corporate Identity Number Matching']="No" | |
| if share_dict: | |
| coi_number_check=share_dict.get('Corporate Identity Number',None) | |
| if coi_number_check is not None and coi_number_check.strip()==coi_number: | |
| share_dict['Is Corporate Identity Number Matching']="Yes" | |
| else: | |
| share_dict['Is Corporate Identity Number Matching'] = "No" | |
| else: | |
| if coi_dict: | |
| coi_dict[ | |
| 'More information needed to validate company COI number'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if share_dict: | |
| share_dict[ | |
| 'More information needed to validate company COI number'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| else: | |
| if coi_dict: | |
| coi_dict['More information needed to validate company COI number']=f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if share_dict: | |
| share_dict['More information needed to validate company COI number'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if "Names of directors" in gst_dict: | |
| gst_director_names = gst_dict.get("Names of directors", []) | |
| if gst_director_names: | |
| gst_dict["Names of directors"]=",".join(gst_director_names) | |
| missing_directors = [] | |
| gst_director_names_lower = [name.strip().lower() for name in gst_director_names] | |
| if director_names: | |
| for direc_name in director_names: | |
| if direc_name not in gst_director_names_lower: | |
| missing_directors.append(direc_name) | |
| if not missing_directors: | |
| gst_dict["All director names present?"] = "<span style='color: green;'><strong>Yes</strong></span>" | |
| else: | |
| # List missing director names in red | |
| missing_directors_text = ', '.join( | |
| [f"<span style='color: red;'>{name}</span>" for name in missing_directors]) | |
| gst_dict["All director names present?"] = f"<span style='color: red;'><strong>No</strong></span> (Missing: {missing_directors_text})" | |
| else: | |
| gst_dict['More information needed to validate Director names'] = f"<span style='color: #d4ac0d;'><strong>Yes</strong></span>" | |
| if pan_dict: | |
| extracted_results['Company PAN Details']=pan_dict | |
| if coi_dict: | |
| extracted_results['COI Details']=coi_dict | |
| if gst_dict: | |
| extracted_results['GST Certificate Details']=gst_dict | |
| if moa_dict: | |
| extracted_results['MOA Details']=gst_dict | |
| if aoa_dict: | |
| extracted_results['AOA Details']=aoa_dict | |
| if share_dict: | |
| extracted_results['Shareholding Details']=share_dict | |
| return extracted_results | |
| except Exception as e: | |
| print(f"error occured in processing files {e}") | |
| finally: | |
| cleanup_temp_files() | |
| def display_results_in_cards(extracted_results): | |
| col1, col2, col3 = st.columns(3) # Create three columns | |
| count = 0 # To keep track of the row/column positioning | |
| for key in extracted_results: | |
| # Determine which column to use (cycle through 3 columns) | |
| current_col = col1 if count % 3 == 0 else col2 if count % 3 == 1 else col3 | |
| with current_col: | |
| # Process director PAN data | |
| if key == "Pan Cards of Directors": | |
| d_pans = extracted_results[key] | |
| text = "" | |
| # Build the text for each director's PAN information | |
| for count, d_pan in enumerate(d_pans): | |
| text += f"<h4 style='color:black;'>Pan Information of Director {count + 1}</h4>" | |
| for key2 in d_pan: | |
| # Add each field to the text | |
| field_text = f"<strong style='color: #3498db;'>{key2}</strong>: {d_pan[key2]}<br>" | |
| text += field_text | |
| # Display in a custom card-like layout | |
| current_col.markdown(f""" | |
| <div style="border: 1px solid #ddd; padding: 15px; border-radius: 10px; margin-bottom: 20px; background-color: #f9f9f9; height: 250px; display: flex; flex-direction: column; justify-content: space-between;"> | |
| <div style="color: #333; height: 150px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #888 #ddd;"> | |
| <p>{text}</p> | |
| </div> | |
| </div> | |
| """, unsafe_allow_html=True) | |
| # Process director Aadhaar data | |
| elif key == "Aadhaar Cards of Directors": | |
| d_aadhars = extracted_results[key] | |
| text = "" | |
| for count, d_aadhar in enumerate(d_aadhars): | |
| text += f"<h4 style='color:black;'>Aadhaar Information of Director {count + 1}</h4>" | |
| for key2 in d_aadhar: | |
| field_text = f"<strong style='color: #3498db;'>{key2}</strong>: {d_aadhar[key2]}<br>" | |
| text += field_text | |
| current_col.markdown(f""" | |
| <div style="border: 1px solid #ddd; padding: 15px; border-radius: 10px; margin-bottom: 20px; background-color: #f9f9f9; height: 250px; display: flex; flex-direction: column; justify-content: space-between;"> | |
| <div style="color: #333; height: 230px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #888 #ddd;"> | |
| <p>{text}</p> | |
| </div> | |
| </div> | |
| """, unsafe_allow_html=True) | |
| # Process other documents and check for 'Yes'/'No' status | |
| else: | |
| data = extracted_results[key] | |
| text = f"<h4 style='color:black;'>{key}</h4>" | |
| for key2 in data: | |
| # Apply color and bold formatting for "Yes" and "No" values | |
| if key2 in ["Is Company Matching", "Is Corporate Identity Number Matching", | |
| "Is Company PAN Number Matching"]: | |
| if data[key2] == "Yes": | |
| field_text = f"<strong style='color: #3498db;'>{key2}</strong>: <strong><span style='color: green;'>{data[key2]}</span></strong><br>" | |
| elif data[key2] == "No": | |
| field_text = f"<strong style='color: #3498db;'>{key2}</strong>: <strong><span style='color: red;'>{data[key2]}</span></strong><br>" | |
| else: | |
| field_text = f"<strong style='color: #3498db;'>{key2}</strong>: {data[key2]}<br>" | |
| else: | |
| field_text = f"<strong style='color: #3498db;'>{key2}</strong>: {data[key2]}<br>" | |
| text += field_text | |
| current_col.markdown(f""" | |
| <div style="border: 1px solid #ddd; padding: 15px; border-radius: 10px; margin-bottom: 20px; background-color: #f9f9f9; height: 250px; display: flex; flex-direction: column; justify-content: space-between;"> | |
| <div style="color: #333; height: 230px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: #888 #ddd;"> | |
| <p>{text}</p> | |
| </div> | |
| </div> | |
| """, unsafe_allow_html=True) | |
| count += 1 | |
| def main(): | |
| if "submitted" not in st.session_state: | |
| st.session_state["submitted"] = False | |
| if not st.session_state["submitted"]: | |
| st.title("Welcome to KYC DOC AI") | |
| # Create a form to handle all file uploads and submission | |
| with st.form("kyc_form"): | |
| uploaded_files = {} | |
| # Director PAN Cards (Multiple files) | |
| director_pans = st.file_uploader("Upload PAN Cards of Directors", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=True) | |
| if director_pans: | |
| uploaded_files['director_pans'] = director_pans | |
| # Director Aadhar Cards (Multiple files) | |
| director_aadhars = st.file_uploader("Upload Aadhar Cards of Directors", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=True) | |
| if director_aadhars: | |
| uploaded_files['director_aadhars'] = director_aadhars | |
| # GST Certificate (Single file) | |
| gst_certificate = st.file_uploader("Upload GST Certificate", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=False) | |
| if gst_certificate: | |
| uploaded_files['gst_certificate'] = gst_certificate | |
| # Company PAN Card (Single file) | |
| company_pan = st.file_uploader("Upload PAN Card of Company", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=False) | |
| if company_pan: | |
| uploaded_files['company_pan'] = company_pan | |
| # Certificate of Incorporation (Single file) | |
| coi_certificate = st.file_uploader("Upload CERTIFICATE OF INCORPORATION", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=False) | |
| if coi_certificate: | |
| uploaded_files['coi'] = coi_certificate | |
| # AOA Document (Single file) | |
| aoa = st.file_uploader("Upload AOA document", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=False) | |
| if aoa: | |
| uploaded_files['aoa'] = aoa | |
| # COA Document (Single file) | |
| moa = st.file_uploader("Upload MOA document", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=False) | |
| if moa: | |
| uploaded_files['moa'] = moa | |
| # Shareholding Document (Single file) | |
| share = st.file_uploader("Upload Shareholding Document", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=False) | |
| if share: | |
| uploaded_files['share'] = share | |
| # Address Proof of Company Office (Single file) | |
| address = st.file_uploader("Upload Address Proof of Company Office", type=['png', 'jpg', 'jpeg', 'pdf'], accept_multiple_files=False) | |
| if address: | |
| uploaded_files['address_proof'] = address | |
| # Submit button for the form | |
| submitted = st.form_submit_button("Process Files") | |
| if submitted: | |
| with st.spinner('Processing files...'): | |
| extracted_results=process_uploads(uploaded_files) | |
| st.session_state["extracted_results"] = extracted_results | |
| st.session_state["submitted"] = True | |
| st.rerun() | |
| else: | |
| st.title("KYC Document Results") | |
| if "extracted_results" in st.session_state: | |
| extracted_results = st.session_state["extracted_results"] | |
| display_results_in_cards(extracted_results) | |
| if st.button("Back"): | |
| st.session_state["submitted"] = False | |
| st.rerun() | |
| if __name__ == "__main__": | |
| main() | |