Skip to content

Commit cc57c19

Browse files
committed
Adiciona grupos de DI, II, e IPI
DI-Declaração de Importação, II-Imposto de Importação e IPI-Imposto sobre Produtos Industrializados
1 parent 67b5bca commit cc57c19

3 files changed

Lines changed: 513 additions & 10 deletions

File tree

pynfe/entidades/notafiscal.py

Lines changed: 21 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,13 @@ 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()
955972

956973
class NotaFiscalTransporteVolume(Entidade):
957974
# - Quantidade

pynfe/processamento/serializacao.py

Lines changed: 69 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,10 @@ def _serializar_produto_servico(
357357
"""
358358
etree.SubElement(prod, "indTot").text = str(produto_servico.ind_total)
359359

360+
# DI - Declaração de Importação
361+
self._serializar_declaracao_importacao(
362+
produto_servico=produto_servico, tag_raiz=prod, retorna_string=False)
363+
360364
""" Informação de interesse do emissor para controle do B2B.(v2.0) """
361365
# Número do Pedido de Compra. Tam 1-15
362366
if produto_servico.numero_pedido:
@@ -409,24 +413,24 @@ def _serializar_produto_servico(
409413
produto_servico=produto_servico, tag_raiz=imposto, retorna_string=False
410414
)
411415

412-
# PIS
413-
self._serializar_imposto_pis(
416+
# Imposto de Importação II
417+
self._serializar_imposto_importacao(
414418
produto_servico=produto_servico,
415419
modelo=modelo,
416420
tag_raiz=imposto,
417421
retorna_string=False,
418422
)
419423

420-
# COFINS
421-
self._serializar_imposto_cofins(
424+
# PIS
425+
self._serializar_imposto_pis(
422426
produto_servico=produto_servico,
423427
modelo=modelo,
424428
tag_raiz=imposto,
425429
retorna_string=False,
426430
)
427431

428-
# Imposto de Importação II
429-
self._serializar_imposto_importacao(
432+
# COFINS
433+
self._serializar_imposto_cofins(
430434
produto_servico=produto_servico,
431435
modelo=modelo,
432436
tag_raiz=imposto,
@@ -1016,6 +1020,22 @@ def _serializar_imposto_ipi(
10161020
etree.SubElement(
10171021
ipint, "CST"
10181022
).text = produto_servico.ipi_codigo_enquadramento
1023+
else:
1024+
if (produto_servico.ipi_valor_base_calculo > 0) and\
1025+
(produto_servico.ipi_aliquota > 0) and\
1026+
(produto_servico.ipi_valor > 0):
1027+
ipi = etree.SubElement(tag_raiz, 'IPI')
1028+
1029+
# Preenchimento conforme Atos Normativos editados pela Receita Federal (Observação 2)
1030+
etree.SubElement(ipi, 'cEnq').text = produto_servico.ipi_classe_enquadramento
1031+
if produto_servico.ipi_classe_enquadramento == '':
1032+
etree.SubElement(ipi, 'cEnq').text = '999'
1033+
1034+
ipi_item = etree.SubElement(ipi, 'IPITrib')
1035+
etree.SubElement(ipi_item, 'CST').text = produto_servico.ipi_codigo_enquadramento
1036+
etree.SubElement(ipi_item, 'vBC').text = '{:.2f}'.format(produto_servico.ipi_valor_base_calculo or 0)
1037+
etree.SubElement(ipi_item, 'pIPI').text = '{:.2f}'.format(produto_servico.ipi_aliquota or 0)
1038+
etree.SubElement(ipi_item, 'vIPI').text = '{:.2f}'.format(produto_servico.ipi_valor or 0)
10191039

10201040
def _serializar_imposto_pis(
10211041
self, produto_servico, modelo, tag_raiz="imposto", retorna_string=True
@@ -1184,6 +1204,49 @@ def _serializar_imposto_importacao(
11841204
produto_servico.imposto_importacao_valor_iof
11851205
)
11861206

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

0 commit comments

Comments
 (0)