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.

📌 Toma nota

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.

Hoja de cálculo con presupuesto: columnas de código, descripción, unidad, cantidad, precio unitario, importe. Al final, resumen por capítulos, gastos generales, beneficio, imprevistos, IVA y total.
Figura 22: Ejemplo de presupuesto detallado para un proyecto de automatización. Fuente: [A determinar] / Licencia: [Por determinar]
🐍 Generador automático de presupuesto desde mediciones (CSV)
# 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.

Tendencias Actuales 2026

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.

Aplicaciones con Raspberry Pi

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.

Aplicaciones con Arduino

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.

💼 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?

Tabla 1: Comparativa de bases de datos de precios para presupuestos
Base de datosÁmbitoFormatoVentajasUso típico
BEDEC (ITeC)Construcción, instalacionesOnline, descarga CSVActualización mensual, desglose detalladoPresupuestos de obra civil e instalaciones industriales
CYPEConstrucción y arquitecturaIntegrado en softwareGeneración automática de mediciones y presupuestosProyectos de edificación
PREOCLicitaciones públicasPDF, ExcelReferencia en contratación públicaOfertas a administraciones
Base de fabricantesInstrumentación, PLC, etc.Listas de precios, cotizacionesPrecios reales de mercadoEquipos específicos

📚 Recursos Técnicos y Normativos 2026

Normativas y Estándares

Recursos Raspberry Pi y Python