0.14.8 • Published 4 months ago

node-mde v0.14.8

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

Node MD-e

npm version npm downloads MIT License Package Quality Quality Gate Status Known Vulnerabilities

Biblioteca para consumo dos Web Services da Sefaz de Distribuição de DF-e e Evento de Manifestação do Destinatário.

Essa biblioteca permite consultar a relação das notas fiscais emitidas contra um determinado CNPJ/CPF e realizar o envio do evento de manifestação, podendo assim, baixar o XML da NF-e.

Instalação

$ npm i node-mde

Pré-Requisitos

  • Possuir um Certificado A1 válido emitido por uma Autoridade Certificadora credenciada pela Infraestrutura de Chaves Públicas Brasileira – ICP-Brasil.
  • O certificado pode ser usando no formato PFX e Senha OU cert.pem e key.pem

Funcionalidades

  • Consultar por último NSU
    • Retorna a relação dos Documentos Fiscais (Resumo da NF-e, NF-e, Resumo do Evento ou Evento)
  • Consultar por chave de acesso
    • Retorna o XML da NF-e ou o Resumo da NF-e
  • Consultar por NSU
    • Retorna o Documento Fiscal referente ao NSU informado, podendo ser um Resumo, uma NF-e ou um Evento
  • Envio de evento
    • Registra o evento de manifestação na nota informada (Confirmação da Operação, Ciência da Operação, Desconhecimento da Operação ou Operação não Realizada)

Distribuição de DF-e

Construtor

new DistribuicaoDFe(config)
  • config <Object>
    • pfx <Buffer> - OPCIONAL - Arquivo .pfx. Se o pfx não for informado, as propriedades cert e key passam a ser obrigatórias.
    • passphrase <String> - OPCIONAL - Senha do arquivo .pfx.
    • cert <Buffer | String> - OPCIONAL - Conteúdo do cert.pem. Essa propriedade fica obrigatória se o pfx não for informado.
    • key <Buffer | String> - OPCIONAL - Conteúdo do key.pem. Essa propriedade fica obrigatória se o pfx não for informado.
    • cUFAutor <String> - OBRIGATÓRIO - Código da UF do autor. Consulte a tabela códigos UF.
    • cnpj <String> - OPCIONAL - CNPJ do interessado no DF-e. Se não informado um CNPJ, será obrigatório informar um CPF.
    • cpf <String> - OPCIONAL - CPF do interessado no DF-e. Se não informado um CPF, será obrigatório informar um CNPJ.
    • tpAmb <String> - OBRIGATÓRIO - Identificação de Ambiente. Informar '1' para Produção ou '2' para Homologação.
    • options <Object> - OPCIONAL
      • requestOptions <AxiosRequestConfig> - OPCIONAL
      • httpsOptions <AgentOptions> - OPCIONAL

Consulta por ultNSU

CampoTipoTamanhoDescrição
ultNSUstring1-15Último NSU recebido pelo ator.

Exemplo

const { DistribuicaoDFe } = require('node-mde')
const fs = require('fs')

const distribuicao = new DistribuicaoDFe({
  pfx: fs.readFileSync('./certificado.pfx'),
  passphrase: 'senha',
  cnpj: '12345678901234',
  cUFAutor: '41',
  tpAmb: '2',
})

const consulta = await distribuicao.consultaUltNSU('000000000000000')

if (consulta.error) {
  throw new Error(consulta.error)
}

console.log(consulta)
// {
//   data: {
//     tpAmb: '2',
//     verAplic: '1.5.11',
//     cStat: '138',
//     xMotivo: 'Documento(s) localizado(s)',
//     dhResp: '2022-06-21T10:48:14-03:00',
//     ultNSU: '000000000000050',
//     maxNSU: '000000000000212',
//     docZip: [
//       {
//         xml: '<resNFe xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... </resNFe>',
//         json: { resNFe: { ... } },
//         nsu: '000000000000049',
//         schema: 'resNFe_v1.01.xsd',
//       },
//       {
//         xml: '<nfeProc versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe"> ... </nfeProc>',
//         json: { nfeProc: { ... } },
//         nsu: '000000000000050',
//         schema: 'procNFe_v4.00.xsd',
//       },
//     ],
//   },
//   reqXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap12:Body></soap12:Envelope>',
//   resXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap:Body></soap:Envelope>',
//   status: 200,
// }

Consulta por chNFe

CampoTipoTamanhoDescrição
chNFestring44Chave de acesso específica.

Exemplo

const { DistribuicaoDFe } = require('node-mde')
const fs = require('fs')

