# Flujo de Compras — Solicitud → Cotización → Orden → Recepción → Pago

Implementado 2026-09-03. Cierra el flujo que antes se cortaba en la selección de cotización.

## El flujo completo

```
SOLICITUD DE COMPRA                    /solicitudes/compras · /solicitudes/aprobaciones
  borrador → en_aprobacion → aprobada
                           ↘ no_aprobada (fin)
                           ↘ con_observaciones → (corrige) → en_aprobacion

        │ (aprobada)
        ▼
SOLICITUD DE COTIZACIÓN                /compras/cotizaciones · /compras/cotizaciones/seleccion
  borrador → enviada (a proveedores) → [ofertas recibidas]
          → Selección: fija monto aprobado + elige oferta ganadora → cerrada

        │ (cerrada, con proveedor ganador)      ── botón "Generar orden de compra"
        ▼
ORDEN DE COMPRA                        /compras/ordenes   (NUEVO)
  Origen: desde cotización (precarga proveedor + ítems + precios)  |  compra directa
  borrador → pendiente_aprobacion → aprobada → enviada (al proveedor) → confirmada
                     ↘ rechazada          → recibida_parcial → recibida
                     ↘ con_observaciones
     (cancelable hasta antes de "recibida")

  Aprobación:  /compras/aprobacion-ordenes   (bandeja aparte, NUEVO)

  Al aprobar   → la solicitud de compra pasa a  en_compras
  Al enviar    → la solicitud pasa a            comprada
  Recepción    → movimiento_stock (entrada) → sube existencia por trigger
  Recepción completa → solicitud pasa a        en_bodega
                     → se agenda el pago:  fecha_recepción + días de crédito

        │ (recibida)
        ▼
PAGO A PROVEEDOR                       /compras/pagos   (NUEVO)
  Lista de OC por pagar, con urgencia en vivo (vencido / vence hoy / faltan N días)
  Botón "Registrar cheque" (N.º + fecha) → estado_pago = pagada
  Aviso automático: cron notifica 3 días antes y el día del vencimiento
```

> Nota: tu diagrama cerraba "Órdenes de compra" hablando de *cliente / cotización enviada al cliente* — eso es del flujo de **ventas**. Una orden de compra va al **proveedor**; se corrigió por: envío al proveedor → confirmación → recepción de mercadería.

## Módulos nuevos en el menú (Compras)

| Pantalla | Ruta | Para qué |
|---|---|---|
| Órdenes de compra | `/compras/ordenes` | Crear/editar OC, enviar a aprobación, enviar al proveedor, confirmar, registrar recepción, cancelar |
| Aprobación de órdenes | `/compras/aprobacion-ordenes` | Bandeja: aprobar / pedir cambios / rechazar |
| Pagos a proveedores | `/compras/pagos` | OC recibidas pendientes de pago + registrar cheque |

Los 3 tienen permiso propio; sólo se ven si el rol los tiene asignados (el rol **Administrador** ya los tiene).

## Base de datos

Migración `database/migrations/2026-09-03_01_ordenes_compra.sql` (+ rollback):
`orden_compra`, `orden_compra_item`, `orden_compra_recepcion`, `orden_compra_recepcion_item`,
`orden_compra_historial`, columna `proveedor.nit`, 3 pestañas + permisos del rol Administrador.
Ya aplicada. `database/schema.sql` regenerado.

## Cómo probarlo

1. Login como admin. En el menú **Compras** aparecen las 3 pantallas nuevas.
2. Toma una cotización **cerrada** (Selección de cotizaciones) → al elegir ganadora te ofrece
   *"Generar orden de compra"*, o entra a **Órdenes de compra → Nueva orden → Desde cotización**.
3. Revisa la precarga (proveedor, ítems, precios, condición de pago) → **Guardar borrador**.
4. En la ficha: **Enviar a aprobación** → en **Aprobación de órdenes**: **Aprobar**.
   La solicitud de compra pasa a *en compras*.
5. Ficha: **Enviar al proveedor** → **Marcar confirmada** → **Registrar recepción**
   (cantidad parcial y luego el resto). Al completarse: entra el stock a bodega,
   la solicitud pasa a *en bodega* y se agenda el pago.
6. **Pagos a proveedores**: la OC aparece con su fecha de vencimiento y urgencia.
   **Registrar cheque** → sale de la lista.
7. Aviso de pago: `php cron/verificar_pagos_proveedor.php` (instalar en cron, ver `cron/README.md`).

## Fuera de alcance (para después)

Orígenes "contrato" y "reposición de inventario"; varias OC por cotización; PDF / envío por
correo de la OC; conciliación contra factura.
