xhandler 6.0.0a1__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 (607) hide show
  1. xhandler-6.0.0a1/.github/dependabot.yml +36 -0
  2. xhandler-6.0.0a1/.github/workflows/auto-merge-dependabot.yaml +17 -0
  3. xhandler-6.0.0a1/.github/workflows/ci.yml +36 -0
  4. xhandler-6.0.0a1/.github/workflows/release.yml +60 -0
  5. xhandler-6.0.0a1/.gitignore +7 -0
  6. xhandler-6.0.0a1/CONTRIBUTING.md +46 -0
  7. xhandler-6.0.0a1/Makefile +51 -0
  8. xhandler-6.0.0a1/PKG-INFO +93 -0
  9. xhandler-6.0.0a1/README.md +82 -0
  10. xhandler-6.0.0a1/hack/core.sh +97 -0
  11. xhandler-6.0.0a1/pyproject.toml +46 -0
  12. xhandler-6.0.0a1/src/xhandler/__init__.py +10 -0
  13. xhandler-6.0.0a1/src/xhandler/_core/VERSION +1 -0
  14. xhandler-6.0.0a1/src/xhandler/_core/__init__.py +132 -0
  15. xhandler-6.0.0a1/src/xhandler/_core/xhandler.wasm +0 -0
  16. xhandler-6.0.0a1/src/xhandler/py.typed +0 -0
  17. xhandler-6.0.0a1/src/xhandler/xbuilder/__init__.py +47 -0
  18. xhandler-6.0.0a1/src/xhandler/xbuilder/models.py +707 -0
  19. xhandler-6.0.0a1/src/xhandler/xsender/__init__.py +280 -0
  20. xhandler-6.0.0a1/src/xhandler/xsender/models.py +197 -0
  21. xhandler-6.0.0a1/src/xhandler/xsigner/__init__.py +48 -0
  22. xhandler-6.0.0a1/testdata/conformance/build/errors/despatch_advice_without_fecha_traslado.json +15 -0
  23. xhandler-6.0.0a1/testdata/conformance/build/errors/invalid_catalog_code.json +35 -0
  24. xhandler-6.0.0a1/testdata/conformance/build/errors/invalid_date.json +35 -0
  25. xhandler-6.0.0a1/testdata/conformance/build/errors/unknown_kind.json +16 -0
  26. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_1_con_3_items.json +135 -0
  27. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_2_con_2_items.json +110 -0
  28. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_3_con_1_items.json +85 -0
  29. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_4_con_5_items.json +185 -0
  30. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_5_con_4_items.json +160 -0
  31. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_credito_de_factura_2.json +102 -0
  32. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_credito_de_factura_3.json +77 -0
  33. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_credito_de_factura_4.json +177 -0
  34. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_debito_de_factura_2.json +102 -0
  35. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_debito_de_factura_3.json +77 -0
  36. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_debito_de_factura_4.json +177 -0
  37. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_1_con_1_items.json +85 -0
  38. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_2_con_4_items.json +160 -0
  39. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_3_con_7_items.json +235 -0
  40. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_4_con_5_items.json +185 -0
  41. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_5_con_6_items.json +210 -0
  42. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_credito_de_factura_1.json +77 -0
  43. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_credito_de_factura_3.json +227 -0
  44. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_credito_de_factura_5.json +177 -0
  45. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_debito_de_factura_1.json +77 -0
  46. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_debito_de_factura_3.json +227 -0
  47. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_debito_de_factura_5.json +202 -0
  48. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_1_con_1_items.json +85 -0
  49. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_2_con_4_items.json +160 -0
  50. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_3_con_7_items.json +235 -0
  51. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_4_con_5_items.json +185 -0
  52. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_5_con_6_items.json +210 -0
  53. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_credito_de_factura_1.json +77 -0
  54. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_credito_de_factura_3.json +227 -0
  55. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_credito_de_factura_5.json +177 -0
  56. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_debito_de_factura_1.json +77 -0
  57. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_debito_de_factura_3.json +227 -0
  58. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_debito_de_factura_5.json +202 -0
  59. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_1_con_7_items.json +235 -0
  60. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_2_con_2_items.json +110 -0
  61. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_3_con_5_items.json +185 -0
  62. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_4_con_4_items.json +160 -0
  63. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_5_con_3_items.json +135 -0
  64. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/nota_de_credito_de_factura_2.json +102 -0
  65. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/nota_de_credito_de_factura_3.json +177 -0
  66. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/nota_de_debito_de_factura_2.json +102 -0
  67. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/nota_de_debito_de_factura_3.json +177 -0
  68. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_1_con_2_items.json +117 -0
  69. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_2_con_2_items.json +117 -0
  70. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_3_con_4_items.json +167 -0
  71. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_4_con_3_items.json +142 -0
  72. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_5_con_5_items.json +192 -0
  73. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_credito_de_factura_2.json +102 -0
  74. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_credito_de_factura_3.json +127 -0
  75. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_credito_de_factura_5.json +177 -0
  76. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_debito_de_factura_2.json +102 -0
  77. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_debito_de_factura_3.json +127 -0
  78. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_debito_de_factura_5.json +177 -0
  79. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group05/factura_1_con_5_items.json +185 -0
  80. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group05/nota_de_credito_de_factura_1.json +177 -0
  81. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group05/nota_de_debito_de_factura_1.json +177 -0
  82. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group06/factura_1_con_5_items.json +191 -0
  83. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group06/nota_de_credito_de_factura_1.json +177 -0
  84. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group06/nota_de_debito_de_factura_1.json +177 -0
  85. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group07/factura_1_con_5_items.json +185 -0
  86. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group07/nota_de_credito_de_factura_1.json +177 -0
  87. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group07/nota_de_debito_de_factura_1.json +177 -0
  88. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_1_con_4_items.json +160 -0
  89. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_2_con_7_items.json +235 -0
  90. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_3_con_5_items.json +185 -0
  91. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_4_con_3_items.json +135 -0
  92. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_5_con_2_items.json +110 -0
  93. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_credito_de_boleta_2.json +227 -0
  94. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_credito_de_boleta_3.json +177 -0
  95. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_credito_de_boleta_4.json +127 -0
  96. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_debito_de_boleta_2.json +227 -0
  97. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_debito_de_boleta_3.json +177 -0
  98. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_debito_de_boleta_4.json +127 -0
  99. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_1_con_2_items.json +110 -0
  100. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_2_con_4_items.json +160 -0
  101. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_3_con_7_items.json +235 -0
  102. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_4_con_5_items.json +185 -0
  103. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_5_con_1_items.json +85 -0
  104. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_credito_de_boleta_1.json +102 -0
  105. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_credito_de_boleta_4.json +177 -0
  106. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_credito_de_boleta_5.json +77 -0
  107. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_debito_de_boleta_1.json +102 -0
  108. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_debito_de_boleta_4.json +177 -0
  109. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_debito_de_boleta_5.json +77 -0
  110. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_1_con_2_items.json +110 -0
  111. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_2_con_4_items.json +160 -0
  112. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_3_con_7_items.json +235 -0
  113. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_4_con_5_items.json +185 -0
  114. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_5_con_1_items.json +85 -0
  115. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_credito_de_boleta_1.json +102 -0
  116. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_credito_de_boleta_4.json +177 -0
  117. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_credito_de_boleta_5.json +77 -0
  118. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_debito_de_boleta_1.json +102 -0
  119. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_debito_de_boleta_4.json +177 -0
  120. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_debito_de_boleta_5.json +77 -0
  121. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_1_con_7_items.json +235 -0
  122. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_2_con_2_items.json +110 -0
  123. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_3_con_5_items.json +185 -0
  124. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_4_con_4_items.json +160 -0
  125. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_5_con_9_items.json +285 -0
  126. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_credito_de_boleta_1.json +227 -0
  127. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_credito_de_boleta_2.json +102 -0
  128. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_credito_de_boleta_4.json +152 -0
  129. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_debito_de_boleta_1.json +227 -0
  130. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_debito_de_boleta_2.json +102 -0
  131. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_debito_de_boleta_4.json +152 -0
  132. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_1_con_10_items.json +317 -0
  133. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_2_con_7_items.json +242 -0
  134. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_3_con_6_items.json +217 -0
  135. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_4_con_9_items.json +292 -0
  136. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_5_con_4_items.json +167 -0
  137. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_credito_de_boleta_1.json +302 -0
  138. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_credito_de_boleta_2.json +227 -0
  139. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_credito_de_boleta_4.json +277 -0
  140. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_debito_de_boleta_1.json +302 -0
  141. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_debito_de_boleta_2.json +227 -0
  142. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_debito_de_boleta_4.json +277 -0
  143. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group12/boleta_1_con_3_items.json +135 -0
  144. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group12/nota_de_credito_de_boleta_1.json +127 -0
  145. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group12/nota_de_debito_de_boleta_1.json +127 -0
  146. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group13/resumen_diario_de_boletas.json +183 -0
  147. xhandler-6.0.0a1/testdata/conformance/build/homologacion/group14/comunicacion_de_baja.json +62 -0
  148. xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note/min_data_ruc.json +102 -0
  149. xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_atributos/atributos_simple.json +94 -0
  150. xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_isc/isc_aplicacion_al_monto_fijo.json +102 -0
  151. xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_isc/isc_sistema_al_valor.json +102 -0
  152. xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_isc/isc_sistema_de_precios_de_venta_al_publico.json +102 -0
  153. xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_orden_compra/orden_de_compra.json +102 -0
  154. xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_product_codes/all_product_codes.json +80 -0
  155. xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_product_codes/product_codes.json +77 -0
  156. xhandler-6.0.0a1/testdata/conformance/build/renderer/debit_note/min_data_ruc.json +102 -0
  157. xhandler-6.0.0a1/testdata/conformance/build/renderer/debit_note_atributos/atributos_simple.json +94 -0
  158. xhandler-6.0.0a1/testdata/conformance/build/renderer/debit_note_product_codes/all_product_codes.json +80 -0
  159. xhandler-6.0.0a1/testdata/conformance/build/renderer/debit_note_product_codes/product_codes.json +77 -0
  160. xhandler-6.0.0a1/testdata/conformance/build/renderer/despatch_advice/carrier_data.json +100 -0
  161. xhandler-6.0.0a1/testdata/conformance/build/renderer/despatch_advice/complex_data.json +140 -0
  162. xhandler-6.0.0a1/testdata/conformance/build/renderer/despatch_advice/min_data.json +81 -0
  163. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_cliente_direccion_and_contacto.json +122 -0
  164. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_codigo_local.json +119 -0
  165. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_fecha_emision.json +110 -0
  166. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_firmante.json +113 -0
  167. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_proveedor_direccion_and_contacto.json +122 -0
  168. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_unidad_medida.json +110 -0
  169. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/icb.json +110 -0
  170. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_anticipos/min_anticipos.json +117 -0
  171. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_atributos/atributos_con_periodo.json +102 -0
  172. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_atributos/atributos_simple.json +102 -0
  173. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_cargos/cargo_afecta_base.json +92 -0
  174. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_cargos/cargo_no_afecta_base.json +92 -0
  175. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_descuentos/descuento_global.json +92 -0
  176. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_descuentos/descuento_global_tipo_02.json +92 -0
  177. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_descuentos/descuento_global_tipo_03.json +92 -0
  178. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_detraccion/detraccion.json +91 -0
  179. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_direccion_entrega/direccion_entrega_full.json +119 -0
  180. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_direccion_entrega/direccion_entrega_min.json +119 -0
  181. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_documento_relacionado/documento_relacionado.json +115 -0
  182. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_fecha_vencimiento/con_fecha_vencimiento.json +110 -0
  183. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_forma_pago/con_forma_pago.json +123 -0
  184. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_forma_pago/sin_forma_pago.json +110 -0
  185. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_guia_embebida/guia_embebida.json +118 -0
  186. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_guias/guia_serie_t.json +115 -0
  187. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_exonerado_operacion_onerosa.json +85 -0
  188. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_exonerado_transferencia_gratuita.json +85 -0
  189. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_exportacion.json +85 -0
  190. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_bonificaciones.json +85 -0
  191. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_ivap.json +85 -0
  192. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_operacion_onerosa.json +85 -0
  193. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro.json +85 -0
  194. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_donacion.json +85 -0
  195. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_entrega_a_trabajadores.json +85 -0
  196. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_premio.json +85 -0
  197. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_publicidad.json +85 -0
  198. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_exonerado_operacion_onerosa.json +85 -0
  199. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_exonerado_transferencia_gratuita.json +85 -0
  200. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_exportacion.json +85 -0
  201. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_bonificaciones.json +85 -0
  202. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_ivap.json +85 -0
  203. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_operacion_onerosa.json +85 -0
  204. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro.json +85 -0
  205. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_donacion.json +85 -0
  206. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_entrega_a_trabajadores.json +85 -0
  207. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_premio.json +85 -0
  208. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_publicidad.json +85 -0
  209. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_operacion_onerosa.json +85 -0
  210. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro.json +85 -0
  211. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_bonificacion.json +85 -0
  212. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_convenio_colectivo.json +85 -0
  213. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_muestras_medicas.json +85 -0
  214. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_premio.json +85 -0
  215. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_publicidad.json +85 -0
  216. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exonerado_operacion_onerosa.json +85 -0
  217. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exonerado_transferencia_gratuita.json +85 -0
  218. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exportacion.json +85 -0
  219. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_bonificaciones.json +85 -0
  220. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_operacion_onerosa.json +85 -0
  221. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro.json +85 -0
  222. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_donacion.json +85 -0
  223. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_entrega_a_trabajadores.json +85 -0
  224. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_premio.json +85 -0
  225. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_publicidad.json +85 -0
  226. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_operacion_onerosa.json +85 -0
  227. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro.json +85 -0
  228. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_bonificacion.json +85 -0
  229. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_convenio_colectivo.json +85 -0
  230. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_muestras_medicas.json +85 -0
  231. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_premio.json +85 -0
  232. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_publicidad.json +85 -0
  233. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_operacion_onerosa.json +85 -0
  234. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro.json +85 -0
  235. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_bonificacion.json +85 -0
  236. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_convenio_colectivo.json +85 -0
  237. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_muestras_medicas.json +85 -0
  238. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_premio.json +85 -0
  239. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_publicidad.json +85 -0
  240. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_exonerado_operacion_onerosa.json +85 -0
  241. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_exonerado_transferencia_gratuita.json +85 -0
  242. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_exportacion.json +85 -0
  243. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_bonificaciones.json +85 -0
  244. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_ivap.json +85 -0
  245. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_operacion_onerosa.json +85 -0
  246. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro.json +85 -0
  247. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_donacion.json +85 -0
  248. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_entrega_a_trabajadores.json +85 -0
  249. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_premio.json +85 -0
  250. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_publicidad.json +85 -0
  251. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_operacion_onerosa.json +85 -0
  252. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro.json +85 -0
  253. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_bonificacion.json +85 -0
  254. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_convenio_colectivo.json +85 -0
  255. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_muestras_medicas.json +85 -0
  256. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_premio.json +85 -0
  257. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_publicidad.json +85 -0
  258. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_aplicacion_al_monto_fijo.json +110 -0
  259. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_mixed_tipo_igv.json +210 -0
  260. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_precio_con_impuestos.json +110 -0
  261. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_sistema_al_valor.json +110 -0
  262. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_sistema_de_precios_de_venta_al_publico.json +110 -0
  263. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_issue30/with_precio_unitario.json +85 -0
  264. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_issue30/with_precio_unitario_con_impuestos.json +85 -0
  265. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_issue30/with_precio_unitario_con_impuestos_icb.json +85 -0
  266. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_issue30/with_precio_unitario_icb.json +85 -0
  267. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_moneda/custom_moneda.json +85 -0
  268. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_orden_compra/orden_de_compra.json +110 -0
  269. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_percepcion/percepcion.json +91 -0
  270. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_product_codes/all_product_codes.json +88 -0
  271. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_product_codes/only_seller_code.json +85 -0
  272. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_product_codes/product_codes.json +85 -0
  273. xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_special_characters/special_characters.json +85 -0
  274. xhandler-6.0.0a1/testdata/conformance/build/renderer/perception/perception_simple.json +56 -0
  275. xhandler-6.0.0a1/testdata/conformance/build/renderer/retention/retention_simple.json +56 -0
  276. xhandler-6.0.0a1/testdata/conformance/build/renderer/reversion/reversion.json +44 -0
  277. xhandler-6.0.0a1/testdata/conformance/build/renderer/reversion/reversion_retention.json +38 -0
  278. xhandler-6.0.0a1/testdata/conformance/build/renderer/summary_documents/summary_documents.json +96 -0
  279. xhandler-6.0.0a1/testdata/conformance/build/renderer/summary_documents/summary_documents_anular_boleta_exonerada.json +63 -0
  280. xhandler-6.0.0a1/testdata/conformance/build/renderer/summary_documents/summary_documents_percepcion.json +69 -0
  281. xhandler-6.0.0a1/testdata/conformance/build/renderer/voided_documents/voided_document.json +44 -0
  282. xhandler-6.0.0a1/testdata/conformance/build/renderer/voided_documents/voided_document_auto_generated_fecha_emision.json +44 -0
  283. xhandler-6.0.0a1/testdata/conformance/build/renderer/voided_documents/voided_document_auto_generated_tipo_comprobante.json +44 -0
  284. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_1_con_3_items.json +293 -0
  285. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_2_con_2_items.json +243 -0
  286. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_3_con_1_items.json +193 -0
  287. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_4_con_5_items.json +393 -0
  288. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_5_con_4_items.json +343 -0
  289. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_credito_de_factura_2.json +219 -0
  290. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_credito_de_factura_3.json +169 -0
  291. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_credito_de_factura_4.json +369 -0
  292. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_debito_de_factura_2.json +219 -0
  293. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_debito_de_factura_3.json +169 -0
  294. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_debito_de_factura_4.json +369 -0
  295. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_1_con_1_items.json +193 -0
  296. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_2_con_4_items.json +343 -0
  297. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_3_con_7_items.json +493 -0
  298. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_4_con_5_items.json +393 -0
  299. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_5_con_6_items.json +443 -0
  300. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_credito_de_factura_1.json +169 -0
  301. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_credito_de_factura_3.json +469 -0
  302. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_credito_de_factura_5.json +369 -0
  303. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_debito_de_factura_1.json +169 -0
  304. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_debito_de_factura_3.json +469 -0
  305. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_debito_de_factura_5.json +419 -0
  306. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_1_con_1_items.json +193 -0
  307. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_2_con_4_items.json +343 -0
  308. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_3_con_7_items.json +493 -0
  309. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_4_con_5_items.json +393 -0
  310. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_5_con_6_items.json +443 -0
  311. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_credito_de_factura_1.json +169 -0
  312. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_credito_de_factura_3.json +469 -0
  313. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_credito_de_factura_5.json +369 -0
  314. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_debito_de_factura_1.json +169 -0
  315. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_debito_de_factura_3.json +469 -0
  316. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_debito_de_factura_5.json +419 -0
  317. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_1_con_7_items.json +493 -0
  318. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_2_con_2_items.json +243 -0
  319. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_3_con_5_items.json +393 -0
  320. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_4_con_4_items.json +343 -0
  321. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_5_con_3_items.json +293 -0
  322. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/nota_de_credito_de_factura_2.json +219 -0
  323. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/nota_de_credito_de_factura_3.json +369 -0
  324. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/nota_de_debito_de_factura_2.json +219 -0
  325. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/nota_de_debito_de_factura_3.json +369 -0
  326. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_1_con_2_items.json +257 -0
  327. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_2_con_2_items.json +257 -0
  328. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_3_con_4_items.json +357 -0
  329. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_4_con_3_items.json +307 -0
  330. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_5_con_5_items.json +407 -0
  331. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_credito_de_factura_2.json +219 -0
  332. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_credito_de_factura_3.json +269 -0
  333. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_credito_de_factura_5.json +369 -0
  334. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_debito_de_factura_2.json +219 -0
  335. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_debito_de_factura_3.json +269 -0
  336. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_debito_de_factura_5.json +369 -0
  337. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group05/factura_1_con_5_items.json +393 -0
  338. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group05/nota_de_credito_de_factura_1.json +369 -0
  339. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group05/nota_de_debito_de_factura_1.json +369 -0
  340. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group06/factura_1_con_5_items.json +407 -0
  341. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group06/nota_de_credito_de_factura_1.json +369 -0
  342. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group06/nota_de_debito_de_factura_1.json +369 -0
  343. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group07/factura_1_con_5_items.json +393 -0
  344. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group07/nota_de_credito_de_factura_1.json +369 -0
  345. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group07/nota_de_debito_de_factura_1.json +369 -0
  346. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_1_con_4_items.json +343 -0
  347. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_2_con_7_items.json +493 -0
  348. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_3_con_5_items.json +393 -0
  349. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_4_con_3_items.json +293 -0
  350. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_5_con_2_items.json +243 -0
  351. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_credito_de_boleta_2.json +469 -0
  352. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_credito_de_boleta_3.json +369 -0
  353. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_credito_de_boleta_4.json +269 -0
  354. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_debito_de_boleta_2.json +469 -0
  355. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_debito_de_boleta_3.json +369 -0
  356. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_debito_de_boleta_4.json +269 -0
  357. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_1_con_2_items.json +243 -0
  358. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_2_con_4_items.json +343 -0
  359. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_3_con_7_items.json +493 -0
  360. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_4_con_5_items.json +393 -0
  361. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_5_con_1_items.json +193 -0
  362. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_credito_de_boleta_1.json +219 -0
  363. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_credito_de_boleta_4.json +369 -0
  364. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_credito_de_boleta_5.json +169 -0
  365. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_debito_de_boleta_1.json +219 -0
  366. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_debito_de_boleta_4.json +369 -0
  367. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_debito_de_boleta_5.json +169 -0
  368. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_1_con_2_items.json +243 -0
  369. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_2_con_4_items.json +343 -0
  370. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_3_con_7_items.json +493 -0
  371. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_4_con_5_items.json +393 -0
  372. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_5_con_1_items.json +193 -0
  373. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_credito_de_boleta_1.json +219 -0
  374. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_credito_de_boleta_4.json +369 -0
  375. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_credito_de_boleta_5.json +169 -0
  376. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_debito_de_boleta_1.json +219 -0
  377. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_debito_de_boleta_4.json +369 -0
  378. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_debito_de_boleta_5.json +169 -0
  379. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_1_con_7_items.json +493 -0
  380. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_2_con_2_items.json +243 -0
  381. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_3_con_5_items.json +393 -0
  382. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_4_con_4_items.json +343 -0
  383. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_5_con_9_items.json +593 -0
  384. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_credito_de_boleta_1.json +469 -0
  385. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_credito_de_boleta_2.json +219 -0
  386. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_credito_de_boleta_4.json +319 -0
  387. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_debito_de_boleta_1.json +469 -0
  388. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_debito_de_boleta_2.json +219 -0
  389. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_debito_de_boleta_4.json +319 -0
  390. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_1_con_10_items.json +657 -0
  391. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_2_con_7_items.json +507 -0
  392. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_3_con_6_items.json +457 -0
  393. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_4_con_9_items.json +607 -0
  394. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_5_con_4_items.json +357 -0
  395. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_credito_de_boleta_1.json +619 -0
  396. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_credito_de_boleta_2.json +469 -0
  397. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_credito_de_boleta_4.json +569 -0
  398. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_debito_de_boleta_1.json +619 -0
  399. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_debito_de_boleta_2.json +469 -0
  400. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_debito_de_boleta_4.json +569 -0
  401. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group12/boleta_1_con_3_items.json +293 -0
  402. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group12/nota_de_credito_de_boleta_1.json +269 -0
  403. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group12/nota_de_debito_de_boleta_1.json +269 -0
  404. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group13/resumen_diario_de_boletas.json +352 -0
  405. xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group14/comunicacion_de_baja.json +110 -0
  406. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note/min_data_ruc.json +219 -0
  407. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_atributos/atributos_simple.json +203 -0
  408. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_isc/isc_aplicacion_al_monto_fijo.json +219 -0
  409. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_isc/isc_sistema_al_valor.json +219 -0
  410. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_isc/isc_sistema_de_precios_de_venta_al_publico.json +219 -0
  411. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_orden_compra/orden_de_compra.json +219 -0
  412. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_product_codes/all_product_codes.json +175 -0
  413. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_product_codes/product_codes.json +169 -0
  414. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/debit_note/min_data_ruc.json +219 -0
  415. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/debit_note_atributos/atributos_simple.json +203 -0
  416. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/debit_note_product_codes/all_product_codes.json +175 -0
  417. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/debit_note_product_codes/product_codes.json +169 -0
  418. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/despatch_advice/carrier_data.json +186 -0
  419. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/despatch_advice/complex_data.json +266 -0
  420. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/despatch_advice/min_data.json +148 -0
  421. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_cliente_direccion_and_contacto.json +267 -0
  422. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_codigo_local.json +252 -0
  423. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_fecha_emision.json +243 -0
  424. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_firmante.json +246 -0
  425. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_proveedor_direccion_and_contacto.json +258 -0
  426. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_unidad_medida.json +243 -0
  427. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/icb.json +243 -0
  428. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_anticipos/min_anticipos.json +257 -0
  429. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_atributos/atributos_con_periodo.json +227 -0
  430. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_atributos/atributos_simple.json +227 -0
  431. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_cargos/cargo_afecta_base.json +207 -0
  432. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_cargos/cargo_no_afecta_base.json +207 -0
  433. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_descuentos/descuento_global.json +207 -0
  434. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_descuentos/descuento_global_tipo_02.json +207 -0
  435. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_descuentos/descuento_global_tipo_03.json +207 -0
  436. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_detraccion/detraccion.json +207 -0
  437. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_direccion_entrega/direccion_entrega_full.json +263 -0
  438. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_direccion_entrega/direccion_entrega_min.json +263 -0
  439. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_documento_relacionado/documento_relacionado.json +253 -0
  440. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_fecha_vencimiento/con_fecha_vencimiento.json +243 -0
  441. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_forma_pago/con_forma_pago.json +265 -0
  442. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_forma_pago/sin_forma_pago.json +243 -0
  443. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_guia_embebida/guia_embebida.json +259 -0
  444. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_guias/guia_serie_t.json +253 -0
  445. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_exonerado_operacion_onerosa.json +193 -0
  446. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_exonerado_transferencia_gratuita.json +193 -0
  447. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_exportacion.json +193 -0
  448. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_bonificaciones.json +193 -0
  449. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_ivap.json +195 -0
  450. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_operacion_onerosa.json +193 -0
  451. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro.json +193 -0
  452. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_donacion.json +193 -0
  453. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_entrega_a_trabajadores.json +193 -0
  454. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_premio.json +193 -0
  455. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_publicidad.json +193 -0
  456. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_exonerado_operacion_onerosa.json +193 -0
  457. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_exonerado_transferencia_gratuita.json +193 -0
  458. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_exportacion.json +193 -0
  459. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_bonificaciones.json +193 -0
  460. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_ivap.json +195 -0
  461. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_operacion_onerosa.json +193 -0
  462. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro.json +193 -0
  463. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_donacion.json +193 -0
  464. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_entrega_a_trabajadores.json +193 -0
  465. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_premio.json +193 -0
  466. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_publicidad.json +193 -0
  467. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_operacion_onerosa.json +193 -0
  468. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro.json +193 -0
  469. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_bonificacion.json +193 -0
  470. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_convenio_colectivo.json +193 -0
  471. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_muestras_medicas.json +193 -0
  472. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_premio.json +193 -0
  473. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_publicidad.json +193 -0
  474. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exonerado_operacion_onerosa.json +193 -0
  475. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exonerado_transferencia_gratuita.json +193 -0
  476. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exportacion.json +193 -0
  477. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_bonificaciones.json +193 -0
  478. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_operacion_onerosa.json +193 -0
  479. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro.json +193 -0
  480. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_donacion.json +193 -0
  481. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_entrega_a_trabajadores.json +193 -0
  482. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_premio.json +193 -0
  483. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_publicidad.json +193 -0
  484. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_operacion_onerosa.json +193 -0
  485. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro.json +193 -0
  486. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_bonificacion.json +193 -0
  487. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_convenio_colectivo.json +193 -0
  488. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_muestras_medicas.json +193 -0
  489. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_premio.json +193 -0
  490. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_publicidad.json +193 -0
  491. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_operacion_onerosa.json +193 -0
  492. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro.json +193 -0
  493. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_bonificacion.json +193 -0
  494. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_convenio_colectivo.json +193 -0
  495. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_muestras_medicas.json +193 -0
  496. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_premio.json +193 -0
  497. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_publicidad.json +193 -0
  498. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_exonerado_operacion_onerosa.json +193 -0
  499. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_exonerado_transferencia_gratuita.json +193 -0
  500. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_exportacion.json +193 -0
  501. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_bonificaciones.json +193 -0
  502. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_ivap.json +195 -0
  503. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_operacion_onerosa.json +193 -0
  504. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro.json +193 -0
  505. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_donacion.json +193 -0
  506. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_entrega_a_trabajadores.json +193 -0
  507. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_premio.json +193 -0
  508. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_publicidad.json +193 -0
  509. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_operacion_onerosa.json +193 -0
  510. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro.json +193 -0
  511. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_bonificacion.json +193 -0
  512. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_convenio_colectivo.json +193 -0
  513. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_muestras_medicas.json +193 -0
  514. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_premio.json +193 -0
  515. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_publicidad.json +193 -0
  516. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_aplicacion_al_monto_fijo.json +243 -0
  517. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_mixed_tipo_igv.json +443 -0
  518. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_precio_con_impuestos.json +243 -0
  519. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_sistema_al_valor.json +243 -0
  520. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_sistema_de_precios_de_venta_al_publico.json +243 -0
  521. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_issue30/with_precio_unitario.json +193 -0
  522. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_issue30/with_precio_unitario_con_impuestos.json +193 -0
  523. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_issue30/with_precio_unitario_con_impuestos_icb.json +193 -0
  524. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_issue30/with_precio_unitario_icb.json +193 -0
  525. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_moneda/custom_moneda.json +193 -0
  526. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_orden_compra/orden_de_compra.json +243 -0
  527. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_percepcion/percepcion.json +207 -0
  528. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_product_codes/all_product_codes.json +199 -0
  529. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_product_codes/only_seller_code.json +193 -0
  530. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_product_codes/product_codes.json +193 -0
  531. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_special_characters/special_characters.json +193 -0
  532. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/perception/perception_simple.json +98 -0
  533. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/retention/retention_simple.json +98 -0
  534. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/reversion/reversion.json +74 -0
  535. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/reversion/reversion_retention.json +62 -0
  536. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/summary_documents/summary_documents.json +178 -0
  537. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/summary_documents/summary_documents_anular_boleta_exonerada.json +112 -0
  538. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/summary_documents/summary_documents_percepcion.json +124 -0
  539. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/voided_documents/voided_document.json +74 -0
  540. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/voided_documents/voided_document_auto_generated_fecha_emision.json +74 -0
  541. xhandler-6.0.0a1/testdata/conformance/enrich/renderer/voided_documents/voided_document_auto_generated_tipo_comprobante.json +74 -0
  542. xhandler-6.0.0a1/testdata/conformance/nope/errors/unknown_op.json +8 -0
  543. xhandler-6.0.0a1/testdata/conformance/parse/errors/html_page.json +24 -0
  544. xhandler-6.0.0a1/testdata/conformance/parse/errors/rate_limited.json +24 -0
  545. xhandler-6.0.0a1/testdata/conformance/parse/errors/rest_server_error.json +23 -0
  546. xhandler-6.0.0a1/testdata/conformance/parse/errors/token_rejected.json +14 -0
  547. xhandler-6.0.0a1/testdata/conformance/parse/get_status_cdr.json +26 -0
  548. xhandler-6.0.0a1/testdata/conformance/parse/send_file_cdr.json +30 -0
  549. xhandler-6.0.0a1/testdata/conformance/parse/send_file_fault.json +30 -0
  550. xhandler-6.0.0a1/testdata/conformance/parse/send_file_rejected.json +30 -0
  551. xhandler-6.0.0a1/testdata/conformance/parse/send_file_rest_error.json +29 -0
  552. xhandler-6.0.0a1/testdata/conformance/parse/send_file_rest_error_code_in_header.json +35 -0
  553. xhandler-6.0.0a1/testdata/conformance/parse/send_file_rest_ticket.json +23 -0
  554. xhandler-6.0.0a1/testdata/conformance/parse/send_file_ticket.json +24 -0
  555. xhandler-6.0.0a1/testdata/conformance/parse/token.json +17 -0
  556. xhandler-6.0.0a1/testdata/conformance/parse/validate_cdp.json +31 -0
  557. xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_cdr.json +27 -0
  558. xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_fault.json +26 -0
  559. xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_in_progress.json +23 -0
  560. xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_rest_error.json +26 -0
  561. xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_rest_in_progress.json +23 -0
  562. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/150101-F001-11.json +24 -0
  563. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/F001-1.json +24 -0
  564. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/P001-1.json +24 -0
  565. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/R001-1.json +24 -0
  566. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/RA-20200328-1.json +27 -0
  567. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/despatch-advice-T.json +26 -0
  568. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/despatch-advice-V.json +26 -0
  569. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/errors/despatch_without_url.json +15 -0
  570. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/errors/not_a_document.json +15 -0
  571. xhandler-6.0.0a1/testdata/conformance/prepare_send_file/invoice_custom_prefixes.json +24 -0
  572. xhandler-6.0.0a1/testdata/conformance/prepare_send_pack/invoices.json +31 -0
  573. xhandler-6.0.0a1/testdata/conformance/request/errors/rest_without_token.json +27 -0
  574. xhandler-6.0.0a1/testdata/conformance/request/get_status.json +39 -0
  575. xhandler-6.0.0a1/testdata/conformance/request/get_status_cdr.json +39 -0
  576. xhandler-6.0.0a1/testdata/conformance/request/send_file_rest.json +40 -0
  577. xhandler-6.0.0a1/testdata/conformance/request/send_file_soap.json +41 -0
  578. xhandler-6.0.0a1/testdata/conformance/request/token.json +27 -0
  579. xhandler-6.0.0a1/testdata/conformance/request/token_custom_url.json +29 -0
  580. xhandler-6.0.0a1/testdata/conformance/request/validate_cdp.json +44 -0
  581. xhandler-6.0.0a1/testdata/conformance/request/validate_file.json +37 -0
  582. xhandler-6.0.0a1/testdata/conformance/request/verify_ticket_rest.json +33 -0
  583. xhandler-6.0.0a1/testdata/conformance/request/verify_ticket_soap.json +37 -0
  584. xhandler-6.0.0a1/testdata/conformance/sign/errors/certificate_of_another_key.json +16 -0
  585. xhandler-6.0.0a1/testdata/conformance/sign/errors/extension_content_in_use.json +16 -0
  586. xhandler-6.0.0a1/testdata/conformance/sign/errors/garbage_pem.json +16 -0
  587. xhandler-6.0.0a1/testdata/conformance/sign/errors/not_utf8_nor_declared_latin1.json +16 -0
  588. xhandler-6.0.0a1/testdata/conformance/sign/errors/truncated_pkcs12.json +16 -0
  589. xhandler-6.0.0a1/testdata/conformance/sign/errors/wrong_password.json +16 -0
  590. xhandler-6.0.0a1/testdata/conformance/sign/errors/xml_not_base64.json +16 -0
  591. xhandler-6.0.0a1/testdata/conformance/sign/pem/complex_data.json +14 -0
  592. xhandler-6.0.0a1/testdata/conformance/sign/pem/invoice_no_template.json +14 -0
  593. xhandler-6.0.0a1/testdata/conformance/sign/pem/min_data_ruc.json +14 -0
  594. xhandler-6.0.0a1/testdata/conformance/sign/pem/special_characters.json +14 -0
  595. xhandler-6.0.0a1/testdata/conformance/sign/pem/special_characters_iso_8859_1.json +14 -0
  596. xhandler-6.0.0a1/testdata/conformance/sign/pkcs12/legacy_3des.json +14 -0
  597. xhandler-6.0.0a1/testdata/conformance/sign/pkcs12/llama.json +14 -0
  598. xhandler-6.0.0a1/testdata/conformance/verify_ticket_target/despatch_advice.json +16 -0
  599. xhandler-6.0.0a1/testdata/conformance/verify_ticket_target/errors/invoice.json +15 -0
  600. xhandler-6.0.0a1/testdata/conformance/verify_ticket_target/voided_documents.json +16 -0
  601. xhandler-6.0.0a1/tests/conformance.py +35 -0
  602. xhandler-6.0.0a1/tests/test_core.py +37 -0
  603. xhandler-6.0.0a1/tests/test_e2e.py +47 -0
  604. xhandler-6.0.0a1/tests/test_xbuilder.py +78 -0
  605. xhandler-6.0.0a1/tests/test_xsender.py +222 -0
  606. xhandler-6.0.0a1/tests/test_xsigner.py +53 -0
  607. xhandler-6.0.0a1/uv.lock +771 -0
