Git Product home page Git Product logo

pytrustnfe's Introduction

PyTrustNFe

Biblioteca Python que tem por objetivo enviar NFe, NFCe e NFSe no Brasil

Coverage Status Build Status PyPI version

Pacotes necessários para instalação:

apt-get install --no-install-recommends python3-pip python3-wheel python3-setuptools python3-openssl python3-lxml

Dependências:

  • PyXmlSec
  • lxml
  • signxml
  • suds-jurko
  • suds-jurko-requests
  • reportlab
  • Jinja2

NFSe - Cidades atendidas

  • Paulistana - São Paulo/SP
  • Nota Carioca - Rio de Janeiro/RJ
  • Imperial - Petrópolis/RH
  • Goiânia - Goiânia/GO
  • Susesu - 3 cidades atendidas
  • Simpliss - 18 cidade atendidas
  • GINFES - 79 cidades atendidas
  • DSF - 7 cidades atendidas

Roadmap

Teste unitários

Implementar novos provedores de NFSe

  • Betha - 81 cidades atendidas WIP
  • WebISS - 51 cidades atendidas
  • ISSIntel - 32 cidades atendidas
  • ISSNET - 32 cidades atendidas
  • Saatri - 31 cidades atendidas

Exemplos de uso da NFe

Consulta Cadastro por CNPJ:

from pytrustnfe.nfe import consulta_cadastro
from pytrustnfe.certificado import Certificado

certificado = open("/path/certificado.pfx", "r").read()
certificado = Certificado(certificado, 'senha_pfx')
obj = {'cnpj': '12345678901234', 'estado': '42'}
resposta = consulta_cadastro(certificado, obj=obj, ambiente=1, estado='42')

Consulta Distribuição NF-e sem Validação de Esquema:

from pytrustnfe.certificado import Certificado
from pytrustnfe.nfe import consulta_distribuicao_nfe, xml_consulta_distribuicao_nfe

certificado = open("/path/certificado.pfx", "r").read()
certificado = Certificado(certificado, 'senha_pfx')

# Gerando xml e enviado consulta por Ultimo NSU
response1 = consulta_distribuicao_nfe(
    certificado,
    ambiente=1,
    estado='42',
    modelo='55',
    cnpj_cpf='12345678901234',
    ultimo_nsu='123456789101213'
)

# Gerando xml e enviado consulta por Chave
response2 = consulta_distribuicao_nfe(
    certificado,
    ambiente=1,
    estado='42',
    modelo='55',
    cnpj_cpf='12345678901234',
    chave_nfe='012345678901234567890123456789012345678912'
)

# Gerando xml e enviado consulta por NSU
response3 = consulta_distribuicao_nfe(
    certificado,
    ambiente=1,
    estado='42',
    modelo='55',
    cnpj_cpf='12345678901234',
    nsu='123456789101213'
)

Consulta Distribuição NF-e com Validação de Esquema:

from pytrustnfe.certificado import Certificado
from pytrustnfe.nfe import consulta_distribuicao_nfe, xml_consulta_distribuicao_nfe
from pytrustnfe.xml.validate import valida_nfe, SCHEMA_DFE

certificado = open("/path/certificado.pfx", "r").read()
certificado = Certificado(certificado, 'senha_pfx')

# Gerando XML para Consulta por Ultimo NSU
xml1 = xml_consulta_distribuicao_nfe(
    certificado,
    ambiente=1,
    estado='42',
    cnpj_cpf='12345678901234',
    ultimo_nsu='123456789101213'
)

# Validando o XML com Esquema
if valida_nfe(xml1, SCHEMA_DFE):
    Warning("Erro na validação do esquema")
    
# Gerando XML para Consulta por Chave
xml2 = xml_consulta_distribuicao_nfe(
    certificado,
    ambiente=1,
    estado='42',
    cnpj_cpf='12345678901234',
    chave_nfe='012345678901234567890123456789012345678912'
)

# Validando o XML com Esquema
if valida_nfe(xml2, SCHEMA_DFE):
    Warning("Erro na validação do esquema")
    
# Gerando XML para Consulta por NSU
xml3 = xml_consulta_distribuicao_nfe(
    certificado,
    ambiente=1,
    estado='42',
    cnpj_cpf='12345678901234',
    nsu='123456789101213'
)

# Validando o XML com Esquema
if valida_nfe(xml3, SCHEMA_DFE):
    Warning("Erro na validação do esquema")

# Enviando xml de consulta para sefaz
response = consulta_distribuicao_nfe(
    certificado,
    ambiente=1,
    estado='42',
    modelo='55',
    xml=xml1
)

Exemplo de uso da NFSe Paulistana

Envio de RPS por lote

certificado = open('/path/certificado.pfx', 'r').read()
certificado = Certificado(certificado, '123456')
# Necessário criar um dicionário com os dados, validação dos dados deve
# ser feita pela aplicação que está utilizando a lib
rps = [
    {
        'assinatura': '123',
        'serie': '1',
        'numero': '1',
        'data_emissao': '2016-08-29',
        'codigo_atividade': '07498',
        'valor_servico': '2.00',
        'valor_deducao': '3.00',
        'prestador': {
            'inscricao_municipal': '123456'
        },
        'tomador': {
            'tipo_cpfcnpj': '1',
            'cpf_cnpj': '12345678923256',
            'inscricao_municipal': '123456',
            'razao_social': 'Trustcode',
            'tipo_logradouro': '1',
            'logradouro': 'Vinicius de Moraes, 42',
            'numero': '42',
            'bairro': 'Corrego',
            'cidade': '4205407',  # Código da cidade, de acordo com o IBGE
            'uf': 'SC',
            'cep': '88037240',
        },
        'codigo_atividade': '07498',
        'aliquota_atividade': '5.00',
        'descricao': 'Venda de servico'
    }
]
nfse = {
    'cpf_cnpj': '12345678901234',
    'data_inicio': '2016-08-29',
    'data_fim': '2016-08-29',
    'total_servicos': '2.00',
    'total_deducoes': '3.00',
    'lista_rps': rps
}

retorno = envio_lote_rps(certificado, nfse=nfse)
# retorno é um dicionário { 'received_xml':'', 'sent_xml':'', 'object': object() }
print retorno['received_xml']
print retorno['sent_xml']

# retorno['object'] é um objeto python criado apartir do xml de resposta
print retorno['object'].Cabecalho.Sucesso
print retorno['object'].ChaveNFeRPS.ChaveNFe.NumeroNFe
print retorno['object'].ChaveNFeRPS.ChaveRPS.NumeroRPS

Cancelamento de NFSe:

from pytrustnfe.certificado import Certificado
from pytrustnfe.nfse.paulistana import cancelamento_nfe

certificado = open('/path/certificado.pfx', 'r').read()
certificado = Certificado(certificado, '123456')
cancelamento = {
    'cnpj_remetente': '123',
    'assinatura': 'assinatura',
    'numero_nfse': '456',
    'inscricao_municipal': '654',
    'codigo_verificacao': '789',
}

retorno = cancelamento_nfe(certificado, cancelamento=cancelamento)

# retorno é um dicionário { 'received_xml':'', 'sent_xml':'', 'object': object() }
print retorno['received_xml']
print retorno['sent_xml']

