npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ns-cte-node

v1.0.7

Published

Biblioteca em Node.js para emissão de CTe em comunicação com a API da NS Tecnologia

Downloads

7

Readme

ns-cte-node

Esta biblioteca possibilita a comunicação e o consumo da solução API para CTe da NS Tecnologia.

Para implementar esta biblioteca em seu projeto, você pode:

  1. Realizar a instalação do pacote através do npm:

    npm install ns-cte-node
  2. Realizar o download da biblioteca pelo GitHub e adicionar a pasta "ns-modules" em seu projeto.

Exemplos de uso do pacote

Para que a comunicação com a API possa ser feita, é necessário informar o seu Token no cabeçalho das requisições.

Para isso, crie um arquivo chamado configParceiro.js, e nele adicione:

   const token = ""
   const CNPJ = ""

   module.exports = {token, CNPJ}
   

Dessa forma, o pacote conseguirá importar as suas configurações, onde você estará informando o token da software house e o cnpj do emitente.

Emissão

Para realizarmos a emissão de um CTe, vamos utilizar os seguintes métodos.

Primeiramente, vamos fazer referencia da classe emitirSincrono, para utilizarmos o método emitirCTeSincrono

   const CTeAPI = require('./node_modules/ns-cte-node/ns_modules/cte_module/emissao/emitirSincrono')

O segundo passo é importar, ou construir o arquivo de emissão em .json da CTe.

   const CTeJSON = require('./LayoutCTe.json')
       

Apos isso, vamo utilizar o método sendPostRequest da classe EmissaoSincrona para realizar o envio deste documento CTe para a API. Este método realiza a emissão, a consulta de status de processamento e o download de forma sequencial.

   var retorno = CTeAPI.emitirCTeSincrono(CTeJSON, "2", "XP", "./docs/cte")
   retorno.then(getResponse => { console.log(getResponse) })

Os parâmetros deste método são:

  • CTeJSON = objeto CTe que será serializado para envio;
  • 2 = tpAmb = ambiente onde será autorizado a CTe. 1 = produção, 2 = homologação / testes ;
  • "XP" = tpDown = tipo de download, indicando quais os tipos de arquivos serão obtidos no Download;
  • "./docs/cte" = diretório onde serão salvos os documentos obtidos no download;

O retorno deste método é um objeto json contendo um compilado dos retornos dos métodos realizados pela emissão sincrona:

   responseSincrono {
       statusEnvio: 200,
	   statusConsulta: 200,
	   statusDownload: 200,
	   cStat: 100,
	   motivo: 'Consulta realizada com sucesso',
	   xMotivo: 'Autorizado o uso do CT-e',
	   nsNRec: 16564890,
	   chCTe: '43211007364617000135570000000023851000003303',
	   nProt: '143210001239945',
	   xml: '<?xml version="1.0" encoding="utf-8"?><cteProc versao="3.00" xmlns="http://www.portalfiscal.inf.br/cte"><CTe xmlns="http://www.portalfiscal.inf.br/cte"><infCte versao="3.00",
       json: undefined, // json do CTe autorizada quando tpDown = "J", ou "JP"
       pdf: undefined, // base64 do PDF da CTe ( DACTE ) autorizada quando tpDown = "P", "XP", "JP"
       erros: undefined // array de erros quando a comunicação, emissão, ou processamento apresentar erros
     }
   }

