Dificuldade para emitir NFe

225 views
Skip to first unread message

Caio Kleiton

unread,
Oct 8, 2022, 12:55:16 PM10/8/22
to PyNFe
Estou com um problema ao tentar emitir a NFe...

Pesquisando muito, eu encontrei este script para a emissão de Nfe:

from asyncore import write
from xml.dom.minidom import Element
from pynfe.processamento.comunicacao import ComunicacaoSefaz
from pynfe.entidades.cliente import Cliente
from pynfe.entidades.emitente import Emitente
from pynfe.entidades.notafiscal import NotaFiscal
from pynfe.entidades.fonte_dados import _fonte_dados
from pynfe.processamento.serializacao import SerializacaoXML
from pynfe.processamento.assinatura import AssinaturaA1
from pynfe.utils.flags import CODIGO_BRASIL
from decimal import Decimal
from lxml import etree
import datetime

certificado = "certificado.pfx"
senha = '12345678'
uf = 'ac'
homologacao = True

# emitente
emitente = Emitente(
    razao_social='ROTTA DO MDF LTDA',
    nome_fantasia='Rotta do MDF',
    cnpj='25164896000175',           
    codigo_de_regime_tributario='1',
    inscricao_estadual='0105007100121',
    inscricao_municipal='',
    cnae_fiscal='',           
    endereco_logradouro='Via Chico Mendes',
    endereco_numero='3915',
    endereco_bairro='Areal',
    endereco_municipio='RIO BRANCO',
    endereco_uf='AC',
    endereco_cep='76848000',
    endereco_pais=CODIGO_BRASIL
)

# cliente
cliente = Cliente(
    razao_social='NFE EMITIDA EM AMBIENTE DE HOMOLOGACAO SEM VALOR FISCAL',
    tipo_documento='CPF',       
    email='em...@email.com',
    numero_documento='06171934283',
    indicador_ie=9,                 
    endereco_logradouro='Rua dos Bobos',
    endereco_numero='Zero',
    endereco_complemento='Ao lado de lugar nenhum',
    endereco_bairro='Aquele Mesmo',
    endereco_municipio='Rio Branco',
    endereco_uf='AC',
    endereco_cep='76848000',
    endereco_pais=CODIGO_BRASIL,
    endereco_telefone='11912341234',
)

# Nota Fiscal
nota_fiscal = NotaFiscal(
    emitente=emitente,
    cliente=cliente,
    uf=uf.upper(),
    natureza_operacao='VENDA', 
    forma_pagamento=0,         
    tipo_pagamento=1,
    modelo=55,                 
    serie='1',
    numero_nf='151515',           
    data_emissao=datetime.datetime.now(),
    data_saida_entrada=datetime.datetime.now(),
    tipo_documento=1,          
    municipio='4118402',       
    tipo_impressao_danfe=1,    
    forma_emissao='1',         
    cliente_final=1,           
    indicador_destino=1,
    indicador_presencial=1,
    finalidade_emissao='1',    
    processo_emissao='0',      
    transporte_modalidade_frete=1,
    informacoes_adicionais_interesse_fisco='Mensagem complementar',
    totais_tributos_aproximado=Decimal('21.06'),
)

# Produto
nota_fiscal.adicionar_produto_servico(
    codigo='000328',                           
    descricao='NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO SEM VALOR FISCAL',
    ncm='99999999',
    #cest='0100100',                            
    cfop='5102',
    unidade_comercial='UN',
    ean='SEM GTIN',
    ean_tributavel='SEM GTIN',
    quantidade_comercial=Decimal('12'),        
    valor_unitario_comercial=Decimal('9.75'),  
    valor_total_bruto=Decimal('117.00'),       
    unidade_tributavel='UN',
    quantidade_tributavel=Decimal('12'),
    valor_unitario_tributavel=Decimal('9.75'),
    ind_total=1,
    # numero_pedido='12345',                   
    # numero_item='123456',                    
    icms_modalidade='102',
    icms_origem=0,
    icms_csosn='400',
    pis_modalidade='07',
    cofins_modalidade='07',
    valor_tributos_aprox='21.06'
    )

