Advanced Search

Search Results (Searched for: tax category)

19 Mar 2026 09:27

SST will be removed when update shipping fee

Category: Shipping Methods

Hi,

Thank you for the detailed documentation with screenshots, it was very helpful.

We believe we found the issue. When you edit the shipping price in the Additional Information section and save, HikaShop recalculates the order totals and tax breakdown. During this recalculation, it rebuilds the tax amounts from per-product tax data stored in each order line item. If that per-product tax data is missing (which can happen with orders created through certain processes like POS systems or custom integrations), the SST tax entry ends up with a zero amount and gets removed.

We have implemented a fix that preserves the tax information even when the per-product tax data is not available. The system now uses the product's tax amount as a fallback, and for orders with multiple tax rates, it looks up the correct tax rate from the product's tax category configuration.

Could you please download the latest version from your member area and install it over your current version? After updating, try editing the shipping price again on one of your orders and let us know if the SST column is now preserved correctly.
16 Mar 2026 19:13

Display each cart item field as a separate line in the cart summary table

Category: Checkout

Hi HikaShop team,

We are customizing the checkout cart template (show_block_cart.php) to display each product option and cart item field as a separate line in the cart summary table, with individual unit price, quantity, and total columns.

While implementing this, we found that cart item fields (stored in $cart->cart_products[$i]->field_namekey) lack some metadata that would be essential for correct display:

1. No tax rate available for item fields
The field value stored in the cart item is the price excluding tax (e.g. 42.975), but there is no associated tax rate or tax category accessible from the template. We had to hardcode × 1.21 (21% VAT) because it happened to match the configured tax for that service. If a field uses a different tax rate (10%, 4%, etc.), the displayed price with tax will be wrong.

Suggested improvement: Include the tax rate or computed price_value_with_tax alongside the raw field value in the cart item data, similar to how prices[0]->price_value_with_tax is available for product options.

2. No indication of whether a field price scales with quantity
Some item fields represent a per-unit cost (should multiply by cart quantity), while others represent a flat one-time service fee (should not multiply). Currently there is no way to distinguish these cases from the template — we have to guess based on business logic.

Suggested improvement: Add a metadata flag to field definitions (e.g. field_multiply_by_quantity: true/false) so templates can handle both cases correctly without hardcoding assumptions.

3. prices[0]->unit_price in option elements equals prices[0]->price_value_with_tax
When displaying grouped options (group_options = 1), the unit_price nested object inside prices[0] of an option element contains the same value as price_value_with_tax (i.e. total price, not unit price). This makes it impossible to retrieve the true per-unit price for display without manually dividing by cart_product_quantity.

Suggested improvement: Ensure prices[0]->unit_price->price_value_with_tax consistently reflects the price for one unit, regardless of cart quantity.

These improvements would allow template developers to build accurate per-line breakdowns without relying on hardcoded business logic or reverse-engineering prices from totals.

Thank you for considering these improvements.
10 Mar 2026 23:22

Augmenter les prix en masse + gestion des arrondis

Category: Support en Français (French Support)

Bonjour,

Lorsque j'ai procédé à l'import du CSV avec les nouveaux tarifs, ça m'a remis toutes les catégories de taxe des variantes à "défault tax category".
Comment puis-je tout remettre à "comme le produit parent" et faire en sorte que le prix enregistré se mette en TTC ?

Merci
09 Mar 2026 22:29

e-invoice

Category: Wishlist

I am sorry. I was wrong about the AE codes. I just checked the dutch xml again it is correctly using the S codes. There is just one AE code and that's with the shipping. And that is correct because I didn't apply the VAT on the shipping price.

The A UBL invoice should not include the AllowanceCharge TaxCategory TaxExemptionReasonCode warning still is there.
09 Mar 2026 22:23

e-invoice

Category: Wishlist

Thanks Nicolas,

it works aaand it doesn't. If I try placing an order as a Belgian customer it gives a warning (see below). I think it still will be accepted by the peppol network (because it's a warning and not an error) but I don't know for sure.

If I try placing an order as a Dutch customer it keeps using the AE code but the order is using 21% VAT so it should be code S i think plus it gives the same warning.

Also, if the VAT number given by the customer is missing the NL or BE part it also gives an error. This is just a question, but is it possible the check a custom input field for format?

I understand that this is taking up a lot of your time and I really appreciate all your help, but I also would totally understand if this is taking up to much of your time. Guess I am just very grateful.

This is the warning the doc checker gives:

Document validated as: Peppol BIS 3 UBL Invoice
2 warnings
warning [UBL-CR-480]-A UBL invoice should not include the AllowanceCharge TaxCategory TaxExemptionReasonCode
location /ubl:Invoice[1]
test not(cac:AllowanceCharge/cac:TaxCategory/cbc:TaxExemptionReasonCode)
warning [UBL-CR-481]-A UBL invoice should not include the AllowanceCharge TaxCategory TaxExemptionReason
location /ubl:Invoice[1]
test not(cac:AllowanceCharge/cac:TaxCategory/cbc:TaxExemptionReason)

XML Belgium:

<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>C1B0C83</cbc:ID>
<cbc:IssueDate>2026-03-04</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:OrderReference>
<cbc:ID>NA</cbc:ID>
<cbc:SalesOrderID>C1E1G56</cbc:SalesOrderID>
</cac:OrderReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">NL182610202B02</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Bloem en Oogst</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>3 van Zijlweg</cbc:StreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL182610202B02</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Bloem en Oogst</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">NL182610202B02</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Eline Houtkamp</cbc:Name>
<cbc:Telephone>+31624897106</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9925">BE0123456789</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>gozz</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>hhj</cbc:StreetName>
<cbc:AdditionalStreetName>7</cbc:AdditionalStreetName>
<cbc:CityName>sjsn</cbc:CityName>
<cbc:PostalZone>7777jj</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0123456789</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>gozz</cbc:RegistrationName>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Gossen rij</cbc:Name>
<cbc:Telephone>92737</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Verzending</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">9.40</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cbc:TaxExemptionReasonCode>VATEX-EU-AE</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">12.42</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cbc:TaxExemptionReasonCode>VATEX-EU-AE</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">12.42</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">12.42</cbc:TaxInclusiveAmount>
<cbc:ChargeTotalAmount currencyID="EUR">9.40</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">12.42</cbc:PrepaidAmount>
<cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>0</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>ACHILLEA MILLEFOLIUM &#x2013; DUIZENDBLAD - &#x2018;Summer Pastels mix&#x2019;</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.02</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
</Invoice>


XML Netherlands:

<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>C1B0M92</cbc:ID>
<cbc:IssueDate>2026-03-08</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:OrderReference>
<cbc:ID>NA</cbc:ID>
<cbc:SalesOrderID>C1E1R65</cbc:SalesOrderID>
</cac:OrderReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">NL182610202B02</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Bloem en Oogst</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>3 van Zijlweg</cbc:StreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL182610202B02</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Bloem en Oogst</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">NL182610202B02</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Eline Houtkamp</cbc:Name>
<cbc:Telephone>+31624897106</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">NL0123456789</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>GossiePozzie</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>van Zijlweg</cbc:StreetName>
<cbc:AdditionalStreetName>3</cbc:AdditionalStreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351 HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL0123456789</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>GossiePozzie</cbc:RegistrationName>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Gossen Rijkeboer</cbc:Name>
<cbc:Telephone>+31626660482</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Verzending</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">4.40</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cbc:TaxExemptionReasonCode>VATEX-EU-AE</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0.63</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">3.02</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0.63</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">4.40</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cbc:TaxExemptionReasonCode>VATEX-EU-AE</cbc:TaxExemptionReasonCode>
<cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">7.42</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">8.05</cbc:TaxInclusiveAmount>
<cbc:ChargeTotalAmount currencyID="EUR">4.40</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">8.05</cbc:PrepaidAmount>
<cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>0</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>AGASTACHE ANISATA - DROPPLANT</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.02</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

