File size: 4,981 Bytes
52c1998
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import streamlit as st
from utils.prep_validators_payload import process_extracted_data
import pandas as pd
from utils.logger import setup_logger
from utils.json_utils import DocumentTypeByCategory, extract_document_types_from_transformed

logger = setup_logger(__name__)

def validate_documents(current):
    st.header("Validation Results")

    # if current is not None:
        # if st.session_state['uploads'][current]['application_form'] is None:
        #     custom_app_form = {
        #         "application_summary_full_name": "Jodie Pippa",
        #         "application_summary_bank_name": "HSBC",
        #         "application_summary_employer_name": "ABC Ltd",
        #         "application_summary_complete_address": "123 Maple Street, London, UK, SW1A 1AA",
        #         "full_name_err_msgs": None,
        #         "bank_name_err_msgs": None,
        #         "employer_name_err_msgs": None,
        #         "complete_employee_address_err_msgs": None,
        #         "is_incomplete": False,
        #     }
        # else:
        #     custom_app_form = st.session_state['uploads'][current]['application_form'].set_index(0)[1].to_dict()

    # custom_app_form = CustomAppFormUpload.model_validate(
    #     uploaded_custom_form_dict).model_dump()
    current_upload = st.session_state.get('current_upload')
    if current_upload:

        if st.session_state['uploads'][current]['application_form'] is None:
            custom_app_form = {
                "application_summary_full_name": "Jodie Pippa",
                "application_summary_bank_name": "HSBC",
                "application_summary_employer_name": "ABC Ltd",
                "application_summary_complete_address": "123 Maple Street, London, UK, SW1A 1AA",
                "full_name_err_msgs": None,
                "bank_name_err_msgs": None,
                "employer_name_err_msgs": None,
                "complete_employee_address_err_msgs": None,
                "is_incomplete": False,
            }
        else:
            custom_app_form = st.session_state['uploads'][current]['application_form'].set_index(0)[1].to_dict()


        current_data = st.session_state['uploads'][current_upload]
        full_data = current_data['values_raw']
        full_data_transformed = current_data['results_transformed']
        logger.info(f"full_data : {full_data}")


        if full_data_transformed is not None:
            logger.info(f"full_data_transformed : {full_data_transformed}")
            full_data_transformed_categories = extract_document_types_from_transformed(full_data_transformed)
            global_validations = DocumentTypeByCategory.model_validate(full_data_transformed_categories).to_dataframe()
            st.markdown("## Document Type Upload validations")
            st.table(global_validations)
            st.markdown("---")

        if full_data is not None:
            validations, cross_docs_name_eq_check = process_extracted_data(full_data, custom_app_form, full_data_transformed)
            
            # st.markdown("## Document validations")
            # document_types_not_uploaded = set()
            # for key in validations:
            #     if not validations[key]:
            #         document_types_not_uploaded.add(key)
            # if document_types_not_uploaded:
            #     document_types_not_uploaded_list = list(document_types_not_uploaded)
            #     document_types_not_uploaded_list.sort()
            #     doc_types_not_uploaded_pts = "\n".join(
            #         [f"- {item}" for item in document_types_not_uploaded_list]
            #     )
            #     st.markdown(doc_types_not_uploaded_pts)
            # else:
            #     st.markdown("*All document types uploaded*")

            st.markdown("## Document validations")
            for k, v in validations.items():
                st.markdown(f"Validations: {k}")
                if len(v) > 0:
                    df = v[0]['validation_policy_status_df']
                    df.index += 1
                    logger.info(f"df: {df}")
                    df['Status'] = df['Status'].apply(lambda x: 'βœ…' if x  else '❌')


                    # df = pd.DataFrame(v).T
                    # st.dataframe(df, use_container_width=True)
                    for col in df.select_dtypes(include='object'):
                        df[col] = df[col].astype(str)
                    
                    st.table(df)

                # st.markdown(f"**RedFlag**: {v[0]['is_red_flagged']}")
                st.markdown("---")
            
            st.markdown("---")
            st.markdown("## General Guidance")
            cross_docs_name_eq_check_df = pd.DataFrame([cross_docs_name_eq_check])
            cross_docs_name_eq_check_df['Status'] = cross_docs_name_eq_check_df['Status'].apply(lambda x: 'βœ…' if x  else '❌')
            cross_docs_name_eq_check_df.index += 1
            st.table(cross_docs_name_eq_check_df)