@@ -0,0 +1,36 @@
1
+ version: 2
2
+
3
+ # Dependabot PRs are auto-approved and auto-merged once CI passes
4
+ # (.github/workflows/auto-merge-dependabot.yaml), so the cooldown keeps freshly published
5
+ # (possibly compromised) releases out; security updates skip it.
6
+ # Groups take minor/patch only, so a breaking major arrives as its own PR.
7
+ updates:
8
+
9
+ # Maintain dependencies for GitHub Actions
10
+ - package-ecosystem: "github-actions"
11
+ directory: "/"
12
+ schedule:
13
+ interval: "weekly"
14
+ cooldown:
15
+ default-days: 7
16
+ commit-message:
17
+ prefix: "chore"
18
+ include: "scope"
19
+ groups:
20
+ github-actions:
21
+ update-types: ["minor", "patch"]
22
+
23
+ # Maintain dependencies for pyproject.toml and uv.lock
24
+ - package-ecosystem: "uv"
25
+ directory: "/"
26
+ schedule:
27
+ interval: "weekly"
28
+ cooldown:
29
+ default-days: 7
30
+ semver-major-days: 14
31
+ commit-message:
32
+ prefix: "chore"
33
+ include: "scope"
34
+ groups:
35
+ uv:
36
+ update-types: ["minor", "patch"]
@@ -0,0 +1,17 @@
1
+ name: Auto-merge Dependabot PRs
2
+
3
+ # Approves Dependabot PRs and enables auto-merge; the merge happens only once the required
4
+ # checks on main (lint, test) pass. See project-openubl/release-tools README.
5
+ on:
6
+ pull_request_target:
7
+ types: [opened, synchronize, reopened]
8
+ branches: [main]
9
+
10
+ permissions:
11
+ contents: write
12
+ pull-requests: write
13
+
14
+ jobs:
15
+ auto-merge:
16
+ uses: project-openubl/release-tools/.github/workflows/auto-merge-dependabot.yaml@main
17
+ secrets: inherit
@@ -0,0 +1,36 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches-ignore:
6
+ - "dependabot/**"
7
+ pull_request: { }
8
+
9
+ jobs:
10
+ test:
11
+ strategy:
12
+ matrix:
13
+ python: [ "3.10", "3.11", "3.12", "3.13", "3.14" ]
14
+ os: [ ubuntu-latest ]
15
+ include:
16
+ - { python: "3.14", os: macos-latest }
17
+ - { python: "3.14", os: windows-latest }
18
+ runs-on: ${{ matrix.os }}
19
+ steps:
20
+ - uses: actions/checkout@v7
21
+ - uses: astral-sh/setup-uv@v7
22
+ with:
23
+ python-version: ${{ matrix.python }}
24
+ # Every case of the conformance corpus, raw and through the models
25
+ - run: uv run pytest
26
+
27
+ lint:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - uses: actions/checkout@v7
31
+ - uses: astral-sh/setup-uv@v7
32
+ - run: uv run ruff check
33
+ - run: uv run ruff format --check
34
+ - run: uv run mypy src
35
+ # The committed core is the xhandler.wasm of the xhandler-rust release in its VERSION
36
+ - run: make verify-core
@@ -0,0 +1,60 @@
1
+ name: Release
2
+
3
+ # Runs when a release is published (release-tools' release-xhandler workflow creates it after
4
+ # syncing the core of the xhandler-rust release of the same version) and publishes to PyPI.
5
+ # The package version is the core's (src/xhandler/_core/VERSION), e.g. 6.0.0a1 for
6
+ # v6.0.0-alpha.1.
7
+
8
+ on:
9
+ release:
10
+ types: [published]
11
+ workflow_dispatch:
12
+ inputs:
13
+ tag:
14
+ description: "Existing release tag to publish again, e.g. v6.0.0-alpha.1"
15
+ required: true
16
+ type: string
17
+
18
+ # release-tools finds the run of a release by this name
19
+ run-name: Release ${{ github.event.release.tag_name || inputs.tag }}
20
+
21
+ permissions:
22
+ contents: read
23
+
24
+ env:
25
+ TAG: ${{ github.event.release.tag_name || inputs.tag }}
26
+
27
+ jobs:
28
+ build:
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@v7
32
+ with:
33
+ ref: ${{ env.TAG }}
34
+ - uses: astral-sh/setup-uv@v7
35
+ # A release carries the core released by xhandler-rust as the same version (release-tools
36
+ # checks it too, before tagging)
37
+ - run: make verify-release TAG="$TAG"
38
+ - run: uv run pytest
39
+ - run: uv build
40
+ - uses: actions/upload-artifact@v7.0.2
41
+ with:
42
+ name: dist
43
+ path: dist/
44
+
45
+ pypi:
46
+ needs: build
47
+ runs-on: ubuntu-latest
48
+ # PyPI trusted publishing: the publisher on pypi.org names this repository, release.yml and
49
+ # this environment
50
+ environment: pypi
51
+ permissions:
52
+ id-token: write
53
+ steps:
54
+ - uses: actions/download-artifact@v8.0.2
55
+ with:
56
+ name: dist
57
+ path: dist/
58
+ - uses: pypa/gh-action-pypi-publish@v1.14.3
59
+ with:
60
+ skip-existing: true
@@ -0,0 +1,7 @@
1
+ __pycache__/
2
+ .venv/
3
+ .pytest_cache/
4
+ .mypy_cache/
5
+ .ruff_cache/
6
+ dist/
7
+ /.dist/
@@ -0,0 +1,46 @@
1
+ # Contribuir a xhandler-python
2
+
3
+ ## Requisitos
4
+
5
+ - Python 3.10 o superior y [uv](https://docs.astral.sh/uv/).
6
+ - Para cambiar el núcleo: un checkout de
7
+ [xhandler-rust](https://github.com/project-openubl/xhandler-rust) junto a este (revisa
8
+ [su CONTRIBUTING.md](https://github.com/project-openubl/xhandler-rust/blob/main/CONTRIBUTING.md)).
9
+
10
+ ## Comandos
11
+
12
+ ```shell
13
+ uv sync
14
+ make test # uv run pytest
15
+ make lint # ruff check, ruff format --check, mypy
16
+ uv run pytest tests/test_xsender.py -k token # un archivo, los tests que coinciden con un nombre
17
+ XHANDLER_E2E=true uv run pytest tests/test_e2e.py # crea, firma y envía una factura a la SUNAT beta
18
+ ```
19
+
20
+ ## Hacer un cambio
21
+
22
+ - Crear, firmar, armar las peticiones a la SUNAT y leer sus respuestas ocurre en el núcleo de
23
+ Rust (`src/xhandler/_core/xhandler.wasm`). Esos cambios van en xhandler-rust; luego aquí:
24
+
25
+ ```shell
26
+ make sync RUST_REPO=../xhandler-rust # el núcleo de tu checkout, para desarrollar
27
+ make sync CORE=6.0.0-alpha.1 # el núcleo de una versión de xhandler-rust
28
+ ```
29
+
30
+ `make sync` copia el núcleo, los modelos (`src/xhandler/xbuilder/models.py`) y el corpus de
31
+ conformidad (`testdata/conformance/`). No los edites a mano. La versión del paquete es la del
32
+ núcleo, y una versión solo se publica con el núcleo de la versión igual de xhandler-rust:
33
+ `make verify-core` lo comprueba.
34
+ - En Python está lo que necesita IO: el cliente HTTP (httpx), los reintentos y el caché de tokens
35
+ (`src/xhandler/xsender/`).
36
+ - Los nombres (`FileSender`, `SunatClient`, `SigningKey`...) se mantienen iguales en Go, Python y
37
+ Java.
38
+
39
+ ## Pull requests
40
+
41
+ - Título con [Conventional Commits](https://www.conventionalcommits.org/) (`feat:`, `fix:`,
42
+ `docs:`...); los cambios incompatibles llevan `!`.
43
+ - Deben pasar `lint` y `test` (Python 3.10 a 3.14 en Linux; macOS y Windows).
44
+
45
+ Al contribuir aceptas que tus contribuciones se distribuyan bajo la
46
+ [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0).
@@ -0,0 +1,51 @@
1
+ # The core (src/xhandler/_core/xhandler.wasm, src/xhandler/xbuilder/models.py and
2
+ # testdata/conformance) comes from xhandler-rust:
3
+ #
4
+ # make sync CORE=<version> the xhandler-rust v<version> release
5
+ # make sync a checkout of xhandler-rust (RUST_REPO), for development
6
+ # make verify-core checks that the committed core is the one released as its VERSION
7
+ # make verify-release TAG=v<version>
8
+ # what releasing <version> requires: syncing the xhandler-rust
9
+ # release of the same version changes nothing
10
+ #
11
+ # The package version is the core's (src/xhandler/_core/VERSION).
12
+ RUST_REPO ?= ../xhandler-rust
13
+ CORE ?=
14
+ DIST := $(if $(CORE),.dist,$(RUST_REPO)/dist)
15
+
16
+ SYNCED := src/xhandler/_core/xhandler.wasm src/xhandler/_core/VERSION src/xhandler/xbuilder/models.py testdata/conformance
17
+
18
+ .PHONY: sync dist verify-core verify-release test lint
19
+
20
+ sync: dist
21
+ cp $(DIST)/xhandler.wasm $(DIST)/VERSION src/xhandler/_core/
22
+ cp $(DIST)/models/python/models.py src/xhandler/xbuilder/models.py
23
+ rm -rf testdata/conformance && cp -r $(DIST)/conformance testdata/conformance
24
+ $(if $(CORE),rm -rf $(DIST))
25
+
26
+ dist:
27
+ ifeq ($(CORE),)
28
+ $(MAKE) -C $(RUST_REPO)/xhandler-wasm dist
29
+ else
30
+ ./hack/core.sh download $(CORE) $(DIST)
31
+ endif
32
+
33
+ verify-core:
34
+ ./hack/core.sh verify src/xhandler/_core/xhandler.wasm src/xhandler/_core/VERSION
35
+
36
+ verify-release:
37
+ ./hack/core.sh verify-release $(TAG) src/xhandler/_core/xhandler.wasm src/xhandler/_core/VERSION
38
+ $(MAKE) --no-print-directory sync CORE=$(TAG:v%=%)
39
+ @if [ -n "$$(git status --porcelain -- $(SYNCED))" ]; then \
40
+ echo "error: the core differs from the xhandler-rust $(TAG) release (now synced here):" >&2; \
41
+ git status --short -- $(SYNCED) >&2; \
42
+ exit 1; \
43
+ fi
44
+
45
+ test:
46
+ uv run pytest
47
+
48
+ lint:
49
+ uv run ruff check
50
+ uv run ruff format --check
51
+ uv run mypy src
@@ -0,0 +1,93 @@
1
+ Metadata-Version: 2.5
2
+ Name: xhandler
3
+ Version: 6.0.0-alpha.1
4
+ Summary: Create, sign and send the electronic documents (UBL XML) of SUNAT Peru
5
+ License-Expression: Apache-2.0
6
+ Requires-Python: >=3.10
7
+ Requires-Dist: httpx>=0.27
8
+ Requires-Dist: pydantic>=2.7
9
+ Requires-Dist: wasmtime>=30
10
+ Description-Content-Type: text/markdown
11
+
12
+ # xhandler-python
13
+
14
+ [![License](https://img.shields.io/github/license/project-openubl/xhandler-python?logo=apache)](https://www.apache.org/licenses/LICENSE-2.0)
15
+ [![CI](https://github.com/project-openubl/xhandler-python/actions/workflows/ci.yml/badge.svg)](https://github.com/project-openubl/xhandler-python/actions/workflows/ci.yml)
16
+
17
+ Crea, firma y envía los comprobantes electrónicos (XML UBL) de la SUNAT del Perú desde Python. Sin
18
+ extensiones nativas que compilar.
19
+
20
+ ## Instalación
21
+
22
+ Hasta la primera versión en PyPI, instálalo desde GitHub:
23
+
24
+ ```shell
25
+ pip install "xhandler @ git+https://github.com/project-openubl/xhandler-python"
26
+ # o
27
+ uv add "xhandler @ git+https://github.com/project-openubl/xhandler-python"
28
+ ```
29
+
30
+ Python 3.10 o superior, en Linux, macOS y Windows.
31
+
32
+ ## Uso
33
+
34
+ ```python
35
+ from decimal import Decimal
36
+ from pathlib import Path
37
+
38
+ from xhandler import xbuilder
39
+ from xhandler.xsender import Credentials, FileSender, URLs
40
+ from xhandler.xsigner import SigningKey, sign
41
+
42
+ # Crear
43
+ invoice = xbuilder.Invoice(
44
+ serie_numero="F001-1",
45
+ proveedor=xbuilder.Proveedor(ruc="12345678912", razon_social="Softgreen S.A.C."),
46
+ cliente=xbuilder.Cliente(
47
+ tipo_documento_identidad="6", # RUC (Catalog6)
48
+ numero_documento_identidad="12121212121",
49
+ nombre="Carlos Feria",
50
+ ),
51
+ detalles=[xbuilder.Detalle(descripcion="Item", cantidad=Decimal(2), precio=Decimal("100.00"))],
52
+ )
53
+ xml = xbuilder.build(invoice) # fecha de hoy en Perú y tasas vigentes
54
+
55
+ # Firmar
56
+ key = SigningKey.from_pkcs12(Path("certificado.pfx").read_bytes(), "password")
57
+ signed = sign(xml.encode(), key)
58
+
59
+ # Enviar
60
+ sender = FileSender(URLs.beta(), Credentials(username="12345678959MODDATOS", password="MODDATOS"))
61
+ result = sender.send_file(signed)
62
+ if result.cdr:
63
+ # ACEPTADO La Factura numero F001-1, ha sido aceptada
64
+ print(result.cdr.status, result.cdr.description)
65
+ elif result.ticket: # resúmenes, bajas y guías: consulta el ticket después
66
+ print(sender.verify_file_ticket(signed, result.ticket))
67
+ else:
68
+ print(result.fault.status, result.fault.code, result.fault.message)
69
+ ```
70
+
71
+ - **Crear**: facturas, boletas, notas de crédito y débito, guías de remisión, percepciones,
72
+ retenciones, resúmenes diarios, bajas y reversiones. `xbuilder.enrich` devuelve el documento con
73
+ los valores calculados (impuestos, totales, leyendas) en lugar del XML. `xbuilder.Defaults`
74
+ cambia la fecha de emisión o las tasas.
75
+ - **Firmar**: `SigningKey.from_pem(llave_privada, certificado)` para archivos PEM. `sign` devuelve
76
+ texto si recibe texto y bytes si recibe bytes.
77
+ - **Enviar**: `send_pack` envía varias facturas en un zip. `SunatClient` también tiene los
78
+ servicios de consulta y validación (`get_status`, `get_status_cdr`, `validate_cdp`,
79
+ `validate_file`). Si envías por varias empresas, comparte un `SunatClient` (conexiones y tokens)
80
+ entre sus `FileSender`.
81
+ - **Guías de remisión**: usan `URLs.production()` (la SUNAT no tiene beta para ellas) y el
82
+ `client_id`/`client_secret` de la API.
83
+ - **Errores**: los del núcleo lanzan `xhandler.XhandlerError` con un `kind`: `ErrorKind.VALIDATION`
84
+ (p. ej. un código de catálogo inválido), `ErrorKind.INVALID_KEY`, `ErrorKind.RESPONSE`... Los
85
+ rechazos de la SUNAT no son errores: llegan en `result.fault`.
86
+
87
+ ## Contribuir
88
+
89
+ Revisa [CONTRIBUTING.md](CONTRIBUTING.md).
90
+
91
+ ## Licencia
92
+
93
+ [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
@@ -0,0 +1,82 @@
1
+ # xhandler-python
2
+
3
+ [![License](https://img.shields.io/github/license/project-openubl/xhandler-python?logo=apache)](https://www.apache.org/licenses/LICENSE-2.0)
4
+ [![CI](https://github.com/project-openubl/xhandler-python/actions/workflows/ci.yml/badge.svg)](https://github.com/project-openubl/xhandler-python/actions/workflows/ci.yml)
5
+
6
+ Crea, firma y envía los comprobantes electrónicos (XML UBL) de la SUNAT del Perú desde Python. Sin
7
+ extensiones nativas que compilar.
8
+
9
+ ## Instalación
10
+
11
+ Hasta la primera versión en PyPI, instálalo desde GitHub:
12
+
13
+ ```shell
14
+ pip install "xhandler @ git+https://github.com/project-openubl/xhandler-python"
15
+ # o
16
+ uv add "xhandler @ git+https://github.com/project-openubl/xhandler-python"
17
+ ```
18
+
19
+ Python 3.10 o superior, en Linux, macOS y Windows.
20
+
21
+ ## Uso
22
+
23
+ ```python
24
+ from decimal import Decimal
25
+ from pathlib import Path
26
+
27
+ from xhandler import xbuilder
28
+ from xhandler.xsender import Credentials, FileSender, URLs
29
+ from xhandler.xsigner import SigningKey, sign
30
+
31
+ # Crear
32
+ invoice = xbuilder.Invoice(
33
+ serie_numero="F001-1",
34
+ proveedor=xbuilder.Proveedor(ruc="12345678912", razon_social="Softgreen S.A.C."),
35
+ cliente=xbuilder.Cliente(
36
+ tipo_documento_identidad="6", # RUC (Catalog6)
37
+ numero_documento_identidad="12121212121",
38
+ nombre="Carlos Feria",
39
+ ),
40
+ detalles=[xbuilder.Detalle(descripcion="Item", cantidad=Decimal(2), precio=Decimal("100.00"))],
41
+ )
42
+ xml = xbuilder.build(invoice) # fecha de hoy en Perú y tasas vigentes
43
+
44
+ # Firmar
45
+ key = SigningKey.from_pkcs12(Path("certificado.pfx").read_bytes(), "password")
46
+ signed = sign(xml.encode(), key)
47
+
48
+ # Enviar
49
+ sender = FileSender(URLs.beta(), Credentials(username="12345678959MODDATOS", password="MODDATOS"))
50
+ result = sender.send_file(signed)
51
+ if result.cdr:
52
+ # ACEPTADO La Factura numero F001-1, ha sido aceptada
53
+ print(result.cdr.status, result.cdr.description)
54
+ elif result.ticket: # resúmenes, bajas y guías: consulta el ticket después
55
+ print(sender.verify_file_ticket(signed, result.ticket))
56
+ else:
57
+ print(result.fault.status, result.fault.code, result.fault.message)
58
+ ```
59
+
60
+ - **Crear**: facturas, boletas, notas de crédito y débito, guías de remisión, percepciones,
61
+ retenciones, resúmenes diarios, bajas y reversiones. `xbuilder.enrich` devuelve el documento con
62
+ los valores calculados (impuestos, totales, leyendas) en lugar del XML. `xbuilder.Defaults`
63
+ cambia la fecha de emisión o las tasas.
64
+ - **Firmar**: `SigningKey.from_pem(llave_privada, certificado)` para archivos PEM. `sign` devuelve
65
+ texto si recibe texto y bytes si recibe bytes.
66
+ - **Enviar**: `send_pack` envía varias facturas en un zip. `SunatClient` también tiene los
67
+ servicios de consulta y validación (`get_status`, `get_status_cdr`, `validate_cdp`,
68
+ `validate_file`). Si envías por varias empresas, comparte un `SunatClient` (conexiones y tokens)
69
+ entre sus `FileSender`.
70
+ - **Guías de remisión**: usan `URLs.production()` (la SUNAT no tiene beta para ellas) y el
71
+ `client_id`/`client_secret` de la API.
72
+ - **Errores**: los del núcleo lanzan `xhandler.XhandlerError` con un `kind`: `ErrorKind.VALIDATION`
73
+ (p. ej. un código de catálogo inválido), `ErrorKind.INVALID_KEY`, `ErrorKind.RESPONSE`... Los
74
+ rechazos de la SUNAT no son errores: llegan en `result.fault`.
75
+
76
+ ## Contribuir
77
+
78
+ Revisa [CONTRIBUTING.md](CONTRIBUTING.md).
79
+
80
+ ## Licencia
81
+
82
+ [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
@@ -0,0 +1,97 @@
1
+ #!/usr/bin/env bash
2
+ # The xhandler core (xhandler.wasm, its models and the conformance corpus) comes from the
3
+ # releases of xhandler-rust, which attach xhandler-dist-<version>.tar.gz, xhandler.wasm and
4
+ # SHA256SUMS. This script is identical in xhandler-go, xhandler-python and xhandler-java.
5
+ #
6
+ # core.sh download <version> <dir>
7
+ # extracts the release's dist into <dir>
8
+ # core.sh verify <wasm> <version-file>
9
+ # checks that <wasm> is the xhandler.wasm released as the version in <version-file>; a
10
+ # version that was never released (a core built from a checkout) only warns
11
+ # core.sh verify-release <tag> <wasm> <version-file>
12
+ # what releasing <tag> requires: the version in <version-file> is the tag's and <wasm> is
13
+ # the xhandler.wasm of that xhandler-rust release
14
+ #
15
+ # A release that can't be read (network, GitHub errors) is an error, never "not released".
16
+ # XHANDLER_RUST_RELEASES replaces the releases URL (for tests).
17
+ set -euo pipefail
18
+
19
+ releases=${XHANDLER_RUST_RELEASES:-https://github.com/project-openubl/xhandler-rust/releases/download}
20
+ # The versions release-tools releases
21
+ version_re='^[0-9]+\.[0-9]+\.[0-9]+(-(alpha|beta|rc)\.[0-9]+)?$'
22
+
23
+ die() {
24
+ echo "error: $*" >&2
25
+ exit 1
26
+ }
27
+ usage() {
28
+ echo "usage: core.sh download <version> <dir> | verify <wasm> <version-file> | verify-release <tag> <wasm> <version-file>" >&2
29
+ exit 2
30
+ }
31
+ sha256() { if command -v sha256sum >/dev/null; then sha256sum "$1"; else shasum -a 256 "$1"; fi | cut -d' ' -f1; }
32
+ # The version in a VERSION file, without a Windows line ending
33
+ read_version() { tr -d '\r\n' <"$1"; }
34
+
35
+ # fetch <url> <file>: 0 when downloaded, 1 when the release has no such file (404); any other
36
+ # failure stops the script
37
+ fetch() {
38
+ local status
39
+ status=$(curl -sSL -o "$2" -w '%{http_code}' "$1") || die "cannot download $1"
40
+ case "$status" in
41
+ 200) return 0 ;;
42
+ 404) return 1 ;;
43
+ *) die "cannot download $1: HTTP $status" ;;
44
+ esac
45
+ }
46
+
47
+ # The checksum of <asset> in the SHA256SUMS of release <version>; empty if it was never released
48
+ # (or not sealed yet: SHA256SUMS goes last)
49
+ released_sha256() {
50
+ local sums
51
+ sums=$(mktemp)
52
+ if fetch "$releases/v$1/SHA256SUMS" "$sums"; then
53
+ awk -v asset="$2" '$2 == asset {print $1}' "$sums"
54
+ fi
55
+ rm -f "$sums"
56
+ }
57
+
58
+ case "${1:-}" in
59
+ download)
60
+ [ $# -eq 3 ] || usage
61
+ version=${2#v} dir=$3 asset="xhandler-dist-${2#v}.tar.gz"
62
+ [[ "$version" =~ $version_re ]] || die "$2 is not a release version (X.Y.Z or X.Y.Z-alpha.N, -beta.N, -rc.N)"
63
+ expected=$(released_sha256 "$version" "$asset")
64
+ [ -n "$expected" ] || die "xhandler-rust v$version is not released (no SHA256SUMS with $asset)"
65
+ tmp=$(mktemp -d)
66
+ trap 'rm -rf "$tmp"' EXIT
67
+ fetch "$releases/v$version/$asset" "$tmp/$asset" || die "xhandler-rust v$version has no $asset"
68
+ [ "$(sha256 "$tmp/$asset")" = "$expected" ] || die "$asset does not match the SHA256SUMS of xhandler-rust v$version"
69
+ rm -rf "$dir" && mkdir -p "$dir" && tar -xzf "$tmp/$asset" -C "$dir"
70
+ ;;
71
+ verify | verify-release)
72
+ if [ "$1" = verify-release ]; then
73
+ [ $# -eq 4 ] || usage
74
+ tag=$2
75
+ shift
76
+ else
77
+ [ $# -eq 3 ] || usage
78
+ tag=""
79
+ fi
80
+ wasm=$2 version=$(read_version "$3")
81
+ if [ -n "$tag" ]; then
82
+ [ "v$version" = "$tag" ] || die "the core is $version, not ${tag#v}: run make sync CORE=${tag#v}"
83
+ [[ "$version" =~ $version_re ]] || die "$tag is not a release version (vX.Y.Z or vX.Y.Z-alpha.N, -beta.N, -rc.N)"
84
+ fi
85
+ expected=$(released_sha256 "$version" xhandler.wasm)
86
+ message="the core $version ($wasm) is not an xhandler-rust release: sync a release with 'make sync CORE=<version>'"
87
+ if [ -z "$expected" ]; then
88
+ [ -z "$tag" ] || die "$message"
89
+ echo "warning: $message" >&2
90
+ elif [ "$(sha256 "$wasm")" != "$expected" ]; then
91
+ die "$wasm is not the xhandler.wasm of xhandler-rust v$version"
92
+ else
93
+ echo "$wasm is the xhandler.wasm of xhandler-rust v$version"
94
+ fi
95
+ ;;
96
+ *) usage ;;
97
+ esac
@@ -0,0 +1,46 @@
1
+ [project]
2
+ name = "xhandler"
3
+ # The version of the core it carries (make sync), e.g. 6.0.0-alpha.1 -> 6.0.0a1
4
+ dynamic = ["version"]
5
+ description = "Create, sign and send the electronic documents (UBL XML) of SUNAT Peru"
6
+ readme = "README.md"
7
+ license = "Apache-2.0"
8
+ requires-python = ">=3.10"
9
+ dependencies = [
10
+ "httpx>=0.27",
11
+ "pydantic>=2.7",
12
+ "wasmtime>=30",
13
+ ]
14
+
15
+ [dependency-groups]
16
+ dev = [
17
+ "mypy>=1.13",
18
+ "pytest>=8",
19
+ "ruff>=0.8",
20
+ ]
21
+
22
+ [build-system]
23
+ requires = ["hatchling"]
24
+ build-backend = "hatchling.build"
25
+
26
+ [tool.hatch.version]
27
+ path = "src/xhandler/_core/VERSION"
28
+ pattern = "(?P<version>.+)"
29
+
30
+ [tool.hatch.build.targets.wheel]
31
+ packages = ["src/xhandler"]
32
+
33
+ [tool.pytest.ini_options]
34
+ testpaths = ["tests"]
35
+ pythonpath = ["tests"]
36
+
37
+ [tool.ruff]
38
+ line-length = 100
39
+ extend-exclude = ["src/xhandler/xbuilder/models.py"]
40
+
41
+ [tool.ruff.lint]
42
+ select = ["E", "F", "I", "UP", "B", "SIM"]
43
+
44
+ [tool.mypy]
45
+ strict = true
46
+ plugins = ["pydantic.mypy"]
@@ -0,0 +1,10 @@
1
+ """Create, sign and send the electronic documents (UBL XML) of SUNAT Peru.
2
+
3
+ The work is done by the xhandler Rust core, embedded as a WebAssembly module:
4
+ see the ``xhandler.xbuilder``, ``xhandler.xsigner`` and ``xhandler.xsender``
5
+ packages.
6
+ """
7
+
8
+ from xhandler._core import CORE_VERSION, ErrorKind, XhandlerError
9
+
10
+ __all__ = ["CORE_VERSION", "ErrorKind", "XhandlerError"]
@@ -0,0 +1 @@
1
+ 6.0.0-alpha.1