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,141 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab240
5
+ class Bradesco < BrBoleto::Remessa::Cnab240::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Bradesco
8
+ end
9
+
10
+ ########################### HEADER ARQUIVO #############################
11
+ #
12
+ # DESCRIÇÃO TAMANHO POSIÇÃO
13
+ # ---------------------------------------------------------
14
+ # Cód. Cedente (convênio) 20 33-52
15
+ # TOTAL = 20 posições
16
+ def codigo_convenio
17
+ "#{conta.convenio}".adjust_size_to(20, '0', :right)
18
+ end
19
+
20
+ # Posição 212 a 240 do Header do Arquivo
21
+ # Para o Bradesco esse espaço deve ter 'Brancos'
22
+ # TOTAL = 29 posições
23
+ def complemento_header_arquivo
24
+ ''.rjust(29, ' ')
25
+ end
26
+
27
+ # Informação da conta
28
+ # DESCRIÇÃO TAMANHO POSIÇÃO
29
+ # ---------------------------------------------------------
30
+ # agencia 05 54 - 58
31
+ # digito Verif. agencia 01 59 - 59
32
+ # Número da Conta Corrente 12 60 - 71
33
+ # DV da Conta 01 72 - 72
34
+ # DV da Ag/Conta 01 73 - 73
35
+ #
36
+ # TOTAL = 20 posições
37
+ def informacoes_da_conta
38
+ informacoes = "#{conta.agencia}".adjust_size_to(5, '0', :right)
39
+ informacoes << "#{conta.agencia_dv}"
40
+ informacoes << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
41
+ if (conta.conta_corrente_dv.to_s).size == 2 # Para os Bancos que se utilizam de duas posições para o Dígito Verificador do Número da Conta Corrente.
42
+ informacoes << "#{(conta.conta_corrente_dv.to_s)[0]}" # Preencher este campo com a 1a posição deste dígito.
43
+ informacoes << "#{(conta.conta_corrente_dv.to_s)[1]}" # Preencher este campo com a 2a posição deste dígito.
44
+ else
45
+ informacoes << "#{conta.conta_corrente_dv}".adjust_size_to(2) # Caso contrário ajustar o conta_corrente_dv para 2 digitos adicionando espaço em branco no final
46
+ end
47
+ informacoes.adjust_size_to(20, '0')
48
+ end
49
+
50
+ ########################### HEADER LOTE #############################
51
+ #
52
+ # DESCRIÇÃO TAMANHO POSIÇÃO
53
+ # ---------------------------------------------------------
54
+ # Cód. Cedente (convênio) 20 34-53
55
+ # TOTAL = 20 posições
56
+ def convenio_lote(lote)
57
+ codigo_convenio
58
+ end
59
+
60
+ ######################### SEGMENTO P #############################
61
+ #
62
+ # segmento_p_posicao_024_a_057
63
+ # DESCRIÇÃO TAMANHO POSIÇÃO
64
+ # ---------------------------------------------------------
65
+ # Número da Conta Corrente 12 24 - 35
66
+ # DV da Conta 01 36 - 36
67
+ # DV da Ag/Conta 01 37 - 37
68
+ # Identificação do Produto 03 38 - 40
69
+ # Zeros 05 41 - 45
70
+ # Número Doc. 11 46 - 56
71
+ # DV Nosso Número 01 57 - 57
72
+ #
73
+ # TOTAL = 34 posições
74
+ def complemento_p(pagamento)
75
+ complemento = ''
76
+ complemento << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
77
+ if (conta.conta_corrente_dv.to_s).size == 2 # Para os Bancos que se utilizam de duas posições para o Dígito Verificador do Número da Conta Corrente.
78
+ complemento << "#{(conta.conta_corrente_dv.to_s)[0]}" # Preencher este campo com a 1a posição deste dígito.
79
+ complemento << "#{(conta.conta_corrente_dv.to_s)[1]}" # Preencher este campo com a 2a posição deste dígito.
80
+ else
81
+ complemento << "#{conta.conta_corrente_dv}".adjust_size_to(2) # Caso contrário ajustar o conta_corrente_dv para 2 digitos adicionando espaço em branco no final
82
+ end
83
+ complemento << "#{conta.carteira}".adjust_size_to(3, '0', :right)
84
+ complemento << ''.rjust(5, '0')
85
+ complemento << "#{pagamento.numero_documento}".adjust_size_to(11, '0', :right)
86
+ complemento << "#{pagamento.nosso_numero}".split('').last
87
+ complemento.adjust_size_to(34, '0')
88
+ end
89
+
90
+ # segmento_p_posicao_059_a_059
91
+ # POSIÇÃO TAMANHO DESCRIÇÃO
92
+ # -------------------------------------------------------------------
93
+ # 59 - 59 01 Forma de Cadastramento do Título no Banco
94
+ #
95
+ # TOTAL = 1 posição
96
+ def segmento_p_posicao_059_a_059(pagamento)
97
+ '1'
98
+ end
99
+
100
+ # segmento_p_posicao_063_a_077
101
+ # DESCRIÇÃO TAMANHO POSIÇÃO
102
+ # ---------------------------------------------------------
103
+ # Número Doc. 10 63 - 72
104
+ # Zeros 05 73 - 77
105
+ # TOTAL = 15 posições
106
+ def segmento_p_numero_do_documento(pagamento)
107
+ segmento = ''
108
+ segmento << "#{pagamento.numero_documento}".adjust_size_to(15, '0', :right)
109
+ segmento
110
+ end
111
+
112
+ ######################### TRAILER LOTE #############################
113
+ #
114
+ # trailer_lote_posicao_024_a_240(lote, nr_lote)
115
+ # DESCRIÇÃO TAMANHO POSIÇÃO
116
+ # ----------------------------------------------------------------
117
+ # Qtd. Títulos em Cobrança 006 024 - 029
118
+ # Val. Tot. Títulos em Carteiras 017 030 - 046
119
+ # Qtd. Títulos em Cobrança 006 047 - 052
120
+ # Val. Tot. Títulos em Carteiras 017 053 - 069
121
+ # Qtd. Títulos em Cobrança 006 070 - 075
122
+ # Qtd. Títulos em Carteiras 017 076 - 092
123
+ # Qtd. de Títulos em Cobrança 006 093 - 098
124
+ # Val. Tot. dos Títulos em Carteiras 017 099 - 115
125
+ # N. Aviso de Lançamento 008 116 - 123
126
+ # Uso FEBRABAN 117 124 - 240
127
+ #
128
+ # TOTAL = 217 posições
129
+ #
130
+ def complemento_trailer_lote(lote, nr_lote)
131
+ complemento = ''
132
+ complemento << ''.rjust(92, '0') # VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO
133
+ complemento << ''.rjust(8, '0') # Número do aviso de lançamento do crédito referente a(os) título(s) de cobrança, que poderá ser utilizado no extrato de conta corrente.
134
+ complemento << ''.rjust(117, ' ') # USO EXCLUSIVO FEBRABAN
135
+ complemento
136
+ end
137
+
138
+ end
139
+ end
140
+ end
141
+ end
@@ -84,7 +84,7 @@ module BrBoleto
84
84
  def complemento_p(pagamento)
