Advanced Search

Search Results (Searched for: tax category)

18 May 2026 14:23

Assign different listing_img_title view

Category: Product & Category Display

Great thank you!

Can i add a class to the text to be able to customise it?
Also, even though in the product listing it is correct now and the prices of this category are without tax, when you enter a product page the price is displayed with the tax. Why is that?

For example:
www.art-metal.gr/epipla2/krevatia
www.art-metal.gr/epipla2/krevatia/product/krevati-art-5011-001
15 May 2026 15:22

Assign different listing_img_title view

Category: Product & Category Display

Hi,

Yes. Since you have already set up a menu item dedicated to that category, with its own listing_img_title view file, and only that menu item is configured to show prices without tax, you can simply put your custom text directly in that view file. It will only appear when products are displayed through that menu item, which is the no-tax one, so the custom text will only show on the no-tax listings, exactly as you want.
07 May 2026 20:22

Import category data.

Category: Install & Update

Hello,

Thanks for reaching out. The short answer is: HikaShop's built-in CSV import does not currently include the category metadata fields (page title, meta description, keywords, canonical, alias, etc.) row-by-row. It's primarily a product import that can auto-create categories with a name and a namekey, but it does not read the SEO columns. You have three practical paths depending on what you actually need.

1) Same value across many categories: HikaShop Massactions (built-in, Business edition)

If your goal is to set the same value on many categories at once (for example, applying a SEO title pattern to all subcategories of a parent), the Massactions feature does it without any extra extension.

- HikaShop > System > Massactions > New.
- Massaction table: Category.
- Add filters to select the categories you want to touch (by parent, by name pattern, by ID range, etc.).
- Add the action "Update values" and pick the column you want to set: category_meta_description, category_keywords, category_page_title, category_canonical, category_alias, category_description, etc.
- Save the massaction and run it. You can re-run it later or schedule it via the task plugin.

The limitation is that "Update values" applies the same value to every selected category, so it's perfect for batch SEO conventions but not for a per-row import where every category has its own distinct values.

2) Per-row distinct values via CSV: RO CSVi (third-party extension)

For a real category CSV import where each row carries the values for one category, the most complete option is RO CSVi by RolandD, a commercial Joomla extension dedicated to imports/exports for several Joomla components, HikaShop included. It supports every HikaShop category field, including all the ones you mentioned:

- category_name, category_namekey, category_alias, category_description
- category_meta_description, category_keywords, category_page_title, category_canonical
- category_published, category_access, category_menu, category_layout, category_quantity_layout
- category_parent_id, category_ordering, category_depth, category_left, category_right, category_path
- category_type (mandatory: tells HikaShop whether you're importing product categories, manufacturers, taxes or order statuses, since they all share the same table)
- category_id, category_created, category_modified, category_site_id

Required columns for the import are category_path (the position in the tree) and category_type. The rest are optional and only the fields you include in the CSV are updated, which makes it easy to update only meta/SEO fields without touching anything else.

Their documentation: rolandd.com/documentation/ro-csvi/hikash...shop-category-import (and the full field list at rolandd.com/documentation/ro-csvi/hikashop/available-fields ).

It's the most established CSV import tool in the Joomla ecosystem and it's what most merchants use when they need this kind of granular import.

3) One-shot maintenance: HikaShop Migration tool or direct SQL

If it's a single one-shot job and you don't want to bring in a new extension, you could use a direct SQL on #__hikashop_category in phpMyAdmin or via a small script. The relevant columns are category_meta_description, category_keywords, category_page_title, category_canonical, category_alias, category_description. Quick, but requires some proficiency with PHPMyAdmin.

In your case, if you have many categories and per-row distinct meta values that you want to maintain over time, RO CSVi is probably the most efficient answer. If it's a one-time fix on a known set of categories with a shared SEO pattern, Massactions handles it without any extra extension.
26 Mar 2026 10:54

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

Category: Checkout

Hello,

We have updated the Price Calculations plugin to version 2.4.1 with two new properties in the calculation metadata that should help you with your cart template override.

`$product->price_calculation->tags` is an associative array of all the tags that were replaced in the formula and their resolved values. For example, if your formula is `{price} + {ecotasa} + {montaje} * {cart_product_quantity}`, you would get:
[
    'price' => 213.63,
    'ecotasa' => 1.81,
    'montaje' => 23.95,
    'cart_product_quantity' => 2
]
This way, you can check if `cart_product_quantity` is present in the tags and use its value to determine which fields scale with quantity and which are flat fees.

`$product->price_calculation->tax_id` contains the tax category ID that was used for the calculation. You can use it with the currency class to compute taxed prices for individual field values in your template, for example:
$currencyClass = hikashop_get('class.currency');
$taxedValue = $currencyClass->getTaxedPrice($field->raw_value, hikashop_getZone(), $product->price_calculation->tax_id);

You can download the updated plugin from the marketplace page.
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.
Displaying 1 - 20 out of 29 results.
Time to create page: 0.209 seconds
Powered by Kunena Forum