Ir al contenido

Partidas, mediciones y descompuesto

Router: backend/app/api/v1/budget_items.py. Prefijo: /api/v1/budgets/{budget_id}/items.

Método Endpoint Descripción
GET /api/v1/budgets/{id}/items Listar items (árbol)
POST /api/v1/budgets/{id}/items Crear item
PUT /api/v1/budgets/{id}/items/{item_id} Actualizar item
DELETE /api/v1/budgets/{id}/items/{item_id} Borrar item
PATCH /api/v1/budgets/{id}/items/reorder Reordenar items

El listado devuelve el árbol jerárquico ya serializado.

Router: backend/app/api/v1/budget_breakdowns.py.

Método Endpoint Descripción
GET /api/v1/budgets/{id}/items/{item_id}/breakdowns Listar recursos
POST /api/v1/budgets/{id}/items/{item_id}/breakdowns Añadir recurso
PUT /api/v1/budgets/{id}/items/{item_id}/breakdowns/{bd_id} Editar recurso
DELETE /api/v1/budgets/{id}/items/{item_id}/breakdowns/{bd_id} Borrar recurso

Campos del recurso:

  • tipo: mano_obra, maquinaria, materiales, subcontrata, principal, indirecto…
  • codigo, descripcion, unidad
  • cantidad, uds, precio_unitario
  • formula_cantidad, formula_precio
  • beneficio_industrial_pct, gastos_generales_pct, iva_pct
Método Endpoint Descripción
GET /api/v1/budgets/{id}/items/{item_id}/measurements Listar mediciones
POST /api/v1/budgets/{id}/items/{item_id}/measurements Crear medición
PUT /api/v1/budgets/{id}/items/{item_id}/measurements/{m_id} Editar medición
DELETE /api/v1/budgets/{id}/items/{item_id}/measurements/{m_id} Borrar medición

Líneas de medición (BudgetMeasurementLine)

Sección titulada «Líneas de medición (BudgetMeasurementLine)»
Método Endpoint Descripción
POST /api/v1/budgets/{id}/items/{item_id}/measurements/{m_id}/lines Añadir línea
PUT /api/v1/budgets/{id}/items/{item_id}/measurements/{m_id}/lines/{line_id} Editar línea
DELETE /api/v1/budgets/{id}/items/{item_id}/measurements/{m_id}/lines/{line_id} Borrar línea

Campos de línea:

  • n, largo, ancho, alto
  • formula (alternativa a dimensiones)
  • espacio, tag, fase_plan, fase_real, fase_cert
  • comentario, tipo

Router: backend/app/api/v1/budget_organize.py.

Método Endpoint Descripción
POST /api/v1/budgets/{id}/organize/restructure Reestructurar items
POST /api/v1/budgets/{id}/organize/renumber Renumerar códigos
POST /api/v1/budgets/{id}/organize/merge Fusionar partidas
POST /api/v1/budgets/{id}/organize/split/measurements Dividir por mediciones
POST /api/v1/budgets/{id}/organize/split/quantities Dividir por cantidades
POST /api/v1/budgets/{id}/organize/substitute Sustituir partida
POST /api/v1/budgets/{id}/organize/copy-quantities Copiar cantidades

Router: backend/app/api/v1/budget_ajuste.py.

Método Endpoint Descripción
POST /api/v1/budgets/{id}/ajustar Ajustar presupuesto a importe/porcentaje objetivo

Body:

{
"modo": "importe",
"valor": 50000,
"campo": "precio"
}
  • modo: importe | porcentaje
  • campo: precio | cantidad

Router: backend/app/api/v1/budget_liquidacion.py.

Método Endpoint Descripción
GET /api/v1/budgets/{id}/estados Vista “Presupuesto por estados”

Router: backend/app/api/v1/budget_espacios.py.

Método Endpoint Descripción
GET /api/v1/budgets/{id}/espacios Listar espacios agrupados
PUT /api/v1/budgets/{id}/espacios Renombrar espacio

El frontend consume estos endpoints a través de:

  • frontend/src/api/budgets.ts
  • frontend/src/hooks/useBudgets.ts
  • frontend/src/hooks/useBudgetItems.ts

Las mutaciones invalidan las queries de presupuesto y resumen:

onSuccess: () => {
qc.invalidateQueries({ queryKey: [KEY, budgetId] });
qc.invalidateQueries({ queryKey: [RESUMEN_KEY, budgetId] });
},