85
85
  complemento = "#{conta.convenio}".adjust_size_to(6, '0', :right)
86
86
  complemento << ''.rjust(11, '0')
87
- complemento << "#{conta.carteira}".adjust_size_to(conta.valid_carteira_length, '1', :right)
87
+ complemento << "#{conta.carteira}".adjust_size_to(conta.valid_carteira_length, '2', :right)
88
88
  complemento << pagamento.nosso_numero.adjust_size_to(15, '0', :right)
89
89
  complemento
90
90
  end
@@ -121,6 +121,13 @@ module BrBoleto
121
121
  def segmento_p_posicao_196_a_220(pagamento)
122
122
  "#{pagamento.numero_documento}".adjust_size_to(25, '0', :right)
123
123
  end
124
+
125
+ # Segmento Q Cód. Bco. Corresp. na Compensação
126
+ # Deve ser 3 espaços em branco
127
+ # 3 posições
128
+ def segmento_q_posicao_210_a_212
129
+ ''.rjust(3, ' ')
130
+ end
124
131
 
125
132
  def segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2(pagamento)
126
133
  '00'
@@ -0,0 +1,169 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module BrBoleto
3
+ module Remessa
4
+ module Cnab240
5
+ class Cecred < BrBoleto::Remessa::Cnab240::Base
6
+ def conta_class
7
+ BrBoleto::Conta::Cecred
8
+ end
9
+
10
+ ########################### HEADER ARQUIVO #############################
11
+ #
12
+ # DESCRIÇÃO TAMANHO POSIÇÃO
13
+ # ---------------------------------------------------------
14
+ # Cód. Cedente (convênio) 20 33-52
15
+ # TOTAL = 20 posições
16
+ def codigo_convenio
17
+ "#{conta.convenio}".adjust_size_to(20)
18
+ end
19
+
20
+ # Informação da conta
21
+ # DESCRIÇÃO TAMANHO POSIÇÃO
22
+ # ---------------------------------------------------------
23
+ # agencia 05 53 - 57
24
+ # digito Verif. agencia 01 58 - 58
25
+ # Número da Conta Corrente 12 59 - 70
26
+ # DV da Conta 01 71 - 71
27
+ # DV da Ag/Conta 01 72 - 72
28
+ #
29
+ # TOTAL = 20 posições
30
+ def informacoes_da_conta
31
+ informacoes = "#{conta.agencia}".adjust_size_to(5, '0', :right)
32
+ informacoes << "#{conta.agencia_dv}"
33
+ informacoes << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
34
+ informacoes << "#{conta.conta_corrente_dv}".adjust_size_to(2)
35
+ informacoes
36
+ end
37
+
38
+ # Espaço reservado para o Banco
39
+ # TOTAL = 20 posições
40
+ def header_arquivo_posicao_172_a_191
41
+ ''.rjust(20, ' ')
42
+ end
43
+
44
+ # Espaço reservado para a Empresa
45
+ # TOTAL = 20 posições
46
+ def header_arquivo_posicao_192_a_211
47
+ ''.rjust(20, ' ')
48
+ end
49
+
50
+ # Para o Cecred esse espaço deve ter 'Brancos'
51
+ # TOTAL = 29 posições
52
+ def complemento_header_arquivo
53
+ ''.rjust(29, ' ')
54
+ end
55
+
56
+ ########################### HEADER LOTE #############################
57
+
58
+ # Forma de Lançamento
59
+ # Para o Cecred esse espaço deve ter 'Brancos'
60
+ def header_lote_posicao_012_a_013
61
+ ''.adjust_size_to(2)
62
+ end
63
+
64
+ # Convenio -> Código do Cedente no Banco
65
+ # Posicao 034 a 053
66
+ # TOTAL = 20 posições
67
+ def convenio_lote(lote)
68
+ codigo_convenio
69
+ end
70
+
71
+ ######################### SEGMENTO P #############################
72
+ #
73
+ # segmento_p_posicao_024_a_057
74
+ # DESCRIÇÃO TAMANHO POSIÇÃO
75
+ # -----------------------------------------------------------------------
76
+ # Número da Conta Corrente 12 24 - 35
77
+ # DV da Conta 01 36 - 36
78
+ # DV da Ag/Conta 01 37 - 37
79
+ # Identificação do Título na Cooperativa 20 38 - 57
80
+ #
81
+ # TOTAL = 34 posições
82
+ def complemento_p(pagamento)
83
+ complemento = ''
84
+ complemento << "#{conta.conta_corrente}".adjust_size_to(12, '0', :right)
85
+ complemento << "#{conta.conta_corrente_dv}".adjust_size_to(2)
86
+ complemento << "#{pagamento.nosso_numero}".adjust_size_to(20)
87
+ complemento
88
+ end
89
+
90
+ # Forma de Cadastr. do Título no Banco
91
+ def segmento_p_posicao_059_a_059(pagamento)
92
+ '1'
93
+ end
94
+
95
+ # Tipo de Documento
96
+ def segmento_p_posicao_060_a_060
97
+ '1'
98
+ end
99
+
100
+ # Número do Documento de Cobrança
101
+ # Posição 063 a 077
102
+ # TOTAL = 15 posições
103
+ def segmento_p_numero_do_documento(pagamento)
104
+ segmento = "#{pagamento.numero_documento}".adjust_size_to(15, '0', :right)
105
+ end
106
+
107
+ # Código para Baixa/Devolução ('1' = Baixar / Devolver , '2' = Não Baixar / Não Devolver)
108
+ def segmento_p_posicao_224_a_224
109
+ '2'
110
+ end
111
+
112
+ # Número de Dias para Baixa/Devolução
113
+ # Para o Cecred esse espaço deve ter 'Brancos'
114
+ # TOTAL = 3 posoções
115
+ def segmento_p_posicao_225_a_227
116
+ ''.adjust_size_to(3)
117
+ end
118
+
119
+ ######################### SEGMENTO R #############################
120
+ #
121
+ # Tipo de Inscrição
122
+ # TOTAL = 1 posição
123
+ def segmento_q_posicao_154_a_154(pagamento)
124
+ '0'
125
+ end
126
+
127
+ # CNPF/CNPJ Avalista
128
+ # Para o Cecred esse espaço deve ter 'Zeros'
129
+ # # TOTAL = 15 posições
130
+ def segmento_q_posicao_155_a_169(pagamento)
131
+ ''.adjust_size_to(15, '0', :right)
132
+ end
133
+
134
+ # Nome do avalista
135
+ # Para o Cecred esse espaço deve ter 'Brancos'
136
+ # # TOTAL = 40 posições
137
+ def segmento_q_posicao_170_a_209(pagamento)
138
+ ''.adjust_size_to(40)
139
+ end
140
+
141
+ ######################### TRAILER LOTE #############################
142
+ # trailer_lote_posicao_024_a_240(lote, nr_lote)
143
+ # DESCRIÇÃO TAMANHO POSIÇÃO
144
+ # ----------------------------------------------------------------
145
+ # Qtd. Títulos em Cobrança 006 024 - 029
146
+ # Val. Tot. Títulos em Carteiras 017 030 - 046
147
+ # Qtd. Títulos em Cobrança 006 047 - 052
148
+ # Val. Tot. Títulos em Carteiras 017 053 - 069
149
+ # Qtd. Títulos em Cobrança 006 070 - 075
150
+ # Qtd. Títulos em Carteiras 017 076 - 092
151
+ # Qtd. de Títulos em Cobrança 006 093 - 098
152
+ # Val. Tot. dos Títulos em Carteiras 017 099 - 115
153
+ # N. Aviso de Lançamento 008 116 - 123
154
+ # Uso FEBRABAN 117 124 - 240
155
+ #
156
+ # TOTAL = 217 posições
157
+ #
158
+ def complemento_trailer_lote(lote, nr_lote)
159
+ complemento = ''
160
+ complemento << ''.rjust(92, '0') # VALORES UTILIZADOS APENAS PARA ARQUIVO DE RETORNO
161
+ complemento << ''.rjust(8, '0') # Número do aviso de lançamento do crédito referente a(os) título(s) de cobrança, que poderá ser utilizado no extrato de conta corrente.
162
+ complemento << ''.rjust(117, ' ') # USO EXCLUSIVO FEBRABAN
163
+ complemento
164
+ end
165
+
166
+ end
167
+ end
168
+ end
169
+ end
@@ -3,6 +3,7 @@ module BrBoleto
3
3
  module Cnab240
