Emissão NFE erro Decimal

233 views
Skip to first unread message

Junior Miranda

unread,
May 12, 2016, 6:12:30 PM5/12/16
to PyNFe
Boa noite, estou tentando utilizar a documentação do leotada pra emitir NFE, porem esta ocorrendo o seguinte erro:
Traceback (most recent call last):
  File "D:/Python/PyNFE/teste.py", line 110, in <module>
    nfe = serializador.exportar()
  File "C:\Python34\lib\site-packages\pynfe\processamento\serializacao.py", line 76, in exportar
    raise e
  File "C:\Python34\lib\site-packages\pynfe\processamento\serializacao.py", line 69, in exportar
    raiz.append(self._serializar_nota_fiscal(nf, retorna_string=False))
  File "C:\Python34\lib\site-packages\pynfe\processamento\serializacao.py", line 457, in _serializar_nota_fiscal
    det = self._serializar_produto_servico(item, modelo=nota_fiscal.modelo, retorna_string=False)
  File "C:\Python34\lib\site-packages\pynfe\processamento\serializacao.py", line 249, in _serializar_produto_servico
    etree.SubElement(imposto, 'vTotTrib').text = produto_servico.valor_tributos_aprox
  File "lxml.etree.pyx", line 951, in lxml.etree._Element.text.__set__ (src\lxml\lxml.etree.c:46353)
  File "apihelpers.pxi", line 695, in lxml.etree._setNodeText (src\lxml\lxml.etree.c:20953)
  File "apihelpers.pxi", line 683, in lxml.etree._createTextNode (src\lxml\lxml.etree.c:20829)
  File "apihelpers.pxi", line 1391, in lxml.etree._utf8 (src\lxml\lxml.etree.c:27100)
TypeError: Argument must be bytes or unicode, got 'Decimal'

Alguém sabe me dizer o que pode ser? o meu código esta igual o dele!

Junior Tada

unread,
May 13, 2016, 3:41:31 PM5/13/16
to PyNFe
Junior a documentação estava desatualizada, produto_servico.valor_tributos_aprox agora deve receber um valor String e não Decimal.
Já corrigi a documentação. 

Ps: em nota_fiscal.totais_tributos_aprox continua sendo Decimal.

Junior Miranda

unread,
May 13, 2016, 4:02:11 PM5/13/16
to PyNFe
Boa tarde Junior Tada,

Realmente era esse o problema! Porem ocorreu um erro na chamada da assinatura:

Traceback (most recent call last):
  File "D:/Python/PyNFE/teste.py", line 114, in <module>
    xml = a1.assinar(nfe)
  File "C:\Python34\lib\site-packages\pynfe\processamento\assinatura.py", line 66, in assinar
    raise e
  File "C:\Python34\lib\site-packages\pynfe\processamento\assinatura.py", line 58, in assinar
    subprocess.check_call(['xmlsec1', '--sign', '--pkcs12', self.certificado, '--pwd', self.senha, '--crypto', 'openssl', '--output', 'funfa.xml', '--id-attr:Id', tag, 'testes.xml'])
  File "C:\Python34\lib\subprocess.py", line 556, in check_call
    retcode = call(*popenargs, **kwargs)
  File "C:\Python34\lib\subprocess.py", line 537, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Python34\lib\subprocess.py", line 859, in __init__
    restore_signals, start_new_session)
  File "C:\Python34\lib\subprocess.py", line 1112, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] O sistema não pode encontrar o arquivo especificado

O problema é esse testes.xml? Sabe como resolver?

Junior Tada

unread,
May 15, 2016, 8:13:46 PM5/15/16
to PyNFe
O xmlsec não gerou o arquivo assinado. É algum problema com o seu certificado digital. Precisa ser do tipo A1 e ser válido.
Estou vendo que vc está utilizando windows, como vc está informando a url do certificado? Pode ser o path montado errado, assim ele não encontra o certificado.

Junior Miranda

unread,
May 16, 2016, 9:35:18 AM5/16/16
to PyNFe
O certificado é no modelo A1 e é valido, estou puxando direto do path, certificado = "certificado.pfx", usando o con.status_servico('nfe') funciona. Existe alguma forma de eu testar o certificado ou algo do tipo? Eu acredito que seja válido, mas pra que eu possa confirmar! 

Junior Tada

unread,
May 16, 2016, 9:53:07 AM5/16/16
to PyNFe
Se vc conseguiu executar o status servico então seu certificado está correto. O problema então deve ser xmlsec no windows. 

Junior Miranda

