Beispiel #1
0
        /// <summary>
        /// Consulta o cadastro de contribuintes do ICMS da unidade federada.
        /// </summary>
        public static string ConsultaSitCadastroContribuinte(string uf, string cpfCnpj)
        {
            if (string.IsNullOrEmpty(uf) || string.IsNullOrEmpty(cpfCnpj))
            {
                return("Contribuinte não encontrado.");
            }

            #region Monta XML

            XmlDocument xmlConsCad = new XmlDocument();

            XmlNode declarationNode = xmlConsCad.CreateXmlDeclaration("1.0", "UTF-8", null);
            xmlConsCad.AppendChild(declarationNode);

            XmlElement consCad = xmlConsCad.CreateElement("ConsCad");
            consCad.SetAttribute("versao", ConfigNFe.VersaoConsCad);
            consCad.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe");
            xmlConsCad.AppendChild(consCad);

            XmlElement infCons = xmlConsCad.CreateElement("infCons");
            consCad.AppendChild(infCons);

            ManipulacaoXml.SetNode(xmlConsCad, infCons, "xServ", "CONS-CAD");
            ManipulacaoXml.SetNode(xmlConsCad, infCons, "UF", uf);

            cpfCnpj = Formatacoes.LimpaCpfCnpj(cpfCnpj);

            if (cpfCnpj.Length == 11)
            {
                ManipulacaoXml.SetNode(xmlConsCad, infCons, "CPF", cpfCnpj);
            }
            else
            {
                ManipulacaoXml.SetNode(xmlConsCad, infCons, "CNPJ", cpfCnpj);
            }

            #endregion

            // Salva o callback padrão do WebService
            System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback;

            XmlNode xmlRetorno = null;

            try
            {
                // Altera o callback de validação do WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error)
                {
                    // Verifica se a data do certificado é válida
                    DateTime beginDate   = DateTime.Parse(cert.GetEffectiveDateString());
                    DateTime endDate     = DateTime.Parse(cert.GetExpirationDateString());
                    bool     isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate);

                    // Retorna o resultado da função
                    return(isDateValid);
                };

                // Envia o arquivo e recebe o retorno.
                xmlRetorno = EnviaXML.ObterXmlConsultaCadastroContribuinte(uf, xmlConsCad);
            }
            catch (Exception ex)
            {
                throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao chamar WebService.", ex));
            }
            finally
            {
                // Restaura o callback padrão para o WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = callback;
            }

            if (xmlRetorno == null)
            {
                return("Falha ao comunicar com webservice da SEFAZ.");
            }

            XmlDocument xmlDocRetorno = new XmlDocument();
            xmlDocRetorno.ImportNode(xmlRetorno, true);

            XmlNamespaceManager nMgr = new XmlNamespaceManager(xmlDocRetorno.NameTable);
            nMgr.AddNamespace("nfe", "http://www.portalfiscal.inf.br/nfe");

            XmlNode infoCons  = xmlRetorno.SelectSingleNode("//nfe:infCons", nMgr);
            var     codStatus = infoCons?["cStat"]?.InnerText;

            var retorno = string.Empty;
            if (codStatus == "111" || codStatus == "112")
            {
                retorno += "Consulta Situação do Contribuinte no Sintegra\n\n";
                retorno += "Situação: ";

                if (infoCons["infCad"]["cSit"].InnerText == "1")
                {
                    retorno += "Habilitado.";
                }
                else
                {
                    retorno += "Não Habilitado.";
                }
            }
            else
            {
                retorno += "Falha na Consulta Situação do Contribuinte no Sintegra\n\n";
                retorno += "Código: " + codStatus + "\n";
                retorno += infoCons?["xMotivo"]?.InnerText;
            }

            ClienteDAO.Instance.AtualizaUltimaConsultaSintegra(cpfCnpj);

            return(retorno);
        }
Beispiel #2
0
        private static string ConsultaSitNFCe(NotaFiscal nf)
        {
            #region Monta XML

            XmlDocument xmlConsSitNFe   = new XmlDocument();
            XmlNode     declarationNode = xmlConsSitNFe.CreateXmlDeclaration("1.0", "UTF-8", null);
            xmlConsSitNFe.AppendChild(declarationNode);

            XmlElement consSitNFe = xmlConsSitNFe.CreateElement("consSitNFe");
            consSitNFe.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe");
            consSitNFe.SetAttribute("versao", ConfigNFe.VersaoConsulta);
            xmlConsSitNFe.AppendChild(consSitNFe);

            ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "tpAmb", ((int)ConfigNFe.TipoAmbiente).ToString());
            ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "xServ", "CONSULTAR");
            ManipulacaoXml.SetNode(xmlConsSitNFe, consSitNFe, "chNFe", nf.ChaveAcesso);

            #endregion

            // Salva o callback padrão do WebService
            System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback;

            XmlNode xmlRetorno = null;

            try
            {
                // Altera o callback de validação do WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error)
                {
                    // Verifica se a data do certificado é válida
                    DateTime beginDate   = DateTime.Parse(cert.GetEffectiveDateString());
                    DateTime endDate     = DateTime.Parse(cert.GetExpirationDateString());
                    bool     isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate);

                    // Retorna o resultado da função
                    return(isDateValid);
                };

                // Envia o arquivo e recebe o retorno.
                xmlRetorno = EnviaXML.ObterXmlConsultaProtocoloNFCe(nf, xmlConsSitNFe);
            }
            catch (Exception ex)
            {
                LogNfDAO.Instance.NewLog(nf.IdNf, "Instaciar Webservice", 3, MensagemAlerta.FormatErrorMsg("Falha ao instanciar webservice.", ex));
                throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao chamar WebService.", ex));
            }
            finally
            {
                // Restaura o callback padrão para o WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = callback;
            }

            if (xmlRetorno == null)
            {
                throw new Exception("Falha ao comunicar com webservice da SEFAZ.");
            }

            var codStatus = xmlRetorno?["cStat"]?.InnerXml;

            // Executa ações de acordo com o retorno dado
            NotaFiscalDAO.Instance.RetornoConsSitNFe(nf.IdNf, xmlRetorno);

            if (codStatus == "100" || codStatus == "150") // NFe Autorizada
            {
                return("NFe está autorizada para uso.");
            }
            else // NFe rejeitada
            {
                var msgErro = "Falha na consulta. ";

                if (codStatus == "215" || codStatus == "516" || codStatus == "517" || codStatus == "545")
                {
                    msgErro += "Mensagem de consulta inválida. ";
                }

                return($"{ msgErro }{ xmlRetorno?["cStat"]?.InnerXml } - { CustomizaMensagemRejeicao(nf.IdNf, xmlRetorno?["xMotivo"]?.InnerXml) }");
            }
        }
