public static string GravarArquivoDecBackup(DEC_Intermediate dadosDec, string FilePath)
        {
            // Pega nome do Arquivo, são os 8 primeiros caracteres, Concatenar direto o CPF ?
            string nomeArqOr   = dadosDec.GerarNomeArquivoDEC(true).ToUpper();
            string nomeArquivo = nomeArqOr;
            var    partesNome  = nomeArquivo.Split('.');

            nomeArquivo = partesNome[0].Substring(0, 8) + "." + partesNome[1];
            // Apaga o NR_HASH e NR_CONTROLE
            dadosDec.zerarHeader();
            string[] linhasArrumadas = arrumaControleLinhas(toLines(dadosDec), false).ToArray(); // false => SEM IR

            string fileHash = Helpers.Hash.obterCrc32Utf8(string.Join(string.Empty, linhasArrumadas));

            // Dados esperados para o 22222222303-IRPF-A-2020-2019-ORIGI.DBK do commit df31f61
            // IR HASH: 0021677088
            // IR NR_C: 4183433249
            dadosDec.Header.NR_Hash = fileHash;

            // Pega novamente as linhas porém contendo o Header
            linhasArrumadas = arrumaControleLinhas(toLines(dadosDec), true, nomeArquivo).ToArray(); // true => COM IR

            string nomeFinal = FilePath + "\\" + nomeArqOr;

            File.WriteAllLines(nomeFinal, linhasArrumadas);

            return(nomeFinal);
        }
        private static void gravaDecStream(DEC_Intermediate dec, Stream fs)
        {
            var sw = new StreamWriter(fs);

            var fields = dec.GetType().GetProperties();

            foreach (var f in fields)
            {
                var ft = f.PropertyType;
                if (ft.IsArray)
                {
                    Array arr = (Array)f.GetValue(dec);
                    for (int i = 0; i < arr.Length; i++)
                    {
                        object o = arr.GetValue(i);
                        if (o == null)
                        {
                            continue;            // vazio
                        }
                        Serialization.Serializer.Serialize((IFixedLenLine)o, sw);
                    }
                }
                else
                {
                    object o = f.GetValue(dec);
                    if (o == null)
                    {
                        continue;            // vazio
                    }
                    Serialization.Serializer.Serialize((IFixedLenLine)o, sw);
                }
            }
        }
 protected static IEnumerable <string> toLines(DEC_Intermediate dec)
 {
     using (MemoryStream ms = new MemoryStream())
     {
         gravaDecStream(dec, ms);
         ms.Position = 0;
         StreamReader sr = new StreamReader(ms, Encoding.UTF8);
         while (!sr.EndOfStream)
         {
             yield return(sr.ReadLine());
         }
     }
 }
