Manual de Timbrado CFDI V3.3 | Expide tu Factura - Especificación para que cualquier cliente pueda realizar dentro de su sistema la integración y consumo de nuestro servicio de Timbrado.

XPD Logotipo dorado
Manual de Timbrado CFDI V.3.3
Manuales XPD

Objetivo

Proporcionar la especificación para que cualquier cliente pueda realizar dentro de su sistema la integración y consumo de nuestro servicio nuevo servicio de Timbrado.

Alcance

En el presente documento se especifica como consumir el servicio de timbrado de manera directa, puesto que está desplegada bajo estándares que garantizan su integración con la mayoría de los lenguajes de programación o tecnologías.

Definiciones
  • CFDI (Comprobante Fiscal Digital por Internet)
  • CSD (Certificado de Sello Digital): es un documento electrónico mediante el cual el SAT garantiza la vinculación de información entre un contribuyente (persona física o moral) y el SAT, y sirve para firmar sus facturas electrónicas con cualquier Proveedor de Certificación Autorizado (PAC).
  • SAT (Servicio de Administración Tributaria): es un órgano desconcentrado de la Secretaría de Hacienda y Crédito Público, que tiene la responsabilidad de aplicar la legislación fiscal y aduanera, con el fin de que las personas físicas y morales contribuyan proporcional y equitativamente al gasto público
  • XML: Lenguaje Etiquetado Extensible, un XML en la Factura Electrónica tiene que cumplir con el formato del anexo 20 de la RMF.
  • WSDL: Las siglas de Web Services Description Language, es un formato del Extensible Markup Language que se utiliza para describir servicios web. La versión 1.0 fue la primera recomendación por parte del W3C y la versión 1.1 no alcanzó nunca tal estatus. La versión 2.0 se convirtió en la recomendación actual por parte de dicha entidad.
Contenido

Nota: Las pruebas para el timbrado de los XML que se visualizarán a continuación se realización en la aplicación SOAP UI versión 5.2.1.

Especificaciones del Web Service de Timbrado

La principal mejora sobre nuestro servicio de timbrado es los tiempos de respuesta, es decir, las adecuaciones que se realizaron fueron necesarias para brindar mejorar la velocidad con la que regularmente damos respuesta a cada una de las solicitudes de timbrado.

Nota: Para el timbrado en ambiente de Pre-Producción o Pruebas, de deberá sellar el XML con algún CSD de pruebas del SAT que corresponda al RFC Emisor (El CSD de pruebas puede proporcionarse al cliente si así lo solicita).

La especificación de nuestro nuevo servicio web (WSDL) en sus diferentes ambientes es el siguiente (es posible timbrar cualquier tipo de complemento):

URL de timbrado para producción (donde el cliente genera su XML sellado):

https://timbradodp.expidetufactura.com.mx:8453/timbrado/TimbradoWS?wsdl

URL de timbrado para preproducción (donde el cliente genera su XML sellado):

https://pruebastimbrado.expidetufactura.com.mx:8451/preproduccion/TimbradoWS?wsdl

Especificaciones del Web Service de Timbrado por Layout TXT

URL de Timbrado TXT producción CFDI v. 3.3, Nómina 1.2, Pagos, Detallista

https://timbrado33.expidetufactura.com.mx:8447/TimbradoBridgeProduccion/TimbradoService?wsdl

URL de Timbrado TXT pre-producción CFDI v. 3.3, Nómina 1.2, Pagos, Detallista

https://pruebasxpd.expidetufactura.com.mx:15447/TimbradoBridgePruebas/TimbradoService?wsdl

En Timbrado TXT se habilitó la plantilla “201” que corresponderá a la definida para el Complemento de Nómina 1.2. Técnicamente, se debe generar un cliente de nuestro servicio web, en el cual se enviarán los siguientes datos:

  • Usuario. - El usuario correspondiente a su cuenta de timbrado, para el caso del ambiente de pre-producción se utilizará el usuario “testUser”.
  • Contraseña. - La contraseña asignada a la cuenta de timbrado, para el caso del ambiente de pre-producción se utilizará la contraseña “1234”.
  • CFDI. - Deberá contener el CFDI a timbrar codificado en base64