4
4
  module Helper
5
5
  module SegmentoP
6
+
6
7
  # Monta o registro segmento P do arquivo
7
8
  #
8
9
  # @param pagamento [BrBoleto::Remessa::Pagamento]
@@ -24,7 +25,7 @@ module BrBoleto
24
25
  segmento_p << segmento_p_posicao_009_a_013(sequencial) # num. sequencial do registro no lote 5
25
26
  segmento_p << segmento_p_posicao_014_a_014 # cod. segmento 1
26
27
  segmento_p << segmento_p_posicao_015_a_015 # uso exclusivo 1
27
- segmento_p << segmento_p_posicao_016_a_017 # cod. movimento remessa 2
28
+ segmento_p << segmento_p_posicao_016_a_017(pagamento) # cod. movimento remessa 2
28
29
  segmento_p << segmento_p_posicao_018_a_022 # agencia 5
29
30
  segmento_p << segmento_p_posicao_023_a_023 # dv agencia 1
30
31
  segmento_p << segmento_p_posicao_024_a_057(pagamento) # informacoes da conta 34
@@ -50,11 +51,11 @@ module BrBoleto
50
51
  segmento_p << segmento_p_posicao_166_a_180(pagamento) # valor IOF 15
51
52
  segmento_p << segmento_p_posicao_181_a_195(pagamento) # valor abatimento 15
