Spaces:
Sleeping
Sleeping
import gradio as gr | |
import matplotlib.pyplot as plt | |
# Helper function to format INR values | |
def format_rupees(value): | |
inr = f"₹ {value:,.2f}" | |
if value >= 1e7: | |
cr = f" (₹ {value / 1e7:.2f} Cr)" | |
return inr + cr | |
return inr | |
def cmda_redevelopment_final_model( | |
uds, num_owners, total_fsi, guideline_value, market_rate, construction_cost | |
): | |
owner_fsi = 2.0 | |
premium_fsi = total_fsi - owner_fsi | |
# Area calculations | |
owner_total_area = owner_fsi * uds | |
builder_area = premium_fsi * uds | |
total_built_up_area = total_fsi * uds | |
# Premium FSI Charges | |
premium_fsi_charge = 0.4 * guideline_value * uds * premium_fsi | |
# Construction cost for entire built-up area | |
total_construction_cost = total_built_up_area * construction_cost | |
# Builder Revenue | |
builder_sale_value = builder_area * market_rate | |
# Builder Profit | |
builder_profit = builder_sale_value - total_construction_cost - premium_fsi_charge | |
# Owner share | |
uds_per_owner = uds / num_owners | |
owner_area_per_owner = owner_total_area / num_owners | |
# Chart | |
fig, ax = plt.subplots(figsize=(6, 4)) | |
labels = ['Owner Area (2.0x UDS)', f'Builder Area ({premium_fsi:.1f}x UDS)', 'Total Area'] | |
values = [owner_total_area, builder_area, total_built_up_area] | |
ax.bar(labels, values, edgecolor='black') | |
ax.set_ylabel("Area (sq.ft)") | |
ax.set_title("Redevelopment Share Breakdown") | |
plt.tight_layout() | |
# Output with formatted rupees | |
result = { | |
"Total UDS": f"{uds:.2f} sq.ft", | |
"Total Built-up Area (FSI × UDS)": f"{total_built_up_area:.2f} sq.ft", | |
"Owner Entitlement Area (2.0 × UDS)": f"{owner_total_area:.2f} sq.ft", | |
f"Builder Saleable Area ({premium_fsi:.1f} × UDS)": f"{builder_area:.2f} sq.ft", | |
"--- Builder Financials ---": "", | |
"Premium FSI Charges (0.4 × guideline × UDS × extra FSI)": format_rupees(premium_fsi_charge), | |
"Total Construction Cost (entire built-up area)": format_rupees(total_construction_cost), | |
"Builder Revenue (@ market rate)": format_rupees(builder_sale_value), | |
"Estimated Builder Profit": format_rupees(builder_profit), | |
"--- Owner Breakdown ---": "", | |
"Number of Owners": num_owners, | |
"UDS per Owner": f"{uds_per_owner:.2f} sq.ft", | |
"New Flat per Owner (2.0 × UDS)": f"{owner_area_per_owner:.2f} sq.ft" | |
} | |
return result, fig | |
# Gradio Interface | |
inputs = [ | |
gr.Number(label="Total UDS (in sq.ft)", value=450), | |
gr.Number(label="Number of Owners", value=4), | |
gr.Number(label="Total FSI (e.g., 2.8)", value=2.8, minimum=2.0, maximum=3.5, step=0.1), | |
gr.Number(label="Guideline Value (₹/sq.ft)", value=5000), | |
gr.Number(label="Market Rate (₹/sq.ft for builder sale)", value=9500), | |
gr.Number(label="Construction Cost (₹/sq.ft)", value=3500), | |
] | |
outputs = [ | |
gr.JSON(label="CMDA Redevelopment Report"), | |
gr.Plot(label="Redevelopment Share Chart") | |
] | |
app = gr.Interface( | |
fn=cmda_redevelopment_final_model, | |
inputs=inputs, | |
outputs=outputs, | |
title="CMDA Redevelopment Calculator (Fixed Owner FSI Model)", | |
description=( | |
"Owners receive flats at 2.0× their UDS. Builder gets only the premium FSI share, sells at market rate, " | |
"and bears full construction cost and premium FSI charges. Figures over ₹1 Cr are shown in crores." | |
) | |
) | |
if __name__ == "__main__": | |
app.launch() | |