# antonmg4/tfm-precio-app architecture

> Architecture diagram of the GitHub repository antonmg4/tfm-precio-app, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/antonmg4/tfm-precio-app
- Repository: https://github.com/antonmg4/tfm-precio-app

## Overview

La aplicación permite a un anfitrión introducir los datos de un alojamiento nuevo, elegir o marcar su ubicación y obtener un precio recomendado, un rango habitual y una explicación de los factores que influyen. El flujo principal va del formulario y el mapa a la construcción del listing, y de ahí a dos cálculos del modelo: recomendación y explicación. El README describe esas salidas; los detalles del flujo se apoyan en el código muestreado. Las tablas y el modelo se agrupan como datos de referencia.

Main entry points: [`app.py`](https://github.com/antonmg4/tfm-precio-app/blob/main/app.py) (App Gradio), [`src/modelo.py`](https://github.com/antonmg4/tfm-precio-app/blob/main/src/modelo.py) (Modelo de precio), [`src/formulario.py`](https://github.com/antonmg4/tfm-precio-app/blob/main/src/formulario.py) (Formulario), [`src/mapa.py`](https://github.com/antonmg4/tfm-precio-app/blob/main/src/mapa.py) (Mapa interactivo)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Interfaz"]
  node_app["App Gradio<br/>[app.py]"]
  node_render["Resumen y gráfico<br/>[app.py]"]
end

subgraph group_inputs["Entrada del listing"]
  node_form["Formulario<br/>[formulario.py]"]
  node_map["Mapa interactivo<br/>[mapa.py]"]
  node_listing["Listing completo<br/>[formulario.py]"]
end

subgraph group_inference["Inferencia y resultados"]
  node_model["Modelo de precio<br/>[modelo.py]"]
  node_recommend["Precio y rango<br/>[modelo.py]"]
  node_explain["Factores explicativos<br/>[modelo.py]"]
end

subgraph group_assets["Modelo y referencias"]
  node_metadata["Metadatos variables"]
  node_modeldata["Modelo XGBoost<br/>[modelo_xgb.json]"]
  node_references["Tablas de referencia"]
end

node_host(("Anfitrión"))
node_tiles["Teselas del mapa"]

node_host -->|"usa"| node_app
node_app -->|"construye campos"| node_form
node_form -->|"lee metadatos"| node_metadata
node_app -->|"inicializa mapa"| node_map
node_map -.->|"solicita teselas"| node_tiles
node_map -->|"envía coordenadas"| node_app
node_app -->|"lee listing"| node_form
node_form -->|"construye"| node_listing
node_app -->|"recomienda precio"| node_model
node_app -->|"explica precio"| node_model
node_model -->|"carga modelo"| node_modeldata
node_model -->|"lee referencias"| node_references
node_model -->|"devuelve recomendación"| node_recommend
node_model -->|"devuelve explicación"| node_explain
node_app -->|"formatea resultados"| node_render
node_recommend -->|"muestra precio y rango"| node_render
node_explain -->|"genera gráfico"| node_render
node_render -->|"presenta resultados"| node_host

click node_app "https://github.com/antonmg4/tfm-precio-app/blob/main/app.py"
click node_form "https://github.com/antonmg4/tfm-precio-app/blob/main/src/formulario.py"
click node_map "https://github.com/antonmg4/tfm-precio-app/blob/main/src/mapa.py"
click node_listing "https://github.com/antonmg4/tfm-precio-app/blob/main/src/formulario.py"
click node_model "https://github.com/antonmg4/tfm-precio-app/blob/main/src/modelo.py"
click node_recommend "https://github.com/antonmg4/tfm-precio-app/blob/main/src/modelo.py"
click node_explain "https://github.com/antonmg4/tfm-precio-app/blob/main/src/modelo.py"
click node_render "https://github.com/antonmg4/tfm-precio-app/blob/main/app.py"
click node_metadata "https://github.com/antonmg4/tfm-precio-app/blob/main/datos/metadatos_variables.json"
click node_modeldata "https://github.com/antonmg4/tfm-precio-app/blob/main/datos/modelo_xgb.json"
click node_references "https://github.com/antonmg4/tfm-precio-app/tree/main/datos"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_render toneBlue
class node_form,node_map,node_listing toneAmber
class node_model,node_recommend,node_explain toneMint
class node_metadata,node_modeldata,node_references toneRose
class node_host,node_tiles toneIndigo
```

## Components

### Interfaz

- [App Gradio](https://github.com/antonmg4/tfm-precio-app/blob/main/app.py): `app.py`
- [Resumen y gráfico](https://github.com/antonmg4/tfm-precio-app/blob/main/app.py): `app.py`

### Entrada del listing

- [Formulario](https://github.com/antonmg4/tfm-precio-app/blob/main/src/formulario.py): `src/formulario.py`
- [Mapa interactivo](https://github.com/antonmg4/tfm-precio-app/blob/main/src/mapa.py): `src/mapa.py`
- [Listing completo](https://github.com/antonmg4/tfm-precio-app/blob/main/src/formulario.py): `src/formulario.py`

### Inferencia y resultados

- [Modelo de precio](https://github.com/antonmg4/tfm-precio-app/blob/main/src/modelo.py): `src/modelo.py`
- [Precio y rango](https://github.com/antonmg4/tfm-precio-app/blob/main/src/modelo.py): `src/modelo.py`
- [Factores explicativos](https://github.com/antonmg4/tfm-precio-app/blob/main/src/modelo.py): `src/modelo.py`

### Modelo y referencias

- [Metadatos variables](https://github.com/antonmg4/tfm-precio-app/blob/main/datos/metadatos_variables.json): `datos/metadatos_variables.json`
- [Modelo XGBoost](https://github.com/antonmg4/tfm-precio-app/blob/main/datos/modelo_xgb.json): `datos/modelo_xgb.json`
- [Tablas de referencia](https://github.com/antonmg4/tfm-precio-app/tree/main/datos): `datos`

### Other components

- **Anfitrión**
- **Teselas del mapa**

## Connections

- Anfitrión → App Gradio: usa
- App Gradio → Formulario: construye campos
- Formulario → Metadatos variables: lee metadatos
- App Gradio → Mapa interactivo: inicializa mapa
- Mapa interactivo → Teselas del mapa: solicita teselas
- Mapa interactivo → App Gradio: envía coordenadas
- App Gradio → Formulario: lee listing
- Formulario → Listing completo: construye
- App Gradio → Modelo de precio: recomienda precio
- App Gradio → Modelo de precio: explica precio
- Modelo de precio → Modelo XGBoost: carga modelo
- Modelo de precio → Tablas de referencia: lee referencias
- Modelo de precio → Precio y rango: devuelve recomendación
- Modelo de precio → Factores explicativos: devuelve explicación
- App Gradio → Resumen y gráfico: formatea resultados
- Precio y rango → Resumen y gráfico: muestra precio y rango
- Factores explicativos → Resumen y gráfico: genera gráfico
- Resumen y gráfico → Anfitrión: presenta resultados
