Saltar a contenido

Documentación para implementación de CFDI 4.0

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)

Descargar Layout Estándar

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

Documentación CFDI

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
  • 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.

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