File size: 3,842 Bytes
f1441ea 01497d7 1b01d21 f1441ea 01497d7 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 f1441ea 1b01d21 |
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
from huggingface_hub import InferenceClient
import re
# Initialize hosted inference client
client = InferenceClient(model="google/flan-t5-base")
# Simulated chart of accounts mapping
account_map = {
"rent": "60001",
"utilities": "60002",
"capital": "30000",
"cash": "10001",
"bank": "10002",
"sales": "40001",
"supplies": "50001",
"salary": "50002"
}
# Simulated business segments
segment = {
"company": "01",
"business_type": "102",
"location": "001",
"cost_center": "001",
"future": "000"
}
# Session state to store entries
if "gl_entries" not in st.session_state:
st.session_state.gl_entries = []
def parse_prompt(prompt):
return client.text_generation(prompt=f"Extract accounting entry: {prompt}", max_new_tokens=50).strip()
def handle_gl_entry(prompt):
prompt_lower = prompt.lower()
amount = 0
account_name = ""
# Extract amount using regex
amount_match = re.search(r'(\d{1,3}(,\d{3})*|\d+)(\.\d{1,2})?', prompt)
if amount_match:
amount = float(amount_match.group().replace(',', ''))
# Identify transaction type
if any(word in prompt_lower for word in ["invest", "capital", "start"]):
account_name = "capital"
description = "Owner Capital Contribution"
debit_account = "cash"
credit_account = account_name
elif "rent" in prompt_lower:
account_name = "rent"
description = "Rent Expense"
debit_account = account_name
credit_account = "cash"
elif "utilities" in prompt_lower:
account_name = "utilities"
description = "Utilities Expense"
debit_account = account_name
credit_account = "cash"
elif any(word in prompt_lower for word in ["sale", "revenue"]):
account_name = "sales"
description = "Sales Revenue"
debit_account = "cash"
credit_account = account_name
elif "supplies" in prompt_lower:
account_name = "supplies"
description = "Supplies Purchase"
debit_account = account_name
credit_account = "cash"
elif "salary" in prompt_lower or "payroll" in prompt_lower:
account_name = "salary"
description = "Salary Expense"
debit_account = account_name
credit_account = "cash"
else:
description = "Unrecognized Entry"
return pd.DataFrame([{"Date": "2025-04-01", "Description": description, "Account Code": "N/A", "Debit": 0, "Credit": 0}])
debit_code = f"{segment['company']}-{segment['business_type']}-{segment['location']}-{segment['cost_center']}-{account_map[debit_account]}-{segment['future']}"
credit_code = f"{segment['company']}-{segment['business_type']}-{segment['location']}-{segment['cost_center']}-{account_map[credit_account]}-{segment['future']}"
entry = [
{
"Date": "2025-04-01",
"Description": description,
"Account Code": debit_code,
"Debit": amount,
"Credit": 0
},
{
"Date": "2025-04-01",
"Description": f"Offset for {description.lower()}",
"Account Code": credit_code,
"Debit": 0,
"Credit": amount
}
]
st.session_state.gl_entries.extend(entry)
return pd.DataFrame(entry)
# Streamlit UI
st.title("AI ERP Chat - MVP")
prompt = st.text_input("Enter your accounting instruction:")
delete_records = st.button("Delete All Records")
if delete_records:
st.session_state.gl_entries = []
st.success("All records have been deleted.")
if prompt:
result = handle_gl_entry(prompt)
st.dataframe(result)
# Show saved entries
if st.session_state.gl_entries:
st.subheader("All Recorded Entries")
st.dataframe(pd.DataFrame(st.session_state.gl_entries))
|