versión 1.2.1: la diferencia de importes con SAP se redondea a 2 decimales
La comparación abs(a - b) < 0.01 no era fiable por la coma flotante: el mismo céntimo se aceptaba o rechazaba según el importe (431.41 contra 431.40 se rechazaba y 624.39 contra 624.38 se aceptaba). pipeline_utils.importes_coinciden redondea la diferencia a 2 decimales, lo que muestra un comprobante, y admite hasta 1 céntimo. Se usa en la validación de precios y en la comparación del valor referencial. Con datos reales de SAP (49 líneas) ningún resultado cambió. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cdcecc2b56
commit
3b5400018c
11 files changed
+95
-17
No files matched your search
@@ -0,0 +1,31 @@
|
||||
import pytest
|
||||
|
||||
from pipeline_utils import TOLERANCIA_IMPORTE, importes_coinciden
|
||||
|
||||
|
||||
def test_el_ruido_de_la_coma_flotante_era_el_problema():
|
||||
"""Documenta por qué no se compara ``abs(a - b) < 0.01``: el mismo céntimo daba resultados distintos."""
|
||||
assert abs(431.41 - 431.40) >= 0.01 # 0.01000000000004775: la regla vieja lo rechazaba
|
||||
assert abs(170.30 - 170.29) >= 0.01 # 0.01000000000001933: también
|
||||
assert abs(624.39 - 624.38) < 0.01 # 0.00999999999999091: la regla vieja lo aceptaba
|
||||
assert abs(828.74 - 828.73) < 0.01 # igual: el mismo céntimo, otro resultado
|
||||
for a, b in [(431.41, 431.40), (170.30, 170.29), (624.39, 624.38), (828.74, 828.73)]:
|
||||
assert importes_coinciden(a, b)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("a, b, esperado", [
|
||||
(100.00, 100.00, True), (100.00, 100.01, True), (100.01, 100.00, True), (100.004, 100.00, True),
|
||||
(100.00, 100.02, False), (100.02, 100.00, False), (0.00, 0.02, False), (1500.00, 1499.98, False),
|
||||
(0.0, 0.0, True), (-5.00, -5.01, True),
|
||||
])
|
||||
def test_importes_coinciden(a, b, esperado):
|
||||
assert importes_coinciden(a, b) is esperado
|
||||
|
||||
|
||||
def test_la_comparacion_es_simetrica():
|
||||
for a, b in [(624.38, 624.39), (1.0, 1.02), (850.5, 850.49)]:
|
||||
assert importes_coinciden(a, b) == importes_coinciden(b, a)
|
||||
|
||||
|
||||
def test_la_tolerancia_es_un_centimo():
|
||||
assert TOLERANCIA_IMPORTE == 0.01
|
||||
Reference in new issue
Block a user