-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
61 lines (51 loc) · 2.29 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
var Money = require('bigmoney.js'),
icms = require('icms');
function obterAliquotaDePartilha(ano) {
if(ano < 2016) {
return null;
}
return {
2016: { origem: 0.6, destino: 0.4 },
2017: { origem: 0.4, destino: 0.6 },
2018: { origem: 0.2, destino: 0.8 }
}[ano] || { origem: 0, destino: 1 };
}
function difal(parametros) {
var baseDeCalculo = new Money(parametros.baseDeCalculo),
consumidorFinal = parametros.consumidorFinal,
eContribuinte = parametros.eContribuinte,
estadoDeOrigem = parametros.estadoDeOrigem && parametros.estadoDeOrigem.toLowerCase(),
estadoDeDestino = parametros.estadoDeDestino && parametros.estadoDeDestino.toLowerCase(),
aliquotaDoFundoDeCombateAPobreza = parametros.aliquotaDoFundoDeCombateAPobreza,
dataDeEmissao = parametros.dataDeEmissao,
eOptantePeloSimples = parametros.eOptantePeloSimples,
produtoEmRegimeDeSt = parametros.produtoEmRegimeDeSt,
produtoImportado = parametros.produtoImportado;
// TODO: Descobrir a respeito da aliquota de 4% para produtos importados (se aplica a não contribuinte)
if(!consumidorFinal || eContribuinte || estadoDeOrigem === estadoDeDestino) {
return null;
}
var aliquotaInterestadual = icms(estadoDeOrigem, estadoDeDestino),
aliquotaInternaNoDestino = icms(estadoDeDestino),
partilha = obterAliquotaDePartilha(dataDeEmissao.getFullYear());
if(!partilha) {
return null;
}
var icmsOrigem = baseDeCalculo.times(aliquotaInterestadual / 100),
difal = baseDeCalculo.times(aliquotaInternaNoDestino / 100).minus(icmsOrigem);
return {
baseDeCalculo: baseDeCalculo,
icmsOrigem: icmsOrigem.valueOf(),
icmsDifalOrigem: difal.times(partilha.origem).valueOf(),
icmsDifalDestino: difal.times(partilha.destino).valueOf(),
aliquotaDoFundoDeCombateAPobreza: aliquotaDoFundoDeCombateAPobreza * 100,
fundoDeCombateAPobreza: baseDeCalculo.times(aliquotaDoFundoDeCombateAPobreza).valueOf(),
aliquotaInternaNoDestino: aliquotaInternaNoDestino,
aliquotaInterestadual: aliquotaInterestadual,
partilha: {
origem: partilha.origem * 100,
destino: partilha.destino * 100
}
};
}
module.exports = difal;