brcobranca_sicredi_400 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 (126) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +91 -0
  5. data/Rakefile +8 -0
  6. data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
  7. data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
  8. data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
  9. data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  10. data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  11. data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  12. data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
  13. data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  14. data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
  15. data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  16. data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
  17. data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  18. data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
  19. data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  20. data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
  21. data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  22. data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
  23. data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
  24. data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
  25. data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
  26. data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
  27. data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
  28. data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
  29. data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  30. data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
  31. data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
  32. data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
  33. data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
  34. data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
  35. data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
  36. data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
  37. data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  38. data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
  39. data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  40. data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
  41. data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
  42. data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  43. data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
  44. data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
  45. data/lib/brcobranca/boleto/ailos.rb +89 -0
  46. data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
  47. data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
  48. data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
  49. data/lib/brcobranca/boleto/banestes.rb +86 -0
  50. data/lib/brcobranca/boleto/banrisul.rb +95 -0
  51. data/lib/brcobranca/boleto/base.rb +256 -0
  52. data/lib/brcobranca/boleto/bradesco.rb +100 -0
  53. data/lib/brcobranca/boleto/caixa.rb +123 -0
  54. data/lib/brcobranca/boleto/citibank.rb +97 -0
  55. data/lib/brcobranca/boleto/credisis.rb +118 -0
  56. data/lib/brcobranca/boleto/hsbc.rb +96 -0
  57. data/lib/brcobranca/boleto/itau.rb +138 -0
  58. data/lib/brcobranca/boleto/safra.rb +152 -0
  59. data/lib/brcobranca/boleto/santander.rb +86 -0
  60. data/lib/brcobranca/boleto/sicoob.rb +120 -0
  61. data/lib/brcobranca/boleto/sicredi.rb +145 -0
  62. data/lib/brcobranca/boleto/template/base.rb +28 -0
  63. data/lib/brcobranca/boleto/template/rghost.rb +308 -0
  64. data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
  65. data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
  66. data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
  67. data/lib/brcobranca/boleto/unicred.rb +99 -0
  68. data/lib/brcobranca/calculo.rb +120 -0
  69. data/lib/brcobranca/calculo_data.rb +63 -0
  70. data/lib/brcobranca/currency.rb +69 -0
  71. data/lib/brcobranca/formatacao.rb +104 -0
  72. data/lib/brcobranca/formatacao_string.rb +37 -0
  73. data/lib/brcobranca/limpeza.rb +20 -0
  74. data/lib/brcobranca/remessa/base.rb +72 -0
  75. data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
  76. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
  77. data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
  78. data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
  79. data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
  80. data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
  81. data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
  82. data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
  83. data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
  84. data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
  85. data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  86. data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
  87. data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
  88. data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
  89. data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
  90. data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
  91. data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
  92. data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
  93. data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
  94. data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
  95. data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
  96. data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
  97. data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
  98. data/lib/brcobranca/remessa/pagamento.rb +320 -0
  99. data/lib/brcobranca/retorno/base.rb +11 -0
  100. data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
  101. data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
  102. data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
  103. data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
  104. data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
  105. data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
  106. data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
  107. data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
  108. data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
  109. data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
  110. data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
  111. data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
  112. data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
  113. data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
  114. data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
  115. data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
  116. data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
  117. data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
  118. data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
  119. data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
  120. data/lib/brcobranca/util/date.rb +21 -0
  121. data/lib/brcobranca/util/empresa.rb +29 -0
  122. data/lib/brcobranca/util/errors.rb +76 -0
  123. data/lib/brcobranca/validations.rb +208 -0
  124. data/lib/brcobranca/version.rb +5 -0
  125. data/lib/brcobranca.rb +200 -0
  126. metadata +225 -0
