br_boleto 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,235 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab400
5
+ class Bradesco < BrBoleto::Remessa::Cnab400::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Bradesco
8
+ end
9
+
10
+ validate :validation_codigo_empresa_is_required
11
+
12
+ ############################## HEADER #########################################################
13
+
14
+ # Código da remessa
15
+ # Tipo: Numérico
16
+ # Tamanho: 001
17
+ def header_posicao_002_a_002
18
+ '1'
19
+ end
20
+
21
+ # Complemento do registro
22
+ # Posição: 101 até 394
23
+ # POSIÇÂO TAM. Descrição
24
+ # 101 a 108 008 Branco
25
+ # 109 a 110 002 Identificação do sistema (MX)
26
+ # 111 a 117 007 No Seqüencial de Remessa (deve iniciar de 0000001 e incrementado de + 1 a cada NOVO Arquivo Remessa)
27
+ # 118 a 394 277 Branco
28
+ # Tamanho total: 294
29
+ def complemento_registro
30
+ info = ''.adjust_size_to(8)
31
+ info << 'MX'
32
+ info << "#{sequencial_remessa}".adjust_size_to(7, '0', :right)
33
+ info << ''.adjust_size_to(277)
34
+ info
35
+ end
36
+ ###############################################################################################
37
+
38
+ ############################## DETALHE #########################################################
39
+
40
+ # Informações Opcionais no Bradesco.
41
+ # Somente deverão ser preenchidos, caso o cliente Beneficiário esteja previamente
42
+ # cadastrado para operar com a modalidade de cobrança com débito automático
43
+ def detalhe_posicao_002_003
44
+ ''.adjust_size_to(2)
45
+ end
46
+ def detalhe_posicao_004_017
47
+ ''.adjust_size_to(14)
48
+ end
49
+
50
+ # Informações da conta <- Específico para cada banco
51
+ # Posição: 018 até 037
52
+ # Tipo: Numérico
53
+ # Tamanho: 020
54
+ def informacoes_da_conta(local)
55
+
56
+ # POSIÇÂO TAM. Descrição
57
+ # 018 a 020 003 Branco
58
+ # 021 a 021 001 Zero
59
+ # 022 a 024 003 Códigos da carteira
60
+ # 025 a 029 005 Códigos da Agência Beneficiários (sem o dígito)
61
+ # 030 a 036 007 Contas Corrente
62
+ # 037 a 037 001 Dígito da Conta
63
+ if local == :detalhe
64
+ info = ''.adjust_size_to(3)
65
+ info << '0'
66
+ info << "#{conta.carteira}".adjust_size_to(3, '0', :right)
67
+ info << "#{conta.agencia}".adjust_size_to(5, '0', :right)
68
+ info << "#{conta.conta_corrente}".adjust_size_to(7, '0', :right)
69
+ info << "#{conta.conta_corrente_dv}".adjust_size_to(1, '0', :right)
70
+ info
71
+
72
+ # POSIÇÂO TAM. Descrição
73
+ # 027 a 046 020 Codigo da Empresa
74
+ elsif local == :header
75
+ info = "#{conta.codigo_empresa}".adjust_size_to(20, '0', :right) # Será informado pelo Bradesco, quando do cadastramento da Conta beneficiário na sua Agência.
76
+ end
77
+ end
78
+
79
+ # Nosso numero do pagamento e outras informações
80
+ # Posição: 063 até 108
81
+ # POSIÇÂO TAM. Descrição
82
+ # 063 a 065 003 Códigos do Banco para Débito - preencher com Zeros (Se for débito automatico adicionar 237)
83
+ # 066 a 066 001 Identificativos de Multa
84
+ # 067 a 070 004 Percentual de Multa por Atraso
85
+ # 071 a 081 011 Identificação do Título no Banco
86
+ # 082 a 082 001 Digito de Auto Conferencia do Número Bancário
87
+ # 083 a 092 010 Desconto Bonificação por dia
88
+ # 093 a 093 001 Condição para Emissão da Papeleta de Cobrança
89
+ # 094 a 094 001 Ident. se emite Boleto Automático
90
+ # 095 a 104 010 Identificação da Operação do Banco (Preencher com Branco)
91
+ # 105 a 105 001 Indicador Rateio Crédito (Opcional)
92
+ # 106 a 106 001 Endereçamento para Aviso do Débito Automático em C.C. (opcional)
93
+ # 107 a 108 002 Branco
94
+ # Tamanho: 46
95
+ def detalhe_posicao_063_076(pagamento, sequencial)
96
+ detalhe_posicao_063_108(pagamento)
97
+ end
98
+ def detalhe_posicao_077_108(pagamento, sequencial)
99
+ ''
100
+ end
101
+ def detalhe_posicao_063_108(pagamento)
102
+ info = ''.adjust_size_to(3, '0')
103
+ if (pagamento.codigo_multa == 1 or pagamento.codigo_multa == 2)
104
+ info << '2'
105
+ info << (pagamento.percentual_multa_formatado(2)).adjust_size_to(4, '0') # tem multa: preencher com percentual da multa com 2 decimais
106
+ else
107
+ info << '0'
108
+ info << ''.adjust_size_to(4, '0', :right) # sem multa: preencher com zeros.
109
+ end
110
+ info << "#{pagamento.numero_documento}".adjust_size_to(11, '0', :right)
111
+ info << "#{pagamento.nosso_numero}".split('').last
112
+ info << "#{pagamento.valor_desconto_formatado}".adjust_size_to(10,'0', :right) # Valor do desconto bonif./dia
113
+ info << "#{conta.get_identificacao_emissao(pagamento.tipo_emissao, 400)}".adjust_size_to(1, '2') # '2' : o Cliente emitiu o Boleto e o Banco somente processa o registro
114
+ info << ' ' # Espaço em branco ou 'N' caso o boleto possui Condições de Registro para Débito Automático
115
+ info << ''.adjust_size_to(10)
116
+ info << ' ' # Somente deverá ser preenchido com a Letra “R”, se a Empresa contratou o serviço de rateio de crédito, caso não, informar Branco
117
+ info << ' ' # Espaço em branco ou '1' se possui Débito Automático (emite aviso e assume o endereço do Pagador constante do Arquivo-Remessa)
118
+ info << ''.adjust_size_to(2)
119
+ info
120
+ end
121
+
122
+
123
+ # Informações referente ao pagamento
124
+ # Posição 121 até 160
125
+ # POSIÇÂO TAM. Descrição
126
+ # 121 a 126 006 Data do Vencimento do Título
127
+ # 127 a 139 013 Valor do Título
128
+ # 140 a 142 003 Banco Encarregado da Cobrança (Preencher com zeros)
129
+ # 143 a 147 005 Agência Depositária (Preencher com zeros)
130
+ # 148 a 149 002 Espécie de Título
131
+ # 150 a 150 001 Identificação (Sempre 'N')
132
+ # 151 a 156 006 Data da emissão do Título
133
+ # 157 a 158 002 1a instrução
134
+ # 159 a 160 002 2a instrução
135
+ # Tamanho: 40
136
+ def informacoes_do_pagamento(pagamento, sequencial)
137
+ dados = ''
138
+ dados << pagamento.data_vencimento_formatado('%d%m%y')
139
+ dados << pagamento.valor_documento_formatado(13)
140
+ dados << ''.adjust_size_to(3,'0', :right)
141
+ dados << ''.adjust_size_to(5,'0', :right)
142
+ dados << "#{conta.get_especie_titulo(pagamento.especie_titulo, 400)}".adjust_size_to(2, '0', :right)
143
+ dados << 'N'
144
+ dados << pagamento.data_emissao_formatado('%d%m%y')
145
+ # 1a / 2a Instrução:
146
+ # Campo destinado para pré-determinar o protesto do Título ou a baixa por decurso de prazo, quandodo registro.
147
+ # Não havendo interesse, preencher com Zeros.
148
+ # Porém, caso a Empresa deseje se utilizar da instrução automática de protesto ou da baixa pordecurso de prazo, abaixo os procedimentos:
149
+
150
+ # Protesto/Negativação:
151
+ # - posição 157 a 158 = Indicar o código “06” - (Protestar).
152
+ # - posição 157 a 158 = Indicar o código “07” - (Negativar) (NOVO)
153
+ # - posição 159 a 160 = Indicar o número de dias a protestar (mínimo 5 dias).
154
+ # Protesto Falimentar:
155
+ # - posição 157 a 158 = Indicar o código “05” – (Protesto Falimentar)
156
+ # - posição 159 a 160 = Indicar o número de dias a protestar (mínimo 5 dias).
157
+ # Decurso de Prazo:
158
+ # - posição 157 a 158 = Indicar o código “18” – (Decurso de prazo).
159
+ # - posição 159 a 160 = Indicar o número de dias para baixa por decurso de prazo.
160
+
161
+ # Nota: A posição 157 a 158, também poderá ser utilizada para definir as seguintes mensagens, a serem impressas nos Boletos de cobrança, emitidas pelo Banco:
162
+ # 08 Não cobrar juros de mora
163
+ # 09 Não receber após o vencimento
164
+ # 20/5710 Multas de 10% após o 4o dia do Vencimento.
165
+ # 11 Não receber após o 8o dia do vencimento.
166
+ # 12 Cobrar encargos após o 5o dia do vencimento.
167
+ # 13 Cobrar encargos após o 10o dia do vencimento.
168
+ # 14 Cobrar encargos após o 15o dia do vencimento
169
+ # 15 Conceder desconto mesmo se pago após o vencimento.
170
+ dados << ''.adjust_size_to(2,'0', :right) # 1a Instrução
171
+ dados << ''.adjust_size_to(2,'0', :right) # 2a Instrução
172
+ dados
173
+
174
+ end
175
+
176
+ # Informações referente aos juros e multas do pagamento
177
+ # Posição: 161 a 218
178
+ # POSIÇÂO TAM. Descrição
179
+ # 161 a 173 013 Valor a ser cobrado por Dia de Atraso
180
+ # 174 a 179 006 Data Limite P/Concessão de Desconto
181
+ # 180 a 192 013 Valor do Desconto
182
+ # 193 a 205 013 Valor do IOF
183
+ # 206 a 218 013 Valor do Abatimento a ser concedido ou cancelado
184
+ # Tamanho: 58
185
+ def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
186
+ detalhe = ''
187
+ detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
188
+ detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
189
+ detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
190
+ detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
191
+ detalhe << "#{pagamento.valor_abatimento_formatado}".adjust_size_to(13,'0', :right )
192
+ detalhe
193
+ end
194
+
195
+ # Informações referente aos dados do sacado/pagador
196
+ # Posição: 219 a 394
197
+ # POSIÇÂO TAM. Descrição
198
+ # 219 a 220 002 Identificação do Tipo de Inscrição do Pagador
199
+ # 221 a 234 014 No Inscrição do Pagador
200
+ # 235 a 274 040 Nome do Pagador
201
+ # 275 a 314 040 Endereço Completo
202
+ # 315 a 326 012 1a Mensagem
203
+ # 327 a 331 005 CEP
204
+ # 332 a 334 003 Sufixo do CEP
205
+ # 335 a 394 060 Sacador/Avalista ou 2a Mensagem
206
+ # Tamanho: 176
207
+ def informacoes_do_sacado(pagamento, sequencial)
208
+ info = ''
209
+ # Tipo de Inscrição do Pagador: "01" = CPF , "02" = CNPJ , "03" = PIS/PASEP , "98" = Não tem , "99" = Outros
210
+ info << "#{pagamento.pagador.tipo_cpf_cnpj}".adjust_size_to(2, '0', :right)
211
+ info << "#{pagamento.pagador.cpf_cnpj}".adjust_size_to(14, '0', :right)
212
+ info << "#{pagamento.pagador.nome}".adjust_size_to(40)
213
+
214
+ info << "#{pagamento.pagador.endereco}".adjust_size_to(18) # Endereço Completo
215
+ info << "#{pagamento.pagador.bairro}".adjust_size_to(10) # Endereço Completo
216
+ info << "#{pagamento.pagador.cidade}".adjust_size_to(10) # Endereço Completo
217
+ info << "#{pagamento.pagador.uf}".adjust_size_to(2) # Endereço Completo
218
+ info << ''.adjust_size_to(12) # 1a Mensagem
219
+ info << "#{pagamento.pagador.cep}".adjust_size_to(8, '0', :right) # CEP + Sufixo do CEP
220
+ info << "#{pagamento.pagador.documento_avalista}".adjust_size_to(14) # Sacador/Avalista (CPF/CNPJ)
221
+ info << "#{pagamento.pagador.nome_avalista}".adjust_size_to(46) # Sacador/Avalista (Nome)
222
+ info
223
+ end
224
+ ################################################################################################
225
+
226
+ private
227
+
228
+ def validation_codigo_empresa_is_required
229
+ errors.add(:base, :column_is_required, column: conta_class.human_attribute_name(:codigo_empresa)) if conta.codigo_empresa.blank?
230
+ end
231
+
232
+ end
233
+ end
234
+ end
235
+ end
@@ -20,10 +20,10 @@ module BrBoleto
20
20
  detalhe = ''
