Facturación Electrónica en Perú (II) - Arreglando errores

Continuando con el desarrollo de mi "side project" de facturación electrónica, ya había logrado generar una factura, enviarla a SUNAT y que sea aceptada sin problemas. Pero al agregar más casos, empezaron a saltar los errores.

El tema del descuento global


Para mejorar las prestaciones, ahora hice pruebas aplicando un descuento global. El descuento global se aplica al monto total de la factura. Puse un descuento de 20 soles sobre el total. La respuesta de SUNAT fue: "te la acepto pero te la observo".
4291 - El dato ingresado como cargo/descuento no es valido a nivel global. - Error Cargo/Descuento 00: 4291 (nodo: "cac:AllowanceCharge/cbc:ChargeIndicator" valor: "false")
4322 - El valor de cargo/descuento global difiere de los importes consignados - Error Cargo/Descuento 00: 4322 (nodo: "cac:AllowanceCharge/cbc:Amount" valor: "20")
4307 - La sumatoria consignados en descuentos globales no corresponden al total. - INFO : 4307 (nodo: "cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount" valor: "20")
4312 - El importe total del comprobante no coincide con el valor calculado - INFO : 4312 (nodo: "cac:LegalMonetaryTotal/cbc:PayableAmount" valor: "1250.00")

La observación 4291 a pesar de apuntar al nodo ChargeIndicator, en realidad se refiere al nodo AllowanceChargeReasonCode, cuyos valores están en el catálogo 53 de SUNAT. Y a pesar que en el ejemplo de la guía de factura electrónica en ese nodo colocan el valor "00", en el catálogo 53 nos dicen que el valor "00" aplica para los descuentos a nivel de ítem (al igual que "01").  Y en el catálogo veo que hay muchos códigos para descuentos. Cambié el código a "02" y esa observación desapareció, pero aparecieron otras adicionales a las que quedaban.
4299 - La sumatoria del total valor de venta - operaciones gravadas de línea no corresponden al total - INFO : 4299 (nodo: "cac:TaxSubtotal/cbc:TaxableAmount" valor: "1059.32")
4322 - El valor de cargo/descuento global difiere de los importes consignados - Error Cargo/Descuento 02: 4322 (nodo: "cac:AllowanceCharge/cbc:Amount" valor: "20")
4290 - El cálculo del IGV es Incorrecto - INFO : 4290 (nodo: "cac:TaxSubtotal/cbc:TaxAmount" valor: "190.68")
4307 - La sumatoria consignados en descuentos globales no corresponden al total. - INFO : 4307 (nodo: "cac:LegalMonetaryTotal/cbc:AllowanceTotalAmount" valor: "20")
4312 - El importe total del comprobante no coincide con el valor calculado - INFO : 4312 (nodo: "cac:LegalMonetaryTotal/cbc:PayableAmount" valor: "1250.00")
4309 - La sumatoria de valor de venta no corresponde a los importes consignados - INFO : 4309 (nodo: "cac:LegalMonetaryTotal/cbc:LineExtensionAmount" valor: "1059.32")
4310 - La sumatoria del Total del valor de venta más los impuestos no concuerda con la base imponible - INFO : 4310 (nodo: "cac:LegalMonetaryTotal/cbc:TaxInclusiveAmount" valor: "1250.00")

En sí, se resume en que no he calculado bien el total de impuestos y monto total del documento considerando el descuento que yo mismo apliqué. Mi escaso conocimiento de la contabilidad se refleja en esas observaciones. Pero imagino que leyendo la guía de la factura de SUNAT me aclarará algo.

Sobre la observación 4299: el nodo TaxableAmount se refiere al total del valor de venta (en este caso gravado por el IGV) y la deducción del descuento. Apliqué el descuento al total del valor venta (gravado), y la observación desapareció. Otra victoria para el equipo Rocket. Ahora, la realidad es que cada observación levantada no significa que tengas una menos, en realidad puedes tener cinco más en consecuencia. Demos gracias a SUNAT.

Recuerda: para SUNAT, el monto base es el valor venta o el precio unitario sin IGV.

Hay que recordar que los amigos de SUNAT en su documentación no te ayudan, yo tenía la observación 4307: "La sumatoria consignados en descuentos globales no corresponden al total". Ahora yo veo que el nodo AllowanceTotalAmount tiene el valor que corresponde a mi descuento, pero SUNAT me dice que está mal. Y resulta que al consignar mi descuento con código 02 (nodo AllowanceChargeReasonCode), le estoy diciendo que mi descuento afecta a la base (valor venta) y por lo tanto en AllowanceTotalAmount (donde va la suma de descuentos de línea que NO afectan a la base más los descuentos globales que NO afectan a la base) debería ir CERO. Es más, para contentar a SUNAT ni siquiera debería existir ese nodo en este caso.

Monto en letras


Al menos en las pruebas realizadas, la SUNAT no valida que el monto en letras sea el correcto. Hay que recordar que las validaciones presentes en el servicio de pruebas son por lo menos diferentes a las validaciones que vamos a encontrar en producción.

Respecto al monto en letras, pude enviarlo en inglés, y lo hice y la factura fue aceptada. Puedo imaginar que en producción puede ser que lo valide, pero no creo.

La complejidad hecha para favorecer a otros


Mientras trato de armar el rompecabezas en cada caso para poder armar de forma correcta el XML para enviarlo a SUNAT, me pregunto si alguien en SUNAT pensó alguna vez en facilitar el trabajo a las empresas. En vez de que cada empresa tenga que construir el XML de forma perfecta y pasar por tantas validaciones, ¿porqué no construir el sistema de forma que los parámetros sean más simples? Es decir, en vez de llenar el TotalAmount, el TaxAmount, el descuento global, etc. ¿porqué no se hizo que las empresas envíen una solicitud simple con parámetros entendibles como total, descuento, impuesto, percepción, etc? Luego SUNAT al recibir la solicitud, ellos deberían construir el XML, no cada empresa. Yo me pongo a pensar en que luego esto favorece a  pocos.

 

 

 

 

 

 

 

Comentarios

  1. Es una verguenza la documentación de SUNAT. Conforme van apareciendo los nuevos casos en nuestro facturador, tenemos que ir corrigiendo. Saludos amigo, excelente aporte

    ResponderBorrar

Publicar un comentario