@@ -0,0 +1,225 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab240
6
+ class Santander < Brcobranca::Remessa::Cnab240::Base
7
+ # Código de Transmissão
8
+ attr_accessor :codigo_transmissao
9
+
10
+ validates_presence_of :codigo_transmissao, message: 'não pode estar em branco.'
11
+
12
+ validates_length_of :codigo_transmissao, maximum: 15, message: 'deve ter no máximo 15 dígitos.'
13
+ validates_length_of :agencia, maximum: 4, message: 'deve ter 4 dígitos.'
14
+ validates_length_of :conta_corrente, maximum: 9, message: 'deve ter 9 dígitos.'
15
+ validates_length_of :digito_conta, is: 1, message: 'deve ter 1 dígito.'
16
+
17
+ def initialize(campos = {})
18
+ campos = { emissao_boleto: ' ', distribuicao_boleto: ' ',
19
+ especie_titulo: '02', tipo_documento: '2' }.merge!(campos)
20
+ super(campos)
21
+ end
22
+
23
+ def codigo_transmissao=(valor)
24
+ @codigo_transmissao = valor.to_s.strip.rjust(15, '0') if valor
25
+ end
26
+
27
+ def digito_agencia
28
+ agencia.modulo11(mapeamento: { 10 => 'X', 11 => 'X' }).to_s
29
+ end
30
+
31
+ def complemento_header
32
+ ''.rjust(29, ' ')
33
+ end
34
+
35
+ def complemento_trailer
36
+ ''.rjust(217, ' ')
37
+ end
38
+
39
+ def complemento_p(pagamento)
40
+ complemento_p = ''
41
+ complemento_p += conta_corrente.rjust(9, '0')
42
+ complemento_p << digito_conta.to_s
43
+ complemento_p << conta_corrente.rjust(9, '0')
44
+ complemento_p << digito_conta.to_s
45
+ complemento_p << ' '
46
+ complemento_p << identificador_titulo(pagamento.nosso_numero)
47
+ complemento_p
48
+ end
49
+
50
+ def complemento_r
51
+ ''.rjust(61, ' ')
52
+ end
53
+
54
+ def versao_layout_arquivo
55
+ '040'
56
+ end
57
+
58
+ def versao_layout_lote
59
+ '030'
60
+ end
61
+
62
+ def convenio_lote
63
+ identificacao_conta = ''
64
+ identificacao_conta += ''.rjust(20, ' ')
65
+ identificacao_conta << codigo_transmissao
66
+ identificacao_conta << ''.rjust(5, ' ')
67
+ identificacao_conta
68
+ end
69
+
70
+ def nome_banco
71
+ 'BANCO SANTANDER'.ljust(30, ' ')
72
+ end
73
+
74
+ def cod_banco
75
+ '033'
76
+ end
77
+
78
+ def info_conta
79
+ ''
80
+ end
81
+
82
+ def codigo_convenio
83
+ identificacao_conta = ''
84
+ identificacao_conta += codigo_transmissao
85
+ identificacao_conta << ''.rjust(25, ' ')
86
+ identificacao_conta
87
+ end
88
+
89
+ def identificador_titulo(nosso_numero)
90
+ nosso_numero_dv = nosso_numero.modulo11(
91
+ multiplicador: (2..9).to_a,
92
+ mapeamento: { 10 => 0, 11 => 0 }
93
+ ) { |total| 11 - (total % 11) }
94
+
95
+ "#{nosso_numero}#{nosso_numero_dv}".rjust(13, '0')
96
+ end
97
+
98
+ def formata_documento_ou_numero(pagamento, tamanho = 25, caracter = ' ')
99
+ doc = pagamento.documento_ou_numero.to_s.gsub(/[^0-9A-Za-z ]/, '')
100
+ doc.ljust(tamanho, caracter)[0...tamanho]
101
+ end
102
+
103
+ def densidade_gravacao
104
+ ''.rjust(5, ' ')
105
+ end
106
+
107
+ def uso_exclusivo_banco
108
+ ''.rjust(20, ' ')
109
+ end
110
+
111
+ def uso_exclusivo_empresa
112
+ ''.rjust(20, ' ')
113
+ end
114
+
115
+ def hora_geracao
116
+ ''.rjust(6, ' ')
117
+ end
118
+
119
+ def dv_agencia_cobradora
120
+ ''.rjust(1, ' ')
121
+ end
122
+
123
+ def dias_baixa(pagamento)
124
+ pagamento.dias_baixa.to_s.rjust(2, '0')
125
+ end
126
+
127
+ def monta_header_arquivo
128
+ header_arquivo = '' # CAMPO TAMANHO
129
+ header_arquivo += cod_banco # codigo do banco 3
130
+ header_arquivo << '0000' # lote do servico 4
131
+ header_arquivo << '0' # tipo de registro 1
132
+ header_arquivo << ''.rjust(8, ' ') # uso exclusivo FEBRABAN 9
133
+ header_arquivo << Brcobranca::Util::Empresa.new(documento_cedente, false).tipo # tipo inscricao 1
134
+ header_arquivo << documento_cedente.to_s.rjust(15, '0') # numero de inscricao 15
135
+ header_arquivo << codigo_convenio # codigo do convenio no banco 20
136
+ header_arquivo << info_conta # informacoes da conta 20
137
+ header_arquivo << empresa_mae.format_size(30) # nome da empresa 30
138
+ header_arquivo << nome_banco.format_size(30) # nome do banco 30
139
+ header_arquivo << ''.rjust(10, ' ') # uso exclusivo FEBRABAN 10
140
+ header_arquivo << '1' # codigo remessa 1
141
+ header_arquivo << data_geracao # data geracao 8
142
+ header_arquivo << hora_geracao # hora geracao 6
143
+ header_arquivo << sequencial_remessa.to_s.rjust(6, '0') # numero seq. arquivo 6
144
+ header_arquivo << versao_layout_arquivo # num. versao arquivo 3
145
+ header_arquivo << densidade_gravacao # densidade gravacao 5
146
+ header_arquivo << uso_exclusivo_banco # uso exclusivo 20
147
+ header_arquivo << uso_exclusivo_empresa # uso exclusivo 20
148
+ header_arquivo << complemento_header # complemento do arquivo 29
149
+ header_arquivo
150
+ end
151
+
152
+ def monta_segmento_p(pagamento, nro_lote, sequencial)
153
+ segmento_p = ''
154
+ # # DESCRICAO TAMANHO
155
+ segmento_p += cod_banco # codigo banco 3
156
+ segmento_p << nro_lote.to_s.rjust(4, '0') # lote de servico 4
157
+ segmento_p << '3' # tipo de registro 1
158
+ segmento_p << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
159
+ segmento_p << 'P' # cod. segmento 1
160
+ segmento_p << ' ' # uso exclusivo 1
161
+ segmento_p << pagamento.identificacao_ocorrencia # cod. movimento remessa 2
162
+ segmento_p << agencia.to_s.rjust(4, '0') # agencia 4
163
+ segmento_p << digito_agencia.to_s # dv agencia 1
164
+ segmento_p << complemento_p(pagamento) # informacoes da conta 34
165
+ segmento_p << codigo_carteira # codigo da carteira 1
166
+ segmento_p << forma_cadastramento # forma de cadastro do titulo 1
167
+ segmento_p << tipo_documento # tipo de documento 1
168
+ segmento_p << emissao_boleto # identificaco emissao 1
169
+ segmento_p << distribuicao_boleto # indentificacao entrega 1
170
+ segmento_p << formata_documento_ou_numero(pagamento, 15) # uso exclusivo 4
171
+ segmento_p << pagamento.data_vencimento.strftime('%d%m%Y') # data de venc. 8
172
+ segmento_p << pagamento.formata_valor(15) # valor documento 15
173
+ segmento_p << ''.rjust(5, '0') # agencia cobradora 5
174
+ segmento_p << dv_agencia_cobradora # dv agencia cobradora 1
175
+ segmento_p << especie_titulo # especie do titulo 2
176
+ segmento_p << aceite # aceite 1
177
+ segmento_p << pagamento.data_emissao.strftime('%d%m%Y') # data de emissao titulo 8
178
+ segmento_p << pagamento.tipo_mora # cod. do mora 1
179
+ segmento_p << data_mora(pagamento) # data mora 8
180
+ segmento_p << pagamento.formata_valor_mora(15) # valor mora 15
181
+ segmento_p << codigo_desconto(pagamento) # cod. do desconto 1
182
+ segmento_p << pagamento.formata_data_desconto('%d%m%Y') # data desconto 8
183
+ segmento_p << pagamento.formata_valor_desconto(15) # valor desconto 15
184
+ segmento_p << pagamento.formata_valor_iof(15) # valor IOF 15
185
+ segmento_p << pagamento.formata_valor_abatimento(15) # valor abatimento 15
186
+ segmento_p << formata_documento_ou_numero(pagamento) # identificacao titulo empresa 25
187
+ segmento_p << pagamento.codigo_protesto # cod. para protesto 1
188
+ segmento_p << pagamento.dias_protesto.to_s.rjust(2, '0') # dias para protesto 2
189
+ segmento_p << codigo_baixa(pagamento) # cod. para baixa 1
190
+ segmento_p << '0' # zero fixo 1
191
+ segmento_p << dias_baixa(pagamento) # dias para baixa 2
192
+ segmento_p << '00' # cod. da moeda 2
193
+ segmento_p << ''.rjust(11, ' ') # uso exclusivo 11
194
+ segmento_p
195
+ end
196
+
197
+ def monta_segmento_q(pagamento, nro_lote, sequencial)
198
+ segmento_q = '' # CAMPO TAMANHO
199
+ segmento_q += cod_banco # codigo banco 3
200
+ segmento_q << nro_lote.to_s.rjust(4, '0') # lote de servico 4
201
+ segmento_q << '3' # tipo de registro 1
202
+ segmento_q << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
203
+ segmento_q << 'Q' # cod. segmento 1
204
+ segmento_q << ' ' # uso exclusivo 1
205
+ segmento_q << pagamento.identificacao_ocorrencia # cod. movimento remessa 2
206
+ segmento_q << pagamento.identificacao_sacado(false) # tipo insc. sacado 1
207
+ segmento_q << pagamento.documento_sacado.to_s.rjust(15, '0') # documento sacado 14
208
+ segmento_q << pagamento.nome_sacado.format_size(40) # nome cliente 40
209
+ segmento_q << pagamento.endereco_sacado.format_size(40) # endereco cliente 40
210
+ segmento_q << pagamento.bairro_sacado.format_size(15) # bairro 15
211
+ segmento_q << pagamento.cep_sacado[0..4] # cep 5
212
+ segmento_q << pagamento.cep_sacado[5..7] # sufixo cep 3
213
+ segmento_q << pagamento.cidade_sacado.format_size(15) # cidade 15
214
+ segmento_q << pagamento.uf_sacado # uf 2
215
+ segmento_q << pagamento.identificacao_avalista(false) # identificacao do sacador 1
216
+ segmento_q << pagamento.documento_avalista.to_s.rjust(15, '0') # documento sacador 15
217
+ segmento_q << pagamento.nome_avalista.format_size(40) # nome avalista 40
218
+ segmento_q << ''.rjust(12, '0') # Reservado (uso Branco) 12
219
+ segmento_q << ''.rjust(19, ' ') # Reservado (uso Branco) 19
220
+ segmento_q
221
+ end
222
+ end
223
+ end
224
+ end
225
+ end
@@ -0,0 +1,229 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab240
6
+ class Sicoob < Brcobranca::Remessa::Cnab240::Base
7
+ attr_accessor :modalidade_carteira, :tipo_formulario, :parcela, :posto
8
+
9
+ # identificacao da emissao do boleto (attr na classe base)
10
+ # opcoes:
11
+ # ‘1’ = Banco Emite
12
+ # ‘2’ = Cliente Emite
13
+ #
14
+ # identificacao da distribuicao do boleto (attr na classe base)
15
+ # opcoes:
16
+ # ‘1’ = Banco distribui
17
+ # ‘2’ = Cliente distribui
18
+ # Tipo Formulário - 01 posição (15 a 15):
19
+ # "1" -auto-copiativo
20
+ # "3" -auto-envelopável
21
+ # "4" -A4 sem envelopamento
22
+ # "6" -A4 sem envelopamento 3 vias
23
+ # Parcela - 02 posições (11 a 12) - "01" se parcela única
24
+
25
+ # Mantém a informação do posto de atendimento dentro da agência.
26
+
27
+ validates_presence_of :modalidade_carteira, :tipo_formulario, :parcela, :convenio,
28
+ message: 'não pode estar em branco.'
29
+ # Remessa 400 - 8 digitos
30
+ # Remessa 240 - 12 digitos
31
+ validates_length_of :conta_corrente, maximum: 8, message: 'deve ter 8 dígitos.'
32
+ validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.'
33
+ validates_length_of :modalidade_carteira, is: 2, message: 'deve ter 2 dígitos.'
34
+
35
+ def initialize(campos = {})
36
+ campos = { emissao_boleto: '2',
37
+ distribuicao_boleto: '2',
38
+ especie_titulo: '02',
39
+ tipo_formulario: '4',
40
+ parcela: '01',
41
+ modalidade_carteira: '01',
42
+ forma_cadastramento: '0',
43
+ posto: '00' }.merge!(campos)
44
+ super(campos)
45
+ end
46
+
47
+ def cod_banco
48
+ '756'
49
+ end
50
+
51
+ def nome_banco
52
+ 'SICOOB'.ljust(30, ' ')
53
+ end
54
+
55
+ def versao_layout_arquivo
56
+ '081'
57
+ end
58
+
59
+ def versao_layout_lote
60
+ '040'
61
+ end
62
+
63
+ def uso_exclusivo_banco
64
+ ''.rjust(20, ' ')
65
+ end
66
+
67
+ def uso_exclusivo_empresa
68
+ ''.rjust(20, ' ')
69
+ end
70
+
71
+ def digito_agencia
72
+ # utilizando a agencia com 4 digitos
73
+ # para calcular o digito
74
+ agencia.modulo11(mapeamento: { 10 => '0' }).to_s
75
+ end
76
+
77
+ def digito_conta
78
+ # utilizando a conta corrente com 5 digitos
79
+ # para calcular o digito
80
+ conta_corrente.modulo11(mapeamento: { 10 => '0' }).to_s
81
+ end
82
+
83
+ def dv_agencia_cobradora
84
+ ' '
85
+ end
86
+
87
+ def codigo_convenio
88
+ # CAMPO TAMANHO
89
+ # num. convenio 20 BRANCOS
90
+ ''.rjust(20, ' ')
91
+ end
92
+
93
+ alias convenio_lote codigo_convenio
94
+
95
+ def info_conta
96
+ # CAMPO TAMANHO
97
+ # agencia 5
98
+ # digito agencia 1
99
+ # conta corrente 12
100
+ # digito conta 1
101
+ # digito agencia/conta 1
102
+ "#{agencia.rjust(5, '0')}#{digito_agencia}#{conta_corrente.rjust(12, '0')}#{digito_conta} "
103
+ end
104
+
105
+ def complemento_header
106
+ ''.rjust(29, ' ')
107
+ end
108
+
109
+ def complemento_trailer
110
+ # CAMPO TAMANHO
111
+ # Qt. Títulos em Cobrança Simples 6
112
+ # Vl. Títulos em Carteira Simples 15 + 2 decimais
113
+ # Qt. Títulos em Cobrança Vinculada 6
114
+ # Vl. Títulos em Carteira Vinculada 15 + 2 decimais
115
+ # Qt. Títulos em Cobrança Caucionada 6
116
+ # Vl. Títulos em Carteira Caucionada 15 + 2 decimais
117
+ # Qt. Títulos em Cobrança Descontada 6
118
+ # Vl. Títulos em Carteira Descontada 15 + 2 decimais
119
+ total_cobranca_simples = "#{quantidade_titulos_cobranca}#{valor_titulos_carteira}"
120
+ total_cobranca_vinculada = ''.rjust(23, '0')
121
+ total_cobranca_caucionada = ''.rjust(23, '0')
122
+ total_cobranca_descontada = ''.rjust(23, '0')
123
+
124
+ "#{total_cobranca_simples}#{total_cobranca_vinculada}#{total_cobranca_caucionada}" \
125
+ "#{total_cobranca_descontada}".ljust(217, ' ')
126
+ end
127
+
128
+ # Monta o registro trailer do arquivo
129
+ #
130
+ # @param nro_lotes [Integer]
131
+ # numero de lotes no arquivo
132
+ # @param sequencial [Integer]
133
+ # numero de registros(linhas) no arquivo
134
+ #
135
+ # @return [String]
136
+ #
137
+ def monta_trailer_arquivo(nro_lotes, sequencial)
138
+ # CAMPO TAMANHO
139
+ # codigo banco 3
140
+ # lote de servico 4
141
+ # tipo de registro 1
142
+ # uso FEBRABAN 9
143
+ # nro de lotes 6
144
+ # nro de registros(linhas) 6
145
+ # uso FEBRABAN 211
146
+ "#{cod_banco}99999#{''.rjust(9,
147
+ ' ')}#{nro_lotes.to_s.rjust(6,
148
+ '0')}#{sequencial.to_s.rjust(6,
149
+ '0')}#{''.rjust(6,
150
+ '0')}#{''.rjust(
151
+ 205, ' '
152
+ )}"
153
+ end
154
+
155
+ def complemento_p(pagamento)
156
+ # CAMPO TAMANHO
157
+ # conta corrente 12
158
+ # digito conta 1
159
+ # digito agencia/conta 1
160
+ # ident. titulo no banco 20
161
+ "#{conta_corrente.rjust(12, '0')}#{digito_conta} #{formata_nosso_numero(pagamento.nosso_numero)}"
162
+ end
163
+
164
+ def monta_segmento_r(pagamento, nro_lote, sequencial)
165
+ segmento_r = '' # CAMPO TAMANHO
166
+ segmento_r += cod_banco # codigo banco 3
167
+ segmento_r << nro_lote.to_s.rjust(4, '0') # lote de servico 4
168
+ segmento_r << '3' # lote de servico 1
169
+ segmento_r << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
170
+ segmento_r << 'R' # cod. segmento 1
171
+ segmento_r << ' ' # uso exclusivo 1
172
+ segmento_r << '01' # cod. movimento remessa 2
173
+ segmento_r << '0' # cod. desconto 2 1
174
+ segmento_r << ''.rjust(8, '0') # data desconto 2 8
175
+ segmento_r << ''.rjust(15, '0') # valor desconto 2 15
176
+ segmento_r << '0' # cod. desconto 3 1
177
+ segmento_r << ''.rjust(8, '0') # data desconto 3 8
178
+ segmento_r << ''.rjust(15, '0') # valor desconto 3 15
179
+ segmento_r << pagamento.codigo_multa # codigo multa 1
180
+ segmento_r << data_multa(pagamento) # data multa 8
181
+ segmento_r << pagamento.formata_percentual_multa(15) # valor multa 15
182
+ segmento_r << ''.rjust(10, ' ') # info pagador 10
183
+ segmento_r << ''.rjust(40, ' ') # mensagem 3 40
184
+ segmento_r << ''.rjust(40, ' ') # mensagem 4 40
185
+ segmento_r << ''.rjust(20, ' ') # Exclusivo FEBRABAN 20
186
+ segmento_r << ''.rjust(8, '0') # Cod. Ocor do Pagador 8
187
+ segmento_r << ''.rjust(3, '0') # Cod. do Banco conta débito 3
188
+ segmento_r << ''.rjust(5, '0') # Cod. da Agencia do débito 5
189
+ segmento_r << ' ' # Cod. verificador da agencia 1
190
+ segmento_r << ''.rjust(12, '0') # Conta corrente para débito 12
191
+ segmento_r << ' ' # Cod. verificador da conta 1
192
+ segmento_r << ' ' # Cod. verificador da Ag/Conta 1
193
+ segmento_r << '0' # Aviso débito automático 1
194
+ segmento_r << ''.rjust(9, ' ') # Uso FEBRABAN 9
195
+ segmento_r
196
+ end
197
+
198
+ def data_multa(pagamento)
199
+ return ''.rjust(8, '0') if pagamento.codigo_multa == '0'
200
+
201
+ pagamento.data_vencimento.strftime('%d%m%Y')
202
+ end
203
+
204
+ # Retorna o nosso numero
205
+ #
206
+ # @return [String]
207
+ #
208
+ # Nosso Número:
209
+ # - Se emissão a cargo do Cedente (vide planilha "Capa" deste arquivo):
210
+ # NumTitulo - 10 posições (1 a 10)
211
+ # Parcela - 02 posições (11 a 12) - "01" se parcela única
212
+ # Modalidade - 02 posições (13 a 14) - vide planilha "Capa" deste arquivo
213
+ # Tipo Formulário - 01 posição (15 a 15):
214
+ # "1" -auto-copiativo
215
+ # "3" -auto-envelopável
216
+ # "4" -A4 sem envelopamento
217
+ # "6" -A4 sem envelopamento 3 vias
218
+ # Em branco - 05 posições (16 a 20)
219
+ def formata_nosso_numero(nosso_numero)
220
+ "#{nosso_numero.to_s.rjust(10, '0')}#{parcela}#{modalidade_carteira}#{tipo_formulario} "
221
+ end
222
+
223
+ def dias_baixa(_pagamento)
224
+ ''.rjust(3, ' ')
225
+ end
226
+ end
227
+ end
228
+ end
229
+ end
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Brcobranca
4
+ module Remessa
5
+ module Cnab240
6
+ class SicoobBancoBrasil < Brcobranca::Remessa::Cnab240::BaseCorrespondente
7
+ attr_accessor :codigo_cobranca
8
+
9
+ validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.'
10
+ validates_length_of :convenio, maximum: 10, message: 'deve ter 10 dígitos.'
11
+ validates_length_of :conta_corrente, maximum: 10, message: 'deve ter 10 dígitos.'
12
+ validates_length_of :codigo_cobranca, maximum: 7, message: 'deve ter 7 dígitos.'
13
+ validates_length_of :sequencial_remessa, maximum: 8, message: 'deve ter 8 dígitos.'
14
+ validates_presence_of :sequencial_remessa, message: 'não pode estar em branco.'
15
+
16
+ def initialize(campos = {})
17
+ campos = {
18
+ emissao_boleto: '2',
19
+ distribuicao_boleto: '2',
20
+ codigo_carteira: '9',
21
+ tipo_documento: '02'
22
+ }.merge!(campos)
23
+ super(campos)
24
+ end
25
+
26
+ def cod_banco
27
+ '756'
28
+ end
29
+
30
+ def digito_conta
31
+ conta_corrente.modulo11(mapeamento: { 10 => 'X' }).to_s
32
+ end
33
+
34
+ def info_conta
35
+ # CAMPO TAMANHO
36
+ # agencia 4
37
+ # codigo cobranca 7
38
+ # conta corrente 11
39
+ "#{agencia.rjust(4, '0')}#{codigo_cobranca.rjust(7, '0')}#{conta_corrente.rjust(10, '0')}#{digito_conta}"
40
+ end
41
+
42
+ def complemento_header
43
+ "#{''.rjust(11, '0')}#{''.rjust(33, ' ')}"
44
+ end
45
+
46
+ def complemento_p(pagamento)
47
+ # CAMPO TAMANHO
48
+ # num. doc. de corbanca 15
49
+ pagamento.nosso_numero.to_s.rjust(15, '0').to_s
50
+ end
51
+
52
+ def codigo_convenio
53
+ # CAMPO TAMANHO
54
+ # num. convenio 20 BRANCOS
55
+ ''.rjust(20, ' ')
56
+ end
57
+
58
+ alias convenio_lote codigo_convenio
59
+
60
+ def totaliza_valor_titulos
61
+ pagamentos.inject(0) { |sum, pag| sum + pag.valor.to_f }
62
+ end
63
+
64
+ def valor_titulos_carteira
65
+ total = format '%.2f', totaliza_valor_titulos
66
+ total.somente_numeros.rjust(17, '0')
67
+ end
68
+
69
+ def complemento_trailer
70
+ ''.rjust(217, ' ')
71
+ end
72
+
73
+ # Monta o registro trailer do arquivo
74
+ #
75
+ # @param nro_lotes [Integer]
76
+ # numero de lotes no arquivo
77
+ # @param sequencial [Integer]
78
+ # numero de registros(linhas) no arquivo
79
+ #
80
+ # @return [String]
81
+ #
82
+ def monta_trailer_arquivo(nro_lotes, _sequencial)
83
+ # CAMPO TAMANHO
84
+ # zeros 7
85
+ # registro trailer lote 1
86
+ # uso FEBRABAN 9
87
+ # nro de lotes 6
88
+ # nro de registros(linhas) 6
89
+ # uso FEBRABAN 211
90
+ "#{''.rjust(7,
91
+ '0')}5#{''.rjust(9,
92
+ ' ')}#{nro_lotes.to_s.rjust(6,
93
+ '0')}#{valor_titulos_carteira}#{''.rjust(6,
94
+ '0')}#{''.rjust(
95
+ 194, ' '
96
+ )}"
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end