Guía para el cálculo de impuestos en REP 2.0
Índice
- Introducción
- ¿Dónde debo incluir los impuestos?
- ¿En qué moneda se expresan los diferentes impuestos?
- Impuestos del Documento Relacionado
- Impuestos del Pago
- Totales
Introducción
Uno de los principales cambios introducidos en la versión 2.0 del Recibo Electrónico de Pagos es la inclusión de los nodos de impuestos.
La revisión de la guía de llenado puede ser abrumadora y muchas veces poco clara. En esta guía explicaremos paso a paso a qué se refieren estos impuestos y cómo debemos calcularlos.
NOTA: Se adjuntan peticiones API para ilustrar los diferentes ejemplos; sin embargo, esta no es una guía completa de REP 2.0. Si deseas conocer más sobre los diferentes campos consulta la documentación API para Recibo Electrónico de Pagos 2.0.
¿Dónde debo incluir los impuestos?
Una de las primeras cosas qué hay que notar es que se deben indicar los impuestos en tres niveles diferentes:
- Documentos Relacionados
- Pago
- Complemento (Totales)
El orden que debes seguir para calcular estos impuestos es de abajo hacia arriba. Es decir, primero debes calcular los impuestos del documento; después los impuestos del pago (como la sumatoria de los impuestos de los documentos) y finalmente los impuestos totales (como la sumatoria de los impuestos de los pagos).
¿En qué moneda se expresan los diferentes impuestos?
Si trabajas con diferentes tipos de monedas, debes tener en cuenta en qué moneda se expresan los impuestos de cada nivel. La regla general es:
- Los impuestos de los documentos relacionados en la misma moneda del documento
- Los impuestos del pago en la misma moneda del pago
- Los impuestos totales siempre en Pesos Mexicanos
Deberás considerar la conversión de moneda entre un nivel y otro cuándo sea necesario:
ImpuestosDR
Se expresan en la moneda del Documento Relacionado (No hay conversión); permite hasta 6 decimales.
ImpuestosP
Se expresan en la moneda del Pago (Se convierte de MonedaDR a MonedaP); permite hasta 6 decimales.
Totales
Se expresan siempre en Pesos Mexicanos (Se convierte de MonedaP a MXN); permite hasta 2 decimales
En las secciones siguientes explicaremos de forma precisa cómo realizar el cálculo del impuesto en cada nivel, así como las reglas de conversión y redondeo que debes seguir para cada uno.
Impuestos del Documento Relacionado
En esta sección debemos registrar los impuestos aplicables conforme al pago recibido. Es decir, qué parte del impuesto total de la factura se incluye en este pago. Para entender mejor esto, consideremos el ejemplo de una factura con un total de $116.00 MXN:
Subtotal: $100.00 MXN
IVA 16%: $16.00 MXN
Total: $116.00 MXN
Si se liquida el total de la factura en un pago único de $116.00, sabemos qué $16.00 MXN de ese monto son de IVA; ese es el impuesto aplicable, por lo que registramos el impuesto como:
IVA 16%:
BaseDR = 100.00
ImporteDR = 16.00
Ahora si, por ejemplo, la factura se liquida en dos parcialidades de $58.00, cada pago representa la mitad del total, por lo que el IVA aplicable será igualmente la mitad, es decir $8.00 MXN:
IVA 16%:
BaseDR = 50.00
ImporteDR = 8.00
Nota que para encontrar la BaseDR estamos aplicando el mismo porcentaje del 50% a la base original del impuesto:
BaseDR = 100.00 * 0.5 = 50
Y que el importe cumple con la multiplicación BaseDR * TasaOCuotaDR:
ImporteDR = BaseDR * TasaOCuotaDR = 50.00 * 0.16 = 8.00
La razón del 50% entre el importe pagado y el total del comprobante también le llamamos proporción, y podemos expresarla como:
Proporción = ImpPagado / Total
De acuerdo a lo que hemos visto, podemos generalizar el cálculo de la BaseDR de la siguiente manera:
BaseDR = Base * Proporción
BaseDR = (Base * ImpPagado) / Total
Recuerda que Base es la base original del impuesto y BaseDR es la que aplicamos en este pago. El importe se seguirá calculando como:
ImporteDR = BaseDR * TasaOCutaDR
Lo anterior funciona tanto si se paga el total de la factura o solo una parte, y se puede extender para cualquier tipo de impuesto, sea retención o traslado. Esta forma de calcular el impuesto no es una regla, pero es la forma que nosotros utilizamos y recomendamos, ya que cumple con las disposiciones fiscales del SAT.
En resumen, para calcular el impuesto aplicable tendrás que considerar lo siguiente:
- Los impuestos totales del comprobante original
- El total del comprobante
- El importe pagado
Por cada impuesto del comprobante original, el impuesto que corresponde al pago se calcula de la siguiente manera:
BaseDR = (Base * ImpPagado) / Total
ImporteDR = BaseDR * TasaOCuotaDR
*Base es la base del impuesto registrado en la factura original.
NOTA: En el nodo Impuestos del comprobante original, las retenciones se agrupan por Impuesto (IVA, ISR, etc.) y no se indican los campos TipoFactor ni TasaOCuota; sin embargo, estos campos son requeridos al registrar las retenciones del documento relacionado (ver Figura 2). Es necesario por lo tanto obtener las retenciones desde las partidas (conceptos) del comprobante, realizando un agrupamiento por Impuesto, TipoFactor y TasaOCuota de la misma forma que se hace para los traslados.
Precisión y redondeo
Los campos BaseDR e ImporteDR permiten registrar hasta 6 decimales, por lo que se debe redondear el resultado de ser necesario. Considera nuevamente una factura con los siguientes datos:
Subtotal: $100.00 MXN
IVA 16%: $16.00 MXN
Total: $116.00 MXN
Si ahora se realiza un pago por una tercera parte del total (esto es $38.67 MXN), el impuesto se redondea de la siguiente manera:
BaseDR = (Base * ImpPagado) / Total = (100 * 38.67) / 116.00 = 33.3362068965… ≈ 33.336207
ImporteDR = 33.336207 * 0.16 = 5.33379312 ≈ 5.333793
*Se utiliza la base una vez redondeada para calcular el importe.
No es necesario expresar los montos con 6 decimales; puedes optar por redondear a una cantidad de decimales menor, por ejemplo a 2 decimales:
BaseDR = 33.3362068965… ≈ 33.34
ImporteDR = 33.34 * 0.16 = 5.3344 ≈ 5.33
Ambas formas son correctas. Por lo general el redondeo a dos decimales es suficiente, pero en algunos casos tener el máximo de decimales genera resultados más precisos.
NOTA: Si realizas el ejercicio anterior para las siguientes dos parcialidades (una de $38.67 MXN y otra de $38.66 MXN, para un total de $116.00 MXN), obtendrás un impuesto de $5.33 MXN en ambos casos, por lo que la suma total del impuesto será de $15.99 MXN y no de $16.00 MXN. Puedes compensar esta diferencia redondeando hacia arriba el importe de la última parcialidad, registrando $5.34 MXN. Esto es válido ya que no sobrepasa los límites permitidos.
Estructura API
Al emitir un Recibo Electrónico de Pago 2.0 desde el API de Enlace Fiscal debes registrar los siguientes campos del impuesto:
En nuestra API no se separan los traslados y retenciones, en su lugar se utiliza el campo tipo para identificar el tipo de impuesto.
La petición del ejemplo anterior se vería así:
{
"CFDi": {
...,
"ComplementoPago": [{
...,
"Pago": [{
...,
"DocumentosRelacionados": [{
...,
"Impuestos": [{
"tipo": "traslado",
"claveImpuesto": "IVA",
"tipoFactor": "tasa",
"tasaOCuota": 0.16,
"importe": "5.33",
"baseImpuesto": "33.34"
}]
...,
Moneda diferente a la del Pago
Cuando la moneda del pago y la moneda del documento son diferentes, debemos considerar tres cosas:
- El monto del pago (Pago:Monto)
- El importe pagado (DoctoRelacionado:ImpPagado)
- La equivalencia entre la moneda del documento y la moneda del pago (DoctoRelacionado:EquivalenciaDR)
El monto es el importe del pago recibido como tal, y por lo tanto se encuentra en la moneda en que se realizó el pago. El importe pagado es el equivalente del monto en la moneda del documento.
Para que el monto se considere válido, se debe cumplir con la siguiente regla:
Monto = ImpPagado / EquivalenciaDR
NOTA: Si se registra más de un documento, entonces el monto debe ser igual a la suma de los importes pagados convertidos a la moneda del pago.
NOTA: El importe asignado total podría ser menor al monto del pago, en estos casos se debe emitir un recibo de anticipo por el monto remanente.
Considera por ejemplo una factura con un valor de $348,000.00 MXN. El cliente realiza un pago por $19,624.32 USD, con tipo de cambio 17.7331, lo cual corresponde al total de la factura. Tendremos entonces:
Monto = 19,624.32 (USD) = 348,000.00 / 17.7331
ImpPagado = 348,000.00 (MXN)
La EquivalenciaDR representa las unidades en la moneda del documento que equivalen a una unidad en la moneda del pago. Para el ejemplo anterior, esto es la cantidad de pesos que equivalen a un dólar; en este caso es lo mismo que el tipo de cambio: 17.7331 MXN = 1 USD. Por otro lado, si la factura original se emite en dólares y el pago se realiza en pesos, entonces debemos registrar la cantidad de dólares que equivalen a un peso. Para esto calculamos el inverso del tipo de cambio y redondeamos el resultado a 10 decimales:
1 / 17.7331 = 0.0563917194399… ≈ 0.05639171944
Lo anterior se resume mejor en la siguiente tabla:
Moneda Documento | Moneda Pago | Sentido de EquivalenciaDR | EquivalenciaDR |
MXN | USD | Pesos por dólar | 17.7331 |
USD | MXN | Dólares por peso | 0.05639171944 |
Tabla 1. EquivalenciaDR cuando la moneda es diferente a la del pago
Si se realiza un pago cualquiera y no conocemos el importe correspondiente en la moneda del documento, podemos determinarlo con la siguiente fórmula:
ImpPagado = Monto * EquivalenciaDR
Una vez que conozcamos el importe pagado en la moneda del documento, podemos calcular los impuestos del documento siguiendo el método que describimos al inicio.
A continuación explicaremos como calcular los impuestos a nivel del pago.
Impuestos del Pago
A nivel pago debemos registrar la sumatoria de los impuestos registrados en los documentos relacionados. Si tenemos por ejemplo dos documentos con el siguiente impuesto (calculado según se describe en la sección anterior):
Documento 1 (MXN) | ||
Impuesto | BaseDR | ImporteDR |
IVA 16% | 33.3436207 | 5.33793 |
Documento 2 (MXN) | ||
Impuesto | BaseDR | ImporteDR |
IVA 16% | 100.00 | 16.00 |
Entonces en el pago registraremos la suma:
IVA 16%:
BaseP = 33.34 + 100.00 = 133.34
ImporteP = 5.33 + 16.00 = 21.33
Pago (MXN) | ||
Impuesto | BaseP | ImporteDR |
IVA 16% | 133.34 | 21.33 |
En general, podemos expresar el cálculo de la siguiente forma:
El subíndice representa el impuesto del documento 1, el impuesto del documento 2, etc.
Estructura API
En los impuestos del pago se indican los mismos campos que se muestran en la Figura 3. El ejemplo anterior se vería de la siguiente forma:
{
"CFDi": {
...,
"ComplementoPago": [{
...,
"Pago": [{
...,
"Impuestos": [{
"tipo": "traslado",
"claveImpuesto": "IVA",
"tipoFactor": "tasa",
"tasaOCuota": "0.16",
"importe": "21.33",
"baseImpuesto": "133.34"
}]
...
Descargar petición "Pago MXN - Múltiples Documentos"
Agrupamiento
Al sumar los impuestos de traslado como en el ejemplo anterior, los diferenciamos por su tasa o cuota. Es decir, en un impuesto del pago registramos la suma de todos los IVA 16%, en otro la suma de todos los IVA 8%, etc.
En el caso de las retenciones, las agrupamos solo por impuesto (IVA, ISR, etc.), sin importar la tasa o la cuota. Por ejemplo, si existe una retención ISR 1.5% y una retención ISR 10%, registraremos un solo impuesto ISR con la suma de los importes de ambas retenciones. En este caso no se registra la base, el tipo factor o la tasa (ver Figura 4).
Este agrupamiento es similar al que se hace al calcular los impuestos totales de una factura.
Precisión y redondeo
Los campos BaseP e ImporteP permiten hasta 6 decimales. Si la moneda del pago y de los documentos es la misma, el resultado tendrá tantos decimales como se hayan usado en los documentos, y no deberemos aplicar ningún redondeo. Considera por ejemplo los siguientes impuestos en los documentos:
Documento 1 (MXN) | ||
Impuesto | BaseDR | ImporteDR |
IVA 16% | 33.336207 | 5.333793 |
Documento 2 (MXN) | ||
Impuesto | BaseDR | ImporteDR |
IVA 16% | 100.00 | 16.00 |
En el pago registraremos la suma con todos sus decimales:
IVA 16%:
BaseP = 33.336207 + 100.00 = 133.336207
ImporteP = 5.333793 + 16.00 = 21.333793
Pago (MXN) | ||
Impuesto | BaseP | ImporteP |
IVA 16% | 133.336207 | 21.333793 |
Descargar petición "Pago MXN - Múltiples Documentos (6 decimales)"
Documento con moneda diferente a la del Pago
Si la moneda de un documento (MonedaDR) es diferente a la del pago (MonedaP), debemos convertir la BaseDR y el ImporteDR a la moneda del pago al sumarlos; para ello simplemente los dividimos entre la EquivalenciaDR:
NOTA: Es importante se realice primero la conversión de la moneda (p.e. BaseDR / EquivalenciaDR) por cada documento relacionado, hacer la sumatoria de los resultados con todos sus decimales, y al final hacer el redondeo a 6 decimales.
Observa que si la moneda del documento es igual a la del pago, la EquivalenciaDR será 1 y la conversión resultará correctamente en el mismo valor, por lo que podemos utilizar esta fórmula de forma generalizada.
Considera el caso del primer ejemplo, pero ahora con un pago en dólares y un tipo de cambio de 17.7331. De acuerdo a la Tabla 1, cuando los documentos están en pesos mexicanos y el pago se realiza en dólares, utilizamos el tipo de cambio como EquivalenciaDR:
Documento 1 (MXN) | |||
Impuesto | EquivalenciaDR | BaseDR | ImporteDR |
IVA 16% | 17.7331 | 33.34 | 5.33 |
Documento 2 (MXN) | |||
Impuesto | EquivalenciaDR | BaseDR | ImporteDR |
IVA 16% | 17.7331 | 100.00 | 16.00 |
Calculamos entonces el impuesto del pago de la siguiente manera:
IVA 16%:
BaseP = 33.34 / 17.73331 + 100.00 / 17.7331 = 1.880099926127... + 5.639171943992... = 7.519271870119... ≈ 7.519272
ImporteP = 5.33 / 17.7331 + 16.00 / 17.7331 = 0.300567864615... + 0.902267511039... = 1.202835375653… ≈ 1.202835
Pago (USD) | ||
Impuesto | BaseP | ImporteDR |
IVA 16% | 7.519272 | 1.202835 |
Descargar petición "Pago USD - Múltiples Documentos"
Nota que el redondeo se hace hasta el final. No debemos redondear las conversiones individuales, ya que al redondear estamos agregando o quitando una pequeña cantidad, lo cual podría resultar en una suma diferente a la esperada.
Totales
En el nodo Totales del complemento debemos registrar la sumatoria de los impuestos de los pagos. Estos totales se expresan en Pesos Mexicanos y deben redondearse siempre a 2 decimales. Solo debemos registrar los campos para los impuestos que aparecen en los pagos, los demas campos se omiten.
Considera los siguientes pagos y sus impuestos (en este ejemplo se utilizó una precisión de 6 decimales):
Pago 1 | ||
Monto | 38.67 | |
Impuesto | BaseP | ImporteP |
IVA 16% | 33.336207 | 5.333793 |
Pago 2 | ||
Monto | 116.00 | |
Impuesto | BaseP | ImporteP |
IVA 16% | 100.000000 | 16.000000 |
Calculamos los totales de la siguiente manera:
TotalTrasladosBaseIVA16 = 33.336207 + 100.000000 = 133.336207 ≈ 133.34
TotalTrasladosImpuestoIVA16 = 5.333793 + 16.000000 = 21.333793 ≈ 21.33
*El resultado de la suma se redondea a 2 decimales.
Adicionalmente a los impuestos, en el campo MontoTotalPagos debemos registrar la sumatoria de los montos de los pagos; en este caso tenemos:
MontoTotalPagos = 36.67 + 116.00 = 154.67
Registraremos pues los siguientes totales:
Totales | |
TotalTrasladosBaseIVA16 | 133.34 |
TotalTrasladosImpuestoIVA16 | 21.33 |
MontoTotalPagos | 154.67 |
Estructura API
En el API de Enlace Fiscal los campos de los totales tienen las siguiente nomenclatura:
La petición del ejemplo anterior se vería de la siguiente forma:
{
"CFDi": {
...,
"ComplementoPago": [{
"Totales": {
"trasladosBaseIVA16": "133.34",
"trasladosImpuestoIVA16": "21.33",
"montoTotalPagos": "154.67"
},
...,
Descargar petición "Múltiples Pagos MXN"
Pago con divisas
Si uno de los pagos se realiza en una moneda extranjera se debe convertir los impuestos y el monto a Pesos Mexicanos utilizando el valor registrado en el campo TIpoCambioP del Pago; para ello simplemente multiplicamos los valores por el tipo de cambio.
Considera los siguientes pagos en dólares y sus impuestos:
Pago 1 (USD) | ||
Monto | 2.18 | |
Tipo de Cambio | 17.7331 | |
Impuesto | BaseP | ImporteP |
IVA 16% | 1.880100 | 0.300568 |
Pago 2 (USD) | ||
Monto | 6.54 | |
Tipo de Cambio | 17.7331 | |
Impuesto | BaseP | ImporteP |
IVA 16% | 5.639172 | 0.902268 |
Al calcular los totales, convertimos los montos a Pesos Mexicanos:
TotalTrasladosBaseIVA16 = (1.880100 * 17.7331) + (5.639172 * 17.7331)
= 33.3400013100 + 100.0000009932 = 133.3400023032 ≈ 133.34
TotalTrasladosImpuestoIVA16 = (0.300568 * 17.7331) + (0.902268 * 17.7331)
= 5.3300024008 + 16.0000086708 = 21.3300110716 ≈ 21.33
MontoTotalPagos = (2.18 * 17.7331) + (6.54 * 17.7331)
= 38.658158 + 115.974474 = 154.632632 ≈ 154.63
Es importante notar que debemos sumar las conversiones con todos sus decimales y al final redondear el resultado a 2 decimales.
Registraremos finalmente los siguientes montos:
Totales | |
TotalTrasladosBaseIVA16 | 133.34 |
TotalTrasladosImpuestoIVA16 | 21.33 |
MontoTotalPagos | 154.63 |
NOTA: Para facturas en MXN con pago en USD, es posible que al calcular el MontoTotalPagos el resultado no coincida exactamente con el que resultaría de sumar directamente los importes pagados en MXN de los documentos. Esto se debe a que al calcular el Monto a pagar en USD debemos redondear la cantidad a 2 decimales, provocando que cuando la convirtamos de vuelta a MXN se obtenga un resultado distinto por la cantidad perdida o ganada en el redondeo.
Descargar petición "Múltiples Pagos USD"
Considerando todo lo visto, podemos generalizar el cálculo de los totales de la siguiente forma:
El subíndice representa el impuesto (o monto) del pago 1, el impuesto del pago 2, etc.
Se utiliza el mismo procedimiento para los otros impuestos de la Figura 5 que aparezcan en los pagos.