Funções para lista de pagamentos ordenados.
[cascardo/declara.git] / lib / gera.c
index 35a6e3f..eac8b7f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (C) 2015  Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
+ *  Copyright (C) 2015-2016  Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
  *
  *  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
@@ -119,9 +119,9 @@ static void gera_header(struct declaracao *dec, FILE *f)
        fprintf(f, "%03d", dec->obrigatoria); /* criterio obrigatoriedade */
        fprintf(f, "%013lld", totais_get(dec, "RENDPJ")); /* Total tributavel */
        /* CNPJ previdencia */
-       fprintf(f, "%-14.14s", pagamento_cnpj_ordenado(dec, 36, 0));
+       fprintf(f, "%-14.14s", inss_cnpj_ordenado(dec, 0));
        /* CNPJ previdencia 2 */
-       fprintf(f, "%-14.14s", pagamento_cnpj_ordenado(dec, 36, 1));
+       fprintf(f, "%-14.14s", inss_cnpj_ordenado(dec, 1));
        /* Total isentos */
        fprintf(f, "%013lld", totais_get(dec, "ISENTOS"));
        /* Total exclusivo */
@@ -165,7 +165,7 @@ static void gera_contribuinte(struct declaracao *dec, FILE *f)
        fprintf(f, "%-15.15s", dec->contribuinte.tipo_logradouro);
        fprintf(f, "%-40.40s", dec->contribuinte.logradouro);
        fprintf(f, "%-6.6s", dec->contribuinte.numero);
-       fprintf(f, "%-21.21s", dec->contribuinte.complemento);
+       fprintf(f, "%-21.21s", dec->contribuinte.complemento ?: "");
        fprintf(f, "%-19.19s", dec->contribuinte.bairro);
        fprintf(f, "%-9.9s", dec->contribuinte.cep);
        fprintf(f, "%04d", dec->contribuinte.cd_municipio);
@@ -304,8 +304,31 @@ static void gera_completa(struct declaracao *dec, FILE *f)
 {
        fprintf(f, "19");
        fprintf(f, "%s", dec->cpf); /* CPF: 11 dígitos */
-       fprintf(f, "%-14.14s", ""); /* TODO: CNPJ maior */
-       /* FIXME: completar campos */
+       fprintf(f, "%-14.14s", rendimento_cnpj_ordenado(dec, 0)); /* CNPJ maior */
+       fprintf(f, "%013lld", 0); /* TODO: imposto pago no exterior */
+       fprintf(f, "%013lld", 0); /* TODO: imposto complementar pago */
+       fprintf(f, "%013lld", 0); /* TODO: retido fonte Lei 11.033 */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos recebidos no exterior - titular */
+       fprintf(f, "%013lld", 0); /* TODO: livro caixa - titular */
+       fprintf(f, "%013lld", 0); /* TODO: carnê-leão - titular */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos recebidos no exterior - dependente */
+       fprintf(f, "%013lld", 0); /* TODO: livro caixa - dependente */
+       fprintf(f, "%013lld", 0); /* TODO: carnê-leão - dependente */
+       fprintf(f, "%013lld", totais_get(dec, "PREVIDENCIA")); /* TODO: contribuição previdenciária privada */
+       fprintf(f, "%013lld", 0); /* TODO: contribuição FAPI */
+       fprintf(f, "%013lld", totais_get(dec, "INSS")); /* TODO: INSS titular */
+       fprintf(f, "%013lld", 0); /* TODO: INSS dependente */
+       fprintf(f, "%013lld", totais_get(dec, "DECIMOTERCEIRO")); /* TODO: 13o titular */
+       fprintf(f, "%013lld", 0); /* TODO: 13o dependente */
+       fprintf(f, "%05d", 0); /* TODO: dependentes com instrucao */
+       fprintf(f, "%05d", 0); /* TODO: alimentandos com instrucao */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos PF titular */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos PF dependente */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos PF exterior titular */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos PF exterior dependente */
+       /* 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 */
 }
 
 static void gera_totais_completa(struct declaracao *dec, FILE *f)
