Página 1 de 1
Pais es un atributo requerido, pero si no esta.....
Publicado: Vie Ene 21, 2011 7:38 pm
por Dado
Quiero exponer este caso para su analisis y por si les toca.
Un colega envio a mi mail cuatro archivos porque el ValidaCFD indica que el sello es valido, pero en el validador del SAT no.
TODOS los XML recibidos tienen el problema que no cuentan con el atributo OBLIGATORIO Receptor.Pais, aun cuando al Receptor se le ha definido la calle, numero, colonia, etc, por algun motivo NO TIENE PAIS.
Al meterlo a los validadores el SAT forma la siguiente cadena :
......Oaxaca|Oaxaca|Oax||74838|1|Cocacola...
En principio a mi parecer esta mal, ya que es cierto, el Pais es obligatorio y eso ya es una falla, pero tambien es cierto que si no existe el atributo no deberia llevar su pipe, por otro lado el doble pipe (||) solo esta permitido al principio y al final de la cadena original.
Al meterlo al ValidaCFD se forma la cadena siguiente
......Oaxaca|Oaxaca|Oax|74838|1|Cocacola...
Un solo pipe entre la ciudad y el codigo postal, segun yo asi deberia ser
Para ser honesto, es un caso dificil, por un lado el SAT es el SAT pero tengo mis dudas con la formacion de ese doble pipe.
Lo que si es cierto es que aunque no lo indique el validador del SAT, el XML necesita corregirse con el ATRIBUTO OBLIGATORIO PAIS, recuerda que el XML no solo es el sello, es toda la estructura y en eso si anda muy atrasado el validador oficial.
Re: Pais es un atributo requerido, pero si no esta.....
Publicado: Jue Ene 27, 2011 5:38 pm
por jevangelista
Hola.
Como primer comentario si PAIS es obligatorio y no viene en tus XML, esos XML se consideran inválidos y deben reexpedirse, eso independientemente si el validador del SAT tiene un error.
Lo del doble pipe intermedio es correcto y todo ello proviene de la la tecnología con que se define la cadena original. Seguramente en todos lados has visto código que se ocupa de recolectar los datos del xml y formarlos con delimitador "|". Sin embargo lo estrictamente correcto es hacer el cruce del archivo XSLT (o xst) y el XML, como resultado eso da la cadena original.
Que significa el archivo XSLT? se trata de un archivo de formato XML pero que contiene instrucciones específicas para extraer contenido de un XML en general. Es decir que es un "programa" de consulta de datos. Estos archivo se usan, por ejemplo, para formar archivos HTML a partir de XML, o hacer XML reformateados de un XML más grande o incluso recolectar datos de un xml el estilo de un Query de una Base de Datos.
Siguiendo esta teoría y teniendo una API que sepa usar los archivos XSTL puedes obtener la cadena original y comprobar que si un nodo o atributo esta presente y en el xstl esta la indicación de tomar su valor el valor que tomará es una cadena vacía, y como en el xslt indica además poner los delimitadores pues el resultador es el "||" que has encontrado en un ejemplo.
La observación del doble pipe si se encuentra en el anexo 20 según me acuerdo.
Lamento no darte ahorita algunas ligas sobre los xslt o la pagina del anexo, es que no los traigo en este momento. Pero voy a estar dando vueltas en este foro.
Hasta luego.
Re: Pais es un atributo requerido, pero si no esta.....
Publicado: Jue Ene 27, 2011 6:43 pm
por Dado
Gracias por tus observaciones, aqui esta mi argumento de porque el SAT esta mal :
Extraido del Anexo 20 :
El INICIO de la cadena original se encuentra marcado mediante una secuencia de caracteres || (doble pipe)
Cada dato individual se encontrara separado de su dato subsiguiente, EN CASO DE EXISTIR, mediante un caracter | (pipe sencillo)
El FINAL de la cadena original sera expresado mediante una cadena de caracteres || (doble pipe)
Solo AL PRINCIPIO y AL FINAL se usa ||, y solo debe aparecer el pipe SI EL ATRIBUTO EXISTE.
Acerca del XSLT, mmmh no quiero ni acordarme de los errores FATALES que ha cometido el SAT.
Primero, el problema circular del Timbre :
http://www.validacfd.com/phpbb3/viewtop ... =109&p=541
Por otro lado el primer xslt publicado de la cadenaoriginalv3.xslt no coincide con el anexo 20 :
http://www.validacfd.com/phpbb3/viewtopic.php?f=9&t=148
Despues republicaron el xslt (yo tenia razon, estaba mal el primer cadenaoriginalv3.xslt) :
http://www.validacfd.com/phpbb3/viewtop ... 2332#p2332
Asi que no confies ciegamente en los xslt oficiales estan LLENOS DE ERRORES.
Re: Pais es un atributo requerido, pero si no esta.....
Publicado: Vie Ene 28, 2011 2:11 pm
por jevangelista
Gracias por las observaciones al cambios del xslt, no las conocía.
Me queda una espinita sobre la validez de los xml a los que les falta el PAIS.
Se tratará que lo "obligatorio" según el significado de los xslt es que el nodo exista? (Aunque el contenido del tributo este vacío).
Si es ese caso es posible que el validador del SAT esté técnicamente correcto.
¿Cómo se podría comprobar? Quizá metiendo un xml correcto, y luego comprobar si marca error borrando el contenido del campo PAIS y luego probando si hay error quitando todo el atributo?
Espero poder hacer esa prueba, y la siguiente semana les aviso.
Buen Fin!
Re: Pais es un atributo requerido, pero si no esta.....
Publicado: Vie Ene 28, 2011 2:33 pm
por Dado
jevangelista escribió:Gracias por las observaciones al cambios del xslt, no las conocía.
Me queda una espinita sobre la validez de los xml a los que les falta el PAIS.
Se tratará que lo "obligatorio" según el significado de los xslt es que el nodo exista? (Aunque el contenido del tributo este vacío).
Si es ese caso es posible que el validador del SAT esté técnicamente correcto.
¿Cómo se podría comprobar? Quizá metiendo un xml correcto, y luego comprobar si marca error borrando el contenido del campo PAIS y luego probando si hay error quitando todo el atributo?
Espero poder hacer esa prueba, y la siguiente semana les aviso.
Buen Fin!
Si, seria una prueba muy interesante. Nos comentas si haces el experimento y que resulta. Saludos.
Re: Pais es un atributo requerido, pero si no esta.....
Publicado: Vie Ene 28, 2011 7:52 pm
por condor0086
Soy de la opinión de que si es "requerido" es que requiere un valor válido, y valor nulo no sería un valor válido para País.
Por otro lado, si no es de México no importa de qué país sea, pero si es de México debería indicarlo forzosamente... eso pienso yo.
Saludos
Re: Pais es un atributo requerido, pero si no esta.....
Publicado: Lun Ene 31, 2011 2:44 pm
por jevangelista
Bueno, ya hice una prueba:
Me basé en una página donde se puede validar un xml respecto a su xsd. Como saben, el xml es cada archivo de factura electrónica y el xsd es un archivo que define todos los nodos y atributos que debe tener el xml para considerarlo bien formado. Respecto a esta liga, hay otras en internet y programas que hacen estas validaciones, pero esta la tengo anotada hace años:
http://tools.decisionsoft.com/schemaValidate/
Primero tomé un xml real de factura electrónica y conseguí el archivo xsd del SAT. En la pagina primero se carga el "XML Schema" que corresponde al xsd y luego se carga el "XML instance" que es el xml de la factura o CFD.
La factura inicial y sin alterar fue marcada como correcta:
XML Schema Validator
Version: 1.0.1.r120833
Well Formed: VALID
Schema Validation: VALID
Segundo, le quito al XML de factura el contenido del atributo PAIS (en emisor y en el receptor) y lo dejo con la comillas pegadas. Es decir que quito el contenido pero no quito el nodo.
El resultado marcó error:
XML Schema Validator
Version: 1.0.1.r120833
Well Formed: VALID
Schema Validation: INVALID
The following errors were found:
TYPE LOC MESSAGE
Validation 4, 180 cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type '#AnonType_paist_UbicacionFiscal'.
Validation 4, 180 cvc-attribute.3: The value '' of attribute 'pais' on element 'DomicilioFiscal' is not valid with respect to its type, 'null'.
Validation 8, 158 cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type '#AnonType_paist_Ubicacion'.
Validation 8, 158 cvc-attribute.3: The value '' of attribute 'pais' on element 'Domicilio' is not valid with respect to its type, 'null'.
Como se puede observar, el atributo PAIS es obligatorio y se detecta como error de validación de esquema.
Bueno, yo con esto comprobaría que las facturas donde les falte un atributo obligatorio están mal, Lo que han recomendado los contadores y fiscalistas a las empresas que les ha ocurrido algo así es que reexpidan todas las facturas incorrectas y las vuelvan a entregar a los clientes, además que los folios con error reportados deben cancelarse ya que no fueron válidos.
Bueno, y ahorita que me acuerdo hace años hice pruebas para ver si el validador del SAT y tambíen detectaba esas cosas, y me acuerdo que si lo hacía. De eso hace ya unos tres años por lo menos, estoy intentando entrar al validador del SAT pero me pidió password!!
Espero les sirva la información.
Saludos!
Re: Pais es un atributo requerido, pero si no esta.....
Publicado: Lun Ene 31, 2011 6:49 pm
por Dado
Es correcto ya hice mis pruebas y todo coincide, el problema se da porque es un dato obligatorio asi que cuando no existe aparecen las dificultades.
Lo bueno es que el ValidaCFD y el del SAT coinciden en algo, un documento sin el atributo PAIS es INVALIDO ahi si no hay diferencias.
Por cierto, muy agradecido por esa herramienta que publicaste, he trabajado con varias addendas y creo que me va a ser muy util para validar uno que otro esquema
