Class: Brcobranca::Remessa::Cnab400::Sicoob

Inherits:
Base
  • Object
show all
Defined in:
lib/brcobranca/remessa/cnab400/sicoob.rb

Instance Attribute Summary collapse

Attributes inherited from Base

#aceite, #agencia, #carteira, #conta_corrente, #digito_conta, #documento_cedente, #empresa_mae, #pagamentos, #sequencial_remessa

Instance Method Summary collapse

Methods inherited from Base

#data_geracao, #gera_arquivo

Methods inherited from Base

#quantidade_titulos_cobranca, #totaliza_valor_titulos, #valor_titulos_carteira

Methods included from Validations

#errors, included, #invalid?, #valid?

Constructor Details

#initialize(campos = {}) ⇒ Sicoob

Returns a new instance of Sicoob.


47
48
49
50
51
52
53
54
55
56
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 47

def initialize(campos = {})
  campos = {
    distribuicao_boleto: '2',
    tipo_formulario: '4',
    modalidade_carteira: '2',
    sequencial_remessa: '0000001',
    carteira: '01'
  }.merge!(campos)
  super(campos)
end

Instance Attribute Details

#convenioObject

convenio do cedente


8
9
10
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 8

def convenio
  @convenio
end

#distribuicao_boletoObject

identificacao da emissao do boleto (attr na classe base)

opcoes:
  ‘1’ = Banco Emite
  ‘2’ = Cliente Emite

16
17
18
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 16

def distribuicao_boleto
  @distribuicao_boleto
end

#modalidade_carteiraObject

Returns the value of attribute modalidade_carteira


10
11
12
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 10

def modalidade_carteira
  @modalidade_carteira
end

#tipo_formularioObject

identificacao da distribuicao do boleto (attr na classe base)

opcoes:
  ‘1’ = Banco distribui
  ‘2’ = Cliente distribui

23
24
25
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 23

def tipo_formulario
  @tipo_formulario
end

Instance Method Details

#cod_bancoObject


58
59
60
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 58

def cod_banco
  '756'
end

#complementoString

Complemento do header

Returns:

  • (String)

90
91
92
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 90

def complemento
  ''.rjust(287, ' ')
end

#digito_agenciaObject


80
81
82
83
84
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 80

def digito_agencia
  # utilizando a agencia com 4 digitos
  # para calcular o digito
  agencia.modulo11(mapeamento: { 10 => '0' }).to_s
end

#info_contaString

Informacoes do Código de Transmissão

Returns:

  • (String)

70
71
72
73
74
75
76
77
78
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 70

def info_conta
  # CAMPO                     TAMANHO
  # 030   004 9(004) Prefixo da Cooperativa: vide planilha "Capa" deste arquivo
  # 031   001 A(001) Dígito Verificador do Prefixo: vide planilha "Capa" deste arquivo
  # 039   008 9(008) Código do Cliente/Beneficiário: vide planilha "Capa" deste arquivo
  # 040   001 A(001) Dígito Verificador do Código: vide planilha "Capa" deste arquivo
  # 046   006 9(006) Número do convênio líder: Brancos
  "#{agencia}#{digito_agencia}#{convenio}      "
end

#monta_detalhe(pagamento, sequencial) ⇒ String

Detalhe do arquivo

Parameters:

  • pagamento (PagamentoCnab400)

    objeto contendo as informacoes referentes ao boleto (valor, vencimento, cliente)

  • sequencial

    num. sequencial do registro no arquivo

Returns:

  • (String)

Raises:


130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 130

