Brazilian Account Installment Renegotiation

l10n_br_account_renegotiation
REPOSITORY
REPOSITORYOCA/l10n-brazil
GIT
GIThttps://github.com/OCA/l10n-brazil.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/l10n-brazil/tree/16.0/l10n_br_account_renegotiation
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYLocalization
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo Community Association (OCA), Akretion
MAINTAINERS
MAINTAINERSOdoo Community Association (OCA), Akretion
COMMITTERS
COMMITTERSRaphaël Valyi, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/l10n-brazil
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:11:56
ODOO DEPENDENCIES
ODOO DEPENDENCIES OCA/bank-payment:
    - account_payment_partner
    - account_payment_mode
odoo/odoo:
    - account
    - base_setup
    - base
    - web
    - product
    - mail
    - bus
    - web_tour
    - uom
    - analytic
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - digest
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows renegotiating payment installments on posted invoices
without having to reset them to draft.

In Brazilian fiscal scenarios, it's common to need to adjust payment due
dates and amounts after an invoice (NFe) has been validated. This module
provides a wizard to modify the payment terms while keeping the fiscal
document unchanged.

Features:

  - Renegotiate payment installments on posted invoices
  - Modify due dates and amounts while keeping the total unchanged
  - Re-generate all installments from the payment term if needed
  - Edit the payment mode on installments (supports heterogenous payment modes)
  - Automatically logs changes in the invoice's chatter
  - Does not affect the fiscal document (NFe)

Code Analysis

Views touched (2)
XML IDNameModelTypeStatus
view_installment_renegotiation_wizard_form account.installment.renegotiation.wizard.form account.installment.renegotiation.wizard form New
view_move_form_renegotiation account.move.form.renegotiation account.move xpath Inherits account.view_move_form
Models touched (3)

New fields (9)
  • company_id Many2one → res.company
    comodel_name='res.company' readonly=True related='move_id.company_id'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='move_id.currency_id'
  • difference Monetary
    compute='_compute_totals' currency_field='currency_id' help='Difference between original and new totals (must be zero)'
  • line_ids One2many → account.installment.renegotiation.wizard.line
    comodel_name='account.installment.renegotiation.wizard.line' inverse_name='wizard_id' string='Installments'
  • move_id Many2one → account.move
    comodel_name='account.move' ondelete='cascade' readonly=True required=True string='Invoice'
  • new_total Monetary
    compute='_compute_totals' currency_field='currency_id' help='Total amount of new installments'
  • original_total Monetary
    compute='_compute_totals' currency_field='currency_id' help='Total amount of unreconciled installments before renegotiation'
  • payment_term_id Many2one → account.payment.term
    comodel_name='account.payment.term' help='Select a payment term to automatically regenerate the installments.' string='New Payment Term'
  • starting_date Date
    help="Base date for computing the new payment term. Leave as the Invoice Date for corrections, or change to today's date for debt renegotiations."
Public methods (2)
  • action_apply(self)
    Apply the renegotiation to the invoice.
  • create(self, vals_list)
    @api.model_create_multi
    Override create to auto-populate fields and installment lines.

New fields (7)
  • amount Monetary
    currency_field='currency_id' required=True
  • company_id Many2one
    related='wizard_id.company_id'
  • currency_id Many2one → res.currency
    comodel_name='res.currency' readonly=True related='wizard_id.currency_id'
  • date_maturity Date
    required=True string='Due Date'
  • original_line_id Many2one → account.move.line
    comodel_name='account.move.line' help='The original invoice line this installment is based on (if any)' readonly=True string='Original Line'
  • payment_mode_id Many2one → account.payment.mode
    comodel_name='account.payment.mode' domain="[('company_id', '=', company_id)]" string='Payment Mode'
  • wizard_id Many2one → account.installment.renegotiation.wizard
    comodel_name='account.installment.renegotiation.wizard' ondelete='cascade' required=True string='Wizard'
Public methods (0)

No public methods.

New fields (1)
  • can_renegotiate_installments Boolean
    compute='_compute_can_renegotiate_installments' help='Technical field to determine if installment renegotiation is available'
Public methods (1)
  • action_renegotiate_installments(self)
    Open the installment renegotiation wizard. Only available for posted invoices with unreconciled payment_term lines.
STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/l10n-brazil
PULL REQUEST
PULL REQUEST[18.0][MIG] l10n_br_account_renegotiation (#4498)