/**
  * Método que verifica a integridade dos valores informados nos arquivos
  * @return bool
  * @throws Exception
  */
 public function validacao()
 {
     // Verifica o contribuinte
     if (empty($this->oContribuinte)) {
         throw new Exception("Contribuinte não informado!");
     }
     $sCnpjContribuinte = $this->oContribuinte->getEntity()->getCnpjCpf();
     if (substr($sCnpjContribuinte, 0, 8) != $this->oDadosDesif->sCnpj) {
         throw new Exception('O contribuinte informado inválido!');
     }
     if (empty($this->oDadosDesif->sCompetenciaInicial) || empty($this->oDadosDesif->sCompetenciaFinal)) {
         throw new Exception('Informe a competencia do arquivo DES-IF!');
     }
     if (empty($this->oDadosDesif->sVersao)) {
         throw new Exception('Informe o código da versão do DES-IF!');
     }
     // Verifica a competencia informada (0000)
     $oImportacaoDesif = Contribuinte_Model_ImportacaoDesif::getByAttributes(array('competencia_inicial' => $this->oDadosDesif->sCompetenciaInicial, 'competencia_final' => $this->oDadosDesif->sCompetenciaFinal, 'contribuinte' => $this->oContribuinte->getEntity()));
     if (!empty($oImportacaoDesif)) {
         throw new Exception("A competencia de {$this->oDadosDesif->sCompetenciaInicial} à {$this->oDadosDesif->sCompetenciaFinal} já foi importada!");
     }
     if (empty($this->aDadosDesifContas)) {
         throw new Exception('Dados de conta(0100) estão incorretos!');
     }
     if (empty($this->aDadosDesifTarifas)) {
         throw new Exception('Dados de receitas(0430) estão incorretos!');
     }
     if (empty($this->aDadosDesifReceitas)) {
         throw new Exception('Dados de tarifas bancárias(0200) estão incorretos!');
     }
     // Verifica os campos das contas
     foreach ($this->aDadosDesifContas as $iLinha => $oDesifConta) {
         if (empty($oDesifConta->sConta)) {
             throw new Exception('Código da conta não informada na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifConta->sDescricaoConta)) {
             throw new Exception('Descrição da conta não informada na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifConta->sNome)) {
             throw new Exception('Nome da conta não informada na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifConta->sContaCosif)) {
             throw new Exception('Código Conta COS-IF não informada na linha ' . ($iLinha + 1) . '!');
         }
     }
     // Verifica campos das tarifas bancarias
     foreach ($this->aDadosDesifTarifas as $iLinha => $oDesifTarifas) {
         if (empty($oDesifTarifas->sDescricao)) {
             throw new Exception('Descrição da tarifa bancária não informada na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifTarifas->sConta)) {
             throw new Exception('Código da conta não informada na tarifa na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifTarifas->sTarifaConta)) {
             throw new Exception('Código da tarifa bancária não informada na linha ' . ($iLinha + 1) . '!');
         }
     }
     // Verifica os valores das receitas
     foreach ($this->aDadosDesifReceitas as $iLinha => $oDesifReceita) {
         // Verifica se a Inscrição Municipal informada no arquivo é igual ao contribuinte da sessão
         if ($oDesifReceita->iIm != $this->oContribuinte->getIm()) {
             throw new Exception('Inscrição municipal informadana é diferente do contribuinte logado na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifReceita->sConta)) {
             throw new Exception('Código da conta(Sub_Titu) não informada na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifReceita->sCodTribDesif)) {
             throw new Exception('Código de tributação DES-IF(Cod_Trib_DES-IF) não informado na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifReceita->fValrCredMens)) {
             throw new Exception('Valor total dos lançamentos a crédito(Valr_Cred_Mens) não informado na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifReceita->fValrDebtMens)) {
             throw new Exception('Valor total dos lançamentos a débito(Valr_Debt_Mens) não informado na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifReceita->fReceDecl)) {
             throw new Exception('Valor da receita tributável pelo ISSQN(Rece_Decl) não informado na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifReceita->fBaseCalc)) {
             throw new Exception('Valor da base de cálculo do ISSQN(Base_Calc) não informado na linha ' . ($iLinha + 1) . '!');
         }
         if (empty($oDesifReceita->fAliqIssqn)) {
             throw new Exception('Alíquota que se aplica à base de cálculo(Aliq_ISSQN) não informado na linha ' . ($iLinha + 1) . '!');
         }
     }
     return TRUE;
 }
 /**
  * @param Contribuinte_Model_Contribuinte $oContribuinte
  * @param                                 $iAno
  * @param                                 $iMes
  * @param null                            $fAliquota
  * @return object
  */
 public static function getTotalReceitasCompetencia(Contribuinte_Model_Contribuinte $oContribuinte, $iAno, $iMes, $fAliquota = NULL)
 {
     $aReceitasGuia = array();
     $aParametros = array('contribuinte' => $oContribuinte->getContribuintes(), 'competencia_inicial' => "{$iAno}{$iMes}");
     $aImportacaoDesif = Contribuinte_Model_ImportacaoDesif::getByAttributes($aParametros);
     /**
      * Verifica se retornou uma importacao desif
      */
     if (isset($aImportacaoDesif[0])) {
         $oImportacaoDesif = $aImportacaoDesif[0]->getEntity();
         $aReceitasGuia = Contribuinte_Model_ImportacaoDesif::getTotalReceitasGuia($oImportacaoDesif->getId(), TRUE, $fAliquota);
     }
     return (object) $aReceitasGuia;
 }