Ir al contenido

Descompuesto

Fichero: backend/app/models/budget_breakdown.py.

El descompuesto (BudgetBreakdown) desglosa una partida en sus recursos: mano de obra, maquinaria, materiales, subcontratas, etc.

Campo Tipo Descripción
id UUID PK
budget_item_id UUID FK a budget_items.
tipo string(30) mano_obra, maquinaria, materiales, principal, indirecto, etc.
codigo string(20) Código del recurso.
descripcion string(500) Descripción.
descripcion_larga text Descripción larga.
unidad string(20) Unidad.
cantidad Numeric(18,4) Cantidad del recurso.
uds Numeric(18,4) Unidades de obra.
precio_unitario Numeric(18,4) Precio unitario.
importe Numeric(18,4) Importe calculado.
precio_venta Numeric(18,4) Precio de venta.
beneficio_industrial_pct Numeric(5,2) BI del recurso.
gastos_generales_pct Numeric(5,2) GG del recurso.
iva_pct Numeric(5,2) IVA del recurso.
orden int Orden.
formula_cantidad / formula_precio string Fórmulas con variables.
parent_id UUID Jerarquía interna (opcional).
budget_item: Mapped["BudgetItem"]
parent: Mapped["BudgetBreakdown | None"]
children: Mapped[list["BudgetBreakdown"]]

El importe de un recurso resuelve fórmulas con variables y luego multiplica:

importe = cantidad_obra × cantidad_recurso × uds × precio_unitario

Cuando no hay cantidad de obra, se usa la cantidad propia del recurso:

importe = cantidad_recurso × uds × precio_unitario

Implementación en backend/app/repositories/budget_item_serialization.py:401 (_calc_breakdown_importe).

  • principal: medición BC3 legacy; su cantidad se usa como cantidad de obra.
  • indirecto: no se suma al coste directo.
  • mano_obra, maquinaria, materiales, subcontrata: clásicos de un descompuesto.

Si la partida tiene recursos y cantidad de obra > 0:

precio_unitario = Σ importes_recursos / cantidad_obra
importe_partida = Σ importes_recursos

Esto se aplica en backend/app/repositories/budget_item_serialization.py:342 (_calc_partida).