Class: BrBoleto::Remessa::Cnab400::Sicoob

Inherits:
Base show all
Defined in:
lib/br_boleto/remessa/cnab400/sicoob.rb

Instance Attribute Summary

Attributes inherited from Base

#data_hora_arquivo, #sequencial_remessa

Instance Method Summary collapse

Methods inherited from Base

#dados_do_arquivo, #informacoes_do_banco

Methods included from Helper::Trailer

#monta_trailer, #trailer_arquivo_posicao_001_a_001, #trailer_arquivo_posicao_002_a_394, #trailer_arquivo_posicao_394_a_400

Methods included from Helper::Detalhe

#detalhe_posicao_001_001, #detalhe_posicao_002_003, #detalhe_posicao_004_017, #detalhe_posicao_018_037, #detalhe_posicao_038_062, #detalhe_posicao_063_076, #detalhe_posicao_109_110, #detalhe_posicao_111_120, #detalhe_posicao_121_160, #detalhe_posicao_161_218, #detalhe_posicao_219_394, #detalhe_posicao_395_400, #monta_detalhe

Methods included from Helper::Header

#header_posicao_001_a_001, #header_posicao_002_a_002, #header_posicao_003_a_009, #header_posicao_010_a_011, #header_posicao_012_a_026, #header_posicao_027_a_046, #header_posicao_047_a_076, #header_posicao_077_a_094, #header_posicao_095_a_100, #header_posicao_101_a_394, #header_posicao_395_a_400, #monta_header

Methods inherited from Base

#data_geracao, #hora_geracao, #pagamento_valid_cod_desconto_length, #pagamento_valid_distribuicao_boleto_length, #pagamento_valid_emissao_boleto_length, #pagamento_valid_tipo_impressao_required, #persisted?

Methods included from HaveConta

#conta, #conta=

Methods inherited from ActiveModelBase

#assign_attributes, #default_values, #initialize

Constructor Details

This class inherits a constructor from BrBoleto::ActiveModelBase

Instance Method Details

#complemento_registroObject

Complemento do registro Posição: 101 até 394 Tamanho total: 294



39
40
41
42
43
44
# File 'lib/br_boleto/remessa/cnab400/sicoob.rb', line 39

def complemento_registro
  # Posição   TAM.    Descrição
  # 101 107   007   Seqüencial da Remessa: número seqüencial acrescido de 1 a cada remessa. Inicia com "0000001"
  # 108 394   287   Complemento do Registro: Brancos
  "#{sequencial_remessa}".rjust(7, '0').adjust_size_to(294)
end

#conta_classObject



6
7
8
# File 'lib/br_boleto/remessa/cnab400/sicoob.rb', line 6

def conta_class
  BrBoleto::Conta::Sicoob
end

#dados_do_pagamento(pagamento) ⇒ Object

Nosso numero do pagamento e outras informações Posição: 063 até 076 Tamanho: 14



49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/br_boleto/remessa/cnab400/sicoob.rb', line 49

def dados_do_pagamento(pagamento)
  # 063  074  012  9(12)  "Nosso Número:
  #                       - Para comando 01 com emissão a cargo do Sicoob (vide e-mail enviado com os dados do processo de homologação e lista de comandos seq. 23): Preencher com zeros
  #                       - Para comando 01 com emissão a cargo do Beneficiário ou para os demais comandos (vide e-mail enviado com os dados do processo de homologação e lista de comandos seq. 23): 
  #                       Preencher da seguinte forma:
  #                       - Posição 063 a 073 – Número seqüencial a partir de ""0000000001"", não sendo admitida reutilização ou duplicidade.
  #                       - Posição 074 a 074 – DV do Nosso-Número, calculado pelo módulo 11."
  # 075  076  002  9(02)  Número da Parcela: "01" se parcela única
  dados =  "#{pagamento.nosso_numero}".adjust_size_to(12, '0', :right)
  dados << "#{pagamento.parcela}".adjust_size_to(2, '0', :right)
  dados
end

#detalhe_multas_e_juros_do_pagamento(pagamento, sequencial) ⇒ Object

Informações referente aos juros e multas do pagamento Posição: 161 a 218 Tamanho: 58



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
# File 'lib/br_boleto/remessa/cnab400/sicoob.rb', line 164

