Saltar para o conteúdo principal
Professional Services Automation (PSA)

Erros do PSA for Odoo: um caso de exemplo, mensagem a mensagem

Tirando o genérico Access denied, cada mensagem de erro do Professional Services Automation (PSA) for Odoo diz o que falta: um perfil (como Operations Directors para importar tarifas), um requisito do marco (anexo, aprovação interna ou aceitação do cliente) ou um estado concreto do contrato, da ordem de alteração ou do pedido. Resolve-se cumprindo essa condição, não tentando de novo. Em baixo vê-se tudo com uma consultora inventada que percorre o fluxo e encontra cada mensagem.

FlexigoTech · Responsável: Víctor Gómez · Atualizado em 4 de novembro de 2026

O essencial

Versões
Odoo 17, 18 e 19
Verificado
no código do módulo, versão 19.0 · nas fontes indicadas no fim
Leitura
7 min

Uma consultora inventada que põe o PSA a funcionar

Exemplo Caso ilustrativo: a empresa e os seus dados são inventados para explicar o fluxo.

A Estúdio Ribera é uma consultora inventada que acabou de instalar o Professional Services Automation (PSA) for Odoo. A Marta, responsável de operações, quer carregar as tarifas, deixar pronto um contrato com marcos e começar a trabalhar com um cliente. Pelo caminho surgem-lhe boa parte das mensagens de erro do módulo. Revemo-las pela ordem em que lhe aparecem: o texto literal, o que significa e o que faz para avançar.

Antes de mais, a Marta abre as definições do módulo. Aí não aparece nenhum erro.

Definições do Odoo na secção PSA com o campo WIP Account vazio e a caixa de configuração por marcar
As definições do PSA tal como a Marta as encontra, com WIP Account vazio.

Se quiser rever que menus o módulo acrescenta e por onde passa cada registo, tem tudo em como funciona o PSA por dentro.

Tarifas: quem pode importá-las e quem pode alterá-las

A primeira coisa que a Marta tenta é importar a tarifa da consultora. O módulo trava-a com Only Operations Directors can import rate cards. A mensagem é clara: importar rate cards cabe ao perfil Operations Directors, e o utilizador da Marta não o tem. Há duas saídas: a importação é feita por alguém com esse perfil ou quem gere os utilizadores do Odoo atribui-lho, se fizer sentido.

Lista de Rate Cards do módulo PSA com um único registo ativo, Standard Rate Card 2024 (Demo), em EUR
A lista de Rate Cards, com dados de demonstração: só aparece Standard Rate Card 2024 (Demo).

Com a tarifa carregada, a Marta quer aplicar a um cliente uma tarifa diferente. Aparece Only PSA Operations users can override billing rates.: alterar tarifas de faturação está reservado aos utilizadores de PSA Operations. Um colega com esse perfil tenta, deixa o motivo em branco e recebe A reason is mandatory for rate overrides. A solução é escrever o motivo da alteração e voltar a guardar.

Se em algum momento vir apenas Access denied, a mensagem não diz que permissão falta. O mais prático é anotar o que estava a fazer nesse momento e pedir a quem gere as permissões que o verifique.

Lista Utilization do módulo PSA com colunas de data, funcionário, projeto, horas, tarifa, montante faturável, estado WIP e aprovação do cliente
A lista Utilization, com a tarifa e o montante faturável em colunas.

Marcos: o que cada um exige antes de ser dado como atingido

O contrato da Estúdio Ribera tem um primeiro marco, «Análise». A Marta marca-o como atingido e o módulo responde com Milestone '%s' requires a deliverable attachment before it can be marked as reached. (no ecrã, em vez de %s aparece o nome do marco). Esse marco exige um entregável em anexo antes de fechar: a Marta anexa o documento e volta a marcá-lo.

A segunda tentativa dá Milestone '%s' requires internal approval before it can be marked as reached. Agora o que falta é a aprovação interna do marco. Enquanto não a tiver, não pode ser marcado como atingido.

Com a aprovação interna feita, aparece Milestone '%s' requires client acceptance before it can be marked as reached. Current state: %s. Falta a aceitação do cliente, e a mensagem acrescenta o estado atual (Current state).

Quando a Marta tenta pedir essa aprovação ao cliente, depara-se com The customer of milestone '%s' has no portal access: grant it first, the approval page needs a login. A página de aprovação exige que o cliente inicie sessão e esse cliente não tem acesso ao portal. É preciso dar-lhe acesso ao portal primeiro e repetir a ação.

A última mensagem de marcos funciona ao contrário: Milestone '%s' does not wait for a client approval. Aparece quando se tenta registar uma aprovação do cliente num marco que não está à espera dela. Verifique se escolheu o marco errado.

Percurso pela lista Milestones Roll-up, as categorias não faturáveis, as definições do PSA e a lista Utilization
Os ecrãs do módulo que a Marta percorre: marcos com a caixa de atingido, categorias não faturáveis, definições e Utilization.

Ordens de alteração: o estado decide o que se pode fazer

A meio do projeto, o cliente pede para alargar o âmbito e a Marta cria uma ordem de alteração. Submete-a e, sem reparar, volta a submetê-la: Only draft change orders can be submitted. Só se submetem ordens em rascunho, e esta já não estava.