def monta_detalhe(pagamento, sequencial)
  raise Brcobranca::RemessaInvalida, pagamento if pagamento.invalid?

  detalhe = '1'                                                     # identificacao transacao               9[01]
  detalhe << Brcobranca::Util::Empresa.new(documento_cedente).tipo  # tipo de identificacao da empresa      9[02]
  detalhe << documento_cedente.to_s.rjust(14, '0')                  # cpf/cnpj da empresa                   9[14]
  detalhe << agencia                                                # Prefixo da Cooperativa                9[4]
  detalhe << digito_agencia                                         # Digito da Cooperativa                 9[1]
  detalhe << conta_corrente                                         # Conta corrente                        9[8]
  detalhe << digito_conta                                           # Digito da conta corrente              9[1]
  detalhe << '000000'                                               # Convênio de Cobrança do Beneficiário: "000000"      9[6]
  detalhe << ''.rjust(25, ' ')                                      # Número de Controle do Participante: Brancos      X[25]
  detalhe << pagamento.nosso_numero.to_s.rjust(12, '0')             # nosso numero com DV                   9[12]
  detalhe << pagamento.parcela.to_s.rjust(2, '0')                   # Número da Parcela: "01" se parcela única   9[02]
  detalhe << '00'                                                   # Grupo de Valor: "00"                  9[02]
  detalhe << '   '                                                  # Complemento do Registro: Brancos      X[03]

  # "Indicativo de Mensagem ou Sacador/Avalista:
  # Brancos: Poderá ser informada nas posições 352 a 391 (SEQ 50) qualquer mensagem para ser impressa no boleto;
  # “A”: Deverá ser informado nas posições 352 a 391 (SEQ 50) o nome e CPF/CNPJ do sacador"
  detalhe << ' '                                                    #      X[01]
  detalhe << '   '                                                  # Prefixo do Título: Brancos            X[03]
  detalhe << '000'                                                  # Variação da Carteira: "000"           9[03]
  detalhe << '0'                                                    # Conta Caução: "0"                     9[01]

  # "Número do Contrato Garantia:
  # Para Carteira 1 preencher ""00000"";
  # Para Carteira 3 preencher com o  número do contrato sem DV."
  detalhe << '00000'                                                # Número do Contrato Garantia           9[05]
  detalhe << '0'                                                    # DV do contrato                        9[01]
  detalhe << '000000'                                               # Numero do borderô: preencher em caso de carteira 3           9[06]
  detalhe << '    '                                                 # Complemento do Registro: Brancos      X[04]

  # "Tipo de Emissão:
  # 1 - Cooperativa
  # 2 - Cliente"
  detalhe << modalidade_carteira # Tipo de Emissão                       9[01]

  # "Carteira/Modalidade:
  # 01 = Simples Com Registro
  # 02 = Simples Sem Registro
  # 03 = Garantida Caucionada "
  detalhe << carteira # codigo da carteira                    9[02]

  # "Comando/Movimento:
  # 01 = Registro de Títulos
  # 02 = Solicitação de Baixa
  # 04 = Concessão de Abatimento
  # 05 = Cancelamento de Abatimento
  # 06 = Alteração de Vencimento
  # 08 = Alteração de Seu Número
  # 09 = Instrução para Protestar
  # 10 = Instrução para Sustar Protesto
  # 11 = Instrução para Dispensar Juros
  # 12 = Alteração de Pagador
  # 31 = Alteração de Outros Dados
  # 34 = Baixa - Pagamento Direto ao Beneficiário

  detalhe << pagamento.identificacao_ocorrencia                     # identificacao ocorrencia              9[02]
  detalhe << pagamento.numero.to_s.rjust(10, '0')         # numero do documento                   X[10]
  detalhe << pagamento.data_vencimento.strftime('%d%m%y')           # data do vencimento                    9[06]
  detalhe << pagamento.formata_valor                                # valor do documento                    9[13]
  detalhe << cod_banco                                              # codigo banco                          9[03]
  detalhe << agencia                                                # Prefixo da Cooperativa                9[4]
  detalhe << digito_agencia                                         # Digito da Cooperativa                 9[1]

  # "Espécie do Título :
  # 01 = Duplicata Mercantil
  # 02 = Nota Promissória
  # 03 = Nota de Seguro
  # 05 = Recibo
  # 06 = Duplicata Rural
  # 08 = Letra de Câmbio
  # 09 = Warrant
  # 10 = Cheque
  # 12 = Duplicata de Serviço
  # 13 = Nota de Débito
  # 14 = Triplicata Mercantil
  # 15 = Triplicata de Serviço
  # 18 = Fatura
  # 20 = Apólice de Seguro
  # 21 = Mensalidade Escolar
  # 22 = Parcela de Consórcio
  # 99 = Outros"
  detalhe << pagamento.especie_titulo                               # Espécie de documento                  9[02]
  detalhe << '0'                                                    # aceite (A=1/N=0)                      X[01]
  detalhe << pagamento.data_emissao.strftime('%d%m%y')              # data de emissao                       9[06]

  # "Primeira instrução codificada:
  # Regras de impressão de mensagens nos boletos:
  # * Primeira instrução (SEQ 34) = 00 e segunda (SEQ 35) = 00, não imprime nada.
  # * 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.
  # * Primeira e segunda instrução diferente das situações acima, imprimimos o conteúdo CNAB:
  # 00 = AUSENCIA DE INSTRUCOES
  # 01 = COBRAR JUROS
  # 03 = PROTESTAR 3 DIAS UTEIS APOS VENCIMENTO
  # 04 = PROTESTAR 4 DIAS UTEIS APOS VENCIMENTO
  # 05 = PROTESTAR 5 DIAS UTEIS APOS VENCIMENTO
  # 07 = NAO PROTESTAR
  # 10 = PROTESTAR 10 DIAS UTEIS APOS VENCIMENTO
  # 15 = PROTESTAR 15 DIAS UTEIS APOS VENCIMENTO
  # 20 = PROTESTAR 20 DIAS UTEIS APOS VENCIMENTO
  # 22 = CONCEDER DESCONTO SO ATE DATA ESTIPULADA
  # 42 = DEVOLVER APOS 15 DIAS VENCIDO
  # 43 = DEVOLVER APOS 30 DIAS VENCIDO"
  detalhe << '00'                                                   # Instrução para o título               9[02]
  detalhe << '00'                                                   # Número de dias válidos para instrução 9[02]
  detalhe << pagamento.formata_valor_mora(6)                        # valor mora ao dia                     9[06]
  detalhe << pagamento.formata_valor_multa(6)                       # taxa de multa                         9[06]
  detalhe << distribuicao_boleto                                    # indentificacao entrega                9[01]
  detalhe << pagamento.formata_data_desconto                        # data limite para desconto             9[06]
  detalhe << pagamento.formata_valor_desconto                       # valor do desconto                     9[13]

  # "193-193 – Código da moeda
  # 194-205 – Valor IOF / Quantidade Monetária: ""000000000000""
  # Se o código da moeda for REAL, o valor restante representa o IOF.
  # Se o código da moeda for diferente de REAL, o valor restante será a quantidade monetária.
  detalhe << pagamento.formata_valor_iof                            # valor do iof                          9[13]
  detalhe << pagamento.formata_valor_abatimento                     # valor do abatimento                   9[13]
  detalhe << pagamento.identificacao_sacado.rjust(2, '0')           # identificacao do pagador              9[02]
  detalhe << pagamento.documento_sacado.to_s.rjust(14, '0')         # documento do pagador                  9[14]
  detalhe << pagamento.nome_sacado.format_size(40).ljust(40, ' ')   # nome do pagador                       X[40]
  detalhe << pagamento.endereco_sacado.format_size(37).ljust(37, ' ') # endereco do pagador                  X[37]
  detalhe << pagamento.bairro_sacado.format_size(15).ljust(15, ' ') # bairro do pagador                     X[15]
  detalhe << pagamento.cep_sacado                                   # cep do pagador                        9[08]
  detalhe << pagamento.cidade_sacado.format_size(15)                # cidade do pagador                     X[15]
  detalhe << pagamento.uf_sacado                                    # uf do pagador                         X[02]

  # "Observações/Mensagem ou Sacador/Avalista:
  # Quando o SEQ 14 – Indicativo de Mensagem ou Sacador/Avalista - for preenchido com Brancos,
  # as informações constantes desse campo serão impressas no campo “texto de responsabilidade da Empresa”,
  # no Recibo do Sacado e na Ficha de Compensação do boleto de cobrança.
  # Quando o SEQ 14 – Indicativo de Mensagem ou Sacador/Avalista - for preenchido com “A” ,
  # este campo deverá ser preenchido com o nome/razão social do Sacador/Avalista"
  detalhe << ''.rjust(40, ' ') #                                       X[40]

  # "Número de Dias Para Protesto:
  # Quantidade dias para envio protesto. Se = ""0"",
  # utilizar dias protesto padrão do cliente cadastrado na cooperativa. "
  detalhe << '00'                                                   # Número de Dias Para Protesto          x[02]
  detalhe << ' '                                                    # Brancos                               X[1]
  detalhe << sequencial.to_s.rjust(6, '0')                          # numero do registro no arquivo         9[06]
  detalhe
