Procedimiento: Compras y Abastecimiento

Proposito

Esta intervencion permite al encargado de compras (Omar) gestionar el ciclo completo de abastecimiento del taller: desde la captura de necesidades del taller, la busqueda de cotizaciones con proveedores, el envio para aprobacion de direccion, hasta el seguimiento del pago y la recepcion del material.

El flujo sigue el modelo de demanda de abastecimiento:

Demanda → Cotizaciones → Aprobacion → Pago → Recepcion

Cada etapa tiene su propia pestana de captura y su propia vista de seguimiento. Compras es el orquestador principal y coordina con almacen (stock-check, recepcion), direccion (aprobacion), y finanzas (pago).

Guias relacionadas por funcion

FuncionGuiaPestana de captura
Compras (captura de demanda y opciones)Esta guiastg_demanda_abastecimiento, stg_opcion_abastecimiento
Direccion (aprobacion)Aprobacionesstg_decision_abastecimiento
Finanzas (pagos)Pagos a Proveedorstg_pago_proveedor
Almacen (recepcion)Recepciones Pendientesstg_recepcion_abastecimiento

Flujo v2: Demanda de Abastecimiento (simsa-1hz)

El flujo principal de compras sigue el modelo de demanda de abastecimiento. Cada necesidad del taller se registra como una demanda, se cotiza con proveedores, se envia a direccion para aprobacion, se paga, y finalmente se recibe el material.

Paso 1: Capturar Demanda

Cuando el taller necesita material o servicio externo, compras registra la demanda en stg_demanda_abastecimiento:

  1. Abrir stg_demanda_abastecimiento (o el formulario en AppSheet).
  2. Llenar los campos:
    • os_id: OS que requiere el material (obligatorio para demandas vinculadas a servicio).
    • replenishment_reason_code: Razon de la demanda.
    • requested_by_user_id: Quien solicita.
    • requested_by_function: Funcion del solicitante (ej. compras, jefe_taller).
    • item_kind: Tipo de articulo (product, service, external_repair, consumable, stock_replenishment).
    • producto_id: (Opcional) Producto del catalogo. Dejar vacio para servicios o articulos no catalogados.
    • descripcion_solicitada: Descripcion clara de lo que se necesita.
    • cantidad_requerida: Cantidad necesaria.
    • unidad_medida: Unidad (pza, lt, hr, etc.).
    • urgency_code: normal, urgente, o paro_operativo.
  3. El sistema crea la demanda en _demandas_abastecimiento en estado capturada.
  4. Almacen puede verificar stock antes de que compras busque externamente.

Paso 2: Registrar Opciones de Cotizacion

Una vez que compras obtiene cotizaciones de proveedores:

  1. Abrir stg_opcion_abastecimiento.
  2. Llenar los campos por cada cotizacion:
    • demanda_id: ID de la demanda.
    • proveedor_id: Proveedor que cotizo.
    • descripcion_oferta: Lo que ofrece el proveedor.
    • cantidad_ofertada: Cantidad que puede surtir.
    • precio_unitario: Precio por unidad.
    • monto_total: Total de la cotizacion.
    • lead_time_value y lead_time_unit: Plazo de entrega (ej. 3, dias).
    • requires_prepayment: Si el proveedor pide pago anticipado (true/false).
    • supplier_doc_refs_json: Referencias a la cotizacion (ej. ["cotizacion_001.pdf"]).
  3. El sistema registra la opcion en _opciones_abastecimiento en estado vigente.
  4. Registrar todas las opciones disponibles antes de enviar a aprobacion.
  5. Cuando las opciones estan listas, la demanda se transiciona a en_revision_direccion.

Paso 3: Seguimiento de Aprobacion

Despues de registrar opciones, la demanda aparece en vista_aprobaciones para que direccion decida:

  • Aprobada: Compras puede proceder. La opcion seleccionada se marca como seleccionada, las demas como descartada.
  • Feedback requerido: Direccion necesita mas informacion. Compras debe buscar datos adicionales y responder.
  • Rechazada: La demanda se cancela. Buscar alternativas o informar al taller.

El seguimiento se hace desde vista_compras observando el estado_demanda.

Paso 4: Coordinar Pago y Recepcion

Una vez aprobada la demanda:

  1. Pago: Finanzas (Fer/Lorena) registra el pago en stg_pago_proveedor. Ver Pagos a Proveedor.
  2. Recepcion: Almacen (Beto) registra la recepcion en stg_recepcion_abastecimiento. Ver Recepciones Pendientes.
  3. Compras monitorea el progreso desde vista_compras.

Codigos de urgencia

CodigoSignificadoAccion esperada
normalSin urgencia inmediataCotizar con al menos 2 proveedores
urgentePlazo corto o impacto operativoCotizar rapidamente, puede usar 1 solo proveedor
paro_operativoUnidad detenidaAccion inmediata, puede saltarse cotizacion multiple con excepcion

