Partidas, mediciones y descompuesto
Partidas (BudgetItem)
Sección titulada «Partidas (BudgetItem)»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.
Descompuesto (BudgetBreakdown)
Sección titulada «Descompuesto (BudgetBreakdown)»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,unidadcantidad,uds,precio_unitarioformula_cantidad,formula_preciobeneficio_industrial_pct,gastos_generales_pct,iva_pct
Mediciones (BudgetMeasurement)
Sección titulada «Mediciones (BudgetMeasurement)»| 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,altoformula(alternativa a dimensiones)espacio,tag,fase_plan,fase_real,fase_certcomentario,tipo
Organización
Sección titulada «Organización»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|porcentajecampo:precio|cantidad
Liquidación
Sección titulada «Liquidación»Router: backend/app/api/v1/budget_liquidacion.py.
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/v1/budgets/{id}/estados |
Vista “Presupuesto por estados” |
Espacios
Sección titulada «Espacios»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 |
Frontend
Sección titulada «Frontend»El frontend consume estos endpoints a través de:
frontend/src/api/budgets.tsfrontend/src/hooks/useBudgets.tsfrontend/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] });},