La respuesta del servicio web de timbrado contendrá los siguientes datos:

  • Código. - El valor numérico del código de respuesta generado por la petición enviada.
  • Mensaje. - El mensaje asociado al código de respuesta obtenido por la petición enviada.
  • Timbre. - El contenido del archivo XML enviado, ya con el timbre fiscal asignado, (para los casos que no sean satisfactorios este campo contendrá la lista de errores que contiene el CFDI enviado mostrando tanto códigos de error de CFDI v3.3 como de complementos).
  • Uuid. - El Folio fiscal asignado al comprobante enviado a timbrar
Códigos de respuesta del timbrado de CFDI v. 3.3

A continuación, se describen los códigos de respuesta y mensajes que el servicio de timbrado devuelve:

Nota: La siguiente tabla muestra validaciones previas a la matriz de validación propia del CFDI v3.3 o Complementos, las cuales se deben cumplir antes de pasar por el Core de Timbrado.

Tabla 1 - Código de Respuesta de timbrado de CFDI
Código Mensaje
200 Proceso Satisfactorio
301 XML mal formado
302 Sello mal formado o inválido
303 Sello no corresponde a emisor
304 Certificado revocado o caduco
305 La fecha de emisión no está dentro de la vigencia del CSD del emisor
306 El certificado no es de tipo CSD
307 El CFDI contiene un timbre previo
308 Certificado no excedido por el SAT
401 Fecha y hora de generación fuera de rango
402 RFC del emisor no se encuentra en el régimen de contribuyentes
402 RFC del emisor no se encuentra en el régimen de contribuyentes
403 La fecha de emisión no es posterior al 01 de Enero 2012
500 Intente de nuevo más tarde
501 Usuario y/o contraseña inválidos
502 Usuario no autorizado
503 No hay timbres disponibles
504 Timbrado Previamente

En especial el código 504 – Ya ha sido timbrado previamente se presenta cuando un CFDI ha sido enviado con anterioridad, por lo que el archivo no será procesado ni timbrado, pero de igual forma se regresará un timbre que es correspondiente al archivo timbrado por primera vez como se muestra en la imagen 1.

codigo de respuesta de timbrado de CFDI
Imagen 1. Prueba de código de error 504 - Timbrado Previamente.

En la imagen 2 se visualiza el código 200 – Proceso Satisfactorio, el cual indica que el XML del CFDI se timbró de manera correcta y al mismo tiempo manda el UUID de dicho XML.

Prueba de código de error 401 - Fecha y hora de generación fuera de rango
Imagen 2. Prueba de código de error 401 - Fecha y hora de generación fuera de rango.

Códigos de respuesta para el timbrado de CFDI v. 3.3 con Complemento de Nómina 1.2

A partir de la versión de Nómina 1.2 en la respuesta (Response) se devuelve un “Código” y “Mensaje”, ambos son de tipo String, anteriormente “Código” era tipo Integer pero debido a que para esta versión de Nómina 1.2 los códigos incluyen como prefijo las siglas “NOM” es necesario cambiarlo a String, ante ello debe tomar sus precauciones para parsear/”cachar” el código con el tipo de variable correcto en el response a su petición.

Para el ambiente de Pre-Producción o Pruebas, la consulta a la LRFC (Lista de RFC’s) es omitida con la finalidad de que el usuario pueda realizar las pruebas con cualquier RFC Receptor o de Empleado, sin embargo, para el ambiente productivo si se lleva a cabo la validación contra la lista oficial del SAT.