def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
  detalhe = ''
  
  # 161  166  006  9(02)  "Taxa de mora mês  Ex: 022000 = 2,20%)"
  detalhe << pagamento.percentual_juros_formatado(6)

  # 167  172  006  9(02)  "Taxa de multa Ex: 022000 = 2,20%)"
  detalhe << pagamento.percentual_multa_formatado(6)
  
  # 173  173  001  9(01)  "Tipo Distribuição: 1 – Cooperativa 2 - Cliente"
  detalhe << "#{pagamento.tipo_emissao}".adjust_size_to(1)
  
  # 174  179  006  9(06)  "Data primeiro desconto:
  #                          Informar a data limite a ser observada pelo cliente para o pagamento 
  #                          do título com Desconto no formato ddmmaa.
  #                          Preencher com zeros quando não for concedido nenhum desconto.
  #                          Obs: A data limite não poderá ser superior a data de vencimento do título."
  detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0')
  
  # 180  192  013  9(11)V99  "Valor primeiro desconto:
  #                              Informar o valor do desconto, com duas casa decimais.
  #                              Preencher com zeros quando não for concedido nenhum desconto."
  detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right)
  
  # 193  205  013  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.codigo_moeda}".adjust_size_to(1,'9')
  detalhe << (pagamento.moeda_real? ? ''.ljust(12 ,'0') : pagamento.valor_iof_formatado(12))
  
  # 206  218  013  9(11)V99 Valor Abatimento
  detalhe << "#{pagamento.valor_abatimento_formatado}".adjust_size_to(13,'0', :right)

  detalhe
end

#detalhe_posicao_077_108(pagamento, sequencial) ⇒ Object

Informações diferenciadas para cada banco Posição: 077 até 108 Tamanho: 32



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/br_boleto/remessa/cnab400/sicoob.rb', line 65

def detalhe_posicao_077_108(pagamento, sequencial)
  dados = ''
  dados << '00'               # 077  078  002  9(02)  Grupo de Valor: "00"
  
  dados << ''.rjust(3, ' ')   # 079  081  003  X(03)  Complemento do Registro: Brancos
  dados << ' '                # 082  082  001  X(01)  "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"
  dados << ''.rjust(3, ' ')   # 083  085  003  X(03)  Prefixo do Título: Brancos
  dados << '000'              # 086  088  003  9(03)  Variação da Carteira: "000"
  dados << '0'                # 089  089  001  9(01)  Conta Caução: "0"
  
  dados << ''.rjust(5, '0')   # 090  094  005  9(05)  "Número do Contrato Garantia: Para Carteira 1 preencher ""00000""; Para Carteira 3 preencher com o  número do contrato sem DV."
  dados << '0'                # 095  095  001  X(01)  "DV do contrato:  Para Carteira 1 preencher ""0""; Para Carteira 3 preencher com o Dígito Verificador."
  
  dados << ''.rjust(6, '0')   # 096  101  006  9(06)  Numero do borderô: preencher em caso de carteira 3
  dados << ''.rjust(4, ' ')   # 102  105  004  X(04)  Complemento do Registro: Brancos
  
  dados << "#{pagamento.tipo_emissao}".adjust_size_to(1) # 106  106  001  9(01)  "Tipo de Emissão: 1-Cooperativa 2-Cliente"
  dados << "#{conta.modalidade}".adjust_size_to(2, '0', :right)   # 107  108  002  9(02)  "Carteira/Modalidade: 01 = Simples Com Registro 02 = Simples Sem Registro 03 = Garantida Caucionada "
  dados
end

#informacoes_da_conta(local) ⇒ Object

Informações da conta <- Específico para cada banco Posição: 027 até 046 Tipo: Numérico Tamanho: 020



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/br_boleto/remessa/cnab400/sicoob.rb', line 14

def informacoes_da_conta(local)
  #  POSIÇÂO  TAM.  Descrição
  # 027  030  004  Prefixo da Cooperativa: vide planilha "Capa" deste arquivo
  # 031  031  001  Dígito Verificador do Prefixo: vide planilha "Capa" deste arquivo
  # 032  039  008  Código do Cliente/Beneficiário: vide planilha "Capa" deste arquivo
  # 040  040  001  Dígito Verificador do Código: vide planilha "Capa" deste arquivo
  # 041  046  006  Número do convênio líder: Brancos
  info =  "#{conta.agencia}".adjust_size_to(4, '0')
  info << "#{conta.agencia_dv}".adjust_size_to(1,'0')
  info << "#{conta.codigo_cedente}".adjust_size_to(8,'0', :right)
  info << "#{conta.codigo_cedente_dv}".adjust_size_to(1,'0')

  # A unica diferença entre o header e o delathe é que no
  # header é preenchido com valores em branco, e no
  # detalhe é preenchido com 0(zero)
  conv = if local == :detalhe then '0' else ' ' end
  info << ''.rjust(6, conv)

  info.adjust_size_to(20)