Podemos acessarmos os dados de retorno e aplicarmos validações da seguinte forma. Tenhamos como exemplo:

   if ((emissaoResponse.status == 200) || (emissaoResponse.status == -6 || (emissaoResponse.status == -7))) {

    respostaSincrona.statusEnvio = emissaoResponse.status

    let statusBody = new statusProcessamento.Body(
        configParceiro.CNPJ,
        emissaoResponse.nsNRec,
        tpAmb
    )

    let statusResponse = await statusProcessamento.sendPostRequest(statusBody)

    respostaSincrona.statusConsulta = statusResponse.status

    //Verifica se houve sucesso ou não na consulta
    if ((statusResponse.status == 200)) {

        respostaSincrona.cStat = statusResponse.cStat
        respostaSincrona.xMotivo = statusResponse.xMotivo
        respostaSincrona.motivo = statusResponse.motivo
        respostaSincrona.nsNRec = emissaoResponse.nsNRec

        // Verifica se a nota foi autorizada
        if ((statusResponse.cStat == 100) || (statusResponse.cStat == 150)) {

            respostaSincrona.chCTe = statusResponse.chCTe
            respostaSincrona.nProt = statusResponse.nProt

            let downloadBody = new download.Body(
                statusResponse.chCTe,
                tpDown,
                tpAmb
            )

            let downloadResponse = await download.sendPostRequest(downloadBody, caminhoSalvar)

            // Verifica de houve sucesso ao realizar o downlaod da CTe
            if (downloadResponse.status == 200) {
                respostaSincrona.statusDownload = downloadResponse.status
                respostaSincrona.xml = downloadResponse.xml
                respostaSincrona.json = downloadResponse.json
                respostaSincrona.pdf = downloadResponse.pdf
            }

            // Aqui você pode realizar um tratamento em caso de erro no download
            else {
                respostaSincrona.motivo = downloadResponse.motivo;
            }
        }

        else {
            respostaSincrona.motivo = statusResponse.motivo;
            respostaSincrona.xMotivo = statusResponse.xMotivo;
        }
    }

    else if (statusResponse.status == -2) {
        respostaSincrona.cStat = statusResponse.cStat;
        respostaSincrona.erros = statusResponse.erro;
    }

    else {
        motivo = statusProcessamento.motivo;
    }
}

else if ((emissaoResponse.status == -4) || (emissaoResponse.status == -2)) {

    respostaSincrona.motivo = emissaoResponse.motivo

    try {
        respostaSincrona.erros = emissaoResponse.erros
    }

    catch (error) {
        console.log(error);
    }
}

else if ((emissaoResponse.status == -999) || (emissaoResponse.status == -5)) {
    respostaSincrona.motivo = emissaoResponse.motivo
}

else {

    try {
        respostaSincrona.motivo = emissaoResponse.motivo
    }

    catch (error) {

        respostaSincrona.motivo = JSON.stringify("ERRO: " + error + "\r\n" + emissaoResponse)
    }
}

return respostaSincrona

}

Eventos

Cancelar CTe

Para realizarmos um cancelamento de um CTe, devemos gerar o objeto do corpo da requisição e depois, fazer a chamada do método. Veja um exemplo:

   const cancelarCTe = require('./node_modules/ns-cte-node/ns_modules/cte_module/eventos/cancelamento')
   const util = require('./node_modules/ns-cte-node/ns_modules/api_module/util')

   let corpo = new cancelarCTe.Body(
   "43211007364617000135570000000023631000003306",
   "2",
   util.dhEmiGet(),
  "143210001238731",
  "CANCELAMENTO REALIZADO PARA TESTES DE INTEGRACAO EXEMPLO NODE JS"
   )

   cancelarCTe.sendPostRequest(corpo, "X", "./docs/cte/Eventos").then(getResponse => { console.log(getResponse) })
    

Os parâmetros informados no método são:

  • requisicaoCancelamento = Objeto contendo as informações do corpo da requisição de cancelamento;
  • "XP" = tpDown = tipo de download, indicando quais os tipos de arquivos serão obtidos no download do evento de cancelamento;
  • "./docs/cte/Eventos" = diretório onde serão salvos os arquivos obtidos no download do evento de cancelamento;

Carta de Correção para CTe

Para emitirmos uma carta de correção de um CTe, devemos gerar o objeto do corpo da requisição, utilizando a classe cartaCorrecaoCTe.Body, e utilzar o método cartaCorrecaoCTe.sendPostRequest, da seguinte forma:

   const cartaCorrecaoCTe = require('./node_modules/ns-cte-node/ns_modules/cte_module/eventos/cartaCorrecao')
   const util = require('./node_modules/ns-cte-node/ns_modules/api_module/util')

   let corpo = new cartaCorrecaoCTe.Body(
   "43211007364617000135570000000023611000003301",
   "2",
   util.dhEmiGet(),
    "3",
   {
      "campoAlterado": "xLgr",
      "grupoAlterado": "enderDest",
      "nroItemAlterado": "1",
      "valorAlterado": "ENGENHO - SILO 03"
   }
)

   cartaCorrecaoCTe.sendPostRequest(corpo, "XP", "./docs/cte/Eventos").then(getResponse => { console.log(getResponse) })
    

