odoo-addon-l10n-br-fiscal 16.0.5.4.0.1__py3-none-any.whl → 16.0.5.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of odoo-addon-l10n-br-fiscal might be problematic. Click here for more details.

@@ -1,3 +1,7 @@
1
+ .. image:: https://odoo-community.org/readme-banner-image
2
+ :target: https://odoo-community.org/get-involved?utm_source=readme
3
+ :alt: Odoo Community Association
4
+
1
5
  ========================
2
6
  Módulo fiscal brasileiro
3
7
  ========================
@@ -7,13 +11,13 @@ Módulo fiscal brasileiro
7
11
  !! This file is generated by oca-gen-addon-readme !!
8
12
  !! changes will be overwritten. !!
9
13
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10
- !! source digest: sha256:6f1a82a9cc3b79a3eec5f4c829f5e5d42b61562d50bf02cf5ca732cd6b40e62e
14
+ !! source digest: sha256:caf43d8fde54f6343f11a461630951996ba4ff0c5be27a01f162987c21d3ea0c
11
15
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
16
 
13
17
  .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
14
18
  :target: https://odoo-community.org/page/development-status
15
19
  :alt: Production/Stable
16
- .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
20
+ .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
17
21
  :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
18
22
  :alt: License: AGPL-3
19
23
  .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--brazil-lightgray.png?logo=github
@@ -10,7 +10,7 @@
10
10
  "maintainers": ["renatonlima", "rvalyi"],
11
11
  "website": "https://github.com/OCA/l10n-brazil",
12
12
  "development_status": "Production/Stable",
