UNPKG

@taqtile/nodenab

Version:

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

96 lines (71 loc) 2.55 kB
const fs = require('fs'); const path = require('path'); const IntercambioBancarioRemessaFileAbstract = require('../IntercambioBancarioRemessaFileAbstract') module.exports = class RemessaFile extends IntercambioBancarioRemessaFileAbstract { static get CNAB_EOL() { return '\r\n'; } generate() { let headerArquivo = this._encodeHeaderArquivo(); let lotes = this._encodeLotes(); let trailerArquivo = this._encodeTrailerArquivo(); let data = [headerArquivo, lotes, trailerArquivo].join(RemessaFile.CNAB_EOL); data += RemessaFile.CNAB_EOL; return data; } _encodeHeaderArquivo() { if (!this._model.header) return; let layout = this._model.getLayout(); let layoutRemessa = layout.getRemessaLayout(); return this._encode(layoutRemessa['header_arquivo'], this._model.header._data); } _encodeLotes() { let encoded = []; this._model.lotes.forEach((lote) => { if (lote.header) { encoded.push(this._encodeHeaderLote(lote)); } encoded.push(this._encodeDetalhes(lote)); if (lote.trailer) { encoded.push(this._encodeTrailerLote(lote)); } }); return encoded.join(RemessaFile.CNAB_EOL); } _encodeHeaderLote(model) { if (!model.header) { return; } let layout = model.getLayout(); return this._encode(layout['header_lote'], model.header._data); } _encodeDetalhes(model) { if (!model.detalhes) { return; } let layout = model.getLayout(); let encoded = []; model.detalhes.forEach((detalhe) => { Object.keys(detalhe).forEach((segmento) => { let segmentoEncoded = this._encode(layout['detalhes'][segmento], detalhe[segmento]); encoded.push(segmentoEncoded); }); }); return encoded.join(RemessaFile.CNAB_EOL); } _encodeTrailerLote(model) { if (!model.trailer) { return; } let layout = model.getLayout(); return this._encode(layout['trailer_lote'], model.trailer._data); } _encodeTrailerArquivo() { if (!this._model.trailer) { return; } let layout = this._model.getLayout(); let layoutRemessa = layout.getRemessaLayout(); return this._encode(layoutRemessa['trailer_arquivo'], this._model.trailer._data); } };