frones / nfe

Bibliotecas para geração, validação, assinatura e transmissão de XMLs da NFe em Go
Mozilla Public License 2.0
33 stars 11 forks source link

Consultar IE através do CNPJ #5

Closed eduardo-mior closed 2 years ago

eduardo-mior commented 3 years ago

Notei que o seu pacote possui uma função chamada Consulta que recebe uma struct. Gostaria de saber para que serve exatamente essa função, se é possível consultar uma IE através do CNPJ.

frones commented 3 years ago

Oi, Eduardo. Sim, vc pode consultar uma IE através do CNPJ usando essa função. Basicamente vc poderia usar a função assim:

    client, err := nfe.NewHTTPClient(arquivo_cert, arquivo_keyfile)
    if err != nil {
        //tratar erro
        return
    }
    ret, _, err := nfe.ConsultaCad("", cnpj, "", codigo_uf_ibge, Producao/Homologacao, client)
    if err != nil {
        //tratar erro
        return
    }

O código da UF (IBGE) aqui é importante porque essa lib faz a consulta no webservice da UF de origem do CNPJ pra buscar as informações.

O retorno vai ser do tipo RetConsCad e você pode ler o array InfCad para buscar a informação que precisa. Atenção que um mesmo CNPJ pode ter vários IEs nessa lista (por exemplo, se IEs anteriores foram canceladas).

eduardo-mior commented 3 years ago

@frones incrível, era exatamente isso que eu precisava! Porém fiz exatamente isso e não funcionou, retornou um erro código 999 da sefaz (não sei se é na sefaz que consulta, estou presumindo pois não entendo muito disso) e retornou um XML e uma mensagem de erro genérico, amanhã eu mando mais detalhes.

Existe alguma outra peculiaridade nessa consulta? O CNPJ precisa estar formatado com os . e / ou não? Amanhã eu mando meu código e o retorno do erro.

eduardo-mior commented 3 years ago

@frones revisei aqui meu código e estava faltando passar a versão que é "2.00", também testei aquele código ali que vc tinha passado e funcionou também. Irei fazer mais uns testes essa semana, assim que eu finalizar os testes eu finalizo a Issue aqui.

eduardo-mior commented 3 years ago

@frones fiz alguns testes e pelo que notei quando retorna duas ou mais IE o pacote acaba "limpando" e só retorna uma.

Ao consultar o CPF 97300179053 no estado do RS, deveria retornar 2 IEs, porém só retorna 1, pelo que analisei nos códigos fontes isso acontece na linha 122 do arquivo cadastro.go

image

Como você pode ver, no primeiro print é exibido o XML Cru com as 2 IEs, no segundo print é exibido o XML Cru com apenas 1 IE

frones commented 3 years ago

@eduardo-mior esse código serve para normalizar o formato da data que em alguma UF específica (não lembro qual) tem timezone em um campo onde todas as outras é apenas um civilDate.

Esse .* foi uma péssima estratégia de regex que eu mal acredito que usei kkkk Vou submeter um fix esse fds, consegue me ajudar a testar?

Muito obrigado por esse debug!

eduardo-mior commented 3 years ago

Sim eu imaginei que esse regexp fosse para resolver esse problema, pelo que vi existem 3 formatos de datas diferentes que são retornados, varia de estado pra estado. Assim que eu puder eu testo seu fix. Pretendo aprofundar mais meus testes futuramente, e irei reportar problemas na medida que eu encontrar.

frones commented 3 years ago

Eduardo, fiz o fix mais direto, que é especificar melhor o match que quero remover: https://github.com/frones/nfe/commit/24089acb903a2676f3922a1acac74fe7b3c118f8

Depois vou estudar um pouco melhor se tem uma maneira de fazer a leitura considerando so diferentes formatos que as fazendas enviam. Tem um desafio relacionado ao fato de que algumas delas retornam formatos que são inválidos e sequer fazem sentido (tipo civilDate com timezone). Mas eu acho que deve ser possível fazer algo melhor que o regex.

eduardo-mior commented 3 years ago

@frones entrei de férias essa semana, então só irei poder testar isso daqui duas semanas, mas assim que eu testar eu te aviso. Você fez esse pacote do Zero ou você se baseou em outros pacotes já existentes? Tipo ACBR ou sped-nfe?

frones commented 3 years ago

@eduardo-mior fiz do zero e a ideia era fazer tudo usando os recursos nativos do golang. Mas esse package não está nem perto de ter todos os recursos desses demais. Só implementei realmente a consulta de cadastro e consulta de nota.

eduardo-mior commented 3 years ago

@frones talvez seria interessante dar uma olhada nos códigos fontes desses outros projetos porque eles fazem uns "hacks" ou melhor dizendo umas gambiarras pra consultar em determinados estados, a um tempo atras tinha visto um tópico de um fórum que para você consultar a IE e um estado específico tinha que setar uma versão do TLS específica e vi também outras peculiaridades sobre outros estados específicos.

Achei muito interessante essa sua ideia de construir do zero o package, esta de parabéns.

No futuro quando sobrar um pouco de tempo pretendo contribuir mais com o pacote.

eduardo-mior commented 2 years ago

Não estou trabalhando mais com isso, então vou fechar a issue por falta de oportunidade e tempo de finalizar os testes.

Novamente parabéns pelo pacote, acho muito interessante a usa ideia e a sua disposição.