Fundamentos de la planificación económica en proyectos de automatización
La elaboración de unidades de obra, ofertas y presupuestos es una etapa crítica en la gestión de proyectos de instalaciones de medida y regulación. Permite cuantificar los recursos necesarios, estimar costes con precisión y presentar propuestas competitivas y transparentes. Un presupuesto bien estructurado garantiza la viabilidad económica del proyecto y facilita la toma de decisiones por parte del cliente.
Este capítulo aborda el proceso sistemático para identificar unidades de obra, desglosar sus componentes, cuantificar materiales y mano de obra, asignar precios unitarios y elaborar la oferta técnica y económica final.
Identificación de unidades de obra
Una unidad de obra es el conjunto mínimo de tareas que constituyen una parte funcional y medible del sistema. Por ejemplo, en una instalación de regulación de temperatura, las unidades de obra pueden ser:
- Suministro e instalación de válvula de control motorizada DN50.
- Tendido de cable apantallado 2x1,5 mm².
- Montaje de armario de control IP66 800x600x300.
- Programación del lazo PID en PLC.
La identificación se realiza desglosando el proyecto según los planos y la memoria técnica, agrupando tareas que se ejecutan de forma continua y que tienen una medición directa (metros lineales, unidades, etc.).
Componentes de una unidad de obra
Cada unidad de obra está compuesta por:
- Materiales principales: equipos, cableado, tuberías, armarios.
- Mano de obra directa: horas de instaladores, electricistas, programadores.
- Medios auxiliares: andamios, herramientas especiales, equipos de elevación.
- Elementos de protección: EPI, señalización, vallado de seguridad.
Por ejemplo, la unidad "montaje de cuadro eléctrico" incluye la caja, interruptores, cableado interno, horas de montador, uso de taladro y escalera, y EPI como guantes y gafas.
Cuantificación de materiales y trabajos
La cuantificación se realiza a partir de los planos de implantación, esquemas eléctricos y listados de materiales. Las unidades de medida más comunes son:
- Metros lineales (m): cableado, canalizaciones, tuberías.
- Metros cuadrados (m²): bandejas, pintura.
- Unidades (ud): sensores, válvulas, armarios, bornes.
- Kilogramos (kg): perfilería, anclajes.
- Horas (h): mano de obra.
La precisión en esta fase es esencial: un error de medición se traslada directamente al presupuesto final.
Asociación de precios unitarios
Los precios unitarios se obtienen de:
- Bases de datos sectoriales: BEDEC (ITeC), CYPE, PREOC.
- Tarifas de proveedores: precios de equipos, materiales, subcontratas.
- Cálculos internos: coste de mano de obra (salario + seguridad social + medios).
Un precio unitario debe incluir: coste de materiales, mano de obra, maquinaria, medios auxiliares, gastos generales y beneficio industrial. Por ejemplo, el precio unitario de "tendido de cable" incluye el cable, las horas del electricista, el uso de guías, y un porcentaje de gastos generales.
Elaboración del presupuesto total
El presupuesto se construye sumando los importes de cada unidad de obra (cantidad × precio unitario). Se estructura en capítulos para facilitar la lectura:
- Capítulo 1: Instrumentación de campo
- Capítulo 2: Cableado y canalizaciones
- Capítulo 3: Armarios y equipos de control
- Capítulo 4: Mano de obra de montaje
- Capítulo 5: Programación y puesta en marcha
- Capítulo 6: Gastos generales y beneficio industrial
- Capítulo 7: Imprevistos (3-5%) e IVA
El resultado es el presupuesto de ejecución material (PEM) y el presupuesto total con impuestos.
Presentación de la oferta técnica y económica
La oferta final consta de dos partes:
- Oferta técnica: alcance de los trabajos, metodología de ejecución, planificación (cronograma), garantías y referencias.
- Oferta económica: presupuesto desglosado por capítulos, condiciones de pago (anticipo, hitos, final), validez de la oferta y posibles alternativas de optimización.
La presentación debe ser clara, estructurada y profesional, facilitando la comparación con otras propuestas.
# budget_generator.py - Genera un presupuesto estructurado a partir de partidas
# Útil para estandarizar la elaboración de ofertas
import csv
import json
from datetime import datetime
class Partida:
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:
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 = []
self.porcentaje_gg_bi = 0.15 # 15% gastos generales + beneficio
self.porcentaje_imprevistos = 0.05
self.iva = 0.21
def agregar_partida(self, partida):
self.partidas.append(partida)
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):
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 ({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 ---
if __name__ == "__main__":
presup = Presupuesto(
nombre_proyecto="Control de temperatura en reactor químico",
cliente="Industrias Químicas del Sur S.A.",
autor="Ing. Carlos Méndez"
)
# Añadir partidas
presup.agregar_partida(Partida("INS-01", "Transmisor de presión 4-20 mA, 0-10 bar", "ud", 2, 450.00))
presup.agregar_partida(Partida("INS-02", "Sensor PT100 clase A con termopozo", "ud", 3, 320.00))
presup.agregar_partida(Partida("INS-03", "Válvula de control DN25 con posicionador", "ud", 1, 1250.00))
presup.agregar_partida(Partida("CAB-01", "Cable apantallado 2x1,5 mm²", "m", 150, 2.80))
presup.agregar_partida(Partida("ARM-01", "Armario de control IP66 800x600x300", "ud", 1, 780.00))
presup.agregar_partida(Partida("MON-01", "Mano de obra de montaje (electricista)", "h", 40, 35.00))
presup.guardar("presupuesto_proyecto.md")
print(presup.generar_informe())
Este script genera un presupuesto estructurado a partir de partidas, calcula gastos generales, beneficio, imprevistos e IVA, y produce un informe en Markdown. Es una herramienta útil para estandarizar la elaboración de presupuestos.
La elaboración de presupuestos se apoya en software de mediciones y presupuestos (CYPE, Presto, Arquímedes) que integran bases de datos actualizadas y generan automáticamente la documentación. Las plataformas de licitación electrónica exigen formatos estandarizados (FIEL, XML). Además, los gemelos digitales permiten extraer mediciones directamente del modelo 3D, reduciendo errores y tiempos.
Una Raspberry Pi puede ejecutar scripts Python como el anterior para generar presupuestos a partir de datos introducidos en campo. También puede actuar como servidor para visualizar ofertas en tablets durante reuniones con clientes.
En proyectos educativos, Arduino puede utilizarse para simular la medición de consumos (por ejemplo, tiempo de funcionamiento de una bomba) y calcular el coste energético asociado, introduciendo conceptos de presupuesto operativo.
- ✅ 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: Unidad de obra
Contexto: En un proyecto de automatización, se debe definir la unidad de obra "tendido de cable apantallado 2x1,5 mm²". ¿Qué componentes deben incluirse en su precio unitario?
Pregunta: ¿Qué elementos son necesarios?
🍓 Raspberry Pi + Python
Contexto: El script Python calcula el total del presupuesto aplicando gastos generales (15%), imprevistos (5%) e IVA (21%). Si el total parcial de las partidas es 10.000 €, ¿cuál es el total final?
Pregunta: ¿Qué resultado se obtiene?
🐍 Precio unitario
Contexto: Una partida tiene una cantidad de 50 m, precio unitario 2,50 €/m. ¿Cuál es el importe parcial?
Pregunta: ¿Qué valor se obtiene?
| Unidad de obra | Componentes típicos | Unidad de medida | Precio unitario aproximado |
|---|---|---|---|
| Suministro e instalación de válvula motorizada DN50 | Válvula, actuador, mano de obra, conexiones | ud | 1.200-2.500 € |
| Tendido de cable apantallado 2x1,5 mm² | Cable, mano de obra, guías, EPI | m | 3,50-5,00 € |
| Montaje de armario de control IP66 800x600 | Armario, bornes, riel, mano de obra | ud | 800-1.500 € |
| Programación de lazo PID en PLC | Horas de ingeniero, software, pruebas | h | 60-100 € |
📚 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
- ISO 9001:2015 - Gestión de proyectos (presupuestos)