# retorno['object'] é um objeto python criado apartir do xml de resposta
print retorno['object'].Cabecalho.Sucesso

if not retorno['object'].Cabecalho.Sucesso: # Cancelamento com erro
    print retorno['object'].Erro.Codigo
    print retorno['object'].Erro.Descricao

pytrustnfe's People

Contributors

alysonbg avatar britoederr avatar carcaroff avatar carlos-korovsky avatar chronossc avatar crsilveira avatar danimaribeiro avatar fabioluna avatar faio avatar felipepaloschi avatar filipealft avatar gabicavalcante avatar guilhermelds avatar heron-brito avatar heronbrito avatar implantisolucoes avatar isabela-morais avatar jonatasbiazus avatar maiconkkl avatar marinagd avatar martini97 avatar ninobaldo avatar nogueira-raphael avatar regianenas avatar yk2kus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pytrustnfe's Issues

Mensagem: HTTPSConnectionPool(host='nfe-homologacao.svrs.rs.gov.br', port=443):

Erro:
Odoo Server Error

Traceback (most recent call last):
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/contrib/pyopenssl.py", line 441, in wrap_socket
cnx.do_handshake()
File "/opt/bitnami/python/lib/python3.6/site-packages/pyOpenSSL-17.5.0-py3.6.egg/OpenSSL/SSL.py", line 1806, in do_handshake
self._raise_ssl_error(self._ssl, result)
File "/opt/bitnami/python/lib/python3.6/site-packages/pyOpenSSL-17.5.0-py3.6.egg/OpenSSL/SSL.py", line 1546, in _raise_ssl_error
_raise_current_error()
File "/opt/bitnami/python/lib/python3.6/site-packages/pyOpenSSL-17.5.0-py3.6.egg/OpenSSL/_util.py", line 54, in exception_from_error_queue
raise exception_type(errors)
OpenSSL.SSL.Error: [('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/connectionpool.py", line 601, in urlopen
chunked=chunked)
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/connectionpool.py", line 346, in _make_request
self._validate_conn(conn)
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/connectionpool.py", line 850, in validate_conn
conn.connect()
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/connection.py", line 326, in connect
ssl_context=context)
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/util/ssl
.py", line 329, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/contrib/pyopenssl.py", line 448, in wrap_socket
raise ssl.SSLError('bad handshake: %r' % e)
ssl.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/bitnami/python/lib/python3.6/site-packages/requests-2.18.4-py3.6.egg/requests/adapters.py", line 440, in send
timeout=timeout
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/connectionpool.py", line 639, in urlopen
_stacktrace=sys.exc_info()[2])
File "/opt/bitnami/python/lib/python3.6/site-packages/urllib3-1.22-py3.6.egg/urllib3/util/retry.py", line 388, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='nfe-homologacao.svrs.rs.gov.br', port=443): Max retries exceeded with url: /ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/http.py", line 647, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/http.py", line 307, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/tools/pycompat.py", line 87, in reraise
raise value
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/http.py", line 689, in dispatch
result = self._call_function(**self.params)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/http.py", line 339, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/service/model.py", line 97, in wrapper
return f(dbname, *args, **kwargs)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/http.py", line 332, in checked_call
result = self.endpoint(*a, **kw)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/http.py", line 933, in call
return self.method(*args, **kw)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/http.py", line 512, in response_wrap
response = f(*args, **kw)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/addons/web/controllers/main.py", line 934, in call_button
action = self._call_kw(model, method, args, {})
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/addons/web/controllers/main.py", line 922, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/api.py", line 689, in call_kw
return call_kw_multi(method, model, args, kwargs)
File "/opt/bitnami/apps/odoo/lib/odoo-11.0.post20180218-py3.6.egg/odoo/api.py", line 680, in call_kw_multi
result = method(recs, *args, **kwargs)
File "/home/bitnami/addon/odoo-brasil/br_nfe/models/invoice_eletronic.py", line 910, in action_send_eletronic_invoice
modelo=self.model)
File "/opt/bitnami/python/lib/python3.6/site-packages/PyTrustNFe3-1.0.27-py3.6.egg/pytrustnfe/nfe/init.py", line 114, in autorizar_nfe
return _send(certificado, 'NfeAutorizacao', **kwargs)
File "/opt/bitnami/python/lib/python3.6/site-packages/PyTrustNFe3-1.0.27-py3.6.egg/pytrustnfe/nfe/init.py", line 85, in _send
client = Client(base_url, transport=transport)
File "/opt/bitnami/python/lib/python3.6/site-packages/zeep-3.1.0-py3.6.egg/zeep/client.py", line 62, in init
wsdl, self.transport, settings=self.settings)
File "/opt/bitnami/python/lib/python3.6/site-packages/zeep-3.1.0-py3.6.egg/zeep/wsdl/wsdl.py", line 82, in init
document = self._get_xml_document(location)
File "/opt/bitnami/python/lib/python3.6/site-packages/zeep-3.1.0-py3.6.egg/zeep/wsdl/wsdl.py", line 143, in _get_xml_document
location, self.transport, self.location, settings=self.settings)
File "/opt/bitnami/python/lib/python3.6/site-packages/zeep-3.1.0-py3.6.egg/zeep/loader.py", line 74, in load_external
content = transport.load(url)
File "/opt/bitnami/python/lib/python3.6/site-packages/zeep-3.1.0-py3.6.egg/zeep/transports.py", line 110, in load
content = self._load_remote_data(url)
File "/opt/bitnami/python/lib/python3.6/site-packages/zeep-3.1.0-py3.6.egg/zeep/transports.py", line 126, in _load_remote_data
response = self.session.get(url, timeout=self.load_timeout)
File "/opt/bitnami/python/lib/python3.6/site-packages/requests-2.18.4-py3.6.egg/requests/sessions.py", line 521, in get
return self.request('GET', url, **kwargs)
File "/opt/bitnami/python/lib/python3.6/site-packages/requests-2.18.4-py3.6.egg/requests/sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "/opt/bitnami/python/lib/python3.6/site-packages/requests-2.18.4-py3.6.egg/requests/sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "/opt/bitnami/python/lib/python3.6/site-packages/requests-2.18.4-py3.6.egg/requests/adapters.py", line 506, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='nfe-homologacao.svrs.rs.gov.br', port=443): Max retries exceeded with url: /ws/NfeAutorizacao/NFeAutorizacao4.asmx?wsdl (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",),))

Boa noite Danimar, via curl e pelo navegador o endereço está acessando, chequei a porta 443 pelo ping.eu e esta como fechada poderia ser isso ?

Exemplo de consulta e emissão de NF paulistana

Olá a todos.

Tentei encontrar a documentação para utilização dos métodos do PyTrustNFe mas não achei algo que possa me ajudar. Alguém poderia por favor me mostrar um exemplo de como consultar ou como gerar uma nota fiscal paulistana?

Obrigado desde já e agradeço especialmente ao danimaribeiro pela disponibilização do código.

Layout 4

Boa noite, alguma previsão em atualizar para o layout novo?

URL QRCode e Consulta NFC-e

@danimaribeiro sobre as urls de para a construção do QR-Code e Url de consulta da NFC-e, pela que vi alguns estados possuem Url's diferentes para cada um, mas vi apenas função e Url do QR-Code no arquivo de servidores.
Acabei de ver esta linha, é isso que esta implementando. Talvez eu esteja enganado, mas caso contrário eu poderia ajudar com isto.

Dificuldades com o PyTrustNFe

Estou utilizando o PyTrustNFe para carregar o certificado digital, extrair os dados que preciso dele.
No meu software consegui gerar o xml, porém não consegui realizar a assinatura do mesmo.

Sei que há o método assina_xml(self, xml_element, reference), mas não tenho certeza sobre o que colocar como parâmetro para "reference".

Outra coisa, as tags SignatureValue e X509Certificate são geradas pelo método acima ou preciso colocá-las separado no meu xml?

Pesquisei bastante, mas não tem muita informação sobre, por isso pergunto aqui.

Erro na emissão de NFCe

Odoo
Odoo Server Error
Traceback (most recent call last):
File "/home/odoo/odoo/odoo/http.py", line 638, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/odoo/odoo/odoo/http.py", line 675, in dispatch
result = self._call_function(**self.params)
File "/home/odoo/odoo/odoo/http.py", line 331, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/odoo/odoo/odoo/service/model.py", line 119, in wrapper
return f(dbname, *args, **kwargs)
File "/home/odoo/odoo/odoo/http.py", line 324, in checked_call
result = self.endpoint(*a, **kw)
File "/home/odoo/odoo/odoo/http.py", line 933, in call
return self.method(*args, **kw)
File "/home/odoo/odoo/odoo/http.py", line 504, in response_wrap
response = f(*args, **kw)
File "/home/odoo/odoo/addons/web/controllers/main.py", line 866, in call_button
action = self._call_kw(model, method, args, {})
File "/home/odoo/odoo/addons/web/controllers/main.py", line 854, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/odoo/odoo/odoo/api.py", line 681, in call_kw
return call_kw_multi(method, model, args, kwargs)
File "/home/odoo/odoo/odoo/api.py", line 672, in call_kw_multi
result = method(recs, *args, **kwargs)
File "/home/odoo/odoo/odoo-brasil/br_nfe/models/invoice_eletronic.py", line 497, in action_send_eletronic_invoice
resposta = autorizar_nfe(certificado, **lote)
File "/usr/local/lib/python2.7/dist-packages/pytrustnfe/nfe/init.py", line 168, in autorizar_nfe
return _send(certificado, 'NfeAutorizacao', True, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/pytrustnfe/nfe/init.py", line 127, in _send
tipo_pagamento.text, valor.text = metodo_pagamento, valor_pago
File "src/lxml/lxml.etree.pyx", line 1031, in lxml.etree._Element.text.set (src/lxml/lxml.etree.c:51737)
File "src/lxml/apihelpers.pxi", line 711, in lxml.etree._setNodeText (src/lxml/lxml.etree.c:23075)
File "src/lxml/apihelpers.pxi", line 699, in lxml.etree._createTextNode (src/lxml/lxml.etree.c:22935)
File "src/lxml/apihelpers.pxi", line 1437, in lxml.etree._utf8 (src/lxml/lxml.etree.c:30198)
TypeError: Argument must be bytes or unicode, got 'bool'

Consulta Cadastro PR - 405 Client Error: Method Not Allowed

Olá!

Segue erro ao consultar cadastro PR:

2018-08-05 16:42:43,351 12565 ERROR odoo odoo.http: Exception during JSON request handling.
Traceback (most recent call last):
  File "/home/odoo/odoo/odoo/http.py", line 650, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/odoo/odoo/odoo/http.py", line 310, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/home/odoo/odoo/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/home/odoo/odoo/odoo/http.py", line 692, in dispatch
    result = self._call_function(**self.params)
  File "/home/odoo/odoo/odoo/http.py", line 342, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/odoo/odoo/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/odoo/odoo/odoo/http.py", line 335, in checked_call
    result = self.endpoint(*a, **kw)
  File "/home/odoo/odoo/odoo/http.py", line 936, in __call__
    return self.method(*args, **kw)
  File "/home/odoo/odoo/odoo/http.py", line 515, in response_wrap
    response = f(*args, **kw)
  File "/home/odoo/odoo/addons/web/controllers/main.py", line 935, in call_button
    action = self._call_kw(model, method, args, {})
  File "/home/odoo/odoo/addons/web/controllers/main.py", line 923, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/home/odoo/odoo/odoo/api.py", line 689, in call_kw
    return call_kw_multi(method, model, args, kwargs)
  File "/home/odoo/odoo/odoo/api.py", line 680, in call_kw_multi
    result = method(recs, *args, **kwargs)
  File "<decorator-gen-287>", line 2, in action_check_sefaz
  File "/home/odoo/odoo/odoo/api.py", line 369, in loop
    result = [method(rec, *args, **kwargs) for rec in self]
  File "/home/odoo/odoo/odoo/api.py", line 369, in <listcomp>
    result = [method(rec, *args, **kwargs) for rec in self]
  File "/home/odoo/odoo-brasil/br_base/models/res_partner.py", line 201, in action_check_sefaz
    estado=self.state_id.ibge_code)
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/pytrustnfe/nfe/__init__.py", line 241, in consulta_cadastro
    return _send(certificado, 'NfeConsultaCadastro', **kwargs)
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/pytrustnfe/nfe/__init__.py", line 158, in _send
    client = Client(base_url, transport=transport)
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/zeep/client.py", line 62, in __init__
    wsdl, self.transport, settings=self.settings)
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/zeep/wsdl/wsdl.py", line 82, in __init__
    document = self._get_xml_document(location)
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/zeep/wsdl/wsdl.py", line 143, in _get_xml_document
    location, self.transport, self.location, settings=self.settings)
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/zeep/loader.py", line 74, in load_external
    content = transport.load(url)
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/zeep/transports.py", line 110, in load
    content = self._load_remote_data(url)
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/zeep/transports.py", line 127, in _load_remote_data
    response.raise_for_status()
  File "/home/odoo/odoo_11_env/lib/python3.4/site-packages/requests/models.py", line 862, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 405 Client Error: Method Not Allowed for url: https://nfe.fazenda.pr.gov.br/nfe/CadConsultaCadastro2