unread,
May 16, 2016, 10:09:45 AM5/16/16
to PyNFe
Então, uso a versão 3.4 do Python, nesse caso lxml eu tive que instalar a partir do site:


através do pip dava erro do microsoft visual studio lá...

Junior Miranda

unread,
May 16, 2016, 10:24:55 AM5/16/16
to PyNFe
Acho que faltou o xmlsec, vou verificar e já informo certo!

Junior Miranda

unread,
May 16, 2016, 10:37:42 AM5/16/16
to PyNFe
Cheguei a colocar no path o xmlsec: C:\xmlsec1-1.2.20-win32-x86_64 mas continuo o mesmo problema

Junior Tada

unread,
May 16, 2016, 1:41:15 PM5/16/16
to PyNFe
O lxml é uma coisa e o xmlsec é outra. Segue o tutorial de instalação da documetação:

Lembrando que precisa baixar TODOS os arquivos binários no windows (x86 ou x64) e não só o executável do xmlsec.

Junior Miranda

unread,
May 16, 2016, 2:11:42 PM5/16/16
to PyNFe
Então, fiz o download de todos os arquivos binarios extrai pra uma pasta no c (C:\xmlsec64) e adicionei ao path do Windows, se eu executo o xmlsec1.exe, ele não ocorre nenhum erro, apenas fecha (antes qnd não havia baixado TODOS, ele dava erro de DLL), porem ao executar o script ocorre o mesmo erro

Junior Tada

unread,
May 16, 2016, 3:28:00 PM5/16/16
to PyNFe
Abre o cmd do windows e digita: xmlsec1
Veja se executa sem erros e qual o retorno.

Junior Miranda

unread,
May 16, 2016, 4:05:13 PM5/16/16
to PyNFe
xmlsec is a command line tool for signing, verifying, encrypting and
decrypting XML documents. The allowed <command> values are:
  --help        display this help information and exit
  --help-all    display help information for all commands/options and exit
  --help-<cmd>  display help information for command <cmd> and exit
  --version     print version information and exit
  --keys        keys XML file manipulation
  --sign        sign data and output XML document
  --verify      verify signed document
  --sign-tmpl   create and sign dynamicaly generated signature template
  --encrypt     encrypt data and output XML document
  --decrypt     decrypt data from XML document



Written by Aleksey Sanin 

Copyright (C) 2002-2003 Aleksey Sanin.
This is free software: see the source for copying information.

Leonardo Tada

unread,
May 16, 2016, 4:17:40 PM5/16/16
to PyNFe
@Junior Miranda então está correto. Qual o erro ao executar o pynfe? Pode ser que o xml não foi gerado antes da assinatura e deu erro.

Junior Miranda

unread,
May 16, 2016, 4:48:32 PM5/16/16
to PyNFe
Traceback (most recent call last):
  File "D:/Python/PyNFE/teste.py", line 114, in <module>
    xml = a1.assinar(nfe)
  File "C:\Python34\lib\site-packages\pynfe\processamento\assinatura.py", line 66, in assinar
    raise e
  File "C:\Python34\lib\site-packages\pynfe\processamento\assinatura.py", line 58, in assinar
    subprocess.check_call(['xmlsec1', '--sign', '--pkcs12', self.certificado, '--pwd', self.senha, '--crypto', 'openssl', '--output', 'funfa.xml', '--id-attr:Id', tag, 'testes.xml'])
  File "C:\Python34\lib\subprocess.py", line 556, in check_call
    retcode = call(*popenargs, **kwargs)
  File "C:\Python34\lib\subprocess.py", line 537, in call
    with Popen(*popenargs, **kwargs) as p:
  File "C:\Python34\lib\subprocess.py", line 859, in __init__
    restore_signals, start_new_session)
  File "C:\Python34\lib\subprocess.py", line 1112, in _execute_child
    startupinfo)
FileNotFoundError: [WinError 2] O sistema não pode encontrar o arquivo especificado

Junior Miranda

unread,
May 16, 2016, 5:38:12 PM5/16/16
to PyNFe
Tentei colocar um sleep de 60 seg antes de chamar o metodo pra assinar, mas n resolveu

Junior Miranda

unread,
May 18, 2016, 8:52:56 AM5/18/16
to PyNFe
Aparentemente, resolveu funcionar agora! O que aconteceu não sei, mas funcionou! 

Só que o retorno do xml é: Falha no Schema XML do lote de NFe. com.sun.xml.bind.api.AccessorException: java.lang.IllegalArgumentException: 2016-05-18T09:36:59Hora oficial do Bras:il

Sabem me informar como resolver?

Junior Tada