Codigos de excepcion (exception_reason_code)

CodigoSignificado
sin_facturaEl proveedor no emite factura
pago_en_efectivoPago en efectivo requerido
liquidacion_inmediataPago antes de entrega
proveedor_alterno_urgenteProveedor no habitual por urgencia
stock_no_confiableEl inventario registrado no coincide con existencia real
replenishment_sin_osReposicion de stock no vinculada a OS
compatibilidad_por_muestraVerificacion de compatibilidad requiere muestra fisica
sobreprecio_autorizadoPrecio mayor al habitual, autorizado
recepcion_con_discrepanciaMaterial recibido difiere de lo pedido
backorder_proveedorProveedor confirma faltante que llegara despues

Flujo v1: Ordenes de Compra (legado)

Nota: El flujo v1 basado en stg_compra y _ordenes_compra sigue funcionando para OC creadas antes de la migracion a demandas. Para nuevas compras, usar el flujo v2 de demanda de abastecimiento documentado arriba.

Vista: Compras

La pestana vista_compras es una vista de solo lectura (Capa 3a) que muestra las ordenes de compra activas junto con indicadores de autorizacion y urgencia. Se actualiza automaticamente cada vez que se procesan cambios.

Columnas de la vista

ColumnaDescripcion
Folio OCIdentificador unico de la orden de compra
ProveedorNombre del proveedor asociado
OS VinculadaFolio de la orden de servicio vinculada (vacio para compras directas)
EstadoEstado actual de la OC (pendiente, autorizada, en_transito)
Fecha SolicitudFecha en que se creo la OC
Fecha EntregaFecha esperada de entrega del proveedor
TotalMonto total de la OC
Solicitado PorPersona que solicito la compra
# LineasNumero total de lineas en la OC
AutorizacionSemaforo de autorizacion (ver abajo)
UrgenciaSemaforo de urgencia (ver abajo)

Semaforo de autorizacion

El semaforo indica si la OC esta dentro del umbral de autorizacion del rol:

ColorEtiquetaSignificado
VerdeDentro de umbralEl total de la OC esta dentro del limite de autorizacion del rol. Se puede proceder sin autorizacion adicional.
AmarilloCerca del limiteEl total de la OC esta entre el umbral y el doble del umbral. Revisar si se puede dividir en OC menores.
RojoExcede umbralEl total de la OC excede el doble del umbral. Requiere autorizacion de direccion antes de proceder.

Semaforo de urgencia

El semaforo indica el estado de la fecha de entrega respecto al plazo critico:

ColorEtiquetaSignificado
VerdeEn tiempoFaltan mas de 3 dias para la fecha de entrega. Sin accion inmediata requerida.
AmarilloUrgenteFaltan entre 1 y 3 dias para la fecha de entrega. Confirmar con proveedor que la entrega va en tiempo.
RojoVencidaLa fecha de entrega ya paso o es hoy. Priorizar seguimiento inmediato con el proveedor.

Importante: Las OC con semaforo de urgencia en rojo (Vencida) deben atenderse antes que cualquier otra tarea de compras.

Filtros

Solo aparecen OC en los siguientes estados:

  • pendiente — la OC fue creada y esta en espera de autorizacion
  • autorizada — la OC fue aprobada y esta lista para enviarse al proveedor
  • en_transito — la OC fue enviada al proveedor y se espera recepcion

Las OC en otros estados (recibida, cerrada) no aparecen en esta vista.

Ordenamiento

Las OC se muestran ordenadas por:

  1. Urgencia — las OC con semaforo rojo (vencidas) aparecen primero.
  2. Fecha de solicitud — de mas antigua a mas reciente, para priorizar las que llevan mas tiempo pendientes.

Como Crear una Orden de Compra

Las ordenes de compra se crean a traves de la pestana de captura stg_compra. Cada fila representa una linea de OC que se desea registrar.

  1. Abrir la pestana stg_compra (o el formulario en AppSheet).
  2. Llenar los campos:
    • stg_id: Identificador unico de esta captura (se genera automaticamente en AppSheet).
    • proveedor_id: Seleccionar el proveedor del catalogo (_proveedores).
    • producto_id: Seleccionar el producto del catalogo (_productos).
    • cantidad: Numero de unidades a comprar.
    • precio_unitario: Precio por unidad. Se toma del catalogo. Si el precio real difiere, ver seccion de Excepciones.
    • os_id: (Opcional) Seleccionar la OS vinculada. Dejar vacio para compras directas sin OS.
    • fecha_entrega_esperada: (Opcional) Fecha en que se espera recibir el producto del proveedor.
    • nota: (Opcional) Informacion adicional relevante para la compra.
  3. El sistema procesa la fila automaticamente y la promueve a _ordenes_compra / _lineas_oc.
  4. El subtotal se calcula como cantidad x precio_unitario.
  5. Verificar en la vista que la OC aparece reflejada con el semaforo de autorizacion correspondiente.

