Appearance
Cupón de Pago
Esta sección documenta el sistema completo de cupones de pago de membresías, que permite generar cupones con código de barras ITF para facilitar el cobro de cuotas mensuales, incluyendo validación automática y cobro cross-schema entre sucursales.
Descripción General
El sistema de cupones de pago permite:
Generación de cupones PDF: Con código de barras ITF de 19 dígitos
Validación automática: Al escanear el código de barras se valida contra facturación, con soporte de modo prueba
Cobro simplificado: Precarga automática del recibo con datos validados
Cobro cross-schema: Pago de deudas en sucursal diferente a la emisora
Algoritmo de verificación: Módulo 10 con ponderación 3-1 para integridad de datos
Componentes Documentados
Generación de Cupones
- Generación de Cupón PDF: Proceso completo de generación
- Generación de código de barras ITF 19 dígitos
- Formato:
[SUCU(4)][CLIENTE(8)][PERIODO(6)][DV(1)] - Algoritmo Módulo 10 con ponderación 3-1 para dígito verificador
- Template HTML con Bootstrap
- Código de barras en SVG
- Monto pendiente actualizado
- Instrucciones de pago
- Generación PDF vía
PdfGeneratorService(puerto 9999) - Generación individual y masiva
Validación de Cupones
- Validación de Cupón (Escaneo): Validación automática al escanear
- Decodificación de código de barras (sucursal, cliente, período)
- Verificación de dígito verificador (Módulo 10)
- Búsqueda de factura en base de datos
- Validación de estado de factura (pendiente/cancelada)
- Detección automática de cobro cross-schema
- Soporte de modo prueba: consulta BD
_pcuandomodo_prueba = trueen la facturación - Auto-switch de modo en frontend al detectar cupón de prueba
- Retorno de datos para precarga de recibo
- Entrada manual de código como fallback
Cobro Cross-Schema
- Cobro Multi-Sucursal: Cobro en sucursal diferente
- Transacción atómica en dos schemas (origen + destino)
- Cancelación de factura en schema origen
- Registro de movimiento de caja en schema destino
- Validación de permisos especiales
- Auditoría completa de operación
- Rollback automático en caso de error
- Referencias bidireccionales entre schemas
Flujo Completo de Cupón de Pago
mermaid
graph TD
A[Facturación por Lotes] --> B[Genera facturas de membresía]
B --> C[Miembro solicita cupón]
C --> D[Generación de Cupón PDF]
D --> E[Cupón con código de barras ITF]
E --> F[Miembro presenta cupón en caja]
F --> G[Cajero escanea código]
G --> H{Validación}
H -->|OK Local| I[Precarga recibo]
H -->|Cross-Schema| J[Detecta sucursal diferente]
H -->|Error| K[Muestra error al cajero]
J --> L{Tiene permiso?}
L -->|Sí| M[Cobro cross-schema]
L -->|No| N[Rechaza cobro]
I --> O[Cajero confirma y cobra]
M --> P[Transacción distribuida]
P --> Q[Cancelar factura origen]
Q --> R[Registrar caja destino]
R --> S{Éxito?}
S -->|Sí| T[Commit ambos schemas]
S -->|No| U[Rollback automático]
O --> V[Factura cancelada]
T --> VEstructura del Código de Barras ITF
Formato (19 dígitos)
[SUCU(4)][CLIENTE(8)][PERIODO(6)][DV(1)]Componentes
| Componente | Posición | Longitud | Descripción | Ejemplo |
|---|---|---|---|---|
| SUCU | 1-4 | 4 | Código de sucursal (4 dígitos, pad left con 0) | 0001 |
| CLIENTE | 5-12 | 8 | ID del cliente (8 dígitos, pad left con 0) | 00000123 |
| PERIODO | 13-18 | 6 | Período YYYYMM | 202501 |
| DV | 19 | 1 | Dígito verificador (Módulo 10) | 7 |
Ejemplo Completo
0001000001232025017- Sucursal: 0001
- Cliente: 00000123
- Período: 202501 (Enero 2025)
- Dígito verificador: 7
Algoritmo de Dígito Verificador (Módulo 10)
Paso 1: Ponderación 3-1
Multiplicar cada dígito alternadamente por 3 y 1 (de derecha a izquierda):
Código: 0 0 0 1 0 0 0 0 0 1 2 3 2 0 2 5 0 1
Pond.: 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1 3 1
Prod.: 0 0 0 1 0 0 0 0 0 1 6 3 6 0 6 5 0 1Paso 2: Suma de Productos
Suma = 0+0+0+1+0+0+0+0+0+1+6+3+6+0+6+5+0+1 = 29Paso 3: Módulo 10
Resto = 29 % 10 = 9Paso 4: Dígito Verificador
DV = (10 - Resto) % 10 = (10 - 9) % 10 = 1Si el resto es 0, el DV es 0.
Reglas de Negocio Principales
Generación de Cupones
RN-001: Formato Estándar ITF
El código de barras debe cumplir con el estándar ITF (Interleaved 2 of 5):
- Longitud fija: 19 dígitos
- Codificación numérica únicamente
- Dígito verificador obligatorio
- Pad left con ceros para completar longitud
RN-002: Monto Actualizado
El cupón muestra el monto pendiente actualizado al momento de la generación:
- Se consulta el saldo actual de la factura
- No se "congela" el monto en el cupón
- Útil para pagos parciales previos
RN-003: Un Cupón por Período
Un cliente puede tener solo un cupón válido por período:
- Si se solicita cupón para período ya facturado: Se genera
- Si se solicita cupón para período no facturado: Error
- No se valida unicidad del cupón (pueden generarse varios del mismo período)
RN-004: Generación Masiva
El sistema permite generar cupones para múltiples clientes:
- Rango de IDs de clientes
- Mismo período para todos
- Generación en lote con reporte de resultados
Validación de Cupones
RN-001: Validación de Formato
El código escaneado debe cumplir:
- Longitud exacta: 19 dígitos
- Solo caracteres numéricos
- Dígito verificador correcto (Módulo 10)
RN-002: Verificación de Dígito Verificador
Se recalcula el DV usando Módulo 10 con ponderación 3-1:
- Si coincide: Código válido
- Si no coincide: Error de lectura o manipulación
RN-003: Factura Existente
Debe existir una factura de membresía para:
- Cliente indicado en el código
- Período indicado en el código
- En el schema correspondiente a la sucursal
RN-004: Factura Pendiente
La factura debe estar pendiente de pago:
- Si ya fue cancelada: Error con fecha de cancelación
- Si tiene saldo parcial: Se permite cobro del saldo pendiente
RN-005: Detección Cross-Schema Automática
El sistema detecta automáticamente si la sucursal del cupón es diferente a la sucursal actual:
- Compara código de sucursal del cupón vs sucursal actual (X-Schema header)
- Si son diferentes: Dispara flujo de cobro cross-schema
- Si son iguales: Flujo de cobro local normal
Cobro Cross-Schema
RN-001: Permiso Especial Requerido
El cobro cross-schema requiere permiso específico:
- Permiso:
COBRO_CROSS_SCHEMAo similar - Validación antes de ejecutar la transacción
- Rechazo si el usuario no tiene el permiso
RN-002: Transacción Atómica Distribuida
El cobro cross-schema es una transacción atómica en dos schemas:
- Schema Origen (sucursal que facturó): Cancelar factura
- Schema Destino (sucursal que cobra): Registrar movimiento de caja
- Commit solo si ambas operaciones son exitosas
- Rollback automático si cualquiera falla
RN-003: Referencias Bidireccionales
Se registran referencias entre schemas:
- Factura origen: Referencia al movimiento de caja destino (schema, ID)
- Movimiento destino: Referencia a la factura origen (schema, ID)
- Permite auditoría completa y trazabilidad
RN-004: Auditoría Completa
Se registra en auditoría:
- Usuario que ejecutó el cobro
- Sucursal origen y destino
- IDs de factura y movimiento de caja
- Timestamp de la operación
- Resultado (éxito/error)
RN-005: Rollback Automático
Si cualquier operación falla:
- Se hace rollback de todas las operaciones
- No quedan datos inconsistentes
- Se informa el error al usuario con detalle
Casos de Uso Comunes
1. Generar Cupón Individual
- Desde vista del cliente o desde módulo de cupones
- Seleccionar cliente
- Seleccionar período (mes/año)
- Generar
- Sistema busca factura del período
- Sistema genera código de barras ITF
- Sistema genera PDF con cupón
- Descargar PDF
2. Cobrar con Cupón (Local - Mismo Schema)
- Cliente presenta cupón en caja
- Cajero escanea código de barras
- Sistema valida formato y DV
- Sistema busca factura en schema actual
- Factura encontrada y pendiente
- Sistema precarga recibo con datos validados
- Cajero confirma monto y forma de pago
- Sistema registra cobro y cancela factura
3. Cobrar con Cupón (Cross-Schema)
- Cliente presenta cupón de sucursal A en sucursal B
- Cajero de sucursal B escanea código
- Sistema detecta que el código es de sucursal A (diferente)
- Sistema valida permiso
COBRO_CROSS_SCHEMAdel cajero - Si tiene permiso: Sistema precarga recibo indicando "COBRO CROSS-SCHEMA"
- Cajero confirma cobro
- Sistema ejecuta transacción distribuida:
- Cancelar factura en schema de sucursal A
- Registrar movimiento de caja en schema de sucursal B
- Commit atómico de ambas operaciones
- Recibo generado con referencias a ambos schemas
4. Error en Validación de Cupón
- Cajero escanea cupón
- Sistema detecta error:
- Código mal formado (longitud incorrecta)
- DV inválido (error de lectura)
- Factura no encontrada
- Factura ya cancelada
- Sistema muestra mensaje de error descriptivo
- Cajero puede:
- Re-escanear cupón
- Ingresar código manualmente
- Buscar factura manualmente
Vistas Frontend
/movimientos/generar-cupon- Generación de cupones de pago- Integración con módulo de cobros (CtaCte) para validación y cobro
Modales
(Los modales de validación y cobro están en el módulo de CtaCte)
Endpoints API
Generación
- Reporte 0004 en
informes/reports/mod-ctacte/- Genera PDF de cupón
Validación
POST /ctacte/cupones/validar- Valida código de barras escaneado
Cobro Cross-Schema
- Transacción distribuida (no endpoint público específico)
- Se ejecuta como parte del proceso de cobro del módulo CtaCte
Archivos del Sistema de Informes
Generación de Cupón
informes/reports/mod-ctacte/cupon-pago-datos.php- Extrae datos de la facturainformes/reports/mod-ctacte/cupon-pago-render.php- Template HTML del cupóninformes/reports/mod-ctacte/util/BarcodeGenerator.php- Genera código de barras SVG
Dependencias
Funcionalidades Relacionadas
- Facturación por Lotes: Genera las facturas para las cuales se solicitan cupones
- Gestión de Miembros: Los clientes del cupón son miembros
- Integración con CtaCte: Validación y cobro de cupones
Módulos Externos
- CtaCte: Módulo de cobros que consume la validación de cupones
- Informes: Sistema de generación de PDFs (puerto 9999)
- Ventas: Facturas de membresía que se cobran con cupón
Servicios Externos
PdfGeneratorService- Servicio externo en puerto 9999 para generar PDFs
Consideraciones de Seguridad
Validación de Integridad
- El dígito verificador previene errores de lectura y manipulación
- Algoritmo Módulo 10 detecta hasta el 95% de errores de transcripción
Permisos Cross-Schema
- El cobro cross-schema requiere permiso especial
- Previene cobros no autorizados entre sucursales
- Se audita cada operación cross-schema
Transacción Atómica
- El rollback automático previene inconsistencias
- No es posible cancelar una factura sin registrar el cobro (o viceversa)
- Garantiza integridad de datos entre schemas
Consideraciones Multi-Tenant
Aislamiento de Schemas
- Cada sucursal tiene su propio schema
- Los cupones contienen el código de la sucursal emisora
- La validación busca la factura en el schema correspondiente
Cobro Cross-Schema
- Permite cobrar en sucursal diferente a la emisora
- Mantiene aislamiento de schemas con transacción distribuida
- Referencias bidireccionales para auditoría completa
Documentación de Referencia
Existe documentación integral previa que cubre el proceso completo:
- Proceso Integral de Cupón de Pago (1030 líneas)
- 7 reglas de negocio
- 3 casos de uso
- 25 criterios de aceptación
- Documentación completa del flujo end-to-end
Estadísticas
- 3 documentos de requisitos de negocio (componentes)
- 1 documento integral de referencia
- 31 criterios de aceptación (todos implementados)
- 14 reglas de negocio
- 9 casos de uso detallados
- 2 endpoints API principales
- 3 archivos en sistema de informes
Estado
✅ Implementado - Todas las funcionalidades están en producción
Última actualización: 2026-03-06