{"id":13813766,"url":"https://github.com/danimaribeiro/PyTrustNFe","last_synced_at":"2025-05-15T01:31:44.821Z","repository":{"id":42788088,"uuid":"37438051","full_name":"danimaribeiro/PyTrustNFe","owner":"danimaribeiro","description":"Módulo NF-e Python","archived":false,"fork":false,"pushed_at":"2024-06-02T23:29:22.000Z","size":855,"stargazers_count":174,"open_issues_count":38,"forks_count":140,"subscribers_count":34,"default_branch":"master3","last_synced_at":"2025-04-21T17:21:45.743Z","etag":null,"topics":["hacktoberfest","nfe","nfse","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danimaribeiro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-06-15T01:56:31.000Z","updated_at":"2025-04-02T18:25:15.000Z","dependencies_parsed_at":"2024-01-20T15:56:32.194Z","dependency_job_id":"25c9b222-d499-4b91-9f57-655046b20772","html_url":"https://github.com/danimaribeiro/PyTrustNFe","commit_stats":{"total_commits":404,"total_committers":29,"mean_commits":"13.931034482758621","dds":"0.40594059405940597","last_synced_commit":"2ca07f19244f709b6c34c742f75783135104388c"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danimaribeiro%2FPyTrustNFe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danimaribeiro%2FPyTrustNFe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danimaribeiro%2FPyTrustNFe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danimaribeiro%2FPyTrustNFe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danimaribeiro","download_url":"https://codeload.github.com/danimaribeiro/PyTrustNFe/tar.gz/refs/heads/master3","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254256181,"owners_count":22040243,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","nfe","nfse","python"],"created_at":"2024-08-04T04:01:29.478Z","updated_at":"2025-05-15T01:31:39.810Z","avatar_url":"https://github.com/danimaribeiro.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# PyTrustNFe\nBiblioteca Python que tem por objetivo enviar NFe, NFCe e NFSe no Brasil\n\n[![Coverage Status](https://coveralls.io/repos/danimaribeiro/PyTrustNFe/badge.svg?branch=master3)](https://coveralls.io/r/danimaribeiro/PyTrustNFe?branch=master3)\n[![Build Status](https://app.travis-ci.com/danimaribeiro/PyTrustNFe.svg?branch=master3)](https://travis-ci.org/danimaribeiro/PyTrustNFe)\n[![PyPI version](https://badge.fury.io/py/PyTrustNFe3.svg)](https://badge.fury.io/py/PyTrustNFe3)\n\nPacotes necessários para instalação:\n\n```apt-get install --no-install-recommends python3-pip python3-wheel python3-setuptools python3-openssl python3-lxml```\n\n\nDependências:\n* PyXmlSec\n* lxml\n* signxml\n* suds-jurko\n* suds-jurko-requests\n* reportlab\n* Jinja2\n\n\nNFSe - Cidades atendidas\n-----------------------------\n* **Paulistana** - São Paulo/SP\n* **Nota Carioca** - Rio de Janeiro/RJ\n* **Imperial** - Petrópolis/RH\n* **Goiânia** - Goiânia/GO\n* [Susesu](cidades/susesu.md) - 3 cidades atendidas\n* [Simpliss](cidades/simpliss.md) - 18 cidade atendidas\n* [GINFES](cidades/ginfes.md) - 79 cidades atendidas\n* [DSF](cidades/dsf.md) - 7 cidades atendidas\n\nRoadmap\n--------------\nTeste unitários\n\nImplementar novos provedores de NFSe\n* [Betha](cidades/betha.md) - 81 cidades atendidas  WIP\n* [WebISS](cidades/webiss.md) - 51 cidades atendidas\n* [ISSIntel](cidades/issintel.md) - 32 cidades atendidas\n* [ISSNET](cidades/issnet.md) - 32 cidades atendidas\n* [Saatri](cidades/saatri.md) - 31 cidades atendidas\n\n\nExemplos de uso da NFe\n-----------------------------\n\nConsulta Cadastro por CNPJ:\n\n```python\nfrom pytrustnfe.nfe import consulta_cadastro\nfrom pytrustnfe.certificado import Certificado\n\ncertificado = open(\"/path/certificado.pfx\", \"r\").read()\ncertificado = Certificado(certificado, 'senha_pfx')\nobj = {'cnpj': '12345678901234', 'estado': '42'}\nresposta = consulta_cadastro(certificado, obj=obj, ambiente=1, estado='42')\n```\nConsulta Distribuição NF-e sem Validação de Esquema:\n```python\nfrom pytrustnfe.certificado import Certificado\nfrom pytrustnfe.nfe import consulta_distribuicao_nfe, xml_consulta_distribuicao_nfe\n\ncertificado = open(\"/path/certificado.pfx\", \"r\").read()\ncertificado = Certificado(certificado, 'senha_pfx')\n\n# Gerando xml e enviado consulta por Ultimo NSU\nresponse1 = consulta_distribuicao_nfe(\n    certificado,\n    ambiente=1,\n    estado='42',\n    modelo='55',\n    cnpj_cpf='12345678901234',\n    ultimo_nsu='123456789101213'\n)\n\n# Gerando xml e enviado consulta por Chave\nresponse2 = consulta_distribuicao_nfe(\n    certificado,\n    ambiente=1,\n    estado='42',\n    modelo='55',\n    cnpj_cpf='12345678901234',\n    chave_nfe='012345678901234567890123456789012345678912'\n)\n\n# Gerando xml e enviado consulta por NSU\nresponse3 = consulta_distribuicao_nfe(\n    certificado,\n    ambiente=1,\n    estado='42',\n    modelo='55',\n    cnpj_cpf='12345678901234',\n    nsu='123456789101213'\n)\n```\n\nConsulta Distribuição NF-e com Validação de Esquema:\n```python\nfrom pytrustnfe.certificado import Certificado\nfrom pytrustnfe.nfe import consulta_distribuicao_nfe, xml_consulta_distribuicao_nfe\nfrom pytrustnfe.xml.validate import valida_nfe, SCHEMA_DFE\n\ncertificado = open(\"/path/certificado.pfx\", \"r\").read()\ncertificado = Certificado(certificado, 'senha_pfx')\n\n# Gerando XML para Consulta por Ultimo NSU\nxml1 = xml_consulta_distribuicao_nfe(\n    certificado,\n    ambiente=1,\n    estado='42',\n    cnpj_cpf='12345678901234',\n    ultimo_nsu='123456789101213'\n)\n\n# Validando o XML com Esquema\nif valida_nfe(xml1, SCHEMA_DFE):\n    Warning(\"Erro na validação do esquema\")\n    \n# Gerando XML para Consulta por Chave\nxml2 = xml_consulta_distribuicao_nfe(\n    certificado,\n    ambiente=1,\n    estado='42',\n    cnpj_cpf='12345678901234',\n    chave_nfe='012345678901234567890123456789012345678912'\n)\n\n# Validando o XML com Esquema\nif valida_nfe(xml2, SCHEMA_DFE):\n    Warning(\"Erro na validação do esquema\")\n    \n# Gerando XML para Consulta por NSU\nxml3 = xml_consulta_distribuicao_nfe(\n    certificado,\n    ambiente=1,\n    estado='42',\n    cnpj_cpf='12345678901234',\n    nsu='123456789101213'\n)\n\n# Validando o XML com Esquema\nif valida_nfe(xml3, SCHEMA_DFE):\n    Warning(\"Erro na validação do esquema\")\n\n# Enviando xml de consulta para sefaz\nresponse = consulta_distribuicao_nfe(\n    certificado,\n    ambiente=1,\n    estado='42',\n    modelo='55',\n    xml=xml1\n)\n```\n\nExemplo de uso da NFSe Paulistana\n---------------------------------\n\nEnvio de RPS por lote\n\n```python\ncertificado = open('/path/certificado.pfx', 'r').read()\ncertificado = Certificado(certificado, '123456')\n# Necessário criar um dicionário com os dados, validação dos dados deve\n# ser feita pela aplicação que está utilizando a lib\nrps = [\n    {\n        'assinatura': '123',\n        'serie': '1',\n        'numero': '1',\n        'data_emissao': '2016-08-29',\n        'codigo_atividade': '07498',\n        'valor_servico': '2.00',\n        'valor_deducao': '3.00',\n        'prestador': {\n            'inscricao_municipal': '123456'\n        },\n        'tomador': {\n            'tipo_cpfcnpj': '1',\n            'cpf_cnpj': '12345678923256',\n            'inscricao_municipal': '123456',\n            'razao_social': 'Trustcode',\n            'tipo_logradouro': '1',\n            'logradouro': 'Vinicius de Moraes, 42',\n            'numero': '42',\n            'bairro': 'Corrego',\n            'cidade': '4205407',  # Código da cidade, de acordo com o IBGE\n            'uf': 'SC',\n            'cep': '88037240',\n        },\n        'codigo_atividade': '07498',\n        'aliquota_atividade': '5.00',\n        'descricao': 'Venda de servico'\n    }\n]\nnfse = {\n    'cpf_cnpj': '12345678901234',\n    'data_inicio': '2016-08-29',\n    'data_fim': '2016-08-29',\n    'total_servicos': '2.00',\n    'total_deducoes': '3.00',\n    'lista_rps': rps\n}\n\nretorno = envio_lote_rps(certificado, nfse=nfse)\n# retorno é um dicionário { 'received_xml':'', 'sent_xml':'', 'object': object() }\nprint retorno['received_xml']\nprint retorno['sent_xml']\n\n# retorno['object'] é um objeto python criado apartir do xml de resposta\nprint retorno['object'].Cabecalho.Sucesso\nprint retorno['object'].ChaveNFeRPS.ChaveNFe.NumeroNFe\nprint retorno['object'].ChaveNFeRPS.ChaveRPS.NumeroRPS\n```\n\n\nCancelamento de NFSe:\n\n```python\nfrom pytrustnfe.certificado import Certificado\nfrom pytrustnfe.nfse.paulistana import cancelamento_nfe\n\ncertificado = open('/path/certificado.pfx', 'r').read()\ncertificado = Certificado(certificado, '123456')\ncancelamento = {\n    'cnpj_remetente': '123',\n    'assinatura': 'assinatura',\n    'numero_nfse': '456',\n    'inscricao_municipal': '654',\n    'codigo_verificacao': '789',\n}\n\nretorno = cancelamento_nfe(certificado, cancelamento=cancelamento)\n\n# retorno é um dicionário { 'received_xml':'', 'sent_xml':'', 'object': object() }\nprint retorno['received_xml']\nprint retorno['sent_xml']\n\n# retorno['object'] é um objeto python criado apartir do xml de resposta\nprint retorno['object'].Cabecalho.Sucesso\n\nif not retorno['object'].Cabecalho.Sucesso: # Cancelamento com erro\n    print retorno['object'].Erro.Codigo\n    print retorno['object'].Erro.Descricao\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanimaribeiro%2FPyTrustNFe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanimaribeiro%2FPyTrustNFe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanimaribeiro%2FPyTrustNFe/lists"}