> ## Documentation Index
> Fetch the complete documentation index at: https://a3erpapi.appcloud.es/llms.txt
> Use this file to discover all available pages before exploring further.

# Reservas de stock: consulta y gestión de reservas en A3ERP

> Consulta las reservas de stock vinculadas a pedidos y órdenes, crea nuevas reservas y elimínalas por identificador o línea usando la A3ERP API.

Los endpoints de reservas de stock te permiten gestionar las reservas de inventario vinculadas a pedidos de venta, órdenes de producción y otros documentos en A3ERP. Con esta API puedes consultar qué stock está comprometido, crear nuevas reservas para garantizar la disponibilidad y eliminarlas cuando ya no sean necesarias.

***

## GET — Consultar reservas de stock

```http theme={null}
GET https://servidor:<puerto>/api/reservas/{id}
```

Devuelve los datos de la reserva de stock indicada. El parámetro `{id}` es **opcional**: si lo omites, obtendrás todas las reservas registradas y podrás aplicar filtrado y ordenación.

**Ejemplo con identificador:**

```
https://servidor:5555/api/reservas/30
```

**Cabecera requerida**

| Cabecera        | Valor                |
| --------------- | -------------------- |
| `Authorization` | `Bearer <JWT_token>` |

**Parámetros de ruta**

<ParamField path="id" type="string">
  El identificador de la reserva de stock. Opcional: omítelo para obtener todas las reservas.
</ParamField>

**Campos de la respuesta**

<ResponseField name="identificador" type="integer">
  Identificador único de la reserva de stock en la base de datos.
</ResponseField>

<ResponseField name="tipdoc" type="string">
  Tipo de documento que originó la reserva (p. ej. `PV` para pedido de venta).
</ResponseField>

<ResponseField name="tipocont" type="string">
  Tipo de contabilización asociado al documento.
</ResponseField>

<ResponseField name="serie" type="string">
  Serie del documento, cuadrada a **8 caracteres**.
</ResponseField>

<ResponseField name="numero" type="integer">
  Número de documento dentro de la serie.
</ResponseField>

<ResponseField name="numdoc" type="string">
  Número de documento completo (serie/año/número).
</ResponseField>

<ResponseField name="referencia" type="string">
  Referencia externa del documento. Cadena vacía si no aplica.
</ResponseField>

<ResponseField name="codart" type="string">
  Código del artículo reservado, cuadrado a **15 caracteres**.
</ResponseField>

<ResponseField name="descart" type="string">
  Descripción del artículo reservado.
</ResponseField>

<ResponseField name="codalm" type="string">
  Código del almacén donde se efectúa la reserva, cuadrado a **8 caracteres**.
</ResponseField>

<ResponseField name="descalm" type="string">
  Descripción del almacén.
</ResponseField>

<ResponseField name="fecent" type="string">
  Fecha de entrada prevista de la mercancía en formato ISO 8601.
</ResponseField>

<ResponseField name="fecdoc" type="string">
  Fecha del documento que originó la reserva en formato ISO 8601.
</ResponseField>

<ResponseField name="entran" type="integer">
  Unidades que entran según la reserva.
</ResponseField>

<ResponseField name="salen" type="integer">
  Unidades que salen según la reserva.
</ResponseField>

<ResponseField name="compras" type="integer">
  Unidades comprometidas por pedidos de compra.
</ResponseField>

<ResponseField name="ventas" type="integer">
  Unidades comprometidas por pedidos de venta.
</ResponseField>

<ResponseField name="ordenes" type="integer">
  Unidades comprometidas por órdenes de producción internas.
</ResponseField>

<ResponseField name="externas" type="integer">
  Unidades comprometidas por órdenes externas.
</ResponseField>

<ResponseField name="codigo" type="string">
  Código del tercero (cliente o proveedor) cuadrado a **8 caracteres**.
</ResponseField>

<ResponseField name="nombre" type="string">
  Nombre o razón social del tercero vinculado a la reserva.
</ResponseField>

<ResponseField name="lote" type="string">
  Número de lote de la reserva. Cadena vacía si no aplica.
</ResponseField>

<ResponseField name="numserie" type="string">
  Número de serie de la reserva. Cadena vacía si no aplica.
</ResponseField>

<ResponseField name="feccaduc" type="string">
  Fecha de caducidad del lote en formato ISO 8601.
</ResponseField>

