{ "info": { "author": "Qualita Seguranca e Saude Ocupacional", "author_email": "lab.ti@qualitaocupacional.com.br", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5" ], "description": "NFSe de S\u00e3o Jos\u00e9 - Santa Catarina\n=================================\n\nBiblioteca para auxiliar a assinar, gerar e consultar NFSe da Prefeitura Municipal de S\u00e3o Jos\u00e9.\nPadr\u00e3o **ABRASF** da **Betha Software**.\n\nInstala\u00e7\u00e3o\n----------\n\nA biblioteca est\u00e1 dispon\u00edvel no PyPi:\n\n.. code::\n\n user@host:~$ pip install nfsepmsj\n\nDesenvolvimento\n---------------\n\nClonar o reposit\u00f3rio:\n\n.. code::\n\n user@host:~$ git clone https://github.com/qualitaocupacional/nfsepmsj.git\n\nInstalar a lib em modo desenvolvimento:\n\n.. code::\n\n (virtualenv) user@host:~/nfsepmsj$ pip install -e \".[testing]\"\n\nUsando\n------\n\n.. code:: python\n\n from nfsepmsj.client import NFSe\n\n pfx_file = '/caminho/do/arquivo.pfx'\n pfx_passwd = 'Senha do arquivo pfx'\n\n nfse = NFSe(pfx_file, pfx_passwd)\n nf_data = {\n 'rps.lote.id': 'loteid',\n 'nf.data.emissao': 'AAAA-MM-DD',\n 'nf.total_nota': '100.30'\n # demais campos...\n }\n nfse.add_rps(data)\n result, errors = nfse.send()\n\n*result* vai ser uma lista de dicion\u00e1rios com a estrutura:\n\n.. code:: javascript\n\n [\n {\n 'rps.lote.id': 'loteid',\n 'xml.response': 'XML com a resposta do webservices',\n 'xml': 'o XML que foi gerado para envio',\n }\n ]\n\nE *errors*, se houver algum, como, por exemplo, erro de valida\u00e7\u00e3o do XML, vai ser:\n\n.. code:: javascript\n\n [\n {\n 'rps.lote.id': 'loteid',\n 'xml': 'o XML que foi gerado para envio',\n 'error': 'a mensagem do erro'\n }\n ]\n\nEstrutura do dicion\u00e1rio com os campos da nota fiscal:\n\n+-------------------------------------+------------------------------+\n| Nome | Descri\u00e7\u00e3o |\n+=====================================+==============================+\n| 'rps.lote.id' | Identifica\u00e7\u00e3o \u00fanica do lote |\n+-------------------------------------+------------------------------+\n| 'rps.numero' | |\n+-------------------------------------+------------------------------+\n| 'rps.serie' | |\n+-------------------------------------+------------------------------+\n| 'rps.tipo' | |\n+-------------------------------------+------------------------------+\n| 'rps.data.emissao' | |\n+-------------------------------------+------------------------------+\n| 'rps.status' | 1-Normal, 2-Cancelado |\n+-------------------------------------+------------------------------+\n| 'rps.substituido.numero' | |\n+-------------------------------------+------------------------------+\n| 'rps.substituido.serie' | |\n+-------------------------------------+------------------------------+\n| 'rps.substituido.tipo' | |\n+-------------------------------------+------------------------------+\n| 'nf.data.emissao' | |\n+-------------------------------------+------------------------------+\n| 'nf.total_nota' | |\n+-------------------------------------+------------------------------+\n| 'nf.valor_deducoes' | |\n+-------------------------------------+------------------------------+\n| 'nf.valor_pis' | |\n+-------------------------------------+------------------------------+\n| 'nf.valor_cofins' | |\n+-------------------------------------+------------------------------+\n| 'nf.valor_inss' | |\n+-------------------------------------+------------------------------+\n| 'nf.valor_IR' | |\n+-------------------------------------+------------------------------+\n| 'nf.valor_csll' | |\n+-------------------------------------+------------------------------+\n| 'nf.valor_outros' | |\n+-------------------------------------+------------------------------+\n| 'nf.valor_iss' | |\n+-------------------------------------+------------------------------+\n| 'nf.aliquota' | |\n+-------------------------------------+------------------------------+\n| 'nf.desconto_incondicionado' | |\n+-------------------------------------+------------------------------+\n| 'nf.desconto_condicionado' | |\n+-------------------------------------+------------------------------+\n| 'nf.iss_retido' | |\n+-------------------------------------+------------------------------+\n| 'nf.responsavel_retencao' | |\n+-------------------------------------+------------------------------+\n| 'nf.codigo_servico' | |\n+-------------------------------------+------------------------------+\n| 'nf.codigo_cnae' | |\n+-------------------------------------+------------------------------+\n| 'nf.codigo_tributacao_municipio' | |\n+-------------------------------------+------------------------------+\n| 'nf.discriminacao' | |\n+-------------------------------------+------------------------------+\n| 'nf.codigo_municipio' | |\n+-------------------------------------+------------------------------+\n| 'nf.codigo_pais' | |\n+-------------------------------------+------------------------------+\n| 'nf.exigibilidade_iss' | |\n+-------------------------------------+------------------------------+\n| 'nf.codigo_municipio_incidencia' | |\n+-------------------------------------+------------------------------+\n| 'nf.numero_processo' | |\n+-------------------------------------+------------------------------+\n| 'nf.prestador.documento' | |\n+-------------------------------------+------------------------------+\n| 'nf.prestador.inscricao_municipal' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.documento' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.inscricao_municipal' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.razao_social' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.logradouro' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.numero_logradouro' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.complemento' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.bairro' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.codigo_municipio' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.uf' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.codigo_pais' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.cep' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.contato.telefone' | |\n+-------------------------------------+------------------------------+\n| 'nf.tomador.contato.email' | |\n+-------------------------------------+------------------------------+\n| 'nf.regime_especial_tributacao' | |\n+-------------------------------------+------------------------------+\n| 'nf.optante_simples' | |\n+-------------------------------------+------------------------------+\n| 'nf.incentivo_fiscal' | |\n+-------------------------------------+------------------------------+\n| ... | ... |\n+-------------------------------------+------------------------------+\n\n**TODO**: ainda falta os campos para *Intermedi\u00e1rio* e *Constru\u00e7\u00e3o Civil*.\n\nCampos adicionais para **Cancelamento** de NFSe:\n\n+-------------------------------------+--------------------------------------+\n| Nome | Descri\u00e7\u00e3o |\n+=====================================+======================================+\n| 'nf.cancela.id' | Identifica\u00e7\u00e3o \u00fanica do cancelamento |\n+-------------------------------------+--------------------------------------+\n| 'nf.numero' | N\u00famero da NFSe gerada |\n+-------------------------------------+--------------------------------------+\n| 'nf.codigo_cancelamento' | C\u00f3digo do cancelamento |\n+-------------------------------------+--------------------------------------+\n\nO **C\u00f3digo do Cancelamento** \u00e9 obrigat\u00f3rio, apesar que na documenta\u00e7\u00e3o da vers\u00e3o **2.02** informar que esse c\u00f3digo \u00e9 opcional.\nSem esse c\u00f3digo o webservices retorna **\"Erro desconhecido\"**.\n\nOs valores poss\u00edveis s\u00e3o:\n\n* 1 - Erro na emiss\u00e3o\n* 2 - Servi\u00e7o n\u00e3o prestado\n* 3 - Erro de assinatura\n* 4 - Duplicidade da nota\n* 5 - Erro de processamento\n\nSendo que os c\u00f3digos **3** e **5** s\u00e3o de uso restrito da Administra\u00e7\u00e3o Tribut\u00e1ria Municipal.\n\n**Cancelando uma NFSe**\n\n.. code:: python\n\n from nfsepmsj.client import NFSe\n\n pfx_file = '/caminho/do/arquivo.pfx'\n pfx_passwd = 'Senha do arquivo pfx'\n\n nfse = NFSe(pfx_file, pfx_passwd)\n cancel_data = {\n 'nf.cancela.id': 'cancel_id1',\n 'nf.codigo_cancelamento': '1',\n 'nf.numero': '1',\n 'nf.prestador.documento': '99999999999999',\n 'nf.prestador.inscricao_municipal': '9999999',\n 'nf.codigo_municipio': '4216602',\n }\n nfse.add_to_cancel(cancel_data)\n result, errors = nfse.cancel()\n\n*result* vai ser uma lista de dicion\u00e1rios com a estrutura:\n\n.. code:: javascript\n\n [\n {\n 'nf.cancela.id': 'cancel_id1',\n 'xml.response': 'XML com a resposta do webservices',\n 'xml': 'o XML que foi gerado para envio',\n }\n ]\n\nE *errors*, se houver algum, como, por exemplo, erro de valida\u00e7\u00e3o do XML, vai ser:\n\n.. code:: javascript\n\n [\n {\n 'nf.cancela.id': 'cancel_id1',\n 'xml': 'o XML que foi gerado para envio',\n 'error': 'a mensagem do erro'\n }\n ]\n\n\nCampos adicionais para **Envio em Lote** de NFSe:\n\n+-------------------------------------+--------------------------------------+\n| Nome | Descri\u00e7\u00e3o |\n+=====================================+======================================+\n| 'lote.id' | Identifica\u00e7\u00e3o \u00fanica do lote |\n+-------------------------------------+--------------------------------------+\n| 'lote.numero' | N\u00famero do lote |\n+-------------------------------------+--------------------------------------+\n| 'nf.prestador.documento' | CPF/CNPJ do prestador |\n+-------------------------------------+--------------------------------------+\n| 'nf.prestador.inscricao_municipal' | Inscri\u00e7\u00e3o municipal do prestador |\n+-------------------------------------+--------------------------------------+\n\nLembrando que nesta modalidade os dados de RPS devem conter os campos:\n\n* 'rps.numero'\n* 'rps.serie'\n* 'rps.tipo'\n* 'rps.data.emissao'\n* 'rps.status'\n\n**Enviando um lote (sincrono)**\n\n.. code:: python\n\n from nfsepmsj.client import NFSe\n\n pfx_file = '/caminho/do/arquivo.pfx'\n pfx_passwd = 'Senha do arquivo pfx'\n\n nfse = NFSe(pfx_file, pfx_passwd)\n # ...\n\n nfse.add_rps(rps01_data)\n nfse.add_rps(rps02_data)\n # ...\n batch_data = {\n 'lote.id': 'lote_id',\n 'lote.numero': '201901',\n 'nf.prestador.documento': '99999999999999',\n 'nf.prestador.inscricao_municipal': '9999999',\n }\n result, errors = nfse.send_batch(batch_data)\n\n\n*result* vai ser um dicion\u00e1rio com a estrutura:\n\n.. code:: javascript\n\n {\n 'lote.id': 'lote_id',\n 'xml.response': 'XML com a resposta do webservices',\n 'xml': 'o XML que foi gerado para envio',\n }\n\nE *errors*, se houver algum, como, por exemplo, erro de valida\u00e7\u00e3o do XML, vai ser:\n\n.. code:: javascript\n\n {\n 'lote.id': 'lote_id',\n 'xml': 'o XML que foi gerado para envio',\n 'error': 'a mensagem do erro'\n }\n\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/qualitaocupacional/nfsepmsj", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "nfsepmsj", "package_url": "https://pypi.org/project/nfsepmsj/", "platform": "", "project_url": "https://pypi.org/project/nfsepmsj/", "project_urls": { "Homepage": "https://github.com/qualitaocupacional/nfsepmsj" }, "release_url": "https://pypi.org/project/nfsepmsj/0.0.2/", "requires_dist": [ "requests (>=2.7.0)", "lxml (>=4.2.1)", "zeep (>=2.5.0)", "signxml (>=2.5.2)", "pyOpenSSL (>=17.5.0)", "six (>=1.11.0)" ], "requires_python": "", "summary": "Biblioteca para acesso ao Webservices de NFSe da Prefeitura Municipal de Sao Jose - SC", "version": "0.0.2" }, "last_serial": 5975042, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "8b3c6690e5802445d63fba9fe90dd28e", "sha256": "7c46a31417919b1e9c7cc3beae847ab41aea6208a5b40c29a906d596e250f4ec" }, "downloads": -1, "filename": "nfsepmsj-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8b3c6690e5802445d63fba9fe90dd28e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20941, "upload_time": "2019-10-12T04:47:56", "url": "https://files.pythonhosted.org/packages/c9/3d/574fabab3866efdf63e1c769ba0dff1a6e33304d8b3ed2a7447d229589a5/nfsepmsj-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f370cc7f4d42a7c9f4ca8a2dcde66b26", "sha256": "4bebb2e3f09b7e9e986a63ee8d13e99d01586277dc37568a1898bc1d8c6d341b" }, "downloads": -1, "filename": "nfsepmsj-0.0.1.tar.gz", "has_sig": false, "md5_digest": "f370cc7f4d42a7c9f4ca8a2dcde66b26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21243, "upload_time": "2019-10-12T04:47:59", "url": "https://files.pythonhosted.org/packages/22/a9/c66a42553224070e4b465c27d0a6a6fd19b3ca585d514c0e121dfb8a9bf1/nfsepmsj-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "386f719b8f26bacbe3de7089e6b4a337", "sha256": "d3e79892ca808f4f26b69fc3c0bc1c86053b2e411dbfe7ce710c7b101954f80d" }, "downloads": -1, "filename": "nfsepmsj-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "386f719b8f26bacbe3de7089e6b4a337", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21554, "upload_time": "2019-10-15T06:20:23", "url": "https://files.pythonhosted.org/packages/6e/88/d6c57a2925c40e8c8c6d1c8b8c8f069f8f7664a3d5c172522168c4d150d4/nfsepmsj-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d2eb61d0f36266111b7104e2540f114", "sha256": "f8c6366e20a15e25cfee0f119bc0a894263dea8963b5fee612042b8442f1e939" }, "downloads": -1, "filename": "nfsepmsj-0.0.2.tar.gz", "has_sig": false, "md5_digest": "4d2eb61d0f36266111b7104e2540f114", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22300, "upload_time": "2019-10-15T06:20:26", "url": "https://files.pythonhosted.org/packages/a8/65/3bd3050b49524cbc62f6e4f9c643e2ffac9bbcccb564c1a48f46639ca1f6/nfsepmsj-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "386f719b8f26bacbe3de7089e6b4a337", "sha256": "d3e79892ca808f4f26b69fc3c0bc1c86053b2e411dbfe7ce710c7b101954f80d" }, "downloads": -1, "filename": "nfsepmsj-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "386f719b8f26bacbe3de7089e6b4a337", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21554, "upload_time": "2019-10-15T06:20:23", "url": "https://files.pythonhosted.org/packages/6e/88/d6c57a2925c40e8c8c6d1c8b8c8f069f8f7664a3d5c172522168c4d150d4/nfsepmsj-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4d2eb61d0f36266111b7104e2540f114", "sha256": "f8c6366e20a15e25cfee0f119bc0a894263dea8963b5fee612042b8442f1e939" }, "downloads": -1, "filename": "nfsepmsj-0.0.2.tar.gz", "has_sig": false, "md5_digest": "4d2eb61d0f36266111b7104e2540f114", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22300, "upload_time": "2019-10-15T06:20:26", "url": "https://files.pythonhosted.org/packages/a8/65/3bd3050b49524cbc62f6e4f9c643e2ffac9bbcccb564c1a48f46639ca1f6/nfsepmsj-0.0.2.tar.gz" } ] }