feat: Implement robust discount/anticipo detection system for PNG receipts

- Added comprehensive discount detection logic in hasAnyDiscount()
- Created extractDiscountInfo() to handle multiple data sources
- Updated all discount rendering functions to use new extraction logic
- Enhanced support for manual anticipos and applied discounts
- Improved fallback detection using subtotal vs monto differences
- Added Material Symbols icons to action buttons in table
- Fixed discount display issues in PNG receipt generation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Marco Gallegos
2025-09-15 16:56:12 -06:00
parent bcab7573c3
commit e1a74c4249
24 changed files with 3774 additions and 10 deletions

140
PNG_RECEIPT_PROGRESS.md Normal file
View File

@@ -0,0 +1,140 @@
# 📋 PNG Receipt System - Progress Tracker
## 🎯 Estado del Proyecto
**Iniciado**: 2025-09-14
**Estado Actual**: 📝 Planificación Completa
**Próximo**: 🚀 Fase 1 - Setup
---
## ✅ Tasks Completadas
### 📝 Planificación y Documentación
- [x] **Análisis del sistema actual** - Comprensión completa de `print.js` y generación de tickets
- [x] **Identificación de casos de uso** - Matriz completa de combinaciones de tickets
- [x] **Especificación técnica** - HTML/CSS structure y assets strategy
- [x] **Plan de desarrollo** - 6 fases con estimaciones detalladas
- [x] **Documentación README** - Especificación completa en `PNG_RECEIPT_README.md`
- [x] **Setup de tracking** - Este documento de progreso
**Tiempo Total Planificación**: ~1 hora
---
## 🔄 Tasks en Progreso
*Ninguna actualmente - Listo para comenzar desarrollo*
---
## 📋 Tasks Pendientes
### **FASE 1: Setup con Assets (45 min)**
- [ ] Crear directorio `/assets/receipt/` y subir assets
- [ ] Agregar librerías CDN: `html2canvas` + `FileSaver.js`
- [ ] Crear archivo `receipt.js`
- [ ] Crear archivo `receipt.css` con estilos base
- [ ] Crear HTML structure base en memoria
- [ ] Test de carga de assets y CSS
### **FASE 2: Template Engine + Lógica (60 min)**
- [ ] Implementar `analyzeTicketType()` function
- [ ] Crear templates dinámicos por caso
- [ ] Sistema de mapeo: `movement``receiptData`
- [ ] Función `generateReceiptHTML()`
- [ ] Test básico de renderizado
### **FASE 3: Contenido Dinámico y Médico (45 min)**
- [ ] Implementar sección consentimiento médico
- [ ] Sistema de datos oncológicos (médico, tel, cédula)
- [ ] Formato de información de citas
- [ ] Función `getConsentText()`
- [ ] Test con datos médicos completos
### **FASE 4: Notas Anticipo Inteligentes (30 min)**
- [ ] Lógica `shouldShowAnticipoNotes()`
- [ ] Templates condicionales para anticipos
- [ ] Diferenciación: anticipo puro vs aplicado
- [ ] Test matrix casos anticipo
### **FASE 5: Generación PNG (30 min)**
- [ ] Configuración `html2canvas` optimizada
- [ ] Sistema de nombres: `Ticket_{FOLIO}.png`
- [ ] Función `downloadReceiptPNG()` principal
- [ ] Integration con tabla de tickets
- [ ] Test de descarga y calidad
### **FASE 6: Testing Final (45 min)**
- [ ] Test exhaustivo con todos los casos
- [ ] Verificación calidad PNG en diferentes devices
- [ ] Test compatibilidad navegadores
- [ ] Performance testing
- [ ] Documentación final de uso
---
## 🧪 Test Matrix Status
| Caso de Uso | Planificado | Implementado | Testeado |
|-------------|-------------|--------------|----------|
| Servicio Simple | ✅ | ❌ | ❌ |
| Servicio + Cita | ✅ | ❌ | ❌ |
| Anticipo Puro | ✅ | ❌ | ❌ |
| Servicio + Anticipo Aplicado | ✅ | ❌ | ❌ |
| Cliente Consentimiento | ✅ | ❌ | ❌ |
| Paciente Oncológico | ✅ | ❌ | ❌ |
| Combo Completo | ✅ | ❌ | ❌ |
---
## 📊 Estimaciones vs Tiempo Real
| Fase | Estimado | Real | Diferencia | Estado |
|------|----------|------|------------|---------|
| Planificación | 60min | 60min | ✅ 0min | ✅ Completa |
| Fase 1: Setup | 45min | -min | - | 📋 Pendiente |
| Fase 2: Templates | 60min | -min | - | 📋 Pendiente |
| Fase 3: Contenido Médico | 45min | -min | - | 📋 Pendiente |
| Fase 4: Anticipo Logic | 30min | -min | - | 📋 Pendiente |
| Fase 5: PNG Generation | 30min | -min | - | 📋 Pendiente |
| Fase 6: Testing | 45min | -min | - | 📋 Pendiente |
| **TOTAL** | **4h 15min** | **1h** | - | 🔄 **En progreso** |
---
## 🚨 Issues y Blockers
*Ninguno identificado actualmente*
---
## 📝 Notas de Desarrollo
### Assets Preparados
- ✅ Background pattern
- ✅ Logo corporativo
- ✅ Business name imagen
- ✅ Tagline imagen
- ✅ "Comprobante" título
- ✅ Rectángulo blanco container
### Decisiones Técnicas
- **Font**: Montserrat para todo el contenido dinámico
- **Width**: 400px optimizado para móvil
- **Format**: PNG con transparencia
- **Quality**: Scale 2x para HD
- **Integration**: Botón separado en tabla tickets
---
## 🔄 Updates Log
**2025-09-14**
- ✅ Proyecto iniciado y planificado completamente
- ✅ README técnico creado
- ✅ Sistema de tracking establecido
- 🎯 Listo para Fase 1 cuando assets estén disponibles
---
**Próximo Update**: Después de completar Fase 1