private void ProcessarNotasFiscaisEnergiaAguaGas(RegistroC010 regC010)
        {
            IEnumerable<RegistroC500> registrosC500 =
                NotasFiscaisEnergiaAguaGasService.GetRegistrosC500(regC010.CNPJ);
            IEnumerable<RegistroC501> registrosC501;
            IEnumerable<RegistroC505> registrosC505;

            foreach (RegistroC500 regC500 in registrosC500)
            {
                this.UpdateStatusAsynchronousExecution("Gerando Registro C500");
                DadosArquivoPisCofinsService.PersistirRegistro(regC500);

                // Processa informações do fornecedor vinculado a uma nota fiscal
                this.ProcessarParticipante(regC500.COD_PART, regC010.CD_EMP);

                registrosC501 = NotasFiscaisEnergiaAguaGasService.GetRegistrosC501(
                    regC500.PK_NOTAFIS);
                foreach (RegistroC501 regC501 in registrosC501)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C501");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC501);
                }

                registrosC505 = NotasFiscaisEnergiaAguaGasService.GetRegistrosC505(
                    regC500.PK_NOTAFIS);
                foreach (RegistroC505 regC505 in registrosC505)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C505");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC505);
                }
            }
        }
        private void ProcessarConsolidacaoNotasFiscais(RegistroC010 regC010)
        {
            this.UpdateStatusAsynchronousExecution("Processando a consolidação de notas fiscais");

            string codEmp = regC010.CD_EMP;
            // Consolidação de notas fiscais eletrônicas - vendas
            IEnumerable<RegistroC180> registrosC180 =
                ConsolidacaoNotasFiscaisService.GetRegistrosC180(regC010.CNPJ, codEmp);
            IEnumerable<RegistroC181> registrosC181;
            IEnumerable<RegistroC185> registrosC185;
            foreach (RegistroC180 regC180 in registrosC180)
            {
                this.UpdateStatusAsynchronousExecution("Gerando Registro C180");
                DadosArquivoPisCofinsService.PersistirRegistro(regC180);

                this.ProcessarProduto(regC180.COD_ITEM, regC010.CD_EMP);

                registrosC181 = ConsolidacaoNotasFiscaisService.GetRegistrosC181(
                    regC010.CNPJ,
                    regC180.COD_ITEM,
                    regC180.DT_DOC_INI.Value,
                    regC180.DT_DOC_FIN.Value,
                    codEmp);
                foreach (RegistroC181 regC181 in registrosC181)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C181");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC181);
                }

                registrosC185 = ConsolidacaoNotasFiscaisService.GetRegistrosC185(
                    regC010.CNPJ,
                    regC180.COD_ITEM,
                    regC180.DT_DOC_INI.Value,
                    regC180.DT_DOC_FIN.Value,
                    codEmp);
                foreach (RegistroC185 regC185 in registrosC185)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C185");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC185);
                }
            }

            // Consolidação de notas fiscais eletrônicas - direito a crédito e devoluções
            IEnumerable<RegistroC190> registrosC190 =
                ConsolidacaoNotasFiscaisService.GetRegistrosC190(regC010.CNPJ, codEmp);
            IEnumerable<RegistroC191> registrosC191;
            IEnumerable<RegistroC195> registrosC195;
            IEnumerable<RegistroC199> registrosC199;
            foreach (RegistroC190 regC190 in registrosC190)
            {
                this.UpdateStatusAsynchronousExecution("Gerando Registro C190");
                DadosArquivoPisCofinsService.PersistirRegistro(regC190);

                this.ProcessarProduto(regC190.COD_ITEM, codEmp);

                registrosC191 = ConsolidacaoNotasFiscaisService.GetRegistrosC191(
                    regC010.CNPJ,
                    regC190.COD_ITEM,
                    regC190.DT_REF_INI.Value,
                    regC190.DT_REF_FIN.Value,
                    codEmp);
                foreach (RegistroC191 regC191 in registrosC191)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C191");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC191);
                }

                registrosC195 = ConsolidacaoNotasFiscaisService.GetRegistrosC195(
                    regC010.CNPJ,
                    regC190.COD_ITEM,
                    regC190.DT_REF_INI.Value,
                    regC190.DT_REF_FIN.Value,
                    codEmp);
                foreach (RegistroC195 regC195 in registrosC195)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C195");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC195);
                }

                registrosC199 = ConsolidacaoNotasFiscaisService.GetRegistrosC199(
                    regC010.CNPJ,
                    regC190.COD_ITEM,
                    regC190.DT_REF_INI.Value,
                    regC190.DT_REF_FIN.Value,
                    codEmp);
                foreach (RegistroC199 regC199 in registrosC199)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C199");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC199);
                }
            }

            // Consolidação de notas fiscais de vendas
            IEnumerable<RegistroC380> registrosC380 =
                ConsolidacaoNotasFiscaisService.GetRegistrosC380(regC010.CNPJ, codEmp);
            IEnumerable<RegistroC381> registrosC381;
            IEnumerable<RegistroC385> registrosC385;

            foreach (RegistroC380 regC380 in registrosC380)
            {
                this.UpdateStatusAsynchronousExecution("Gerando Registro C380");
                DadosArquivoPisCofinsService.PersistirRegistro(regC380);

                registrosC381 = ConsolidacaoNotasFiscaisService.GetRegistrosC381(
                    regC010.CNPJ,
                    regC380.COD_MOD,
                    regC380.DT_DOC_INI.Value,
                    regC380.DT_DOC_FIN.Value,
                    codEmp);
                foreach (RegistroC381 regC381 in registrosC381)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C381");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC381);

                    this.ProcessarProduto(regC381.COD_ITEM, codEmp);
                }

                registrosC385 = ConsolidacaoNotasFiscaisService.GetRegistrosC385(
                    regC010.CNPJ,
                    regC380.COD_MOD,
                    regC380.DT_DOC_INI.Value,
                    regC380.DT_DOC_FIN.Value,
                    codEmp);
                foreach (RegistroC385 regC385 in registrosC385)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C385");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC385);

                    this.ProcessarProduto(regC385.COD_ITEM, codEmp);
                }
            }
        }
        private void ProcessarCuponsFiscais(RegistroC010 regC010)
        {
            IEnumerable<RegistroC400> registrosC400 =
                CuponsFiscaisService.GetRegistrosC400(regC010.CNPJ);
            IEnumerable<RegistroC405> registrosC405;
            IEnumerable<RegistroC481> registrosC481;
            IEnumerable<RegistroC485> registrosC485;

            foreach (RegistroC400 regC400 in registrosC400)
            {
                this.UpdateStatusAsynchronousExecution("Gerando Registro C400");
                DadosArquivoPisCofinsService.PersistirRegistro(regC400);

                registrosC405 = CuponsFiscaisService
                    .GetRegistrosC405(regC010.CNPJ, regC400.PK_ECF);
                foreach (RegistroC405 regC405 in registrosC405)
                {
                    this.UpdateStatusAsynchronousExecution("Gerando Registro C405");
                    DadosArquivoPisCofinsService.PersistirRegistro(regC405);

                    registrosC481 = CuponsFiscaisService.GetRegistrosC481(
                        regC010.CNPJ, regC400.PK_ECF, regC405.DT_DOC.Value);
                    foreach (RegistroC481 regC481 in registrosC481)
                    {
                        this.UpdateStatusAsynchronousExecution("Gerando Registro C481");
                        DadosArquivoPisCofinsService.PersistirRegistro(regC481);

                        this.ProcessarProduto(regC481.COD_ITEM, regC010.CD_EMP);
                    }

                    registrosC485 = CuponsFiscaisService.GetRegistrosC485(
                        regC010.CNPJ, regC400.PK_ECF, regC405.DT_DOC.Value);
                    foreach (RegistroC485 regC485 in registrosC485)
                    {
                        this.UpdateStatusAsynchronousExecution("Gerando Registro C485");
                        DadosArquivoPisCofinsService.PersistirRegistro(regC485);

                        this.ProcessarProduto(regC485.COD_ITEM, regC010.CD_EMP);
                    }
                }
            }
        }
        private void ProcessarNotasFiscaisMercadorias(RegistroC010 regC010)
        {
            IEnumerable<RegistroC100> registrosC100 =
                NotasFiscaisMercadoriasService.GetRegistrosC100(regC010.CNPJ, regC010.CD_EMP);
            foreach (RegistroC100 regC100 in registrosC100)
            {
                this.UpdateStatusAsynchronousExecution("Gerando Registro C100");
                DadosArquivoPisCofinsService.PersistirRegistro(regC100);

                // Processa informações do cliente ou fornecedor vinculado a uma nota fiscal
                this.ProcessarParticipante(regC100.COD_PART, regC010.CD_EMP);

                if (regC100.ST_DOC_CANCELADO != "S") // Não persiste registros filhos caso haja cancelamento
                    this.ProcessarDetalhesNotasFiscaisMercadorias(regC100, regC010.CD_EMP);
            }
        }