Skip to content

Commit

Permalink
Ajustes para CTe 4.00 (#1454)
Browse files Browse the repository at this point in the history
* [CTe][-] CTE 4.0 não implementava URLs para QrCode

* [CTe]
[*] Configuração para ignorar validação dos schemas
[*] No envio, salvar em disco antes de validar os schemas, possiblitando encontrar problemas pós-assinatura/qrcode
  • Loading branch information
marcosgerene authored Oct 26, 2023
1 parent 16b46d0 commit 4816675
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 23 deletions.
3 changes: 3 additions & 0 deletions CTe.Classes/ConfiguracaoServico.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public ConfiguracaoServico()
{
ConfiguracaoCertificado = new ConfiguracaoCertificado();
TipoEmissao = tpEmis.teNormal;
IsValidaSchemas = true;
}

/// <summary>
Expand Down Expand Up @@ -177,6 +178,8 @@ public static ConfiguracaoServico Instancia

public tpEmis TipoEmissao { get; set; }

public bool IsValidaSchemas { get; set; }

public bool NaoSalvarXml()
{
return !IsSalvarXml;
Expand Down
1 change: 1 addition & 0 deletions CTe.Servicos/Recepcao/ServicoCTeRecepcao.cs
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ public retCTe CTeRecepcaoSincronoV4(CTeEletronico cte, ConfiguracaoServico confi
cte.infCte.ide.tpEmis = instanciaConfiguracao.TipoEmissao;
cte.Assina(instanciaConfiguracao);
cte.infCTeSupl = cte.QrCode(instanciaConfiguracao.X509Certificate2, Encoding.UTF8, instanciaConfiguracao.IsAdicionaQrCode, UrlHelper.ObterUrlQrCode(instanciaConfiguracao));
cte.SalvarXmlEmDisco(instanciaConfiguracao); //salva em disco antes de validas os schemas, facilitando encontrar possíveis erros
cte.ValidaSchema(instanciaConfiguracao);
cte.SalvarXmlEmDisco(instanciaConfiguracao);

Expand Down
50 changes: 27 additions & 23 deletions CTe.Utils/CTe/ExtCTe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -99,16 +99,20 @@ public static void ValidaSchema(this CteEletronica cte, ConfiguracaoServico conf

var xmlValidacao = cte.ObterXmlString();

var servicoInstancia = configuracaoServico ?? ConfiguracaoServico.Instancia;
if (!servicoInstancia.IsValidaSchemas)
return;

switch (cte.infCte.versao)
{
case versao.ve200:
Validador.Valida(xmlValidacao, "cte_v2.00.xsd", configuracaoServico);
Validador.Valida(xmlValidacao, "cte_v2.00.xsd", servicoInstancia);
break;
case versao.ve300:
Validador.Valida(xmlValidacao, "cte_v3.00.xsd", configuracaoServico);
Validador.Valida(xmlValidacao, "cte_v3.00.xsd", servicoInstancia);
break;
case versao.ve400:
Validador.Valida(xmlValidacao, "cte_v4.00.xsd", configuracaoServico);
Validador.Valida(xmlValidacao, "cte_v4.00.xsd", servicoInstancia);
break;
default:
throw new InvalidOperationException("Nos achamos um erro na hora de validar o schema, " +
Expand All @@ -125,104 +129,104 @@ public static void ValidaSchema(this CteEletronica cte, ConfiguracaoServico conf
case versaoModal.veM200:
if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo))
{
Validador.Valida(xmlModal, "cteModalAereo_v2.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalAereo_v2.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav))
{
Validador.Valida(xmlModal, "cteModalAquaviario_v2.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalAquaviario_v2.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto))
{
Validador.Valida(xmlModal, "cteModalDutoviario_v2.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalDutoviario_v2.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov))
{
Validador.Valida(xmlModal, "cteModalFerroviario_v2.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalFerroviario_v2.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo))
{
Validador.Valida(xmlModal, "cteModalRodoviario_v2.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalRodoviario_v2.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal))
{
Validador.Valida(xmlModal, "cteMultimodal_v2.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteMultimodal_v2.00.xsd", servicoInstancia);
}
break;
case versaoModal.veM300:
if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo))
{
Validador.Valida(xmlModal, "cteModalAereo_v3.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalAereo_v3.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav))
{
Validador.Valida(xmlModal, "cteModalAquaviario_v3.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalAquaviario_v3.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto))
{
Validador.Valida(xmlModal, "cteModalDutoviario_v3.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalDutoviario_v3.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov))
{
Validador.Valida(xmlModal, "cteModalFerroviario_v3.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalFerroviario_v3.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo))
{
Validador.Valida(xmlModal, "cteModalRodoviario_v3.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalRodoviario_v3.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal))
{
Validador.Valida(xmlModal, "cteMultimodal_v3.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteMultimodal_v3.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodoOS))
{
Validador.Valida(xmlModal, "cteModalRodoviarioOS_v3.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalRodoviarioOS_v3.00.xsd", servicoInstancia);
}
break;
case versaoModal.veM400:
if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aereo))
{
Validador.Valida(xmlModal, "cteModalAereo_v4.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalAereo_v4.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(aquav))
{
Validador.Valida(xmlModal, "cteModalAquaviario_v4.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalAquaviario_v4.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(duto))
{
Validador.Valida(xmlModal, "cteModalDutoviario_v4.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalDutoviario_v4.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(ferrov))
{
Validador.Valida(xmlModal, "cteModalFerroviario_v4.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalFerroviario_v4.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodo))
{
Validador.Valida(xmlModal, "cteModalRodoviario_v4.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalRodoviario_v4.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(multimodal))
{
Validador.Valida(xmlModal, "cteMultimodal_v4.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteMultimodal_v4.00.xsd", servicoInstancia);
}

if (cte.infCte.infCTeNorm.infModal.ContainerModal.GetType() == typeof(rodoOS))
{
Validador.Valida(xmlModal, "cteModalRodoviarioOS_v4.00.xsd", configuracaoServico);
Validador.Valida(xmlModal, "cteModalRodoviarioOS_v4.00.xsd", servicoInstancia);
}
break;
default:
Expand Down

0 comments on commit 4816675

Please sign in to comment.