mock-einvoice 0.2.0__tar.gz → 0.4.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 (418) hide show
  1. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/CHANGELOG.md +98 -0
  2. {mock_einvoice-0.2.0/mock_einvoice.egg-info → mock_einvoice-0.4.0}/PKG-INFO +132 -9
  3. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/README.md +130 -8
  4. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0/mock_einvoice.egg-info}/PKG-INFO +132 -9
  5. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mock_einvoice.egg-info/SOURCES.txt +5 -0
  6. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/__init__.py +4 -3
  7. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/buyer.py +5 -3
  8. mock_einvoice-0.4.0/mockeinvoice/clock.py +128 -0
  9. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/model.py +37 -0
  10. mock_einvoice-0.4.0/mockeinvoice/order.py +291 -0
  11. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/server.py +170 -16
  12. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/supplier.py +127 -6
  13. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/ubl.py +150 -9
  14. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/pyproject.toml +2 -1
  15. mock_einvoice-0.4.0/tests/test_binding.py +330 -0
  16. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_buyer.py +2 -2
  17. mock_einvoice-0.4.0/tests/test_clock.py +156 -0
  18. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_model.py +56 -1
  19. mock_einvoice-0.4.0/tests/test_order.py +410 -0
  20. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_server.py +319 -8
  21. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_supplier.py +2 -2
  22. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/LICENSE +0 -0
  23. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/MANIFEST.in +0 -0
  24. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mock_einvoice.egg-info/dependency_links.txt +0 -0
  25. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mock_einvoice.egg-info/entry_points.txt +0 -0
  26. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mock_einvoice.egg-info/top_level.txt +0 -0
  27. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/__main__.py +0 -0
  28. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/response.py +0 -0
  29. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/LICENSE-EUPL-1.2.txt +0 -0
  30. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/__init__.py +0 -0
  31. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/calculation.py +0 -0
  32. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/codelists.py +0 -0
  33. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/en16931.py +0 -0
  34. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/en16931_codes.py +0 -0
  35. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/en16931_ubl.py +0 -0
  36. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/en16931_vat.py +0 -0
  37. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/german.py +0 -0
  38. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/peppol.py +0 -0
  39. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/peppol_de.py +0 -0
  40. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/peppol_national.py +0 -0
  41. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/peppol_response.py +0 -0
  42. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/published.py +0 -0
  43. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/tree.py +0 -0
  44. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/ublsyntax.py +0 -0
  45. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/untdid.py +0 -0
  46. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/rules/xrechnung.py +0 -0
  47. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/mockeinvoice/specification.py +0 -0
  48. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/setup.cfg +0 -0
  49. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/__init__.py +0 -0
  50. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/FT G2G_TD01 con Allegato, Bonifico e Split Payment.xml +0 -0
  51. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/LICENSE-EUPL-1.2.txt +0 -0
  52. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/README.md +0 -0
  53. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/guide-example1.xml +0 -0
  54. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/guide-example2.xml +0 -0
  55. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/guide-example3.xml +0 -0
  56. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/issue116.xml +0 -0
  57. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/sample-discount-price.xml +0 -0
  58. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-creditnote1.xml +0 -0
  59. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example1.xml +0 -0
  60. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example10.xml +0 -0
  61. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example2.xml +0 -0
  62. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example3.xml +0 -0
  63. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example4.xml +0 -0
  64. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example5.xml +0 -0
  65. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example6.xml +0 -0
  66. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example7.xml +0 -0
  67. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example8.xml +0 -0
  68. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/ubl-tc434-example9.xml +0 -0
  69. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-01.xml +0 -0
  70. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-02.xml +0 -0
  71. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-03.xml +0 -0
  72. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-04.xml +0 -0
  73. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-05.xml +0 -0
  74. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-06.xml +0 -0
  75. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-07.xml +0 -0
  76. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-08.xml +0 -0
  77. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-09.xml +0 -0
  78. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-10.xml +0 -0
  79. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-11.xml +0 -0
  80. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-12.xml +0 -0
  81. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-13.xml +0 -0
  82. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-14.xml +0 -0
  83. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-15.xml +0 -0
  84. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-16.xml +0 -0
  85. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-17.xml +0 -0
  86. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-18.xml +0 -0
  87. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-19.xml +0 -0
  88. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-20.xml +0 -0
  89. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-21.xml +0 -0
  90. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-22.xml +0 -0
  91. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-23.xml +0 -0
  92. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-24.xml +0 -0
  93. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-25.xml +0 -0
  94. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-26.xml +0 -0
  95. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-27.xml +0 -0
  96. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-28.xml +0 -0
  97. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-29.xml +0 -0
  98. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-30.xml +0 -0
  99. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-31.xml +0 -0
  100. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-32.xml +0 -0
  101. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-33.xml +0 -0
  102. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-36.xml +0 -0
  103. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-37.xml +0 -0
  104. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-38.xml +0 -0
  105. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-41.xml +0 -0
  106. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-42.xml +0 -0
  107. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-43.xml +0 -0
  108. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-44.xml +0 -0
  109. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-45.xml +0 -0
  110. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-46.xml +0 -0
  111. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-47.xml +0 -0
  112. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-48.xml +0 -0
  113. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-49.xml +0 -0
  114. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-50.xml +0 -0
  115. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-51.xml +0 -0
  116. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-52.xml +0 -0
  117. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-53.xml +0 -0
  118. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-54.xml +0 -0
  119. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-55.xml +0 -0
  120. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-56.xml +0 -0
  121. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-57.xml +0 -0
  122. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-61.xml +0 -0
  123. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-62.xml +0 -0
  124. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-63.xml +0 -0
  125. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-64.xml +0 -0
  126. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-65.xml +0 -0
  127. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CL-16.xml +0 -0
  128. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CL-18.xml +0 -0
  129. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CL-24.xml +0 -0
  130. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CO-13.xml +0 -0
  131. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CO-15-2.xml +0 -0
  132. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CO-15.xml +0 -0
  133. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-CO-25.xml +0 -0
  134. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-E-01.xml +0 -0
  135. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/BR-S-09.xml +0 -0
  136. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/UBL-SR-42.xml +0 -0
  137. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/UBL-SR-43.xml +0 -0
  138. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/UBL-SR-44.xml +0 -0
  139. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/CreditNote-unit-UBL/UBL-SR-47.xml +0 -0
  140. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-01.xml +0 -0
  141. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-02.xml +0 -0
  142. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-03.xml +0 -0
  143. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-04.xml +0 -0
  144. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-05.xml +0 -0
  145. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-06.xml +0 -0
  146. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-07.xml +0 -0
  147. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-08.xml +0 -0
  148. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-09.xml +0 -0
  149. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-10.xml +0 -0
  150. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-11.xml +0 -0
  151. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-12.xml +0 -0
  152. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-13.xml +0 -0
  153. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-14.xml +0 -0
  154. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-15.xml +0 -0
  155. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-16.xml +0 -0
  156. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-17.xml +0 -0
  157. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-18.xml +0 -0
  158. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-19.xml +0 -0
  159. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-20.xml +0 -0
  160. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-21.xml +0 -0
  161. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-22.xml +0 -0
  162. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-23.xml +0 -0
  163. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-24.xml +0 -0
  164. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-25.xml +0 -0
  165. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-26.xml +0 -0
  166. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-27.xml +0 -0
  167. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-28.xml +0 -0
  168. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-29.xml +0 -0
  169. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-30.xml +0 -0
  170. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-31.xml +0 -0
  171. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-32.xml +0 -0
  172. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-33.xml +0 -0
  173. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-36.xml +0 -0
  174. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-37.xml +0 -0
  175. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-38.xml +0 -0
  176. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-41.xml +0 -0
  177. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-42.xml +0 -0
  178. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-43.xml +0 -0
  179. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-44.xml +0 -0
  180. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-45.xml +0 -0
  181. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-46.xml +0 -0
  182. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-47.xml +0 -0
  183. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-48.xml +0 -0
  184. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-49.xml +0 -0
  185. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-50.xml +0 -0
  186. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-51.xml +0 -0
  187. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-52.xml +0 -0
  188. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-53.xml +0 -0
  189. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-54.xml +0 -0
  190. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-55.xml +0 -0
  191. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-56.xml +0 -0
  192. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-57.xml +0 -0
  193. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-61.xml +0 -0
  194. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-62.xml +0 -0
  195. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-63.xml +0 -0
  196. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-64.xml +0 -0
  197. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-65.xml +0 -0
  198. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-01.xml +0 -0
  199. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-02.xml +0 -0
  200. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-03.xml +0 -0
  201. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-04.xml +0 -0
  202. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-05.xml +0 -0
  203. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-06.xml +0 -0
  204. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-07.xml +0 -0
  205. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-08.xml +0 -0
  206. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-09.xml +0 -0
  207. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-AE-10.xml +0 -0
  208. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-01.xml +0 -0
  209. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-03.xml +0 -0
  210. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-04.xml +0 -0
  211. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-05.xml +0 -0
  212. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-06.xml +0 -0
  213. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-07.xml +0 -0
  214. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-10.xml +0 -0
  215. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-11.xml +0 -0
  216. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-13.xml +0 -0
  217. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-14.xml +0 -0
  218. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-15.xml +0 -0
  219. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-16.xml +0 -0
  220. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-17.xml +0 -0
  221. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-18.xml +0 -0
  222. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-19.xml +0 -0
  223. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-20.xml +0 -0
  224. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-21.xml +0 -0
  225. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-23.xml +0 -0
  226. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CL-24.xml +0 -0
  227. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-03.xml +0 -0
  228. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-04.xml +0 -0
  229. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-09.xml +0 -0
  230. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-10.xml +0 -0
  231. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-11.xml +0 -0
  232. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-12.xml +0 -0
  233. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-13.xml +0 -0
  234. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-14.xml +0 -0
  235. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-15-2.xml +0 -0
  236. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-15.xml +0 -0
  237. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-16.xml +0 -0
  238. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-17.xml +0 -0
  239. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-18.xml +0 -0
  240. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-19.xml +0 -0
  241. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-20.xml +0 -0
  242. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-21.xml +0 -0
  243. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-22.xml +0 -0
  244. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-23.xml +0 -0
  245. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-24.xml +0 -0
  246. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-25.xml +0 -0
  247. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-CO-26.xml +0 -0
  248. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-01.xml +0 -0
  249. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-02.xml +0 -0
  250. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-03.xml +0 -0
  251. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-04.xml +0 -0
  252. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-05.xml +0 -0
  253. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-06.xml +0 -0
  254. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-07.xml +0 -0
  255. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-08.xml +0 -0
  256. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-09.xml +0 -0
  257. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-E-10.xml +0 -0
  258. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-01.xml +0 -0
  259. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-02.xml +0 -0
  260. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-03.xml +0 -0
  261. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-04.xml +0 -0
  262. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-05.xml +0 -0
  263. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-06.xml +0 -0
  264. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-07.xml +0 -0
  265. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-08.xml +0 -0
  266. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-09.xml +0 -0
  267. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-G-10.xml +0 -0
  268. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-01.xml +0 -0
  269. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-02.xml +0 -0
  270. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-03.xml +0 -0
  271. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-04.xml +0 -0
  272. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-05.xml +0 -0
  273. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-06.xml +0 -0
  274. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-07.xml +0 -0
  275. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-08.xml +0 -0
  276. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-09.xml +0 -0
  277. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-11.xml +0 -0
  278. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IC-12.xml +0 -0
  279. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-01.xml +0 -0
  280. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-02.xml +0 -0
  281. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-03.xml +0 -0
  282. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-04.xml +0 -0
  283. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-05.xml +0 -0
  284. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-06.xml +0 -0
  285. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-07.xml +0 -0
  286. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-08-1.xml +0 -0
  287. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-08-2.xml +0 -0
  288. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-08-3.xml +0 -0
  289. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-09.xml +0 -0
  290. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IG-10.xml +0 -0
  291. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-01.xml +0 -0
  292. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-02.xml +0 -0
  293. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-03.xml +0 -0
  294. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-04.xml +0 -0
  295. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-05.xml +0 -0
  296. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-06.xml +0 -0
  297. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-07.xml +0 -0
  298. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-08-1.xml +0 -0
  299. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-08-2.xml +0 -0
  300. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-08-3.xml +0 -0
  301. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-09.xml +0 -0
  302. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-IP-10.xml +0 -0
  303. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-01.xml +0 -0
  304. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-02.xml +0 -0
  305. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-03.xml +0 -0
  306. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-04.xml +0 -0
  307. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-05.xml +0 -0
  308. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-06.xml +0 -0
  309. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-07.xml +0 -0
  310. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-08.xml +0 -0
  311. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-09.xml +0 -0
  312. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-10.xml +0 -0
  313. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-11.xml +0 -0
  314. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-12.xml +0 -0
  315. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-13.xml +0 -0
  316. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-O-14.xml +0 -0
  317. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-01.xml +0 -0
  318. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-02.xml +0 -0
  319. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-03.xml +0 -0
  320. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-04.xml +0 -0
  321. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-05.xml +0 -0
  322. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-06.xml +0 -0
  323. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-07.xml +0 -0
  324. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-08-1.xml +0 -0
  325. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-08-2.xml +0 -0
  326. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-08-3.xml +0 -0
  327. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-09.xml +0 -0
  328. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-S-10.xml +0 -0
  329. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-01.xml +0 -0
  330. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-02.xml +0 -0
  331. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-03.xml +0 -0
  332. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-04.xml +0 -0
  333. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-05.xml +0 -0
  334. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-06.xml +0 -0
  335. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-07.xml +0 -0
  336. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-08.xml +0 -0
  337. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-09.xml +0 -0
  338. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/BR-Z-10.xml +0 -0
  339. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-DT-01.xml +0 -0
  340. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-DT-06.xml +0 -0
  341. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-DT-07.xml +0 -0
  342. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-12.xml +0 -0
  343. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-18.xml +0 -0
  344. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-42.xml +0 -0
  345. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-44.xml +0 -0
  346. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/en16931/unit/Invoice-unit-UBL/UBL-SR-47.xml +0 -0
  347. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/LICENSE-Apache-2.0.txt +0 -0
  348. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/README.md +0 -0
  349. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/extension/04.01a-INVOICE_ubl.xml +0 -0
  350. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/extension/04.02a-INVOICE_ubl.xml +0 -0
  351. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/extension/04.03a-INVOICE_ubl.xml +0 -0
  352. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/extension/04.04a-INVOICE_ubl.xml +0 -0
  353. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/extension/05.01a-INVOICE_ubl.xml +0 -0
  354. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.01a-INVOICE_ubl.xml +0 -0
  355. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.02a-INVOICE_ubl.xml +0 -0
  356. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.03a-INVOICE_ubl.xml +0 -0
  357. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.04a-INVOICE_ubl.xml +0 -0
  358. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.05a-INVOICE_ubl.xml +0 -0
  359. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.06a-INVOICE_ubl.xml +0 -0
  360. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.07a-INVOICE_ubl.xml +0 -0
  361. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.08a-INVOICE_ubl.xml +0 -0
  362. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.09a-INVOICE_ubl.xml +0 -0
  363. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.10a-INVOICE_ubl.xml +0 -0
  364. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.11a-INVOICE_ubl.xml +0 -0
  365. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.12a-INVOICE_ubl.xml +0 -0
  366. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.13a-INVOICE_ubl.xml +0 -0
  367. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.14a-INVOICE_ubl.xml +0 -0
  368. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.15a-INVOICE_ubl.xml +0 -0
  369. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.17a-INVOICE_ubl.xml +0 -0
  370. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.18a-INVOICE_ubl.xml +0 -0
  371. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.19a-INVOICE_ubl.xml +0 -0
  372. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.20a-INVOICE_ubl.xml +0 -0
  373. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/01.21a-INVOICE_ubl.xml +0 -0
  374. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/02.01a-INVOICE_ubl.xml +0 -0
  375. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/02.02a-INVOICE_ubl.xml +0 -0
  376. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/02.03a-INVOICE_ubl.xml +0 -0
  377. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/02.04a-INVOICE_ubl.xml +0 -0
  378. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/02.05a-INVOICE_ubl.xml +0 -0
  379. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/02.06a-INVOICE_ubl.xml +0 -0
  380. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/03.01a-INVOICE_ubl.xml +0 -0
  381. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/03.02a-INVOICE_ubl.xml +0 -0
  382. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/03.03a-INVOICE_ubl.xml +0 -0
  383. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/03.04a-INVOICE_ubl.xml +0 -0
  384. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/03.05a-INVOICE_ubl.xml +0 -0
  385. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/03.06a-INVOICE_ubl.xml +0 -0
  386. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/business-cases/standard/03.07a-INVOICE_ubl.xml +0 -0
  387. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/technical-cases/cius/01.01_comprehensive_test_ubl.xml +0 -0
  388. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/technical-cases/cius/01.02_comprehensive_test_ubl.xml +0 -0
  389. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/technical-cases/cius/01.03_comprehensive_test_ubl.xml +0 -0
  390. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/technical-cases/cius/01.04_comprehensive_test_ubl.xml +0 -0
  391. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/technical-cases/cius/01.05_minimal_test_ubl.xml +0 -0
  392. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/technical-cases/cius/01.06_minimal_test_ubl.xml +0 -0
  393. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/external/xrechnung/technical-cases/cvd/02.01a-cvd_INVOICE_ubl.xml +0 -0
  394. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/peppol-creditnote.xml +0 -0
  395. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/peppol-invoice.xml +0 -0
  396. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/peppol-response.xml +0 -0
  397. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/samples/xrechnung-invoice.xml +0 -0
  398. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_business_rules.py +0 -0
  399. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_code_rules.py +0 -0
  400. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_peppol_de_rules.py +0 -0
  401. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_peppol_national_rules.py +0 -0
  402. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_peppol_rules.py +0 -0
  403. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_reading.py +0 -0
  404. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_refusals.py +0 -0
  405. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_response.py +0 -0
  406. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_rules.py +0 -0
  407. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_ubl_rules.py +0 -0
  408. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_upstream.py +0 -0
  409. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_vat_rules.py +0 -0
  410. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_writing.py +0 -0
  411. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/test_xrechnung_rules.py +0 -0
  412. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tests/upstream.py +0 -0
  413. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tools/code_lists.py +0 -0
  414. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tools/fetch_peppol.py +0 -0
  415. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tools/peppol-files.tsv +0 -0
  416. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tools/peppol-response-files.tsv +0 -0
  417. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tools/published_rules.py +0 -0
  418. {mock_einvoice-0.2.0 → mock_einvoice-0.4.0}/tools/ubl_syntax.py +0 -0
