Skip to content

Commit 63c6518

Browse files
authored
Merge pull request #290 from leogregianin/main
Adiciona grupos de DI, II, e IPI
2 parents 67b5bca + 9cf333e commit 63c6518

3 files changed

Lines changed: 525 additions & 11 deletions

File tree

pynfe/entidades/notafiscal.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -916,9 +916,6 @@ class NotaFiscalDeclaracaoImportacao(Entidade):
916916
# - Data de registro
917917
data_registro = None
918918

919-
# - Codigo exportador
920-
codigo_exportador = str()
921-
922919
# - Desembaraco aduaneiro
923920
# - UF
924921
desembaraco_aduaneiro_uf = str()
@@ -929,6 +926,24 @@ class NotaFiscalDeclaracaoImportacao(Entidade):
929926
# - Data
930927
desembaraco_aduaneiro_data = str()
931928

929+
# - Via de transporte internacional informada na Declaração de Importação (DI)
930+
tipo_via_transporte = str()
931+
932+
# - Valor da AFRMM - Adicional ao Frete para Renovação da Marinha Mercante
933+
valor_afrmm = Decimal()
934+
935+
# - Forma de importação quanto a intermediação
936+
tipo_intermediacao = str()
937+
938+
# - CNPJ do adquirente ou do encomendante
939+
cnpj_adquirente = str()
940+
941+
# - UFTerceiro - Sigla da UF do adquirente ou do encomendante
942+
uf_terceiro = str()
943+
944+
# - Codigo exportador
945+
codigo_exportador = str()
946+
932947
# - Adicoes (lista 1 para * / ManyToManyField)
933948
adicoes = None
934949

@@ -947,11 +962,14 @@ class NotaFiscalDeclaracaoImportacaoAdicao(Entidade):
947962
numero = str()
948963

949964
# - Desconto
950-
desconto = str()
965+
desconto = Decimal()
951966

952967
# - Codigo fabricante
953968
codigo_fabricante = str()
954969

970+
# - Número do ato concessório de Drawback
971+
numero_drawback = str()
972+
955973

956974
class NotaFiscalTransporteVolume(Entidade):
957975
# - Quantidade

pynfe/processamento/serializacao.py

