Quando o Odoo inicia sessão
O Odoo autentica-se em dois momentos: quando guarda o certificado KSeF com a sua chave privada nas definições, e na ação agendada «Refresh KSeF tokens», que repete o início de sessão completo a cada 6 dias. O contexto é o NIP da empresa, por isso o NIF da empresa tem de começar por PL. O desafio (challenge) do KSeF é válido durante 10 minutos.

POST /auth/xades-signature.Os códigos e os seus textos
| Código | Texto do KSeF |
|---|---|
| 9101 | «Nieprawidłowy dokument.» (documento inválido) |
| 9102 | «Brak podpisu.» (falta a assinatura) |
| 9103 | «Przekroczona liczba dozwolonych podpisów.» (demasiadas assinaturas) |
| 9105 | «Nieprawidłowy podpis.» (assinatura inválida) |
| 21111 | «Nieprawidłowe wyzwanie autoryzacyjne.» (desafio de autorização inválido) |
| 21115 | «Nieprawidłowy certyfikat.» (certificado inválido) |
| 21117 | «Nieprawidłowy identyfikator podmiotu dla wskazanego typu kontekstu.» (identificador de entidade inválido para o tipo de contexto indicado) |
| 21217 | «Nieprawidłowe kodowanie znaków.» (codificação de caracteres inválida) |
| 21401 | «Dokument nie jest zgodny ze schemą (xsd).» Aqui trata-se do XML de início de sessão, não da fatura. |
| 21406 | «Konflikt podpisu i typu uwierzytelnienia.» (conflito entre a assinatura e o tipo de autenticação) |
| 460 | «Uwierzytelnianie zakończone niepowodzeniem z powodu błędu certyfikatu», com details: «Nieważny certyfikat», «Błąd weryfikacji łańcucha certyfikatów», «Niezaufany łańcuch certyfikatów», «Certyfikat odwołany», «Certyfikat zawieszony» ou «Niepoprawny certyfikat» (caducado, erro na cadeia, cadeia não fiável, revogado, suspenso, incorreto). |
Os dez primeiros chegam de imediato, como resposta HTTP 400 à assinatura. O estado 460 chega depois, ao consultar o estado do início de sessão. Atenção à própria especificação: os exemplos desse pedido indicam, pelos mesmos motivos, o código 400 com a descrição «Uwierzytelnianie zakończone niepowodzeniem», enquanto a sua tabela de estados indica 460. Importa mais o texto de details do que o número.
O que o Odoo não mostra
Se a assinatura falhar, o Odoo escreve «Failed to authenticate with XAdES:» seguido do texto da exceção da biblioteca requests, do tipo «400 Client Error: Bad Request for url: …/auth/xades-signature». O código da tabela não chega ao ecrã: o Odoo só aproveita o corpo da resposta quando o objeto de resposta é «verdadeiro», e no requests uma resposta com código de 400 a 599 é falsa. O mesmo acontece ao pedir o desafio, ao consultar o estado e ao trocar os tokens.
Com o estado 460, o Odoo escreve «KSeF Authentication failed with status 460: …» com a descrição e sem os details (em polaco na 18 e na 19: «Uwierzytelnianie KSeF nie powiodło się z kodem błędu 460: …»).
Se a renovação a cada 6 dias falhar, deixa apenas rasto no registo do servidor. O token de atualização do KSeF dura até 7 dias; depois, o envio termina com «Failed to refresh KSeF access token. You may need to re-authenticate manually.».
A lista de credenciais do nosso módulo

O Poland KSeF 2.0 Validator tem em KSeF › Configuration › Credentials uma lista de certificados KSeF, tokens, selos e assinaturas qualificadas com os dias que lhes restam: a laranja com 30 dias ou menos e a vermelho quando já caducados. A data de caducidade é escrita por quem regista a entrada. O módulo não lê o certificado das definições do Odoo nem o seu estado no KSeF, por isso não assinalará um certificado revogado ou suspenso.
O que fazer
- Verifique nas definições que o registo escolhido é um certificado KSeF com a sua chave privada.
- Reveja as datas de validade e se o certificado foi revogado ou suspenso no KSeF.
- Confirme que o NIF da empresa começa por PL e é o NIP para o qual o certificado foi emitido.
- Volte a guardar o certificado nas definições. Se o erro voltar e o Odoo só mostrar «400 Client Error», peça que se leia a resposta do KSeF com o seu código.
Continue a ler
Verificado no código do módulo (versão 20.0) e nas fontes indicadas
Fontes
- Código do módulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): i18n/pl.po
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/open-api.json
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/uwierzytelnianie.
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- github.com/odoo/odoo/blob/2982b5f44af03fae6a9888f20632c1cc19f623ba/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/4d2d4b5895db70596863df941d9a1f0beeb117f8/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/psf/requests/blob/v2.32.5/src/requests/models.py#L730
- 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
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/data
- github.com/CIRFMF/ksef-api/blob/ce3670ea042de380039de4c5849fd6455811b292/uwierzytelnianie.
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/tool
- github.com/odoo/odoo/blob/2fec20391a8a61ea3a3bf15e9f24d59dba910a8d/addons/l10n_pl_edi/mode
- Código do módulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): views/ksef_credential_views.xml
- Código do módulo: flexigo_poland_ksef_2_0_e_invoice_connector_and_migrati 20.0 (ba7c60f1): models/ksef_credential.py
