UNPKG

@taqtile/nodenab

Version:

Uma biblioteca para remessa e retorno de arquivos 400 e 240 do padrão cnab

188 lines (148 loc) 6.39 kB
# Nodenab # Essa biblioteca tem como objetivo a geração de arquivos CNAB bancários baseado em um layout ## Contribuidores ## Esse projeto foi baseado na biblioteca (cnab-layouts-parser)[https://github.com/glauberportella/cnab-layouts-parser], escrita por Glauber Portella para PHP. ## Como utilizar essa biblioteca? ## ## Remessa ## Para gerar uma remessa, faça da seguinte maneira: * Primeiro importe as dependências em seu projeto. ``` #!javascript import { Layout, Remessa, RemessaFile } from 'nodenab'; ``` * Depois crie uma remessa com os detalhes da seguinte maneira: ``` #!javascript const layoutArquivo = require(path.resolve(`./layouts/341/240/cobranca.json`)); const remessaLayout = new Layout(341, '240', layoutArquivo, {loadFromFile: false}); let remessa = new Remessa(remessaLayout); remessa.header.set('codigo_banco', 237); remessa.header.set('tipo_inscricao', 2); remessa.header.set('inscricao_numero', '12562475000132'); remessa.header.set('agencia', 5633); remessa.header.set('conta', 45889785); remessa.header.set('dac', 9); remessa.header.set('nome_empresa', 'FOO BAR LTDA'); remessa.header.set('data_geracao', moment().format('YYYY-MM-DD')); remessa.header.set('hora_geracao', moment().format('HHmmss')); remessa.header.set('numero_sequencial_arquivo_retorno', 1); // criar um novo lote de serviço para a remessa // informando o código sequencial do lote let lote = remessa.novoLote(1); lote.header.set('codigo_banco', 237); lote.header.set('lote_servico', lote.sequencial); lote.header.set('tipo_registro', 1); lote.header.set('tipo_operacao', 'R'); lote.header.set('tipo_servico', '01'); lote.header.set('zeros_01', 0); lote.header.set('versao_layout_lote', '030'); lote.header.set('brancos_01', ''); lote.header.set('tipo_inscricao', 2); lote.header.set('inscricao_empresa', '12562475000132'); lote.header.set('brancos_02', ''); lote.header.set('zeros_02', 0); lote.header.set('agencia', 5633); lote.header.set('brancos_03', ''); lote.header.set('zeros_03', 0); lote.header.set('conta', '45889785'); lote.header.set('brancos_04', ''); lote.header.set('dac', 9); lote.header.set('nome_empresa', 'FOO BAR LTDA'); lote.header.set('brancos_05', ''); lote.header.set('numero_sequencial_arquivo_retorno', 1); lote.header.set('data_gravacao', moment().format('YYYY-MM-DD')); lote.header.set('data_credito', moment().format('YYYY-MM-DD')); lote.header.set('brancos_06', ''); let detalhe = lote.novoDetalhe(); detalhe.segmento_p.lote_servico = lote.sequencial; detalhe.segmento_p.numero_sequencial_registro_lote = 1; detalhe.segmento_p.codigo_ocorrencia = '01'; detalhe.segmento_p.agencia = 5633; detalhe.segmento_p.conta = 45889785; detalhe.segmento_p.dac = 9; detalhe.segmento_p.carteira = 109; detalhe.segmento_p.nosso_numero = 12345678; detalhe.segmento_p.dac_nosso_numero = 3; detalhe.segmento_p.numero_documento = 1; detalhe.segmento_p.vencimento = '2016-05-10'; detalhe.segmento_p.valor_titulo = 1000; detalhe.segmento_p.agencia_cobradora = 0; detalhe.segmento_p.dac_agencia_cobradora = 0; detalhe.segmento_p.especie = '05'; detalhe.segmento_p.aceite = 'N'; detalhe.segmento_p.data_emissao = moment().format('YYYY-MM-DD'); detalhe.segmento_p.data_juros_mora = '2016-05-11'; detalhe.segmento_p.juros_1_dia = 0; detalhe.segmento_p.data_1o_desconto = '00000000'; detalhe.segmento_p.valor_1o_desconto = 0; detalhe.segmento_p.valor_iof = 38; detalhe.segmento_p.valor_abatimento = 0; detalhe.segmento_p.identificacao_titulo_empresa = ''; detalhe.segmento_p.codigo_negativacao_protesto = 0; detalhe.segmento_p.prazo_negativacao_protesto = 0; detalhe.segmento_p.codigo_baixa = 0; detalhe.segmento_p.prazo_baixa = 0; //segmento q detalhe.segmento_q.lote_servico = lote.sequencial; detalhe.segmento_q.numero_sequencial_registro_lote = 2; detalhe.segmento_q.codigo_ocorrencia = '01'; detalhe.segmento_q.tipo_inscricao = 2; detalhe.segmento_q.inscricao_numero = '12562475000132'; detalhe.segmento_q.nome_pagador = 'ACME CO. INT'; detalhe.segmento_q.logradouro = 'RUA NETFLIX'; detalhe.segmento_q.bairro = 'STRANGER THINGS'; detalhe.segmento_q.cep = 31814; detalhe.segmento_q.sufixo_cep = 500; detalhe.segmento_q.cidade = 'WILL'; detalhe.segmento_q.uf = 'JJ'; detalhe.segmento_q.tipo_inscricao_sacador = 2; detalhe.segmento_q.inscricao_sacador = '12562475000132'; detalhe.segmento_q.nome_sacador = 'FOO BAR LTDA'; delete detalhe.segmento_r; delete detalhe.segmento_y; lote.inserirDetalhe(detalhe); lote.trailer.set('lote_servico', lote.sequencial); lote.trailer.set('quantidade_registros_lote', 2); lote.trailer.set('quantidade_cobranca_simples', 1); lote.trailer.set('valor_total_cobranca_simples', 10000); lote.trailer.set('quantidade_cobranca_vinculada', 0); lote.trailer.set('valor_total_cobranca_vinculada', 0); lote.trailer.set('aviso_bancario', '00000000'); remessa.inserirLote(lote); remessa.trailer.set('total_lotes', 1); remessa.trailer.set('total_registros', 6); const remessaFile = new RemessaFile(remessa); ``` * Apos isso, chame o método generate() para gerar o arquivo, o mesmo retornará o texto do arquivo. Salve essa string em um arquivo de acordo com as especificações do banco ``` #!javascript remessaFile.generate() ``` ## Retorno ## Para ler um arquivo de retorno, faça da seguinte maneira: * Primeiro importe as dependências em seu projeto. ``` #!javascript import { Layout, RetornoFile, } from 'nodenab'; ``` * Em seguida, carrege o layout do arquivo de retorno e o arquivo em si. ``` #!javascript const retornoLayout = new Layout(341, '400', 'cobranca', {layoutPath: './test/layoutsTest'}); const retornoLines = fs.readFileSync('./test/in/cobranca-itau-cnab400.ret', 'UTF8'); ``` * Após isso, inicie a classe de Retorno e chame o método generate. O mesmo retornará um objeto com os dados do retorno ``` #!javascript const retornoFile = new RetornoFile(retornoLayout, retornoLines); let retorno = retornoFile.generate().toJSON(); ``` * Use os dados de arquivo como quiser