Segue saída do pip list:

Package             Version  
------------------- ---------
appdirs             1.4.3    
asn1crypto          0.23.0   
attrs               18.1.0   
Babel               2.3.4    
beautifulsoup4      4.6.0    
cached-property     1.4.3    
certifi             2017.11.5
cffi                1.11.2   
chardet             3.0.4    
cryptography        2.3      
decorator           4.0.10   
defusedxml          0.5.0    
docutils            0.12     
ebaysdk             2.1.5    
eight               0.4.2    
feedparser          5.2.1    
future              0.16.0   
gevent              1.1.2    
greenlet            0.4.10   
html2text           2016.9.19
idna                2.6      
isodate             0.6.0    
Jinja2              2.8      
lxml                4.2.4    
Mako                1.0.4    
MarkupSafe          0.23     
mock                2.0.0    
num2words           0.5.4    
ofxparse            0.16     
passlib             1.6.5    
pbr                 3.1.1    
phonenumbers        8.8.10   
Pillow              3.4.2    
pip                 18.0     
pkgconfig           1.2.2    
psutil              4.3.1    
psycopg2            2.7.3    
pycparser           2.18     
pydot               1.2.3    
pyldap              2.4.28   
pyOpenSSL           17.5.0   
pyparsing           2.1.10   
PyPDF2              1.26.0   
pyserial            3.1.1    
python-dateutil     2.5.3    
python-stdnum       1.7      
python3-boleto      1.0.1    
python3-cnab        0.9.0    
PyTrustNFe3         0.10.3   
pytz                2016.7   
pyusb               1.0.0    
PyYAML              3.12     
qrcode              5.3      
reportlab           3.3.0    
requests            2.11.1   
requests-toolbelt   0.8.0    
setuptools          40.0.0   
setuptools-git      1.1      
signxml             2.5.2    
six                 1.10.0   
suds-jurko          0.6      
suds-jurko-requests 1.2      
urllib3             1.23     
vatnumber           1.2      
vobject             0.9.3    
Werkzeug            0.11.11  
wheel               0.24.0   
xlrd                1.0.0    
XlsxWriter          0.9.3    
xlwt                1.3.0    
xmlsec              1.3.3    
yolk                0.4.3    
zeep                3.1.0    

