node-mde

Biblioteca para consultar notas destinadas e enviar evento de manifestação do destinatário

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
node-mde
700.11.0a month ago5 months agoMinified + gzip package size for node-mde in KB

Readme

Node MD-e
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

```sh $ 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

```js 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

| Campo | Tipo | Tamanho | Descrição | | :------- | :------: | :-----: | :----------------------------- | | ultNSU | string | 1-15 | Último NSU recebido pelo ator. |

Exemplo

```js 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: '', // json: { resNFe: { ... } }, // nsu: '000000000000049', // schema: 'resNFev1.01.xsd', // }, // { // xml: ' ... ', // json: { nfeProc: { ... } }, // nsu: '000000000000050', // schema: 'procNFev4.00.xsd', // }, // , // }, // reqXml: ' ... ', // resXml: ' ... ', // status: 200, // } ```

Consulta por chNFe

| Campo | Tipo | Tamanho | Descrição | | :------ | :------: | :-----: | :-------------------------- | | chNFe | string | 44 | Chave de acesso específica. |

Exemplo

```js 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: ' ... ', // json: { nfeProc: { ... } }, // nsu: '000000000000050', // schema: 'procNFev4.00.xsd', // }, // , // }, // reqXml: ' ... ', // resXml: ' ... ', // status: 200, // } ```

Consulta por NSU

| Campo | Tipo | Tamanho | Descrição | | :---- | :------: | :-----: | :---------------------------------- | | NSU | string | 1-15 | Número Sequencial Único específico. |

Exemplo

```js 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: '', // json: { resNFe: { ... } }, // nsu: '000000000000049', // schema: 'resNFev1.01.xsd', // }, // , // }, // reqXml: ' ... ', // resXml: ' ... ', // status: 200, // } ```

Manifestação do Destinatário

Construtor

```js 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

| Campo | Tipo | Tamanho | Descrição | | :------------------- | :------: | :-----: | :------------------------------------------------------------------------------------------------------------------------------------------------------- | | idLote | string | 1-15 | Identificador de controle do Lote de envio do Evento. | | lote | array | 1-20 | Lista de eventos para manifestação. | | lote.chNFe | string | 44 | Chave de Acesso da NF-e vinculada ao Evento. | | lote.tpEvento | number | 6 | Código do evento: 210200 - Confirmacao da Operacao; 210210 - Ciencia da Operacao; 210220 - Desconhecimento da Operacao; 210240 - Operacao nao Realizada. | | lote.justificativa | string | 15-255 | Informar a justificativa porque a operação não foi realizada, este campo deve ser informado somente no evento de Operação não Realizada. |

Exemplo

```js 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: 'AN1.4.3', // cOrgao: '91', // cStat: '128', // xMotivo: 'Lote de evento processado', // infEvento: // { // tpAmb: '2', // verAplic: 'AN1.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: 'AN1.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: ' ... ', // resXml: ' ... ', // status: 200, // } ```

Tabelas

Códigos UF

| UF | cUF | Estado | | :--: | :--: | :---------------------- | | RO | 11 | Rondônia | | AC | 12 | Acre | | AM | 13 | Amazonas | | RR | 14 | Roraima | | PA | 15 | Pará | | AP | 16 | Amapá | | TO | 17 | Tocantins | | MA | 21 | Maranhão | | PI | 22 | Piauí | | CE | 23 | Ceará | | RN | 24 | Rio Grande do Norte | | PB | 25 | Paraíba | | PE | 26 | Pernambuco | | AL | 27 | Alagoas | | SE | 28 | Sergipe | | BA | 29 | Bahia | | MG | 31 | Minas Gerais | | ES | 32 | Espírito Santo | | RJ | 33 | Rio de Janeiro | | SP | 35 | São Paulo | | PR | 41 | Paraná | | SC | 42 | Santa Catarina | | RS | 43 | Rio Grande do Sul | | MS | 50 | Mato Grosso do Sul | | MT | 51 | Mato Grosso | | GO | 52 | Goiás | | DF | 53 | Distrito Federal |

Lista de Timezones

| timezone | Estado | UTC | | :--------------------: | :------------------------------------- | :------: | | America/Noronha | Fernando de Noronha | −02:00 | | America/Araguaina | TO | −03:00 | | America/Bahia | BA | −03:00 | | America/Belem | AP, PA (leste) | −03:00 | | America/Fortaleza | CE, MA, PB, PI, RN | −03:00 | | America/Maceio | AL, SE | −03:00 | | America/Recife | PE | −03:00 | | America/Santarem | PA (oeste) | −03:00 | | America/Sao_Paulo | DF, ES, GO, MG, PR, RJ, RS, SC, SP | −03:00 | | America/Boa_Vista | RR | −04:00 | | America/Campo_Grande | MS | −04:00 | | America/Cuiaba | MT | −04:00 | | America/Manaus | AM (leste) | −04:00 | | America/Porto_Velho | RO | −04:00 | | America/Eirunepe | AM (oeste) | −05:00 | | America/Rio_Branco | AC | −05:00 |