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