Documentación para implementación de CFDI 4.0
Antes de empezar tenga muy claras las siguiente reglas sobre el manejo de folios y validación de la interfase
Serie y Folio
El CFDI cuenta con los valores : Serie y Folio que corresponden al número de factura que su empresa maneja.
Estos valores no son el folio fiscal oficial que el SAT usa para determinar el número de factura oficial.
El número de factura oficial es el UUID.
Por lo tanto si emite, 3 facturas con la serie y folio : A 003 y cada una tiene un UUID diferente, para el SAT son 3 facturas diferentes. Y considerará para impuestos el importe de las 3 facturas individuales.
Para evitar duplicar facturas la interfase de timbrado valida la serie y folio y si ya existe: no le va a generar una nueva factura, en su lugar va a regresar un error indicando que la factura ya existe.
Por lo tanto su sistema no debe estar diseñado para reutilizar números de folios, si sus usuarios cometieron un error, deben cancelar la factura y generar una nueva con un consecutivo diferente.
Cambios más importantes a tomar en consideración
- El nombre del emisor y receptor son requeridos y deben estar escritos idéntico a como se encuentre en la cédula fiscal del emisor o receptor y no debe incluir el régimen de capital.
- Por ejemplo: Microflow Software S.A. de C.V. no va a pasar, debe reportar como nombre : MICROFLOW SOFTWARE
- Escribir el RFC del emisor o cliente
- Cuando aparezca la lista de certificados del cliente, tome el nombre que aparece en el inicio de la lista
- Estas mismas reglas aplican para cualquier nodo del CFDI o complementos, donde se solicite un RFC y nombre de un contribuyente.
- Nodo Receptor:
- Deberá reportar el código postal del emisor (no es necesariamente el mismo que use como dirección fiscal impresa)
- Deberá reportar el régimen fiscal del cliente (si el cliente tiene más de un régimen fiscal, deberá iniciar a cual le está generando la factura)
- Nodo comprobante:
- Se agregó una nueva propiedad : Exportación, en ella deberá si el CFDI es una transacción de exportación definitiva, temporal o no aplica.
- Nodo UUIDS relacionados: ahora se pueden enviar más de un nodo con tipos de relaciones diferentes.
- Nodo Información Global: si emite un comprobante por factura global se debe adicionar este nodo y seguir todas las reglas publicadas en los instructivos de llenado del SAT.
- Nodos concepto
- Deberá en cada nodo concepto reportar si ese concepto es o no objeto de impuestos y si es o no objeto de desglose de impuestos.
- Nodo AcuentaTerceros: Se agrega un nuevo nodo a cuenta terceros, para indicar si el concepto facturado está siendo cobrado a nombre de un tercero y no de quien emite el CFDI.
- Atributos nuevos
- Todos los atributos nuevos se agregaron al final de la línea del layout para evitar que tengan que recorrer la información que ya tienen programada en sus algoritmos
- Sumatorias de Impuestos
- Se requiere reportar la sumatoria de todos los montos base en los nodos de traslados de impuestos. En este caso la sumatoria del monto base sí se agregó al inicio de la línea.
Nombre emisor
Recuerde que los datos del emisor se configuran en el portal, debe asegurase de que el nombre en el portal siga las reglas mencionadas arriba.
Archivos y ligas de apoyo para desarrollo
Layout estándar (2024-01-18)
Actualización complemento exportación 2.0
Cambios requeridos, número de versión a 2.0, dejar de reportar tipo operación y subdivisión.
Ubicación de información del SAT
Símbolo de gato # en layout
Esto es un comentario, una línea de ejemplo para que la puedan incluir, "sin el #", no se deben incluir en el layout real
Liga para timbrar versión 4.0
https://facturas.easysmart.com.mx/cgi-bin/externos/timbrarGR40
RFC Emisor de Pruebas vigente
- Persona moral EKU9003173C9
- Persona física XAMA620210DQ5
- Usuario y contraseña para el Layout :
EMPRESA:EXTERNOS|testext452|EKU9003173C9||
Configuración Portal Externos
Los datos del emisor siempre se han guardado en el portal y no son parte de la información que se envía en el layout. Por este motivo es necesario ingresar el portal de configuración del cliente y editar nuevamente los datos fiscales de la empresa. Principalmente seleccionar y guardar el régimen fiscal del cliente en el combo de selección.
Revise que el nombre del emisor esté escrito tal y como viene en la cédula del emisor, sin agregar puntos, comas, espacios adicionales , quitar espacios, etc.
Recomendaciones generales a seguir
Atributos opcionales en nodos del XML
Cuando un nodo/atributo es opcional, en el layout debemos enviar ese dato como vacío (Cero y espacios no se consideran como vacío), para que el sistema lo quite. Por ejemplo:
En el nodo Receptor, Residencia Fiscal es opcional. Por lo tanto si queremos excluir la residencia fiscal en el XML, debemos enviar la línea de RECEPTOR como:
RECEPTOR:AAA010101AAA01||email@cliente.com.mx
Observación
Note como existen dos "pipes" seguidos después del RFC, indicando que el nombre está omitido. Para excluir un nodo opcional, no envíe la línea de ese nodo.
Formato de Fecha
Se tiene implementados los siguientes formatos de fecha en el nodo COMPROBANTE:
- DD/MM/AAAA
- DD/MM/AA
- AAAA-MM-DD
- AAAA-MM-DDTHH:MM:SS
Horario Local
Por conveniencia a los programadores el sistema siempre ha permitido enviar la fecha sin hora. El sistema usa lo hora del centro para agregarla a la fecha de facturación.
A partir de Octubre del 2019, el SAT implementó la regla de que la hora debe estar calculada en base a la hora local del lugar de expedición del emisor. Por lo tanto debe utilizar al formato de fecha y hora completo si:
- Está facturando fuera de la zona del centro
- Su cliente factura en un lugar pero la emisión es de un comprobante ubicado en una zona diferente. Por ejemplo, el cliente genera una factura en Aguascalientes con un lugar de expedición en Tijuana.
Cambios importantes
- El nombre del emisor y receptor debe ser idéntico al que tiene registrado el SAT en su portal o como aparece en la cédula fiscal del emisor y receptor, de lo contrario se rechaza la factura.
- Idéntico : mayúsculas, con o sin puntos, comas, abreviaciones, etc.
Impuestos
- El impuesto exento en un producto, se debe reportar sin tasa ni importe, ejemplo:
IMPUESTO_LINEA:base|clave_impuesto|Exento
- Impuesto Exento, sí debe enviar en los totales junto con la sumatoria de la Base, como
- IMPUESTO_TRASLADO:base|002|Exento
- Impuestos o retenciones no generadas
- Supongamos que no se generaron retenciones en los conceptos.
- Si no se generaron retenciones en los conceptos, entonces no hay retenciones acumuladas por reportar
- Si no hay retenciones acumuladas por reportar, el atributo total de retenciones no se debe reportar tampoco. En lugar de "0" debe ir "vacío"
Ejemplo, sin retenciones declaradas, sin traslados declarados y solo una línea de impuestos exentos.
IMPUESTOS:|
IMPUESTO_TRASLADO:500|002|Exento
...
LINEA: ...
IMPUESTO_LINEA:500|002|Exento
Sumatorias
- La sumatoria de cada tipo de IMPUESTO_LINEA se debe reportar en : IMPUESTO_TRASLADO (tanto importes como la base)
- La sumatoria de IMPUESTO_TRASLADO se debe reportar en : IMPUESTOS:|trasladado
- La sumatoria de cada tipo de RETENCION_LINEA se debe reportar en : IMPUESTO_RETENIDO
- La sumatoria de IMPUESTO_RETENIDO se debe reportar en : IMPUESTOS:retenido|
- La sumatoria de los importes de línea se reporta como el subtotal
- La sumatoria de los descuentos de línea se reporta en Descuento
- Total = Subtotal + Impuesto Trasladado + Impuestos Locales - Descuento - Impuestos Retenidos - Retenciones Locales
Ceros y valores vacíos en totales, e impuestos
Si reportas ceros en los descuentos de línea , debes reportar 0 en el total
Si envías vacío en los descuentos de línea, debes enviar vacío el total
La misma lógica se usa para los totales de impuestos
Ejemplo de sumatorias:
. Cant Precio Importe
Linea 1 1 pieza 50 50.00
Descuento 20.00
Monto Base 30.00
Impuesto 002 - Tasa 0.16 4.80
Linea 2 2 tornillos 20 40.00
Monto Base 40.00
Impuesto 002 - Tasa 0.16 6.40
Linea 3 1 tuerca 30 30.00
Monto Base 30.00
Impuesto 002 - Tasa 0.16 4.80
Linea 4 1 Manzana 30 30.00
Monto Base 30.00
Impuesto 002 - Tasa 0.00 0.00
Linea 5 1 Otra co 30 30.00
Monto Base 30.00
Impuesto 002 - Exento 0.00
Subtotal 180.00 (50+40+30+30+30)
Descuento 20.00 (20+0+0+0+0)
Impuesto 002 Tasa 0.16 16.00 (4.8+6.4+4.8)
Impuesto 002 Tasa 0.00 0.00
Total 176.00 (180 - 20 + 16 + 0)
IMPUESTO_TRASLADO:100|002|Tasa|0.16000|16.00
IMPUESTO_TRASLADO:30|002|Tasa|0.00000|00.00
IMPUESTO_TRASLADO:30|002|Exento
IMPUESTOS:|16.00
Redondeos
- Todos los valores numéricos del conceptos pueden ir a cualquier cantidad de decimales que no excedan 6 posiciones
- Excepto descuento, este debe ir fijo a 2 decimales (no funciona de otra manera)
- Deben enviar la cantidad de decimales que quieren que aparezcan en el PDF, ejemplo:
- 1 aparecerá como 1
- 1.00 aparecerá como 1.00
- Todos los cálculos de impuestos de línea deben generarlos a 6 decimales
- Todos los valores totales: subtotal,descuento,total,total impuestos trasladados, total impuestos retenidos, etc.
- Se deben redondear a 2 decimales
- Todos los detalles de impuestos a nivel de factura (no de líneas de producto)
- IMPUESTO_TRASLADO,IMPUESTO_RETENCION
- Las sumatoria de los conceptos (descuentos, importes, impuestos) se debe hacer al máximo de decimales que usen y después redondear a 2 decimales.
- Para que el total valide correctamente
- total = subtotal + impuestos_trasladados + impuestos_locales - impuestos_retenidos - impuestos_locales_retenidos - descuento
- Todos los valores de la suma deben estar redondeados a 2 decimales al momento de hacer la suma para el total
- Por último, si recibe errores de sumatorias o redondeos
- No asuma que los cálculos son correctos, use una calculadora para corroborar sus operaciones matemáticas
- Genere un layout con no más de 3 renglones que contengan descuentos y números con decimales
- Revise todos los cálculos generados en el layout con una calculadora a 6 o más decimales
- Revise que los importes, montos base, impuestos, etc, calculados por su programa contra los generados por la calculadora sean iguales hasta los 6 decimales
- Cuando este layout pase las validaciones de redondeos, no debería tener más problemas si incrementa a 5,15,30 o 100 renglones.
Efectos del layout en el la versión impresa
- Descuento en línea de producto
- Si el valor se envía vacío, se omite el atributo en el XML y por lo tanto la columna de descuento se omite en la representación impresa
- Ejemplo : LINEA:01010101|GEN002|1|E50|Pieza|Piezas de valor 2|500.00|500.00|
- Si el valor se envía como un número mayor o igual a cero entonces la columna se presenta con el valor enviado.
- Ejemplo : LINEA:01010101|GEN002|1|E50|Pieza|Piezas de valor 2|500.00|500.00|0.00
- Si el valor se envía vacío, se omite el atributo en el XML y por lo tanto la columna de descuento se omite en la representación impresa
- Decimales : El sistema respeta los decimales reportados en el layout
- Si envía 1 decimal saldrá un decimal, si envía 2 saldrán 2, etc.
Objeto impuesto
Deberá seguir la siguiente tabla de objeto impuesto vs. Tipo de impuesto que se puede reportar. Si un objeto impuesto no tiene ningún tipo de impuesto a reportar no deberá reportar ningún nodo de impuestos en ese concepto.
ObjetoImp | IVA | IEPS | RET IVA | RET IEPS | RET ISR |
---|---|---|---|---|---|
01 | No | No | No | No | No |
02 | Sí | Sí | Sí | Sí | Sí |
03 | No | No | No | No | No |
04 | No | No | No | No | No |
05 | No | No | No | No | Sí |
06 | No | Sí | No | Sí | Sí |
07 | No | No | No | No | Sí |
Ejemplos
Los siguientes ejemplo permiten ilustrar como se ve un layout lleno, no es limitativo de lo que se puede enviar en el layout, ni se debe tomar como un machote fijo, deberá llenar cada dato y línea de acuerdo a la información que desea reportar en su CFDI.
Factura
EMPRESA:EXTERNOS|testext452|EKU9003173C9|CTE4049|603
COMPROBANTE:4.0|V4|2144519|02/01/2022|03|Contado|1600.00|100.00|MXN|1|1660.00|I|PUE|20200||01
PDF:Aguascalientes, Ags|V9633|02/01/2022|Factura|1
RESPUESTA:HTML
#INF_GLOBAL:04|01|2022
#CFDIS_RELACIONADO:04|BC2D3B90-9697-4E1A-AD2C-2AD505311960,E71582C5-3DC8-4A0D-A008-F8A3F1294CEF
#CFDIS_RELACIONADO:03|BC2D3B91-9697-4E1A-AD2C-2AD505311960,E71582C6-3DC8-4A0D-A008-F8A3F1294CEF
RECEPTOR:MSO0206067S5|MICROFLOW SOFTWARE|||G01||20218|603
RECEPTOR_DIRECCION:La calle|1000||La colonia|20000|Aguascalientes|Aguascalientes|Aguascalientes|México
IMPUESTOS:|160.000000
IMPUESTO_TRASLADO:1000|002|Tasa|0.160000|160.00
IMPUESTO_TRASLADO:500|002|Tasa|0|0.00
#TRASLADOS_LOCALES:1000
#TRASLOCAL:impuesto de nomina|5|1000.00
#RETENCIONES_LOCALES:1000
#RETLOCAL:retención inventada|5|1000.00
LINEA:01010101|GEN002|1|E50|Pieza|Piezas de valor 1|600.00|600.00|100.00|02
IMPUESTO_LINEA:500.00|002|Tasa|0.160000|80.000000
LINEA:01010101|GEN002|1|E50|Pieza|Piezas de valor 2|500.00|500.00|0.00|02|
IMPUESTO_LINEA:500.00|002|Tasa|0.160000|80.000000
LINEA:01010101|GEN002|1|E50|Pieza|Renta casa habitación|500.00|500.00|0.00|02|PREDIAL:12345678
IMPUESTO_LINEA:500.00|002|Tasa|0|0.000000
COMENT: Prueba de observaciones, es opcional y es una sola linea áéíóúñ
FIN:
Nota sobre Notas de Crédito
Algunos valores importantes que cambian al generar notas de crédito con respecto a las facturas, son:
- Uso CFDI = P01
- Tipo Documento = E
- Método pago = PUE
Nota sobre Traslado
Algunos valores importantes que cambian al generar notas de crédito con respecto a las facturas, son:
- Uso CFDI = P01
- Tipo Documento = T
- Método pago = PUE
- Totales en cero, se omite descuento
Impuestos locales
EMPRESA:EXTERNOS|testext452|EKU9003173C9|CTE4049|603
COMPROBANTE:4.0|V4|2144519|02/01/2022|03|Contado|1600.00|100.00|MXN|1|1660.00|I|PUE|20200||01
PDF:Aguascalientes, Ags|V9633|02/01/2022|Factura|1
RESPUESTA:HTML
RECEPTOR:MSO0206067S5|MICROFLOW SOFTWARE|||G01||20218|603
RECEPTOR_DIRECCION:La calle|1000||La colonia|20000|Aguascalientes|Aguascalientes|Aguascalientes|México
IMPUESTOS:|160.000000
IMPUESTO_TRASLADO:1000|002|Tasa|0.160000|160.00
IMPUESTO_TRASLADO:500|002|Tasa|0|0.00
TRASLADOS_LOCALES:1000
TRASLOCAL:impuesto de nomina|5|1000.00
RETENCIONES_LOCALES:1000
RETLOCAL:retención inventada|5|1000.00
LINEA:01010101|GEN002|1|E50|Pieza|Piezas de valor 1|600.00|600.00|100.00|02
IMPUESTO_LINEA:500.00|002|Tasa|0.160000|80.000000
LINEA:01010101|GEN002|1|E50|Pieza|Piezas de valor 2|500.00|500.00|0.00|02|
IMPUESTO_LINEA:500.00|002|Tasa|0.160000|80.000000
LINEA:01010101|GEN002|1|E50|Pieza|REnta casa habitación|500.00|500.00|0.00|02|PREDIAL:12345678
IMPUESTO_LINEA:500.00|002|Tasa|0|0.000000
COMENT: Prueba de observaciones, es opcional y es una sola linea áéíóúñ
FIN:
Escuelas
EMPRESA:EXTERNOS|testext452|LAN7008173R5|CTE4049|
COMPROBANTE:4.0|V4|2144519|02/01/2022|03|Contado|1600.00|100.00|MXN|1|1660.00|I|PUE|20200||01
PDF:Aguascalientes, Ags|V9633|12/07/2017|Nota Crédito
RESPUESTA:HTML
RECEPTOR:MSO0206067S5|MICROFLOW SOFTWARE|||G01||20218|603
RECEPTOR_DIRECCION:La calle|1000La colonia|20000|Aguascalientes|Aguascalientes|Aguascalientes|México
IMPUESTOS:|160.00
IMPUESTO_TRASLADO:1000|002|Tasa|0.160000|160.00
LINEA:01010101|GEN002|1|E50|Pieza|Colegiatura|1000.00|1000.00|0.00|02|ALUMNO:Juan Perez,GLZ03JERH010203LS526555,Secundaria,02566
IMPUESTO_LINEA:1000.00|002|Tasa|0.160000|160.000000
COMENT: Prueba de observaciones, es opcional y es una sola linea áéíóúñ
FIN:
Factura Global
EMPRESA:EXTERNOS|testext452|EKU9003173C9|CTE4049|601
COMPROBANTE:4.0|V4|2117415|21/10/2022|03|Contado|1000.00||MXN|1|1160.00|I|PUE|20200||01
PDF:Aguascalientes, Ags|V9633|21/10/2022|Factura|1
RESPUESTA:HTML
DEBUG:0
INF_GLOBAL:04|10|2022
RECEPTOR:XAXX010101000|PUBLICO EN GENERAL|||S01||20200|616
RECEPTOR_DIRECCION:La calle|1000||La colonia|20000|Aguascalientes|Aguascalientes|Aguascalientes|México
IMPUESTOS:|160.000000
IMPUESTO_TRASLADO:1000|002|Tasa|0.160000|160.00
LINEA:01010101|234-988|1|ACT|Pieza|Ventas|1000.00|1000.00||02
IMPUESTO_LINEA:1000.00|002|Tasa|0.160000|160.00
COMENT: Prueba de observaciones, es opcional y es una sola linea áéíóúñ
FIN:
Consideraciones sobre factura global o Clientes de Mostrados
- Cliente de mostrador que no solicita factura
- Nombre del receptor: Debe ser su nombre real o Cliente de Mostrador si va a ser una factura anónima.
- Se recomienda usar el nombre real del cliente y no generar facturas anónimas
- El nombre PUBLICO EN GENERAL, está reservado únicamente para las facturas globales no use un nombre similar o que contenga este valor en el nombre del receptor.
- Factura global
- Debe usar como nombre : PUBLICO EN GENERAL
- Debe reportar el nodo adicional : INF_GLOBAL
- Debe reportar los folios que cubre la facturación en el número de identificación (ver ejemplo : 234-988)
- Pueden ser rangos
- Un solo folio
- etc.
Complementos de línea
LINEA:01010101|GEN002|1|E50|Pieza|Colegiatura|1000.00|1000.00|0.00|02|ALUMNO:Juan Perez,GLZ03JERH010203LS526555,Secundaria,02566
LINEA:01010101|GEN002|1|E50|Pieza|Renta casa habitación|500.00|500.00|0.00|02|PREDIAL:12345678
Lógica del Layout Estándar
El layout se diseño para que se apegara en la medida de lo posible al documento técnico del SAT y que de esta forma sea posible localizar los atributos de cada nodo con facilidad y poder determinar su uso, que información debe ir y como llenarlos correctamente.
El layout no trae todos los detalles reescritos nuevamente porque son muchos y algunos muy extensos, de forma que debe usar ambos documentos simultáneamente para entender como llenar el layout de texto.
Continuar a : Generar recibos de nómina
Continuar a : Documentos de Pago
Continuar a : Subir Archivo Batch para escuelas
Continuar a : Retenciones y Pagos
Continuar a : Cancelaciones