@@ -313,6 +336,79 @@ static void gera_totais_completa(struct declaracao *dec, FILE *f)
        fprintf(f, "20");
        fprintf(f, "%s", dec->cpf); /* CPF: 11 dígitos */
        /* FIXME: completar campos */
+       fprintf(f, "%013lld", totais_get(dec, "RENDPJTIT")); /* rendimentos PJ titular */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos PF titular */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos PF dependente */
+       fprintf(f, "%013lld", 0); /* TODO: resultado atividade rural */
+       fprintf(f, "%013lld", totais_get(dec, "RENDPJ")); /* TODO: total rendimentos tributáveis */
+       fprintf(f, "%013lld", totais_get(dec, "INSS")); /* previdencia oficial */
+       fprintf(f, "%013lld", totais_get(dec, "PREVIDENCIA")); /* previdencia privada */
+       fprintf(f, "%013lld", totais_get(dec, "DEPENDENTES")); /* deducao dependentes */
+       fprintf(f, "%013lld", 0); /* TODO: deducao instrucao */
+       fprintf(f, "%013lld", totais_get(dec, "MEDICAS")); /* despesas medicas */
+       fprintf(f, "%013lld", 0); /* TODO: pensao */
+       fprintf(f, "%013lld", 0); /* TODO: pensao escritura publica */
+       fprintf(f, "%013lld", 0); /* TODO: livro caixa */
+       fprintf(f, "%013lld", totais_get(dec, "DEDUCOES")); /* total deduções */
+       fprintf(f, "%013lld", totais_get(dec, "BASE")); /* base de cálculo */
+       fprintf(f, "%013lld", dec->devido); /* TODO: valor do imposto */
+       fprintf(f, "%013lld", 0); /* TODO: deducao do imposto (limitado a 6%) */
+       fprintf(f, "%013lld", dec->devido); /* imposto devido */
+       fprintf(f, "%013lld", 0); /* TODO: contribuicao patronal */
+       fprintf(f, "%013lld", dec->devido); /* TODO: imposto devido menos patronal */
+       fprintf(f, "%013lld", dec->devido); /* TODO: imposto devido mais RRA */
+       fprintf(f, "%013lld", dec->retido); /* imposto na fonte */
+       fprintf(f, "%013lld", 0); /* TODO: carne leao */
+
+       fprintf(f, "%013lld", 0); /* TODO: imposto complementar */
+       fprintf(f, "%013lld", 0); /* TODO: imposto pago exterior */
+       fprintf(f, "%013lld", 0); /* TODO: imposto retido Lei 11.033 */
+       fprintf(f, "%013lld", dec->retido); /* TODO: total imposto pago */
+       fprintf(f, "%013lld", dec->restituicao); /* imposto a restituir */
+       fprintf(f, "%013lld", dec->pagar); /* imposto a pagar */
+       fprintf(f, "%d", dec->pagar ? 1 : 0); /* TODO/FIXME: quotas */
+       fprintf(f, "%013lld", dec->pagar); /* TODO: valor quota */
+
+       fprintf(f, "%013lld", totais_get(dec, "BENSANTERIOR")); /* total bens ano anterior */
+       fprintf(f, "%013lld", totais_get(dec, "BENS")); /* total bens ano base */
+       fprintf(f, "%013lld", 0); /* TODO: total dívidas ano anterior */
+       fprintf(f, "%013lld", 0); /* TODO: total dívidas ano base */
+       fprintf(f, "%013lld", dec->conjuge.total); /* conjuge */
+       fprintf(f, "%013lld", totais_get(dec, "ISENTOS")); /* rendimentos isentos */
+       fprintf(f, "%013lld", totais_get(dec, "EXCLUSIVOS")); /* rendimentos tributação exclusiva */
+       fprintf(f, "%013lld", 0); /* TODO: imposto ganhos de capital */
+       fprintf(f, "%013lld", 0); /* TODO: retido fonte Lei 11.033 */
+       fprintf(f, "%013lld", 0); /* TODO: imposto renda variável */
+
+       fprintf(f, "%013lld", 0); /* TODO: rendimento PJ dependente */
+       fprintf(f, "%013lld", 0); /* TODO: imposto fonte dependente */
+       fprintf(f, "%013lld", 0); /* TODO: imposto moeda estrangeira */
+       fprintf(f, "%013lld", 0); /* TODO: imposto ganhos capital moeda */
+       fprintf(f, "%013lld", totais_get(dec, "ISENTOSTIT")); /* rendimentos isentos titular */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos isentos dependentes */
+       fprintf(f, "%013lld", totais_get(dec, "EXCLUSIVOSTIT")); /* TODO: tributação exclusiva titular */
+       fprintf(f, "%013lld", 0); /* TODO: tributação exclusiva dependentes */
+       fprintf(f, "%013lld", 0); /* TODO: doações campanha */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos PF exigibilidade suspensa titular */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos PF exigibilidade suspensa dependentes */
+       fprintf(f, "%013lld", 0); /* TODO: depósitos judiciais exigibilidade suspensa titular */
+       fprintf(f, "%013lld", 0); /* TODO: depósitos judiciais exigibilidade suspensa dependentes */
+
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos RRA titular */
+       fprintf(f, "%013lld", 0); /* TODO: previdencia RRA titular */
+       fprintf(f, "%013lld", 0); /* TODO: pensao RRA titular */
+       fprintf(f, "%013lld", 0); /* TODO: IRF RRA titular */
+       fprintf(f, "%013lld", 0); /* TODO: imposto RRA titular */
+       fprintf(f, "%013lld", 0); /* TODO: rendimentos RRA dependentes */
+       fprintf(f, "%013lld", 0); /* TODO: previdencia RRA dependentes */
+       fprintf(f, "%013lld", 0); /* TODO: pensao RRA dependentes */
+       fprintf(f, "%013lld", 0); /* TODO: IRF RRA dependentes */
+       fprintf(f, "%013lld", 0); /* TODO: imposto RRA dependentes */
+
+       fprintf(f, "%013lld", 0); /* TODO: imposto diferido ganho capital */
+       fprintf(f, "%013lld", 0); /* TODO: imposto devido ganho capital */
+       fprintf(f, "%013lld", 0); /* TODO: imposto ganho líquido renda variável */
+       fprintf(f, "%013lld", 0); /* TODO: imposto devido ganho capital moeda estrangeira */
 }
 
 static void gera_isentos(struct declaracao *dec, FILE *f)
