From fc14d2cc2ffe888bcfebcd44d00ca9f0a25c9e6d Mon Sep 17 00:00:00 2001 From: Thadeu Lima de Souza Cascardo Date: Mon, 27 Feb 2017 11:06:19 -0300 Subject: [PATCH] =?utf8?q?Gera=20cabe=C3=A7alhos=20para=20vers=C3=A3o=2020?= =?utf8?q?17.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Os cabeçalhos de declarações simplificada e completa mantém os campos de 2016, mudam alguns valores de código e versão e adicionam celular e um campo de presença de cônjuge. A primeira versão do IRPF 2017 também substitui um campo em branco por um hash, que aparenta depender apenas do CPF. No entanto, parece ser um bug e uma nova versão é esperada. --- lib/gera.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/gera.c b/lib/gera.c index ae5c1a0..bfd1aa1 100644 --- a/lib/gera.c +++ b/lib/gera.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2015-2016 Thadeu Lima de Souza Cascardo + * Copyright (C) 2015-2017 Thadeu Lima de Souza Cascardo * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -44,6 +44,8 @@ static void gera_header(struct declaracao *dec, FILE *f) fprintf(f, "2500"); /* Código */ else if (dec->ano == 2016) fprintf(f, "2600"); /* Código */ + else if (dec->ano == 2017) + fprintf(f, "2700"); /* Código */ fprintf(f, "%s", dec->retifica ? "1" : "0"); /* Retificadora */ fprintf(f, "%s", dec->cpf); /* CPF: 11 dígitos */ fprintf(f, " "); /* Filler */ @@ -52,6 +54,8 @@ static void gera_header(struct declaracao *dec, FILE *f) fprintf(f, "130"); /* Versão IRPF */ else if (dec->ano == 2016) fprintf(f, "110"); /* Versão IRPF */ + else if (dec->ano == 2017) + fprintf(f, "100"); /* Versão IRPF */ fprintf(f, "%-60.60s", dec->nome); fprintf(f, "%-2.2s", dec->contribuinte.uf ?: ""); fprintf(f, "%s", "0000000000"); /* FIXME: hash */ @@ -167,7 +171,7 @@ static void gera_header(struct declaracao *dec, FILE *f) /* Mudanças de 2016 */ - if (dec->ano == 2016) { + if (dec->ano >= 2016) { /* CNPJ maior pagamento dedutível */ fprintf(f, "%-14.14s", pagamento_cnpj_ordenado(dec, 0)); /* CNPJ maior pagamento dedutível */ @@ -209,7 +213,7 @@ static void gera_contribuinte(struct declaracao *dec, FILE *f) fprintf(f, "%-100.100s", ""); /* FILLER3 */ fprintf(f, "%-4.4s", ""); /* FILLER1 */ fprintf(f, "%-8.8s", ""); /* FILLER2 */ - } else if (dec->ano == 2016) { + } else if (dec->ano >= 2016) { fprintf(f, "%-90.90s", ""); /* FILLER3 */ /* TODO: NIT/PIS/PASEP de Pessoa Física no exterior */ fprintf(f, "%-11.11s", ""); @@ -241,8 +245,12 @@ static void gera_contribuinte(struct declaracao *dec, FILE *f) fprintf(f, "%-10.10s", dec->recibo ?: ""); /* Recibo última declaração ano anterior */ fprintf(f, "A"); /* Declaração de Ajuste */ fprintf(f, "%-11.11s", ""); /* TODO: CPF procurador */ - if (dec->ano == 2016) + if (dec->ano >= 2016) fprintf(f, "%-20.20s", ""); /* TODO: registro profissional */ + if (dec->ano >= 2017) { + fprintf(f, "%-11.11s", ""); /* TODO: celular */ + fprintf(f, "%s", dec->conjuge.cpf ? "S" : "N"); + } } static void gera_simples(struct declaracao *dec, FILE *f) @@ -304,7 +312,7 @@ static void gera_totais_simples(struct declaracao *dec, FILE *f) fprintf(f, "%013lld", totais_get(dec, "EXCLUSIVOS")); /* rendimentos tributação exclusiva */ if (dec->ano == 2015) { fprintf(f, "%013lld", dec->conjuge.total); /* conjuge */ - } else if (dec->ano == 2016) { + } else if (dec->ano >= 2016) { fprintf(f, "%013lld", 0); /* FILLER */ } fprintf(f, "%013lld", 0); /* TODO: rendimento PJ dependente */ @@ -379,7 +387,7 @@ static void gera_completa(struct declaracao *dec, FILE *f) /* IRPF-2015-1.3 gera este valor como 0, antes era dec->devido */ fprintf(f, "%013lld", 0); /* TODO: imposto devido sem rendimento exterior */ fprintf(f, "%013lld", 0); /* TODO: limite imposto pago exterior */ - if (dec->ano == 2016) { + if (dec->ano >= 2016) { /* TODO: valor até o limite da FUNPRESP */ fprintf(f, "%013lld", 0); /* TODO: valor acima do limite da FUNPRESP */ @@ -433,7 +441,7 @@ static void gera_totais_completa(struct declaracao *dec, FILE *f) fprintf(f, "%013lld", 0); /* TODO: total dívidas ano base */ if (dec->ano == 2015) { fprintf(f, "%013lld", dec->conjuge.total); /* conjuge */ - } else if (dec->ano == 2016) { + } else if (dec->ano >= 2016) { fprintf(f, "%013lld", 0); /* FILLER */ } fprintf(f, "%013lld", totais_get(dec, "ISENTOS")); /* rendimentos isentos */ @@ -663,7 +671,7 @@ static void gera_pagamento(struct declaracao *dec, FILE *f) fprintf(f, "%-11.11s", ""); /* TODO: NIT */ fprintf(f, "%013lld", p->pagamento); fprintf(f, "%013lld", p->reembolso); - if (dec->ano == 2016) { + if (dec->ano >= 2016) { /* TODO: contribuição do ente público patrocinador (FUNPRESP?) */ fprintf(f, "%013lld", 0); } @@ -732,7 +740,7 @@ static void gera_dependente(struct declaracao *dec, FILE *f) fprintf(f, "%-11.11s", d->cpf); /* TODO: Indicador de saída */ fprintf(f, " "); - if (dec->ano == 2016) { + if (dec->ano >= 2016) { /* TODO: NIT/PIS/PASEP de Pessoa Física no exterior */ fprintf(f, "%-11.11s", ""); } -- 2.20.1