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