> ## 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.

# Gestión de documentos de compra y venta en A3ERP API

> Crea, consulta, modifica, anula y elimina documentos A3ERP (ofertas, pedidos, albaranes, facturas) con sus líneas, detalles y adjuntos.

Los endpoints de documento te permiten gestionar toda la cadena documental de compras y ventas de A3ERP: desde una oferta inicial hasta la factura final, pasando por pedidos, albaranes y depósitos. Cada documento se identifica por su **tipo** (`{tipo}`) y su **identificador interno** (`{id}`). La estructura de respuesta incluye siempre la cabecera del documento (`Documentos`), sus líneas (`Lineas`) y el detalle de cada línea (`Detalle`), permitiendo una visión completa del documento en una sola llamada.

***

## Tipos de documento

El parámetro `{tipo}` de la ruta debe ser la abreviatura del tipo de documento. Los valores disponibles son:

| Abreviatura | Tipo de documento            |
| ----------- | ---------------------------- |
| `OV`        | Oferta de venta              |
| `PV`        | Pedido de venta              |
| `AV`        | Albarán de venta             |
| `DV`        | Depósito de venta            |
| `FVS`       | Factura de venta (stock)     |
| `FVC`       | Factura de venta (contable)  |
| `EX`        | Expedientes                  |
| `TR`        | Traspasos                    |
| `RE`        | Regularizaciones             |
| `OC`        | Oferta de compra             |
| `PC`        | Pedido de compra             |
| `AC`        | Albarán de compra            |
| `DC`        | Depósito de compra           |
| `FCS`       | Factura de compra (stock)    |
| `FCC`       | Factura de compra (contable) |

***