<ResponseField name="ubicacion" type="string">
  Ubicación física del artículo en el almacén. Puede ser `null`.
</ResponseField>

**Ejemplo de respuesta**

```json theme={null}
{
  "identificador": 1170,
  "tipdoc": "PV",
  "tipocont": "1",
  "serie": "    2019",
  "numero": 1,
  "numdoc": "1/2019/1",
  "referencia": "",
  "codart": "              1",
  "descart": "Bicicleta carrera",
  "codalm": "       1",
  "descalm": "Productos acabados (central)",
  "fecent": "2019-10-05T00:00:00.000+02:00",
  "fecdoc": "2019-10-05T00:00:00.000+02:00",
  "entran": 0,
  "salen": 21,
  "compras": 0,
  "ventas": 21,
  "ordenes": 0,
  "externas": 0,
  "codigo": "       1",
  "nombre": "SPORTS ABC",
  "lote": "",
  "numserie": "",
  "feccaduc": "1899-12-30T00:00:00.000+01:00",
  "ubicacion": "text"
}
```

***

## POST — Crear una reserva de stock

```http theme={null}
POST https://servidor:<puerto>/api/reservas
```

Crea una nueva reserva de stock. El cuerpo de la petición debe incluir un objeto `json` con el almacén, la fecha del documento y un array de líneas con los artículos a reservar.

**Cabecera requerida**

| Cabecera        | Valor                |
| --------------- | -------------------- |
| `Authorization` | `Bearer <JWT_token>` |
| `Content-Type`  | `application/json`   |

**Cuerpo de la petición**

```json theme={null}
{
  "json": {
    "codalm": "1",
    "fecdoc": "01/01/2022",
    "lineas": [
      {
        "codart": "1",
        "motivo": "RESERVA STOCK PRUEBA API",
        "unidadesstock": "5",
        "unidades": "5"
      }
    ]
  }
}
```

**Descripción de los campos del cuerpo**

<ParamField body="json.codalm" type="string" required>
  Código del almacén en el que se registra la reserva.
</ParamField>

<ParamField body="json.fecdoc" type="string" required>
  Fecha del documento de reserva en formato `DD/MM/YYYY`.
</ParamField>

<ParamField body="json.lineas" type="array" required>
  Array de líneas de reserva. Cada elemento representa un artículo a reservar.
</ParamField>

<ParamField body="json.lineas[].codart" type="string" required>
  Código del artículo que quieres reservar.
</ParamField>

<ParamField body="json.lineas[].motivo" type="string" required>
  Descripción o motivo de la reserva, que quedará registrado en el histórico.
</ParamField>

<ParamField body="json.lineas[].unidadesstock" type="string" required>
  Unidades de stock a reservar. Usa valor **positivo** para reservar entradas y **negativo** para liberar salidas.
</ParamField>

<ParamField body="json.lineas[].unidades" type="string" required>
  Unidades comerciales a reservar. Usa el mismo signo que `unidadesstock`.
</ParamField>

**Respuesta**

```json theme={null}
{
  "Codigo": "{id}"
}
```

<ResponseField name="Codigo" type="string">
  Identificador de la reserva de stock recién creada. Guárdalo para poder consultar o eliminar la reserva posteriormente.
</ResponseField>

***

## DELETE — Eliminar una reserva de stock

### Eliminar todos los registros de una reserva

```http theme={null}
DELETE https://servidor:<puerto>/api/reservas/eliminar/{id}
```

Elimina por completo la reserva de stock indicada, borrando todos sus registros asociados.

**Ejemplo:**

```
https://servidor:5555/api/reservas/eliminar/30
```

**Parámetros de ruta**

<ParamField path="id" type="string" required>
  El identificador de la reserva de stock que quieres eliminar por completo.
</ParamField>

***

### Eliminar una línea concreta de una reserva

```http theme={null}
DELETE https://servidor:<puerto>/api/reservas/eliminar/{id}/linea/{idlinea}
```

Elimina únicamente la línea indicada dentro de la reserva, manteniendo el resto de líneas intactas.

**Ejemplo:**

```
https://servidor:5555/api/reservas/eliminar/30/linea/2
```

**Parámetros de ruta**

<ParamField path="id" type="string" required>
  El identificador de la reserva de stock que contiene la línea a eliminar.
</ParamField>

<ParamField path="idlinea" type="string" required>
  El identificador de la línea concreta dentro de la reserva que quieres eliminar.
</ParamField>
