Skip to content

Solicitud de Movimiento (request_movement)

La automatización request_movement gestiona solicitudes de movimiento de inventario que requieren aprobación antes de verse reflejadas en el stock de una ubicación.

Al insertar un registro en la tabla de origen (Tabla A), el sistema no altera el inventario de inmediato. En su lugar, crea un registro de solicitud en la tabla del sistema node_requests con estado "sent". Una vez que el usuario responsable en el nodo destino aprueba la solicitud, el motor aplica de forma automática un movimiento de entrada (inventory_movement en dirección in) sobre la tabla de inventario final (Tabla B).


  1. Creación de la Solicitud: Al insertar una fila en la tabla de origen, se lee la información para resolver los nodos de origen y destino, el usuario solicitante y el mensaje.
  2. Generación del Payload: Se crea un registro en node_requests con los datos de las columnas origen, cantidades y criterios de coincidencia.
  3. Resolución de Nodos: Las propiedades request_target_node y request_source_node se resuelven dinámicamente. Pueden ser un número entero fijo (ID del nodo), un texto descriptivo (nombre del nodo) o una referencia a una propiedad de la fila actual usando prop(columna).
  4. Impacto al Aprobar: Cuando la solicitud es aprobada en la interfaz:
    • El sistema busca el registro coincidente en la tabla destino (Tabla B) según match_columns y la ubicación de destino (transfer_columns.target).
    • Si existe la fila en la tabla destino: Suma la cantidad del campo qty_field en el campo target_field.
    • Si la fila NO existe: Crea un registro nuevo con dicha cantidad.

Estructura de propiedades requeridas dentro de rules para una automatización de tipo request_movement:

  • target_table: Tabla de stock destino donde se sumará la cantidad al aprobarse la solicitud (ej. tableB).
  • target_field: Columna numérica de existencias en el destino (ej. t15c8).
  • qty_field: Columna de cantidad en la tabla origen (ej. t12c7).
  • request_target_node: Nodo encargado de revisar y aprobar la solicitud. Admite ID numérico, nombre de nodo, o prop(columna).
  • match_columns: Criterios de coincidencia para buscar la fila de existencias (soporta tanto columnas origen como valores constantes o la palabra clave "id_source" para referirse al ID de la fila origen).
  • transfer_columns: Ubicación del movimiento:
    • destination: Dónde se guardará la entrada en el destino. Admite:
      • Nombre de columna de origen (ej. "t12c6").
      • Constante directa (ej. "Almacén Principal").
      • Formato explícito: "value(Almacén Principal)".
    • target: Columna en la tabla destino que almacena la ubicación.
  • request_source_node: Nodo que emite la solicitud (si no se especifica, se registra como vacío).
  • request_user_name: Nombre fijo del usuario para la solicitud.
  • request_user_field: Columna de origen desde donde leer el nombre del usuario.
  • message_template: Mensaje personalizado que se mostrará en el cajón de notificaciones de los aprobadores.

El siguiente ejemplo genera una solicitud de aprobación para que el Nodo 2 autorice una entrada de stock en tableB proveniente de un registro en tableA:

{
"target_table": "tableB",
"target_field": "t15c8",
"qty_field": "t12c7",
"request_target_node": 2,
"request_source_node": "prop(t12c5)",
"match_columns": [
{ "source": "t12c1", "target": "t15c0" },
{ "target": "t15c9", "value": "ACTIVO" },
{ "source": "id_source", "target": "t15c10" }
],
"transfer_columns": {
"destination": "t12c6",
"target": "t15c5"
},
"message_template": "Solicitud de entrada de mercancía pendiente de aprobación"
}