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.
- xhandler-6.0.0a1/.github/dependabot.yml +36 -0
- xhandler-6.0.0a1/.github/workflows/auto-merge-dependabot.yaml +17 -0
- xhandler-6.0.0a1/.github/workflows/ci.yml +36 -0
- xhandler-6.0.0a1/.github/workflows/release.yml +60 -0
- xhandler-6.0.0a1/.gitignore +7 -0
- xhandler-6.0.0a1/CONTRIBUTING.md +46 -0
- xhandler-6.0.0a1/Makefile +51 -0
- xhandler-6.0.0a1/PKG-INFO +93 -0
- xhandler-6.0.0a1/README.md +82 -0
- xhandler-6.0.0a1/hack/core.sh +97 -0
- xhandler-6.0.0a1/pyproject.toml +46 -0
- xhandler-6.0.0a1/src/xhandler/__init__.py +10 -0
- xhandler-6.0.0a1/src/xhandler/_core/VERSION +1 -0
- xhandler-6.0.0a1/src/xhandler/_core/__init__.py +132 -0
- xhandler-6.0.0a1/src/xhandler/_core/xhandler.wasm +0 -0
- xhandler-6.0.0a1/src/xhandler/py.typed +0 -0
- xhandler-6.0.0a1/src/xhandler/xbuilder/__init__.py +47 -0
- xhandler-6.0.0a1/src/xhandler/xbuilder/models.py +707 -0
- xhandler-6.0.0a1/src/xhandler/xsender/__init__.py +280 -0
- xhandler-6.0.0a1/src/xhandler/xsender/models.py +197 -0
- xhandler-6.0.0a1/src/xhandler/xsigner/__init__.py +48 -0
- xhandler-6.0.0a1/testdata/conformance/build/errors/despatch_advice_without_fecha_traslado.json +15 -0
- xhandler-6.0.0a1/testdata/conformance/build/errors/invalid_catalog_code.json +35 -0
- xhandler-6.0.0a1/testdata/conformance/build/errors/invalid_date.json +35 -0
- xhandler-6.0.0a1/testdata/conformance/build/errors/unknown_kind.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_1_con_3_items.json +135 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_2_con_2_items.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_3_con_1_items.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_4_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/factura_5_con_4_items.json +160 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_credito_de_factura_2.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_credito_de_factura_3.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_credito_de_factura_4.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_debito_de_factura_2.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_debito_de_factura_3.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group01/nota_de_debito_de_factura_4.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_1_con_1_items.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_2_con_4_items.json +160 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_3_con_7_items.json +235 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_4_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/factura_5_con_6_items.json +210 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_credito_de_factura_1.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_credito_de_factura_3.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_credito_de_factura_5.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_debito_de_factura_1.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_debito_de_factura_3.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/exonerado/nota_de_debito_de_factura_5.json +202 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_1_con_1_items.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_2_con_4_items.json +160 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_3_con_7_items.json +235 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_4_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/factura_5_con_6_items.json +210 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_credito_de_factura_1.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_credito_de_factura_3.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_credito_de_factura_5.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_debito_de_factura_1.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_debito_de_factura_3.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group02/inafecto/nota_de_debito_de_factura_5.json +202 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_1_con_7_items.json +235 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_2_con_2_items.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_3_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_4_con_4_items.json +160 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/factura_5_con_3_items.json +135 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/nota_de_credito_de_factura_2.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/nota_de_credito_de_factura_3.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/nota_de_debito_de_factura_2.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group03/nota_de_debito_de_factura_3.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_1_con_2_items.json +117 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_2_con_2_items.json +117 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_3_con_4_items.json +167 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_4_con_3_items.json +142 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/factura_5_con_5_items.json +192 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_credito_de_factura_2.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_credito_de_factura_3.json +127 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_credito_de_factura_5.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_debito_de_factura_2.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_debito_de_factura_3.json +127 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group04/nota_de_debito_de_factura_5.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group05/factura_1_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group05/nota_de_credito_de_factura_1.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group05/nota_de_debito_de_factura_1.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group06/factura_1_con_5_items.json +191 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group06/nota_de_credito_de_factura_1.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group06/nota_de_debito_de_factura_1.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group07/factura_1_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group07/nota_de_credito_de_factura_1.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group07/nota_de_debito_de_factura_1.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_1_con_4_items.json +160 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_2_con_7_items.json +235 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_3_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_4_con_3_items.json +135 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/boleta_5_con_2_items.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_credito_de_boleta_2.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_credito_de_boleta_3.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_credito_de_boleta_4.json +127 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_debito_de_boleta_2.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_debito_de_boleta_3.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group08/nota_de_debito_de_boleta_4.json +127 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_1_con_2_items.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_2_con_4_items.json +160 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_3_con_7_items.json +235 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_4_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/boleta_5_con_1_items.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_credito_de_boleta_1.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_credito_de_boleta_4.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_credito_de_boleta_5.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_debito_de_boleta_1.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_debito_de_boleta_4.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/exonerado/nota_de_debito_de_boleta_5.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_1_con_2_items.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_2_con_4_items.json +160 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_3_con_7_items.json +235 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_4_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/boleta_5_con_1_items.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_credito_de_boleta_1.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_credito_de_boleta_4.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_credito_de_boleta_5.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_debito_de_boleta_1.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_debito_de_boleta_4.json +177 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group09/inafecto/nota_de_debito_de_boleta_5.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_1_con_7_items.json +235 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_2_con_2_items.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_3_con_5_items.json +185 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_4_con_4_items.json +160 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/boleta_5_con_9_items.json +285 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_credito_de_boleta_1.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_credito_de_boleta_2.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_credito_de_boleta_4.json +152 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_debito_de_boleta_1.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_debito_de_boleta_2.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group10/nota_de_debito_de_boleta_4.json +152 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_1_con_10_items.json +317 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_2_con_7_items.json +242 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_3_con_6_items.json +217 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_4_con_9_items.json +292 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/boleta_5_con_4_items.json +167 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_credito_de_boleta_1.json +302 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_credito_de_boleta_2.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_credito_de_boleta_4.json +277 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_debito_de_boleta_1.json +302 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_debito_de_boleta_2.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group11/nota_de_debito_de_boleta_4.json +277 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group12/boleta_1_con_3_items.json +135 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group12/nota_de_credito_de_boleta_1.json +127 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group12/nota_de_debito_de_boleta_1.json +127 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group13/resumen_diario_de_boletas.json +183 -0
- xhandler-6.0.0a1/testdata/conformance/build/homologacion/group14/comunicacion_de_baja.json +62 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note/min_data_ruc.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_atributos/atributos_simple.json +94 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_isc/isc_aplicacion_al_monto_fijo.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_isc/isc_sistema_al_valor.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_isc/isc_sistema_de_precios_de_venta_al_publico.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_orden_compra/orden_de_compra.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_product_codes/all_product_codes.json +80 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/credit_note_product_codes/product_codes.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/debit_note/min_data_ruc.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/debit_note_atributos/atributos_simple.json +94 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/debit_note_product_codes/all_product_codes.json +80 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/debit_note_product_codes/product_codes.json +77 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/despatch_advice/carrier_data.json +100 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/despatch_advice/complex_data.json +140 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/despatch_advice/min_data.json +81 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_cliente_direccion_and_contacto.json +122 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_codigo_local.json +119 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_fecha_emision.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_firmante.json +113 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_proveedor_direccion_and_contacto.json +122 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/custom_unidad_medida.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice/icb.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_anticipos/min_anticipos.json +117 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_atributos/atributos_con_periodo.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_atributos/atributos_simple.json +102 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_cargos/cargo_afecta_base.json +92 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_cargos/cargo_no_afecta_base.json +92 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_descuentos/descuento_global.json +92 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_descuentos/descuento_global_tipo_02.json +92 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_descuentos/descuento_global_tipo_03.json +92 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_detraccion/detraccion.json +91 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_direccion_entrega/direccion_entrega_full.json +119 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_direccion_entrega/direccion_entrega_min.json +119 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_documento_relacionado/documento_relacionado.json +115 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_fecha_vencimiento/con_fecha_vencimiento.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_forma_pago/con_forma_pago.json +123 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_forma_pago/sin_forma_pago.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_guia_embebida/guia_embebida.json +118 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_guias/guia_serie_t.json +115 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_exonerado_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_exonerado_transferencia_gratuita.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_exportacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_bonificaciones.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_ivap.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_donacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_entrega_a_trabajadores.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_premio.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_publicidad.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_exonerado_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_exonerado_transferencia_gratuita.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_exportacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_bonificaciones.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_ivap.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_donacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_entrega_a_trabajadores.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_premio.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_publicidad.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_bonificacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_convenio_colectivo.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_muestras_medicas.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_premio.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_publicidad.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exonerado_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exonerado_transferencia_gratuita.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exportacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_bonificaciones.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_donacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_entrega_a_trabajadores.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_premio.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_publicidad.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_bonificacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_convenio_colectivo.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_muestras_medicas.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_premio.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_publicidad.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_bonificacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_convenio_colectivo.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_muestras_medicas.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_premio.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_publicidad.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_exonerado_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_exonerado_transferencia_gratuita.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_exportacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_bonificaciones.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_ivap.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_donacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_entrega_a_trabajadores.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_premio.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_publicidad.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_operacion_onerosa.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_bonificacion.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_convenio_colectivo.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_muestras_medicas.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_premio.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_publicidad.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_aplicacion_al_monto_fijo.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_mixed_tipo_igv.json +210 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_precio_con_impuestos.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_sistema_al_valor.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_isc/isc_sistema_de_precios_de_venta_al_publico.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_issue30/with_precio_unitario.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_issue30/with_precio_unitario_con_impuestos.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_issue30/with_precio_unitario_con_impuestos_icb.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_issue30/with_precio_unitario_icb.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_moneda/custom_moneda.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_orden_compra/orden_de_compra.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_percepcion/percepcion.json +91 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_product_codes/all_product_codes.json +88 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_product_codes/only_seller_code.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_product_codes/product_codes.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/invoice_special_characters/special_characters.json +85 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/perception/perception_simple.json +56 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/retention/retention_simple.json +56 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/reversion/reversion.json +44 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/reversion/reversion_retention.json +38 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/summary_documents/summary_documents.json +96 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/summary_documents/summary_documents_anular_boleta_exonerada.json +63 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/summary_documents/summary_documents_percepcion.json +69 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/voided_documents/voided_document.json +44 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/voided_documents/voided_document_auto_generated_fecha_emision.json +44 -0
- xhandler-6.0.0a1/testdata/conformance/build/renderer/voided_documents/voided_document_auto_generated_tipo_comprobante.json +44 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_1_con_3_items.json +293 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_2_con_2_items.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_3_con_1_items.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_4_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/factura_5_con_4_items.json +343 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_credito_de_factura_2.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_credito_de_factura_3.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_credito_de_factura_4.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_debito_de_factura_2.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_debito_de_factura_3.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group01/nota_de_debito_de_factura_4.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_1_con_1_items.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_2_con_4_items.json +343 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_3_con_7_items.json +493 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_4_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/factura_5_con_6_items.json +443 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_credito_de_factura_1.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_credito_de_factura_3.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_credito_de_factura_5.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_debito_de_factura_1.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_debito_de_factura_3.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/exonerado/nota_de_debito_de_factura_5.json +419 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_1_con_1_items.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_2_con_4_items.json +343 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_3_con_7_items.json +493 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_4_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/factura_5_con_6_items.json +443 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_credito_de_factura_1.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_credito_de_factura_3.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_credito_de_factura_5.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_debito_de_factura_1.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_debito_de_factura_3.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group02/inafecto/nota_de_debito_de_factura_5.json +419 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_1_con_7_items.json +493 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_2_con_2_items.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_3_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_4_con_4_items.json +343 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/factura_5_con_3_items.json +293 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/nota_de_credito_de_factura_2.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/nota_de_credito_de_factura_3.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/nota_de_debito_de_factura_2.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group03/nota_de_debito_de_factura_3.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_1_con_2_items.json +257 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_2_con_2_items.json +257 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_3_con_4_items.json +357 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_4_con_3_items.json +307 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/factura_5_con_5_items.json +407 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_credito_de_factura_2.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_credito_de_factura_3.json +269 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_credito_de_factura_5.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_debito_de_factura_2.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_debito_de_factura_3.json +269 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group04/nota_de_debito_de_factura_5.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group05/factura_1_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group05/nota_de_credito_de_factura_1.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group05/nota_de_debito_de_factura_1.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group06/factura_1_con_5_items.json +407 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group06/nota_de_credito_de_factura_1.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group06/nota_de_debito_de_factura_1.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group07/factura_1_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group07/nota_de_credito_de_factura_1.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group07/nota_de_debito_de_factura_1.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_1_con_4_items.json +343 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_2_con_7_items.json +493 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_3_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_4_con_3_items.json +293 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/boleta_5_con_2_items.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_credito_de_boleta_2.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_credito_de_boleta_3.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_credito_de_boleta_4.json +269 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_debito_de_boleta_2.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_debito_de_boleta_3.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group08/nota_de_debito_de_boleta_4.json +269 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_1_con_2_items.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_2_con_4_items.json +343 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_3_con_7_items.json +493 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_4_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/boleta_5_con_1_items.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_credito_de_boleta_1.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_credito_de_boleta_4.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_credito_de_boleta_5.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_debito_de_boleta_1.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_debito_de_boleta_4.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/exonerado/nota_de_debito_de_boleta_5.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_1_con_2_items.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_2_con_4_items.json +343 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_3_con_7_items.json +493 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_4_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/boleta_5_con_1_items.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_credito_de_boleta_1.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_credito_de_boleta_4.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_credito_de_boleta_5.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_debito_de_boleta_1.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_debito_de_boleta_4.json +369 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group09/inafecto/nota_de_debito_de_boleta_5.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_1_con_7_items.json +493 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_2_con_2_items.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_3_con_5_items.json +393 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_4_con_4_items.json +343 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/boleta_5_con_9_items.json +593 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_credito_de_boleta_1.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_credito_de_boleta_2.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_credito_de_boleta_4.json +319 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_debito_de_boleta_1.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_debito_de_boleta_2.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group10/nota_de_debito_de_boleta_4.json +319 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_1_con_10_items.json +657 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_2_con_7_items.json +507 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_3_con_6_items.json +457 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_4_con_9_items.json +607 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/boleta_5_con_4_items.json +357 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_credito_de_boleta_1.json +619 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_credito_de_boleta_2.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_credito_de_boleta_4.json +569 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_debito_de_boleta_1.json +619 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_debito_de_boleta_2.json +469 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group11/nota_de_debito_de_boleta_4.json +569 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group12/boleta_1_con_3_items.json +293 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group12/nota_de_credito_de_boleta_1.json +269 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group12/nota_de_debito_de_boleta_1.json +269 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group13/resumen_diario_de_boletas.json +352 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/homologacion/group14/comunicacion_de_baja.json +110 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note/min_data_ruc.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_atributos/atributos_simple.json +203 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_isc/isc_aplicacion_al_monto_fijo.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_isc/isc_sistema_al_valor.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_isc/isc_sistema_de_precios_de_venta_al_publico.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_orden_compra/orden_de_compra.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_product_codes/all_product_codes.json +175 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/credit_note_product_codes/product_codes.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/debit_note/min_data_ruc.json +219 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/debit_note_atributos/atributos_simple.json +203 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/debit_note_product_codes/all_product_codes.json +175 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/debit_note_product_codes/product_codes.json +169 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/despatch_advice/carrier_data.json +186 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/despatch_advice/complex_data.json +266 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/despatch_advice/min_data.json +148 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_cliente_direccion_and_contacto.json +267 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_codigo_local.json +252 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_fecha_emision.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_firmante.json +246 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_proveedor_direccion_and_contacto.json +258 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/custom_unidad_medida.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice/icb.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_anticipos/min_anticipos.json +257 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_atributos/atributos_con_periodo.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_atributos/atributos_simple.json +227 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_cargos/cargo_afecta_base.json +207 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_cargos/cargo_no_afecta_base.json +207 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_descuentos/descuento_global.json +207 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_descuentos/descuento_global_tipo_02.json +207 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_descuentos/descuento_global_tipo_03.json +207 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_detraccion/detraccion.json +207 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_direccion_entrega/direccion_entrega_full.json +263 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_direccion_entrega/direccion_entrega_min.json +263 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_documento_relacionado/documento_relacionado.json +253 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_fecha_vencimiento/con_fecha_vencimiento.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_forma_pago/con_forma_pago.json +265 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_forma_pago/sin_forma_pago.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_guia_embebida/guia_embebida.json +259 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_guias/guia_serie_t.json +253 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_exonerado_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_exonerado_transferencia_gratuita.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_exportacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_bonificaciones.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_ivap.json +195 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_donacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_entrega_a_trabajadores.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_premio.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_gravado_retiro_por_publicidad.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_exonerado_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_exonerado_transferencia_gratuita.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_exportacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_bonificaciones.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_ivap.json +195 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_donacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_entrega_a_trabajadores.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_premio.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_gravado_retiro_por_publicidad.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_bonificacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_convenio_colectivo.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_muestras_medicas.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_premio.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_inafecto_retiro_por_publicidad.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exonerado_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exonerado_transferencia_gratuita.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_exportacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_bonificaciones.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_donacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_entrega_a_trabajadores.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_premio.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_gravado_retiro_por_publicidad.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_bonificacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_convenio_colectivo.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_muestras_medicas.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_premio.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_icb_isc_inafecto_retiro_por_publicidad.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_bonificacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_convenio_colectivo.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_muestras_medicas.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_premio.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pr_inafecto_retiro_por_publicidad.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_exonerado_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_exonerado_transferencia_gratuita.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_exportacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_bonificaciones.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_ivap.json +195 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_donacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_entrega_a_trabajadores.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_premio.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_gravado_retiro_por_publicidad.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_operacion_onerosa.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_bonificacion.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_convenio_colectivo.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_muestras_medicas.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_premio.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_igv_tipo/invoice_pu_inafecto_retiro_por_publicidad.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_aplicacion_al_monto_fijo.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_mixed_tipo_igv.json +443 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_precio_con_impuestos.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_sistema_al_valor.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_isc/isc_sistema_de_precios_de_venta_al_publico.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_issue30/with_precio_unitario.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_issue30/with_precio_unitario_con_impuestos.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_issue30/with_precio_unitario_con_impuestos_icb.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_issue30/with_precio_unitario_icb.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_moneda/custom_moneda.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_orden_compra/orden_de_compra.json +243 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_percepcion/percepcion.json +207 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_product_codes/all_product_codes.json +199 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_product_codes/only_seller_code.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_product_codes/product_codes.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/invoice_special_characters/special_characters.json +193 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/perception/perception_simple.json +98 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/retention/retention_simple.json +98 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/reversion/reversion.json +74 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/reversion/reversion_retention.json +62 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/summary_documents/summary_documents.json +178 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/summary_documents/summary_documents_anular_boleta_exonerada.json +112 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/summary_documents/summary_documents_percepcion.json +124 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/voided_documents/voided_document.json +74 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/voided_documents/voided_document_auto_generated_fecha_emision.json +74 -0
- xhandler-6.0.0a1/testdata/conformance/enrich/renderer/voided_documents/voided_document_auto_generated_tipo_comprobante.json +74 -0
- xhandler-6.0.0a1/testdata/conformance/nope/errors/unknown_op.json +8 -0
- xhandler-6.0.0a1/testdata/conformance/parse/errors/html_page.json +24 -0
- xhandler-6.0.0a1/testdata/conformance/parse/errors/rate_limited.json +24 -0
- xhandler-6.0.0a1/testdata/conformance/parse/errors/rest_server_error.json +23 -0
- xhandler-6.0.0a1/testdata/conformance/parse/errors/token_rejected.json +14 -0
- xhandler-6.0.0a1/testdata/conformance/parse/get_status_cdr.json +26 -0
- xhandler-6.0.0a1/testdata/conformance/parse/send_file_cdr.json +30 -0
- xhandler-6.0.0a1/testdata/conformance/parse/send_file_fault.json +30 -0
- xhandler-6.0.0a1/testdata/conformance/parse/send_file_rejected.json +30 -0
- xhandler-6.0.0a1/testdata/conformance/parse/send_file_rest_error.json +29 -0
- xhandler-6.0.0a1/testdata/conformance/parse/send_file_rest_error_code_in_header.json +35 -0
- xhandler-6.0.0a1/testdata/conformance/parse/send_file_rest_ticket.json +23 -0
- xhandler-6.0.0a1/testdata/conformance/parse/send_file_ticket.json +24 -0
- xhandler-6.0.0a1/testdata/conformance/parse/token.json +17 -0
- xhandler-6.0.0a1/testdata/conformance/parse/validate_cdp.json +31 -0
- xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_cdr.json +27 -0
- xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_fault.json +26 -0
- xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_in_progress.json +23 -0
- xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_rest_error.json +26 -0
- xhandler-6.0.0a1/testdata/conformance/parse/verify_ticket_rest_in_progress.json +23 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/150101-F001-11.json +24 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/F001-1.json +24 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/P001-1.json +24 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/R001-1.json +24 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/RA-20200328-1.json +27 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/despatch-advice-T.json +26 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/despatch-advice-V.json +26 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/errors/despatch_without_url.json +15 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/errors/not_a_document.json +15 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_file/invoice_custom_prefixes.json +24 -0
- xhandler-6.0.0a1/testdata/conformance/prepare_send_pack/invoices.json +31 -0
- xhandler-6.0.0a1/testdata/conformance/request/errors/rest_without_token.json +27 -0
- xhandler-6.0.0a1/testdata/conformance/request/get_status.json +39 -0
- xhandler-6.0.0a1/testdata/conformance/request/get_status_cdr.json +39 -0
- xhandler-6.0.0a1/testdata/conformance/request/send_file_rest.json +40 -0
- xhandler-6.0.0a1/testdata/conformance/request/send_file_soap.json +41 -0
- xhandler-6.0.0a1/testdata/conformance/request/token.json +27 -0
- xhandler-6.0.0a1/testdata/conformance/request/token_custom_url.json +29 -0
- xhandler-6.0.0a1/testdata/conformance/request/validate_cdp.json +44 -0
- xhandler-6.0.0a1/testdata/conformance/request/validate_file.json +37 -0
- xhandler-6.0.0a1/testdata/conformance/request/verify_ticket_rest.json +33 -0
- xhandler-6.0.0a1/testdata/conformance/request/verify_ticket_soap.json +37 -0
- xhandler-6.0.0a1/testdata/conformance/sign/errors/certificate_of_another_key.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/sign/errors/extension_content_in_use.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/sign/errors/garbage_pem.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/sign/errors/not_utf8_nor_declared_latin1.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/sign/errors/truncated_pkcs12.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/sign/errors/wrong_password.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/sign/errors/xml_not_base64.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/sign/pem/complex_data.json +14 -0
- xhandler-6.0.0a1/testdata/conformance/sign/pem/invoice_no_template.json +14 -0
- xhandler-6.0.0a1/testdata/conformance/sign/pem/min_data_ruc.json +14 -0
- xhandler-6.0.0a1/testdata/conformance/sign/pem/special_characters.json +14 -0
- xhandler-6.0.0a1/testdata/conformance/sign/pem/special_characters_iso_8859_1.json +14 -0
- xhandler-6.0.0a1/testdata/conformance/sign/pkcs12/legacy_3des.json +14 -0
- xhandler-6.0.0a1/testdata/conformance/sign/pkcs12/llama.json +14 -0
- xhandler-6.0.0a1/testdata/conformance/verify_ticket_target/despatch_advice.json +16 -0
- xhandler-6.0.0a1/testdata/conformance/verify_ticket_target/errors/invoice.json +15 -0
- xhandler-6.0.0a1/testdata/conformance/verify_ticket_target/voided_documents.json +16 -0
- xhandler-6.0.0a1/tests/conformance.py +35 -0
- xhandler-6.0.0a1/tests/test_core.py +37 -0
- xhandler-6.0.0a1/tests/test_e2e.py +47 -0
- xhandler-6.0.0a1/tests/test_xbuilder.py +78 -0
- xhandler-6.0.0a1/tests/test_xsender.py +222 -0
- xhandler-6.0.0a1/tests/test_xsigner.py +53 -0
- 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,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
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
15
|
+
[](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
|
+
[](https://www.apache.org/licenses/LICENSE-2.0)
|
|
4
|
+
[](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
|