public function getBoletosAtualizados($CodArquivo) {
	$sql = "SELECT
		EMP.NOME_FANTASIA AS CLIENTE,
		CR2.F_LANCA_CR2_ID AS NUM_BOLETO,
		IDENTIFICACAO.NOME_OCORRENCIA
		FROM F_SITUACAO_BOLETO_RETORNO RETORNO
		INNER JOIN F_CNAB_OCORRENCIA IDENTIFICACAO ON (IDENTIFICACAO.CODIGO_OCORRENCIA = RETORNO.CODIGO_OCORRENCIA)
		INNER JOIN F_LANCA_CR2 CR2 ON (RETORNO.F_LANCA_CR2_ID = CR2.F_LANCA_CR2_ID)
		INNER JOIN F_LANCA_CR CR ON (CR2.F_LANCA_CR_ID = CR.F_LANCA_CR_ID)
		INNER JOIN EMPRESA EMP ON (CR.EMPRESA_ID = EMP.EMPRESA_ID)
		WHERE RETORNO.CODIGO_ARQUIVO = $CodArquivo";

	$sql = parent::execute_query($sql);

	$ListaBoletosAtualizados = array();
	while ($linha = parent::criaObjetoConsulta($sql)){
	    $BoletoAtualizado = new ModelRetorno();
	    $BoletoAtualizado->setCliente($linha->CLIENTE);
	    $BoletoAtualizado->setNumBoleto($linha->NUM_BOLETO);
	    $BoletoAtualizado->setStatusBoleto($linha->NOME_OCORRENCIA);
	    array_push($ListaBoletosAtualizados, $BoletoAtualizado);
	}
	return $ListaBoletosAtualizados;
    }
    public function AtualizaLancamentos() {

	$Bd = new ModelRetorno();
	$identificacao = 1;

	$cont = 1;
	if ($this->getAquivo()) {
	    //Abre o arquivo
	    $handle = @fopen($this->getAquivo(), "r");

	    while (!feof($handle)){

		$buffer = fgets($handle, 4096);

		//Verifica se é a primeira linha do arquivo
		if ($cont == 1) {
		    $codigo_retorno = str_replace(" ", "", substr($buffer, 109, 5));
		    $codigo_empresa = ltrim(substr($buffer, 26, 20), 0);

		    if (!$Bd->VerificaArquivoPertenceConta($codigo_empresa)) {
			return $this->setMotivoErro("Arquivo não pertence a nenhuma conta cadastrada");
		    }

		    //Apaga todas as informações referente ao arquivo processadas anteriormente
		    if (!parent::DeleteProcessamentosAnteriores($codigo_retorno, $this->getTransacaoAtiva())) {
			return $this->setMotivoErro("Não foi possível localizar dados outros processamentos referente a esse arquivo");
		    } else {
			if (!parent::DeleteBaixaAnterior($codigo_retorno, $this->getTransacaoAtiva())) {
			    return $this->setMotivoErro("Não foi possível atualizar os lançamento processados anterioremente");
			}
		    }
		} else {
		    //Identifica todas as posições do arquivo

		    $identificacao = substr($buffer, 0, 1);     //001 a 001  Identificação do Registro
		    $inscricao_empresa = substr($buffer, 01, 02);   //002 a 003  Tipo de Inscrição Empresa
		    $cpf_cnpj = substr($buffer, 03, 14);   //004 a 017  CNPJ/CPF
		    $zeros_1 = substr($buffer, 17, 03);   //018 a 020  Zeros
		    $identificacao_empresa = substr($buffer, 20, 37);   //031 a 037  Identificação da Empresa Cedente no Banco
		    $numero_controle_partici = substr($buffer, 37, 25);   //038 a 062  Nº Controle do Participante
		    $zeros_2 = substr($buffer, 62, 08);   //063 a 070  Zeros
		    $identificacao_titulo = substr($buffer, 70, 12);   //071 a 082 (*) Identificação do Título no Banco
		    $uso_banco1 = substr($buffer, 82, 10);   //083 a 092  Uso do Banco
		    $uso_banco2 = substr($buffer, 91, 12);   //093 a 104  Uso do Banco
		    $indicador_rateio = substr($buffer, 103, 1);   //105 a 105  Indicador de Rateio Crédito
		    $zeros3 = substr($buffer, 105, 2);   //106 a 107  Zeros
		    $carteira = substr($buffer, 107, 1);   //108 a 108  Carteira
		    $identificao_ocorrencia = substr($buffer, 108, 2);   //109 a 110  Identificação de Ocorrência
		    $data_ocorrencia_banco = substr($buffer, 110, 6);   //111 a 116  Data Ocorrência no Banco
		    $numero_documento = substr($buffer, 116, 10);  //117 a 126  Número do Documento
		    $id_titulo_banco = substr($buffer, 126, 20);  //127 a 146 (*) Identificação do Título no Banco
		    $data_vencimento = substr($buffer, 146, 6);   //147 a 152  Data Vencimento do Título
		    $valor_titulo = substr($buffer, 154, 13);  //153 a 165  Valor do Título
		    $banco_cobrador = substr($buffer, 165, 3);   //166 a 168  Banco Cobrador
		    $agencia_cobradora = substr($buffer, 168, 5);   //169 a 173  Agência Cobradora
		    $especie_titulos = substr($buffer, 173, 2);   //174 a 175  Espécie do Título
		    $despesa_confirmacao = substr($buffer, 175, 13);  //176 a 188  Despesas de cobrança para os Códigos de Ocorrência / 02 - Entrada Confirmada / 28 - Débito de Tarifas
		    $custas_protesto = substr($buffer, 188, 13);  //189 a 201  Outras despesas Custas de Protesto
		    $juros_atraso = substr($buffer, 201, 13);  //202 a 214  Juros Operação em Atraso
		    $iof_devido = substr($buffer, 214, 13);  //215 a 227  IOF Devido
		    $abatimento_titulo = substr($buffer, 227, 13);  //228 a 240  Abatimento Concedido sobre o Título
		    $desconto_concedido = substr($buffer, 240, 13);  //241 a 253  Desconto Concedido
		    $valor_pago = substr($buffer, 253, 13);  //254 a 266  Valor Pago
		    $juros_mora = substr($buffer, 266, 13);  //267 a 279  Juros de Mora
		    $outros_creditos = substr($buffer, 279, 13);  //280 a 292  Outros Créditos
		    $brancos_1 = substr($buffer, 292, 2);   //293 a 294  Brancos
		    $confirmacao_protesto = substr($buffer, 294, 1);   //295 a 295  Motivo do Código de Ocorrência 19 (A – Aceito / D – Desprezado)
		    $data_credito = substr($buffer, 295, 6);   //296 a 301  Data do Crédito
		    $brancos_2 = substr($buffer, 301, 17);  //302 a 318  Brancos
		    $motivo_rejeicao = str_replace(" ", "", substr($buffer, 318, 10));  //319 a 328  Motivos das Rejeições para os Códigos de Ocorrência da Posição 109 a 110
		    $brancos_3 = substr($buffer, 328, 66);  //329 a 394  Brancos
		    $sequencial = substr($buffer, 394, 6);   //395 a 400  Seqüencial de Registro

		    if ($cont > 1) {
			//Recupera as informações necessárias para atualizar os boletos
			$valor_pago_formatado = $valor_pago > 0 ? $this->formata_inteiro_moeda(ltrim($valor_pago, 0)) : '0.00';
			$despesa_registro = $despesa_confirmacao > '0' ? $this->formata_inteiro_moeda(ltrim($despesa_confirmacao, 0)) : '0.00';
			$outras_despesas = $custas_protesto > 0 ? $this->formata_inteiro_moeda(ltrim($custas_protesto, 0)) : '0.00';
			$valor_multa = $juros_atraso > 0 ? $this->formata_inteiro_moeda(ltrim($juros_atraso, 0)) : '0.00';
			$valor_mora = $juros_mora > 0 ? $this->formata_inteiro_moeda(ltrim($juros_mora, 0)) : '0.00';
			$ValorDesconto = $desconto_concedido > 0 ? $this->formata_inteiro_moeda(ltrim($desconto_concedido, 0)) : '0.00';
			$data_pagamento = $this->data_pagamento($data_ocorrencia_banco);
			$TotalAcrescimosPagamento = $valor_multa + $valor_mora;
			$TotalAcrescimosPagamento > 0 ? $TotalAcrescimosPagamento : '0.00';
		    }
		    //Verifica se não é a última linha do arquivo
		    if ($identificacao == 1) {

			//Caso o título foi emitido sem registro, o código do mesmo será localizado na posição 071 a 082
			//No caso do Bradesco a posição caso o título não tenha registro, o código retornado na posição 109 a 110 é 17,
			//Caso o título tenha sido registrado, será retornado o código 06
			if ($identificao_ocorrencia == 17) {
			    $CodigoBoleto = substr(ltrim($id_titulo_banco, 0), 0, strlen(ltrim($id_titulo_banco, 0)) - 1);
			} elseif ($identificao_ocorrencia == 06) {
			    $CodigoBoleto = trim($numero_documento);
			} else {
			    $CodigoBoleto = trim($numero_documento);
			}

			//Antes de fazer as alterações, verifica o boleto do retorno encontra-se na base de dados

			if ($CodigoBoleto == parent::VerificaIntegridadeLancamento($CodigoBoleto)) {

			    //Recupera a data de vencimento do título
			    $dataVencimento = parent::DataVencimentoBoleto($CodigoBoleto);
			    //Recupera o código do registro pai
			    $CodigoRegistroPai = parent::CodigoRegistroPai($CodigoBoleto);

			    //Caso o boleto tenha sido pago, efetua a baixa do mesmo
			    if ($valor_pago_formatado > 0) {
				if (!parent::EfetuaRecebimentoBoletos($CodigoRegistroPai, $TotalAcrescimosPagamento, $valor_pago_formatado, $ValorDesconto, $this->getIdUsuario(), $data_pagamento, "", $dataVencimento, false, $this->getTransacaoAtiva(), $codigo_retorno)) {
				    return $this->setMotivoErro("Não foi possível efetuar a baixa de algum lançamento, processo não concluído!");
				    break;
				}
			    }
			    //Recupera o código da conta corrente
			    $idConta = parent::CodigoContaCorrenteArquivo($codigo_empresa);

			    //Atualiza o retorno do banco
			    if (!parent::AtualizaSituacaoAtualRetorno($idConta, $identificao_ocorrencia, $CodigoBoleto, $motivo_rejeicao, $codigo_retorno, $data_pagamento, $despesa_registro, $outras_despesas, $valor_multa, $valor_mora, $this->getTransacaoAtiva())) {
				return $this->setMotivoErro("Não foi possível atualizar a situação do boleto, processo não concluído");
				break;
			    }
			}
		    }
		}
		$cont++;
	    }
	    //Caso consiga atualizar todos os títulos, atualiza as informações referente ao arquivo processado
	    $dataProcessamento = date('Y-m-d  H:i:s');
	    if (parent::AtualizaInformacoesProcessamento($dataProcessamento, $this->getAquivo(), $codigo_retorno, $this->getIdUsuario(), $this->getTransacaoAtiva())) {
		if (parent::finalizaTransacao($this->getTransacaoAtiva(), true)) {
		    return $this->setStatusProcessamento(true);
		} else {
		    if (parent::finalizaTransacao($this->getTransacaoAtiva(), false)) {
			return $this->setMotivoErro("Não foi possível atualizar as informações do arquivo");
		    }
		}
	    } else {
		$this->setMotivoErro("Não foi possível concluir a transação");
	    }
	} else {
	    $this->setMotivoErro("Nenhum arquivo encontrado");
	}
	fclose($handle);
    }