@@ -424,7 +520,7 @@ static void gera_recibodetalhe(struct declaracao *dec, FILE *f)
        fprintf(f, "%-15.15s", dec->contribuinte.tipo_logradouro);
        fprintf(f, "%-40.40s", dec->contribuinte.logradouro);
        fprintf(f, "%-6.6s", dec->contribuinte.numero);
-       fprintf(f, "%-21.21s", dec->contribuinte.complemento);
+       fprintf(f, "%-21.21s", dec->contribuinte.complemento ?: "");
        fprintf(f, "%-19.19s", dec->contribuinte.bairro);
        fprintf(f, "%-9.9s", dec->contribuinte.cep);
        fprintf(f, "%04d", dec->contribuinte.cd_municipio);
@@ -694,7 +790,8 @@ static int gera(struct declaracao *dec, char *filename)
                W(gera_bem);
        }
 
-       W(gera_conjuge);
+       if (dec->conjuge.cpf)
+               W(gera_conjuge);
 
        /* Rendimentos isentos e com tributação exclusiva */
        /* Registros 82 a 89, e 92 a 99 */
@@ -733,6 +830,8 @@ static int run_gera(struct declaracao *dec, char **args, int argc)
 {
        if (argc != 2)
                return -EINVAL;
+       if (dec->ano != 2015)
+               return -EINVAL;
        return gera(dec, args[1]);
 }