Un flujo de aprobación de compras convierte una petición de material o servicio en orden de compra válida pasando por los visados que tocan por importe, categoría y centro de coste. El correo con un "ok" queda como registro con autor, fecha y motivo. Lo montamos en la automatización de procesos internos.
Sin ese circuito, autoriza quien está disponible: alguien pide por WhatsApp, el jefe contesta desde el aeropuerto, el proveedor sirve y la factura aparece sin pedido que la respalde.
Al terminar sabrás qué datos exigir y dónde poner los visados. No es lo mismo que la aprobación de gastos y reembolsos de empleados: ahí hay un gasto ya hecho que alguien reclama, aquí un compromiso con un proveedor antes de gastar.
Qué es un flujo de aprobación de compras
Es el recorrido de una solicitud desde que alguien la plantea hasta que se convierte en orden de compra enviada al proveedor. Incluye las reglas que deciden quién valida, el bloqueo de presupuesto mientras se tramita y el registro de cada paso. El pedido nace del flujo.
La solicitud y los datos que no se pueden dejar en blanco
Una solicitud mal planteada rebota tres veces y pierde dos semanas. Los campos mínimos: qué se pide con referencia útil, cantidad, importe estimado, proveedor propuesto si lo hay, fecha de necesidad, centro de coste, categoría y justificación, que es lo que el aprobador lee primero.
Con esos datos la decisión es de segundos. Con un "necesito un portátil", el aprobador escribe un correo antes de aprobar. Antes de modelar toca el trabajo de mapear el proceso antes de escribir el software.
Reglas de Enrutado, Delegaciones y Suplencias
El enrutado es una tabla de reglas que se cambia sin tocar código.
- Importe: un aprobador por tramo, y los altos acumulan firmas en vez de sustituirlas.
- Categoría: informática pasa por sistemas, obra por el responsable técnico, servicios profesionales por dirección.
- Centro de coste: el responsable del centro que paga entra siempre, venga de donde venga.
- Excepciones: proveedor no homologado, compra fuera de presupuesto o urgencia suman un visado.
- Delegación: vigencia desde y hasta, un suplente por aprobador y escalado si nadie decide.
La trampa está en hardcodear la jerarquía: las personas cambian de puesto y los tramos se revisan. La misma lógica aparece en los flujos automáticos que leen reglas del CRM.
La delegación se registra, no se suple en silencio: si firmó el suplente, el registro lo dice y deja el rastro de quién delegó. Sin eso, una auditoría encuentra firmas de gente que estaba de vacaciones.
De la solicitud aprobada a la orden de compra
Aprobada la solicitud, se genera la orden con número propio, condiciones, plazo y referencia a la solicitud que la originó. Ese documento es el que ve el proveedor y el que sostiene el cotejo, y puede llegarle por el portal donde confirma y entrega en vez del correo.
El bloqueo presupuestario va al enviar la solicitud, no al aprobarla: el importe estimado se reserva contra la partida del centro de coste y deja de estar disponible. Al llegar la factura, pasa a gasto comprometido por el importe real y se libera la diferencia. Sin eso, dos solicitudes aprobadas el mismo día se comen la misma partida dos veces.
Cotejo a tres bandas y trazabilidad de cada firma
El cotejo compara orden de compra, albarán y factura en cantidad, precio y referencia. Si coinciden dentro de la tolerancia, la factura sigue sola. Si no, se para con el motivo exacto y nadie paga material que no llegó.
Por cada paso se guarda quién actuó, cuándo y con qué rol. El reglamento español de facturación exige que los registros queden encadenados para verificar su secuencia y que no se puedan alterar sin que el sistema lo detecte, según el Real Decreto 1007/2023 en el BOE. La misma idea en compras deja un expediente defendible.
CodeZone Pro Tip: resuelve la cadena de aprobadores en una función que lea reglas y delegaciones vigentes, para que un cambio de tramos o unas vacaciones no obliguen a desplegar.
-- Devuelve la cadena en orden de firma. Lee reglas vigentes, asi que
-- cambiar tramos es un UPDATE y no un despliegue.
CREATE OR REPLACE FUNCTION cadena_aprobadores(p_solicitud bigint)
RETURNS TABLE (nivel int, aprobador_id bigint, por_delegacion_de bigint)
LANGUAGE sql STABLE AS $$
WITH s AS (
SELECT importe, categoria_id, centro_coste_id, creada_el::date AS dia
FROM solicitud_compra WHERE id = p_solicitud
),
-- Una regla entra si cubre el importe y no contradice categoria ni
-- centro: NULL en la regla significa "aplica a todos".
reglas AS (
SELECT r.nivel, r.aprobador_id
FROM regla_aprobacion r, s
WHERE s.importe >= r.importe_desde
AND s.importe < COALESCE(r.importe_hasta, 'infinity'::numeric)
AND (r.categoria_id IS NULL OR r.categoria_id = s.categoria_id)
AND (r.centro_coste_id IS NULL OR r.centro_coste_id = s.centro_coste_id)
AND r.activa
)
-- La delegacion sustituye al titular pero deja constancia de quien
-- delego: el registro nunca dice que firmo el ausente.
SELECT rg.nivel,
COALESCE(d.suplente_id, rg.aprobador_id),
CASE WHEN d.suplente_id IS NOT NULL THEN rg.aprobador_id END
FROM reglas rg
CROSS JOIN s
LEFT JOIN delegacion d
ON d.titular_id = rg.aprobador_id
AND s.dia BETWEEN d.desde AND COALESCE(d.hasta, 'infinity'::date)
ORDER BY rg.nivel;
$$;Con la cadena calculada así, el flujo no depende de que alguien sepa a quién mandar cada cosa. Reorganizar departamentos o subir un tramo es editar filas, y el expediente dice quién firmó y por quién.
Lo que Cuesta Aprobar Compras por Correo
El coste visible son las facturas sin pedido que alguien regulariza a final de mes. El invisible es peor: compras duplicadas, precios peores por no agrupar y un presupuesto que se pasa hasta el cierre sin que nadie lo vea. No sale en incidencias, sale en el margen.
Empieza por una categoría y un tramo, con dos niveles de firma y el bloqueo presupuestario en marcha. Cuando corra un mes sin excepciones manuales, añades categorías. Si parte del circuito la ejecutan asistentes automáticos, lo que un agente hace solo y lo que pide confirmación aplica tal cual, y el enganche se decide como en conectar los sistemas de una empresa de Madrid sin duplicar datos.
Pide a administración las facturas del último trimestre que llegaron sin pedido: ahí tienes tu alcance. La parte comercial está en la extranet donde tus clientes aprueban sus propios pedidos, y el modelo de datos en la sincronización entre ERP y CRM.
Si tus compras se aprueban hoy por correo, revisamos el circuito y te decimos por dónde empezar.