# responsável técnico
nota_fiscal.adicionar_responsavel_tecnico(
    cnpj='99999999000199',
    contato='TadaSoftware',
    email='tadaso...@gmail.com',
    fone='11912341234'
  )

# serialização
serializador = SerializacaoXML(_fonte_dados, homologacao=homologacao)
nfe = serializador.exportar()

# assinatura
a1 = AssinaturaA1(certificado, senha)
xml = a1.assinar(nfe)

# envio
con = ComunicacaoSefaz(uf, certificado, senha, homologacao)
envio = con.autorizacao(modelo='nfe', nota_fiscal=xml)


if envio[0] == 0:
    print('Sucesso!')
    print(etree.tostring(envio[1], encoding="unicode").replace('\n','').replace('ns0:','').replace(':ns0', ''))

else:
    print('Erro:')
    print(envio[1].text) # resposta
    print('Nota:')
    print(etree.tostring(envio[2], encoding="unicode")) # nfe

Porém, sempre que eu executo, ele está me retornando este erro abaixo:

<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><nfeResultMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeAutorizacao4"><retEnviNFe
versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>2</tpAmb><verAplic>SVRS202210040826</verAplic><cStat>104</cStat><xMotivo>Lote processado</xMotivo><cUF>12</cUF><dhRecbto>2022-10-08T11:15:32-05:00</dhRecbto><protNFe versao="4.00"><infProt><tpAmb>2</tpAmb><verAplic>SVRS202210040826</verAplic><chNFe>12221025164896000175550010001515151759977681</chNFe><dhRecbto>2022-10-08T11:15:32-05:00</dhRecbto><digVal>wP8Wx/L5lNErrIg2FGPAppiA3tU=</digVal><cStat>297</cStat><xMotivo>Rejeicao: Assinatura difere do calculado</xMotivo></infProt></protNFe></retEnviNFe></nfeResultMsg></soap:Body></soap:Envelope>


Não estou conseguindo descobrir que parte do meu código está ocasionando este retorno... Se alguém puder me ajudar ficaria muito grato.

David Cuba

unread,
Oct 14, 2022, 10:27:23 AM10/14/22
to PyNFe
Conseguiu resolver?

Caio Kleiton

unread,
Oct 24, 2022, 2:07:19 PM10/24/22
to PyNFe
Não exatamente amigo... Abandonei esta biblioteca e adquiri uma API para emissão de NFe que automatiza grande parte da "dor de cabeça" e consegui implementar no meu programa facilmente.

Ela é paga e se chama Focus NFe.

Luana Beatriz

unread,
Oct 31, 2022, 9:59:25 AM10/31/22
to PyNFe

Bom dia David e Caio, td bem?
Sou uma curiosa em python, bem iniciante da iniciante faço parte github, tem muitos script's maravilhosos lá.

Eu uso o script abaixo, onde eu add as chaves de acessos emissões proprias aqui da empresa nos casos saídas e entrada que emitimos quando o cliente não tem inscrição estadual.

Quando eu faço a consulta todas as UF's consultada traz o status da nota conforme sefaz desde autorizada / denegada / cancelada e etc, mas estou com o problema com a UF de GO, ela me traz Erro na consulta. Estou instalado o python3.10
Se vcs já viram esse erro em algum script que vcs usam, vcs saberiam me explicar como podemos corrigir ?


"""
Script that checks Brazilian Tax Authority for Fiscal Notes Status
"""

import re
import xlsxwriter
import urllib3
from pynfe.processamento.comunicacao import ComunicacaoSefaz


urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
BASE_FOLDER = 'C:/Users/XXXXXXXXXX/Desktop/Teste Consulta/'
workbook = xlsxwriter.Workbook(f'{BASE_FOLDER}Consulta NFs.xlsx')

worksheet = workbook.add_worksheet()

