Contrato
```
{
"notasFiscais": [
{
"identificador": 1,
"anexo": "53, 35, 3, 5..."
"valor": "2000.00"
},
...
]
}
```
```
{
"faturamento": 10000,
"prolabore": 2800,
"impostosCalculados": {
"valorDas": 600,
"valorIrrf": 40,
"valorInss": 1100
},
"totalizadores": {
"totalImpostos": 952.10,
"faturamentoLiquido": 9047.90
},
"notasFiscais": [
{
"identificador": 1,
"aliquota": 15.5
}
...
]
}
```
``` javascript
function simulacaoImpostos(notasFiscais) {
faturamento = calcularFaturamento(notasFiscais)
salarioMinimo = salarioMinimoVigente()
prolaboreIdeal = faturamento * 0.28
impostosSalarioMinimo = calcularTotalImpostos(notasFiscais, salarioMinimo)
impostosProlaboreIdeal = calcularTotalImpostos(notasFiscais, prolaboreIdeal)
impostosMaisVantajosos = escolherMaisVantajoso(
impostosSalarioMinimo,
impostosProlaboreIdeal
)
aliquotas = calcularAliquotasEfetivas(notasFiscais, impostosMaisVantajosos.prolabore)
return {
faturamento: faturamento,
prolabore: impostosMaisVantajosos.prolabore,
impostosCalculados: {
valorDas: impostosMaisVantajosos.valorDas,
valorIrrf: impostosMaisVantajosos.valorIrrf,
valorInss: impostosMaisVantajosos.valorInss
},
totalizadores: {
totalImpostos:
impostosMaisVantajosos.valorDas +
impostosMaisVantajosos.valorIrrf +
impostosMaisVantajosos.valorInss,
faturamentoLiquido:
faturamento - (
impostosMaisVantajosos.valorDas +
impostosMaisVantajosos.valorIrrf +
impostosMaisVantajosos.valorInss
)
},
notasFiscais: notasFiscais.map { nf ->
NotaFiscalAliquota(
identificador: nf.identificador,
aliquota: aliquotas[nf.anexo].aliquota
)
}
}
}
```
``` javascript
calcularTotalImpostos(notasFiscais, prolabore) {
valorDas = calcularValorDas(notasFiscais, prolabore)
impostosFolha = calcularImpostosFolha(prolabore)
return ImpostosCalculados(
valorDas,
impostosFolha.valorInss,
impostosFolha.valorIrrf,
prolabore
)
}
```
``` javascript
function BigDecimal calcularValorDAS(todasNotasFiscais, prolabore) {
mapaAnexos = {
"53": [
// notas fiscais
],
"35": [
// notas fiscais
],
"3": [
// notas fiscais
]
}
valorDasPorAnexo = mapaAnexos.keys.map { anexo ->
notasFiscaisAnexo = mapaAnexo[anexo]
faturamentoTodasNotas = somar(todasNotasFiscais)
faturamentoMensal = somar(notasFiscaisAnexo)
faturamentoAnual = faturamentoTodasNotas * 12
faturamentoMensal = faturamentoMensal
valorDas = calcularDAS(faturamentoAnual, faturamentoMensal, anexo, prolabore)
}
return somarTudo(valorDasPorAnexo)
}
```
``` javascript
function ImpostoFolhaFatorrDTO calcularImpostosFolha(prolabore) {
// chamar o que já existe hoje
}
```
``` javascript
function Map<Anexo, BigDecimal> calcularAliquotasEfetivas() {
// Chamar a mesma coisa do calculo DAS só que usando a aliquotaEfetiva ao invés do valor
}
```
``` javascript
escolherMaisVantajoso(impostosCalculados1, impostosCalculados2) {
return
if (impostosCalculados1 < impostosCalculados2)
impostosCalculados1
else
impostosCalculados2
}
```