SIEC

Sistema Inteligente de Estimación de Costos para Constructora.

0
0
0
Python
public

🏗️ SIEC - Sistema Inteligente de Estimación de Costos

Three.js
JavaScript
TypeScript
Status
Scrum
Jira Tracking

Sistema orientado a la estimación automática de costos de construcción de viviendas basado en métricas por metro cuadrado y configuración estructural.


🎯 Sobre el Proyecto

SIEC es un sistema inteligente desarrollado para empresas constructoras que automatiza el desglose y cálculo de los insumos requeridos para la edificación de viviendas.

🎓 Contexto Académico: Este proyecto está siendo desarrollado para la asignatura de Ingeniería de Software II.

🔍 El Problema

La estimación de costos y materiales en proyectos de construcción residencial a menudo implica:

  • Procesos manuales propensos a errores en el cálculo de insumos.
  • Dificultad para visualizar rápidamente cómo los cambios estructurales o de diseño impactan en los requerimientos.
  • Tiempos de respuesta lentos para la generación de presupuestos iniciales precisos.

✨ La Solución

Un sistema interactivo que permite:

  • Configuración dinámica: Ajuste de metros cuadrados totales, número de habitaciones (simples, dobles, triples), baños, áreas comunes y tipo de material estructural.
  • Cálculo automático: Determinación precisa de los insumos base como Fierro, Cemento, Agua, Cableado, Tuberías y Mano de Obra.
  • Visualización 3D Web: Una interfaz interactiva basada en Three.js (WebGL nativo) que permite pre-visualización instantánea sin necesidad de plugins externos.
  • Reglas de negocio robustas: Motor de cálculo paramétrico y validación de reglas constructivas en el backend.
  • Optimización de Recursos: Sistema de validación espacial por tokens para asegurar la viabilidad del diseño.

📐 Arquitectura Base

El sistema está planteado con una arquitectura moderna que separa la interfaz de los robustos motores de reglas:

  • Frontend: Interfaz web SPA (Single Page Application) desarrollada con JavaScript/TypeScript y Three.js, optimizada para visualización 3D procedimental en tiempo real.
  • Backend (Aplicación):
    • Motor de cálculo paramétrico encargado de las matemáticas del proyecto.
    • Motor de reglas constructivas que valida las coherencias estructurales.
  • Base de Datos: Estructura relacional preparada para manejar métricas base y precios actualizables.

⚙️ Mecánicas Core

El sistema implementa lógicas avanzadas para garantizar una estimación precisa y una experiencia interactiva:

  • Sistema de Tokens: Cada m² equivale a 1 token. Los recintos (baños, habitaciones) consumen tokens, validando que el diseño sea viable en el espacio total.
  • Matriz de Rendimiento: El motor de cálculo utiliza factores dinámicos desde la base de datos (ej. sacos de cemento por m² de albañilería) para evitar valores fijos en el código.
  • Web Scraping de Precios: Un proceso automatizado extrae precios reales cada 24 horas de tiendas retail (Sodimac, Easy, Construmart) centradas en la Región de Valparaíso.

⚡ Desempeño y RNF

  • Renderizado 3D: Actualización del modelo en Three.js en < 20 segundos.
  • Velocidad de Respuesta: Cálculos y desgloses de la API en < 2.5 segundos.
  • Caché Local: Historial de simulaciones (máximo 3) accesible en < 500ms.

🛤️ Líneas de Mejora y Futuro (Roadmap)

Con miras a convertir la aplicación en una solución de nivel empresarial, se planean las siguientes evoluciones:

  • 🛠️ Técnicas: Integración con APIs de proveedores para actualización de tarifas de materiales, Simulación de escenarios y Exportación a sistemas ERP.
  • 🏛️ Arquitectónicas: Arquitectura orientada a dominio (DDD) y extracción del motor de cálculo en un microservicio escalable e independiente.
  • 💼 De Negocio: Modelo SaaS (Software as a Service) para alojar a múltiples firmas constructoras, Comparación histórica de presupuestos y Control automatizado de desviaciones de material.

🚀 Cómo Ejecutar el Proyecto (Local)

El proyecto actual se encuentra dockerizado para facilitar el despliegue de todos los servicios simultáneamente.

Prerrequisitos

  • Docker instalado y ejecutándose
  • Git

Pasos de Ejecución

  1. Clona este repositorio.
  2. Abre una terminal en la raíz del proyecto.
  3. Ejecuta el siguiente comando para levantar los servicios:
    docker-compose up --build
    

🔌 Puertos y Servicios

Una vez levantado, los servicios estarán disponibles en los siguientes puertos locales configurables desde el archivo docker-compose.yml:

  • Frontend (Vue 3 / Vite): http://localhost:5173
  • Backend (FastAPI): http://localhost:8000 (Swagger UI: http://localhost:8000/docs)
  • Base de Datos (PostgreSQL): Puerto 5432

📂 Estructura del Proyecto Actual

