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()