Corrige campos de quotas em caso de imposto a pagar.
[cascardo/declara.git] / lib / calcula.c
index 7b22639..e571f7b 100644 (file)
 #include "rendimento.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)
 {
-       return totais_get(dec, "INSS") + totais_get(dec, "PAGAMENTOS");
+       int i;
+       return totais_get(dec, "DEPENDENTES") +
+              totais_get(dec, "INSS") +
+              totais_get(dec, "PAGAMENTOS") -
+              totais_get(dec, "REEMBOLSOS");
 }
 
 static void total_pago(struct declaracao *dec)
@@ -82,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);
 }
 
@@ -97,6 +110,7 @@ static long long imposto_completa(struct declaracao *dec)
        tr = totais_get(dec, "RENDPJ");
        td = total_deducao(dec);
        tr -= td;
+       totais_add(dec, "BASECOMPLETA", tr);
        return imposto(tt, tr);
 }
 
@@ -111,10 +125,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;
        }