bbrcobranca 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -0
  3. data/LICENSE +20 -0
  4. data/README.md +12 -0
  5. data/Rakefile +13 -0
  6. data/lib/bbrcobranca.rb +196 -0
  7. data/lib/bbrcobranca/arquivos/logos/bancobrasil.eps +5402 -0
  8. data/lib/bbrcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  9. data/lib/bbrcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  10. data/lib/bbrcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  11. data/lib/bbrcobranca/arquivos/logos/banconordeste.eps +0 -0
  12. data/lib/bbrcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  13. data/lib/bbrcobranca/arquivos/logos/banestes.eps +5198 -0
  14. data/lib/bbrcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  15. data/lib/bbrcobranca/arquivos/logos/banrisul.eps +121 -0
  16. data/lib/bbrcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  17. data/lib/bbrcobranca/arquivos/logos/bradesco.eps +5210 -0
  18. data/lib/bbrcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  19. data/lib/bbrcobranca/arquivos/logos/caixa.eps +5111 -0
  20. data/lib/bbrcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  21. data/lib/bbrcobranca/arquivos/logos/cecred.eps +0 -0
  22. data/lib/bbrcobranca/arquivos/logos/cecred_carne.eps +0 -0
  23. data/lib/bbrcobranca/arquivos/logos/credisis.eps +0 -0
  24. data/lib/bbrcobranca/arquivos/logos/credisis_carne.eps +0 -0
  25. data/lib/bbrcobranca/arquivos/logos/hsbc.eps +5124 -0
  26. data/lib/bbrcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  27. data/lib/bbrcobranca/arquivos/logos/itau.eps +5318 -0
  28. data/lib/bbrcobranca/arquivos/logos/itau_carne.eps +5322 -0
  29. data/lib/bbrcobranca/arquivos/logos/santander.eps +5305 -0
  30. data/lib/bbrcobranca/arquivos/logos/santander_carne.eps +5313 -0
  31. data/lib/bbrcobranca/arquivos/logos/sicoob.eps +5375 -0
  32. data/lib/bbrcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  33. data/lib/bbrcobranca/arquivos/logos/sicredi.eps +5379 -0
  34. data/lib/bbrcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  35. data/lib/bbrcobranca/arquivos/logos/unicred.eps +0 -0
  36. data/lib/bbrcobranca/arquivos/logos/unicred_carne.eps +0 -0
  37. data/lib/bbrcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  38. data/lib/bbrcobranca/arquivos/templates/modelo_generico.eps +0 -0
  39. data/lib/bbrcobranca/boleto/banco_brasil.rb +157 -0
  40. data/lib/bbrcobranca/boleto/banco_brasilia.rb +102 -0
  41. data/lib/bbrcobranca/boleto/banco_nordeste.rb +79 -0
  42. data/lib/bbrcobranca/boleto/banestes.rb +85 -0
  43. data/lib/bbrcobranca/boleto/banrisul.rb +94 -0
  44. data/lib/bbrcobranca/boleto/base.rb +256 -0
  45. data/lib/bbrcobranca/boleto/bradesco.rb +99 -0
  46. data/lib/bbrcobranca/boleto/bradesco_grb.rb +85 -0
  47. data/lib/bbrcobranca/boleto/caixa.rb +121 -0
  48. data/lib/bbrcobranca/boleto/cecred.rb +86 -0
  49. data/lib/bbrcobranca/boleto/credisis.rb +116 -0
  50. data/lib/bbrcobranca/boleto/hsbc.rb +94 -0
  51. data/lib/bbrcobranca/boleto/itau.rb +138 -0
  52. data/lib/bbrcobranca/boleto/itau_adimplere.rb +159 -0
  53. data/lib/bbrcobranca/boleto/santander.rb +84 -0
  54. data/lib/bbrcobranca/boleto/santander_adimplere.rb +73 -0
  55. data/lib/bbrcobranca/boleto/sicoob.rb +119 -0
  56. data/lib/bbrcobranca/boleto/sicredi.rb +142 -0
  57. data/lib/bbrcobranca/boleto/template/base.rb +25 -0
  58. data/lib/bbrcobranca/boleto/template/rghost.rb +315 -0
  59. data/lib/bbrcobranca/boleto/template/rghost_carne.rb +317 -0
  60. data/lib/bbrcobranca/boleto/unicred.rb +141 -0
  61. data/lib/bbrcobranca/calculo.rb +115 -0
  62. data/lib/bbrcobranca/calculo_data.rb +62 -0
  63. data/lib/bbrcobranca/currency.rb +69 -0
  64. data/lib/bbrcobranca/formatacao.rb +103 -0
  65. data/lib/bbrcobranca/formatacao_string.rb +35 -0
  66. data/lib/bbrcobranca/limpeza.rb +20 -0
  67. data/lib/bbrcobranca/remessa/base.rb +76 -0
  68. data/lib/bbrcobranca/remessa/cnab240/banco_brasil.rb +246 -0
  69. data/lib/bbrcobranca/remessa/cnab240/base.rb +512 -0
  70. data/lib/bbrcobranca/remessa/cnab240/base_correspondente.rb +299 -0
  71. data/lib/bbrcobranca/remessa/cnab240/caixa.rb +163 -0
  72. data/lib/bbrcobranca/remessa/cnab240/cecred.rb +151 -0
  73. data/lib/bbrcobranca/remessa/cnab240/sicoob.rb +226 -0
  74. data/lib/bbrcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
  75. data/lib/bbrcobranca/remessa/cnab240/sicredi.rb +177 -0
  76. data/lib/bbrcobranca/remessa/cnab240/unicred.rb +9 -0
  77. data/lib/bbrcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  78. data/lib/bbrcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
  79. data/lib/bbrcobranca/remessa/cnab400/banco_nordeste.rb +160 -0
  80. data/lib/bbrcobranca/remessa/cnab400/banrisul.rb +155 -0
  81. data/lib/bbrcobranca/remessa/cnab400/base.rb +119 -0
  82. data/lib/bbrcobranca/remessa/cnab400/bradesco.rb +130 -0
  83. data/lib/bbrcobranca/remessa/cnab400/citibank.rb +138 -0
  84. data/lib/bbrcobranca/remessa/cnab400/credisis.rb +128 -0
  85. data/lib/bbrcobranca/remessa/cnab400/itau.rb +157 -0
  86. data/lib/bbrcobranca/remessa/cnab400/santander.rb +231 -0
  87. data/lib/bbrcobranca/remessa/cnab400/sicoob.rb +308 -0
  88. data/lib/bbrcobranca/remessa/cnab400/unicred.rb +143 -0
  89. data/lib/bbrcobranca/remessa/pagamento.rb +288 -0
  90. data/lib/bbrcobranca/retorno/base.rb +49 -0
  91. data/lib/bbrcobranca/retorno/cnab240/base.rb +42 -0
  92. data/lib/bbrcobranca/retorno/cnab240/caixa.rb +48 -0
  93. data/lib/bbrcobranca/retorno/cnab240/cecred.rb +102 -0
  94. data/lib/bbrcobranca/retorno/cnab240/santander.rb +95 -0
  95. data/lib/bbrcobranca/retorno/cnab240/sicoob.rb +99 -0
  96. data/lib/bbrcobranca/retorno/cnab240/sicredi.rb +79 -0
  97. data/lib/bbrcobranca/retorno/cnab400/banco_brasil.rb +127 -0
  98. data/lib/bbrcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
  99. data/lib/bbrcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
  100. data/lib/bbrcobranca/retorno/cnab400/banrisul.rb +42 -0
  101. data/lib/bbrcobranca/retorno/cnab400/base.rb +50 -0
  102. data/lib/bbrcobranca/retorno/cnab400/bradesco.rb +124 -0
  103. data/lib/bbrcobranca/retorno/cnab400/credisis.rb +115 -0
  104. data/lib/bbrcobranca/retorno/cnab400/itau.rb +143 -0
  105. data/lib/bbrcobranca/retorno/cnab400/santander.rb +57 -0
  106. data/lib/bbrcobranca/retorno/cnab400/unicred.rb +118 -0
  107. data/lib/bbrcobranca/retorno/retorno_cbr643.rb +49 -0
  108. data/lib/bbrcobranca/retorno/retorno_cnab240.rb +97 -0
  109. data/lib/bbrcobranca/retorno/retorno_cnab400.rb +70 -0
  110. data/lib/bbrcobranca/util/date.rb +20 -0
  111. data/lib/bbrcobranca/util/empresa.rb +28 -0
  112. data/lib/bbrcobranca/util/errors.rb +76 -0
  113. data/lib/bbrcobranca/validations.rb +232 -0
  114. data/lib/bbrcobranca/version.rb +6 -0
  115. data/spec/arquivos/CBR64310.RET +28 -0
  116. data/spec/arquivos/CNAB240.RET +74 -0
  117. data/spec/arquivos/CNAB240CECRED.RET +10 -0
  118. data/spec/arquivos/CNAB240SANTANDER.RET +8 -0
  119. data/spec/arquivos/CNAB240SICOOB.RET +10 -0
  120. data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
  121. data/spec/arquivos/CNAB400.RET +54 -0
  122. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
  123. data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
  124. data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
  125. data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
  126. data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
  127. data/spec/arquivos/CNAB400ITAU.RET +54 -0
  128. data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
  129. data/spec/arquivos/CNAB400UNICRED.RET +3 -0
  130. data/spec/bbrcobranca_spec.rb +34 -0
  131. data/spec/brcobranca/base_spec.rb +170 -0
  132. data/spec/brcobranca/boleto/banco_brasil_spec.rb +334 -0
  133. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +152 -0
  134. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +161 -0
  135. data/spec/brcobranca/boleto/banestes_spec.rb +194 -0
  136. data/spec/brcobranca/boleto/banrisul_spec.rb +182 -0
  137. data/spec/brcobranca/boleto/bradesco_spec.rb +211 -0
  138. data/spec/brcobranca/boleto/caixa_spec.rb +161 -0
  139. data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
  140. data/spec/brcobranca/boleto/credisis_spec.rb +159 -0
  141. data/spec/brcobranca/boleto/hsbc_spec.rb +172 -0
  142. data/spec/brcobranca/boleto/itau_spec.rb +262 -0
  143. data/spec/brcobranca/boleto/santander_spec.rb +143 -0
  144. data/spec/brcobranca/boleto/sicoob_spec.rb +193 -0
  145. data/spec/brcobranca/boleto/sicredi_spec.rb +190 -0
  146. data/spec/brcobranca/boleto/unicred_spec.rb +149 -0
  147. data/spec/brcobranca/boletos_em_lote_spec.rb +38 -0
  148. data/spec/brcobranca/calculo_data_spec.rb +33 -0
  149. data/spec/brcobranca/calculo_spec.rb +185 -0
  150. data/spec/brcobranca/currency_spec.rb +79 -0
  151. data/spec/brcobranca/formatacao_spec.rb +46 -0
  152. data/spec/brcobranca/formatacao_string_spec.rb +24 -0
  153. data/spec/brcobranca/limpeza_spec.rb +10 -0
  154. data/spec/brcobranca/remessa/base_spec.rb +67 -0
  155. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +217 -0
  156. data/spec/brcobranca/remessa/cnab240/base_spec.rb +91 -0
  157. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +163 -0
  158. data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
  159. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
  160. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +198 -0
  161. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
  162. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
  163. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +187 -0
  164. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
  165. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +187 -0
  166. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
  167. data/spec/brcobranca/remessa/cnab400/base_spec.rb +53 -0
  168. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +201 -0
  169. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +126 -0
  170. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
  171. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +190 -0
  172. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +152 -0
  173. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +217 -0
  174. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
  175. data/spec/brcobranca/remessa/pagamento_spec.rb +227 -0
  176. data/spec/brcobranca/retorno/cnab240/base_spec.rb +23 -0
  177. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
  178. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +50 -0
  179. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +50 -0
  180. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
  181. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
  182. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
  183. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
  184. data/spec/brcobranca/retorno/cnab400/base_spec.rb +57 -0
  185. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +58 -0
  186. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
  187. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +58 -0
  188. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
  189. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
  190. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +69 -0
  191. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +57 -0
  192. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +52 -0
  193. data/spec/brcobranca/rghost_spec.rb +29 -0
  194. data/spec/brcobranca/util/empresa_spec.rb +36 -0
  195. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +3 -0
  196. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
  197. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +3 -0
  198. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +7 -0
  199. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +7 -0
  200. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
  201. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +3 -0
  202. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +7 -0
  203. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
  204. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +3 -0
  205. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
  206. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +4 -0
  207. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +3 -0
  208. data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +3 -0
  209. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
  210. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
  211. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
  212. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
  213. data/spec/spec.opts +8 -0
  214. data/spec/spec_helper.rb +38 -0
  215. data/spec/support/remessa_helpers.rb +13 -0
  216. data/spec/support/shared_examples/busca_logotipo.rb +15 -0
  217. data/spec/support/shared_examples/cnab240.rb +259 -0
  218. data/spec/support/shared_examples/cnab400.rb +180 -0
  219. data/spec/support/shared_examples/formatos_validos.rb +36 -0
  220. metadata +422 -0