Cuando Escalar

Las siguientes situaciones requieren accion adicional y no pueden resolverse directamente en el flujo normal de compras:

OC excede umbral de autorizacion

Si el semaforo de autorizacion esta en rojo (el total excede el doble del umbral del rol):

  1. No proceder con la compra hasta obtener autorizacion de direccion.
  2. Comunicar al director el monto y la justificacion de la compra.
  3. Una vez autorizada, registrar la autorizacion en los campos de override.

Si el proveedor al que se desea comprar no aparece en el catalogo (_proveedores):

  1. No intentar crear la OC sin proveedor_id.
  2. Solicitar el alta del proveedor en _proveedores antes de crear la OC.
  3. Una vez dado de alta, regresar a stg_compra y crear la OC con el nuevo proveedor_id.

Si el precio unitario real difiere mas del 20% del precio registrado en catalogo para ese producto:

  1. Agregar la linea con el precio real (no el de catalogo).
  2. Llenar los campos de override (ver seccion de Excepciones).
  3. El motivo debe justificar la diferencia (ej. “Precio de proveedor alterno”, “Compra urgente con sobreprecio”).

Excepciones

Cuando una situacion requiere desviarse del flujo normal, se utilizan los campos de override en stg_compra:

Campos de override

CampoProposito
override_reason_codeCodigo del motivo de la excepcion
override_notaDescripcion libre del motivo
override_porNombre de quien autoriza la excepcion
override_fechaFecha de la autorizacion

Cuando usar override

  • OC excede umbral de autorizacion: Cuando el monto total requiere aprobacion de direccion.
  • Precio diferente al catalogo: Cuando el precio unitario ingresado no coincide con el precio del catalogo del producto (diferencia > 20%).
  • Compra urgente fuera de proveedor habitual: Cuando se compra a un proveedor que no es el habitual por razones de urgencia.

Codigos de motivo (override_reason_code)

Los codigos deben describir la situacion. Ejemplos comunes:

  • precio_proveedor_alterno — el precio difiere porque se compro a otro proveedor
  • compra_urgente — sobreprecio o proveedor no habitual por urgencia de entrega
  • descuento_volumen — se aplico descuento por volumen
  • autorizacion_direccion — monto excede umbral, autorizado por direccion

Reglas Importantes

  1. Revisar la vista de compras. Solo aparecen OC en estado pendiente, autorizada o en_transito.
  2. Las OC con semaforo de urgencia en rojo estan vencidas — priorizar seguimiento con proveedor.
  3. Si el semaforo de urgencia esta en amarillo, la fecha de entrega esta dentro del plazo critico. Confirmar con proveedor.
  4. Si el semaforo de autorizacion esta en rojo, la OC excede el doble del umbral y requiere autorizacion de direccion antes de proceder.
  5. Si el semaforo de autorizacion esta en amarillo, la OC esta cerca del limite. Revisar si se puede dividir en OC menores.
  6. Para crear una OC: llenar proveedor_id, producto_id, cantidad y precio_unitario en stg_compra. El campo os_id es opcional para compras directas.
  7. Si el proveedor no aparece en catalogo, solicitar alta antes de crear la OC.
  8. Si el precio unitario difiere mas del 20% del precio en catalogo, llenar los campos de override con el motivo.
  9. Las compras urgentes fuera de proveedor habitual requieren nota justificando la excepcion.

Errores Comunes

Cuando una fila de staging se procesa incorrectamente, el sistema escribe el resultado en los campos de sistema:

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

Errores frecuentes y solucion

ErrorCausaSolucion
”proveedor_id es obligatorio”No se selecciono el proveedorVerificar que el campo proveedor_id tenga un valor valido del catalogo
”Proveedor con id=X no encontrado”El proveedor_id no existe en _proveedoresVerificar el ID correcto o solicitar alta del proveedor
”producto_id es obligatorio”No se selecciono el productoVerificar que el campo producto_id tenga un valor valido del catalogo
”Producto con id=X no encontrado”El producto_id no existe en _productosVerificar el ID correcto en el catalogo de productos
”cantidad debe ser > 0”Cantidad cero o negativaIngresar una cantidad mayor a cero
”precio_unitario debe ser > 0”Precio cero o negativoIngresar un precio mayor a cero
”OC excede umbral de autorizacion”El total de la OC supera el limite permitidoSolicitar autorizacion de direccion y llenar campos de override
”Precio difiere > 20% del catalogo sin override”El precio unitario difiere significativamente del catalogo y no se lleno overrideLlenar override_reason_code y override_nota justificando la diferencia

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
  • 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