end

#monta_headerString

Header do arquivo remessa

Returns:

  • (String)

98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 98

def monta_header
  # CAMPO TAMANHO    VALOR
  # 001   001 9(001) Identificação do Registro Header: “0” (zero)
  # 002   001 9(001) Tipo de Operação: “1” (um)
  # 009   007 A(007) Identificação por Extenso do Tipo de Operação: "REMESSA"
  # 011   002 9(002) Identificação do Tipo de Serviço: “01” (um)
  # 019   008 A(008) Identificação por Extenso do Tipo de Serviço: “COBRANÇA”
  # 026   007 A(007) Complemento do Registro: Brancos
  # 030   004 9(004) Prefixo da Cooperativa: vide planilha "Capa" deste arquivo
  # 031   001 A(001) Dígito Verificador do Prefixo: vide planilha "Capa" deste arquivo
  # 039   008 9(008) Código do Cliente/Beneficiário: vide planilha "Capa" deste arquivo
  # 040   001 A(001) Dígito Verificador do Código: vide planilha "Capa" deste arquivo
  # 046   006 9(006) Número do convênio líder: Brancos
  # 076   030 A(030) Nome do Beneficiário: vide planilha "Capa" deste arquivo
  # 094   018 A(018) Identificação do Banco: "756BANCOOBCED"
  # 100   006 9(006) Data da Gravação da Remessa: formato ddmmaa
  # 107   007 9(007) Seqüencial da Remessa: número seqüencial acrescido de 1 a cada remessa. Inicia com "0000001"
  # 394   287 A(287) Complemento do Registro: Brancos
  # 400   006 9(006) Seqüencial do Registro:”000001”

  "01REMESSA01COBRANCA       #{info_conta}#{empresa_mae.format_size(30)}#{cod_banco}#{nome_banco}#{data_geracao}#{sequencial_remessa}#{complemento}000001"