21
21
 
22
22
  detalhe << detalhe_posicao_001_001 # Identificação do Registro Detalhe
23
- detalhe << detalhe_posicao_002_003 # Tipo de inscrição do beneficiario
23
+ detalhe << detalhe_posicao_002_003(pagamento) # Tipo de inscrição do beneficiario
24
24
  detalhe << detalhe_posicao_004_017 # CNPJ do beneficiario
25
25
  detalhe << detalhe_posicao_018_037 # Informações da conta
26
- detalhe << detalhe_posicao_038_062 # Numero de controle do participante
26
+ detalhe << detalhe_posicao_038_062(pagamento) # Numero de controle do participante
27
27
  detalhe << detalhe_posicao_063_076(pagamento, sequencial) # Nosso número com DV
28
28
  detalhe << detalhe_posicao_077_108(pagamento, sequencial) # Diferente para cada banco
29
29
  detalhe << detalhe_posicao_109_110(pagamento, sequencial) # Comando/Movimento
@@ -48,7 +48,7 @@ module BrBoleto
48
48
  # 02 = CNPJ
49
49
  # Tipo: Numero
50
50
  # Tamanho: 002
51
- def detalhe_posicao_002_003
51
+ def detalhe_posicao_002_003(pagamento)
52
52
  conta.tipo_cpf_cnpj