52
53
  segmento_p << segmento_p_posicao_196_a_220(pagamento) # identificacao titulo empresa 25 *
53
- segmento_p << segmento_p_posicao_221_a_221 # cod. para protesto 1 *
54
- segmento_p << segmento_p_posicao_222_a_223 # dias para protesto 2 *
54
+ segmento_p << segmento_p_posicao_221_a_221(pagamento) # cod. para protesto 1 *
55
+ segmento_p << segmento_p_posicao_222_a_223(pagamento) # dias para protesto 2 *
55
56
  segmento_p << segmento_p_posicao_224_a_224 # cod. para baixa 1 *
56
57
  segmento_p << segmento_p_posicao_225_a_227 # dias para baixa 2 *
57
- segmento_p << segmento_p_posicao_228_a_229 # cod. da moeda 2
58
+ segmento_p << segmento_p_posicao_228_a_229(pagamento) # cod. da moeda 2
58
59
  segmento_p << segmento_p_posicao_230_a_239 # uso exclusivo 10
59
60
  segmento_p << segmento_p_posicao_240_a_240 # uso exclusivo 1
60
61
  segmento_p.upcase
@@ -108,8 +109,9 @@ module BrBoleto
108
109
  # cod. movimento remessa -> Padrão 01 = Entrada de Titulos
