mock-einvoice 0.1.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (415) hide show
  1. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/CHANGELOG.md +78 -0
  2. {mock_einvoice-0.1.0/mock_einvoice.egg-info → mock_einvoice-0.3.0}/PKG-INFO +92 -14
  3. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/README.md +91 -13
  4. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0/mock_einvoice.egg-info}/PKG-INFO +92 -14
  5. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mock_einvoice.egg-info/SOURCES.txt +4 -0
  6. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/__init__.py +5 -4
  7. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/model.py +37 -0
  8. mock_einvoice-0.3.0/mockeinvoice/order.py +291 -0
  9. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/__init__.py +15 -11
  10. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/peppol.py +4 -37
  11. mock_einvoice-0.3.0/mockeinvoice/rules/peppol_national.py +968 -0
  12. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/server.py +116 -7
  13. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/supplier.py +123 -5
  14. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/pyproject.toml +1 -1
  15. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/__init__.py +17 -0
  16. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_buyer.py +8 -8
  17. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_model.py +56 -1
  18. mock_einvoice-0.3.0/tests/test_order.py +410 -0
  19. mock_einvoice-0.3.0/tests/test_peppol_national_rules.py +691 -0
  20. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_peppol_rules.py +29 -35
  21. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_rules.py +9 -10
  22. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_server.py +180 -9
  23. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_supplier.py +5 -7
  24. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_upstream.py +15 -17
  25. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/upstream.py +3 -1
  26. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tools/peppol-files.tsv +66 -0
  27. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/LICENSE +0 -0
  28. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/MANIFEST.in +0 -0
  29. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mock_einvoice.egg-info/dependency_links.txt +0 -0
  30. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mock_einvoice.egg-info/entry_points.txt +0 -0
  31. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mock_einvoice.egg-info/top_level.txt +0 -0
  32. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/__main__.py +0 -0
  33. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/buyer.py +0 -0
  34. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/response.py +0 -0
  35. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/LICENSE-EUPL-1.2.txt +0 -0
  36. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/calculation.py +0 -0
  37. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/codelists.py +0 -0
  38. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/en16931.py +0 -0
  39. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/en16931_codes.py +0 -0
  40. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/en16931_ubl.py +0 -0
  41. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/en16931_vat.py +0 -0
  42. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/german.py +0 -0
  43. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/peppol_de.py +0 -0
  44. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/peppol_response.py +0 -0
  45. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/published.py +0 -0
  46. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/tree.py +0 -0
  47. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/ublsyntax.py +0 -0
  48. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/untdid.py +0 -0
  49. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/rules/xrechnung.py +0 -0
  50. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/specification.py +0 -0
  51. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/mockeinvoice/ubl.py +0 -0
  52. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/setup.cfg +0 -0
  53. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/FT G2G_TD01 con Allegato, Bonifico e Split Payment.xml +0 -0
  54. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/LICENSE-EUPL-1.2.txt +0 -0
  55. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/README.md +0 -0
  56. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/guide-example1.xml +0 -0
  57. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/guide-example2.xml +0 -0
  58. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/guide-example3.xml +0 -0
  59. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/issue116.xml +0 -0
  60. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/sample-discount-price.xml +0 -0
  61. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-creditnote1.xml +0 -0
  62. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example1.xml +0 -0
  63. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example10.xml +0 -0
  64. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example2.xml +0 -0
  65. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example3.xml +0 -0
  66. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example4.xml +0 -0
  67. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example5.xml +0 -0
  68. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example6.xml +0 -0
  69. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example7.xml +0 -0
  70. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example8.xml +0 -0
  71. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/ubl-tc434-example9.xml +0 -0
  72. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-01.xml +0 -0
  73. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-02.xml +0 -0
  74. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-03.xml +0 -0
  75. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-04.xml +0 -0
  76. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-05.xml +0 -0
  77. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-06.xml +0 -0
  78. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-07.xml +0 -0
  79. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-08.xml +0 -0
  80. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-09.xml +0 -0
  81. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-10.xml +0 -0
  82. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-11.xml +0 -0
  83. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-12.xml +0 -0
  84. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-13.xml +0 -0
  85. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-14.xml +0 -0
  86. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-15.xml +0 -0
  87. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-16.xml +0 -0
  88. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-17.xml +0 -0
  89. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-18.xml +0 -0
  90. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-19.xml +0 -0
  91. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-20.xml +0 -0
  92. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-21.xml +0 -0
  93. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-22.xml +0 -0
  94. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-23.xml +0 -0
  95. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-24.xml +0 -0
  96. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-25.xml +0 -0
  97. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-26.xml +0 -0
  98. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-27.xml +0 -0
  99. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-28.xml +0 -0
  100. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-29.xml +0 -0
  101. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-30.xml +0 -0
  102. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-31.xml +0 -0
  103. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-32.xml +0 -0
  104. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-33.xml +0 -0
  105. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-36.xml +0 -0
  106. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-37.xml +0 -0
  107. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-38.xml +0 -0
  108. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-41.xml +0 -0
  109. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-42.xml +0 -0
  110. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-43.xml +0 -0
  111. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-44.xml +0 -0
  112. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-45.xml +0 -0
  113. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-46.xml +0 -0
  114. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-47.xml +0 -0
  115. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-48.xml +0 -0
  116. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-49.xml +0 -0
  117. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-50.xml +0 -0
  118. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-51.xml +0 -0
  119. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-52.xml +0 -0
  120. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-53.xml +0 -0
  121. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-54.xml +0 -0
  122. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-55.xml +0 -0
  123. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-56.xml +0 -0
  124. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-57.xml +0 -0
  125. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-61.xml +0 -0
  126. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-62.xml +0 -0
  127. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-63.xml +0 -0
  128. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-64.xml +0 -0
  129. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-65.xml +0 -0
  130. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CL-16.xml +0 -0
  131. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CL-18.xml +0 -0
  132. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CL-24.xml +0 -0
  133. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CO-13.xml +0 -0
  134. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CO-15-2.xml +0 -0
  135. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CO-15.xml +0 -0
  136. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CO-25.xml +0 -0
  137. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-E-01.xml +0 -0
  138. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-S-09.xml +0 -0
  139. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/UBL-SR-42.xml +0 -0
  140. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/UBL-SR-43.xml +0 -0
  141. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/UBL-SR-44.xml +0 -0
  142. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/UBL-SR-47.xml +0 -0
  143. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-01.xml +0 -0
  144. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-02.xml +0 -0
  145. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-03.xml +0 -0
  146. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-04.xml +0 -0
  147. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-05.xml +0 -0
  148. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-06.xml +0 -0
  149. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-07.xml +0 -0
  150. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-08.xml +0 -0
  151. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-09.xml +0 -0
  152. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-10.xml +0 -0
  153. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-11.xml +0 -0
  154. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-12.xml +0 -0
  155. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-13.xml +0 -0
  156. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-14.xml +0 -0
  157. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-15.xml +0 -0
  158. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-16.xml +0 -0
  159. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-17.xml +0 -0
  160. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-18.xml +0 -0
  161. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-19.xml +0 -0
  162. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-20.xml +0 -0
  163. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-21.xml +0 -0
  164. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-22.xml +0 -0
  165. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-23.xml +0 -0
  166. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-24.xml +0 -0
  167. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-25.xml +0 -0
  168. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-26.xml +0 -0
  169. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-27.xml +0 -0
  170. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-28.xml +0 -0
  171. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-29.xml +0 -0
  172. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-30.xml +0 -0
  173. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-31.xml +0 -0
  174. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-32.xml +0 -0
  175. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-33.xml +0 -0
  176. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-36.xml +0 -0
  177. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-37.xml +0 -0
  178. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-38.xml +0 -0
  179. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-41.xml +0 -0
  180. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-42.xml +0 -0
  181. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-43.xml +0 -0
  182. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-44.xml +0 -0
  183. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-45.xml +0 -0
  184. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-46.xml +0 -0
  185. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-47.xml +0 -0
  186. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-48.xml +0 -0
  187. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-49.xml +0 -0
  188. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-50.xml +0 -0
  189. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-51.xml +0 -0
  190. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-52.xml +0 -0
  191. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-53.xml +0 -0
  192. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-54.xml +0 -0
  193. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-55.xml +0 -0
  194. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-56.xml +0 -0
  195. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-57.xml +0 -0
  196. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-61.xml +0 -0
  197. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-62.xml +0 -0
  198. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-63.xml +0 -0
  199. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-64.xml +0 -0
  200. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-65.xml +0 -0
  201. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-01.xml +0 -0
  202. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-02.xml +0 -0
  203. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-03.xml +0 -0
  204. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-04.xml +0 -0
  205. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-05.xml +0 -0
  206. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-06.xml +0 -0
  207. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-07.xml +0 -0
  208. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-08.xml +0 -0
  209. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-09.xml +0 -0
  210. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-10.xml +0 -0
  211. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-01.xml +0 -0
  212. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-03.xml +0 -0
  213. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-04.xml +0 -0
  214. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-05.xml +0 -0
  215. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-06.xml +0 -0
  216. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-07.xml +0 -0
  217. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-10.xml +0 -0
  218. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-11.xml +0 -0
  219. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-13.xml +0 -0
  220. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-14.xml +0 -0
  221. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-15.xml +0 -0
  222. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-16.xml +0 -0
  223. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-17.xml +0 -0
  224. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-18.xml +0 -0
  225. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-19.xml +0 -0
  226. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-20.xml +0 -0
  227. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-21.xml +0 -0
  228. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-23.xml +0 -0
  229. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-24.xml +0 -0
  230. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-03.xml +0 -0
  231. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-04.xml +0 -0
  232. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-09.xml +0 -0
  233. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-10.xml +0 -0
  234. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-11.xml +0 -0
  235. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-12.xml +0 -0
  236. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-13.xml +0 -0
  237. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-14.xml +0 -0
  238. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-15-2.xml +0 -0
  239. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-15.xml +0 -0
  240. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-16.xml +0 -0
  241. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-17.xml +0 -0
  242. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-18.xml +0 -0
  243. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-19.xml +0 -0
  244. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-20.xml +0 -0
  245. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-21.xml +0 -0
  246. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-22.xml +0 -0
  247. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-23.xml +0 -0
  248. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-24.xml +0 -0
  249. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-25.xml +0 -0
  250. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-26.xml +0 -0
  251. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-01.xml +0 -0
  252. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-02.xml +0 -0
  253. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-03.xml +0 -0
  254. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-04.xml +0 -0
  255. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-05.xml +0 -0
  256. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-06.xml +0 -0
  257. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-07.xml +0 -0
  258. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-08.xml +0 -0
  259. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-09.xml +0 -0
  260. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-10.xml +0 -0
  261. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-01.xml +0 -0
  262. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-02.xml +0 -0
  263. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-03.xml +0 -0
  264. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-04.xml +0 -0
  265. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-05.xml +0 -0
  266. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-06.xml +0 -0
  267. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-07.xml +0 -0
  268. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-08.xml +0 -0
  269. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-09.xml +0 -0
  270. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-10.xml +0 -0
  271. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-01.xml +0 -0
  272. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-02.xml +0 -0
  273. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-03.xml +0 -0
  274. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-04.xml +0 -0
  275. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-05.xml +0 -0
  276. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-06.xml +0 -0
  277. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-07.xml +0 -0
  278. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-08.xml +0 -0
  279. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-09.xml +0 -0
  280. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-11.xml +0 -0
  281. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-12.xml +0 -0
  282. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-01.xml +0 -0
  283. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-02.xml +0 -0
  284. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-03.xml +0 -0
  285. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-04.xml +0 -0
  286. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-05.xml +0 -0
  287. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-06.xml +0 -0
  288. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-07.xml +0 -0
  289. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-08-1.xml +0 -0
  290. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-08-2.xml +0 -0
  291. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-08-3.xml +0 -0
  292. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-09.xml +0 -0
  293. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-10.xml +0 -0
  294. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-01.xml +0 -0
  295. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-02.xml +0 -0
  296. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-03.xml +0 -0
  297. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-04.xml +0 -0
  298. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-05.xml +0 -0
  299. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-06.xml +0 -0
  300. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-07.xml +0 -0
  301. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-08-1.xml +0 -0
  302. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-08-2.xml +0 -0
  303. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-08-3.xml +0 -0
  304. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-09.xml +0 -0
  305. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-10.xml +0 -0
  306. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-01.xml +0 -0
  307. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-02.xml +0 -0
  308. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-03.xml +0 -0
  309. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-04.xml +0 -0
  310. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-05.xml +0 -0
  311. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-06.xml +0 -0
  312. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-07.xml +0 -0
  313. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-08.xml +0 -0
  314. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-09.xml +0 -0
  315. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-10.xml +0 -0
  316. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-11.xml +0 -0
  317. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-12.xml +0 -0
  318. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-13.xml +0 -0
  319. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-14.xml +0 -0
  320. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-01.xml +0 -0
  321. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-02.xml +0 -0
  322. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-03.xml +0 -0
  323. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-04.xml +0 -0
  324. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-05.xml +0 -0
  325. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-06.xml +0 -0
  326. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-07.xml +0 -0
  327. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-08-1.xml +0 -0
  328. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-08-2.xml +0 -0
  329. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-08-3.xml +0 -0
  330. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-09.xml +0 -0
  331. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-10.xml +0 -0
  332. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-01.xml +0 -0
  333. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-02.xml +0 -0
  334. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-03.xml +0 -0
  335. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-04.xml +0 -0
  336. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-05.xml +0 -0
  337. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-06.xml +0 -0
  338. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-07.xml +0 -0
  339. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-08.xml +0 -0
  340. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-09.xml +0 -0
  341. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-10.xml +0 -0
  342. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-DT-01.xml +0 -0
  343. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-DT-06.xml +0 -0
  344. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-DT-07.xml +0 -0
  345. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-12.xml +0 -0
  346. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-18.xml +0 -0
  347. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-42.xml +0 -0
  348. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-44.xml +0 -0
  349. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-47.xml +0 -0
  350. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/LICENSE-Apache-2.0.txt +0 -0
  351. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/README.md +0 -0
  352. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/extension/04.01a-INVOICE_ubl.xml +0 -0
  353. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/extension/04.02a-INVOICE_ubl.xml +0 -0
  354. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/extension/04.03a-INVOICE_ubl.xml +0 -0
  355. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/extension/04.04a-INVOICE_ubl.xml +0 -0
  356. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/extension/05.01a-INVOICE_ubl.xml +0 -0
  357. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.01a-INVOICE_ubl.xml +0 -0
  358. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.02a-INVOICE_ubl.xml +0 -0
  359. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.03a-INVOICE_ubl.xml +0 -0
  360. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.04a-INVOICE_ubl.xml +0 -0
  361. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.05a-INVOICE_ubl.xml +0 -0
  362. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.06a-INVOICE_ubl.xml +0 -0
  363. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.07a-INVOICE_ubl.xml +0 -0
  364. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.08a-INVOICE_ubl.xml +0 -0
  365. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.09a-INVOICE_ubl.xml +0 -0
  366. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.10a-INVOICE_ubl.xml +0 -0
  367. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.11a-INVOICE_ubl.xml +0 -0
  368. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.12a-INVOICE_ubl.xml +0 -0
  369. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.13a-INVOICE_ubl.xml +0 -0
  370. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.14a-INVOICE_ubl.xml +0 -0
  371. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.15a-INVOICE_ubl.xml +0 -0
  372. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.17a-INVOICE_ubl.xml +0 -0
  373. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.18a-INVOICE_ubl.xml +0 -0
  374. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.19a-INVOICE_ubl.xml +0 -0
  375. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.20a-INVOICE_ubl.xml +0 -0
  376. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/01.21a-INVOICE_ubl.xml +0 -0
  377. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/02.01a-INVOICE_ubl.xml +0 -0
  378. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/02.02a-INVOICE_ubl.xml +0 -0
  379. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/02.03a-INVOICE_ubl.xml +0 -0
  380. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/02.04a-INVOICE_ubl.xml +0 -0
  381. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/02.05a-INVOICE_ubl.xml +0 -0
  382. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/02.06a-INVOICE_ubl.xml +0 -0
  383. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/03.01a-INVOICE_ubl.xml +0 -0
  384. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/03.02a-INVOICE_ubl.xml +0 -0
  385. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/03.03a-INVOICE_ubl.xml +0 -0
  386. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/03.04a-INVOICE_ubl.xml +0 -0
  387. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/03.05a-INVOICE_ubl.xml +0 -0
  388. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/03.06a-INVOICE_ubl.xml +0 -0
  389. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/business-cases/standard/03.07a-INVOICE_ubl.xml +0 -0
  390. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/technical-cases/cius/01.01_comprehensive_test_ubl.xml +0 -0
  391. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/technical-cases/cius/01.02_comprehensive_test_ubl.xml +0 -0
  392. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/technical-cases/cius/01.03_comprehensive_test_ubl.xml +0 -0
  393. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/technical-cases/cius/01.04_comprehensive_test_ubl.xml +0 -0
  394. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/technical-cases/cius/01.05_minimal_test_ubl.xml +0 -0
  395. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/technical-cases/cius/01.06_minimal_test_ubl.xml +0 -0
  396. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/external/xrechnung/technical-cases/cvd/02.01a-cvd_INVOICE_ubl.xml +0 -0
  397. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/peppol-creditnote.xml +0 -0
  398. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/peppol-invoice.xml +0 -0
  399. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/peppol-response.xml +0 -0
  400. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/samples/xrechnung-invoice.xml +0 -0
  401. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_business_rules.py +0 -0
  402. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_code_rules.py +0 -0
  403. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_peppol_de_rules.py +0 -0
  404. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_reading.py +0 -0
  405. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_refusals.py +0 -0
  406. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_response.py +0 -0
  407. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_ubl_rules.py +0 -0
  408. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_vat_rules.py +0 -0
  409. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_writing.py +0 -0
  410. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tests/test_xrechnung_rules.py +0 -0
  411. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tools/code_lists.py +0 -0
  412. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tools/fetch_peppol.py +0 -0
  413. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tools/peppol-response-files.tsv +0 -0
  414. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tools/published_rules.py +0 -0
  415. {mock_einvoice-0.1.0 → mock_einvoice-0.3.0}/tools/ubl_syntax.py +0 -0