Obrigado.

Django

Funciona com django? Emiti DANFE?

Error installing on ubuntu 16.04 python 3

I've tried in two systems and in both receive this error message.

Collecting https://github.com/danimaribeiro/PyTrustNFe/archive/master3.zip
Downloading https://github.com/danimaribeiro/PyTrustNFe/archive/master3.zip
| 235kB 461kB/s
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-f3_ua59z-build/setup.py", line 41, in
long_description=open('README.md', 'r').read(),
File "/usr/lib/python3.5/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 654: ordinal not in range(128)

Erro 403

Olá! Sei que não tem a ver com a biblioteca em si. Mas existe algum jeito de saber se o sistema apresenta algum erro. Pois anteriormente estava utilizando a biblioteca para geração da NFS-e paulista, porém hoje sempre que tento enviar recebo um erro 403. Houve alguma modificação recente no formato de envio ou algo semelhante?

Validação do esquema de xml da NFe

Olá Danimar,

Qdo tiver um tempo, dá uma olhada na função de validação do xml. Eu fiz um teste colocando um cnpj inválido no destinatário e a rotina apontou falha em dados do emitente como cnpj, nro e na natureza de operação.

Erro ao tentar usar o exemplo de consulta CNPJ

Olá Danimar, eu tentei usar o exemplo do readme e realizar uma consulta de cnpj e me retornou o seguinte erro:

`Traceback (most recent call last):
File "main.py", line 2, in
from pytrustnfe.nfe import consulta_cadastro
File "/home/raphael/projects-python/meu_ambiente/local/lib/python2.7/site-packages/PyTrustNFe-0.1.22-py2.7.egg/pytrustnfe/nfe/init.py", line 9, in
from .comunicacao import executar_consulta
File "/home/raphael/projects-python/meu_ambiente/local/lib/python2.7/site-packages/PyTrustNFe-0.1.22-py2.7.egg/pytrustnfe/nfe/comunicacao.py", line 6, in
from pytrustnfe.client import HttpClient
File "/home/raphael/projects-python/meu_ambiente/local/lib/python2.7/site-packages/PyTrustNFe-0.1.22-py2.7.egg/pytrustnfe/client.py", line 6, in
import suds.client
File "build/bdist.linux-x86_64/egg/suds/init.py", line 154, in

File "build/bdist.linux-x86_64/egg/suds/client.py", line 26, in

File "build/bdist.linux-x86_64/egg/suds/reader.py", line 22, in
File "build/bdist.linux-x86_64/egg/suds/sax/parser.py", line 37, in
ImportError: No module named sax
`

Assinatura de XML

Oi Danimar, tudo bem? vc me respondou em outro issue a respeito da assinatura digital, nada feito com o Python3, baixei seu projeto e fiz o teste e funcionou, usando o Python 2.7

No seu teste tem assim o exemplo do XML para assinar

'<?xml version="1.0" encoding="UTF-8"?>' \
           '<!DOCTYPE Envelope [ ' \
           '     <!ATTLIST Data Id ID #IMPLIED>' \
           ']>' \
           '<Envelope xmlns="urn:envelope">'  \
           '   <Data Id="NFe43150602261542000143550010000000761792265342">' \
           '     Hello, World!' \
           '   </Data>' \
           '</Envelope>'

Eu tentei assinar mesmo uma NFe mas sempre retorna RuntimeError: Erro ao realizar a assinatura do arquivo; status: "0", você tem um exemplo da assinatura de um lote?

Faz tempo que estou tentando fazer isso funcionar, eu uso o Python3 mas como não funciona(até o momento não conseguir) vou usar no Python2 somente para a assinatura, no caso o seu script assinatura.py, só não estou conseguindo assinar o XML mesmo da NFe.

Danfe

Olá,
Estou estudando sua biblioteca e acabei escrevendo uma classe que gera DANFE em PDF usando reportlab. Teria interesse em incorpora-la ao projeto?

Erro apresentado por usar o caracter &, na descriçao do produto ou no Código.

