Projetos
Objetivo
Este projeto tem por objetivo a identificação das saídas de mercadorias isentas de contribuição.
Isenção de Impostos pela Lei 11.196 (Antiga MP do Bem)
O Governo Federal instiuiu a LEI Nº 11.196 (21 de Novembro de 2005) e regulamentou o programa de Inclusão Digital pelo Decreto nº 5.602 (06 de Dezembro de 2005).
Com este decreto ficam reduzidas a zero as alíquotas da Contribuição para o PIS/PASEP e da COFINS incidentes sobre a receita bruta decorrente da venda a varejo.
O valor de venda a varejo NÿO deve incluir o valor de IPI, pois o referido imposto não é composto no faturamento, portanto, em regra geral, será o valor de cálculo da base de PIS e COFINS.
Obs.: Assim quando o cliente for Revenda não se enquadra nesta lei, pois a venda não é a varejo.
O quadro abaixo mostra a composição das unidades de processamento e o valor máximo permitido:
| Inciso | Componentes | Valor Máximo (R$) |
|---|---|---|
| I | CPU | 2.000 |
| II | Notebook | 4.000 |
| III | CPU + Monitor + Teclado + Mouse | 4.000 |
| IV | CPU + Teclado + Mouse | 2.100 |
| V | Modem | 150 |
| VI | Tablet | 2.500 |
| VII | Smartphone | Indefinido |
| VIII | Roteador | Indefinido |
Para determinar se um item de venda se classifica como CPU, Monitor, Notebook, Teclado ou Mouse, utilize a propriedade "Código NCM", segue abaixo o quadro que contém os valores para enquadramento:
| Item | Código na NCM |
|---|---|
| CPU | 8471.50.10 |
| Notebook | 8471.30.12 ou 8471.30.19 ou 8471.30.90 |
| Monitor | De 8471.60.70 até 8471.60.79. E também os códigos 8528.41.10, 8528.41.20, 8528.49.10, 8528.49.21, 8528.49.29, 8528.51.10, 8528.51.20, 8528.59.10, 8528.59.20. |
| Teclado | 8471.60.52 |
| Mouse | 8471.60.53 |
| Modem | 8517.62.55, 8517.62.62 e 8517.62.72 |
| Tablet | 8471.41.00 até 8471.41.99 |
| Smartphone | 8517.12.31 |
| Roteador | 8517.62.41 e 8517.62.77 |
Especificação Técnica
Os fontes do projeto deverão estar na pasta "T:\totalidll\dllMPBem\".
As classes devem permitir que seja possível adicionar N itens, e após as inserções, deve ser possível a chamada de um método que realiza o cálculo e disponibilize como retorno uma lista contendo os conjuntos formados e também uma lista que informe qual a quantidade de cada item que foi aproveitada.
A classe principal deverá ser chamada de "TMPBem", esta classe será responsável por receber os itens fiscais e fornecer: lista de conjuntos e lista de itens, contendo a quantidade de itens aproveitados para formar conjuntos.
Depois de todos os itens serem informados, o método "calcular" deverá ordenar as listas, do maior valor para o menor valor, e montar os conjuntos, obedecendo a seguinte ordem: Inciso II, Inciso III, Inciso IV, Inciso V, Inciso VI, Inciso VII, Inciso VIII e por último lista contendo os itens do Inciso I.
Para um melhor entendimento da implementação requisita, seguem abaixo os diagramas de classes e de sequência.
Diagrama de classes:

Diagrama de sequência:

Abaixo segue um exemplo, mostrando como ficaria a lista e os conjuntos depois de informados os itens na tabela a seguir.
| Item | Descrição | Valor (R$) |
|---|---|---|
| CPU | A | 3.600 |
| CPU | B | 2.500 |
| CPU | C | 3.000 |
| Teclado | A | 100 |
| Mouse | A | 40 |
| Mouse | B | 120 |
| Monitor | A | 1200 |
| Monitor | B | 800 |
| Notebook | A | 4.500 |
| Notebook | B | 3.500 |
Com base nas informações da tabela acima, as listas ordenadas ficariam desta forma:
Lista Notebook: Lista CPU Notebook A R$ 4.500 CPU A R$ 3.600 Notebook B R$ 3.500 CPU C R$ 3.000 CPU B R$ 2.500
Lista Monitor: Lista Teclado:
Monitor A R$ 1.200 Teclado A R$ 100 Monitor B R$ 800
Lista Mouse: Mouse B R$ 120 Mouse A R$ 40
Primeiramente, deve-se percorrer a lista de notebooks e verificar quais atendem ao critério do Inciso II.
Desta forma, o notebook A, não entraria na lista e ficaria com o atributo Aproveitado = False, e o notebook B, teria a propriedade Aproveitado = True.
Posteriormente, deve-se tentar montar os itens conforme Inciso III (por possuir valor mais elevado), percorre -ser a lista dos outros itens e montar os conjuntos de acordo com os critérios citados anteriormente. Na prática, percorre-se a lista de CPUs, para cada CPU, percorre-se a lista de monitores, para cada monitor, percorre-se a lista de teclados, e finalmente, para cada teclado, percorre-se a lista de mouses, o primeiro conjunto que atender ao critério do inciso, serão colocados em um novo objeto do tipo TConjunto, e além disso, cada objeto THardware deverá informar que foi aproveitado.
Ao percorrer a lista teríamos como tentativas de montagem de conjuntos a tabela a seguir:
| CPU | Monitor | Teclado | Mouse | Soma dos Itens | Resultado |
|---|---|---|---|---|---|
| 3.600 | 1.200 | 100 | 120 | 5020 | Inválido, valor maior que R$4.000 |
| 3.600 | 1.200 | 100 | 40 | 4940 | Inválido, valor maior que R$4.000 |
| 3.600 | 800 | 100 | 120 | 4620 | Inválido, valor maior que R$4.000 |
| 3.600 | 800 | 100 | 40 | 4540 | Inválido, valor maior que R$4.000 |
| 3.000 | 1.200 | 100 | 120 | 4420 | Inválido, valor maior que R$4.000 |
| 3.000 | 1.200 | 100 | 40 | 4340 | Inválido, valor maior que R$4.000 |
| 3.000 | 800 | 100 | 120 | 4020 | Inválido, valor maior que R$4.000 |
| 3.000 | 800 | 100 | 40 | 3940 | Válido, valor inferior a R$4.000 |
Neste momento, deve-se criar um objeto do tipo conjunto e inserir os objetos THardware que montaram a combinação válida. Repetindo o processo até que não seja possível montar mais combinações obedecendo aos incisos decretados.
Protótipo
Este projeto possui um protótipo visual e um protótipo de utilização do algoritmo de ordenação quicksort, a ordenação pelo método quicksort, está disponível em:
T:\TotaliPrototipos\prototipos\PCIA\MP do bem\Exemplo QuickSort
e o protótipo visual se encontra em: