br_boleto 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile.lock +2 -2
  5. data/br_boleto.gemspec +2 -3
  6. data/lib/br_boleto/association/have_conta.rb +27 -25
  7. data/lib/br_boleto/association/have_pagador.rb +2 -0
  8. data/lib/br_boleto/boleto/base.rb +0 -4
  9. data/lib/br_boleto/boleto/bradesco.rb +80 -0
  10. data/lib/br_boleto/boleto/caixa.rb +10 -12
  11. data/lib/br_boleto/boleto/cecred.rb +76 -0
  12. data/lib/br_boleto/boleto/itau.rb +114 -0
  13. data/lib/br_boleto/boleto/sicredi.rb +101 -0
  14. data/lib/br_boleto/boleto/unicred.rb +21 -0
  15. data/lib/br_boleto/conta/base.rb +28 -3
  16. data/lib/br_boleto/conta/bradesco.rb +120 -0
  17. data/lib/br_boleto/conta/caixa.rb +22 -12
  18. data/lib/br_boleto/conta/cecred.rb +67 -0
  19. data/lib/br_boleto/conta/itau.rb +199 -0
  20. data/lib/br_boleto/conta/sicoob.rb +40 -11
  21. data/lib/br_boleto/conta/sicredi.rb +171 -0
  22. data/lib/br_boleto/conta/unicred.rb +38 -0
  23. data/lib/br_boleto/helper/default_codes.rb +535 -26
  24. data/lib/br_boleto/pagador.rb +4 -0
  25. data/lib/br_boleto/remessa/base.rb +2 -0
  26. data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
  27. data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
  28. data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
  29. data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
  30. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
  31. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
  32. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
  33. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
  34. data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
  35. data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
  36. data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
  37. data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
  38. data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
  39. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
  40. data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
  41. data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
  42. data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
  43. data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
  44. data/lib/br_boleto/remessa/pagamento.rb +93 -43
  45. data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
  46. data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
  47. data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
  48. data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
  49. data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
  50. data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
  51. data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
  52. data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
  53. data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
  54. data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
  55. data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
  56. data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
  57. data/lib/br_boleto/retorno/pagamento.rb +18 -4
  58. data/lib/br_boleto/version.rb +2 -2
  59. data/lib/br_boleto.rb +28 -0
  60. data/lib/config/locales/br-boleto-en.yml +1 -0
  61. data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
  62. data/test/br_boleto/association/have_pagador_test.rb +24 -0
  63. data/test/br_boleto/boleto/bradesco_test.rb +125 -0
  64. data/test/br_boleto/boleto/caixa_test.rb +18 -18
  65. data/test/br_boleto/boleto/cecred_test.rb +115 -0
  66. data/test/br_boleto/boleto/itau_test.rb +160 -0
  67. data/test/br_boleto/boleto/sicredi_test.rb +136 -0
  68. data/test/br_boleto/boleto/unicred_test.rb +128 -0
  69. data/test/br_boleto/conta/base_test.rb +298 -3
  70. data/test/br_boleto/conta/bradesco_test.rb +142 -0
  71. data/test/br_boleto/conta/caixa_test.rb +7 -6
  72. data/test/br_boleto/conta/cecred_test.rb +119 -0
  73. data/test/br_boleto/conta/itau_test.rb +189 -0
  74. data/test/br_boleto/conta/sicoob_test.rb +32 -2
  75. data/test/br_boleto/conta/sicredi_test.rb +180 -0
  76. data/test/br_boleto/conta/unicred_test.rb +154 -0
  77. data/test/br_boleto/pagador_test.rb +22 -2
  78. data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
  79. data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
  80. data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
  81. data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
  82. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
  83. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
  84. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
  85. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
  86. data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
  87. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
  88. data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
  89. data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
  90. data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
  91. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
  92. data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
  93. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
  94. data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
  95. data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
  96. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  97. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
  98. data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
  99. data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
  100. data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
  101. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
  102. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
  103. data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
  104. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
  105. data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
  106. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
  107. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
  108. data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
  109. data/test/br_boleto/retorno/pagamento_test.rb +7 -0
  110. data/test/factories/boleto/boleto_bradesco.rb +18 -0
  111. data/test/factories/boleto/boleto_cecred.rb +18 -0
  112. data/test/factories/boleto/boleto_itau.rb +18 -0
  113. data/test/factories/boleto/boleto_sicredi.rb +18 -0
  114. data/test/factories/boleto/boleto_unicred.rb +18 -0
  115. data/test/factories/conta/bradesco.rb +16 -0
  116. data/test/factories/conta/caixa.rb +2 -1
  117. data/test/factories/conta/cecred.rb +15 -0
  118. data/test/factories/conta/itau.rb +15 -0
  119. data/test/factories/conta/sicoob.rb +2 -1
  120. data/test/factories/conta/sicredi.rb +15 -0
  121. data/test/factories/conta/unicred.rb +15 -0
  122. data/test/factories/remessa/cnab240/bradesco.rb +9 -0
  123. data/test/factories/remessa/cnab240/cecred.rb +9 -0
  124. data/test/factories/remessa/cnab240/itau.rb +9 -0
  125. data/test/factories/remessa/cnab240/sicredi.rb +9 -0
  126. data/test/factories/remessa/cnab240/unicred.rb +9 -0
  127. data/test/factories/remessa/cnab400/bradesco.rb +8 -0
  128. data/test/factories/remessa/cnab400/itau.rb +8 -0
  129. data/test/factories/remessa/cnab400/sicredi.rb +8 -0
  130. data/test/factories/remessa/cnab400/unicred.rb +8 -0
  131. data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
  132. data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
  133. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
  134. data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
  135. data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
  136. data/test/fixtures/retorno/cnab400/itau.ret +54 -0
  137. metadata +138 -3
