Account
English

DK-R-004: When specifying non-VAT Taxes for Danish customers, Danish suppliers MUST use the…

Peppol national rule · Error · UBL, CII

StandardPeppol BIS Billing 3.0 country rules (NL, DE, IT, SE, DK, NO, GR, IS)CountryDenmarkSeverityError: the invoice is rejectedSyntaxUBL, CIIApplies toOnly when the seller (or for some rules the buyer) is in the named country: the rule is triggered by the country code of the party. Dutch rules implement NLCIUS, German rules the XRechnung requirements inside Peppol.

Official rule text

[DK-R-004] When specifying non-VAT Taxes for Danish customers, Danish suppliers MUST use the AllowanceChargeReasonCode="ZZZ" and MUST be specified in AllowanceChargeReason; Either as the 4-digit Tax category or must include a #, but the # is not allowed as first and last character

Why this error occurs

The element or combination is not allowed in this context. The file contains something the standard forbids: an element that must not be repeated, a value that contradicts another field, or data that belongs to a different profile.

How to fix it

Remove the offending element or make the two fields consistent as described in the rule text. If your software adds the element automatically, check for a profile setting (e.g. "EN 16931" vs "EXTENDED") or an export option that suppresses it.

What the validator checks

Checked element (context):

UBL

cac:AllowanceCharge[$DKSupplierCountry = 'DK' and $DKCustomerCountry = 'DK']

Test (XPath):

not((cbc:AllowanceChargeReasonCode = 'ZZZ')
						and not(((string-length(normalize-space(cbc:AllowanceChargeReason/text())) = 4)
								and (number(cbc:AllowanceChargeReason) >= 0)
								and (number(cbc:AllowanceChargeReason) <= 9999)) or
								(((cbc:AllowanceChargeReason and contains(cbc:AllowanceChargeReason, '#')
                                  and not(starts-with(cbc:AllowanceChargeReason, '#'))
                                  and not(ends-with(cbc:AllowanceChargeReason, '#')))) )
                               )
				 )

CII

rsm:CrossIndustryInvoice[$DKSupplierCountry = 'DK']

Test (XPath):

not((($DKCustomerCountry = 'DK') and (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:ReasonCode = 'ZZZ'))
                              and not ((string-length(normalize-space(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason/text())) = 4
                                       and number(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason) >= 0
                                       and number(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason <= 9999)) or
                                       (((rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason
                                                                          and contains(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason, '#')
                                                                          and not(starts-with(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason, '#'))
                                                                          and not(ends-with(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeSettlement/ram:SpecifiedTradeAllowanceCharge/ram:Reason, '#'))))    )
                                      )
                              )

Check your invoice

Drop your XML or PDF on the validator and every failed rule is linked to its page here. Free, no account, the file is not stored.

Check your invoice →

Same check via API:

curl -F file=@invoice.xml https://einvoicechecker.com/v1/validate

Related rules

Frequently asked questions

What does DK-R-004 mean?

DK-R-004 is a peppol national rule: When specifying non-VAT Taxes for Danish customers, Danish suppliers MUST use the AllowanceChargeReasonCode="ZZZ" and MUST be specified in AllowanceChargeReason; Either as the 4-digit Tax category or must include a #, but the # is not allowed as first and last character

Will my invoice be rejected because of DK-R-004?

Yes. DK-R-004 is flagged "fatal"; validators (KoSIT, Peppol access points, the German ZRE/OZG-RE portals, KSeF) reject the invoice until it is fixed.

Which formats does DK-R-004 apply to?

Only when the seller (or for some rules the buyer) is in the named country: the rule is triggered by the country code of the party. Dutch rules implement NLCIUS, German rules the XRechnung requirements inside Peppol. Syntax: UBL and CII.

Source: Peppol BIS Billing 3.0.20 national rules (November 2025). Catalogue generated from the official rule sets on 2026-10-15.