Se alguma vez quis saber quem alterou um valor numa ficha do Odoo e quando o fez, existe uma funcionalidade simples que responde a essa dúvida.
No Odoo é possível registar alterações em campos concretos e anexar essas alterações diretamente na conversa (chatter) da ficha. Assim, a equipa acompanha a evolução dos dados sem ter de montar um sistema de auditoria à parte.
Quer esteja a mexer com campos via Odoo Studio ou a desenvolver módulos em Python, perceber como funciona o rastreio de campos é essencial para trabalhar corretamente com o modelo de dados. Este guia reúne o essencial para começar.
O que é o campo de rastreio no Odoo
No Odoo, o rastreio não é um tipo de campo distinto, mas sim uma opção que se activa numa coluna já existente — por exemplo, Char, Many2one, Selection, Integer ou Date. Quando um campo tem rastreio activo, cada alteração fica registada na conversa da ficha, indicando valor anterior, novo valor, data e utilizador responsável.
No ecrã isso aparece como uma entrada no histórico de mensagens da ficha. Por exemplo, numa oportunidade de vendas pode surgir automaticamente uma nota do tipo: “Estado alterado de Novo para Qualificado”, registada no instante da alteração.
A opção de rastreio está disponível na maioria dos tipos de campos padrão do Odoo e pode ser activada tanto em Odoo Studio como directamente em código Python, quando se desenvolvem módulos personalizados.
Que informação é guardada
Cada alteração rastreada gera um registo do tipo mail.message ligado ao documento. Esse registo inclui basicamente:
- o rótulo do campo que mudou,
- o valor anterior (antes da alteração),
- o valor novo (depois da alteração),
- a hora da modificação,
- e o utilizador que efetuou a alteração.
Esse histórico fica visível para quem tiver permissões de leitura da ficha, sem necessidade de configurações adicionais para além de activar o rastreio no campo.
Como funciona na prática
Para que o rastreio funcione, o modelo tem de herdar de mail.thread. Esse mixin fornece a infraestrutura de mensagens e registo que alimenta o chatter. Muitos modelos empresariais padrão — como sale.order, crm.lead, account.move ou stock.picking — já incluem mail.thread.
Quando um utilizador grava uma ficha com campos rastreados alterados, o Odoo compara valores antigos e novos e escreve automaticamente uma mensagem de log na conversa; não é preciso qualquer acção extra por parte do utilizador.
Comportamento técnico no ORM do Odoo
A nível técnico, o ORM do Odoo intercepta as operações de escrita no modelo. Quando um write() altera um campo com rastreio, o framework captura o valor anterior, executa a alteração e cria um mail.message descrevendo a diferença.
Em Python, activa-se o rastreio declarando tracking=True na definição do campo no ficheiro de modelos:
state = fields.Selection([('draft','Rascunho'),('confirmed','Confirmado')], tracking=True)
Também pode usar-se um número de prioridade de 1 a 10 para controlar a ordem de exibição quando vários campos rastreados mudam numa mesma gravação. Os números mais baixos aparecem primeiro na mensagem de log.
Exemplo: partner_id = fields.Many2one('res.partner', tracking=1) e priority = fields.Selection(tracking=10)
Interacção com registos relacionados
As alterações rastreadas ficam guardadas na própria ficha onde o campo existe; não se propagam automaticamente para registos relacionados. Se quiser rastreio noutros modelos, active-o separadamente em cada um deles.
Isto é intencional: o modelo de dados do Odoo mantém o historial junto do objecto alterado, facilitando a revisão sem ter de saltar entre vários registos associados.
Casos de uso empresarial
Cinco exemplos concretos onde o rastreio faz a diferença no dia a dia
1) Gestão do pipeline de vendas e CRM
Equipa de vendas precisa de saber quando uma oportunidade mudou de fase e quem fez essa alteração. Rastrear o campo stage_id no CRM fornece uma linha temporal completa de transições de estado.
Essa visibilidade permite identificar gargalos, apoiar análises de pipeline e orientar formação dos comerciais com base em factos e não em memórias vagas.
2) Aprovações em compras e facturação
Em contabilidade e compras, é frequente exigir registos de quem aprovou um documento e quando. Rastrear o campo state em ordens de compra ou faturas de fornecedor disponibiliza esse historial no chatter sem montar um sistema externo de auditoria.
Isto é particularmente relevante para empresas sujeitas a controlos financeiros ou auditorias internas.
3) Gestão de inventário e armazém
Quando quantidades ou localizações mudam sem explicação, campos rastreados em movimentos de stock ou produtos ajudam a localizar rapidamente a origem da discrepância.
Em vez de vasculhar logs dispersos ou interromper colegas, a resposta aparece directamente na conversa do documento relevante.
4) Qualidade dos dados de clientes
Se a equipa altera frequentemente dados de contacto, rastrear campos críticos como email, telefone ou pricelist_id no parceiro mantém um registo das mudanças dentro do CRM — útil para suporte ao cliente e auditorias de qualidade de dados.
5) Registos de RH e colaboradores
Rastrear alterações a cargo, departamento ou escalão salarial em fichas de colaboradores garante um historial transparente de mudanças, importante para conformidade e auditorias internas em muitos sectores.
Criar ou personalizar o campo de rastreio
Como activar o rastreio: duas abordagens principais
Através do Odoo Studio
O Odoo Studio permite activar rastreio em campos existentes sem escrever código. Abra o Studio na vista apropriada, seleccione o campo e ligue a opção “Track Changes” nas definições do campo.
A partir daí, todas as alterações futuras ao campo aparecerão automaticamente no chatter. É a via recomendada para administradores e utilizadores de negócio que querem personalizar sem envolver um programador.
Também pode activar o rastreio quando cria um campo personalizado no Studio, logo na fase de criação do campo.
Em código Python num módulo personalizado
Para desenvolvedores que criam ou estendem módulos, o tracking é adicionado directamente na definição do campo na classe do modelo — prática habitual em projectos de desenvolvimento Odoo.
O modelo deve ainda herdar de mail.thread para que o rastreio funcione. Exemplo mínimo:
from odoo import models, fields
class ProjectTask(models.Model):
_name = 'project.task'
_inherit = ['project.task', 'mail.thread']
x_client_priority = fields.Selection([
('low','Baixa'), ('medium','Média'), ('high','Alta')
], string='Prioridade do Cliente', tracking=True)
Este padrão é comum quando se estende um modelo existente. O campo funciona como qualquer outro, com a diferença de que cada alteração do seu valor passa a ficar registada automaticamente.
Nota importante para modelos totalmente novos
Se está a criar modelos personalizados do zero, assegure-se de incluir _inherit = ['mail.thread', 'mail.activity.mixin'] na definição do modelo. Sem estes mixins, o atributo tracking será ignorado e nada será registado no chatter.
Este pormenor costuma apanhar quem segue tutoriais pela primeira vez: o mixin é obrigatório para que o rastreio actue.
Boas práticas
Boas práticas para tirar partido do rastreio sem criar ruído
Só rastreie o que interessa
Activar rastreio em todos os campos gera demasiado ruído e dificulta encontrar o que é relevante. Concentre-se em campos com valor de auditoria: estados, responsável, datas chave e valores financeiros.
Use prioridades para organizar a leitura
Quando há muitos campos rastreados num mesmo modelo, defina prioridades (1–10) para controlar a ordem e agrupar as alterações de forma legível na mensagem de log.
Combine com controlo de acesso
O rastreio só vale se as regras de acesso estiverem bem definidas. Não faz sentido manter um historial se qualquer utilizador puder alterá-lo livremente. Garanta regras e permissões adequadas antes de depender do chatter como prova de auditoria.
Documente os campos rastreados
Registe claramente quais campos têm rastreio activo, sobretudo em projectos com vários desenvolvedores. Isto evita confusões em revisões de código e durante actualizações de módulos.
Teste antes de ir para produção
Verifique o comportamento do rastreio num ambiente de staging antes da produção. Alguns tipos de campo — especialmente computados ou relacionados — podem comportar-se de forma diferente quando rastreados.
Erros comuns a evitar
Armadilhas e erros frequentes
Esquecer de herdar de mail.thread
O erro mais habitual é não herdar de mail.thread. Nesse caso, o tracking passa despercebido: não há erros, mas também não surgem mensagens no chatter. Sempre confirme a cadeia de herança se o rastreio não aparecer.
Rastrear campos computados não armazenados
Campos computados só são rastreáveis se tiverem store=True. Um campo computado não armazenado não tem valor persistente para comparar, pelo que o rastreio será silenciosamente ineficaz.
Activar rastreio em excesso
A tentação de activar em tudo cria um chatter poluído. Seja seletivo e foque-se em campos com utilidade operacional ou de conformidade.
Contar com rastreio em operações fora do ORM
O rastreio é disparado pelo ORM quando se usa write(). Actualizações directas por SQL, importações em massa que bypassam o ORM ou chamadas de baixo nível podem não disparar o rastreio. Ao usar integrações ou operações em lote, confirme que as escritas passam pelo ORM.
Conflitos entre Studio e definições em código
Se um campo foi criado no Studio com rastreio e depois é alterado por código Python, podem surgir conflitos durante upgrades ou actualizações. Tenha cuidado ao misturar configurações de Studio com definições em módulos.
Perguntas frequentes
Posso rastrear um campo em qualquer modelo do Odoo?
Só é possível em modelos que herdem de mail.thread. Muitos modelos padrão já o fazem, mas modelos personalizados têm de declarar explicitamente esse mixin para suportarem rastreio.
Activar o rastreio afecta o desempenho?
O impacto é geralmente pequeno: cada alteração rastreada cria um mail.message, acrescentando uma sobrecarga leve ao write. Em modelos com volume muito elevado, pense bem quais campos rastrear para não multiplicar em excesso os registos de log.
Posso desactivar o rastreio sem perder o histórico já criado?
Sim. Desactivar o rastreio impede novos registos, mas as mensagens antigas mantêm‑se no chatter — o histórico capturado não é apagado automaticamente.
O rastreio funciona em Many2many?
Sim. Para campos Many2many o chatter mostra quais registos foram adicionados ou removidos da relação, em vez de um simples antes/depois. Funciona, mas a forma de apresentação é diferente de campos de valor simples.
Posso usar rastreio sem Odoo Studio?
Claro. O tracking é um parâmetro padrão em definições Python de campos no Odoo. Pode activá‑lo num módulo personalizado sem utilizar o Studio; o Studio só oferece uma interface visual para a mesma funcionalidade.
Resumo final
O rastreio é uma daquelas funcionalidades do Odoo que acrescenta muita utilidade sem configuração complexa. Activado nos campos certos, fornece uma trilha de auditoria fiável, reduz disputas sobre quem mudou o quê e melhora a governança dos dados.
Quer use o Studio para uma configuração rápida sem código, quer implemente o tracking em módulos Python como parte de um projecto de desenvolvimento Odoo, o resultado é o mesmo: visibilidade completa sobre a evolução dos dados da sua organização.
O segredo está em saber onde aplicar: concentre‑se nos campos que suportam decisões, aprovações e responsabilização nas suas workflows para obter o máximo benefício com o mínimo esforço.
Na Dasolo ajudamos empresas a implementar, personalizar e optimizar o Odoo às suas necessidades. Se precisa de apoio a desenhar o modelo de dados, activar rastreio nas suas workflows ou desenvolver módulos à medida, a nossa equipa pode ajudar.
Contacte‑nos para falarmos sobre a sua implementação Odoo. Contacte-nos e vamos definir juntos a melhor solução para o seu projecto.