{"_id":"@contaquanto/libcnabfairy","_rev":"10-647762b7972d2663f6f7b18ad67ccedc","name":"@contaquanto/libcnabfairy","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@contaquanto/libcnabfairy","version":"1.0.0","description":"Transforming Dinosaurs into Fairies (or at least dinofairies)","main":"dist/index.js","scripts":{"clear":"rimraf ./dist/*","build":"npm run clear && babel src --ignore *.spec.js --out-dir dist --copy-files","lint":"eslint src/**","repl":"nodemon --config ./repl/nodemon.json ./repl.js --exec babel-node","test":"jest --coverage --forceExit --runInBand","test:watch":"jest --watch --coverage"},"repository":{"type":"git","url":"git+https://github.com/quan-to/libcnabfairy.git"},"keywords":["CNAB","Bank"],"author":{"name":"Quanto"},"license":"Apache-2.0","bugs":{"url":"https://github.com/quan-to/libcnabfairy/issues"},"homepage":"https://github.com/quan-to/libcnabfairy#readme","dependencies":{"bignumber.js":"^8.0.1","moment-timezone":"^0.5.23"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-syntax-flow":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.1.6","@babel/preset-env":"^7.1.6","babel-eslint":"^10.0.1","babel-jest":"^23.6.0","eslint":"^5.9.0","eslint-config-airbnb":"^17.1.0","eslint-plugin-import":"^2.14.0","flow-bin":"^0.86.0","flow-runtime":"^0.17.0","rimraf":"^2.6.2"},"gitHead":"bc08ad74b57ade2e09326ccf26f8e66c05d3745f","_id":"@contaquanto/libcnabfairy@1.0.0","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"racerxdl","email":"lucas@teske.net.br"},"dist":{"integrity":"sha512-zdeLt79hgil6BSyaCMN6CxAWVST+z3gQAYApmehUOtCRd37rzluF33vDMrsHwbYQZEA1n9O0tO4Fb7ceq396SA==","shasum":"6c08173e79505ca2d2ab6cb71b8c715954d3bfad","tarball":"https://registry.npmjs.org/@contaquanto/libcnabfairy/-/libcnabfairy-1.0.0.tgz","fileCount":14,"unpackedSize":108952,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb62axCRA9TVsSAnZWagAAcxMP/2cXyvdnQah1XKgFCwIP\nGrelku0IzfqjbSrJYwbkcF/e6zxFOebROw6TGm3d+ov9jmL12FnMgC8FrOr6\n2/fz30AfbMTgj9dK/iz5WQke/Ma4sKeud5cGoaZbAZHCiH4LnRGIbiqWYNrK\n2uFwC8mVpNYhBR3f7/PFquGFvcD63KhgDMe8M1T+FRb3SoOD8Heiwqk0PFw8\ntW06Luh4l31BNd5sqn06NQKkP9/x3i1tDPuw2BnEMGFeE58qHK8cp/6S4IKK\nrSbguRVEMTv2Kb3kYaBHU5+GyROCI6qELgy3zgTbjS/hU5CmPWiU8NXWytO1\n0EUakKtyOXAHd7rugzSvmLzNTRXXbO/67M07i3d70Ex8n1kvF05Pz4r8HOHs\nxCO6ShYsBR0XI/MaaY1b1uCDuGJPu8NAguXdgwJS1T7Gxw/p2UnufMIx6jnR\nN8sYnuRYJh6MXKF9iulNkTqYu+eyQi2n2boJSjAlokGDZBd8VefIgRHa8sxC\nb1ZPz/xwV0H1x6Sbw8G34cELBOnMOmuyVVZnd/hGsORLKqhaXNT7uuD2b3Rq\n87jJiJ2nX9eJoPRs6c/tM+GIGapEOH0tvUB/RdwIKix8fAS73VdZJX0EonFV\n1+0HUmI/8/Xs1tOmOgFPDyRQfW7FJghjf7fX+0Z/K2sqDa9eFjiAAYORwCwN\ndKrw\r\n=eP15\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDP+ThpjrKikxF+fXsqEUiRFlM24cPpMPMRG/MYUqOfyAiBnvP6it3014xXY2gsnnS7N9y9YA2OFUFuUNn8y4DfV1g=="}]},"maintainers":[{"name":"danielfeelfine","email":"danielfeelfine@gmail.com"},{"name":"quantodevelopers","email":"dtorres@contaquanto.com.br"},{"name":"racerxdl","email":"lucas@teske.net.br"},{"name":"upnic","email":"qbitnic@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libcnabfairy_1.0.0_1542153904935_0.35732416879301554"},"_hasShrinkwrap":false},"1.0.1":{"name":"@contaquanto/libcnabfairy","version":"1.0.1","description":"Transforming Dinosaurs into Fairies (or at least dinofairies)","main":"dist/index.js","scripts":{"clear":"rimraf ./dist/*","build":"npm run clear && babel src --ignore *.spec.js --out-dir dist --copy-files","lint":"eslint src/**","repl":"nodemon --config ./repl/nodemon.json ./repl.js --exec babel-node","test":"jest --coverage --forceExit --runInBand","test:watch":"jest --watch --coverage"},"repository":{"type":"git","url":"git+https://github.com/quan-to/libcnabfairy.git"},"keywords":["CNAB","Bank"],"author":{"name":"Quanto"},"license":"Apache-2.0","bugs":{"url":"https://github.com/quan-to/libcnabfairy/issues"},"homepage":"https://github.com/quan-to/libcnabfairy#readme","dependencies":{"bignumber.js":"^8.0.1","moment-timezone":"^0.5.23"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.6","@babel/node":"^7.0.0","@babel/plugin-proposal-class-properties":"^7.1.0","@babel/plugin-proposal-export-default-from":"^7.0.0","@babel/plugin-proposal-optional-chaining":"^7.0.0","@babel/plugin-syntax-flow":"^7.0.0","@babel/plugin-transform-flow-strip-types":"^7.1.6","@babel/preset-env":"^7.1.6","babel-eslint":"^10.0.1","babel-jest":"^23.6.0","eslint":"^5.9.0","eslint-config-airbnb":"^17.1.0","eslint-plugin-import":"^2.14.0","flow-bin":"^0.86.0","flow-runtime":"^0.17.0","rimraf":"^2.6.2"},"gitHead":"1b7033677339a64a0761a838b4c6676b28338d70","_id":"@contaquanto/libcnabfairy@1.0.1","_npmVersion":"6.4.1","_nodeVersion":"8.12.0","_npmUser":{"name":"racerxdl","email":"lucas@teske.net.br"},"dist":{"integrity":"sha512-YaTpZmhjI5VvDKksO5SO0lV/bAhTFVaYiG0T7emXJqSRqa9GCwU0R4NhreAP+K+nvn2kkPYZndXf8qkwi7VvvQ==","shasum":"fac086d1f0e109d059bf2ba08fdfe1f1c856c739","tarball":"https://registry.npmjs.org/@contaquanto/libcnabfairy/-/libcnabfairy-1.0.1.tgz","fileCount":9,"unpackedSize":60067,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJb62jjCRA9TVsSAnZWagAAJHwP/1Io6v+M93PElhHMG8jr\nSQQ1xkoMAQxCNC2RLyWIoDrW29ja7A1FZD5AFLZRsiCVnk0u6SlwrNitWyav\nlaGS9Da7gqWxEr1pWB13RFdvNFQwhONU6S9nLJFx86t27HV8XCCzoihCtxpo\nm7ybZGv3d3lN8uNPjo5VBB8io98ttcpFFCHhqyctsFONE5TdE5MmcOwttXCm\n2me0kyI64h9UG4hkVdw9MH/fWRtKHZ7lTwxchLB+HYmEjH1lcV/Lf65l6ez9\nc69swEtX8eRU/4X8F5wIOkLAsKo57prZRKE27JxbTjoQJGFVxeBc9eGdiMXH\nfxsv7Z4fS/7I2dfX4e+DH8+yZQ7hzbZJ7KMrAhwA66TNvQLH8RbEz3SVn9LA\n1mzQMdbebxpGuIwqxv3uIBYJuiqKERPi/nyeI1QUINMiiQy5dM084FR0jNAD\nJCCb0vdZqbsZYOuIrA0Y21HJLNqhHbXWQDqAfS+r4ev3KKGBPA5S/BLuUZqp\nwW617l4GlwjEf9GUN/QWNfnpGJty2MzViz2C/MjFG8YJv2+7eok3Z8Qnu06P\nf8Y03gjZoGL3luXKxZVgjV3oghPshF70bAn+IUQiwvl0SI+9otKEYlTGgmwZ\n+0TNAp6Ki3QBLyhfUqtc7qBfq6xeETRWMMVSQzb5kh9in1sPPFJCovnuOjD+\nSFjg\r\n=Z0SP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQClDw3oiNg/h56yQ3dJBRHzjUc0EVh/SShndbF7xcL7tQIhAKj2YKOpEA4z0bGGw7U604qzEOnLzloN0+T5IQB8sseV"}]},"maintainers":[{"name":"danielfeelfine","email":"danielfeelfine@gmail.com"},{"name":"quantodevelopers","email":"dtorres@contaquanto.com.br"},{"name":"racerxdl","email":"lucas@teske.net.br"},{"name":"upnic","email":"qbitnic@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/libcnabfairy_1.0.1_1542154466950_0.7770887035084768"},"_hasShrinkwrap":false}},"time":{"created":"2018-11-14T00:05:04.808Z","1.0.0":"2018-11-14T00:05:05.024Z","modified":"2022-11-03T15:09:32.723Z","1.0.1":"2018-11-14T00:14:27.145Z"},"maintainers":[{"email":"gleice.galdino@contaquanto.com.br","name":"gleice.galdino"},{"email":"qbitnic@gmail.com","name":"upnic"}],"description":"Transforming Dinosaurs into Fairies (or at least dinofairies)","homepage":"https://github.com/quan-to/libcnabfairy#readme","keywords":["CNAB","Bank"],"repository":{"type":"git","url":"git+https://github.com/quan-to/libcnabfairy.git"},"author":{"name":"Quanto"},"bugs":{"url":"https://github.com/quan-to/libcnabfairy/issues"},"license":"Apache-2.0","readme":"# CNAB Fairy\n\nTransforming Dinosaurs into Fairies (or at least dinofairies)\n\n`libcnabfairy` is helper library to parse / generate the brazillian (old) bank system CNAB Files.\nThe CNAB files have column based fields which are sort of easy to parse, but painfull. Hopefully this library will help you making it a bit easier\n\n# Installing\n\n```bash\nnpm --save install @contaquanto/libcnabfairy\n```\n\n# Parser Usage\n\n## Define a CNAB Model to parse\n\nLet's define first a CNAB Model to be able to parse it. The following model is from a CNAB160 from Itaú Bank for any transfer input in the account.\nEach CNAB 'registry' has a type that is defined somewhere in the line. We first start creating a parser:\n\n```javascript\nconst parser = new CNABParser(numberOfColumns, columnNumberStartsWithOne, timeZone);\n```\n\n*   `numberOfColumns` => Number of columns in the CNAB. Usually 160, 240 or 480\n*   `columnNumberStartsWithOne` => Arrays usually start with 0, but CNAB Specifications usually starts with one. Set to true to be able to use the same numbers.\n*   `timeZone` => Timezone String to parse Date/Time fields. Defaults to `UTC`.\n\nAfter that, we can start a registry type and define it's fields.\n\n```javascript\nparser\n    .start(registryType, { start: startOfField, end: endOfFieldInclusive, type: fieldType })\n    .put(fieldName, { start: startOfField, end: endOfFieldInclusve, type: fieldType })\n    .end();\n```\n\nThe `start` call initializes a new registry type defined by the field `registryType` that will be looked at position defined by `startOfField:endOfFieldInclusive`.\nThe `put` call adds a field to that registry.\nThe `end` call finishes the current registry.\n\n*   `registryType` => Type of registry\n*   `startOfField` => Number of the first column of the field\n*   `endOfFieldInclusive` => Number of the last column of the field\n*   `fieldType` => Type of the field: `number`, `string`, `datetime`, `money`. Defaults to `string`\n\nExample:\n\n```javascript\n// Let's create a parser that will have 160 columns, will have column number starting at one and will use São Paulo timezone for parsing DateTimes.\nconst parser = new CNABParser(160, true, 'America/Sao_Paulo');\n\n// region Header\nparser\n  // Let's start of first registry, which is type 0 and are defined in position 22 to 23.\n  .start(0, { start: 22, end: 23, type: 'number' })\n  // Then we can start defining fields.\n  .put('idArquivo', { start: 1, end: 4, type: 'number' })                                                       // File Number set by the bank\n  .put('agencia', { start: 5, end: 8, type: 'number' })                                                         // Client Branch Number\n  .put('conta', { start: 9, end: 21, type: 'number' })                                                          // Client Account Number with verification digit\n  .put('tipoRegistro', { start: 22, end: 23, type: 'number' })                                                  // Registry Type\n\n  // Here we specify a datetime field, which has a YYYYMMDDhhmmss format. Please check moment-timezone for the format string.\n  .put('dataGeracao', { start: 24, end: 37, type: 'datetime|YYYYMMDDhhmmss' })                                  // Generation Date/Time\n\n  // By default, the fields are treated as string.\n  .put('sequencia', { start: 38, end: 44 })                                                                     // File Sequential Number\n\n  // The CNAB Parser / Generator will always fill the line with empty spaces by default. So you don't need to define it.\n  // .put('', { start: 45, end: 160 })                                                                          // Spaces\n  .end();\n// endregion\n// region Body\nparser\n  .start(10, { start: 22, end: 23, type: 'number' })                                                            // Start the registry type 10\n  .put('idArquivo', { start: 1, end: 4, type: 'number' })                                                       // File Number set by the bank\n  .put('agencia', { start: 5, end: 8, type: 'number' })                                                         // Client Branch Number\n  .put('conta', { start: 9, end: 21, type: 'number' })                                                          // Client Account Number with verification digit.\n  .put('tipoRegistro', { start: 22, end: 23, type: 'number' })                                                  // Registry Type\n  .put('dataLancamento', { start: 24, end: 31, type: 'date|YYYYMMDD' })                                         // Date\n  .put('valor', { start: 38, end: 54, type: 'money' })                                                          // Amount Received\n  .put('inscricaoSolicitante', { start: 55, end: 68 })                                                          // Source TaxID\n  .put('nomeSolicitante', { start: 69, end: 98 })                                                               // Source Name\n  .put('bancoOrigem', { start: 99, end: 101, type: 'number' })                                                  // Source Bank Number\n  .put('agenciaOrigem', { start: 102, end: 105 })                                                               // Source Branch Number\n  .put('tipoDocumento', { start: 106, end: 106 })                                                               // Document Type (T => TED, D => DOC, F => TEF)\n  // .put('', { start: 107, end: 160 })                                                                         // Spaces\n  .end();\n// endregion\n// region Trailer\nparser\n  .start(99, { start: 22, end: 23, type: 'number' })                                                            // Start Registry type 99\n  .put('idArquivo', { start: 1, end: 4, type: 'number' })                                                       // File Number set by the bank\n  .put('agencia', { start: 5, end: 8, type: 'number' })                                                         // Client Branch Number\n  .put('conta', { start: 9, end: 21, type: 'number' })                                                          // Client Account Number with verification digit.\n  .put('tipoRegistro', { start: 22, end: 23, type: 'number' })                                                  // Registry Type\n  .put('dataGeracao', { start: 24, end: 31, type: 'date|YYYYMMDD' })                                            // File Generation Date\n  .put('quantidadeRegistros', { start: 32, end: 37, type: 'number' })                                           // Number of Registries\n  .put('valorTotal', { start: 38, end: 54, type: 'money' })                                                     // Total Amount\n  // .put('', { start: 55, end: 160 })                                                                          // Spaces\n  .end();\n// endregion\n```\n\nAfter that we can use for parsing a CNAB file. For example this one:\n\n```cnab\n16151234000000012345600201810270256380000001                                                                                                                    \n16151234000000012345610201810262843740000000000000019900012345563432Pessoa 1                      3415542F00025537                                              \n16151234000000012345610201810264499560000000000015000000001234567890Pessoa 2                      3415432F00075875                                              \n16151234000000012345610201810265288190000000000008155000012345677890Pessoa 3                      3415432F00156837                                              \n16151234000000012345610201810269170930000000000030000000012344567890Pessoa 4                      3415432F00156837                                              \n161512340000000123456992018102700000600000000000531749                                                                                                          \n```\n\n```javascript\nconst cnabData = `16151234000000012345600201810270256380000001                                                                                                                    \n16151234000000012345610201810262843740000000000000019900012345563432Pessoa 1                      3415542F00025537                                              \n16151234000000012345610201810264499560000000000015000000001234567890Pessoa 2                      3415432F00075875                                              \n16151234000000012345610201810265288190000000000008155000012345677890Pessoa 3                      3415432F00156837                                              \n16151234000000012345610201810269170930000000000030000000012344567890Pessoa 4                      3415432F00156837                                              \n161512340000000123456992018102700000600000000000531749                                                                                                          \n`;\n\n\nconst parsedData = parser.parse(cnabData);\nconsole.log(JSON.stringify(parsedData, null, 2));\n```\n\nShould result in:\n\n```json\n[\n  {\n    \"idArquivo\": 1615,\n    \"agencia\": 1234,\n    \"conta\": 123456,\n    \"tipoRegistro\": 0,\n    \"dataGeracao\": \"2018-10-27T05:56:38.000Z\",\n    \"sequencia\": \"0000001\"\n  },\n  {\n    \"idArquivo\": 1615,\n    \"agencia\": 1234,\n    \"conta\": 123456,\n    \"tipoRegistro\": 10,\n    \"dataLancamento\": \"2018-10-26T03:00:00.000Z\",\n    \"valor\": \"199\",\n    \"inscricaoSolicitante\": \"00012345563432\",\n    \"nomeSolicitante\": \"Pessoa 1\",\n    \"bancoOrigem\": 341,\n    \"agenciaOrigem\": \"5542\",\n    \"tipoDocumento\": \"F\"\n  },\n  {\n    \"idArquivo\": 1615,\n    \"agencia\": 1234,\n    \"conta\": 123456,\n    \"tipoRegistro\": 10,\n    \"dataLancamento\": \"2018-10-26T03:00:00.000Z\",\n    \"valor\": \"150000\",\n    \"inscricaoSolicitante\": \"00001234567890\",\n    \"nomeSolicitante\": \"Pessoa 2\",\n    \"bancoOrigem\": 341,\n    \"agenciaOrigem\": \"5432\",\n    \"tipoDocumento\": \"F\"\n  },\n  {\n    \"idArquivo\": 1615,\n    \"agencia\": 1234,\n    \"conta\": 123456,\n    \"tipoRegistro\": 10,\n    \"dataLancamento\": \"2018-10-26T03:00:00.000Z\",\n    \"valor\": \"81550\",\n    \"inscricaoSolicitante\": \"00012345677890\",\n    \"nomeSolicitante\": \"Pessoa 3\",\n    \"bancoOrigem\": 341,\n    \"agenciaOrigem\": \"5432\",\n    \"tipoDocumento\": \"F\"\n  },\n  {\n    \"idArquivo\": 1615,\n    \"agencia\": 1234,\n    \"conta\": 123456,\n    \"tipoRegistro\": 10,\n    \"dataLancamento\": \"2018-10-26T03:00:00.000Z\",\n    \"valor\": \"300000\",\n    \"inscricaoSolicitante\": \"00012344567890\",\n    \"nomeSolicitante\": \"Pessoa 4\",\n    \"bancoOrigem\": 341,\n    \"agenciaOrigem\": \"5432\",\n    \"tipoDocumento\": \"F\"\n  },\n  {\n    \"idArquivo\": 1615,\n    \"agencia\": 1234,\n    \"conta\": 123456,\n    \"tipoRegistro\": 99,\n    \"dataGeracao\": \"2018-10-27T03:00:00.000Z\",\n    \"quantidadeRegistros\": 6,\n    \"valorTotal\": \"531749\"\n  }\n]\n```\n\n# Generator\n\nTODO\n\n\n\nHave fun!\n\n![TrollFairy](pinktrollfairy.gif)\n","readmeFilename":"README.md"}