const distribuicao = new DistribuicaoDFe({
  pfx: fs.readFileSync('./certificado.pfx'),
  passphrase: 'senha',
  cnpj: '12345678901234',
  cUFAutor: '41',
  tpAmb: '2',
})

const consulta = await distribuicao.consultaChNFe(
  '41000000000000000000000000000000000000000039'
)

if (consulta.error) {
  throw new Error(consulta.error)
}

console.log(consulta)
// {
//   data: {
//     tpAmb: '2',
//     verAplic: '1.5.11',
//     cStat: '138',
//     xMotivo: 'Documento localizado',
//     dhResp: '2022-06-21T10:49:21-03:00',
//     ultNSU: '',
//     maxNSU: '',
//     docZip: [
//       {
//         xml: '<nfeProc versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe"> ... </nfeProc>',
//         json: { nfeProc: { ... } },
//         nsu: '000000000000050',
//         schema: 'procNFe_v4.00.xsd',
//       },
//     ],
//   },
//   reqXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap12:Body></soap12:Envelope>',
//   resXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap:Body></soap:Envelope>',
//   status: 200,
// }

Consulta por NSU

CampoTipoTamanhoDescrição
NSUstring1-15Número Sequencial Único específico.

Exemplo

const { DistribuicaoDFe } = require('node-mde')
const fs = require('fs')

const distribuicao = new DistribuicaoDFe({
  pfx: fs.readFileSync('./certificado.pfx'),
  passphrase: 'senha',
  cnpj: '12345678901234',
  cUFAutor: '41',
  tpAmb: '2',
})

const consulta = await distribuicao.consultaNSU('000000000000049')

if (consulta.error) {
  throw new Error(consulta.error)
}

console.log(consulta)
// {
//   data: {
//     tpAmb: '2',
//     verAplic: '1.5.11',
//     cStat: '138',
//     xMotivo: 'Documento localizado',
//     dhResp: '2022-06-21T10:50:46-03:00',
//     ultNSU: '000000000000049',
//     maxNSU: '000000000000212',
//     docZip: [
//       {
//         xml: '<resNFe xmlns:xsd="http://www.w3.org/2001/XMLSchema" ... </resNFe>',
//         json: { resNFe: { ... } },
//         nsu: '000000000000049',
//         schema: 'resNFe_v1.01.xsd',
//       },
//     ],
//   },
//   reqXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap12:Body></soap12:Envelope>',
//   resXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap:Body></soap:Envelope>',
//   status: 200,
// }

Manifestação do Destinatário

Construtor

new RecepcaoEvento(config)
  • config <Object>
    • pfx <Buffer> - OPCIONAL - Arquivo .pfx. Se o pfx não for informado, as propriedades cert e key passam a ser obrigatórias.
    • passphrase <String> - OPCIONAL - Senha do arquivo .pfx.
    • cert <Buffer | String> - OPCIONAL - Conteúdo do cert.pem. Essa propriedade fica obrigatória se o pfx não for informado.
    • key <Buffer | String> - OPCIONAL - Conteúdo do key.pem. Essa propriedade fica obrigatória se o pfx não for informado.
    • cnpj <String> - OPCIONAL - CNPJ do interessado no DF-e. Se não informado um CNPJ, será obrigatório informar um CPF.
    • cpf <String> - OPCIONAL - CPF do interessado no DF-e. Se não informado um CPF, será obrigatório informar um CNPJ.
    • tpAmb <String> - OBRIGATÓRIO - Identificação de Ambiente. Informar '1' para Produção ou '2' para Homologação.
    • timezone <String> - OPCIONAL - Fuso horário do autor. É utilizado 'America/Sao_Paulo' como valor padrão. Consulte a tabela lista de timezones válidos para o Brasil.
    • options <Object> - OPCIONAL
      • requestOptions <AxiosRequestConfig> - OPCIONAL
      • httpsOptions <AgentOptions> - OPCIONAL

Enviar Lote de Eventos

CampoTipoTamanhoDescrição
idLotestring1-15Identificador de controle do Lote de envio do Evento.
lotearray1-20Lista de eventos para manifestação.
lote.chNFestring44Chave de Acesso da NF-e vinculada ao Evento.
lote.tpEventonumber6Código do evento: 210200 - Confirmacao da Operacao; 210210 - Ciencia da Operacao; 210220 - Desconhecimento da Operacao; 210240 - Operacao nao Realizada.
lote.justificativastring15-255Informar a justificativa do porque a operação não foi realizada, este campo deve ser informado somente no evento de Operação não Realizada.

Exemplo

const { RecepcaoEvento } = require('node-mde')
const fs = require('fs')