Beispiel #3
0
        /// <summary>
        /// Consulta situação do CTe
        /// </summary>
        /// <param name="idNf"></param>
        public static string ConsultaSitCTe(uint idCte)
        {
            ConhecimentoTransporte cte = ConhecimentoTransporteDAO.Instance.GetElement(idCte);

            #region Monta XML

            XmlDocument xmlConsSitCTe   = new XmlDocument();
            XmlNode     declarationNode = xmlConsSitCTe.CreateXmlDeclaration("1.0", "UTF-8", null);
            xmlConsSitCTe.AppendChild(declarationNode);

            XmlElement consSitCTe = xmlConsSitCTe.CreateElement("consSitCTe");
            consSitCTe.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/cte");
            consSitCTe.SetAttribute("versao", ConfigCTe.VersaoConsulta);
            xmlConsSitCTe.AppendChild(consSitCTe);

            ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "tpAmb", ((int)ConfigCTe.TipoAmbiente).ToString());
            ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "xServ", "CONSULTAR");
            ManipulacaoXml.SetNode(xmlConsSitCTe, consSitCTe, "chCTe", cte.ChaveAcesso);

            #endregion

            // Salva o callback padrão do WebService
            System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback;

            XmlNode xmlRetorno = null;

            try
            {
                // Altera o callback de validação do WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error)
                {
                    // Verifica se a data do certificado é válida
                    DateTime beginDate   = DateTime.Parse(cert.GetEffectiveDateString());
                    DateTime endDate     = DateTime.Parse(cert.GetExpirationDateString());
                    bool     isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate);

                    // Retorna o resultado da função
                    return(isDateValid);
                };

                #region Envia o arquivo e recebe o retorno

                var participante = ParticipanteCteDAO.Instance.GetParticipanteByIdCteTipo(cte.IdCte, (int)ParticipanteCte.TipoParticipanteEnum.Emitente);

                string uf = LojaDAO.Instance.GetElement(participante.IdLoja.Value).Uf.ToUpper();

                if (cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.Normal)
                {
                    if (ConfigCTe.TipoAmbiente == ConfigCTe.TipoAmbienteCte.Producao)
                    {
                        switch (uf)
                        {
                        case "MT":
                            xmlRetorno = GetWebService.PMTCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "MS":
                            xmlRetorno = GetWebService.PMSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "MG":
                            xmlRetorno = GetWebService.PMGCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "PR":
                            xmlRetorno = GetWebService.PPRCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "RS":
                            xmlRetorno = GetWebService.PRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "SP":
                            xmlRetorno = GetWebService.PSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AP":
                        case "PE":
                        case "RR":
                            xmlRetorno = GetWebService.PSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AC":
                        case "AL":
                        case "AM":
                        case "BA":
                        case "CE":
                        case "DF":
                        case "ES":
                        case "GO":
                        case "MA":
                        case "PA":
                        case "PB":
                        case "PI":
                        case "RJ":
                        case "RN":
                        case "RO":
                        case "SC":
                        case "SE":
                        case "TO":
                            xmlRetorno = GetWebService.PSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        }
                    }
                    else
                    {
                        switch (uf)
                        {
                        //case "MT":
                        //    xmlRetorno = GetWebService.HMTCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        case "MS":
                            xmlRetorno = GetWebService.HMSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "MG":
                            xmlRetorno = GetWebService.HMGCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "PR":
                            xmlRetorno = GetWebService.HPRCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "RS":
                            xmlRetorno = GetWebService.HRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "SP":
                            xmlRetorno = GetWebService.HSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AP":
                        case "PE":
                        case "RR":
                            xmlRetorno = GetWebService.HSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AC":
                        case "AL":
                        case "AM":
                        case "BA":
                        case "CE":
                        case "DF":
                        case "ES":
                        case "GO":
                        case "MA":
                        case "PA":
                        case "PB":
                        case "PI":
                        case "RJ":
                        case "RN":
                        case "RO":
                        case "SC":
                        case "SE":
                        case "TO":
                            xmlRetorno = GetWebService.HSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        }
                    }
                }
                else if (cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.AutorizacaoSvcRs ||
                         cte.TipoEmissao == (int)Glass.Data.Model.Cte.ConhecimentoTransporte.TipoEmissaoEnum.AutorizacaoSvcSp)
                {
                    if (ConfigCTe.TipoAmbiente == ConfigCTe.TipoAmbienteCte.Producao)
                    {
                        switch (uf)
                        {
                        case "AP":
                        case "MT":
                        case "MS":
                        case "PE":
                        case "RR":
                        case "SP":
                            xmlRetorno = GetWebService.PSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AC":
                        case "AL":
                        case "AM":
                        case "BA":
                        case "CE":
                        case "DF":
                        case "ES":
                        case "GO":
                        case "MA":
                        case "MG":
                        case "PA":
                        case "PB":
                        case "PI":
                        case "PR":
                        case "RJ":
                        case "RN":
                        case "RO":
                        case "RS":
                        case "SC":
                        case "SE":
                        case "TO":
                            xmlRetorno = GetWebService.PSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        }
                    }
                    else
                    {
                        switch (uf)
                        {
                        case "AP":
                        case "MT":
                        case "MS":
                        case "PE":
                        case "RR":
                        case "SP":
                            xmlRetorno = GetWebService.HSVRSCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;

                        case "AC":
                        case "AL":
                        case "AM":
                        case "BA":
                        case "CE":
                        case "DF":
                        case "ES":
                        case "GO":
                        case "MA":
                        case "MG":
                        case "PA":
                        case "PB":
                        case "PI":
                        case "PR":
                        case "RJ":
                        case "RN":
                        case "RO":
                        case "RS":
                        case "SC":
                        case "SE":
                        case "TO":
                            xmlRetorno = GetWebService.HSVSPCTeConsulta(cte, null).cteConsultaCT(xmlConsSitCTe); break;
                        }
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao chamar WebService.", ex));
            }
            finally
            {
                // Restaura o callback padrão para o WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = callback;
            }

            if (xmlRetorno == null)
            {
                throw new Exception("Falha ao comunicar com webservice da SEFAZ.");
            }

            string codStatus = xmlRetorno["cStat"].InnerXml;

            // Executa ações de acordo com o retorno dado
            ConhecimentoTransporteDAO.Instance.RetornoConsSitCTe(idCte, xmlRetorno);

            if (codStatus == "100" || codStatus == "150") // CTe Autorizado
            {
                return("CTe está autorizada para uso.");
            }
            else // CTe rejeitado
            {
                string msgErro = "Falha na consulta. ";

                if (codStatus == "215" || codStatus == "516" || codStatus == "517" || codStatus == "545")
                {
                    msgErro += "Mensagem de consulta inválida. ";
                }

                return(msgErro + xmlRetorno["cStat"].InnerXml + " - " + CustomizaMensagemRejeicao(idCte, xmlRetorno["xMotivo"].InnerXml));
            }
        }