Example #4
0
        public static void CorrigeChecksums(string PathArquivoDEC)
        {
            DEC_Intermediate dec = DEC_Intermediate.FromFile(PathArquivoDEC);

            if (PathArquivoDEC.ToUpper().EndsWith(".DEC"))
            {
                DEC_Intermediate.GravarArquivoDecEntrega(dec, PathArquivoDEC);
            }
            else
            {
                DEC_Intermediate.GravarArquivoDecBackup(dec, PathArquivoDEC);
            }
        }
 public static void GravarArquivoDecEntrega(DEC_Intermediate dadosDec, string FilePath)
 {
     throw new NotImplementedException();
 }
        public static DEC_Intermediate FromFile(string file)
        {
            DEC_Intermediate dec = new DEC_Intermediate();

            if (!ValidaNomeArquivo(file))
            {
                throw new InvalidOperationException("Arquivo inválido");
            }

            dec.lines = File.ReadAllLines(file);
            // Id "IR"
            dec.Header = new IR_RegistroHeader();
            dec.Header.Deserialize(dec.lines[0]);
            // Id "16"
            dec.Declarante = new R16_Declarante();
            dec.Declarante.Deserialize(dec.lines[1]);

            var lstR21 = new List <R21_RendimentosPJ>();
            var lstR22 = new List <R22_RendimentosPfExteriorLeao>();
            var lstR23 = new List <R23_RendimentosIsentosNaoTributaveis>();
            var lstR24 = new List <R24_RendimentosTributacaoExclusiva>();
            var lstR25 = new List <R25_Dependentes>();
            var lstR26 = new List <R26_RelacaoPagamentosEfetuados>();
            var lstR27 = new List <R27_BensDireitos>();
            var lstR28 = new List <R28_DividasOnus>();
            var lstR32 = new List <R32_RendimentosPJDependentes>();
            var lstR34 = new List <R34_DoacoesPartidos>();
            var lstR35 = new List <R35_Alimentandos>();
            var lstR42 = new List <R42_RendaVar_FII>();
            var lstR45 = new List <R45_RecebidosAcumuladamente>();
            var lstR47 = new List <R47_RendimentosAcumuladamenteDependente>();
            var lstR83 = new List <R83_RendimentoIsento_Tipo2>();
            var lstR84 = new List <R84_RendimentoIsento_Tipo3>();
            var lstR85 = new List <R85_RendimentoIsento_Tipo4>();
            var lstR86 = new List <R86_RendimentoIsento_Tipo5>();
            var lstR87 = new List <R87_RendimentoIsento_Tipo6>();

            var lstR88 = new List <R88_RendimentoExclusivo_Tipo2>();
            var lstR89 = new List <R89_RendimentoExclusivo_Tipo3>();

            var lstR90 = new List <R90_RelacaoDoacoes>();
            var lstR91 = new List <R91_DoacoesECA>();
            var lstR92 = new List <R92_DoacoesIdoso>();

            string linha;

            for (int i = 2; i < dec.lines.Length; i++)
            {
                linha = dec.lines[i];
                if (linha.Length < 2)
                {
                    continue;
                }

                switch (linha.Substring(0, 2))
                {
                case "17":
                    dec.DemaisRendimentosEImpostoPago = carregarRegistro <R17_DemaisRendimentosImpostoPago>(linha);
                    continue;

                case "18":
                    dec.TotaisDeclaracaoSimplificada = carregarRegistro <R18_TotaisDeclaracaoDescontoSimplificado>(linha);
                    continue;

                case "19":
                    dec.Completa = carregarRegistro <R19_Completa>(linha);
                    continue;

                case "20":
                    dec.TotaisDeclaracao = carregarRegistro <R20_TotaisDeclaracaoDesconto>(linha);
                    continue;

                case "21":
                    lstR21.Add(carregarRegistro <R21_RendimentosPJ>(linha));
                    continue;

                case "22":
                    lstR22.Add(carregarRegistro <R22_RendimentosPfExteriorLeao>(linha));
                    continue;

                case "23":
                    lstR23.Add(carregarRegistro <R23_RendimentosIsentosNaoTributaveis>(linha));
                    continue;

                case "24":
                    lstR24.Add(carregarRegistro <R24_RendimentosTributacaoExclusiva>(linha));
                    continue;

                case "25":
                    lstR25.Add(carregarRegistro <R25_Dependentes>(linha));
                    continue;

                case "26":
                    lstR26.Add(carregarRegistro <R26_RelacaoPagamentosEfetuados>(linha));
                    continue;

                case "27":
                    lstR27.Add(carregarRegistro <R27_BensDireitos>(linha));
                    continue;

                case "28":
                    lstR28.Add(carregarRegistro <R28_DividasOnus>(linha));
                    continue;

                case "30":
                    dec.Inventariante = carregarRegistro <R30_EspolioInventariante>(linha);
                    continue;

                case "32":
                    lstR32.Add(carregarRegistro <R32_RendimentosPJDependentes>(linha));
                    continue;

                case "34":
                    lstR34.Add(carregarRegistro <R34_DoacoesPartidos>(linha));
                    continue;

                case "35":
                    lstR35.Add(carregarRegistro <R35_Alimentandos>(linha));
                    continue;

                case "42":
                    lstR42.Add(carregarRegistro <R42_RendaVar_FII>(linha));
                    continue;

                case "43":
                    dec.RendaVarTotais_FII = carregarRegistro <R43_RendaVar_Totais_FII>(linha);
                    continue;

                case "45":
                    lstR45.Add(carregarRegistro <R45_RecebidosAcumuladamente>(linha));
                    continue;

                case "47":
                    lstR47.Add(carregarRegistro <R47_RendimentosAcumuladamenteDependente>(linha));
                    continue;

                case "83":
                    lstR83.Add(carregarRegistro <R83_RendimentoIsento_Tipo2>(linha));
                    continue;

                case "84":
                    lstR84.Add(carregarRegistro <R84_RendimentoIsento_Tipo3>(linha));
                    continue;

                case "85":
                    lstR85.Add(carregarRegistro <R85_RendimentoIsento_Tipo4>(linha));
                    continue;

                case "86":
                    lstR86.Add(carregarRegistro <R86_RendimentoIsento_Tipo5>(linha));
                    continue;

                case "87":
                    lstR87.Add(carregarRegistro <R87_RendimentoIsento_Tipo6>(linha));
                    continue;

                case "88":
                    lstR88.Add(carregarRegistro <R88_RendimentoExclusivo_Tipo2>(linha));
                    continue;

                case "89":
                    lstR89.Add(carregarRegistro <R89_RendimentoExclusivo_Tipo3>(linha));
                    continue;

                case "90":
                    lstR90.Add(carregarRegistro <R90_RelacaoDoacoes>(linha));
                    continue;

                case "91":
                    lstR91.Add(carregarRegistro <R91_DoacoesECA>(linha));
                    continue;

                case "92":
                    lstR92.Add(carregarRegistro <R92_DoacoesIdoso>(linha));
                    continue;

                case "T9":
                    dec.Encerramento = carregarRegistro <T9_Encerramento>(linha);
                    continue;

                case "HR":
                    dec.HeaderRecbibo = carregarRegistro <HR_HeaderRecibo>(linha);
                    continue;

                case "DR":
                    dec.ReciboEntregaDeclaracao = carregarRegistro <DR_ReciboEntregaDeclaracao>(linha);
                    continue;

                case "R9":
                    dec.TraillerRecibo = carregarRegistro <R9_TraillerRecibo>(linha);
                    continue;

                default:
                    throw new NotImplementedException(linha.Substring(0, 2));     // Notifica que ainda não terminei
                }
            }
            dec.RendimentosPJ                    = lstR21.ToArray();
            dec.RendimentosPfExteriorLeao        = lstR22.ToArray();
            dec.RendimentosIsentosNaoTributaveis = lstR23.ToArray();
            dec.RendimentosTributacaoExclusiva   = lstR24.ToArray();
            dec.Dependentes = lstR25.ToArray();
            dec.RelacaoPagamentosEfetuados = lstR26.ToArray();
            dec.BensDireitos                        = lstR27.ToArray();
            dec.DividasOnus                         = lstR28.ToArray();
            dec.RendimentosPJDependentes            = lstR32.ToArray();
            dec.DoacoesPartidos                     = lstR34.ToArray();
            dec.Alimentandos                        = lstR35.ToArray();
            dec.RendaVar_FII                        = lstR42.ToArray();
            dec.RecebidosAcumuladamente             = lstR45.ToArray();
            dec.RendimentosAcumuladamenteDependente = lstR47.ToArray();
            dec.RendimentosIsentos_Tipo2            = lstR83.ToArray();
            dec.RendimentosIsentos_Tipo3            = lstR84.ToArray();
            dec.RendimentosIsentos_Tipo4            = lstR85.ToArray();
            dec.RendimentosIsentos_Tipo5            = lstR86.ToArray();
            dec.RendimentosIsentos_Tipo6            = lstR87.ToArray();
            dec.RendimentoExclusivo_Tipo2           = lstR88.ToArray();
            dec.RendimentoExclusivo_Tipo3           = lstR89.ToArray();

            dec.RelacaoDoacoes = lstR90.ToArray();
            dec.DoacoesECA     = lstR91.ToArray();
            dec.DoacoesIdoso   = lstR92.ToArray();

            return(dec);
        }