You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Matheus Marchini 47edf654df Adicionando a possibilidade de informar outras informações no envio de lote 10 years ago
docs Adicionado arquivos de servicos NFe 11 years ago
pytrustnfe Adicionando a possibilidade de informar outras informações no envio de lote 10 years ago
.gitignore Código inicial 11 years ago
.travis.yml Adicionando dependencias ao signxml 10 years ago
LICENSE.txt Adding licence headers 10 years ago
README.md Python highlight 10 years ago
requirements.txt Movendo classe que gera o danfe de lugar 10 years ago
setup.py Ajuste da versão 0.1.5 10 years ago

README.md

PyTrustNFe

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

Coverage Status Code Health Build Status

Dependências:

  • PyXmlSec
  • lxml
  • signxml
  • suds
  • suds_requests
  • reportlab
  • Jinja2

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')

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',
            'total_servicos': '2.00',
            'total_deducoes': '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': 'Floripa',
                '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',
        '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