Ir al contenido

Cambiar Estado

Actualiza el estado del presupuesto (enviado, aceptado, rechazado, expirado) con notas opcionales.

  1. Abre el presupuesto cuyo estado deseas cambiar.
  2. Clic en el botón “Cambiar Estado” o en el badge de estado actual.
  3. Se abre un modal con:
    • Nuevo Estado: selector (draft, sent, pending, accepted, rejected, expired)
    • Notas: campo opcional para registrar motivo del cambio
  4. Clic en “Confirmar”.
  5. El sistema actualiza el estado y registra la fecha del cambio.
EstadoBadgeDescripción
draftGrisBorrador sin enviar
sentAzulEnviado al cliente
pendingAmarilloEn revisión por el cliente
acceptedVerdeAprobado por el cliente
rejectedRojoRechazado por el cliente
expiredRojo oscuroFuera del plazo de validez
Desde — HaciaUso
draft — sentAl enviar por primera vez
sent — pendingCliente está revisando
pending — acceptedCliente aprueba
pending — rejectedCliente rechaza
sent — expiredVenció el plazo de validez
  • El badge de estado se actualiza inmediatamente.
  • Toast de confirmación: “Estado actualizado”.
  • Si añadiste notas, se guardan en el historial interno.
MensajeCausaSolución
”No se pudo actualizar el estado”Error de permisosVerifica que tienes acceso de edición
”Estado no válido”Transición no permitidaRevisa las transiciones permitidas
Información técnica

Validaciones:

CódigoRegla
VAL-01status IN (‘draft’, ‘sent’, ‘pending’, ‘accepted’, ‘rejected’, ‘expired’)
VAL-02quote_id válido y accesible
VAL-03notes longitud máxima 1000 caracteres

Componente principal: ChangeStatusModal.tsx

Queries de diagnóstico:

-- Distribución de estados por negocio
SELECT status, COUNT(*) as total,
ROUND(AVG(total_amount), 2) as importe_medio
FROM quotes
WHERE business_id = '<business_id>'
AND is_proforma = false
GROUP BY status
ORDER BY total DESC;
-- Tasa de conversión de presupuestos
SELECT
COUNT(*) as total_presupuestos,
COUNT(CASE WHEN status = 'accepted' THEN 1 END) as aceptados,
COUNT(CASE WHEN status = 'rejected' THEN 1 END) as rechazados,
ROUND(
COUNT(CASE WHEN status = 'accepted' THEN 1 END)::numeric /
NULLIF(COUNT(*), 0) * 100, 2
) as tasa_conversion
FROM quotes
WHERE business_id = '<business_id>'
AND is_proforma = false
AND created_at >= NOW() - INTERVAL '90 days';