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

# Fabricación: registra el consumo y producción en A3ERP

> Ejecuta fabricaciones de órdenes de producción, consume componentes, operarios y máquinas, y gestiona el modo Trabajo en Curso en la A3ERP API.

Los endpoints de fabricación son el núcleo operativo del módulo de producción: te permiten registrar el avance real de la fabricación, consumir materiales, imputar tiempos de operarios y máquinas, y gestionar el modo **Trabajo en Curso** (WIP). Puedes fabricar órdenes completas, productos individuales o fases específicas, con soporte para fabricación proporcional y para deshacer operaciones registradas por error.

<Note>
  El parámetro `tipostock` acepta únicamente los valores `P` (tipo trabajo en curso) o `S` (estándar). El parámetro `tiempo` debe indicarse siempre en formato `HH:MM:SS`.
</Note>

***

## Fabricar órdenes completas

### Fabricar una orden de producción completa

Fabrica la totalidad de la orden de producción indicada. En el cuerpo puedes indicar el trabajo activo y, si los artículos tienen detalle (lote, número de serie, ubicación), incluirlo por línea.

```http theme={null}
POST /api/ordenproduccion/fabricarorden/idprod/{idprod}/fecha/{fecha}/tipostock/{tipostock}
```

**Ejemplo:** `/api/ordenproduccion/fabricarorden/idprod/10108/fecha/20221017/tipostock/S`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción a fabricar.
</ParamField>

<ParamField path="fecha" type="string" required>
  Fecha de la fabricación en formato `YYYYMMDD` (p. ej. `20221017`).
</ParamField>

<ParamField path="tipostock" type="string" required>
  Tipo de stock. Solo acepta `P` (trabajo en curso) o `S` (estándar).
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Cuerpo de la petición:**

```json theme={null}
{
  "json": {
    "trabajoactivo": "0",
    "detalle": [
      {
        "idlinp": "text",
        "lote": "text",
        "ubicacion": "text"
      }
    ]
  }
}
```

<ParamField body="json.trabajoactivo" type="string">
  Identificador del trabajo activo. Usa `"0"` para que tome el trabajo por defecto.
</ParamField>

<ParamField body="json.detalle" type="array">
  Lista de líneas con información de detalle (lote, ubicación). Requerido solo si los artículos tienen control de detalle.
</ParamField>

<ParamField body="json.detalle[].idlinp" type="string">
  Identificador de la línea de producción del producto o componente.
</ParamField>

<ParamField body="json.detalle[].lote" type="string">
  Lote asociado al artículo.
</ParamField>

<ParamField body="json.detalle[].ubicacion" type="string">
  Ubicación en almacén del artículo.
</ParamField>

**Respuesta exitosa:**

```
Se ha fabricado la orden de producción {idprod}
```

***

## Fabricar productos

### Fabricar todas las unidades pendientes de un producto

Fabrica todas las unidades pendientes del producto indicado dentro de la orden.

```http theme={null}
POST /api/ordenproduccion/producto/fabricar/idprod/{idprod}/idlinp/{idlinp}/fecha/{fecha}/tipostock/{tipostock}
```

**Ejemplo:** `/api/ordenproduccion/producto/fabricar/idprod/10108/idlinp/12151/fecha/20221017/tipostock/S`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea del producto a fabricar.
</ParamField>

<ParamField path="fecha" type="string" required>
  Fecha de la fabricación en formato `YYYYMMDD`.
</ParamField>

<ParamField path="tipostock" type="string" required>
  Tipo de stock. Solo acepta `P` o `S`.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Cuerpo de la petición** (igual que fabricar orden completa):

```json theme={null}
{
  "json": {
    "trabajoactivo": "0",
    "detalle": [
      {
        "idlinp": "text",
        "lote": "text",
        "ubicacion": "text"
      }
    ]
  }
}
```

**Respuesta exitosa:**

```
Se ha fabricado el producto:{idlinp}
```

***

### Fabricar un producto de forma proporcional

Fabrica y consume las unidades y tiempos de forma proporcional a las unidades indicadas respecto al total de unidades a fabricar del artículo acabado.

```http theme={null}
POST /api/ordenproduccion/producto/fabricarproporcional/idprod/{idprod}/idlinp/{idlinp}/unidades/{unidades}/fecha/{fecha}/tipostock/{tipostock}
```

**Ejemplo:** `/api/ordenproduccion/producto/fabricarproporcional/idprod/10108/idlinp/12151/unidades/3/fecha/20221017/tipostock/S`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea del producto a fabricar.
</ParamField>

<ParamField path="unidades" type="string" required>
  Número de unidades a fabricar en esta operación. Los consumos se calcularán proporcionalmente.
</ParamField>

<ParamField path="fecha" type="string" required>
  Fecha de la fabricación en formato `YYYYMMDD`.
</ParamField>

<ParamField path="tipostock" type="string" required>
  Tipo de stock. Solo acepta `P` o `S`.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Respuesta exitosa:**

```
Se ha fabricado el producto:{idlinp}
```

***

## Fabricar fases

### Fabricar una fase de la orden

Fabrica una fase específica de la orden de producción indicada.

```http theme={null}
POST /api/ordenproduccion/fase/fabricar/idprod/{idprod}/idfase/{idfase}/fecha/{fecha}/tipostock/{tipostock}
```

**Ejemplo:** `/api/ordenproduccion/fase/fabricar/idprod/10108/idfase/10523/fecha/20221017/tipostock/S`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idfase" type="string" required>
  Identificador numérico de la fase a fabricar. Obtenlo mediante la consulta de fases de la orden.
</ParamField>

<ParamField path="fecha" type="string" required>
  Fecha de la fabricación en formato `YYYYMMDD`.
</ParamField>

<ParamField path="tipostock" type="string" required>
  Tipo de stock. Solo acepta `P` o `S`.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Cuerpo de la petición** (igual que fabricar orden completa):

```json theme={null}
{
  "json": {
    "trabajoactivo": "0",
    "detalle": [
      {
        "idlinp": "text",
        "lote": "text",
        "ubicacion": "text"
      }
    ]
  }
}
```

**Respuesta exitosa:**

```
Se ha fabricado la fase de producción {idprod}
```

***

### Fabricar una fase de forma proporcional

Fabrica las unidades indicadas de una fase de la orden de producción. Las cantidades y tiempos se calculan proporcionalmente.

```http theme={null}
POST /api/ordenproduccion/fase/fabricarproporcional/idprod/{idprod}/idfase/{idfase}/fecha/{fecha}/tipostock/{tipostock}
```

**Ejemplo:** `/api/ordenproduccion/fase/fabricarproporcional/idprod/10108/idfase/10523/fecha/20221017/tipostock/S`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idfase" type="string" required>
  Identificador numérico de la fase a fabricar.
</ParamField>

<ParamField path="fecha" type="string" required>
  Fecha de la fabricación en formato `YYYYMMDD`.
</ParamField>

<ParamField path="tipostock" type="string" required>
  Tipo de stock. Solo acepta `P` o `S`.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Respuesta exitosa:**

```
Se ha fabricado la fase de producción {idprod}
```

***

## Deshacer fabricación

### Deshacer una fabricación

Revierte la fabricación de la línea de consumos indicada.

```http theme={null}
GET /api/ordenproduccion/producto/deshacerfabricacion/idprod/{idprod}/idlinc/{idlinc}/numlin/{numlin}
```

**Ejemplo:** `/api/ordenproduccion/producto/deshacerfabricacion/idprod/10756/idlinc/11884/numlin/15487`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinc" type="string" required>
  Identificador de la línea de consumo a revertir.
</ParamField>

<ParamField path="numlin" type="string" required>
  Número de la línea de consumo. El comportamiento varía según el tipo de stock con el que se generó la línea.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

<Note>
  **Comportamiento según TipoStock:**

  * Si la línea fue generada como **Trabajo en Curso** (`P`): usa `NumLin=0` para eliminar la línea de consumo y todas sus evoluciones; usa un valor distinto de `0` para eliminar únicamente la evolución identificada por ese `NUMLIN`.
  * Si la línea fue generada como **estándar** (`S`): usa siempre `NumLin=0`.

  Puedes obtener el valor de `NumLin` mediante la consulta de fabricaciones de la orden.
