brcobranca 8.0.0 → 9.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-gemset +1 -1
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +5 -3
  5. data/CHANGELOG.md +9 -0
  6. data/Gemfile +2 -2
  7. data/README.md +24 -12
  8. data/brcobranca.gemspec +0 -2
  9. data/lib/brcobranca.rb +43 -26
  10. data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  11. data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  12. data/lib/brcobranca/arquivos/logos/cecred.eps +427 -0
  13. data/lib/brcobranca/arquivos/logos/cecred_carne.eps +427 -0
  14. data/lib/brcobranca/arquivos/logos/credisis.eps +5402 -0
  15. data/lib/brcobranca/arquivos/logos/credisis_carne.eps +5410 -0
  16. data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
  17. data/lib/brcobranca/boleto/banco_brasil.rb +21 -21
  18. data/lib/brcobranca/boleto/banco_brasilia.rb +96 -0
  19. data/lib/brcobranca/boleto/banco_nordeste.rb +4 -6
  20. data/lib/brcobranca/boleto/banestes.rb +7 -7
  21. data/lib/brcobranca/boleto/banrisul.rb +5 -5
  22. data/lib/brcobranca/boleto/base.rb +28 -22
  23. data/lib/brcobranca/boleto/bradesco.rb +6 -6
  24. data/lib/brcobranca/boleto/caixa.rb +11 -18
  25. data/lib/brcobranca/boleto/cecred.rb +86 -0
  26. data/lib/brcobranca/boleto/credisis.rb +124 -0
  27. data/lib/brcobranca/boleto/hsbc.rb +10 -27
  28. data/lib/brcobranca/boleto/itau.rb +9 -10
  29. data/lib/brcobranca/boleto/santander.rb +5 -6
  30. data/lib/brcobranca/boleto/sicoob.rb +5 -5
  31. data/lib/brcobranca/boleto/sicredi.rb +7 -7
  32. data/lib/brcobranca/boleto/template/rghost.rb +127 -80
  33. data/lib/brcobranca/boleto/template/rghost_carne.rb +9 -9
  34. data/lib/brcobranca/boleto/unicred.rb +126 -4
  35. data/lib/brcobranca/calculo_data.rb +3 -0
  36. data/lib/brcobranca/formatacao_string.rb +15 -5
  37. data/lib/brcobranca/remessa/base.rb +16 -9
  38. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +14 -13
  39. data/lib/brcobranca/remessa/cnab240/base.rb +252 -119
  40. data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +299 -0
  41. data/lib/brcobranca/remessa/cnab240/caixa.rb +61 -7
  42. data/lib/brcobranca/remessa/cnab240/cecred.rb +151 -0
  43. data/lib/brcobranca/remessa/cnab240/sicoob.rb +109 -123
  44. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
  45. data/lib/brcobranca/remessa/cnab240/sicredi.rb +177 -0
  46. data/lib/brcobranca/remessa/cnab240/unicred.rb +9 -0
  47. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +14 -0
  48. data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
  49. data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +4 -6
  50. data/lib/brcobranca/remessa/cnab400/banrisul.rb +155 -0
  51. data/lib/brcobranca/remessa/cnab400/base.rb +4 -4
  52. data/lib/brcobranca/remessa/cnab400/bradesco.rb +7 -8
  53. data/lib/brcobranca/remessa/cnab400/citibank.rb +3 -4
  54. data/lib/brcobranca/remessa/cnab400/credisis.rb +128 -0
  55. data/lib/brcobranca/remessa/cnab400/itau.rb +23 -6
  56. data/lib/brcobranca/remessa/cnab400/santander.rb +80 -65
  57. data/lib/brcobranca/remessa/cnab400/sicoob.rb +2 -2
  58. data/lib/brcobranca/remessa/cnab400/unicred.rb +143 -0
  59. data/lib/brcobranca/remessa/pagamento.rb +50 -14
  60. data/lib/brcobranca/retorno/base.rb +4 -4
  61. data/lib/brcobranca/retorno/cnab240/base.rb +11 -8
  62. data/lib/brcobranca/retorno/cnab240/caixa.rb +4 -0
  63. data/lib/brcobranca/retorno/cnab240/cecred.rb +102 -0
  64. data/lib/brcobranca/retorno/cnab240/santander.rb +35 -12
  65. data/lib/brcobranca/retorno/cnab240/sicoob.rb +8 -4
  66. data/lib/brcobranca/retorno/cnab240/sicredi.rb +79 -0
  67. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +127 -0
  68. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
  69. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
  70. data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
  71. data/lib/brcobranca/retorno/cnab400/base.rb +18 -7
  72. data/lib/brcobranca/retorno/cnab400/bradesco.rb +9 -3
  73. data/lib/brcobranca/retorno/cnab400/credisis.rb +115 -0
  74. data/lib/brcobranca/retorno/cnab400/itau.rb +10 -4
  75. data/lib/brcobranca/retorno/cnab400/santander.rb +57 -0
  76. data/lib/brcobranca/retorno/cnab400/unicred.rb +118 -0
  77. data/lib/brcobranca/retorno/retorno_cnab240.rb +7 -3
  78. data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -77
  79. data/lib/brcobranca/util/date.rb +20 -0
  80. data/lib/brcobranca/util/errors.rb +76 -0
  81. data/lib/brcobranca/validations.rb +232 -0
  82. data/lib/brcobranca/version.rb +1 -1
  83. data/spec/arquivos/CNAB240CECRED.RET +10 -0
  84. data/spec/arquivos/CNAB240SANTANDER.RET +8 -26
  85. data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
  86. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
  87. data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
  88. data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
  89. data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
  90. data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
  91. data/spec/arquivos/CNAB400UNICRED.RET +3 -0
  92. data/spec/brcobranca/base_spec.rb +6 -4
  93. data/spec/brcobranca/boleto/banco_brasil_spec.rb +22 -22
  94. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +134 -0
  95. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +19 -19
  96. data/spec/brcobranca/boleto/banestes_spec.rb +19 -19
  97. data/spec/brcobranca/boleto/banrisul_spec.rb +14 -14
  98. data/spec/brcobranca/boleto/bradesco_spec.rb +13 -13
  99. data/spec/brcobranca/boleto/caixa_spec.rb +7 -7
  100. data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
  101. data/spec/brcobranca/boleto/credisis_spec.rb +155 -0
  102. data/spec/brcobranca/boleto/hsbc_spec.rb +17 -37
  103. data/spec/brcobranca/boleto/itau_spec.rb +16 -16
  104. data/spec/brcobranca/boleto/santander_spec.rb +11 -11
  105. data/spec/brcobranca/boleto/sicoob_spec.rb +17 -17
  106. data/spec/brcobranca/boleto/sicredi_spec.rb +13 -13
  107. data/spec/brcobranca/boleto/unicred_spec.rb +10 -10
  108. data/spec/brcobranca/boletos_em_lote_spec.rb +1 -1
  109. data/spec/brcobranca/formatacao_string_spec.rb +1 -1
  110. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +10 -18
  111. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +39 -38
  112. data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
  113. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
  114. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +58 -39
  115. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
  116. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
  117. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
  118. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +4 -2
  119. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
  120. data/spec/brcobranca/remessa/cnab400/base_spec.rb +1 -1
  121. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +16 -11
  122. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +11 -11
  123. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
  124. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +25 -12
  125. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +35 -36
  126. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +37 -0
  127. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
  128. data/spec/brcobranca/remessa/pagamento_spec.rb +45 -27
  129. data/spec/brcobranca/retorno/cnab240/base_spec.rb +7 -8
  130. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
  131. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +35 -18
  132. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +20 -19
  133. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
  134. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
  135. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
  136. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
  137. data/spec/brcobranca/retorno/cnab400/base_spec.rb +34 -13
  138. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +4 -4
  139. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
  140. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -4
  141. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
  142. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
  143. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +1 -1
  144. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +1 -1
  145. data/spec/brcobranca/rghost_spec.rb +1 -1
  146. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +1 -1
  147. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
  148. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +1 -1
  149. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +5 -4
  150. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +5 -4
  151. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
  152. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +1 -1
  153. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +6 -5
  154. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
  155. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +1 -1
  156. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
  157. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +3 -2
  158. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +2 -2
  159. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
  160. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
  161. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
  162. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
  163. data/spec/support/shared_examples/busca_logotipo.rb +0 -2
  164. data/spec/support/shared_examples/cnab240.rb +92 -28
  165. data/spec/support/shared_examples/cnab400.rb +60 -14
  166. data/spec/support/shared_examples/formatos_validos.rb +6 -6
  167. metadata +103 -31
