API REST de Recepción
- Fecha de publicación: 09 de octubre de 2026
- Versión requerida: plugin de Recepción 11.261.2570
Objetivo
Disponibilizar en RUB la API de Recepción, para que los sistemas externos (ERP, TMS, WMS y Compras) incluyan, actualicen y consulten órdenes y avisos de recepción por REST / JSON, con validación previa de los productos e integridad de la grabación.
Contexto
La apertura de recepciones dependía, en gran parte, de la digitación o de cargas internas. Los integradores necesitaban un contrato estable para enviar el pedido antes de la conferencia, sin grabar ítems inválidos y sin alterar una orden que ya entró en conferencia.
Qué cambió
La API queda disponible en /api/rest/receiving/v1 y contempla:
- POST para incluir una orden o aviso de recepción;
- PUT para actualizar una orden todavía editable;
- GET para listar órdenes de forma paginada u obtener el detalle completo por código.
Antes de persistir, todos los productos del lote se validan. Por defecto, la grabación es todo o nada: o la orden entra completa, o no se graba nada. Ese comportamiento se puede desactivar para aceptar solo los productos válidos.
Flujo de Decisión del Procesamiento
El motor de recepción valida todos los ítems antes de realizar cualquier grabación. El siguiente diagrama ilustra la secuencia de decisión entre la consistencia estricta (todo o nada) y la continuidad operativa (aceptación parcial):
graph TD
A[Solicitud POST/PUT /api/rest/receiving/v1] --> B{Validar ítems del lote}
B -->|Todos válidos| C[Grabar Orden Completa en RUB]
C --> D[Retorno HTTP 200 Éxito]
B -->|Hay ítems inválidos| E{¿accept_partial definido?}
E -->|Sí: true| F[Grabar ítems válidos y registrar observación en la orden]
E -->|Sí: false| G[Reversión total - Rollback]
E -->|No informado| H{¿Config recebimentoAceitaParcial activa?}
H -->|Sí| F
H -->|No| G
F --> I[Retorno HTTP 200 con unaccepted_products]
G --> J[Retorno HTTP 400 Bad Request con unaccepted_products]
Grabación Todo o Nada (Consistencia Estricta)
En la modalidad todo o nada, el motor de recepción exige que el 100% de los productos del lote sean válidos para que la orden sea persistida. Si hay cualquier divergencia de catálogo o ítem inconsistente:
- Ocurre la reversión total (rollback) de toda la transacción;
- Ningún encabezado, ítem o vínculo de la orden se graba en la base de datos;
- Se elimina el riesgo de crear órdenes incompletas o divergentes entre el sistema de origen (ERP/TMS/WMS) y la tienda;
- La API responde HTTP 400 Bad Request acompañado del nodo estructurado
unaccepted_products, listando los ítems rechazados y el motivo del rechazo.
Cómo accionar la grabación todo o nada
- Explícitamente en el payload: enviar
"accept_partial": false. - Por configuración del sistema: omitir el campo
accept_partialcuando la configuraciónrecebimentoAceitaParcial(Permite aceptación parcial de productos en la API) esté desactivada en la tienda o tenant.
Ejemplo: Grabación Todo o Nada con Fallo en Producto
Solicitud enviada (accept_partial: false):
{
"code": "ORD-2026-9001",
"store": 30001,
"accept_partial": false,
"items": [
{ "product": "78910001001", "quantity": 50 },
{ "product": "99999999999", "quantity": 10 }
]
}Retorno de la API (HTTP 400 Bad Request — Ningún ítem grabado):
{
"status": 400,
"message": "Ordem não pode ser processada pois contém produtos inválidos e o aceite parcial está desativado.",
"unaccepted_products": [
{
"product": "99999999999",
"reason": "PRODUTO_NAO_CADASTRADO"
}
]
}Grabación con Aceptación Parcial (Continuidad Operativa)
La modalidad de aceptación parcial fue diseñada para escenarios en los que la descarga de mercancías en el muelle no puede detenerse por divergencias puntuales de catálogo o ítems secundarios no registrados.
Comportamiento del motor:
- Los productos aprobados y registrados se persisten de inmediato en la nueva orden de recepción (o en la orden actualizada);
- Los productos inconsistentes o no localizados se aíslan y no componen la orden generada;
- Generación automática de observación (obs): para asegurar total visibilidad en la tienda y trazabilidad en la conferencia física, cada ítem no aceptado o no grabado genera automáticamente una observación en la orden de recepción en RUB, detallando el producto rechazado y el motivo del rechazo;
- La API responde siempre HTTP 200 OK (tanto en inclusión como en actualización), generando la orden con los ítems aprobados y devolviendo el nodo
unaccepted_productscon los ítems que quedaron fuera; - Caso extremo: si todos los productos del lote son inválidos, la API responde HTTP 400 Bad Request, ya que no se puede abrir una orden de recepción sin ningún ítem válido.
Cómo accionar la aceptación parcial
- Explícitamente en el payload: enviar
"accept_partial": true. - Por configuración del sistema: omitir el campo
accept_partialcuando la configuraciónrecebimentoAceitaParcial(Permite aceptación parcial de productos en la API) esté activada en la tienda o tenant.
Ejemplo: Grabación con Aceptación Parcial (Ítem Válido Persistido)
Solicitud enviada (accept_partial: true):
{
"code": "ORD-2026-9001",
"store": 30001,
"accept_partial": true,
"items": [
{ "product": "78910001001", "quantity": 50 },
{ "product": "99999999999", "quantity": 10 }
]
}Retorno de la API (HTTP 200 OK — Orden creada con ítems aceptados y observaciones generadas):
{
"status": 200,
"code": "ORD-2026-9001",
"message": "Ordem de recebimento criada com aceite parcial de produtos.",
"unaccepted_products": [
{
"product": "99999999999",
"reason": "PRODUTO_NAO_CADASTRADO"
}
]
}Comparativa: Cuándo Utilizar Cada Modalidad
| Criterio | Todo o Nada (accept_partial: false) |
Aceptación Parcial (accept_partial: true) |
|---|---|---|
| Garantía de integridad | Consistencia estricta (orden idéntica al documento de origen) | Consistencia de ítems válidos con aislamiento de pendientes |
| Comportamiento en inconsistencia | Reversión total (rollback) sin grabar ningún ítem | Graba ítems válidos, genera observación en la orden para los rechazados y devuelve unaccepted_products |
| Estado HTTP con aceptación parcial | 400 Bad Request |
200 OK |
| Impacto operativo | Exige corrección en el catálogo o reenvío integral antes de la descarga | Permite iniciar inmediatamente la conferencia física de los productos válidos |
| Recomendado para | Cargas consolidadas con vínculo fiscal estricto (donde lote parcial genera bloqueo) | Cargas fracionadas de alta rotación o transferencias donde pendientes se tratan después |
| Configuración por defecto (cuando se omite) | recebimentoAceitaParcial desactivada |
recebimentoAceitaParcial activada |
Las órdenes que ya no pueden editarse — por ejemplo, en conferencia (EM_CONFERENCIA) — no se alteran.
La autenticación sigue el estándar de las demás APIs REST de RUB, con token de aplicación.
El contrato detallado, los ejemplos de payload y los códigos de cada campo están en la Documentación de la API, en la sección de Recepción.
Códigos de retorno
- 200 — inclusión o actualización concluida con éxito (total o con aceptación parcial); si hay productos rechazados en la aceptación parcial, vuelven en
unaccepted_productsy generan observación en la orden; - 400 — rechazo integral de la solicitud, con la relación de productos no aceptados;
- 409 — la orden existe, pero el estado actual no permite alteración.
Beneficios
- Integración directa de avisos de recepción desde el ERP, TMS o WMS;
- Menos retrabajo en la tienda, porque los productos inválidos se señalan antes de la conferencia;
- Previsibilidad para el integrador, con aceptación parcial opcional y bloqueo de alteración fuera de la ventana editable.