const recepcao = new RecepcaoEvento({
  pfx: fs.readFileSync('./certificado.pfx'),
  passphrase: 'senha',
  cnpj: '12345678901234',
  tpAmb: '2',
})

const lote = [
  {
    chNFe: '41000000000000000000000000000000000000000040',
    tipoEvento: 210210,
  },
  {
    chNFe: '41000000000000000000000000000000000000000041',
    tipoEvento: 210240,
    justificativa: 'Não foi realizado a entrega correta dos itens da nota.',
  },
]

const manifestacao = await recepcao.enviarEvento({
  idLote: '1337',
  lote: lote,
})

if (manifestacao.error) {
  throw new Error(manifestacao.error)
}

console.log(manifestacao)
// {
//   data: {
//     idLote: '1337',
//     tpAmb: '2',
//     verAplic: 'AN_1.4.3',
//     cOrgao: '91',
//     cStat: '128',
//     xMotivo: 'Lote de evento processado',
//     infEvento: [
//       {
//         tpAmb: '2',
//         verAplic: 'AN_1.4.3',
//         cOrgao: '91',
//         cStat: '596',
//         xMotivo: 'Rejeicao: Evento apresentado apos o prazo permitido para o evento: [10 dias]',
//         chNFe: '41000000000000000000000000000000000000000040',
//         tpEvento: '210210',
//         xEvento: 'Ciencia da Operacao',
//         nSeqEvento: '1',
//         CNPJDest: '',
//         dhRegEvento: '2022-06-21T11:20:10-03:00',
//         nProt: ''
//       },
//       {
//         tpAmb: '2',
//         verAplic: 'AN_1.4.3',
//         cOrgao: '91',
//         cStat: '135',
//         xMotivo: 'Evento registrado e vinculado a NF-e',
//         chNFe: '41000000000000000000000000000000000000000041',
//         tpEvento: '210240',
//         xEvento: 'Operacao nao Realizada',
//         nSeqEvento: '1',
//         CNPJDest: '12345678901234',
//         dhRegEvento: '2022-06-21T11:20:10-03:00',
//         nProt: '891220000003301'
//       },
//     ],
//   },
//   reqXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap12:Body></soap12:Envelope>',
//   resXml: '<?xml version="1.0" encoding="utf-8"?> ... </soap:Body></soap:Envelope>',
//   status: 200,
// }

Tabelas

Códigos UF

UFcUFEstado
RO11Rondônia
AC12Acre
AM13Amazonas
RR14Roraima
PA15Pará
AP16Amapá
TO17Tocantins
MA21Maranhão
PI22Piauí
CE23Ceará
RN24Rio Grande do Norte
PB25Paraíba
PE26Pernambuco
AL27Alagoas
SE28Sergipe
BA29Bahia
MG31Minas Gerais
ES32Espírito Santo
RJ33Rio de Janeiro
SP35São Paulo
PR41Paraná
SC42Santa Catarina
RS43Rio Grande do Sul
MS50Mato Grosso do Sul
MT51Mato Grosso
GO52Goiás
DF53Distrito Federal

Lista de Timezones

timezoneEstadoUTC
America/NoronhaFernando de Noronha−02:00
America/AraguainaTO−03:00
America/BahiaBA−03:00
America/BelemAP, PA (leste)−03:00
America/FortalezaCE, MA, PB, PI, RN−03:00
America/MaceioAL, SE−03:00
America/RecifePE−03:00
America/SantaremPA (oeste)−03:00
America/Sao_PauloDF, ES, GO, MG, PR, RJ, RS, SC, SP−03:00
America/Boa_VistaRR−04:00
America/Campo_GrandeMS−04:00
America/CuiabaMT−04:00
America/ManausAM (leste)−04:00
America/Porto_VelhoRO−04:00
America/EirunepeAM (oeste)−05:00
America/Rio_BrancoAC−05:00
0.14.8

4 months ago

0.14.6

8 months ago

0.14.7

6 months ago

0.14.5

9 months ago

0.14.3

11 months ago

0.14.4

10 months ago

0.14.2

1 year ago

0.14.0

1 year ago

0.14.1

1 year ago

0.12.0

1 year ago

0.13.0

1 year ago

0.10.0

2 years ago

0.11.0

2 years ago

0.10.1

2 years ago

0.9.0

2 years ago

0.7.2

2 years ago

0.8.0

2 years ago

0.7.1

2 years ago

0.9.2

2 years ago

0.9.1

2 years ago

0.7.3

2 years ago

0.7.0

2 years ago

0.6.0

2 years ago

0.5.0

2 years ago

0.4.1

2 years ago

0.4.0

2 years ago

0.3.0

2 years ago

0.2.2

2 years ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago