Descompuesto
Fichero: backend/app/models/budget_breakdown.py.
El descompuesto (BudgetBreakdown) desglosa una partida en sus recursos: mano de obra, maquinaria, materiales, subcontratas, etc.
Campos principales
Sección titulada «Campos principales»| 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). |
Relaciones
Sección titulada «Relaciones»budget_item: Mapped["BudgetItem"]parent: Mapped["BudgetBreakdown | None"]children: Mapped[list["BudgetBreakdown"]]Cálculo del importe
Sección titulada «Cálculo del importe»El importe de un recurso resuelve fórmulas con variables y luego multiplica:
importe = cantidad_obra × cantidad_recurso × uds × precio_unitarioCuando no hay cantidad de obra, se usa la cantidad propia del recurso:
importe = cantidad_recurso × uds × precio_unitarioImplementación en backend/app/repositories/budget_item_serialization.py:401 (_calc_breakdown_importe).
Tipos especiales
Sección titulada «Tipos especiales»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.
Cálculo del precio unitario de la partida
Sección titulada «Cálculo del precio unitario de la partida»Si la partida tiene recursos y cantidad de obra > 0:
precio_unitario = Σ importes_recursos / cantidad_obraimporte_partida = Σ importes_recursosEsto se aplica en backend/app/repositories/budget_item_serialization.py:342 (_calc_partida).