X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Fgera.c;h=4e71c70c542f038b86444a846ca9ba218cd00a52;hb=refs%2Fheads%2Fmaster;hp=d57a3218cd4cecc15f7d714c75127f24494ff4d9;hpb=f173c1f2238f4401952ac0c2d78834a49004baf6;p=cascardo%2Fdeclara.git diff --git a/lib/gera.c b/lib/gera.c index d57a321..4e71c70 100644 --- a/lib/gera.c +++ b/lib/gera.c @@ -33,6 +33,7 @@ #include "totais.h" #include "sistema.h" #include "ano.h" +#include "attr.h" static void gera_header(struct declaracao *dec, FILE *f) { @@ -41,34 +42,31 @@ static void gera_header(struct declaracao *dec, FILE *f) fprintf(f, "IRPF "); fprintf(f, "%04d", dec->ano); /* Exercício */ fprintf(f, "%04d", dec->ano - 1); /* Ano base */ - if (dec->ano == 2015) - 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 */ - else if (dec->ano == 2018) - fprintf(f, "2800"); /* Código */ - else if (dec->ano == 2019) - fprintf(f, "2900"); /* Código */ - else if (dec->ano == 2020) - fprintf(f, "3000"); + + /* Código Receitanet */ + fprintf(f, "%04d", (dec->ano - 1990) * 100); + fprintf(f, "%s", dec->retifica ? "1" : "0"); /* Retificadora */ fprintf(f, "%s", dec->cpf); /* CPF: 11 dígitos */ fprintf(f, " "); /* Filler */ fprintf(f, "1"); /* Tipo NI: Pessoa Física (1) */ + + /* Versão IRPF */ if (dec->ano == 2015) - fprintf(f, "130"); /* Versão IRPF */ + fprintf(f, "130"); else if (dec->ano == 2016) - fprintf(f, "110"); /* Versão IRPF */ + fprintf(f, "110"); else if (dec->ano == 2017) - fprintf(f, "130"); /* Versão IRPF */ + fprintf(f, "130"); else if (dec->ano == 2018) - fprintf(f, "160"); /* Versão IRPF */ + fprintf(f, "160"); else if (dec->ano == 2019) - fprintf(f, "150"); /* Versão IRPF */ + fprintf(f, "150"); else if (dec->ano == 2020) - fprintf(f, "180"); /* Versão IRPF */ + fprintf(f, "180"); + else if (dec->ano == 2021) + fprintf(f, "160"); + fprintf(f, "%-60.60s", dec->nome); fprintf(f, "%-2.2s", dec->contribuinte.uf ?: ""); fprintf(f, "%s", "0000000000"); /* FIXME: hash */ @@ -103,7 +101,11 @@ static void gera_header(struct declaracao *dec, FILE *f) fprintf(f, "0"); /* TODO: debito 1a quota */ fprintf(f, "%-3.3s", dec->banco ? : "000"); /* no banco */ fprintf(f, "%-4.4s", dec->agencia ? : "0000"); /* agencia */ - fprintf(f, " "); /* TODO: filler */ + if (dec->ano < 2021) { + fprintf(f, " "); /* TODO: filler */ + } else { + fprintf(f, "0"); /* TODO: sobrepartilha */ + } fprintf(f, "00000000"); /* transito julgado, gravado apenas se espolio */ fprintf(f, "%013lld", dec->pagar); /* imposto a pagar */ fprintf(f, " "); /* RRA1 */ @@ -165,7 +167,11 @@ static void gera_header(struct declaracao *dec, FILE *f) fprintf(f, "%013lld", totais_get(dec, "EXCLUSIVOS")); /* Total pagamentos */ fprintf(f, "%013lld", totais_get(dec, "PAGAMENTOS")); - fprintf(f, "%-13.13s", dec->contacorrente ? : ""); /* numero conta */ + if (dec->ano < 2021) { + fprintf(f, "%-13.13s", dec->contacorrente ? : ""); /* numero conta */ + } else { + fprintf(f, "%-13.13s", ""); /* FILLER */ + } fprintf(f, "%-2.2s", dec->dvconta ? : ""); /* DV conta */ fprintf(f, "0"); /* TODO: revalidar DV conta */ @@ -215,6 +221,12 @@ static void gera_header(struct declaracao *dec, FILE *f) if (dec->ano >= 2020) fprintf(f, "%-13.13s", dec->contribuinte.titulo_eleitor ?: ""); + if (dec->ano >= 2021) { + fprintf(f, "1"); /* TODO: Tipo conta */ + fprintf(f, "%-20.20s", dec->contacorrente ? : ""); /* conta */ + fprintf(f, "1"); /* TODO: indicador devolver auxílio emergencial */ + } + fprintf(f, " "); /* Teste PGD, FILLER2 */ } @@ -268,7 +280,11 @@ static void gera_contribuinte(struct declaracao *dec, FILE *f) fprintf(f, "%-4.4s", dec->agencia ? : "0000"); /* agência */ fprintf(f, "N"); /* TODO: deficiência */ fprintf(f, "0"); /* FILLER: pré-preenchida */ - fprintf(f, "%-13.13s", dec->contacorrente ? : ""); /* conta */ + if (dec->ano < 2021) { + fprintf(f, "%-13.13s", dec->contacorrente ? : ""); /* conta */ + } else { + fprintf(f, "%-13.13s", ""); /* FILLER */ + } fprintf(f, "%-2.2s", dec->dvconta ? : ""); /* DV conta */ fprintf(f, "N"); /* TODO: débito automático */ fprintf(f, "0"); /* TODO: débito primeira quota */ @@ -288,6 +304,10 @@ static void gera_contribuinte(struct declaracao *dec, FILE *f) } else if (dec->ano >= 2018) { fprintf(f, "%-2.2s%-9.9s", dec->contribuinte.ddd ?: "", dec->contribuinte.telefone ?: ""); } + if (dec->ano >= 2021) { + fprintf(f, "1"); /* TODO: Tipo conta */ + fprintf(f, "%-20.20s", dec->contacorrente ? : ""); /* conta */ + } } static void gera_simples(struct declaracao *dec, FILE *f) @@ -756,7 +776,11 @@ static void gera_recibodetalhe(struct declaracao *dec, FILE *f) fprintf(f, " "); /* FILLER */ fprintf(f, "%d", 0); /* TODO: debito primeira quota */ fprintf(f, "%013lld", 0); /* TODO: imposto pago ganho de capital */ - fprintf(f, "%-13.13s", dec->contacorrente ? : ""); /* numero conta */ + if (dec->ano < 2021) { + fprintf(f, "%-13.13s", dec->contacorrente ? : ""); /* numero conta */ + } else { + fprintf(f, "%-13.13s", ""); /* FILLER */ + } fprintf(f, "%-2.2s", dec->dvconta ? : ""); /* DV conta */ fprintf(f, "%013lld", 0); /* TODO: imposto alienacao moeda estrangeira em especie */ if (dec->ano >= 2020) { @@ -764,6 +788,9 @@ static void gera_recibodetalhe(struct declaracao *dec, FILE *f) } else if (dec->ano >= 2018) { fprintf(f, "%-2.2s%-9.9s", dec->contribuinte.ddd ?: "", dec->contribuinte.telefone ?: ""); } + if (dec->ano >= 2021) { + fprintf(f, "%-20.20s", dec->contacorrente ? : ""); /* numero conta */ + } } static void gera_recibotrailler(struct declaracao *dec, FILE *f) @@ -878,6 +905,10 @@ static void gera_plr2(struct declaracao *dec, FILE *f) static void gera_lucrome2(struct declaracao *dec, FILE *f) { gera_isento2(dec, f, 13, 13, 84); + if (dec->ano >= 2021) { + /* Décimo terceiro */ + fprintf(f, "%013lld", 0ULL); + } } static void gera_outrosisentos(struct declaracao *dec, FILE *f) @@ -956,22 +987,22 @@ static void gera_bem(struct declaracao *dec, FILE *f) fprintf(f, "%013lld", b->valor); /* Imóvel */ - fprintf(f, "%-40.40s", b->logradouro ?: ""); - fprintf(f, "%-6.6s", b->numero ?: ""); - fprintf(f, "%-40.40s", b->complemento ?: ""); - fprintf(f, "%-40.40s", b->bairro ?: ""); - fprintf(f, "%-9.9s", b->cep ?: ""); - fprintf(f, "%-2.2s", b->uf ?: ""); - fprintf(f, "%04d", b->cd_municipio); - fprintf(f, "%-40.40s", b->municipio ?: ""); + attr_out(f, b->attr, "logradouro", 40); + attr_out(f, b->attr, "numero", 6); + attr_out(f, b->attr, "complemento", 40); + attr_out(f, b->attr, "bairro", 40); + attr_out(f, b->attr, "cep", 9); + attr_out(f, b->attr, "uf", 2); + attr_out_int(f, b->attr, "cd_municipio", 4); + attr_out(f, b->attr, "municipio", 40); /* FIXME: Registro de imóveis, Nao (0), Sim (1), Vazio (2) */ - fprintf(f, "%d", b->registro ? 1 : 2); - fprintf(f, "%-40.40s", b->matricula ?: ""); - fprintf(f, "%-40.40s", b->registro ?: ""); - fprintf(f, "%011lld", b->area); + fprintf(f, "%d", attr_get(b->attr, "registro") ? 1 : 2); + attr_out(f, b->attr, "matricula", 40); + attr_out(f, b->attr, "registro", 40); + attr_out_int(f, b->attr, "area", 11); /* FIXME: Area, M2 (0), Ha (1), Vazio (2) */ - fprintf(f, "%d", (b->area == 0) ? 2 : 0); - fprintf(f, "%-60.60s", b->cartorio ?: ""); + fprintf(f, "%d", attr_get(b->attr, "area") ? 0 : 2); + attr_out(f, b->attr, "cartorio", 60); /* Número de chave */ fprintf(f, "%05d", dec->linhas[27] + 1); @@ -986,11 +1017,22 @@ static void gera_bem(struct declaracao *dec, FILE *f) fprintf(f, "%-30.30s", ""); /* TODO: Registro Capitania dos Portos */ fprintf(f, "%04d", 0); /* TODO: Agência bancária */ fprintf(f, "%-15.15s", ""); /* TODO: Conta bancária e dígito verificador */ - fprintf(f, "%-14.14s", ""); /* TODO: CPF ou CNPJ */ + attr_out(f, b->attr, "cnpj", 14); } if (dec->ano >= 2019) { - fprintf(f, "%-30.30s", ""); /* TODO: IPTU */ + attr_out(f, b->attr, "iptu", 30); + } + if (dec->ano >= 2020) { + attr_out_int(f, b->attr, "banco", 3); + fprintf(f, "%c", b->dependente ? 'D' : 'T'); + if (b->dependente) { + struct dependente *d; + d = list_get(dec->dependentes, b->dependente - 1); + fprintf(f, "%-11.11s", d ? d->cpf : ""); + } else { + fprintf(f, "%-11.11s", dec->cpf); + } } }