109
110
  # 2 posições
110
111
  #
111
- def segmento_p_posicao_016_a_017
112
- '01'
112
+ def segmento_p_posicao_016_a_017(pagamento)
113
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
114
+ "#{conta.get_codigo_movimento_remessa(code, 240)}".adjust_size_to(2, '0')
113
115
  end
114
116
 
115
117
  # Agência Mantenedora da Conta
@@ -138,11 +140,11 @@ module BrBoleto
138
140
  complemento_p(pagamento)
139
141
  end
140
142
 
141
- # Código da carteira
143
+ # Código da carteira ou tipo de cobrança
142
144
  # 1 posição
143
145
  #
144
146
  def segmento_p_posicao_058_a_058
145
- conta.carteira
147
+ "#{conta.get_tipo_cobranca(conta.codigo_carteira, 240)}".adjust_size_to(1, '1')
146
148
  end
147
149
 
148
150
  # Forma de Cadastr. do Título no Banco
@@ -163,14 +165,14 @@ module BrBoleto
163
165
  # 1 posição
164
166
  #
165
167
  def segmento_p_posicao_061_a_061(pagamento)
166
- pagamento.emissao_boleto
168
+ "#{conta.get_identificacao_emissao(pagamento.emissao_boleto, 240)}".adjust_size_to(1, '2')
167
169
  end
168
170
 
169
171
  # Identificação da Distribuição
170
172
  # 1 posição
171
173
  #
