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.
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.
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.
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?wsdlURL de timbrado para preproducción (donde el cliente genera su XML sellado):
https://pruebastimbrado.expidetufactura.com.mx:8451/preproduccion/TimbradoWS?wsdlEspecificaciones 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?wsdlURL de Timbrado TXT pre-producción CFDI v. 3.3, Nómina 1.2, Pagos, Detallista
https://pruebasxpd.expidetufactura.com.mx:15447/TimbradoBridgePruebas/TimbradoService?wsdlEn 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:
La respuesta del servicio web de timbrado contendrá los siguientes datos:
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.
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.
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.
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. |
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:
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.
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.
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).aspxEl timbrado de retenciones CFDI está completamente separado en otro servicio, por lo que a continuación se especifican las URL que se debe utilizar:
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.
Reclamación o queja, disconformidad en los servicios y la atención prestados por Expide Tu Factura en horarios establecidos.