Skip to content

Error

FX-SCH-A-000391: The charge reason code must be an allowed code

In short

Error: fails the selected checks.

FX-SCH-A-000391 means an invoice-level charge has a non-empty reason code (BT-105) without a listID attribute, and that code is not allowed by the BASIC WL profile. Replace it with an allowed code for the actual charge, then export and recheck the file.

On this page

What it means

In the BASIC WL profiles of Factur-X and ZUGFeRD, the rule checks ram:ReasonCode without a listID attribute inside a header ram:SpecifiedTradeAllowanceCharge (BG-21) where ram:ChargeIndicator/udt:Indicator is "true". A non-empty value must match the profile's corresponding charge reason list. An empty value passes this check. A present but empty listID attribute is not the same as an absent attribute. The text reason (BT-104) is not checked here.

Why it matters

A shared reason code list gives software a consistent meaning for the charge code.

How to fix it

Check the affected charge's reason code (BT-105). For a ram:ReasonCode without listID, use an allowed BASIC WL code that accurately describes the charge. Do not add an empty listID merely to avoid this check. If your software writes an unsupported code, ask its supplier to correct the export. Export and recheck the file.

Once the file is corrected, check it again for free: Validate a ZUGFeRD invoice

Or fix the invoice in a form and download the corrected file, for 1 credit: Fix a rejected e-invoice Beta

The rule as published

Value of 'ram:ReasonCode[not (@listID)]' is not allowed.

Where this rule applies

Rule set Version
Factur-X 1.09 BASIC WL 1.0.9-2
ZUGFeRD 2.5 BASIC WL 2.5.2
Rule text from phive-rules 4.6.4.

Check your file

Drop your e-invoice to see whether FX-SCH-A-000391 still fails, and which other rules do.

Updated 6 November 2026