172
174
  def segmento_p_posicao_062_a_062(pagamento)
173
- pagamento.distribuicao_boleto
175
+ "#{conta.get_distribuicao_boleto(pagamento.distribuicao_boleto)}".adjust_size_to(1, '2')
174
176
  end
175
177
 
176
178
  # Número do Documento de Cobrança
@@ -213,7 +215,7 @@ module BrBoleto
213
215
  # 2 posições
214
216
  #
215
217
  def segmento_p_posicao_107_a_108(pagamento)
216
- "#{pagamento.especie_titulo}".adjust_size_to(2, '0', :right)
218
+ "#{conta.get_especie_titulo(pagamento.especie_titulo, 240)}".adjust_size_to(2, '0', :right)
217
219
  end
218
220
 
219
221
  # Identific. de Título Aceito/Não Aceito (A ou N)
@@ -235,8 +237,7 @@ module BrBoleto
235
237
  # Padrão FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
236
238
  #
237
239
  def segmento_p_posicao_118_a_118(pagamento)
238
- cod = "#{pagamento.codigo_juros}".adjust_size_to(1, '3')
239
- cod.in?(['1','2','3']) ? cod : '3'
240
+ "#{conta.get_codigo_juros(pagamento.codigo_juros)}".adjust_size_to(1, '3')
240
241
  end
241
242
 
242
243
  # Data do Juros de Mora
@@ -257,7 +258,7 @@ module BrBoleto
257
258
  # 1 posição
258
259
  #
259
260
  def segmento_p_posicao_142_a_142(pagamento)
260
- "#{pagamento.cod_desconto}".adjust_size_to(1)
261
+ "#{conta.get_codigo_desconto(pagamento.cod_desconto)}".adjust_size_to(1, '0')
261
262
  end
262
263
 
263
264
  # Data do Desconto 1
@@ -298,15 +299,21 @@ module BrBoleto
298
299
  # Código para Protesto
299
300
  # 1 posição
300
301
  #
301
- def segmento_p_posicao_221_a_221
302
- '1'
302
+ def segmento_p_posicao_221_a_221(pagamento)
303
+ "#{conta.get_codigo_protesto(pagamento.codigo_protesto)}".adjust_size_to(1, '1')
303
304
  end
304
305
 
305
- # Número de Dias para Protesto
306
+ # Número de Dias para Protesto
307
+ # Para os códigos '3' = Não Protestar e '8' = Negativação sem Protesto,
308
+ # setar dias de protesto '00', caso contrário setar o valor de dias_protesto
306
309
  # 2 posições
307
310
  #
308
- def segmento_p_posicao_222_a_223
309
- '00'
311
+ def segmento_p_posicao_222_a_223(pagamento)
312
+ if pagamento.codigo_protesto.to_i.in?([3, 8])
313
+ '00'
314
+ else
315
+ "#{pagamento.dias_protesto}".adjust_size_to(2, '0')
316
+ end
310
317
  end
311
318
 
312
319
  # Código para Baixa/Devolução
@@ -326,8 +333,9 @@ module BrBoleto
326
333
  # Código da Moeda (09 para real)
327
334
  # 2 posições
328
335
  #
329
- def segmento_p_posicao_228_a_229
330
- '09'
336
+ def segmento_p_posicao_228_a_229(pagamento)
337
+ moeda = "#{pagamento.codigo_moeda}".rjust(2, '0')
338
+ "#{conta.get_codigo_moeda(moeda, 240)}".adjust_size_to(2, '0')
331
339
  end
332
340
 
333
341
  # Nº do Contrato da Operação de Crédito (Uso do banco)
@@ -23,7 +23,7 @@ module BrBoleto
23
23
  segmento_q << segmento_q_posicao_009_a_013(sequencial) # num. sequencial do registro no lote 5
24
24
  segmento_q << segmento_q_posicao_014_a_014 # cod. segmento 1
25
25
  segmento_q << segmento_q_posicao_015_a_015 # uso exclusivo 1
