@@ -269,5 +269,80 @@ public void CalculoIbsMunicipalETotalComAmbosComponentes()
269269 var ibsTotal = resultadoIbsUF . Valor + resultadoIbsMunicipal . Valor ;
270270 Assert . Equal ( 109.13m , ibsTotal ) ;
271271 }
272+
273+ [ Fact ]
274+ public void CalculoIbsMunicipalComReducaoAliquota ( )
275+ {
276+ var produto = new Produto
277+ {
278+ PercentualIbsMunicipal = 0.90m ,
279+ PercentualReducaoIbsMunicipal = 50.00m , // 50% de redução
280+ ValorProduto = 1000.00m ,
281+ QuantidadeProduto = 1.000m ,
282+ PercentualPis = 0.00m ,
283+ PercentualCofins = 0.00m ,
284+ PercentualIcms = 0.00m
285+ } ;
286+
287+ var facade = new FacadeCalculadoraTributacao ( produto ) ;
288+
289+ var resultadoCalculoIbsMunicipal = facade . CalculaIbsMunicipal ( ) ;
290+
291+ // Base de cálculo: 1000 (sem deduções)
292+ // Alíquota com redução: 0.90 × (1 - 0.50) = 0.45%
293+ // IBS Municipal = 1000 × 0.45% = 4.50
294+ Assert . Equal ( 1000.00m , resultadoCalculoIbsMunicipal . BaseCalculo ) ;
295+ Assert . Equal ( 4.50m , resultadoCalculoIbsMunicipal . Valor ) ;
296+ }
297+
298+ [ Fact ]
299+ public void CalculoIbsMunicipalComReducaoAliquota100Porcento ( )
300+ {
301+ var produto = new Produto
302+ {
303+ PercentualIbsMunicipal = 0.90m ,
304+ PercentualReducaoIbsMunicipal = 100.00m , // 100% de redução = alíquota zero
305+ ValorProduto = 1000.00m ,
306+ QuantidadeProduto = 1.000m ,
307+ PercentualPis = 0.00m ,
308+ PercentualCofins = 0.00m ,
309+ PercentualIcms = 0.00m
310+ } ;
311+
312+ var facade = new FacadeCalculadoraTributacao ( produto ) ;
313+
314+ var resultadoCalculoIbsMunicipal = facade . CalculaIbsMunicipal ( ) ;
315+
316+ // Base de cálculo: 1000 (sem deduções)
317+ // Alíquota com redução: 0.90 × (1 - 1.00) = 0%
318+ // IBS Municipal = 1000 × 0% = 0.00
319+ Assert . Equal ( 1000.00m , resultadoCalculoIbsMunicipal . BaseCalculo ) ;
320+ Assert . Equal ( 0.00m , resultadoCalculoIbsMunicipal . Valor ) ;
321+ }
322+
323+ [ Fact ]
324+ public void CalculoIbsMunicipalSemReducaoAliquota ( )
325+ {
326+ var produto = new Produto
327+ {
328+ PercentualIbsMunicipal = 0.90m ,
329+ PercentualReducaoIbsMunicipal = 0.00m , // Sem redução
330+ ValorProduto = 1000.00m ,
331+ QuantidadeProduto = 1.000m ,
332+ PercentualPis = 0.00m ,
333+ PercentualCofins = 0.00m ,
334+ PercentualIcms = 0.00m
335+ } ;
336+
337+ var facade = new FacadeCalculadoraTributacao ( produto ) ;
338+
339+ var resultadoCalculoIbsMunicipal = facade . CalculaIbsMunicipal ( ) ;
340+
341+ // Base de cálculo: 1000 (sem deduções)
342+ // Alíquota sem redução: 0.90%
343+ // IBS Municipal = 1000 × 0.90% = 9.00
344+ Assert . Equal ( 1000.00m , resultadoCalculoIbsMunicipal . BaseCalculo ) ;
345+ Assert . Equal ( 9.00m , resultadoCalculoIbsMunicipal . Valor ) ;
346+ }
272347 }
273348}
0 commit comments