File size: 4,831 Bytes
b54df69
 
54e2f2a
0b8b44d
73327e8
 
 
 
 
 
 
 
 
0b8b44d
f97539d
0b8b44d
73327e8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f97539d
73327e8
 
 
 
 
 
 
646e5e3
f97539d
73327e8
 
 
 
 
 
 
f97539d
 
 
 
 
 
 
 
73327e8
 
 
 
 
 
 
6e66646
73327e8
 
 
 
f97539d
73327e8
 
 
 
 
 
54e2f2a
43ecdc4
f97539d
646e5e3
 
 
54e2f2a
 
635a76a
4aa29f9
 
f97539d
 
4aa29f9
 
 
 
 
 
 
 
 
 
0b8b44d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d6e934d
54e2f2a
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
109
110
111
112
113
114
115
116
117
118
119
120
121
import streamlit as st
import pandas as pd
import openai
import requests

# Streamlit App
def main():
    st.title("Invoice Interest Calculator and Conversation")

    # Prompt user for OpenAI API key
    api_key = st.text_input("Enter your OpenAI API key:")

    if api_key:
        # Download BOE rates
        download_boe_rates()

        # Allow user to upload Excel sheet
        uploaded_file = st.file_uploader("Upload Excel file", type=["xlsx", "xls"])

        if uploaded_file is not None:
            df = pd.read_excel(uploaded_file)

            # Display uploaded data
            st.write("Uploaded Data:")
            st.write(df)

            # Analyze Excel sheet
            due_dates, payment_dates, amounts = analyze_excel(df)

            # Allow user to specify late interest rate
            late_interest_rate = st.number_input("Enter Late Interest Rate (%):", min_value=0.0, max_value=100.0, step=0.1)

            # Calculate late interest if due dates and payment dates are available
            if due_dates and payment_dates:
                # Create DataFrame with extracted due dates, payment dates, and placeholder amount
                df_calculate = pd.DataFrame({
                    'due_date': due_dates,
                    'payment_date': payment_dates,
                    'amount': amounts
                })

                # Calculate late interest
                df_with_interest = calculate_late_interest(df_calculate, late_interest_rate)

                # Display calculated late interest
                total_late_interest = df_with_interest['late_interest'].sum()
                st.write("Calculated Late Interest:")
                st.write(total_late_interest)

            # Generate conversation prompt
            prompt = "I have analyzed the provided Excel sheet. "
            if due_dates:
                prompt += f"The due dates in the sheet are: {', '.join(str(date) for date in due_dates)}. "
            if payment_dates:
                prompt += f"The payment dates in the sheet are: {', '.join(str(date) for date in payment_dates)}. "
            if amounts:
                prompt += f"The amounts in the sheet are: {', '.join(str(amount) for amount in amounts)}. "
            prompt += "Based on this information, what would you like to discuss?"

            # Allow user to engage in conversation
            user_input = st.text_input("Start a conversation:")
            if st.button("Send"):
                openai.api_key = api_key  # Set user-provided OpenAI API key
                
                completion = openai.ChatCompletion.create(
                    model="gpt-4-turbo",
                    messages=[
                        {"role": "system", "content": prompt},
                        {"role": "user", "content": user_input}
                    ],
                    max_tokens=1800 
                )
                response = completion.choices[0].message['content']
                st.write("AI's Response:")
                st.write(response)
    else:
        st.warning("Please enter your OpenAI API key.")

# Function to calculate late interest
def calculate_late_interest(data, late_interest_rate):
    # Calculate late days and late interest
    data['late_days'] = (data['payment_date'] - data['due_date']).dt.days.clip(lower=0)
    data['late_interest'] = data['late_days'] * data['amount'] * (late_interest_rate / 100)
    return data

# Function to analyze Excel sheet and extract relevant information
def analyze_excel(df):
    # Extract due dates and payment dates
    due_dates = df.iloc[:, 0].dropna().tolist()
    payment_dates = df.iloc[:, 1].dropna().tolist()
    amounts = []

    # Extract and clean amounts from third column
    for amount in df.iloc[:, 2]:
        if isinstance(amount, str):
            amount = amount.replace('"', '').replace(',', '')
        amounts.append(float(amount))

    return due_dates, payment_dates, amounts

# Function to download Bank of England rates
def download_boe_rates():
    try:
        headers = {
            'accept-language': 'en-US,en;q=0.9',
            'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
        }
        url = 'https://www.bankofengland.co.uk/boeapps/database/Bank-Rate.asp'
        response = requests.get(url, headers=headers)
        if response.status_code == 200:
            df = pd.read_html(response.text)[0]
            df.to_csv('boe_rates.csv', index=False)
            st.success("Bank of England rates downloaded successfully.")
        else:
            st.error("Failed to retrieve data from the Bank of England website.")
    except requests.RequestException as e:
        st.error(f"Failed to download rates: {e}")

if __name__ == "__main__":
    main()