@@ -1,33 +1,542 @@
1
1
  module BrBoleto
2
2
  module Helper
3
3
  module DefaultCodes
4
+ ########################################################################################
5
+ ############################## ESPÉCIE DO TÍTULO #####################################
6
+ # Espécie do Título :
7
+ # Código adotado pela FEBRABAN para identificar o tipo de título de cobrança
8
+ # Códigos padrões da GEM
9
+ # 01 = CH – Cheque
10
+ # 02 = DM – Duplicata Mercantil
11
+ # 03 = DMI – Duplicata Mercantil p/ Indicação
12
+ # 04 = DS – Duplicata de Serviço
13
+ # 05 = DSI – Duplicata de Serviço p/ Indicação
14
+ # 06 = DR – Duplicata Rural
15
+ # 07 = LC – Letra de Câmbio
16
+ # 08 = NCC – Nota de Crédito Comercial
17
+ # 09 = NCE – Nota de Crédito a Exportação
18
+ # 10 = NCI – Nota de Crédito Industrial
19
+ # 11 = NCR – Nota de Crédito Rural
20
+ # 12 = NP – Nota Promissória
21
+ # 13 = NPR – Nota Promissória Rural
22
+ # 14 = TM – Triplicata Mercantil
23
+ # 15 = TS – Triplicata de Serviço
24
+ # 16 = NS – Nota de Seguro
25
+ # 17 = RC – Recibo
26
+ # 18 = FAT – Fatura
27
+ # 19 = ND – Nota de Débito
28
+ # 20 = AP – Apólice de Seguro
29
+ # 21 = ME – Mensalidade Escolar
30
+ # 22 = PC – Parcela de Consórcio
31
+ # 23 = NF – Nota Fiscal
32
+ # 24 = DD – Documento de Dívida
33
+ # 25 = Cédula de Produto Rural
34
+ # 26 = Warrant
35
+ # 27 = Dívida Ativa de Estado
36
+ # 28 = Dívida Ativa de Município
37
+ # 29 = Dívida Ativa da União
38
+ # 30 = Encargos condominiais
39
+ # 31 = CC – Cartão de Crédito
40
+ # 32 = BDP – Boleto de Proposta
41
+ # 99 = Outros
42
+ #
43
+ def get_especie_titulo(code, cnab)
44
+ "#{code}".adjust_size_to(2, '0', :right)
45
+ send("equivalent_especie_titulo_#{cnab}")[code] || '99'
46
+ end
47
+ def equivalent_especie_titulo_240
48
+ {
49
+ '01' => '01', # CH – Cheque
50
+ '02' => '02', # DM – Duplicata Mercantil
51
+ '03' => '03', # DMI – Duplicata Mercantil p/ Indicação
52
+ '04' => '04', # DS – Duplicata de Serviço
53
+ '05' => '05', # DSI – Duplicata de Serviço p/ Indicação
54
+ '06' => '06', # DR – Duplicata Rural
55
+ '07' => '07', # LC – Letra de Câmbio
56
+ '08' => '08', # NCC – Nota de Crédito Comercial
57
+ '09' => '09', # NCE – Nota de Crédito a Exportação
58
+ '10' => '10', # NCI – Nota de Crédito Industrial
59
+ '11' => '11', # NCR – Nota de Crédito Rural
60
+ '12' => '12', # NP – Nota Promissória
61
+ '13' => '13', # NPR – Nota Promissória Rural
62
+ '14' => '14', # TM – Triplicata Mercantil
63
+ '15' => '15', # TS – Triplicata de Serviço
64
+ '16' => '16', # NS – Nota de Seguro
65
+ '17' => '17', # RC – Recibo
66
+ '18' => '18', # FAT – Fatura
67
+ '19' => '19', # ND – Nota de Débito
68
+ '20' => '20', # AP – Apólice de Seguro
69
+ '21' => '21', # ME – Mensalidade Escolar
70
+ '22' => '22', # PC – Parcela de Consórcio
71
+ '23' => '23', # NF – Nota Fiscal
72
+ '24' => '24', # DD – Documento de Dívida
73
+ '25' => '25', # Cédula de Produto Rural
74
+ '26' => '26', # Warrant
75
+ '27' => '27', # Dívida Ativa de Estado
76
+ '28' => '28', # Dívida Ativa de Município
77
+ '29' => '29', # Dívida Ativa da União
78
+ '30' => '30', # Encargos condominiais
79
+ '31' => '31', # CC – Cartão de Crédito
80
+ '32' => '32', # BDP – Boleto de Proposta
81
+ '99' => '99', # Outros
82
+ }
83
+ end
84
+ def equivalent_especie_titulo_400
85
+ # Padrão Código para
86
+ {# da GEM o Banco
87
+ '01' => '10' , # Cheque
88
+ '02' => '01' , # Duplicata Mercantil
89
+ '04' => '12' , # Duplicata de Serviço
90
+ '06' => '06' , # Duplicata Rural
91
+ '07' => '08' , # Letra de Câmbio
92
+ '12' => '02' , # Nota Promissória
93
+ '14' => '14' , # Triplicata Mercantil
94
+ '15' => '15' , # Triplicata de Serviço
95
+ '16' => '03' , # Nota de Seguro
96
+ '17' => '05' , # Recibo
97
+ '18' => '18' , # Fatura
98
+ '19' => '13' , # Nota de Débito
99
+ '20' => '20' , # Apólice de Seguro
100
+ '21' => '21' , # Mensalidade Escolar
101
+ '22' => '22' , # Parcela de Consórcio
102
+ '26' => '09' , # Warrant
103
+ '99' => '99' , # Outros"
104
+ }
105
+ end
106
+
107
+ ########################################################################################
108
+ ########################### CÓDIGO DA MOVIMENTAÇÃO ###################################
109
+ # Código de Movimento Remessa / Identificacao Ocorrência:
110
+ # Código adotado pela FEBRABAN, para identificar o tipo de movimentação enviado nos registros do arquivo de remessa.
111
+ # Default: 01
112
+ # Códigos padrões da GEM
113
+ # 01 = Entrada de Títulos
114
+ # 02 = Pedido de Baixa
115
+ # 03 = Protesto para Fins Falimentares
116
+ # 04 = Concessão de Abatimento
117
+ # 05 = Cancelamento de Abatimento
118
+ # 06 = Alteração de Vencimento
119
+ # 07 = Concessão de Desconto
120
+ # 08 = Cancelamento de Desconto
121
+ # 09 = Pedido de protesto (Protestar)
122
+ # 10 = Sustar Protesto e Baixar Título
123
+ # 11 = Sustar Protesto e Manter em Carteira
124
+ # 12 = Alteração de Juros de Mora
125
+ # 13 = Dispensar Cobrança de Juros de Mora
126
+ # 14 = Alteração de Valor/Percentual de Multa
127
+ # 15 = Dispensar Cobrança de Multa
128
+ # 16 = Alteração do Valor de Desconto
129
+ # 17 = Não conceder Desconto
130
+ # 18 = Alteração do Valor de Abatimento
131
+ # 19 = Prazo Limite de Recebimento – Alterar
132
+ # 20 = Prazo Limite de Recebimento – Dispensar
133
+ # 21 = Alterar número do título dado pelo beneficiario (nosso número)
134
+ # 22 = Alterar número controle do Participante (seu número / número documento)
135
+ # 23 = Alterar dados do Pagador
136
+ # 24 = Alterar dados do Sacador/Avalista
137
+ # 30 = Recusa da Alegação do Pagador
138
+ # 31 = Alteração de Outros Dados
139
+ # 33 = Alteração dos Dados do Rateio de Crédito
140
+ # 34 = Pedido de Cancelamento dos Dados do Rateio de Crédito
141
+ # 35 = Pedido de Desagendamento do Débito Automático
142
+ # 40 = Alteração de Carteira
143
+ # 41 = Cancelar protesto
144
+ # 42 = Alteração de Espécie de Título
145
+ # 43 = Transferência de carteira/modalidade de cobrança
146
+ # 44 = Alteração de contrato de cobrança
147
+ # 45 = Negativação Sem Protesto
148
+ # 46 = Solicitação de Baixa de Título Negativado Sem Protesto
149
+ # 47 = Alteração do Valor Nominal do Título
150
+ # 48 = Alteração do Valor Mínimo/ Percentual
151
+ # 49 = Alteração do Valor Máximo/Percentua
152
+
153
+ def get_codigo_movimento_remessa(code, cnab)
154
+ "#{code}".adjust_size_to(2, '0', :right)
155
+ send("equivalent_codigo_movimento_remessa_#{cnab}")[code] || '31'
156
+ end
157
+ def equivalent_codigo_movimento_remessa_240
158
+ # Padrão Código para Descrição
159
+ {# da GEM o Banco
160
+ '01' => '01' , # Entrada de Títulos
161
+ '02' => '02' , # Pedido de Baixa
162
+ '03' => '03' , # Protesto para Fins Falimentares
163
+ '04' => '04' , # Concessão de Abatimento
164
+ '05' => '05' , # Cancelamento de Abatimento
165
+ '06' => '06' , # Alteração de Vencimento
166
+ '07' => '07' , # Concessão de Desconto
167
+ '08' => '08' , # Cancelamento de Desconto
168
+ '09' => '09' , # Pedido de protesto (Protestar)
169
+ '10' => '10' , # Sustar Protesto e Baixar Título
170
+ '11' => '11' , # Sustar Protesto e Manter em Carteira
171
+ '12' => '12' , # Alteração de Juros de Mora
172
+ '13' => '13' , # Dispensar Cobrança de Juros de Mora
173
+ '14' => '14' , # Alteração de Valor/Percentual de Multa
174
+ '15' => '15' , # Dispensar Cobrança de Multa
175
+ '16' => '16' , # Alteração do Valor de Desconto
176
+ '17' => '17' , # Não conceder Desconto
177
+ '18' => '18' , # Alteração do Valor de Abatimento
178
+ '19' => '19' , # Prazo Limite de Recebimento – Alterar
179
+ '20' => '20' , # Prazo Limite de Recebimento – Dispensar
180
+ '21' => '21' , # Alterar número do título dado pelo beneficiario (nosso número)
181
+ '22' => '22' , # Alterar número controle do Participante (seu número / número documento)
182
+ '23' => '23' , # Alterar dados do Pagador
183
+ '24' => '24' , # Alterar dados do Sacador/Avalista
184
+ '30' => '30' , # Recusa da Alegação do Pagador
185
+ '31' => '31' , # Alteração de Outros Dados
186
+ '33' => '33' , # Alteração dos Dados do Rateio de Crédito
187
+ '34' => '34' , # Pedido de Cancelamento dos Dados do Rateio de Crédito
188
+ '35' => '35' , # Pedido de Desagendamento do Débito Automático
189
+ '40' => '40' , # Alteração de Carteira
190
+ '41' => '41' , # Cancelar protesto
191
+ '42' => '42' , # Alteração de Espécie de Título
192
+ '43' => '43' , # Transferência de carteira/modalidade de cobrança
193
+ '44' => '44' , # Alteração de contrato de cobrança
194
+ '45' => '45' , # Negativação Sem Protesto
195
+ '46' => '46' , # Solicitação de Baixa de Título Negativado Sem Protesto
196
+ '47' => '47' , # Alteração do Valor Nominal do Título
197
+ '48' => '48' , # Alteração do Valor Mínimo/ Percentual
198
+ '49' => '49' , # Alteração do Valor Máximo/Percentua
199
+ }
200
+ end
201
+ def equivalent_codigo_movimento_remessa_400
202
+ # Padrão Código para Descrição
203
+ {# da GEM o Banco
204
+ '01' => '01' , # Registro de títulos / Remessa
205
+ '02' => '02' , # Pedido de Baixa
206
+ '03' => '03' , # Pedido de Protesto Falimentar
207
+ '04' => '04' , # Concessão de abatimento
208
+ '05' => '05' , # Cancelamento de abatimento concedido
209
+ '06' => '06' , # Alteração de vencimento
210
+ '09' => '09' , # Pedido de protesto (Protestar)
211
+ '21' => '07' , # Alterar número do título dado pelo beneficiario (nosso número)
212
+ '22' => '08' , # Alterar número controle do Participante (seu número / número documento)
213
+ '31' => '31' , # Alteração de outros dados
214
+ }
215
+ end
216
+
217
+ ########################################################################################
218
+ ############################### CÓDIGO DA CARTEIRA ###################################
219
+ # Código da Carteira :
220
+ # Default: 1
221
+ # Códigos padrões da GEM
222
+ # 1 = Cobrança Simples
223
+ # 2 = Cobrança Vinculada
224
+ # 3 = Cobrança Caucionada
225
+ # 4 = Cobrança Descontada
226
+ # 5 = Cobrança Vendor
227
+ #
228
+ def get_tipo_cobranca(code, cnab)
229
+ "#{code}".adjust_size_to(1, '0', :right)
230
+ send("equivalent_tipo_cobranca_#{cnab}")[code] || code
231
+ end
232
+ # Código adotado pela FEBRABAN, para identificar a característica dos títulos
233
+ # dentro das modalidades de cobrança existentes no banco.
234
+ def equivalent_tipo_cobranca_240
235
+ {
236
+ '1' => '1', # Cobrança Simples
237
+ '2' => '2', # Cobrança Vinculada
238
+ '3' => '3', # Cobrança Caucionada
239
+ '4' => '4', # Cobrança Descontada
240
+ '5' => '5', # Cobrança Vendor
241
+ }
242
+ end
243
+ def equivalent_tipo_cobranca_400
244
+ {
245
+ '1' => '1', # Cobrança Simples
246
+ '2' => '2', # Cobrança Vinculada
247
+ '3' => '3', # Cobrança Caucionada
248
+ '4' => '4', # Cobrança Descontada
249
+ '5' => '5', # Cobrança Vendor
250
+ }
251
+ end
252
+
253
+ #######################################################################################
254
+ ##################### CÓDIGO DO TIPO DE IMPRESSÃO DO BLOQUETO ######################
255
+ # Identificação do Tipo de Impressão :
256
+ # Default: 2
257
+ # Códigos padrões da GEM
258
+ # 1 = Frente do Bloqueto
259
+ # 2 = Verso do Bloqueto
260
+ # 3 = Corpo de Instruções da Ficha de Compensação do Bloqueto
261
+ #
262
+ def get_tipo_impressao(code, cnab)
263
+ "#{code}".adjust_size_to(1, '0', :right)
264
+ send("equivalent_tipo_impressao_#{cnab}")[code] || code
265
+ end
266
+ # Código adotado pela FEBRABAN para identificar o responsável e a forma de emissão do Boleto de Pagamento.
267
+ # Os códigos '4' e '5' só serão aceitos para código de movimento para remessa '31'
268
+ def equivalent_tipo_impressao_240
269
+ {
270
+ '1' => '1', # Frente do Bloqueto
271
+ '2' => '2', # Verso do Bloqueto
272
+ '3' => '3', # Corpo de Instruções da Ficha de Compensação do Bloqueto
273
+ }
274
+ end
275
+ def equivalent_tipo_impressao_400
276
+ {
277
+ '1' => '1', # Frente do Bloqueto
278
+ '2' => '2', # Verso do Bloqueto
279
+ '3' => '3', # Corpo de Instruções da Ficha de Compensação do Bloqueto
280
+ }
281
+ end
282
+
283
+ #######################################################################################
284
+ ##################### CÓDIGO DA IDENTIFICAÇÃO EMISSÃO DO BOLETO #####################
285
+ # Identificação da Emissão do Boleto de Pagamento :
286
+ # Default: 2
287
+ # Códigos padrões da GEM
288
+ # 1 = Banco Emite
289
+ # 2 = Cliente Emite
290
+ # 3 = Banco Pré-emite e Cliente Complementa
291
+ # 4 = Banco Reemite
292
+ # 5 = Banco Não Reemite
293
+ # 7 = Banco Emitente - Aberta
294
+ # 8 = Banco Emitente - Auto-envelopável
295
+ #
296
+ def get_identificacao_emissao(code, cnab)
297
+ "#{code}".adjust_size_to(1, '0', :right)
298
+ send("equivalent_identificacao_emissao_#{cnab}")[code] || code
299
+ end
300
+ # Código adotado pela FEBRABAN para identificar o responsável e a forma de emissão do Boleto de Pagamento.
301
+ # Os códigos '4' e '5' só serão aceitos para código de movimento para remessa '31'
302
+ def equivalent_identificacao_emissao_240
303
+ {
304
+ '1' => '1', # Banco Emite
305
+ '2' => '2', # Cliente Emite
306
+ '3' => '3', # Banco Pré-emite e Cliente Complementa
307
+ '4' => '4', # Banco Reemite
308
+ '5' => '5', # Banco Não Reemite
309
+ '7' => '7', # Banco Emitente - Aberta
310
+ '8' => '8', # Banco Emitente - Auto-envelopável
311
+ }
312
+ end
313
+ def equivalent_identificacao_emissao_400
314
+ {
315
+ '1' => '1', # Banco Emite
316
+ '2' => '2', # Cliente Emite
317
+ '3' => '3', # Banco Pré-emite e Cliente Complementa
318
+ '4' => '4', # Banco Reemite
319
+ '5' => '5', # Banco Não Reemite
320
+ '7' => '7', # Banco Emitente - Aberta
321
+ '8' => '8', # Banco Emitente - Auto-envelopável
322
+ }
323
+ end
324
+
325
+ ########################################################################################
326
+ ##################### CÓDIGO IDENTIFICAÇÃO DA DISTRIBUIÇÃO ###########################
327
+ # Identificação da Distribuição :
328
+ # Default: 2
329
+ # Códigos padrões da GEM
330
+ # 1 = Banco Distribui
331
+ # 2 = Cliente Distribui
332
+ # 3 = Banco envia e-mail
333
+ # 4 = Banco envia SMS
334
+ #
335
+ def get_distribuicao_boleto(code)
336
+ "#{code}".rjust(1, '0')
337
+ equivalent_distribuicao_boleto[code] || code
338
+ end
339
+ # Código adotado pela FEBRABAN para identificar o responsável pela distribuição do bloqueto.
340
+ def equivalent_distribuicao_boleto
341
+ {
342
+ '1' => '1', # Banco Distribui
343
+ '2' => '2', # Cliente Distribui
344
+ '3' => '3', # Banco envia e-mail
345
+ '4' => '4', # Banco envia SMS
346
+ }
347
+ end
348
+
349
+ ########################################################################################
350
+ ################################## CÓDIGO JUROS ######################################
351
+ # Código dos Juros de Mora :
352
+ # O cálculo de juros para cada código funciona da seguinte maneira:
353
+ # Valor do boleto = R$ 100,00
354
+ # Vencimento = dia 10
355
+ # 1 - Valor por Dia
356
+ # juros = R$ 1,00
357
+ # Valor no dia 10 = R$ 100,00 (Sem juros)
358
+ # Valor no dia 11 = R$ 101,00 (Juros de R$ 1,00)
359
+ # Valor no dia 12 = R$ 102,00 (Juros de R$ 2,00)
360
+ # 2 = Taxa Mensal
361
+ # juros = 5,00 %
362
+ # calculo juros/dia = (R$ 100,00*5%) / 30 dias(1 mês)
363
+ # juros ao dia = R$ 5,00
364
+ # Valor no dia 10 = R$ 100,00 (Sem juros)
365
+ # Valor no dia 11 = R$ 105,00 (Juros de R$ 5,00)
366
+ # Valor no dia 12 = R$ 110,00 (Juros de R$ 10,00)
367
+ #
368
+ # Default: 3
369
+ # Códigos padrões da GEM
370
+ # 1 = Valor por Dia (R$/dia)
371
+ # 2 = Taxa Mensal (%/mês)
372
+ # 3 = Isento
373
+ #
374
+ def get_codigo_juros(code)
375
+ "#{code}".adjust_size_to(1, '0', :right)
376
+ equivalent_codigo_juros[code] || default_codigo_juros
377
+ end
378
+ # Código adotado pela FEBRABAN para identificação do tipo de pagamento de juros de mora.
379
+ def equivalent_codigo_juros
380
+ {
381
+ '1' => '1', # Valor por Dia
382
+ '2' => '2', # Taxa Mensal
383
+ '3' => '3', # Isento
384
+ }
385
+ end
386
+ def default_codigo_juros
387
+ '3'
388
+ end
389
+
390
+ ########################################################################################
391
+ ################################## CÓDIGO MULTA ######################################
392
+ # Código de Multa :
393
+ # Default: 3
394
+ # Códigos padrões da GEM
395
+ # 1 = Valor fixo
396
+ # 2 = Percentual
397
+ # 3 = Isento
398
+ #
399
+ def get_codigo_multa(code)
400
+ "#{code}".adjust_size_to(1, '0', :right)
401
+ equivalent_codigo_multa[code] || default_codigo_multa
402
+ end
403
+ # Código adotado pela FEBRABAN para identificação do tipo de pagamento de multa.
404
+ def equivalent_codigo_multa
405
+ {
406
+ '1' => '1', # Valor fixo
407
+ '2' => '2', # Percentual
408
+ '3' => '3', # Isento
409
+ }
410
+ end
411
+ def default_codigo_multa
412
+ '3'
413
+ end
414
+
415
+ ########################################################################################
416
+ ################################ CÓDIGO DESCONTO #####################################
417
+ # Código do Desconto 1 / 2 / 3 :
418
+ # Default: 0
419
+ # Códigos padrões da GEM
420
+ # 0 = Sem Desconto
421
+ # 1 = Valor Fixo Até a Data Informada
422
+ # 2 = Percentual Até a Data Informada
423
+ # 3 = Valor por Antecipação Dia Corrido
424
+ # 4 = Valor por Antecipação Dia Úti
425
+ # 5 = Percentual Sobre o Valor Nominal Dia Corrido
426
+ # 6 = Percentual Sobre o Valor Nominal Dia Útil
427
+ # 7 = Cancelamento de Desconto
428
+ #
429
+ def get_codigo_desconto(code)
430
+ "#{code}".adjust_size_to(1, '0', :right)
431
+ equivalent_codigo_desconto[code] || code
432
+ end
433
+ # Código adotado pela FEBRABAN para identificação do tipo de desconto que deverá ser concedido.
434
+ def equivalent_codigo_desconto
435
+ {
436
+ '0' => '0', # Sem Desconto
437
+ '1' => '1', # Valor Fixo Até a Data Informada
438
+ '2' => '2', # Percentual Até a Data Informada
439
+ '3' => '3', # Valor por Antecipação Dia Corrido
440
+ '4' => '4', # Valor por Antecipação Dia Úti
441
+ '5' => '5', # Percentual Sobre o Valor Nominal Dia Corrido
442
+ '6' => '6', # Percentual Sobre o Valor Nominal Dia Útil
443
+ '7' => '7', # Cancelamento de Desconto
444
+ }
445
+ end
446
+
447
+ ########################################################################################
448
+ ################################# CÓDIGO PROTESTO ####################################
449
+ # Código para Protesto :
450
+ # Default: 1
451
+ # Códigos padrões da GEM
452
+ # 1 = Protestar Dias Corridos
453
+ # 2 = Protestar Dias Úteis
454
+ # 3 = Não Protesta
455
+ # 4 = Protestar Fim Falimentar - Dias Úteis
456
+ # 5 = Protestar Fim Falimentar - Dias Corridos
457
+ # 8 = Negativação sem Protesto
458
+ # 9 = Cancelamento Protesto Automático
459
+ #
460
+ def get_codigo_protesto(code)
461
+ "#{code}".adjust_size_to(1, '0', :right)
462
+ equivalent_codigo_protesto[code] || code
463
+ end
464
+ # Código adotado pela FEBRABAN para identificar o tipo de prazo a ser considerado para o protesto.
465
+ # O código '9' só sera aceito para código de movimento para remessa '31'
466
+ def equivalent_codigo_protesto
467
+ {
468
+ '1' => '1', # Protestar Dias Corridos
469
+ '2' => '2', # Protestar Dias Úteis
470
+ '3' => '3', # Não Protesta
471
+ '4' => '4', # Protestar Fim Falimentar - Dias Úteis
472
+ '5' => '5', # Protestar Fim Falimentar - Dias Corridos
473
+ '8' => '8', # Negativação sem Protesto
474
+ '9' => '9', # Cancelamento Protesto Automático
475
+ }
476
+ end
477
+
478
+ ########################################################################################
479
+ #################################### CÓDIGO MOEDA ####################################
480
+ # Código da Moeda :
481
+ # Default: 09
482
+ # Códigos padrões da GEM
483
+ # 01 = Reservado para Uso Futuro
484
+ # 02 = Dólar Americano Comercial (Venda)
485
+ # 03 = Dólar Americano Turismo (Venda)
486
+ # 04 = ITRD
487
+ # 05 = IDTR
488
+ # 06 = UFIR Diária
489
+ # 07 = UFIR Mensal
490
+ # 08 = FAJ - TR
491
+ # 09 = Real
492
+ # 10 = TR
493
+ # 11 = IGPM
494
+ # 12 = CDI
495
+ # 13 = Percentual do CDI
496
+ # 14 = Euro
497
+ #
498
+ def get_codigo_moeda(code, cnab)
499
+ "#{code}".adjust_size_to(2, '0', :right)
500
+ send("equivalent_codigo_moeda_#{cnab}")[code] || code
501
+ end
502
+ # Código adotado pela FEBRABAN para identificar a moeda referenciada no Título
503
+ def equivalent_codigo_moeda_240
504
+ {
505
+ '01' => '01', # Reservado para Uso Futuro
506
+ '02' => '02', # Dólar Americano Comercial (Venda)
507
+ '03' => '03', # Dólar Americano Turismo (Venda)
508
+ '04' => '04', # ITRD
509
+ '05' => '05', # IDTR
510
+ '06' => '06', # UFIR Diária
511
+ '07' => '07', # UFIR Mensal
512
+ '08' => '08', # FAJ - TR
513
+ '09' => '09', # Real
514
+ '10' => '10', # TR
515
+ '11' => '11', # IGPM
516
+ '12' => '12', # CDI
517
+ '13' => '13', # Percentual do CDI
518
+ '14' => '14', # Euro
519
+ }
520
+ end
521
+ def equivalent_codigo_moeda_400
522
+ {
523
+ '01' => '01', # Reservado para Uso Futuro
524
+ '02' => '02', # Dólar Americano Comercial (Venda)
525
+ '03' => '03', # Dólar Americano Turismo (Venda)
526
+ '04' => '04', # ITRD
527
+ '05' => '05', # IDTR
528
+ '06' => '06', # UFIR Diária
529
+ '07' => '07', # UFIR Mensal
530
+ '08' => '08', # FAJ - TR
531
+ '09' => '09', # Real
532
+ '10' => '10', # TR
533
+ '11' => '11', # IGPM
534
+ '12' => '12', # CDI
535
+ '13' => '13', # Percentual do CDI
536
+ '14' => '14', # Euro
537
+ }
538
+ end
4
539
 
