From 25f8b7cc2a2898456eed4d45e7125272b376a8be Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Mon, 9 Apr 2018 23:35:40 -0300 Subject: [PATCH] Rendimentos isentos e exclusivos em 2018. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit As linhas mudaram em 2018. A linha simples com totais utilizada em anos anteriores foi alterada para múltiplas linhas, com o total por sub-código de rendimento. Tais sub-códigos também foram introduzidos recentemente. As linhas com detalhamento também mudaram para linhas que possuem o mesmo sub-código. --- lib/gera.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 102 insertions(+), 10 deletions(-) diff --git a/lib/gera.c b/lib/gera.c index 8a2f5d5..583dda5 100644 --- a/lib/gera.c +++ b/lib/gera.c @@ -554,6 +554,19 @@ static void gera_isentos(struct declaracao *dec, FILE *f) fprintf(f, "%013lld", 0); /* TODO: retistuição imposto anos anteriores */ } +static void gera_isentos2(struct declaracao *dec, FILE *f, int codigo, char *nome) +{ + fprintf(f, "23"); + fprintf(f, "%-11.11s", dec->cpf); + fprintf(f, "%04d", codigo); + fprintf(f, "%013lld", totais_get(dec, nome)); /* TODO: retistuição imposto anos anteriores */ +} + +static void gera_23_poupanca(struct declaracao *dec, FILE *f) +{ + gera_isentos2(dec, f, 12, "POUPANCA"); +} + static void gera_exclusivos(struct declaracao *dec, FILE *f) { fprintf(f, "24"); @@ -575,6 +588,29 @@ static void gera_exclusivos(struct declaracao *dec, FILE *f) fprintf(f, "%013lld", totais_get(dec, "PLR")); } +static void gera_exclusivos2(struct declaracao *dec, FILE *f, int codigo, char *nome) +{ + fprintf(f, "24"); + fprintf(f, "%-11.11s", dec->cpf); + fprintf(f, "%04d", codigo); + fprintf(f, "%013lld", totais_get(dec, nome)); /* TODO: retistuição imposto anos anteriores */ +} + +static void gera_24_decimoterceiro(struct declaracao *dec, FILE *f) +{ + gera_exclusivos2(dec, f, 1, "DECIMOTERCEIRO"); +} + +static void gera_24_aplicacoes(struct declaracao *dec, FILE *f) +{ + gera_exclusivos2(dec, f, 6, "APLICACOES"); +} + +static void gera_24_plr(struct declaracao *dec, FILE *f) +{ + gera_exclusivos2(dec, f, 11, "PLR"); +} + static void gera_conjuge(struct declaracao *dec, FILE *f) { fprintf(f, "29"); @@ -747,6 +783,28 @@ static void gera_isento(struct declaracao *dec, FILE *f, int codigo) } } +static void gera_isento2(struct declaracao *dec, FILE *f, int codigo, + int subcodigo, int codigoreal) +{ + struct isento *i; + i = isento_get(dec, codigo, dec->linhas[codigo]); + fprintf(f, "%02d", codigoreal); + fprintf(f, "%-11.11s", dec->cpf); /* Titular */ + /* Titular (T), Dependente (D), Alimentando (A), FIXME Alimentando */ + fprintf(f, "%c", i->dependente ? 'D' : 'T'); + if (i->dependente) { + struct dependente *d; + d = list_get(dec->dependentes, i->dependente - 1); + fprintf(f, "%-11.11s", d ? d->cpf : ""); + } else { + fprintf(f, "%-11.11s", dec->cpf); + } + fprintf(f, "%04d", subcodigo); + fprintf(f, "%-14.14s", i->cnpj); + fprintf(f, "%-60.60s", i->nome); + fprintf(f, "%013lld", i->valor); +} + static void gera_doacao(struct declaracao *dec, FILE *f) { gera_isento(dec, f, 82); @@ -762,6 +820,12 @@ static void gera_plr(struct declaracao *dec, FILE *f) gera_isento(dec, f, 96); } +static void gera_plr2(struct declaracao *dec, FILE *f) +{ + gera_isento2(dec, f, 96, 11, 88); + dec->linhas[96]++; +} + static void gera_outrosisentos(struct declaracao *dec, FILE *f) { struct isento *i; @@ -777,11 +841,23 @@ static void gera_poupanca(struct declaracao *dec, FILE *f) gera_isento(dec, f, 98); } +static void gera_poupanca2(struct declaracao *dec, FILE *f) +{ + gera_isento2(dec, f, 98, 12, 84); + dec->linhas[98]++; +} + static void gera_aplicacoes(struct declaracao *dec, FILE *f) { gera_isento(dec, f, 99); } +static void gera_aplicacoes2(struct declaracao *dec, FILE *f) +{ + gera_isento2(dec, f, 99, 6, 88); + dec->linhas[99]++; +} + static void gera_dependente(struct declaracao *dec, FILE *f) { struct dependente *d; @@ -979,10 +1055,17 @@ static int gera(struct declaracao *dec, char *filename) W(gera_carne); } - if (totais_get(dec, "ISENTOS")) - W(gera_isentos); - if (totais_get(dec, "EXCLUSIVOS")) - W(gera_exclusivos); + if (dec->ano <= 2017) { + if (totais_get(dec, "ISENTOS")) + W(gera_isentos); + if (totais_get(dec, "EXCLUSIVOS")) + W(gera_exclusivos); + } else { + W(gera_23_poupanca); + W(gera_24_decimoterceiro); + W(gera_24_aplicacoes); + W(gera_24_plr); + } for (i = 0; (dependente = list_get(dec->dependentes, i)); i++) { W(gera_dependente); @@ -1006,12 +1089,21 @@ static int gera(struct declaracao *dec, char *filename) break; \ W(fn); \ } - IW(gera_doacao, 82); - IW(gera_indenizacoes, 93); - IW(gera_plr, 96); - IW(gera_outrosisentos, 97); - IW(gera_poupanca, 98); - IW(gera_aplicacoes, 99); + if (dec->ano <= 2017) { + IW(gera_doacao, 82); + IW(gera_indenizacoes, 93); + IW(gera_plr, 96); + IW(gera_outrosisentos, 97); + IW(gera_poupanca, 98); + IW(gera_aplicacoes, 99); + } else { + IW(gera_poupanca2, 98); + dec->linhas[98] = 0; + IW(gera_aplicacoes2, 99); + dec->linhas[99] = 0; + IW(gera_plr2, 96); + dec->linhas[96] = 0; + } W(gera_trailler); W(gera_reciboheader); -- 2.20.1