@@ -1,11 +1,6 @@
1
- # -*- encoding: utf-8 -*-
2
- #
3
-
4
1
  module Brcobranca
5
2
  module Retorno
6
3
  module Cnab240
7
- # Formato de Retorno CNAB 240
8
- # Baseado em: http://www.wmcsistemas.com/instalar/Layouts%20-%20Boletos_Cheques_Integracoes/Layout%20Santander/Santander%20-%20CNAB%20240.pdf
9
4
  class Santander < Brcobranca::Retorno::Cnab240::Base
10
5
  # Regex para remoção de headers e trailers além de registros diferentes de T ou U
11
6
  REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/
@@ -35,25 +30,31 @@ module Brcobranca
35
30
  retorno
36
31
  end
37
32
 
33
+ # Linha de mapeamento do retorno do arquivo CNAB 240
34
+ # O registro CNAB 240 possui 2 tipos de registros que juntos geram um registro de retorno bancário
35
+ # O primeiro é do tipo T que retorna dados gerais sobre a transação
36
+ # O segundo é do tipo U que retorna os valores da transação
38
37
  class Line < Base
39
38
  extend ParseLine::FixedWidth # Extendendo parseline
40
39
 
41
- REGISTRO_T_FIELDS = %w(agencia_com_dv cedente_com_dv nosso_numero nosso_numero_com_dv carteira data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa).freeze
42
- REGISTRO_U_FIELDS = %w(desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido outras_despesas outros_recebimento data_credito data_ocorrencia).freeze
40
+ REGISTRO_T_FIELDS = %w(codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia)
41
+ REGISTRO_U_FIELDS = %w(desconto_concedito data_ocorrencia valor_abatimento iof_desconto juros_mora valor_recebido outras_despesas outros_recebimento data_credito)
43
42
 
