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,308 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ module Bbrcobranca
4
+ module Remessa
5
+ module Cnab400
6
+ class Sicoob < Bbrcobranca::Remessa::Cnab400::Base
7
+ # convenio do cedente
8
+ attr_accessor :convenio
9
+
10
+ attr_accessor :modalidade_carteira
11
+ # identificacao da emissao do boleto (attr na classe base)
12
+ # opcoes:
13
+ # ‘1’ = Banco Emite
14
+ # ‘2’ = Cliente Emite
15
+
16
+ attr_accessor :distribuicao_boleto
17
+ #
18
+ # identificacao da distribuicao do boleto (attr na classe base)
19
+ # opcoes:
20
+ # ‘1’ = Banco distribui
21
+ # ‘2’ = Cliente distribui
22
+
23
+ attr_accessor :tipo_formulario
24
+ # Tipo Formulário - 01 posição (15 a 15):
25
+ # "1" -auto-copiativo
26
+ # "3" -auto-envelopável
27
+ # "4" -A4 sem envelopamento
28
+ # "6" -A4 sem envelopamento 3 vias
29
+
30
+ # convenio do cedente
31
+ attr_accessor :convenio
32
+
33
+ validates_presence_of :agencia, :conta_corrente, :carteira, :convenio, :modalidade_carteira, :tipo_formulario, :digito_conta, :sequencial_remessa, :documento_cedente, message: 'não pode estar em branco.'
34
+ # Remessa 400 - 8 digitos
35
+ # Remessa 240 - 12 digitos
36
+ validates_length_of :conta_corrente, is: 8, message: 'deve ter 8 dígitos.'
37
+ validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.'
38
+ validates_length_of :modalidade_carteira, is: 1, message: 'deve ter 1 dígitos.'
39
+ validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
40
+ validates_length_of :sequencial_remessa, maximum: 7, message: 'deve ter 7 dígitos.'
41
+ validates_length_of :carteira, is: 2, message: 'deve ter 2 dígitos.'
42
+ validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
43
+
44
+ # Com DV
45
+ validates_length_of :convenio, is: 9, message: 'deve ter 9 dígitos.'
46
+
47
+ def initialize(campos = {})
48
+ campos = {
49
+ distribuicao_boleto: '2',
50
+ tipo_formulario: '4',
51
+ modalidade_carteira: '2',
52
+ sequencial_remessa: '0000001',
53
+ carteira: '01'
54
+ }.merge!(campos)
55
+ super(campos)
56
+ end
57
+
58
+ def cod_banco
59
+ '756'
60
+ end
61
+
62
+ def nome_banco
63
+ 'BANCOOBCED'.format_size(15)
64
+ end
65
+
66
+ # Informacoes do Código de Transmissão
67
+ #
68
+ # @return [String]
69
+ #
70
+ def info_conta
71
+ # CAMPO TAMANHO
72
+ # 030 004 9(004) Prefixo da Cooperativa: vide planilha "Capa" deste arquivo
73
+ # 031 001 A(001) Dígito Verificador do Prefixo: vide planilha "Capa" deste arquivo
74
+ # 039 008 9(008) Código do Cliente/Beneficiário: vide planilha "Capa" deste arquivo
75
+ # 040 001 A(001) Dígito Verificador do Código: vide planilha "Capa" deste arquivo
76
+ # 046 006 9(006) Número do convênio líder: Brancos
77
+ "#{agencia}#{digito_agencia}#{convenio} "
78
+ end
79
+
80
+ def digito_agencia
81
+ # utilizando a agencia com 4 digitos
82
+ # para calcular o digito
83
+ agencia.modulo11(mapeamento: { 10 => '0' }).to_s
84
+ end
85
+
86
+ # Complemento do header
87
+ #
88
+ # @return [String]
89
+ #
90
+ def complemento
91
+ ''.rjust(287, ' ')
92
+ end
93
+
94
+ # Header do arquivo remessa
95
+ #
96
+ # @return [String]
97
+ #
98
+ def monta_header
99
+ # CAMPO TAMANHO VALOR
100
+ # 001 001 9(001) Identificação do Registro Header: “0” (zero)
101
+ # 002 001 9(001) Tipo de Operação: “1” (um)
102
+ # 009 007 A(007) Identificação por Extenso do Tipo de Operação: "REMESSA"
103
+ # 011 002 9(002) Identificação do Tipo de Serviço: “01” (um)
104
+ # 019 008 A(008) Identificação por Extenso do Tipo de Serviço: “COBRANÇA”
105
+ # 026 007 A(007) Complemento do Registro: Brancos
106
+ # 030 004 9(004) Prefixo da Cooperativa: vide planilha "Capa" deste arquivo
107
+ # 031 001 A(001) Dígito Verificador do Prefixo: vide planilha "Capa" deste arquivo
108
+ # 039 008 9(008) Código do Cliente/Beneficiário: vide planilha "Capa" deste arquivo
109
+ # 040 001 A(001) Dígito Verificador do Código: vide planilha "Capa" deste arquivo
110
+ # 046 006 9(006) Número do convênio líder: Brancos
111
+ # 076 030 A(030) Nome do Beneficiário: vide planilha "Capa" deste arquivo
112
+ # 094 018 A(018) Identificação do Banco: "756BANCOOBCED"
113
+ # 100 006 9(006) Data da Gravação da Remessa: formato ddmmaa
114
+ # 107 007 9(007) Seqüencial da Remessa: número seqüencial acrescido de 1 a cada remessa. Inicia com "0000001"
115
+ # 394 287 A(287) Complemento do Registro: Brancos
116
+ # 400 006 9(006) Seqüencial do Registro:”000001”
117
+
118
+ "01REMESSA01COBRANCA #{info_conta}#{empresa_mae.format_size(30)}#{cod_banco}#{nome_banco}#{data_geracao}#{sequencial_remessa}#{complemento}000001"
119
+ end
120
+
121
+ # Detalhe do arquivo
122
+ #
123
+ # @param pagamento [PagamentoCnab400]
124
+ # objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
125
+ # @param sequencial
126
+ # num. sequencial do registro no arquivo
127
+ #
128
+ # @return [String]
129
+ #
130
+ def monta_detalhe(pagamento, sequencial)
131
+ raise Bbrcobranca::RemessaInvalida, pagamento if pagamento.invalid?
132
+
133
+ detalhe = '1' # identificacao transacao 9[01]
134
+ detalhe << Bbrcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
135
+ detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
136
+ detalhe << agencia # Prefixo da Cooperativa 9[4]
137
+ detalhe << digito_agencia # Digito da Cooperativa 9[1]
138
+ detalhe << conta_corrente # Conta corrente 9[8]
139
+ detalhe << digito_conta # Digito da conta corrente 9[1]
140
+ detalhe << '000000' # Convênio de Cobrança do Beneficiário: "000000" 9[6]
141
+ detalhe << ''.rjust(25, ' ') # Número de Controle do Participante: Brancos X[25]
142
+ detalhe << pagamento.nosso_numero.to_s.rjust(12, '0') # nosso numero com DV 9[12]
143
+ detalhe << pagamento.parcela.to_s.rjust(2, '0') # Número da Parcela: "01" se parcela única 9[02]
144
+ detalhe << '00' # Grupo de Valor: "00" 9[02]
145
+ detalhe << ' ' # Complemento do Registro: Brancos X[03]
146
+
147
+ # "Indicativo de Mensagem ou Sacador/Avalista:
148
+ # Brancos: Poderá ser informada nas posições 352 a 391 (SEQ 50) qualquer mensagem para ser impressa no boleto;
149
+ # “A”: Deverá ser informado nas posições 352 a 391 (SEQ 50) o nome e CPF/CNPJ do sacador"
150
+ detalhe << ' ' # X[01]
151
+ detalhe << ' ' # Prefixo do Título: Brancos X[03]
152
+ detalhe << '000' # Variação da Carteira: "000" 9[03]
153
+ detalhe << '0' # Conta Caução: "0" 9[01]
154
+
155
+ # "Número do Contrato Garantia:
156
+ # Para Carteira 1 preencher ""00000"";
157
+ # Para Carteira 3 preencher com o número do contrato sem DV."
158
+ detalhe << '00000' # Número do Contrato Garantia 9[05]
159
+ detalhe << '0' # DV do contrato 9[01]
160
+ detalhe << '000000' # Numero do borderô: preencher em caso de carteira 3 9[06]
161
+ detalhe << ' ' # Complemento do Registro: Brancos X[04]
162
+
163
+ # "Tipo de Emissão:
164
+ # 1 - Cooperativa
165
+ # 2 - Cliente"
166
+ detalhe << modalidade_carteira # Tipo de Emissão 9[01]
167
+
168
+ # "Carteira/Modalidade:
169
+ # 01 = Simples Com Registro
170
+ # 02 = Simples Sem Registro
171
+ # 03 = Garantida Caucionada "
172
+ detalhe << carteira # codigo da carteira 9[02]
173
+
174
+ # "Comando/Movimento:
175
+ # 01 = Registro de Títulos
176
+ # 02 = Solicitação de Baixa
177
+ # 04 = Concessão de Abatimento
178
+ # 05 = Cancelamento de Abatimento
179
+ # 06 = Alteração de Vencimento
180
+ # 08 = Alteração de Seu Número
181
+ # 09 = Instrução para Protestar
182
+ # 10 = Instrução para Sustar Protesto
183
+ # 11 = Instrução para Dispensar Juros
184
+ # 12 = Alteração de Pagador
185
+ # 31 = Alteração de Outros Dados
186
+ # 34 = Baixa - Pagamento Direto ao Beneficiário
187
+
188
+ detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
189
+ detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
190
+ detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
191
+ detalhe << pagamento.formata_valor # valor do documento 9[13]
192
+ detalhe << cod_banco # codigo banco 9[03]
193
+ detalhe << agencia # Prefixo da Cooperativa 9[4]
194
+ detalhe << digito_agencia # Digito da Cooperativa 9[1]
195
+
196
+ # "Espécie do Título :
197
+ # 01 = Duplicata Mercantil
198
+ # 02 = Nota Promissória
199
+ # 03 = Nota de Seguro
200
+ # 05 = Recibo
201
+ # 06 = Duplicata Rural
202
+ # 08 = Letra de Câmbio
203
+ # 09 = Warrant
204
+ # 10 = Cheque
205
+ # 12 = Duplicata de Serviço
206
+ # 13 = Nota de Débito
207
+ # 14 = Triplicata Mercantil
208
+ # 15 = Triplicata de Serviço
209
+ # 18 = Fatura
210
+ # 20 = Apólice de Seguro
211
+ # 21 = Mensalidade Escolar
212
+ # 22 = Parcela de Consórcio
213
+ # 99 = Outros"
214
+ detalhe << pagamento.especie_titulo # Espécie de documento 9[02]
215
+ detalhe << '0' # aceite (A=1/N=0) X[01]
216
+ detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
217
+
218
+ # "Primeira instrução codificada:
219
+ # Regras de impressão de mensagens nos boletos:
220
+ # * Primeira instrução (SEQ 34) = 00 e segunda (SEQ 35) = 00, não imprime nada.
221
+ # * Primeira instrução (SEQ 34) = 01 e segunda (SEQ 35) = 01, desconsidera-se as instruções CNAB e imprime as mensagens relatadas no trailler do arquivo.
222
+ # * Primeira e segunda instrução diferente das situações acima, imprimimos o conteúdo CNAB:
223
+ # 00 = AUSENCIA DE INSTRUCOES
224
+ # 01 = COBRAR JUROS
225
+ # 03 = PROTESTAR 3 DIAS UTEIS APOS VENCIMENTO
226
+ # 04 = PROTESTAR 4 DIAS UTEIS APOS VENCIMENTO
227
+ # 05 = PROTESTAR 5 DIAS UTEIS APOS VENCIMENTO
228
+ # 07 = NAO PROTESTAR
229
+ # 10 = PROTESTAR 10 DIAS UTEIS APOS VENCIMENTO
230
+ # 15 = PROTESTAR 15 DIAS UTEIS APOS VENCIMENTO
231
+ # 20 = PROTESTAR 20 DIAS UTEIS APOS VENCIMENTO
232
+ # 22 = CONCEDER DESCONTO SO ATE DATA ESTIPULADA
233
+ # 42 = DEVOLVER APOS 15 DIAS VENCIDO
234
+ # 43 = DEVOLVER APOS 30 DIAS VENCIDO"
235
+ detalhe << '00' # Instrução para o título 9[02]
236
+ detalhe << '00' # Número de dias válidos para instrução 9[02]
237
+ detalhe << pagamento.formata_valor_mora(6) # valor mora ao dia 9[06]
238
+ detalhe << pagamento.formata_valor_multa(6) # taxa de multa 9[06]
239
+ detalhe << distribuicao_boleto # indentificacao entrega 9[01]
240
+ detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
241
+ detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
242
+
243
+ # "193-193 – Código da moeda
244
+ # 194-205 – Valor IOF / Quantidade Monetária: ""000000000000""
245
+ # Se o código da moeda for REAL, o valor restante representa o IOF.
246
+ # Se o código da moeda for diferente de REAL, o valor restante será a quantidade monetária.
247
+ detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
248
+ detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
249
+ detalhe << pagamento.identificacao_sacado.rjust(2, '0') # identificacao do pagador 9[02]
250
+ detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
251
+ detalhe << pagamento.nome_sacado.format_size(40).ljust(40, ' ') # nome do pagador X[40]
252
+ detalhe << pagamento.endereco_sacado.format_size(37).ljust(37, ' ') # endereco do pagador X[37]
253
+ detalhe << pagamento.bairro_sacado.format_size(15).ljust(15, ' ') # bairro do pagador X[15]
254
+ detalhe << pagamento.cep_sacado # cep do pagador 9[08]
255
+ detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
256
+ detalhe << pagamento.uf_sacado # uf do pagador X[02]
257
+
258
+ # "Observações/Mensagem ou Sacador/Avalista:
259
+ # Quando o SEQ 14 – Indicativo de Mensagem ou Sacador/Avalista - for preenchido com Brancos,
260
+ # as informações constantes desse campo serão impressas no campo “texto de responsabilidade da Empresa”,
261
+ # no Recibo do Sacado e na Ficha de Compensação do boleto de cobrança.
262
+ # Quando o SEQ 14 – Indicativo de Mensagem ou Sacador/Avalista - for preenchido com “A” ,
263
+ # este campo deverá ser preenchido com o nome/razão social do Sacador/Avalista"
264
+ detalhe << ''.rjust(40, ' ') # X[40]
265
+
266
+ # "Número de Dias Para Protesto:
267
+ # Quantidade dias para envio protesto. Se = ""0"",
268
+ # utilizar dias protesto padrão do cliente cadastrado na cooperativa. "
269
+ detalhe << '00' # Número de Dias Para Protesto x[02]
270
+ detalhe << ' ' # Brancos X[1]
271
+ detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
272
+ detalhe
273
+ end
274
+
275
+ # Trailer do arquivo remessa
276
+ #
277
+ # @param sequencial
278
+ # num. sequencial do registro no arquivo
279
+ #
280
+ # @return [String]
281
+ #
282
+ def monta_trailer(sequencial)
283
+ # CAMPO TAMANHO VALOR
284
+ # 1 001 001 001 9(01) Identificação Registro Trailler: "9"
285
+ # 2 002 194 193 X(193) Complemento do Registro: Brancos
286
+ # 3 195 234 040 X(40) "Mensagem responsabilidade Beneficiário:
287
+ # Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
288
+ # Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
289
+ # 4 235 274 040 X(40) "Mensagem responsabilidade Beneficiário:
290
+ # Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
291
+ # Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
292
+ # 5 275 314 040 X(40) "Mensagem responsabilidade Beneficiário:
293
+ # Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
294
+ # Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
295
+ # 6 315 354 040 X(40) "Mensagem responsabilidade Beneficiário:
296
+ # Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
297
+ # Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
298
+ # 7 355 394 040 X(40) "Mensagem responsabilidade Beneficiário:
299
+ # Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
300
+ # Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
301
+ # 8 395 400 006 9(06) Seqüencial do Registro: Incrementado em 1 a cada registro
302
+
303
+ "9#{''.rjust(393, '0')}#{sequencial.to_s.rjust(6, '0')}"
304
+ end
305
+ end
306
+ end
307
+ end
308
+ end
@@ -0,0 +1,143 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module Bbrcobranca
3
+ module Remessa
4
+ module Cnab400
5
+ class Unicred < Bbrcobranca::Remessa::Cnab400::Base
6
+ attr_accessor :posto, :byte_idt
7
+
8
+ # Codigo de transmissao fornecido pelo banco
9
+ attr_accessor :codigo_transmissao
10
+
11
+ validates_presence_of :agencia, :conta_corrente, :documento_cedente,
12
+ :digito_conta, :codigo_transmissao, message: 'não pode estar em branco.'
13
+
14
+ validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
15
+ validates_length_of :conta_corrente, maximum: 5, message: 'deve ter 5 dígitos.'
16
+ validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
17
+ validates_length_of :carteira, maximum: 2, message: 'deve ter 2 dígitos.'
18
+ validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
19
+ validates_length_of :codigo_transmissao, maximum: 20, message: 'deve ter 20 dígitos.'
20
+
21
+ validates_inclusion_of :carteira, in: %w(01 03 04 05 06 07), message: 'não existente para este banco.'
22
+
23
+ # Nova instancia do Unicred
24
+ def initialize(campos = {})
25
+ campos = {
26
+ aceite: 'N'
27
+ }.merge!(campos)
28
+
29
+ super(campos)
30
+ end
31
+
32
+ def agencia=(valor)
33
+ @agencia = valor.to_s.rjust(4, '0') if valor
34
+ end
35
+
36
+ def conta_corrente=(valor)
37
+ @conta_corrente = valor.to_s.rjust(5, '0') if valor
38
+ end
39
+
40
+ def carteira=(valor)
41
+ @carteira = valor.to_s.rjust(2, '0') if valor
42
+ end
43
+
44
+ def cod_banco
45
+ '748'
46
+ end
47
+
48
+ def nome_banco
49
+ 'UNICRED'.ljust(15, ' ')
50
+ end
51
+
52
+ # Informacoes da conta corrente do cedente
53
+ #
54
+ # @return [String]
55
+ #
56
+ def info_conta
57
+ # CAMPO TAMANHO
58
+ # codigo da transmissao 20
59
+ "#{codigo_transmissao}"
60
+ end
61
+
62
+ # Complemento do header
63
+ # (no caso do Unicred, sao apenas espacos em branco)
64
+ #
65
+ # @return [String]
66
+ #
67
+ def complemento
68
+ ''.rjust(294, ' ')
69
+ end
70
+
71
+ # Codigo da carteira de acordo com a documentacao do Unicred
72
+ #
73
+ # @return [String]
74
+ #
75
+ def codigo_carteira
76
+ codigo_carteira = carteira[1]
77
+ end
78
+
79
+ def identificador_complemento
80
+ " "
81
+ end
82
+
83
+ # Retorna o nosso numero
84
+ #
85
+ # @return [String]
86
+ def formata_nosso_numero(nosso_numero)
87
+ nosso_numero.somente_numeros.rjust(20, ' ')
88
+ end
89
+
90
+ # Detalhe do arquivo
91
+ #
92
+ # @param pagamento [PagamentoCnab400]
93
+ # objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
94
+ # @param sequencial
95
+ # num. sequencial do registro no arquivo
96
+ #
97
+ # @return [String]
98
+ #
99
+ def monta_detalhe(pagamento, sequencial)
100
+ raise Bbrcobranca::RemessaInvalida, pagamento if pagamento.invalid?
101
+
102
+ detalhe = '1' # identificacao transacao 9[01]
103
+ detalhe << Bbrcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
104
+ detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
105
+ detalhe << codigo_transmissao # código da transmissao 9[20]
106
+ detalhe << pagamento.documento_ou_numero.to_s.ljust(25) # numero de controle do participante X[25]
107
+ detalhe << formata_nosso_numero(pagamento.nosso_numero) # nosso numero X[20]
108
+ detalhe << ''.rjust(25, ' ') # brancos X[25]
109
+ detalhe << codigo_carteira # codigo da carteira X[01]
110
+ detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
111
+ detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
112
+ detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
113
+ detalhe << pagamento.formata_valor # valor do documento 9[13]
114
+ detalhe << cod_banco # codigo banco 9[03]
115
+ detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
116
+ detalhe << '01' # especie do titulo X[02]
117
+ detalhe << aceite # aceite (A/N) X[01]
118
+ detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
119
+ detalhe << "".rjust(4, "0") # instrucao 9[04]
120
+ detalhe << "0" # zero 9[01]
121
+ detalhe << pagamento.formata_valor_mora(12) # valor mora ao dia 9[12]
122
+ detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
123
+ detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
124
+ detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
125
+ detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
126
+ detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
127
+ detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
128
+ detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador X[40]
129
+ detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
130
+ detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
131
+ detalhe << pagamento.cep_sacado # cep do pagador 9[08]
132
+ detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
133
+ detalhe << pagamento.uf_sacado # uf do pagador X[02]
134
+ detalhe << pagamento.nome_avalista.format_size(40) # nome do sacador/avalista X[40]
135
+ detalhe << pagamento.dias_protesto.rjust(2, '0') # numero de dias para proteste 9[02]
136
+ detalhe << "9" # moeda 9[01]
137
+ detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
138
+ detalhe
139
+ end
140
+ end
141
+ end
142
+ end
143
+ end