@@ -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