@@ -0,0 +1,95 @@
1
+ module Bbrcobranca
2
+ module Retorno
3
+ module Cnab240
4
+ class Santander < Bbrcobranca::Retorno::Cnab240::Base
5
+ # Regex para remoção de headers e trailers além de registros diferentes de T ou U
6
+ REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U = /^((?!^.{7}3.{5}[T|U].*$).)*$/
7
+
8
+ def self.load_lines(file, options = {})
9
+ default_options = { except: REGEX_DE_EXCLUSAO_DE_REGISTROS_NAO_T_OU_U }
10
+ options = default_options.merge!(options)
11
+
12
+ Line.load_lines(file, options).each_slice(2).reduce([]) do |retornos, cnab_lines|
13
+ retornos << generate_retorno_based_on_cnab_lines(cnab_lines)
14
+ end
15
+ end
16
+
17
+ def self.generate_retorno_based_on_cnab_lines(cnab_lines)
18
+ retorno = new
19
+ cnab_lines.each do |line|
20
+ if line.tipo_registro == 'T'
21
+ Line::REGISTRO_T_FIELDS.each do |attr|
22
+ retorno.send(attr + '=', line.send(attr))
23
+ end
24
+ else
25
+ Line::REGISTRO_U_FIELDS.each do |attr|
26
+ retorno.send(attr + '=', line.send(attr))
27
+ end
28
+ end
29
+ end
30
+ retorno
31
+ end
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
37
+ class Line < Base
38
+ extend ParseLine::FixedWidth # Extendendo parseline
39
+
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)
42
+
43
+ attr_accessor :tipo_registro
44
+
45
+ fixed_width_layout do |parse|
46
+ parse.field :codigo_registro, 7..7
47
+ parse.field :sequencial, 8..12
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
53
+ parse.field :carteira, 53..53
54
+ parse.field :data_vencimento, 69..76
55
+ parse.field :valor_titulo, 77..91
56
+ parse.field :banco_recebedor, 92..94
57
+ parse.field :agencia_recebedora_com_dv, 95..99
58
+ parse.field :data_ocorrencia, 137..144
59
+ parse.field :data_credito, 145..152
60
+ parse.field :outras_despesas, 107..121
61
+ parse.field :iof_desconto, 62..76
62
+ parse.field :valor_abatimento, 47..61
63
+ parse.field :desconto_concedito, 32..46
64
+ parse.field :valor_recebido, 77..91
65
+ parse.field :juros_mora, 17..31
66
+ parse.field :outros_recebimento, 122..136
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
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,99 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'parseline'
4
+
5
+ module Bbrcobranca
6
+ module Retorno
7
+ module Cnab240
8
+ class Sicoob < Bbrcobranca::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].*$).)*$/
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 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)
46
+
47
+ attr_accessor :tipo_registro
48
+
49
+ fixed_width_layout do |parse|
50
+ parse.field :codigo_registro, 7..7
51
+ parse.field :tipo_registro, 13..13
52
+ parse.field :sequencial, 8..12
53
+ parse.field :codigo_ocorrencia, 15..16
54
+ parse.field :agencia_com_dv, 17..22
55
+ parse.field :cedente_com_dv, 23..35
56
+ parse.field :nosso_numero, 37..46
57
+ parse.field :carteira, 57..57
58
+ parse.field :data_vencimento, 73..80
59
+ parse.field :valor_titulo, 81..95
60
+ parse.field :banco_recebedor, 96..98
61
+ parse.field :agencia_recebedora_com_dv, 99..104
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, 198..212
72
+ parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
73
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
74
+ end
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,79 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'parseline'
3
+
4
+ module Bbrcobranca
5
+ module Retorno
6
+ module Cnab240
7
+ class Sicredi < Bbrcobranca::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 Bbrcobranca
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 < Bbrcobranca::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 Bbrcobranca
5
+ module Retorno
6
+ module Cnab400
7
+ # Formato de Retorno CNAB 400
8
+ class BancoBrasilia < Bbrcobranca::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