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
@@ -36,3 +36,19 @@ def version_del_proyecto() -> str:
|
||||
except (OSError, KeyError, tomllib.TOMLDecodeError):
|
||||
return "desconocida"
|
||||
|
||||
|
||||
# Diferencia máxima, en soles, entre el importe de la factura y el de SAP para darlos por iguales.
|
||||
TOLERANCIA_IMPORTE = 0.01
|
||||
|
||||
|
||||
def importes_coinciden(a: float, b: float) -> bool:
|
||||
"""
|
||||
True si dos importes son iguales **a nivel de céntimos**, que es lo que muestra un comprobante.
|
||||
|
||||
La diferencia se redondea a 2 decimales y se admite hasta ``TOLERANCIA_IMPORTE`` (1 céntimo).
|
||||
Comparar la diferencia sin redondear (``abs(a - b) < 0.01``) no es fiable: con coma flotante,
|
||||
431.41 - 431.40 da 0.01000000000004775 (se rechazaba) y 624.39 - 624.38 da 0.00999999999999091
|
||||
(se aceptaba), de modo que el mismo céntimo pasaba o no según el importe.
|
||||
"""
|
||||
return round(abs(a - b), 2) <= TOLERANCIA_IMPORTE
|
||||
|
||||
Reference in new issue
Block a user