|
|
| import pytest |
| from decimal import Decimal |
|
|
| from src.calculators import arred |
| from src.calculators.icms import ( |
| ParametrosICMS, |
| calcular_icms, |
| calcular_icms_apuracao, |
| calcular_icms_credito_entrada, |
| ) |
| from src.calculators.ipi import ParametrosIPI, calcular_ipi, obter_aliquota_ipi_ncm |
| from src.calculators.pis_cofins import ( |
| CreditoPisCofins, |
| ReceitaBruta, |
| calcular_pis_cofins, |
| calcular_pis_cofins_retencao, |
| ) |
| from src.calculators.irpj_csll import ( |
| calcular_csll_lucro_presumido, |
| calcular_csll_lucro_real, |
| calcular_irpj_lucro_presumido, |
| calcular_irpj_lucro_real, |
| calcular_irpj_estimativa_mensal, |
| ) |
| from src.calculators.iss import ParametrosISS, calcular_iss, requer_retencao_iss |
| from src.calculators.simples_nacional import ( |
| calcular_das, |
| calcular_fator_r, |
| calcular_pgdas, |
| determinar_anexo_servicos, |
| ) |
| from src.fiscal.entities import RegimeTributario |
|
|
|
|
| |
| |
| |
|
|
| class TestICMS: |
|
|
| def test_icms_basico(self): |
| r = calcular_icms(ParametrosICMS( |
| valor_mercadoria=Decimal("10000"), |
| aliquota=Decimal("18"), |
| )) |
| assert r.base_calculo == Decimal("10000.00") |
| assert r.valor_icms == Decimal("1800.00") |
| assert r.valor_total_icms == Decimal("1800.00") |
|
|
| def test_icms_com_frete(self): |
| r = calcular_icms(ParametrosICMS( |
| valor_mercadoria=Decimal("10000"), |
| aliquota=Decimal("18"), |
| frete=Decimal("500"), |
| )) |
| assert r.base_calculo == Decimal("10500.00") |
| assert r.valor_icms == Decimal("1890.00") |
|
|
| def test_icms_cst_40_isento(self): |
| r = calcular_icms(ParametrosICMS( |
| valor_mercadoria=Decimal("10000"), |
| aliquota=Decimal("18"), |
| cst="040", |
| )) |
| assert r.valor_icms == Decimal("0") |
| assert r.valor_total_icms == Decimal("0") |
|
|
| def test_icms_reducao_base(self): |
| r = calcular_icms(ParametrosICMS( |
| valor_mercadoria=Decimal("10000"), |
| aliquota=Decimal("18"), |
| cst="020", |
| reducao_base=Decimal("30"), |
| )) |
| assert r.base_calculo == Decimal("7000.00") |
| assert r.valor_icms == Decimal("1260.00") |
|
|
| def test_icms_st_com_mva(self): |
| r = calcular_icms(ParametrosICMS( |
| valor_mercadoria=Decimal("1000"), |
| aliquota=Decimal("12"), |
| cst="010", |
| uf_origem="SP", |
| uf_destino="MG", |
| mva=Decimal("40"), |
| aliq_st=Decimal("18"), |
| )) |
| assert r.valor_icms > 0 |
| assert r.valor_st > 0 |
| assert r.base_st == Decimal("1400.00") |
|
|
| def test_icms_apuracao(self): |
| debitos = [Decimal("1000"), Decimal("2000")] |
| creditos = [Decimal("500"), Decimal("800")] |
| r = calcular_icms_apuracao(debitos, creditos) |
| assert r.valor_a_recolher == Decimal("1700.00") |
| assert r.detalhes["saldo_credor"] == Decimal("0") |
|
|
| def test_icms_apuracao_saldo_credor(self): |
| debitos = [Decimal("500")] |
| creditos = [Decimal("1000")] |
| r = calcular_icms_apuracao(debitos, creditos) |
| assert r.valor_a_recolher == Decimal("0") |
| assert r.detalhes["saldo_credor"] == Decimal("500.00") |
|
|
| def test_credito_icms_entrada(self): |
| credito = calcular_icms_credito_entrada( |
| valor_nf=Decimal("5000"), |
| aliquota=Decimal("12"), |
| ) |
| assert credito == Decimal("600.00") |
|
|
| def test_icms_difal(self): |
| r = calcular_icms(ParametrosICMS( |
| valor_mercadoria=Decimal("10000"), |
| aliquota=Decimal("12"), |
| uf_origem="SP", |
| uf_destino="BA", |
| calcular_difal=True, |
| consumidor_final=True, |
| )) |
| assert r.valor_difal_destino > 0 or r.valor_difal_origem > 0 |
|
|
|
|
| |
| |
| |
|
|
| class TestIPI: |
|
|
| def test_ipi_basico(self): |
| r = calcular_ipi(ParametrosIPI( |
| valor_produtos=Decimal("10000"), |
| aliquota=Decimal("5"), |
| )) |
| assert r.base_calculo == Decimal("10000.00") |
| assert r.valor_tributo == Decimal("500.00") |
|
|
| def test_ipi_cst_52_isento(self): |
| r = calcular_ipi(ParametrosIPI( |
| valor_produtos=Decimal("5000"), |
| aliquota=Decimal("10"), |
| cst="52", |
| )) |
| assert r.valor_tributo == Decimal("0") |
|
|
| def test_ipi_cst_50_tributado(self): |
| r = calcular_ipi(ParametrosIPI( |
| valor_produtos=Decimal("2000"), |
| aliquota=Decimal("15"), |
| cst="50", |
| )) |
| assert r.valor_tributo == Decimal("300.00") |
|
|
| def test_aliquota_ipi_ncm_farmaceutico(self): |
| aliq = obter_aliquota_ipi_ncm("30050000") |
| assert aliq == Decimal("0") |
|
|
| def test_aliquota_ipi_ncm_automovel(self): |
| aliq = obter_aliquota_ipi_ncm("87032310") |
| assert aliq == Decimal("25") |
|
|
| def test_ipi_com_frete(self): |
| r = calcular_ipi(ParametrosIPI( |
| valor_produtos=Decimal("1000"), |
| aliquota=Decimal("10"), |
| frete=Decimal("100"), |
| )) |
| assert r.base_calculo == Decimal("1100.00") |
| assert r.valor_tributo == Decimal("110.00") |
|
|
|
|
| |
| |
| |
|
|
| class TestPisCofins: |
|
|
| def test_lucro_presumido_cumulativo(self): |
| receitas = [ReceitaBruta("Vendas", Decimal("100000"))] |
| r = calcular_pis_cofins(receitas, RegimeTributario.LUCRO_PRESUMIDO) |
| assert r.regime == "Cumulativo" |
| assert r.aliq_pis == Decimal("0.65") |
| assert r.aliq_cofins == Decimal("3.00") |
| assert r.pis_a_recolher == Decimal("650.00") |
| assert r.cofins_a_recolher == Decimal("3000.00") |
|
|
| def test_lucro_real_nao_cumulativo(self): |
| receitas = [ReceitaBruta("Serviços", Decimal("50000"))] |
| r = calcular_pis_cofins(receitas, RegimeTributario.LUCRO_REAL) |
| assert r.regime == "Não-Cumulativo" |
| assert r.aliq_pis == Decimal("1.65") |
| assert r.aliq_cofins == Decimal("7.60") |
| assert r.pis_a_recolher == Decimal("825.00") |
| assert r.cofins_a_recolher == Decimal("3800.00") |
|
|
| def test_creditos_reduzem_valor_a_recolher(self): |
| receitas = [ReceitaBruta("Vendas", Decimal("100000"))] |
| creditos = [CreditoPisCofins( |
| descricao="Compras para revenda", |
| base_calculo=Decimal("60000"), |
| aliquota_pis=Decimal("1.65"), |
| aliquota_cofins=Decimal("7.60"), |
| )] |
| r = calcular_pis_cofins(receitas, RegimeTributario.LUCRO_REAL, creditos) |
| assert r.creditos_pis == Decimal("990.00") |
| assert r.creditos_cofins == Decimal("4560.00") |
| assert r.pis_a_recolher == Decimal("660.00") |
| |
| assert r.cofins_a_recolher == Decimal("3040.00") |
|
|
| def test_cst_07_nao_tributado(self): |
| receitas = [ |
| ReceitaBruta("Exportação", Decimal("50000"), cst_pis="07", cst_cofins="07") |
| ] |
| r = calcular_pis_cofins(receitas, RegimeTributario.LUCRO_REAL) |
| assert r.pis_a_recolher == Decimal("0.00") |
| assert r.cofins_a_recolher == Decimal("0.00") |
|
|
| def test_retencao_servicos(self): |
| r = calcular_pis_cofins_retencao(valor_servico=Decimal("10000")) |
| assert r["valor_pis"] == Decimal("65.00") |
| assert r["valor_cofins"] == Decimal("300.00") |
| assert r["total_retido"] > Decimal("10") |
|
|
| def test_retencao_dispensada_valor_baixo(self): |
| r = calcular_pis_cofins_retencao(valor_servico=Decimal("100")) |
| assert r["total_retido"] == Decimal("0") |
| assert "dispensada" in r["observacao"] |
|
|
|
|
| |
| |
| |
|
|
| class TestIRPJCSLL: |
|
|
| def test_irpj_lucro_presumido_comercio(self): |
| r = calcular_irpj_lucro_presumido( |
| receita_bruta=Decimal("100000"), |
| atividade="venda_mercadorias", |
| ) |
| |
| assert r.base_calculo == Decimal("8000.00") |
| assert r.valor_base == Decimal("1200.00") |
| assert r.irpj_a_recolher == Decimal("1200.00") |
| assert r.valor_adicional == Decimal("0") |
|
|
| def test_irpj_lucro_presumido_servicos(self): |
| r = calcular_irpj_lucro_presumido( |
| receita_bruta=Decimal("100000"), |
| atividade="servicos_em_geral", |
| ) |
| |
| assert r.base_calculo == Decimal("32000.00") |
| assert r.valor_base == Decimal("4800.00") |
|
|
| def test_irpj_adicional_10pct(self): |
| r = calcular_irpj_lucro_presumido( |
| receita_bruta=Decimal("1000000"), |
| atividade="venda_mercadorias", |
| ) |
| |
| assert r.base_calculo == Decimal("80000.00") |
| assert r.base_adicional == Decimal("20000.00") |
| assert r.valor_adicional == Decimal("2000.00") |
|
|
| def test_irpj_lucro_real_compensacao(self): |
| r = calcular_irpj_lucro_real( |
| lucro_antes_ir=Decimal("100000"), |
| compensacoes_prejuizo=Decimal("50000"), |
| ) |
| |
| assert r.base_calculo == Decimal("70000.00") |
|
|
| def test_csll_lucro_presumido_comercio(self): |
| r = calcular_csll_lucro_presumido( |
| receita_bruta=Decimal("100000"), |
| atividade="comercio_industria", |
| ) |
| |
| assert r.base_calculo == Decimal("12000.00") |
| assert r.valor_csll == Decimal("1080.00") |
|
|
| def test_csll_lucro_real(self): |
| r = calcular_csll_lucro_real(lucro_antes_csll=Decimal("50000")) |
| assert r.base_calculo == Decimal("50000.00") |
| assert r.valor_csll == Decimal("4500.00") |
|
|
| def test_estimativa_mensal(self): |
| r = calcular_irpj_estimativa_mensal( |
| receita_bruta_mes=Decimal("500000"), |
| atividade="venda_mercadorias", |
| ) |
| assert r["base_estimada"] == Decimal("40000.00") |
| assert r["irpj_aliquota_base"] == Decimal("6000.00") |
| assert r["irpj_adicional"] == Decimal("2000.00") |
|
|
|
|
| |
| |
| |
|
|
| class TestISS: |
|
|
| def test_iss_basico(self): |
| r = calcular_iss(ParametrosISS( |
| valor_servico=Decimal("10000"), |
| codigo_servico="17", |
| aliquota_municipal=Decimal("2"), |
| )) |
| assert r.base_calculo == Decimal("10000") |
| assert r.aliquota == Decimal("2") |
| assert r.valor_tributo == Decimal("200.00") |
|
|
| def test_iss_aliquota_minima(self): |
| r = calcular_iss(ParametrosISS( |
| valor_servico=Decimal("5000"), |
| codigo_servico="17", |
| aliquota_municipal=Decimal("1"), |
| )) |
| assert r.aliquota == Decimal("2") |
|
|
| def test_iss_aliquota_maxima(self): |
| r = calcular_iss(ParametrosISS( |
| valor_servico=Decimal("5000"), |
| codigo_servico="22", |
| aliquota_municipal=Decimal("6"), |
| )) |
| assert r.aliquota == Decimal("5") |
|
|
| def test_requer_retencao_ti(self): |
| assert requer_retencao_iss("01") is True |
|
|
| def test_requer_retencao_alimentacao(self): |
| assert requer_retencao_iss("99") is False |
|
|
|
|
| |
| |
| |
|
|
| class TestSimplesNacional: |
|
|
| def test_das_anexo_i_faixa_1(self): |
| r = calcular_das( |
| receita_bruta_mes=Decimal("15000"), |
| receita_bruta_acumulada_12m=Decimal("100000"), |
| anexo="I", |
| ) |
| assert r.faixa == 1 |
| assert r.aliq_nominal == Decimal("4.00") |
| assert r.aliq_efetiva == Decimal("4.00") |
| assert r.valor_das == Decimal("600.00") |
|
|
| def test_das_anexo_i_faixa_2(self): |
| r = calcular_das( |
| receita_bruta_mes=Decimal("30000"), |
| receita_bruta_acumulada_12m=Decimal("250000"), |
| anexo="I", |
| ) |
| assert r.faixa == 2 |
| assert r.aliq_efetiva < r.aliq_nominal |
|
|
| def test_das_anexo_iii_servicos(self): |
| r = calcular_das( |
| receita_bruta_mes=Decimal("10000"), |
| receita_bruta_acumulada_12m=Decimal("150000"), |
| anexo="III", |
| ) |
| assert r.faixa == 1 |
| assert r.aliq_nominal == Decimal("6.00") |
|
|
| def test_fator_r(self): |
| fator = calcular_fator_r( |
| folha_12m=Decimal("84000"), |
| rec_12m=Decimal("300000"), |
| ) |
| assert fator == Decimal("28.0000") |
|
|
| def test_determinar_anexo_advocacia_fator_r_baixo(self): |
| anexo = determinar_anexo_servicos(Decimal("20"), "advocacia") |
| assert anexo == "V" |
|
|
| def test_determinar_anexo_advocacia_fator_r_alto(self): |
| anexo = determinar_anexo_servicos(Decimal("30"), "advocacia") |
| assert anexo == "III" |
|
|
| def test_pgdas_multiplas_atividades(self): |
| r = calcular_pgdas( |
| cnpj="11222333000181", |
| periodo="2024-01", |
| receitas_por_atividade=[ |
| {"valor": "20000", "anexo": "I"}, |
| {"valor": "10000", "anexo": "III"}, |
| ], |
| receita_acumulada_12m=Decimal("200000"), |
| ) |
| assert r.das_total > 0 |
| assert len(r.das_por_estabelecimento) == 2 |
| assert r.data_vencimento is not None |
|
|
| def test_das_dentro_limite(self): |
| r = calcular_das( |
| receita_bruta_mes=Decimal("400000"), |
| receita_bruta_acumulada_12m=Decimal("4800000"), |
| anexo="I", |
| ) |
| assert r.dentro_limite is True |
|
|
| def test_das_acima_limite(self): |
| r = calcular_das( |
| receita_bruta_mes=Decimal("500000"), |
| receita_bruta_acumulada_12m=Decimal("5000000"), |
| anexo="I", |
| ) |
| assert r.dentro_limite is False |
|
|