Closed olegario96 closed 5 years ago
Eu só bati o olho, mas já vi algumas coisas estranhas para avaliar. O trailer do arquivo não possui total de valor e linhas. O trailer de lote também.
Os tamanhos das linhas do arquivo bradesco.txt realmente estão ok. Talvez esse ret esteja diferente.
postar o código pode ajudar a descobrir. Entrar em contato com o bradesco para entender melhor qual o erro também.
Outra curiosidade, imagino que esta gerando uma remessa, porque salvou como .ret? Enviou o arquivo correto?
Deixo um convite a depois adicionar o layout do bradesco ao projeto para contribuir com o projeto.
Sobre contribuir com o projeto, veja o diretório Layout e o método getFromLayoutsLib. Vai ajudar outros membros que utilizam o bradesco.
Eu não entendi muito bem o que tu quis dizer com "total de valor e linhas". O arquivo é o mesmo, eu só mudei a extensão, pois o Github não aceitou a extensão .ret
. O código que eu estou usando para gerar o arquivo é o seguinte:
const fs = require('fs')
const registryLength = 240
const jsonsToCnab = new JsonsToCnab(registryLength)
const headerFile = [
{
fieldName: "CODIGODOBANCO",
positionStart: 1,
positionEnd: 3,
positionLength: 3,
picture: "9",
defaultValue: "237",
},
....
const headerFileData = {
// Length 8
DATAGERACAO: "19032018",
// Length 6
HORAGERACAO: "104333",
// Length 6
NUMEROSEQUENCIAL: "000001"
}
const headerBatch = [
{
fieldName: "CODIGODOBANCO",
positionStart: 1,
positionEnd: 3,
positionLength: 3,
picture: "9",
defaultValue: "237"
},
....
const rowDetailSegmentA = [
{
fieldName: "CODIGODOBANCO",
positionStart: 1,
positionEnd: 3,
positionLength: 3,
picture: "9",
defaultValue: "237"
},
....
const rowDetailSegmentB = [
{
fieldName: "CODIGODOBANCO",
positionStart: 1,
positionEnd: 3,
positionLength: 3,
picture: "9",
defaultValue: "237"
},
....
const footerBatch = [
{
fieldName: "CODIGODOBANCO",
positionStart: 1,
positionEnd: 3,
positionLength: 3,
picture: "9",
defaultValue: "237"
},
....
const footerFile = [
{
fieldName: "CODIGODOBANCO",
positionStart: 1,
positionEnd: 3,
positionLength: 3,
picture: "9",
defaultValue: "237"
},
...
const footerFileData = {
// Length 6
QUANTIDADELOTES: jsonsToCnab.counterLots().toString(),
// Length 6
QUANTIDADEREGISTROS: jsonsToCnab.counterRegistersInFile().toString(),
// Length 6
QUANTIDADECONTAS: jsonsToCnab.counterRegistersInFile().toString(),
}
jsonsToCnab.configHeaderFile(headerFile)
jsonsToCnab.setHeaderFile(headerFileData)
const content = fs.readFileSync('batches.json')
const batches = JSON.parse(content)
i = 1;
for (const batch of batches.batches) {
jsonsToCnab.configHeaderLot(headerBatch)
const headerBatchData = {
// Length 4
CODIGODOLOTE: "000" + i.toString(),
}
jsonsToCnab.addHeaderLote(headerBatchData)
jsonsToCnab.configRow(rowDetailSegmentA)
const rowDetailSegmentAData = {
// Length 4
CODIGODOLOTE: "000" + i.toString(),
// Length 5
AGENCIA: batch.account.agency,
// Length 1
VERIFICADORAGENCIA: batch.account.agencyDigit,
// Length 12
CONTA: batch.account.account,
// Length 1
VERIFICADORCONTA: batch.account.accountDigit,
// Length 30
NOME: batch.name,
// Length 20
NUMERO: "0000000000000000000" + i.toString(),
// Length 8
DATAPAGAMENTO: batch.paymentDate,
// Length 10
QUANTIDADEMOEDA: batch.coinAmount,
// Length 8
DATAREAL: batch.paymentDate,
}
jsonsToCnab.addRow(rowDetailSegmentAData)
jsonsToCnab.configRow(rowDetailSegmentB)
const rowDetailSegmentBData = {
// Length 4
CODIGODOLOTE: "000" + i.toString(),
// Length 14
NUMEROINSCRICAO: batch.cpf
}
jsonsToCnab.addRow(rowDetailSegmentBData)
jsonsToCnab.configFooterLot(footerBatch)
const footerBatchData = {
// Length 4
CODIGODOLOTE: "000" + i.toString(),
// Length 6
QUANTIDADEREGISROS: jsonsToCnab.counterRegistersInCurrentLot(),
}
jsonsToCnab.addFooterLote(footerBatchData)
++i
}
jsonsToCnab.configFooterFile(footerFile)
jsonsToCnab.setFooterFile(footerFileData)
fileContent = jsonsToCnab.save()
fs.writeFileSync('./bradesco.ret', fileContent)
Assim que eu conseguir gerar o arquivo no formato correto, pretendo ajudar outros usuários sim, contribuindo com um PR.
então não há necessidade de usar algo como: "0000000000000000000" +
Para o caso de linhas que não devem ser contadas você pode utilizar o parâmetro extra de addRow addRow(data,) pode usar addRow(data, false)
Especificamente sobre o erro no banco precisa entrar em contato com o Bradesco para validar melhor qual foi e talvez ajustar no layout ou nos dados, mas esta no caminho certo, só alguns ajustes para melhorar.
A operação está em Loop, porque eu quero gerar um arquivo de pagamento em massa, ou seja adicionar vários lotes cada um com uma conta com suas operações. Essa seria a forma correta?
Talvez um exemplo ajude:
Suas contas:
Seus fornecedores:
A melhor organização de lotes seria: Lote 1 - 2 trasnferências por ted da conta 1 Lote 2 - 1 trasnferências por ted da conta 2 Lote 3 - 2 pagamentos de boletos da conta 2
agora se todos os pagamentos fossem por boletos e saíssem da conta 1, você teria um Único lote.
antes de percorrer o loop de seus pagamentos, você precisa agrupa-los para gerar um lote por conta origem + operação.
Caso contrario você vai criar um lote para cada registro desnecessariamente.
Um lote pode ter vários registros desde que o dinheiro sai da mesma conta e seu pela mesma forma de pagamento.
Entendi. O destino vai ser sempre diferente no meu caso, mas a origem vai ser sempre a mesma. Esse ponto não havia ficado claro na documentação do Bradesco. E isso faz mais sentido, realmente visto que estamos falando de "lotes". Muito obrigado. Vou arrumar esses pontos no meu código e tentar entrar em contato com Bradesco.
Show, depois se puder compartilhe a versão ajustada e o problema apontado pelo Bradesco, para contribuir com os demais. Se realmente puder subir o PR com layout do bradesco, vai reduzir muito seu código e colaborar mais ainda com os demais.
@olegario96 o @gilsonsouzah notou que alguns sistemas(bancos) podem solicitar uma finalização de linha diferente "\n", "\r\n", talvez esse seja o mesmo caso que o seu. Experimente a nova versão lançada no NPM
Não sabia disso. Vou testar então. Muito obrigado @jessicamrbr e @gilsonsouzah
Consegui gerar um arquivo no layout CNAB 240 do bradesco, porém ao tentar subir o arquivo dentro do sistema do Bradesco, a seguinte mensagem foi exibida pelo sistema:
Configurei todos os campos conforme a documentação e todos as linhas geradas possuem o tamanho de 240. Segue abaixo o arquivo gerado.
bradesco.txt