diff --git a/web/org.openbravo.retail.posterminal/js/data/dataordertaxes.js b/web/org.openbravo.retail.posterminal/js/data/dataordertaxes.js
index de05706ae..c2bed75b7 100644
--- a/web/org.openbravo.retail.posterminal/js/data/dataordertaxes.js
+++ b/web/org.openbravo.retail.posterminal/js/data/dataordertaxes.js
@@ -1243,13 +1243,55 @@
         //no longer equal to the base, and this is wrong. The highest net is adjusted so that everything matches.
         if (originalNet !== totalNet) {
           //Net of the lines does not sum the net of the final tax, so we need to adjust one of the net amounts of a line.
+          var adjustAmount = OB.DEC.sub(originalNet, totalNet);
           var lineToAdjust = _.max(taxGroup.lines, function(line) {
-            return Math.abs(line.get('discountedNet'));
+            const roundingLineTax = [];
+            _.each(taxRates, function(taxRate) {
+              const taxLine = line.get('taxLines')[taxRate.get('id')];
+              if (taxRate.get('summaryLevel') || !taxLine) {
+                return;
+              }
+              roundingLineTax.push(
+                OB.DEC.sub(
+                  OB.DEC.mul(
+                    OB.DEC.add(taxLine.net, adjustAmount, 20),
+                    OB.DEC.div(taxLine.rate, 100, 20),
+                    20
+                  ),
+                  OB.DEC.sub(taxLine.amount, adjustAmount, 20),
+                  20
+                )
+              );
+            });
+            return OB.DEC.div(
+              roundingLineTax.reduce((a, b) => OB.DEC.add(a, b, 20), 0),
+              roundingLineTax.length,
+              20
+            );
           });
           lineToAdjust.set(
             'discountedNet',
-            lineToAdjust.get('discountedNet') + (originalNet - totalNet)
+            OB.DEC.add(lineToAdjust.get('discountedNet'), adjustAmount)
           );
+          lineToAdjust.set(
+            'taxAmount',
+            OB.DEC.sub(lineToAdjust.get('taxAmount'), adjustAmount)
+          );
+
+          let adjustedTax;
+          _.each(lineToAdjust.get('taxLines'), function(taxline, taxid) {
+            if (
+              adjustedTax &&
+              Math.abs(adjustedTax.amount) >= Math.abs(taxline.amount)
+            ) {
+              return;
+            }
+            adjustedTax = taxline;
+          });
+          if (adjustedTax) {
+            adjustedTax.net = OB.DEC.add(adjustedTax.net, adjustAmount);
+            adjustedTax.amount = OB.DEC.sub(adjustedTax.amount, adjustAmount);
+          }
         }
       });
 