<Tabs>
  <Tab title="GET">
    ## Obtener todos los documentos de un tipo

    Devuelve todos los documentos del tipo indicado, incluyendo cabecera, líneas y detalle de cada línea.

    <ParamField path="tipo" type="string" required>
      Tipo de documento (p. ej. `PV`, `FVS`, `AV`).
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    GET https://servidor:<puerto>/api/documento/{tipo}
    Authorization: Bearer {token}
    ```

    **Respuesta 200:**

    ```json theme={null}
    {
      "Documentos": [
        {
          "idpedv": "text",
          "tipocont": "text",
          "serie": "text",
          "numdoc": "text",
          "codcli": "text",
          "nomcli": "text",
          "nifcli": "text",
          "fecha": "text",
          "basemoneda": "text",
          "totivamoneda": "text",
          "totdoc": "text",
          "situacion": "text",
          "centrocoste": "text",
          "centrocoste2": "text",
          "centrocoste3": "text",
          "codrep": "text",
          "codalm": "text",
          "regiva": "text",
          "situaciondetalle": "text",
          "docpag": "text",
          "forpag": "text",
          "ivaincluido": "text",
          "numdir": "text",
          "Lineas": [
            {
              "unidades": "text",
              "idpedv": "text",
              "idlin": "text",
              "ordlin": "text",
              "fecha": "text",
              "codart": "text",
              "codalm": "text",
              "desclin": "text",
              "prcmoneda": "text",
              "desc1": "text",
              "desc2": "text",
              "desc3": "text",
              "desc4": "text",
              "basemoneda": "text",
              "tipiva": "text",
              "situacion": "text",
              "eskit": "text",
              "escomponente": "text",
              "Detalle": [
                {
                  "idpedv": "text",
                  "idlin": "text",
                  "unidades": "text",
                  "feccaduc": "text",
                  "grupo": "text"
                }
              ]
            }
          ]
        }
      ]
    }
    ```

    | Código | Descripción            |
    | ------ | ---------------------- |
    | `200`  | Lista de documentos    |
    | `401`  | Unauthorized           |
    | `404`  | Endpoint no encontrado |

    ***

    ## Obtener la cabecera de un documento

    Devuelve únicamente los datos de cabecera del documento, sin líneas ni detalle. Útil cuando solo necesitas los datos generales del documento (importes totales, cliente, fechas, situación...).

    <ParamField path="tipo" type="string" required>
      Tipo de documento (p. ej. `PV`, `FVS`, `AV`).
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador interno del documento.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    GET https://servidor:<puerto>/api/cabeceradocumento/{tipo}/{id}
    Authorization: Bearer {token}
    ```

    **Respuesta 200:**

    ```json theme={null}
    {
      "idpedv": 1,
      "tipocont": "text",
      "serie": "text",
      "numdoc": 1,
      "codcli": "text",
      "nomcli": "text",
      "nifcli": "text",
      "fecha": "2026-01-01",
      "referencia": "text",
      "basemoneda": 1,
      "totivamoneda": 1,
      "totdoc": 1,
      "situacion": "text",
      "centrocoste": "text",
      "centrocoste2": "text",
      "centrocoste3": "text",
      "codrep": "text",
      "codrep2": "text",
      "codrep3": "text",
      "codalm": "text",
      "regiva": "text",
      "situaciondetalle": "text",
      "docpag": "text",
      "forpag": "text",
      "ivaincluido": "text",
      "numdir": 1
    }
    ```

    | Código | Descripción            |
    | ------ | ---------------------- |
    | `200`  | Cabecera del documento |
    | `401`  | Unauthorized           |
    | `404`  | Endpoint no encontrado |

    ***

    ## Imprimir un documento en PDF

    Genera el PDF de un documento y lo devuelve codificado en base64. Si no se especifica el modelo de impresión, se toma por defecto el configurado para el cliente o proveedor del documento.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField path="modelo" type="string">
      Modelo de impresión. Opcional — si se omite, se usa el modelo por defecto del cliente/proveedor.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    GET https://servidor:<puerto>/api/documento/{tipo}/impresion/{id}/modelo/{modelo}
    Authorization: Bearer {token}
    ```

    **Respuesta 200:**

    ```json theme={null}
    {
      "documento": "<base64 del PDF>"
    }
    ```

    | Código | Descripción            |
    | ------ | ---------------------- |
    | `200`  | PDF generado en base64 |
    | `401`  | Unauthorized           |
    | `404`  | Endpoint no encontrado |

    ***

    ## Servir un documento a otro

    Sirve el documento indicado convirtiéndolo en un documento de nivel superior de la cadena documental (por ejemplo, sirve un pedido a albarán, o un albarán a factura).

    <ParamField path="tipo" type="string" required>
      Tipo del documento origen (p. ej. `PV`, `AV`).
    </ParamField>

    <ParamField path="servir" type="string" required>
      Acción de servicio. Valores posibles: `servirapedido`, `serviraalbaran`, `servirafactura`, `serviradeposito`.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento a servir.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    GET https://servidor:<puerto>/api/documento/{tipo}/{servir}/{id}
    Authorization: Bearer {token}
    ```

    **Ejemplo — Servir albarán a factura:**

    ```http theme={null}
    GET https://servidor:5555/api/documento/AV/servirafactura/55
    Authorization: Bearer {token}
    ```

    **Respuesta 200:**

    ```json theme={null}
    {
      "Identificador": "text"
    }
    ```

    | Código | Descripción                                            |
    | ------ | ------------------------------------------------------ |
    | `200`  | Documento servido — devuelve el ID del nuevo documento |
    | `401`  | Unauthorized                                           |
    | `404`  | Endpoint no encontrado                                 |
    | `406`  | Error al servir el documento                           |

    ***

    ## Imprimir un documento por GUID (sin autenticación)

    Permite obtener el PDF de un documento público usando el GUID almacenado en el campo `API_GUIDDESCARGA` de la cabecera del documento. Este endpoint **no requiere token de autenticación**, lo que lo hace ideal para incluir en enlaces de descarga pública.

    Si necesitas un modelo de impresión concreto, añade `/modelo/{modelo}` al final de la URL.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="guid" type="string" required>
      GUID del documento. Se obtiene del campo `API_GUIDDESCARGA` de la cabecera.
    </ParamField>

    ```http theme={null}
    GET https://servidor:<puerto>/api/documento/{tipo}/impresionguid/{guid}
    ```

    **Respuesta 200:**

    ```json theme={null}
    {
      "Documento": "<base64 del PDF>"
    }
    ```

    | Código | Descripción                  |
    | ------ | ---------------------------- |
    | `200`  | PDF generado en base64       |
    | `302`  | El documento no existe       |
    | `401`  | Unauthorized                 |
    | `404`  | Endpoint no encontrado       |
    | `406`  | Error al servir el documento |
    | `500`  | Error interno del servidor   |
  </Tab>

  <Tab title="POST">
    ## Crear un nuevo documento

    Crea un documento de compra o venta con su cabecera y líneas en una sola llamada.

    * Para documentos de **venta**, incluye `codcli` (código de cliente).
    * Para documentos de **compra**, incluye `codpro` (código de proveedor).
    * En pedidos de compra, incluye también `fecentrega` (fecha de entrega).

    <ParamField path="tipo" type="string" required>
      Tipo de documento a crear (p. ej. `PV`, `FVS`, `AC`).
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    POST https://servidor:<puerto>/api/documento/{tipo}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    ```json theme={null}
    {
      "json": {
        "fecha": "15/07/2022",
        "codcli": "12",
        "lineas": [
          {
            "codart": "8403",
            "unidades": "2"
          }
        ]
      }
    }
    ```

    **Ejemplo — Alta de traspaso con detalle de lote y número de serie:**

    ```json theme={null}
    [
      {
        "codalment": "       2",
        "codalmsal": "       1",
        "fecha": "15/07/2022",
        "motivo": "Alta de traspaso 1",
        "lineas": [
          {
            "codalment": "       2",
            "codalmsal": "       1",
            "codart": "RF",
            "unidades": 2,
            "detalle": [
              {
                "unidades": "1",
                "feccaduc": "30/12/1899",
                "ubicacionsal": "P1E1A2",
                "ubicacionent": "T4",
                "numserie": "RMNU73HKNV"
              },
              {
                "unidades": "1",
                "feccaduc": "30/12/1899",
                "ubicacionsal": "P1E1A2",
                "ubicacionent": "T4",
                "numserie": "3332KBG5GH"
              }
            ]
          }
        ]
      }
    ]
    ```

    **Respuesta 200:**

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

    El campo `id` contiene el identificador del nuevo documento creado.

    | Código | Descripción                         |
    | ------ | ----------------------------------- |
    | `200`  | Documento creado — devuelve el `id` |
    | `401`  | Unauthorized                        |
    | `404`  | Endpoint no encontrado              |
    | `406`  | Error al crear el documento         |

    ***

    ## Servir líneas a otro documento

    Sirve líneas específicas de uno o varios documentos a un nuevo documento de nivel superior. El tipo de destino se indica en la ruta `{servir}`.

    <ParamField path="servir" type="string" required>
      Destino del servicio. Valores posibles: `servirlineasapedido`, `servirlineasaalbaran`, `servirlineasadeposito`.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    POST https://servidor:<puerto>/api/{servir}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    ```json theme={null}
    {
      "fecha": "13/06/2025",
      "codigo": "1",
      "tipo": "C",
      "Lineas": [
        {
          "tipo": "P",
          "idlin": "texto",
          "unidades": "5",
          "iddocumento": "166"
        }
      ]
    }
    ```

    **Campos del cuerpo:**

    <ParamField body="fecha" type="string" required>
      Fecha del documento destino en formato `DD/MM/AAAA`.
    </ParamField>

    <ParamField body="codigo" type="string" required>
      Código del cliente o proveedor.
    </ParamField>

    <ParamField body="tipo" type="string" required>
      Indica si es compra (`C`) o venta (`V`).
    </ParamField>

    <ParamField body="Lineas" type="array" required>
      Array de líneas a servir. Cada objeto debe incluir `tipo`, `idlin`, `unidades` e `iddocumento`. Opcionalmente puede incluir `lote`, `numserie`, `feccaduc` o `ubicacion`.
    </ParamField>

    **Ejemplo — Servir albarán a factura con lote, número de serie y ubicación:**

    ```json theme={null}
    {
      "fecha": "21/04/2022",
      "codigo": " 1",
      "tipo": "C",
      "lineas": [
        {
          "tipo": "O",
          "iddocumento": "166",
          "numlin": "3",
          "unidades": "3",
          "lote": "L145"
        },
        {
          "tipo": "O",
          "iddocumento": "164",
          "numlin": "4",
          "unidades": "10",
          "feccaduc": "22/04/2022",
          "numserie": "14528798"
        },
        {
          "tipo": "O",
          "iddocumento": "165",
          "numlin": "4",
          "unidades": "2",
          "ubicacion": "A2P3L8"
        }
      ]
    }
    ```

    **Respuesta 200:**

    ```json theme={null}
    {
      "Identificador": "text"
    }
    ```

    | Código | Descripción                                                     |
    | ------ | --------------------------------------------------------------- |
    | `200`  | Líneas servidas — devuelve el identificador del nuevo documento |
    | `401`  | Unauthorized                                                    |
    | `404`  | Endpoint no encontrado                                          |
    | `406`  | Error al servir el documento                                    |

    ***

    ## Enviar documento por email en formato PDF

    Genera el PDF del documento con el modelo de impresión indicado y lo envía por correo electrónico.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField path="modelo" type="string" required>
      Modelo de impresión para el PDF.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    POST https://servidor:<puerto>/api/documento/{tipo}/email/{id}/modelo/{modelo}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    <ParamField body="para" type="string">
      Dirección de correo del destinatario principal.
    </ParamField>

    <ParamField body="cc" type="string">
      Dirección de correo en copia.
    </ParamField>

    <ParamField body="ccoo" type="string">
      Dirección de correo en copia oculta.
    </ParamField>

    <ParamField body="titulo" type="string">
      Título o asunto del correo.
    </ParamField>

    <ParamField body="asunto" type="string">
      Asunto del correo.
    </ParamField>

    <ParamField body="texto" type="string">
      Texto plano del cuerpo del correo.
    </ParamField>

    <ParamField body="cuerpo" type="string">
      Cuerpo del correo en formato HTML.
    </ParamField>

    **Ejemplo — Enviar una factura de venta:**

    ```http theme={null}
    POST https://servidor:5555/api/documento/FVS/email/5767/modelo/1
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    ```json theme={null}
    {
      "para": "rperez@jnc.es",
      "cc": "charyperez1@gmail.com",
      "cco": "fsaez@jnc.es",
      "titulo": "Envío con documento adjunto",
      "asunto": "Envío documento",
      "texto": "Adjunto envío su documento en pdf",
      "cuerpo": "<HTML><HEAD></HEAD><BODY lang=ES>Estimado cliente,<p>Adjunto archivo con documento en formato pdf.<p>Un saludo,<p><b>Rosario Pérez</b></BODY></HTML>"
    }
    ```

    | Código | Descripción                               |
    | ------ | ----------------------------------------- |
    | `200`  | Documento enviado por email correctamente |
    | `401`  | Unauthorized                              |
    | `404`  | Endpoint no encontrado                    |

    ***

    ## Vincular adjunto a un documento

    Adjunta un archivo a un documento de compra o venta. El archivo se guarda en la carpeta de vínculos configurada en `config.ini` con el nombre y extensión indicados.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    POST https://servidor:<puerto>/api/documento/{tipo}/vincular/{id}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    <ParamField body="nombre" type="string">
      Nombre del archivo con extensión (p. ej. `contrato.pdf`). La extensión determina el tipo de archivo.
    </ParamField>

    <ParamField body="Documento" type="string">
      Contenido del archivo codificado en base64.
    </ParamField>

    ```json theme={null}
    {
      "nombre": "contrato.pdf",
      "Documento": "<base64 del archivo>"
    }
    ```

    | Código | Descripción                     |
    | ------ | ------------------------------- |
    | `200`  | Adjunto vinculado correctamente |
    | `401`  | Unauthorized                    |
    | `404`  | Endpoint no encontrado          |
    | `406`  | Error al vincular el adjunto    |

    ***

    ## Vincular adjunto a una línea de documento

    Adjunta un archivo a una línea concreta de un documento.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="linea" type="integer" required>
      Identificador de la línea a la que adjuntar el archivo.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    POST https://servidor:<puerto>/api/documento/{tipo}/vincularlinea/{linea}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    <ParamField body="nombre" type="string">
      Nombre del archivo con extensión.
    </ParamField>

    <ParamField body="descripcion" type="string">
      Descripción del adjunto.
    </ParamField>

    <ParamField body="Documento" type="string">
      Contenido del archivo codificado en base64.
    </ParamField>

    ```json theme={null}
    {
      "nombre": "especificaciones.pdf",
      "descripcion": "Especificaciones técnicas del artículo",
      "Documento": "<base64 del archivo>"
    }
    ```

    | Código | Descripción                                |
    | ------ | ------------------------------------------ |
    | `200`  | Adjunto vinculado a la línea correctamente |
    | `401`  | Unauthorized                               |
    | `404`  | Endpoint no encontrado                     |
    | `406`  | Error al vincular el adjunto               |

    ***

    ## Anular un documento completo

    Anula el documento indicado en su totalidad.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento a anular.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    POST https://servidor:<puerto>/api/documento/{tipo}/anular/{id}
    Authorization: Bearer {token}
    ```

    **Respuesta 200:**

    ```json theme={null}
    {
      "Documento": "text"
    }
    ```

    | Código | Descripción                     |
    | ------ | ------------------------------- |
    | `200`  | Documento anulado correctamente |
    | `302`  | El documento no existe          |
    | `401`  | Unauthorized                    |
    | `404`  | Endpoint no encontrado          |
    | `406`  | Error al anular                 |

    ***

    ## Anular una línea de un documento

    Anula una única línea del documento, identificada por su número de línea.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField path="numlin" type="integer" required>
      Número de la línea a anular.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    POST https://servidor:<puerto>/api/documento/{tipo}/anular/{id}/linea/{numlin}
    Authorization: Bearer {token}
    ```

    | Código | Descripción                 |
    | ------ | --------------------------- |
    | `200`  | Línea anulada correctamente |
    | `302`  | El documento no existe      |
    | `401`  | Unauthorized                |
    | `404`  | Endpoint no encontrado      |
    | `406`  | No existe la línea          |

    ***

    ## Anular unidades específicas de una línea

    Anula un número concreto de unidades de una línea, sin afectar al resto.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField path="numlin" type="integer" required>
      Número de la línea.
    </ParamField>

    <ParamField path="unidades" type="integer" required>
      Número de unidades a anular de la línea.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    POST https://servidor:<puerto>/api/documento/{tipo}/anular/{id}/linea/{numlin}/unidades/{unidades}
    Authorization: Bearer {token}
    ```

    | Código | Descripción                     |
    | ------ | ------------------------------- |
    | `200`  | Unidades anuladas correctamente |
    | `302`  | El documento no existe          |
    | `401`  | Unauthorized                    |
    | `404`  | Endpoint no encontrado          |
    | `406`  | No existe la línea              |
  </Tab>

  <Tab title="PUT">
    ## Actualizar un documento existente

    Actualiza los datos de cabecera y/o las líneas de un documento ya existente.

    <ParamField path="tipo" type="string" required>
      Tipo de documento a actualizar.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    PUT https://servidor:<puerto>/api/documento/{tipo}/{id}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    ```json theme={null}
    {
      "json": {
        "fecha": "01/09/2021",
        "codcli": "12",
        "serie": "2022",
        "codalm": " 1",
        "fecentrega": "02/09/2021",
        "lineas": [
          {
            "numlinped": "1",
            "codart": "3",
            "unidades": "4",
            "prcmoneda": "33",
            "desc1": "10"
          },
          {
            "numlinped": "2",
            "codart": "4C",
            "unidades": "5",
            "prcmoneda": "24",
            "desc1": "15"
          }
        ]
      }
    }
    ```

    <Note>
      Para modificar líneas existentes, incluye el campo `numlinped` con el número de línea correspondiente. Las líneas que no aparezcan en el array no se modifican.
    </Note>

    **Respuesta 200:**

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

    | Código | Descripción                              |
    | ------ | ---------------------------------------- |
    | `200`  | Documento actualizado — devuelve el `id` |
    | `401`  | Unauthorized                             |
    | `404`  | Endpoint no encontrado                   |
    | `406`  | Error al actualizar el documento         |

    ***

    ## Añadir nuevas líneas a un documento existente

    Agrega nuevas líneas a un documento ya creado sin modificar las existentes.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    PUT https://servidor:<puerto>/api/documento/{tipo}/nuevaslineas/{id}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    ```json theme={null}
    {
      "lineas": [
        {
          "codart": "8403",
          "desclin": "PORTATIL LENOVO THINKPAD T480",
          "unidades": 2
        }
      ]
    }
    ```

    **Respuesta 200:**

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

    | Código | Descripción                                      |
    | ------ | ------------------------------------------------ |
    | `200`  | Líneas añadidas — devuelve el `id` del documento |
    | `401`  | Unauthorized                                     |
    | `404`  | Endpoint no encontrado                           |
    | `406`  | Error al añadir líneas                           |

    ***

    ## Añadir detalle (lote / número de serie) a una línea

    Añade detalle de trazabilidad —lotes, números de serie, fechas de caducidad, ubicaciones— a una línea existente de un documento.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField path="numlin" type="integer" required>
      Número de línea (campo `numlin`, no el identificador `idlin`).
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    PUT https://servidor:<puerto>/api/documento/{tipo}/nuevosdetalleslinea/iddocumento/{id}/numlin/{numlin}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    ```json theme={null}
    {
      "Unidades": "3",
      "Detalle": [
        {
          "unidades": "1",
          "lote": "L10",
          "feccaduc": "12/12/2027"
        }
      ]
    }
    ```

    <Note>
      Es importante que el campo `Unidades` (en la raíz del body) coincida con la suma de unidades de todos los objetos del array `Detalle`.
    </Note>

    **Respuesta 200:**

    ```json theme={null}
    {
      "Documento": "text"
    }
    ```

    | Código | Descripción                                 |
    | ------ | ------------------------------------------- |
    | `200`  | Detalle actualizado correctamente           |
    | `302`  | El documento no existe                      |
    | `401`  | Unauthorized                                |
    | `404`  | Endpoint no encontrado                      |
    | `406`  | No existe la línea o el JSON no es correcto |

    ***

    ## Añadir componentes a una línea KIT

    Agrega los componentes de un artículo KIT a una línea de documento. El artículo de la línea debe estar configurado como KIT en A3ERP.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField path="numlin" type="integer" required>
      Número de línea (campo `numlin`, no el identificador `idlin`).
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    PUT https://servidor:<puerto>/api/documento/{tipo}/nuevoscomponenteslinea/iddocumento/{id}/numlin/{numlin}
    Authorization: Bearer {token}
    Content-Type: application/json
    ```

    **Cuerpo de la petición:**

    ```json theme={null}
    {
      "componentes": [
        {
          "Codart": "L10",
          "Unidades": "10"
        }
      ]
    }
    ```

    **Respuesta 200:**

    ```json theme={null}
    {
      "Documento": "text"
    }
    ```

    | Código | Descripción                                 |
    | ------ | ------------------------------------------- |
    | `200`  | Componentes actualizados correctamente      |
    | `302`  | El documento no existe                      |
    | `401`  | Unauthorized                                |
    | `404`  | Endpoint no encontrado                      |
    | `406`  | No existe la línea o el JSON no es correcto |
  </Tab>

  <Tab title="DELETE">
    ## Eliminar un documento

    Elimina de forma permanente el documento indicado junto con todas sus líneas y detalle.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento a eliminar.
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    DELETE https://servidor:<puerto>/api/documento/{tipo}/{id}
    Authorization: Bearer {token}
    ```

    <Warning>
      La eliminación de documentos es irreversible. Asegúrate de que el documento no esté vinculado a otros documentos de la cadena (p. ej. albaranes ya servidos a factura) antes de eliminarlo.
    </Warning>

    | Código | Descripción                       |
    | ------ | --------------------------------- |
    | `200`  | Documento eliminado correctamente |
    | `401`  | Unauthorized                      |
    | `404`  | Endpoint no encontrado            |
    | `406`  | Error al eliminar el documento    |

    ***

    ## Eliminar una línea de un documento

    Elimina una línea concreta del documento, identificada por el id del documento y el número de línea.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField path="numlin" type="integer" required>
      Número de la línea a eliminar (campo `idlin`).
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    DELETE https://servidor:<puerto>/api/documento/{tipo}/{id}/linea/{numlin}
    Authorization: Bearer {token}
    ```

    | Código | Descripción                   |
    | ------ | ----------------------------- |
    | `200`  | Línea eliminada correctamente |
    | `401`  | Unauthorized                  |
    | `404`  | Endpoint no encontrado        |
    | `406`  | No existe la línea a borrar   |

    ***

    ## Eliminar los componentes de una línea KIT

    Elimina los componentes asociados a una línea de artículo KIT en un documento.

    <ParamField path="tipo" type="string" required>
      Tipo de documento.
    </ParamField>

    <ParamField path="id" type="integer" required>
      Identificador del documento.
    </ParamField>

    <ParamField path="numlin" type="integer" required>
      Número de la línea cuyos componentes se eliminarán (campo `idlin`).
    </ParamField>

    <ParamField header="Authorization" type="string" required>
      Token JWT con prefijo `Bearer`.
    </ParamField>

    ```http theme={null}
    DELETE https://servidor:<puerto>/api/documento/{tipo}/{id}/componentelinea/{numlin}
    Authorization: Bearer {token}
    ```

    | Código | Descripción                                      |
    | ------ | ------------------------------------------------ |
    | `200`  | Componentes de la línea eliminados correctamente |
    | `401`  | Unauthorized                                     |
    | `404`  | Endpoint no encontrado                           |
    | `406`  | No existe la línea a borrar                      |
  </Tab>
</Tabs>
