Appearance
Presupuesto Base y Medios de Pago
Módulo: crm Tipo: Resource Estado: Implementado Fecha: 2026-02-02
Descripción de la Fase
La Fase 1 implementa la funcionalidad base del sistema de presupuestos, incluyendo:
- CRUD completo de presupuestos
- Asociación con registros CRM
- Gestión de medios de pago
- Flujo de aprobación
- Estados especiales: sin cargo y garantía
- Descuento general del presupuesto
Esta fase es independiente y no requiere módulos adicionales (Ventas o Compras).
Frontend (Perspectiva de Usuario)
Vistas
- Listado de presupuestos por registro CRM: Muestra todos los presupuestos asociados a un registro de atención específico, con indicadores visuales de estado (borrador, aprobado, garantía, sin cargo)
- Formulario de creación/edición de presupuesto: Pantalla principal para capturar todos los datos del presupuesto
- Modal de medios de pago: Interfaz para asignar montos a diferentes medios de pago disponibles
Componentes Esperados
- Listado de presupuestos con filtros y ordenamiento
- Formulario de presupuesto con validaciones en tiempo real
- Selector de medios de pago con monto y notas
- Botón de aprobación con confirmación
- Badges visuales para estados (borrador, aprobado, garantía, sin cargo)
Interacciones del Usuario
Gestión básica:
- Acceder al listado de presupuestos desde un registro CRM
- Crear nuevo presupuesto con datos básicos (fecha, validez, total, notas)
- Modificar presupuesto existente (solo si no está aprobado)
- Eliminar presupuesto (solo si no está aprobado y tiene permiso)
- Aprobar presupuesto (cambia a estado de solo lectura)
Medios de pago: 6. Abrir modal de medios de pago 7. Seleccionar medio de pago de lista disponible 8. Asignar monto al medio de pago seleccionado 9. Agregar notas opcionales al medio de pago 10. Reorganizar orden de visualización de medios de pago 11. Eliminar medio de pago asignado
Características especiales:
- Marcar presupuesto como "Garantía" (indicador visual)
- Marcar presupuesto como "Sin cargo" (total se establece en 0)
- Ingresar motivo obligatorio cuando es sin cargo
- Aplicar descuento general al presupuesto
- Editar pie de presupuesto para impresión
Impresión:
- Generar PDF del presupuesto para entregar al cliente
Permisos del Sistema
| Permiso | Nombre | Descripción | Nivel |
|---|---|---|---|
| CRM_BUDGET | Presupuestos | Acceso al listado, alta y modificaciones de presupuestos | 2 |
El acceso a presupuestos está controlado por un único permiso (CRM_BUDGET, código 2025 en Permisos.php), que otorga acceso completo al módulo: listado, creación, modificación y eliminación. Este permiso es submódulo del CRM (nivel 2, padre 2001).
Estados de UI
Estado del presupuesto:
- Borrador: Indicador neutro, permite todas las operaciones de edición
- Aprobado: Badge destacado con fecha de aprobación, formulario en modo solo lectura
- Garantía: Badge visual distintivo junto al estado principal
- Sin cargo: Badge visual con motivo visible en tooltip o detalle
Estados de carga:
- Cargando: Indicador de carga al obtener datos del presupuesto
- Guardando: Indicador durante operaciones de guardado
Estados de validación:
- Error de validación: Mensajes junto a campos con error
- Confirmación de aprobación: Diálogo de confirmación antes de aprobar
Estados de resultado:
- Éxito: Notificación de operación completada
- Error: Mensaje de error con descripción del problema
- Listado vacío: Mensaje indicando que no hay presupuestos para el registro CRM
Backend (Perspectiva de Datos de Negocio)
Entidades de la Fase 1
Presupuesto
| Dato | Descripción | Obligatorio | Reglas |
|---|---|---|---|
| Fecha y hora | Momento de creación del presupuesto | Si | Por defecto fecha/hora actual |
| Usuario creador | Quien generó el presupuesto | Si | Usuario autenticado |
| Validez | Cantidad de días de vigencia | No | Debe ser mayor a 0 si se especifica |
| Pie de presupuesto | Texto para impresión del documento | No | Texto libre |
| Descuento general | Porcentaje de descuento aplicado | No | Entre 0 y 100 |
| Aprobado | Indica si el presupuesto fue aprobado | Si | Por defecto No |
| Fecha de aprobación | Momento de la aprobación | Condicional | Obligatorio si está aprobado |
| Notas internas | Observaciones que no se imprimen | No | Texto libre |
| Es garantía | Marca de trabajo en garantía | Si | Por defecto No |
| Sin cargo | Indica si es sin cargo | Si | Por defecto No |
| Motivo sin cargo | Razón del trabajo sin cargo | Condicional | Obligatorio si es sin cargo |
| Total | Monto total del presupuesto | Si | Debe ser >= 0, debe ser 0 si es sin cargo |
| Fecha de creación | Timestamp de creación | Si | Automático |
| Fecha de modificación | Timestamp de última modificación | No | Automático |
| Fecha de eliminación | Timestamp de borrado lógico | No | Soft delete |
Relación CRM-Presupuesto
| Dato | Descripción | Obligatorio | Reglas |
|---|---|---|---|
| Identificador del registro CRM | Referencia al registro de atención | Si | UUID válido existente |
| Identificador del presupuesto | Referencia al presupuesto | Si | Entero válido existente |
Nota: Esta relación permite que un registro CRM tenga múltiples presupuestos (seguimiento de cotizaciones en el tiempo).
Medio de Pago del Presupuesto
| Dato | Descripción | Obligatorio | Reglas |
|---|---|---|---|
| Presupuesto | Referencia al presupuesto | Si | Debe existir |
| Medio de pago | Referencia al medio de pago | Si | Debe existir en catálogo |
| Monto | Cantidad asignada a este medio | Si | Debe ser mayor a 0 |
| Notas | Observaciones del medio de pago | No | Texto libre |
| Orden de visualización | Posición en la lista | Si | Por defecto 0 |
Validaciones de Negocio Fase 1
Presupuesto:
- El descuento debe estar entre 0% y 100%
- El total debe ser mayor o igual a 0
- La validez, si se especifica, debe ser mayor a 0 días
- Si es "sin cargo", el motivo es obligatorio
- Si es "sin cargo", el total debe ser 0
- Si está aprobado, la fecha de aprobación es obligatoria
- Si no está aprobado, la fecha de aprobación debe estar vacía
Medios de Pago:
- El monto de cada medio de pago debe ser mayor a 0
- Los medios de pago son opcionales en todos los tipos de presupuesto (normal, garantía, sin cargo)
- La suma de los medios de pago asignados no debe superar el total del presupuesto (si se asignan)
Operaciones:
- No se puede modificar un presupuesto aprobado
- No se puede eliminar un presupuesto aprobado
- No se puede eliminar un presupuesto vinculado a prefacturas
- La aprobación es una acción irreversible
Reglas de Negocio Específicas
RN-001: Gestión de Totales (Sin Ítems)
En la Fase 1, el presupuesto NO tiene ítems, por lo tanto:
- El usuario ingresa el total manualmente
- El total puede modificarse libremente (mientras no esté aprobado)
- El total del presupuesto se preserva al editar un presupuesto sin ítems (no se resetea a 0)
- Los medios de pago son opcionales e informativos; si se asignan, su suma no debe superar el total
RN-002: Proceso de Aprobación
- Solo usuarios con permiso CRM_BUDGET pueden aprobar
- Al aprobar, el sistema registra automáticamente la fecha y hora de aprobación
- Una vez aprobado, el presupuesto queda en modo de solo lectura
- No se puede revertir una aprobación (acción irreversible)
- Presupuestos aprobados no pueden ser eliminados ni modificados
RN-003: Presupuestos Sin Cargo
- Si se marca "Sin cargo" = true, el total DEBE ser 0
- El campo "Motivo sin cargo" se vuelve OBLIGATORIO
- Los medios de pago son opcionales cuando es sin cargo (no se valida ni requiere cobertura)
- Se debe poder desmarcar "Sin cargo" y el total vuelve a ser editable
RN-004: Presupuestos en Garantía
- Es una marca informativa (indicador visual)
- NO afecta el flujo de aprobación ni las validaciones de total
- Se muestra como badge visual distintivo
- Puede combinarse con "Sin cargo"
RN-005: Validez del Presupuesto
- Se expresa en días desde la fecha de creación
- Es un campo informativo, no calcula fecha de vencimiento automáticamente
- El sistema NO bloquea ni alerta automáticamente por vencimiento
RN-006: Integración con CRM
- Un registro CRM puede tener MÚLTIPLES presupuestos asociados
- Al cancelar un registro CRM, sus presupuestos asociados deben cancelarse también (pendiente de implementación — fase posterior)
- Al eliminar un presupuesto, se mantiene el registro CRM intacto
- Los registros CRM no se eliminan físicamente; la baja se realiza mediante cancelación con motivo (
cancel_reason_id)
Casos de Uso
Caso 1: Crear Presupuesto Simple
Actor: Usuario con permiso CRM_BUDGET
Precondiciones:
- El usuario está autenticado en el sistema
- Existe un registro CRM al cual asociar el presupuesto
- El usuario tiene acceso al módulo CRM
Flujo principal:
- El usuario accede al detalle de un registro CRM
- El usuario selecciona la opción "Nuevo Presupuesto"
- El sistema muestra el formulario de presupuesto con fecha y hora actuales
- El usuario ingresa la validez en días (opcional)
- El usuario ingresa el total del presupuesto
- El usuario aplica un descuento general si corresponde
- El usuario abre el modal de medios de pago (opcional)
- El usuario selecciona un medio de pago de la lista disponible
- El usuario ingresa el monto asignado a ese medio
- El usuario repite pasos 8-9 para adicionales medios de pago si es necesario
- El usuario cierra el modal de medios de pago
- El usuario ingresa notas internas si corresponde
- El usuario guarda el presupuesto
- El sistema valida los datos y guarda el presupuesto en estado borrador
- El sistema muestra mensaje de éxito y actualiza el listado
Postcondiciones:
- El presupuesto queda guardado en estado borrador
- El presupuesto está asociado al registro CRM
- Los medios de pago quedan registrados con sus montos (si se asignaron)
- El presupuesto aparece en el listado del registro CRM
- Se registra auditoría de la creación
Flujos alternativos:
- Error de validación: Si algún campo no cumple las reglas (ej: descuento > 100), el sistema muestra mensajes de error junto a los campos afectados y no permite guardar hasta corregir
- Suma de medios excede total: Si el usuario asignó medios de pago y su suma supera el total, el sistema muestra error de validación y no permite guardar hasta ajustar los montos
- Presupuesto sin cargo: Si el usuario marca "Sin cargo", el total se establece en 0 y se solicita el motivo obligatoriamente
- Cancelación: Si el usuario cancela, se descarta la información ingresada y vuelve al registro CRM
Caso 4: Aprobar Presupuesto
Actor: Usuario con permiso CRM_BUDGET
Precondiciones:
- Existe un presupuesto en estado borrador
- El usuario tiene permiso CRM_BUDGET
- El presupuesto tiene todos los datos requeridos completos
Flujo principal:
- El usuario accede al listado de presupuestos de un registro CRM
- El usuario identifica el presupuesto a aprobar (estado: borrador)
- El usuario selecciona la acción "Aprobar"
- El sistema muestra diálogo de confirmación indicando que la acción es irreversible
- El usuario confirma la aprobación
- El sistema registra la fecha y hora de aprobación
- El sistema cambia el estado del presupuesto a "Aprobado"
- El sistema muestra mensaje de éxito
- El presupuesto se muestra ahora en modo solo lectura
Postcondiciones:
- El presupuesto queda marcado como aprobado con fecha de aprobación
- El presupuesto no puede ser modificado ni eliminado
- El badge de "Aprobado" se muestra en el listado y detalle
- Se registra auditoría de la aprobación
- El presupuesto puede ser vinculado a prefacturas
Flujos alternativos:
- Usuario cancela confirmación: Si el usuario cancela en el diálogo, el presupuesto permanece como borrador
- Error al aprobar: Si ocurre un error, el sistema muestra mensaje y el presupuesto permanece como borrador
- Presupuesto ya aprobado: Si otro usuario aprobó mientras tanto, el sistema informa que ya está aprobado
Consideraciones Técnicas Fase 1
Performance
Expectativas de tiempo de respuesta:
- Listado de presupuestos: < 2 segundos
- Guardado de presupuesto: < 3 segundos
Índices recomendados:
- Búsqueda por registro CRM
- Filtrado por estado (aprobado/borrador)
- Ordenamiento por fecha
Seguridad
- Solo usuarios con CRM_BUDGET pueden acceder a presupuestos (ver, crear, modificar, aprobar, eliminar)
- Un usuario solo puede ver presupuestos de los registros CRM a los que tiene acceso
- Los presupuestos aprobados son inmutables
- El borrado es lógico (soft delete), no físico
Auditoría
Operaciones a registrar:
- Creación de presupuesto (usuario, fecha, datos)
- Modificación de presupuesto (usuario, fecha, campos modificados)
- Aprobación de presupuesto (usuario, fecha)
- Eliminación de presupuesto (usuario, fecha)
- Adición/modificación/eliminación de medios de pago
Información relevante:
- Identificador del registro afectado
- Usuario que realizó la operación
- Fecha y hora de la operación
- Tipo de operación (INSERT, UPDATE, DELETE)
- Valores anteriores y nuevos (para modificaciones)
Testing
Escenarios críticos a validar:
- Creación de presupuesto con todos los campos
- Validación de suma de medios de pago vs total
- Flujo completo de aprobación
- Protección de presupuestos aprobados
- Manejo de presupuestos sin cargo
- Eliminación con y sin permisos
Generación de PDF
El presupuesto puede imprimirse como PDF para entregar al cliente. El documento generado incluye:
- Datos del encabezado: fecha, validez, número de presupuesto
- Datos del cliente/registro CRM asociado
- Total del presupuesto con descuento general aplicado
- Medios de pago con sus montos
- Pie de presupuesto (texto libre configurable por el usuario)
Presupuesto con ítems
Cuando el presupuesto tiene ítems (Fase 2), el PDF es el mismo documento con una sección adicional donde cada ítem se lista uno debajo del otro, mostrando producto, cantidad, precio unitario, descuento y total por ítem.
Criterios de Aceptación Fase 1
- [x] AC-001: El usuario puede crear un nuevo presupuesto asociado a un registro CRM con fecha, validez, descuento y total
- [x] AC-002: El usuario puede agregar múltiples medios de pago a un presupuesto, cada uno con su monto y notas
- [x] AC-003: Los medios de pago son opcionales; si se asignan, el sistema valida que su suma no supere el total del presupuesto
- [x] AC-004: El usuario puede marcar un presupuesto como "Sin cargo" y debe ingresar motivo obligatoriamente
- [x] AC-005: El usuario puede marcar un presupuesto como "Garantía" como indicador visual
- [x] AC-006: El usuario con permiso CRM_BUDGET puede aprobar presupuestos, quedando en modo solo lectura
- [x] AC-007: Un presupuesto aprobado no puede ser modificado ni eliminado
- [x] AC-008: El sistema registra auditoría de todas las operaciones (crear, modificar, aprobar, eliminar)
- [x] AC-009: La eliminación de presupuestos es lógica (soft delete) y solo para presupuestos no aprobados
- [ ] AC-010: Existen pruebas unitarias y de integración que validan las funcionalidades de Fase 1
Navegación
Historial de cambios
| Fecha | Versión | Autor | Descripción |
|---|---|---|---|
| 2026-02-02 | 1.0 | Claude | Creación del documento |
| 2026-03-10 | 1.1 | Claude | Estado actualizado a Implementado; permisos granulares reemplazados por CRM_BUDGET único; AC-001 a AC-009 marcados cumplidos |