53
53
  end
54
54
 
@@ -70,7 +70,7 @@ module BrBoleto
70
70
  # Padrão: " " Brancos
71
71
  # Tipo: String
72
72
  # Tamanho: 25
73
- def detalhe_posicao_038_062
73
+ def detalhe_posicao_038_062(pagamento)
74
74
  ''.adjust_size_to(25)
75
75
  end
76
76
 
@@ -92,7 +92,8 @@ module BrBoleto
92
92
  # Padrão: '01' = Registro de títulos
93
93
  # Tamanho: 2
94
94
  def detalhe_posicao_109_110(pagamento, sequencial)
95
- "#{pagamento.identificacao_ocorrencia}".adjust_size_to(2, '0', :right)
95
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
96
+ "#{conta.get_codigo_movimento_remessa(code, 400)}".adjust_size_to(2, '0')
96
97
  end
97
98
 
98
99
  # Seu número
@@ -0,0 +1,190 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab400
5
+ class Itau < BrBoleto::Remessa::Cnab400::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Itau
8
+ end
9
+
10
+ ############################## HEADER ######################################
11
+
12
+ # Código da remessa
13
+ # Tipo: Numérico
14
+ # Tamanho: 001
15
+ def header_posicao_002_a_002
16
+ '1'
17
+ end
18
+
19
+ # Complemento do registro
20
+ # POSIÇÂO TAM. Descrição
21
+ #--------------------------------
22
+ # 101 a 394 294 Brancos
23
+ # Tamanho total: 294
24
+ def complemento_registro
25
+ ''.adjust_size_to(294)
26
+ end
27
+
28
+ ############################# DETALHE #################################
29
+
30
+ # Informações da conta <- Específico para cada banco
31
+ # Posição: 018 até 037 (Detalhe)
32
+ # Posição: 027 até 046 (Header)
33
+ # Tamanho: 020
34
+ def informacoes_da_conta(local)
35
+
36
+ # POSIÇÂO:
37
+ # Detalhe | Header TAM. Descrição
38
+ # 18 a 21 27 a 30 004 Agência
39
+ # 22 a 23 31 a 32 002 Zeros
40
+ # 24 a 28 33 a 37 005 Conta Corrente
41
+ # 29 a 29 38 a 38 001 Conta Corrente DV
42
+
43
+ info = "#{conta.agencia}".adjust_size_to(4, '0', :right)
44
+ info << '00'
45
+ info << "#{conta.conta_corrente}".adjust_size_to(5, '0', :right)
46
+ info << "#{conta.conta_corrente_dv}".adjust_size_to(1, '0', :right)
47
+
48
+ if local == :detalhe
49
+ # POSIÇÂO TAM. Descrição
50
+ # -------------------------------
51
+ # 030 a 033 004 Brancos
52
+ # 034 a 037 004 Cod. Instrução
53
+
54
+ info << ''.adjust_size_to(4)
55
+ info << ''.adjust_size_to(4, "0")
56
+
57
+ elsif local == :header
58
+ # POSIÇÂO TAM. Descrição
59
+ # -------------------------------
60
+ # 039 a 046 008 Brancos
61
+
62
+ info << ''.adjust_size_to(8)
63
+ end
64
+
65
+ info
66
+ end
67
+
68
+ # Nosso numero do pagamento e outras informações
69
+ # Posição: 063 até 108
70
+ # POSIÇÂO TAM. Descrição
71
+ # -----------------------------------------------------
72
+ # 063 a 070 008 Numero Documento
73
+ # 071 a 083 013 QUANTIDADE DE MOEDA VARIÁVEL
74
+ # 084 a 086 003 Carteira
75
+ # 087 a 107 021 Uso do banco
76
+ # 108 a 108 001 Cod. Carteira
77
+ #
78
+ # Tamanho: 46
79
+ def detalhe_posicao_063_076(pagamento, sequencial)
80
+ detalhe_posicao_063_108(pagamento)
81
+ end
82
+ def detalhe_posicao_077_108(pagamento, sequencial)
83
+ ''
84
+ end
85
+ def detalhe_posicao_063_108(pagamento)
86
+ info = ''
87
+ info << "#{pagamento.numero_documento}".adjust_size_to(8, '0', :right)
88
+ info << ''.adjust_size_to(13, '0', :right) # Este campo deverá ser preenchido com zeros caso a moeda seja o Real
89
+ info << "#{conta.carteira}".adjust_size_to(3, '0', :right)
90
+ info << ''.adjust_size_to(21)
91
+ info << "#{conta.get_codigo_carteira}".adjust_size_to(1, 'I')
92
+ info
93
+ end
94
+
95
+
96
+ # Informações referente ao pagamento
97
+ # Posição 121 até 160
98
+ # POSIÇÂO TAM. Descrição
99
+ # 121 a 126 006 Data do Vencimento do Título
100
+ # 127 a 139 013 Valor do Título
101
+ # 140 a 142 003 Banco Encarregado da Cobrança
102
+ # 143 a 147 005 Agência Depositária (preencher com zeros)
103
+ # 148 a 149 002 Espécie de Título
104
+ # 150 a 150 001 Identificação (Sempre 'N')
105
+ # 151 a 156 006 Data da emissão do Título
106
+ # 157 a 158 002 1a instrução
107
+ # 159 a 160 002 2a instrução
108
+ # Tamanho: 40
109
+ def informacoes_do_pagamento(pagamento, sequencial)
110
+ dados = ''
111
+ dados << pagamento.data_vencimento_formatado('%d%m%y')
112
+ dados << pagamento.valor_documento_formatado(13)
113
+ dados << "#{conta.codigo_banco}".adjust_size_to(3,'0', :right)
114
+ dados << ''.adjust_size_to(5,'0', :right)
115
+ dados << "#{conta.get_especie_titulo(pagamento.especie_titulo, 400)}".adjust_size_to(2, '0', :right)
116
+ dados << 'N'
117
+ dados << pagamento.data_emissao_formatado('%d%m%y')
118
+
119
+ # 1a / 2a Instrução, conforme documentação (pag. 20, Nota 11):
120
+ dados << ''.adjust_size_to(2,'0', :right) # 1a Instrução
121
+ dados << ''.adjust_size_to(2,'0', :right) # 2a Instrução
122
+ dados
123
+
124
+ end
125
+
126
+ # Informações referente aos juros e multas do pagamento
127
+ # Posição: 161 a 218
128
+ # POSIÇÂO TAM. Descrição
129
+ # 161 a 173 013 Valor a ser cobrado por Dia de Atraso
130
+ # 174 a 179 006 Data Limite P/Concessão de Desconto
131
+ # 180 a 192 013 Valor do Desconto
132
+ # 193 a 205 013 Valor do IOF
133
+ # 206 a 218 013 Valor do Abatimento a ser concedido ou cancelado
134
+ # Tamanho: 58
135
+ def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
136
+ detalhe = ''
137
+ detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
138
+ detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
139
+ detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
140
+ detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
141
+ detalhe << "#{pagamento.valor_abatimento_formatado}".adjust_size_to(13,'0', :right )
142
+ detalhe
143
+ end
144
+
145
+ # Informações referente aos dados do sacado/pagador
146
+ # Posição: 219 a 394
147
+ # POSIÇÂO TAM. Descrição
148
+ # 219 a 220 002 Identificação do Tipo de Inscrição do Pagador
149
+ # 221 a 234 014 No Inscrição do Pagador
150
+ # 235 a 264 030 Nome do Pagador
151
+ # 265 a 274 010 Complemento Registro (Brancos)
152
+ # 275 a 314 040 Endereço Pagador
153
+ # 315 a 326 012 Bairro Pagador
154
+ # 327 a 331 005 CEP
155
+ # 332 a 334 003 Sufixo do CEP
156
+ # 335 a 349 015 Cidade Pagador
157
+ # 350 a 351 002 UF Pagador
158
+ # 352 a 381 030 Nome Sacador/Avalista
159
+
160
+ # 282 a 285 004 Complemento Registro (Brancos)
161
+ # 286 a 291 006 Data de mora
162
+ # 292 a 293 002 Quantidade de dias
163
+ # 294 a 294 001 Complemento Registro (Branco)
164
+
165
+ # Tamanho: 176
166
+ def informacoes_do_sacado(pagamento, sequencial)
167
+ info = ''
168
+ # Tipo de Inscrição do Pagador: "01" = CPF , "02" = CNPJ , "03" = PIS/PASEP , "98" = Não tem , "99" = Outros
169
+ info << "#{pagamento.pagador.tipo_cpf_cnpj}".adjust_size_to(2, '0', :right)
170
+ info << "#{pagamento.pagador.cpf_cnpj}".adjust_size_to(14, '0', :right)
171
+ info << "#{pagamento.pagador.nome}".adjust_size_to(30)
172
+ info << ''.adjust_size_to(10) # Complemento Registro (Brancos)
173
+ info << "#{pagamento.pagador.endereco}".adjust_size_to(40)
174
+ info << "#{pagamento.pagador.bairro}".adjust_size_to(12)
175
+ info << "#{pagamento.pagador.cep}".adjust_size_to(8, '0', :right) # CEP + Sufixo do CEP
176
+ info << "#{pagamento.pagador.cidade}".adjust_size_to(15)
177
+ info << "#{pagamento.pagador.uf}".adjust_size_to(2)
178
+ info << "#{pagamento.pagador.nome_avalista}".adjust_size_to(30) # Sacador/Avalista (Nome)
179
+ info << ''.adjust_size_to(4) # Complemento Registro (Brancos)
180
+
181
+ info << ''.adjust_size_to(6, '0') # Data de mora
182
+ info << '03' # Quantidade de dias
183
+ info << ''.adjust_size_to(1) # Complemento Registro (Brancos)
184
+ info
185
+ end
186
+
187
+ end
188
+ end
189
+ end
190
+ end
@@ -80,7 +80,7 @@ module BrBoleto
80
80
  dados << ''.rjust(6, '0') # 096 101 006 9(06) Numero do borderô: preencher em caso de carteira 3