Código Mensaje Validaciones a nivel Comprobante
NOM101 El atributo fecha no cumple con el patrón requerido.
NOM102 El atributo metodoDePago debe tener el valor "NA".
NOM103 El atributo noCertificado no cumple con el patrón requerido.
NOM104 El atributo Moneda debe tener el valor MXN.
NOM105 El atributo TipoCambio no tiene el valor = "1".
NOM106 El valor del atributo subTotal no coincide con la suma de Nomina12:TotalPercepciones más Nomina12:TotalOtrosPagos.
NOM107 El valor de descuento no es igual a Nomina12:TotalDeducciones.
NOM108 El atributo total no cumple con el patrón requerido.
NOM109 El valor del atributo total no coincide con la suma Nomina12:TotalPercepciones más Nomina12:TotalOtrosPagos menos Nomina12:TotalDeducciones.
NOM110 El atributo tipoDeComprobante no tiene el valor = “egreso”.
NOM111 El valor del atributo LugarExpedicion no cumple con un valor del catálogo c_CodigoPostal.
NOM112 El atributo XXXXXX no debe existir.
NOM114 El atributo Nomina12:Emisor:Curp. Debe aplicar para persona física.
NOM115 El nodo Subcontratacion se debe registrar.
NOM116 El elemento XXXXXX no debe existir.
NOM117 Solo debe existir un solo nodo RegimenFiscal.
NOM118 El valor del atributo Regimen no cumple con un valor del catálogo c_RegimenFiscal.
NOM119 El atributo Regimen no cumple con un valor de acuerdo al tipo de persona moral.
NOM120 El atributo Regimen no cumple con un valor de acuerdo al tipo de persona física.
NOM121 El atributo cfdi:Comprobante.Receptor.rfc debe ser persona física (13 caracteres).
NOM122 El atributo cfdi:Comprobante.Receptor.rfc no es válido según la lista de RFC inscritos no cancelados en el SAT (l_RFC).
NOM123 El nodo XXXXXX no debe existir.
NOM124 El nodo concepto solo debe existir uno, sin elementos hijo.
NOM125 El atributo XXXXXX no debe existir.
NOM126 El atributo cfdi:Comprobante.Conceptos.Concepto.cantidad no tiene el valor = “1”.
NOM127 El atributo cfdi:Comprobante.Conceptos.Concepto.unidad no tiene el valor = “ACT”.
NOM128 El atributo cfdi:Comprobante.Conceptos.Concepto.descripcion, no tiene el valor “Pago de nómina”.
NOM129 El valor del atributo.cfdi:Comprobante.Conceptos.Concepto.val orUnitario no coincide con la suma TotalPercepciones más TotalOtrosPagos.
NOM130 El valor del atributo.cfdi:Comprobante.Conceptos.Concepto.Importe no coincide con la suma TotalPercepciones más TotalOtrosPagos.
NOM131 El nodo cfdi:Comprobante.Impuestos no cumple la estructura.
Validaciones a nivel Complemento Nómina 1.2
NOM150 El nodo Nomina no se puede utilizar dentro del elemento ComplementoConcepto.
NOM151 El nodo Nomina no tiene TotalPercepciones y/o TotalOtrosPagos.
NOM152 El valor del atributo Nomina.TipoNomina no cumple con un valor del catálogo c_TipoNomina.
NOM153 El valor del atributo tipo de periodicidad no se encuentra entre 01 al 09.
NOM154 El valor del atributo tipo de periodicidad no es 99.
NOM155 El valor del atributo FechaInicialPago no es menor o igual al valor del atributo FechaFinalPago.
NOM156 El atributo Nomina.TotalPercepciones, no debe existir.
NOM157 El valor del atributo Nomina.TotalPercepciones no coincide con la suma TotalSueldos más TotalSeparacionIndemnizacion más TotalJubilacionPensionRetiro del nodo Percepciones.
NOM158 El atributo Nomina.TotalDeducciones, no debe existir.
NOM159 El valor del atributo Nomina.TotalDeducciones no coincide con la suma de los atributos TotalOtrasDeducciones más TotalImpuestosRetenidos del elemento Deducciones.
NOM160 El valor del atributo Nomina.TotalOtrosPagos no está registrado o no coincide con la suma de los atributos Importe de los nodos nomina12:OtrosPagos:OtroPago.
NOM161 El atributo Nomina.Emisor.RfcPatronOrigen no está inscrito en el SAT (l_RFC).
NOM162 El atributo Nomina.Emisor.RegistroPatronal se debe registrar.
NOM163 El atributo Nomina.Emisor.RegistroPatronal no se debe registrar.
NOM164 El(Los) atributo(s) xxxxxx debe(n) existir.
NOM165 El nodo Nomina.Emisor.EntidadSNCF debe existir.
NOM166 El nodo Nomina.Emisor.EntidadSNCF no debe existir.
NOM167 El valor del atributo Nomina.Emisor.EntidadSNCF.OrigenRecurso no cumple con un valor del catálogo c_OrigenRecurso.
NOM168 El atributo Nomina.Emisor.EntidadSNCF.MontoRecursoPropio debe existir.
NOM169 El atributo Nomina.Emisor.EntidadSNCF.MontoRecursoPropio no debe existir.
NOM170 El valor del atributo Nomina.Emisor.EntidadSNCF.MontoRecursoPropio no es menor a la suma de los valores de los atributos TotalPercepciones y TotalOtrosPagos.
NOM171 El valor del atributo Nomina.Receptor.TipoContrato no cumple con un valor del catálogo c_TipoContrato.
NOM172 El valor del atributo Nomina.Receptor.TipoJornada no cumple con un valor del catálogo c_TipoJornada.
NOM173 El valor del atributo Nomina.Receptor.FechaInicioRelLaboral no es menor o igual al atributo a FechaFinalPago.
NOM174 El valor numérico del atributo Nomina.Receptor.Antigüedad no es menor o igual al cociente de (la suma del número de días transcurridos entre la FechaInicioRelLaboral y la FechaFinalPago más uno) dividido entre siete.
NOM175 El valor del atributo Nomina.Receptor.Antigüedad. no cumple con el número de años, meses y días transcurridos entre la FechaInicioRelLaboral y la FechaFinalPago.
NOM176 El valor del atributo Nomina.Receptor.TipoRegimen no cumple con un valor del catálogo c_TipoRegimen.
NOM177 El atributo Nomina.Receptor.TipoRegimen no es 02, 03 ó 04.
NOM178 El atributo Nomina.Receptor.TipoRegimen no está entre 05 a 99.
NOM179 El valor del atributo Nomina.Receptor.RiesgoPuesto no cumple con un valor del catálogo c_RiesgoPuesto.
NOM180 El valor del atributo Nomina.Receptor.PeriodicidadPago no cumple con un valor del catálogo c_PeriodicidadPago.
NOM181 El valor del atributo Nomina.Receptor.Banco no cumple con un valor del catálogo c_Banco.
NOM182 El atributo CuentaBancaria no cumple con la longitud de 10, 11, 16 ó 18 posiciones.
NOM183 El atributo Banco no debe existir.
NOM184 El dígito de control del atributo CLABE no es correcto.
NOM185 El atributo Banco debe existir.
NOM186 El valor del atributo ClaveEntFed no cumple con un valor del catálogo c_Estado.
NOM187 El valor del atributo Nomina.Receptor.SubContratacion.RfcLabora no está en la lista de RFC (l_RFC).
NOM188 La suma de los valores registrados en el atributo Nomina.Receptor.SubContratacion.PorcentajeTiempo no es igual a 100.
NOM189 La suma de los valores de los atributos TotalSueldos más TotalSeparacionIndemnizacion más TotalJubilacionPensionRetiro no es igual a la suma de los valores de los atributos TotalGravado más TotalExento.
NOM190 El valor del atributo Nomina.Percepciones.TotalSueldos , no es igual a la suma de los atributos ImporteGravado e ImporteExento donde la clave expresada en el atributo TipoPercepcion es distinta de 022 Prima por Antigüedad, 023 Pagos por separación, 025 Indemnizaciones, 039 Jubilaciones, pensiones o haberes de retiro en una exhibición y 044 Jubilaciones, pensiones o haberes de retiro en parcialidades.
NOM191 El valor del atributo Nomina.Percepciones.TotalSeparacionIndemnizaci on, no es igual a la suma de los atributos ImporteGravado e ImporteExento donde la clave en el atributo TipoPercepcion es igual a 022 Prima por Antigüedad, 023 Pagos por separación ó 025 Indemnizaciones.
NOM192 El valor del atributo Nomina.Percepciones.TotalJubilacionPensionRetir o, no es igual a la suma de los atributos ImporteGravado e importeExento donde la clave expresada en el atributo TipoPercepcion es igual a 039(Jubilaciones, pensiones o haberes de retiro en una exhibición) ó 044 (Jubilaciones, pensiones o haberes de retiro en parcialidades).
NOM193 El valor del atributo Nomina.Percepciones.TotalGravado, no es igual a la suma de los atributos ImporteGravado de los nodos Percepcion.
NOM194 El valor del atributo Nomina.Percepciones.TotalExento, no es igual a la suma de los atributos ImporteExento de los nodos Percepcion.
NOM195 La suma de los importes de los atributos ImporteGravado e ImporteExento no es mayor que cero.
NOM196 El valor del atributo Nomina.Percepciones.Percepcion.TipoPercepcion no cumple con un valor del catálogo c_TipoPercepcion.
NOM197 TotalSueldos, debe existir. Ya que la clave expresada en TipoPercepcion es distinta de 022, 023, 025, 039 y 044.
NOM198 TotalSeparacionIndemnizacion y el elemento SeparacionIndemnizacion, debe existir. Ya que la clave expresada en TipoPercepcion es 022 ó 023 ó 025.
NOM199 TotalJubilacionPensionRetiro y el elemento JubilacionPensionRetiro debe existir, ya que la clave expresada en el atributo TipoPercepcion es 039 ó 044.
NOM200 TotalUnaExhibicion debe existir y no deben existir TotalParcialidad, MontoDiario. Ya que la clave expresada en el atributo TipoPercepcion es 039.
NOM201 TotalUnaExhibicion no debe existir y deben existir TotalParcialidad, MontoDiario. Ya que la clave expresada en el atributo TipoPercepcion es 044.
NOM202 El elemento AccionesOTitulos debe existir. Ya que la clave expresada en el atributo TipoPercepcion es 045.
NOM203 El elemento AccionesOTitulos no debe existir. Ya que la clave expresada en el atributo TipoPercepcion no es 045.
NOM204 El elemento HorasExtra, debe existir. Ya que la clave expresada en el atributo TipoPercepcion es 019.
NOM205 El elemento HorasExtra, no debe existir. Ya que la clave expresada en el atributo TipoPercepcion no es 019.
NOM206 El nodo Incapacidades debe existir, Ya que la clave expresada en el atributo TipoPercepcion es 014.
NOM207 La suma de los campos ImporteMonetario no es igual a la suma de los valores ImporteGravado e ImporteExento de la percepción, Ya que la clave expresada en el atributo TipoPercepcion es 014.
NOM208 El valor del atributo Nomina.Percepciones.Percepcon.HorasExtra.Tipo Horas no cumple con un valor del catálogo c_TipoHoras.
NOM209 Los atributos MontoDiario y TotalParcialidad no deben existir, ya que existe valor en TotalUnaExhibicion.
NOM210 El atributo MontoDiario debe existir y el atributo TotalUnaExhibicion no debe existir, ya que Nomina.Percepciones.JubilacionPensionRetiro.Tot alParcialidad tiene valor.
NOM211 El valor en el atributo Nomina.Deducciones.TotalImpuestosRetenidos no es igual a la suma de los atributos Importe de las deducciones que tienen expresada la clave 002 en el atributo TipoDeduccion.
NOM212 Nomina.Deducciones.TotalImpuestosReteni dos no debe existir, ya que no existen deducciones con clave 002 en el atributo TipoDeduccion.
NOM213 El valor del atributo Nomina.Deducciones.Deduccion.TipoDeduccion no cumple con un valor del catálogo c_TipoDeduccion.
NOM214 Debe existir el elemento Incapacidades, ya que la clave expresada en Nomina.Deducciones.Deduccion.TipoDeduccion es 006.
NOM215 El atributo Deduccion:Importe no es igual a la suma de los nodos Incapacidad:ImporteMonetario. Ya que la clave expresada en Nomina.Deducciones.Deduccion.TipoDeduccion es 006.
NOM216 Nomina.Deducciones.Deduccion.Importe no es mayor que cero.
NOM217 El valor del atributo Nomina.OtrosPagos.OtroPago.TipoOtroPago no cumple con un valor del catálogo c_TipoOtroPago.
NOM218 El nodo CompensacionSaldosAFavor debe existir, ya que el valor de Nomina.OtrosPagos.OtroPago.TipoOtroPago es 004.
NOM219 El nodo SubsidioAlEmpleo. debe existir, ya que el valor de Nomina.OtrosPagos.OtroPago.TipoOtroPago es 002.
NOM220 Nomina.OtrosPagos.OtroPago.Importe no es mayor que cero.
NOM221 Nomina.OtrosPagos.OtroPago.SubsidioAlE mpleo.SubsidioCausado no es mayor o igual que el valor del atributo "Importe” del nodo OtroPago.
NOM222 Nomina.OtrosPagos.OtroPago.Compensaci onSaldosAFavor.SaldoAFavor no es mayor o igual que el valor del atributo CompensacionSaldosAFavor:RemanenteSalFav.
NOM223 Nomina.OtrosPagos.OtroPago.Compensaci onSaldosAFavor.Año no es menor que el año en curso.
NOM224 El valor del atributo Incapacidades.Incapacidad.TipoIncapacidad no cumple con un valor del catálogo c_TIpoIncapacidad.
NOM225 Error no clasificado.
Integración JAVA

