Saltar al contenido
VeloraBlog
← Todos los artículos

13 de junio de 2026

El array de IVA (AlicIva) en WSFEv1: cuándo es obligatorio (errores 10018 a 10021)

En WSFEv1, si ImpIVA es mayor a 0 tenés que mandar el array de IVA (objeto Iva con AlicIva) o AFIP rechaza con error 10018. Cada AlicIva necesita Id (alícuota válida de FEParamGetTiposIva, error 10019), BaseImp mayor a 0 (10020) e Importe (10021). Nada de esto aplica a Factura C, que no discrimina IVA.

Cuándo el array de IVA es obligatorio (10018)

Si tu comprobante tiene IVA (ImpIVA > 0), el array de IVA es obligatorio. Textual del manual (código 10018):

«Si <ImpIVA> es mayor a 0 el objeto <IVA> y <AlicIva> son obligatorios. El objeto <AlicIva> es obligatorio y no debe ser nulo si ingresa <IVA>. No aplica para comprobantes tipo C».

Dos consecuencias clave:

  • Factura C (Monotributo) no informa AlicIva — no discrimina IVA, así que todo este bloque no aplica para tipo C.
  • Si ImpIVA = 0, el manual indica que «los objetos <IVA> y <AlicIva> solo deben informarse con ImpIVA = 3 (iva 0)» — en la práctica, informando la alícuota de IVA 0% (Id 3); confirmá los Id con FEParamGetTiposIva.

Los tres campos de cada AlicIva (10019, 10020, 10021)

CódigoCampo de AlicIva
10019Id obligatorio, y debe ser un valor devuelto por FEParamGetTiposIva
10020BaseImp obligatorio y mayor a 0
10021Importe obligatorio y mayor o igual a 0

Citas textuales del manual oficial de ARCA (WSFEv1):

  • 10019 → «El campo Id en AlicIVA es obligatorio informarlo. Si el tipo de comprobante es 2, 3, 7, 8, 52 o 53 informarlo es opcional. Siempre que se informe Id, debe ser un valor devuelto por el método FEParamGetTiposIva».
  • 10020 → «El campo BaseImp en AlicIVA es obligatorio y debe ser mayor a 0. Excepto para comprobantes 2, 3, 7, 8, 52 o 53 que puede ser cero o no ser informado».
  • 10021 → «El campo Importe en AlicIVA es obligatorio, mayor o igual 0. Excepto para comprobantes 2, 3, 7, 8, 52 o 53 que puede ser cero o no ser informado».

Los tres llevan la aclaración «No aplica para comprobantes tipo C».

Ejemplo y el caso Factura C

// Factura A/B con IVA 21%: el array de IVA es obligatorio
const voucher = {
  ImpNeto: 10000,
  ImpIVA:  2100,
  Iva: [
    // Id 5 = 21% — confirmá las alícuotas con FEParamGetTiposIva
    { Id: 5, BaseImp: 10000, Importe: 2100 },
  ],
};

// Factura C (Monotributo): NO se informa AlicIva — no discrimina IVA

El BaseImp y el Importe de cada AlicIva tienen que cerrar contra ImpNeto e ImpIVA (y la suma entra en el control 10048 de ImpTotal). Calcular eso con floats arrastra fracciones de centavo: hacé la aritmética en centavos enteros por alícuota.

Checklist:

  1. ImpIVA > 0 → mandá el array Iva con al menos un AlicIva → evita 10018.
  2. AlicIva.Id de FEParamGetTiposIva → evita 10019.
  3. AlicIva.BaseImp > 0 → evita 10020; AlicIva.Importe >= 0 → evita 10021.
  4. Factura C (tipo C): no se informa AlicIva.