unread,
May 18, 2016, 9:48:43 AM5/18/16
to PyNFe
Coloca aqui o xml que vc enviou ou testa no validador do RS.
https://www.sefaz.rs.gov.br/NFE/NFE-VAL.aspx

Junior Miranda

unread,
May 18, 2016, 10:43:50 AM5/18/16
to PyNFe
Parser XML: Data at the root level is invalid. Line 3, position 1.

O problema é a data msm, mas não consigo entender o por que, já que apenas uso o now()
testes.xml

Junior Tada

unread,
May 18, 2016, 11:25:33 AM5/18/16
to PyNFe
Tem dois erros:

Data e hora da emissão (default é assim 2016-03-28T17:22:52-03:00)e o nome do emitente está com um espaço/quebra de linha.
O seu timezone acho que por ser windows (eu uso linux) está vindo horário oficial do Brasil e não -03:00.
Vou precisar da sua ajuda pra corrigir isso. No python me fala a saida para o codigo:
time.strftime("%z")

No emitente.razao_social, remove o espaço no começo da string.

Junior Miranda

unread,
May 18, 2016, 11:39:17 AM5/18/16
to PyNFe
No caso do emitente ta assim(não tem espaço, no começo da str): 
razao_social='NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL',

Esse campo não pode conter nenhum "espaço"?

No caso da data:
>>> import time
>>> time.strftime("%z")
'Hora oficial do Brasil'

Junior Tada

unread,
May 18, 2016, 11:57:06 AM5/18/16
to PyNFe
No nome o que vc anexou aqui está com espaço, pode ter sido o programa que vc utilizou para salvar.
No timezone parece um bug no python, sua versão é a 3.4? Parece que corrigiram na 3.5, mas...
testa este código, se funcionar eu modifico aqui, assim vc pode usar no python 3.4 mesmo

from datetime import datetime
from dateutil import tz
datetime.now(tz.tzlocal()).strftime('%z')

link do bug:
http://bugs.python.org/issue20010

Junior Miranda

unread,
May 18, 2016, 12:00:29 PM5/18/16
to PyNFe
>>> from datetime import datetime
>>> from dateutil import tz
>>> datetime.now(tz.tzlocal()).strftime('%z')
'-0300'

Junior Tada

unread,
May 18, 2016, 12:27:59 PM5/18/16
to PyNFe
Alterei o PyNFe Junior, atualiza e testa de novo por favor.

Junior Miranda

unread,
May 18, 2016, 12:48:17 PM5/18/16
to PyNFe
Atualizei, mudou o erro kk '-'
"Falha no Schema XML do lote de NFe. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 6227; cvc-complex-type.2.4.d: Invalid content was found starting with element &apos;X509Certificate&apos;. No child element is expected at this point."
testes.xml

Junior Tada

unread,
May 18, 2016, 12:55:20 PM5/18/16
to PyNFe
O problema está na assinatura agora. Tenta validar o xml assinado no validador da sefaz rs.
Message has been deleted

Junior Miranda

unread,
May 18, 2016, 1:21:54 PM5/18/16
to PyNFe

Junior Tada

unread,
May 18, 2016, 1:29:39 PM5/18/16
to PyNFe
Está sem assinatura. O xml que vc enviou estava sem assinar. O assinado é o funfa.xml ou exibe ele no terminal.

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

# assinatura
a1 = AssinaturaA1(certificado, senha)
xml = a1.assinar(nfe)
from lxml import etree
etree.tostring(xml, encoding='unicode')

Junior Miranda

unread,
May 18, 2016, 1:38:14 PM5/18/16
to PyNFe
  • Mesmo colocando o funfa.xml pra validar da esse erro, segue o Funfa. Troquei os valores das keys por ###

  • Parser XML: Nenhum erro encontrado
  • Tipo de Mensagem: Documento de NF-e
funfa.txt

Junior Tada

unread,
May 18, 2016, 1:54:03 PM5/18/16
to PyNFe
Não, este arquivo é a resposta da receita. Me manda o xml assinado.

Junior Miranda

unread,
May 18, 2016, 1:55:56 PM5/18/16
to PyNFe
o funfa.xml, correto? 
funfa.xml

Junior Tada

unread,
May 18, 2016, 2:19:42 PM5/18/16
to PyNFe
Está duplicado a sua assinatura. Se remove as assinaturas que estão sobrando ficam corretas.
Aquela tag <x509Certificate> precisa existir apenas uma vez.
Apaga o funfa.xml e o testes.xml e executa de novo.
E verifica no seu código se esta parte só executa uma vez:

Junior Miranda

