Cambiar Estado
Exportar contenido
Actualiza el estado del presupuesto (enviado, aceptado, rechazado, expirado) con notas opcionales.
- Abre el presupuesto cuyo estado deseas cambiar.
- Clic en el botón “Cambiar Estado” o en el badge de estado actual.
- Se abre un modal con:
- Nuevo Estado: selector (draft, sent, pending, accepted, rejected, expired)
- Notas: campo opcional para registrar motivo del cambio
- Clic en “Confirmar”.
- El sistema actualiza el estado y registra la fecha del cambio.
Estados disponibles
Sección titulada «Estados disponibles»| Estado | Badge | Descripción |
|---|---|---|
| draft | Gris | Borrador sin enviar |
| sent | Azul | Enviado al cliente |
| pending | Amarillo | En revisión por el cliente |
| accepted | Verde | Aprobado por el cliente |
| rejected | Rojo | Rechazado por el cliente |
| expired | Rojo oscuro | Fuera del plazo de validez |
Transiciones comunes
Sección titulada «Transiciones comunes»| Desde — Hacia | Uso |
|---|---|
| draft — sent | Al enviar por primera vez |
| sent — pending | Cliente está revisando |
| pending — accepted | Cliente aprueba |
| pending — rejected | Cliente rechaza |
| sent — expired | Venció el plazo de validez |
¿Cómo sé que lo hice bien?
Sección titulada «¿Cómo sé que lo hice bien?»- El badge de estado se actualiza inmediatamente.
- Toast de confirmación: “Estado actualizado”.
- Si añadiste notas, se guardan en el historial interno.
Errores comunes
Sección titulada «Errores comunes»| Mensaje | Causa | Solución |
|---|---|---|
| ”No se pudo actualizar el estado” | Error de permisos | Verifica que tienes acceso de edición |
| ”Estado no válido” | Transición no permitida | Revisa las transiciones permitidas |
Información técnica
Validaciones:
| Código | Regla |
|---|---|
| VAL-01 | status IN (‘draft’, ‘sent’, ‘pending’, ‘accepted’, ‘rejected’, ‘expired’) |
| VAL-02 | quote_id válido y accesible |
| VAL-03 | notes longitud máxima 1000 caracteres |
Componente principal: ChangeStatusModal.tsx
Queries de diagnóstico:
-- Distribución de estados por negocioSELECT status, COUNT(*) as total, ROUND(AVG(total_amount), 2) as importe_medioFROM quotesWHERE business_id = '<business_id>' AND is_proforma = falseGROUP BY statusORDER BY total DESC;
-- Tasa de conversión de presupuestosSELECT 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_conversionFROM quotesWHERE business_id = '<business_id>' AND is_proforma = false AND created_at >= NOW() - INTERVAL '90 days';