File size: 3,376 Bytes
9ca2045
 
 
af345e2
9ca2045
 
af345e2
9ca2045
 
2cd1572
9ca2045
 
 
 
 
 
 
 
 
 
 
 
 
093a834
2cd1572
9ca2045
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2cd1572
9ca2045
2cd1572
 
 
 
 
 
9ca2045
 
 
2cd1572
 
9ca2045
3e81c5f
2cd1572
 
 
9ca2045
2cd1572
 
 
 
9ca2045
 
 
 
 
2cd1572
 
9ca2045
 
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import gradio as gr
import pandas as pd
import numpy as np
import spaces


@spaces.GPU
def run_model(file):
    if file is None:
        return "Por favor, sube un archivo", "Por favor, sube un archivo", "Por favor, sube un archivo"
    # Placeholder prediction logic
    max_credit_limit = 87500
    mean_credit_limit = 42300
    min_credit_limit = 15000
    return (
        f"${max_credit_limit:,.0f}",
        f"${mean_credit_limit:,.0f}",
        f"${min_credit_limit:,.0f}",
    )


def load_fake_data():
    rng = np.random.default_rng(42)
    n = 10
    customer_names = [f"Cliente {i+1}" for i in range(n)]
    tax_ids = [f"{rng.integers(10, 99)}.{rng.integers(100, 999)}.{rng.integers(100, 999)}/0001-{rng.integers(10, 99)}" for _ in range(n)]
    mcust_no = [f"MC{rng.integers(100000, 999999)}" for _ in range(n)]
    credit_limit = rng.integers(5000, 95000, n)
    max_credit_limit = credit_limit + rng.integers(1000, 15000, n)
    min_credit_limit = credit_limit - rng.integers(1000, 10000, n)
    min_credit_limit = np.clip(min_credit_limit, 0, None)
    return pd.DataFrame({
        "customer_name": customer_names,
        "tax_id": tax_ids,
        "mcust_no": mcust_no,
        "credit_limit": credit_limit,
        "max_credit_limit": max_credit_limit,
        "min_credit_limit": min_credit_limit,
    })


with gr.Blocks(title="Modelo de Límite de Crédito - PowerBI (Proxy)") as demo:
    # ---------- Header ----------
    gr.Markdown("# Modelo de Límite de Crédito - Panel PowerBI (Proxy)")
    gr.Markdown("Usa este panel para:")
    gr.Markdown("(1) Predecir límites de crédito a partir de la plantilla Excel de crédito,")
    gr.Markdown("(2) Visualizar las predicciones actuales de límite de crédito en la base de clientes")
    gr.Markdown("🚩 **El modelo de crédito actual está limitado a clientes nuevos pequeños (con líneas de crédito esperadas por debajo de 100K).**")
    gr.Markdown("⚠️ **Esto es solo una muestra de prueba. El panel real de PowerBI aún está por desarrollarse**")
    gr.Markdown("---")

    # ---------- Section 1: New prediction ----------
    gr.Markdown("## Realizar una nueva predicción")
    gr.Markdown("Sube tu plantilla de Excel para analizar una empresa. ¡Esto ejecuta el modelo en tiempo real!")
    with gr.Row():
        with gr.Column():
            file_input = gr.File(label="Subir plantilla de Excel", file_types=[".xlsx", ".xls", ".xlsm"])
            run_button = gr.Button("Ejecutar Modelo")

        with gr.Column():
            gr.Markdown("### Resultados de la Predicción")
            max_out = gr.Textbox(label="Límite de Crédito Máximo", value="$XXX", interactive=False)
            mean_out = gr.Textbox(label="Límite de Crédito Promedio", value="$XXX", interactive=False)
            min_out = gr.Textbox(label="Límite de Crédito Mínimo", value="$XXX", interactive=False)

    run_button.click(fn=run_model, inputs=file_input, outputs=[max_out, mean_out, min_out])
    gr.Markdown("---")

    # ---------- Section 2: Past predictions ----------
    gr.Markdown("## Visualizar predicciones anteriores")
    gr.Markdown("Consulta las predicciones del modelo sobre la base de clientes actual. Usa los datos de Sharepoint de México, Brasil y MCA.")
    gr.Dataframe(value=load_fake_data(), interactive=False, wrap=True)

if __name__ == "__main__":
    demo.launch()