13
- "version": "16.0.5.4.0",
13
+ "version": "16.0.5.4.1",
14
14
  "depends": [
15
15
  "product",
16
16
  "uom_alias",
@@ -12,6 +12,23 @@ from odoo.osv import expression
12
12
 
13
13
 
14
14
  class DataAbstract(models.AbstractModel):
15
+ """
16
+ Abstract base model for fiscal master data in Brazilian localization.
17
+
18
+ This model provides common structure and functionality for fiscal
19
+ data entities (NCM, CFOP, CST, etc.). It includes:
20
+ - Standard fields: `code`, `name`, `active`, and a computed
21
+ `code_unmasked` (for searching codes without punctuation).
22
+ - Default ordering by `code`.
23
+ - Enhanced search: Modifies search views and `_name_search`
24
+ to allow searching by `code`, `code_unmasked`, and `name`
25
+ simultaneously.
26
+ - Standardized display name format in `name_get`
27
+ (`<code> - <name>`).
28
+ - Permission control for archiving/unarchanging, restricted
29
+ to users in 'l10n_br_fiscal.group_manager' group.
30
+ """
31
+
15
32
  _name = "l10n_br_fiscal.data.abstract"
16
33
  _description = "Fiscal Data Abstract"
17
34
  _order = "code"
@@ -46,6 +63,15 @@ class DataAbstract(models.AbstractModel):
46
63
  def fields_view_get(
47
64
  self, view_id=None, view_type="form", toolbar=False, submenu=False
48
65
  ):
66
+ """
67
+ Modify search view architecture to enhance 'code' field filtering.
68
+
69
+ Intercept the search view definition, altering `filter_domain`
70
+ for the 'code' field. This lets users search by raw 'code',
71
+ 'code_unmasked' (code without punctuation), or 'name' of the
72
+ record when typing into the 'code' filter in the search panel.
73
+ """
74
+
49
75
  model_view = super().fields_view_get(view_id, view_type, toolbar, submenu)
50
76
 
51
77
  if view_type == "search":
@@ -31,22 +31,30 @@ from ..constants.fiscal import (
31
31
 
32
32
 
33
33
  class Document(models.Model):
34
- """Implementação base dos documentos fiscais
35
-
36
- Devemos sempre ter em mente que o modelo que vai usar este módulo abstrato
37
- tem diversos metodos importantes e a intenção que os módulos da OCA que
38
- extendem este modelo, funcionem se possível sem a necessidade de
39
- codificação extra.
40
-
41
- É preciso também estar atento que o documento fiscal tem dois estados:
42
-
43
- - Estado do documento eletrônico / não eletônico: state_edoc
44
- - Estado FISCAL: state_fiscal
45
-
46
- O estado fiscal é um campo que é alterado apenas algumas vezes pelo código
47
- e é de responsabilidade do responsável fiscal pela empresa de manter a
48
- integridade do mesmo, pois ele não tem um fluxo realmente definido e
49
- interfere no lançamento do registro no arquivo do SPED FISCAL.
34
+ """
35
+ Base implementation for Brazilian fiscal documents.
36
+
37
+ This model serves as the foundational structure for various fiscal
38
+ documents within the Brazilian localization. It's designed to be
39
+ extensible, allowing other OCA modules to build upon it, ideally
40
+ minimizing the need for additional custom coding for common fiscal
41
+ document functionalities.
42
+
43
+ Key aspects to note:
44
+ - The fiscal document manages two primary states:
45
+ - Electronic Document State (`state_edoc`): Reflects the status
46
+ of the document in its electronic lifecycle (e.g., Draft,
47
+ Authorized, Cancelled).
48
+ - Fiscal State (`state_fiscal`): Represents the document's status
49
+ from a purely fiscal accounting perspective (e.g., Regular,
50
+ Cancelled for fiscal purposes). This state is less automated
51
+ and often managed by the fiscal responsible to ensure correct
52
+ reporting, such as in SPED Fiscal.
53
+
54
+ This model inherits common fields and methods from
55
+ `l10n_br_fiscal.document.mixin` and includes features for document
56
+ numbering, key validation, partner and company fiscal details, line
57
+ items, and workflows for subsequent document generation and returns.
50
58
  """
51
59
 
52
60
  _name = "l10n_br_fiscal.document"
@@ -5,6 +5,21 @@ from odoo import fields, models
5
5
 
6
6
 
7
7
  class DocumentLine(models.Model):
8
+ """
9
+ Represents a line item within a Brazilian fiscal document.
10
+
11
+ This model defines the core structure of a fiscal document line,
12
+ primarily linking it to its parent document (`l10n_br_fiscal.document`)
13
+ and holding essential line-specific data like quantity and a
14
+ descriptive name.
15
+
16
+ The vast majority of detailed fiscal fields (e.g., product, NCM,
17
+ CFOP, various tax bases and values) and their complex computation
18
+ logic are inherited from `l10n_br_fiscal.document.line.mixin`.
19
+ This delegation ensures code reusability and keeps this model
20
+ focused on its direct relationships and core line properties.
21
+ """
22
+
8
23
  _name = "l10n_br_fiscal.document.line"
9
24
  _inherit = "l10n_br_fiscal.document.line.mixin"
10
25
  _description = "Fiscal Document Line"
@@ -49,6 +49,31 @@ from ..constants.issqn import (
49
49
 
50
50
 
51
51
  class FiscalDocumentLineMixin(models.AbstractModel):
52
+ """
53
+ Provides the primary field structure for Brazilian fiscal document lines.
54
+
55
+ It is inherited by sale.order.line, purchase.order.linne, account.move.line
56
+ and even stock.move in separate modules.
57
+ Indeed these business documents need to take care of some fiscal parameters
58
+ before creating Fiscal Document Lines. And of course,
59
+ Fiscal Document Lines themselves inherit from this mixin.
60
+
61
+ This abstract model defines an extensive set of fields necessary for
62
+ line-item fiscal calculations and reporting in Brazil. It includes:
63
+ - Product and quantity information.
64
+ - Detailed fiscal classifications (NCM, CFOP, CEST, etc.).
65
+ - Fields for each specific Brazilian tax (ICMS, IPI, PIS, COFINS,
66
+ ISSQN, etc.), covering their respective bases, rates, and
67
+ calculated values.
68
+ - Line-level totals and cost components.
69
+
70
+ It inherits computational logic, onchange handlers, and other complex
71
+ methods from `l10n_br_fiscal.document.line.mixin.methods`. Models
72
+ that represent actual document lines (e.g.,
73
+ `l10n_br_fiscal.document.line`) should inherit this mixin to
74
+ acquire the necessary fiscal field definitions and associated behaviors.
75
+ """
76
+
52
77
  _name = "l10n_br_fiscal.document.line.mixin"
53
78
  _inherit = "l10n_br_fiscal.document.line.mixin.methods"
54
79
  _description = "Document Fiscal Mixin"
@@ -46,6 +46,28 @@ FISCAL_CST_ID_FIELDS = [
46
46
 
47
47
 
48
48
  class FiscalDocumentLineMixinMethods(models.AbstractModel):
49
+ """
50
+ Provides the method implementations for l10n_br_fiscal.document.line.mixin.
51
+
52
+ These methods are extracted into this separate mixin due to the way
53
+ l10n_br_fiscal.document.line is incorporated into account.move.line
54
+ by the l10n_br_account module (decorator pattern).
55
+
56
+ Specifically:
57
+ - In l10n_br_account, fields from l10n_br_fiscal.document.line
58
+ are added to account.move.line using Odoo's `_inherits` (composition)
59
+ mechanism.
60
+ - The methods in *this* mixin, however, are intended to be inherited
61
+ using the standard `_inherit` mechanism.
62
+
63
+ This separation is crucial because `_inherits` handles field composition
64
+ but does not inherit methods. Thus, `_inherit` is used to bring in
65
+ these methods. If these methods were defined in the same class as the
66
+ fields of l10n_br_fiscal.document.line.mixin (which are subject to
67
+ `_inherits`), and account.move.line also used `_inherit` on that
68
+ single class, the fields would be duplicated.
69
+ """
70
+
49
71
  _name = "l10n_br_fiscal.document.line.mixin.methods"
50
72
  _description = "Fiscal Document Mixin Methods"
51
73
 
@@ -16,6 +16,32 @@ from ..constants.fiscal import (
16
16
 
17
17
 
18
18
  class FiscalDocumentMixin(models.AbstractModel):
19
+ """
20
+ Provides a collection of reusable methods for Brazilian fiscal document logic.
21
+
22
+ This abstract model is intended to be inherited by other models or mixins
23
+ that require fiscal document functionalities, such as preparing fiscal data,
24
+ calculating fiscal amounts, managing document series, and handling comments.
25
+
26
+ It is inherited by sale.order, purchase.order, account.move and even stock.picking
27
+ in separate modules. Indeed these business documents need to take care of
28
+ some fiscal parameters before creating Fiscal Documents. And of course,
29
+ Fiscal Document themselves inherit from this mixin.
30
+
31
+ Key functionalities include:
32
+ - Computation of various fiscal amounts based on document lines.
33
+ - Inverse methods for distributing header-level costs (freight, insurance)
34
+ to lines.
35
+ - Hooks for customizing data retrieval (e.g., lines, fiscal partner).
36
+ - Onchange helpers for common fiscal fields.
37
+
38
+ Models using this mixin are often expected to also include fields defined
39
+ in `l10n_br_fiscal.document.mixin` for methods like
40
+ `_prepare_br_fiscal_dict` and `_get_amount_fields` to function
41
+ correctly. Line-based calculations typically rely on an overrideable
42
+ `_get_amount_lines` method.
43
+ """
44
+
19
45
  _name = "l10n_br_fiscal.document.mixin"
20
46
  _inherit = "l10n_br_fiscal.document.mixin.methods"
21
47
  _description = "Document Fiscal Mixin Fields"
@@ -11,6 +11,28 @@ from ..constants.fiscal import (
11
11
 
12
12
 
13
13
  class FiscalDocumentMixinMethods(models.AbstractModel):
14
+ """
15
+ Provides the method implementations for l10n_br_fiscal.document.mixin.
16
+
17
+ These methods are extracted into this separate mixin due to the way
18
+ l10n_br_fiscal.document.line is incorporated into account.move
19
+ by the l10n_br_account module (decorator pattern).
20
+
21
+ Specifically:
22
+ - In l10n_br_account, fields from l10n_br_fiscal.document
23
+ are added to account.move using Odoo's `_inherits` (composition)
24
+ mechanism.
25
+ - The methods in *this* mixin, however, are intended to be inherited
26
+ using the standard `_inherit` mechanism.
27
+
28
+ This separation is crucial because `_inherits` handles field composition
29
+ but does not inherit methods. Thus, `_inherit` is used to bring in
30
+ these methods. If these methods were defined in the same class as the
31
+ fields of l10n_br_fiscal.document.mixin (which are subject to
32
+ `_inherits`), and account.move.line also used `_inherit` on that
33
+ single class, the fields would be duplicated.
34
+ """
35
+
14
36
  _name = "l10n_br_fiscal.document.mixin.methods"
15
37
  _description = "Fiscal Document Mixin Methods"
16
38
 
@@ -64,7 +86,16 @@ class FiscalDocumentMixinMethods(models.AbstractModel):
64
86
  self.document_subsequent_ids = subsequent_documents
65
87
 
66
88
  def _get_amount_lines(self):
67
- """Get object lines instaces used to compute fields"""
89
+ """
90
+ Hook method to retrieve the document lines used for amount calculations.
91
+
92
+ This method should be overridden by models that inherit this mixin
93
+ if their fiscal document lines are stored in a field other than
94
+ `fiscal_line_ids`. The returned recordset should contain line objects
95
+ that have the fiscal amount fields to be summed.
96
+
97
+ :return: A recordset of fiscal document line objects.
98
+ """
68
99
  return self.mapped("fiscal_line_ids")
69
100
 
70
101
  def _get_product_amount_lines(self):
@@ -98,6 +129,17 @@ class FiscalDocumentMixinMethods(models.AbstractModel):
98
129
  doc.document_serie_id = False
99
130
 
100
131
  def _compute_fiscal_amount(self):
132
+ """
133
+ Compute and sum various fiscal amounts from the document lines.
134
+
135
+ This method iterates over fields prefixed with 'amount_' (as determined
136
+ by `_get_amount_fields`) and sums corresponding values from the lines
137
+ retrieved by `_get_amount_lines`.
138
+
139
+ It handles cases where delivery costs (freight, insurance, other) are
140
+ defined at the document total level rather than per line.
141
+ """
142
+
101
143
  fields = self._get_amount_fields()
102
144
  for doc in self:
103
145
  values = {key: 0.0 for key in fields}
@@ -151,12 +193,17 @@ class FiscalDocumentMixinMethods(models.AbstractModel):
151
193
 
152
194
  def _get_fiscal_partner(self):
153
195
  """
154
- Meant to be overriden when the l10n_br_fiscal.document partner_id should not
155
- be the same as the sale.order, purchase.order, account.move (...) partner_id.
196
+ Hook method to determine the fiscal partner for the document.
156
197
 
157
- (In the case of invoicing, the invoicing partner set by the user should
158
- get priority over any invoicing contact returned by address_get.)
198
+ This method is designed to be overridden in implementing models if the
199
+ partner relevant for fiscal purposes (e.g., for tax calculations,
200
+ final consumer status) is different from the main `partner_id`
201
+ of the document record. For instance, an invoice might use a specific
202
+ invoicing contact derived from the main partner.
203
+
204
+ :return: A `res.partner` recordset representing the fiscal partner.
159
205
  """
206
+
160
207
  self.ensure_one()
161
208
  return self.partner_id
162
209
 
@@ -115,7 +115,7 @@ class DocumentRelated(models.Model):
115
115
  self.inscr_est = False
116
116
 
117
117
  if related.document_type_id.code in ("01", "04"):
118
- self.access_key = False
118
+ self.document_key = False
119
119
  self.document_serie = related.document_serie
120
120
  self.document_number = related.document_number
121
121
  self.state_id = (
@@ -17,6 +17,54 @@ from ..constants.fiscal import (
17
17
 
18
18
 
19
19
  class Operation(models.Model):
20
+ """
21
+ Defines a Fiscal Operation, representing the nature and fiscal intent of
22
+ a transaction (e.g., Sale, Return, Import, Industrialization).
23
+
24
+ A Fiscal Operation is a core configuration entity in the Brazilian
25
+ fiscal localization. It serves as a central point to orchestrate how
26
+ fiscal documents and their lines are processed by determining:
27
+
28
+ 1. **Transaction Type**: Specifies if the operation is an Inbound
29
+ (e.g., purchase, return from customer), Outbound (e.g., sale,
30
+ return to supplier), or Other type of fiscal movement.
31
+
32
+ 2. **Operation Lines (`line_ids`)**: Each Fiscal Operation contains
33
+ one or more `l10n_br_fiscal.operation.line` records. These lines
34
+ define specific rules or conditions (based on partner profiles,
35
+ product types, company tax regime, etc.) under which a
36
+ particular set of fiscal treatments apply. The system selects
37
+ the "best match" operation line based on the context of a
38
+ transaction.
39
+
40
+ 3. **CFOP (Código Fiscal de Operações e Prestações)**: The selected
41
+ `operation.line` determines the appropriate CFOP codes
42
+ (internal, external, export) for the transaction line. The CFOP
43
+ itself carries significant fiscal meaning and influences tax
44
+ calculations and reporting.
45
+
46
+ 4. **Tax Definitions (`tax_definition_ids` on `operation.line` and `cfop`)**:
47
+ The selected `operation.line` and the determined `cfop` can both
48
+ hold `l10n_br_fiscal.tax.definition` records. These tax
49
+ definitions specify which taxes (ICMS, IPI, PIS, COFINS, etc.)
50
+ apply, along with their respective CST/CSOSN codes and other
51
+ parameters. This linkage allows the Fiscal Operation to drive
52
+ the tax calculation engine.
53
+
54
+ 5. **Document Characteristics**: It can also define default behaviors
55
+ or properties for documents generated under this operation, such
56
+ as the electronic document purpose (`edoc_purpose`), default
57
+ price type (sale vs. cost), and links to inverse or return
58
+ operations.
59
+
60
+ Essentially, when a fiscal document is created, the user selects a
61
+ Fiscal Operation. The system then uses this operation and the
62
+ transactional context (partner, product, company) to find the most
63
+ suitable `operation.line`. This line, in turn, provides the CFOP
64
+ and a set of tax definitions, which are then used by the tax engine
65
+ to calculate all applicable taxes.
66
+ """
67
+
20
68
  _name = "l10n_br_fiscal.operation"
21
69
  _description = "Fiscal Operation"
22
70
  _inherit = ["mail.thread", "mail.activity.mixin"]
@@ -201,6 +201,52 @@ class OperationLine(models.Model):
201
201
  service_type=None,
202
202
  ind_final=None,
203
203
  ):
204
+ """
205
+ Map and determine the applicable fiscal taxes, CFOP, IPI guideline,
206
+ and ICMS tax benefit for a given context.
207
+
208
+ The method aggregates tax definitions from various sources, applying a
209
+ precedence order:
210
+ 1. Company-level tax definitions.
211
+ 2. NCM-defined taxes (IPI, II).
212
+ 3. ICMS Regulation specific taxes.
213
+ 4. Taxes defined directly on this fiscal operation line.
214
+ 5. Taxes defined on the determined CFOP.
215
+ 6. Taxes from the partner's fiscal profile.
216
+
217
+ It also filters taxes based on whether the product is subject to
218
+ ICMS or ISSQN.
219
+
220
+ :param company: The company record (res.company).
221
+ :param partner: The partner record (res.partner).
222
+ :param product: Optional product record (product.product).
223
+ :param fiscal_price: (Unused in direct logic; kept for signature
224
+ consistency for overrides/extensions)
225
+ :param fiscal_quantity: (Unused in direct logic; kept for signature
226
+ consistency for overrides/extensions)
227
+ :param ncm: Optional NCM record (l10n_br_fiscal.ncm);
228
+ defaults to product's NCM.
229
+ :param nbm: Optional NBM record (l10n_br_fiscal.nbm);
230
+ defaults to product's NBM.
231
+ :param nbs: Optional NBS record (l10n_br_fiscal.nbs);
232
+ defaults to product's NBS.
233
+ :param cest: Optional CEST record (l10n_br_fiscal.cest);
234
+ defaults to product's CEST.
235
+ :param city_taxation_code: Optional City Taxation Code record
236
+ (l10n_br_fiscal.city.taxation.code).
237
+ :param service_type: Optional Service Type record
238
+ (l10n_br_fiscal.service.type).
239
+ :param ind_final: (Passed to icms_regulation_id.map_tax; not directly
240
+ used for tax calculation here)
241
+ :return: A dictionary containing:
242
+ - 'taxes': A dictionary of applicable tax records
243
+ (l10n_br_fiscal.tax) keyed by their tax_domain.
244
+ - 'cfop': The determined CFOP record (l10n_br_fiscal.cfop).
245
+ - 'ipi_guideline': The determined IPI guideline record
246
+ (l10n_br_fiscal.tax.ipi.guideline).
247
+ - 'icms_tax_benefit_id': The determined ICMS tax benefit record
248
+ ID (l10n_br_fiscal.tax.definition) or False.
249
+ """
204
250
  mapping_result = {
205
251
  "taxes": {},
206
252
  "cfop": False,
@@ -33,8 +33,6 @@ class ProductMixin(models.AbstractModel):
33
33
  product.fiscal_genre_id = self.env[
34
34
  "l10n_br_fiscal.product.genre"
35
35
  ].search([("code", "=", product.ncm_id.code[0:2])])
36
- elif product.fiscal_genre_id is None:
37
- product.fiscal_genere_id = False
38
36
 
39
37
  @api.depends("fiscal_type")
40
38
  def _compute_tax_icms_or_issqn(self):
@@ -68,6 +68,53 @@ ICMS_ST_BASE_TYPE_REL = {
68
68
 
69
69
 
70
70
  class Tax(models.Model):
71
+ """
72
+ Represents a specific Brazilian fiscal tax (e.g., ICMS, IPI, PIS, COFINS)
73
+ and acts as the core engine for calculating its value in a given context.
74
+
75
+ This model is distinct from Odoo's generic `account.tax`. Each record
76
+ defines a particular tax, its domain (e.g., 'icms', 'ipi'), how its
77
+ base is calculated (percentage, fixed value, per quantity), applicable
78
+ rates, percentage reductions, and links to its Tax Group and default
79
+ CST codes (Código de Situação Tributária).
80
+
81
+ Key Responsibilities:
82
+ 1. **Tax Definition**: Stores the parameters for a single fiscal tax,
83
+ including its calculation method, rates (percent_amount,
84
+ value_amount), base reduction (percent_reduction), and specific
85
+ attributes for complex taxes like ICMS (e.g., icms_base_type,
86
+ icmsst_base_type, icmsst_mva_percent).
87
+
88
+ 2. **Tax Calculation Engine (`compute_taxes` method)**:
89
+ The primary entry point for tax computation. When called on a
90
+ recordset of `l10n_br_fiscal.tax` objects (representing all taxes
91
+ potentially applicable to a transaction line), it iterates through
92
+ them in a defined sequence. For each tax, it:
93
+ a. Initializes a standard dictionary (`TAX_DICT_VALUES`) to hold
94
+ results.
95
+ b. Invokes a specialized internal method (e.g., `_compute_icms`,
96
+ `_compute_ipi`, or the generic `_compute_tax`) to perform
97
+ the actual calculation logic for that tax domain. These
98
+ internal methods determine the tax base, apply reductions,
99
+ and calculate the tax value.
100
+ c. Handles inter-tax dependencies (e.g., IPI value affecting
101
+ ICMS base).
102
+ d. Aggregates results, including total tax included in price,
103
+ tax not included, and withholding amounts.
104
+
105
+ 3. **Contextual Adaptation**: The calculation methods
106
+ (`_compute_<tax_domain>`) take numerous keyword arguments
107
+ (`**kwargs`) representing the full fiscal context (company, partner,
108
+ product, operation details, other calculated taxes, etc.) to ensure
109
+ taxes are computed according to specific scenarios (e.g., interstate
110
+ operations, final consumer, import/export).
111
+
112
+ This model, in conjunction with `l10n_br_fiscal.tax.definition` (which
113
+ determines *which* of these `l10n_br_fiscal.tax` records apply),
114
+ forms the heart of the Brazilian tax calculation system in this
115
+ localization.
116
+ """
117
+
71
118
  _name = "l10n_br_fiscal.tax"
72
119
  _order = "sequence, tax_domain, name"
73
120
  _description = "Fiscal Tax"
@@ -627,14 +674,20 @@ class Tax(models.Model):
627
674
 
628
675
  @api.model
629
676
  def _compute_tax_sequence(self, taxes_dict, **kwargs):
630
- """Método para calcular a ordem que os impostos serão calculados.
631
- Por padrão é utilizado o campo compute_sequence do objeto para
632
- ordenar a sequencia que os impostos serão calculados.
633
- Por padrão é obdecida a seguinte sequencia:
677
+ """
678
+ Method to determine the order in which taxes will be calculated.
634
679
 
635
- compute_sequence = {
636
- tax_domain: compute_sequence,
680
+ By default, the `compute_sequence` field of the tax object is used
681
+ to sort the sequence for tax calculation. The default processing
682
+ order is based on these `compute_sequence` values, conceptually
683
+ like:
684
+
685
+ {
686
+ 'tax_domain_A': its_compute_sequence_value,
687
+ 'tax_domain_B': its_compute_sequence_value,
688
+ # ... and so on for other tax domains
637
689
  }
690
+ # Lower compute_sequence values are typically processed earlier.
638
691
  """
639
692
  # Pega por padrão os valores do campo compute_sequence
640
693
  compute_sequence = {t.tax_domain: t.compute_sequence for t in self}
@@ -654,39 +707,66 @@ class Tax(models.Model):
654
707
 
655
708
  def compute_taxes(self, **kwargs):
656
709
  """
657
- arguments:
658
- company,
659
- partner,
660
- product,
661
- price_unit,
662
- quantity,
663
- uom_id,
664
- fiscal_price,
665
- fiscal_quantity,
666
- uot_id,
667
- discount_value,
668
- insurance_value,
669
- other_value,
670
- freight_value,
671
- ii_customhouse_charges,
672
- ii_iof_value,
673
- ncm,
674
- nbs,
675
- nbm,
676
- cest,
677
- operation_line,
678
- cfop,
679
- icmssn_range,
680
- icms_origin,
681
- ind_final,
682
- return
683
- {
684
- 'amount_included': float
685
- 'amount_not_included': float
686
- 'amount_withholding': float
687
- 'taxes': dict
688
- }
710
+ Compute all applicable Brazilian taxes based on a set of input parameters.
711
+
712
+ This method orchestrates the calculation of various taxes (ICMS, IPI, PIS,
713
+ COFINS, ISSQN, etc.) by calling specialized internal _compute_<tax_domain>
714
+ methods. It respects a defined computation sequence for taxes and handles
715
+ interdependencies, such as IPI influencing the ICMS base under certain
716
+ conditions.
717
+
718
+ The result includes the calculated tax values for each domain, amounts
719
+ included in the price, amounts not included, and withholding amounts.
720
+ It also calculates an estimated total tax amount as per "Lei da Transparência".
721
+
722
+ :param company: res.company record of the emitting company.
723
+ :param partner: res.partner record of the recipient/customer.
724
+ :param product: product.product record being taxed.
725
+ :param price_unit: float, the unit price of the product/service before
726
+ discounts.
727
+ :param quantity: float, the quantity of the product/service.
728
+ :param uom_id: uom.uom record, unit of measure for the quantity.
729
+ :param fiscal_price: float, the fiscal price unit (e.g., for tax
730
+ calculation if different from commercial price).
731
+ :param fiscal_quantity: float, the fiscal quantity (e.g., for tax
732
+ calculation if different from commercial quantity).
733
+ :param uot_id: uom.uom record, unit of taxation if different from uom_id.
734
+ :param discount_value: float, total discount amount for the line.
735
+ :param insurance_value: float, total insurance amount for the line.
736
+ :param other_value: float, total other costs/fees for the line.
737
+ :param freight_value: float, total freight amount for the line.
738
+ :param ii_customhouse_charges: float, customs house charges for Import Tax
739
+ (II).
740
+ :param ii_iof_value: float, IOF value related to Import Tax (II).
741
+ :param ncm: l10n_br_fiscal.ncm record, NCM code for the product.
742
+ :param nbs: l10n_br_fiscal.nbs record, NBS code for the service.
743
+ :param nbm: l10n_br_fiscal.nbm record, NBM code for the product.
744
+ :param cest: l10n_br_fiscal.cest record, CEST code for the product.
745
+ :param operation_line: l10n_br_fiscal.operation.line record defining
746
+ the fiscal context.
747
+ :param cfop: l10n_br_fiscal.cfop record, the determined CFOP for the
748
+ operation.
749
+ :param icmssn_range: l10n_br_fiscal.simplified.tax.range record for
750
+ Simples Nacional ICMS calculation.
751
+ :param icms_origin: str, ICMS origin code for the product.
752
+ :param icms_cst_id: l10n_br_fiscal.cst record, the ICMS CST code.
753
+ :param icms_relief_id: l10n_br_fiscal.icms.relief record, if ICMS relief
754
+ applies.
755
+ :param ind_final: str, indicates if the operation is for a final
756
+ consumer ('0' or '1').
757
+
758
+ :return: dict containing:
759
+ - 'amount_included': float, sum of tax values included in the price.
760
+ - 'amount_not_included': float, sum of tax values not included in
761
+ the price (added on top).
762
+ - 'amount_withholding': float, sum of withholding tax values.
763
+ - 'estimate_tax': float, estimated total tax amount for transparency.
764
+ - 'taxes': dict, where keys are tax domains (e.g., 'icms', 'ipi')
765
+ and values are dictionaries with detailed calculation results for
766
+ that tax (base, percent, value, cst, etc., as defined in
767
+ TAX_DICT_VALUES).
689
768
  """
769
+
690
770
  result_amounts = {
691
771
  "amount_included": 0.00,
692
772
  "amount_not_included": 0.00,
@@ -704,7 +784,7 @@ class Tax(models.Model):
704
784
  fiscal_operation_type = operation_line.fiscal_operation_type or FISCAL_OUT
705
785
  kwargs.update({"cst": tax.cst_from_tax(fiscal_operation_type)})
706
786
  try:
707
- compute_method = getattr(self, "_compute_%s" % tax.tax_domain)
787
+ compute_method = getattr(self, f"_compute_{tax.tax_domain}")
708
788
  taxes[tax.tax_domain].update(compute_method(tax, taxes, **kwargs))
709
789
 
710
790
  except AttributeError:
@@ -16,6 +16,41 @@ from ..constants.icms import ICMS_TAX_BENEFIT_TYPE
16
16
 
17
17
 
18
18
  class TaxDefinition(models.Model):
19
+ """
20
+ Represents a detailed rule item within the Brazilian Fiscal Rule Engine.
21
+
22
+ This model also acts as a mapping layer, defining specific tax
23
+ treatments (which tax to apply, with which CST/CSOSN, and under what
24
+ conditions) based on a combination of contextual fiscal parameters.
25
+ It essentially defines a "fiscal rule" that dictates how a particular
26
+ tax should behave in a given scenario.
27
+
28
+ Each `tax.definition` record links various fiscal entities such as:
29
+ - Partner Fiscal Profiles (`fiscal_profile_id`)
30
+ - Fiscal Operations and their Lines (`fiscal_operation_line_id`)
31
+ - Company-level defaults (`company_id`)
32
+ - CFOPs (`cfop_id`)
33
+ - ICMS Regulations (`icms_regulation_id`)
34
+
35
+ to a specific:
36
+ - Tax Group (`tax_group_id`)
37
+ - Tax (`tax_id`)
38
+ - CST/CSOSN code (`cst_id`)
39
+
40
+ Furthermore, it allows for conditions based on:
41
+ - Originating and destination states (`state_from_id`, `state_to_ids`)
42
+ - Product characteristics (NCM, CEST, NBM, specific products, type)
43
+ - Partner characteristics (tax framework, ICMS taxpayer status, final consumer)
44
+ - Company tax framework
45
+ - Date validity (`date_start`, `date_end`)
46
+ - Tax benefits (ICMS relief, IPI guidelines)
47
+
48
+ The system uses these definitions, particularly through the
49
+ `map_tax_definition` method, to determine the precise set of taxes and
50
+ their configurations applicable to a transaction line. This model is
51
+ central to the dynamic and context-sensitive application of Brazilian taxes.
52
+ """
53
+
19
54
  _name = "l10n_br_fiscal.tax.definition"
20
55
  _inherit = ["mail.thread", "mail.activity.mixin"]
21
56
  _description = "Tax Definition"
@@ -411,6 +446,42 @@ class TaxDefinition(models.Model):
411
446
  city_taxation_code=None,
412
447
  service_type=None,
413
448
  ):
449
+ """
450
+ Filter and return tax definitions that match the given criteria.
451
+
452
+ This method is used to find the relevant tax definitions from a
453
+ pre-existing recordset (self) based on the transactional context
454
+ (company, partner, product, etc.). It constructs a domain to
455
+ filter these records.
456
+
457
+ The matching is based on:
458
+ - Current record state (not 'expired').
459
+ - Originating state (state_from_id).
460
+ - Destination states (state_to_ids), allowing for no specific destination.
461
+ - NCM, NBM, CEST codes, allowing for no specific code.
462
+ - City taxation codes, allowing for no specific code.
463
+ - Service types, allowing for no specific type.
464
+ - Specific products, allowing for no specific product.
465
+
466
+ :param company: The company record (res.company) of the transaction.
467
+ :param partner: The partner record (res.partner) of the transaction.
468
+ :param product: The product record (product.product) of the transaction.
469
+ :param ncm: Optional NCM record (l10n_br_fiscal.ncm);
470
+ defaults to product's NCM.
471
+ :param nbm: Optional NBM record (l10n_br_fiscal.nbm);
472
+ defaults to product's NBM.
473
+ :param nbs: Optional NBS record (l10n_br_fiscal.nbs);
474
+ (Note: nbs not used in current domain construction)
475
+ :param cest: Optional CEST record (l10n_br_fiscal.cest);
476
+ defaults to product's CEST.
477
+ :param city_taxation_code: Optional City Taxation Code record
478
+ (l10n_br_fiscal.city.taxation.code).
479
+ :param service_type: Optional Service Type record
480
+ (l10n_br_fiscal.service.type).
481
+ :return: A recordset of matching
482
+ l10n_br_fiscal.tax.definition.
483
+ """
484
+
414
485
  if not ncm:
415
486
  ncm = product.ncm_id
416
487
 
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
5
  <meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
6
- <title>Módulo fiscal brasileiro</title>
6
+ <title>README.rst</title>
7
7
  <style type="text/css">
8
8
 
9
9
  /*
@@ -360,19 +360,24 @@ ul.auto-toc {
360
360
  </style>
361
361
  </head>
362
362
  <body>
363
- <div class="document" id="modulo-fiscal-brasileiro">
364
- <h1 class="title">Módulo fiscal brasileiro</h1>
363
+ <div class="document">
365
364
 
365
+
366
+ <a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
367
+ <img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
368
+ </a>
369
+ <div class="section" id="modulo-fiscal-brasileiro">
370
+ <h1>Módulo fiscal brasileiro</h1>
366
371
  <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
367
372
  !! This file is generated by oca-gen-addon-readme !!
368
373
  !! changes will be overwritten. !!
369
374
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
370
- !! source digest: sha256:6f1a82a9cc3b79a3eec5f4c829f5e5d42b61562d50bf02cf5ca732cd6b40e62e
375
+ !! source digest: sha256:caf43d8fde54f6343f11a461630951996ba4ff0c5be27a01f162987c21d3ea0c
371
376
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
372
- <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/l10n-brazil/tree/16.0/l10n_br_fiscal"><img alt="OCA/l10n-brazil" src="https://img.shields.io/badge/github-OCA%2Fl10n--brazil-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/l10n-brazil-16-0/l10n-brazil-16-0-l10n_br_fiscal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/l10n-brazil&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
377
+ <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/l10n-brazil/tree/16.0/l10n_br_fiscal"><img alt="OCA/l10n-brazil" src="https://img.shields.io/badge/github-OCA%2Fl10n--brazil-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/l10n-brazil-16-0/l10n-brazil-16-0-l10n_br_fiscal"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/l10n-brazil&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
373
378
  <p><img alt="image" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_dashboard.png" /></p>
374
379
  <div class="section" id="classificacoes-fiscais">
375
- <h1>Classificações fiscais</h1>
380
+ <h2>Classificações fiscais</h2>
376
381
  <p>Primeramente, este módulo traz uma variedade de cadastros fiscais para
377
382
  produtos, parceiros ou empresas. Na hora de emitir documentos fiscais
378
383
  como NF-e, NFS-e etc… até empresas do regime simplificado ou MEI
@@ -396,7 +401,7 @@ precisam deles para calcular os impostos ou emitir documentos fiscais.</p>
396
401
  </ul>
397
402
  </div>
398
403
  <div class="section" id="conceito-de-documento-fiscal">
399
- <h1>Conceito de documento fiscal</h1>
404
+ <h2>Conceito de documento fiscal</h2>
400
405
  <p>O Odoo nativo não tem o conceito de documento fiscal. O conceito mais
401
406
  parecido seria o <tt class="docutils literal">account.move</tt> e até a versão 10.0 a localização
402
407
  estendia o invoice para suportar as NF-e e NFS-e apenas. Naquela época
@@ -488,7 +493,7 @@ objetos <tt class="docutils literal">account_move</tt> e <tt class="docutils lit
488
493
  do modulo <tt class="docutils literal">l10n_br_account</tt>.</p>
489
494
  </div>
490
495
  <div class="section" id="impostos-brasileiros">
491
- <h1>Impostos brasileiros</h1>
496
+ <h2>Impostos brasileiros</h2>
492
497
  <p>O módulo l10n_br_fiscal lida com os principais impostos brasileiros
493
498
  como:</p>
494
499
  <ul class="simple">
@@ -536,7 +541,7 @@ desses modelos para realizar as operações com ST (Substituição
536
541
  Tributária)…</p>
537
542
  </div>
538
543
  <div class="section" id="operacoes-fiscais">
539
- <h1>Operações fiscais</h1>
544
+ <h2>Operações fiscais</h2>
540
545
  <blockquote>
541
546
  <img alt="image3" src="https://raw.githubusercontent.com/OCA/l10n-brazil/16.0/l10n_br_fiscal/static/img/fiscal_operation.png" /></blockquote>
542
547
  <p>No Odoo nativo, o conceito mais parecido com a operação fiscal e o
@@ -568,7 +573,7 @@ Odoo e essa operação fiscal.</p>
568
573
  </ul>
569
574
  </div>
570
575
  <div class="section" id="installation">
571
- <h2><a class="toc-backref" href="#toc-entry-1">Installation</a></h2>
576
+ <h3><a class="toc-backref" href="#toc-entry-1">Installation</a></h3>
572
577
  <p>Para instalar o módulo l10n_br_fiscal, você precisa de instalar primeiro
573
578
  os pacotes Python</p>
574
579
  <ul class="simple">
@@ -577,7 +582,7 @@ os pacotes Python</p>
577
582
  </ul>
578
583
  </div>
579
584
  <div class="section" id="configuration">
580
- <h2><a class="toc-backref" href="#toc-entry-2">Configuration</a></h2>
585
+ <h3><a class="toc-backref" href="#toc-entry-2">Configuration</a></h3>
581
586
  <p>Para uma boa configuração fiscal, você tem que revisar bem:</p>
582
587
  <ul class="simple">
583
588
  <li>em Configurações: as operaçoes fiscais que você vai usar, as linhas de
@@ -588,20 +593,20 @@ produtos (aba fiscal).</li>
588
593
  </ul>
589
594
  </div>
590
595
  <div class="section" id="usage">
591
- <h2><a class="toc-backref" href="#toc-entry-3">Usage</a></h2>
596
+ <h3><a class="toc-backref" href="#toc-entry-3">Usage</a></h3>
592
597
  <p>Você pode criar documentos fiscais direitamente pelo menu fiscal, mas a
593
598
  princípio você vai pilotar a criação de documentos fiscais a partir dos
594
599
  invoices Odoo, usando módulos adicionais como l10n_br_account,
595
600
  l10n_br_sale, l10n_br_purchase…</p>
596
601
  </div>
597
602
  <div class="section" id="known-issues-roadmap">
598
- <h2><a class="toc-backref" href="#toc-entry-4">Known issues / Roadmap</a></h2>
603
+ <h3><a class="toc-backref" href="#toc-entry-4">Known issues / Roadmap</a></h3>
599
604
  </div>
600
605
  <div class="section" id="changelog">
601
- <h2><a class="toc-backref" href="#toc-entry-5">Changelog</a></h2>
606
+ <h3><a class="toc-backref" href="#toc-entry-5">Changelog</a></h3>
602
607
  </div>
603
608
  <div class="section" id="bug-tracker">
604
- <h2><a class="toc-backref" href="#toc-entry-6">Bug Tracker</a></h2>
609
+ <h3><a class="toc-backref" href="#toc-entry-6">Bug Tracker</a></h3>
605
610
  <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/l10n-brazil/issues">GitHub Issues</a>.
606
611
  In case of trouble, please check there if your issue has already been reported.
607
612
  If you spotted it first, help us to smash it by providing a detailed and welcomed
@@ -609,17 +614,17 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
609
614
  <p>Do not contact contributors directly about support or help with technical issues.</p>
610
615
  </div>
611
616
  <div class="section" id="credits">
612
- <h2><a class="toc-backref" href="#toc-entry-7">Credits</a></h2>
617
+ <h3><a class="toc-backref" href="#toc-entry-7">Credits</a></h3>
613
618
  </div>
614
619
  </div>
615
620
  <div class="section" id="authors">
616
- <h1>Authors</h1>
621
+ <h2>Authors</h2>
617
622
  <ul class="simple">
618
623
  <li>Akretion</li>
619
624
  </ul>
620
625
  </div>
621
626
  <div class="section" id="contributors">
622
- <h1>Contributors</h1>
627
+ <h2>Contributors</h2>
623
628
  <ul class="simple">
624
629
  <li><a class="reference external" href="https://www.akretion.com/pt-BR">Akretion</a>:<ul>
625
630
  <li>Renato Lima &lt;<a class="reference external" href="mailto:renato.lima&#64;akretion.com.br">renato.lima&#64;akretion.com.br</a>&gt;</li>
@@ -644,7 +649,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
644
649
  </ul>
645
650
  </div>
646
651
  <div class="section" id="maintainers">
647
- <h1>Maintainers</h1>
652
+ <h2>Maintainers</h2>
648
653
  <p>This module is maintained by the OCA.</p>
649
654
  <a class="reference external image-reference" href="https://odoo-community.org">
650
655
  <img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
@@ -658,5 +663,6 @@ promote its widespread use.</p>
658
663
  <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
659
664
  </div>
660
665
  </div>
666
+ </div>
661
667
  </body>
662
668
  </html>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-l10n_br_fiscal
3
- Version: 16.0.5.4.0.1
3
+ Version: 16.0.5.4.1
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: erpbrasil.base>=2.3.0
6
6
  Requires-Dist: odoo-addon-l10n_br_base>=16.0dev,<16.1dev
@@ -17,6 +17,10 @@ Classifier: Framework :: Odoo :: 16.0
17
17
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3
18
18
  Classifier: Development Status :: 5 - Production/Stable
19
19
 
20
+ .. image:: https://odoo-community.org/readme-banner-image
21
+ :target: https://odoo-community.org/get-involved?utm_source=readme
22
+ :alt: Odoo Community Association
23
+
20
24
  ========================
21
25
  Módulo fiscal brasileiro
22
26
  ========================
@@ -26,13 +30,13 @@ Módulo fiscal brasileiro
26
30
  !! This file is generated by oca-gen-addon-readme !!
27
31
  !! changes will be overwritten. !!
28
32
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29
- !! source digest: sha256:6f1a82a9cc3b79a3eec5f4c829f5e5d42b61562d50bf02cf5ca732cd6b40e62e
33
+ !! source digest: sha256:caf43d8fde54f6343f11a461630951996ba4ff0c5be27a01f162987c21d3ea0c
30
34
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
31
35
 
32
36
  .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
33
37
  :target: https://odoo-community.org/page/development-status
34
38
  :alt: Production/Stable
35
- .. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
39
+ .. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
36
40
  :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
37
41
  :alt: License: AGPL-3
38
42
  .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fl10n--brazil-lightgray.png?logo=github
@@ -1,6 +1,6 @@
1
- odoo/addons/l10n_br_fiscal/README.rst,sha256=VRKoh6dYDMdBNZ5JgUoTtpPsWpz24j0_dxNO7wH6FDw,13792
1
+ odoo/addons/l10n_br_fiscal/README.rst,sha256=GEgGeqyRD4QS5y05KYHG9yubjJffND-ln5LzJIGahRI,13957
2
2
  odoo/addons/l10n_br_fiscal/__init__.py,sha256=BQXfCjW4ehK1W1j0z6k8xN7Q2LoZBCjjvYDkQt6nSkI,2717
3
- odoo/addons/l10n_br_fiscal/__manifest__.py,sha256=Xh_A5AhZ43hAoKi6dHltTuIZVs-Ku-dzJ48gI3gmYgo,5001
3
+ odoo/addons/l10n_br_fiscal/__manifest__.py,sha256=t9vbTT7SpLryNxhZ37Bd2AXzb2cniVZtinfgCT3Vo9k,5001
4
4
  odoo/addons/l10n_br_fiscal/tools.py,sha256=4oAxP-kPKq3L3xhNdhOivxWakJa-j0ISpVIBCtsB0NQ,4061
5
5
  odoo/addons/l10n_br_fiscal/constants/fiscal.py,sha256=F2a4jYAk2j2Yh1Xw7WeS1GcLfW1DbjeNgEF6l7135wc,14962
6
6
  odoo/addons/l10n_br_fiscal/constants/icms.py,sha256=rHlM6jyRvhrIm03sd6guS1xh7SptADLltPmRJ3C_Vh8,3512
@@ -68,17 +68,17 @@ odoo/addons/l10n_br_fiscal/models/city_taxation_code.py,sha256=ZOOKF8d6MY1qiBFAI
68
68
  odoo/addons/l10n_br_fiscal/models/cnae.py,sha256=T70_v9-pa8hxydswac8Qv9eawpTC_Qbv1cGXsLl13mo,1021
69
69
  odoo/addons/l10n_br_fiscal/models/comment.py,sha256=7LZ4VIp73cnSfQvHt7SuOieTGdBSBsjbhKNZ8YP3bo8,5277
70
70
  odoo/addons/l10n_br_fiscal/models/cst.py,sha256=m3KIalTYxOoiydXje4VHni6knmXZVdR3UgstNN01PAY,987
71
- odoo/addons/l10n_br_fiscal/models/data_abstract.py,sha256=OwFGbvuNV57APApmYf1jJ3H3-UlY2FHJDPNB2OwTmXc,3489
71
+ odoo/addons/l10n_br_fiscal/models/data_abstract.py,sha256=l46d2ViejGvcjPtKxaA0vn4S0qrn8zqo4bGeQU6oOaU,4599
72
72
  odoo/addons/l10n_br_fiscal/models/data_ncm_nbs_abstract.py,sha256=rHm2r3o0nwo3ZDOdrrTosU9Thzqt_D7SZWaxjgnR81I,6763
73
73
  odoo/addons/l10n_br_fiscal/models/data_product_abstract.py,sha256=wbc3exJQp33aYK8IOJ490JvDWBPCpU0NEkMR6YjaLfQ,793
74
- odoo/addons/l10n_br_fiscal/models/document.py,sha256=oXHKv65xNaDaHQ7e4FKKwgYIujpAMi8EhQ-scRTAW7s,25208
74
+ odoo/addons/l10n_br_fiscal/models/document.py,sha256=8USZVl-hpz_YchzpatwMyOyjmhEzsRs_N7k-pVRt6Bw,25649
75
75
  odoo/addons/l10n_br_fiscal/models/document_email.py,sha256=ikGhCrTI18X01RszlCqO0tvhTOKr2d5KJLcj_QA1o_Y,2113
76
- odoo/addons/l10n_br_fiscal/models/document_line.py,sha256=c-Zjb4uX5gCdNrlhJqH5_pVvUdZ9odyDx7r_gsG7KtI,1380
77
- odoo/addons/l10n_br_fiscal/models/document_line_mixin.py,sha256=rnulqu0T74lUrFYZLcgKJLYCvsVftTiYnseM6M8P0RM,26578
78
- odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py,sha256=uEw6GyR9arzE3XcGozxnKJrSxcpzTycrx2IEfFZq9pQ,30108
79
- odoo/addons/l10n_br_fiscal/models/document_mixin.py,sha256=ZKVGBZBnshBVsz1_YKlRgR9iAGX6SD08GVqvKv6vhko,12269
80
- odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py,sha256=9wfrAJgNtJtjRkpI5Jvo2l_PBFE5D9uy5yXLVwefLfA,14760
81
- odoo/addons/l10n_br_fiscal/models/document_related.py,sha256=4_25SCQXPVcfU1MTtTfELjWzSHus-K1sE05w1e6PU7A,4607
76
+ odoo/addons/l10n_br_fiscal/models/document_line.py,sha256=Y87Bevv0wDWP_oRUUvjKsWdow_dvQEKQ-31KEIdZghY,2032
77
+ odoo/addons/l10n_br_fiscal/models/document_line_mixin.py,sha256=e-bixaQI0cJzdnUBzbbTJoeEsjfHq09FF_xEPnV0KxM,27787
78
+ odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py,sha256=Jpx6dsb6ZyDPlDCI_6WIkOD0ICjC0-ulTx3XZRmukWg,31117
79
+ odoo/addons/l10n_br_fiscal/models/document_mixin.py,sha256=rELQJw1faiHrI8FhwY93kP_eqDG2mLqXMweEmVKP5uw,13536
80
+ odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py,sha256=PltWBkgLO4Y8hxjfrsNgvy0jpepDY6ZEts05370T8Mw,16757
81
+ odoo/addons/l10n_br_fiscal/models/document_related.py,sha256=1_0M8yM4pgPEtx2oDaszNem8Pfib6p4B2ogj7T7RZmc,4609
82
82
  odoo/addons/l10n_br_fiscal/models/document_serie.py,sha256=Spe7kpgMBFGS_LBv3DpiqTC4WuafTK8LRv53GVR2UcM,4128
83
83
  odoo/addons/l10n_br_fiscal/models/document_supplement.py,sha256=31oRSHT_SaGSf-dQvriweIxZZiTANxkHHupc5kMYfXA,409
84
84
  odoo/addons/l10n_br_fiscal/models/document_type.py,sha256=apFUxAOKsXK4EzGRXiscLf6QDOqHVGFRZ-m95mXSudE,2150
@@ -90,13 +90,13 @@ odoo/addons/l10n_br_fiscal/models/legal_nature.py,sha256=wSjpZFASogZk5wa6eOJl-bW
90
90
  odoo/addons/l10n_br_fiscal/models/nbm.py,sha256=KWhRDiNgZmZ0rpopviKTjnBhbW7JPPm7sSACpNBnCyw,1579
91
91
  odoo/addons/l10n_br_fiscal/models/nbs.py,sha256=tvRLJEHiLkylaeLvEUIRjcAQUncxz4p_bx7TRcqhE3g,900
92
92
  odoo/addons/l10n_br_fiscal/models/ncm.py,sha256=XUd6L_5ymKtTMwE54AE3tBcfOyDwG4Y9WU77PPofxzE,2090
93
- odoo/addons/l10n_br_fiscal/models/operation.py,sha256=eO_Krm4K8ki4CcWnAcQ8ROYda_XNzLtwxresLOrbkrY,8220
93
+ odoo/addons/l10n_br_fiscal/models/operation.py,sha256=cYv4VW1uGB2Iu2DEvv8hBDe7JPhFR7Hs-TJMtud6to8,10717
94
94
  odoo/addons/l10n_br_fiscal/models/operation_dashboard.py,sha256=xyNIQd5LK-Y_Y-475tRdLLjYP5gKDx9p08BM6KDhGlY,5682
95
95
  odoo/addons/l10n_br_fiscal/models/operation_document_type.py,sha256=ZZQYNCe7lof5kb26P8GztkvLR58cA6cr33NTiz7vQOU,1511
96
- odoo/addons/l10n_br_fiscal/models/operation_line.py,sha256=rpvoqmjetPk2uxEizf5_vMR-qDnSNjO9K-G1fK-c0Ow,10546
96
+ odoo/addons/l10n_br_fiscal/models/operation_line.py,sha256=UQK2hkH5jkWTuukqkuO5rrZ9L5TbSh0iTvsKsM5z7eo,12862
97
97
  odoo/addons/l10n_br_fiscal/models/partner_profile.py,sha256=0crL892OKXZyv188KhjG8AsiiqDoNE2dcqgOo7x471c,3546
98
98
  odoo/addons/l10n_br_fiscal/models/product_genre.py,sha256=Q4NhYuwCNfwKqU6W_EOb9tzqFQ9EmOFxQZiNUm3NrVs,426
99
- odoo/addons/l10n_br_fiscal/models/product_mixin.py,sha256=G6jXD-tZm38PS0T8BDEv632T5zJ4UaG-YUvq5VovWWs,1651
99
+ odoo/addons/l10n_br_fiscal/models/product_mixin.py,sha256=ZzsoAALCfYLruGZmQjInfehNL2tusKXvawpu1b27vAg,1552
100
100
  odoo/addons/l10n_br_fiscal/models/product_product.py,sha256=oo-vk3FF438qeQrI7LosD0vq1-YuTgfVqrq3_UrmdgY,300
101
101
  odoo/addons/l10n_br_fiscal/models/product_template.py,sha256=8lvM1OuFNCf8ZvlbzJoen4r8PHNh0tahF6k4IVVxCfE,3868
102
102
  odoo/addons/l10n_br_fiscal/models/res_company.py,sha256=Ak4jTZohiJQlrNfena2NwqhMQ6WWxTsTjQSMk1z5a1o,16575
@@ -108,8 +108,8 @@ odoo/addons/l10n_br_fiscal/models/simplified_tax.py,sha256=RXd0D1anHVD6wXEaAISis
108
108
  odoo/addons/l10n_br_fiscal/models/simplified_tax_range.py,sha256=2fhHkkI8uHc22XtWU-23ioQLioaCrJAwaTsr8-eugM4,1839
109
109
  odoo/addons/l10n_br_fiscal/models/subsequent_document.py,sha256=Z_LfOOtlmr7Fr45fbTevTYyFcZr5dKsjSovLhKqjIOM,6793
110
110
  odoo/addons/l10n_br_fiscal/models/subsequent_operation.py,sha256=jkeo7KjR3NaXWv7O2Mujx7OmQE7S1lIN1zR10oFbjRk,1610
111
- odoo/addons/l10n_br_fiscal/models/tax.py,sha256=lDvlP4CYFth8RqsGAq4KMTNjNHlIOal3ElpIOQodx8Y,25769
112
- odoo/addons/l10n_br_fiscal/models/tax_definition.py,sha256=EazPhc7sadM8DTFr4XFuS4GS1DneqRGeP7nWcplSIYA,18590
111
+ odoo/addons/l10n_br_fiscal/models/tax.py,sha256=OjE2HqRjESszvTNO_sBaQLlxXm0St7YPpytOM_ER1mg,31279
112
+ odoo/addons/l10n_br_fiscal/models/tax_definition.py,sha256=uzVw45m2Tmz6X0fRiGfaxUyQVZHUC-30wXqoOBSC-q0,21901
113
113
  odoo/addons/l10n_br_fiscal/models/tax_estimate.py,sha256=9Hdy5Jznv9NRj2Fwr9TfI4Yn9r3iigRUs4BfBumOu64,1388
114
114
  odoo/addons/l10n_br_fiscal/models/tax_group.py,sha256=_zoRvgeuKof_3VMVzlkzKjfpTTmtY6ArPgNKbcc9jsQ,2120
115
115
  odoo/addons/l10n_br_fiscal/models/tax_ipi_control_seal.py,sha256=d3k_WZPWOJ09Wol0XSsOsXDGV40eIXz61oIbsqOwC18,310
@@ -128,7 +128,7 @@ odoo/addons/l10n_br_fiscal/readme/USAGE.md,sha256=Dw3uZaHJCUtV0xFq6VOQvF2G5fS_oS
128
128
  odoo/addons/l10n_br_fiscal/security/fiscal_security.xml,sha256=c4D3MoIsVnkZ1pDY_iw8jM2hBPz3VCkl5JKnm_hkau0,3700
129
129
  odoo/addons/l10n_br_fiscal/security/ir.model.access.csv,sha256=8ACLHXbJxLiRwOx1fWgpEtI4jTA-2_ONfFdh-5wag50,15136
130
130
  odoo/addons/l10n_br_fiscal/static/description/icon.png,sha256=Vd1HydYBoGCzNfCqxLlch2i2aeCcyxo-uRxWNp6oMbw,14836
131
- odoo/addons/l10n_br_fiscal/static/description/index.html,sha256=ziadq8Lzwq5pmu-Fi8US9BYTHr6UBWP3eCVEvY7hsFU,26425
131
+ odoo/addons/l10n_br_fiscal/static/description/index.html,sha256=UxmJ-H7imfQeHaZ-_dXgZ22LWe6jDlSaEhw-LdMwYKg,26637
132
132
  odoo/addons/l10n_br_fiscal/static/img/fiscal_dashboard.png,sha256=Q0fpqFNqEXh6m6E1aJfzSKV2tQ9lC1Y-ofUt6qxVupc,151668
133
133
  odoo/addons/l10n_br_fiscal/static/img/fiscal_line.png,sha256=S4Q4OGSzGnbfm4W5sQVvnD4uUzxS6tbJGT_gs3pB4K0,134276
134
134
  odoo/addons/l10n_br_fiscal/static/img/fiscal_operation.png,sha256=2614c1XjxwVznh707e9gujlUXg0ttutKD1ZiSMTqyv8,105871
@@ -198,7 +198,7 @@ odoo/addons/l10n_br_fiscal/views/tax_view.xml,sha256=qFNYcvJ0o59fDFJ-jEqZ6IYoivt
198
198
  odoo/addons/l10n_br_fiscal/wizards/__init__.py,sha256=_sLxjpuJblbtSngjCsnMm7Iur5afF5xLEkAQLu4sy7I,69
199
199
  odoo/addons/l10n_br_fiscal/wizards/base_wizard_mixin.py,sha256=-r25us0vdNCSe11Gnf_tyPtN1qq-JKsL-fgWbPGktRo,2856
200
200
  odoo/addons/l10n_br_fiscal/wizards/document_status_wizard.py,sha256=KsYj5YWWePO7uk0psBsFdnCL71eLWhcyg7_c7J4G6vA,818
201
- odoo_addon_l10n_br_fiscal-16.0.5.4.0.1.dist-info/METADATA,sha256=rZh7MSBgpsRidiuE1XOftftia2PgGsuunzJi0oWPDr0,14519
202
- odoo_addon_l10n_br_fiscal-16.0.5.4.0.1.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
203
- odoo_addon_l10n_br_fiscal-16.0.5.4.0.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
204
- odoo_addon_l10n_br_fiscal-16.0.5.4.0.1.dist-info/RECORD,,
201
+ odoo_addon_l10n_br_fiscal-16.0.5.4.1.dist-info/METADATA,sha256=aJOOS6FYjnVwAeEwi6fdRi3GCmkK2P2JnshgJvEr6ik,14682
202
+ odoo_addon_l10n_br_fiscal-16.0.5.4.1.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
203
+ odoo_addon_l10n_br_fiscal-16.0.5.4.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
204
+ odoo_addon_l10n_br_fiscal-16.0.5.4.1.dist-info/RECORD,,