Vista: Aprobaciones

Proposito

Esta vista permite al director revisar y decidir sobre las demandas de abastecimiento que requieren aprobacion. Muestra las cotizaciones pendientes con el proveedor de mejor precio, la urgencia de cada demanda, y el numero de opciones disponibles. El director utiliza esta vista para aprobar, rechazar o solicitar retroalimentacion sobre cada linea de gasto antes de que compras proceda con el pago y la entrega.

Vista: Aprobaciones

La pestana vista_aprobaciones es una vista de solo lectura (Capa 3a) que muestra las demandas de abastecimiento que necesitan revision de direccion. Se actualiza automaticamente cada vez que se procesan cambios en las demandas u opciones.

Columnas de la vista

ColumnaDescripcion
Folio DemandaIdentificador unico de la demanda de abastecimiento
OS FolioFolio de la orden de servicio vinculada (vacio si no aplica)
Descripcion SolicitadaDescripcion del material o servicio requerido
Cantidad RequeridaCantidad solicitada por el taller
Urgency CodeNivel de urgencia: paro_operativo, urgente, o normal
Proveedor Mejor OpcionNombre del proveedor con la cotizacion de menor monto
Monto Mejor OpcionMonto total de la cotizacion mas economica
Num OpcionesNumero de opciones de abastecimiento vigentes o seleccionadas
Estado DemandaEstado actual de la demanda (ver filtros)

Filtros

Solo aparecen demandas en los siguientes estados:

  • en_revision_direccion — compras envio la demanda para aprobacion
  • feedback_requerido — direccion solicito aclaraciones y compras respondio
  • cotizando — compras esta recopilando cotizaciones (visible para oversight)

Las demandas en otros estados (capturada, aprobada, rechazada, pagada, etc.) no aparecen en esta vista.

Ordenamiento

Las demandas se muestran ordenadas por urgencia:

  1. paro_operativo — una unidad esta detenida esperando el material. Requiere decision inmediata.
  2. urgente — plazo corto de entrega o impacto operativo significativo.
  3. normal — sin urgencia inmediata.

Como Tomar Decisiones

Las decisiones se registran a traves de la pestana stg_decision_abastecimiento (o el formulario en AppSheet).

Aprobar una demanda

  1. Revisar la demanda en vista_aprobaciones: verificar descripcion, cantidad, urgencia.
  2. Revisar las opciones disponibles. El campo num_opciones indica cuantas cotizaciones hay. El campo proveedor_mejor_opcion y monto_mejor_opcion muestran la mas economica.
  3. Abrir stg_decision_abastecimiento y llenar:
    • demanda_id: ID de la demanda a aprobar.
    • opcion_id: ID de la opcion seleccionada (la cotizacion que se aprueba).
    • decision_code: aprobada.
    • decided_by_user_id: Su ID de usuario.
    • decided_by_function: direccion.
  4. El sistema:
    • Registra la decision en _decisiones_abastecimiento.
    • Marca la opcion seleccionada como seleccionada y las demas como descartada.
    • Transiciona la demanda a estado aprobada.
  5. Compras puede ahora proceder con el pago al proveedor.

Aprobar con excepcion

Cuando el monto excede el umbral de autorizacion o hay circunstancias especiales:

  1. Llenar los mismos campos que una aprobacion normal.
  2. Cambiar decision_code a aprobada_con_excepcion.
  3. Llenar exception_reason_code con el codigo del motivo:
    • sobreprecio_autorizado — el precio excede el presupuesto habitual
    • proveedor_alterno_urgente — se usa proveedor no habitual por urgencia
    • sin_factura — el proveedor no emite factura formal
    • liquidacion_inmediata — el pago debe hacerse antes de recibir el material
  4. Opcionalmente llenar decision_note con una justificacion libre.

Rechazar una demanda

  1. Abrir stg_decision_abastecimiento y llenar:
    • demanda_id: ID de la demanda.
    • opcion_id: (Opcional) ID de la opcion que se evaluo.
    • decision_code: rechazada.
    • decision_note: Motivo del rechazo.
    • decided_by_user_id y decided_by_function: Sus datos.
  2. El sistema:
    • Registra la decision.
    • Si se especifico opcion_id, la marca como descartada.
    • Transiciona la demanda a estado rechazada.
  3. Compras debe buscar alternativas o cancelar la solicitud.

Solicitar retroalimentacion

Cuando la informacion es insuficiente para decidir:

  1. Llenar decision_code = feedback_requerido.
  2. Llenar decision_note con lo que se necesita aclarar (ej. “Necesito ver la cotizacion original”, “Confirmar si hay alternativa mas economica”).
  3. El sistema transiciona la demanda a estado feedback_requerido.
  4. Compras vera la demanda en su vista y debe responder con la informacion solicitada.
  5. Cuando compras responde, la demanda regresa a en_revision_direccion para una nueva decision.

Reglas de Umbral de Autorizacion

El sistema valida que el monto de la opcion seleccionada no exceda el umbral de autorizacion configurado en _umbrales_autorizacion:

  • Si el monto no excede el umbral: la aprobacion con aprobada procede normalmente.
  • Si el monto excede el umbral y se usa aprobada: el sistema rechaza la decision con error “Selected option exceeds approval threshold and requires exception approval”.
  • Si el monto excede el umbral: usar aprobada_con_excepcion con el exception_reason_code correspondiente.

Cuando Escalar

  • Demanda de paro operativo sin opciones. Si una demanda con urgencia paro_operativo no tiene opciones (num_opciones = 0), contactar directamente a compras para agilizar la cotizacion.
  • Monto significativamente mayor al presupuesto. Si el monto excede 2x el umbral habitual, evaluar si la necesidad es real antes de aprobar.
  • Proveedor desconocido. Si el proveedor de la mejor opcion no es habitual, solicitar referencias o cotizacion de respaldo.

Errores Comunes

CampoValor
status_procesamientook (exito) o error (fallo)
error_codeCodigo del error
error_detailDescripcion detallada del problema
procesado_atFecha y hora del procesamiento

Errores frecuentes y solucion

ErrorCausaSolucion
”demanda_id es obligatorio”No se selecciono la demandaVerificar el campo demanda_id
”demanda_id=X no encontrada”El ID no existeVerificar el ID correcto en la vista
”decision_code es obligatorio”No se selecciono el tipo de decisionUsar: aprobada, rechazada, feedback_requerido, o aprobada_con_excepcion
”decided_by_user_id invalid”El usuario no esta activoVerificar que su cuenta este activa en _usuarios
”opcion_id=X no pertenece a demanda_id=Y”La opcion no corresponde a esta demandaVerificar el ID de opcion correcto
”Selected option exceeds approval threshold”El monto excede el umbral sin excepcionUsar aprobada_con_excepcion con exception_reason_code

Que hacer si una fila tiene error

  1. Revisar los campos error_code y error_detail en la fila de staging.
  2. Corregir el dato incorrecto.
  3. Limpiar el campo status_procesamiento (dejarlo vacio) para que el sistema vuelva a procesar la fila.
  4. Esperar el siguiente ciclo de procesamiento o ejecutar manualmente.

Referencias

  • Especificacion tecnica: docs/views/int-4_compras.yaml
  • Contrato autoritativo: docs/plans/2026-03-25-compras-whatsapp-process-model.md
  • Arquitectura de datos: docs/architecture/dec_001_modelo-de-datos-canonico.md
  • Capas de datos: docs/architecture/dec_002_capa-canonica-y-vistas-operativas.md
  • Vistas por rol: docs/architecture/dec_003_vistas-decision-support-por-rol.md