Os parâmetros informados no método são:

  • corpo = Objeto contendo as informações do corpo da requisição da carta de correção;
  • "XP" = tpDown = tipo de download, indicando quais os tipos de arquivos serão obtidos no download do evento de carta de correção;
  • "./docs/cte/Eventos" = diretório onde serão salvos os arquivos obtidos no download do evento de carta de correção;

Inutilização de numeração da CTe

Para emitirmos uma inutilização de numeração da CTe, devemos gerar o objeto do corpo da requisição, utilizando a classe Inutilizacao.Body, e utilizar o método Inutilizacao.sendPostRequest, da seguinte forma:

   const inutilizarCTe = require('./node_modules/ns-cte-node/ns_modules/cte_module/eventos/inutilizacao')

   let corpo = new inutilizarCTe.Body(
   "43",
   "2",
   "21",
   "07364617000135",
   "57",
   "0",
   "2382",
   "2382",
   "INUTILIZACAO REALIZADA PARA TESTES DE INTEGRACAO DO EXEMPLO EM NODE JS"
   )

   inutilizarCTe.sendPostRequest(corpo, "XP", "./docs/cte/Eventos").then(getResponse => { console.log(getResponse) })
    

Os parâmetros informados no método são:

  • requisicaoInutilizar = Objeto contendo as informações do corpo da requisição de inutilização;
  • "XP" = tpDown = tipo de download, indicando quais os tipos de arquivos serão obtidos no download do evento de inutilização;
  • @"./docs/cte/Eventos" = diretório onde serão salvos os arquivos obtidos no download do evento de inutilização;

Utilitários

Ainda com esta biblioteca, é possivel acessar método utilitários da API de CTe. Veja exemplos:

Consulta de cadastro de contribuinte

   const consultarCadastro = require('./node_modules/ns-cte-node/ns_modules/cte_module/util/consultaCadastro')
const util = require('./node_modules/ns-cte-node/ns_modules/api_module/util')

let corpo = new consultarCadastro.Body(
"07364617000135",
"RS",
"0170108708",
"07364617000135"
)

consultarCadastro.sendPostRequest(corpo, "X", "./docs/cte/Eventos").then(getResponse => { console.log(getResponse) })

Consultar situação de CTe

   const consultarCTe = require('./node_modules/ns-cte-node/ns_modules/cte_module/util/consultarSituacao')

   let corpo = new consultarCTe.Body(
   "07364617000135",
   "43211007364617000135570000000023701000003300",
   "2",
   "3.00"
   )

   consultarCTe.sendPostRequest(corpo, "J", "./docs/cte/Eventos").then(getResponse => { console.log(getResponse) })

Agendamento de Envio de E-Mail de CTe

   const enviarEmail = require('./node_modules/ns-cte-node/ns_modules/cte_module/util/envioEmail')

   let corpo = new enviarEmail.Body(
   "43211007364617000135570000000023701000003300",
   "2",
   "true",
   "true",
   "false",
   "[email protected]"
   )

   enviarEmail.sendPostRequest(corpo, "J", "./docs/cte/Eventos").then(getResponse => { console.log(getResponse) })
    

Listagem de nsNRec's vinculados à um CTe

   const listarNSNRec = require('./node_modules/ns-cte-node/ns_modules/cte_module/util/listarNSNRec')

   let corpo = new listarNSNRec.Body(
   "43211007364617000135570000000023701000003300",
   )

   listarNSNRec.sendPostRequest(corpo, "J", "./docs/cte/Eventos").then(getResponse => { console.log(getResponse) })

Gerar prévia do CTe

    const nsAPI = require('./node_modules/ns-cte-node/ns_modules/cte_module/util/previa')
    const CTeJSON = require('./LayoutCTe.json')

    var previa = nsAPI.sendPostRequest(cteJSON).then(getResponse => { console.log(getResponse) })

Informações Adicionais

Para saber mais sobre o projeto CTe API da NS Tecnologia, consulte a documentação