5
- # "Espécie do Título :
6
- def get_especie_titulo(code)
7
- "#{code}".adjust_size_to(2, '0', :right)
8
- equivalent_especie_titulo[code] || '99'
9
- end
10
- def equivalent_especie_titulo
11
- {
12
- '01' => '01', # Duplicata Mercantil
13
- '02' => '02', # Nota Promissória
14
- '03' => '03', # Nota de Seguro
15
- '05' => '05', # Recibo
16
- '06' => '06', # Duplicata Rural
17
- '08' => '08', # Letra de Câmbio
18
- '09' => '09', # Warrant
19
- '10' => '10', # Cheque
20
- '12' => '12', # Duplicata de Serviço
21
- '13' => '13', # Nota de Débito
22
- '14' => '14', # Triplicata Mercantil
23
- '15' => '15', # Triplicata de Serviço
24
- '18' => '18', # Fatura
25
- '20' => '20', # Apólice de Seguro
26
- '21' => '21', # Mensalidade Escolar
27
- '22' => '22', # Parcela de Consórcio
28
- '99' => '99', # Outros"
29
- }
30
- end
31
540
  end
32
541
  end
33
542
  end
@@ -11,10 +11,14 @@ module BrBoleto
11
11
 
12
12
  attr_accessor :nome_avalista
13
13
  attr_accessor :documento_avalista
14
+ attr_accessor :endereco_avalista
14
15
 
15
16
  ###################### CUSTOM VALIDATIONS #################
16
17
  attr_accessor :valid_endereco_required
17
18
  validates :endereco, :bairro, :cep, :cidade, :uf, presence: true, if: :valid_endereco_required
19
+
20
+ attr_accessor :valid_avalista_required
21
+ validates :nome_avalista, :documento_avalista, presence: true, if: :valid_avalista_required
18
22
  ###########################################################
19
23
 
20
24
  validates :nome, :cpf_cnpj, presence: true
@@ -1,3 +1,5 @@
1
+ require "unidecoder"
2
+
1
3
  module BrBoleto
2
4
  module Remessa
3
5
  class Base < BrBoleto::ActiveModelBase
@@ -60,6 +60,14 @@ module BrBoleto
60
60
  1
61
61
  end
62
62
 
63
+ def usa_segmento_R?
64
+ true
65
+ end
66
+
67
+ def usa_segmento_S?
68
+ true
69
+ end
70
+
63
71
  validates_each :lotes do |record, attr, value|
64
72
  record.errors.add(attr, :blank) if value.empty?
65
73
  value.each do |lote|
@@ -108,12 +116,18 @@ module BrBoleto
108
116
  itens_lote << monta_segmento_q(pagamento, nro_lote, sequencial_do_lote)