Para poder realizar el llamado de nuestro servicio web, es necesario contar con la librería axis2, a continuación, se agrega un ejemplo de la implementación en Java:

Ejemplo en Java para consumir servicio web de timbrado
Ilustración 1. Ejemplo en Java para consumir servicio web de timbrado

En el ejemplo de timbrado con Java (Ilustración 1), se muestra cómo se genera una instancia de la clase TimbradoWSServiceSoapBindingStub, posteriormente, se llama al método timbrar y la respuesta de este método se asigna a una instancia de la clase mx.xpd.cfdi.timbrado.service.RespuestaTimbrado.

Ejemplo en Java para consumir servicio web de timbrado

Es altamente recomendable tener los valores parametrizados, a fin de cada uno de los valores que se utilicen dentro de su implementación, no se encuentren en “código duro”. El valor para endPoint deberá ser la URL de nuestro servicio web de timbrado, ya sea el de pre-producción o producción, el usuario y el password son los valores que se asignan cuando adquiere timbres según el caso y el parámetro XML contiene el CFDI codificado en Base64.

Como buena práctica, es recomendable “capturar” la excepción, a fin de que en caso de que algún error se presente, ya sea en la configuración del cliente o de conexión, este se maneje de forma adecuada.

.NET

Para el caso de usar la tecnología .NET, se recomienda generar una referencia web, por lo que a continuación se agregar algunas URL de la documentación oficial de Microsoft:

