Calculadora De Construcción Gratis

Calculadora de Construcción Gratis: Estima tus Costos Aquí :root { –primary-color: #004a99; –success-color: #28a745; –background-color: #f8f9fa; –text-color: #333; –secondary-text-color: #555; –border-color: #ccc; –card-background: #fff; –error-color: #dc3545; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: var(–background-color); color: var(–text-color); line-height: 1.6; margin: 0; padding: 0; display: flex; flex-direction: column; align-items: center; } .container { width: 100%; max-width: 1000px; margin: 20px auto; padding: 0 15px; box-sizing: border-box; } header { background-color: var(–primary-color); color: white; padding: 20px 0; text-align: center; width: 100%; } header h1 { margin: 0; font-size: 2.5em; } main { width: 100%; display: flex; flex-direction: column; align-items: center; } .calculator-section, .article-section { background-color: var(–card-background); border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); margin-bottom: 30px; padding: 30px; width: 100%; box-sizing: border-box; } .calculator-section h2, .article-section h2, .article-section h3 { color: var(–primary-color); text-align: center; margin-bottom: 25px; } .loan-calc-container { display: flex; flex-direction: column; gap: 20px; } .input-group { display: flex; flex-direction: column; gap: 8px; width: 100%; } .input-group label { font-weight: bold; color: var(–primary-color); } .input-group input[type="number"], .input-group input[type="text"], .input-group select { padding: 12px 15px; border: 1px solid var(–border-color); border-radius: 5px; font-size: 1em; box-sizing: border-box; width: 100%; } .input-group input[type="number"]:focus, .input-group input[type="text"]:focus, .input-group select:focus { outline: none; border-color: var(–primary-color); box-shadow: 0 0 0 3px rgba(0, 74, 153, 0.2); } .input-group .helper-text { font-size: 0.85em; color: var(–secondary-text-color); margin-top: 5px; } .error-message { color: var(–error-color); font-size: 0.9em; margin-top: 5px; min-height: 1.2em; /* Reserve space to prevent layout shifts */ } .button-group { display: flex; gap: 15px; margin-top: 25px; justify-content: center; flex-wrap: wrap; } button { padding: 12px 25px; border: none; border-radius: 5px; font-size: 1em; font-weight: bold; cursor: pointer; transition: background-color 0.3s ease; text-transform: uppercase; } .btn-calculate { background-color: var(–primary-color); color: white; } .btn-calculate:hover { background-color: #003366; } .btn-reset { background-color: #6c757d; color: white; } .btn-reset:hover { background-color: #5a6268; } .btn-copy { background-color: var(–success-color); color: white; } .btn-copy:hover { background-color: #218838; } .results-container { background-color: var(–card-background); border-radius: 8px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); margin-top: 30px; padding: 30px; width: 100%; box-sizing: border-box; text-align: center; } .results-container h2 { color: var(–primary-color); margin-bottom: 20px; } .main-result { font-size: 2.5em; font-weight: bold; color: var(–success-color); background-color: #e8f5e9; padding: 15px 20px; border-radius: 5px; margin-bottom: 20px; display: inline-block; } .intermediate-results div { margin-bottom: 10px; font-size: 1.1em; color: var(–secondary-text-color); } .intermediate-results span { font-weight: bold; color: var(–primary-color); } .formula-explanation { font-size: 0.9em; color: var(–secondary-text-color); margin-top: 15px; border-top: 1px dashed var(–border-color); padding-top: 15px; } #chartContainer { margin-top: 30px; width: 100%; text-align: center; } #costChart { max-width: 100%; height: 300px; border: 1px solid var(–border-color); border-radius: 5px; background-color: var(–card-background); } .chart-caption { font-size: 0.9em; color: var(–secondary-text-color); margin-top: 10px; } table { width: 100%; border-collapse: collapse; margin-top: 30px; } th, td { padding: 10px; text-align: left; border: 1px solid var(–border-color); } th { background-color: var(–primary-color); color: white; font-weight: bold; } tr:nth-child(even) { background-color: #f2f2f2; } .table-caption { font-size: 0.9em; color: var(–secondary-text-color); margin-bottom: 10px; text-align: left; } .article-section h2, .article-section h3 { text-align: left; margin-top: 30px; } .article-section p, .article-section ul, .article-section ol { margin-bottom: 20px; } .article-section ul, .article-section ol { padding-left: 25px; } .article-section li { margin-bottom: 10px; } .faq-item { margin-bottom: 15px; border-bottom: 1px dashed var(–border-color); padding-bottom: 15px; } .faq-item:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; } .faq-question { font-weight: bold; color: var(–primary-color); cursor: pointer; margin-bottom: 8px; position: relative; padding-left: 20px; } .faq-question::before { content: '+'; position: absolute; left: 0; font-weight: bold; color: var(–primary-color); } .faq-answer { display: none; padding-left: 20px; color: var(–secondary-text-color); } .faq-question.active::before { content: '-'; } .related-links { list-style: none; padding: 0; } .related-links li { margin-bottom: 15px; } .related-links a { color: var(–primary-color); text-decoration: none; font-weight: bold; } .related-links a:hover { text-decoration: underline; } footer { text-align: center; padding: 25px 0; margin-top: 40px; width: 100%; font-size: 0.9em; color: var(–secondary-text-color); background-color: #e9ecef; } @media (min-width: 768px) { .container { margin: 30px auto; } .button-group { justify-content: flex-start; } } @media (min-width: 992px) { .calculator-section, .article-section { padding: 40px; } }

Calculadora de Construcción Gratis

Estima los costos de tu proyecto de construcción fácilmente

Calcula el Costo de tu Proyecto

Introduce la superficie total en metros cuadrados.
Casa Unifamiliar Estándar Casa Unifamiliar de Lujo Apartamento Estándar Apartamento de Lujo Edificio Pequeño (Ej: Local comercial) Obra Negra / Estructura
Selecciona el tipo de construcción para un costo unitario aproximado.
Incluye aquí materiales especiales, acabados de alta gama, etc.
Para trabajos especializados, instaladores externos, etc.
Gastos administrativos, licencias, etc.

Resultados Estimados

–.– €
Costo Base por m²: –.– €
Costo Materiales y Mano de Obra: –.– €
Costos Totales (sin adicionales): –.– €
Detalle de Costos Adicionales: –.– €
Fórmula Utilizada:
Costo Total = (Área Construcción * Costo Unitario por m² del Tipo de Vivienda) + Costos Adicionales de Materiales + Costos Adicionales de Mano de Obra + Costos de Permisos y Tasas.
Desglose porcentual estimado de los costos principales del proyecto.
Desglose Detallado de Costos (Estimado)
Categoría Costo Estimado (€) Porcentaje Estimado (%)

¿Qué es una Calculadora de Construcción Gratis?

{primary_keyword} es una herramienta en línea diseñada para proporcionar una estimación preliminar de los costos involucrados en un proyecto de construcción. Al ingresar datos clave como el tamaño del proyecto, el tipo de edificación y algunos gastos adicionales, esta calculadora te permite tener una idea aproximada del presupuesto necesario antes de embarcarte en la planificación detallada o buscar presupuestos profesionales. Es una solución práctica para propietarios, inversores y constructores que buscan una guía financiera inicial.

¿Quién debería usarla? Cualquiera que esté considerando un proyecto de construcción: desde la reforma de una vivienda hasta la edificación de una nueva casa o un local comercial. Es especialmente útil al inicio de la fase de diseño conceptual, al evaluar la viabilidad económica de una idea, o simplemente para tener una referencia de costos antes de contactar a arquitectos o contratistas. También es valiosa para inversores inmobiliarios que necesitan evaluar rápidamente el potencial de rentabilidad de una obra.

Mitos Comunes:

  • Precisión Absoluta: Una calculadora gratuita ofrece estimaciones. No reemplaza un presupuesto detallado de un profesional.
  • Incluye Todo: Muchas calculadoras gratuitas no consideran imprevistos, fluctuaciones del mercado, o costos muy específicos de ubicación.
  • Válida para Cualquier Proyecto: Los costos unitarios varían enormemente según la región, calidad de materiales, y complejidad del diseño.

Fórmula y Explicación Matemática de la Calculadora de Construcción

La {primary_keyword} se basa en una fórmula modular que intenta reflejar los componentes principales del costo de construcción:

Fórmula Principal:

Costo Total = (Área Construcción × Costo Unitario por m²) + Costos Adicionales de Materiales + Costos Adicionales de Mano de Obra + Costos de Permisos y Tasas

Desglose de Variables:

Para comprender mejor la fórmula, analicemos cada componente:

Variables Clave en la Estimación de Costos de Construcción
Variable Significado Unidad Rango Típico (Estimado)
Área Construcción Superficie total que se va a edificar o renovar. Desde 10 m² hasta miles de m²
Costo Unitario por m² (Tipo de Vivienda) Costo promedio de construcción por metro cuadrado, que varía según el tipo y calidad de la edificación. Incluye materiales básicos y mano de obra general. €/m² 800 €/m² – 1500 €/m² (varía significativamente)
Costos Adicionales de Materiales Gastos extra en materiales específicos, acabados de lujo, o cantidades imprevistas. Variable, desde 0 € hasta miles de €
Costos Adicionales de Mano de Obra Pago por servicios de especialistas, contratistas externos, o trabajos urgentes. Variable, desde 0 € hasta miles de €
Costos de Permisos y Tasas Tarifas administrativas y licencias requeridas por las autoridades locales para construir. Variable, desde unos cientos hasta varios miles de €
Costo Base por m² Resultado de (Área Construcción × Costo Unitario por m²). Representa el costo fundamental antes de extras. Calculado
Costo Materiales y Mano de Obra (Base) Representa el costo directo principal de la construcción. Calculado
Costos Totales (sin adicionales) Suma del Costo Base y los Permisos/Tasas. Costo estimado antes de extras de materiales/mano de obra. Calculado
Desglose Detallado Suma de todos los costos adicionales (Materiales, Mano de Obra, Permisos). Calculado
Costo Total La estimación final del presupuesto total del proyecto. Calculado

Ejemplos Prácticos de Uso

Veamos cómo funciona la {primary_keyword} con escenarios reales:

Ejemplo 1: Construcción de una Casa Unifamiliar Estándar

Supongamos que deseas construir una casa unifamiliar de 150 m² con acabados estándar. Los costos adicionales estimados son: materiales de alta gama para baños (3.000 €), mano de obra especializada para fontanería (1.500 €), y permisos y tasas municipales (2.000 €).

  • Área a Construir: 150 m²
  • Tipo de Vivienda: Casa Unifamiliar Estándar (Costo Unitario: 1200 €/m²)
  • Costos Adicionales de Materiales: 3.000 €
  • Costos Adicionales de Mano de Obra: 1.500 €
  • Costos de Permisos y Tasas: 2.000 €

Cálculo:

Costo Base por m² = 150 m² × 1200 €/m² = 180.000 €

Costo Materiales y Mano de Obra (Base) = 180.000 €

Costos Totales (sin adicionales) = 180.000 € + 2.000 € = 182.000 €

Desglose Detallado = 3.000 € + 1.500 € + 2.000 € = 6.500 €

Costo Total Estimado = 180.000 € + 3.000 € + 1.500 € + 2.000 € = 186.500 €

Interpretación: El costo base de la construcción es significativo, pero los extras representan un porcentaje manejable. Se necesitaría un presupuesto detallado para confirmar estos números, pero es un buen punto de partida.

Ejemplo 2: Reforma Integral de Apartamento Pequeño con Acabados de Lujo

Quieres renovar completamente un apartamento de 70 m². Has elegido acabados de lujo, lo que implica un costo unitario más alto (1300 €/m²). Además, planeas instalar un sistema domótico avanzado (4.000 €) y contratar a un diseñador de interiores (2.500 €). Los permisos son 1.000 €.

  • Área a Construir: 70 m²
  • Tipo de Vivienda: Apartamento de Lujo (Costo Unitario: 1300 €/m²)
  • Costos Adicionales de Materiales: 4.000 € (Sistema domótico)
  • Costos Adicionales de Mano de Obra: 2.500 € (Diseñador de interiores)
  • Costos de Permisos y Tasas: 1.000 €

Cálculo:

Costo Base por m² = 70 m² × 1300 €/m² = 91.000 €

Costo Materiales y Mano de Obra (Base) = 91.000 €

Costos Totales (sin adicionales) = 91.000 € + 1.000 € = 92.000 €

Desglose Detallado = 4.000 € + 2.500 € + 1.000 € = 7.500 €

Costo Total Estimado = 91.000 € + 4.000 € + 2.500 € + 1.000 € = 98.500 €

Interpretación: Los acabados de lujo y la tecnología incrementan considerablemente el costo por metro cuadrado. La {primary_keyword} ayuda a visualizar cómo estos extras impactan el presupuesto final, facilitando la toma de decisiones sobre qué incluir.

Cómo Usar Esta Calculadora de Construcción Gratis

Nuestra {primary_keyword} está diseñada para ser intuitiva. Sigue estos pasos para obtener tu estimación:

  1. Introduce el Área: Ingresa la superficie total en metros cuadrados (m²) que planeas construir o renovar.
  2. Selecciona el Tipo de Vivienda: Elige la opción que mejor describa tu proyecto (casa, apartamento, local, etc.). Esto ajustará el costo unitario por m².
  3. Añade Costos Adicionales: Completa los campos para materiales especiales, mano de obra experta, permisos y tasas si aplican a tu caso. Si no tienes estos costos, puedes dejarlos en cero o no introducirlos.
  4. Calcula: Haz clic en el botón "Calcular Costo".

Lectura de Resultados:

  • Costo Total Estimado: Es la cifra principal, tu presupuesto aproximado.
  • Costo Base por m²: Te muestra cuánto cuesta construir esa área según el tipo de edificación elegido.
  • Costo Materiales y Mano de Obra: El grueso del gasto, cubriendo los elementos esenciales.
  • Costos Totales (sin adicionales): Suma del costo base más permisos. Útil para comparar la inversión fundamental.
  • Desglose Detallado: Detalla los costos extra que has introducido.
  • Gráfico y Tabla: Ofrecen una visualización del desglose porcentual y tabular de los costos estimados.

Toma de Decisiones: Usa esta estimación como punto de partida. Si el resultado supera tu presupuesto, revisa los costos adicionales o considera si puedes optimizar el tipo de acabado o seleccionar un tamaño de proyecto diferente. Si está dentro de tu rango, puedes proceder a solicitar presupuestos formales a profesionales. Recuerda que esta {primary_keyword} es una herramienta de planificación inicial.

Factores Clave que Afectan los Resultados de tu Proyecto de Construcción

Varios elementos influyen significativamente en el costo final de cualquier obra:

  1. Ubicación Geográfica: Los costos de materiales y mano de obra varían drásticamente de una región a otra. Las ciudades grandes suelen ser más caras.
  2. Calidad de Materiales y Acabados: Optar por materiales premium, maderas nobles, mármol, o sistemas de alta tecnología incrementará el presupuesto.
  3. Complejidad del Diseño Arquitectónico: Formas inusuales, grandes vanos, estructuras complejas o detalles arquitectónicos intrincados aumentan los costos de diseño, materiales y mano de obra.
  4. Condiciones del Terreno: Un terreno irregular, con mala cimentación o que requiera excavaciones complejas puede disparar los costos iniciales.
  5. Fluctuaciones del Mercado: Los precios de los materiales de construcción (acero, cemento, madera) pueden variar según la oferta y la demanda global.
  6. Costos de Mano de Obra Especializada: Contratar arquitectos, ingenieros, diseñadores de interiores, o instaladores de sistemas específicos puede ser costoso pero esencial para la calidad.
  7. Costos Indirectos y Contingencias: Siempre es prudente incluir un porcentaje para imprevistos (un 10-20% del costo total) y para gastos administrativos o de gestión del proyecto.
  8. Eficiencia Energética y Sostenibilidad: Invertir en aislamiento, ventanas de alta gama o sistemas de energía renovable puede aumentar el costo inicial, pero generar ahorros a largo plazo.

Preguntas Frecuentes (FAQ) sobre la Calculadora de Construcción

¿Es esta calculadora realmente gratis?
Sí, esta {primary_keyword} es completamente gratuita y está diseñada para ofrecerte una estimación inicial sin costo alguno.
¿Qué tan precisos son los resultados?
La precisión depende de la calidad de los datos introducidos y de la representatividad de los costos unitarios por tipo de vivienda. Es una estimación, no un presupuesto formal. Debe usarse como guía inicial.
¿Incluye la calculadora los costos de la parcela de terreno?
No, esta calculadora se enfoca en los costos de construcción o renovación una vez que ya se dispone del terreno. El precio del suelo es un factor independiente y variable.
¿Debo incluir siempre costos adicionales de materiales y mano de obra?
No es obligatorio. Si tu proyecto es estándar y no prevés extras significativos, puedes dejar esos campos en cero. Se incluyen para proyectos con requerimientos específicos o acabados de alta gama.
¿Qué pasa si mi tipo de construcción no está en la lista?
La lista ofrece categorías comunes. Si tu proyecto es muy particular, selecciona la opción más cercana y ten en cuenta que el costo unitario podría variar. Considera buscar un costo unitario de mercado para tu caso específico.
¿Qué se considera "mano de obra adicional"?
Se refiere a costos de servicios que van más allá de la construcción general. Ejemplos: instaladores de sistemas de climatización específicos, electricistas para redes complejas, o la contratación de un director de obra externo.
¿Los permisos y tasas son iguales en todas partes?
No, los costos de permisos y tasas varían enormemente según el municipio o la región. Es importante investigar los requisitos y costos locales.
¿Cómo puedo obtener un presupuesto real?
Una vez que tengas una estimación clara con esta {primary_keyword}, el siguiente paso es contactar a arquitectos, diseñadores o constructores locales. Ellos podrán elaborar un presupuesto detallado basado en tus planos y especificaciones.
¿Qué es el costo base por m²?
Es el costo promedio estimado por unidad de superficie, que incluye materiales básicos y mano de obra general para el tipo de edificación seleccionado. Sirve como punto de partida antes de sumar otros gastos.

Herramientas Relacionadas y Recursos Internos

© 2023 Tu Empresa Constructora. Todos los derechos reservados.

Aviso Legal | Política de Privacidad

var ctx = document.getElementById('costChart').getContext('2d'); var costChart; function createChart(labels, data) { if (costChart) { costChart.destroy(); } costChart = new Chart(ctx, { type: 'pie', data: { labels: labels, datasets: [{ label: 'Porcentaje del Costo', data: data, backgroundColor: [ 'rgba(0, 74, 153, 0.7)', // Color Base Materiales/Mano Obra 'rgba(40, 167, 69, 0.7)', // Color Adicionales Materiales 'rgba(255, 193, 7, 0.7)', // Color Adicionales Mano Obra 'rgba(220, 53, 69, 0.7)' // Color Permisos y Tasas ], borderColor: [ 'rgba(0, 74, 153, 1)', 'rgba(40, 167, 69, 1)', 'rgba(255, 193, 7, 1)', 'rgba(220, 53, 69, 1)' ], borderWidth: 1 }] }, options: { responsive: true, maintainAspectRatio: false, plugins: { legend: { position: 'top', }, title: { display: true, text: 'Distribución Porcentual Estimada de Costos' } } } }); } function validateInput(id, errorId, message, min = null, max = null) { var input = document.getElementById(id); var errorDiv = document.getElementById(errorId); var value = parseFloat(input.value); if (isNaN(value) || input.value.trim() === "") { errorDiv.textContent = "Este campo es obligatorio."; return false; } if (value < 0) { errorDiv.textContent = "El valor no puede ser negativo."; return false; } if (min !== null && value max) { errorDiv.textContent = `El valor no puede exceder ${max}.`; return false; } errorDiv.textContent = ""; return true; } function calculateConstructionCost() { var isValid = true; isValid = validateInput('areaConstruccion', 'areaConstruccionError', 'Introduce el área en m²') && isValid; validateInput('costoMaterialesAdicionales', 'costoMaterialesAdicionalesError', 'Introduce un costo válido'); validateInput('costoManoObraAdicional', 'costoManoObraAdicionalError', 'Introduce un costo válido'); validateInput('permisosYTasas', 'permisosYTasasError', 'Introduce un costo válido'); if (!isValid) { document.getElementById('resultsSection').style.display = 'none'; return; } var areaConstruccion = parseFloat(document.getElementById('areaConstruccion').value); var tipoViviendaCosteUnitario = parseFloat(document.getElementById('tipoVivienda').value); var costoMaterialesAdicionales = parseFloat(document.getElementById('costoMaterialesAdicionales').value) || 0; var costoManoObraAdicional = parseFloat(document.getElementById('costoManoObraAdicional').value) || 0; var permisosYTasas = parseFloat(document.getElementById('permisosYTasas').value) || 0; var costoBasePorM2 = areaConstruccion * tipoViviendaCosteUnitario; var costoMaterialesYManoObraBase = costoBasePorM2; var costosTotalesSinAdicionales = costoBasePorM2 + permisosYTasas; var desgloseDetallado = costoMaterialesAdicionales + costoManoObraAdicional + permisosYTasas; var totalCost = costoBasePorM2 + costoMaterialesAdicionales + costoManoObraAdicional + permisosYTasas; document.getElementById('totalCost').textContent = totalCost.toFixed(2) + ' €'; document.getElementById('costoBasePorM2').innerHTML = 'Costo Base por m²: ' + costoBasePorM2.toFixed(2) + ' €'; document.getElementById('costoMaterialesYManoObra').innerHTML = 'Costo Materiales y Mano de Obra (Base): ' + costoMaterialesYManoObraBase.toFixed(2) + ' €'; document.getElementById('costosTotalesSinAdicionales').innerHTML = 'Costos Totales (sin adicionales): ' + costosTotalesSinAdicionales.toFixed(2) + ' €'; document.getElementById('desgloseDetallado').innerHTML = 'Detalle de Costos Adicionales: ' + desgloseDetallado.toFixed(2) + ' €'; document.getElementById('resultsSection').style.display = 'block'; // Update Table updateCostBreakdownTable(costoBasePorM2, costoMaterialesAdicionales, costoManoObraAdicional, permisosYTasas, totalCost); // Update Chart var chartLabels = ['Materiales y Mano de Obra (Base)', 'Materiales Adicionales', 'Mano de Obra Adicional', 'Permisos y Tasas']; var chartData = [costoBasePorM2, costoMaterialesAdicionales, costoManoObraAdicional, permisosYTasas]; // Filter out zero values for clarity in chart and table var filteredLabels = []; var filteredData = []; var filteredTableData = []; if (costoBasePorM2 > 0) { filteredLabels.push('Materiales y Mano de Obra (Base)'); filteredData.push(costoBasePorM2); filteredTableData.push({ category: 'Materiales y Mano de Obra (Base)', cost: costoBasePorM2 }); } if (costoMaterialesAdicionales > 0) { filteredLabels.push('Materiales Adicionales'); filteredData.push(costoMaterialesAdicionales); filteredTableData.push({ category: 'Materiales Adicionales', cost: costoMaterialesAdicionales }); } if (costoManoObraAdicional > 0) { filteredLabels.push('Mano de Obra Adicional'); filteredData.push(costoManoObraAdicional); filteredTableData.push({ category: 'Mano de Obra Adicional', cost: costoManoObraAdicional }); } if (permisosYTasas > 0) { filteredLabels.push('Permisos y Tasas'); filteredData.push(permisosYTasas); filteredTableData.push({ category: 'Permisos y Tasas', cost: permisosYTasas }); } // Add row for total if there are additional costs if (desgloseDetallado > 0) { filteredTableData.push({ category: 'TOTAL ADICIONALES', cost: desgloseDetallado }); } filteredTableData.push({ category: 'COSTO TOTAL ESTIMADO', cost: totalCost }); createChart(filteredLabels, filteredData); updateCostBreakdownTableContent(filteredTableData, totalCost); } function updateCostBreakdownTable(costoBase, materialesAdd, manoObraAdd, permisos, total) { var tableBody = document.querySelector("#costBreakdownTable tbody"); tableBody.innerHTML = "; // Clear previous rows var totalActualCost = 0; if (costoBase > 0) { var percentage = (costoBase / total) * 100; addTableRow(tableBody, 'Materiales y Mano de Obra (Base)', costoBase.toFixed(2), percentage.toFixed(2)); totalActualCost += costoBase; } if (materialesAdd > 0) { var percentage = (materialesAdd / total) * 100; addTableRow(tableBody, 'Materiales Adicionales', materialesAdd.toFixed(2), percentage.toFixed(2)); totalActualCost += materialesAdd; } if (manoObraAdd > 0) { var percentage = (manoObraAdd / total) * 100; addTableRow(tableBody, 'Mano de Obra Adicional', manoObraAdd.toFixed(2), percentage.toFixed(2)); totalActualCost += manoObraAdd; } if (permisos > 0) { var percentage = (permisos / total) * 100; addTableRow(tableBody, 'Permisos y Tasas', permisos.toFixed(2), percentage.toFixed(2)); totalActualCost += permisos; } // Add total row if applicable if (total > 0 && Math.abs(totalActualCost – total) < 0.01) { // Check if total is composed of the added parts var totalPercentage = 100; addTableRow(tableBody, 'COSTO TOTAL ESTIMADO', '' + total.toFixed(2) + ' €', '100.00', true); } else if (total > 0) { // Fallback if calculation differs slightly addTableRow(tableBody, 'COSTO TOTAL ESTIMADO', '' + total.toFixed(2) + ' €', '100.00', true); } } function updateCostBreakdownTableContent(data, overallTotal) { var tableBody = document.querySelector("#costBreakdownTable tbody"); tableBody.innerHTML = "; // Clear previous rows data.forEach(function(item) { var percentage = (item.cost / overallTotal) * 100; addTableRow(tableBody, item.category, item.cost.toFixed(2), isNaN(percentage) ? '0.00' : percentage.toFixed(2)); }); // Ensure the final total is always present and correctly formatted if (overallTotal > 0) { var totalRowExists = Array.from(tableBody.rows).some(row => row.cells[0].innerHTML.includes('COSTO TOTAL ESTIMADO')); if (!totalRowExists) { addTableRow(tableBody, 'COSTO TOTAL ESTIMADO', '' + overallTotal.toFixed(2) + ' €', '100.00', true); } } } function addTableRow(tableBody, category, cost, percentage, isTotalRow = false) { var row = tableBody.insertRow(); var cellCategory = row.insertCell(0); var cellCost = row.insertCell(1); var cellPercentage = row.insertCell(2); cellCategory.innerHTML = category; cellCost.innerHTML = cost; cellPercentage.innerHTML = percentage + '%'; if (isTotalRow) { row.style.fontWeight = 'bold'; row.style.backgroundColor = '#e9ecef'; // Slight background for total row } } function resetCalculator() { document.getElementById('areaConstruccion').value = '150'; document.getElementById('tipoVivienda').value = '1200'; document.getElementById('costoMaterialesAdicionales').value = '5000'; document.getElementById('costoManoObraAdicional').value = '3000'; document.getElementById('permisosYTasas').value = '1500'; // Clear errors document.getElementById('areaConstruccionError').textContent = "; document.getElementById('costoMaterialesAdicionalesError').textContent = "; document.getElementById('costoManoObraAdicionalError').textContent = "; document.getElementById('permisosYTasasError').textContent = "; // Hide results and clear chart/table document.getElementById('resultsSection').style.display = 'none'; if (costChart) { costChart.destroy(); } document.querySelector("#costBreakdownTable tbody").innerHTML = "; } function copyResults() { var totalCost = document.getElementById('totalCost').textContent; var costoBasePorM2 = document.getElementById('costoBasePorM2').textContent.replace('Costo Base por m²: ', ").replace(' €', "); var costoMaterialesYManoObra = document.getElementById('costoMaterialesYManoObra').textContent.replace('Costo Materiales y Mano de Obra (Base): ', ").replace(' €', "); var costosTotalesSinAdicionales = document.getElementById('costosTotalesSinAdicionales').textContent.replace('Costos Totales (sin adicionales): ', ").replace(' €', "); var desgloseDetallado = document.getElementById('desgloseDetallado').textContent.replace('Detalle de Costos Adicionales: ', ").replace(' €', "); var tableRows = document.querySelectorAll("#costBreakdownTable tbody tr"); var tableContent = "Desglose de Costos:\n"; tableRows.forEach(function(row) { var cells = row.cells; tableContent += `${cells[0].textContent.trim()} : ${cells[1].textContent.trim()} (${cells[2].textContent.trim()})\n`; }); var assumptions = `Asunciones:\n` + `Área: ${document.getElementById('areaConstruccion').value} m²\n` + `Tipo Vivienda Costo Unitario: ${document.getElementById('tipoVivienda').options[document.getElementById('tipoVivienda').selectedIndex].text} (${document.getElementById('tipoVivienda').value} €/m²)\n` + `Materiales Adicionales: ${document.getElementById('costoMaterialesAdicionales').value || 0} €\n` + `Mano Obra Adicional: ${document.getElementById('costoManoObraAdicional').value || 0} €\n` + `Permisos y Tasas: ${document.getElementById('permisosYTasas').value || 0} €\n`; var textToCopy = `— RESULTADOS DE LA CALCULADORA DE CONSTRUCCIÓN GRATIS —\n\n` + `Costo Total Estimado: ${totalCost}\n` + `Costo Base por m²: ${costoBasePorM2} €\n` + `Costo Materiales y Mano de Obra (Base): ${costoMaterialesYManoObra} €\n` + `Costos Totales (sin adicionales): ${costosTotalesSinAdicionales} €\n` + `Detalle de Costos Adicionales: ${desgloseDetallado} €\n\n` + `${tableContent}\n` + `${assumptions}\n` + `Fórmula: Costo Total = (Área * Costo Unitario) + Adicionales Materiales + Adicionales Mano Obra + Permisos.`; navigator.copyTextToClipboard(textToCopy); // Provide visual feedback var originalText = event.target.textContent; event.target.textContent = '¡Copiado!'; setTimeout(function() { event.target.textContent = originalText; }, 2000); } // Fallback for copyTextToClipboard if it doesn't exist if (!navigator.copyTextToClipboard) { navigator.copyTextToClipboard = function(text) { var textArea = document.createElement("textarea"); textArea.value = text; textArea.style.position = "fixed"; // Avoid scrolling to bottom textArea.style.left = "-9999px"; textArea.style.top = "-9999px"; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { var successful = document.execCommand('copy'); var msg = successful ? 'successful' : 'unsuccessful'; console.log('Copying text command was ' + msg); } catch (err) { console.error('Unable to copy text', err); } document.body.removeChild(textArea); }; } // FAQ Toggle functionality var faqQuestions = document.querySelectorAll('.faq-question'); faqQuestions.forEach(function(question) { question.addEventListener('click', function() { var answer = this.nextElementSibling; this.classList.toggle('active'); if (answer.style.display === 'block') { answer.style.display = 'none'; } else { answer.style.display = 'block'; } }); }); // Initial calculation on load if fields have default values document.addEventListener('DOMContentLoaded', function() { // Check if default values are present and calculate if (document.getElementById('areaConstruccion').value && document.getElementById('tipoVivienda').value) { calculateConstructionCost(); } });

Leave a Comment