Hierfür relevante Scripte und Funktionen:

basket_b2b_html.php basket/ Templatescript, welches die Ausgabe des änderbaren Warenkorbes layoutet.
ro_basket_b2b_html.php basket/ Adäquates Templatescript, welches die Ausgabe des Read-Only-Warenkorbes layoutet.
basket.php html/ Steuerscript, welches die Daten für die Warenkorb-Templates organisiert und dem Template bereitstellt.
ps_checkout.php classes/ Klassen- und Funktionsbibliothek für den Warenkorb
standard_shipping.php
classes/
shipping/
Eine der Shipping-Module, welches als Standard-Versand-Variante geladen wird. Das Objekt _SHIPPING in ps_checkout.php basiert auf diese hier definierte Objektklasse ($this->_SHIPPING = new $filename()) und seiner wichtigen Funktionen wie z.B. die get_tax_rate()
jos_vm_shipping_rate MySQL Enthält die Kosten und den MwSt.-Satz für die Versandarten sowie Gebietsangaben und Gewichtsbereiche.
jos_vm_tax_rate MySQL Enthält die konkreten Prozentangaben für die MwSt.-Sätze.

Fehlerursache 1 - in standard_shipping.php

Dieser Fehler tritt erst auf mit der Version 1.1.4 von VM und war vorher nicht feststellbar.
Grund für den Fehler ist eine falsche IF-Behandlung für $state in der standard_shipping.php. Die Korrektur geht am einfachsten wie folgt: In Zeile ca. 182 f. innerhalb der Funktion get_tax_rate() folgendes ersetzen:
classes/shipping/standard_shipping.php get_tax_rate()
if ($state) {
$q .= " AND tax_state = '" . $state . "'";
}

ersetzen durch:
classes/shipping/standard_shipping.php get_tax_rate()
if( !empty($state)) { 
$q .= " AND (tax_state='$state' OR tax_state=' $state ' OR tax_state='-')";
}
 

Zum einen kommte es mitunter in der DB-Tabelle jos_vm_tax_rate zu unterschiedlichen Einträgen im Feld tax_state. Mal steht dort "-" und mal " - ". Damit funktionierte die ursprüngliche Vergleichsabfrage nicht immer zuverlässig, weshalb beide Varianten in den Query eingebaut wurden.
Zum anderen ist $state im Fall von Dtld. leer, weil es hier keine Staaten wie in Amerika gibt, die unterschiedliche MwSt-Sätzen haben könnten, weshalb dann hier eine Zuordnung notw. wäre. Unsere Bundesländer sind in diesem Fall bedeutungslos, weshalb ein "-" im Feld tax_state stehen sollte. Wenn aber $state leer ist sollte diese  Query-Erweiterung gar nicht erst stattfinden, weil sie dann zu 0.00 als Ergebnis führt. Deshalb wurde also !empty() hinzugefügt.

Fehlerursache 2 - in ps_checkout.php

Auch beim Versenden der Order-Mails wird die MwSt nfür Versand nicht eingerechnet. Die Ursache hierfür ist zu suchen im Script ps_checkout.php in der Funktion email_receipt(), denn hier wird die ermittelt $order_shipping_tax gar nicht erst zur $order_tax hinzuaddiert, und somit schon an die Mailtemplates falsch übergeben. Also folgende Zeile ca. 1830 im Else-Zweig:
classes/ps_checkout.php email_receipt()
else {
 $order_shipping = $db->f("order_shipping");
 $order_shipping_tax = $db->f("order_shipping_tax");
 $order_tax = $db->f("order_tax");
}
 

ersetzen durch:
classes/ps_checkout.php email_receipt()
else {
 $order_shipping = $db->f("order_shipping");
 $order_shipping_tax = $db->f("order_shipping_tax");
 $order_tax = $db->f("order_tax")  + $order_shipping_tax;
}