pytrustnfe3


Namepytrustnfe3 JSON
Version 2.0.1 PyPI version JSON
download
home_pagehttps://github.com/danimaribeiro/PyTrustNFe
SummaryPyTrustNFe é uma biblioteca para envio de NF-e
upload_time2023-10-05 19:41:39
maintainer
docs_urlNone
authorDanimar Ribeiro
requires_python
licenseLGPL-v2.1+
keywords nfe mdf-e
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI
coveralls test coverage No coveralls.
            # PyTrustNFe
Biblioteca Python que tem por objetivo enviar NFe, NFCe e NFSe no Brasil

[![Coverage Status](https://coveralls.io/repos/danimaribeiro/PyTrustNFe/badge.svg?branch=master3)](https://coveralls.io/r/danimaribeiro/PyTrustNFe?branch=master3)
[![Build Status](https://app.travis-ci.com/danimaribeiro/PyTrustNFe.svg?branch=master3)](https://travis-ci.org/danimaribeiro/PyTrustNFe)
[![PyPI version](https://badge.fury.io/py/PyTrustNFe3.svg)](https://badge.fury.io/py/PyTrustNFe3)

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](cidades/susesu.md) - 3 cidades atendidas
* [Simpliss](cidades/simpliss.md) - 18 cidade atendidas
* [GINFES](cidades/ginfes.md) - 79 cidades atendidas
* [DSF](cidades/dsf.md) - 7 cidades atendidas

Roadmap
--------------
Teste unitários

Implementar novos provedores de NFSe
* [Betha](cidades/betha.md) - 81 cidades atendidas  WIP
* [WebISS](cidades/webiss.md) - 51 cidades atendidas
* [ISSIntel](cidades/issintel.md) - 32 cidades atendidas
* [ISSNET](cidades/issnet.md) - 32 cidades atendidas
* [Saatri](cidades/saatri.md) - 31 cidades atendidas


Exemplos de uso da NFe
-----------------------------

Consulta Cadastro por CNPJ:

```python
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:
```python
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:
```python
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

```python
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:

```python
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
```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/danimaribeiro/PyTrustNFe",
    "name": "pytrustnfe3",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "nfe,mdf-e",
    "author": "Danimar Ribeiro",
    "author_email": "danimaribeiro@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/bd/40/152703e98a1abeca22c80f355cd0173c38eca39b3f9019395244803d4076/pytrustnfe3-2.0.1.tar.gz",
    "platform": null,
    "description": "# 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\u00e1rios para instala\u00e7\u00e3o:\n\n```apt-get install --no-install-recommends python3-pip python3-wheel python3-setuptools python3-openssl python3-lxml```\n\n\nDepend\u00eancias:\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\u00e3o Paulo/SP\n* **Nota Carioca** - Rio de Janeiro/RJ\n* **Imperial** - Petr\u00f3polis/RH\n* **Goi\u00e2nia** - Goi\u00e2nia/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\u00e1rios\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\u00e7\u00e3o NF-e sem Valida\u00e7\u00e3o 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\u00e7\u00e3o NF-e com Valida\u00e7\u00e3o 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\u00e7\u00e3o 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\u00e7\u00e3o 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\u00e7\u00e3o 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\u00e1rio criar um dicion\u00e1rio com os dados, valida\u00e7\u00e3o dos dados deve\n# ser feita pela aplica\u00e7\u00e3o que est\u00e1 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\u00f3digo 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 \u00e9 um dicion\u00e1rio { 'received_xml':'', 'sent_xml':'', 'object': object() }\nprint retorno['received_xml']\nprint retorno['sent_xml']\n\n# retorno['object'] \u00e9 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 \u00e9 um dicion\u00e1rio { 'received_xml':'', 'sent_xml':'', 'object': object() }\nprint retorno['received_xml']\nprint retorno['sent_xml']\n\n# retorno['object'] \u00e9 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",
    "bugtrack_url": null,
    "license": "LGPL-v2.1+",
    "summary": "PyTrustNFe \u00e9 uma biblioteca para envio de NF-e",
    "version": "2.0.1",
    "project_urls": {
        "Homepage": "https://github.com/danimaribeiro/PyTrustNFe"
    },
    "split_keywords": [
        "nfe",
        "mdf-e"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fb0296034b856a65da5d0c741dd1e96053839e3f6135371c73dec40294fb1655",
                "md5": "d8b1b73ea2f437c54239ec4b93a63683",
                "sha256": "2ebd6f2ddefce870f20a57fdbefd71b797d299a3f1c798a465ddc13db9e51b72"
            },
            "downloads": -1,
            "filename": "pytrustnfe3-2.0.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "d8b1b73ea2f437c54239ec4b93a63683",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 205568,
            "upload_time": "2023-10-05T19:41:37",
            "upload_time_iso_8601": "2023-10-05T19:41:37.904906Z",
            "url": "https://files.pythonhosted.org/packages/fb/02/96034b856a65da5d0c741dd1e96053839e3f6135371c73dec40294fb1655/pytrustnfe3-2.0.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bd40152703e98a1abeca22c80f355cd0173c38eca39b3f9019395244803d4076",
                "md5": "2798738718634af4889af7e7b75ecdde",
                "sha256": "7928f0dc48f4147a5f3db5d3d7011e970497b93f3719ab404e671823690bfa7e"
            },
            "downloads": -1,
            "filename": "pytrustnfe3-2.0.1.tar.gz",
            "has_sig": false,
            "md5_digest": "2798738718634af4889af7e7b75ecdde",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 167274,
            "upload_time": "2023-10-05T19:41:39",
            "upload_time_iso_8601": "2023-10-05T19:41:39.855304Z",
            "url": "https://files.pythonhosted.org/packages/bd/40/152703e98a1abeca22c80f355cd0173c38eca39b3f9019395244803d4076/pytrustnfe3-2.0.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-10-05 19:41:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "danimaribeiro",
    "github_project": "PyTrustNFe",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "pytrustnfe3"
}
        
Elapsed time: 0.12005s