IndFact - indicador de facturación por línea

Tabla verificada en el código del gateway: es la misma que devuelve GET /v1/taxes, así que se puede consultar en vivo en lugar de copiarla. La columna de tasa es el valor que el gateway usa para calcular, no una lectura del nombre. Sólo dos indicadores generan IVA: el 2 y el 3. Todos los demás valen 0 en la tabla del gateway, incluido el 4, “Otra tasa”, que por su nombre parece que dependiera de algo y no depende: el gateway le calcula 0%. Que la tasa sea 0 no significa que el indicador sea intercambiable. IndFact también le dice a DGI por qué esa línea no lleva IVA, y ese motivo es parte del comprobante. Elegir el número por la tasa que produce, en vez de por lo que la línea es, da un comprobante que cierra en pesos y miente en el motivo. Para el caso común de una venta gravada a tasa básica (22%): IndFact: 3. El gateway acumula los netos e IVA por tasa en los tags DGI correspondientes (MntNetoIVATasaBasica / MntIVATasaBasica, etc.).

Ejemplo real (verificado en local)

Bloque Totales de un eFactura real del stack local: una línea gravada a tasa básica, neto 2500 → IVA 550 → total 3050.
MntIVATasaBasica (550) = MntNetoIVATasaBasica (2500) × 22%. Confirma el mapeo IndFact 3 → 22% con números reales.

Redondeo

Verificado en código. El gateway no re-redondea las líneas: los importes de línea viajan tal como los manda el integrador. El único redondeo que aplica es sobre los totales en UYU al enviar a DGI, a 2 decimales. Consecuencia práctica para el integrador:
  • Redondeá vos las líneas a 2 decimales antes de enviar; el gateway no lo hace por vos a nivel línea.
  • Los totales se formatean a 2 decimales hacia DGI.
  • El ejemplo real de arriba (neto 2500, IVA 550, total 3050) ya está en enteros y cierra exacto; con decimales, la coherencia línea-vs-total es responsabilidad del emisor.
Referencia normativa: Formato CFE de DGI. Es la versión vigente al momento de escribir esto (23-1); DGI la actualiza, y la lista de versiones está en Documentos de interés.