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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE +20 -0
- data/README.md +91 -0
- data/Rakefile +8 -0
- data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
- data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil.eps +5402 -0
- data/lib/brcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/banestes.eps +5198 -0
- data/lib/brcobranca/arquivos/logos/banestes_carne.eps +5206 -0
- data/lib/brcobranca/arquivos/logos/banrisul.eps +121 -0
- data/lib/brcobranca/arquivos/logos/banrisul_carne.eps +121 -0
- data/lib/brcobranca/arquivos/logos/bradesco.eps +5210 -0
- data/lib/brcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
- data/lib/brcobranca/arquivos/logos/caixa.eps +5111 -0
- data/lib/brcobranca/arquivos/logos/caixa_carne.eps +5115 -0
- data/lib/brcobranca/arquivos/logos/cecred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/cecred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/citibank.eps +745 -0
- data/lib/brcobranca/arquivos/logos/citibank_carne.eps +745 -0
- data/lib/brcobranca/arquivos/logos/credisis.eps +0 -0
- data/lib/brcobranca/arquivos/logos/credisis_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.eps +5124 -0
- data/lib/brcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
- data/lib/brcobranca/arquivos/logos/itau.eps +5318 -0
- data/lib/brcobranca/arquivos/logos/itau_carne.eps +5322 -0
- data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
- data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/santander.eps +5305 -0
- data/lib/brcobranca/arquivos/logos/santander_carne.eps +5313 -0
- data/lib/brcobranca/arquivos/logos/sicoob.eps +5375 -0
- data/lib/brcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi.eps +5379 -0
- data/lib/brcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
- data/lib/brcobranca/arquivos/logos/unicred.eps +0 -0
- data/lib/brcobranca/arquivos/logos/unicred_carne.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_carne.eps +1112 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico2.eps +9967 -0
- data/lib/brcobranca/boleto/ailos.rb +89 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +165 -0
- data/lib/brcobranca/boleto/banco_brasilia.rb +102 -0
- data/lib/brcobranca/boleto/banco_nordeste.rb +80 -0
- data/lib/brcobranca/boleto/banestes.rb +86 -0
- data/lib/brcobranca/boleto/banrisul.rb +95 -0
- data/lib/brcobranca/boleto/base.rb +256 -0
- data/lib/brcobranca/boleto/bradesco.rb +100 -0
- data/lib/brcobranca/boleto/caixa.rb +123 -0
- data/lib/brcobranca/boleto/citibank.rb +97 -0
- data/lib/brcobranca/boleto/credisis.rb +118 -0
- data/lib/brcobranca/boleto/hsbc.rb +96 -0
- data/lib/brcobranca/boleto/itau.rb +138 -0
- data/lib/brcobranca/boleto/safra.rb +152 -0
- data/lib/brcobranca/boleto/santander.rb +86 -0
- data/lib/brcobranca/boleto/sicoob.rb +120 -0
- data/lib/brcobranca/boleto/sicredi.rb +145 -0
- data/lib/brcobranca/boleto/template/base.rb +28 -0
- data/lib/brcobranca/boleto/template/rghost.rb +308 -0
- data/lib/brcobranca/boleto/template/rghost2.rb +264 -0
- data/lib/brcobranca/boleto/template/rghost_bolepix.rb +286 -0
- data/lib/brcobranca/boleto/template/rghost_carne.rb +319 -0
- data/lib/brcobranca/boleto/unicred.rb +99 -0
- data/lib/brcobranca/calculo.rb +120 -0
- data/lib/brcobranca/calculo_data.rb +63 -0
- data/lib/brcobranca/currency.rb +69 -0
- data/lib/brcobranca/formatacao.rb +104 -0
- data/lib/brcobranca/formatacao_string.rb +37 -0
- data/lib/brcobranca/limpeza.rb +20 -0
- data/lib/brcobranca/remessa/base.rb +72 -0
- data/lib/brcobranca/remessa/cnab240/ailos.rb +156 -0
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +249 -0
- data/lib/brcobranca/remessa/cnab240/base.rb +529 -0
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +307 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +171 -0
- data/lib/brcobranca/remessa/cnab240/santander.rb +225 -0
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +229 -0
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +101 -0
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +183 -0
- data/lib/brcobranca/remessa/cnab240/unicred.rb +10 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +169 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +167 -0
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +161 -0
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +158 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +132 -0
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +155 -0
- data/lib/brcobranca/remessa/cnab400/citibank.rb +139 -0
- data/lib/brcobranca/remessa/cnab400/credisis.rb +130 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +162 -0
- data/lib/brcobranca/remessa/cnab400/santander.rb +233 -0
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +305 -0
- data/lib/brcobranca/remessa/cnab400/sicredi.rb +117 -0
- data/lib/brcobranca/remessa/cnab400/unicred.rb +259 -0
- data/lib/brcobranca/remessa/pagamento.rb +320 -0
- data/lib/brcobranca/retorno/base.rb +11 -0
- data/lib/brcobranca/retorno/cnab240/ailos.rb +104 -0
- data/lib/brcobranca/retorno/cnab240/base.rb +41 -0
- data/lib/brcobranca/retorno/cnab240/caixa.rb +47 -0
- data/lib/brcobranca/retorno/cnab240/santander.rb +99 -0
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +101 -0
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +82 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +130 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +90 -0
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +113 -0
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +53 -0
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +124 -0
- data/lib/brcobranca/retorno/cnab400/credisis.rb +116 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +144 -0
- data/lib/brcobranca/retorno/cnab400/santander.rb +58 -0
- data/lib/brcobranca/retorno/cnab400/sicredi.rb +78 -0
- data/lib/brcobranca/retorno/cnab400/unicred.rb +123 -0
- data/lib/brcobranca/retorno/retorno_cbr643.rb +48 -0
- data/lib/brcobranca/retorno/retorno_cnab240.rb +99 -0
- data/lib/brcobranca/retorno/retorno_cnab400.rb +71 -0
- data/lib/brcobranca/util/date.rb +21 -0
- data/lib/brcobranca/util/empresa.rb +29 -0
- data/lib/brcobranca/util/errors.rb +76 -0
- data/lib/brcobranca/validations.rb +208 -0
- data/lib/brcobranca/version.rb +5 -0
- data/lib/brcobranca.rb +200 -0
- 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
|