81
81
  dados << ''.rjust(4, ' ') # 102 105 004 X(04) Complemento do Registro: Brancos
82
82
 
83
- dados << "#{pagamento.tipo_emissao}".adjust_size_to(1) # 106 106 001 9(01) "Tipo de Emissão: 1-Cooperativa 2-Cliente"
83
+ dados << "#{conta.get_identificacao_emissao(pagamento.tipo_emissao, 400)}".adjust_size_to(1, '2') # 106 106 001 9(01) "Tipo de Emissão: 1-Cooperativa 2-Cliente"
84
84
  dados << "#{conta.modalidade}".adjust_size_to(2, '0', :right) # 107 108 002 9(02) "Carteira/Modalidade: 01 = Simples Com Registro 02 = Simples Sem Registro 03 = Garantida Caucionada "
85
85
  dados
86
86
  end
@@ -125,7 +125,7 @@ module BrBoleto
125
125
  # 21 = Mensalidade Escolar
126
126
  # 22 = Parcela de Consórcio
127
127
  # 99 = Outros"
128
- dados << "#{pagamento.especie_titulo}".adjust_size_to(2, '0', :right)
128
+ dados << "#{conta.get_especie_titulo(pagamento.especie_titulo, 400)}".adjust_size_to(2, '0', :right)
129
129
 
130
130
  # 150 150 001 X(01) "Aceite do Título: "0" = Sem aceite "1" = Com aceite"
131
131
  dados << "#{pagamento.aceite ? '1' : '0'}".adjust_size_to(1, '0')
@@ -171,7 +171,7 @@ module BrBoleto
171
171
  detalhe << pagamento.percentual_multa_formatado(6)
172
172
 
173
173
  # 173 173 001 9(01) "Tipo Distribuição: 1 – Cooperativa 2 - Cliente"
174
- detalhe << "#{pagamento.tipo_emissao}".adjust_size_to(1)
174
+ detalhe << "#{conta.get_identificacao_emissao(pagamento.tipo_emissao, 400)}".adjust_size_to(1, '2')
175
175
 
176
176
  # 174 179 006 9(06) "Data primeiro desconto:
177
177
  # Informar a data limite a ser observada pelo cliente para o pagamento