https://msdn.microsoft.com/es-es/library/d9w023sx(v=vs.100).aspx
Retenciones

El timbrado de retenciones CFDI está completamente separado en otro servicio, por lo que a continuación se especifican las URL que se debe utilizar:

Producción:
https://xpdretenciones.expidetufactura.com.mx:8448/retProduccion/Retencio nesWS?wsdl
Pre-producción:
https://xpdretenciones.expidetufactura.com.mx:8448/retPruebas/Retenciones WS?wsdl

El proceso para realizar la integración es exactamente la misma que en el timbrado, es decir, los parámetros serán los mismos, la única diferencia es el XML que se envía, pues en este servicio se tendrá que enviar el XML de retención codificado en Base64.

  • usuario. - El usuario correspondiente a su cuenta de timbrado, para el caso del ambiente de pre-producción se utilizará el usuario “pruebas”.
  • contraseña. - La contraseña asignada a la cuenta de timbrado, para el caso del ambiente de pre-producción se utilizará la contraseña “12345678a”.
  • CFDI. - Deberá contener el XML de Retenciones a timbrar codificado en base64.

Buzón de reclamaciones, sugerencias, aclaraciones y agradecimientos.

Reclamación o queja, disconformidad en los servicios y la atención prestados por Expide Tu Factura en horarios establecidos.

*Por favor ingresa tu nombre.
*Por favor ingresa tu número de teléfono.
*Por favor ingresa un RFC válido.
*Por favor ingresa un C.P. válido.
*Por favor ingresa una dirección de email válida.
*Por favor ingresa tu estado ó ciudad.
*Este campo es obligatorio.
Loading
Your message has been sent. Thank you!

Horario de atención
Lunes a viernes de
9:00 a.m. a 7:00 p.m.

22.22.48.74.85
22.22.26.77.24

Centro Mayor. Torre Alfa. Piso 11 Calzada Zavaleta 1108. Santa Cruz Buenavista Puebla. Pue