Skip to content

Commit 2b87211

Browse files
committed
[WIP] l10n_br_nfe: CSRT hash algorithm
1 parent d42d6ec commit 2b87211

File tree

4 files changed

+35
-2
lines changed

4 files changed

+35
-2
lines changed

l10n_br_base/models/res_partner.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ class Partner(models.Model):
2626

2727
rntrc_code = fields.Char(string="RNTRC Code", size=12)
2828

29+
is_technical_support = fields.Boolean(string="Is technical support?")
30+
31+
nfe40_idCSRT = fields.Char(string="ID CSRT")
32+
33+
CSRT = fields.Char(string="Token CSRT")
34+
35+
nfe40_hashCSRT = fields.Char(string="Hash CSRT")
36+
2937
cei_code = fields.Char(string="CEI Code", size=12)
3038

3139
union_entity_code = fields.Char(string="Union Entity code")

l10n_br_base/views/res_partner_view.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,19 @@
151151
domain="[('country_id', '=', %(base.br)d)]"
152152
/>
153153
<field name="rntrc_code" />
154+
<field name="is_technical_support" />
155+
<field
156+
name="nfe40_idCSRT"
157+
attrs="{'invisible': [('is_technical_support','!=', True)]}"
158+
/>
159+
<field
160+
name="CSRT"
161+
attrs="{'invisible': [('is_technical_support','!=', True)]}"
162+
/>
163+
<field
164+
name="nfe40_hashCSRT"
165+
attrs="{'invisible': [('is_technical_support','!=', True)]}"
166+
/>
154167
</group>
155168
</group>
156169
</page>

l10n_br_nfe/models/document.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
44

55
import base64
6+
import hashlib
67
import logging
78
import re
89
import string
@@ -1113,6 +1114,16 @@ def _generate_key(self):
11131114
)
11141115
record.document_key = chave_edoc.chave
11151116

1117+
# Compute CSRT hash
1118+
if record.nfe40_infRespTec and record.nfe40_infRespTec.CSRT:
1119+
token_csrt = record.nfe40_infRespTec.CSRT
1120+
seed = token_csrt + record.document_key
1121+
hashed = hashlib.sha1(seed.encode()).hexdigest()
1122+
1123+
# Convert hex to base64
1124+
hashed_b64 = base64.b64encode(bytes.fromhex(hashed)).decode()
1125+
record.nfe40_infRespTec.nfe40_hashCSRT = hashed_b64
1126+
11161127
def _nfe_consult_receipt(self):
11171128
self.ensure_one()
11181129
processor = self._edoc_processor()

l10n_br_nfe/models/res_company.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ class ResCompany(spec_models.SpecModel):
3939
nfe40_IE = fields.Char(related="partner_id.nfe40_IE")
4040
nfe40_fone = fields.Char(related="partner_id.nfe40_fone")
4141
nfe40_CRT = fields.Selection(related="tax_framework")
42-
nfe40_idCSRT = fields.Char(related="technical_support_id.idCSRT")
43-
nfe40_hashCSRT = fields.Char(related="technical_support_id.hashCSRT")
42+
43+
nfe40_idCSRT = fields.Char(related="partner_id.nfe40_idCSRT")
44+
nfe40_hashCSRT = fields.Char(related="partner_id.nfe40_hashCSRT")
4445

4546
nfe40_enderEmit = fields.Many2one(
4647
comodel_name="res.partner",

0 commit comments

Comments
 (0)