{ "info": { "author": "Raphael Valyi", "author_email": "raphael.valyi@akretion.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7" ], "description": "nfelib Python library\n=====================\n\nA nfelib \u00e9 uma biblioteca para ler e gerir notas fiscais electronicas brasileiras (NFe's). Ja existem varias outras bibliotecas, porem na Akretion queriamos algo que fosse simples de manter para usar com o ERP open source Odoo. A nfelib nao tem a preten\u00e7ao de solucionar toda burocracia do SPED sozinha, mas apenas a questao da gera\u00e7ao da NFe. Tambem criamos outras bibliotecas semelhantes para os outros documentos electronicos do SPED.\n\nA nfelib permite de:\n\n* Gerir os XMLs dos documentos fiscais.\n* Validar os dados com as mesmas valida\u00e7oes dos XSDs ao montar os objetos, o que evita detetar os erros apenas ao transmitir o XML.\n* Importar XMLs e transfoma-los em objetos Python. Usando um sistema de sub-classes, fica facil mapear esses objetos em outros objetos ou adicionar qualquer metodo customizado.\n\nA nfelibe \u00e9:\n\n* **Simples e confiavel**. O codigo \u00e9 gerido pelo generateDS a partir dos XSD's da Fazenda usando o script generate de menos de **70 linhas de codigo** apenas.\n* Compativel com **Python 2 e Python 3**.\n* Capaz de carregar **varias versoes dos esquemas**. Isso pode ser bem util ao receber uma nota fiscal com um layout antigo.\n\nAs tecnologias XML (XSD, WSDL, SOAP...) usadas pelo site da Fazenda foram criadas inicialmente para Java e .Net. Durante um bom tempo essas tecnologias ficaram para tras no mundo do Python. Por isso varias pessoas foram criar bibliotecas manualmente com milhares de linhas e poucos testes para montar os XMLs dos documentos electronicos. Mas hoje \u00e9 um absurdo usar biblitecas escritas manualmente e depender do autor inicial a cada atualiza\u00e7ao dos esquemas ou quando seu programa deve migrar para Python 3. Veja o conceito do 'Truck Factor' \n\n\u00c9 debativel qual \u00e9 a melhor forma de transmitir esses documentos electronicos para o site da Fazenda (talvez com essas bibliotecas que ja existem, talvez com outras bibilotecas em Java especializadas em transmitir os documentos electronicos). Porem na questao de montar os XML e poder efetuar valida\u00e7oes dos dados o mais cedo possivel (perto do momento em qual o usuario preenchou os dados), dificilmente uma biblioteca de milhares de linhas escrita manualmente fica mais confiavel do que codigo gerido a partir dos XSD da Fazenda apenas. As classes da nfelib sao geridas usando a ferramenta generateDS. A funcionalidade de sub-classes do generateDS tambem ajuda na questao dos mapeamentos entre o modelo de dados dos esquemas da fazenda e o modelo de dados do seu software (ERP por examplo). Finalmente ficou possivel fazer com Python o que o pessoal do Java ja fazia ha muito tempo com as tecnologias do tipo JAXB.\n\nVoce pode aprender mais sobre o generateDS.py aqui: \n\ncomo instalar\n=============\n\n.. code::\n\n pip install git+https://github.com/akretion/nfelib.git#egg=nfelib\n\ncomo usar\n=========\n\n.. code::\n\n # nfelib permite de ler os dados de uma nota fiscal, por examplo no formato 3.10:\n >>> from nfelib.v3_10 import leiauteNFe as leiauteNFe3\n # voce usaria from nfelib.v4_00 import leiauteNFe as leiauteNFe4 para usar a versao 4.00 do layout\n >>> nota = leiauteNFe3.parse(\"/algum_caminho/alguma_nota.xml\")\n >>> nota.get_infNFe().get_emit().get_CPF()\n '12345678901'\n\n\n # nfelib tambem permite de montar o XML de uma nota fiscal com todas valida\u00e7oes dos XSDs ja nos objetos:\n >>> enderEmit=leiauteNFe3.TEnderEmi(xLgr='NKwaAJ5ZJ49aQYmqBvxMhBzkGUqvtXnqusGEtjDzKCXPGwrEZCS8LGKHyBbV',\n nro='11mzXHR8rZTgfE35EqfGhiShiIwQfLCAziFDXVgs3EjLSPkZkCvfGNLMEf5y',\n xCpl='Fr3gSvoAeKbGpQD3r98KFeB50P3Gq14XBVsv5fpiaBvJ3HTOpREiwYGs20Xw',\n xBairro='67LQFlXOBK0JqAE1rFi2CEyUGW5Z8QmmHhzmZ9GABVLKa9AbV0uFR0onl7nU',\n cMun='9999999',\n xMun='s1Cr2hWP6bptQ80A9vWBuTaODR1U82LtKQi1DEm3LsAXu9AbkSeCtfXJVTKG',\n UF='RS',\n CEP='88095550',\n cPais=1058,\n fone='12345678901324')\n\n # se tentar montar algum objeto com algum dado invalido:\n >>> emitente=leiauteNFe3.emitType(enderEmit=enderEmit, CPF='Brazil is a f*cking bureaucracy', xNome='Raphael', IE='12345678901234', IEST='84', IM='zjfBnFVG8TBq8iW', CNAE='0111111', CRT='3')\n nfelib/v3_10/leiauteNFe.py:5560: UserWarning: Value \"Brazil is a f*cking bureaucracy\" does not match xsd maxLength restriction on TCpf\n warnings_.warn('Value \"%(value)s\" does not match xsd maxLength restriction on TCpf' % {\"value\" : value.encode(\"utf-8\")} )\n nfelib/v3_10/leiauteNFe.py:5563: UserWarning: Value \"Brazil is a f*cking bureaucracy\" does not match xsd pattern restrictions: [['^[0-9]{11}$']]\n warnings_.warn('Value \"%s\" does not match xsd pattern restrictions: %s' % (value.encode('utf-8'), self.validate_TCpf_patterns_,\n\n >>> emitente=leiauteNFe3.emitType(enderEmit=enderEmit, CPF='12345678901', xNome='Raphael', IE='12345678901234', IEST='84', IM='zjfBnFVG8TBq8iW', CNAE='0111111', CRT='3')\n\n # para gerir o XML:\n >>> import sys\n >>> emitente.export(sys.stdout, 0)\n \n 12345678901\n Raphael\n \n NKwaAJ5ZJ49aQYmqBvxMhBzkGUqvtXnqusGEtjDzKCXPGwrEZCS8LGKHyBbV\n 11mzXHR8rZTgfE35EqfGhiShiIwQfLCAziFDXVgs3EjLSPkZkCvfGNLMEf5y\n Fr3gSvoAeKbGpQD3r98KFeB50P3Gq14XBVsv5fpiaBvJ3HTOpREiwYGs20Xw\n 67LQFlXOBK0JqAE1rFi2CEyUGW5Z8QmmHhzmZ9GABVLKa9AbV0uFR0onl7nU\n 9999999\n s1Cr2hWP6bptQ80A9vWBuTaODR1U82LtKQi1DEm3LsAXu9AbkSeCtfXJVTKG\n RS\n 88095550\n 1058\n 12345678901324\n \n 12345678901234\n 84\n zjfBnFVG8TBq8iW\n 0111111\n 3\n \n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/akretion/nfelib", "keywords": "e-invoice NFe ERP Odoo", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "nfelib", "package_url": "https://pypi.org/project/nfelib/", "platform": "", "project_url": "https://pypi.org/project/nfelib/", "project_urls": { "Homepage": "https://github.com/akretion/nfelib" }, "release_url": "https://pypi.org/project/nfelib/0.1/", "requires_dist": null, "requires_python": "", "summary": "nfelib: electronic invoicing library for Brazil", "version": "0.1" }, "last_serial": 3303360, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "72910883903219b5a12b80cbea23f0ff", "sha256": "b88fc70c011e4142e183838d4920ef0b006384bd63b7862b0175ef93973b7dfd" }, "downloads": -1, "filename": "nfelib-0.1.tar.gz", "has_sig": false, "md5_digest": "72910883903219b5a12b80cbea23f0ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 294093, "upload_time": "2017-11-03T14:49:38", "url": "https://files.pythonhosted.org/packages/30/32/b22f2eed4a61f599d21b5b68ab5ff6f02e450c9e37086f9bbb6b30313e48/nfelib-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "72910883903219b5a12b80cbea23f0ff", "sha256": "b88fc70c011e4142e183838d4920ef0b006384bd63b7862b0175ef93973b7dfd" }, "downloads": -1, "filename": "nfelib-0.1.tar.gz", "has_sig": false, "md5_digest": "72910883903219b5a12b80cbea23f0ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 294093, "upload_time": "2017-11-03T14:49:38", "url": "https://files.pythonhosted.org/packages/30/32/b22f2eed4a61f599d21b5b68ab5ff6f02e450c9e37086f9bbb6b30313e48/nfelib-0.1.tar.gz" } ] }