26
- segmento_q << segmento_q_posicao_016_a_017 # cod. movimento remessa 2
26
+ segmento_q << segmento_q_posicao_016_a_017(pagamento) # cod. movimento remessa 2
27
27
  segmento_q << segmento_q_posicao_018_a_018(pagamento) # tipo insc. sacado 1
28
28
  segmento_q << segmento_q_posicao_019_a_033(pagamento) # documento sacado 14
29
29
  segmento_q << segmento_q_posicao_034_a_073(pagamento) # nome cliente 40
@@ -90,8 +90,9 @@ module BrBoleto
90
90
  # Código de Movimento Remessa
91
91
  # 2 posições
92
92
  #
93
- def segmento_q_posicao_016_a_017
94
- '01'
93
+ def segmento_q_posicao_016_a_017(pagamento)
94
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
95
+ "#{conta.get_codigo_movimento_remessa(code, 240)}".adjust_size_to(2, '0')
95
96
  end
96
97
 
97
98
  # Tipo de Inscrição (1=CPF 2=CNPJ)
@@ -22,7 +22,7 @@ module BrBoleto
22
22
  segmento_r << segmento_r_posicao_009_a_013(sequencial)
23
23
  segmento_r << segmento_r_posicao_014_a_014
24
24
  segmento_r << segmento_r_posicao_015_a_015
25
- segmento_r << segmento_r_posicao_016_a_017
25
+ segmento_r << segmento_r_posicao_016_a_017(pagamento)
26
26
  segmento_r << segmento_r_posicao_018_a_018(pagamento)
27
27
  segmento_r << segmento_r_posicao_019_a_026(pagamento)
28
28
  segmento_r << segmento_r_posicao_027_a_041(pagamento)
@@ -96,8 +96,9 @@ module BrBoleto
96
96
  # Código de Movimento Remessa - 01 = Entrada de Titulos
97
97
  # 2 posições
98
98
  #
99
- def segmento_r_posicao_016_a_017
100
- '01'
99
+ def segmento_r_posicao_016_a_017(pagamento)
100
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
101
+ "#{conta.get_codigo_movimento_remessa(code, 240)}".adjust_size_to(2, '0')
101
102
  end
102
103
 
103
104
  # Código do desconto 2
@@ -147,8 +148,7 @@ module BrBoleto
147
148
  # Padrão FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
148
149
  #
149
150
  def segmento_r_posicao_066_a_066(pagamento)
150
- cod = "#{pagamento.codigo_multa}".adjust_size_to(1, '3')
151
- cod.in?(['1','2','3']) ? cod : '3'
151
+ "#{conta.get_codigo_multa(pagamento.codigo_multa)}".adjust_size_to(1, '3')
152
152
  end
153
153
 
154
154
  # Data da multa
@@ -22,7 +22,7 @@ module BrBoleto
22
22
  segmento_s << segmento_s_posicao_009_a_013(sequencial)
23
23
  segmento_s << segmento_s_posicao_014_a_014
24
24
  segmento_s << segmento_s_posicao_015_a_015
25
- segmento_s << segmento_s_posicao_016_a_017
25
+ segmento_s << segmento_s_posicao_016_a_017(pagamento)
26
26
  segmento_s << segmento_s_posicao_018_a_018(pagamento)
27
27
  if pagamento.tipo_impressao == '3'
28
28
  segmento_s << segmento_s_tipo_impressao_3(pagamento)
@@ -80,8 +80,9 @@ module BrBoleto
80
80
  # Código de Movimento Remessa - 01 = Entrada de Titulos
81
81
  # 2 posições
82
82
  #
83
- def segmento_s_posicao_016_a_017
84
- '01'
83
+ def segmento_s_posicao_016_a_017(pagamento)
84
+ code = "#{pagamento.identificacao_ocorrencia}".rjust(2, '0')
85
+ "#{conta.get_codigo_movimento_remessa(code, 240)}".adjust_size_to(2, '0')
85
86
  end
86
87
 
87
88
  # Tipo de impressão