</Note>

***

## Consumos

### Consumir unidades de un componente

Registra el consumo de unidades de un componente específico de la orden.

```http theme={null}
POST /api/ordenproduccion/componente/consumir/idprod/{idprod}/idlinp/{idlinp}/unidades/{unidades}/fecha/{fecha}/tipostock/{tipostock}
```

**Ejemplo:** `/api/ordenproduccion/componente/consumir/idprod/10142/idlinp/12175/unidades/20/fecha/20221103/tipostock/P`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea del componente a consumir.
</ParamField>

<ParamField path="unidades" type="string" required>
  Número de unidades del componente a consumir.
</ParamField>

<ParamField path="fecha" type="string" required>
  Fecha del consumo en formato `YYYYMMDD`.
</ParamField>

<ParamField path="tipostock" type="string" required>
  Tipo de stock. Solo acepta `P` o `S`.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Cuerpo de la petición:**

```json theme={null}
{
  "json": {
    "trabajoactivo": "0",
    "detalle": [
      {
        "idlinp": "text",
        "lote": "text",
        "ubicacion": "text"
      }
    ]
  }
}
```

**Respuesta exitosa:**

```
Se ha consumido el componente {idlinp}
```

***

### Consumir tiempo de un operario

Registra el tiempo consumido por un operario en la orden de producción.

```http theme={null}
POST /api/ordenproduccion/operario/consumir/idprod/{idprod}/idlinp/{idlinp}/tiempo/{tiempo}/fecha/{fecha}/tipostock/{tipostock}
```

**Ejemplo:** `/api/ordenproduccion/operario/consumir/idprod/10172/idlinp/11959/tiempo/00:10:00/fecha/20230513/tipostock/S`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea del operario a consumir.
</ParamField>

<ParamField path="tiempo" type="string" required>
  Tiempo del operario a consumir en formato `HH:MM:SS` (p. ej. `00:10:00`).
</ParamField>

<ParamField path="fecha" type="string" required>
  Fecha del consumo en formato `YYYYMMDD`.
</ParamField>

<ParamField path="tipostock" type="string" required>
  Tipo de stock. Solo acepta `P` o `S`.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Cuerpo de la petición:**

```json theme={null}
{
  "json": {
    "trabajoactivo": "0",
    "terminarconsumos": "F",
    "codemp": "text"
  }
}
```

<ParamField body="json.trabajoactivo" type="string">
  Identificador del trabajo activo. Usa `"0"` para el trabajo por defecto.
</ParamField>

<ParamField body="json.terminarconsumos" type="string">
  Indica si se deben terminar los consumos al registrar. `T` = sí, `F` = no.
</ParamField>

<ParamField body="json.codemp" type="string">
  Código del empleado cuyo tiempo se consume. Opcional si ya está identificado por `idlinp`.
</ParamField>

**Respuesta exitosa:**

```
Se ha consumido el operario {idlinp}
```

***

### Consumir tiempo de una máquina

Registra el tiempo consumido por una máquina en la orden de producción.

```http theme={null}
POST /api/ordenproduccion/maquina/consumir/idprod/{idprod}/idlinp/{idlinp}/tiempo/{tiempo}/fecha/{fecha}/tipostock/{tipostock}
```

**Ejemplo:** `/api/ordenproduccion/maquina/consumir/idprod/10172/idlinp/11959/tiempo/00:10:00/fecha/20230513/tipostock/S`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea de la máquina a consumir.
</ParamField>

<ParamField path="tiempo" type="string" required>
  Tiempo de la máquina a consumir en formato `HH:MM:SS` (p. ej. `00:10:00`).
</ParamField>

<ParamField path="fecha" type="string" required>
  Fecha del consumo en formato `YYYYMMDD`.
</ParamField>

<ParamField path="tipostock" type="string" required>
  Tipo de stock. Solo acepta `P` o `S`.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Cuerpo de la petición:**

```json theme={null}
{
  "json": {
    "trabajoactivo": "0",
    "terminarconsumos": "F",
    "codmaq": "text"
  }
}
```

<ParamField body="json.trabajoactivo" type="string">
  Identificador del trabajo activo. Usa `"0"` para el trabajo por defecto.
