Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2024 q4 release #164

Merged
merged 168 commits into from
Nov 18, 2024
Merged
Changes from 1 commit
Commits
Show all changes
168 commits
Select commit Hold shift + click to select a range
d5cfc19
Test
phax Jul 14, 2023
fbf565d
added de rules and first test file
lkumai Jul 14, 2023
274f5de
added two rules two structure
lkumai Jul 16, 2023
409640a
added de-r-002
lkumai Jul 17, 2023
992394d
fixed wrong id
lkumai Jul 17, 2023
5ce678b
fixed wrong customizationid
lkumai Jul 17, 2023
0f763d3
wip fixed validation errors
lkumai Jul 17, 2023
410d1cd
fixed wrong namespace
lkumai Jul 17, 2023
11822d8
test de-r-001 fixed. test de-r-003 added
lkumai Jul 17, 2023
fbdf06c
wip: more tests added
lkumai Jul 17, 2023
29f9a42
fixed test
lkumai Jul 17, 2023
f9e0757
wip removed email
lkumai Jul 17, 2023
2dae8ac
removed email address
lkumai Jul 17, 2023
d171e06
added updated german ruleset
lkumai Jul 17, 2023
62e0213
added rule description
lkumai Jul 17, 2023
ea92289
unit test de-r-014 added
lkumai Jul 17, 2023
50d13fd
remove whitespace
bdewein Jul 18, 2023
376ab4e
add DE-R-015
bdewein Jul 18, 2023
7ea9aae
add DE-R-017 UBL Inv
bdewein Jul 18, 2023
58ea682
add DE-R-018 UBL Inv
bdewein Jul 18, 2023
d0d0d24
add DE-R-019
bdewein Jul 18, 2023
a53ebbb
add DE-R-020 UBL Inv
bdewein Jul 18, 2023
d659309
add DE-R-022 UBL Inv
bdewein Jul 18, 2023
a157696
fix typo
bdewein Jul 18, 2023
f50d3f6
add DE-R-023-1 and DE-R-23-2
bdewein Jul 18, 2023
f7bd609
set error to warning in DE-R-017, DE-R-019, DE-R-20
bdewein Jul 18, 2023
8565ed0
add DE-R-024-1 and DE-R-024-2
bdewein Jul 18, 2023
3e009b4
add DE-R-025-1 and DE-R-025-2 UBL Inv
bdewein Jul 18, 2023
d22ef7a
add DE-R-26 UBL Inv
bdewein Jul 18, 2023
72ad7a3
fix customization id
bdewein Jul 18, 2023
32c6845
add DE-R-027 UBL Inv
bdewein Jul 18, 2023
9af8441
add DE-R-028 UBL Inv
bdewein Jul 18, 2023
556b3d8
add DE-R-030 UBL Inv
bdewein Jul 18, 2023
558a3b8
add DE-R-31 UBL Inv
bdewein Jul 18, 2023
150bb6a
add de-r-014 to structure
lkumai Jul 20, 2023
3f5a017
added rules to structure
lkumai Jul 20, 2023
1bf99a7
added de-r-001 to structure
lkumai Jul 20, 2023
06f456f
fixed type
lkumai Jul 20, 2023
6def475
moved de-r-001 in structures
lkumai Jul 20, 2023
8f85a28
minor fix
lkumai Jul 20, 2023
7915df8
replaced test bg-16
lkumai Jul 20, 2023
ffced00
removed mutator command
lkumai Jul 20, 2023
c09c13f
fixed test
lkumai Jul 20, 2023
5415031
corrected test file
lkumai Jul 20, 2023
61ec70f
added new de-r-016
lkumai Jul 20, 2023
5d0e453
fixed de-r-020
lkumai Jul 20, 2023
297a3be
removed test entry
lkumai Jul 20, 2023
5cfeebe
Delete build-and-deploy-barnch.yml
phax Jul 20, 2023
f77f079
Merge branch 'master' of https://github.com/itplr-kosit/peppol-bis-in…
lkumai Jul 20, 2023
eb16dc9
Update build-and-deploy-master.yml
phax Jul 20, 2023
bdff981
Create build2.sh
phax Jul 20, 2023
4deb14a
Update build2.sh
phax Jul 20, 2023
7a8d94a
Update UBL-IN_DE-R-001.xml
phax Jul 20, 2023
6215bd2
Update UBL-IN_DE-R-001.xml
phax Jul 20, 2023
458d0c6
Update UBL-IN_DE-R-001.xml
phax Jul 20, 2023
bc7b903
Update UBL-IN_DE-R-001.xml
phax Jul 20, 2023
31f88e0
edit description
lkumai Jul 21, 2023
16518f5
fixed address scheme
lkumai Jul 21, 2023
4616e62
add description
lkumai Jul 21, 2023
b75154d
reduced error assert to one per test
lkumai Jul 21, 2023
5a3cb7d
modified rules in structure
lkumai Jul 24, 2023
163a4e9
modify for only one rule per assert
lkumai Jul 24, 2023
aa94460
modifed test
lkumai Jul 24, 2023
1579a4f
fixed xml structure. replaced tests
lkumai Jul 24, 2023
a95c534
replaced tests
lkumai Jul 24, 2023
acd04f8
added test
lkumai Jul 24, 2023
9e34b0c
modified tests
lkumai Jul 24, 2023
6db9c8f
checked references
lkumai Jul 24, 2023
0f57199
wip replaced tests
lkumai Jul 24, 2023
72d7e71
corrected tests
lkumai Jul 24, 2023
30a124b
corrected test
lkumai Jul 24, 2023
0c538e1
corrected test
lkumai Jul 24, 2023
966d8f7
corrected test and referenced
lkumai Jul 24, 2023
eb133cd
Merge branch 'master' of https://github.com/itplr-kosit/peppol-bis-in…
lkumai Jul 24, 2023
a10157d
fixed wrong type code
lkumai Jul 24, 2023
589fab2
fixed wrong references
lkumai Jul 24, 2023
a135ce2
added second scope
lkumai Jul 24, 2023
d68dfcd
Merge branch 'master' of https://github.com/lkumai/peppol-bis-invoice-3
lkumai Jul 24, 2023
8dcf2bf
fixed test
lkumai Jul 24, 2023
c14e303
try fix
bdewein Jul 25, 2023
f90cc8d
set warning to error
bdewein Jul 25, 2023
20d8115
remove misplaced tag
bdewein Jul 25, 2023
d7d27b0
remove test assert description
bdewein Jul 25, 2023
366f784
reduce test file to relevant elements and add references
bdewein Jul 25, 2023
1845725
test no references
bdewein Jul 25, 2023
d368380
add references
bdewein Jul 25, 2023
c8f778f
test
bdewein Jul 25, 2023
36e7252
remove reference from creditnote
bdewein Jul 25, 2023
4b8a269
add reference
bdewein Jul 25, 2023
4a64b6c
update with XRechnung schematron version 2.0.0
bdewein Jul 25, 2023
13db8a5
various changes
bdewein Jul 25, 2023
6aff14e
Make country-specific rule NL-R-008 domestic-only (PB3-UBL)
tjeb Mar 19, 2024
38e4612
Make country-specific rule NL-R-008 domestic-only (PB3-CII)
tjeb Mar 19, 2024
113dc60
POACC-547
MartinForsberg-Ecru Aug 28, 2024
a9842e3
Revert "Update build2.sh"
bdewein Aug 30, 2024
79f360a
Revert "Create build2.sh"
bdewein Aug 30, 2024
367248c
Revert "Update build-and-deploy-master.yml"
bdewein Aug 30, 2024
276d874
Revert "Delete build-and-deploy-barnch.yml"
bdewein Aug 30, 2024
966d84f
Revert "Test"
bdewein Aug 30, 2024
30d6172
add fatal check on Invoices with external reference attachment URI
Sep 1, 2024
64bb404
Merge pull request #127 from itplr-kosit/master
MartinForsberg-Ecru Sep 2, 2024
84d39b6
Merge pull request #154 from OpenPEPPOL/POACC-547
MartinForsberg-Ecru Sep 2, 2024
86711bf
deleted the duplicate variables
MartinForsberg-Ecru Sep 2, 2024
fdca25f
Merge pull request #155 from OpenPEPPOL/POACC-547b
MartinForsberg-Ecru Sep 2, 2024
3bfa122
POACC-548
MartinForsberg-Ecru Sep 2, 2024
a9f4db1
added to code list page
MartinForsberg-Ecru Sep 2, 2024
604e66b
Merge pull request #156 from OpenPEPPOL/POACC-548
MartinForsberg-Ecru Sep 2, 2024
d831564
Quick-fix of release notes
MartinForsberg-Ecru Sep 2, 2024
d9ea6ef
remove test description
bdewein Sep 3, 2024
d600747
add workflow
bdewein Sep 4, 2024
d990746
add workflow
bdewein Sep 4, 2024
ca59205
delete workflow
bdewein Sep 4, 2024
b056d00
update to improved validator
bdewein Sep 4, 2024
c05dbb6
update build2.sh to improved validator
bdewein Sep 4, 2024
2c8e990
fix typo
bdewein Sep 4, 2024
73b7635
fix error level in test DE-R-027
bdewein Sep 5, 2024
2e51257
fix typo in referenced rule
bdewein Sep 5, 2024
ba941b7
move assertion description
bdewein Sep 5, 2024
de175ed
fix typo
bdewein Sep 5, 2024
d8dd724
add description, remove unwanted instructions
bdewein Sep 5, 2024
b9a19fd
add file
bdewein Sep 5, 2024
ad346f7
test
bdewein Sep 5, 2024
3983476
delete file
bdewein Sep 6, 2024
90665c5
Update build.sh
jerouris Sep 6, 2024
dad7564
Merge branch 'OpenPEPPOL:master' into master
bdewein Sep 10, 2024
96a05af
Merge branch 'OpenPEPPOL:master' into development-nrs
bdewein Sep 10, 2024
a5e2fd9
Using phelger/vefa-validator
phax Sep 10, 2024
f1a36e4
Merge remote-tracking branch 'upstream/2024-q4-dev'
phax Sep 10, 2024
1228970
Merge remote-tracking branch 'upstream/2024-q4-dev' into development-nrs
phax Sep 10, 2024
6e5e247
Re-added Description
phax Sep 10, 2024
c96d646
Merge pull request #1 from itplr-kosit/development-nrs
phax Sep 10, 2024
eb6cb98
Merge pull request #157 from itplr-kosit/master
MartinForsberg-Ecru Sep 11, 2024
808f9cc
POAC-547 (improved documentation)
MartinForsberg-Ecru Sep 11, 2024
c34061b
Merge pull request #158 from OpenPEPPOL/POAC-547c
MartinForsberg-Ecru Sep 11, 2024
a4cf896
Release note Make country-specific rule NL-R-008 domestic (NL->NL) only
Sep 13, 2024
159bb7d
Merge branch '2024-q4-dev' into POACC-746
jerouris Sep 18, 2024
ab1b255
Merge pull request #159 from OpenPEPPOL/POACC-746
jerouris Sep 18, 2024
38647a0
Merge branch '2024-q4-dev' into POACC-508
jerouris Sep 18, 2024
165fd6b
Merge pull request #153 from OpenPEPPOL/POACC-508
jerouris Sep 18, 2024
f644726
Merge pull request #147 from peppolautoriteit-nl/NL-R-008_domestic_only
jerouris Sep 18, 2024
c63ff10
Update buildconfig.xml to contain the NL unit tests
jerouris Sep 18, 2024
f268bcc
Update project.xml
jerouris Sep 18, 2024
a72bf61
fix zip build issue
jerouris Sep 19, 2024
b892cfc
update release note
Sep 23, 2024
8f65028
compliance on payload
Sep 24, 2024
a48a185
fix release notes and spelling mistake
Sep 24, 2024
872d504
Release note change on formatting text
Sep 24, 2024
4f604b7
POACC-777
MartinForsberg-Ecru Oct 28, 2024
ef880ec
POACC-781 (SLL deleted, SLE added in currency code rule)
MartinForsberg-Ecru Oct 28, 2024
e030538
Allow 326 and 384 for DE only
MartinForsberg-Ecru Oct 28, 2024
f1ec3b7
Updated documentation. Took out 326 and 384.
MartinForsberg-Ecru Oct 28, 2024
13cf4c1
Fixing the text of the enveloping rule
MartinForsberg-Ecru Oct 28, 2024
710b0ae
Editorial
MartinForsberg-Ecru Oct 28, 2024
3fbe7ad
Revert "add fatal check on Invoices with external reference attachme…
jerouris Oct 29, 2024
8c8b8b7
validation artifacts and codelist
Oct 29, 2024
877ccff
Fixed typo
MartinForsberg-Ecru Oct 31, 2024
bec198d
Took out invoice types which are only allowed for DE
MartinForsberg-Ecru Oct 31, 2024
2b71499
Ascii-doc typo
MartinForsberg-Ecru Oct 31, 2024
5d35102
Merge pull request #162 from OpenPEPPOL/validation-artefacts-and-code…
Zumbala Oct 31, 2024
393eb62
Merge branch '2024-q4-release' into revert-153-POACC-508
Zumbala Oct 31, 2024
8aa35c5
Merge pull request #161 from OpenPEPPOL/revert-153-POACC-508
Zumbala Oct 31, 2024
6c84a9e
Fixed formatting issue with unwanted linebreaks.
MartinForsberg-Ecru Nov 7, 2024
41c72a5
Updating code lists with last EN code release
midran Nov 13, 2024
4e51f83
Update VATEX.xml
midran Nov 14, 2024
54652cc
checkCodiceIPA removed whitespace in element content
Nov 14, 2024
b4142b1
Merge branch '2024-q4-release' of https://github.com/OpenPEPPOL/peppo…
Nov 14, 2024
2599110
Review bugs
Nov 15, 2024
dd76bd0
Missing code 9959 in PEPPOL schematron
Nov 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
added de rules and first test file
lkumai committed Jul 14, 2023
commit fbf565dbeb8c3f3762cff71b796de0ddd9ab5ec6
1 change: 1 addition & 0 deletions rules/buildconfig.xml
Original file line number Diff line number Diff line change
@@ -14,6 +14,7 @@
<testfolder>unit-UBL-NO</testfolder>
<testfolder>unit-UBL-IT</testfolder>
<testfolder>unit-UBL-DK</testfolder>
<testfolder>unit-UBL-DE</testfolder>
<testfolder>unit-UBL-SE</testfolder>
<testfolder>unit-UBL-GR</testfolder>

