brcobranca_sicredi_400 1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE +20 -0
- data/README.md +91 -0
- data/Rakefile +8 -0
- data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
- data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
- data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
- data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
- data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
- data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
- data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
- data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
- data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
- data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
- data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
- data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
- data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
- data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
- data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
- data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
- data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
- data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
- data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
- data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
- data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
- data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
- data/lib/brcobranca/boleto/ailos.rb +89 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
- data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
- data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
- data/lib/brcobranca/boleto/banestes.rb +86 -0
- data/lib/brcobranca/boleto/banrisul.rb +95 -0
- data/lib/brcobranca/boleto/base.rb +256 -0
- data/lib/brcobranca/boleto/bradesco.rb +100 -0
- data/lib/brcobranca/boleto/caixa.rb +123 -0
- data/lib/brcobranca/boleto/citibank.rb +97 -0
- data/lib/brcobranca/boleto/credisis.rb +118 -0
- data/lib/brcobranca/boleto/hsbc.rb +96 -0
- data/lib/brcobranca/boleto/itau.rb +138 -0
- data/lib/brcobranca/boleto/safra.rb +152 -0
- data/lib/brcobranca/boleto/santander.rb +86 -0
- data/lib/brcobranca/boleto/sicoob.rb +120 -0
- data/lib/brcobranca/boleto/sicredi.rb +145 -0
- data/lib/brcobranca/boleto/template/base.rb +28 -0
- data/lib/brcobranca/boleto/template/rghost.rb +308 -0
- data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
- data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
- data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
- data/lib/brcobranca/boleto/unicred.rb +99 -0
- data/lib/brcobranca/calculo.rb +120 -0
- data/lib/brcobranca/calculo_data.rb +63 -0
- data/lib/brcobranca/currency.rb +69 -0
- data/lib/brcobranca/formatacao.rb +104 -0
- data/lib/brcobranca/formatacao_string.rb +37 -0
- data/lib/brcobranca/limpeza.rb +20 -0
- data/lib/brcobranca/remessa/base.rb +72 -0
- data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
- data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
- data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
- data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
- data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
- data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
- data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
- data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
- data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
- data/lib/brcobranca/remessa/pagamento.rb +320 -0
- data/lib/brcobranca/retorno/base.rb +11 -0
- data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
- data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
- data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
- data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
- data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
- data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
- data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
- data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
- data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
- data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
- data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
- data/lib/brcobranca/util/date.rb +21 -0
- data/lib/brcobranca/util/empresa.rb +29 -0
- data/lib/brcobranca/util/errors.rb +76 -0
- data/lib/brcobranca/validations.rb +208 -0
- data/lib/brcobranca/version.rb +5 -0
- data/lib/brcobranca.rb +200 -0
- metadata +225 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'parseline'
|
4
|
+
|
5
|
+
module Brcobranca
|
6
|
+
module Retorno
|
7
|
+
module Cnab240
|
8
|
+
class Base < Brcobranca::Retorno::Base
|
9
|
+
# Load lines
|
10
|
+
def self.load_lines(file, options = {})
|
11
|
+
return nil unless file
|
12
|
+
|
13
|
+
codigo_banco = codigo_banco_do_arquivo(file)
|
14
|
+
|
15
|
+
case codigo_banco
|
16
|
+
when '033'
|
17
|
+
Brcobranca::Retorno::Cnab240::Santander.load_lines(file, options)
|
18
|
+
when '085'
|
19
|
+
Brcobranca::Retorno::Cnab240::Ailos.load_lines(file, options)
|
20
|
+
when '748'
|
21
|
+
Brcobranca::Retorno::Cnab240::Sicredi.load_lines(file, options)
|
22
|
+
when '756'
|
23
|
+
Brcobranca::Retorno::Cnab240::Sicoob.load_lines(file, options)
|
24
|
+
else
|
25
|
+
Brcobranca::Retorno::RetornoCnab240.load_lines(file, options)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# Codigo do banco lido do arquivo.
|
30
|
+
# Registro Header [0..2]
|
31
|
+
def self.codigo_banco_do_arquivo(file)
|
32
|
+
arquivo = File.open(file)
|
33
|
+
header = arquivo.gets
|
34
|
+
codigo_banco = header.blank? ? nil : header[0..2]
|
35
|
+
arquivo.close
|
36
|
+
codigo_banco
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Retorno
|
5
|
+
module Cnab240
|
6
|
+
# Formato de Retorno CNAB 240
|
7
|
+
# Baseado em: http://www.caixa.gov.br/downloads/cobranca-caixa-manuais/LEIAUTE_CNAB_240_SIGCB_COBRANCA_CAIXA.pdf
|
8
|
+
class Caixa < Brcobranca::Retorno::RetornoCnab240
|
9
|
+
class Line < Brcobranca::Retorno::RetornoCnab240::Line
|
10
|
+
# Fixed width layout for Caixa
|
11
|
+
fixed_width_layout do |parse|
|
12
|
+
# REGISTRO_T_FIELDS
|
13
|
+
# Not applicable
|
14
|
+
# :cedente_com_dv
|
15
|
+
|
16
|
+
# Same inherited from parent
|
17
|
+
# parse.field :data_vencimento, 73..80
|
18
|
+
# parse.field :valor_titulo, 81..95
|
19
|
+
# parse.field :banco_recebedor, 96..98
|
20
|
+
# parse.field :sequencial, 8..12
|
21
|
+
# parse.field :valor_tarifa, 198..212
|
22
|
+
# parse.field :agencia_com_dv, 17..22
|
23
|
+
|
24
|
+
parse.field :codigo_ocorrencia, 15..16
|
25
|
+
parse.field :nosso_numero, 39..55
|
26
|
+
parse.field :agencia_recebedora_com_dv, 99..103
|
27
|
+
parse.field :motivo_ocorrencia, 213..222, lambda { |motivos|
|
28
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
|
29
|
+
}
|
30
|
+
|
31
|
+
# REGISTRO_U_FIELDS
|
32
|
+
|
33
|
+
# Same inherited from parent
|
34
|
+
# parse.field :desconto_concedito, 32..46
|
35
|
+
# parse.field :valor_abatimento, 47..61
|
36
|
+
# parse.field :iof_desconto, 62..76
|
37
|
+
# parse.field :juros_mora, 17..31
|
38
|
+
# parse.field :valor_recebido, 77..91
|
39
|
+
# parse.field :outras_despesas, 107..121
|
40
|
+
# parse.field :outros_recebimento, 122..136
|
41
|
+
# parse.field :data_credito, 145..152
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Retorno
|
5
|
+
module Cnab240
|
6
|
+
class Santander < Brcobranca::Retorno::Cnab240::Base
|
7
|
+
# Regex para remoção de headers e trailers além de registros diferentes de T ou U
|
8
|
+
REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/.freeze
|
9
|
+
|
10
|
+
def self.load_lines(file, options = {})
|
11
|
+
default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
|
12
|
+
options = default_options.merge!(options)
|
13
|
+
|
14
|
+
Line.load_lines(file, options).each_slice(2).reduce([]) do |retornos, cnab_lines|
|
15
|
+
retornos << generate_retorno_based_on_cnab_lines(cnab_lines)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.generate_retorno_based_on_cnab_lines(cnab_lines)
|
20
|
+
retorno = new
|
21
|
+
cnab_lines.each do |line|
|
22
|
+
if line.tipo_registro == 'T'
|
23
|
+
Line::REGISTRO_T_FIELDS.each do |attr|
|
24
|
+
retorno.send(:"#{attr}=", line.send(attr))
|
25
|
+
end
|
26
|
+
else
|
27
|
+
Line::REGISTRO_U_FIELDS.each do |attr|
|
28
|
+
retorno.send(:"#{attr}=", line.send(attr))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
retorno
|
33
|
+
end
|
34
|
+
|
35
|
+
# Linha de mapeamento do retorno do arquivo CNAB 240
|
36
|
+
# O registro CNAB 240 possui 2 tipos de registros que juntos geram um registro de retorno bancário
|
37
|
+
# O primeiro é do tipo T que retorna dados gerais sobre a transação
|
38
|
+
# O segundo é do tipo U que retorna os valores da transação
|
39
|
+
class Line < Base
|
40
|
+
extend ParseLine::FixedWidth # Extendendo parseline
|
41
|
+
|
42
|
+
REGISTRO_T_FIELDS = %w[codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira
|
43
|
+
data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia].freeze
|
44
|
+
REGISTRO_U_FIELDS = %w[desconto_concedito data_ocorrencia valor_abatimento iof_desconto juros_mora
|
45
|
+
valor_recebido outras_despesas outros_recebimento data_credito].freeze
|
46
|
+
|
47
|
+
attr_accessor :tipo_registro
|
48
|
+
|
49
|
+
fixed_width_layout do |parse|
|
50
|
+
parse.field :codigo_registro, 7..7
|
51
|
+
parse.field :sequencial, 8..12
|
52
|
+
parse.field :tipo_registro, 13..13
|
53
|
+
parse.field :codigo_ocorrencia, 15..16
|
54
|
+
parse.field :agencia_com_dv, 17..21
|
55
|
+
parse.field :cedente_com_dv, 22..31
|
56
|
+
parse.field :nosso_numero, 40..52
|
57
|
+
parse.field :carteira, 53..53
|
58
|
+
parse.field :data_vencimento, 69..76
|
59
|
+
parse.field :valor_titulo, 77..91
|
60
|
+
parse.field :banco_recebedor, 92..94
|
61
|
+
parse.field :agencia_recebedora_com_dv, 95..99
|
62
|
+
parse.field :data_ocorrencia, 137..144
|
63
|
+
parse.field :data_credito, 145..152
|
64
|
+
parse.field :outras_despesas, 107..121
|
65
|
+
parse.field :iof_desconto, 62..76
|
66
|
+
parse.field :valor_abatimento, 47..61
|
67
|
+
parse.field :desconto_concedito, 32..46
|
68
|
+
parse.field :valor_recebido, 77..91
|
69
|
+
parse.field :juros_mora, 17..31
|
70
|
+
parse.field :outros_recebimento, 122..136
|
71
|
+
parse.field :valor_tarifa, 193..207
|
72
|
+
parse.field :motivo_ocorrencia, 208..117, lambda { |motivos|
|
73
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
|
74
|
+
}
|
75
|
+
|
76
|
+
# Dados que não consegui extrair dos registros T e U
|
77
|
+
# parse.field :convenio,31..37
|
78
|
+
# parse.field :tipo_cobranca,80..80
|
79
|
+
# parse.field :tipo_cobranca_anterior,81..81
|
80
|
+
# parse.field :natureza_recebimento,86..87
|
81
|
+
# parse.field :carteira_variacao,91..93
|
82
|
+
# parse.field :desconto,95..99
|
83
|
+
# parse.field :iof,100..104
|
84
|
+
# parse.field :comando,108..109
|
85
|
+
# parse.field :data_liquidacao,110..115
|
86
|
+
# parse.field :especie_documento,173..174
|
87
|
+
# parse.field :valor_tarifa,181..187
|
88
|
+
# parse.field :juros_desconto,201..213
|
89
|
+
# parse.field :abatimento_nao_aproveitado,292..304
|
90
|
+
# parse.field :valor_lancamento,305..317
|
91
|
+
# parse.field :indicativo_lancamento,318..318
|
92
|
+
# parse.field :indicador_valor,319..319
|
93
|
+
# parse.field :valor_ajuste,320..331
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'parseline'
|
4
|
+
|
5
|
+
module Brcobranca
|
6
|
+
module Retorno
|
7
|
+
module Cnab240
|
8
|
+
class Sicoob < Brcobranca::Retorno::Cnab240::Base
|
9
|
+
# Regex para remoção de headers e trailers além de registros diferentes de T ou U
|
10
|
+
REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/.freeze
|
11
|
+
|
12
|
+
def self.load_lines(file, options = {})
|
13
|
+
default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
|
14
|
+
options = default_options.merge!(options)
|
15
|
+
|
16
|
+
Line.load_lines(file, options).each_slice(2).reduce([]) do |retornos, cnab_lines|
|
17
|
+
retornos << generate_retorno_based_on_cnab_lines(cnab_lines)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.generate_retorno_based_on_cnab_lines(cnab_lines)
|
22
|
+
retorno = new
|
23
|
+
cnab_lines.each do |line|
|
24
|
+
if line.tipo_registro == 'T'
|
25
|
+
Line::REGISTRO_T_FIELDS.each do |attr|
|
26
|
+
retorno.send(:"#{attr}=", line.send(attr))
|
27
|
+
end
|
28
|
+
else
|
29
|
+
Line::REGISTRO_U_FIELDS.each do |attr|
|
30
|
+
retorno.send(:"#{attr}=", line.send(attr))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
retorno
|
35
|
+
end
|
36
|
+
|
37
|
+
# Linha de mapeamento do retorno do arquivo CNAB 240
|
38
|
+
# O registro CNAB 240 possui 2 tipos de registros que juntos geram um registro de retorno bancário
|
39
|
+
# O primeiro é do tipo T que retorna dados gerais sobre a transação
|
40
|
+
# O segundo é do tipo U que retorna os valores da transação
|
41
|
+
class Line < Base
|
42
|
+
extend ParseLine::FixedWidth # Extendendo parseline
|
43
|
+
|
44
|
+
REGISTRO_T_FIELDS = %w[codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira
|
45
|
+
data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia].freeze
|
46
|
+
REGISTRO_U_FIELDS = %w[desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido
|
47
|
+
outras_despesas outros_recebimento data_credito data_ocorrencia].freeze
|
48
|
+
|
49
|
+
attr_accessor :tipo_registro
|
50
|
+
|
51
|
+
fixed_width_layout do |parse|
|
52
|
+
parse.field :codigo_registro, 7..7
|
53
|
+
parse.field :tipo_registro, 13..13
|
54
|
+
parse.field :sequencial, 8..12
|
55
|
+
parse.field :codigo_ocorrencia, 15..16
|
56
|
+
parse.field :agencia_com_dv, 17..22
|
57
|
+
parse.field :cedente_com_dv, 23..35
|
58
|
+
parse.field :nosso_numero, 37..46
|
59
|
+
parse.field :carteira, 57..57
|
60
|
+
parse.field :data_vencimento, 73..80
|
61
|
+
parse.field :valor_titulo, 81..95
|
62
|
+
parse.field :banco_recebedor, 96..98
|
63
|
+
parse.field :agencia_recebedora_com_dv, 99..104
|
64
|
+
parse.field :data_ocorrencia, 137..144
|
65
|
+
parse.field :data_credito, 145..152
|
66
|
+
parse.field :outras_despesas, 107..121
|
67
|
+
parse.field :iof_desconto, 62..76
|
68
|
+
parse.field :valor_abatimento, 47..61
|
69
|
+
parse.field :desconto_concedito, 32..46
|
70
|
+
parse.field :valor_recebido, 77..91
|
71
|
+
parse.field :juros_mora, 17..31
|
72
|
+
parse.field :outros_recebimento, 122..136
|
73
|
+
parse.field :valor_tarifa, 198..212
|
74
|
+
parse.field :motivo_ocorrencia, 213..222, lambda { |motivos|
|
75
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
|
76
|
+
}
|
77
|
+
|
78
|
+
# Dados que não consegui extrair dos registros T e U
|
79
|
+
# parse.field :convenio,31..37
|
80
|
+
# parse.field :tipo_cobranca,80..80
|
81
|
+
# parse.field :tipo_cobranca_anterior,81..81
|
82
|
+
# parse.field :natureza_recebimento,86..87
|
83
|
+
# parse.field :carteira_variacao,91..93
|
84
|
+
# parse.field :desconto,95..99
|
85
|
+
# parse.field :iof,100..104
|
86
|
+
# parse.field :comando,108..109
|
87
|
+
# parse.field :data_liquidacao,110..115
|
88
|
+
# parse.field :especie_documento,173..174
|
89
|
+
# parse.field :valor_tarifa,181..187
|
90
|
+
# parse.field :juros_desconto,201..213
|
91
|
+
# parse.field :abatimento_nao_aproveitado,292..304
|
92
|
+
# parse.field :valor_lancamento,305..317
|
93
|
+
# parse.field :indicativo_lancamento,318..318
|
94
|
+
# parse.field :indicador_valor,319..319
|
95
|
+
# parse.field :valor_ajuste,320..331
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'parseline'
|
4
|
+
|
5
|
+
module Brcobranca
|
6
|
+
module Retorno
|
7
|
+
module Cnab240
|
8
|
+
class Sicredi < Brcobranca::Retorno::Cnab240::Base
|
9
|
+
# Regex para remoção de headers e trailers além de registros diferentes de T ou U
|
10
|
+
REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/.freeze
|
11
|
+
|
12
|
+
def self.load_lines(file, options = {})
|
13
|
+
default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
|
14
|
+
options = default_options.merge!(options)
|
15
|
+
|
16
|
+
Line.load_lines(file, options).each_slice(2).reduce([]) do |retornos, cnab_lines|
|
17
|
+
retornos << generate_retorno_based_on_cnab_lines(cnab_lines)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.generate_retorno_based_on_cnab_lines(cnab_lines)
|
22
|
+
retorno = new
|
23
|
+
cnab_lines.each do |line|
|
24
|
+
if line.tipo_registro == 'T'
|
25
|
+
Line::REGISTRO_T_FIELDS.each do |attr|
|
26
|
+
retorno.send(:"#{attr}=", line.send(attr))
|
27
|
+
end
|
28
|
+
else
|
29
|
+
Line::REGISTRO_U_FIELDS.each do |attr|
|
30
|
+
retorno.send(:"#{attr}=", line.send(attr))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
retorno
|
35
|
+
end
|
36
|
+
|
37
|
+
# Linha de mapeamento do retorno do arquivo CNAB 240
|
38
|
+
# O registro CNAB 240 possui 2 tipos de registros que juntos geram um registro de retorno bancário
|
39
|
+
# O primeiro é do tipo T que retorna dados gerais sobre a transação
|
40
|
+
# O segundo é do tipo U que retorna os valores da transação
|
41
|
+
class Line < Base
|
42
|
+
extend ParseLine::FixedWidth # Extendendo parseline
|
43
|
+
|
44
|
+
REGISTRO_T_FIELDS = %w[codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira
|
45
|
+
data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia].freeze
|
46
|
+
REGISTRO_U_FIELDS = %w[desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido
|
47
|
+
outras_despesas outros_recebimento data_ocorrencia data_credito].freeze
|
48
|
+
|
49
|
+
attr_accessor :tipo_registro
|
50
|
+
|
51
|
+
fixed_width_layout do |parse|
|
52
|
+
parse.field :codigo_registro, 7..7
|
53
|
+
parse.field :tipo_registro, 13..13
|
54
|
+
parse.field :sequencial, 8..12
|
55
|
+
parse.field :codigo_ocorrencia, 15..16
|
56
|
+
parse.field :agencia_com_dv, 17..22
|
57
|
+
parse.field :cedente_com_dv, 23..35
|
58
|
+
parse.field :nosso_numero, 37..56
|
59
|
+
parse.field :carteira, 57..57
|
60
|
+
parse.field :data_vencimento, 73..80
|
61
|
+
parse.field :valor_titulo, 81..95
|
62
|
+
parse.field :banco_recebedor, 96..98
|
63
|
+
parse.field :agencia_recebedora_com_dv, 99..104
|
64
|
+
parse.field :data_ocorrencia, 137..144
|
65
|
+
parse.field :data_credito, 145..152
|
66
|
+
parse.field :outras_despesas, 107..121
|
67
|
+
parse.field :iof_desconto, 62..76
|
68
|
+
parse.field :valor_abatimento, 47..61
|
69
|
+
parse.field :desconto_concedito, 32..46
|
70
|
+
parse.field :valor_recebido, 77..91
|
71
|
+
parse.field :juros_mora, 17..31
|
72
|
+
parse.field :outros_recebimento, 122..136
|
73
|
+
parse.field :valor_tarifa, 198..212
|
74
|
+
parse.field :motivo_ocorrencia, 213..222, lambda { |motivos|
|
75
|
+
motivos.scan(/.{2}/).reject(&:blank?).reject { |motivo| motivo == '00' }
|
76
|
+
}
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'parseline'
|
4
|
+
|
5
|
+
module Brcobranca
|
6
|
+
module Retorno
|
7
|
+
module Cnab400
|
8
|
+
# Formato de Retorno CNAB 400
|
9
|
+
# Baseado em: http://www.bb.com.br/docs/pub/emp/empl/dwn/Doc2628CBR643Pos7.pdf
|
10
|
+
class BancoBrasil < Brcobranca::Retorno::Cnab400::Base
|
11
|
+
extend ParseLine::FixedWidth # Extendendo parseline
|
12
|
+
|
13
|
+
# Load lines
|
14
|
+
def self.load_lines(file, options = {})
|
15
|
+
default_options = { except: [1] } # por padrao ignora a primeira linha que é header
|
16
|
+
options = default_options.merge!(options)
|
17
|
+
super(file, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
fixed_width_layout do |parse|
|
21
|
+
# Todos os campos descritos no documento em ordem
|
22
|
+
# :tipo_de_registro, 0..0 # identificacao do registro transacao
|
23
|
+
# :zeros, 1..2 # zeros
|
24
|
+
# :zeros, 3..16 #zeros
|
25
|
+
|
26
|
+
# :codigo_registro, 0..0 #identificação do registro
|
27
|
+
parse.field :codigo_registro, 0..0
|
28
|
+
|
29
|
+
# :agencia, 17..21 #agencia mantenedora da conta com digito
|
30
|
+
parse.field :agencia_com_dv, 17..21
|
31
|
+
|
32
|
+
# :conta, 22..30 #numero da conta corrente da empresa com digito
|
33
|
+
parse.field :cedente_com_dv, 22..30
|
34
|
+
|
35
|
+
# :convenio, 31..37 #convenio da empresa
|
36
|
+
# :uso_da_empresa, 38..62 #identificacao do titulo na empresa
|
37
|
+
|
38
|
+
# :nosso_numero,63..79 # identificacao do titulo no banco
|
39
|
+
parse.field :nosso_numero, 63..79
|
40
|
+
|
41
|
+
# :tipo_cobranca, 80..80 #tipo de cobranca
|
42
|
+
# :tipo_cobranca_anterior, 81..81 #tipo de cobranca
|
43
|
+
|
44
|
+
# :dias, 82..85 #dias para calculo
|
45
|
+
|
46
|
+
# :natureza_recebimento, 86..87 #natureza do recebimento
|
47
|
+
parse.field :motivo_ocorrencia, 86..87, ->(motivos) { motivos.scan(/../).reject { |n| n.to_i.zero? } }
|
48
|
+
|
49
|
+
# :prefixo_titulo, 88..90 #prefixo do titulo
|
50
|
+
parse.field :carteira_variacao, 91..93
|
51
|
+
|
52
|
+
# :conta_caucao, 94..94 #conta caução
|
53
|
+
# :taxa_desconto, 95..99 #taxa para desconto
|
54
|
+
# :taxa_iof, 100..104 #taxa para iof
|
55
|
+
|
56
|
+
# :brancos, 105..105 #brancos
|
57
|
+
parse.field :carteira, 106..107
|
58
|
+
|
59
|
+
# :cod_de_ocorrencia, 108..109 # cod de ocorrencia no banco
|
60
|
+
parse.field :codigo_ocorrencia, 108..109
|
61
|
+
|
62
|
+
# :data_de_ocorrencia, 110..115 # data de ocorrencia no banco (ddmmaa)
|
63
|
+
parse.field :data_ocorrencia, 110..115
|
64
|
+
|
65
|
+
# :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
|
66
|
+
# :brancos, 126..145 #complemento de registro
|
67
|
+
|
68
|
+
# :vencimento, 146..151 #data de vencimento do titulo (ddmmaa)
|
69
|
+
parse.field :data_vencimento, 146..151
|
70
|
+
|
71
|
+
# :valor_do_titulo, 152..164 #valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
|
72
|
+
parse.field :valor_titulo, 152..164
|
73
|
+
|
74
|
+
# :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
|
75
|
+
parse.field :banco_recebedor, 165..167
|
76
|
+
|
77
|
+
# :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
|
78
|
+
# :dac_ag_cobradora, 172..172 # dac da agencia cobradora
|
79
|
+
parse.field :agencia_recebedora_com_dv, 168..172
|
80
|
+
|
81
|
+
# :especie, 173..174 # especie do titulo
|
82
|
+
parse.field :especie_documento, 173..174
|
83
|
+
|
84
|
+
# :data_credito, 295..300 #data de credito desta liquidacao
|
85
|
+
parse.field :data_credito, 175..180
|
86
|
+
|
87
|
+
# :tarifa_de_cobranca, 175..187 #valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
|
88
|
+
parse.field :valor_tarifa, 181..187
|
89
|
+
|
90
|
+
# parse.field :outras_despesas, 188..200
|
91
|
+
# parse.field :juros_desconto, 201..213
|
92
|
+
# parse.field :iof_desconto, 214..226
|
93
|
+
|
94
|
+
# :valor_do_iof, 214..226 #valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
|
95
|
+
parse.field :iof, 214..226
|
96
|
+
|
97
|
+
# :valor_abatimento, 227..239 #valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
|
98
|
+
parse.field :valor_abatimento, 227..239
|
99
|
+
|
100
|
+
# :descontos, 240..252 #valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
|
101
|
+
parse.field :desconto, 240..252
|
102
|
+
|
103
|
+
# :valor_principal, 253..265 #valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
|
104
|
+
|
105
|
+
parse.field :valor_recebido, 253..265
|
106
|
+
|
107
|
+
# :juros_mora_multa, 266..278 #valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
|
108
|
+
parse.field :juros_mora, 266..278
|
109
|
+
|
110
|
+
# :outros_creditos, 279..291 #valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
|
111
|
+
parse.field :outros_recebimento, 279..291
|
112
|
+
|
113
|
+
# parse.field :abatimento_nao_aproveitado, 292..304
|
114
|
+
# parse.field :valor_lancamento, 305..317
|
115
|
+
# parse.field :indicativo_lancamento, 318..318
|
116
|
+
# parse.field :indicador_valor, 319..319
|
117
|
+
# parse.field :valor_ajuste, 320..331
|
118
|
+
# :brancos, 332..341 #complemento de registro
|
119
|
+
# :zeros, 342..389 #complemento de registro
|
120
|
+
# :indicativo_liquidacao_parcial, 390..390 #Indicativo de Autorização de Liquidação Parcial
|
121
|
+
# :brancos, 391..391 #complemento de registro
|
122
|
+
# :cod_de_liquidacao, 392..393 #meio pelo qual o título foi liquidado
|
123
|
+
|
124
|
+
# :numero_sequencial, 394..399 #numero sequencial no arquivo
|
125
|
+
parse.field :sequencial, 394..399
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'parseline'
|
4
|
+
|
5
|
+
module Brcobranca
|
6
|
+
module Retorno
|
7
|
+
module Cnab400
|
8
|
+
# Formato de Retorno CNAB 400
|
9
|
+
class BancoBrasilia < Brcobranca::Retorno::Base
|
10
|
+
extend ParseLine::FixedWidth
|
11
|
+
|
12
|
+
def self.load_lines(file, options = {})
|
13
|
+
default_options = { except: [1] } # por padrao ignora a primeira linha que é header
|
14
|
+
options = default_options.merge!(options)
|
15
|
+
|
16
|
+
super(file, options)
|
17
|
+
end
|
18
|
+
|
19
|
+
fixed_width_layout do |parse|
|
20
|
+
# Todos os campos descritos no documento em ordem
|
21
|
+
# :tipo_de_registro, 0..0 # identificacao do registro transacao
|
22
|
+
parse.field :codigo_registro, 0..0
|
23
|
+
|
24
|
+
# :codigo_de_inscricao, 1..2 # identificacao do tipo de inscricao/empresa
|
25
|
+
# :numero_de_inscricao, 3..16 # numero de inscricao da empresa (cpf/cnpj)
|
26
|
+
# :zeros, 17..19
|
27
|
+
|
28
|
+
# Identificacao da empresa no banco
|
29
|
+
# :zeros, 20..20
|
30
|
+
parse.field :cedente_com_dv, 20..36
|
31
|
+
|
32
|
+
# :numero_controle_empresa, 37..61, # numero de controle da empresa
|
33
|
+
# :zeros, 62..69
|
34
|
+
|
35
|
+
# :nosso_numero, 62..69 # identificacao do titulo no banco
|
36
|
+
parse.field :nosso_numero, 70..81
|
37
|
+
|
38
|
+
# :zeros, 82..91 # uso do banco
|
39
|
+
# :zeros, 92..103 # uso do banco
|
40
|
+
# :indicador_de_rateio, 104..104 # indicador de rateio de credito
|
41
|
+
# :zeros, 105..106
|
42
|
+
# :carteira, 107..107 # de novo?
|
43
|
+
parse.field :codigo_ocorrencia, 108..109
|
44
|
+
parse.field :data_ocorrencia, 110..117
|
45
|
+
# :nosso_numero, 128..133 # confirmacao do numero do titulo no banco
|
46
|
+
# :brancos, 134..145 # complemento de registro
|
47
|
+
|
48
|
+
parse.field :data_vencimento, 148..155
|
49
|
+
parse.field :valor_titulo, 156..168
|
50
|
+
parse.field :banco_recebedor, 169..171
|
51
|
+
|
52
|
+
# :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
|
53
|
+
# :dac_ag_cobradora, 172..172 # dac da agencia cobradora
|
54
|
+
# :agencia_recebedora_com_dv, 168..172
|
55
|
+
|
56
|
+
parse.field :especie_documento, 177..178
|
57
|
+
parse.field :valor_tarifa, 179..191
|
58
|
+
|
59
|
+
# :outras_despesas 188..200, # valor de outras despesas ou custos do protesto
|
60
|
+
# :juros_operacao_em_atraso, 201..213 # zeros?
|
61
|
+
|
62
|
+
parse.field :iof, 218..230
|
63
|
+
parse.field :valor_abatimento, 231..243
|
64
|
+
parse.field :desconto, 244..256
|
65
|
+
parse.field :valor_recebido, 257..269
|
66
|
+
parse.field :outros_recebimento, 283..295
|
67
|
+
|
68
|
+
# :brancos, 292..293
|
69
|
+
# :motivo_do_codigo_de_ocorrencia, 294..294
|
70
|
+
|
71
|
+
# :data_credito, 295..300 # data de credito desta liquidacao
|
72
|
+
parse.field :data_credito, 299..306
|
73
|
+
|
74
|
+
# :origem_pagamento, 301..303
|
75
|
+
# :brancos, 304..313
|
76
|
+
# :cheque_bradesco, 314..317
|
77
|
+
# :motivo_rejeicao, 318..327
|
78
|
+
# :brancos, 328..367
|
79
|
+
# :numero_do_cartorio, 368..369
|
80
|
+
# :numero_do_protocolo, 370..379
|
81
|
+
# :brancos, 380..393
|
82
|
+
|
83
|
+
parse.field :motivo_ocorrencia, 364..393
|
84
|
+
|
85
|
+
parse.field :sequencial, 394..399
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|