end

#informacoes_do_pagamento(pagamento, sequencial) ⇒ Object

Informações referente ao pagamento Posição 121 até 160 Tamanho: 40



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
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
# File 'lib/br_boleto/remessa/cnab400/sicoob.rb', line 91

def informacoes_do_pagamento(pagamento, sequencial)
  dados = ''
  #  POSIÇÂO   TAM. TIPO
  # 121  126  006  A(06)  "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
  dados << pagamento.data_vencimento_formatado('%d%m%y')

  # 127  139  013  9(11)  Valor do Titulo 
  dados << pagamento.valor_documento_formatado(13)

  # 140  142  003  9(03)  Número Banco: "756"
  dados << conta.codigo_banco

  # 143  146  004  9(04)  Prefixo da Cooperativa: vide e-mail enviado com os dados do processo de homologação
  dados << "#{conta.agencia}".adjust_size_to(4,'0', :right)
  
  # 147  147  001  X(01)  Dígito Verificador do Prefixo: vide e-mail enviado com os dados do processo de homologação
  dados << "#{conta.agencia_dv}".adjust_size_to(1, '0')

  # 148  149  002  9(02)  
  # "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"
  dados << "#{pagamento.especie_titulo}".adjust_size_to(2, '0', :right)
  
  # 150  150  001  X(01)  "Aceite do Título:  "0" = Sem aceite "1" = Com aceite"
  dados << "#{pagamento.aceite ? '1' : '0'}".adjust_size_to(1, '0')

  # 151  156  006  9(06)  Data de Emissão do Título: formato ddmmaa
  dados << pagamento.data_emissao_formatado('%d%m%y')

  # 157  158  002  9(02)  "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"
  dados << '00'

  # 159  160  002  9(02)  Segunda instrução: vide SEQ 33
  dados << '00'

  dados
end

#informacoes_do_sacado(pagamento, sequencial) ⇒ Object

Informações referente aos dados do sacado/pagador Posição: 219 a 394 Tamanho: 176



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
# File 'lib/br_boleto/remessa/cnab400/sicoob.rb', line 204

def informacoes_do_sacado(pagamento, sequencial)
  info = ''
  # 219  220  002  9(01)  "Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
  info << "#{pagamento.pagador.tipo_cpf_cnpj}".adjust_size_to(2, '0', :right)
  
  # 221  234  014  9(14)  Número do CNPJ ou CPF do Pagador
  info << "#{pagamento.pagador.cpf_cnpj}".adjust_size_to(14, '0', :right)
  
  # 235  274  040  A(40)  Nome do Pagador
  info << "#{pagamento.pagador.nome}".adjust_size_to(40)

  # 275  311  037  A(37)  Endereço do Pagador
  info << "#{pagamento.pagador.endereco}".adjust_size_to(37)

  # 312  326  015  X(15)  Bairro do Pagador
  info << "#{pagamento.pagador.bairro}".adjust_size_to(15)

  # 327  334  008  9(08)  CEP do Pagador
  info << "#{pagamento.pagador.cep}".adjust_size_to(8, '0')

  # 335  349  015  A(15)  Cidade do Pagador
  info << "#{pagamento.pagador.cidade}".adjust_size_to(15)

  # 350  351  002  A(02)  UF do Pagador
  info << "#{pagamento.pagador.uf}".adjust_size_to(2)
  
  # 352  391  040  X(40)  "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
  info << "#{pagamento.pagador.nome_avalista}".adjust_size_to(40)

  # 392  393  002  X(02)  "Número de Dias Para Protesto: Quantidade dias para envio protesto. Se = "0", utilizar dias protesto padrão do cliente cadastrado na cooperativa
  info << "00"

  # 394  395  001  X(01)  Complemento do Registro: Brancos
  info << " "

  info
end