Unidades de Obra (Escandallos)
El recurso /workunits gestiona las unidades de obra, partidas técnicas y artículos compuestos (escandallos) de BaseGes ERP.
A diferencia de un artículo simple, una unidad de obra está formada por una cabecera descriptiva y un conjunto de líneas de componentes (artículos simples, consumibles, materiales y horas de mano de obra). Los costes brutos y precios de venta de la unidad de obra se calculan dinámicamente a partir de la suma de sus componentes.
Requiere autorización mediante cabecera HTTP:
X-Api-Key: {tu_clave_api}oAuthorization: Bearer {tu_token_jwt}
Resumen de Operaciones
| Método | Endpoint | Acción | Cuerpo de Petición | Código Éxito |
|---|---|---|---|---|
| GET | /workunits | Listado paginado de unidades de obra | Ninguno | 200 OK |
| GET | /workunits/{reference} | Detalle con desglose de componentes | Ninguno | 200 OK |
| POST | /workunits | Alta de partida con sus líneas | JSON (CreateWorkUnitCommand) | 201 Created |
| PUT | /workunits/{reference} | Modificación completa de la partida | JSON (UpdateWorkUnitCommand) | 200 OK |
| PATCH | /workunits/{reference} | Modificación de datos de cabecera | JSON (PatchWorkUnitHeaderCommand) | 200 OK |
1. Creación de una Unidad de Obra (POST)
POST /workunits
Crea una partida técnica completa. Puede crearse vacía o directamente con todas sus líneas de descomposición.
Parámetros de la Cabecera
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
reference | string | Sí | Código único de la unidad de obra (ej. "UO-CUADRO-01"). |
description | string | Sí | Descripción técnica de la partida o trabajo a ejecutar. |
familyCode | string | No | Código de familia clasificatoria. |
subfamilyCode | string | No | Código de subfamilia. |
groupCode | string | No | Código de grupo. |
salePrice | number | No | PVP sugerido (si no se informa, se calcula por suma de líneas + margen). |
lines | array | No | Lista de componentes que componen el descompuesto. |
Estructura de las Líneas de Componentes (lines)
| Campo en cada línea | Tipo | Obligatorio | Descripción |
|---|---|---|---|
lineNumber | integer | Sí | Número de orden correlativo (1, 2, 3...). |
componentReference | string | Sí | Referencia de un artículo existente en el catálogo. |
quantity | number | Sí | Cantidad de unidades o metros necesarios. |
costPrice | number | No | Coste unitario del componente. |
salePrice | number | No | Precio de venta repercutido del componente. |
Ejemplo de Petición POST
- JSON Body
- cURL
{
"reference": "PARTIDA-CUADRO-ELECTRICO",
"description": "Suministro e instalación de cuadro de protección secundario para nave industrial, compuesto por envolvente IP65, interruptor magnetotérmico general tetrapolar 40A, diferenciales y 4 horas de técnico montador.",
"familyCode": "03",
"lines": [
{
"lineNumber": 1,
"componentReference": "ENV-IP65-12M",
"quantity": 1,
"costPrice": 45.00,
"salePrice": 65.00
},
{
"lineNumber": 2,
"componentReference": "IGA-4P-40A",
"quantity": 1,
"costPrice": 38.50,
"salePrice": 52.00
},
{
"lineNumber": 3,
"componentReference": "MAN-HORA-OF1",
"quantity": 4,
"costPrice": 22.00,
"salePrice": 35.00
}
]
}
curl -X POST "http://localhost:5000/workunits" \
-H "Content-Type: application/json" \
-H "X-Api-Key: tu-api-key-secreta" \
-d '{
"reference": "PARTIDA-CUADRO-ELECTRICO",
"description": "Suministro e instalación de cuadro secundario",
"lines": [
{ "lineNumber": 1, "componentReference": "ENV-IP65-12M", "quantity": 1 }
]
}'
Respuestas HTTP
201 Created: Unidad de obra creada con éxito. Devuelve la referencia generada y el cálculo acumulado de costes.400 Bad Request: Datos incompletos o referencias de componentes inexistentes.409 Conflict: Ya existe una unidad de obra con la misma referencia.
2. Detalle de Unidad de Obra y Componentes (GET)
GET /workunits/{reference}
Devuelve toda la ficha técnica de la partida con el listado completo de sus componentes desglosados para presupuestación o valoración de costes.