unread,
May 18, 2016, 2:25:28 PM5/18/16
to PyNFe
Junior, deletei os dois arquivos, coloquei uma verificação no metodo assinar, e sim, só esta sendo executado uma vez, porem, sempre gerar 4 <x509Certificate>.  Inclui o fonte no anexo
teste.py

Junior Tada

unread,
May 18, 2016, 2:49:54 PM5/18/16
to PyNFe
Seu código está correto, o erro é no xmlsec1 ou no openssl. Desinstala e instala de novo. Verifica o path do windows. Qual a sua versão de windows?
Executa a assinatura manual no cmd, veja se aponta algum erro.
 xmlsec1 --sign --pkcs12 seu_certificado.pfx --pwd senha --crypto openssl --output funfa.xml --id-attr:Id infNFe testes.xml

Junior Miranda

unread,
May 18, 2016, 3:14:25 PM5/18/16
to PyNFe
D:\Python\PyNFE>xmlsec1 --sign --pkcs12 certificado.pfx --pwd senha --crypto openssl --output funfa.xml --id-attr:Id infNFe testes.xml
Assinou normal, sem erro! Porem, 4x... 
Uso Windows (10) 64bits, testei com o xmlesc1 32 e 64 no Path(C:\xmlsec\bin)

Junior Miranda

unread,
May 18, 2016, 3:20:57 PM5/18/16
to PyNFe
o PyOpenSSL é a versão 16.0.0

Junior Tada

unread,
May 18, 2016, 3:51:11 PM5/18/16
to PyNFe
e o xmlsec1 --version?

Junior Miranda

unread,
May 18, 2016, 5:37:23 PM5/18/16
to PyNFe
xmlsec1 1.2.20 (openssl)

Em quarta-feira, 18 de maio de 2016 16:51:11 UTC-3, Junior Tada escreveu:
e o xmlsec1 --version?

Junior Miranda

unread,
May 19, 2016, 2:05:49 PM5/19/16
to PyNFe
Pode ser minha maquina ou o Certificado? Por que assim, tentei usar outras versões do xmlsec só que ai deu erro, agora se deixo a versão "atual", funciona "normal" (assinando 4x :/ )... 

Junior Tada

unread,
May 19, 2016, 2:34:41 PM5/19/16
to PyNFe
A minha versão é a 1.2.18, mas acho que não é isso. Testei no windows 7 x64 e funcionou sem problemas. Não tenho ideia de pq está causando este erro.
Vou ver se tem alguma outra forma de assinar ou utilizando outra lib.

Junior Miranda

unread,
May 19, 2016, 2:39:24 PM5/19/16
to PyNFe
Vou montar um VM do w7 64 e testar com tudo da mesma forma que tenho aqui, pra ver se pode ser alguma coisa de versão e etc... Ou é o W10

Junior Miranda

unread,
May 20, 2016, 12:03:12 PM5/20/16
to PyNFe
Junior, bom dia!

Então, crie um vm do w7 64 e coloquei apenas o xmlsec e tentei assinar, assinou... mas com o problema... Então acredito eu, que o problema é o xmlsec que estou usando, você poderia colocar uma versão .zip/.rar da que você utiliza pra eu testar?

Junior Miranda

unread,
May 23, 2016, 3:52:56 PM5/23/16
to PyNFe
É, tentei usar varias realese do xmlsec, todas dão o mesmo problema... 4x a key. Até na maquina virtual com w7 

Junior Miranda

unread,
May 30, 2016, 8:02:40 AM5/30/16
to PyNFe
Fiz a instalação de uma VM em debian, instalei o xmlsec e coloquei o certificado e o teste.xml e ocorreu o mesmo problema, o problema está no teste.xml será?

Junior Tada

unread,
May 30, 2016, 10:32:49 AM5/30/16
to PyNFe
Junior, sinceramente eu não sei, pq tenho o PyNFe rodando em produção para NF-e/NFC-e e NFS-e com ubuntu, ubuntu server, centOS e windows e nunca tive este problema. Desde o dia que falei com vc estou vendo outras formas de assinatura para tentar corrigir seu problema.
Qual o seu fornecedor do certificado digital? Qual a "marca" dele? Os que eu tenho aqui agora para teste são todos da Certising. Me lembro de um caso onde um usuário estava tendo problemas com a assinatura por ter exportado o certificado de forma errada no formato .pfx

Junior Miranda

unread,
May 30, 2016, 10:39:46 AM5/30/16
to PyNFe
Junior Tada o certificado é Ac soluti multipla. 
Reply all
Reply to author
Forward
0 new messages