126 changes: 126 additions & 0 deletions rules/sch/PEPPOL-EN16931-UBL.sch
Original file line number Diff line number Diff line change
@@ -653,6 +653,132 @@ Last update: 2023 May release 3.0.15.
<assert id="NL-R-009" test="exists(/*/cac:OrderReference/cbc:ID)" flag="fatal">[NL-R-009] For suppliers in the Netherlands, if an order line reference (cac:OrderLineReference/cbc:LineID) is used, there must be an order reference on the document level (cac:OrderReference/cbc:ID)</assert>
</rule>
</pattern>
<!-- German rules -->
<!-- German rules -->
<pattern>
<let name="supplierCountryIsDE"
value="(upper-case(normalize-space(/*/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress/cac:Country/cbc:IdentificationCode)) = 'DE')"/>
<let name="customerCountryIsDE"
value="(upper-case(normalize-space(/*/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress/cac:Country/cbc:IdentificationCode)) = 'DE')"/>
<let name="XR-SKONTO-REGEX"
value="'#(SKONTO|VERZUG)#TAGE=([0-9]+#PROZENT=[0-9]+\.[0-9]{2})(#BASISBETRAG=-?[0-9]+\.[0-9]{2})?#$'"/>
<let name="XR-EMAIL-REGEX"
value="'^[a-zA-Z0-9!#\$%&amp;&#34;*+/=?^_`{|}~-]+(\.[a-zA-Z0-9!#\$%&amp;&#34;*+/=?^_`{|}~-]+)*@([a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$'"/>
<let name="XR-TELEPHONE-REGEX" value="'.*([0-9].*){3,}.*'"/>
<rule context="(/Invoice | /CreditNote)[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="cac:PaymentMeans" flag="fatal" id="DE-R-001">BR-DE-1 translation</assert>
<assert test="cbc:BuyerReference[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-015">BR-DE-15 translation</assert>
<let name="supportedVATCodes"
value="('S', 'Z', 'E', 'AE', 'K', 'G', 'L', 'M')"/>
<let name="BT-31orBT-32Path"
value="cac:AccountingSupplierParty/cac:Party/cac:PartyTaxScheme/cbc:CompanyID[boolean(normalize-space(.))]"/>
<let name="BT-95-UBL-Inv"
value="cac:AllowanceCharge/cac:TaxCategory/cbc:ID[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'false' and following-sibling::cac:TaxScheme/cbc:ID = 'VAT']"/>
<let name="BT-95-UBL-CN"
value="cac:AllowanceCharge/cac:TaxCategory/cbc:ID[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'false']"/>
<let name="BT-102"
value="cac:AllowanceCharge/cac:TaxCategory/cbc:ID[ancestor::cac:AllowanceCharge/cbc:ChargeIndicator = 'true']"/>
<let name="BT-151"
value="(cac:InvoiceLine | cac:CreditNoteLine)/cac:Item/cac:ClassifiedTaxCategory/cbc:ID"/>
<!-- If one of BT-95, BT-102, BT-151 is in List of supportedVATCodes then either BG-11=cac:TaxRepresentativeParty or $BT-31orBT-32Path has to exist -->
<assert test=" (not( ($BT-95-UBL-Inv = $supportedVATCodes or $BT-95-UBL-CN = $supportedVATCodes) or ($BT-102 = $supportedVATCodes) or ($BT-151 = $supportedVATCodes) ) or (cac:TaxRepresentativeParty, $BT-31orBT-32Path)) "
flag="fatal"
id="DE-R-016">BR-DE-16 translation</assert>
<let name="supportedInvAndCNTypeCodes"
value="('326', '380', '384', '389', '381', '875', '876', '877')"/>
<assert test="cbc:InvoiceTypeCode = $supportedInvAndCNTypeCodes or cbc:CreditNoteTypeCode = $supportedInvAndCNTypeCodes"
flag="warning"
id="DE-R-017">BR-DE-17 translation</assert>
<assert test="every $line in cac:PaymentTerms/cbc:Note[1]/tokenize(. , '(\r?\n)')[starts-with( normalize-space(.) , '#')] satisfies matches ( normalize-space ($line), $XR-SKONTO-REGEX) and matches( cac:PaymentTerms/cbc:Note[1]/tokenize(. , '#.+#')[last()], '^\s*\n' )"
flag="fatal"
id="DE-R-018">BR-DE-18 translation</assert>
<assert test="count(cac:AdditionalDocumentReference) = count(cac:AdditionalDocumentReference[not(./cac:Attachment/cbc:EmbeddedDocumentBinaryObject/@filename = preceding-sibling::cac:AdditionalDocumentReference/cac:Attachment/cbc:EmbeddedDocumentBinaryObject/@filename)])"
flag="fatal"
id="DE-R-022">BR-DE-22 translation</assert>
<assert test="((not(cbc:InvoiceTypeCode = 384 or cbc:CreditNoteTypeCode = 384) or (cac:BillingReference/cac:InvoiceDocumentReference)))"
flag="warning"
id="DE-R-026">BR-DE-26 translation</assert>
<assert test="not(cac:PaymentMeans/cac:PaymentMandate) or (cac:AccountingSupplierParty/cac:Party/cac:PartyIdentification/cbc:ID[@schemeID='SEPA'] | cac:PayeeParty/cac:PartyIdentification/cbc:ID[@schemeID='SEPA'])"
flag="fatal"
id="DE-R-030">BR-DE-30 translation</assert>
<assert test="not(cac:PaymentMeans/cac:PaymentMandate) or (cac:PaymentMeans/cac:PaymentMandate/cac:PayerFinancialAccount/cbc:ID)"
flag="fatal"
id="DE-R-031">BR-DE-31 translation</assert>
</rule>
<rule context="(/Invoice/cac:AccountingSupplierParty | /CreditNote/cac:AccountingSupplierParty)[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="cac:Party/cac:Contact" flag="fatal" id="DE-R-002">BR-DE-2 translation</assert>
</rule>
<rule context="(/Invoice/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress | /CreditNote/cac:AccountingSupplierParty/cac:Party/cac:PostalAddress)[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="cbc:CityName[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-003">BR-DE-3 translation</assert>
<assert test="cbc:PostalZone[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-004">BR-DE-4 translation</assert>
</rule>
<rule context="(/Invoice/cac:AccountingSupplierParty/cac:Party/cac:Contact | /CreditNote/cac:AccountingSupplierParty/cac:Party/cac:Contact)[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="cbc:Name[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-005">BR-DE-5 translation</assert>
<assert test="cbc:Telephone[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-006">BR-DE-6 translation</assert>
<assert test="cbc:ElectronicMail[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-007">BR-DE-7 translation</assert>
<assert test="matches(normalize-space(cbc:Telephone), $XR-TELEPHONE-REGEX)"
flag="warning"
id="DE-R-027">BR-DE-27 translation</assert>
<assert test="matches(normalize-space(cbc:ElectronicMail), $XR-EMAIL-REGEX)"
flag="warning"
id="DE-R-028">BR-DE-28 translation</assert>
</rule>
<rule context="(/Invoice/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress | /CreditNote/cac:AccountingCustomerParty/cac:Party/cac:PostalAddress)[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="cbc:CityName[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-008">BR-DE-8 translation</assert>
<assert test="cbc:PostalZone[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-009">BR-DE-9 translation</assert>
</rule>
<rule context="(/Invoice/cac:Delivery/cac:DeliveryLocation/cac:Address | /CreditNote/cac:Delivery/cac:DeliveryLocation/cac:Address)[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="cbc:CityName[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-010">BR-DE-10 translation</assert>
</rule>
<rule context="(/Invoice/cac:PaymentMeans[cbc:PaymentMeansCode = (30,58)] | /CreditNote/cac:PaymentMeans[cbc:PaymentMeansCode = (30,58)])[$supplierCountryIsDE and $customerCountryIsDE]">
<!-- check for PaymentMeansCode 30 was not added by purpose in 2.1.1. -->
<assert test="not(cbc:PaymentMeansCode = '58') or matches(normalize-space(replace(cac:PayeeFinancialAccount/cbc:ID, '([ \n\r\t\s])', '')), '^[A-Z]{2}[0-9]{2}[a-zA-Z0-9]{0,30}$') and xs:integer(string-join(for $cp in string-to-codepoints(concat(substring(normalize-space(replace(cac:PayeeFinancialAccount/cbc:ID, '([ \n\r\t\s])', '')),5),upper-case(substring(normalize-space(replace(cac:PayeeFinancialAccount/cbc:ID, '([ \n\r\t\s])', '')),1,2)),substring(normalize-space(replace(cac:PayeeFinancialAccount/cbc:ID, '([ \n\r\t\s])', '')),3,2))) return (if($cp &gt; 64) then string($cp - 55) else string($cp - 48)),'')) mod 97 = 1"
flag="warning"
id="DE-R-019">BR-DE-19 translation</assert>
<assert test="cac:PayeeFinancialAccount" flag="fatal" id="DE-R-023-1">BR-DE-23-a translation</assert>
<assert test="not(cac:CardAccount) and not(cac:PaymentMandate)"
flag="fatal"
id="DE-R-023-2">BR-DE-23-b translation</assert>
</rule>
<rule context="(/Invoice/cac:PaymentMeans[cbc:PaymentMeansCode = (48,54,55)] |/CreditNote/cac:PaymentMeans[cbc:PaymentMeansCode = (48,54,55)])[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="cac:CardAccount" flag="fatal" id="DE-R-024-1">BR-DE-24-a translation</assert>
<assert test="not(cac:PayeeFinancialAccount) and not(cac:PaymentMandate)"
flag="fatal"
id="DE-R-024-2">BR-DE-24-b translation</assert>
</rule>
<rule context="(/Invoice/cac:PaymentMeans[cbc:PaymentMeansCode = 59] | /CreditNote/cac:PaymentMeans[cbc:PaymentMeansCode = 59])[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="not(cbc:PaymentMeansCode = '59') or matches(normalize-space(replace(cac:PaymentMandate/cac:PayerFinancialAccount/cbc:ID, '([ \n\r\t\s])', '')), '^[A-Z]{2}[0-9]{2}[a-zA-Z0-9]{0,30}$') and xs:decimal(string-join(for $cp in string-to-codepoints(concat(substring(normalize-space(replace(cac:PaymentMandate/cac:PayerFinancialAccount/cbc:ID, '([ \n\r\t\s])', '')),5),upper-case(substring(normalize-space(replace(cac:PaymentMandate/cac:PayerFinancialAccount/cbc:ID, '([ \n\r\t\s])', '')),1,2)),substring(normalize-space(replace(cac:PaymentMandate/cac:PayerFinancialAccount/cbc:ID, '([ \n\r\t\s])', '')),3,2))) return (if($cp &gt; 64) then string($cp - 55) else string($cp - 48)),'')) mod 97 = 1"
flag="warning"
id="DE-R-020">BR-DE-20 translation</assert>
<assert test="cac:PaymentMandate" flag="fatal" id="DE-R-025-1">BR-DE-25-a translation</assert>
<assert test="not(cac:PayeeFinancialAccount) and not(cac:CardAccount)"
flag="fatal"
id="DE-R-025-2">BR-DE-25-b translation</assert>
</rule>
<rule context="(/Invoice/cac:TaxTotal/cac:TaxSubtotal | /CreditNote/cac:TaxTotal/cac:TaxSubtotal)[$supplierCountryIsDE and $customerCountryIsDE]">
<assert test="cac:TaxCategory/cbc:Percent[boolean(normalize-space(.))]"
flag="fatal"
id="DE-R-014">BR-DE-14 translation</assert>
</rule>
</pattern>
<!-- Restricted code lists and formatting -->
<pattern>
<let name="ISO3166" value="tokenize('AD AE AF AG AI AL AM AO AQ AR AS AT AU AW AX AZ BA BB BD BE BF BG BH BI BJ BL BM BN BO BQ BR BS BT BV BW BY BZ CA CC CD CF CG CH CI CK CL CM CN CO CR CU CV CW CX CY CZ DE DJ DK DM DO DZ EC EE EG EH ER ES ET FI FJ FK FM FO FR GA GB GD GE GF GG GH GI GL GM GN GP GQ GR GS GT GU GW GY HK HM HN HR HT HU ID IE IL IM IN IO IQ IR IS IT JE JM JO JP KE KG KH KI KM KN KP KR KW KY KZ LA LB LC LI LK LR LS LT LU LV LY MA MC MD ME MF MG MH MK ML MM MN MO MP MQ MR MS MT MU MV MW MX MY MZ NA NC NE NF NG NI NL NO NP NR NU NZ OM PA PE PF PG PH PK PL PM PN PR PS PT PW PY QA RE RO RS RU RW SA SB SC SD SE SG SH SI SJ SK SL SM SN SO SR SS ST SV SX SY SZ TC TD TF TG TH TJ TK TL TM TN TO TR TT TV TW TZ UA UG UM US UY UZ VA VC VE VG VI VN VU WF WS YE YT ZA ZM ZW 1A XI', '\s')"/>
Loading