/**
  * Prepara os dados para processar o arquivo do webservice
  *
  * @param string $sArquivo
  * @return bool
  * @throws Exception
  */
 public function preparaDados($sArquivo)
 {
     try {
         // Foi comentado o if de verificação pois estava ocorrendo um problema na emissão e retornava um arquivo em branco.
         // Somente em ambiente de desenvolvimento
         //if (APPLICATION_ENV == 'development') {
         $oDomDocument = new DOMDocument();
         $oDomDocument->loadXml($sArquivo);
         $oData = new Zend_Date();
         $this->sNomeArquivo = "/RecepcionarLote-{$oData->getTimestamp()}.xml";
         $this->sCaminhoArquivo = TEMP_PATH;
         /**
          * Verifica se o caminho do arquivo não existe recria a pasta
          */
         if (!file_exists($this->sCaminhoArquivo)) {
             mkdir($this->sCaminhoArquivo, 0777);
         }
         /**
          * Escreve os dados no arquivo
          */
         $this->sCaminhoNomeArquivo = $this->sCaminhoArquivo . $this->sNomeArquivo;
         $aArquivo = fopen($this->sCaminhoNomeArquivo, 'w');
         fputs($aArquivo, print_r($sArquivo, TRUE));
         fclose($aArquivo);
         //}
         $oValidacao = new DBSeller_Helper_Xml_AssinaturaDigital($sArquivo);
         /**
          * Validação digital do arquivo
          */
         if (!$oValidacao->validar()) {
             throw new Exception($oValidacao->getLastError());
         }
         $oUsuario = Administrativo_Model_Usuario::getByAttribute('cnpj', $oValidacao->getCnpj());
         if (!is_object($oUsuario)) {
             throw new Exception('Usuário contribuinte não existe!', 157);
         }
         /**
          * Busca usuário contribuinte através do usuário cadastrado
          */
         $aUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttributes(array('usuario' => $oUsuario->getId(), 'cnpj_cpf' => $oUsuario->getCnpj()));
         if (!is_object($aUsuarioContribuinte[0])) {
             throw new Exception('Usuário contribuinte não encontrado!', 160);
         }
         /**
          * Seta os dados do contribuinte
          */
         $this->oDadosUsuario = $oUsuario;
         $this->oContribuinte->sCpfCnpj = $aUsuarioContribuinte[0]->getCnpjCpf();
         $this->oContribuinte->iCodigoUsuario = $oUsuario->getId();
         $this->oContribuinte->iIdUsuarioContribuinte = $aUsuarioContribuinte[0]->getId();
         /**
          * Atualiza os dados do contribuinte na sessão
          */
         $oSessao = new Zend_Session_Namespace('nfse');
         $oSessao->contribuinte = Contribuinte_Model_Contribuinte::getById($this->oContribuinte->iIdUsuarioContribuinte);
         return TRUE;
     } catch (Exception $oErro) {
         throw new Exception($oErro->getMessage(), $oErro->getCode());
     }
 }
 /**
  * Valida a estrutura do XML informado
  * @param $sXml
  * @return mixed
  */
 private function validaXML($sXml)
 {
     $sNomeTempArquivo = TEMP_PATH . "/CancelarNfse-" . time() . ".xml";
     /* gravo o xml enviado */
     $fp = fopen($sNomeTempArquivo, "w");
     fwrite($fp, $sXml);
     fclose($fp);
     $oXml = simplexml_load_string($sXml);
     $oIdentificacaoNfse = NULL;
     /**
      * Verifica estrutura padrão do XML de envio
      */
     if (empty($oXml->CancelarNfseEnvio) || empty($oXml->CancelarNfseEnvio->Pedido)) {
         $this->adicionarInconsistencia('E160');
     } else {
         $oPedido = $oXml->CancelarNfseEnvio->Pedido;
         $oIdentificacaoNfse = $oPedido->InfPedidoCancelamento;
         $oAssinatura = $oPedido->Signature;
         /**
          * Verifica a tag do número da nota
          */
         if (empty($oIdentificacaoNfse->IdentificacaoNfse->Numero)) {
             $this->adicionarInconsistencia('E77');
         } else {
             if (strlen($oIdentificacaoNfse->IdentificacaoNfse->Numero) != 15) {
                 $this->adicionarInconsistencia('E160');
             }
         }
         /**
          * Verifica a tag do CNPJ
          */
         if (empty($oIdentificacaoNfse->IdentificacaoNfse->Cnpj)) {
             $this->adicionarInconsistencia('E46');
         }
         /**
          * Verifica a tag da inscricao municipal
          */
         if (empty($oIdentificacaoNfse->IdentificacaoNfse->InscricaoMunicipal)) {
             $this->adicionarInconsistencia('E40');
         }
         /**
          * Verifica a tag do código municipal
          */
         if (empty($oIdentificacaoNfse->IdentificacaoNfse->CodigoMunicipio)) {
             $this->adicionarInconsistencia('E64');
         }
         /**
          * Verifica a tag do motido de cancelamento
          */
         if (empty($oIdentificacaoNfse->CodigoCancelamento)) {
             $this->adicionarInconsistencia('E160');
         }
         /**
          * Validação digital do arquivo
          */
         if (!empty($oAssinatura)) {
             $oValidacao = new DBSeller_Helper_Xml_AssinaturaDigital($sXml);
             if (!$oValidacao->validar()) {
                 $this->adicionarInconsistencia('E1');
             }
         }
     }
     return $oIdentificacaoNfse;
 }