@@ -10,6 +10,82 @@ says so where it does.
10
10
 
11
11
  Nothing yet.
12
12
 
13
+ ## [0.3.0] - 2026-10-10
14
+
15
+ The supplier writes an invoice itself, and the business terms can be read
16
+ from the running mock. Nothing changes for a document sent with
17
+ `POST /_mock/sent`, but for one key more in what is said of it.
18
+
19
+ ### Added
20
+
21
+ - **A supplier that is told of an order, and writes and sends the invoice for
22
+ it** ([#33]). `POST /_mock/orders` takes an order as JSON, and
23
+ `POST /_mock/orders/<id>/invoices` writes a Peppol BIS Billing 3.0 invoice
24
+ for it, holds it to its rules, and sends it to `--buyer-url` like any other;
25
+ for all of the order, or for so much of some of its lines. The invoice
26
+ names the order (BT-13) and each line's order line (BT-132). In Python,
27
+ `Supplier.take` and `Supplier.bill`, and `mockeinvoice.order`.
28
+ - An order is this mock's own JSON and not Peppol's UBL `Order`, whose
29
+ rules are not built.
30
+ - Who is selling, where to pay, the rate of VAT, the days until payment and
31
+ the invoice numbers are the supplier's own: `GET` and
32
+ `PATCH /_mock/supplier`. Until it is changed it is the seller of this
33
+ project's sample invoice, and what it writes is `valid`.
34
+ - An order whose invoice would not be `valid` is not taken
35
+ (`422 UNBILLABLE`, with the findings).
36
+ - Every line is VAT category `S` at the supplier's one rate. No allowances,
37
+ charges, credit notes or XRechnung. The README lists what is made up, and
38
+ from what.
39
+ - **The business terms over HTTP** ([#34]). `GET /_mock/terms` gives every
40
+ business term and group the package knows (164 and 32), each with its
41
+ number, name and kind, and `GET /_mock/terms/BT-13` or `/BG-25` gives one.
42
+ It is made from `mockeinvoice.model.TERMS` and `GROUPS` when asked, so a
43
+ client that cannot import the package reads the same table. In Python,
44
+ `model.catalogue`, `term_described` and `group_described`. A finding still
45
+ names a term by number alone.
46
+
47
+ ### Changed
48
+
49
+ - **A document that was sent says which order it was written for**:
50
+ `"order"` in `POST /_mock/sent`, `GET /_mock/sent` and `/_mock/sent/<id>`,
51
+ `null` for one that was given finished. `GET /` lists eight paths more.
52
+ - A JSON number with a fraction in a request is read as the decimal it was
53
+ written as, and not as a float. No request took such a number before.
54
+
55
+ ## [0.2.0] - 2026-10-07
56
+
57
+ Every rule Peppol BIS Billing publishes is now built: the 71 for a seller in
58
+ Denmark, Greece, Iceland, Italy, the Netherlands, Norway or Sweden were the
59
+ last. **It changes what such a document gets:** it was "not judged" and the
60
+ server turned it away, and it is now `valid` or `invalid`.
61
+
62
+ ### Added
63
+
64
+ - **Peppol's rules for a seller in Denmark, Greece, Iceland, Italy, the
65
+ Netherlands, Norway and Sweden** ([#18]): 71 rules, 61 fatal, in
66
+ `mockeinvoice/rules/peppol_national.py`. Every rule Peppol BIS Billing
67
+ 3.0.21 publishes is now built, 165 in all. All 282 cases Peppol publishes
68
+ for these rules agree. Iceland's ten have no published cases and rest on
69
+ this project's tests. **Changes behaviour:** a Peppol document from one of
70
+ those seven countries was `not judged`, and the server turned it away with
71
+ `NOT-JUDGED`. It is now `valid` or `invalid`. Peppol's own Swedish example
72
+ is `valid`.
73
+ - `tools/fetch_peppol.py` fetches the unit tests for those countries and
74
+ Peppol's three national examples as well: 167 files, from 101.
75
+
76
+ ### Changed
77
+
78
+ - **No document is `not judged` any more.** The verdict, the server's
79
+ `NOT-JUDGED` and `Report.not_built` are kept for a rule a specification
80
+ publishes before this package has it. `Report.not_applicable` is empty for
81
+ a Peppol document, where it listed the 71.
82
+
83
+ ### Removed
84
+
85
+ - `mockeinvoice.rules.peppol.SCOPES`, `sellers_countries` and `from_`, which
86
+ said which unbuilt national rules a document could wait on. Nothing is
87
+ left for them to say.
88
+
13
89
  ## [0.1.0] - 2026-10-07
14
90
 
15
91
  The first release. It reads and writes UBL invoices and credit notes and
@@ -212,3 +288,5 @@ built, and was in no release.
212
288
  [#23]: https://github.com/rseufert/mock-einvoice/issues/23
213
289
  [#25]: https://github.com/rseufert/mock-einvoice/issues/25
214
290
  [#27]: https://github.com/rseufert/mock-einvoice/issues/27
291
+ [#33]: https://github.com/rseufert/mock-einvoice/issues/33
292
+ [#34]: https://github.com/rseufert/mock-einvoice/issues/34
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mock-einvoice
3
- Version: 0.1.0
3
+ Version: 0.3.0
4
4
  Summary: A mock e-invoicing partner: EN 16931 invoices in and out, with the responses that follow. Zero dependencies.
5
5
  License: MIT AND EUPL-1.2
6
6
  Project-URL: Repository, https://github.com/rseufert/mock-einvoice
@@ -39,13 +39,14 @@ python3 -m pip install mock-einvoice
39
39
  mock-einvoice --port 8100
40
40
  ```
41
41
 
42
- It reads and writes UBL invoices and credit notes, and the Peppol Invoice Response that answers one, and holds them to their published rules: invoices to all 979 rules of the EN 16931 core, to Peppol's own 63 and the 31 it has for Germany, and to the 34 of a standard XRechnung document; responses to all 82 of theirs. Over HTTP it is a buyer that takes invoices in and answers the Peppol ones, and a supplier that sends them and takes the answers.
42
+ It reads and writes UBL invoices and credit notes, and the Peppol Invoice Response that answers one, and holds them to their published rules: invoices to all 979 rules of the EN 16931 core, to all 165 of Peppol's (its own 63, the 31 it has for Germany and the 71 for seven other countries), and to the 34 of a standard XRechnung document; responses to all 82 of theirs. Over HTTP it is a buyer that takes invoices in and answers the Peppol ones, and a supplier that sends them, writes the invoice for an order it is told of, and takes the answers.
43
43
 
44
- **What 0.1.0 is not:**
44
+ **What 0.3.0 is not:**
45
45
 
46
- - **It writes no invoices of its own.** The supplier sends the documents it is given.
47
- - **It knows nothing of the other mocks.** Writing an invoice from one of mock-sap's billing documents, and saying "paid" when SAP has cleared it, is integration, and belongs in [mock-acme](https://github.com/rseufert/mock-acme) with the rest of it. It is not built there yet.
48
- - **A Peppol document from a seller in Denmark, Greece, Iceland, Italy, the Netherlands, Norway or Sweden is at best "not judged"**, and the server does not take it in: Peppol's 71 rules for those countries are not built ([#18](https://github.com/rseufert/mock-einvoice/issues/18)). An XRechnung document, and a Peppol document from Germany or from a country Peppol has no national rules for, can be "valid".
46
+ - **It writes one kind of invoice of its own, and no other.** The supplier writes the invoice for an order it is told of: every line at one standard rate of VAT, no allowances or charges, no credit note, no XRechnung ([An order, and the invoice for it](#an-order-and-the-invoice-for-it)). Anything else it sends as it is given.
47
+ - **It takes no order off the network.** An order is this mock's own JSON on a `/_mock` path. Peppol's UBL `Order` and its rules are not built.
48
+ - **It knows nothing of the other mocks.** Writing an invoice from one of mock-sap's billing documents, and saying "paid" when SAP has cleared it, is integration, and belongs in [mock-acme](https://github.com/rseufert/mock-acme) with the rest of it: its `order_to_cash`, which is on its `main` and in no release of it yet.
49
+ - **Peppol's ten rules for a seller in Iceland are held to this project's tests only.** Peppol publishes unit tests for its rules for Denmark, Greece, Italy, the Netherlands, Norway and Sweden, and every case agrees here; for Iceland it publishes none. Those ten were written from the same reading of the rule file as the tests that hold them, so a misreading would be in both.
49
50
  - **No CII, no XRechnung Extension, no ZUGFeRD**, and no transport: see [What it refuses](#what-it-refuses) and [Known to be wrong, or not real](#known-to-be-wrong-or-not-real).
50
51
 
51
52
  ## What is built
@@ -67,7 +68,7 @@ for line in document.all("BG-25"): # the lines
67
68
  xml = write(document) # UBL again, in the schema's order
68
69
  ```
69
70
 
70
- - **Terms by number.** `BT-1` is the invoice number in an invoice and in a credit note, whatever UBL calls the element. `mockeinvoice.model.TERMS` names all of them.
71
+ - **Terms by number.** `BT-1` is the invoice number in an invoice and in a credit note, whatever UBL calls the element. `mockeinvoice.model.TERMS` names all of them, and the server gives the same table to a client that cannot import it: `GET /_mock/terms`.
71
72
  - **Decimals.** Every amount, quantity, price and percentage is a `decimal.Decimal` made from the text as written. `10.50` stays `10.50`. There is no float anywhere, and making a value from one is a `TypeError`.
72
73
  - **Groups that repeat are groups**: lines (`BG-25`), the VAT breakdown (`BG-23`), allowances and charges, notes, payment instructions, supporting documents. A group that occurs once (the seller, the totals) has its terms on the document or the line itself.
73
74
  - **Findings.** What the reader has to say about a document, each with a level, a code and the path it is about.
@@ -100,12 +101,14 @@ A document names its specification, and that decides its layers:
100
101
  | Layer | Pinned to | Published rules | Built |
101
102
  | --- | --- | --- | --- |
102
103
  | EN 16931 core | [validation artefacts 1.3.16](https://github.com/ConnectingEurope/eInvoicing-EN16931/tree/validation-1.3.16) | 979 (281 fatal) | all 979: what a document must have in it (`BR-01` to `BR-65`), the calculation rules (`BR-CO-*`), the decimals rules (`BR-DEC-*`), the ten families of VAT category rules, the code lists (`BR-CL-*`), and the 756 rules about the UBL document itself (`UBL-CR-*`, `UBL-DT-*`, `UBL-SR-*`) |
103
- | Peppol BIS Billing 3.0 | 3.0.21, at commit [`806866b`](https://github.com/OpenPEPPOL/peppol-bis-invoice-3/commit/806866bd2bd91d7e9623b68f08164e8fbe9e67a0) (it has no tag) | 165 (139 fatal) | 94: Peppol's own 63 (`PEPPOL-EN16931-*`, `PEPPOL-COMMON-*`) and Germany's 31 (`DE-R-*`). Not the 71 for a seller in another country (`DK-R`, `GR-R`, `IS-R`, `IT-R`, `NL-R`, `NO-R`, `SE-R`) |
104
+ | Peppol BIS Billing 3.0 | 3.0.21, at commit [`806866b`](https://github.com/OpenPEPPOL/peppol-bis-invoice-3/commit/806866bd2bd91d7e9623b68f08164e8fbe9e67a0) (it has no tag) | 165 (139 fatal) | all 165: Peppol's own 63 (`PEPPOL-EN16931-*`, `PEPPOL-COMMON-*`), Germany's 31 (`DE-R-*`), and the 71 for a seller in Denmark, Greece, Iceland, Italy, the Netherlands, Norway or Sweden (`DK-R`, `GR-R`, `GR-S`, `IS-R`, `IT-R`, `NL-R`, `NO-R`, `SE-R`) |
104
105
  | XRechnung 3.0 | [Schematron 2.6.0](https://github.com/itplr-kosit/xrechnung-schematron/tree/v2.6.0) | 56 (46 fatal) | 34: every rule of a standard XRechnung document (`BR-DE-*`, `BR-TMP-2`, `BR-TMP-6`). Not the 22 of XRechnung Extension and CVD (`BR-DEX-*`, `BR-DE-CVD-*`), whose documents are refused by name |
105
106
 
106
- **Not built is said, never assumed.** `mockeinvoice/rules/published.py` lists every published rule of every layer by identifier and flag, and a report lists the ones that did not run. A document nothing was found wrong with is `not judged`, not `valid`, for as long as a fatal rule that could apply to it is unbuilt.
107
+ **Not built is said, never assumed.** `mockeinvoice/rules/published.py` lists every published rule of every layer by identifier and flag, and a report lists the ones that did not run. A document nothing was found wrong with is `not judged`, not `valid`, for as long as a fatal rule that could apply to it is unbuilt. Every rule that can apply to a document this package takes is built, so no document is `not judged` today; the verdict is kept for the day a specification publishes a rule before this package has it.
107
108
 
108
- **A rule that could not apply is not waited on.** Peppol's rules for a seller in one country say nothing of a document from another, and the rules of XRechnung Extension and CVD say nothing of a standard XRechnung document. A report lists them apart, as `not_applicable`, and they do not hold back its verdict. A document counts as one of a country's if the seller's VAT identifier, its tax representative's, or its address says so: all three at once, which is never narrower than the published rules' own test, so nothing is waved through that a national rule could have caught.
109
+ **A rule that could not apply is not waited on.** The rules of XRechnung Extension and CVD say nothing of a standard XRechnung document. A report lists them apart, as `not_applicable`, and they do not hold back its verdict.
110
+
111
+ **Where a seller is, is not one question.** Peppol's rules for a seller's country do not agree on what makes a document one of theirs. Norway, Italy and Greece go by the first two letters of the seller's VAT identifier, then its tax representative's, and only then by the country of its address. Denmark, Iceland and Sweden go by the address, written exactly (`dk` is not Denmark). The Netherlands goes by the address however it is written. Each rule here goes by what its published test goes by, and `mockeinvoice/rules/peppol_national.py` says which.
109
112
 
110
113
  **Two things a rule is asked of.** Most rules are asked of the model. The 756 about the UBL document itself are asked of its elements, because they are about elements the standard has no term for and the model does not hold: `validate(xml)` asks them of the document as it was sent. `check(document, specification)`, given a model and no XML, asks them of the document that model would be written as. Where one of them reports an element, the reader's own finding about that element (`UNHELD`, `REPEATED`) is left out, so an element is reported once, under the published rule's name where there is one.
111
114
 
@@ -245,7 +248,69 @@ $ curl -s --data-binary @tests/samples/peppol-invoice.xml http://127.0.0.1:8101/
245
248
 
246
249
  A document's `"status"` is the last thing its buyer said. **A response out of order is taken and ignored.** Peppol's guide says of a response that follows a rejection or a payment in full, or follows an acceptance with anything but paid, that the seller may ignore it. So the supplier does: the response is `201` and kept, marked `"ignored"` with the rule it broke, and the status does not move. The same for one that goes back in the order.
247
250
 
248
- The supplier writes no invoices. It sends what it is given.
251
+ #### An order, and the invoice for it
252
+
253
+ The supplier can be told of an order, and writes and sends the invoice for it itself.
254
+
255
+ ```
256
+ $ curl -s -d '{"number": "4500000017",
257
+ "buyer": {"name": "ACME Corporation", "endpoint": "0088:4098765000003",
258
+ "city": "Berlin", "postal_code": "10115", "country": "DE"},
259
+ "lines": [{"line": "10", "name": "Widget", "quantity": 40, "unit": "C62", "price": "20.00"}]}' \
260
+ http://127.0.0.1:8101/_mock/orders
261
+ {
262
+ "id": "1",
263
+ "number": "4500000017",
264
+ ...
265
+ "status": "open",
266
+ ...
267
+ }
268
+ $ curl -s -X POST http://127.0.0.1:8101/_mock/orders/1/invoices
269
+ {
270
+ "id": "1",
271
+ "kind": "Invoice",
272
+ "number": "GLX-0001",
273
+ ...
274
+ "verdict": "valid",
275
+ "delivery": {
276
+ "to": "http://127.0.0.1:8100/invoices",
277
+ "status": 201
278
+ },
279
+ "order": "/_mock/orders/1",
280
+ ...
281
+ }
282
+ ```
283
+
284
+ | | |
285
+ | --- | --- |
286
+ | `POST /_mock/orders` | Tell the supplier of an order: `{"number", "reference", "buyer", "currency", "lines"}`. The buyer is `{"name", "endpoint", "vat", "legal_id", "street", "city", "postal_code", "country"}` and needs its name, its country, and its endpoint written `scheme:identifier`. A line is `{"line", "name", "seller_item", "buyer_item", "quantity", "unit", "price"}` and needs its name, a quantity above nought, a unit (a code of UN/ECE Recommendation 20: `C62` is "one") and a price for one unit, without VAT. A line with no number has its place in the order for one. `201` and it is held; nothing is billed. `400` for what it lacks or does not know. `422` `UNBILLABLE` with the findings where the invoice it would be billed with is not `valid`: the invoice is written and held to its rules when the order comes, and thrown away. |
287
+ | `GET /_mock/orders`, `/_mock/orders/<id>` | the orders; one, with what is billed and what is open of each line, and the invoices sent for it |
288
+ | `POST /_mock/orders/<id>/invoices` | Write the invoice for all that is not yet billed, and send it as `POST /_mock/sent` would: the answer is the same, and the document is at `/_mock/sent/<id>` with the rest. `{"lines": [{"line": "10", "quantity": 15}]}` bills that much of those lines and no more. `409` `OVER-BILLED` for more than is open of a line, `409` `BILLED` when nothing is. `422` `NOT-VALID` with the findings if the invoice is not `valid`, which can only be because the supplier was changed since the order came; it is not sent, nothing is counted as billed, and there is no forcing it. |
289
+ | `GET`, `PATCH /_mock/supplier` | who the supplier is, and changing it: any of the fields below. `POST /_mock/reset` forgets the orders and starts the invoice numbers again, and leaves this alone. |
290
+
291
+ **An order is JSON here, and not a document of any standard.** Peppol has one, the UBL `Order` of its ordering profiles, with rules of its own. None of them is built, and taking the document in without holding it to them would be half of it. So the order is on a `/_mock` path, where the test's own controls are, and says no more than an invoice needs.
292
+
293
+ **A number is never a float.** A quantity or a price is taken as text or as a JSON number, and a JSON number is read as the decimal it was written as.
294
+
295
+ **Nothing is billed until it is asked for**, as nothing else here happens by itself.
296
+
297
+ **What the supplier makes up, and from what.** An order does not say who is selling, where to pay, or what the invoice is called. The invoice is a Peppol BIS Billing 3.0 invoice (type `380`, billing's profile `01`), and what is in it comes from:
298
+
299
+ | In the invoice | From |
300
+ | --- | --- |
301
+ | The seller: name (BT-27), electronic address (BT-34), VAT identifier (BT-31), legal registration (BT-30), address (BT-35, 37, 38, 40), contact (BT-41, 42, 43) | the supplier: `name`, `endpoint`, `vat`, `legal_id`, `street`, `city`, `postal_code`, `country`, `contact`, `telephone`, `email`. Until it is changed it is Globex GmbH of Hamburg, the seller of this project's sample invoice. |
302
+ | The invoice number (BT-1) | the supplier's `number_prefix` and a count of the invoices it has written: `GLX-0001`. A document sent with `POST /_mock/sent` is not counted. |
303
+ | The issue date (BT-2) and the due date (BT-9) | the clock, and the clock plus the supplier's `payment_days` (30) |
304
+ | The currency (BT-5) | the order's, or the supplier's `currency` (`EUR`) |
305
+ | The order (BT-13) and each line's order line (BT-132) | the order's number and its lines' numbers |
306
+ | The buyer reference (BT-10) | the order's `reference`; **where it has none, the order's number again.** Peppol's rules for Germany want a buyer reference on every invoice between two German parties, and an order number is what a supplier with nothing else has. |
307
+ | The buyer (BT-44, 47, 48, 49, 50, 52, 53, 55) | the order's buyer |
308
+ | How to pay (BG-16): a credit transfer (code `30`) to the account (BT-84, 85, 86), quoting the invoice number (BT-83) | the supplier's `iban`, `name` and `bic` |
309
+ | Each line: quantity, unit, item name, the seller's and the buyer's item number, price | the order's line. The line's net amount (BT-131) is quantity times price, rounded to the cent with a half going up. |
310
+ | VAT: category `S` on every line at one rate (BT-151, 152), and one breakdown (BG-23) | the supplier's `vat_rate` (19). The tax is the rate on the sum of the lines, rounded once. |
311
+ | The totals (BT-106, 109, 110, 112, 115) | the sums of the above. Nothing is prepaid, and there are no allowances or charges. |
312
+
313
+ **What it does not write:** a line at any VAT category but `S` (exempt, nought, reverse charge, an intra-community supply), allowances and charges, a delivery date, notes, payment terms as text, a credit note, an XRechnung. A rate of nought is refused for that reason. An invoice that needs one of these is written by whoever drives the mock and sent with `POST /_mock/sent`, as before.
249
314
 
250
315
  ### Both
251
316
 
@@ -254,8 +319,17 @@ The supplier writes no invoices. It sends what it is given.
254
319
  | `GET /_mock/health` | that it is up, its version, and how many documents it holds and has sent |
255
320
  | `GET /_mock/turned-away` | what was not taken in, on which side, and why |
256
321
  | `POST /_mock/validate` | an invoice, a credit note or an Invoice Response held to its rules, and not kept |
322
+ | `GET /_mock/terms` | the business terms and groups this package knows, by number: `{"terms": [{"id", "name", "group", "kind"}], "groups": [{"id", "name", "repeats", "inside", "terms"}]}`, 164 terms and 32 groups, in the standard's order |
323
+ | `GET /_mock/terms/BT-13`, `/_mock/terms/BG-25` | one term or one group, as in the list. `404` `NO-SUCH-TERM` for anything else, written any other way (`bt-13`) |
257
324
  | `POST /_mock/reset` | forget every document and response, on both sides |
258
325
 
326
+ **The terms are the package's own table, served.** `GET /_mock/terms` is made from `mockeinvoice.model.TERMS` and `GROUPS` when it is asked, so what a client reads is what the reader, the writer and the rules go by.
327
+
328
+ - A term's `kind` is one of `amount`, `binary`, `code`, `date`, `identifier`, `percentage`, `price`, `quantity`, `text`. Its `group` is `null` where the standard puts it on the document itself.
329
+ - A group's `repeats` says how this package holds it and not how often the standard allows it: `true` where it is kept as a group of its own (the lines, the VAT breakdown), `false` where its terms are held by the document or the line. `inside` is the group it is written within, if any.
330
+ - Three terms are written as an attribute of another's element (`BT-130`, the unit, is `BT-129`'s `unitCode`) and say so in `attribute_of`. Sixteen more, the scheme identifiers and their like (`BT-29-1`), have a number and no entry of their own here: each is listed under `attributes` on the term that holds it, and asked for by itself is `404` saying where it is.
331
+ - A finding still gives a term by its number alone. Its path is not always a term (a rule about the XML gives an XPath), and a client that wants the name has this to look it up in.
332
+
259
333
  To see the two sides talk, run two: a buyer with `--seller-url http://127.0.0.1:8101/responses`, and a supplier with `--buyer-url http://127.0.0.1:8100/invoices`.
260
334
 
261
335
  ## What it refuses
@@ -298,6 +372,7 @@ A group with nothing in it is still there: an empty `TaxSubtotal` is a VAT break
298
372
  - **A duplicate is taken like the first.** A second document with a seller and a number already held is held too. A real buyer's system would likely reject it; with which status and reason is not known here, and is not guessed.
299
373
  - **Any buyer an invoice names is this mock**, and no document is turned away because its buyer is unknown. Nor does the supplier compare who a response is from with who its invoice was for: a response is matched by the invoice's number and type code alone, and of two documents sent with one number it is taken to be about the later.
300
374
  - **A response about a document that was never sent is turned away**, and so is one that names a type code other than its document's (`OP-BR111-R014`). The guide says the code must be the document's own and not what a seller does when it is not; and on the real network a response would be delivered whatever it was about. Both are this project's choices.
375
+ - **How a real supplier bills an order is not known here, and the supplier's way is this project's own.** That it bills when asked and not on shipping, numbers its invoices by counting, takes a second order with a number it already holds, counts an invoice as billed though the buyer's system could not be reached or turned it away, and gives the order number as the buyer reference where it was given none: none of it is from a published source. An order's prices are also taken as they are; there is no price list to hold them to.
301
376
  - **Nothing is kept on disk.** Documents and responses are gone when the server stops.
302
377
  - **No XML Schema validation.** The published validators check the UBL schema before any rule. The standard library cannot, so this reads what it understands and reports what it did not. A document that is not schema-valid is not refused for that.
303
378
  - **The writer does not promise the same bytes.** Reading what was written gives an equal document. The order among repeats of different kinds (allowances and charges, say), the namespace prefixes, white space, comments and anything `UNHELD` are not kept.
@@ -336,15 +411,16 @@ The rules, the reader and the writer are tested against files this project did n
336
411
  | EN 16931 examples | 17 documents | read, written back, and compared element for element by a reader that is not this one |
337
412
  | XRechnung test suite | 39 valid XRechnung 3.0 documents | read with nothing to say, written back element for element, and every one is `valid`: no rule of the core's 979 or XRechnung's 34 fails or warns. Seventeen are told, as information, that they do not say when they were delivered (`BR-DE-TMP-32`) |
338
413
  | XRechnung test suite | 5 Extension and 1 CVD document | refused by name |
339
- | Peppol unit tests | 400 cases | all 396 agree: 331 for Peppol's own rules and 65 for Germany's. The other 4 are about a UBL Order |
414
+ | Peppol unit tests | 673 cases, with 678 things said of a rule | all 678 agree: 331 for Peppol's own rules, 65 for Germany's and 282 for the other six countries that have any. 4 cases are about a UBL Order. Iceland's ten rules have none |
340
415
  | Peppol Invoice Response | 14 examples and 13 unit test cases | every example is read with nothing to say, written back element for element, and no rule has anything to say of it; all 13 cases agree. The structure and the code lists here are compared with the ones Peppol describes |
341
- | Peppol examples | 10 documents | read with nothing to say, written back element for element, and no rule has anything to say of them. Nine are `valid`; the tenth is from a seller in Sweden, whose rules are not built, and is `not judged` |
416
+ | Peppol examples | 10 documents | read with nothing to say, written back element for element, and no rule has anything to say of them. All ten are `valid` |
417
+ | Peppol national examples | 3 documents, kept by Peppol's national authorities | two are `valid` with a warning each; the third, a Greek invoice through a tax representative, is `invalid` by the core's `BR-06`, because its seller has no legal name |
342
418
 
343
419
  - **A case for a rule that is not built is never counted as agreeing.** The counts are written out in `tests/test_upstream.py`, so building a rule moves a number there on purpose.
344
420
  - **A disagreement is a failure here** until the published rule shows the case to be wrong; then it is listed in `tests/upstream.py` by name, with the reason. None is.
345
421
  - **To read the counts:** `python -m tests.upstream`. CI prints them on every run.
346
422
 
347
- Peppol's files are not in this repository (see Licences). `python tools/fetch_peppol.py` fetches the 101 listed in `tools/peppol-files.tsv` (billing's examples, its unit tests, and the rule file itself, which a test reads Peppol's code lists from) and the 28 in `tools/peppol-response-files.tsv` (the Invoice Response's examples, unit tests, hand-written rules, code lists and the description of its structure) from the pinned commit, checks each against the git hash listed for it, and puts them where the tests look. Without them those two tests are skipped and say so. CI fetches them on two of its jobs.
423
+ Peppol's files are not in this repository (see Licences). `python tools/fetch_peppol.py` fetches the 167 listed in `tools/peppol-files.tsv` (billing's examples and national examples, its unit tests, and the rule file itself, which a test reads Peppol's code lists from) and the 28 in `tools/peppol-response-files.tsv` (the Invoice Response's examples, unit tests, hand-written rules, code lists and the description of its structure) from the pinned commit, checks each against the git hash listed for it, and puts them where the tests look. Without them those two tests are skipped and say so. CI fetches them on two of its jobs.
348
424
 
349
425
  Two things were checked while building and are not tests, because their sources are not here:
350
426
 
@@ -355,6 +431,8 @@ Two things were checked while building and are not tests, because their sources
355
431
 
356
432
  The code values of UNTDID 1001, the United Nations' list of kinds of document, are in `mockeinvoice/rules/untdid.py`: 727 numbers from edition D.17A as UNECE publishes it, and none of the names or descriptions, which are the United Nations'. The directory's pages say "Copyright United Nations, all rights reserved"; the numbers are taken to be facts and not text.
357
433
 
434
+ The names of the 164 business terms and 32 business groups in `mockeinvoice/model.py` are, by that file's own account, the standard's names for them, typed in by hand ("Invoice number", "Seller postal address"). None of the standard's descriptions or usage notes is there. They have been in the package since 0.1.0, and the server now gives them out as well (`GET /_mock/terms`).
435
+
358
436
  Nothing of Peppol's is in the package. Its rules are written here by hand from reading the tests, each under its published identifier and in this project's words. Where a Peppol rule holds a value to a code list, the list is the EN 16931 one already in the package, with the differences named: one currency code, twenty-one electronic address schemes, and two short lists of document type codes. A test compares the result with Peppol's own lists whenever its files have been fetched.
359
437
 
360
438
  The package is MIT, with two files that are not. `mockeinvoice/rules/codelists.py` holds the code lists of the EN 16931 code list rules (currencies, countries, units of measure and the rest), generated from the published rules by `tools/code_lists.py` and kept exactly as published. `mockeinvoice/rules/ublsyntax.py` holds the paths of the rules about the UBL document itself, generated by `tools/ubl_syntax.py`. Both are from the EN 16931 validation artefacts and are under the EUPL 1.2, whose text is beside them and goes into the wheel with them. One list more is in `rules/en16931.py`, the country prefixes `BR-CO-09` searches, and is from the same source. The wheel holds the package and nothing else.
@@ -9,13 +9,14 @@ python3 -m pip install mock-einvoice
9
9
  mock-einvoice --port 8100
10
10
  ```
11
11
 
12
- It reads and writes UBL invoices and credit notes, and the Peppol Invoice Response that answers one, and holds them to their published rules: invoices to all 979 rules of the EN 16931 core, to Peppol's own 63 and the 31 it has for Germany, and to the 34 of a standard XRechnung document; responses to all 82 of theirs. Over HTTP it is a buyer that takes invoices in and answers the Peppol ones, and a supplier that sends them and takes the answers.
12
+ It reads and writes UBL invoices and credit notes, and the Peppol Invoice Response that answers one, and holds them to their published rules: invoices to all 979 rules of the EN 16931 core, to all 165 of Peppol's (its own 63, the 31 it has for Germany and the 71 for seven other countries), and to the 34 of a standard XRechnung document; responses to all 82 of theirs. Over HTTP it is a buyer that takes invoices in and answers the Peppol ones, and a supplier that sends them, writes the invoice for an order it is told of, and takes the answers.
13
13
 
14
- **What 0.1.0 is not:**
14
+ **What 0.3.0 is not:**
15
15
 
16
- - **It writes no invoices of its own.** The supplier sends the documents it is given.
17
- - **It knows nothing of the other mocks.** Writing an invoice from one of mock-sap's billing documents, and saying "paid" when SAP has cleared it, is integration, and belongs in [mock-acme](https://github.com/rseufert/mock-acme) with the rest of it. It is not built there yet.
18
- - **A Peppol document from a seller in Denmark, Greece, Iceland, Italy, the Netherlands, Norway or Sweden is at best "not judged"**, and the server does not take it in: Peppol's 71 rules for those countries are not built ([#18](https://github.com/rseufert/mock-einvoice/issues/18)). An XRechnung document, and a Peppol document from Germany or from a country Peppol has no national rules for, can be "valid".
16
+ - **It writes one kind of invoice of its own, and no other.** The supplier writes the invoice for an order it is told of: every line at one standard rate of VAT, no allowances or charges, no credit note, no XRechnung ([An order, and the invoice for it](#an-order-and-the-invoice-for-it)). Anything else it sends as it is given.
17
+ - **It takes no order off the network.** An order is this mock's own JSON on a `/_mock` path. Peppol's UBL `Order` and its rules are not built.
18
+ - **It knows nothing of the other mocks.** Writing an invoice from one of mock-sap's billing documents, and saying "paid" when SAP has cleared it, is integration, and belongs in [mock-acme](https://github.com/rseufert/mock-acme) with the rest of it: its `order_to_cash`, which is on its `main` and in no release of it yet.
19
+ - **Peppol's ten rules for a seller in Iceland are held to this project's tests only.** Peppol publishes unit tests for its rules for Denmark, Greece, Italy, the Netherlands, Norway and Sweden, and every case agrees here; for Iceland it publishes none. Those ten were written from the same reading of the rule file as the tests that hold them, so a misreading would be in both.
19
20
  - **No CII, no XRechnung Extension, no ZUGFeRD**, and no transport: see [What it refuses](#what-it-refuses) and [Known to be wrong, or not real](#known-to-be-wrong-or-not-real).
20
21
 
21
22
  ## What is built
@@ -37,7 +38,7 @@ for line in document.all("BG-25"): # the lines
37
38
  xml = write(document) # UBL again, in the schema's order
38
39
  ```
39
40
 
40
- - **Terms by number.** `BT-1` is the invoice number in an invoice and in a credit note, whatever UBL calls the element. `mockeinvoice.model.TERMS` names all of them.
41
+ - **Terms by number.** `BT-1` is the invoice number in an invoice and in a credit note, whatever UBL calls the element. `mockeinvoice.model.TERMS` names all of them, and the server gives the same table to a client that cannot import it: `GET /_mock/terms`.
41
42
  - **Decimals.** Every amount, quantity, price and percentage is a `decimal.Decimal` made from the text as written. `10.50` stays `10.50`. There is no float anywhere, and making a value from one is a `TypeError`.
42
43
  - **Groups that repeat are groups**: lines (`BG-25`), the VAT breakdown (`BG-23`), allowances and charges, notes, payment instructions, supporting documents. A group that occurs once (the seller, the totals) has its terms on the document or the line itself.
43
44
  - **Findings.** What the reader has to say about a document, each with a level, a code and the path it is about.
@@ -70,12 +71,14 @@ A document names its specification, and that decides its layers:
70
71
  | Layer | Pinned to | Published rules | Built |
71
72
  | --- | --- | --- | --- |
72
73
  | EN 16931 core | [validation artefacts 1.3.16](https://github.com/ConnectingEurope/eInvoicing-EN16931/tree/validation-1.3.16) | 979 (281 fatal) | all 979: what a document must have in it (`BR-01` to `BR-65`), the calculation rules (`BR-CO-*`), the decimals rules (`BR-DEC-*`), the ten families of VAT category rules, the code lists (`BR-CL-*`), and the 756 rules about the UBL document itself (`UBL-CR-*`, `UBL-DT-*`, `UBL-SR-*`) |
73
- | Peppol BIS Billing 3.0 | 3.0.21, at commit [`806866b`](https://github.com/OpenPEPPOL/peppol-bis-invoice-3/commit/806866bd2bd91d7e9623b68f08164e8fbe9e67a0) (it has no tag) | 165 (139 fatal) | 94: Peppol's own 63 (`PEPPOL-EN16931-*`, `PEPPOL-COMMON-*`) and Germany's 31 (`DE-R-*`). Not the 71 for a seller in another country (`DK-R`, `GR-R`, `IS-R`, `IT-R`, `NL-R`, `NO-R`, `SE-R`) |
74
+ | Peppol BIS Billing 3.0 | 3.0.21, at commit [`806866b`](https://github.com/OpenPEPPOL/peppol-bis-invoice-3/commit/806866bd2bd91d7e9623b68f08164e8fbe9e67a0) (it has no tag) | 165 (139 fatal) | all 165: Peppol's own 63 (`PEPPOL-EN16931-*`, `PEPPOL-COMMON-*`), Germany's 31 (`DE-R-*`), and the 71 for a seller in Denmark, Greece, Iceland, Italy, the Netherlands, Norway or Sweden (`DK-R`, `GR-R`, `GR-S`, `IS-R`, `IT-R`, `NL-R`, `NO-R`, `SE-R`) |
74
75
  | XRechnung 3.0 | [Schematron 2.6.0](https://github.com/itplr-kosit/xrechnung-schematron/tree/v2.6.0) | 56 (46 fatal) | 34: every rule of a standard XRechnung document (`BR-DE-*`, `BR-TMP-2`, `BR-TMP-6`). Not the 22 of XRechnung Extension and CVD (`BR-DEX-*`, `BR-DE-CVD-*`), whose documents are refused by name |
75
76
 
76
- **Not built is said, never assumed.** `mockeinvoice/rules/published.py` lists every published rule of every layer by identifier and flag, and a report lists the ones that did not run. A document nothing was found wrong with is `not judged`, not `valid`, for as long as a fatal rule that could apply to it is unbuilt.
77
+ **Not built is said, never assumed.** `mockeinvoice/rules/published.py` lists every published rule of every layer by identifier and flag, and a report lists the ones that did not run. A document nothing was found wrong with is `not judged`, not `valid`, for as long as a fatal rule that could apply to it is unbuilt. Every rule that can apply to a document this package takes is built, so no document is `not judged` today; the verdict is kept for the day a specification publishes a rule before this package has it.
77
78
 
78
- **A rule that could not apply is not waited on.** Peppol's rules for a seller in one country say nothing of a document from another, and the rules of XRechnung Extension and CVD say nothing of a standard XRechnung document. A report lists them apart, as `not_applicable`, and they do not hold back its verdict. A document counts as one of a country's if the seller's VAT identifier, its tax representative's, or its address says so: all three at once, which is never narrower than the published rules' own test, so nothing is waved through that a national rule could have caught.
79
+ **A rule that could not apply is not waited on.** The rules of XRechnung Extension and CVD say nothing of a standard XRechnung document. A report lists them apart, as `not_applicable`, and they do not hold back its verdict.
80
+
81
+ **Where a seller is, is not one question.** Peppol's rules for a seller's country do not agree on what makes a document one of theirs. Norway, Italy and Greece go by the first two letters of the seller's VAT identifier, then its tax representative's, and only then by the country of its address. Denmark, Iceland and Sweden go by the address, written exactly (`dk` is not Denmark). The Netherlands goes by the address however it is written. Each rule here goes by what its published test goes by, and `mockeinvoice/rules/peppol_national.py` says which.
79
82
 
80
83
  **Two things a rule is asked of.** Most rules are asked of the model. The 756 about the UBL document itself are asked of its elements, because they are about elements the standard has no term for and the model does not hold: `validate(xml)` asks them of the document as it was sent. `check(document, specification)`, given a model and no XML, asks them of the document that model would be written as. Where one of them reports an element, the reader's own finding about that element (`UNHELD`, `REPEATED`) is left out, so an element is reported once, under the published rule's name where there is one.
81
84
 
@@ -215,7 +218,69 @@ $ curl -s --data-binary @tests/samples/peppol-invoice.xml http://127.0.0.1:8101/
215
218
 
216
219
  A document's `"status"` is the last thing its buyer said. **A response out of order is taken and ignored.** Peppol's guide says of a response that follows a rejection or a payment in full, or follows an acceptance with anything but paid, that the seller may ignore it. So the supplier does: the response is `201` and kept, marked `"ignored"` with the rule it broke, and the status does not move. The same for one that goes back in the order.
217
220
 
218
- The supplier writes no invoices. It sends what it is given.
221
+ #### An order, and the invoice for it
222
+
223
+ The supplier can be told of an order, and writes and sends the invoice for it itself.
224
+
225
+ ```
226
+ $ curl -s -d '{"number": "4500000017",
227
+ "buyer": {"name": "ACME Corporation", "endpoint": "0088:4098765000003",
228
+ "city": "Berlin", "postal_code": "10115", "country": "DE"},
229
+ "lines": [{"line": "10", "name": "Widget", "quantity": 40, "unit": "C62", "price": "20.00"}]}' \
230
+ http://127.0.0.1:8101/_mock/orders
231
+ {
232
+ "id": "1",
233
+ "number": "4500000017",
234
+ ...
235
+ "status": "open",
236
+ ...
237
+ }
238
+ $ curl -s -X POST http://127.0.0.1:8101/_mock/orders/1/invoices
239
+ {
240
+ "id": "1",
241
+ "kind": "Invoice",
242
+ "number": "GLX-0001",
243
+ ...
244
+ "verdict": "valid",
245
+ "delivery": {
246
+ "to": "http://127.0.0.1:8100/invoices",
247
+ "status": 201
248
+ },
249
+ "order": "/_mock/orders/1",
250
+ ...
251
+ }
252
+ ```
253
+
254
+ | | |
255
+ | --- | --- |
256
+ | `POST /_mock/orders` | Tell the supplier of an order: `{"number", "reference", "buyer", "currency", "lines"}`. The buyer is `{"name", "endpoint", "vat", "legal_id", "street", "city", "postal_code", "country"}` and needs its name, its country, and its endpoint written `scheme:identifier`. A line is `{"line", "name", "seller_item", "buyer_item", "quantity", "unit", "price"}` and needs its name, a quantity above nought, a unit (a code of UN/ECE Recommendation 20: `C62` is "one") and a price for one unit, without VAT. A line with no number has its place in the order for one. `201` and it is held; nothing is billed. `400` for what it lacks or does not know. `422` `UNBILLABLE` with the findings where the invoice it would be billed with is not `valid`: the invoice is written and held to its rules when the order comes, and thrown away. |
257
+ | `GET /_mock/orders`, `/_mock/orders/<id>` | the orders; one, with what is billed and what is open of each line, and the invoices sent for it |
258
+ | `POST /_mock/orders/<id>/invoices` | Write the invoice for all that is not yet billed, and send it as `POST /_mock/sent` would: the answer is the same, and the document is at `/_mock/sent/<id>` with the rest. `{"lines": [{"line": "10", "quantity": 15}]}` bills that much of those lines and no more. `409` `OVER-BILLED` for more than is open of a line, `409` `BILLED` when nothing is. `422` `NOT-VALID` with the findings if the invoice is not `valid`, which can only be because the supplier was changed since the order came; it is not sent, nothing is counted as billed, and there is no forcing it. |
259
+ | `GET`, `PATCH /_mock/supplier` | who the supplier is, and changing it: any of the fields below. `POST /_mock/reset` forgets the orders and starts the invoice numbers again, and leaves this alone. |
260
+
261
+ **An order is JSON here, and not a document of any standard.** Peppol has one, the UBL `Order` of its ordering profiles, with rules of its own. None of them is built, and taking the document in without holding it to them would be half of it. So the order is on a `/_mock` path, where the test's own controls are, and says no more than an invoice needs.
262
+
263
+ **A number is never a float.** A quantity or a price is taken as text or as a JSON number, and a JSON number is read as the decimal it was written as.
264
+
265
+ **Nothing is billed until it is asked for**, as nothing else here happens by itself.
266
+
267
+ **What the supplier makes up, and from what.** An order does not say who is selling, where to pay, or what the invoice is called. The invoice is a Peppol BIS Billing 3.0 invoice (type `380`, billing's profile `01`), and what is in it comes from:
268
+
269
+ | In the invoice | From |
270
+ | --- | --- |
271
+ | The seller: name (BT-27), electronic address (BT-34), VAT identifier (BT-31), legal registration (BT-30), address (BT-35, 37, 38, 40), contact (BT-41, 42, 43) | the supplier: `name`, `endpoint`, `vat`, `legal_id`, `street`, `city`, `postal_code`, `country`, `contact`, `telephone`, `email`. Until it is changed it is Globex GmbH of Hamburg, the seller of this project's sample invoice. |
272
+ | The invoice number (BT-1) | the supplier's `number_prefix` and a count of the invoices it has written: `GLX-0001`. A document sent with `POST /_mock/sent` is not counted. |
273
+ | The issue date (BT-2) and the due date (BT-9) | the clock, and the clock plus the supplier's `payment_days` (30) |
274
+ | The currency (BT-5) | the order's, or the supplier's `currency` (`EUR`) |
275
+ | The order (BT-13) and each line's order line (BT-132) | the order's number and its lines' numbers |
276
+ | The buyer reference (BT-10) | the order's `reference`; **where it has none, the order's number again.** Peppol's rules for Germany want a buyer reference on every invoice between two German parties, and an order number is what a supplier with nothing else has. |
277
+ | The buyer (BT-44, 47, 48, 49, 50, 52, 53, 55) | the order's buyer |
278
+ | How to pay (BG-16): a credit transfer (code `30`) to the account (BT-84, 85, 86), quoting the invoice number (BT-83) | the supplier's `iban`, `name` and `bic` |
279
+ | Each line: quantity, unit, item name, the seller's and the buyer's item number, price | the order's line. The line's net amount (BT-131) is quantity times price, rounded to the cent with a half going up. |
280
+ | VAT: category `S` on every line at one rate (BT-151, 152), and one breakdown (BG-23) | the supplier's `vat_rate` (19). The tax is the rate on the sum of the lines, rounded once. |
281
+ | The totals (BT-106, 109, 110, 112, 115) | the sums of the above. Nothing is prepaid, and there are no allowances or charges. |
282
+
283
+ **What it does not write:** a line at any VAT category but `S` (exempt, nought, reverse charge, an intra-community supply), allowances and charges, a delivery date, notes, payment terms as text, a credit note, an XRechnung. A rate of nought is refused for that reason. An invoice that needs one of these is written by whoever drives the mock and sent with `POST /_mock/sent`, as before.
219
284
 
220
285
  ### Both
221
286
 
@@ -224,8 +289,17 @@ The supplier writes no invoices. It sends what it is given.
224
289
  | `GET /_mock/health` | that it is up, its version, and how many documents it holds and has sent |
225
290
  | `GET /_mock/turned-away` | what was not taken in, on which side, and why |
226
291
  | `POST /_mock/validate` | an invoice, a credit note or an Invoice Response held to its rules, and not kept |
292
+ | `GET /_mock/terms` | the business terms and groups this package knows, by number: `{"terms": [{"id", "name", "group", "kind"}], "groups": [{"id", "name", "repeats", "inside", "terms"}]}`, 164 terms and 32 groups, in the standard's order |
293
+ | `GET /_mock/terms/BT-13`, `/_mock/terms/BG-25` | one term or one group, as in the list. `404` `NO-SUCH-TERM` for anything else, written any other way (`bt-13`) |
227
294
  | `POST /_mock/reset` | forget every document and response, on both sides |
228
295
 
296
+ **The terms are the package's own table, served.** `GET /_mock/terms` is made from `mockeinvoice.model.TERMS` and `GROUPS` when it is asked, so what a client reads is what the reader, the writer and the rules go by.
297
+
298
+ - A term's `kind` is one of `amount`, `binary`, `code`, `date`, `identifier`, `percentage`, `price`, `quantity`, `text`. Its `group` is `null` where the standard puts it on the document itself.
299
+ - A group's `repeats` says how this package holds it and not how often the standard allows it: `true` where it is kept as a group of its own (the lines, the VAT breakdown), `false` where its terms are held by the document or the line. `inside` is the group it is written within, if any.
300
+ - Three terms are written as an attribute of another's element (`BT-130`, the unit, is `BT-129`'s `unitCode`) and say so in `attribute_of`. Sixteen more, the scheme identifiers and their like (`BT-29-1`), have a number and no entry of their own here: each is listed under `attributes` on the term that holds it, and asked for by itself is `404` saying where it is.
301
+ - A finding still gives a term by its number alone. Its path is not always a term (a rule about the XML gives an XPath), and a client that wants the name has this to look it up in.
302
+
229
303
  To see the two sides talk, run two: a buyer with `--seller-url http://127.0.0.1:8101/responses`, and a supplier with `--buyer-url http://127.0.0.1:8100/invoices`.
230
304
 
231
305
  ## What it refuses
@@ -268,6 +342,7 @@ A group with nothing in it is still there: an empty `TaxSubtotal` is a VAT break
268
342
  - **A duplicate is taken like the first.** A second document with a seller and a number already held is held too. A real buyer's system would likely reject it; with which status and reason is not known here, and is not guessed.
269
343
  - **Any buyer an invoice names is this mock**, and no document is turned away because its buyer is unknown. Nor does the supplier compare who a response is from with who its invoice was for: a response is matched by the invoice's number and type code alone, and of two documents sent with one number it is taken to be about the later.
270
344
  - **A response about a document that was never sent is turned away**, and so is one that names a type code other than its document's (`OP-BR111-R014`). The guide says the code must be the document's own and not what a seller does when it is not; and on the real network a response would be delivered whatever it was about. Both are this project's choices.
345
+ - **How a real supplier bills an order is not known here, and the supplier's way is this project's own.** That it bills when asked and not on shipping, numbers its invoices by counting, takes a second order with a number it already holds, counts an invoice as billed though the buyer's system could not be reached or turned it away, and gives the order number as the buyer reference where it was given none: none of it is from a published source. An order's prices are also taken as they are; there is no price list to hold them to.
271
346
  - **Nothing is kept on disk.** Documents and responses are gone when the server stops.
272
347
  - **No XML Schema validation.** The published validators check the UBL schema before any rule. The standard library cannot, so this reads what it understands and reports what it did not. A document that is not schema-valid is not refused for that.
273
348
  - **The writer does not promise the same bytes.** Reading what was written gives an equal document. The order among repeats of different kinds (allowances and charges, say), the namespace prefixes, white space, comments and anything `UNHELD` are not kept.
@@ -306,15 +381,16 @@ The rules, the reader and the writer are tested against files this project did n
306
381
  | EN 16931 examples | 17 documents | read, written back, and compared element for element by a reader that is not this one |
307
382
  | XRechnung test suite | 39 valid XRechnung 3.0 documents | read with nothing to say, written back element for element, and every one is `valid`: no rule of the core's 979 or XRechnung's 34 fails or warns. Seventeen are told, as information, that they do not say when they were delivered (`BR-DE-TMP-32`) |
308
383
  | XRechnung test suite | 5 Extension and 1 CVD document | refused by name |
309
- | Peppol unit tests | 400 cases | all 396 agree: 331 for Peppol's own rules and 65 for Germany's. The other 4 are about a UBL Order |
384
+ | Peppol unit tests | 673 cases, with 678 things said of a rule | all 678 agree: 331 for Peppol's own rules, 65 for Germany's and 282 for the other six countries that have any. 4 cases are about a UBL Order. Iceland's ten rules have none |
310
385
  | Peppol Invoice Response | 14 examples and 13 unit test cases | every example is read with nothing to say, written back element for element, and no rule has anything to say of it; all 13 cases agree. The structure and the code lists here are compared with the ones Peppol describes |
311
- | Peppol examples | 10 documents | read with nothing to say, written back element for element, and no rule has anything to say of them. Nine are `valid`; the tenth is from a seller in Sweden, whose rules are not built, and is `not judged` |
386
+ | Peppol examples | 10 documents | read with nothing to say, written back element for element, and no rule has anything to say of them. All ten are `valid` |
387
+ | Peppol national examples | 3 documents, kept by Peppol's national authorities | two are `valid` with a warning each; the third, a Greek invoice through a tax representative, is `invalid` by the core's `BR-06`, because its seller has no legal name |
312
388
 
313
389
  - **A case for a rule that is not built is never counted as agreeing.** The counts are written out in `tests/test_upstream.py`, so building a rule moves a number there on purpose.
314
390
  - **A disagreement is a failure here** until the published rule shows the case to be wrong; then it is listed in `tests/upstream.py` by name, with the reason. None is.
315
391
  - **To read the counts:** `python -m tests.upstream`. CI prints them on every run.
316
392
 
317
- Peppol's files are not in this repository (see Licences). `python tools/fetch_peppol.py` fetches the 101 listed in `tools/peppol-files.tsv` (billing's examples, its unit tests, and the rule file itself, which a test reads Peppol's code lists from) and the 28 in `tools/peppol-response-files.tsv` (the Invoice Response's examples, unit tests, hand-written rules, code lists and the description of its structure) from the pinned commit, checks each against the git hash listed for it, and puts them where the tests look. Without them those two tests are skipped and say so. CI fetches them on two of its jobs.
393
+ Peppol's files are not in this repository (see Licences). `python tools/fetch_peppol.py` fetches the 167 listed in `tools/peppol-files.tsv` (billing's examples and national examples, its unit tests, and the rule file itself, which a test reads Peppol's code lists from) and the 28 in `tools/peppol-response-files.tsv` (the Invoice Response's examples, unit tests, hand-written rules, code lists and the description of its structure) from the pinned commit, checks each against the git hash listed for it, and puts them where the tests look. Without them those two tests are skipped and say so. CI fetches them on two of its jobs.
318
394
 
319
395
  Two things were checked while building and are not tests, because their sources are not here:
320
396
 
@@ -325,6 +401,8 @@ Two things were checked while building and are not tests, because their sources
325
401
 
326
402
  The code values of UNTDID 1001, the United Nations' list of kinds of document, are in `mockeinvoice/rules/untdid.py`: 727 numbers from edition D.17A as UNECE publishes it, and none of the names or descriptions, which are the United Nations'. The directory's pages say "Copyright United Nations, all rights reserved"; the numbers are taken to be facts and not text.
327
403
 
404
+ The names of the 164 business terms and 32 business groups in `mockeinvoice/model.py` are, by that file's own account, the standard's names for them, typed in by hand ("Invoice number", "Seller postal address"). None of the standard's descriptions or usage notes is there. They have been in the package since 0.1.0, and the server now gives them out as well (`GET /_mock/terms`).
405
+
328
406
  Nothing of Peppol's is in the package. Its rules are written here by hand from reading the tests, each under its published identifier and in this project's words. Where a Peppol rule holds a value to a code list, the list is the EN 16931 one already in the package, with the differences named: one currency code, twenty-one electronic address schemes, and two short lists of document type codes. A test compares the result with Peppol's own lists whenever its files have been fetched.
329
407
 
330
408
  The package is MIT, with two files that are not. `mockeinvoice/rules/codelists.py` holds the code lists of the EN 16931 code list rules (currencies, countries, units of measure and the rest), generated from the published rules by `tools/code_lists.py` and kept exactly as published. `mockeinvoice/rules/ublsyntax.py` holds the paths of the rules about the UBL document itself, generated by `tools/ubl_syntax.py`. Both are from the EN 16931 validation artefacts and are under the EUPL 1.2, whose text is beside them and goes into the wheel with them. One list more is in `rules/en16931.py`, the country prefixes `BR-CO-09` searches, and is from the same source. The wheel holds the package and nothing else.