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,143 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'parseline'
3
+
4
+ module Bbrcobranca
5
+ module Retorno
6
+ module Cnab400
7
+ # Formato de Retorno CNAB 400
8
+ # Baseado em: http://download.itau.com.br/bankline/layout_cobranca_400bytes_cnab_itau_mensagem.pdf
9
+ class Itau < Bbrcobranca::Retorno::Cnab400::Base
10
+ extend ParseLine::FixedWidth # Extendendo parseline
11
+
12
+ # Load lines
13
+ def self.load_lines(file, options = {})
14
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
15
+ options = default_options.merge!(options)
16
+ super file, options
17
+ end
18
+
19
+ fixed_width_layout do |parse|
20
+ # Todos os campos descritos no documento em ordem
21
+ # identificacao do registro transacao
22
+ parse.field :codigo_registro, 0..0
23
+ # :codigo_de_inscricao, 1..2 # identificacao do tipo de inscrica/empresa
24
+ # :numero_de_inscricao, 3..16 #numero de inscricao da empresa (cpf/cnpj)
25
+
26
+ # :agencia, 17..20 #agencia mantenedora da conta
27
+ parse.field :agencia_com_dv, 17..20 # FIXME - SEM DIV
28
+
29
+ # :zeros, 21..22 # complemento de registro
30
+
31
+ # :conta, 23..27 #numero da conta corrente da empresa
32
+ # :dac, 28..28 #digito de auto conferencia ag/conta empresa
33
+ parse.field :cedente_com_dv, 23..28
34
+
35
+ # :brancos, 29..36 #complemento de registro
36
+ # :uso_da_empresa, 37..61 #identificacao do titulo na empresa
37
+
38
+ # :nosso_numero,62..69 # identificacao do titulo no banco
39
+ parse.field :nosso_numero, 62..69
40
+
41
+ # :brancos, 70..81 #complemento do registro
42
+
43
+ # :carteira, 82..84 #numero da carteira
44
+ parse.field :carteira_variacao, 82..84
45
+
46
+ # :nosso_numero, 85..92 #identificacao do titulo no banco (novamente?)
47
+ # :dac_nosso_numero, 93..93 #dac nosso numero
48
+ # :brancos, 94..106 #complemento do registro
49
+
50
+ # :carteira, 107..107 #código da carteira
51
+ parse.field :carteira, 107..107
52
+
53
+ parse.field :codigo_ocorrencia, 108..109
54
+
55
+ parse.field :data_ocorrencia, 110..115
56
+
57
+ # :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
58
+ # :nosso_numero, 126..133 # confirmacao do numero do titulo no banco
59
+ # :brancos, 134..145 #complemento de registro
60
+
61
+ # :vencimento, 146..151 #data de vencimento do titulo (ddmmaa)
62
+ parse.field :data_vencimento, 146..151
63
+
64
+ # :valor_do_titulo, 152..164 #valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
65
+ parse.field :valor_titulo, 152..164
66
+
67
+ # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
68
+ parse.field :banco_recebedor, 165..167
69
+
70
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
71
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
72
+ parse.field :agencia_recebedora_com_dv, 168..172
73
+
74
+ # :especie, 173..174 # especie do titulo
75
+ parse.field :especie_documento, 173..174
76
+
77
+ # :tarifa_de_cobranca, 175..187 #valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
78
+ parse.field :valor_tarifa, 175..187
79
+
80
+ # :brancos, 188..213 #complemento do registro
81
+
82
+ # :valor_do_iof, 214..226 #valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
83
+ parse.field :iof, 214..226
84
+
85
+ # :valor_abatimento, 227..239 #valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
86
+ parse.field :valor_abatimento, 227..239
87
+
88
+ # :descontos, 240..252 #valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
89
+ parse.field :desconto, 240..252
90
+
91
+ # :valor_principal, 253..265 #valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
92
+
93
+ parse.field :valor_recebido, 253..265
94
+
95
+ # :juros_mora_multa, 266..278 #valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
96
+ parse.field :juros_mora, 266..278
97
+
98
+ # :outros_creditos, 279..291 #valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
99
+ parse.field :outros_recebimento, 279..291
100
+
101
+ # :boleto_dda, 292..292 #indicador de boleto dda
102
+ # :brancos, 293..294 #complemento de registro
103
+
104
+ # :data_credito, 295..300 #data de credito desta liquidacao
105
+ parse.field :data_credito, 295..300
106
+
107
+ # :instr_cancelada, 301..304 # codigo da instrucao cancelada
108
+ # :brancos , 305..310 # complemento de registro
109
+ # :zeros, 311..323 #complemento de registro
110
+ # :nome_do_sacado, 324..353, #nome do sacado
111
+ # :brancos , 354..376 # complemento de registro
112
+ # :erros_msg, 377..384 #registros rejeitados ou laegacao do sacado ou registro de mensagem informativa
113
+ # :brancos, 385..391 #complemento de registro
114
+ # :cod_de_liquidacao, 392..393 #meio pelo qual o título foi liquidado
115
+
116
+ parse.field :motivo_ocorrencia, 377..384, ->(motivos) do
117
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
118
+ end
119
+
120
+ # :numero_sequencial, 394..399 #numero sequencial no arquivo
121
+ parse.field :sequencial, 394..399
122
+
123
+ # Campos da classe base que não encontrei a relação com CNAB400
124
+ # parse.field :tipo_cobranca, 80..80
125
+ # parse.field :tipo_cobranca_anterior, 81..81
126
+ # parse.field :natureza_recebimento, 86..87
127
+ # parse.field :convenio, 31..37
128
+ # parse.field :comando, 108..109
129
+ # parse.field :juros_desconto, 201..213
130
+ # parse.field :iof_desconto, 214..226
131
+ # parse.field :desconto_concedito, 240..252
132
+ # parse.field :outras_despesas, 279..291
133
+ # parse.field :abatimento_nao_aproveitado, 292..304
134
+ # parse.field :data_liquidacao, 295..300
135
+ # parse.field :valor_lancamento, 305..317
136
+ # parse.field :indicativo_lancamento, 318..318
137
+ # parse.field :indicador_valor, 319..319
138
+ # parse.field :valor_ajuste, 320..331
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,57 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'parseline'
3
+
4
+ module Bbrcobranca
5
+ module Retorno
6
+ module Cnab400
7
+ # Formato de Retorno CNAB 400
8
+ # Baseado em: http://download.itau.com.br/bankline/layout_cobranca_400bytes_cnab_itau_mensagem.pdf
9
+ class Santander < Bbrcobranca::Retorno::Cnab400::Base
10
+ extend ParseLine::FixedWidth # Extendendo parseline
11
+
12
+ # Load lines
13
+ def self.load_lines(file, options = {})
14
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
15
+ options = default_options.merge!(options)
16
+ super file, options
17
+ end
18
+
19
+ fixed_width_layout do |parse|
20
+ # Todos os campos descritos no documento em ordem
21
+ # identificacao do registro transacao
22
+ # começa do 0 então contar com +1 as posições
23
+ parse.field :codigo_registro, 0..0
24
+ parse.field :agencia_com_dv, 17..20
25
+ parse.field :cedente_com_dv, 23..28
26
+ parse.field :nosso_numero, 62..69
27
+ # parse.field :carteira_variacao, 82..84
28
+ parse.field :carteira, 107..107
29
+ parse.field :codigo_ocorrencia, 108..109
30
+ parse.field :data_ocorrencia, 110..115
31
+ # identificados na documentação mas não parseados
32
+ #parse.field :seu_numero, 116..125 seu numero
33
+ #parse.field :nosso_numero, 126..133 nosso numero denovo?
34
+ #parse.field :codigo_rejeicao, 134..135 nosso numero
35
+ parse.field :motivo_ocorrencia, 136..145, ->(motivos) do
36
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
37
+ end
38
+
39
+ parse.field :data_vencimento, 146..151
40
+ parse.field :valor_titulo, 152..164
41
+ parse.field :banco_recebedor, 165..167
42
+ parse.field :agencia_recebedora_com_dv, 168..172
43
+ parse.field :especie_documento, 173..174
44
+ parse.field :valor_tarifa, 175..187
45
+ parse.field :iof, 214..226
46
+ parse.field :valor_abatimento, 227..239
47
+ parse.field :desconto, 240..252
48
+ parse.field :valor_recebido, 253..265
49
+ parse.field :juros_mora, 266..278
50
+ parse.field :outros_recebimento, 279..291
51
+ parse.field :data_credito, 295..300
52
+ parse.field :sequencial, 394..399
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,118 @@
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 Unicred < 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
+ # :carteira, 21..23
30
+ parse.field :agencia_sem_dv, 17..20
31
+ parse.field :cedente_com_dv, 21..28
32
+ # :agencia_sem_dv, 24..28
33
+ # :cedente_com_dv, 29..36
34
+
35
+ # :numero_controle_empresa, 37..61, # numero de controle da empresa
36
+ # :zeros, 62..69
37
+
38
+ # :nosso_numero, 62..69 # identificacao do titulo no banco
39
+ parse.field :nosso_numero, 62..69
40
+
41
+ # :zeros, 82..91 # uso do banco
42
+ # :zeros, 92..103 # uso do banco
43
+ # :indicador_de_rateio, 104..104 # indicador de rateio de credito
44
+ # :zeros, 105..106
45
+
46
+ parse.field :carteira, 107
47
+ parse.field :codigo_ocorrencia, 108..109
48
+ parse.field :data_ocorrencia, 110..115
49
+ # :n_do_documento, 116..125 # n umero do documento de cobranca (dupl, np etc)
50
+ # :nosso_numero, 126..133 # confirmacao do numero do titulo no banco
51
+ # :brancos, 134..145 # complemento de registro
52
+
53
+ # :vencimento, 146..151 # data de vencimento do titulo (ddmmaa)
54
+ parse.field :data_vencimento, 146..151
55
+
56
+ # :valor_do_titulo, 152..164 # valor nominal do titulo (ultimos 2 digitos, virgula decimal assumida)
57
+ parse.field :valor_titulo, 152..164
58
+
59
+ # :codigo_do_banco, 165..167 # numero do banco na camara de compensacao
60
+ parse.field :banco_recebedor, 165..167
61
+
62
+ # :agencia_cobradora, 168..171 # agencia cobradora, ag de liquidacao ou baixa
63
+ # :dac_ag_cobradora, 172..172 # dac da agencia cobradora
64
+ parse.field :agencia_recebedora_com_dv, 168..172
65
+
66
+ # :especie, 173..174 # especie do titulo
67
+ parse.field :especie_documento, 173..174
68
+
69
+ # :tarifa_de_cobranca, 175..187 # valor da despesa de cobranca (ultimos 2 digitos, virgula decimal assumida)
70
+ parse.field :valor_tarifa, 175..187
71
+
72
+ # :outras_despesas 188..200, # valor de outras despesas ou custos do protesto
73
+ # :juros_operacao_em_atraso, 201..213 # zeros?
74
+
75
+ # :valor_do_iof, 214..226 # valor do iof a ser recolhido (ultimos 2 digitos, virgula decimal assumida)
76
+ parse.field :iof, 214..226
77
+
78
+ # :valor_abatimento, 227..239 # valor do abatimento concedido (ultimos 2 digitos, virgula decimal assumida)
79
+ parse.field :valor_abatimento, 227..239
80
+
81
+ # :descontos, 240..252 # valor do desconto concedido (ultimos 2 digitos, virgula decimal assumida)
82
+ parse.field :desconto, 240..252
83
+
84
+ # :valor_recebido, 253..265 # valor lancado em conta corrente (ultimos 2 digitos, virgula decimal assumida)
85
+ parse.field :valor_recebido, 253..265
86
+
87
+ # :juros_mora, 266..278 # valor de mora e multa pagos pelo sacado (ultimos 2 digitos, virgula decimal assumida)
88
+ parse.field :juros_mora, 266..278
89
+
90
+ # :outros_creditos, 279..291 # valor de outros creditos (ultimos 2 digitos, virgula decimal assumida)
91
+ parse.field :outros_recebimento, 279..291
92
+
93
+ # :brancos, 292..293
94
+ # :motivo_do_codigo_de_ocorrencia, 294..294
95
+
96
+ # :data_credito, 295..300 # data de credito desta liquidacao
97
+ parse.field :data_credito, 295..300
98
+
99
+ # :origem_pagamento, 301..303
100
+ # :brancos, 304..313
101
+ # :cheque_bradesco, 314..317
102
+ # :motivo_rejeicao, 318..327
103
+ # :brancos, 328..367
104
+ # :numero_do_cartorio, 368..369
105
+ # :numero_do_protocolo, 370..379
106
+ # :brancos, 380..393
107
+
108
+ parse.field :motivo_ocorrencia, 318..319, ->(motivos) do
109
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
110
+ end
111
+
112
+ # :numero_sequencial, 394..399 # numero sequencial no arquivo
113
+ parse.field :sequencial, 394..399
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,49 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+
4
+ require 'parseline'
5
+ module Bbrcobranca
6
+ module Retorno
7
+ # Formato de Retorno CNAB 643
8
+ class RetornoCbr643 < Base
9
+ extend ParseLine::FixedWidth # Extendendo parseline
10
+
11
+ fixed_width_layout do |parse|
12
+ parse.field :agencia_com_dv, 17..21
13
+ parse.field :cedente_com_dv, 22..30
14
+ parse.field :convenio, 31..37
15
+ parse.field :nosso_numero, 63..79
16
+ parse.field :tipo_cobranca, 80..80
17
+ parse.field :tipo_cobranca_anterior, 81..81
18
+ parse.field :natureza_recebimento, 86..87
19
+ parse.field :carteira_variacao, 91..93
20
+ parse.field :desconto, 95..99
21
+ parse.field :iof, 100..104
22
+ parse.field :carteira, 106..107
23
+ parse.field :comando, 108..109
24
+ parse.field :data_liquidacao, 110..115
25
+ parse.field :data_vencimento, 146..151
26
+ parse.field :valor_titulo, 152..164
27
+ parse.field :banco_recebedor, 165..167
28
+ parse.field :agencia_recebedora_com_dv, 168..172
29
+ parse.field :especie_documento, 173..174
30
+ parse.field :data_credito, 175..180
31
+ parse.field :valor_tarifa, 181..187
32
+ parse.field :outras_despesas, 188..200
33
+ parse.field :juros_desconto, 201..213
34
+ parse.field :iof_desconto, 214..226
35
+ parse.field :valor_abatimento, 227..239
36
+ parse.field :desconto_concedito, 240..252
37
+ parse.field :valor_recebido, 253..265
38
+ parse.field :juros_mora, 266..278
39
+ parse.field :outros_recebimento, 279..291
40
+ parse.field :abatimento_nao_aproveitado, 292..304
41
+ parse.field :valor_lancamento, 305..317
42
+ parse.field :indicativo_lancamento, 318..318
43
+ parse.field :indicador_valor, 319..319
44
+ parse.field :valor_ajuste, 320..331
45
+ parse.field :sequencial, 394..399
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,97 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'parseline'
4
+ module Bbrcobranca
5
+ module Retorno
6
+ # Formato de Retorno CNAB 240
7
+ class RetornoCnab240 < 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, 46..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
+
75
+ # Dados que não consegui extrair dos registros T e U
76
+ # parse.field :convenio,31..37
77
+ # parse.field :tipo_cobranca,80..80
78
+ # parse.field :tipo_cobranca_anterior,81..81
79
+ # parse.field :natureza_recebimento,86..87
80
+ # parse.field :carteira_variacao,91..93
81
+ # parse.field :desconto,95..99
82
+ # parse.field :iof,100..104
83
+ # parse.field :comando,108..109
84
+ # parse.field :data_liquidacao,110..115
85
+ # parse.field :especie_documento,173..174
86
+ # parse.field :valor_tarifa,181..187
87
+ # parse.field :juros_desconto,201..213
88
+ # parse.field :abatimento_nao_aproveitado,292..304
89
+ # parse.field :valor_lancamento,305..317
90
+ # parse.field :indicativo_lancamento,318..318
91
+ # parse.field :indicador_valor,319..319
92
+ # parse.field :valor_ajuste,320..331
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end