File "/opt/odoo/odoo-brasil/br_nfe/models/invoice_eletronic.py", line 929, in action_post_validate
xml_enviar = xml_autorizar_nfe(certificado, **lote)
File "/usr/local/lib/python3.5/dist-packages/PyTrustNFe3-0.9.24-py3.5.egg/pytrustnfe/nfe/init.py", line 104, in xml_autorizar_nfe
return _render(certificado, 'NfeAutorizacao', True, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/PyTrustNFe3-0.9.24-py3.5.egg/pytrustnfe/nfe/init.py", line 41, in _render
xmlElem_send = render_xml(path, '%s.xml' % method, True, **kwargs)
File "/usr/local/lib/python3.5/dist-packages/PyTrustNFe3-0.9.24-py3.5.egg/pytrustnfe/xml/init.py", line 33, in render_xml
root = etree.fromstring(xml, parser=parser)
File "src/lxml/etree.pyx", line 3213, in lxml.etree.fromstring
File "src/lxml/parser.pxi", line 1877, in lxml.etree._parseMemoryDocument
File "src/lxml/parser.pxi", line 1758, in lxml.etree._parseDoc
File "src/lxml/parser.pxi", line 1068, in lxml.etree._BaseParser._parseUnicodeDoc
File "src/lxml/parser.pxi", line 601, in lxml.etree._ParserContext._handleParseResultDoc
File "src/lxml/parser.pxi", line 711, in lxml.etree._handleParseResult
File "src/lxml/parser.pxi", line 640, in lxml.etree._raiseParseError
File "", line 1
lxml.etree.XMLSyntaxError: EntityRef: expecting ';', line 1, column 3077

Erro ao tenta emitir nfce

File "/usr/local/lib/python3.5/dist-packages/PyTrustNFe3-1.0.37-py3.5.egg/pytrustnfe/nfe/templates/NfeAutorizacao.xml", line 262, in top-level template code
{{ NFe.infNFe.compra.xPed }}
File "/usr/lib/python3/dist-packages/jinja2/environment.py", line 408, in getattr
return getattr(obj, attribute)
jinja2.exceptions.UndefinedError: 'dict object' has no attribute 'compra'

apagando tags vazias do xml

Opa Danimar, tudo certo?.

você percebeu que na hora de assinar do xml, o retorno da função esta apagando tags vazias do xml de entrada?
no meu caso está apagando a tag <cEANTrib /> (NFe > det > prod > cEANTrib)

e quando vou validar o xml de retorno no site da sefaz
aponta um erro por falta dessa tag.

segue abaixo o xml de exemplo que estou usando.

<?xml version="1.0" encoding="utf-8"?> <NFe xmlns="http://www.tests.inf.br/tests"> <infNFe versao="3.10" Id="NFe"> <ide> <cUF>35</cUF> <cNF>44633102</cNF> <natOp>Venda</natOp> <indPag>1</indPag> <mod>55</mod> <serie>15</serie> <nNF>27</nNF> <dhEmi>2014-12-30T09:44:02-02:00</dhEmi> <tpNF>1</tpNF> <idDest>1</idDest> <cMunFG>3550308</cMunFG> <tpImp>1</tpImp> <tpEmis>1</tpEmis> <cDV>4</cDV> <tpAmb>2</tpAmb> <finNFe>1</finNFe> <indFinal>0</indFinal> <indPres>9</indPres> <procEmi>0</procEmi> <verProc>NF-e</verProc> </ide> <emit> <CNPJ>00000000000000</CNPJ> <xNome>Razao Social Ltda</xNome> <xFant>Nome Fantasia</xFant> <enderEmit> <xLgr>Rua do Emitente</xLgr> <nro>140</nro> <xBairro>Bairro</xBairro> <cMun>3550308</cMun> <xMun>TESTES</xMun> <UF>UF</UF> <CEP>00000000</CEP> <fone>1112345678</fone> </enderEmit> <IE>1234567890</IE> <CRT>3</CRT> </emit> <dest> <CNPJ>00000000000000</CNPJ> <xNome>Razao Social Ltda</xNome> <enderDest> <xLgr>Rua Teste</xLgr> <nro>10</nro> <xBairro>Bairro</xBairro> <cMun>3550308</cMun> <xMun>TESTES</xMun> <UF>SP</UF> <CEP>00000000</CEP> <fone>1112340000</fone> </enderDest> <indIEDest>9</indIEDest> <IE>000000000000</IE> <email>[email protected]</email> </dest> <det nItem="1"> <prod> <cProd>codigo do produto</cProd> <cEAN /> <xProd>Descricao do produto</xProd> <NCM>0000000</NCM> <CFOP>1234</CFOP> <uCom>UN</uCom> <qCom>1.0000</qCom> <vUnCom>1.0000</vUnCom> <vProd>1.00</vProd> <cEANTrib /> <uTrib>UN</uTrib> <qTrib>1.0000</qTrib> <vUnTrib>1.0000</vUnTrib> <indTot>1</indTot> </prod> <imposto> <ICMS> <ICMS00> <orig>0</orig> <CST>00</CST> <modBC>3</modBC> <vBC>1.00</vBC> <pICMS>18.0000</pICMS> <vICMS>0.18</vICMS> </ICMS00> </ICMS> <PIS> <PISAliq> <CST>01</CST> <vBC>1.00</vBC> <pPIS>0.65</pPIS> <vPIS>0.01</vPIS> </PISAliq> </PIS> <COFINS> <COFINSAliq> <CST>01</CST> <vBC>1.00</vBC> <pCOFINS>3.0000</pCOFINS> <vCOFINS>0.03</vCOFINS> </COFINSAliq> </COFINS> </imposto> <infAdProd>obs</infAdProd> </det> <total> <ICMSTot> <vBC>1.00</vBC> <vICMS>0.18</vICMS> <vICMSDeson>0.00</vICMSDeson> <vBCST>0.00</vBCST> <vST>0.00</vST> <vProd>1.00</vProd> <vFrete>0.00</vFrete> <vSeg>0.00</vSeg> <vDesc>0.00</vDesc> <vII>0.00</vII> <vIPI>0.10</vIPI> <vPIS>0.01</vPIS> <vCOFINS>0.03</vCOFINS> <vOutro>0.00</vOutro> <vNF>1.10</vNF> </ICMSTot> </total> <transp> <modFrete>0</modFrete> </transp> </infNFe> </NFe>

Erro Unicode strings with encoding declaration are not supported

Ao gerar a NFe no odoo 11, tive o erro abaixo .

PyTrustNFe3-0.9.4-py3.5.egg/pytrustnfe/utils.py", line 89, in gerar_nfeproc
docRecibo = ET.fromstring(recibo)
File "src/lxml/etree.pyx", line 3230, in lxml.etree.fromstring (src/lxml/etree.c:81055)
File "src/lxml/parser.pxi", line 1866, in lxml.etree._parseMemoryDocument (src/lxml/etree.c:121176)
ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.

def gerar_nfeproc(envio, recibo):
NSMAP = {None: 'http://www.portalfiscal.inf.br/nfe'}
root = ET.Element("nfeProc", versao="3.10", nsmap=NSMAP)
docEnvio = ET.fromstring(envio)

  • docRecibo = ET.fromstring(recibo)

Só consegui passar fazendo :

  • docRecibo = ET.fromstring(recibo, encoding='unicode' )

Erro ao instalar as dependências

Tentei instalar o PyTrustNFe, no entanto ocorreu um erro ao instalar o pacote suds

Collecting suds>=0.4 (from PyTrustNFe==0.1.26)
  Downloading suds-0.4.tar.gz (104kB)
    100% |████████████████████████████████| 112kB 2.2MB/s 
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/private/tmp/pip-build-k26zewb7/suds/setup.py", line 20, in <module>
        import suds
      File "/private/tmp/pip-build-k26zewb7/suds/suds/__init__.py", line 154, in <module>
        import client
    ImportError: No module named 'client'

Procurei no Google e vi que suds foi descontinuado, recomendando usar suds-jurko.

Erro Schema - Rejeicao: Assinatura difere do calculado

Estou tendo erro na hora de validar a NFCe.
Testei o esquema e retorna um erro no certificado, porém este erro também ocorre na NFe e ainda assim é validada.
A mensagem de rejeição é a seguinte:
Rejeicao: Assinatura difere do calculado
Pesquisando vi que poderia ser caracteres especiais ou a assinatura. Caracteres especiais não é pois passa na validação e só aponta realmente o erro mostrado abaixo.
Se puder ajudar fico grato, acredito que pra finalizar a emissão da NFCe resta apenas isto mesmo.

Schema XML: The 'http://www.w3.org/2000/09/xmldsig#:X509Certificate' element is invalid - The value 'MIIHyDCCBbCgAwIBAgIIKwEWBhY+g7QwDQYJKoZIhvcNAQELBQAwgYkxCzAJBgNV\nBAYTAkJSMRMwEQYDVQQKEwpJQ1AtQnJhc2lsMTQwMgYDVQQLEytBdXRvcmlkYWRl\nIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhIHYyMRIwEAYDVQQLEwlBQyBT\nT0xVVEkxGzAZBgNVBAMTEkFDIFNPTFVUSSBNdWx0aXBsYTAeFw0xNjA2MjAxNzAz\nMzZaFw0xNzA2MTYxMzM2MDBaMIHXMQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQ\nLUJyYXNpbDE0MDIGA1UECxMrQXV0b3JpZGFkZSBDZXJ0aWZpY2Fkb3JhIFJhaXog\nQnJhc2lsZWlyYSB2MjESMBAGA1UECxMJQUMgU09MVVRJMRswGQYDVQQLExJBQyBT\nT0xVVEkgTXVsdGlwbGExGjAYBgNVBAsTEUNlcnRpZmljYWRvIFBKIEExMTAwLgYD\nVQQDEydNLiBETyBTLiBNLiBCUkFOREFPIC0gTUU6MDc1Mzc5NzIwMDAxNjkwggEi\nMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCjInC9oyj7DzkipvSHB2SyrwJC\nEjVJYHu25A/1rkzD1O8B3lVyDFIbQHfcKrN/3w1u3epNqMu2j+DzRgFe8Kn4+dvi\nmk176D+Vo+Nt5ZO6Pu9R4g/71SyyF99Wq1oayy0bA6V/JcdiyqWaQ0m17S0tinvS\nBI+dGmcpSiHBfpMSBxCKPIJOJAwXN1SXrqFZ6rRxH+pRVHsD4uHN5XU6KXMHDq7Z\nswVnpj8HtPzUfVYxDMKSNtaW3y7QJcMngUv28Z4yNx0Z1LXhQPv4RiXKfyvFbbbQ\nMZNeLRJJMcxSSfJuZF2Xz15R+6s7CbROQHdL7o+vEyR13ysYcTKCLFJaFnEtAgMB\nAAGjggLiMIIC3jBUBggrBgEFBQcBAQR...' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:base64Binary' - The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
Caminho: enviNFe/NFe[1]/Signature/KeyInfo/X509Data/X509Certificate/

Remoção do namespace ds: na assinatura

Danimar, como vc me respondeu, realmente funcionou a assinatura com seu exemplo, porém, a assinatura é retornado com um namespace ds:, o validaor valida tudo, consigo enviar a nfe, eventos etc, porém, fui enviar o Manifesto do Destinatário para o WS ambiente nacional e o mesmo retorna dizendo que não aceita esse namespace

como tirar esse ds: ?

Rejeição: 587-Rejeição: Usar somente o namespace padrão da NF-e ,

se eu remover com um replace a assinatura fica inválida, veja como é gerado.

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> <ds:Reference URI="#NFe24161002902736000261550010000000061000000066"> <ds:Transforms> <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/> <ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/> </ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> <ds:DigestValue>Q6broyQwxc2AaHmTb9iYXd9Q4/0=</ds:DigestValue> </ds:Reference> </ds:SignedInfo> <ds:SignatureValue> YI+nPpZjcTfskv1KELiFhYnAAwfEPyNzbETftpM21ndLPZG2abqP31hn2cC0Xt8sXCFdvXszBME3okUpxOdS0O8rQb+3PvRgfzx0LYtjA5WEw+Hdg9Emr8qrmQGbQGxCsPC1qb1GAx/DxWSIp/6tK9Bs51xExnhw9F6+gS7+EcpwER62V32E8TfdbaVQvmW13USvLtl9aGwePn0pE7xDYLrUAbLBwWdjZLzgWouy2hw3Q1e2TxValNvWC0fg2F+SLghzvwkxUSK2TJQyhCZ/wfZZ3PLw+HvPAUtL7DlnEgcWTozcQ+X7wJtnlNoTF6mmbWiJLm6hjvEptniDtNypXg== </ds:SignatureValue> <ds:KeyInfo> <ds:X509Data> <ds:X509Certificate>MIIIADCCBeigAwIBAgIIey8fHVSRFEEwDQYJKoZIhvcNAQELBQAwdTELMAkGA1UE BhMCQlIxEzARBgNVBAoTCklDUC1CcmFzaWwxNjA0BgNVBAsTLVNlY3JldGFyaWEg ZGEgUmVjZWl0YSBGZWRlcmFsIGRvIEJyYXNpbCAtIFJGQjEZMBcGA1UEAxMQQUMg U0VSQVNBIFJGQiB2MjAeFw0xNjAxMjYxOTU3MDBaFw0xNzAxMjUxOTU3MDBaMIHf MQswCQYDVQQGEwJCUjELMAkGA1UECBMCUk4xDjAMBgNVBAcTBU5BVEFMMRMwEQYD VQQKEwpJQ1AtQnJhc2lsMTYwNAYDVQQLEy1TZWNyZXRhcmlhIGRhIFJlY2VpdGEg RmVkZXJhbCBkbyBCcmFzaWwgLSBSRkIxFjAUBgNVBAsTDVJGQiBlLUNOUEogQTEx EDAOBgNVBAsTB0FSIENOREwxPDA6BgNVBAMTM0FMUEhBVEVDIFNFUlZJQ09TIEUg Q09NRVJDSU8gTFREQSBNRTowMjkwMjczNjAwMDI2MTCCASIwDQYJKoZIhvcNAQEB BQADggEPADCCAQoCggEBAJKJyifSzRMkJb6UsNEGS9BVB9w0DHnCKExVPpChk915 no9Usq0PcCDrhJGjwE/841V+bXXXQFzmK4hb+Zgr8+W3yLQ3RBeCAO6e7CL6Ayyc hJGUu9x7yZ+RVe5SjYvOVCYEZjezDFPGF0OpzUu1NITZ6s9s9In3pDSI1kmwi+nq aROXJV9hHw0khgZBehexoKp/oRDGeFZyOWaE/7oglgvzoubCK2Yu2m3+w4LuplOM LucW3TCcGAb0n4IzP7yzaa/uTIynppc9G7Urh2CTMqW+Q+a4JhWQ0km5x/y7yumu Yi2yvx3bsjZEvk+EFXJctU7WjVAWk0SLrG6zMyXji4sCAwEAAaOCAycwggMjMIGZ BggrBgEFBQcBAQSBjDCBiTBIBggrBgEFBQcwAoY8aHR0cDovL3d3dy5jZXJ0aWZp Y2Fkb2RpZ2l0YWwuY29tLmJyL2NhZGVpYXMvc2VyYXNhcmZidjIucDdiMD0GCCsG AQUFBzABhjFodHRwOi8vb2NzcC5jZXJ0aWZpY2Fkb2RpZ2l0YWwuY29tLmJyL3Nl cmFzYXJmYnYyMAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUsqDEPUaefMiFbAgeEDKU ZUZwQXMwcQYDVR0gBGowaDBmBgZgTAECAQ0wXDBaBggrBgEFBQcCARZOaHR0cDov L3B1YmxpY2FjYW8uY2VydGlmaWNhZG9kaWdpdGFsLmNvbS5ici9yZXBvc2l0b3Jp by9kcGMvZGVjbGFyYWNhby1yZmIucGRmMIHzBgNVHR8EgeswgegwSqBIoEaGRGh0 dHA6Ly93d3cuY2VydGlmaWNhZG9kaWdpdGFsLmNvbS5ici9yZXBvc2l0b3Jpby9s Y3Ivc2VyYXNhcmZidjIuY3JsMESgQqBAhj5odHRwOi8vbGNyLmNlcnRpZmljYWRv cy5jb20uYnIvcmVwb3NpdG9yaW8vbGNyL3NlcmFzYXJmYnYyLmNybDBUoFKgUIZO aHR0cDovL3JlcG9zaXRvcmlvLmljcGJyYXNpbC5nb3YuYnIvbGNyL1NlcmFzYS9y ZXBvc2l0b3Jpby9sY3Ivc2VyYXNhcmZidjIuY3JsMA4GA1UdDwEB/wQEAwIF4DAd BgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwgcAGA1UdEQSBuDCBtYEWV0VO REVMTEBBTFBIQVRFQ1JOLkNPTaAtBgVgTAEDAqAkEyJST0JFUlRPIFdFTkRFTEwg Uk9EUklHVUVTIERBIENPU1RBoBkGBWBMAQMDoBATDjAyOTAyNzM2MDAwMjYxoDgG BWBMAQMEoC8TLTEyMDgxOTc1MDIwNTU1MjM0MDYwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMKAXBgVgTAEDB6AOEwwwMDAwMDAwMDAwMDAwDQYJKoZIhvcNAQELBQAD ggIBAFpy2p4M7b8L8MT9AQ1OXIgo5DKyFRjT4fWtfwRxfQJiU1Q3mMr6QtaIUYCL hltvjXP4DRcYMPcrpveI+ZMD7MbaFbbp6rI4AvpuSauvdCoraSm1w0sQ6NBwPVhT WAak+o2V9L0u5i8WZe75oQgZ90kc1XAJqaS3djVOESvfAg9CDz4sQFzx3cMsHCvW SfcDSmR0LrxLhTiN50FJjJgCnecxrpXa+jVds8GGjHly3DQUcWrTZG/+2AQt2H6J 9uwApWTxauVYNtqlF2lwdIZTTzSp6PkMNdVcUVGk2HGkPe+o92uQFI8VM4ZThcSy /FZny95itLXowPZOW3Sa6MMZNBWZtct3q+V875pOqqX9qTy5l5dwR4UhtRklWRpy MFLzAROc0NL0o+OLKWQT3P2dZEqWr8MhRRB7vjWAyvafRsQkgPZ+xpf/U9x49zm1 ERWzv6irTC8UjYAGq46goZMq8lBwcg2IIUryHR81cIVucrYyGKU1mXX6U9Xf8HdH GDoO74ZGtTpGD65g0IEjGMCwXn902upNbm9RLpCT0FwQEV+Jgok2ME0xN2Fv+1is DIfQSTU2S7ubS5si2IvtWoHP4+rWmT4W/Eg1gnvPQCyHZicYhGV9mMjqZDRPfhw5 YT8qWOEfIbNQoSN+Kxqqy4WMIXptvESgwXrsLjyukPxbiI+6 </ds:X509Certificate> </ds:X509Data> </ds:KeyInfo> </ds:Signature>

valew e obrigado pelas dicas

Assinar xml já criado

Olá danimar
Estou criando um sistema de envio de lote RPS para campinas e gostaria de saber se há a possibilidade de assinar um arquivo de lote já existente. Seria basicamente ler o arquivo e assiná-lo. Tentei utilizar a biblioteca signxml, mas aparemente ela não está criando uma assinatura válida.

URLs Webservice Pará

Várias URLs do Pará retornam erro, a de cancelamento de NFe eu já tinha verificado.
Agora a do webservice de autenticação da NFCe.
Vou tentar corrigir de hoje pra amanhã.

File "/home/raphael/projects-python/nfepy/local/lib/python2.7/site-packages/PyTrustNFe-0.1.25-py2.7.egg/pytrustnfe/Servidores.py", line 96, in localizar_qrcode
dominio = ESTADO_WS[sigla]['65'][ambiente]['servidor']
KeyError: '65'

certificado

posso usar um certificado geral no caso da nota de serviço? pra não precisar que cada CNPJ possua uma certificado diferente

Erro de Acesso ao Diretório

Alguém com este mesmo erro? Segue abaixo:

Odoo Server Error
Traceback (most recent call last):
  File "/home/raphael/odoo11/odoo/odoo/http.py", line 647, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/raphael/odoo11/odoo/odoo/http.py", line 307, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/home/raphael/odoo11/odoo/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/home/raphael/odoo11/odoo/odoo/http.py", line 689, in dispatch
    result = self._call_function(**self.params)
  File "/home/raphael/odoo11/odoo/odoo/http.py", line 339, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/raphael/odoo11/odoo/odoo/service/model.py", line 97, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/raphael/odoo11/odoo/odoo/http.py", line 332, in checked_call
    result = self.endpoint(*a, **kw)
  File "/home/raphael/odoo11/odoo/odoo/http.py", line 933, in __call__
    return self.method(*args, **kw)
  File "/home/raphael/odoo11/odoo/odoo/http.py", line 512, in response_wrap
    response = f(*args, **kw)
  File "/home/raphael/odoo11/odoo/addons/web/controllers/main.py", line 934, in call_button
    action = self._call_kw(model, method, args, {})
  File "/home/raphael/odoo11/odoo/addons/web/controllers/main.py", line 922, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/home/raphael/odoo11/odoo/odoo/api.py", line 689, in call_kw
    return call_kw_multi(method, model, args, kwargs)
  File "/home/raphael/odoo11/odoo/odoo/api.py", line 680, in call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/home/raphael/odoo11/odoo-brasil/br_nfe/models/invoice_eletronic.py", line 781, in action_send_eletronic_invoice
    retorno = resposta['object'].Body.nfeAutorizacaoLoteResult
  File "src/lxml/objectify.pyx", line 230, in lxml.objectify.ObjectifiedElement.__getattr__ (src/lxml/objectify.c:4457)
  File "src/lxml/objectify.pyx", line 451, in lxml.objectify._lookupChildOrRaise (src/lxml/objectify.c:7242)
AttributeError: no such child: {http://www.w3.org/1999/xhtml}Body

Emissão NF-e Produção Sefaz RS

Ao emitir uma nota de entrada na Produção aparece essa mensagem:

HTTPSConnectionPool(host='nfe.sefaz.rs.gov.br', port=443): Max retries exceeded with url: /ws/NfeAutorizacao/NFeAutorizacao.asmx (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0x7f42b6bba150>: Failed to establish a new connection: [Errno 110] Connection timed out',))

Os serviços da Sefaz estão normais no estado.

UserError: (u"NimbusSanL-Regu: (<type 'exceptions.KeyError'>, KeyError('NimbusSanL-Regu',),

Odoo-10 - Ubuntu - server 16.04 :
File "/opt/odoo/odoo/odoo/service/report.py", line 120, in _check_report
raise UserError('%s: %s' % (exc.message, exc.traceback))
UserError: (u"NimbusSanL-Regu: (<type 'exceptions.KeyError'>, KeyError('NimbusSanL-Regu',), <traceback object at 0x7fd75d35a200>)", '')

Resolvi este erro instalando a font no ubuntu e adicionando no danfe.py :
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont

pdfmetrics.registerFont(TTFont('NimbusSanL-Regu', 'NimbusSanL-Regu.ttf'))
pdfmetrics.registerFont(TTFont('NimbusSanL-Bold', 'NimbusSanL-Bold.ttf'))

404 Client Error: Not Found for url

D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\urllib3-1.24.1-py3.7.egg\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
InsecureRequestWarning)
Traceback (most recent call last):
File "D:/desenvolvimentos/Modulos-do-odoo/manifestacao/index.py", line 7, in
resposta = consulta_cadastro(certificado, obj=obj, ambiente=1, estado='28')
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\pytrustnfe3-1.0.30-py3.7.egg\pytrustnfe\nfe_init_.py", line 189, in consulta_cadastro
return send(certificado, 'NfeConsultaCadastro', **kwargs)
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\pytrustnfe3-1.0.30-py3.7.egg\pytrustnfe\nfe_init
.py", line 97, in _send
first_op, client = get_client(base_url, transport)
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\pytrustnfe3-1.0.30-py3.7.egg\pytrustnfe\nfe_init
.py", line 81, in _get_client
client = Client(base_url, transport=transport)
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\zeep-3.2.0-py3.7.egg\zeep\client.py", line 62, in init
wsdl, self.transport, settings=self.settings)
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\zeep-3.2.0-py3.7.egg\zeep\wsdl\wsdl.py", line 82, in init
document = self._get_xml_document(location)
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\zeep-3.2.0-py3.7.egg\zeep\wsdl\wsdl.py", line 143, in _get_xml_document
location, self.transport, self.location, settings=self.settings)
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\zeep-3.2.0-py3.7.egg\zeep\loader.py", line 74, in load_external
content = transport.load(url)
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\zeep-3.2.0-py3.7.egg\zeep\transports.py", line 110, in load
content = self._load_remote_data(url)
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\zeep-3.2.0-py3.7.egg\zeep\transports.py", line 127, in _load_remote_data
response.raise_for_status()
File "D:\desenvolvimentos\Modulos-do-odoo\venv\lib\site-packages\requests-2.21.0-py3.7.egg\requests\models.py", line 940, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: Not Found for url: https://nfe.svrs.rs.gov.br/ws/cadconsultacadastro/cadconsultacadastro2.asmx?wsdl

charmap certificado

Quando estou mandando abrir o arquivo do certificado A1 está dando esse erro:

certificado = open('e:\projetopython\nfe\certificado\companny.pfx', 'r').read()
File "C:\Anaconda3\lib\encodings\cp1252.py", line 23, in decode
return codecs.charmap_decode(input,self.errors,decoding_table)[0]
UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 98: character maps to

Issue with Discriminacao, Discriminacao is not respect '\n'

Hello,

from pytrustnfe.nfse.paulistana import envio_lote_rps
envio_lote_rps(certificado, nfse=nfse_values)
Note: nfse_values = Input Data

As From Odoo I passed Description/Discriminacao in multiple lines

Example:

https://photos.app.goo.gl/KKFaJFjEgodxucqj1

When Library Generate xml file,
SUPORTE TÉCNICO MENSAL - PORTAL DE FORNECEDORES PEDIDO: 450018716 RESPONSÁVEL: PAULO SILVA REFEREN (1) Esta NFS-e foi emitida com respaldo na Lei nº 14.097/2005; (2) Data do vencimento do ISS desta nota é 10/03/2017

Example Result:

https://photos.app.goo.gl/jMZkQH3hByQ6W4e82

Expected Result sould be like:

SUPORTE TÉCNICO MENSAL - PORTAL DE FORNECEDORES

PEDIDO: 450018716
RESPONSÁVEL: PAULO SILVA
REFERENTE SUPORTE MES 05/2017

IRRF R$ 36,50
PIS R$ 15,82
COFINS R$ 73,01
CSLL R$ 24,34

Waiting for suggestions.

Thank You,
Devishree

Erro no cancelamento da NFe.

File "parser.pxi", line 1823, in lxml.etree._parseMemoryDocument (src/lxml/lxml.etree.c:106272)
ValueError: Unicode strings with encoding declaration are not supported. Please use bytes input or XML fragments without declaration.

alterei a linha abaixo :
docCancel = ET.fromstring(cancelamento)

para :
parser = ET.XMLParser(encoding='utf-8')
docCancel = ET.fromstring(cancelamento.encode('utf-8'), parser=parser)

XML Gerado está vindo sem o CNPJ

Olá Danimar tudo bem?

Estou com um problema na hora de gerar a NFe em ambiente de testes, como pode observar pelo print abaixo o CNPJ de ambos, emitente e destinatário não está sendo gerado no XML. Isso tem causado erros de validação na validação dos schemas.

print
print1

Poderia por favor me informar o que eu possa estar fazendo de errado?

Vi que no exemplo de código de geração no odoo Brasil é informado juntamente uma propriedade "tipo" no emitente e no destinatário. Saberia informar para qual finalidade ela é necessária?

No exemplo abaixo, está como estou enviando a tag "emit" para a geração do XML
print2

Qualquer ajuda será apreciada, obrigado desde já

Atenciosamente,

Boleto de cobrança

Boa noite.
Alguém tem alguma informação de como eu faço para gerar o boleto da NF-e que eu recebi? Tem como fazer com essa lib?

Geração do XML

Boa tarde Denimar, você teria um exemplo de geração do XML da NFe?

Assinatura Digital do RPS incorreta

Olá,

Estou tentando enviar uma RPS para a NFS-e Paulistana e como received_xml eu tenho o seguinte erro:

Assinatura Digital do RPS incorreta - String verificada (420389600000100000000000120190909TNN00000000000200000000000000000003093226813106000105)

Segue minha RPS(Coloquei X para informações sensíveis):

rps = [
{
'assinatura': 'XXXXXXXX',
'serie': '00001',
'numero': '00001',
'data_emissao': '2019-09-09',
'data_envio': '2019-09-09',
'codigo_atividade': '03093',
'valor_servico': 20.00,
'valor_deducao': '0.00',
'valor_pis': '0.00',
'valor_cofins': '0.00',
'valor_csll': '0.00',
'valor_inss': '0.00',
'valor_ir': '0.00',
'iss_retido': 0,
'prestador': {
'inscricao_municipal': 'XXXXXXXX'
},
'tomador': {
'tipo_cpfcnpj': 2,
'cpf_cnpj': 'XXXXXXXXXXXX',
'inscricao_municipal': 'XXXXXXXX',
'razao_social': 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'tipo_logradouro': '1',
'logradouro': 'XXXXXXXXXXXXXXXXXXXXXXXX',
'numero': 100,
'bairro': 'Bela Vista',
'cidade': '3550308', # Codigo da cidade, de acordo com o IBGE
'uf': 'SP',
'cep': 'XXXXXXXX',
},
'codigo_atividade': '03093',
'aliquota_atividade': '5.00',
'descricao': 'Venda de servico'
}
]

Procurei a formatação de geração da assinatura dentro do pacote PyTrustNFe mas não consegui achá-lo.

Se precisarem de mais alguma informação para me ajudar, estou à disposição. Obrigado.

NF 4.0 Paraná

Boa Tarde, a nota fiscal eletrônica para o estado do Paraná é emitida normalmente, porém ao consultar o retorno o erro abaixo é apresentado.

Falha no schema XML org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 6; cvc-elt.1: Cannot find the declaration of element 'NFe'.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.