# Definição de Padrão para Configuração de Novos Impostos

Este documento estabelece o protocolo técnico e funcional para a introdução de novos tributos, contribuições ou retenções no Sistema Integrado de Gestão (SIGEFP), garantindo a automatização sem necessidade de refatoração de código.

## 1. Princípio da Extensibilidade
O sistema foi desenhado para suportar a adição de novas figuras tributárias desde que estas obedeçam a modelos matemáticos pré-definidos (Fixo ou Progressivo). Qualquer imposto que dependa de variáveis exógenas não previstas na entidade `Agente` ou `Tabela Salarial` requer desenvolvimento específico.

## 2. Contrato de Dados (Data Contract)
Para que um novo imposto seja reconhecido e processado automaticamente pelo Motor de Cálculo (`PayrollService`), este deve ser registado na base de dados obedecendo rigorosamente à seguinte estrutura:

### 2.1. Entidade: Tipo de Desconto (`deduction_type`)
Representa a "Categoria" do tributo.
*   **Identificador (Code)**: Deve ser único, curto e em caixa alta (Ex: `TSAN`).
*   **Nome (Name)**: O nome amigável que aparecerá nas abas de configuração e nos recibos de vencimento.
*   **Mandatório (Mandatory)**: `TRUE` se for aplicado a todos automaticamente.

### 2.2. Entidade: Regra de Escalão (`tax_bracket`)
Define a lógica matemática. O sistema interpreta cada registo como uma regra condicional: *"Se o salário base estiver entre X e Y, aplique Z"*.

| Campo | Obrigatoriedade | Descrição Técnica |
| :--- | :--- | :--- |
| `deduction_type_id` | Obrigatório | Chave estrangeira para o Tipo de Desconto. |
| `lower_limit` | Obrigatório | Limite inferior da faixa de incidência (Inclusive). |
| `upper_limit` | Opcional | Limite superior. Se nulo, considera-se infinito. |
| `fixed_amount` | Condicional | Valor monetário fixo a descontar. Preivalece sobre percentagens. |
| `rate_percentage` | Condicional | Coeficiente decimal (Ex: 0.15 para 15%) aplicado sobre a base tributável. |
| `excess_deduction` | Opcional | "Parcela a Abater". Valor subtraído do resultado da multiplicação da taxa. |

---

## 3. Modelos Matemáticos Suportados
O motor de cálculo executa a seguinte lógica de decisão para cada escalão encontrado. Ao configurar um novo imposto, deve-se escolher **apenas um** dos modelos abaixo.

### 3.1. Modelo A: Tributação Fixa (Flat Fee)
Aplicável a taxas de valor nominal (ex: Taxa de Saneamento, Contribuição Sindical Fixa).
*   **Configuração**: Preencher apenas `fixed_amount`.
*   **Fórmula**: `Desconto = Valor Fixo`

### 3.2. Modelo B: Tributação Proporcional Simples (Flat Rate)
Aplicável a impostos de percentagem única ou variável por faixa, sem dedução (ex: Dízimo, Contribuições Especiais).
*   **Configuração**: Preencher `rate_percentage`. Deixar `excess_deduction` e `fixed_amount` nulos.
*   **Fórmula**: `Desconto = Base Tributável × Taxa`

### 3.3. Modelo C: Tributação Progressiva Completa (padrão IRPS)
Aplicável a impostos sobre rendimento com suavização de curvas.
*   **Configuração**: Preencher `rate_percentage` e `excess_deduction`.
*   **Fórmula**: `Desconto = (Base Tributável × Taxa) - Parcela a Abater`

---

## 4. Protocolo de Inserção (Procedimento)
Para operacionalizar um novo imposto:

1.  **Definição**: Insira o registo mestre na tabela `deduction_type`.
2.  **Parametrização**: Insira os N escalões necessários na tabela `tax_bracket`, cobrindo todas as faixas salariais possíveis (de 0 ao infinito).
3.  **Verificação**:
    *   Acesse o módulo de Recursos Humanos -> Configurações -> Escalões.
    *   Verifique se uma nova aba com o nome do imposto foi gerada automaticamente.
    *   Confirme se os valores aparecem conforme inserido.
4.  **Execução**: Na próxima execução da folha, o sistema iterará sobre o novo tipo e aplicará as regras aos agentes elegíveis.

**Nota Importante**: O sistema assume que a base de cálculo para novos impostos progressivos é (Salário Bruto - Segurança Social), salvo configuração específica em contrário nas Regras Globais.
