File size: 2,263 Bytes
f4505cc
 
 
1f7ab52
b59b790
a577e2a
 
 
715f9f2
a577e2a
 
715f9f2
a577e2a
 
 
 
715f9f2
a577e2a
 
1aabc74
a577e2a
1f7ab52
a577e2a
1f7ab52
a577e2a
715f9f2
a577e2a
1f7ab52
a577e2a
 
 
 
 
715f9f2
a577e2a
 
 
 
 
715f9f2
a577e2a
 
 
f60182f
1f7ab52
 
 
 
 
 
 
 
 
a577e2a
 
b59b790
6b47695
fa3e758
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
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import io

def main():
    st.title("Financial Budget Planner 💰")
    st.write("Kelola keuanganmu dengan lebih baik!")
    
    # Input pemasukan
    income = st.number_input("Masukkan total pemasukan bulanan (Rp)", min_value=0, step=100000)
    
    # Input pengeluaran
    st.subheader("Pengeluaran Bulanan")
    categories = ["Makanan", "Transportasi", "Hiburan", "Tagihan", "Tabungan", "Lainnya"]
    expenses = {}
    
    for category in categories:
        expenses[category] = st.number_input(f"{category} (Rp)", min_value=0, step=50000)
    
    # Sisa saldo
    remaining_balance = income - sum(expenses.values())
    st.subheader("Ringkasan Keuangan")
    st.write(f"Total Pengeluaran: Rp {sum(expenses.values()):,}")
    st.write(f"Sisa Saldo: Rp {remaining_balance:,}")
    
    # Visualisasi data
    if sum(expenses.values()) > 0:
        df = pd.DataFrame(expenses.items(), columns=["Kategori", "Jumlah"])
        fig, ax = plt.subplots()
        ax.pie(df["Jumlah"], labels=df["Kategori"], autopct='%1.1f%%', startangle=90, colors=["#ff9999", "#66b3ff", "#99ff99", "#ffcc99", "#c2c2f0", "#ffb3e6"])
        ax.axis('equal')
        st.pyplot(fig)
    
    # Rekomendasi tabungan
    if income > 0:
        save_percentage = 20 if income > 5000000 else 10
        recommended_savings = income * save_percentage / 100
        st.write(f"💡 Rekomendasi: Sisihkan sekitar **{save_percentage}%** dari pemasukan untuk tabungan: Rp {recommended_savings:,}")
    
    # Notifikasi jika over budget
    if remaining_balance < 0:
        st.warning("⚠️ Pengeluaran lebih besar dari pemasukan! Pertimbangkan untuk mengurangi pengeluaran.")
    
    # Unduh laporan sebagai CSV
    if st.button("Unduh Laporan CSV"):
        df = pd.DataFrame(expenses.items(), columns=["Kategori", "Jumlah"])
        df.loc[len(df.index)] = ["Total Pengeluaran", sum(expenses.values())]
        df.loc[len(df.index)] = ["Pemasukan", income]
        df.loc[len(df.index)] = ["Sisa Saldo", remaining_balance]
        csv = df.to_csv(index=False).encode("utf-8")
        st.download_button("Download CSV", csv, "laporan_keuangan.csv", "text/csv")
    
if __name__ == "__main__":
    main()