ROW = 0
COL = 0
worksheet.write (ROW, COL, "Access_Key")
worksheet.write (ROW, COL+1, "Status")

#This is just a reminder for usage when looking for entries invoices
#Alterar no inicio da utilizacao

#EMPRESA = 'XXX'
#EMPRESA = 'XXXXXX'

#if EMPRESA == 'XXX':
#    CERTIFICADO = 'C:/Users/XXXXXXXXXX/Desktop/XXX_Fiscal_Certificate_Review_102023.pfx'
#    SENHA = 'XXX'
#if EMPRESA == 'XXXXXXX':
#    CERTIFICADO = 'C:/Users/XXXXXXXXXX/Desktop/XXXXXX_Fiscal_Certificate_Review_102023.pfx'
#    SENHA = 'XXX'

MODELO = '55'
HOMOLOGACAO = False
f = open(r"C:\Users\XXXXXXXXXX\Desktop\Teste Consulta\Teste.txt")

ROW = 1
COL = 0
while True:
    #try:
    # begin while loop
    # read each line from .txt file + cut off line break char
    CURRENT_LINE = str(f.readline().strip('\n'))
    CHAVE_ACESSO = str(CURRENT_LINE[:44])
    UF = str(CURRENT_LINE[-2:])
    XXX = CHAVE_ACESSO.find('33333333')
    XXXXXX = CHAVE_ACESSO.find('47474747')

    if XXX > 0:
        CERTIFICADO = ('C:/Users/XXXXXXXXXX/Desktop/'
        'XXX_Fiscal_Certificate_Review_102023.pfx')
        SENHA = 'XXX'

    if XXXXXXX > 0:
        CERTIFICADO = ('C:/Users/XXXXXXXXXX/Desktop/'
                        'PX_Fiscal_Certificate_Review_102023.pfx')
        SENHA = 'XXXXXX'
    #suffix = '.xml'
    if len(CHAVE_ACESSO) == 0:
        break
    #chave_acesso = chave
    try:
        con = ComunicacaoSefaz(UF, CERTIFICADO, SENHA, HOMOLOGACAO)
        #envio = con.consulta_distribuicao(cnpj, cpf, chave_acesso, nsu=0)
        envio = con.consulta_nota('nfe', CHAVE_ACESSO) # nfe ou nfce
        #print (envio.text.encode('utf-8')) # SEFAZ SP utilizar envio.content
    # print (envio.content)
    # xml_arquivo = f'{chave_acesso}.xml'
    # with open(xml_arquivo, "w") as arquivo:
    #     if uf == "SP":
    #         arquivo.write(envio.content)
    #     else:
    #         arquivo.write(envio.text)
        XML = envio.text
        def matching(standard,text,position):
            """
            Checks for data wihin the XML file
            """
            match=re.search(standard,text)
            if match:
                valor=match.group(int(position))
            else:
                valor=""
            return valor
        def matching_several(standard,text):
            """
            Checks for data wihin the XML file
            """
            match=re.search(standard,text)
            if match:
                valor=match.group()
            else:
                valor=""
            return valor
        STATUS = matching(r'<xMotivo>((.|\n)*?)</xMotivo>',XML,1)
        print (CHAVE_ACESSO, STATUS, ROW)
    except ConnectionError as EXCEPTION_1:
        print("Fim")
    except Exception as EXCEPTION_2:
        STATUS = "Erro na consulta - Envie novamente"
        print (CHAVE_ACESSO, STATUS, ROW)
    report_data = (
      [CHAVE_ACESSO, STATUS],
    )
    for CHAVE_ACESSO, STATUS in report_data:
        worksheet.write (ROW, COL, CHAVE_ACESSO)
        worksheet.write (ROW, COL+1, STATUS)
        ROW += 1
    # Zero length indicates EOF
    if len(CHAVE_ACESSO) == 0:
        break
  # end of while loop
# close the file
f.close()
workbook.close()
 # main end
Reply all
Reply to author
Forward
0 new messages