La base económica de un proyecto: presupuestos y mediciones
La correcta elaboración de presupuestos y mediciones es un pilar fundamental en la ejecución de proyectos industriales, especialmente en instalaciones de medida y regulación. Estas tareas aseguran la viabilidad económica y técnica, permitiendo anticipar costes, prever necesidades y evitar desviaciones presupuestarias. Un presupuesto detallado, basado en mediciones precisas y precios actualizados, es una herramienta clave para la transparencia, la comparabilidad de ofertas y la toma de decisiones informadas.
En esta unidad se abordan los procedimientos de medición de elementos, el desglose de partidas, la asignación de precios unitarios (con apoyo de bases de datos como CYPE, PREOC o BEDEC), y la estructura final del presupuesto, incluyendo gastos generales, beneficio industrial, imprevistos e impuestos.
Medición detallada de elementos
El primer paso consiste en cuantificar todos los componentes de la instalación a partir de planos, especificaciones técnicas y normativa aplicable. En instalaciones de medida y regulación, los elementos típicos incluyen:
- Instrumentación: sensores (temperatura, presión, caudal), transmisores, válvulas de control, armarios de medida.
- Cableado: metros lineales de cable de señal, de potencia, de comunicación (según secciones y tipos).
- Elementos auxiliares: bandejas, tuberías, conectores, bornes, regletas.
- Equipos de control: PLC, módulos de E/S, HMI, servidores.
Las unidades de medida se eligen según el tipo de elemento: metros lineales (m), metros cuadrados (m²), unidades (ud), kilogramos (kg), etc. Es esencial seguir las indicaciones de los planos de detalle y las normas UNE-EN 60121 (mediciones en instalaciones eléctricas).
Ejemplo práctico: Para un lazo de control de temperatura, se medirá: 1 ud de sensor PT100, 1 ud de transmisor 4-20 mA, 1 ud de válvula de control DN25, 50 m de cable apantallado 2x1,5 mm², 1 ud de armario de control, etc.
Desglose de partidas y estructuración
Una vez cuantificados los elementos, se agrupan en partidas presupuestarias. Cada partida debe tener un código identificativo y una descripción clara que evite ambigüedades. Se recomienda estructurar por capítulos según la lógica constructiva o por sistemas:
- Capítulo 1: Instrumentación de campo (sensores, transmisores, válvulas).
- Capítulo 2: Cableado y canalizaciones (cables, bandejas, tuberías).
- Capítulo 3: Armarios de control y equipos (PLC, HMI, fuentes de alimentación).
- Capítulo 4: Mano de obra de instalación (montaje, conexionado, puesta en marcha).
- Capítulo 5: Ingeniería y dirección de obra.
- Capítulo 6: Pruebas y formación.
El desglose facilita la valoración económica, la asignación de recursos y la certificación de obra ejecutada. Un ejemplo de partida: INS-01 – “Suministro e instalación de transmisor de presión 4-20 mA, rango 0-10 bar, con conexión roscada 1/2” NPT”.
Asignación de precios unitarios. Bases de datos de referencia
Cada partida se valora con un precio unitario que incluye materiales, mano de obra, maquinaria, medios auxiliares y gastos indirectos. Para determinar estos precios se utilizan bases de datos especializadas del sector:
- BEDEC (Base de Datos de la Construcción) del ITeC: ofrece precios actualizados por partidas, con desglose por materiales, mano de obra y maquinaria.
- CYPE: generador de precios integrado en el software de mediciones, con actualizaciones periódicas.
- PREOC (Precios de Referencia de la Oficina de Contratación): utilizado en licitaciones públicas.
- Bases de datos de fabricantes: para equipos específicos de instrumentación (Endress+Hauser, Siemens, ABB, etc.).
Estas herramientas permiten ajustar los precios según la localización geográfica, el mercado y las particularidades del proyecto. También se pueden incluir precios negociados directamente con proveedores.
Elaboración del presupuesto final
Con las partidas definidas y sus precios unitarios, se construye el presupuesto siguiendo este esquema:
- Cuadro de precios unitarios: lista de partidas con código, descripción, unidad, precio unitario.
- Mediciones y presupuesto: para cada partida se multiplica la cantidad por el precio unitario, obteniendo el importe parcial.
- Resumen por capítulos: suma de importes parciales de cada capítulo.
- Gastos generales y beneficio industrial: porcentajes habituales (13-20%) sobre el total de los capítulos.
- Imprevistos: 3-5% para cubrir contingencias.
- Impuestos: IVA (21% en España) u otros tributos aplicables.
- Total presupuesto: suma final.
El presupuesto debe presentarse en formato claro, con una columna por concepto, cantidad, precio unitario e importe, y con una leyenda explicativa de los precios empleados.
Un presupuesto detallado, basado en mediciones precisas y precios actualizados, es una herramienta clave para garantizar la transparencia, la comparabilidad de ofertas y la toma de decisiones informada. Además, sirve como base para la certificación de obra ejecutada, ayudando a verificar que lo ejecutado corresponde a lo presupuestado.
# budget_generator.py - Genera un presupuesto estructurado a partir de un archivo CSV con mediciones
# Útil para estandarizar la creación de presupuestos en proyectos de automatización
import csv
import json
from datetime import datetime
class Partida:
"""Clase que representa una partida presupuestaria."""
def __init__(self, codigo, descripcion, unidad, cantidad, precio_unitario):
self.codigo = codigo
self.descripcion = descripcion
self.unidad = unidad
self.cantidad = cantidad
self.precio_unitario = precio_unitario
self.importe = cantidad * precio_unitario
class Presupuesto:
"""Clase para gestionar el presupuesto completo."""
def __init__(self, nombre_proyecto, cliente, autor):
self.nombre_proyecto = nombre_proyecto
self.cliente = cliente
self.autor = autor
self.fecha = datetime.now().strftime("%d/%m/%Y")
self.partidas = [] # lista de objetos Partida
self.porcentaje_gg_bi = 0.15 # 15% gastos generales + beneficio industrial
self.porcentaje_imprevistos = 0.05
self.iva = 0.21
def cargar_desde_csv(self, archivo):
"""Carga partidas desde un archivo CSV con columnas: codigo,descripcion,unidad,cantidad,precio_unitario"""
with open(archivo, 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
p = Partida(
codigo=row['codigo'],
descripcion=row['descripcion'],
unidad=row['unidad'],
cantidad=float(row['cantidad']),
precio_unitario=float(row['precio_unitario'])
)
self.partidas.append(p)
print(f"✅ Cargadas {len(self.partidas)} partidas desde {archivo}")
def calcular_totales(self):
total_parcial = sum(p.importe for p in self.partidas)
gg_bi = total_parcial * self.porcentaje_gg_bi
subtotal = total_parcial + gg_bi
imprevistos = subtotal * self.porcentaje_imprevistos
base_imponible = subtotal + imprevistos
iva_calculado = base_imponible * self.iva
total = base_imponible + iva_calculado
return {
"total_parcial": total_parcial,
"gg_bi": gg_bi,
"imprevistos": imprevistos,
"base_imponible": base_imponible,
"iva": iva_calculado,
"total": total
}
def generar_informe(self):
"""Genera un informe completo del presupuesto en formato Markdown."""
totales = self.calcular_totales()
doc = f"# PRESUPUESTO\n\n"
doc += f"**Proyecto:** {self.nombre_proyecto}\n\n"
doc += f"**Cliente:** {self.cliente}\n\n"
doc += f"**Autor:** {self.autor}\n\n"
doc += f"**Fecha:** {self.fecha}\n\n"
doc += "## Cuadro de precios unitarios\n\n"
doc += "| Código | Descripción | Unidad | Precio unitario (€) |\n"
doc += "|--------|-------------|--------|---------------------|\n"
for p in self.partidas:
doc += f"| {p.codigo} | {p.descripcion} | {p.unidad} | {p.precio_unitario:.2f} |\n"
doc += "\n## Mediciones y presupuesto\n\n"
doc += "| Código | Descripción | Unidad | Cantidad | Precio unitario (€) | Importe (€) |\n"
doc += "|--------|-------------|--------|----------|---------------------|-------------|\n"
for p in self.partidas:
doc += f"| {p.codigo} | {p.descripcion} | {p.unidad} | {p.cantidad:.2f} | {p.precio_unitario:.2f} | {p.importe:.2f} |\n"
doc += "\n## Resumen económico\n\n"
doc += f"- **Total parcial (materiales + mano de obra)** : {totales['total_parcial']:.2f} €\n"
doc += f"- **Gastos generales y beneficio industrial ({self.porcentaje_gg_bi*100:.0f}%)** : {totales['gg_bi']:.2f} €\n"
doc += f"- **Imprevistos ({self.porcentaje_imprevistos*100:.0f}%)** : {totales['imprevistos']:.2f} €\n"
doc += f"- **Base imponible** : {totales['base_imponible']:.2f} €\n"
doc += f"- **IVA ({self.iva*100:.0f}%)** : {totales['iva']:.2f} €\n"
doc += f"- **TOTAL PRESUPUESTO** : **{totales['total']:.2f} €**\n"
return doc
def guardar(self, archivo):
with open(archivo, 'w', encoding='utf-8') as f:
f.write(self.generar_informe())
print(f"✅ Presupuesto guardado en {archivo}")
# --- Ejemplo de uso con datos simulados ---
if __name__ == "__main__":
# Crear objeto presupuesto
presup = Presupuesto(
nombre_proyecto="Control de temperatura en reactor químico",
cliente="Industrias Químicas del Sur S.A.",
autor="Ing. Carlos Méndez"
)
# Simular carga desde CSV (en la práctica se leería de un archivo)
# Crear algunas partidas manualmente para el ejemplo
presup.partidas = [
Partida("INS-01", "Transmisor de presión 4-20 mA, 0-10 bar", "ud", 2, 450.00),
Partida("INS-02", "Sensor PT100 clase A con termopozo", "ud", 3, 320.00),
Partida("INS-03", "Válvula de control DN25 con posicionador", "ud", 1, 1250.00),
Partida("CAB-01", "Cable apantallado 2x1,5 mm²", "m", 150, 2.80),
Partida("ARM-01", "Armario de control IP66 800x600x300", "ud", 1, 780.00),
Partida("MON-01", "Mano de obra de montaje (electricista)", "h", 40, 35.00)
]
# Guardar informe
presup.guardar("presupuesto_proyecto.md")
print("\n=== PRESUPUESTO GENERADO ===\n")
print(presup.generar_informe())
Este script genera un presupuesto estructurado a partir de partidas definidas en código o cargadas desde CSV. Calcula automáticamente los importes parciales, gastos generales, beneficio, imprevistos, IVA y total. Es una base excelente para automatizar la creación de presupuestos en proyectos de automatización.
La elaboración de presupuestos se apoya cada vez más en gemelos digitales y BIM (Building Information Modeling), donde las mediciones se extraen automáticamente del modelo 3D. Las bases de datos de precios están integradas en la nube y se actualizan en tiempo real según los índices de precios oficiales. Además, los sistemas de IA ayudan a detectar partidas omitidas o a optimizar el coste mediante análisis de alternativas.
Una Raspberry Pi puede ejecutar scripts Python para procesar mediciones desde planos digitales y generar presupuestos automáticos. También puede servir como servidor web para presentar el presupuesto interactivo al equipo de contratación.
Para proyectos educativos, Arduino puede utilizarse para simular la medición de consumos (por ejemplo, conteo de piezas) y relacionarlos con el coste por unidad, sirviendo como introducción a los conceptos de medición y presupuesto.
- ✅ Comprender activamente cada línea de código generada
- ✅ Personalizar la solución según tus necesidades específicas
- ✅ Iterar y refinar el código hasta dominar la lógica
- ✅ Desarrollar habilidades de comunicación técnica con IA
📋 Instrucciones de Uso:
- Copia el prompt completo del recuadro superior.
- Personaliza los campos entre corchetes [CAMPO] con tu información específica.
- Pega el prompt en una nueva conversación con tu IA favorita.
- Itera y refina: Pide aclaraciones, modificaciones o añade requisitos adicionales.
- Prueba el código en Thonny primero, luego en tu Raspberry Pi y ajusta según resultados.
💼 Caso Práctico Industrial: Identificación de partida
Contexto: Se está elaborando el presupuesto de una instalación de control de caudal. En los planos se especifica un caudalímetro electromagnético DN80 con salida 4-20 mA y pantalla local.
Pregunta: ¿Cómo debe redactarse la partida correspondiente para que sea clara y evite ambigüedades?
🍓 Raspberry Pi + Python
Contexto: El script Python genera un presupuesto en Markdown. Se quiere añadir una columna que muestre el precio unitario desglosado en materiales y mano de obra. ¿Qué estructura de datos sería adecuada?
Pregunta: ¿Cómo debería modificarse la clase Partida para incluir esta información?
🐍 Cálculo de gastos generales y beneficio
Contexto: Se tiene un presupuesto con un total parcial de 50.000 €. Se aplican gastos generales y beneficio industrial del 15% sobre el total parcial, luego imprevistos del 5% sobre el subtotal, e IVA del 21%.
Pregunta: ¿Cuál es el total final del presupuesto?
| Base de datos | Ámbito | Formato | Ventajas | Uso típico |
|---|---|---|---|---|
| BEDEC (ITeC) | Construcción, instalaciones | Online, descarga CSV | Actualización mensual, desglose detallado | Presupuestos de obra civil e instalaciones industriales |
| CYPE | Construcción y arquitectura | Integrado en software | Generación automática de mediciones y presupuestos | Proyectos de edificación |
| PREOC | Licitaciones públicas | PDF, Excel | Referencia en contratación pública | Ofertas a administraciones |
| Base de fabricantes | Instrumentación, PLC, etc. | Listas de precios, cotizaciones | Precios reales de mercado | Equipos específicos |
📚 Recursos Técnicos y Normativos 2026
Normativas y Estándares
- BEDEC - Base de Datos de la Construcción (ITeC)
- PREOC - Precios de Referencia de la Oficina de Contratación
- UNE-EN ISO 5457 - Formatos de documentación técnica