Spaces:
Running
Running
| 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() | |