← Volver a InvoiceHeadController

🔄 Gestión de Estados

Endpoint para la gestión de estados de las facturas

Descripción General

El endpoint de Gestión de Estados proporciona la funcionalidad para actualizar el estado de las facturas del restaurante. Este endpoint permite controlar el ciclo de vida de las facturas, desde su creación hasta su finalización, pasando por diferentes estados que reflejan su situación actual.

🎯 Características de la Gestión de Estados

  • Control de ciclo de vida: Gestión del flujo de estados de las facturas
  • Identificación compuesta: Se accede por tipo, serie y número de factura
  • Validación de transiciones: Verificación de que el cambio de estado sea válido
  • Transacciones seguras: Uso de contexto de base de datos
  • Resultados estructurados: ServiceResult para manejo de errores
  • Auditoría automática: Registro de cambios de estado

Endpoint Disponible

PUT /WorkingData/InvoiceHead/{tipoDocumento}/{serie}/{factura}/status

Actualiza el estado de una factura específica por su tipo de documento, serie y número. Este endpoint permite cambiar el estado de una factura a través de su ciclo de vida.
Parámetros de ruta:
  • tipoDocumento (string, requerido): Tipo de documento (ej: "FACTURA", "TICKET")
  • serie (string, requerido): Serie del documento
  • factura (double, requerido): Número de factura
Parámetros de consulta:
  • status (string, requerido): Nuevo estado de la factura
  • initialCatalog (string, requerido): Nombre de la base de datos
  • userID (string, opcional): ID de usuario de la base de datos
  • password (string, opcional): Contraseña de la base de datos
200 OK
Estado de factura actualizado exitosamente
{ "isSuccess": true, "error": null, "data": true }
400 Bad Request
Error en la actualización del estado
{ "isSuccess": false, "error": "Error al actualizar estado: Transición de estado no válida", "data": false }

🔧 Características Técnicas

📋 Detalles de Implementación

  • Tipo de respuesta: ServiceResult<bool> con información de éxito/error
  • Validación de transiciones: Verificación de que el cambio de estado sea permitido
  • Contexto de base de datos: Uso de WorkingDataContext para transacciones
  • Error handling: Manejo de excepciones con logging detallado
  • Performance: Operación asíncrona para mejor rendimiento

⚠️ Consideraciones de Uso

  • Transiciones válidas: No todos los cambios de estado son permitidos
  • Permisos de usuario: Verificar que el usuario tenga permisos para cambiar estados
  • Auditoría: Todos los cambios de estado deben ser registrados
  • Notificaciones: Considerar notificar cambios de estado a clientes

Servicio Utilizado

IInvoiceHeadService - Servicio principal para la gestión de cabeceras de facturas
  • UpdateInvoiceStatus(): Actualiza el estado de una factura específica
  • Parámetros: tipoDocumento (string), serie (string), factura (double), status (string), context (WorkingDataContext)
  • Retorno: ServiceResult<bool> - Resultado de la operación

📊 Estados de Facturas

🔄 Ciclo de Vida de una Factura

📝 BORRADOR

Factura en proceso de creación

Permite: Modificación completa

Transiciones: → EMITIDA, ANULADA

📄 EMITIDA

Factura completada y emitida

Permite: Solo cambios menores

Transiciones: → PAGADA, PENDIENTE, ANULADA

⏳ PENDIENTE

Factura pendiente de pago

Permite: Solo actualización de estado

Transiciones: → PAGADA, ANULADA

✅ PAGADA

Factura pagada completamente

Permite: Solo consulta

Transiciones: → ANULADA (con restricciones)

❌ ANULADA

Factura cancelada o anulada

Permite: Solo consulta

Transiciones: Ninguna (estado final)

🔍 Casos de Uso Comunes

📋 Escenarios de Aplicación

  • Emisión de factura: Cambiar de BORRADOR a EMITIDA
  • Registro de pago: Cambiar de PENDIENTE a PAGADA
  • Anulación de factura: Cambiar a ANULADA desde cualquier estado
  • Pago parcial: Mantener en PENDIENTE hasta pago completo
  • Corrección de errores: Anular y crear nueva factura
  • Seguimiento de cobros: Monitorear facturas pendientes

📝 Ejemplos de Uso

🌐 Uso en JavaScript

// Cambiar estado de factura a PAGADA const response = await fetch( `/WorkingData/InvoiceHead/FACTURA/A/1001/status?status=PAGADA&initialCatalog=${dbName}`, { method: 'PUT' } ); const result = await response.json(); if (result.isSuccess) { console.log('Estado actualizado correctamente'); } else { console.error('Error:', result.error); }

🔗 Uso en Aplicaciones Móviles

// Anular una factura const updateStatus = async (tipoDoc, serie, factura, nuevoEstado) => { const url = `/WorkingData/InvoiceHead/${tipoDoc}/${serie}/${factura}/status`; const params = new URLSearchParams({ status: nuevoEstado, initialCatalog: dbName }); const response = await fetch(`${url}?${params}`, { method: 'PUT' }); return await response.json(); };

🔒 Consideraciones de Seguridad

⚠️ Protección de Transiciones de Estado

  • Validación de transiciones: Solo permitir cambios de estado válidos
  • Permisos de usuario: Verificar autorización para cambios de estado
  • Auditoría obligatoria: Registrar todos los cambios de estado
  • Restricciones de negocio: No permitir cambios en facturas pagadas
  • Notificaciones: Informar cambios críticos a clientes