Scheme identifier is missing from the buyer electronic address

Error BR-63 EN 16931

The Buyer electronic address (BT-49) shall have a Scheme identifier.

Mandatory rule: As long as it is violated, the invoice is invalid and will be rejected by validators.
What is wrong

If ram:BuyerTradeParty contains an electronic address through ram:URIUniversalCommunication, its ram:URIID is missing a non-empty schemeID attribute. The buyer electronic address identifier (BT-49) is therefore incomplete.

What the rule means

The scheme identifier indicates which scheme is used to interpret the buyer’s electronic address.

Affected fields BT-49
Please add the scheme identifier to the buyer electronic address

The scheme identifier is missing from the buyer’s electronic address. Add it to the associated ram:URIID.

What to do
  1. Add a non-empty schemeID attribute to the ram:URIID of the buyer address.
  2. Check the call to SetBuyerElectronicAddress(...).
  3. Generate the invoice again and validate it once more.
What it looks like
✗ Triggers the message
<ram:BuyerTradeParty>
  <ram:URIUniversalCommunication>
    <ram:URIID schemeID="">adresse</ram:URIID>
  </ram:URIUniversalCommunication>
</ram:BuyerTradeParty>
✓ Correct
<ram:BuyerTradeParty>
  <ram:URIUniversalCommunication>
    <ram:URIID schemeID="EM">adresse</ram:URIID>
  </ram:URIUniversalCommunication>
</ram:BuyerTradeParty>
Check in FactoorSharp
  • FacturXInvoice.BuyerElectronicAddress (BT-49)
  • FacturXInvoice.SetBuyerElectronicAddress(address, electronicAddressSchemeID) (BT-49)
  • Party.ElectronicAddress (BuyerTradeParty: BT-49)
Good to know

The rule is also satisfied if no ram:URIUniversalCommunication is present for the buyer.

Technical details

The test passes if the normalized schemeID attribute of the first ram:URIID is non-empty, or if no ram:URIUniversalCommunication exists for the buyer.

Where the rule applies

The rule applies to the first ram:URIUniversalCommunication inside ram:BuyerTradeParty and the schemeID attribute of its ram:URIID.

Context (rule/@context)
/rsm:CrossIndustryInvoice
Test expression (assert/@test)
normalize-space(rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ ram:BuyerTradeParty/ram:URIUniversalCommunication[1]/ram:URIID/@schemeID) != '' or not (rsm:SupplyChainTradeTransaction/ram:ApplicableHeaderTradeAgreement/ ram:BuyerTradeParty/ram:URIUniversalCommunication)