Beispiel #4
0
        /// <summary>
        /// Consulta situação do MDFe
        /// </summary>
        /// <param name="idManifestoEletronico"></param>
        public static string ConsultaSitMDFe(int idManifestoEletronico)
        {
            // Busca dados do Manifesto Eletronico
            var mdfe = ManifestoEletronicoDAO.Instance.ObterManifestoEletronicoPeloId(idManifestoEletronico);

            #region Monta XML

            XmlDocument xmlConsSitMDFe  = new XmlDocument();
            XmlNode     declarationNode = xmlConsSitMDFe.CreateXmlDeclaration("1.0", "UTF-8", null);
            xmlConsSitMDFe.AppendChild(declarationNode);

            XmlElement consSitMDFe = xmlConsSitMDFe.CreateElement("consSitMDFe");
            consSitMDFe.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/mdfe");
            consSitMDFe.SetAttribute("versao", ConfigMDFe.VersaoConsulta);
            xmlConsSitMDFe.AppendChild(consSitMDFe);

            ManipulacaoXml.SetNode(xmlConsSitMDFe, consSitMDFe, "tpAmb", ((int)ConfigMDFe.TipoAmbiente).ToString());
            ManipulacaoXml.SetNode(xmlConsSitMDFe, consSitMDFe, "xServ", "CONSULTAR");
            ManipulacaoXml.SetNode(xmlConsSitMDFe, consSitMDFe, "chMDFe", mdfe.ChaveAcesso);

            #endregion

            #region Valida XML

            //try
            //{
            //    ValidaXML.Validar(xmlConsSitMDFe, ValidaXML.TipoArquivoXml.ConsultaSituacaoMDFe);
            //}
            //catch (Exception ex)
            //{
            //    throw new Exception("XML inconsistente." + ex.Message);
            //}

            #endregion

            // Salva o callback padrão do WebService
            System.Net.Security.RemoteCertificateValidationCallback callback = System.Net.ServicePointManager.ServerCertificateValidationCallback;

            XmlNode xmlRetorno = null;

            try
            {
                // Altera o callback de validação do WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate(object sender, System.Security.Cryptography.X509Certificates.X509Certificate cert, System.Security.Cryptography.X509Certificates.X509Chain chain, System.Net.Security.SslPolicyErrors error)
                {
                    // Verifica se a data do certificado é válida
                    DateTime beginDate   = DateTime.Parse(cert.GetEffectiveDateString());
                    DateTime endDate     = DateTime.Parse(cert.GetExpirationDateString());
                    bool     isDateValid = (DateTime.Now >= beginDate) && (DateTime.Now <= endDate);

                    // Retorna o resultado da função
                    return(isDateValid);
                };

                #region Envia o arquivo e recebe o retorno

                if (mdfe.TipoEmissao == Glass.Data.Model.TipoEmissao.Normal)
                {
                    if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao)
                    {
                        xmlRetorno = GetWebService.PSVRSMDFeConsulta(mdfe, null).mdfeConsultaMDF(xmlConsSitMDFe);
                    }
                    // TipoAmbienteMDFe.Homologacao
                    else
                    {
                        xmlRetorno = GetWebService.HSVRSMDFeConsulta(mdfe, null).mdfeConsultaMDF(xmlConsSitMDFe);
                    }
                }
                // TipoEmissao.Contingencia
                else
                {
                    if (ConfigMDFe.TipoAmbiente == ConfigMDFe.TipoAmbienteMDFe.Producao)
                    {
                        xmlRetorno = GetWebService.PSVRSMDFeConsulta(mdfe, null).mdfeConsultaMDF(xmlConsSitMDFe);
                    }
                    // TipoAmbienteMDFe.Homologacao
                    else
                    {
                        xmlRetorno = GetWebService.HSVRSMDFeConsulta(mdfe, null).mdfeConsultaMDF(xmlConsSitMDFe);
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {
                throw new Exception(Glass.MensagemAlerta.FormatErrorMsg("Falha ao chamar WebService.", ex));
            }
            finally
            {
                // Restaura o callback padrão para o WebService
                System.Net.ServicePointManager.ServerCertificateValidationCallback = callback;
            }

            // Executa ações de acordo com o retorno
            return(ManifestoEletronicoDAO.Instance.RetornoConsSitMDFe(idManifestoEletronico, xmlRetorno));
        }
Beispiel #5
0
        // TODO TESTE GerarCartaCorrecao
        private XmlDocument GeraXmlCartaCorrecao(uint idCarta, bool preVisualizar)
        {
            CartaCorrecao obj = GetElement(idCarta);

            NotaFiscal nf = NotaFiscalDAO.Instance.GetElement(obj.IdNf);

            XmlDocument doc = new XmlDocument();

            XmlNode declarationNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);

            doc.AppendChild(declarationNode);

            XmlElement evento = doc.CreateElement("evento");

            evento.SetAttribute("versao", "1.00");
            evento.SetAttribute("xmlns", "http://www.portalfiscal.inf.br/nfe");
            doc.AppendChild(evento);

            XmlElement infEvento = doc.CreateElement("infEvento");

            //Identificador da TAG a ser assinada, a regra de formação
            //do Id é:
            //“ID” + tpEvento +  chave da NF-e + nSeqEvento
            infEvento.SetAttribute("Id", obj.IdInfEvento);
            evento.AppendChild(infEvento);

            // Código do órgão de recepção do Evento. Utilizar a Tabela
            // do IBGE, utilizar 90 para identificar o Ambiente Nacional.
            XmlElement cOrgao = doc.CreateElement("cOrgao");

            cOrgao.InnerText = Configuracoes.FiscalConfig.NotaFiscalConfig.ContingenciaNFe == DataSources.TipoContingenciaNFe.NaoUtilizar ? obj.Orgao.ToString() : "90";
            infEvento.AppendChild(cOrgao);

            // Identificação do Amb
            // 1 - Produção
            // 2 – Homologação
            XmlElement tpAmb = doc.CreateElement("tpAmb");

            tpAmb.InnerText = obj.TipoAmbiente.ToString();
            infEvento.AppendChild(tpAmb);

            if (!string.IsNullOrEmpty(obj.CPF))
            {
                XmlElement CPF = doc.CreateElement("CPF");
                CPF.InnerText = obj.CPF.ToString().PadLeft(11, '0');
                infEvento.AppendChild(CPF);
            }
            else if (!string.IsNullOrEmpty(obj.CNPJ))
            {
                XmlElement CNPJ = doc.CreateElement("CNPJ");
                CNPJ.InnerText = obj.CNPJ.ToString().PadLeft(14, '0');
                infEvento.AppendChild(CNPJ);
            }

            XmlElement chNFe = doc.CreateElement("chNFe");

            chNFe.InnerText = obj.ChaveNFe;
            infEvento.AppendChild(chNFe);

            XmlElement dhEvento = doc.CreateElement("dhEvento");

            dhEvento.InnerText = DateTime.Now.AddMinutes(-10).ToString("yyyy-MM-ddTHH:mm:ssK");
            infEvento.AppendChild(dhEvento);

            //Código do de evento = 110110
            XmlElement tpEvento = doc.CreateElement("tpEvento");

            tpEvento.InnerText = obj.TipoEvento.ToString();
            infEvento.AppendChild(tpEvento);

            XmlElement nSeqEvento = doc.CreateElement("nSeqEvento");

            nSeqEvento.InnerText = obj.NumeroSequencialEvento.ToString();
            infEvento.AppendChild(nSeqEvento);

            XmlElement verEvento = doc.CreateElement("verEvento");

            verEvento.InnerText = obj.VersaoEvento;
            infEvento.AppendChild(verEvento);

            XmlElement detEvento = doc.CreateElement("detEvento");

            detEvento.SetAttribute("versao", "1.00");

            ManipulacaoXml.SetNode(doc, detEvento, "descEvento", obj.DescricaoEvento);
            ManipulacaoXml.SetNode(doc, detEvento, "xCorrecao", obj.Correcao);
            ManipulacaoXml.SetNode(doc, detEvento, "xCondUso", obj.CondicaoUso);

            infEvento.AppendChild(detEvento);

            #region Assina CCe

            try
            {
                if (!preVisualizar)
                {
                    MemoryStream stream = new MemoryStream();
                    doc.Save(stream);

                    using (stream)
                    {
                        // Classe responsável por assinar o xml da NFe
                        AssinaturaDigital AD = new AssinaturaDigital();

                        System.Security.Cryptography.X509Certificates.X509Certificate2 cert = Certificado.GetCertificado(nf.IdLoja.Value);

                        if (DateTime.Now > cert.NotAfter)
                        {
                            throw new Exception("O certificado digital cadastrado está vencido, insira um novo certificado para emitir esta nota. Data Venc.: " + cert.GetExpirationDateString());
                        }

                        int resultado = AD.Assinar(ref doc, "infEvento", cert);

                        if (resultado > 0)
                        {
                            throw new Exception(AD.mensagemResultado);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Falha ao assinar Carta de Correção." + ex.Message);
            }

            #endregion

            #region Valida XML

            try
            {
                if (!preVisualizar)
                {
                    ValidaXML.Validar(doc, ValidaXML.TipoArquivoXml.CCe);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("XML inconsistente." + ex.Message);
            }

            #endregion

            #region Salva arquivo XML da CCe

            try
            {
                string fileName = Utils.GetCartaCorrecaoXmlPath + doc["evento"]["infEvento"].GetAttribute("Id").Remove(0, 3) + "-cce.xml";

                if (File.Exists(fileName))
                {
                    File.Delete(fileName);
                }

                doc.Save(fileName);
            }
            catch (Exception ex)
            {
                throw new Exception("Falha ao salvar arquivo xml da CCe. " + ex.Message);
            }

            #endregion

            return(doc);
        }