44
43
  attr_accessor :tipo_registro
45
44
 
46
45
  fixed_width_layout do |parse|
47
- parse.field :tipo_registro, 13..13
46
+ parse.field :codigo_registro, 7..7
48
47
  parse.field :sequencial, 8..12
49
- parse.field :agencia_com_dv, 17..22
50
- parse.field :nosso_numero, 40..51
51
- parse.field :nosso_numero_com_dv, 40..52
48
+ parse.field :tipo_registro, 13..13
49
+ parse.field :codigo_ocorrencia, 15..16
50
+ parse.field :agencia_com_dv, 17..21
51
+ parse.field :cedente_com_dv, 22..31
52
+ parse.field :nosso_numero, 40..52
52
53
  parse.field :carteira, 53..53
53
54
  parse.field :data_vencimento, 69..76
54
55
  parse.field :valor_titulo, 77..91
55
56
  parse.field :banco_recebedor, 92..94
56
- parse.field :agencia_recebedora_com_dv, 95..98
57
+ parse.field :agencia_recebedora_com_dv, 95..99
57
58
  parse.field :data_ocorrencia, 137..144
58
59
  parse.field :data_credito, 145..152
59
60
  parse.field :outras_despesas, 107..121
@@ -64,6 +65,28 @@ module Brcobranca
64
65
  parse.field :juros_mora, 17..31