├── 📁 backend
│   ├── 🐍 database.py
│   ├── 🐍 main.py
│   ├── 🐍 models.py
│   └── 📄 requirements.txt
├── 📁 database
│   ├── 📁 migrations
│   │   ├── 📄 001_create_material_estructural.sql
│   │   └── 📄 002_create_configuracion_simulacion.sql
│   └── 📁 seeds
│       ├── 📄 001_seed_material_estructural.sql
│       ├── 📄 001_verify_material_estructural.sql
│       ├── 📄 002_seed_configuracion_simulacion.sql
│       └── 📄 002_verify_configuracion_simulacion.sql
├── 📁 docs
│   └── 📝 context.md
├── 📁 frontend
│   ├── 📁 cypress
│   │   ├── 📁 e2e
│   │   │   └── 📄 stress-test-3d-renderer.cy.js
│   │   └── 📁 support
│   │       ├── 📄 e2e.js
│   │       └── 📄 performance-monitor.js
│   ├── 📁 public
│   │   ├── 🖼️ favicon.svg
│   │   └── 🖼️ icons.svg
│   ├── 📁 src
│   │   ├── 📁 assets
│   │   │   ├── 🖼️ hero.png
│   │   │   ├── 🖼️ vite.svg
│   │   │   └── 🖼️ vue.svg
│   │   ├── 📁 components
│   │   │   ├── 📄 ConfigurationPanel.vue
│   │   │   ├── 📄 HelloWorld.vue
│   │   │   ├── 📄 MaterialSelector.vue
│   │   │   ├── 📄 MaterialsPanel.vue
│   │   │   ├── 📄 MetricsPanel.vue
│   │   │   ├── 📄 RoomEditor2D.vue
│   │   │   ├── 📄 SaveLayoutDialog.vue
│   │   │   ├── 📄 Scene3D.vue
│   │   │   ├── 📄 Sidebar.vue
│   │   │   └── 📄 TopNavBar.vue
│   │   ├── 📁 composables
│   │   │   ├── 📁 __tests__
│   │   │   │   └── 📄 useTokenCounter.spec.js
│   │   │   ├── 📄 useI18n.js
│   │   │   ├── 📄 useInteractiveEditor.js
│   │   │   ├── 📄 useLayoutManager.js
│   │   │   ├── 📄 useTokenCounter.js
│   │   │   ├── 📄 useTopologyComputed.js
│   │   │   └── 📄 useTopologyExtractor.js
│   │   ├── 📁 stores
│   │   │   └── 📄 recintos.js
│   │   ├── 📁 utils
│   │   │   ├── 📁 __tests__
│   │   │   │   └── 📄 tokenMath.spec.js
│   │   │   └── 📄 tokenMath.js
│   │   ├── 📄 App.vue
│   │   ├── 📄 main.js
│   │   └── 🎨 style.css
│   ├── ⚙️ .gitignore
│   ├── 📝 README.md
│   ├── 📄 cypress.config.js
│   ├── 🌐 index.html
│   ├── ⚙️ package-lock.json
│   ├── ⚙️ package.json
│   ├── 📄 postcss.config.js
│   ├── 📄 tailwind.config.js
│   └── 📄 vite.config.js
├── 📁 poc
│   ├── 📁 __tests__
│   │   └── 📄 poc-logic.test.js
│   ├── 🌐 house-generator-poc.html
│   ├── ⚙️ package-lock.json
│   ├── ⚙️ package.json
│   └── 📄 poc-logic.js
├── ⚙️ .gitignore
├── 📝 README.md
├── ⚙️ docker-compose.yml
└── ⚙️ package.json

🛠️ Tecnologías

Three.js
Three.js
Motor 3D WebGL
JavaScript
JavaScript / TS
Lógica Frontend
DB
Postgres / MySQL
Almacenamiento Relacional
GitHub
GitHub
Control de Versiones
Jira
Jira
Gestión Ágil (Scrum)

👥 Equipo

Andres Tapia
Andres Tapia
Product Manager
📧 Email
Lukas Flores
Lukas Flores
Líder Técnico
📧 Email
Gonzalo Jara
Gonzalo Jara
Developer
📧 Email
Felipe Figueroa
Felipe Figueroa
Developer
📧 Email
Fernando Salazar
Fernando Salazar
Developer
📧 Email

Compromiso del equipo: 6-8 hrs/semana por integrante
Ceremonias: Planning, Dailies, Review, Retro, Refinement
Comunicación: Discord + Jira + GitHub

Roles y Responsabilidades

Rol Responsabilidades
Product Manager Definir visión y prioridades del producto, validar requerimientos, gestionar backlog y coordinar objetivos del equipo
Líder Técnico Definir arquitectura técnica, apoyar decisiones de implementación, revisar código y supervisar integración técnica
Developers Implementar historias de usuario, realizar pruebas, apoyar documentación técnica y colaborar en la entrega incremental del producto

🙏 Agradecimientos

  • Universidad: Por el apoyo y recursos para desarrollar este proyecto dentro de la malla académica.
  • Asignatura de Ingeniería de Software II: Por la guía metodológica y formativa durante el ciclo de vida del desarrollo.
  • Equipo de desarrollo: Por el firme compromiso, colaboración y dedicación constante a lo largo de los sprints.

Hecho con ❤️ por el equipo de SIEC

Made with Three.js
Scrum

v0.3.3[beta]