@@ -10,6 +10,99 @@ says so where it does.
10
10
 
11
11
  Nothing yet.
12
12
 
13
+ ## [0.4.0] - 2026-10-22
14
+
15
+ The binding is served, and the clock can be moved. **Every stamp changes**:
16
+ it ends in `Z` now.
17
+
18
+ ### Added
19
+
20
+ - **The UBL binding over HTTP** ([#39]). `GET /_mock/binding/Invoice` and
21
+ `/_mock/binding/CreditNote` give where each business term and group is in
22
+ the document, as a tree of elements: each node its element and its term,
23
+ group or fixed value, the elements UBL requires that have no term among
24
+ them. It is made from `mockeinvoice.ubl.BINDINGS`, the reader's and
25
+ writer's own table, when asked. Where one element has several entries
26
+ (an allowance or a charge), each says the test that picks it, as words and
27
+ as data. A test reads this project's samples and fifty published documents
28
+ by the served binding alone and comes to what the reader comes to. In
29
+ Python, `ubl.described`.
30
+ - **A clock that can be moved** ([#41]). `POST /_mock/advance` takes
31
+ `seconds` or a time `to` move to, in the query string or as JSON, and what
32
+ is received or said afterwards is stamped then: the stamps, the date and
33
+ time in an Invoice Response, and the dates of an invoice the supplier
34
+ writes. It does not go backwards. In Python, `mockeinvoice.clock.Clock`,
35
+ which a `Buyer` and a `Supplier` take as their `now`.
36
+ - `GET /_mock/health` says what time it is by the clock, as `"now"`.
37
+ - `--clock` takes a time with `Z` or an offset (`2026-10-07T11:00+02:00`),
38
+ and a date alone.
39
+ - A time whose `+` offset a query string turned into a space
40
+ (`?to=2026-10-07T11:00+02:00`) is refused with a word saying a `+` is
41
+ written `%2B` there ([#44]). Only such a time: one wrong another way is
42
+ not sent looking for a `+`.
43
+
44
+ ### Changed
45
+
46
+ - The README and the package's page on PyPI point at the project's page on
47
+ rickseufert.com ([#43](https://github.com/rseufert/mock-einvoice/pull/43)).
48
+ - **A stamp says its zone.** `"received"` and `"sent"` were
49
+ `2026-10-07T09:00:00` and are `2026-10-07T09:00:00Z`. They were UTC before
50
+ and are UTC now; a client that parsed them as a time with no zone has to
51
+ take the `Z`.
52
+ - **What `--clock` means is written down, and is what it did**: the clock is
53
+ pinned to that moment, in UTC, and stands still until it is advanced. A
54
+ `now` given to a `Buyer` or a `Supplier` with a zone other than UTC is said
55
+ in UTC, where its own wall time was written before.
56
+ - `--clock` refuses what is not a time with a sentence, and no longer takes
57
+ the other forms `datetime.fromisoformat` does (a space for the `T`,
58
+ fractions of a second).
59
+ - The tests that pick an entry of the binding (`ubl.sepa`,
60
+ `ubl.in_accounting_currency`, and what `ubl.indicator` and
61
+ `ubl.document_type` return) are `ubl.When` objects, called as the
62
+ functions were. Nothing is read or written differently.
63
+
64
+ ## [0.3.0] - 2026-10-10
65
+
66
+ The supplier writes an invoice itself, and the business terms can be read
67
+ from the running mock. Nothing changes for a document sent with
68
+ `POST /_mock/sent`, but for one key more in what is said of it.
69
+
70
+ ### Added
71
+
72
+ - **A supplier that is told of an order, and writes and sends the invoice for
73
+ it** ([#33]). `POST /_mock/orders` takes an order as JSON, and
74
+ `POST /_mock/orders/<id>/invoices` writes a Peppol BIS Billing 3.0 invoice
75
+ for it, holds it to its rules, and sends it to `--buyer-url` like any other;
76
+ for all of the order, or for so much of some of its lines. The invoice
77
+ names the order (BT-13) and each line's order line (BT-132). In Python,
78
+ `Supplier.take` and `Supplier.bill`, and `mockeinvoice.order`.
79
+ - An order is this mock's own JSON and not Peppol's UBL `Order`, whose
80
+ rules are not built.
81
+ - Who is selling, where to pay, the rate of VAT, the days until payment and
82
+ the invoice numbers are the supplier's own: `GET` and
83
+ `PATCH /_mock/supplier`. Until it is changed it is the seller of this
84
+ project's sample invoice, and what it writes is `valid`.
85
+ - An order whose invoice would not be `valid` is not taken
86
+ (`422 UNBILLABLE`, with the findings).
87
+ - Every line is VAT category `S` at the supplier's one rate. No allowances,
88
+ charges, credit notes or XRechnung. The README lists what is made up, and
89
+ from what.
90
+ - **The business terms over HTTP** ([#34]). `GET /_mock/terms` gives every
91
+ business term and group the package knows (164 and 32), each with its
92
+ number, name and kind, and `GET /_mock/terms/BT-13` or `/BG-25` gives one.
93
+ It is made from `mockeinvoice.model.TERMS` and `GROUPS` when asked, so a
94
+ client that cannot import the package reads the same table. In Python,
95
+ `model.catalogue`, `term_described` and `group_described`. A finding still
96
+ names a term by number alone.
97
+
98
+ ### Changed
99
+
100
+ - **A document that was sent says which order it was written for**:
101
+ `"order"` in `POST /_mock/sent`, `GET /_mock/sent` and `/_mock/sent/<id>`,
102
+ `null` for one that was given finished. `GET /` lists eight paths more.
103
+ - A JSON number with a fraction in a request is read as the decimal it was
104
+ written as, and not as a float. No request took such a number before.
105
+
13
106
  ## [0.2.0] - 2026-10-07
14
107
 
15
108
  Every rule Peppol BIS Billing publishes is now built: the 71 for a seller in
@@ -246,3 +339,8 @@ built, and was in no release.
246
339
  [#23]: https://github.com/rseufert/mock-einvoice/issues/23
247
340
  [#25]: https://github.com/rseufert/mock-einvoice/issues/25
248
341
  [#27]: https://github.com/rseufert/mock-einvoice/issues/27
342
+ [#33]: https://github.com/rseufert/mock-einvoice/issues/33
343
+ [#34]: https://github.com/rseufert/mock-einvoice/issues/34
344
+ [#39]: https://github.com/rseufert/mock-einvoice/issues/39
345
+ [#41]: https://github.com/rseufert/mock-einvoice/issues/41
346
+ [#44]: https://github.com/rseufert/mock-einvoice/issues/44
@@ -1,8 +1,9 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mock-einvoice
3
- Version: 0.2.0
3
+ Version: 0.4.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
+ Project-URL: Homepage, https://rickseufert.com/mock-einvoice/
6
7
  Project-URL: Repository, https://github.com/rseufert/mock-einvoice
7
8
  Project-URL: Issues, https://github.com/rseufert/mock-einvoice/issues
8
9
  Project-URL: Changelog, https://github.com/rseufert/mock-einvoice/blob/main/CHANGELOG.md
@@ -34,17 +35,21 @@ A mock e-invoicing partner: EN 16931 invoices in and out, with the responses tha
34
35
 
35
36
  A sibling of [mock-sap](https://github.com/rseufert/mock-sap), [mock-edi](https://github.com/rseufert/mock-edi) and [mock-bank](https://github.com/rseufert/mock-bank), and of [mock-acme](https://github.com/rseufert/mock-acme), the integration between them.
36
37
 
38
+ By [Rick Seufert](https://rickseufert.com). Its [page](https://rickseufert.com/mock-einvoice/)
39
+ has the features and how to start it.
40
+
37
41
  ```
38
42
  python3 -m pip install mock-einvoice
39
43
  mock-einvoice --port 8100
40
44
  ```
41
45
 
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 and takes the answers.
46
+ 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
47
 
44
- **What 0.2.0 is not:**
48
+ **What 0.4.0 is not:**
45
49
 
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.
50
+ - **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.
51
+ - **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.
52
+ - **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`, since mock-acme 0.6.0.
48
53
  - **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
54
  - **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
55
 
@@ -67,7 +72,7 @@ for line in document.all("BG-25"): # the lines
67
72
  xml = write(document) # UBL again, in the schema's order
68
73
  ```
69
74
 
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.
75
+ - **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
76
  - **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
77
  - **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
78
  - **Findings.** What the reader has to say about a document, each with a level, a code and the path it is about.
@@ -247,17 +252,132 @@ $ curl -s --data-binary @tests/samples/peppol-invoice.xml http://127.0.0.1:8101/
247
252
 
248
253
  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.
249
254
 
250
- The supplier writes no invoices. It sends what it is given.
255
+ #### An order, and the invoice for it
256
+
257
+ The supplier can be told of an order, and writes and sends the invoice for it itself.
258
+
259
+ ```
260
+ $ curl -s -d '{"number": "4500000017",
261
+ "buyer": {"name": "ACME Corporation", "endpoint": "0088:4098765000003",
262
+ "city": "Berlin", "postal_code": "10115", "country": "DE"},
263
+ "lines": [{"line": "10", "name": "Widget", "quantity": 40, "unit": "C62", "price": "20.00"}]}' \
264
+ http://127.0.0.1:8101/_mock/orders
265
+ {
266
+ "id": "1",
267
+ "number": "4500000017",
268
+ ...
269
+ "status": "open",
270
+ ...
271
+ }
272
+ $ curl -s -X POST http://127.0.0.1:8101/_mock/orders/1/invoices
273
+ {
274
+ "id": "1",
275
+ "kind": "Invoice",
276
+ "number": "GLX-0001",
277
+ ...
278
+ "verdict": "valid",
279
+ "delivery": {
280
+ "to": "http://127.0.0.1:8100/invoices",
281
+ "status": 201
282
+ },
283
+ "order": "/_mock/orders/1",
284
+ ...
285
+ }
286
+ ```
287
+
288
+ | | |
289
+ | --- | --- |
290
+ | `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. |
291
+ | `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 |
292
+ | `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. |
293
+ | `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. |
294
+
295
+ **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.
296
+
297
+ **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.
298
+
299
+ **Nothing is billed until it is asked for**, as nothing else here happens by itself.
300
+
301
+ **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:
302
+
303
+ | In the invoice | From |
304
+ | --- | --- |
305
+ | 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. |
306
+ | 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. |
307
+ | The issue date (BT-2) and the due date (BT-9) | the clock, and the clock plus the supplier's `payment_days` (30) |
308
+ | The currency (BT-5) | the order's, or the supplier's `currency` (`EUR`) |
309
+ | The order (BT-13) and each line's order line (BT-132) | the order's number and its lines' numbers |
310
+ | 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. |
311
+ | The buyer (BT-44, 47, 48, 49, 50, 52, 53, 55) | the order's buyer |
312
+ | 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` |
313
+ | 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. |
314
+ | 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. |
315
+ | The totals (BT-106, 109, 110, 112, 115) | the sums of the above. Nothing is prepaid, and there are no allowances or charges. |
316
+
317
+ **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.
251
318
 
252
319
  ### Both
253
320
 
254
321
  | | |
255
322
  | --- | --- |
256
- | `GET /_mock/health` | that it is up, its version, and how many documents it holds and has sent |
323
+ | `GET /_mock/health` | that it is up, its version, what time it is by its clock (`"now"`), and how many documents it holds and has sent |
324
+ | `POST /_mock/advance` | move the clock forward: `?seconds=90`, or `?to=2026-10-08T08:00`, in the query string or as JSON. It answers `{"from", "to", "seconds", "pinned"}`. `400` for a time behind the clock, a fraction of a second, or more than ten years at once |
257
325
  | `GET /_mock/turned-away` | what was not taken in, on which side, and why |
258
326
  | `POST /_mock/validate` | an invoice, a credit note or an Invoice Response held to its rules, and not kept |
327
+ | `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 |
328
+ | `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`) |
329
+ | `GET /_mock/binding/Invoice`, `/_mock/binding/CreditNote` | where each term and group is in that UBL document: the binding as a tree of elements. `GET /_mock/binding` names the two. `404` `NO-SUCH-KIND` for anything else |
259
330
  | `POST /_mock/reset` | forget every document and response, on both sides |
260
331
 
332
+ **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.
333
+
334
+ - 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.
335
+ - 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.
336
+ - 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.
337
+ - 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.
338
+
339
+ **The binding is the reader's own table, served.** `GET /_mock/binding/Invoice` is made from `mockeinvoice.ubl.BINDINGS` when it is asked: the table the reader reads a document by and the writer writes one by. A client that walks a document beside it names every element as the reader does, and a test does just that, with `xml.etree` and the served JSON alone, over this project's samples and fifty documents from EN 16931 and XRechnung, and comes to the same terms, values and groups.
340
+
341
+ ```
342
+ {"kind": "Invoice", "element": "Invoice", "namespace": "urn:oasis:...:Invoice-2",
343
+ "prefixes": {"cbc": "urn:oasis:...", "cac": "urn:oasis:..."},
344
+ "children": [
345
+ {"element": "cbc:CustomizationID", "term": "BT-24"},
346
+ ...
347
+ {"element": "cac:AllowanceCharge", "group": "BG-20", "repeats": true,
348
+ "when": {"text": "cbc:ChargeIndicator is false or 0", "path": "cbc:ChargeIndicator", "in": ["false", "0"]},
349
+ "children": [{"element": "cbc:ChargeIndicator", "fixed": "false", "accepts": ["false", "0"]}, ...]},
350
+ ...]}
351
+ ```
352
+
353
+ A node has its `element` and what it is:
354
+
355
+ | | |
356
+ | --- | --- |
357
+ | `term` | the business term its text is the value of. `attributes` names each attribute the element may carry, and the term that attribute is (`"unitCode": "BT-130"`) or `null` where the standard has none for it (`currencyID`). `on_document` marks a term that is the document's whatever element it is in: a credit note's due date is inside `PaymentMeans`. |
358
+ | `group`, `repeats` | the business group the element is, and whether it is one of many, as `/_mock/terms` has it |
359
+ | `fixed`, `accepts` | the one value the binding gives the element (`TaxScheme/ID` is `VAT`), and what is read as that value |
360
+ | `ubl` | something UBL requires or tells things apart by, that the standard has no term or group for, under the name this package holds it by: `ubl:NetworkID` on a payment card, the scheme of a tax registration that is not VAT, the two document references known by their type code |
361
+ | `once_per` | the term the element is written once for each value of: one `PartyIdentification` to an identifier |
362
+ | `subject` | on `cbc:Note`, the term of the code written before the text between two `#` (`#AAI#the note`) |
363
+ | `children` | the elements in it, in the order the schema has them |
364
+ | *none of these* | an element that only holds others: `cac:Party`, `cac:TaxTotal` |
365
+
366
+ - **One element, several entries.** `cac:AllowanceCharge` is an allowance or a charge; `cac:AdditionalDocumentReference` is the invoiced object, a supporting document, or on a credit note the project. Such entries are in the reader's order, and each but the last has a `when`: the first whose test holds has the element, and one with no `when` takes what is left. A `when` has its `text` in words, and where it can be computed, a `path` under the element (and an `attribute` of what is there), the values it is `in`, and `ignoring_case`. An element's text is compared with the space around it taken off.
367
+ - **One test is not data.** Which of two `cac:TaxTotal` is the VAT total in the accounting currency (BT-111) depends on two currency codes at the head of the document. Those two entries have their test in words and a `name` (`tax-total-in-document-currency`, `tax-total-in-accounting-currency`), and a client has to know them by that.
368
+ - **A tax registration is served as two entries**, the VAT identifier and whatever else, told apart by `cac:TaxScheme/cbc:ID`. In the package it is one piece of code and not a row of the table, so those nodes are written out by hand beside it. A buyer and a tax representative have no term for another registration: theirs is held as the VAT identifier, and the second entry says so by naming the same term.
369
+ - **What has no node has no business term.** An element of a document that the binding has no node for is what the reader reports as `UNHELD`.
370
+ - **Not in it:** which place a value is written back to when a term has two (the creditor identifier, on the seller or the payee), and how often an element may occur.
371
+
372
+ **The clock.** Every stamp (`"received"`, `"sent"`, `"now"`), the date and time in an Invoice Response, and the dates on an invoice the supplier writes come from one clock.
373
+
374
+ - **It is UTC, and every stamp says so**: `2026-10-07T09:00:00Z`, to the second.
375
+ - **`--clock` pins it, and a pinned clock stands still.** `--clock 2026-10-07T09:00` is that moment in UTC. `--clock 2026-10-07T11:00+02:00` is the same moment, and is said back in UTC; a `Z` may be written and changes nothing. In a query string a `+` is a space, so `?to=` writes that offset `%2B02:00`; a time whose `+` became a space is refused with a word saying so, and not repaired. Every stamp and every response carries that one instant until the clock is moved, so that what a run writes does not change from run to run. It does not tick on between advances, as mock-sap's pinned clock does: a second that depends on how fast the run went is what pinning is there to take away.
376
+ - **`POST /_mock/advance` moves it**, pinned or not, by whole seconds or to a time, written as `--clock` is (a date alone is its midnight). What is received or said after that is stamped then. Without `--clock` the clock is real time plus whatever it was advanced by.
377
+ - **It does not go backwards.** A time it is already at moves it nowhere and is no error. `POST /_mock/reset` forgets the documents and leaves the clock where it is.
378
+ - **The time inside an Invoice Response has no zone written on it** (`cbc:IssueTime` is `09:00:00`). It is UTC like the rest.
379
+ - Two of the mock run as two processes have two clocks, and each is advanced by itself.
380
+
261
381
  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`.
262
382
 
263
383
  ## What it refuses
@@ -296,10 +416,11 @@ A group with nothing in it is still there: an empty `TaxSubtotal` is a VAT break
296
416
 
297
417
  - **No transport.** A real Peppol invoice goes by AS4, signed and encrypted, between access points that find each other by SMP lookup. Here it is a `POST`, and the other party is a URL. The paths and status codes are this mock's own; nothing published defines an HTTP interface for any of it.
298
418
  - **An invalid document is turned away at the door and gets no Invoice Response.** On the real network the sender's access point validates before it sends, and Peppol's guide puts the status of a transmission outside what an Invoice Response is for. That this is how a failed validation should look from the seller's side is this project's reading and not a published rule.
299
- - **Nothing happens with time.** A real buyer moves an invoice to in process, accepted and paid over days, and Peppol asks for a first response within three working days. Here each status after the first is asked for.
419
+ - **Nothing happens with time**, though the clock can be moved (`POST /_mock/advance`): moving it changes what is stamped next and nothing else. A real buyer moves an invoice to in process, accepted and paid over days, and Peppol asks for a first response within three working days. Here each status after the first is asked for.
300
420
  - **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.
301
421
  - **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.
302
422
  - **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.
423
+ - **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.
303
424
  - **Nothing is kept on disk.** Documents and responses are gone when the server stops.
304
425
  - **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.
305
426
  - **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.
@@ -358,6 +479,8 @@ Two things were checked while building and are not tests, because their sources
358
479
 
359
480
  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.
360
481
 
482
+ 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`).
483
+
361
484
  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.
362
485
 
363
486
  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.
@@ -4,17 +4,21 @@ A mock e-invoicing partner: EN 16931 invoices in and out, with the responses tha
4
4
 
5
5
  A sibling of [mock-sap](https://github.com/rseufert/mock-sap), [mock-edi](https://github.com/rseufert/mock-edi) and [mock-bank](https://github.com/rseufert/mock-bank), and of [mock-acme](https://github.com/rseufert/mock-acme), the integration between them.
6
6
 
7
+ By [Rick Seufert](https://rickseufert.com). Its [page](https://rickseufert.com/mock-einvoice/)
8
+ has the features and how to start it.
9
+
7
10
  ```
8
11
  python3 -m pip install mock-einvoice
9
12
  mock-einvoice --port 8100
10
13
  ```
11
14
 
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 and takes the answers.
15
+ 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
16
 
14
- **What 0.2.0 is not:**
17
+ **What 0.4.0 is not:**
15
18
 
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.
19
+ - **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.
20
+ - **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.
21
+ - **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`, since mock-acme 0.6.0.
18
22
  - **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
23
  - **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
24
 
@@ -37,7 +41,7 @@ for line in document.all("BG-25"): # the lines
37
41
  xml = write(document) # UBL again, in the schema's order
38
42
  ```
39
43
 
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.
44
+ - **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
45
  - **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
46
  - **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
47
  - **Findings.** What the reader has to say about a document, each with a level, a code and the path it is about.
@@ -217,17 +221,132 @@ $ curl -s --data-binary @tests/samples/peppol-invoice.xml http://127.0.0.1:8101/
217
221
 
218
222
  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.
219
223
 
220
- The supplier writes no invoices. It sends what it is given.
224
+ #### An order, and the invoice for it
225
+
226
+ The supplier can be told of an order, and writes and sends the invoice for it itself.
227
+
228
+ ```
229
+ $ curl -s -d '{"number": "4500000017",
230
+ "buyer": {"name": "ACME Corporation", "endpoint": "0088:4098765000003",
231
+ "city": "Berlin", "postal_code": "10115", "country": "DE"},
232
+ "lines": [{"line": "10", "name": "Widget", "quantity": 40, "unit": "C62", "price": "20.00"}]}' \
233
+ http://127.0.0.1:8101/_mock/orders
234
+ {
235
+ "id": "1",
236
+ "number": "4500000017",
237
+ ...
238
+ "status": "open",
239
+ ...
240
+ }
241
+ $ curl -s -X POST http://127.0.0.1:8101/_mock/orders/1/invoices
242
+ {
243
+ "id": "1",
244
+ "kind": "Invoice",
245
+ "number": "GLX-0001",
246
+ ...
247
+ "verdict": "valid",
248
+ "delivery": {
249
+ "to": "http://127.0.0.1:8100/invoices",
250
+ "status": 201
251
+ },
252
+ "order": "/_mock/orders/1",
253
+ ...
254
+ }
255
+ ```
256
+
257
+ | | |
258
+ | --- | --- |
259
+ | `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. |
260
+ | `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 |
261
+ | `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. |
262
+ | `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. |
263
+
264
+ **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.
265
+
266
+ **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.
267
+
268
+ **Nothing is billed until it is asked for**, as nothing else here happens by itself.
269
+
270
+ **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:
271
+
272
+ | In the invoice | From |
273
+ | --- | --- |
274
+ | 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. |
275
+ | 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. |
276
+ | The issue date (BT-2) and the due date (BT-9) | the clock, and the clock plus the supplier's `payment_days` (30) |
277
+ | The currency (BT-5) | the order's, or the supplier's `currency` (`EUR`) |
278
+ | The order (BT-13) and each line's order line (BT-132) | the order's number and its lines' numbers |
279
+ | 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. |
280
+ | The buyer (BT-44, 47, 48, 49, 50, 52, 53, 55) | the order's buyer |
281
+ | 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` |
282
+ | 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. |
283
+ | 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. |
284
+ | The totals (BT-106, 109, 110, 112, 115) | the sums of the above. Nothing is prepaid, and there are no allowances or charges. |
285
+
286
+ **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.
221
287
 
222
288
  ### Both
223
289
 
224
290
  | | |
225
291
  | --- | --- |
226
- | `GET /_mock/health` | that it is up, its version, and how many documents it holds and has sent |
292
+ | `GET /_mock/health` | that it is up, its version, what time it is by its clock (`"now"`), and how many documents it holds and has sent |
293
+ | `POST /_mock/advance` | move the clock forward: `?seconds=90`, or `?to=2026-10-08T08:00`, in the query string or as JSON. It answers `{"from", "to", "seconds", "pinned"}`. `400` for a time behind the clock, a fraction of a second, or more than ten years at once |
227
294
  | `GET /_mock/turned-away` | what was not taken in, on which side, and why |
228
295
  | `POST /_mock/validate` | an invoice, a credit note or an Invoice Response held to its rules, and not kept |
296
+ | `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 |
297
+ | `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`) |
298
+ | `GET /_mock/binding/Invoice`, `/_mock/binding/CreditNote` | where each term and group is in that UBL document: the binding as a tree of elements. `GET /_mock/binding` names the two. `404` `NO-SUCH-KIND` for anything else |
229
299
  | `POST /_mock/reset` | forget every document and response, on both sides |
230
300
 
301
+ **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.
302
+
303
+ - 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.
304
+ - 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.
305
+ - 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.
306
+ - 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.
307
+
308
+ **The binding is the reader's own table, served.** `GET /_mock/binding/Invoice` is made from `mockeinvoice.ubl.BINDINGS` when it is asked: the table the reader reads a document by and the writer writes one by. A client that walks a document beside it names every element as the reader does, and a test does just that, with `xml.etree` and the served JSON alone, over this project's samples and fifty documents from EN 16931 and XRechnung, and comes to the same terms, values and groups.
309
+
310
+ ```
311
+ {"kind": "Invoice", "element": "Invoice", "namespace": "urn:oasis:...:Invoice-2",
312
+ "prefixes": {"cbc": "urn:oasis:...", "cac": "urn:oasis:..."},
313
+ "children": [
314
+ {"element": "cbc:CustomizationID", "term": "BT-24"},
315
+ ...
316
+ {"element": "cac:AllowanceCharge", "group": "BG-20", "repeats": true,
317
+ "when": {"text": "cbc:ChargeIndicator is false or 0", "path": "cbc:ChargeIndicator", "in": ["false", "0"]},
318
+ "children": [{"element": "cbc:ChargeIndicator", "fixed": "false", "accepts": ["false", "0"]}, ...]},
319
+ ...]}
320
+ ```
321
+
322
+ A node has its `element` and what it is:
323
+
324
+ | | |
325
+ | --- | --- |
326
+ | `term` | the business term its text is the value of. `attributes` names each attribute the element may carry, and the term that attribute is (`"unitCode": "BT-130"`) or `null` where the standard has none for it (`currencyID`). `on_document` marks a term that is the document's whatever element it is in: a credit note's due date is inside `PaymentMeans`. |
327
+ | `group`, `repeats` | the business group the element is, and whether it is one of many, as `/_mock/terms` has it |
328
+ | `fixed`, `accepts` | the one value the binding gives the element (`TaxScheme/ID` is `VAT`), and what is read as that value |
329
+ | `ubl` | something UBL requires or tells things apart by, that the standard has no term or group for, under the name this package holds it by: `ubl:NetworkID` on a payment card, the scheme of a tax registration that is not VAT, the two document references known by their type code |
330
+ | `once_per` | the term the element is written once for each value of: one `PartyIdentification` to an identifier |
331
+ | `subject` | on `cbc:Note`, the term of the code written before the text between two `#` (`#AAI#the note`) |
332
+ | `children` | the elements in it, in the order the schema has them |
333
+ | *none of these* | an element that only holds others: `cac:Party`, `cac:TaxTotal` |
334
+
335
+ - **One element, several entries.** `cac:AllowanceCharge` is an allowance or a charge; `cac:AdditionalDocumentReference` is the invoiced object, a supporting document, or on a credit note the project. Such entries are in the reader's order, and each but the last has a `when`: the first whose test holds has the element, and one with no `when` takes what is left. A `when` has its `text` in words, and where it can be computed, a `path` under the element (and an `attribute` of what is there), the values it is `in`, and `ignoring_case`. An element's text is compared with the space around it taken off.
336
+ - **One test is not data.** Which of two `cac:TaxTotal` is the VAT total in the accounting currency (BT-111) depends on two currency codes at the head of the document. Those two entries have their test in words and a `name` (`tax-total-in-document-currency`, `tax-total-in-accounting-currency`), and a client has to know them by that.
337
+ - **A tax registration is served as two entries**, the VAT identifier and whatever else, told apart by `cac:TaxScheme/cbc:ID`. In the package it is one piece of code and not a row of the table, so those nodes are written out by hand beside it. A buyer and a tax representative have no term for another registration: theirs is held as the VAT identifier, and the second entry says so by naming the same term.
338
+ - **What has no node has no business term.** An element of a document that the binding has no node for is what the reader reports as `UNHELD`.
339
+ - **Not in it:** which place a value is written back to when a term has two (the creditor identifier, on the seller or the payee), and how often an element may occur.
340
+
341
+ **The clock.** Every stamp (`"received"`, `"sent"`, `"now"`), the date and time in an Invoice Response, and the dates on an invoice the supplier writes come from one clock.
342
+
343
+ - **It is UTC, and every stamp says so**: `2026-10-07T09:00:00Z`, to the second.
344
+ - **`--clock` pins it, and a pinned clock stands still.** `--clock 2026-10-07T09:00` is that moment in UTC. `--clock 2026-10-07T11:00+02:00` is the same moment, and is said back in UTC; a `Z` may be written and changes nothing. In a query string a `+` is a space, so `?to=` writes that offset `%2B02:00`; a time whose `+` became a space is refused with a word saying so, and not repaired. Every stamp and every response carries that one instant until the clock is moved, so that what a run writes does not change from run to run. It does not tick on between advances, as mock-sap's pinned clock does: a second that depends on how fast the run went is what pinning is there to take away.
345
+ - **`POST /_mock/advance` moves it**, pinned or not, by whole seconds or to a time, written as `--clock` is (a date alone is its midnight). What is received or said after that is stamped then. Without `--clock` the clock is real time plus whatever it was advanced by.
346
+ - **It does not go backwards.** A time it is already at moves it nowhere and is no error. `POST /_mock/reset` forgets the documents and leaves the clock where it is.
347
+ - **The time inside an Invoice Response has no zone written on it** (`cbc:IssueTime` is `09:00:00`). It is UTC like the rest.
348
+ - Two of the mock run as two processes have two clocks, and each is advanced by itself.
349
+
231
350
  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`.
232
351
 
233
352
  ## What it refuses
@@ -266,10 +385,11 @@ A group with nothing in it is still there: an empty `TaxSubtotal` is a VAT break
266
385
 
267
386
  - **No transport.** A real Peppol invoice goes by AS4, signed and encrypted, between access points that find each other by SMP lookup. Here it is a `POST`, and the other party is a URL. The paths and status codes are this mock's own; nothing published defines an HTTP interface for any of it.
268
387
  - **An invalid document is turned away at the door and gets no Invoice Response.** On the real network the sender's access point validates before it sends, and Peppol's guide puts the status of a transmission outside what an Invoice Response is for. That this is how a failed validation should look from the seller's side is this project's reading and not a published rule.
269
- - **Nothing happens with time.** A real buyer moves an invoice to in process, accepted and paid over days, and Peppol asks for a first response within three working days. Here each status after the first is asked for.
388
+ - **Nothing happens with time**, though the clock can be moved (`POST /_mock/advance`): moving it changes what is stamped next and nothing else. A real buyer moves an invoice to in process, accepted and paid over days, and Peppol asks for a first response within three working days. Here each status after the first is asked for.
270
389
  - **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.
271
390
  - **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.
272
391
  - **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.
392
+ - **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.
273
393
  - **Nothing is kept on disk.** Documents and responses are gone when the server stops.
274
394
  - **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.
275
395
  - **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.
@@ -328,6 +448,8 @@ Two things were checked while building and are not tests, because their sources
328
448
 
329
449
  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.
330
450
 
451
+ 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`).
452
+
331
453
  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.
332
454
 
333
455
  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.