65
66
  parse.field :outros_recebimento, 122..136
66
67
  parse.field :valor_tarifa, 193..207
68
+ parse.field :motivo_ocorrencia, 208..117, ->(motivos) do
69
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
70
+ end
71
+
72
+ # Dados que não consegui extrair dos registros T e U
73
+ # parse.field :convenio,31..37
74
+ # parse.field :tipo_cobranca,80..80
75
+ # parse.field :tipo_cobranca_anterior,81..81
76
+ # parse.field :natureza_recebimento,86..87
77
+ # parse.field :carteira_variacao,91..93
78
+ # parse.field :desconto,95..99
79
+ # parse.field :iof,100..104
80
+ # parse.field :comando,108..109
81
+ # parse.field :data_liquidacao,110..115
82
+ # parse.field :especie_documento,173..174
83
+ # parse.field :valor_tarifa,181..187
84
+ # parse.field :juros_desconto,201..213
85
+ # parse.field :abatimento_nao_aproveitado,292..304
86
+ # parse.field :valor_lancamento,305..317
87
+ # parse.field :indicativo_lancamento,318..318
88
+ # parse.field :indicador_valor,319..319
89
+ # parse.field :valor_ajuste,320..331
67
90
  end
68
91
  end
69
92
  end
@@ -1,5 +1,4 @@
1
1
  # -*- encoding: utf-8 -*-
2
- #
3
2
 
4
3
  require 'parseline'
5
4
 
@@ -42,14 +41,16 @@ module Brcobranca
42
41
  class Line < Base
43
42
  extend ParseLine::FixedWidth # Extendendo parseline
44
43
 
45
- REGISTRO_T_FIELDS = %w(agencia_com_dv cedente_com_dv nosso_numero carteira data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa).freeze
46
- REGISTRO_U_FIELDS = %w(desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido outras_despesas outros_recebimento data_credito).freeze
44
+ REGISTRO_T_FIELDS = %w(codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia)
45
+ REGISTRO_U_FIELDS = %w(desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido outras_despesas outros_recebimento data_credito data_ocorrencia)
47
46
 
48
47
  attr_accessor :tipo_registro
49
48
 
50
49
  fixed_width_layout do |parse|
50
+ parse.field :codigo_registro, 7..7
51
51
  parse.field :tipo_registro, 13..13
52
52
  parse.field :sequencial, 8..12
53
+ parse.field :codigo_ocorrencia, 15..16
53
54
  parse.field :agencia_com_dv, 17..22
54
55
  parse.field :cedente_com_dv, 23..35
55
56
  parse.field :nosso_numero, 37..46
@@ -58,7 +59,7 @@ module Brcobranca
58
59
  parse.field :valor_titulo, 81..95
59
60
  parse.field :banco_recebedor, 96..98
60
61
  parse.field :agencia_recebedora_com_dv, 99..104
61
- # parse.field :data_ocorrencia, 137..144
62
+ parse.field :data_ocorrencia, 137..144
62
63
  parse.field :data_credito, 145..152
63
64
  parse.field :outras_despesas, 107..121
64
65
  parse.field :iof_desconto, 62..76
@@ -68,6 +69,9 @@ module Brcobranca
68
69
  parse.field :juros_mora, 17..31
69
70
  parse.field :outros_recebimento, 122..136
70
71
  parse.field :valor_tarifa, 198..212
72
+ parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
73
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
74
+ end
71
75
 
72
76
  # Dados que não consegui extrair dos registros T e U
73
77
  # parse.field :convenio,31..37
