diff --git a/README.md b/README.md index 78e8a55..6c05df4 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # PyTrustNFe -Módulo NF-e escrito em Python +Biblioteca Python que tem por objetivo enviar NFe, NFCe e NFSe no Brasil [![Coverage Status](https://coveralls.io/repos/danimaribeiro/PyTrustNFe/badge.svg?branch=master)](https://coveralls.io/r/danimaribeiro/PyTrustNFe?branch=master) [![Code Health](https://landscape.io/github/danimaribeiro/PyTrustNFe/master/landscape.svg?style=flat)](https://landscape.io/github/danimaribeiro/PyTrustNFe/master) @@ -8,3 +8,108 @@ Módulo NF-e escrito em Python 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 diff --git a/setup.py b/setup.py index ca022f0..8bac309 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ long_description = pypandoc.convert('README.md', 'rst') setup( name="PyTrustNFe", - version="0.1.2", + version="0.1.3", author="Danimar Ribeiro", author_email='danimaribeiro@gmail.com', keywords=['nfe', 'mdf-e'],