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.
- odoo/addons/l10n_br_fiscal/README.rst +6 -2
- odoo/addons/l10n_br_fiscal/__manifest__.py +1 -1
- odoo/addons/l10n_br_fiscal/models/data_abstract.py +26 -0
- odoo/addons/l10n_br_fiscal/models/document.py +24 -16
- odoo/addons/l10n_br_fiscal/models/document_line.py +15 -0
- odoo/addons/l10n_br_fiscal/models/document_line_mixin.py +25 -0
- odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py +22 -0
- odoo/addons/l10n_br_fiscal/models/document_mixin.py +26 -0
- odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py +52 -5
- odoo/addons/l10n_br_fiscal/models/document_related.py +1 -1
- odoo/addons/l10n_br_fiscal/models/operation.py +48 -0
- odoo/addons/l10n_br_fiscal/models/operation_line.py +46 -0
- odoo/addons/l10n_br_fiscal/models/product_mixin.py +0 -2
- odoo/addons/l10n_br_fiscal/models/tax.py +119 -39
- odoo/addons/l10n_br_fiscal/models/tax_definition.py +71 -0
- odoo/addons/l10n_br_fiscal/static/description/index.html +25 -19
- {odoo_addon_l10n_br_fiscal-16.0.5.4.0.1.dist-info → odoo_addon_l10n_br_fiscal-16.0.5.4.1.dist-info}/METADATA +7 -3
- {odoo_addon_l10n_br_fiscal-16.0.5.4.0.1.dist-info → odoo_addon_l10n_br_fiscal-16.0.5.4.1.dist-info}/RECORD +20 -20
- {odoo_addon_l10n_br_fiscal-16.0.5.4.0.1.dist-info → odoo_addon_l10n_br_fiscal-16.0.5.4.1.dist-info}/WHEEL +0 -0
- {odoo_addon_l10n_br_fiscal-16.0.5.4.0.1.dist-info → odoo_addon_l10n_br_fiscal-16.0.5.4.1.dist-info}/top_level.txt +0 -0
|
@@ -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:
|
|
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/
|
|
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
|
|
@@ -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
|
-
"""
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
"""
|
|
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
|
-
|
|
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
|
-
|
|
158
|
-
|
|
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.
|
|
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
|
-
"""
|
|
631
|
-
|
|
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
|
-
|
|
636
|
-
|
|
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
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
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_
|
|
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>
|
|
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"
|
|
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:
|
|
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/
|
|
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&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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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 <<a class="reference external" href="mailto:renato.lima@akretion.com.br">renato.lima@akretion.com.br</a>></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
|
-
<
|
|
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.
|
|
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:
|
|
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/
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
77
|
-
odoo/addons/l10n_br_fiscal/models/document_line_mixin.py,sha256=
|
|
78
|
-
odoo/addons/l10n_br_fiscal/models/document_line_mixin_methods.py,sha256=
|
|
79
|
-
odoo/addons/l10n_br_fiscal/models/document_mixin.py,sha256=
|
|
80
|
-
odoo/addons/l10n_br_fiscal/models/document_mixin_methods.py,sha256=
|
|
81
|
-
odoo/addons/l10n_br_fiscal/models/document_related.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
112
|
-
odoo/addons/l10n_br_fiscal/models/tax_definition.py,sha256=
|
|
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=
|
|
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.
|
|
202
|
-
odoo_addon_l10n_br_fiscal-16.0.5.4.
|
|
203
|
-
odoo_addon_l10n_br_fiscal-16.0.5.4.
|
|
204
|
-
odoo_addon_l10n_br_fiscal-16.0.5.4.
|
|
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,,
|
|
File without changes
|
|
File without changes
|