@@ -0,0 +1,79 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'parseline'
3
+
4
+ module Brcobranca
5
+ module Retorno
6
+ module Cnab240
7
+ class Sicredi < Brcobranca::Retorno::Cnab240::Base
8
+ # Regex para remoção de headers e trailers além de registros diferentes de T ou U
9
+ REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/
10
+
11
+ def self.load_lines(file, options = {})
12
+ default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
13
+ options = default_options.merge!(options)
14
+
15
+ Line.load_lines(file, options).each_slice(2).reduce([]) do |retornos, cnab_lines|
16
+ retornos << generate_retorno_based_on_cnab_lines(cnab_lines)
17
+ end
18
+ end
19
+
20
+ def self.generate_retorno_based_on_cnab_lines(cnab_lines)
21
+ retorno = new
22
+ cnab_lines.each do |line|
23
+ if line.tipo_registro == 'T'
24
+ Line::REGISTRO_T_FIELDS.each do |attr|
25
+ retorno.send(attr + '=', line.send(attr))
26
+ end
27
+ else
28
+ Line::REGISTRO_U_FIELDS.each do |attr|
29
+ retorno.send(attr + '=', line.send(attr))
30
+ end
31
+ end
32
+ end
33
+ retorno
34
+ end
35
+
36
+ # Linha de mapeamento do retorno do arquivo CNAB 240
37
+ # O registro CNAB 240 possui 2 tipos de registros que juntos geram um registro de retorno bancário
38
+ # O primeiro é do tipo T que retorna dados gerais sobre a transação
39
+ # O segundo é do tipo U que retorna os valores da transação
40
+ class Line < Base
41
+ extend ParseLine::FixedWidth # Extendendo parseline
42
+
43
+ REGISTRO_T_FIELDS = %w(codigo_registro codigo_ocorrencia agencia_com_dv cedente_com_dv nosso_numero carteira data_vencimento valor_titulo banco_recebedor agencia_recebedora_com_dv sequencial valor_tarifa motivo_ocorrencia)
44
+ REGISTRO_U_FIELDS = %w(desconto_concedito valor_abatimento iof_desconto juros_mora valor_recebido outras_despesas outros_recebimento data_ocorrencia data_credito)
45
+
46
+ attr_accessor :tipo_registro
47
+
48
+ fixed_width_layout do |parse|
49
+ parse.field :codigo_registro, 7..7
50
+ parse.field :tipo_registro, 13..13
51
+ parse.field :sequencial, 8..12
52
+ parse.field :codigo_ocorrencia, 15..16
53
+ parse.field :agencia_com_dv, 17..22
54
+ parse.field :cedente_com_dv, 23..35
55
+ parse.field :nosso_numero, 37..56
56
+ parse.field :carteira, 57..57
57
+ parse.field :data_vencimento, 73..80
58
+ parse.field :valor_titulo, 81..95
59
+ parse.field :banco_recebedor, 96..98
60
+ parse.field :agencia_recebedora_com_dv, 99..104
61
+ parse.field :data_ocorrencia, 137..144
62
+ parse.field :data_credito, 145..152
63
+ parse.field :outras_despesas, 107..121
64
+ parse.field :iof_desconto, 62..76
65
+ parse.field :valor_abatimento, 47..61
66
+ parse.field :desconto_concedito, 32..46
67
+ parse.field :valor_recebido, 77..91
68
+ parse.field :juros_mora, 17..31
69
+ parse.field :outros_recebimento, 122..136
70
+ parse.field :valor_tarifa, 198..212
71
+ parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
72
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,127 @@
1
+ # -*- encoding: utf-8 -*-
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
+ # :agencia, 17..21 #agencia mantenedora da conta com digito
27
+ parse.field :agencia_com_dv, 17..21
28
+
29
+ # :conta, 22..30 #numero da conta corrente da empresa com digito
30
+ parse.field :cedente_com_dv, 22..30
31
+
32
+ # :convenio, 31..37 #convenio da empresa
33
+ # :uso_da_empresa, 38..62 #identificacao do titulo na empresa
34
+
35
+ # :nosso_numero,63..79 # identificacao do titulo no banco
36
+ parse.field :nosso_numero, 63..79
37
+
38
+ # :tipo_cobranca, 80..80 #tipo de cobranca
39
+ # :tipo_cobranca_anterior, 81..81 #tipo de cobranca
40
+
41
+ # :dias, 82..85 #dias para calculo
42
+
43
+ # :natureza_recebimento, 86..87 #natureza do recebimento
44
+ parse.field :motivos_de_ocorrencia, 86..87, ->(motivos) { motivos.scan(/../).reject { |n| n.to_i.zero? } }
45
+
46
+ # :prefixo_titulo, 88..90 #prefixo do titulo
47
+ parse.field :carteira_variacao, 91..93
48
+
49
+ # :conta_caucao, 94..94 #conta caução
50
+ # :taxa_desconto, 95..99 #taxa para desconto
51
+ # :taxa_iof, 100..104 #taxa para iof
52
+
53
+ # :brancos, 105..105 #brancos
54
+ parse.field :carteira, 106..107
55
+
56
+ # :cod_de_ocorrencia, 108..109 # cod de ocorrencia no banco
57
+ parse.field :codigo_ocorrencia, 108..109
58
+
59
+ # :data_de_ocorrencia, 110..115 # data de ocorrencia no banco (ddmmaa)
60
+ parse.field :data_ocorrencia, 110..115
61
+
62
+ # :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
63
+ # :brancos, 126..145 #complemento de registro
64
+
65
+ # :vencimento, 146..151 #data de vencimento do titulo (ddmmaa)
66
+ parse.field :data_vencimento, 146..151
67
+
68
+ # :valor_do_titulo, 152..164 #valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
69
+ parse.field :valor_titulo, 152..164
70
+
71
+ # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
72
+ parse.field :banco_recebedor, 165..167
73
+
74
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
75
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
76
+ parse.field :agencia_recebedora_com_dv, 168..172
77
+
78
+ # :especie, 173..174 # especie do titulo
79
+ parse.field :especie_documento, 173..174
80
+
81
+ # :data_credito, 295..300 #data de credito desta liquidacao
82
+ parse.field :data_credito, 175..180
83
+
84
+ # :tarifa_de_cobranca, 175..187 #valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
85
+ parse.field :valor_tarifa, 181..187
86
+
87
+ # parse.field :outras_despesas, 188..200
88
+ # parse.field :juros_desconto, 201..213
89
+ # parse.field :iof_desconto, 214..226
90
+
91
+ # :valor_do_iof, 214..226 #valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
92
+ parse.field :iof, 214..226
93
+
94
+ # :valor_abatimento, 227..239 #valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
95
+ parse.field :valor_abatimento, 227..239
96
+
97
+ # :descontos, 240..252 #valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
98
+ parse.field :desconto, 240..252
99
+
100
+ # :valor_principal, 253..265 #valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
101
+
102
+ parse.field :valor_recebido, 253..265
103
+
104
+ # :juros_mora_multa, 266..278 #valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
105
+ parse.field :juros_mora, 266..278
106
+
107
+ # :outros_creditos, 279..291 #valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
108
+ parse.field :outros_recebimento, 279..291
109
+
110
+ # parse.field :abatimento_nao_aproveitado, 292..304
111
+ # parse.field :valor_lancamento, 305..317
112
+ # parse.field :indicativo_lancamento, 318..318
113
+ # parse.field :indicador_valor, 319..319
114
+ # parse.field :valor_ajuste, 320..331
115
+ # :brancos, 332..341 #complemento de registro
116
+ # :zeros, 342..389 #complemento de registro
117
+ # :indicativo_liquidacao_parcial, 390..390 #Indicativo de Autorização de Liquidação Parcial
118
+ # :brancos, 391..391 #complemento de registro
119
+ # :cod_de_liquidacao, 392..393 #meio pelo qual o título foi liquidado
120
+
121
+ # :numero_sequencial, 394..399 #numero sequencial no arquivo
122
+ parse.field :sequencial, 394..399
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
@@ -0,0 +1,89 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'parseline'
3
+
4
+ module Brcobranca
5
+ module Retorno
6
+ module Cnab400
7
+ # Formato de Retorno CNAB 400
8
+ class BancoBrasilia < Brcobranca::Retorno::Base
9
+ extend ParseLine::FixedWidth
10
+
11
+ def self.load_lines(file, options = {})
12
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
13
+ options = default_options.merge!(options)
14
+
15
+ super file, options
16
+ end
17
+
18
+ fixed_width_layout do |parse|
19
+ # Todos os campos descritos no documento em ordem
20
+ # :tipo_de_registro, 0..0 # identificacao do registro transacao
21
+ parse.field :codigo_registro, 0..0
22
+
23
+ # :codigo_de_inscricao, 1..2 # identificacao do tipo de inscricao/empresa
24
+ # :numero_de_inscricao, 3..16 # numero de inscricao da empresa (cpf/cnpj)
25
+ # :zeros, 17..19
26
+
27
+ # Identificacao da empresa no banco
28
+ # :zeros, 20..20
29
+ parse.field :cedente_com_dv, 20..36
30
+
31
+ # :numero_controle_empresa, 37..61, # numero de controle da empresa
32
+ # :zeros, 62..69
33
+
34
+ # :nosso_numero, 62..69 # identificacao do titulo no banco
35
+ parse.field :nosso_numero, 70..81
36
+
37
+ # :zeros, 82..91 # uso do banco
38
+ # :zeros, 92..103 # uso do banco
39
+ # :indicador_de_rateio, 104..104 # indicador de rateio de credito
40
+ # :zeros, 105..106
41
+ # :carteira, 107..107 # de novo?
42
+ parse.field :codigo_ocorrencia, 108..109
43
+ parse.field :data_ocorrencia, 110..117
44
+ # :nosso_numero, 128..133 # confirmacao do numero do titulo no banco
45
+ # :brancos, 134..145 # complemento de registro
46
+
47
+ parse.field :data_vencimento, 148..155
48
+ parse.field :valor_titulo, 156..168
49
+ parse.field :banco_recebedor, 169..171
50
+
51
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
52
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
53
+ # :agencia_recebedora_com_dv, 168..172
54
+
55
+ parse.field :especie_documento, 177..178
56
+ parse.field :valor_tarifa, 179..191
57
+
58
+ # :outras_despesas 188..200, # valor de outras despesas ou custos do protesto
59
+ # :juros_operacao_em_atraso, 201..213 # zeros?
60
+
61
+ parse.field :iof, 218..230
62
+ parse.field :valor_abatimento, 231..243
63
+ parse.field :desconto, 244..256
64
+ parse.field :valor_recebido, 257..269
65
+ parse.field :outros_recebimento, 283..295
66
+
67
+ # :brancos, 292..293
68
+ # :motivo_do_codigo_de_ocorrencia, 294..294
69
+
70
+ # :data_credito, 295..300 # data de credito desta liquidacao
71
+ parse.field :data_credito, 299..306
72
+
73
+ # :origem_pagamento, 301..303
74
+ # :brancos, 304..313
75
+ # :cheque_bradesco, 314..317
76
+ # :motivo_rejeicao, 318..327
77
+ # :brancos, 328..367
78
+ # :numero_do_cartorio, 368..369
79
+ # :numero_do_protocolo, 370..379
80
+ # :brancos, 380..393
81
+
82
+ parse.field :motivo_ocorrencia, 364..393
83
+
84
+ parse.field :sequencial, 394..399
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,112 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'parseline'
3
+
4
+ module Brcobranca
5
+ module Retorno
6
+ module Cnab400
7
+ # Formato de Retorno CNAB 400
8
+ class BancoNordeste < Brcobranca::Retorno::Base
9
+ extend ParseLine::FixedWidth
10
+
11
+ def self.load_lines(file, options = {})
12
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
13
+ options = default_options.merge!(options)
14
+
15
+ super file, options
16
+ end
17
+
18
+ fixed_width_layout do |parse|
19
+ # Todos os campos descritos no documento em ordem
20
+ parse.field :codigo_registro, 0..0
21
+
22
+ # :codigo_de_inscricao, 1..2 # identificacao do tipo de inscricao/empresa
23
+ # :numero_de_inscricao, 3..16 # numero de inscricao da empresa (cpf/cnpj)
24
+ # :zeros, 17..19
25
+
26
+ # Identificacao da empresa no banco
27
+ # :zeros, 20..20
28
+ parse.field :agencia_sem_dv, 17..20
29
+ parse.field :cedente_com_dv, 23..30
30
+
31
+ # :numero_controle_empresa, 37..61, # numero de controle da empresa
32
+ # :zeros, 62..69
33
+
34
+ parse.field :nosso_numero, 62..69
35
+
36
+ # :zeros, 82..91 # uso do banco
37
+ # :zeros, 92..103 # uso do banco
38
+ # :indicador_de_rateio, 104..104 # indicador de rateio de credito
39
+ # :zeros, 105..106
40
+ # :carteira, 107..107 # de novo?
41
+ parse.field :carteira, 107..107
42
+ parse.field :codigo_ocorrencia, 108..109
43
+ parse.field :data_ocorrencia, 110..115
44
+
45
+ # :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
46
+ # :nosso_numero, 126..133 # confirmacao do numero do titulo no banco
47
+ # :brancos, 134..145 # complemento de registro
48
+
49
+ # :vencimento, 146..151 # data de vencimento do titulo (ddmmaa)
50
+ parse.field :data_vencimento, 146..151
51
+
52
+ # :valor_do_titulo, 152..164 # valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
53
+ parse.field :valor_titulo, 152..164
54
+
55
+ # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
56
+ parse.field :banco_recebedor, 165..167
57
+
58
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
59
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
60
+ # :agencia_recebedora_com_dv, 168..172
61
+
62
+ # :especie, 173..174 # especie do titulo
63
+ parse.field :especie_documento, 173..174
64
+
65
+ # :tarifa_de_cobranca, 175..187 # valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
66
+ parse.field :valor_tarifa, 175..187
67
+
68
+ # :outras_despesas 188..200, # valor de outras despesas ou custos do protesto
69
+ # :juros_operacao_em_atraso, 201..213 # zeros?
70
+
71
+ # :valor_do_iof, 214..226 # valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
72
+ # :iof, 214..226
73
+
74
+ # :valor_abatimento, 227..239 # valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
75
+ parse.field :valor_abatimento, 227..239
76
+
77
+ # :descontos, 240..252 # valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
78
+ parse.field :desconto, 240..252
79
+
80
+ # :valor_recebido, 253..265 # valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
81
+ parse.field :valor_recebido, 253..265
82
+
83
+ # :juros_mora, 266..278 # valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
84
+ parse.field :juros_mora, 266..278
85
+
86
+ # :outros_creditos, 279..291 # valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
87
+ # :outros_recebimento, 279..291
88
+
89
+ # :brancos, 292..293
90
+ # :motivo_do_codigo_de_ocorrencia, 294..294
91
+
92
+ # :data_credito, 295..300 # data de credito desta liquidacao
93
+ parse.field :data_credito, 146..151
94
+
95
+ # :origem_pagamento, 301..303
96
+ # :brancos, 304..313
97
+ # :cheque_bradesco, 314..317
98
+ # :motivo_rejeicao, 318..327
99
+ # :brancos, 328..367
100
+ # :numero_do_cartorio, 368..369
101
+ # :numero_do_protocolo, 370..379
102
+ # :brancos, 380..393
103
+
104
+ parse.field :motivo_ocorrencia, 279..393
105
+
106
+ # :numero_sequencial, 394..399 # numero sequencial no arquivo
107
+ parse.field :sequencial, 394..399
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end