Calcula imposto retido e a pagar.
authorThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Wed, 8 Jul 2015 09:26:38 +0000 (09:26 +0000)
committerThadeu Lima de Souza Cascardo <cascardo@cascardo.eti.br>
Wed, 8 Jul 2015 09:26:38 +0000 (09:26 +0000)
Imposto retido é aquele retido na fonte. Imposto pago é o retido e o
pago por outros meios, como carnê-leão. Ainda a confirmar através de um
teste com o IRPF privativo. No momento, todos os impostos suportados são
aqueles declarados em rendimento de PJ e, portanto, são retidos na
fonte.

Se o imposto devido é maior que o pago, calcula-se o imposto a pagar,
caso contrário, o imposto a restituir.

base.c
calcula.c
declaracao.h

diff --git a/base.c b/base.c
index de07827..52d8c31 100644 (file)
--- a/base.c
+++ b/base.c
@@ -35,8 +35,12 @@ static int run_resumo(struct declaracao *dec, char **args, int argc)
        if (dec->retifica)
                printf("retificadora\n");
        printf("pago: %lld.%02d\n", dec->pago / 100, dec->pago % 100);
+       printf("retido: %lld.%02d\n", dec->retido / 100, dec->retido % 100);
        printf("devido: %lld.%02d\n", dec->devido / 100, dec->devido % 100);
-       printf("restituicao: %lld.%02d\n", dec->restituicao / 100, dec->restituicao % 100);
+       if (dec->restituicao > 0)
+               printf("restituicao: %lld.%02d\n", dec->restituicao / 100, dec->restituicao % 100);
+       if (dec->pagar > 0)
+               printf("a pagar: %lld.%02d\n", dec->pagar / 100, dec->pagar % 100);
        return 0;
 }
 
index bc185e5..a6bac0e 100644 (file)
--- a/calcula.c
+++ b/calcula.c
@@ -45,15 +45,15 @@ static long long total_deducao(struct declaracao *dec)
        return td;
 }
 
-static long long total_pago(struct declaracao *dec)
+static void total_pago(struct declaracao *dec)
 {
-       long long tt = 0;
        struct rendimento *rendimento;
        int i;
+       dec->pago = dec->retido = 0;
        for (i = 0; rendimento = list_get(dec->rendimento, i); i++) {
-               tt += rendimento->imposto;
+               dec->pago += rendimento->imposto;
+               dec->retido += rendimento->imposto;
        }
-       return tt;
 }
 
 struct taxtable {
@@ -119,7 +119,7 @@ int calcula(struct declaracao *dec)
        }
        i_simples = imposto_simples(dec);
        i_completa = imposto_completa(dec);
-       dec->pago = total_pago(dec);
+       total_pago(dec);
        if (i_simples > i_completa) {
                dec->tipo = COMPLETA;
                dec->devido = i_completa;
@@ -127,7 +127,10 @@ int calcula(struct declaracao *dec)
                dec->tipo = SIMPLES;
                dec->devido = i_simples;
        }
-       dec->restituicao = dec->pago - dec->devido;
+       if (dec->pago > dec->devido)
+               dec->restituicao = dec->pago - dec->devido;
+       else
+               dec->pagar = dec->devido - dec->pago;
        return 0;
 }
 
index b424763..834e4cc 100644 (file)
@@ -35,7 +35,9 @@ struct declaracao {
        struct contribuinte contribuinte;
        long long totalrendimento;
        long long pago;
+       long long retido;
        long long devido;
+       long long pagar;
        long long restituicao;
        int tipo;
        char *recibo;