Soma total de decuções para declaração completa.
[cascardo/declara.git] / lib / calcula.c
index 42b33b6..db260b8 100644 (file)
 #include "declaracao.h"
 #include "cmd.h"
 #include "rendimento.h"
-#include "dependente.h"
 #include "totais.h"
 
 static const long long dependente2015 = 215652;
 
+long long deducao_dependente(struct declaracao *dec)
+{
+       if (dec->ano == 2015)
+               return dependente2015;
+       return 0;
+}
+
 /* Alguns totais precisam ser limitados. Portanto, um total de decuções
  * precisa ser ajustado para tais limites. Esta função considerará tais
  * limites no futuro. */
 static long long total_deducao(struct declaracao *dec)
 {
        int i;
-       long long dependentes = 0;
-       struct dependente *dependente;
-       for (i = 0; (dependente = list_get(dec->dependentes, i)); i++) {
-               dependentes += dependente2015;
-       }
-       return dependentes +
+       return totais_get(dec, "DEPENDENTES") +
               totais_get(dec, "INSS") +
-              totais_get(dec, "PAGAMENTOS");
+              totais_get(dec, "PAGAMENTOS") -
+              totais_get(dec, "REEMBOLSOS");
 }
 
 static void total_pago(struct declaracao *dec)
@@ -93,7 +95,7 @@ static long long imposto_simples(struct declaracao *dec)
                td = simples2015;
        totais_add(dec, "DESCONTO", td);
        tr -= td;
-       totais_add(dec, "BASE", tr);
+       totais_add(dec, "BASESIMPLES", tr);
        return imposto(tt, tr);
 }
 
@@ -107,7 +109,9 @@ static long long imposto_completa(struct declaracao *dec)
        tt = table2015;
        tr = totais_get(dec, "RENDPJ");
        td = total_deducao(dec);
+       totais_add(dec, "DEDUCOES", td);
        tr -= td;
+       totais_add(dec, "BASECOMPLETA", tr);
        return imposto(tt, tr);
 }
 
@@ -122,10 +126,13 @@ int calcula(struct declaracao *dec)
        i_simples = imposto_simples(dec);
        i_completa = imposto_completa(dec);
        total_pago(dec);
-       if (i_simples > i_completa) {
+       if (dec->tipo != FORCA_SIMPLES &&
+           (i_simples > i_completa || dec->tipo == FORCA_COMPLETA)) {
+               totais_add(dec, "BASE", totais_get(dec, "BASECOMPLETA"));
                dec->tipo = COMPLETA;
                dec->devido = i_completa;
        } else {
+               totais_add(dec, "BASE", totais_get(dec, "BASESIMPLES"));
                dec->tipo = SIMPLES;
                dec->devido = i_simples;
        }