From 61ab51aae94f2aa504a564ca704f41d3b70b9805 Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Wed, 8 Jul 2015 09:26:38 +0000 Subject: [PATCH] Calcula imposto retido e a pagar. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 | 6 +++++- calcula.c | 15 +++++++++------ declaracao.h | 2 ++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/base.c b/base.c index de07827..52d8c31 100644 --- 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; } diff --git a/calcula.c b/calcula.c index bc185e5..a6bac0e 100644 --- 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; } diff --git a/declaracao.h b/declaracao.h index b424763..834e4cc 100644 --- a/declaracao.h +++ b/declaracao.h @@ -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; -- 2.20.1