OpenAC-Net / OpenAC.Net.NFSe

Biblioteca para emissão e transmissão de NFSe.
MIT License
80 stars 63 forks source link

Arquivo de Schema não encontrado #144

Closed AlexandreBellas closed 2 years ago

AlexandreBellas commented 2 years ago

Boa tarde, pessoal!

Estou com um problema ao consultar notas de serviço de Americana com a biblioteca. Fiz o código abaixo para testar.

NFSe.OpenNFSe nfse = new NFSe.OpenNFSe();

string cnpj = "...";
string im = "...";

nfse.Configuracoes.PrestadorPadrao.CpfCnpj = cnpj;
nfse.Configuracoes.PrestadorPadrao.InscricaoMunicipal = im;
nfse.Configuracoes.WebServices.CodigoMunicipio = 3501608;
nfse.Configuracoes.Arquivos.PathSchemas = "/home/forfs/acx/interface-nfse/Schemas";

var inicio = new DateTime(2022, 9, 17);
var fim = new DateTime(2022, 10, 17);

var result = nfse.ConsultaNFSePeriodo(inicio, fim);

string json = JsonConvert.SerializeObject(result, Formatting.Indented);
Console.WriteLine(json);

Deixei os arquivos de schema dentro da pasta Schemas na raiz do projeto, como mostra o print abaixo. immagine

Após a execução, recebo o seguinte output:

{
  "Inicio": "2022-09-17T00:00:00",
  "Fim": "2022-10-17T00:00:00",
  "NumeroNFse": 0,
  "SerieNFse": "",
  "Pagina": 0,
  "ProximaPagina": 0,
  "CPFCNPJTomador": "",
  "IMTomador": "",
  "NomeIntermediario": "",
  "CPFCNPJIntermediario": "",
  "IMIntermediario": "",
  "Notas": null,
  "Sucesso": false,
  "Alertas": [],
  "Erros": [
    {
      "Codigo": "0",
      "Descricao": "Arquivo de Schema não encontrado.",
      "Correcao": null,
      "IdentificacaoRps": {
        "Numero": "",
        "Serie": "",
        "SeriePrestacao": null,
        "Tipo": 0,
        "DataEmissao": "0001-01-01T00:00:00"
      },
      "IdentificacaoNfse": {
        "Numero": "",
        "Chave": null,
        "DataEmissao": "0001-01-01T00:00:00",
        "ModeloNfse": null
      }
    }
  ],
  "XmlEnvio": "<ConsultarNfseEnvio xmlns=\"http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd\"><Prestador><Cnpj>31048335000103</Cnpj><InscricaoMunicipal>102120</InscricaoMunicipal></Prestador><PeriodoEmissao><DataInicial>2022-09-17</DataInicial><DataFinal>2022-10-17</DataFinal></PeriodoEmissao></ConsultarNfseEnvio>",
  "XmlRetorno": "",
  "EnvelopeEnvio": "",
  "EnvelopeRetorno": ""
}

Mesmo tirando a definição da variável nfse.Configuracoes.Arquivos.PathSchemas (a qual vai para o seu valor padrão /home/forfs/acx/interface-nfse/bin/Debug/net6.0/Schemas) e movendo a pasta de lugar, ainda assim recebo o mesmo erro.

Como posso prosseguir aqui? Obrigado

rftd commented 2 years ago

Não tem muito o que fazer, tem que colocar a pasta de schemas do servidor de acordo com o path informado. Se você informou o path "/home/forfs/acx/interface-nfse/Schemas" dentro desta pasta tem quer ter a Pasta do provedor e dentro da pasta os schemas e essa pasta tem que ser acessível para o programa.

AlexandreBellas commented 2 years ago

Perfeito. Fiz exatamente o que você disse e ainda assim houve este erro de schema não encontrado.

Inclusive, encontrei esta linha ao tentar entender o que o projeto executa por trás, além desta linha para entender como o projeto tenta ler o arquivo. Como estou usando o ProviderAmericana.cs, tenho Name = "Americana" e schema = "nfse.xsd". Dessa maneira, tentei replicar o comportamento das duas linhas assim:

nfse.Configuracoes.Arquivos.PathSchemas = "/home/forfs/acx/interface-nfse/Schemas";
string caminho = Path.Combine(nfse.Configuracoes.Arquivos.PathSchemas, "Americana", "nfse.xsd");

Console.WriteLine(caminho);
Console.WriteLine(File.Exists(caminho));

Como output de fato recebi true. No entanto, executando o projeto, aparentemente eu receberia um false. Executei novamente dando permissão 777 (estou no linux) e recebi o mesmo erro.

Você por gentileza poderia replicar por aí para entender se é um erro meu mesmo?

rftd commented 2 years ago

Esse erro ocorre no demo ? É possível reproduzir o mesmo no demo ?

AlexandreBellas commented 2 years ago

Não consegui testar o demo porque imagino que ele esteja configurado para ambiente Windows. :/

AlexandreBellas commented 2 years ago

Acabei de testar com o provedor Ginfes, e para esse provedor funcionou tudo certinho. Somente para Americana que não funcionou mesmo. Também fiz o teste no Windows, e deu o mesmo erro.

Reparando no XML de envio para Americana

<ConsultarNfseEnvio xmlns=\"http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd\">
  <Prestador>
    <Cnpj>31048335000103</Cnpj>
    <InscricaoMunicipal>102120</InscricaoMunicipal>
  </Prestador>
  <PeriodoEmissao>
    <DataInicial>2022-09-17</DataInicial>
    <DataFinal>2022-10-17</DataFinal>
  </PeriodoEmissao>
</ConsultarNfseEnvio>

ele usa como namespace a URL http://www.abrasf.org.br/ABRASF/arquivos/nfse.xsd, a qual acessando recebo o erro 404. Talvez seja este o problema?

Transis-Felipe commented 2 years ago

Eu também já sofri com esse problema de schema e no fim era pq faltava colocar copy local=true nas propriedades da dll

AlexandreBellas commented 2 years ago

@Transis-Felipe você sabe como colocar copy local=true no dotnet core? estou usando o vscode ao invés do visual studio

AlexandreBellas commented 2 years ago

fiz o seguinte:

Saberiam dizer qual foi o problema aqui?

AlexandreBellas commented 2 years ago

Pessoal, finalmente temos um desfecho para esta issue :smile:

Na postagem original, eu estava utilizando o pacote pelo Nuget, o qual aparentemente está desatualizado com a versão estável presente no GitHub (a disponível na branch main). Ao invés de utilizar o pacote, fiz o git clone em uma pasta aqui localmente e referenciei o arquivo .csproj do repositório dentro de meu projeto, assim como descrevi acima:

<ItemGroup>
  <ProjectReference Include="..\OpenAC.Net.NFSe\src\OpenAC.Net.NFSe\OpenAC.Net.NFSe.csproj" />
</ItemGroup>  

Porém, como houveram alguns erros no código da biblioteca (para consulta de NFSes ao município de Americana/SP), investiguei e solucionei eles com o PR #155, visto que a implementação da biblioteca se referia ao padrão anterior da cidade.

Uma sugestão poderia ser um tratamento melhor dos erros que ocorrem ao não conseguir completar uma requisição SOAP ao webservice da cidade. Posso criar um PR com uma sugestão de melhoria.

Fico no aguardo da revisão do PR #155 :pray: Agradeço a atenção dos que me auxiliaram até aqui