Fix de signo en promos combo — resumen por cliente

Reclamo CARACOL v20260902P (02/10/2026) · fix y pruebas 03–04/10/2026 · kit POSKIT

1. El problema

Con promos combo de precio fijo (por ejemplo 2 × 3599 a 5398) sobre artículos con impuestos internos, el ticket imprimía mal el desglose de impuestos. El total final era correcto, y la base (dE_TResu, lo que ve SOLUTIA) también.

FacturaImpreso (mal)Correcto
ANeto 7255.25 · IVA 1523.61 · II 0.00Neto 4352.51 · IVA 914.03 · II 131.46
B (Ley 27.743)IVA Contenido 1523.61 · II 0.00IVA Contenido 914.03 · II 131.46

Causa: en ImprimirPromos (pos_mis2.cpp) los valores del combo (stCombAImpresor) llegan ya con signo negativo, y el código los vuelve a multiplicar por el signo del descuento (iSignoAcumula). Menos por menos da más, así que el descuento se sumaba al neto y al IVA, y los impuestos internos (calculados por diferencia) quedaban en 0.

Un segundo problema venía de un arreglo anterior (ALMACOR, agosto). Poner fabs() al leer esos valores corrige los impuestos, pero la línea del combo pasa a imprimirse sin signo (1800.00 en vez de -1800.00).

2. Resultado por cliente

ClienteVersión probadaAntes del fixCambio aplicadoDespués del fixArchivo a instalar
CARACOL20260916PImpuestos mal (el reclamo)fabs() al leer, sólo para acumular impuestos, y restitución de los valores con signo después del switch (+19 líneas)Impuestos OK · combo -1800.00C:\Work\PCPOS\20260914_CARACOL\pos_mis2.cpp
ALMACOR20260928PCombo 1800.00 sin signoIgual que CARACOL (+19 líneas)Impuestos OK · combo -1800.00C:\Work\AI\pcpos\20261003\fix_ALMACOR\pos_mis2.cpp
CYRE20260916FCombo 1800.00 sin signoSe quita el fabs() de agosto en 8 lecturas; su fix propio de 2025 ya acumula bienImpuestos OK · combo -1800.00C:\Work\AI\pcpos\20261003\fix_CYRE\pos_mis2.cpp
DINO20260923FCombo 1800.00 sin signoIgual que CYRE (8 lecturas)Impuestos OK · combo -1800.00C:\Work\AI\pcpos\20261003\fix_DINO\pos_mis2.cpp
BECERRA20260917PYa estaba bien (fix 24/08/2025)NingunoImpuestos OK · combo -1800.00—

Cada carpeta fix_<CLIENTE> tiene también el pos_mis2.diff contra el original del cliente. Los fuentes originales no se modificaron. No reemplazar el archivo entre clientes: el pos_mis2.cpp de cada uno tiene funcionalidades propias.

3. Cómo se probó

Cada cliente se compiló con sus propios fuentes en el kit (EXE y 15–16 DLL). Se vendió 2 × 7790895641800 (combo 490000 del cliente, precio 3599, II 87.65), pagando en efectivo con una promo de medio de pago de -10% (descuento) y de +10% (recargo).

Criterio de aceptación: lo impreso (neto, IVA, impuestos internos y total) igual a lo grabado en dE_TResu; neto + IVA + II = total; línea del combo negativa; línea de efectivo con el signo que corresponde.

CorridaTicketLínea comboLínea efectivoTotalIVAIIImpreso = base
CARACOL sin fix317096-1800.00—5398.001523.610.00NO
CARACOL con fix317098-1800.00—5398.00914.03131.46SI
ALMACOR sin fix + desc.3171051800.00-539.804858.20822.63118.32SI
ALMACOR con fix + desc.317106-1800.00-539.804858.20822.63118.32SI
ALMACOR con fix + recargo317107-1800.00+539.805937.801005.43144.61SI
CYRE sin fix + recargo3171081800.00+539.805937.801005.43144.61SI
CYRE con fix + recargo317109-1800.00+539.805937.801005.43144.61SI
CYRE con fix + desc.317110-1800.00-539.804858.20822.63118.32SI
DINO sin fix + desc.3171111800.00-539.804858.20822.63118.32SI
DINO con fix + desc.317112-1800.00-539.804858.20822.63118.32SI
DINO con fix + recargo317113-1800.00+539.805937.801005.43144.61SI
BECERRA (sin cambios) + recargo317114-1800.00+539.805937.801005.43144.61SI
BECERRA (sin cambios) + desc.317115-1800.00-539.804858.20822.63118.32SI

En CARACOL además se probaron Factura A, dos combos en un ticket, combo con una unidad suelta y descuento por medio de pago sobre artículos con y sin impuesto interno: todos coinciden con la base. Las diferencias de un centavo en algunos casos con descuento son de redondeo.

Evidencia: C:\Work\AI\pcpos\20261003\evidencia_clientes\ (volcados de impresión y RESULTADOS.txt), evidencia_matriz\ y evidencia_AB\.

4. Por qué es seguro con recargos y descuentos

5. Antes de instalar

6. Notas