</ParamField>

<ParamField body="json.terminarconsumos" type="string">
  Indica si se deben terminar los consumos al registrar. `T` = sí, `F` = no.
</ParamField>

<ParamField body="json.codmaq" type="string">
  Código de la máquina cuyo tiempo se consume. Opcional si ya está identificado por `idlinp`.
</ParamField>

**Respuesta exitosa:**

```
Se ha consumido la maquina
```

***

## Trabajo en Curso (WIP)

Los siguientes endpoints son específicos del modo **Trabajo en Curso** (`tipostock=P`). En este modo, los movimientos de stock se registran de forma parcial y acumulativa hasta el cierre del trabajo.

### Fabricar un producto acabado en modo Trabajo en Curso

Registra la fabricación de un producto acabado dentro de una orden marcada como Trabajo en Curso.

```http theme={null}
POST /api/ordenproduccion/producto/fabricarencurso/idprod/{idprod}/idlinp/{idlinp}/unidades/{unidades}/codalm/{codalm}
```

**Ejemplo:** `/api/ordenproduccion/producto/fabricarencurso/idprod/10108/idlinp/11802/unidades/3/codalm/1`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea del producto acabado.
</ParamField>

<ParamField path="unidades" type="string" required>
  Número de unidades a fabricar en esta operación.
</ParamField>

<ParamField path="codalm" type="string" required>
  Código del almacén donde se registra la entrada del producto acabado.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Cuerpo de la petición** (igual estructura que fabricar orden completa con detalle opcional).

***

### Consumir un componente en modo Trabajo en Curso

Registra el consumo de un componente dentro de una orden marcada como Trabajo en Curso.

```http theme={null}
POST /api/ordenproduccion/componente/consumirencurso/idprod/{idprod}/idlinp/{idlinp}/unidades/{unidades}/codalm/{codalm}
```

**Ejemplo:** `/api/ordenproduccion/componente/consumirencurso/idprod/10142/idlinp/12175/unidades/6/codalm/1`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea del componente a consumir.
</ParamField>

<ParamField path="unidades" type="string" required>
  Número de unidades del componente a consumir.
</ParamField>

<ParamField path="codalm" type="string" required>
  Código del almacén desde el que se realiza el consumo.
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Respuesta exitosa:**

```
Se ha consumido el componente {idlinp}
```

***

### Consumir una máquina en modo Trabajo en Curso

Registra el tiempo consumido por una máquina en una orden marcada como Trabajo en Curso.

```http theme={null}
POST /api/ordenproduccion/maquina/consumirencurso/idprod/{idprod}/idlinp/{idlinp}/tiempo/{tiempo}
```

**Ejemplo:** `/api/ordenproduccion/maquina/consumirencurso/idprod/10142/idlinp/12139/tiempo/00:00:10`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea que contiene la máquina a consumir.
</ParamField>

<ParamField path="tiempo" type="string" required>
  Tiempo de la máquina a consumir en formato `HH:MM:SS` (p. ej. `00:00:10`).
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Respuesta exitosa:**

```
Se ha consumido la maquina {idlinp}
```

***

### Consumir un operario en modo Trabajo en Curso

Registra el tiempo consumido por un operario en una orden marcada como Trabajo en Curso.

```http theme={null}
POST /api/ordenproduccion/operario/consumirencurso/idprod/{idprod}/idlinp/{idlinp}/tiempo/{tiempo}
```

**Ejemplo:** `/api/ordenproduccion/operario/consumirencurso/idprod/10142/idlinp/12139/tiempo/00:00:10`

<ParamField path="idprod" type="string" required>
  Identificador de la orden de producción.
</ParamField>

<ParamField path="idlinp" type="string" required>
  Identificador de la línea que contiene el operario a consumir.
</ParamField>

<ParamField path="tiempo" type="string" required>
  Tiempo del operario a consumir en formato `HH:MM:SS` (p. ej. `00:00:10`).
</ParamField>

<ParamField header="Authorization" type="string" required>
  Bearer + JWT\_token
</ParamField>

**Respuesta exitosa:**

```
Se ha consumido el operario {idlinp}
```
