-
Notifications
You must be signed in to change notification settings - Fork 484
/
Copy pathICMSGeral.cs
435 lines (372 loc) · 15.7 KB
/
ICMSGeral.cs
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
/********************************************************************************/
/* Projeto: Biblioteca ZeusNFe */
/* Biblioteca C# para emissão de Nota Fiscal Eletrônica - NFe e Nota Fiscal de */
/* Consumidor Eletrônica - NFC-e (http://www.nfe.fazenda.gov.br) */
/* */
/* Direitos Autorais Reservados (c) 2014 Adenilton Batista da Silva */
/* Zeusdev Tecnologia LTDA ME */
/* */
/* Você pode obter a última versão desse arquivo no GitHub */
/* localizado em https://github.com/adeniltonbs/Zeus.Net.NFe.NFCe */
/* */
/* */
/* Esta biblioteca é software livre; você pode redistribuí-la e/ou modificá-la */
/* sob os termos da Licença Pública Geral Menor do GNU conforme publicada pela */
/* Free Software Foundation; tanto a versão 2.1 da Licença, ou (a seu critério) */
/* qualquer versão posterior. */
/* */
/* Esta biblioteca é distribuída na expectativa de que seja útil, porém, SEM */
/* NENHUMA GARANTIA; nem mesmo a garantia implícita de COMERCIABILIDADE OU */
/* ADEQUAÇÃO A UMA FINALIDADE ESPECÍFICA. Consulte a Licença Pública Geral Menor*/
/* do GNU para mais detalhes. (Arquivo LICENÇA.TXT ou LICENSE.TXT) */
/* */
/* Você deve ter recebido uma cópia da Licença Pública Geral Menor do GNU junto*/
/* com esta biblioteca; se não, escreva para a Free Software Foundation, Inc., */
/* no endereço 59 Temple Street, Suite 330, Boston, MA 02111-1307 USA. */
/* Você também pode obter uma copia da licença em: */
/* http://www.opensource.org/licenses/lgpl-license.php */
/* */
/* Zeusdev Tecnologia LTDA ME - adenilton@zeusautomacao.com.br */
/* http://www.zeusautomacao.com.br/ */
/* Rua Comendador Francisco josé da Cunha, 111 - Itabaiana - SE - 49500-000 */
/********************************************************************************/
using System;
using DFe.Utils;
using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual;
using NFe.Classes.Informacoes.Detalhe.Tributacao.Estadual.Tipos;
using NFe.Classes.Informacoes.Emitente;
namespace NFe.Utils.Tributacao.Estadual
{
/// <summary>
/// Classe com todos os campos da tributação de ICMS e CSOSN
/// </summary>
public class ICMSGeral
{
/// <summary>
/// Cria um objeto ICMSGeral com os dados do ICMSBasico passado
/// </summary>
/// <param name="icmsBasico">Um objeto que implemente a classe abstrata ICMSBasico. Ex: ICMS00, ICMS10, ICMSSN101, etc.</param>
public ICMSGeral(ICMSBasico icmsBasico)
{
this.CopiarPropriedades(icmsBasico);
}
public ICMSGeral()
{
}
/// <summary>
/// Obtém um objeto ICMSBasico com base nos dados do objeto ICMSGeral e da CRT informada no parâmetro.
/// Esse método pode devolver, por exemplo, um objeto ICMS00, ICMS10, ICMSSN101, etc.
/// </summary>
/// <param name="crt"></param>
/// <returns></returns>
public ICMSBasico ObterICMSBasico(CRT crt)
{
ICMSBasico icmsBasico = null;
switch (crt)
{
case CRT.SimplesNacionalMei:
case CRT.SimplesNacional:
switch (CST)
{
case Csticms.Cst61:
icmsBasico = new ICMS61();
break;
}
var ehCst61 = icmsBasico != null;
if (!ehCst61)
{
switch (CSOSN)
{
case Csosnicms.Csosn101:
icmsBasico = new ICMSSN101();
break;
case Csosnicms.Csosn102:
case Csosnicms.Csosn103:
case Csosnicms.Csosn300:
case Csosnicms.Csosn400:
icmsBasico = new ICMSSN102();
break;
case Csosnicms.Csosn201:
icmsBasico = new ICMSSN201();
break;
case Csosnicms.Csosn202:
case Csosnicms.Csosn203:
icmsBasico = new ICMSSN202();
break;
case Csosnicms.Csosn500:
icmsBasico = new ICMSSN500();
break;
case Csosnicms.Csosn900:
icmsBasico = new ICMSSN900();
break;
default:
throw new ArgumentOutOfRangeException();
}
}
break;
case CRT.SimplesNacionalExcessoSublimite:
case CRT.RegimeNormal:
switch (CST)
{
case Csticms.Cst00:
icmsBasico = new ICMS00();
break;
case Csticms.Cst02:
icmsBasico = new ICMS02();
break;
case Csticms.Cst10:
icmsBasico = new ICMS10();
break;
case Csticms.Cst15:
icmsBasico = new ICMS15();
break;
case Csticms.CstPart10:
case Csticms.CstPart90:
icmsBasico = new ICMSPart();
break;
case Csticms.Cst20:
icmsBasico = new ICMS20();
break;
case Csticms.Cst30:
icmsBasico = new ICMS30();
break;
case Csticms.Cst40:
case Csticms.Cst41:
case Csticms.Cst50:
icmsBasico = new ICMS40();
break;
case Csticms.CstRep41:
case Csticms.CstRep60:
icmsBasico = new ICMSST();
break;
case Csticms.Cst51:
icmsBasico = new ICMS51();
break;
case Csticms.Cst53:
icmsBasico = new ICMS53();
break;
case Csticms.Cst60:
icmsBasico = new ICMS60();
break;
case Csticms.Cst61:
icmsBasico = new ICMS61();
break;
case Csticms.Cst70:
icmsBasico = new ICMS70();
break;
case Csticms.Cst90:
icmsBasico = new ICMS90();
break;
default:
throw new ArgumentOutOfRangeException();
}
break;
default:
throw new ArgumentOutOfRangeException("crt", crt, null);
}
icmsBasico.CopiarPropriedades(this);
return icmsBasico;
}
/// <summary>
/// Origem da Mercadoria
/// </summary>
public OrigemMercadoria orig { get; set; }
/// <summary>
/// Situação Tributária
/// </summary>
public Csticms CST { get; set; }
/// <summary>
/// Modalidade de determinação da BC do ICMS
/// </summary>
public DeterminacaoBaseIcms modBC { get; set; }
/// <summary>
/// Valor da BC do ICMS
/// </summary>
public decimal vBC { get; set; }
/// <summary>
/// Alíquota do imposto
/// </summary>
public decimal pICMS { get; set; }
/// <summary>
/// Valor do ICMS
/// </summary>
public decimal vICMS { get; set; }
/// <summary>
/// Modalidade de determinação da BC do ICMS ST
/// </summary>
public DeterminacaoBaseIcmsSt modBCST { get; set; }
/// <summary>
/// Percentual da margem de valor Adicionado do ICMS ST
/// </summary>
public decimal? pMVAST { get; set; }
/// <summary>
/// Percentual da Redução de BC do ICMS ST
/// </summary>
public decimal? pRedBCST { get; set; }
/// <summary>
/// Valor da BC do ICMS ST
/// </summary>
public decimal vBCST { get; set; }
/// <summary>
/// Alíquota do imposto do ICMS ST
/// </summary>
public decimal pICMSST { get; set; }
/// <summary>
/// Valor do ICMS ST
/// </summary>
public decimal vICMSST { get; set; }
/// <summary>
/// Percentual de redução da BC
/// </summary>
public decimal pRedBC { get; set; }
/// <summary>
/// Valor do ICMS desonerado
/// </summary>
public decimal? vICMSDeson { get; set; }
/// <summary>
/// N28b - Indica se o valor do ICMS desonerado (vICMSDeson) deduz
/// do valor do item (vProd). (NT 2023.004)
/// </summary>
public DeduzDesoneracaoNoProduto? indDeduzDeson { get; set; }
// <summary>
/// N33a - Valor do ICMS- ST desonerado
/// Versão 4.00
/// </summary>
public decimal? vICMSSTDeson { get; set; }
/// <summary>
/// N33b - Motivo da desoneração do ICMS- ST
/// Versão 4.00
/// </summary>
public MotivoDesoneracaoIcmsSt? motDesICMSST { get; set; }
/// <summary>
/// Motivo da desoneração do ICMS
/// </summary>
public MotivoDesoneracaoIcms? motDesICMS { get; set; }
/// <summary>
/// Valor do ICMS da Operação
/// </summary>
public decimal? vICMSOp { get; set; }
/// <summary>
/// Percentual do diferimento
/// </summary>
public decimal? pDif { get; set; }
/// <summary>
/// Valor do ICMS diferido
/// </summary>
public decimal? vICMSDif { get; set; }
/// <summary>
/// Valor da BC do ICMS ST retido
/// </summary>
public decimal? vBCSTRet { get; set; }
/// <summary>
/// Valor do ICMS ST retido
/// </summary>
public decimal? vICMSSTRet { get; set; }
/// <summary>
/// Percentual da BC operação própria
/// </summary>
public decimal pBCOp { get; set; }
/// <summary>
/// UF para qual é devido o ICMS ST
/// </summary>
public string UFST { get; set; }
/// <summary>
/// Valor da BC do ICMS ST da UF destino
/// </summary>
public decimal vBCSTDest { get; set; }
/// <summary>
/// Valor do ICMS ST da UF destino
/// </summary>
public decimal vICMSSTDest { get; set; }
#region Campos exclusivos simples nacional
/// <summary>
/// Código de Situação da Operação – Simples Nacional
/// </summary>
public Csosnicms CSOSN { get; set; }
/// <summary>
/// pCredSN - Alíquota aplicável de cálculo do crédito (Simples Nacional).
/// </summary>
public decimal pCredSN { get; set; }
/// <summary>
/// Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (Simples Nacional)
/// </summary>
public decimal vCredICMSSN { get; set; }
#endregion
#region Fundo de combate a pobreza
/// <summary>
/// Valor da Base de Cálculo do Fundo de Combate à Pobreza (FCP)
/// </summary>
public decimal? vBCFCP { get; set; }
/// <summary>
/// Percentual do Fundo de Combate à Pobreza (FCP)
/// </summary>
public decimal? pFCP { get; set; }
/// <summary>
/// Valor do Fundo de Combate à Pobreza (FCP)
/// </summary>
public decimal? vFCP { get; set; }
/// <summary>
/// Valor da Base de Cálculo do FCP retido por Substituição Tributária
/// </summary>
public decimal? vBCFCPST { get; set; }
/// <summary>
/// Percentual do Fundo de Combate à Pobreza (FCP) retido por Substituição Tributária
/// </summary>
public decimal? pFCPST { get; set; }
/// <summary>
/// Valor do Fundo de Combate à Pobreza (FCP) retido por Substituição Tributária
/// </summary>
public decimal? vFCPST { get; set; }
#endregion
/// <summary>
/// Alíquota suportada pelo Consumidor Final
/// </summary>
public decimal? pST { get; set; }
/// <summary>
/// Valor da Base de Cálculo do FCP retido anteriormente por ST
/// </summary>
public decimal? vBCFCPSTRet { get; set; }
/// <summary>
/// Percentual do FCP retido anteriormente por Substituição Tributária
/// </summary>
public decimal? pFCPSTRet { get; set; }
/// <summary>
/// Valor do FCP retido por Substituição Tributária
/// </summary>
public decimal? vFCPSTRet { get; set; }
/// <summary>
/// Valor do ICMS próprio do Substituto (tag: vICMSSubstituto)
/// </summary>
public decimal? vICMSSubstituto { get; set; }
#region Icms Efetivo
/// <summary>
/// Percentual de redução da base de cálculo efetiva
/// </summary>
public decimal? pRedBCEfet { get; set; }
/// <summary>
/// Valor da base de cálculo efetiva
/// </summary>
public decimal? vBCEfet { get; set; }
/// <summary>
/// Alíquota do ICMS efetiva
/// </summary>
public decimal? pICMSEfet { get; set; }
/// <summary>
/// Valor do ICMS efetivo
/// </summary>
public decimal? vICMSEfet { get; set; }
#endregion
/// <summary>
/// Quantidade tributada retida anteriormente
/// </summary>
public decimal? qBCMonoRet { get; set; }
/// <summary>
/// Alíquota ad rem do imposto retido anteriormente
/// </summary>
public decimal? adRemICMSRet { get; set; }
/// <summary>
/// Valor do ICMS retido anteriormente
/// </summary>
public decimal? vICMSMonoRet { get; set; }
}
}