static void gera_isentos2(struct declaracao *dec, FILE *f, int codigo, char *nome)
{
+ long long total = totais_get(dec, nome);
+ if (total == 0)
+ return;
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 */
+ fprintf(f, "%013lld", total);
}
static void gera_23_poupanca(struct declaracao *dec, FILE *f)
int subcodigo, int codigoreal)
{
struct isento *i;
- i = isento_get(dec, codigo, dec->linhas[codigo]);
+ i = dec->ctx;
fprintf(f, "%02d", codigoreal);
fprintf(f, "%-11.11s", dec->cpf); /* Titular */
/* Titular (T), Dependente (D), Alimentando (A), FIXME Alimentando */
fprintf(f, "%04d", b->cd_municipio);
fprintf(f, "%-40.40s", b->municipio ?: "");
/* FIXME: Registro de imóveis, Nao (0), Sim (1), Vazio (2) */
- fprintf(f, "%d", b->registro ? 1 : 0);
+ fprintf(f, "%d", b->registro ? 1 : 2);
fprintf(f, "%-40.40s", b->matricula ?: "");
fprintf(f, "%-40.40s", b->registro ?: "");
fprintf(f, "%011lld", b->area);
/* FIXME: Area, M2 (0), Ha (1), Vazio (2) */
- fprintf(f, "%d", 0);
+ fprintf(f, "%d", (b->area == 0) ? 2 : 0);
fprintf(f, "%-60.60s", b->cartorio ?: "");
/* Número de chave */
return -errno;
}
fn(dec, m);
- dec->linhas[0]++;
fflush(m);
+ if (bsize == 0) {
+ fclose(m);
+ return 0;
+ }
+ dec->linhas[0]++;
/* Calcula CRC32 para campo de controle dos registros. */
c = crc32(c, buf, bsize);
isento = isento_get(dec, codigo, i); \
if (!isento) \
break; \
+ dec->ctx = isento; \
W(fn); \
}
if (dec->ano <= 2017) {