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
ca1550bced
commit
2b1a583fa1
11 files changed
+95
-17
No files matched your search
+18
-5
@@ -79,11 +79,24 @@ def test_varias_guias_de_una_linea_se_suman(sap):
|
||||
assert len(resultados[0]["guias_lt"]) == 2
|
||||
|
||||
|
||||
def test_tolerancia_de_un_centimo(sap):
|
||||
factura = {"lineas": [{"cantidad": 1, "total_linea": 100.005, "guias_remision": [_guia()]}]}
|
||||
assert draft_sap.validate_prices(factura)[0] is True
|
||||
factura["lineas"][0]["total_linea"] = 100.02
|
||||
assert draft_sap.validate_prices(factura)[0] is False
|
||||
@pytest.mark.parametrize("total_xml, total_sap, coincide", [
|
||||
# un céntimo de diferencia: antes se aceptaba o se rechazaba según el ruido de la coma flotante
|
||||
(624.38, 624.39, True), (624.39, 624.38, True),
|
||||
(431.40, 431.41, True), (170.29, 170.30, True), # estos dos la regla vieja los rechazaba
|
||||
(828.73, 828.74, True), (828.74, 828.73, True),
|
||||
(100.00, 100.01, True), (0.50, 0.51, True), (1.00, 1.01, True), (10.01, 10.00, True),
|
||||
# menos de un céntimo, o igual
|
||||
(100.00, 100.00, True), (100.005, 100.00, True), (1203.94, 1203.9399, True),
|
||||
# dos céntimos o más: no coincide
|
||||
(100.00, 100.02, False), (100.02, 100.00, False), (624.38, 624.40, False), (624.38, 674.38, False),
|
||||
])
|
||||
def test_tolerancia_de_un_centimo_es_determinista(sap, total_xml, total_sap, coincide):
|
||||
sap["dn"] = _delivery_note(line_total=total_sap)
|
||||
factura = {"lineas": [{"cantidad": 1, "total_linea": total_xml, "guias_remision": [_guia()]}]}
|
||||
|
||||
todas_coinciden, resultados = draft_sap.validate_prices(factura)
|
||||
|
||||
assert todas_coinciden is coincide and resultados[0]["ok"] is coincide
|
||||
|
||||
|
||||
def test_cantidad_cero_no_se_valida(sap):
|
||||
|
||||
Reference in new issue
Block a user