Cómo verlos en Odoo
Cuando KSeF rechaza la petición, l10n_pl_edi en Odoo 18, 19 y 20 enseña en la factura «Error when sending invoices to the KSeF» y, debajo, «KSeF API Error: » con la respuesta tal como llegó, exceptionCode incluido. En la 18 y la 19 en polaco: «Podczas wysyłania faktur do KSeF wystąpił błąd» y «Błąd API KSeF: …». Si KSeF se niega ya al abrir la sesión, el mensaje empieza por «Failed to open KSeF session: ». La factura no recibe estado KSeF, así que, una vez corregida, la envías igual que antes.

Códigos, textos y qué hacer
| Código | Texto de KSeF | Qué hacer |
|---|---|---|
| 21405 | «Błąd walidacji danych wejściowych.» (error de validación de los datos de entrada), details del validador | Lee los details; el ejemplo de la documentación es «Wskazany kod formularza nie jest wspierany.» (código de formulario no admitido). |
| 21001 | «Nieczytelna treść.» (contenido ilegible), details con una descripción | KSeF no pudo leer la petición; documentado en la API 2.9.0 y devuelto también antes. |
| 21155 | «Przekroczono dozwoloną liczbę faktur w sesji.» (demasiadas facturas en la sesión) | Una sesión admite hasta 10 000 facturas; hace falta una sesión nueva. |
| 21173 | «Brak sesji o wskazanym numerze referencyjnym.» (no hay sesión con esa referencia) | KSeF no conoce la sesión guardada en la empresa; Odoo no la cambia por su cuenta (abajo). |
| 21180 | «Status sesji nie pozwala na wykonanie operacji.» (el estado de la sesión no lo permite), p. ej. «Status sesji {code} uniemożliwia wysyłkę faktur.» | La sesión se cerró o caducó entre la comprobación y el envío. |
| 21184 | «Sesja tymczasowo niedostępna.» (sesión no disponible por ahora), con details de mantenimiento | KSeF aconseja probar más tarde o abrir otra sesión. |
| 21402 | «Nieprawidłowy rozmiar pliku.» (tamaño de fichero incorrecto) | El tamaño de la petición no cuadra con el contenido. |
| 21403 | «Nieprawidłowy skrót pliku.» (huella de fichero incorrecta) | La huella SHA-256 no cuadra con el contenido. |
| 21166 | «Korekta techniczna niedostępna.» (corrección técnica no disponible) | Va de la corrección técnica de una factura offline. |
| 21167 | «Status faktury nie pozwala na korektę techniczną.» (el estado de la factura no permite corrección técnica) | Igual: no hay corrección técnica para una factura procesada bien. |
La sesión en Odoo
Odoo guarda el número de la sesión interactiva en la empresa. Antes de enviar pregunta a KSeF por su estado: si es 100, sesión abierta, la sigue usando; si no, abre otra con el formulario FA (3) 1-0E. Por eso el 21180 suele desaparecer en el intento siguiente. Con el 21173 es distinto: en el envío siguiente Odoo pregunta por esa misma sesión, recibe el mismo error («Failed to check KSeF session: …») y no abre otra. La sesión guardada solo se borra quitando el certificado KSeF en los ajustes y guardando, y volviendo a añadir el certificado después. Esto sale del código de Odoo; no lo hemos probado contra KSeF. Ante un 21184, KSeF sugiere una sesión nueva, pero Odoo solo la abre cuando la guardada deja de tener el estado 100; si el error se repite, espera, como aconseja el mensaje.
Los códigos 21402 y 21403 van de cálculos que hace el propio programa que envía: Odoo calcula la huella y el tamaño de la factura antes y después de cifrarla. Con un Odoo estándar no salen de los datos de la factura. Odoo no envía correcciones técnicas de facturas offline, así que el 21166 y el 21167 vienen de otro programa.
Antes de avisar del problema
- Copia el mensaje entero de Odoo, con el JSON que sigue a «KSeF API Error:».
- Apunta el código y el texto de details.
- Mira si el error afecta a una factura o a todas las que se están enviando.
- Mira si pasa en producción o en el entorno de pruebas.

Estados de la propia sesión: 440 y 445
La sesión interactiva también tiene estado. El 440 «Sesja anulowana» (sesión anulada) con details «Nie przesłano faktur» significa que en la sesión no se envió ninguna factura, y el 445 «Błąd weryfikacji, brak poprawnych faktur», que ninguna pasó la verificación. Odoo solo mira si la sesión tiene el estado 100, así que no los enseñará; busca la causa en los estados de las facturas, como el 450.
Nuestro módulo, Poland KSeF 2.0 Validator, no envía facturas ni ve estos códigos; con la suscripción a FlexigoTech Cloud, si pulsas «Validate FA(3) (FlexigoTech Cloud)» antes de enviar la factura, revisa el fichero FA(3) contra el esquema. Ese resultado no frena el envío de l10n_pl_edi: una factura «Not valid» sale igual si la envías.
Sigue leyendo
Comprobado en el código del módulo (versión 20.0) y en las fuentes enlazadas
Fuentes
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/open-api.json
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/api-changelog.md#
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/api-changelog.md#
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/faktury/weryfikac
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/faktury/weryfikac
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/api-changelog.md
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/l10n_pl_edi/i18n
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- Código del módulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/account_move_views.xml