Depois, um colega tenta aprová-la e recebe User %(name)s has no pending approval step on this change order. A mensagem indica o nome do utilizador e diz que não tem nenhum passo de aprovação pendente nessa ordem. Tem de aprovar quem tiver esse passo pendente.

Por fim, a Marta quer aplicar a ordem antes de o cliente responder: Only client-accepted change orders can be implemented. Só se implementam ordens que o cliente já aceitou, por isso resta esperar por essa aceitação.

Três logs que não admitem alterações

A Marta vê uma entrada num dos logs do módulo e tenta corrigi-la. Há três mensagens deste tipo:

  • NTE audit log is immutable.
  • Portal action log is immutable.
  • Rate override log is immutable.

A mensagem diz tudo: esse log é imutável. Não é uma falha de permissões que se resolva com outro perfil.

Contratos e exportações: os estados que o módulo verifica

No fecho do ano, a Marta quer terminar um contrato e arquivar outro. O primeiro dá Only active or suspended contracts can be terminated.: só se terminam contratos ativos ou suspensos. O segundo, Only terminated or suspended contracts can be archived.: só se arquivam os terminados ou suspensos. O contrato que queria arquivar continuava ativo, por isso primeiro termina-o e depois arquiva-o.

Falta mais uma mensagem: Export can only be generated for pending or processing requests. A exportação só é gerada para pedidos pendentes ou em processamento. Se o pedido não estiver num desses estados, o módulo não a gera.

O que aprender com o caso da Estúdio Ribera

Cada tropeção da Marta resolveu-se lendo o final da mensagem: aí está o perfil em falta, o requisito do marco ou o estado necessário. Eis o resumo:

MensagemQuando apareceO que fazer
Only Operations Directors can import rate cardsAo importar rate cards sem esse perfilPedir a um Operations Director ou pedir o perfil
Only PSA Operations users can override billing rates.Ao alterar uma tarifa de faturação sem esse perfilPedir a um utilizador de PSA Operations
A reason is mandatory for rate overrides.Ao alterar uma tarifa sem motivoEscrever o motivo
Milestone '%s' requires a deliverable attachment...Ao marcar como atingido um marco sem entregávelAnexar o entregável
Milestone '%s' requires internal approval...Ao marcar como atingido um marco sem aprovação internaObter a aprovação interna
Milestone '%s' requires client acceptance...Ao marcar como atingido um marco sem aceitação do clienteEsperar pela aceitação; a mensagem mostra o estado atual
The customer of milestone '%s' has no portal access...O cliente do marco não tem acesso ao portalDar-lhe acesso ao portal e repetir
Only draft change orders can be submitted.Ao submeter uma ordem que não está em rascunhoVerificar o estado da ordem
Only client-accepted change orders can be implemented.Ao implementar uma ordem sem aceitação do clienteEsperar que o cliente a aceite
Only active or suspended contracts can be terminated.Ao terminar um contrato noutro estadoVerificar o estado do contrato
Only terminated or suspended contracts can be archived.Ao arquivar um contrato ativoTerminá-lo antes

Para deixar perfis, marcos e contratos bem preparados antes de estas mensagens aparecerem, veja a configuração inicial do módulo.

Como a FlexigoTech o pode ajudar

Na FlexigoTech implementamos Odoo 17, 18, 19 e 20 e desenvolvemos conectores e integrações à medida, por isso podemos ajudar a distribuir perfis, preparar marcos e analisar as mensagens que surjam no seu caso. O módulo está na Odoo Apps para 17, 18 e 19, a 9 € por versão do Odoo, pagamento único e sem IVA; o serviço local da FlexigoTech Cloud custa 29 €/mês ou 290 €/ano sem IVA (Pro: 58 €/mês ou 580 €/ano). Tem todos os detalhes na página do módulo e na sua página da Odoo Apps.

Continue a ler

Como funciona o Professional Services Automation (PSA) for Odoo por dentroMenus, ações agendadas e serviço externo do Professional Services Automation (PSA) for Odoo, explicados termo a termo para quem já usa o Odoo.Configurar o PSA for Odoo: definições, campos do projeto e a primeira semanaGuia para pôr a funcionar o Professional Services Automation (PSA) no Odoo 17, 18 e 19: definições, campos do projeto e o que rever na primeira semana.Professional Services Automation (PSA) for Odoo: como saber se se adequa à sua empresaO que cobre e o que não cobre o Professional Services Automation (PSA) for Odoo segundo a ficha, o que verificar antes de instalar e em que versões do Odoo existe.
Verificado no código do módulo (versão 19.0) e nas fontes indicadas

Fontes

  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): controllers/portal.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): controllers/rate_card_import.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/account_analytic_line_ext.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/project_milestone_ext.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_change_order.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_dsar_request.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_nte_audit_log.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_portal_action_log.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_rate_override_log.py
  • Código do módulo: flexigo_psa_premium 19.0 (9670343f): models/psa_retainer_contract.py
  • apps.odoo.com/apps/modules/19.0/flexigo_psa_premium
  • apps.odoo.com/apps/modules/17.0/flexigo_psa_premium
  • apps.odoo.com/apps/modules/18.0/flexigo_psa_premium
  • flexigotech.com/en/services.html
  • flexigotech.com/precios.html