thegreenter / greenter

Facturación Electrónica - SUNAT - PE :four_leaf_clover:
https://greenter.dev
MIT License
273 stars 138 forks source link

validacion de XML de CPE #226

Closed velnae closed 1 year ago

velnae commented 1 year ago

Hola @giansalex, en primer lugar agradecerte por todo el gran aporte que nos das en facturacion.

Mi consulta es respecto a los paquetes de validacion xml que encontre en Greenter

Y guiandome segun el README de los paquetes, los test y la documentacion que hay en https://fe-primer.greenter.dev/docs/validation/ he podido configurar el paquete para su funcionamiento de:

Sim embargo para los otros 2 paquetes he podido levantar correctamentes y cargar el path de los xsl modificados como indican en su manual en fe-primer.greentee.dev/docs/validation segun veo modificaste <xsl:include href="../../../error/validate_utils.xsl" dp:ignore-multiple="yes"/> pero al ejectuar ya sea desde cpe-validator o beatose no me reconoce los errores de XML.

Pero probando con un XSL personalizado que encontre en un test de cpe-validator https://github.com/thegreenter/cpe-validator/blob/master/tests/Resources/2.X/ValidaExprRegFactura-2.0.1.xsl si funciona la validacion .

Tambien he probado con el binario "xsltproc" en Linux si me salen lo errores de validación del XML

xsltproc --noout --stringparam nombreArchivoEnviado 20123456789-01-F001-1.xml sunat_archivos/sfs/VALI/commons/xsl/validation/2.X/ValidaExprRegFactura-2.0.1.xsl 20123456789-01-F001-1.xml

Pero nuevamente en los paquetes cpe-validator o beatose no me muestran los errores, a pesar de cargar los XSL modificados, y revisando el codigo y depurando con XDEBUG se obtiene lo siguiente:

image

Se probo con el primer error que valida el XSL, que el ruc del nombre del archivo coincida con el que esta dentro del XML y no se obtuvo el error, se probo con mas errores y ninguno funciona en los paquetes, todo esto sin funciona con xsltproc si muestra los errores

guillermosg28 commented 1 year ago

Tengo el mismo error, no se muestra los errores

$factory = new CpeValidatorFactory(); $validator = $factory->create(__DIR__ . '/../Resources'); $name = '20480657323-01-FT01-56.xml'; $xml = file_get_contents(__DIR__ . '/../Resources/'.$name); $error = $validator->validateFromXml($name, $xml); return $error;

tengo el xsl bajado de SUNAT

image
velnae commented 1 year ago

Actualizacion, segun investigue, el XSL distribuido por SUNAT trabaja con sintaxis compatible de XPath 2.0 y 3.0 , pero la libreria nativa de php XSL especificamente XSLTprocessor.php que usa Cpe-validator no soporta esa sintaxis 2.0 y 3.0 para transformar (validar) el XML de SUNAT. por lo que recomendaria usar una libreria de terceros para PHP en vez de la nativa.

a menos que me este equivocando y alguien aqui tenga otra solución.

giansalex commented 1 year ago

No se puede usar directamente los archivos XSL que provee SUNAT, se tiene que hacer algunos ajustes, tambien existen funciones xslt que no soporta, se tuvo que reemplazar por funciones personalizadas en PHP. e.g. image

Esto son los archivos XSL usados en BeatOSE beatose-xsl-rules.zip

velnae commented 1 year ago

Bueno, entonces personalmente yo recomendaría en usar librerías Xslt PHP de terceros que en mi caso me ayudó, sin hacer muchos cambios a los XSL de la SUNAT, lo q se puede mejorar en esta libreria cpe-validator es en el constructor del validador de XML , enviarle una interfaz de la herramienta a usar para validar, así usar el xsl de php u otro, según al preferencia del programador, implementando la interfaz, si deseas le hago un pull request para eso @giansalex

giansalex commented 1 year ago

@velnae si, seria bueno tener otra alternativa, en aquel entonces no logre encontrar otra librería.

guillermosg28 commented 1 year ago

@velnae muchas gracias por el PR, lo estaré esperando 🥳