end

#monta_trailer(sequencial) ⇒ String

Trailer do arquivo remessa

Parameters:

  • sequencial

    num. sequencial do registro no arquivo

Returns:

  • (String)

282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 282

def monta_trailer(sequencial)
  # CAMPO   TAMANHO  VALOR
  # 1 001 001 001 9(01) Identificação Registro Trailler: "9"
  # 2 002 194 193 X(193) Complemento do Registro: Brancos
  # 3 195 234 040 X(40) "Mensagem responsabilidade Beneficiário:
  #   Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
  #   Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
  # 4 235 274 040 X(40) "Mensagem responsabilidade Beneficiário:
  #   Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
  #   Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
  # 5 275 314 040 X(40) "Mensagem responsabilidade Beneficiário:
  #   Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
  #   Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
  # 6 315 354 040 X(40) "Mensagem responsabilidade Beneficiário:
  #   Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
  #   Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
  # 7 355 394 040 X(40) "Mensagem responsabilidade Beneficiário:
  #   Quando o SEQ 34 = ""01"" e o SEQ 35 = ""01"", preencher com mensagens/intruções de responsabilidade do Beneficiário
  #   Quando o SEQ 34 e SEQ 35 forem preenchidos com valores diferentes destes, preencher com Brancos"
  # 8 395 400 006 9(06) Seqüencial do Registro: Incrementado em 1 a cada registro

  "9#{''.rjust(393, '0')}#{sequencial.to_s.rjust(6, '0')}"
end

#nome_bancoObject


62
63
64
# File 'lib/brcobranca/remessa/cnab400/sicoob.rb', line 62

def nome_banco
  'BANCOOBCED'.format_size(15)
end