Cheers.
07 Mar 2026 16:35

e-invoice

Category: Wishlist

Hi Nicolas,

we're getting close.

Document validated as: Peppol BIS 3 UBL Invoice
3 errors
error [BR-AE-02]-An Invoice that contains an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Reverse charge" shall contain the Seller VAT Identifier (BT-31), the Seller Tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).
location /ubl:Invoice[1]
test (exists(//cac:ClassifiedTaxCategory[normalize-space(cbc:ID) = 'AE'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']) and (exists(//cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID) or exists(//cac:TaxRepresentativeParty/cac:PartyTaxScheme[cac:TaxScheme/(normalize-space(upper-case(cbc:ID)) = 'VAT')]/cbc:CompanyID)) and (exists(//cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme[cac:TaxScheme/(normalize-space(upper-case(cbc:ID)) = 'VAT')]/cbc:CompanyID) or exists(//cac:AccountingCustomerParty/cac:Party/cac:PartyLegalEntity/cbc:CompanyID))) or not(exists(//cac:ClassifiedTaxCategory[normalize-space(cbc:ID) = 'AE'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']))
error [BR-AE-04]-An Invoice that contains a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Reverse charge" shall contain the Seller VAT Identifier (BT-31), the Seller tax registration identifier (BT-32) and/or the Seller tax representative VAT identifier (BT-63) and the Buyer VAT identifier (BT-48) and/or the Buyer legal registration identifier (BT-47).
location /ubl:Invoice[1]
test (exists(//cac:AllowanceCharge[cbc:ChargeIndicator=true()]/cac:TaxCategory[normalize-space(cbc:ID) = 'AE'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']) and (exists(//cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID) or exists(//cac:TaxRepresentativeParty/cac:PartyTaxScheme[cac:TaxScheme/(normalize-space(upper-case(cbc:ID)) = 'VAT')]/cbc:CompanyID)) and (exists(//cac:AccountingCustomerParty/cac:Party/cac:PartyTaxScheme[cac:TaxScheme/(normalize-space(upper-case(cbc:ID)) = 'VAT')]/cbc:CompanyID) or exists(//cac:AccountingCustomerParty/cac:Party/cac:PartyLegalEntity/cbc:CompanyID))) or not(exists(//cac:AllowanceCharge[cbc:ChargeIndicator=true()]/cac:TaxCategory[normalize-space(cbc:ID) = 'AE'][cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']))
error [BR-AE-10]-A VAT breakdown (BG-23) with VAT Category code (BT-118) "Reverse charge" shall have a VAT exemption reason code (BT-121), meaning "Reverse charge" or the VAT exemption reason text (BT-120) "Reverse charge" (or the equivalent standard text in another language).
location /ubl:Invoice[1]/cac:TaxTotal[1]/cac:TaxSubtotal[1]/cac:TaxCategory[1]
test exists(cbc:TaxExemptionReason) or (exists(cbc:TaxExemptionReasonCode) )

The XML:

<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>C1B0C83</cbc:ID>
<cbc:IssueDate>2026-03-04</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:OrderReference>
<cbc:ID>NA</cbc:ID>
<cbc:SalesOrderID>C1E1G56</cbc:SalesOrderID>
</cac:OrderReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">NL182610202B02</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Bloem en Oogst</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>3 van Zijlweg</cbc:StreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL182610202B02</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Bloem en Oogst</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">NL182610202B02</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Eline Houtkamp</cbc:Name>
<cbc:Telephone>+31624897106</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9925">5677</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>gozz</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>hhj</cbc:StreetName>
<cbc:AdditionalStreetName>7</cbc:AdditionalStreetName>
<cbc:CityName>sjsn</cbc:CityName>
<cbc:PostalZone>7777jj</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyLegalEntity>
<cbc:RegistrationName>gozz</cbc:RegistrationName>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Gossen rij</cbc:Name>
<cbc:Telephone>92737</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Verzending</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">9.40</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">12.42</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">12.42</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">12.42</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">0.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="EUR">9.40</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">12.42</cbc:PrepaidAmount>
<cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>0</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>ACHILLEA MILLEFOLIUM &#x2013; DUIZENDBLAD - &#x2018;Summer Pastels mix&#x2019;</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>AE</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.02</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
</Invoice>


Thanks again.

Greets Gossen
06 Mar 2026 17:43

e-invoice

Category: Wishlist

Hi,

Thank you for the detailed testing and the corrected XML, that was very helpful.

You were right, the plugin was using the "E" (Exempt) tax category code for tax-free B2B transactions, but the correct code per the Peppol standard is "AE" (VAT Reverse Charge). On top of that, the TaxSubtotal was still using the configured code "S" while the lines were getting "E", causing the category mismatch you observed.

In version 3.2.4, we've fixed that:
- Tax-exempt lines with a customer VAT number now use "AE" instead of "E", for both invoices and credit notes
- The TaxSubtotal tax category is now adjusted to match the lines, so there's no more mixing of "S" and "AE"
- A "Reverse charge" exemption reason is now included as required by BR-AE-10

Note that if you ever need a different code for specific products (like "K" for intra-community supply), you can set it via the "Tax category code field" option in the plugin settings, which lets you override the code per product.
06 Mar 2026 00:37

e-invoice

Category: Wishlist

Ok. I checked, edited and checked with my local llm and the result is this:

<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<!-- UBL Version - Required for Peppol compliance -->
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>

<!-- Customization ID - Indicates Peppol BIS 3.0 compliance -->
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>

<!-- Profile ID - Peppol BIS Billing 3.0 -->
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>

<!-- Invoice number - Unique identifier for this invoice -->
<cbc:ID>C1B0C83</cbc:ID>

<!-- Invoice date - When the invoice was issued -->
<cbc:IssueDate>2026-03-04</cbc:IssueDate>

<!-- Invoice type code - 380 = Commercial invoice -->
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>

<!-- Currency code - EUR for this invoice -->
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

<!-- Order reference - Link to the sales order -->
<cac:OrderReference>
<cbc:ID>NA</cbc:ID> <!-- Order reference ID -->
<cbc:SalesOrderID>C1E1G56</cbc:SalesOrderID> <!-- Sales order number -->
</cac:OrderReference>

<!-- Supplier information -->
<cac:AccountingSupplierParty>
<cac:Party>
<!-- Supplier's Peppol endpoint ID -->
<cbc:EndpointID schemeID="9944">NL182610202B02</cbc:EndpointID>

<!-- Supplier's name -->
<cac:PartyName>
<cbc:Name>Bloem en Oogst</cbc:Name>
</cac:PartyName>

<!-- Supplier's address -->
<cac:PostalAddress>
<cbc:StreetName>3 van Zijlweg</cbc:StreetName> <!-- Street name -->
<cbc:CityName>Wapserveen</cbc:CityName> <!-- City -->
<cbc:PostalZone>8351HW</cbc:PostalZone> <!-- Postal code -->
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode> <!-- Country code -->
</cac:Country>
</cac:PostalAddress>

<!-- Supplier's VAT information -->
<cac:PartyTaxScheme>
<cbc:CompanyID>NL182610202B02</cbc:CompanyID> <!-- Dutch VAT number -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID> <!-- Tax scheme identifier -->
</cac:TaxScheme>
</cac:PartyTaxScheme>

<!-- Supplier's legal entity information -->
<cac:PartyLegalEntity>
<cbc:RegistrationName>Bloem en Oogst</cbc:RegistrationName> <!-- Registered name -->
<cbc:CompanyID schemeID="0106">NL182610202B02</cbc:CompanyID> <!-- Dutch Chamber of Commerce number -->
</cac:PartyLegalEntity>

<!-- Supplier's contact information -->
<cac:Contact>
<cbc:Name>Eline Houtkamp</cbc:Name> <!-- Contact person -->
<cbc:Telephone>+31624897106</cbc:Telephone> <!-- Phone number -->
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail> <!-- Email address -->
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>

<!-- Customer information -->
<cac:AccountingCustomerParty>
<cac:Party>
<!-- Customer's Peppol endpoint ID -->
<cbc:EndpointID schemeID="9925">5677</cbc:EndpointID>

<!-- Customer's name -->
<cac:PartyName>
<cbc:Name>gozz</cbc:Name>
</cac:PartyName>

<!-- Customer's address -->
<cac:PostalAddress>
<cbc:StreetName>hhj</cbc:StreetName> <!-- Street name -->
<cbc:AdditionalStreetName>7</cbc:AdditionalStreetName> <!-- House number -->
<cbc:CityName>sjsn</cbc:CityName> <!-- City -->
<cbc:PostalZone>7777jj</cbc:PostalZone> <!-- Postal code -->
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode> <!-- Country code -->
</cac:Country>
</cac:PostalAddress>

<!-- Customer's VAT information -->
<cac:PartyTaxScheme>
<cbc:CompanyID>BE0123456789</cbc:CompanyID> <!-- Replace with customer's actual Belgian VAT number -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID> <!-- Tax scheme identifier -->
</cac:TaxScheme>
</cac:PartyTaxScheme>

<!-- Customer's legal entity information -->
<cac:PartyLegalEntity>
<cbc:RegistrationName>gozz</cbc:RegistrationName> <!-- Registered name -->
<cbc:CompanyID>0123456789</cbc:CompanyID> <!-- Replace with customer's actual 10-digit Belgian company number -->
</cac:PartyLegalEntity>

<!-- Customer's contact information -->
<cac:Contact>
<cbc:Name>Gossen rij</cbc:Name> <!-- Contact person -->
<cbc:Telephone>92737</cbc:Telephone> <!-- Phone number -->
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail> <!-- Email address -->
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>

<!-- Payment information - Bancontact (online banking) -->
<cac:PaymentMeans>
<cbc:PaymentMeansCode>42</cbc:PaymentMeansCode> <!-- 42 = Online banking payment method -->
<cbc:PaymentID>BANCONTACT-123456789</cbc:PaymentID> <!-- Bancontact transaction reference (optional) -->
<cac:PayeeFinancialAccount>
<cbc:ID>NL99BANK1234567890</cbc:ID> <!-- Replace with your actual IBAN -->
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>

<!-- Payment terms - Prepaid via Bancontact -->
<cac:PaymentTerms>
<cbc:Note>Prepaid via Bancontact (Transaction ID: BANCONTACT-123456789)</cbc:Note> <!-- Payment terms description -->
</cac:PaymentTerms>

<!-- Shipping charges -->
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator> <!-- true = charge, false = allowance -->
<cbc:AllowanceChargeReason>Shipping</cbc:AllowanceChargeReason> <!-- Reason for charge -->
<cbc:Amount currencyID="EUR">9.40</cbc:Amount> <!-- Shipping amount -->
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID> <!-- AE = Reverse charge VAT category -->
<cbc:Percent>0.00</cbc:Percent> <!-- VAT percentage (0% for reverse charge) -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID> <!-- Tax scheme identifier -->
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>

<!-- Tax information -->
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount> <!-- Total VAT amount (0.00 for reverse charge) -->
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">12.42</cbc:TaxableAmount> <!-- Taxable amount -->
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount> <!-- VAT amount (0.00 for reverse charge) -->
<cac:TaxCategory>
<cbc:ID>AE</cbc:ID> <!-- AE = Reverse charge VAT category -->
<cbc:Percent>0.00</cbc:Percent> <!-- VAT percentage (0% for reverse charge) -->
<cbc:TaxExemptionReason>Reverse charge</cbc:TaxExemptionReason> <!-- Reason for VAT exemption -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID> <!-- Tax scheme identifier -->
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>

<!-- Monetary totals -->
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount> <!-- Sum of all line amounts -->
<cbc:TaxExclusiveAmount currencyID="EUR">12.42</cbc:TaxExclusiveAmount> <!-- Total amount excluding VAT -->
<cbc:TaxInclusiveAmount currencyID="EUR">12.42</cbc:TaxInclusiveAmount> <!-- Total amount including VAT -->
<cbc:AllowanceTotalAmount currencyID="EUR">0.00</cbc:AllowanceTotalAmount> <!-- Total allowance amount -->
<cbc:ChargeTotalAmount currencyID="EUR">9.40</cbc:ChargeTotalAmount> <!-- Total charge amount (shipping) -->
<cbc:PrepaidAmount currencyID="EUR">12.42</cbc:PrepaidAmount> <!-- Prepaid amount (full invoice amount) -->
<cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount> <!-- Amount due (0.00 because prepaid) -->
</cac:LegalMonetaryTotal>

<!-- Invoice line item -->
<cac:InvoiceLine>
<cbc:ID>0</cbc:ID> <!-- Line item number -->
<cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity> <!-- Quantity (C62 = items) -->
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount> <!-- Line total amount -->

<!-- Product information -->
<cac:Item>
<cbc:Name>ACHILLEA MILLEFOLIUM – YARROW – ‘Summer Pastels mix’</cbc:Name> <!-- Product name -->
<cac:ClassifiedTaxCategory>
<cbc:ID>AE</cbc:ID> <!-- AE = Reverse charge VAT category -->
<cbc:Percent>0.00</cbc:Percent> <!-- VAT percentage (0% for reverse charge) -->
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID> <!-- Tax scheme identifier -->
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>

<!-- Price information -->
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.02</cbc:PriceAmount> <!-- Unit price -->
<cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity> <!-- Base quantity -->
</cac:Price>
</cac:InvoiceLine>
</Invoice>

It validates in the doc checker. I don't know if it's any use to you, but there you go.

Greets Gossen
06 Mar 2026 00:13

e-invoice

Category: Wishlist

I read a little bit about the tax category codes and I think the right one for my situation (Selling from the Netherlands to a business in Belgium) is the AE Vat Reverse Charge (Code specifying that the standard VAT rate is levied from the invoicee.)

But that doesn't mean that it is the right one for everybody I guess.

I am sorry that I can't help you more with this. I find it very hard to wrap my head around with all the unknown jargon used.

Gossen
05 Mar 2026 23:31

e-invoice

Category: Wishlist

Hi,

this is the output:

Document validated as: Peppol BIS 3 UBL Invoice
3 errors
error [BR-E-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Exempt from VAT" shall contain exactly one VAT breakdown (BG-23) with the VAT category code (BT-118) equal to "Exempt from VAT".
location /ubl:Invoice[1]
test ((exists(//cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E']) or exists(//cac:ClassifiedTaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E'])) and (count(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E']) = 1)) or (not(//cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E']) and not(//cac:ClassifiedTaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID[normalize-space(.) = 'E']))
error [BR-S-01]-An Invoice that contains an Invoice line (BG-25), a Document level allowance (BG-20) or a Document level charge (BG-21) where the VAT category code (BT-151, BT-95 or BT-102) is "Standard rated" shall contain in the VAT breakdown (BG-23) at least one VAT category code (BT-118) equal with "Standard rated".
location /ubl:Invoice[1]
test ((count(//cac:AllowanceCharge/cac:TaxCategory[normalize-space(cbc:ID) = 'S']) + count(//cac:ClassifiedTaxCategory[normalize-space(cbc:ID) = 'S'])) > 0 and count(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'S']) > 0) or ((count(//cac:AllowanceCharge/cac:TaxCategory[normalize-space(cbc:ID) = 'S']) + count(//cac:ClassifiedTaxCategory[normalize-space(cbc:ID) = 'S'])) = 0 and count(cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory[normalize-space(cbc:ID) = 'S']) = 0)
error [BR-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).
location /ubl:Invoice[1]/cac:TaxTotal[1]/cac:TaxSubtotal[1]/cac:TaxCategory[1]
test every $rate in xs:decimal(cbc:Percent) satisfies (((exists(//cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID) = 'S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]) or exists(//cac:AllowanceCharge[cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate])) and ((../xs:decimal(cbc:TaxableAmount - 1) < (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))) and (../xs:decimal(cbc:TaxableAmount + 1) > (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))))) or (exists(//cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID) = 'S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]) or exists(//cac:AllowanceCharge[cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate])) and ((../xs:decimal(cbc:TaxableAmount - 1) < (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))) and (../xs:decimal(cbc:TaxableAmount + 1) > (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount))))))

And the XML:

<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>C1B0C83</cbc:ID>
<cbc:IssueDate>2026-03-04</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:OrderReference>
<cbc:ID>NA</cbc:ID>
<cbc:SalesOrderID>C1E1G56</cbc:SalesOrderID>
</cac:OrderReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">NL182610202B02</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Bloem en Oogst</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>3 van Zijlweg</cbc:StreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL182610202B02</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Bloem en Oogst</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">NL182610202B02</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Eline Houtkamp</cbc:Name>
<cbc:Telephone>+31624897106</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9925">5677</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>gozz</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>hhj</cbc:StreetName>
<cbc:AdditionalStreetName>7</cbc:AdditionalStreetName>
<cbc:CityName>sjsn</cbc:CityName>
<cbc:PostalZone>7777jj</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>BE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyLegalEntity>
<cbc:RegistrationName>gozz</cbc:RegistrationName>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Gossen rij</cbc:Name>
<cbc:Telephone>92737</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Verzending</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">9.40</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>E</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">12.42</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">12.42</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">12.42</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">0.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="EUR">9.40</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">12.42</cbc:PrepaidAmount>
<cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>0</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>ACHILLEA MILLEFOLIUM &#x2013; DUIZENDBLAD - &#x2018;Summer Pastels mix&#x2019;</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>E</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.02</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
</Invoice>


Sorry it didn't work.

Thanks and have a nice evening.

Gossen
04 Mar 2026 16:37

Coupon checkout calculation problem

Category: Checkout

Hello,

Thank you for the report. The total being £54 is correct (£45 + £9 tax), so the underlying calculation seems right, but the tax breakdown display doesn't match.

Could you check a couple of things for me:
1. In your HikaShop configuration (System > Configuration > Tax tab), what are the "Discount before tax" and "Coupon before tax" settings set to? These control whether the discount/coupon is applied to the price before or after tax is calculated, which directly affects how the tax amount is displayed.
2. On the coupon itself (Marketing > Discounts), what is the "Tax" setting of your coupon set to? If it's set to a specific tax category, the discount amount will be taxed accordingly, which affects the tax line display.
04 Mar 2026 09:33

e-invoice

Category: Wishlist

It seems its tripping over the amount of decimals in Amount currencyID:

<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Verzending</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">3.63636</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>

I tried to change the shipping value in hika to a number with 2 decimals but it just pasts zero's at the end when I save. (3.63000) Is it hardcoded with 5 decimals?
04 Mar 2026 09:09

e-invoice

Category: Wishlist

Ok, so I figured out that I wasn't using any tax on the shipping amount so that <cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>0</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory> gives an error because Percent was zero. I now set it up correctly with a proper tax amount. The Percent is correctly used but now there are some other errors. But I hope this is a step in the right direction. See below:

3 errors
error [BR-DEC-05]-The allowed maximum number of decimals for the Document level charge amount (BT-99) is 2.
location /ubl:Invoice[1]/cac:AllowanceCharge[1]
test string-length(substring-after(cbc:Amount,'.'))<=2
error [BR-CO-13]-Invoice total amount without VAT (BT-109) = Σ Invoice line net amount (BT-131) - Sum of allowances on document level (BT-107) + Sum of charges on document level (BT-108).
location /ubl:Invoice[1]/cac:LegalMonetaryTotal[1]
test ((cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10) div 100 )) or (not(cbc:ChargeTotalAmount) and (cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) - xs:decimal(cbc:AllowanceTotalAmount)) * 10 * 10 ) div 100)) or ((cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = round((xs:decimal(cbc:LineExtensionAmount) + xs:decimal(cbc:ChargeTotalAmount)) * 10 * 10 ) div 100)) or (not(cbc:ChargeTotalAmount) and not(cbc:AllowanceTotalAmount) and (xs:decimal(cbc:TaxExclusiveAmount) = xs:decimal(cbc:LineExtensionAmount)))
error [UBL-DT-01]-Amounts shall be decimal up to two fraction digits
location /ubl:Invoice[1]/cac:AllowanceCharge[1]/cbc:Amount[1]
test string-length(substring-after(.,'.'))<=2


XML:

<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>C1A0R73</cbc:ID>
<cbc:IssueDate>2026-02-28</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:OrderReference>
<cbc:ID>NA</cbc:ID>
<cbc:SalesOrderID>C1D1W46</cbc:SalesOrderID>
</cac:OrderReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">NL182610202B02</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Bloem en Oogst</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>3 van Zijlweg</cbc:StreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL182610202B02</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Bloem en Oogst</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">NL182610202B02</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Eline Houtkamp</cbc:Name>
<cbc:Telephone>+31624897106</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">123123182</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>GossiePozzie</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>van Zijlweg</cbc:StreetName>
<cbc:AdditionalStreetName>3</cbc:AdditionalStreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351 HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyLegalEntity>
<cbc:RegistrationName>GossiePozzie</cbc:RegistrationName>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Gossen Rijkeboer</cbc:Name>
<cbc:Telephone>+31626660482</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Verzending</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">3.63636</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">1.40</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">6.65</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">1.40</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">6.65</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">8.05</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">0.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="EUR">3.64</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">8.05</cbc:PrepaidAmount>
<cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>0</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>ACHILLEA MILLEFOLIUM &#x2013; DUIZENDBLAD - &#x2018;Summer Pastels mix&#x2019;</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.02</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
</Invoice>
03 Mar 2026 21:25

e-invoice

Category: Wishlist

Hi Nicolas,

thank you for your quick response, but helas, no go. See error below:

Document validated as: Peppol BIS 3 UBL Invoice
2 errors
error [BR-S-07]-In a Document level charge (BG-21) where the Document level charge VAT category code (BT-102) is "Standard rated" the Document level charge VAT rate (BT-103) shall be greater than zero.
location /ubl:Invoice[1]/cac:AllowanceCharge[1]/cac:TaxCategory[1]
test (cbc:Percent) > 0
error [BR-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).
location /ubl:Invoice[1]/cac:TaxTotal[1]/cac:TaxSubtotal[1]/cac:TaxCategory[1]
test every $rate in xs:decimal(cbc:Percent) satisfies (((exists(//cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID) = 'S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]) or exists(//cac:AllowanceCharge[cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate])) and ((../xs:decimal(cbc:TaxableAmount - 1) < (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))) and (../xs:decimal(cbc:TaxableAmount + 1) > (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))))) or (exists(//cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID) = 'S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]) or exists(//cac:AllowanceCharge[cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate])) and ((../xs:decimal(cbc:TaxableAmount - 1) < (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))) and (../xs:decimal(cbc:TaxableAmount + 1) > (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount))))))

The XML:
<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>C1A0R73</cbc:ID>
<cbc:IssueDate>2026-02-28</cbc:IssueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
<cac:OrderReference>
<cbc:ID>NA</cbc:ID>
<cbc:SalesOrderID>C1D1W46</cbc:SalesOrderID>
</cac:OrderReference>
<cac:AdditionalDocumentReference>
<cbc:ID>Invoice.pdf</cbc:ID>
<cbc:DocumentDescription>Invoice PDF</cbc:DocumentDescription>
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="Invoice.pdf">JVBERi0xLjc........PDF CODE.........AwMDYyNzE2IDAwMDAwIG4gCjAwMDAwNjc0NTUgMDAwMDAgbiAKdHJhaWxlcgo8PCAvU2l6ZSAxOCAvUm9vdCAxNyAwIFIgL0luZm8gMTUgMCBSIC9JRCBbIDwxMTEzZjg4ZGQ3NmQxYTE5ZTRlMmI1NDVjNzc5MGIyZD4gPDExMTNmODhkZDc2ZDFhMTllNGUyYjU0NWM3NzkwYjJkPiBdID4+CnN0YXJ0eHJlZgo2NzY1OAolJUVPRgo=</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">NL182610202B02</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Bloem en Oogst</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>3 van Zijlweg</cbc:StreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>NL182610202B02</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Bloem en Oogst</cbc:RegistrationName>
<cbc:CompanyID schemeID="0106">NL182610202B02</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Eline Houtkamp</cbc:Name>
<cbc:Telephone>+31624897106</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9944">123123182</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>GossiePozzie</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>van Zijlweg</cbc:StreetName>
<cbc:AdditionalStreetName>3</cbc:AdditionalStreetName>
<cbc:CityName>Wapserveen</cbc:CityName>
<cbc:PostalZone>8351 HW</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>NL</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyLegalEntity>
<cbc:RegistrationName>GossiePozzie</cbc:RegistrationName>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Gossen Rijkeboer</cbc:Name>
<cbc:Telephone>+31626660482</cbc:Telephone>
<cbc:ElectronicMail>This email address is being protected from spambots. You need JavaScript enabled to view it.</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>true</cbc:ChargeIndicator>
<cbc:AllowanceChargeReason>Verzending</cbc:AllowanceChargeReason>
<cbc:Amount currencyID="EUR">4.4</cbc:Amount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>0.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:AllowanceCharge>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">0.63</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">7.42</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">0.63</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">7.42</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">8.05</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="EUR">0.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="EUR">4.40</cbc:ChargeTotalAmount>
<cbc:PrepaidAmount currencyID="EUR">8.05</cbc:PrepaidAmount>
<cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>0</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>ACHILLEA MILLEFOLIUM &#x2013; DUIZENDBLAD - &#x2018;Summer Pastels mix&#x2019;</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>21.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">3.02</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
</Invoice>


If there something I can do from my end please let me know.

Greetings Gossen
01 Mar 2026 14:40

e-invoice

Category: Wishlist

I tested the xml file on test.peppolautoriteit.nl/validate and this is the error it comes with:

Document validated as: Peppol BIS 3 UBL Invoice
2 errors
error [BR-37]-Each Document level charge (BG-21) shall have a Document level charge VAT category code (BT-102).
location /ubl:Invoice[1]/cac:AllowanceCharge[1]
test exists(cac:TaxCategory[cac:TaxScheme/normalize-space(upper-case(cbc:ID))='VAT']/cbc:ID)
error [BR-S-08]-For each different value of VAT category rate (BT-119) where the VAT category code (BT-118) is "Standard rated", the VAT category taxable amount (BT-116) in a VAT breakdown (BG-23) shall equal the sum of Invoice line net amounts (BT-131) plus the sum of document level charge amounts (BT-99) minus the sum of document level allowance amounts (BT-92) where the VAT category code (BT-151, BT-102, BT-95) is "Standard rated" and the VAT rate (BT-152, BT-103, BT-96) equals the VAT category rate (BT-119).
location /ubl:Invoice[1]/cac:TaxTotal[1]/cac:TaxSubtotal[1]/cac:TaxCategory[1]
test every $rate in xs:decimal(cbc:Percent) satisfies (((exists(//cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID) = 'S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]) or exists(//cac:AllowanceCharge[cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate])) and ((../xs:decimal(cbc:TaxableAmount - 1) < (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))) and (../xs:decimal(cbc:TaxableAmount + 1) > (sum(../../../cac:InvoiceLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))))) or (exists(//cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID) = 'S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]) or exists(//cac:AllowanceCharge[cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate])) and ((../xs:decimal(cbc:TaxableAmount - 1) < (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)))) and (../xs:decimal(cbc:TaxableAmount + 1) > (sum(../../../cac:CreditNoteLine[cac:Item/cac:ClassifiedTaxCategory/normalize-space(cbc:ID)='S'][cac:Item/cac:ClassifiedTaxCategory/xs:decimal(cbc:Percent) =$rate]/xs:decimal(cbc:LineExtensionAmount)) + sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=true()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount)) - sum(../../../cac:AllowanceCharge[cbc:ChargeIndicator=false()][cac:TaxCategory/normalize-space(cbc:ID)='S'][cac:TaxCategory/xs:decimal(cbc:Percent) = $rate]/xs:decimal(cbc:Amount))))))

This is the peppol xml:
<?xml version="1.0"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2">
 <cbc:UBLVersionID>2.1</cbc:UBLVersionID>
 <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
 <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
 <cbc:ID>C1A0R73</cbc:ID>
 <cbc:IssueDate>2026-02-28</cbc:IssueDate>
 <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
 <cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>
 <cac:OrderReference>
  <cbc:ID>NA</cbc:ID>
  <cbc:SalesOrderID>C1D1W46</cbc:SalesOrderID>
 </cac:OrderReference>
 <cac:AccountingSupplierParty>
  <cac:Party>
   <cbc:EndpointID schemeID="9944">NL182610202B02</cbc:EndpointID>
   <cac:PartyName>
    <cbc:Name>Bloem en Oogst</cbc:Name>
   </cac:PartyName>
   <cac:PostalAddress>
    <cbc:StreetName>3 van Zijlweg</cbc:StreetName>
    <cbc:CityName>Wapserveen</cbc:CityName>
    <cbc:PostalZone>8351HW</cbc:PostalZone>
    <cac:Country>
     <cbc:IdentificationCode>NL</cbc:IdentificationCode>
    </cac:Country>
   </cac:PostalAddress>
   <cac:PartyTaxScheme>
    <cbc:CompanyID>NL182610202B02</cbc:CompanyID>
    <cac:TaxScheme>
     <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
   </cac:PartyTaxScheme>
   <cac:PartyLegalEntity>
    <cbc:RegistrationName>Bloem en Oogst</cbc:RegistrationName>
    <cbc:CompanyID schemeID="0106">NL182610202B02</cbc:CompanyID>
   </cac:PartyLegalEntity>
   <cac:Contact>
    <cbc:Name>Eline Houtkamp</cbc:Name>
    <cbc:Telephone>+31624897106</cbc:Telephone>
    <cbc:ElectronicMail>verkoop@bloemenoogst.nl</cbc:ElectronicMail>
   </cac:Contact>
  </cac:Party>
 </cac:AccountingSupplierParty>
 <cac:AccountingCustomerParty>
  <cac:Party>
   <cbc:EndpointID schemeID="9944">123123182</cbc:EndpointID>
   <cac:PartyName>
    <cbc:Name>GossiePozzie</cbc:Name>
   </cac:PartyName>
   <cac:PostalAddress>
    <cbc:StreetName>van Zijlweg</cbc:StreetName>
    <cbc:AdditionalStreetName>3</cbc:AdditionalStreetName>
    <cbc:CityName>Wapserveen</cbc:CityName>
    <cbc:PostalZone>8351 HW</cbc:PostalZone>
    <cac:Country>
     <cbc:IdentificationCode>NL</cbc:IdentificationCode>
    </cac:Country>
   </cac:PostalAddress>
   <cac:PartyLegalEntity>
    <cbc:RegistrationName>GossiePozzie</cbc:RegistrationName>
   </cac:PartyLegalEntity>
   <cac:Contact>
    <cbc:Name>Gossen Rijkeboer</cbc:Name>
    <cbc:Telephone>+31626660482</cbc:Telephone>
    <cbc:ElectronicMail>info@gozz.nl</cbc:ElectronicMail>
   </cac:Contact>
  </cac:Party>
 </cac:AccountingCustomerParty>
 <cac:AllowanceCharge>
  <cbc:ChargeIndicator>true</cbc:ChargeIndicator>
  <cbc:AllowanceChargeReason>Verzending</cbc:AllowanceChargeReason>
  <cbc:Amount currencyID="EUR">4.4</cbc:Amount>
 </cac:AllowanceCharge>
 <cac:TaxTotal>
  <cbc:TaxAmount currencyID="EUR">0.63</cbc:TaxAmount>
  <cac:TaxSubtotal>
   <cbc:TaxableAmount currencyID="EUR">7.42</cbc:TaxableAmount>
   <cbc:TaxAmount currencyID="EUR">0.63</cbc:TaxAmount>
   <cac:TaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>21.00</cbc:Percent>
    <cac:TaxScheme>
     <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
   </cac:TaxCategory>
  </cac:TaxSubtotal>
 </cac:TaxTotal>
 <cac:LegalMonetaryTotal>
  <cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
  <cbc:TaxExclusiveAmount currencyID="EUR">7.42</cbc:TaxExclusiveAmount>
  <cbc:TaxInclusiveAmount currencyID="EUR">8.05</cbc:TaxInclusiveAmount>
  <cbc:AllowanceTotalAmount currencyID="EUR">0.00</cbc:AllowanceTotalAmount>
  <cbc:ChargeTotalAmount currencyID="EUR">4.40</cbc:ChargeTotalAmount>
  <cbc:PrepaidAmount currencyID="EUR">8.05</cbc:PrepaidAmount>
  <cbc:PayableAmount currencyID="EUR">0.00</cbc:PayableAmount>
 </cac:LegalMonetaryTotal>
 <cac:InvoiceLine>
  <cbc:ID>0</cbc:ID>
  <cbc:InvoicedQuantity unitCode="C62">1.00</cbc:InvoicedQuantity>
  <cbc:LineExtensionAmount currencyID="EUR">3.02</cbc:LineExtensionAmount>
  <cac:Item>
   <cbc:Name>ACHILLEA MILLEFOLIUM – DUIZENDBLAD - ‘Summer Pastels mix’</cbc:Name>
   <cac:ClassifiedTaxCategory>
    <cbc:ID>S</cbc:ID>
    <cbc:Percent>21.00</cbc:Percent>
    <cac:TaxScheme>
     <cbc:ID>VAT</cbc:ID>
    </cac:TaxScheme>
   </cac:ClassifiedTaxCategory>
  </cac:Item>
  <cac:Price>
   <cbc:PriceAmount currencyID="EUR">3.02</cbc:PriceAmount>
   <cbc:BaseQuantity unitCode="C62">1.00</cbc:BaseQuantity>
  </cac:Price>
 </cac:InvoiceLine>
</Invoice>
Am I doing something wrong? I must say this is very complicated to figure out. Not any grudges to you Nicolas, I so glad you intergrated this is Hikashop with the PDF plugin.

Do you have any pointers for me?

Thanks in advance,

Gossen Rijkeboer
25 Feb 2026 17:12

Coupon and VAT incorrect

Category: Discount & Coupon

Unfortunately, it seems that coupons and discounts used with floating taxes still don't work. We have tried to make it work for years now, but no luck. So we're running a script to correct the amounts when we import transactions to our accounting software. The issue, I think, is that Hikashop always calculates the coupon/discount value based on the subtotal instead of the grand total including taxes, regardless of the "Before/After taxes" setting or the "Tax Category" option you select.
10 Feb 2026 10:14

Error on login

Category: Customers

I disabled the Hikashop GA4 plugin and this seems to work:

#
#<?php die('Forbidden.'); ?>
#Date: 2026-02-10 09:04:54 UTC
#Software: Joomla! 5.4.2 Stable [ Kutegemea ] 6-January-2026 16:00 GMT

#Fields: datetime priority clientip category message
2026-02-10T09:04:54+00:00 CRITICAL 83.86.253.48 error Uncaught Throwable of type mysqli_sql_exception thrown with message "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1". Stack trace: #0 [ROOT]/libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php(138): mysqli->prepare()
#1 [ROOT]/libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php(972): Joomla\Database\Mysqli\MysqliStatement->__construct()
#2 [ROOT]/libraries/vendor/joomla/database/src/DatabaseDriver.php(1780): Joomla\Database\Mysqli\MysqliDriver->prepareStatement()
#3 [ROOT]/plugins/system/hikashop_ga4/hikashop_ga4.php(856): Joomla\Database\DatabaseDriver->setQuery()
#4 [ROOT]/plugins/system/hikashop_ga4/hikashop_ga4.php(869): plgSystemHikashop_ga4->_isCartPage()
#5 [ROOT]/plugins/system/hikashop_ga4/hikashop_ga4.php(75): plgSystemHikashop_ga4->getCartJS()
#6 [ROOT]/administrator/components/com_hikashop/pluginCompatJ4.php(68): plgSystemHikashop_ga4->onBeforeCompileHead()
#7 [ROOT]/libraries/vendor/joomla/event/src/Dispatcher.php(454): hikashopJoomlaPlugin->__call()
#8 [ROOT]/libraries/src/Document/Renderer/Html/MetasRenderer.php(62): Joomla\Event\Dispatcher->dispatch()
#9 [ROOT]/libraries/src/Document/HtmlDocument.php(578): Joomla\CMS\Document\Renderer\Html\MetasRenderer->render()
#10 [ROOT]/libraries/src/Document/HtmlDocument.php(897): Joomla\CMS\Document\HtmlDocument->getBuffer()
#11 [ROOT]/libraries/src/Document/HtmlDocument.php(650): Joomla\CMS\Document\HtmlDocument->_renderTemplate()
#12 [ROOT]/libraries/src/Application/CMSApplication.php(1120): Joomla\CMS\Document\HtmlDocument->render()
#13 [ROOT]/libraries/src/Application/SiteApplication.php(745): Joomla\CMS\Application\CMSApplication->render()
#14 [ROOT]/libraries/src/Application/CMSApplication.php(309): Joomla\CMS\Application\SiteApplication->render()
#15 [ROOT]/includes/app.php(58): Joomla\CMS\Application\CMSApplication->execute()
#16 [ROOT]/index.php(51): require_once('...')
#17 {main}
09 Feb 2026 15:28

ubl errors

Category: Checkout

-- HikaShop version -- : 6.3.0
-- Joomla version -- : 5.4
-- PHP version -- : 8.4

did a ubl test on www.ubl.be/validator/
but got errors:

UBL.BE : Error

[BR-S-05]-In an Invoice line (BG-25) where the Invoiced item VAT category code (BT-151) is "Standard rated" the Invoiced item VAT rate (BT-152) shall be greater than zero.
Specification identifier MUST have the value 'urn:cen.eu:en16931:2017#conformant#urn:UBL.BE:1.0.0.20180214'.
[ubl-BE-01]-At least two AdditionalDocumentReference elements must be present.
[ubl-BE-10]-cac:cac:TaxTotal/cac:TaxSubtotal/cac:TaxCategory/cbc:Name must be in BTCC list :
[ubl-BE-14]-Invoice/cac:InvoiceLine/cac:TaxTotal/cbc:TaxAmount is Mandatory.
[ubl-BE-15]-cac:ClassifiedTaxCategory/cbc:Name must be present.
01 Feb 2026 10:31

500 A database error has occurred. Please enable debug mode for more information

Category: Install & Update

-- HikaShop version -- : 6.3
-- Joomla version -- : 5.42
-- PHP version -- : 8.3x
-- Browser(s) name and version -- : Chrome à jour Version 144.0.7559.110 (Build officiel) (64 bits)
-- Error-message(debug-mod must be tuned on) -- : 500 A database error has occurred. Please enable debug mode for more information.during update from 6.2 to 6.3

Hello

I have this error during update from 6.2 to 6.3

You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near
'mon_grouping";s:1:"3";s:13:"positive_sign";s:0:"";s:13:"negative_sign";s:1:"-...' at line 152
.../libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php:138
133         $this->connection   = $connection;
134         $this->query        = $query;
135 
136         $query = $this->prepareParameterKeyMapping($query);
137 
138         $this->statement  = $connection->prepare($query);
139 
140         if (!$this->statement) {
141             throw new PrepareStatementFailureException($this->connection->error, $this->connection->errno);
142         }
143     }
mysqli->prepare()
Joomla\Database\Mysqli\MysqliStatement->__construct()
Joomla\Database\Mysqli\MysqliDriver->prepareStatement()
Joomla\Database\DatabaseDriver->setQuery()
hikashopUpdateHelper->processSQLfile()
hikashopUpdateHelper->addDefaultData()
updateController->install()
Joomla\CMS\MVC\Controller\BaseController->execute()
require_once()
Joomla\CMS\Dispatcher\LegacyComponentDispatcher::Joomla\CMS\Dispatcher\{closure}()
Joomla\CMS\Dispatcher\LegacyComponentDispatcher->dispatch()
Joomla\CMS\Component\ComponentHelper::renderComponent()
Joomla\CMS\Application\AdministratorApplication->dispatch()
Joomla\CMS\Application\AdministratorApplication->doExecute()
Joomla\CMS\Application\CMSApplication->execute()
require_once()
mysqli->prepare()
.../libraries/vendor/joomla/database/src/Mysqli/MysqliStatement.php:138
133         $this->connection   = $connection;
134         $this->query        = $query;
135 
136         $query = $this->prepareParameterKeyMapping($query);
137 
138         $this->statement  = $connection->prepare($query);
139 
140         if (!$this->statement) {
141             throw new PrepareStatementFailureException($this->connection->error, $this->connection->errno);
142         }
143     }
Joomla\Database\Mysqli\MysqliStatement->__construct()
.../libraries/vendor/joomla/database/src/Mysqli/MysqliDriver.php:972
967      * @since   2.0.0
968      * @throws  PrepareStatementFailureException
969      */
970     protected function prepareStatement(string $query): StatementInterface
971     {
972         return new MysqliStatement($this->connection, $query);
973     }
974 
975     /**
976      * Unlocks tables in the database.
977      *
Joomla\Database\Mysqli\MysqliDriver->prepareStatement()
.../libraries/vendor/joomla/database/src/DatabaseDriver.php:1780
1775 
1776         $query->setLimit($limit, $offset);
1777 
1778         $sql = $this->replacePrefix((string) $query);
1779 
1780         $this->statement = $this->prepareStatement($sql);
1781 
1782         $this->sql    = $query;
1783         $this->limit  = (int) max(0, $limit);
1784         $this->offset = (int) max(0, $offset);
1785 
Joomla\Database\DatabaseDriver->setQuery()
.../administrator/components/com_hikashop/helpers/update.php:937
932 			$query = $c;
933 		}
934 
935 		$query = trim($query);
936 		if(!empty($query) && $this->checkSQLquery($query)) {
937 			$this->db->setQuery($query);
938 			try {
939 				 $this->db->execute();
940 			} catch(Exception $e) {}
941 		}
942 		unset($query);
hikashopUpdateHelper->processSQLfile()
.../administrator/components/com_hikashop/helpers/update.php:866
861 (11, 'Order to ship', 'O:8:"stdClass":27:{s:7:"display";s:7:"listing";s:9:"date_type";s:7:"created";s:10:"date_group";s:5:"%j %Y";s:10:"periodType";s:14:"proposedPeriod";s:14:"proposedPeriod";s:3:"all";s:6:"period";s:1:"0";s:7:"content";s:6:"orders";s:7:"filters";s:54:"a:1:{s:14:"a.order_status";a:1:{i:0;s:9:"confirmed";}}";s:15:"category_childs";s:1:"0";s:9:"customers";s:14:"last_customers";s:15:"customers_order";s:5:"sales";s:8:"partners";s:14:"last_customers";s:14:"partners_order";s:5:"sales";s:12:"compare_with";s:7:"periods";s:14:"period_compare";s:4:"none";s:5:"limit";s:0:"";s:6:"region";s:5:"world";s:6:"format";s:5:"UTF-8";s:10:"map_source";s:8:"shipping";s:12:"product_data";s:5:"sales";s:16:"product_order_by";s:4:"best";s:15:"orders_order_by";s:4:"last";s:8:"compares";N;s:10:"categories";s:3:"all";s:8:"products";s:6:"a:0:{}";s:7:"coupons";s:6:"a:0:{}";s:6:"status";s:0:"";}', 0, 11, 'all');
862 EOD;
863 		$this->db->setQuery($query);
864 		$this->db->execute();
865 
866 		$this->processSQLfile('currencies.sql');
867 
868 		$this->db->setQuery($query);
869 		$this->db->execute();
870 
871 		$config = hikashop_config();
hikashopUpdateHelper->addDefaultData()
.../administrator/components/com_hikashop/controllers/update.php:30
25 		$newConfig->installcomplete = 1;
26 		$config = hikashop_config();
27 		$config->save($newConfig);
28 		$updateHelper = hikashop_get('helper.update');
29 		$updateHelper->addJoomfishElements();
30 		$updateHelper->addDefaultData();
31 		$updateHelper->createUploadFolders();
32 		$lang = JFactory::getLanguage();
33 		$code = $lang->getTag();
34 		$updateHelper->installMenu($code);
35 		if($code != 'en-GB') {
updateController->install()
.../libraries/src/MVC/Controller/BaseController.php:730
725         }
726 
727         // Record the actual task being fired
728         $this->doTask = $doTask;
729 
730         return $this->$doTask();
731     }
732 
733     /**
734      * Method to get a model object, loading it if required.
735      *
Joomla\CMS\MVC\Controller\BaseController->execute()
.../administrator/components/com_hikashop/hikashop.php:75
70 	$app->enqueueMessage('Page not found : '.$taskGroup, 'warning');
71 	return;
72 }
73 
74 hikaInput::get()->set('view', $classGroup->getName() );
75 $classGroup->execute( hikaInput::get()->get('task','listing'));
76 $classGroup->redirect();
77 if(hikaInput::get()->getString('tmpl') !== 'component'){
78 	echo hikashop_footer();
79 }
80 
require_once()
.../libraries/src/Dispatcher/LegacyComponentDispatcher.php:71
66         // Load common and local language files.
67         $lang->load($this->app->scope, JPATH_BASE) || $lang->load($this->app->scope, JPATH_BASE . '/components/' . $this->app->scope);
68 
69         // Execute the component
70         $loader = static function ($path) {
71             require_once $path;
72         };
73         $loader($path);
74     }
75 }
Arguments
0	
string(82) "/homepages/3/d4298756585/htdocs/administrator/components/com_hikashop/hikashop.php"
Joomla\CMS\Dispatcher\LegacyComponentDispatcher::Joomla\CMS\Dispatcher\{closure}()
.../libraries/src/Dispatcher/LegacyComponentDispatcher.php:73
68 
69         // Execute the component
70         $loader = static function ($path) {
71             require_once $path;
72         };
73         $loader($path);
74     }
75 }
Joomla\CMS\Dispatcher\LegacyComponentDispatcher->dispatch()
.../libraries/src/Component/ComponentHelper.php:361
356         if (!static::isEnabled($option)) {
357             throw new MissingComponentException(Text::_('JLIB_APPLICATION_ERROR_COMPONENT_NOT_FOUND'), 404);
358         }
359 
360         ob_start();
361         $app->bootComponent($option)->getDispatcher($app)->dispatch();
362         $contents = ob_get_clean();
363 
364         // Revert the scope
365         $app->scope = $scope;
366 
Joomla\CMS\Component\ComponentHelper::renderComponent()
.../libraries/src/Application/AdministratorApplication.php:150
145         $this->dispatchEvent(
146             'onAfterInitialiseDocument',
147             new AfterInitialiseDocumentEvent('onAfterInitialiseDocument', ['subject' => $this, 'document' => $document])
148         );
149 
150         $contents = ComponentHelper::renderComponent($component);
151         $document->setBuffer($contents, ['type' => 'component']);
152 
153         // Trigger the onAfterDispatch event.
154         $this->dispatchEvent(
155             'onAfterDispatch',
Joomla\CMS\Application\AdministratorApplication->dispatch()
.../libraries/src/Application/AdministratorApplication.php:206
201             ['option' => 'com_users', 'task' => 'method.add'],
202             ['option' => 'com_users', 'task' => 'method.save'],
203         ]);
204 
205         // Dispatch the application
206         $this->dispatch();
207 
208         // Mark afterDispatch in the profiler.
209         JDEBUG ? $this->profiler->mark('afterDispatch') : null;
210     }
211 
Joomla\CMS\Application\AdministratorApplication->doExecute()
.../libraries/src/Application/CMSApplication.php:304
299             $this->sanityCheckSystemVariables();
300             $this->setupLogging();
301             $this->createExtensionNamespaceMap();
302 
303             // Perform application routines.
304             $this->doExecute();
305 
306             // If we have an application document object, render it.
307             if ($this->document instanceof \Joomla\CMS\Document\Document) {
308                 // Render the application output.
309                 $this->render();
Joomla\CMS\Application\CMSApplication->execute()
.../administrator/includes/app.php:58
53 
54 // Set the application as global app
55 \Joomla\CMS\Factory::$application = $app;
56 
57 // Execute the application.
58 $app->execute();
require_once()
.../administrator/index.php:32
27  * define() is used rather than "const" to not error for PHP 5.2 and lower
28  */
29 \define('_JEXEC', 1);
30 
31 // Run the application - All executable code should be triggered through this file
32 require_once __DIR__ . '/includes/app.php';
Arguments
0	
string(62) "/homepages/3/d4298756585/htdocs/administrator/includes/app.php"
29 Jan 2026 22:41

price_site_id

Category: Development

Hi, after updating to 6.2.0 I noticed an issue with price selection. If a product has two prices — one with a string in price_site_id and one with an empty price_site_id — the product page only shows the one with the Site ID, even if it's higher. However, the category listing still shows the lower (empty Site ID) price.

I have 'Show several prices' enabled, but var_dump($this->row->prices) in the template shows only one price object. It seems the core filters out the second price before it reaches the view. Is this an intended change in specificity logic?

var dump on product listing

array(1) { [0]=> object(stdClass)#5677 (13) { ["price_id"]=> int(191478) ["price_currency_id"]=> int(81) ["price_product_id"]=> int(56480) ["price_value"]=> string(12) "740503.68000" ["price_min_quantity"]=> int(0) ["price_access"]=> string(3) "all" ["price_site_id"]=> string(0) "" ["price_users"]=> string(0) "" ["price_start_date"]=> int(0) ["price_end_date"]=> int(0) ["price_zone_id"]=> string(0) "" ["price_value_with_tax"]=> float(858985) ["taxes"]=> array(1) { ["0000_00000003"]=> object(stdClass)#5667 (20) { ["taxation_id"]=> int(3) ["zone_namekey"]=> array(1) { [0]=> string(22) "country_Kazakhstan_109" } ["category_namekey"]=> string(11) "default_tax" ["tax_namekey"]=> string(15) "НДС 16% (KZ)" ["taxation_published"]=> int(1) ["taxation_type"]=> string(0) "" ["taxation_access"]=> string(3) "all" ["taxation_cumulative"]=> int(0) ["taxation_post_code"]=> string(0) "" ["taxation_date_start"]=> int(1767291300) ["taxation_date_end"]=> int(0) ["taxation_internal_code"]=> string(0) "" ["taxation_note"]=> string(57) "Налог на добавленную стоимость" ["taxation_site_id"]=> string(0) "" ["taxation_ordering"]=> int(0) ["tax_rate"]=> string(7) "0.16000" ["zone_type"]=> string(7) "country" ["tax_ratio"]=> int(1) ["tax_amount"]=> float(118481) ["amount"]=> float(740504) } } } } 858 985 KZT за шт.


vardump form product page

array(1) { [0]=> object(stdClass)#5309 (14) { ["price_id"]=> int(191483) ["price_currency_id"]=> int(81) ["price_product_id"]=> int(56480) ["price_value"]=> string(12) "623793.10345" ["price_min_quantity"]=> int(0) ["price_access"]=> string(3) "all" ["price_site_id"]=> string(1) "A" ["price_users"]=> string(0) "" ["price_start_date"]=> int(0) ["price_end_date"]=> int(0) ["price_zone_id"]=> string(0) "" ["price_value_with_tax"]=> float(723600) ["taxes_added"]=> bool(true) ["taxes"]=> array(1) { ["0000_00000003"]=> object(stdClass)#5307 (20) { ["taxation_id"]=> int(3) ["zone_namekey"]=> array(1) { [0]=> string(22) "country_Kazakhstan_109" } ["category_namekey"]=> string(11) "default_tax" ["tax_namekey"]=> string(15) "НДС 16% (KZ)" ["taxation_published"]=> int(1) ["taxation_type"]=> string(0) "" ["taxation_access"]=> string(3) "all" ["taxation_cumulative"]=> int(0) ["taxation_post_code"]=> string(0) "" ["taxation_date_start"]=> int(1767291300) ["taxation_date_end"]=> int(0) ["taxation_internal_code"]=> string(0) "" ["taxation_note"]=> string(57) "Налог на добавленную стоимость" ["taxation_site_id"]=> string(0) "" ["taxation_ordering"]=> int(0) ["tax_rate"]=> string(7) "0.16000" ["zone_type"]=> string(7) "country" ["tax_ratio"]=> int(1) ["tax_amount"]=> float(99807) ["amount"]=> float(623793) } } } }
Displaying 1 - 20 out of 37 results.
Time to create page: 0.201 seconds
Powered by Kunena Forum