109
117
 
110
118
  # Metodo 'monta_segmento_r' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoR
111
- sequencial_do_lote += 1
112
- itens_lote << monta_segmento_r(pagamento, nro_lote, sequencial_do_lote)
119
+ # Segmento R é opcional e não é utilizados por alguns bancos
120
+ if usa_segmento_R?
121
+ sequencial_do_lote += 1
122
+ itens_lote << monta_segmento_r(pagamento, nro_lote, sequencial_do_lote)
123
+ end
113
124
 
114
125
  # Metodo 'monta_segmento_s' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoS
115
- sequencial_do_lote += 1
116
- itens_lote << monta_segmento_s(pagamento, nro_lote, sequencial_do_lote)
126
+ # Segmento S é opcional e não é utilizados por alguns bancos
127
+ if usa_segmento_S?
128
+ sequencial_do_lote += 1
129
+ itens_lote << monta_segmento_s(pagamento, nro_lote, sequencial_do_lote)
130
+ end
117
131
  end
118
132
 
119
133
  # total_de_registros_do_lote é a quantidade de registros(linhas) que constam em um lote
@@ -150,8 +164,9 @@ module BrBoleto
150
164
  # Metodo 'monta_trailer_arquivo' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::TrailerArquivo
151
165
  arquivo << monta_trailer_arquivo(lotes.count, contador)
152
166
 
153
- retorno = arquivo.join("\n")
154
- ActiveSupport::Inflector.transliterate(retorno).upcase
167
+ retorno = ActiveSupport::Inflector.transliterate(arquivo.join("\n")).to_ascii.upcase
168
+ retorno << "\n"
169
+ retorno.encode(retorno.encoding, :universal_newline => true).encode(retorno.encoding, :crlf_newline => true)
155
170
  end
156
171
 
157
172
  # Número do Documento de Cobrança