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,233 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Remessa
|
5
|
+
module Cnab400
|
6
|
+
class Santander < Brcobranca::Remessa::Cnab400::Base
|
7
|
+
# Código de Transmissão
|
8
|
+
# Consultar seu gerente para pegar esse código. Geralmente está no e-mail enviado pelo banco.
|
9
|
+
attr_accessor :codigo_transmissao
|
10
|
+
|
11
|
+
attr_accessor :codigo_carteira
|
12
|
+
|
13
|
+
validates_presence_of :documento_cedente, :codigo_transmissao, message: 'não pode estar em branco.'
|
14
|
+
validates_presence_of :digito_conta, message: 'não pode estar em branco.', if: :conta_padrao_novo?
|
15
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
16
|
+
validates_length_of :carteira, maximum: 3, message: 'deve ter no máximo 3 dígitos.'
|
17
|
+
validates_length_of :codigo_transmissao, maximum: 20, message: 'deve ter no máximo 20 dígitos.'
|
18
|
+
|
19
|
+
def initialize(campos = {})
|
20
|
+
campos = { aceite: 'N', carteira: '101', codigo_carteira: '1' }.merge!(campos)
|
21
|
+
super(campos)
|
22
|
+
end
|
23
|
+
|
24
|
+
def cod_banco
|
25
|
+
'033'
|
26
|
+
end
|
27
|
+
|
28
|
+
def nome_banco
|
29
|
+
'SANTANDER'.format_size(15)
|
30
|
+
end
|
31
|
+
|
32
|
+
def codigo_transmissao=(valor)
|
33
|
+
@codigo_transmissao = valor.to_s.strip.rjust(20, '0') if valor
|
34
|
+
end
|
35
|
+
|
36
|
+
# Informacoes do Código de Transmissão
|
37
|
+
#
|
38
|
+
# @return [String]
|
39
|
+
#
|
40
|
+
def info_conta
|
41
|
+
# CAMPO TAMANHO
|
42
|
+
# codigo_transmissao 20
|
43
|
+
codigo_transmissao
|
44
|
+
end
|
45
|
+
|
46
|
+
# Zeros do header
|
47
|
+
#
|
48
|
+
# @return [String]
|
49
|
+
#
|
50
|
+
def zeros
|
51
|
+
''.ljust(16, '0')
|
52
|
+
end
|
53
|
+
|
54
|
+
# Complemento do header
|
55
|
+
#
|
56
|
+
# @return [String]
|
57
|
+
#
|
58
|
+
def complemento
|
59
|
+
''.ljust(275, ' ')
|
60
|
+
end
|
61
|
+
|
62
|
+
# Numero da versão da remessa
|
63
|
+
#
|
64
|
+
# @return [String]
|
65
|
+
#
|
66
|
+
def versao
|
67
|
+
'058'
|
68
|
+
end
|
69
|
+
|
70
|
+
def monta_header
|
71
|
+
# CAMPO TAMANHO VALOR
|
72
|
+
# tipo do registro [1] 0
|
73
|
+
# operacao [1] 1
|
74
|
+
# literal remessa [7] REMESSA
|
75
|
+
# Código do serviço [2] 01
|
76
|
+
# cod. servico [15] COBRANCA
|
77
|
+
# info. conta [20]
|
78
|
+
# empresa mae [30]
|
79
|
+
# cod. banco [3]
|
80
|
+
# nome banco [15]
|
81
|
+
# data geracao [6] formato DDMMAA
|
82
|
+
# zeros [16]
|
83
|
+
# complemento registro [275]
|
84
|
+
# versao [3]
|
85
|
+
# num. sequencial [6] 000001
|
86
|
+
"01REMESSA01COBRANCA #{info_conta}#{empresa_mae[0..29].to_s.ljust(30,
|
87
|
+
' ')}#{cod_banco}#{nome_banco}#{data_geracao}#{zeros}#{complemento}#{versao}000001"
|
88
|
+
end
|
89
|
+
|
90
|
+
# Detalhe do arquivo
|
91
|
+
#
|
92
|
+
# @param pagamento [PagamentoCnab400]
|
93
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
94
|
+
# @param sequencial
|
95
|
+
# num. sequencial do registro no arquivo
|
96
|
+
#
|
97
|
+
# @return [String]
|
98
|
+
#
|
99
|
+
def monta_detalhe(pagamento, sequencial)
|
100
|
+
raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
101
|
+
|
102
|
+
detalhe = '1' # identificacao transacao 9[01]
|
103
|
+
detalhe += Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
104
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
105
|
+
detalhe << codigo_transmissao # Código de Transmissão 9[20]
|
106
|
+
detalhe << pagamento.documento_ou_numero.to_s.ljust(25, ' ') # identificacao do tit. na empresa X[25]
|
107
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(8, '0') # nosso numero 9[8]
|
108
|
+
detalhe << pagamento.formata_data_segundo_desconto # data limite para o segundo desconto 9[06]
|
109
|
+
detalhe << ''.rjust(1, ' ') # brancos X[1]
|
110
|
+
detalhe << pagamento.codigo_multa # Com multa = 4, Sem multa = 0 9[1]
|
111
|
+
detalhe << pagamento.formata_percentual_multa # Percentual multa por atraso % 9[6]
|
112
|
+
detalhe << '00' # Unidade de valor moeda corrente = 00 9[2]
|
113
|
+
detalhe << '0'.rjust(13, '0') # Valor do título em outra unidade 9[15]
|
114
|
+
detalhe << ''.rjust(4, ' ') # brancos X[4]
|
115
|
+
detalhe << pagamento.formata_data_multa # Data para cobrança de multa 9[6]
|
116
|
+
|
117
|
+
# codigo da carteira
|
118
|
+
# 1 = ELETRÔNICA COM REGISTRO
|
119
|
+
# 3 = CAUCIONADA ELETRÔNICA
|
120
|
+
# 4 = COBRANÇA SEM REGISTRO
|
121
|
+
# 5 = RÁPIDA COM REGISTRO
|
122
|
+
# (BLOQUETE EMITIDO PELO CLIENTE) 6 = CAUCIONADA RAPIDA
|
123
|
+
# 7 = DESCONTADA ELETRÔNICA
|
124
|
+
detalhe << codigo_carteira # codigo da carteira 9[01]
|
125
|
+
|
126
|
+
# Código da ocorrência:
|
127
|
+
# 01 = ENTRADA DE TÍTULO
|
128
|
+
# 02 = BAIXA DE TÍTULO
|
129
|
+
# 04 = CONCESSÃO DE ABATIMENTO
|
130
|
+
# 05 = CANCELAMENTO ABATIMENTO
|
131
|
+
# 06 = PRORROGAÇÃO DE VENCIMENTO
|
132
|
+
# 07 = ALT. NÚMERO CONT.CEDENTE
|
133
|
+
# 08 = ALTERAÇÃO DO SEU NÚMERO
|
134
|
+
# 09 = PROTESTAR
|
135
|
+
# 18 = SUSTAR PROTESTO
|
136
|
+
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
137
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
138
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
139
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
140
|
+
detalhe << cod_banco # codigo banco 9[03]
|
141
|
+
detalhe << ''.rjust(5, '0') # agencia cobradora - deixar zero 9[05]
|
142
|
+
|
143
|
+
# Espécie de documento:
|
144
|
+
# 01 = DUPLICATA
|
145
|
+
# 02 = NOTA PROMISSÓRIA
|
146
|
+
# 03 = APÓLICE / NOTA DE SEGURO
|
147
|
+
# 05 = RECIBO
|
148
|
+
# 06 = DUPLICATA DE SERVIÇO
|
149
|
+
# 07 = LETRA DE CAMBIO
|
150
|
+
detalhe << pagamento.especie_titulo # Espécie de documento 9[02]
|
151
|
+
detalhe << aceite # aceite (A/N) X[01]
|
152
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
153
|
+
|
154
|
+
# Instrução cobrança
|
155
|
+
# 00 = NÃO HÁ INSTRUÇÕES
|
156
|
+
# 02 = BAIXAR APÓS QUINZE DIAS DO VENCIMENTO
|
157
|
+
# 03 = BAIXAR APÓS 30 DIAS DO VENCIMENTO
|
158
|
+
# 04 = NÃO BAIXAR
|
159
|
+
# 06 = PROTESTAR (VIDE POSIÇÃO392/393)
|
160
|
+
# 07 = NÃO PROTESTAR
|
161
|
+
# 08 = NÃO COBRAR JUROS DE MORA
|
162
|
+
detalhe << pagamento.cod_primeira_instrucao # primeira instrução 9[02]
|
163
|
+
detalhe << pagamento.cod_segunda_instrucao # segunda instrução 9[02]
|
164
|
+
detalhe << pagamento.formata_valor_mora # valor mora ao dia 9[13]
|
165
|
+
detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
|
166
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
167
|
+
detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
|
168
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
|
169
|
+
detalhe << pagamento.identificacao_sacado # identificacao do pagador 9[02]
|
170
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
171
|
+
detalhe << pagamento.nome_sacado.format_size(40) # nome do pagador X[40]
|
172
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # endereco do pagador X[40]
|
173
|
+
detalhe << pagamento.bairro_sacado.format_size(12) # bairro do pagador X[12]
|
174
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
175
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
|
176
|
+
detalhe << pagamento.uf_sacado # uf do pagador X[02]
|
177
|
+
detalhe << pagamento.nome_avalista.format_size(30) # Sacador/Mensagens X[30]
|
178
|
+
detalhe << ''.rjust(1, ' ') # Brancos X[1]
|
179
|
+
detalhe << identificador_movimento_complemento # Identificador do Complemento X[1]
|
180
|
+
detalhe << movimento_complemento # Complemento 9[2]
|
181
|
+
detalhe << ''.rjust(6, ' ') # Brancos X[06]
|
182
|
+
# Se identificacao_ocorrencia = 06
|
183
|
+
detalhe << pagamento.dias_protesto.rjust(2, '0') # Número de dias para protesto 9[02]
|
184
|
+
detalhe << ''.rjust(1, ' ') # Brancos X[1]
|
185
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
186
|
+
detalhe
|
187
|
+
end
|
188
|
+
|
189
|
+
def identificador_movimento_complemento
|
190
|
+
return 'I' if conta_padrao_novo?
|
191
|
+
|
192
|
+
''.rjust(1, ' ')
|
193
|
+
end
|
194
|
+
|
195
|
+
def movimento_complemento
|
196
|
+
return "#{conta_corrente[8]}#{digito_conta}" if conta_padrao_novo?
|
197
|
+
|
198
|
+
''.rjust(2, ' ')
|
199
|
+
end
|
200
|
+
|
201
|
+
def conta_padrao_novo?
|
202
|
+
!conta_corrente.blank? && conta_corrente.length > 8
|
203
|
+
end
|
204
|
+
|
205
|
+
# Valor total de todos os títulos
|
206
|
+
#
|
207
|
+
# @return [String]
|
208
|
+
#
|
209
|
+
def total_titulos
|
210
|
+
total = format '%.2f', pagamentos.sum(&:valor)
|
211
|
+
total.to_s.somente_numeros.rjust(13, '0')
|
212
|
+
end
|
213
|
+
|
214
|
+
# Trailer do arquivo remessa
|
215
|
+
#
|
216
|
+
# @param sequencial
|
217
|
+
# num. sequencial do registro no arquivo
|
218
|
+
#
|
219
|
+
# @return [String]
|
220
|
+
#
|
221
|
+
def monta_trailer(sequencial)
|
222
|
+
# CAMPO TAMANHO VALOR
|
223
|
+
# código registro [1] 9
|
224
|
+
# quant. documentos [6]
|
225
|
+
# valor total titulos [13]
|
226
|
+
# zeros [374] 0
|
227
|
+
# num. sequencial [6]
|
228
|
+
"9#{sequencial.to_s.rjust(6, '0')}#{total_titulos}#{''.rjust(374, '0')}#{sequencial.to_s.rjust(6, '0')}"
|
229
|
+
end
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
@@ -0,0 +1,305 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Brcobranca
|
4
|
+
module Remessa
|
5
|
+
module Cnab400
|
6
|
+
class Sicoob < Brcobranca::Remessa::Cnab400::Base
|
7
|
+
# convenio do cedente
|
8
|
+
attr_accessor :convenio
|
9
|
+
|
10
|
+
attr_accessor :modalidade_carteira, :distribuicao_boleto, :tipo_formulario
|
11
|
+
# identificacao da emissao do boleto (attr na classe base)
|
12
|
+
# opcoes:
|
13
|
+
# ‘1’ = Banco Emite
|
14
|
+
# ‘2’ = Cliente Emite
|
15
|
+
#
|
16
|
+
# identificacao da distribuicao do boleto (attr na classe base)
|
17
|
+
# opcoes:
|
18
|
+
# ‘1’ = Banco distribui
|
19
|
+
# ‘2’ = Cliente distribui
|
20
|
+
# Tipo Formulário - 01 posição (15 a 15):
|
21
|
+
# "1" -auto-copiativo
|
22
|
+
# "3" -auto-envelopável
|
23
|
+
# "4" -A4 sem envelopamento
|
24
|
+
# "6" -A4 sem envelopamento 3 vias
|
25
|
+
|
26
|
+
# convenio do cedente
|
27
|
+
attr_accessor :convenio
|
28
|
+
|
29
|
+
validates_presence_of :agencia, :conta_corrente, :carteira, :convenio, :modalidade_carteira, :tipo_formulario,
|
30
|
+
:digito_conta, :sequencial_remessa, :documento_cedente, message: 'não pode estar em branco.'
|
31
|
+
# Remessa 400 - 8 digitos
|
32
|
+
# Remessa 240 - 12 digitos
|
33
|
+
validates_length_of :conta_corrente, is: 8, message: 'deve ter 8 dígitos.'
|
34
|
+
validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.'
|
35
|
+
validates_length_of :modalidade_carteira, is: 1, message: 'deve ter 1 dígitos.'
|
36
|
+
validates_length_of :digito_conta, maximum: 1, message: 'deve ter 1 dígito.'
|
37
|
+
validates_length_of :sequencial_remessa, maximum: 7, message: 'deve ter 7 dígitos.'
|
38
|
+
validates_length_of :carteira, is: 2, message: 'deve ter 2 dígitos.'
|
39
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
40
|
+
|
41
|
+
# Com DV
|
42
|
+
validates_length_of :convenio, is: 9, message: 'deve ter 9 dígitos.'
|
43
|
+
|
44
|
+
def initialize(campos = {})
|
45
|
+
campos = {
|
46
|
+
distribuicao_boleto: '2',
|
47
|
+
tipo_formulario: '4',
|
48
|
+
modalidade_carteira: '2',
|
49
|
+
sequencial_remessa: '0000001',
|
50
|
+
carteira: '01'
|
51
|
+
}.merge!(campos)
|
52
|
+
super(campos)
|
53
|
+
end
|
54
|
+
|
55
|
+
def cod_banco
|
56
|
+
'756'
|
57
|
+
end
|
58
|
+
|
59
|
+
def nome_banco
|
60
|
+
'BANCOOBCED'.format_size(15)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Informacoes do Código de Transmissão
|
64
|
+
#
|
65
|
+
# @return [String]
|
66
|
+
#
|
67
|
+
def info_conta
|
68
|
+
# CAMPO TAMANHO
|
69
|
+
# 030 004 9(004) Prefixo da Cooperativa: vide planilha "Capa" deste arquivo
|
70
|
+
# 031 001 A(001) Dígito Verificador do Prefixo: vide planilha "Capa" deste arquivo
|
71
|
+
# 039 008 9(008) Código do Cliente/Beneficiário: vide planilha "Capa" deste arquivo
|
72
|
+
# 040 001 A(001) Dígito Verificador do Código: vide planilha "Capa" deste arquivo
|
73
|
+
# 046 006 9(006) Número do convênio líder: Brancos
|
74
|
+
"#{agencia}#{digito_agencia}#{convenio} "
|
75
|
+
end
|
76
|
+
|
77
|
+
def digito_agencia
|
78
|
+
# utilizando a agencia com 4 digitos
|
79
|
+
# para calcular o digito
|
80
|
+
agencia.modulo11(mapeamento: { 10 => '0' }).to_s
|
81
|
+
end
|
82
|
+
|
83
|
+
# Complemento do header
|
84
|
+
#
|
85
|
+
# @return [String]
|
86
|
+
#
|
87
|
+
def complemento
|
88
|
+
''.rjust(287, ' ')
|
89
|
+
end
|
90
|
+
|
91
|
+
# Header do arquivo remessa
|
92
|
+
#
|
93
|
+
# @return [String]
|
94
|
+
#
|
95
|
+
def monta_header
|
96
|
+
# CAMPO TAMANHO VALOR
|
97
|
+
# 001 001 9(001) Identificação do Registro Header: “0” (zero)
|
98
|
+
# 002 001 9(001) Tipo de Operação: “1” (um)
|
99
|
+
# 009 007 A(007) Identificação por Extenso do Tipo de Operação: "REMESSA"
|
100
|
+
# 011 002 9(002) Identificação do Tipo de Serviço: “01” (um)
|
101
|
+
# 019 008 A(008) Identificação por Extenso do Tipo de Serviço: “COBRANÇA”
|
102
|
+
# 026 007 A(007) Complemento do Registro: Brancos
|
103
|
+
# 030 004 9(004) Prefixo da Cooperativa: vide planilha "Capa" deste arquivo
|
104
|
+
# 031 001 A(001) Dígito Verificador do Prefixo: vide planilha "Capa" deste arquivo
|
105
|
+
# 039 008 9(008) Código do Cliente/Beneficiário: vide planilha "Capa" deste arquivo
|
106
|
+
# 040 001 A(001) Dígito Verificador do Código: vide planilha "Capa" deste arquivo
|
107
|
+
# 046 006 9(006) Número do convênio líder: Brancos
|
108
|
+
# 076 030 A(030) Nome do Beneficiário: vide planilha "Capa" deste arquivo
|
109
|
+
# 094 018 A(018) Identificação do Banco: "756BANCOOBCED"
|
110
|
+
# 100 006 9(006) Data da Gravação da Remessa: formato ddmmaa
|
111
|
+
# 107 007 9(007) Seqüencial da Remessa: número seqüencial acrescido de 1 a cada remessa. Inicia com "0000001"
|
112
|
+
# 394 287 A(287) Complemento do Registro: Brancos
|
113
|
+
# 400 006 9(006) Seqüencial do Registro:”000001”
|
114
|
+
|
115
|
+
"01REMESSA01COBRANCA #{info_conta}#{empresa_mae.format_size(30)}#{cod_banco}#{nome_banco}#{data_geracao}#{sequencial_remessa}#{complemento}000001"
|
116
|
+
end
|
117
|
+
|
118
|
+
# Detalhe do arquivo
|
119
|
+
#
|
120
|
+
# @param pagamento [PagamentoCnab400]
|
121
|
+
# objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)
|
122
|
+
# @param sequencial
|
123
|
+
# num. sequencial do registro no arquivo
|
124
|
+
#
|
125
|
+
# @return [String]
|
126
|
+
#
|
127
|
+
def monta_detalhe(pagamento, sequencial)
|
128
|
+
raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?
|
129
|
+
|
130
|
+
detalhe = '1' # identificacao transacao 9[01]
|
131
|
+
detalhe += Brcobranca::Util::Empresa.new(documento_cedente).tipo # tipo de identificacao da empresa 9[02]
|
132
|
+
detalhe << documento_cedente.to_s.rjust(14, '0') # cpf/cnpj da empresa 9[14]
|
133
|
+
detalhe << agencia # Prefixo da Cooperativa 9[4]
|
134
|
+
detalhe << digito_agencia # Digito da Cooperativa 9[1]
|
135
|
+
detalhe << conta_corrente # Conta corrente 9[8]
|
136
|
+
detalhe << digito_conta # Digito da conta corrente 9[1]
|
137
|
+
detalhe << '000000' # Convênio de Cobrança do Beneficiário: "000000" 9[6]
|
138
|
+
detalhe << ''.rjust(25, ' ') # Número de Controle do Participante: Brancos X[25]
|
139
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(12, '0') # nosso numero com DV 9[12]
|
140
|
+
detalhe << pagamento.parcela.to_s.rjust(2, '0') # Número da Parcela: "01" se parcela única 9[02]
|
141
|
+
detalhe << '00' # Grupo de Valor: "00" 9[02]
|
142
|
+
detalhe << ' ' # Complemento do Registro: Brancos X[03]
|
143
|
+
|
144
|
+
# "Indicativo de Mensagem ou Sacador/Avalista:
|
145
|
+
# Brancos: Poderá ser informada nas posições 352 a 391 (SEQ 50) qualquer mensagem para ser impressa no boleto;
|
146
|
+
# “A”: Deverá ser informado nas posições 352 a 391 (SEQ 50) o nome e CPF/CNPJ do sacador"
|
147
|
+
detalhe << ' ' # X[01]
|
148
|
+
detalhe << ' ' # Prefixo do Título: Brancos X[03]
|
149
|
+
detalhe << '000' # Variação da Carteira: "000" 9[03]
|
150
|
+
detalhe << '0' # Conta Caução: "0" 9[01]
|
151
|
+
|
152
|
+
# "Número do Contrato Garantia:
|
153
|
+
# Para Carteira 1 preencher ""00000"";
|
154
|
+
# Para Carteira 3 preencher com o número do contrato sem DV."
|
155
|
+
detalhe << '00000' # Número do Contrato Garantia 9[05]
|
156
|
+
detalhe << '0' # DV do contrato 9[01]
|
157
|
+
detalhe << '000000' # Numero do borderô: preencher em caso de carteira 3 9[06]
|
158
|
+
detalhe << ' ' # Complemento do Registro: Brancos X[04]
|
159
|
+
|
160
|
+
# "Tipo de Emissão:
|
161
|
+
# 1 - Cooperativa
|
162
|
+
# 2 - Cliente"
|
163
|
+
detalhe << modalidade_carteira # Tipo de Emissão 9[01]
|
164
|
+
|
165
|
+
# "Carteira/Modalidade:
|
166
|
+
# 01 = Simples Com Registro
|
167
|
+
# 02 = Simples Sem Registro
|
168
|
+
# 03 = Garantida Caucionada "
|
169
|
+
detalhe << carteira # codigo da carteira 9[02]
|
170
|
+
|
171
|
+
# "Comando/Movimento:
|
172
|
+
# 01 = Registro de Títulos
|
173
|
+
# 02 = Solicitação de Baixa
|
174
|
+
# 04 = Concessão de Abatimento
|
175
|
+
# 05 = Cancelamento de Abatimento
|
176
|
+
# 06 = Alteração de Vencimento
|
177
|
+
# 08 = Alteração de Seu Número
|
178
|
+
# 09 = Instrução para Protestar
|
179
|
+
# 10 = Instrução para Sustar Protesto
|
180
|
+
# 11 = Instrução para Dispensar Juros
|
181
|
+
# 12 = Alteração de Pagador
|
182
|
+
# 31 = Alteração de Outros Dados
|
183
|
+
# 34 = Baixa - Pagamento Direto ao Beneficiário
|
184
|
+
|
185
|
+
detalhe << pagamento.identificacao_ocorrencia # identificacao ocorrencia 9[02]
|
186
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # numero do documento X[10]
|
187
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # data do vencimento 9[06]
|
188
|
+
detalhe << pagamento.formata_valor # valor do documento 9[13]
|
189
|
+
detalhe << cod_banco # codigo banco 9[03]
|
190
|
+
detalhe << agencia # Prefixo da Cooperativa 9[4]
|
191
|
+
detalhe << digito_agencia # Digito da Cooperativa 9[1]
|
192
|
+
|
193
|
+
# "Espécie do Título :
|
194
|
+
# 01 = Duplicata Mercantil
|
195
|
+
# 02 = Nota Promissória
|
196
|
+
# 03 = Nota de Seguro
|
197
|
+
# 05 = Recibo
|
198
|
+
# 06 = Duplicata Rural
|
199
|
+
# 08 = Letra de Câmbio
|
200
|
+
# 09 = Warrant
|
201
|
+
# 10 = Cheque
|
202
|
+
# 12 = Duplicata de Serviço
|
203
|
+
# 13 = Nota de Débito
|
204
|
+
# 14 = Triplicata Mercantil
|
205
|
+
# 15 = Triplicata de Serviço
|
206
|
+
# 18 = Fatura
|
207
|
+
# 20 = Apólice de Seguro
|
208
|
+
# 21 = Mensalidade Escolar
|
209
|
+
# 22 = Parcela de Consórcio
|
210
|
+
# 99 = Outros"
|
211
|
+
detalhe << pagamento.especie_titulo # Espécie de documento 9[02]
|
212
|
+
detalhe << '0' # aceite (A=1/N=0) X[01]
|
213
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # data de emissao 9[06]
|
214
|
+
|
215
|
+
# "Primeira instrução codificada:
|
216
|
+
# Regras de impressão de mensagens nos boletos:
|
217
|
+
# * Primeira instrução (SEQ 34) = 00 e segunda (SEQ 35) = 00, não imprime nada.
|
218
|
+
# * Primeira instrução (SEQ 34) = 01 e segunda (SEQ 35) = 01, desconsidera-se as instruções CNAB e imprime as mensagens relatadas no trailler do arquivo.
|
219
|
+
# * Primeira e segunda instrução diferente das situações acima, imprimimos o conteúdo CNAB:
|
220
|
+
# 00 = AUSENCIA DE INSTRUCOES
|
221
|
+
# 01 = COBRAR JUROS
|
222
|
+
# 03 = PROTESTAR 3 DIAS UTEIS APOS VENCIMENTO
|
223
|
+
# 04 = PROTESTAR 4 DIAS UTEIS APOS VENCIMENTO
|
224
|
+
# 05 = PROTESTAR 5 DIAS UTEIS APOS VENCIMENTO
|
225
|
+
# 07 = NAO PROTESTAR
|
226
|
+
# 10 = PROTESTAR 10 DIAS UTEIS APOS VENCIMENTO
|
227
|
+
# 15 = PROTESTAR 15 DIAS UTEIS APOS VENCIMENTO
|
228
|
+
# 20 = PROTESTAR 20 DIAS UTEIS APOS VENCIMENTO
|
229
|
+
# 22 = CONCEDER DESCONTO SO ATE DATA ESTIPULADA
|
230
|
+
# 42 = DEVOLVER APOS 15 DIAS VENCIDO
|
231
|
+
# 43 = DEVOLVER APOS 30 DIAS VENCIDO"
|
232
|
+
detalhe << '00' # Instrução para o título 9[02]
|
233
|
+
detalhe << '00' # Número de dias válidos para instrução 9[02]
|
234
|
+
detalhe << pagamento.formata_valor_mora(6) # valor mora ao dia 9[06]
|
235
|
+
detalhe << pagamento.formata_valor_multa(6) # taxa de multa 9[06]
|
236
|
+
detalhe << distribuicao_boleto # indentificacao entrega 9[01]
|
237
|
+
detalhe << pagamento.formata_data_desconto # data limite para desconto 9[06]
|
238
|
+
detalhe << pagamento.formata_valor_desconto # valor do desconto 9[13]
|
239
|
+
|
240
|
+
# "193-193 – Código da moeda
|
241
|
+
# 194-205 – Valor IOF / Quantidade Monetária: ""000000000000""
|
242
|
+
# Se o código da moeda for REAL, o valor restante representa o IOF.
|
243
|
+
# Se o código da moeda for diferente de REAL, o valor restante será a quantidade monetária.
|
244
|
+
detalhe << pagamento.formata_valor_iof # valor do iof 9[13]
|
245
|
+
detalhe << pagamento.formata_valor_abatimento # valor do abatimento 9[13]
|
246
|
+
detalhe << pagamento.identificacao_sacado.rjust(2, '0') # identificacao do pagador 9[02]
|
247
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # documento do pagador 9[14]
|
248
|
+
detalhe << pagamento.nome_sacado.format_size(40).ljust(40, ' ') # nome do pagador X[40]
|
249
|
+
detalhe << pagamento.endereco_sacado.format_size(37).ljust(37, ' ') # endereco do pagador X[37]
|
250
|
+
detalhe << pagamento.bairro_sacado.format_size(15).ljust(15, ' ') # bairro do pagador X[15]
|
251
|
+
detalhe << pagamento.cep_sacado # cep do pagador 9[08]
|
252
|
+
detalhe << pagamento.cidade_sacado.format_size(15) # cidade do pagador X[15]
|
253
|
+
detalhe << pagamento.uf_sacado # uf do pagador X[02]
|
254
|
+
|
255
|
+
# "Observações/Mensagem ou Sacador/Avalista:
|
256
|
+
# Quando o SEQ 14 – Indicativo de Mensagem ou Sacador/Avalista - for preenchido com Brancos,
|
257
|
+
# as informações constantes desse campo serão impressas no campo “texto de responsabilidade da Empresa”,
|
258
|
+
# no Recibo do Sacado e na Ficha de Compensação do boleto de cobrança.
|
259
|
+
# Quando o SEQ 14 – Indicativo de Mensagem ou Sacador/Avalista - for preenchido com “A” ,
|
260
|
+
# este campo deverá ser preenchido com o nome/razão social do Sacador/Avalista"
|
261
|
+
detalhe << ''.rjust(40, ' ') # X[40]
|
262
|
+
|
263
|
+
# "Número de Dias Para Protesto:
|
264
|
+
# Quantidade dias para envio protesto. Se = ""0"",
|
265
|
+
# utilizar dias protesto padrão do cliente cadastrado na cooperativa. "
|
266
|
+
detalhe << '00' # Número de Dias Para Protesto x[02]
|
267
|
+
detalhe << ' ' # Brancos X[1]
|
268
|
+
detalhe << sequencial.to_s.rjust(6, '0') # numero do registro no arquivo 9[06]
|
269
|
+
detalhe
|
270
|
+
end
|
271
|
+
|
272
|
+
# Trailer do arquivo remessa
|
273
|
+
#
|
274
|
+
# @param sequencial
|
275
|
+
# num. sequencial do registro no arquivo
|
276
|
+
#
|
277
|
+
# @return [String]
|
278
|
+
#
|
279
|
+
def monta_trailer(sequencial)
|
280
|
+
# CAMPO TAMANHO VALOR
|
281
|
+
# 1 001 001 001 9(01) Identificação Registro Trailler: "9"
|
282
|
+
# 2 002 194 193 X(193) Complemento do Registro: Brancos
|
283
|
+
# 3 195 234 040 X(40) "Mensagem responsabilidade Beneficiário:
|
284
|
+
# Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
|
285
|
+
# Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
|
286
|
+
# 4 235 274 040 X(40) "Mensagem responsabilidade Beneficiário:
|
287
|
+
# Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
|
288
|
+
# Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
|
289
|
+
# 5 275 314 040 X(40) "Mensagem responsabilidade Beneficiário:
|
290
|
+
# Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
|
291
|
+
# Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
|
292
|
+
# 6 315 354 040 X(40) "Mensagem responsabilidade Beneficiário:
|
293
|
+
# Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
|
294
|
+
# Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
|
295
|
+
# 7 355 394 040 X(40) "Mensagem responsabilidade Beneficiário:
|
296
|
+
# Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
|
297
|
+
# Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
|
298
|
+
# 8 395 400 006 9(06) Seqüencial do Registro: Incrementado em 1 a cada registro
|
299
|
+
|
300
|
+
"9#{''.rjust(393, '0')}#{sequencial.to_s.rjust(6, '0')}"
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
module Brcobranca
|
2
|
+
module Remessa
|
3
|
+
module Cnab400
|
4
|
+
class Sicredi < Brcobranca::Remessa::Cnab400::Base
|
5
|
+
attr_accessor :codigo_beneficiario, :numero_sicredi
|
6
|
+
|
7
|
+
validates_presence_of :documento_cedente, :codigo_beneficiario, :sequencial_remessa
|
8
|
+
validates_length_of :documento_cedente, minimum: 11, maximum: 14, message: 'deve ter entre 11 e 14 dígitos.'
|
9
|
+
|
10
|
+
def initialize(campos = {})
|
11
|
+
campos = { aceite: 'N', codigo_beneficiario: '12345' }.merge!(campos)
|
12
|
+
super(campos)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Código do banco Sicredi
|
16
|
+
def cod_banco
|
17
|
+
'748'
|
18
|
+
end
|
19
|
+
|
20
|
+
# Nome do banco Sicredi
|
21
|
+
def nome_banco
|
22
|
+
'SICREDI'.ljust(15)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Informações da conta
|
26
|
+
def info_conta
|
27
|
+
codigo_beneficiario.to_s.rjust(5, '0')
|
28
|
+
end
|
29
|
+
|
30
|
+
# Data de geração do arquivo no formato AAAAMMDD
|
31
|
+
def data_geracao
|
32
|
+
Date.current.strftime('%Y%m%d')
|
33
|
+
end
|
34
|
+
|
35
|
+
# Header do arquivo de remessa
|
36
|
+
def monta_header
|
37
|
+
header = ''
|
38
|
+
header << '0' # Identificação do Registro (0)
|
39
|
+
header << '1' # Identificação do Arquivo (1)
|
40
|
+
header << 'REMESSA' # Literal Remessa
|
41
|
+
header << '01' # Código do serviço de cobrança (1)
|
42
|
+
header << 'COBRANCA' # Literal Cobrança
|
43
|
+
header << ''.ljust(7, ' ') # Filler
|
44
|
+
header << codigo_beneficiario.to_s.rjust(5, '0') # Código do beneficiário/cedente
|
45
|
+
header << documento_cedente.to_s.rjust(14, '0') # CPF/CNPJ do beneficiário/cedente
|
46
|
+
header << ''.ljust(31, ' ') # Filler
|
47
|
+
header << '748' # Número do Sicredi
|
48
|
+
header << 'SICREDI'.ljust(15) # Literal Sicredi
|
49
|
+
header << Date.current.strftime('%Y%m%d') # Data de geração do arquivo (AAAAMMDD)
|
50
|
+
header << ''.ljust(8, ' ') # Filler
|
51
|
+
header << sequencial_remessa.to_s.rjust(7, '0') # Número da remessa
|
52
|
+
header << ''.ljust(273, ' ') # Filler
|
53
|
+
header << '2.00000001'
|
54
|
+
header
|
55
|
+
end
|
56
|
+
|
57
|
+
# Detalhe do arquivo de remessa
|
58
|
+
def monta_detalhe(pagamento, sequencial)
|
59
|
+
detalhe = '1' # Identificação do registro detalhe
|
60
|
+
detalhe << 'A' # Código da carteira
|
61
|
+
detalhe << 'A' # Tipo de cobrança com registro
|
62
|
+
detalhe << 'A' # Impressão realizada pelo beneficiário
|
63
|
+
detalhe << ''.rjust(12, ' ') # Filler
|
64
|
+
detalhe << 'A' # Impressão realizada pelo beneficiário
|
65
|
+
detalhe << 'B' # Impressão realizada pelo beneficiário
|
66
|
+
detalhe << 'B' # Impressão realizada pelo beneficiário
|
67
|
+
detalhe << ''.rjust(28, ' ') # Filler
|
68
|
+
detalhe << pagamento.nosso_numero.to_s.rjust(9, '0') # Nosso número
|
69
|
+
detalhe << ''.rjust(6, ' ') # Filler
|
70
|
+
detalhe << pagamento.data_emissao.strftime('%Y%m%d') # Data de emissão
|
71
|
+
detalhe << ''.rjust(1, ' ') # Filler
|
72
|
+
detalhe << 'N' # Impressão realizada pelo beneficiário
|
73
|
+
detalhe << ''.rjust(1, ' ') # Filler
|
74
|
+
detalhe << 'B' # Impressão realizada pelo beneficiário
|
75
|
+
detalhe << ''.rjust(8, ' ') # Filler
|
76
|
+
detalhe << '00000000000200' # Impressão realizada pelo beneficiário
|
77
|
+
detalhe << ''.rjust(12, ' ') # Filler
|
78
|
+
detalhe << pagamento.cod_primeira_instrucao.to_s.rjust(2, '0') # Instrução de protesto
|
79
|
+
detalhe << pagamento.numero.to_s.rjust(10, '0') # Valor do título
|
80
|
+
detalhe << pagamento.data_vencimento.strftime('%d%m%y') # Data de vencimento
|
81
|
+
detalhe << pagamento.formata_valor # Valor do título
|
82
|
+
detalhe << ''.rjust(9, ' ') # Filler
|
83
|
+
detalhe << 'J' # Impressão realizada pelo beneficiário
|
84
|
+
detalhe << 'N' # Impressão realizada pelo beneficiário
|
85
|
+
detalhe << pagamento.data_emissao.strftime('%d%m%y') # Data de emissão
|
86
|
+
detalhe << '00' # Impressão realizada pelo beneficiário
|
87
|
+
detalhe << '00' # Impressão realizada pelo beneficiário
|
88
|
+
detalhe << pagamento.formata_valor_mora.to_s.rjust(13, '0') # Valor dos juros por dia de atraso
|
89
|
+
detalhe << '000000' # Impressão realizada pelo beneficiário
|
90
|
+
detalhe << pagamento.formata_valor_desconto.to_s.rjust(13, '0') # Valor do desconto
|
91
|
+
detalhe << ''.rjust(13, '0') # Filler
|
92
|
+
detalhe << pagamento.formata_valor_abatimento(13) # Valor do desconto
|
93
|
+
identificacao = pagamento.identificacao_sacado.to_s.sub(/^0+/, '') # Remove zeros à esquerda
|
94
|
+
detalhe << identificacao # Espécie do título
|
95
|
+
detalhe << '0' # Filler
|
96
|
+
detalhe << pagamento.documento_sacado.to_s.rjust(14, '0') # CPF/CNPJ do sacado
|
97
|
+
detalhe << pagamento.nome_sacado.format_size(40) # Nome do sacado
|
98
|
+
detalhe << pagamento.endereco_sacado.format_size(40) # Endereço do sacado
|
99
|
+
detalhe << ''.rjust(5, '0') # Filler
|
100
|
+
detalhe << ''.rjust(6, '0') # Filler
|
101
|
+
detalhe << ''.rjust(1, ' ') # Filler
|
102
|
+
detalhe << pagamento.cep_sacado # CEP do sacado
|
103
|
+
detalhe << ''.rjust(5, '0') # Filler
|
104
|
+
detalhe << ''.rjust(14, ' ') # CPF/CNPJ do sacado
|
105
|
+
detalhe << ''.rjust(41, ' ') # Filler
|
106
|
+
detalhe << sequencial.to_s.rjust(6, '0') # Número sequencial do registro
|
107
|
+
detalhe
|
108
|
+
end
|
109
|
+
|
110
|
+
# Trailer do arquivo de remessa
|
111
|
+
def monta_trailer(sequencial)
|
112
|
+
"91748#{info_conta}#{''.rjust(384, ' ')}#{sequencial.to_s.rjust(6, '0')}"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|