Una u otra, nunca las dos
La primera regla es sencilla: cada línea lleva CalificacionOperacion u OperacionExenta. Si no lleva ninguna, el 1195; si lleva las dos, el 1196. Un valor que no está en la lista da el 1181, para la calificación, o el 1182, para la exención.

Qué exige cada calificación
| Calificación | Qué pide la AEAT | Códigos |
|---|---|---|
| S1, sujeta y no exenta | Tipo impositivo y cuota obligatorios; la cuota solo puede ser distinta de cero aquí. | 1207, 1208, 1209 |
| S2, con inversión del sujeto pasivo | Solo con F1, F3, R1, R2, R3 o R4, y con tipo 0 y cuota 0. | 1197, 1198 |
| N1 o N2, no sujeta | Con IVA, sin tipo, cuota ni recargo. | 1237 |
| Exenta, E1 a E6 | Sin tipo, cuota ni recargo; con la clave de régimen 01 no caben E2 ni E3; con E5, el destinatario solo por IDOtro. | 1238, 1289 |
Para saber cuál toca, el propio documento de la AEAT remite a la Ley 37/1992 del IVA. N1 es la operación no sujeta por los artículos 7 y 14, entre otros; N2, la no sujeta por las reglas de localización. Y cada exención tiene su artículo: E1 el 20, E2 el 21, E3 el 22, E4 el 23 y el 24, E5 el 25 y E6 el resto de supuestos de la ley.
El 1199 prohíbe E2 y E3 con la clave 01 y vive con los de la clave de régimen, en su propia página.
Lo que manda Odoo en cada línea
El módulo construye el desglose agrupando las líneas de la factura por su IVA, y elige la calificación así:
- Línea con un impuesto de IVA
- S1, con el porcentaje del impuesto como tipo, la base y la cuota calculada.
- Línea sin impuesto de IVA
- N1, solo con la base.
Con esas dos salidas, los códigos de esta página no tendrían que darse: S1 va siempre con tipo y cuota, y N1 nunca los lleva. El módulo no envía S2, N2 ni exenciones desde una factura de Odoo.

Lo que esto significa para tus facturas
Que no salten errores no quiere decir que todo esté declarado como querrías. Si en Odoo vendes con un impuesto al 0 %, por ejemplo una entrega intracomunitaria o una exportación, esa línea lleva un impuesto de IVA y sale como S1 con tipo 0, no como operación exenta. Y una operación con inversión del sujeto pasivo, que la AEAT espera como S2, sale como S1 o N1 según los impuestos de la línea.
Si facturas operaciones exentas, con inversión del sujeto pasivo o no sujetas por reglas de localización, escríbenos a comercial@flexigobe.com antes de enviarlas: queremos revisar contigo cómo quedan declaradas.
Los códigos de esta página, con el texto de la AEAT
Cada código con su texto literal, tal como lo da la lista de errores de la AEAT:
| Código | Texto de la AEAT |
|---|---|
| 1181 | El valor del campo CalificacionOperacion es incorrecto. |
| 1182 | El valor del campo OperacionExenta es incorrecto. |
| 1195 | Al menos uno de los dos campos OperacionExenta o CalificacionOperacion deben estar informados. |
| 1196 | OperacionExenta o CalificacionOperacion no pueden ser ambos informados ya que son excluyentes entre sí. |
| 1197 | Si CalificacionOperacion tiene valor Operación Sujeta y No exenta - Con inversión del sujeto pasivo (S2) TipoFactura solo puede ser F1, F3, R1, R2, R3 y R4. |
| 1198 | Si CalificacionOperacion tiene valor Operación Sujeta y No exenta - Con inversión del sujeto pasivo (S2) TipoImpositivo y CuotaRepercutida deberan tener valor 0. |
| 1207 | La CuotaRepercutida solo podrá ser distinta de 0 si CalificacionOperacion es Operación Sujeta y No exenta - Sin inversión del sujeto pasivo (S1). |
| 1208 | Si CalificacionOperacion es Operación Sujeta y No exenta - Sin inversión del sujeto pasivo (S1) y BaseImponibleACoste no está cumplimentada, TipoImpositivo y CuotaRepercutida son obligatorios. |
| 1209 | Si CalificacionOperacion es Operación Sujeta y No exenta - Sin inversión del sujeto pasivo (S1) y ClaveRegimen es 06, TipoImpositivo y CuotaRepercutida son obligatorios. |
| 1237 | El valor del campo CalificacionOperacion está informado como Operación No sujeta (N1 o N2) y el impuesto es IVA. No se puede informar de los campos TipoImpositivo, CuotaRepercutida, TipoRecargoEquivalencia y CuotaRecargoEquivalencia. |
| 1238 | Si la operacion es exenta no se puede informar ninguno de los campos TipoImpositivo, CuotaRepercutida, TipoRecargoEquivalencia y CuotaRecargoEquivalencia. |
| 1289 | Si Impuesto es IVA(01) o vacio y si el campo OperacionExenta es igual a 'E5' sólo deberá existir la agrupación IDOtro en el bloque Destinatario. |
¿Y si veo uno de estos códigos?
Mándanos la respuesta del envío. El registro rechazado se reintenta con los mismos datos hasta Dead Letter, así que no se arreglará solo.
Sigue leyendo
Comprobado en el código del módulo (versión 20.0) y en las fuentes enlazadas
Fuentes
- www.agenciatributaria.es/static_files/AEAT_Desarrolladores/EEDD/IVA/VERI-FACTU/Validacione
- Código del módulo: flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_aeat_client.py
- Código del módulo: flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_cadena.py
- Código del módulo: flexigo_spain_verifactu 20.0 (aa2ea3d2): models/verifactu_cola_envio.py
- Código del módulo: flexigo_spain_verifactu 20.0 (aa2ea3d2): data/verifactu_error_catalogue.xml
- prewww2.aeat.es/static_files/common/internet/dep/aplicaciones/es/aeat/tikeV1.0/cont/ws/err
