# -*- coding: utf-8 -*-
# (c) 2014 Kmee - Luis Felipe Mileo <mileo@kmee.com.br>
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html

from openerp import exceptions, _
from openerp import api, fields, models


class L10nBrHrSocialTax(models.Model):
    _name = 'l10n_br.hr.social.security.tax'
    _description = 'Brazilian HR - Social Security Tax Table'
    _order = 'year desc, max_wage'

    year = fields.Integer(string='Year', required=True)
    min_wage = fields.Float(string='Min Wage', required=True)
    max_wage = fields.Float(string='Wage up to', required=True)
    rate = fields.Float(
        string='Rate (%)',
        help='Valor em percentagem. Ex.: 8% | 9%',
        required=True)

    @api.multi
    def name_get(self):
        result = []

        for record in self:
            name = str(self.year).zfill(4)
            # name += ' - ' + str(self.max_wage).replace('.', ',')
            # name += ' - ' + str(self.amount).replace('.', ',')
            result.append((record['id'], name))

        return result

    def _compute_inss(self, BASE_INSS, date_from):
        ano = fields.Datetime.from_string(date_from).year
        tabela_inss_obj = self.env['l10n_br.hr.social.security.tax']
        tabela_vigente = tabela_inss_obj.search([('year', '=', ano)])

        if tabela_vigente:
            for faixa in tabela_vigente:
                if BASE_INSS < faixa.max_wage:
                    return BASE_INSS * faixa.rate / 100.00
            return BASE_INSS * tabela_vigente[-1].rate / 100.00

        else:
            raise exceptions.Warning(
                _('Tabela de INSS do ano Vigente Não encontrada!'))
            # print("Nao encontrada tabelas de INSS do ano de " + ano)

# -*- coding: utf-8 -*-
# (c) 2014 Kmee - Luis Felipe Mileo <mileo@kmee.com.br>
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html

import logging

from openerp import exceptions, _
from openerp import api, fields, models

_logger = logging.getLogger(__name__)


class L10nBrHrSocialTax(models.Model):
    _name = 'l10n_br.hr.social.security.tax'
    _description = 'Brazilian HR - Social Security Tax Table'
    _order = 'year desc, max_wage'

    year = fields.Integer(string='Year', required=True)
    min_wage = fields.Float(string='Min Wage', required=True)
    max_wage = fields.Float(string='Wage up to', required=True)
    rate = fields.Float(
        string='Rate (%)',
        help='Valor em percentagem. Ex.: 8% | 9%',
        required=True)

    @api.multi
    def name_get(self):
        result = []

        for record in self:
            name = str(self.year).zfill(4)
            # name += ' - ' + str(self.max_wage).replace('.', ',')
            # name += ' - ' + str(self.amount).replace('.', ',')
            result.append((record['id'], name))

        return result

    def _compute_inss(self, BASE_INSS, date_from):
        ano = fields.Datetime.from_string(date_from).year
        tabela_inss_obj = self.env['l10n_br.hr.social.security.tax']
        tabela_vigente = tabela_inss_obj.search([('year', '=', ano)])

        if tabela_vigente:
            for faixa in tabela_vigente:
                if BASE_INSS < faixa.max_wage:
                    return BASE_INSS * faixa.rate / 100.00
            return BASE_INSS * tabela_vigente[-1].rate / 100.00

        else:
            raise exceptions.Warning(
                _('Tabela de INSS do ano Vigente Não encontrada!'))
            _logger.info(
		"Nao encontrada tabelas de INSS do ano de " + ano)

Ajuste nas regras e funcoes de calculo do INSS