Introdução
No Odoo, os modelos definem como os dados são estruturados e armazenados na base de dados. Cada pedaço de dados empresariais com o qual você trabalha, desde pedidos de venda a faturas e lançamentos de diário, vive em um modelo.
Compreender os modelos do Odoo é essencial tanto para desenvolvedores quanto para consultores funcionais. Os modelos são a base da arquitetura de dados do Odoo. Eles definem os campos do Odoo, relacionamentos e lógica de negócios.
Este artigo foca em um dos modelos mais importantes na contabilidade do Odoo: account.move.line. Quer você esteja construindo relatórios personalizados, integrando sistemas externos ou configurando fluxos de trabalho de reconciliação, você trabalhará com este modelo.
O que é o modelo account.move.line
O modelo account.move.line representa linhas individuais de lançamentos contábeis no Odoo. Cada linha é um débito ou crédito em um lançamento contábil. Juntas, as linhas de um lançamento contábil devem equilibrar: o total de débitos deve ser igual ao total de créditos.
Este modelo no Odoo é utilizado pelo módulo de Contabilidade. É o filho de account.move, que representa o próprio lançamento contábil (faturas, contas a pagar, extratos bancários, lançamentos contábeis). Cada lançamento contábil possui uma ou mais linhas.
O modelo é definido no módulo de conta. Outros módulos o estendem através da herança de modelos do Odoo. Vendas adiciona detalhes da linha de fatura. Compras adiciona detalhes da linha de conta a pagar. Contabilidade analítica adiciona distribuição analítica. Cada módulo adiciona o que precisa sem duplicar a estrutura central.
Campos-chave no modelo
Aqui estão os campos mais importantes do Odoo no modelo account.move.line. Compreender estes ajudará você a trabalhar de forma eficaz com lançamentos contábeis e dados contábeis.
1. nome
Tipo: Char. Este campo armazena o rótulo ou descrição da linha. É obrigatório e tipicamente exibido nas visualizações e relatórios de lançamentos contábeis. Para linhas de fatura, muitas vezes vem do nome do produto ou de uma descrição personalizada.
2. move_id
Tipo: Many2one (account.move). Liga a linha ao seu lançamento contábil pai. Cada linha pertence exatamente a um lançamento. Esta é a principal relação no modelo.
3. account_id
Tipo: Many2one (account.account). A conta à qual esta linha é lançada. Obrigatório. Deve ser uma conta não visualizável e não encerrada. Usada para relatórios e agrupamentos do plano de contas.
4. débito
Tipo: Float. O valor do débito. O padrão é 0.0. Para cada linha, ou o débito ou o crédito é definido, não ambos. Débitos aumentam contas de ativos e despesas.
5. crédito
Tipo: Float. O montante do crédito. O padrão é 0.0. Os créditos aumentam as contas de passivo, patrimônio líquido e receita. A soma de todos os débitos deve ser igual à soma de todos os créditos em um movimento.
6. saldo
Tipo: Float. Um campo calculado: débito menos crédito. Representa o efeito líquido da linha. Positivo para débitos, negativo para créditos. Usado em relatórios e reconciliações.
7. partner_id
Tipo: Many2one (res.partner). O cliente, fornecedor ou outra parte vinculada a esta linha. Usado para rastreamento de contas a receber e a pagar, relatórios de envelhecimento e reconciliação.
8. data
Tipo: Data. A data efetiva da linha. Geralmente herdada do movimento pai. Usado para fechamento de períodos, relatórios e envelhecimento.
9. data_vencimento
Tipo: Data. A data de vencimento para pagamento. Relevante para contas a receber e a pagar. Usado para relatórios de envelhecimento e agendamento de pagamentos.
10. currency_id
Tipo: Many2one (res.currency). A moeda da linha. Pode diferir da moeda da empresa para lançamentos em múltiplas moedas.
11. amount_currency
Tipo: Float. O montante na moeda da linha. Usado quando a entrada do diário está em uma moeda estrangeira. Juntamente com currency_id, permite a contabilidade em múltiplas moedas.
12. quantity
Tipo: Float. Quantidade opcional. Usado para linhas baseadas em produtos (faturas, contas). Permite relatórios baseados em quantidade e cálculos de preço unitário.
13. product_id
Tipo: Many2one (product.product). O produto vinculado a esta linha. Preenchido quando a linha vem de uma ordem de venda, ordem de compra ou linha de fatura.
14. product_uom_id
Tipo: Many2one (uom.uom). A unidade de medida para a quantidade. Usado com product_id para exibição e conversão adequada da quantidade.
15. price_unit
Tipo: Float. O preço unitário. Usado com a quantidade para calcular montantes em linhas de fatura e conta.
16. tax_ids
Tipo: Many2many (account.tax). Impostos aplicados a esta linha. Odoo cria linhas adicionais para montantes de impostos ao postar. Usado para cálculos de IVA e outros impostos.
17. tax_line_id
Tipo: Many2one (account.tax). Para linhas de imposto, isto refere-se ao imposto que gerou a linha. Distinque linhas de imposto de linhas de conta regulares.
18. analytic_account_id
Tipo: Many2one (account.analytic.account). A conta analítica para rastreamento de custos e receitas. Usada quando a contabilidade analítica está ativada.
19. analytic_distribution
Tipo: Json ou Texto. Armazena a distribuição analítica entre várias contas analíticas. Substitui analytic_account_id em versões mais recentes do Odoo ao usar planos analíticos.
20. ref
Tipo: Char. Geralmente relacionado ao movimento pai. Referência externa ou nota. Exibido em relatórios e usado para correspondência de reconciliação.
21. narration
Tipo: Texto. Geralmente relacionado ao movimento pai. Nota interna ou memo. Não impresso em documentos voltados para o cliente por padrão.
22. journal_id
Tipo: Many2one (account.journal). O diário do movimento pai. Usado para filtragem e relatórios por diário.
23. company_id
Tipo: Many2one (res.company). A empresa. Em configurações de múltiplas empresas, cada linha pertence a uma empresa. Afeta a visibilidade e consolidação dos registros.
24. reconciled
Tipo: Booleano. Indica se a linha foi totalmente reconciliada. Usado para filtrar itens não reconciliados em visualizações de reconciliação.
25. full_reconcile_id
Tipo: Many2one (account.full.reconcile). Liga todas as linhas que foram reconciliadas juntas. Permite rastrear grupos de reconciliação.
26. payment_id
Tipo: Many2one (account.payment). Para linhas de pagamento, liga ao registro de pagamento. Usado ao reconciliar faturas com pagamentos.
27. statement_id
Tipo: Many2one (account.bank.statement). Para linhas de extrato bancário, liga ao extrato. Usado na reconciliação bancária.
28. statement_line_id
Tipo: Many2one (account.bank.statement.line). Liga à linha específica do extrato bancário. Usado ao corresponder movimentos a transações bancárias.
29. display_type
Tipo: Seleção. Pode ser 'line_section' ou 'line_note' para cabeçalhos de seção e notas na entrada do diário. Estas linhas não têm débito ou crédito e são apenas para exibição.
30. create_date
Tipo: Data e hora. Armazena quando o registro foi criado. Gerido automaticamente pelo Odoo. Útil para auditoria.
31. write_date
Tipo: Data e hora. Armazena quando o registro foi modificado pela última vez. Gerido automaticamente. Ajuda a rastrear mudanças ao longo do tempo.
Como este modelo é utilizado em fluxos de trabalho empresariais
1. Faturação de Clientes
Quando você confirma uma fatura, o Odoo cria registros account.move.line. As linhas de receita vão para contas de receita. As linhas a receber vão para a conta a receber do cliente. Linhas de imposto são criadas para cada imposto. O partner_id liga ao cliente para envelhecimento e reconciliação.
2. Faturas de Fornecedores
As faturas criam linhas para despesas, IVA de entrada e contas a pagar. Cada linha tem um account_id, débito ou crédito, e partner_id. A estrutura espelha as faturas de clientes, mas com tipos de conta diferentes.
3. Reconciliação Bancária
As linhas do extrato bancário são correspondidas às linhas de movimento através do statement_line_id. Quando você reconcilia, o Odoo liga as linhas através do full_reconcile_id. O campo reconciliado é definido como Verdadeiro.
4. Lançamentos Manuais
Os utilizadores criam lançamentos com várias linhas. Cada linha tem uma conta, débito ou crédito, e um parceiro opcional. O Odoo impõe que os débitos sejam iguais aos créditos antes da publicação.
5. Relatórios Analíticos e de Custos
Quando a contabilidade analítica está ativada, as linhas têm analytic_account_id ou analytic_distribution. Os relatórios agrupam por conta analítica para mostrar custos e receitas por projeto, departamento ou outra dimensão.
Como os desenvolvedores estendem este modelo
Os desenvolvedores estendem account.move.line usando vários padrões. A herança de modelo do Odoo é o principal mecanismo.
Herança de Modelo
Use _inherit = 'account.move.line' para estender o modelo. Adicione novos campos do Odoo, sobreponha métodos ou adicione restrições. O modelo herdado no Odoo mantém suas alterações em um módulo separado para atualizações fáceis.
Adicionando Campos
Defina novos campos do Odoo no seu modelo herdado. Use o tipo de campo correto: Char, Many2one, Boolean, Integer, Text, Selection. Considere campos dependentes da empresa para multi-empresa. Tenha cuidado com campos computados e suas dependências.
Extensões Python
Sobreponha create, write ou unlink para adicionar lógica. Use super() para chamar o original. Evite quebrar a invariância de débito igual a crédito. O modelo API no Odoo expõe esses métodos para integrações externas.
Odoo Studio
Odoo Studio permite adicionar campos a account.move.line sem código. Bom para personalizações rápidas, como etiquetas ou tags extras. Para lógica complexa ou regras de reconciliação, módulos personalizados são mais fáceis de manter.
Melhores práticas
- Nunca crie ou modifique linhas de movimento diretamente sem passar pelo movimento. Use a API do movimento (por exemplo, line_ids) para que o Odoo possa manter a consistência e executar todas as verificações.
- Ao construir relatórios, filtre por move_id.state = 'posted' para excluir rascunhos e entradas canceladas.
- Use account_id com o tipo de conta correto (a receber, a pagar, etc.) para um comportamento adequado de envelhecimento e reconciliação.
- Ao integrar via API, crie o movimento primeiro, depois adicione linhas. Certifique-se de que os débitos sejam iguais aos créditos antes de postar.
- Para campos personalizados, use o prefixo
x_ou um prefixo de módulo para evitar conflitos com versões futuras do Odoo.
Erros comuns
- Definindo tanto débito quanto crédito na mesma linha. Cada linha deve ter ou débito ou crédito, não ambos.
- Criando movimentos não equilibrados. A soma dos débitos deve ser igual à soma dos créditos. O Odoo valida isso ao postar.
- Modificando linhas postadas sem usar o fluxo de reversão ou ajuste apropriado. As entradas postadas devem ser ajustadas via novos movimentos, não edições diretas.
- Esquecendo de definir partner_id em linhas a receber e a pagar. Isso quebra relatórios de envelhecimento e reconciliação.
- Substituindo métodos principais sem chamar super(). Isso pode quebrar a reconciliação, bloqueio ou outros módulos.
Conclusão
O modelo account.move.line é central para a Contabilidade do Odoo. Ele armazena cada débito e crédito em lançamentos contábeis, faturas e contas a pagar. Compreender seus campos e como os módulos o estendem ajudará você a configurar, personalizar e integrar o Odoo de forma eficaz.
Seja você um consultor funcional mapeando fluxos de trabalho contábeis ou um desenvolvedor construindo relatórios e integrações personalizados, um sólido entendimento de account.move.line economizará tempo e evitará erros.
Precisa de ajuda com a sua implementação do Odoo?
A Dasolo ajuda empresas a implementar, personalizar e otimizar o Odoo. Especializamo-nos em integrações de API e desenvolvimento Odoo. Nossa equipe tem ampla experiência com a arquitetura de dados do Odoo e modelos como account.move.line.
Se você precisar de ajuda com sua implementação do Odoo, módulos personalizados ou integrações, estamos aqui para ajudar. Agende uma demonstração para discutir seu projeto.