Implementa uma camada fina para acesso aos web services do IBPT, para auxiliar no cumprimento à Lei 12.741/2012, popularmente conhecida como "De Olho no Imposto". O Instituto Brasileiro de Planejamento e Tributação, IBPT, calcula e fornece os valores aproximados dos tributos para produtos e serviços com base no código NCM (Nomenclatura Comum do Mercosul, para produtos) e no código NBS (Nomenclatura Brasileira de Serviços).
Para que o acesso aos web services seja possível, é preciso cadastrar-se no IBPT para obter seu token de acesso.
Exemplo básico de configuração e consulta de produto:
>>> from ibptws import conf
>>> from ibptws import get_produto
>>> conf.token = 'ZyW9z...' # cadastre-se no IBPT para obter seu token
>>> conf.cnpj = '08427847000169'
>>> conf.estado = 'SP'
>>> get_produto('02091021')
Produto(codigo=u'2091021', uf=u'SP', ex=0, descricao=u'Gordura de porco,fresca,refrigerada ou congelada', nacional=4.2, estadual=12.0, importado=6.39)
Similarmente, para consultar um serviço faça:
>>> from ibptws import get_servico
>>> get_servico('0101')
Servico(codigo=u'101', uf=u'SP', descricao=u'An\xe1lise e desenvolvimento de sistemas.', tipo=u'NBS', nacional=13.45, estadual=0.0, municipal=3.9, importado=15.45)
A calculadora De Olho no Imposto auxilia na computação dos valores aproximados dos tributos, tornando trivial a consulta por n produtos e/ou servicos e a obtenção dos cálculos parciais e totais dos tributos.
>>> from decimal import Decimal
>>> from ibptws.calculadoras import DeOlhoNoImposto
>>> calc = DeOlhoNoImposto()
>>> calc.produto('02091021', 0, Decimal('5.75'))
>>> calc.servico('0101', Decimal('73.47'))
>>> calc.carga_federal_nacional()
Decimal('10.123215')
>>> calc.carga_federal_importado()
Decimal('11.718540')
>>> calc.carga_estadual()
Decimal('0.6900')
>>> calc.carga_municipal()
Decimal('2.86533')
>>> calc.total_tributos()
Decimal('25.397085')
>>> calc.total()
Decimal('79.22')
>>> calc.percentual_sobre_total()
Decimal('0.3205893082554910376167634436')
A calculadora De Olho no Imposto recorre a um proxy para realizar as consultas de produtos e serviços, possibilitando que seja implementada uma camada para provisionamento (cache) das consultas realizadas. Este projeto traz uma implementação de provisionamento baseada em Redis:
from ibptws.calculadoras import DeOlhoNoImposto
from ibptws.provisoes import ProvisaoViaRedis
calc = DeOlhoNoImposto(provisao=ProvisaoViaRedis(
host='192.168.0.111', port=6379, db=0))
Neste exemplo, as consultas a produtos e serviços serão realizadas através do proxy e, uma vez acessado o web services do IBPT, os dados ficarão provisionados até que expire (o padrão é expirar em 24h, mas você poderá usar os seus próprios critérios).
Os testes são baseados em pytest e não há acesso real aos serviços do IBPT, portanto não há necessidade de configurar o token de acesso para executar os testes unitários:
$ python setup.py test
Os autores deste projeto não tem qualquer relação com o Instituto Brasileiro de Planejamento e Tributação (IBPT), e este, por sua vez, não avaliza o uso desta biblioteca de código. Utilize por sua conta e risco.