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,288 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Bbrcobranca
3
+ module Remessa
4
+ class Pagamento
5
+
6
+ include Bbrcobranca::Validations
7
+
8
+ # <b>REQUERIDO</b>: nosso numero
9
+ attr_accessor :nosso_numero
10
+ # <b>REQUERIDO</b>: data do vencimento do boleto
11
+ attr_accessor :data_vencimento
12
+ # <b>REQUERIDO</b>: data de emissao do boleto
13
+ attr_accessor :data_emissao
14
+ # <b>REQUERIDO</b>: valor do boleto
15
+ attr_accessor :valor
16
+ # <b>REQUERIDO</b>: documento do sacado (cliente)
17
+ attr_accessor :documento_sacado
18
+ # <b>REQUERIDO</b>: nome do sacado (cliente)
19
+ attr_accessor :nome_sacado
20
+ # <b>REQUERIDO</b>: endereco do sacado (cliente)
21
+ attr_accessor :endereco_sacado
22
+ # <b>REQUERIDO</b>: bairro do sacado (cliente)
23
+ attr_accessor :bairro_sacado
24
+ # <b>REQUERIDO</b>: CEP do sacado (cliente)
25
+ attr_accessor :cep_sacado
26
+ # <b>REQUERIDO</b>: cidade do sacado (cliente)
27
+ attr_accessor :cidade_sacado
28
+ # <b>REQUERIDO</b>: UF do sacado (cliente)
29
+ attr_accessor :uf_sacado
30
+ # <b>REQUERIDO</b>: Código da ocorrência
31
+ attr_accessor :identificacao_ocorrencia
32
+ # <b>OPCIONAL</b>: nome do avalista
33
+ attr_accessor :nome_avalista
34
+ # <b>OPCIONAL</b>: documento do avalista
35
+ attr_accessor :documento_avalista
36
+ # <b>OPCIONAL</b>: codigo da 1a instrucao
37
+ attr_accessor :cod_primeira_instrucao
38
+ # <b>OPCIONAL</b>: codigo da 2a instrucao
39
+ attr_accessor :cod_segunda_instrucao
40
+ # <b>OPCIONAL</b>: valor da mora ao dia
41
+ attr_accessor :valor_mora
42
+ # <b>OPCIONAL</b>: data limite para o desconto
43
+ attr_accessor :data_desconto
44
+ # <b>OPCIONAL</b>: valor a ser concedido de desconto
45
+ attr_accessor :valor_desconto
46
+ # <b>OPCIONAL</b>: codigo do desconto (para CNAB240)
47
+ attr_accessor :cod_desconto
48
+ # <b>OPCIONAL</b>: valor do IOF
49
+ attr_accessor :valor_iof
50
+ # <b>OPCIONAL</b>: valor do abatimento
51
+ attr_accessor :valor_abatimento
52
+ # <b>OPCIONAL</b>: Número do Documento de Cobrança - Número adotado e controlado pelo Cliente,
53
+ # para identificar o título de cobrança.
54
+ # Informação utilizada para referenciar a identificação do documento objeto de cobrança.
55
+ # Poderá conter número de duplicata, no caso de cobrança de duplicatas; número da apólice,
56
+ # no caso de cobrança de seguros, etc
57
+ attr_accessor :numero
58
+ # <b>OPCIONAL</b>: Número utilizado para controle do beneficiário/cedente
59
+ attr_accessor :documento
60
+ # <b>OPCIONAL</b>: data limite para o desconto
61
+ attr_accessor :data_segundo_desconto
62
+ # <b>OPCIONAL</b>: valor a ser concedido de desconto
63
+ attr_accessor :valor_segundo_desconto
64
+ # <b>OPCIONAL</b>: espécie do título
65
+ attr_accessor :especie_titulo
66
+ # <b>OPCIONAL</b>: código da multa
67
+ attr_accessor :codigo_multa
68
+ # <b>OPCIONAL</b>: Percentual multa por atraso %
69
+ attr_accessor :percentual_multa
70
+ # <b>OPCIONAL</b>: Data para cobrança de multa
71
+ attr_accessor :data_multa
72
+ # <b>OPCIONAL</b>: tipo de mora (diário, mensal)
73
+ attr_accessor :tipo_mora
74
+ # <b>OPCIONAL</b>: Data para cobrança de mora
75
+ attr_accessor :data_mora
76
+ # <b>OPCIONAL</b>: codigo dos juros
77
+ attr_accessor :codigo_juros
78
+ # <b>OPCIONAL</b>: codigo do protesto
79
+ attr_accessor :codigo_protesto
80
+ # <b>OPCIONAL</b>: dias para protesto
81
+ attr_accessor :dias_protesto
82
+ # <b>OPCIONAL</b>: codigo baixa
83
+ attr_accessor :codigo_baixa
84
+ # <b>OPCIONAL</b>: dias para baixa
85
+ attr_accessor :dias_baixa
86
+ # <b>OPCIONAL</b>: Número da Parcela
87
+ attr_accessor :parcela
88
+
89
+ validates_presence_of :nosso_numero, :data_vencimento, :valor,
90
+ :documento_sacado, :nome_sacado, :endereco_sacado,
91
+ :cep_sacado, :cidade_sacado, :uf_sacado, message: 'não pode estar em branco.'
92
+ validates_length_of :uf_sacado, is: 2, message: 'deve ter 2 dígitos.'
93
+ validates_length_of :cep_sacado, is: 8, message: 'deve ter 8 dígitos.'
94
+ validates_length_of :cod_desconto, is: 1, message: 'deve ter 1 dígito.'
95
+ validates_length_of :especie_titulo, is: 2, message: 'deve ter 2 dígitos.', allow_blank: true
96
+ validates_length_of :identificacao_ocorrencia, is: 2, message: 'deve ter 2 dígitos.'
97
+
98
+ # Nova instancia da classe Pagamento
99
+ #
100
+ # @param campos [Hash]
101
+ #
102
+ def initialize(campos = {})
103
+ padrao = {
104
+ data_emissao: Date.current,
105
+ data_segundo_desconto:'00-00-00',
106
+ tipo_mora: "3",
107
+ valor_mora: 0.0,
108
+ valor_desconto: 0.0,
109
+ valor_segundo_desconto: 0.0,
110
+ valor_iof: 0.0,
111
+ valor_abatimento: 0.0,
112
+ nome_avalista: '',
113
+ cod_desconto: '0',
114
+ especie_titulo: '01',
115
+ identificacao_ocorrencia: '01',
116
+ codigo_multa: '0',
117
+ percentual_multa: 0.0,
118
+ parcela: '01',
119
+ codigo_protesto: '3',
120
+ dias_protesto: '00',
121
+ codigo_baixa: '0',
122
+ dias_baixa: '000',
123
+ cod_primeira_instrucao: '00',
124
+ cod_segunda_instrucao: '00'
125
+ }
126
+
127
+ campos = padrao.merge!(campos)
128
+ campos.each do |campo, valor|
129
+ send "#{campo}=", valor
130
+ end
131
+
132
+ yield self if block_given?
133
+ end
134
+
135
+ # Formata a data de desconto de acordo com o formato passado
136
+ #
137
+ # @return [String]
138
+ #
139
+ def formata_data_desconto(formato = '%d%m%y')
140
+ data_desconto.strftime(formato)
141
+ rescue
142
+ if formato == '%d%m%y'
143
+ '000000'
144
+ else
145
+ '00000000'
146
+ end
147
+ end
148
+
149
+ # Formata a data de segundo desconto de acordo com o formato passado
150
+ #
151
+ # @return [String]
152
+ #
153
+ def formata_data_segundo_desconto(formato = '%d%m%y')
154
+ data_segundo_desconto.strftime(formato)
155
+ rescue
156
+ if formato == '%d%m%y'
157
+ '000000'
158
+ else
159
+ '00000000'
160
+ end
161
+ end
162
+
163
+ # Formata a valor do percentual da multa
164
+ #
165
+ # @param tamanho [Integer]
166
+ # quantidade de caracteres a ser retornado
167
+ #
168
+ # @return [String]
169
+ #
170
+ def formata_percentual_multa(tamanho = 4)
171
+ format_value(percentual_multa, tamanho)
172
+ end
173
+
174
+ # Formata a data de cobrança da multa
175
+ #
176
+ # @return [String]
177
+ #
178
+ def formata_data_multa(formato = '%d%m%y')
179
+ data_multa.strftime(formato)
180
+ rescue
181
+ if formato == '%d%m%y'
182
+ '000000'
183
+ else
184
+ '00000000'
185
+ end
186
+ end
187
+
188
+ # Formata o campo valor
189
+ # referentes as casas decimais
190
+ # exe. R$199,90 => 0000000019990
191
+ #
192
+ # @param tamanho [Integer]
193
+ # quantidade de caracteres a ser retornado
194
+ #
195
+ def formata_valor(tamanho = 13)
196
+ format_value(valor, tamanho)
197
+ end
198
+
199
+ def documento_ou_numero
200
+ documento.present? ? documento : numero
201
+ end
202
+
203
+ def formata_documento_ou_numero(tamanho = 25, caracter = ' ')
204
+ doc = documento_ou_numero.to_s.gsub(/[^0-9A-Za-z ]/, '')
205
+ doc.rjust(tamanho, caracter)[0...tamanho]
206
+ end
207
+
208
+ # Formata o campo valor da mora
209
+ #
210
+ # @param tamanho [Integer]
211
+ # quantidade de caracteres a ser retornado
212
+ #
213
+ def formata_valor_mora(tamanho = 13)
214
+ format_value(valor_mora, tamanho)
215
+ end
216
+
217
+ # Formata o campo valor da multa
218
+ #
219
+ # @param tamanho [Integer]
220
+ # quantidade de caracteres a ser retornado
221
+ #
222
+ def formata_valor_multa(tamanho = 6)
223
+ format_value(percentual_multa, tamanho)
224
+ end
225
+
226
+ # Formata o campo valor do desconto
227
+ #
228
+ # @param tamanho [Integer]
229
+ # quantidade de caracteres a ser retornado
230
+ #
231
+ def formata_valor_desconto(tamanho = 13)
232
+ format_value(valor_desconto, tamanho)
233
+ end
234
+
235
+ # Formata o campo valor do segundo desconto
236
+ #
237
+ # @param tamanho [Integer]
238
+ # quantidade de caracteres a ser retornado
239
+ #
240
+ def formata_valor_segundo_desconto(tamanho = 13)
241
+ format_value(valor_segundo_desconto, tamanho)
242
+ end
243
+
244
+ # Formata o campo valor do IOF
245
+ #
246
+ # @param tamanho [Integer]
247
+ # quantidade de caracteres a ser retornado
248
+ #
249
+ def formata_valor_iof(tamanho = 13)
250
+ format_value(valor_iof, tamanho)
251
+ end
252
+
253
+ # Formata o campo valor do IOF
254
+ #
255
+ # @param tamanho [Integer]
256
+ # quantidade de caracteres a ser retornado
257
+ #
258
+ def formata_valor_abatimento(tamanho = 13)
259
+ format_value(valor_abatimento, tamanho)
260
+ end
261
+
262
+ # Retorna a identificacao do pagador
263
+ # Se for pessoa fisica (CPF com 11 digitos) é 1
264
+ # Se for juridica (CNPJ com 14 digitos) é 2
265
+ #
266
+ def identificacao_sacado(zero = true)
267
+ Bbrcobranca::Util::Empresa.new(documento_sacado, zero).tipo
268
+ end
269
+
270
+ # Retorna a identificacao do avalista
271
+ # Se for pessoa fisica (CPF com 11 digitos) é 1
272
+ # Se for juridica (CNPJ com 14 digitos) é 2
273
+ #
274
+ def identificacao_avalista(zero = true)
275
+ return '0' if documento_avalista.nil?
276
+ Bbrcobranca::Util::Empresa.new(documento_avalista, zero).tipo
277
+ end
278
+
279
+ private
280
+
281
+ def format_value(value, tamanho)
282
+ raise ValorInvalido, 'Deve ser um Float' unless value.to_s =~ /\./
283
+
284
+ sprintf('%.2f', value).delete('.').rjust(tamanho, '0')
285
+ end
286
+ end
287
+ end
288
+ end
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ module Bbrcobranca
4
+ module Retorno
5
+ class Base # Classe base para retornos bancários
6
+ attr_accessor :codigo_registro
7
+ attr_accessor :agencia_com_dv
8
+ attr_accessor :agencia_sem_dv
9
+ attr_accessor :cedente_com_dv
10
+ attr_accessor :convenio
11
+ attr_accessor :nosso_numero
12
+ attr_accessor :documento_numero
13
+ attr_accessor :tipo_cobranca
14
+ attr_accessor :tipo_cobranca_anterior
15
+ attr_accessor :natureza_recebimento
16
+ attr_accessor :carteira_variacao
17
+ attr_accessor :desconto
18
+ attr_accessor :iof
19
+ attr_accessor :carteira
20
+ attr_accessor :comando
21
+ attr_accessor :data_liquidacao
22
+ attr_accessor :data_vencimento
23
+ attr_accessor :valor_titulo
24
+ attr_accessor :banco_recebedor
25
+ attr_accessor :agencia_recebedora_com_dv
26
+ attr_accessor :especie_documento
27
+ attr_accessor :codigo_ocorrencia
28
+ attr_accessor :motivo_ocorrencia
29
+ attr_accessor :data_ocorrencia
30
+ attr_accessor :data_credito
31
+ attr_accessor :valor_tarifa
32
+ attr_accessor :outras_despesas
33
+ attr_accessor :juros_desconto
34
+ attr_accessor :iof_desconto
35
+ attr_accessor :valor_abatimento
36
+ attr_accessor :desconto_concedito
37
+ attr_accessor :valor_recebido
38
+ attr_accessor :juros_mora
39
+ attr_accessor :outros_recebimento
40
+ attr_accessor :abatimento_nao_aproveitado
41
+ attr_accessor :valor_lancamento
42
+ attr_accessor :indicativo_lancamento
43
+ attr_accessor :indicador_valor
44
+ attr_accessor :valor_ajuste
45
+ attr_accessor :sequencial
46
+ attr_accessor :arquivo
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,42 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'parseline'
3
+
4
+ module Bbrcobranca
5
+ module Retorno
6
+ module Cnab240
7
+ class Base < Bbrcobranca::Retorno::Base
8
+
9
+ # Load lines
10
+ def self.load_lines(file, options={})
11
+ return nil if file.blank?
12
+
13
+ codigo_banco = codigo_banco_do_arquivo(file)
14
+
15
+ case codigo_banco
16
+ when "033"
17
+ Bbrcobranca::Retorno::Cnab240::Santander.load_lines(file, options)
18
+ when "085"
19
+ Bbrcobranca::Retorno::Cnab240::Cecred.load_lines(file, options)
20
+ when "748"
21
+ Bbrcobranca::Retorno::Cnab240::Sicredi.load_lines(file, options)
22
+ when "756"
23
+ Bbrcobranca::Retorno::Cnab240::Sicoob.load_lines(file, options)
24
+ else
25
+ Bbrcobranca::Retorno::RetornoCnab240.load_lines(file, options)
26
+ end
27
+ end
28
+
29
+ # Codigo do banco lido do arquivo.
30
+ # Registro Header [0..2]
31
+ def self.codigo_banco_do_arquivo(file)
32
+ arquivo = File.open(file)
33
+ header = arquivo.gets
34
+ codigo_banco = header.blank? ? nil : header[0..2]
35
+ arquivo.close
36
+ codigo_banco
37
+ end
38
+
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,48 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+
4
+ module Bbrcobranca
5
+ module Retorno
6
+ module Cnab240
7
+ # Formato de Retorno CNAB 240
8
+ # Baseado em: http://www.caixa.gov.br/downloads/cobranca-caixa-manuais/LEIAUTE_CNAB_240_SIGCB_COBRANCA_CAIXA.pdf
9
+ class Caixa < Bbrcobranca::Retorno::RetornoCnab240
10
+ class Line < Bbrcobranca::Retorno::RetornoCnab240::Line
11
+ # Fixed width layout for Caixa
12
+ fixed_width_layout do |parse|
13
+ # REGISTRO_T_FIELDS
14
+ # Not applicable
15
+ # :cedente_com_dv
16
+
17
+ # Same inherited from parent
18
+ # parse.field :data_vencimento, 73..80
19
+ # parse.field :valor_titulo, 81..95
20
+ # parse.field :banco_recebedor, 96..98
21
+ # parse.field :sequencial, 8..12
22
+ # parse.field :valor_tarifa, 198..212
23
+ # parse.field :agencia_com_dv, 17..22
24
+
25
+ parse.field :codigo_ocorrencia, 15..16
26
+ parse.field :nosso_numero, 39..55
27
+ parse.field :agencia_recebedora_com_dv, 99..103
28
+ parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
29
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
30
+ end
31
+
32
+ # REGISTRO_U_FIELDS
33
+
34
+ # Same inherited from parent
35
+ # parse.field :desconto_concedito, 32..46
36
+ # parse.field :valor_abatimento, 47..61
37
+ # parse.field :iof_desconto, 62..76
38
+ # parse.field :juros_mora, 17..31
39
+ # parse.field :valor_recebido, 77..91
40
+ # parse.field :outras_despesas, 107..121
41
+ # parse.field :outros_recebimento, 122..136
42
+ # parse.field :data_credito, 145..152
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,102 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ require 'parseline'
4
+
5
+ module Bbrcobranca
6
+ module Retorno
7
+ module Cnab240
8
+ class Cecred < 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
+ # Segmento T
51
+ parse.field :codigo_registro, 7..7
52
+ parse.field :sequencial, 8..12
53
+ parse.field :tipo_registro, 13..13
54
+ parse.field :codigo_ocorrencia, 15..16
55
+ parse.field :agencia_com_dv, 17..22
56
+ parse.field :cedente_com_dv, 23..35
57
+ parse.field :nosso_numero, 37..56
58
+ parse.field :carteira, 57..57
59
+ parse.field :data_vencimento, 73..80
60
+ parse.field :valor_titulo, 81..95
61
+ parse.field :banco_recebedor, 96..98
62
+ parse.field :agencia_recebedora_com_dv, 99..104
63
+ parse.field :valor_tarifa, 198..212
64
+ parse.field :motivo_ocorrencia, 213..222, ->(motivos) do
65
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
66
+ end
67
+
68
+ # Segmento U
69
+ parse.field :data_ocorrencia, 137..144
70
+ parse.field :data_credito, 145..152
71
+ parse.field :outras_despesas, 107..121
72
+ parse.field :iof_desconto, 62..76
73
+ parse.field :valor_abatimento, 47..61
74
+ parse.field :desconto_concedito, 32..46
75
+ parse.field :valor_recebido, 77..91
76
+ parse.field :juros_mora, 17..31
77
+ parse.field :outros_recebimento, 122..136
78
+
79
+ # Dados que não consegui extrair dos registros T e U
80
+ # parse.field :convenio,31..37
81
+ # parse.field :tipo_cobranca,80..80
82
+ # parse.field :tipo_cobranca_anterior,81..81
83
+ # parse.field :natureza_recebimento,86..87
84
+ # parse.field :carteira_variacao,91..93
85
+ # parse.field :desconto,95..99
86
+ # parse.field :iof,100..104
87
+ # parse.field :comando,108..109
88
+ # parse.field :data_liquidacao,110..115
89
+ # parse.field :especie_documento,173..174
90
+ # parse.field :valor_tarifa,181..187
91
+ # parse.field :juros_desconto,201..213
92
+ # parse.field :abatimento_nao_aproveitado,292..304
93
+ # parse.field :valor_lancamento,305..317
94
+ # parse.field :indicativo_lancamento,318..318
95
+ # parse.field :indicador_valor,319..319
96
+ # parse.field :valor_ajuste,320..331
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
102
+ end