Spaces:
Build error
Build error
import streamlit as st | |
from utils.logger import setup_logger | |
import pandas as pd | |
from PIL import Image | |
import os | |
logger = setup_logger(__name__) | |
def prune_payslip_for_display(analysis_results_for_id): | |
data_to_display = {} | |
data_to_display["document_category"] = "income_document" | |
data_to_display["document_type"] = "payslip" | |
data_to_display["employee_name"] = analysis_results_for_id.get( | |
"employee_name", None) | |
data_to_display["employer_name"] = analysis_results_for_id.get( | |
"employer_name", None) | |
data_to_display["employee_id"] = analysis_results_for_id.get( | |
"employee_id", None) | |
data_to_display["employee_address"] = analysis_results_for_id.get( | |
"employee_address", None) | |
data_to_display["employer_address"] = analysis_results_for_id.get( | |
"employer_address", None) | |
data_to_display["tax_code"] = analysis_results_for_id.get( | |
"tax_code", None) | |
data_to_display["payslip_date"] = analysis_results_for_id.get( | |
"payslip_date", None) | |
data_to_display["pay_period_start"] = analysis_results_for_id.get( | |
"pay_period_start", None) | |
data_to_display["pay_period_end"] = analysis_results_for_id.get( | |
"pay_period_end", None) | |
data_to_display["payment_frequency"] = analysis_results_for_id.get( | |
"payment_frequency", None) | |
data_to_display["basic_pay"] = analysis_results_for_id.get( | |
"basic_pay", None) | |
data_to_display["net_pay"] = analysis_results_for_id.get( | |
"net_pay", None) | |
data_to_display["gross_pay"] = analysis_results_for_id.get( | |
"gross_pay", None) | |
data_to_display["salary_components"] = analysis_results_for_id.get( | |
"salary_components", None) | |
data_to_display["ni_contribution"] = analysis_results_for_id.get( | |
"ni_contribution", None) | |
data_to_display["tax_deduction"] = analysis_results_for_id.get( | |
"tax_deduction", None) | |
data_to_display["other_deductions"] = analysis_results_for_id.get( | |
"other_deductions", None) | |
return data_to_display | |
def display_payslip(extracted_files, analysis_results_pruned): | |
col1, col2 = st.columns([2, 3]) | |
logger.info(f"file_path while displaying: {extracted_files}") | |
st.markdown("---") | |
with col1: | |
if len(extracted_files) > 1: | |
st.image(extracted_files, caption=[os.path.basename( | |
img) for img in extracted_files], use_container_width=True) | |
else: | |
image = Image.open(extracted_files[0]) | |
st.image(image, caption=os.path.basename( | |
extracted_files[0])) # , | |
# use_container_width=True) | |
logger.info( | |
f"analysis_results_pruned : {analysis_results_pruned}") | |
with col2: | |
dict_str = {} | |
for key, value in analysis_results_pruned.items(): | |
if key not in ['other_deductions', 'salary_components']: | |
dict_str[key] = value | |
simple_df = pd.DataFrame.from_dict( | |
dict_str, | |
orient='index', columns=['Value']).reset_index() | |
simple_df.columns = ['Key', 'Value'] | |
simple_df = simple_df.fillna(value="Missing") | |
simple_df.index += 1 | |
st.dataframe(simple_df, use_container_width=True) | |
st.markdown("Other Deductions") | |
other_deductions_dict = analysis_results_pruned['other_deductions'] | |
logger.info(f"other_deductions_dict : {other_deductions_dict}") | |
try: | |
# Flatten the nested list structure | |
flat_list = [] | |
for sublist in other_deductions_dict: | |
for item in sublist: | |
if isinstance(item, list): | |
flat_list.extend(item) | |
elif isinstance(item, dict): | |
flat_list.append(item) | |
# Filter and format into dataframe if valid | |
if flat_list and isinstance(flat_list[0], dict) and 'name' in flat_list[0] and 'amount' in flat_list[0]: | |
df = pd.DataFrame(flat_list) | |
df.columns = ['Key', 'Value'] | |
df = df.fillna(value="Missing") | |
df.index += 1 | |
st.dataframe(df, use_container_width=True) | |
else: | |
raise ValueError("Data is not in expected dictionary format.") | |
except Exception as e: | |
logger.info(f"Different format for other deductions: {e}") | |
st.dataframe(other_deductions_dict) | |
logger.info(f"simple_df: {simple_df}") | |