Lines changed: 80 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,8 @@ def _serializar_produto_servico(
314314
Código Especificador da Substituição Tributária – CEST,
315315
que estabelece a sistemática de uniformização
316316
e identificação das mercadorias e bens passíveis de
317-
sujeição aos regimes de substituição tributária e de antecipação de recolhimento do ICMS.
317+
sujeição aos regimes de substituição tributária e de
318+
antecipação de recolhimento do ICMS.
318319
"""
319320
# if produto_servico.cest:
320321
# etree.SubElement(prod, 'CEST').text = produto_servico.cest
@@ -357,6 +358,10 @@ def _serializar_produto_servico(
357358
"""
358359
etree.SubElement(prod, "indTot").text = str(produto_servico.ind_total)
359360

361+
# DI - Declaração de Importação
362+
self._serializar_declaracao_importacao(
363+
produto_servico=produto_servico, tag_raiz=prod, retorna_string=False)
364+
360365
""" Informação de interesse do emissor para controle do B2B.(v2.0) """
361366
# Número do Pedido de Compra. Tam 1-15
362367
if produto_servico.numero_pedido:
@@ -409,24 +414,24 @@ def _serializar_produto_servico(
409414
produto_servico=produto_servico, tag_raiz=imposto, retorna_string=False
410415
)
411416

412-
# PIS
413-
self._serializar_imposto_pis(
417+
# Imposto de Importação II
418+
self._serializar_imposto_importacao(
414419
produto_servico=produto_servico,
415420
modelo=modelo,
416421
tag_raiz=imposto,
417422
retorna_string=False,
418423
)
419424

420-
# COFINS
421-
self._serializar_imposto_cofins(
425+
# PIS
426+
self._serializar_imposto_pis(
422427
produto_servico=produto_servico,
423428
modelo=modelo,
424429
tag_raiz=imposto,
425430
retorna_string=False,
426431
)
427432

428-
# Imposto de Importação II
429-
self._serializar_imposto_importacao(
433+
# COFINS
434+
self._serializar_imposto_cofins(
430435
produto_servico=produto_servico,
431436
modelo=modelo,
432437
tag_raiz=imposto,
@@ -1016,6 +1021,26 @@ def _serializar_imposto_ipi(
10161021
etree.SubElement(
10171022
ipint, "CST"
10181023
).text = produto_servico.ipi_codigo_enquadramento
1024+
else:
1025+
if (produto_servico.ipi_valor_base_calculo > 0) and\
1026+
(produto_servico.ipi_aliquota > 0) and\
1027+
(produto_servico.ipi_valor > 0):
1028+
ipi = etree.SubElement(tag_raiz, 'IPI')
1029+
1030+
# Preenchimento conforme Atos Normativos editados pela Receita Federal
1031+
# (Observação 2)
1032+
etree.SubElement(ipi, 'cEnq').text = produto_servico.ipi_classe_enquadramento
1033+
if produto_servico.ipi_classe_enquadramento == '':
1034+
etree.SubElement(ipi, 'cEnq').text = '999'
1035+
1036+
ipi_item = etree.SubElement(ipi, 'IPITrib')
1037+
etree.SubElement(ipi_item, 'CST').text = produto_servico.ipi_codigo_enquadramento
1038+
etree.SubElement(ipi_item, 'vBC').text = '{:.2f}'.format(
1039+
produto_servico.ipi_valor_base_calculo or 0)
1040+
etree.SubElement(ipi_item, 'pIPI').text = '{:.2f}'.format(
1041+
produto_servico.ipi_aliquota or 0)
1042+
etree.SubElement(ipi_item, 'vIPI').text = '{:.2f}'.format(
1043+
produto_servico.ipi_valor or 0)
10191044

10201045
def _serializar_imposto_pis(
10211046
self, produto_servico, modelo, tag_raiz="imposto", retorna_string=True
@@ -1184,6 +1209,54 @@ def _serializar_imposto_importacao(
11841209
produto_servico.imposto_importacao_valor_iof
11851210
)
11861211

1212+
def _serializar_declaracao_importacao(
1213+
self, produto_servico, tag_raiz='prod', retorna_string=True
1214+
):
1215+
# DI de 0-100
1216+
if produto_servico.declaracoes_importacao and\
1217+
len(produto_servico.declaracoes_importacao) > 0:
1218+
for item_di in produto_servico.declaracoes_importacao:
1219+
di = etree.SubElement(tag_raiz, 'DI')
1220+
# Número do Documento de Importação (DI, DSI, DIRE, ...)
1221+
etree.SubElement(di, 'nDI').text = str(item_di.numero_di_dsi_da)
1222+
# Data de Registro do documento
1223+
etree.SubElement(di, 'dDI').text = item_di.data_registro.strftime('%Y-%m-%d')
1224+
# Local de desembaraço
1225+
etree.SubElement(di, 'xLocDesemb').text = str(item_di.desembaraco_aduaneiro_local)
1226+
# UF onde ocorreu o Desembaraço Aduaneiro
1227+
etree.SubElement(di, 'UFDesemb').text = str(item_di.desembaraco_aduaneiro_uf)
1228+
# Data do Desembaraço Aduaneiro
1229+
etree.SubElement(di, 'dDesemb').text = \
1230+
item_di.desembaraco_aduaneiro_data.strftime('%Y-%m-%d')
1231+
# Via de transporte internacional informada na Declaração de Importação (DI)
1232+
etree.SubElement(di, 'tpViaTransp').text = str(item_di.tipo_via_transporte)
1233+
# Valor da AFRMM - Adicional ao Frete para Renovação da Marinha Mercante
1234+
if item_di.valor_afrmm:
1235+
etree.SubElement(di, 'vAFRMM').text = '{:.2f}'.format(item_di.valor_afrmm or 0)
1236+
# tpIntermedio
1237+
etree.SubElement(di, 'tpIntermedio').text = str(item_di.tipo_intermediacao)
1238+
# CNPJ
1239+
if item_di.cnpj_adquirente:
1240+
etree.SubElement(di, 'CNPJ').text = so_numeros(item_di.cnpj_adquirente)
1241+
# UFTerceiro
1242+
if item_di.uf_terceiro:
1243+
etree.SubElement(di, 'UFTerceiro').text = item_di.uf_terceiro
1244+
# cExportador
1245+
etree.SubElement(di, 'cExportador').text = str(item_di.codigo_exportador)
1246+
1247+
# Adições 1-100
1248+
for adicao in item_di.adicoes:
1249+
adi = etree.SubElement(di, 'adi')
1250+
etree.SubElement(adi, 'nAdicao').text = str(adicao.numero)
1251+
etree.SubElement(adi, 'nSeqAdic').text = str(adicao.sequencia)
1252+
etree.SubElement(adi, 'cFabricante').text = str(adicao.codigo_fabricante)
1253+
if adicao.desconto:
1254+
etree.SubElement(adi, 'vDescDI').text = \
1255+
'{:.2f}'.format(adicao.desconto or 0)
1256+
# Número do ato concessório de Drawback
1257+
if adicao.numero_drawback:
1258+
etree.SubElement(adi, 'nDraw').text = str(adicao.numero_drawback)
1259+
11871260
def _serializar_responsavel_tecnico(
11881261
self, responsavel_tecnico, tag_raiz="infRespTec", retorna_string=True
11891262
):

0 commit comments

Comments
 (0)