br_boleto 1.2.2 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +1 -1
- data/README.markdown +278 -98
- data/br_boleto.gemspec +5 -3
- data/lib/br_boleto/active_model_base.rb +1 -1
- data/lib/br_boleto/association/have_conta.rb +109 -0
- data/lib/br_boleto/association/have_pagador.rb +38 -0
- data/lib/br_boleto/association/have_pagamentos.rb +44 -0
- data/lib/br_boleto/boleto/base.rb +50 -379
- data/lib/br_boleto/boleto/caixa.rb +28 -143
- data/lib/br_boleto/boleto/sicoob.rb +24 -144
- data/lib/br_boleto/conta/base.rb +288 -0
- data/lib/br_boleto/conta/caixa.rb +109 -0
- data/lib/br_boleto/conta/sicoob.rb +64 -0
- data/lib/br_boleto/helper/default_codes.rb +33 -0
- data/lib/br_boleto/helper/format_value.rb +1 -0
- data/lib/br_boleto/helper/number.rb +30 -0
- data/lib/br_boleto/pagador.rb +82 -0
- data/lib/br_boleto/remessa/base.rb +28 -50
- data/lib/br_boleto/remessa/cnab240/base.rb +22 -131
- data/lib/br_boleto/remessa/cnab240/caixa.rb +16 -62
- data/lib/br_boleto/remessa/cnab240/helper/header_arquivo.rb +7 -7
- data/lib/br_boleto/remessa/cnab240/helper/header_lote.rb +6 -6
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +22 -22
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +16 -16
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/trailer_arquivo.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/helper/trailer_lote.rb +3 -3
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +36 -73
- data/lib/br_boleto/remessa/cnab400/base.rb +95 -0
- data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +136 -0
- data/lib/br_boleto/remessa/cnab400/helper/header.rb +114 -0
- data/lib/br_boleto/remessa/cnab400/helper/trailer.rb +50 -0
- data/lib/br_boleto/remessa/cnab400/sicoob.rb +249 -0
- data/lib/br_boleto/remessa/lote.rb +1 -23
- data/lib/br_boleto/remessa/pagamento.rb +188 -51
- data/lib/br_boleto/retorno/base.rb +9 -0
- data/lib/br_boleto/retorno/cnab240/base.rb +2 -10
- data/lib/br_boleto/retorno/cnab400/base.rb +48 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +42 -0
- data/lib/br_boleto/retorno/pagamento.rb +12 -6
- data/lib/br_boleto/string_methods.rb +8 -2
- data/lib/br_boleto/validations.rb +19 -0
- data/lib/br_boleto/version.rb +3 -3
- data/lib/br_boleto.rb +38 -8
- data/lib/config/locales/br-boleto-en.yml +89 -0
- data/lib/config/locales/br-boleto-pt-BR.yml +89 -0
- data/test/br_boleto/association/have_conta_test.rb +319 -0
- data/test/br_boleto/association/have_pagador_test.rb +110 -0
- data/test/br_boleto/association/have_pagamentos_test.rb +113 -0
- data/test/br_boleto/boleto/base_test.rb +127 -201
- data/test/br_boleto/boleto/caixa_test.rb +58 -72
- data/test/br_boleto/boleto/sicoob_test.rb +88 -147
- data/test/br_boleto/conta/base_test.rb +490 -0
- data/test/br_boleto/conta/caixa_test.rb +154 -0
- data/test/br_boleto/conta/sicoob_test.rb +144 -0
- data/test/br_boleto/helper/number_test.rb +29 -0
- data/test/br_boleto/pagador_test.rb +158 -0
- data/test/br_boleto/remessa/base_test.rb +37 -62
- data/test/br_boleto/remessa/cnab240/base_test.rb +75 -95
- data/test/br_boleto/remessa/cnab240/caixa_test.rb +61 -96
- data/test/br_boleto/remessa/cnab240/helper/header_arquivo_test.rb +11 -11
- data/test/br_boleto/remessa/cnab240/helper/header_lote_test.rb +8 -8
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +17 -15
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +13 -13
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +2 -2
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +3 -3
- data/test/br_boleto/remessa/cnab240/helper/trailer_arquivo_test.rb +1 -1
- data/test/br_boleto/remessa/cnab240/helper/trailer_lote_test.rb +1 -1
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +136 -131
- data/test/br_boleto/remessa/cnab400/base_test.rb +263 -0
- data/test/br_boleto/remessa/cnab400/sicoob_test.rb +179 -0
- data/test/br_boleto/remessa/lote_test.rb +2 -41
- data/test/br_boleto/remessa/pagamento_test.rb +186 -188
- data/test/br_boleto/retorno/base_test.rb +0 -1
- data/test/br_boleto/retorno/cnab240/base_test.rb +12 -11
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +11 -11
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +11 -11
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +227 -0
- data/test/br_boleto/retorno/pagamento_test.rb +6 -6
- data/test/factories/boleto/base.rb +9 -7
- data/test/factories/boleto/boleto_caixa.rb +2 -9
- data/test/factories/boleto/boleto_sicoob.rb +10 -8
- data/test/factories/conta/base.rb +10 -0
- data/test/factories/conta/caixa.rb +15 -0
- data/test/factories/conta/sicoob.rb +16 -0
- data/test/factories/pagador.rb +15 -0
- data/test/factories/remessa/base.rb +0 -6
- data/test/factories/remessa/cnab240/base.rb +0 -10
- data/test/factories/remessa/cnab240/caixa.rb +1 -6
- data/test/factories/remessa/cnab240/sicoob.rb +1 -10
- data/test/factories/remessa/cnab400/base.rb +8 -0
- data/test/factories/remessa/cnab400/sicoob.rb +8 -0
- data/test/factories/remessa/pagamento.rb +8 -7
- data/test/fixtures/remessa/cnab240/sicoob.rem +8 -0
- data/test/{files → fixtures}/retorno/cnab240/caixa.ret +0 -0
- data/test/{files → fixtures}/retorno/cnab240/padrao240.ret +0 -0
- data/test/fixtures/retorno/cnab400/sicoob.ret +7 -0
- data/test/inheritance/boleto_test.rb +4 -1
- data/test/inheritance/sicoob_test.rb +23 -7
- data/test/test_helper.rb +70 -0
- metadata +63 -6
@@ -0,0 +1,114 @@
|
|
1
|
+
module BrBoleto
|
2
|
+
module Remessa
|
3
|
+
module Cnab400
|
4
|
+
module Helper
|
5
|
+
module Header
|
6
|
+
# Monta o registro header do arquivo
|
7
|
+
#
|
8
|
+
# @return [String]
|
9
|
+
#
|
10
|
+
def monta_header
|
11
|
+
header = '' # TAMANHO INFORMAÇÃO
|
12
|
+
header << header_posicao_001_a_001 # 001 Código do registro
|
13
|
+
header << header_posicao_002_a_002 # 001 Código da remessa
|
14
|
+
header << header_posicao_003_a_009 # 007 Literal de transmissão
|
15
|
+
header << header_posicao_010_a_011 # 002 Código do serviço
|
16
|
+
header << header_posicao_012_a_026 # 015 Literal de serviço
|
17
|
+
header << header_posicao_027_a_046 # 020 Informações da conta <- Específico para cada banco
|
18
|
+
header << header_posicao_047_a_076 # 030 Nome do cedente
|
19
|
+
header << header_posicao_077_a_094 # 018 Informações do banco
|
20
|
+
header << header_posicao_095_a_100 # 006 Data de Gravação
|
21
|
+
header << header_posicao_101_a_394 # 294 Complemento do registro
|
22
|
+
header << header_posicao_395_a_400 # 006 Número sequencial do registro no arquivo
|
23
|
+
header.upcase
|
24
|
+
end
|
25
|
+
|
26
|
+
# Código do registro
|
27
|
+
# Padrão: 0
|
28
|
+
# Tipo: Numérico
|
29
|
+
# Tamanho: 001
|
30
|
+
def header_posicao_001_a_001
|
31
|
+
'0'
|
32
|
+
end
|
33
|
+
|
34
|
+
# Código da remessa
|
35
|
+
# Padrão: 1
|
36
|
+
# Tipo: Numérico
|
37
|
+
# Tamanho: 001
|
38
|
+
def header_posicao_002_a_002
|
39
|
+
'0'
|
40
|
+
end
|
41
|
+
|
42
|
+
# Literal de transmissão
|
43
|
+
# Padrão: REMESSA
|
44
|
+
# Tipo: Caracteres
|
45
|
+
# Tamanho: 007
|
46
|
+
def header_posicao_003_a_009
|
47
|
+
'REMESSA'
|
48
|
+
end
|
49
|
+
|
50
|
+
# Código do serviço
|
51
|
+
# Padrão: 01
|
52
|
+
# Tipo: Numérico
|
53
|
+
# Tamanho: 002
|
54
|
+
def header_posicao_010_a_011
|
55
|
+
'01'
|
56
|
+
end
|
57
|
+
|
58
|
+
# Literal de serviço
|
59
|
+
# Padrão: COBRANÇA
|
60
|
+
# Tipo: Caracteres
|
61
|
+
# Tamanho: 015
|
62
|
+
def header_posicao_012_a_026
|
63
|
+
'COBRANÇA'.ljust(15, ' ')
|
64
|
+
end
|
65
|
+
|
66
|
+
# Informações da conta <- Específico para cada banco
|
67
|
+
# Tipo: Numérico
|
68
|
+
# Tamanho: 020
|
69
|
+
def header_posicao_027_a_046
|
70
|
+
informacoes_da_conta(:header)
|
71
|
+
end
|
72
|
+
|
73
|
+
# Nome do cedente
|
74
|
+
# Tipo: Caracteres
|
75
|
+
# Tamanho: 030
|
76
|
+
def header_posicao_047_a_076
|
77
|
+
"#{conta.razao_social}".adjust_size_to(30)
|
78
|
+
end
|
79
|
+
|
80
|
+
# Informações do banco
|
81
|
+
# Padrão:
|
82
|
+
# 077 a 079 = Código do banco com 3 posições
|
83
|
+
# 080 a 094 = Nome do banco com 15 posições
|
84
|
+
# Tamanho: 018
|
85
|
+
def header_posicao_077_a_094
|
86
|
+
informacoes_do_banco
|
87
|
+
end
|
88
|
+
|
89
|
+
# Data de Gravação
|
90
|
+
# Tipo: Numérico
|
91
|
+
# Tamanho: 006
|
92
|
+
def header_posicao_095_a_100
|
93
|
+
data_geracao('%d%m%y')
|
94
|
+
end
|
95
|
+
|
96
|
+
# Complemento do registro
|
97
|
+
# Vai na posição 101 até 394
|
98
|
+
# Tamanho: 294
|
99
|
+
def header_posicao_101_a_394
|
100
|
+
complemento_registro
|
101
|
+
end
|
102
|
+
|
103
|
+
# Número sequencial do registro no arquivo
|
104
|
+
# Padrão: 000001
|
105
|
+
# Tipo: Numérico
|
106
|
+
# Tamanho: 006
|
107
|
+
def header_posicao_395_a_400
|
108
|
+
'000001'
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module BrBoleto
|
2
|
+
module Remessa
|
3
|
+
module Cnab400
|
4
|
+
module Helper
|
5
|
+
module Trailer
|
6
|
+
|
7
|
+
# Monta o registro trailer do arquivo
|
8
|
+
#
|
9
|
+
# @param nro_lotes [Integer]
|
10
|
+
# numero de lotes no arquivo
|
11
|
+
# @param sequencial [Integer]
|
12
|
+
# numero de registros(linhas) no arquivo
|
13
|
+
#
|
14
|
+
# @return [String]
|
15
|
+
#
|
16
|
+
def monta_trailer(sequencial)
|
17
|
+
trailer_arquivo = '' # CAMPO
|
18
|
+
trailer_arquivo << trailer_arquivo_posicao_001_a_001 # Identificação do Trailer
|
19
|
+
trailer_arquivo << trailer_arquivo_posicao_002_a_394(sequencial) # Mensagens
|
20
|
+
trailer_arquivo << trailer_arquivo_posicao_394_a_400(sequencial) # Sequencial do registro
|
21
|
+
trailer_arquivo.upcase
|
22
|
+
end
|
23
|
+
|
24
|
+
# Identificação do Registro Trailer
|
25
|
+
# Padrão: '9'
|
26
|
+
# Tipo: N
|
27
|
+
# Tamanho: 001
|
28
|
+
def trailer_arquivo_posicao_001_a_001
|
29
|
+
'9'
|
30
|
+
end
|
31
|
+
|
32
|
+
# Mensagens
|
33
|
+
# Padrão: ' ' (393 brancos)
|
34
|
+
# Tipo: X
|
35
|
+
# Tamanho: 393
|
36
|
+
def trailer_arquivo_posicao_002_a_394(sequencial)
|
37
|
+
''.rjust(393, ' ')
|
38
|
+
end
|
39
|
+
|
40
|
+
# Sequencial do Trailer
|
41
|
+
# Tipo: N
|
42
|
+
# Tamanho: 6
|
43
|
+
def trailer_arquivo_posicao_394_a_400(sequencial)
|
44
|
+
"#{sequencial}".adjust_size_to(6, '0', :right)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,249 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
module BrBoleto
|
3
|
+
module Remessa
|
4
|
+
module Cnab400
|
5
|
+
class Sicoob < BrBoleto::Remessa::Cnab400::Base
|
6
|
+
def conta_class
|
7
|
+
BrBoleto::Conta::Sicoob
|
8
|
+
end
|
9
|
+
|
10
|
+
# Informações da conta <- Específico para cada banco
|
11
|
+
# Posição: 027 até 046
|
12
|
+
# Tipo: Numérico
|
13
|
+
# Tamanho: 020
|
14
|
+
def informacoes_da_conta(local)
|
15
|
+
# POSIÇÂO TAM. Descrição
|
16
|
+
# 027 030 004 Prefixo da Cooperativa: vide planilha "Capa" deste arquivo
|
17
|
+
# 031 031 001 Dígito Verificador do Prefixo: vide planilha "Capa" deste arquivo
|
18
|
+
# 032 039 008 Código do Cliente/Beneficiário: vide planilha "Capa" deste arquivo
|
19
|
+
# 040 040 001 Dígito Verificador do Código: vide planilha "Capa" deste arquivo
|
20
|
+
# 041 046 006 Número do convênio líder: Brancos
|
21
|
+
info = "#{conta.agencia}".adjust_size_to(4, '0')
|
22
|
+
info << "#{conta.agencia_dv}".adjust_size_to(1,'0')
|
23
|
+
info << "#{conta.codigo_cedente}".adjust_size_to(8,'0', :right)
|
24
|
+
info << "#{conta.codigo_cedente_dv}".adjust_size_to(1,'0')
|
25
|
+
|
26
|
+
# A unica diferença entre o header e o delathe é que no
|
27
|
+
# header é preenchido com valores em branco, e no
|
28
|
+
# detalhe é preenchido com 0(zero)
|
29
|
+
conv = if local == :detalhe then '0' else ' ' end
|
30
|
+
info << ''.rjust(6, conv)
|
31
|
+
|
32
|
+
info.adjust_size_to(20)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
# Complemento do registro
|
37
|
+
# Posição: 101 até 394
|
38
|
+
# Tamanho total: 294
|
39
|
+
def complemento_registro
|
40
|
+
# Posição TAM. Descrição
|
41
|
+
# 101 107 007 Seqüencial da Remessa: número seqüencial acrescido de 1 a cada remessa. Inicia com "0000001"
|
42
|
+
# 108 394 287 Complemento do Registro: Brancos
|
43
|
+
"#{sequencial_remessa}".rjust(7, '0').adjust_size_to(294)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Nosso numero do pagamento e outras informações
|
47
|
+
# Posição: 063 até 076
|
48
|
+
# Tamanho: 14
|
49
|
+
def dados_do_pagamento(pagamento)
|
50
|
+
# 063 074 012 9(12) "Nosso Número:
|
51
|
+
# - 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
|
52
|
+
# - 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):
|
53
|
+
# Preencher da seguinte forma:
|
54
|
+
# - Posição 063 a 073 – Número seqüencial a partir de ""0000000001"", não sendo admitida reutilização ou duplicidade.
|
55
|
+
# - Posição 074 a 074 – DV do Nosso-Número, calculado pelo módulo 11."
|
56
|
+
# 075 076 002 9(02) Número da Parcela: "01" se parcela única
|
57
|
+
dados = "#{pagamento.nosso_numero}".adjust_size_to(12, '0', :right)
|
58
|
+
dados << "#{pagamento.parcela}".adjust_size_to(2, '0', :right)
|
59
|
+
dados
|
60
|
+
end
|
61
|
+
|
62
|
+
# Informações diferenciadas para cada banco
|
63
|
+
# Posição: 077 até 108
|
64
|
+
# Tamanho: 32
|
65
|
+
def detalhe_posicao_077_108(pagamento, sequencial)
|
66
|
+
dados = ''
|
67
|
+
dados << '00' # 077 078 002 9(02) Grupo de Valor: "00"
|
68
|
+
|
69
|
+
dados << ''.rjust(3, ' ') # 079 081 003 X(03) Complemento do Registro: Brancos
|
70
|
+
dados << ' ' # 082 082 001 X(01) "Indicativo de Mensagem ou Sacador/Avalista:
|
71
|
+
# Brancos: Poderá ser informada nas posições 352 a 391 (SEQ 50) qualquer mensagem para ser impressa no boleto;
|
72
|
+
# “A”: Deverá ser informado nas posições 352 a 391 (SEQ 50) o nome e CPF/CNPJ do sacador"
|
73
|
+
dados << ''.rjust(3, ' ') # 083 085 003 X(03) Prefixo do Título: Brancos
|
74
|
+
dados << '000' # 086 088 003 9(03) Variação da Carteira: "000"
|
75
|
+
dados << '0' # 089 089 001 9(01) Conta Caução: "0"
|
76
|
+
|
77
|
+
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."
|
78
|
+
dados << '0' # 095 095 001 X(01) "DV do contrato: Para Carteira 1 preencher ""0""; Para Carteira 3 preencher com o Dígito Verificador."
|
79
|
+
|
80
|
+
dados << ''.rjust(6, '0') # 096 101 006 9(06) Numero do borderô: preencher em caso de carteira 3
|
81
|
+
dados << ''.rjust(4, ' ') # 102 105 004 X(04) Complemento do Registro: Brancos
|
82
|
+
|
83
|
+
dados << "#{pagamento.tipo_emissao}".adjust_size_to(1) # 106 106 001 9(01) "Tipo de Emissão: 1-Cooperativa 2-Cliente"
|
84
|
+
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 "
|
85
|
+
dados
|
86
|
+
end
|
87
|
+
|
88
|
+
# Informações referente ao pagamento
|
89
|
+
# Posição 121 até 160
|
90
|
+
# Tamanho: 40
|
91
|
+
def informacoes_do_pagamento(pagamento, sequencial)
|
92
|
+
dados = ''
|
93
|
+
# POSIÇÂO TAM. TIPO
|
94
|
+
# 121 126 006 A(06) "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
|
95
|
+
dados << pagamento.data_vencimento_formatado('%d%m%y')
|
96
|
+
|
97
|
+
# 127 139 013 9(11) Valor do Titulo
|
98
|
+
dados << pagamento.valor_documento_formatado(13)
|
99
|
+
|
100
|
+
# 140 142 003 9(03) Número Banco: "756"
|
101
|
+
dados << conta.codigo_banco
|
102
|
+
|
103
|
+
# 143 146 004 9(04) Prefixo da Cooperativa: vide e-mail enviado com os dados do processo de homologação
|
104
|
+
dados << "#{conta.agencia}".adjust_size_to(4,'0', :right)
|
105
|
+
|
106
|
+
# 147 147 001 X(01) Dígito Verificador do Prefixo: vide e-mail enviado com os dados do processo de homologação
|
107
|
+
dados << "#{conta.agencia_dv}".adjust_size_to(1, '0')
|
108
|
+
|
109
|
+
# 148 149 002 9(02)
|
110
|
+
# "Espécie do Título :
|
111
|
+
# 01 = Duplicata Mercantil
|
112
|
+
# 02 = Nota Promissória
|
113
|
+
# 03 = Nota de Seguro
|
114
|
+
# 05 = Recibo
|
115
|
+
# 06 = Duplicata Rural
|
116
|
+
# 08 = Letra de Câmbio
|
117
|
+
# 09 = Warrant
|
118
|
+
# 10 = Cheque
|
119
|
+
# 12 = Duplicata de Serviço
|
120
|
+
# 13 = Nota de Débito
|
121
|
+
# 14 = Triplicata Mercantil
|
122
|
+
# 15 = Triplicata de Serviço
|
123
|
+
# 18 = Fatura
|
124
|
+
# 20 = Apólice de Seguro
|
125
|
+
# 21 = Mensalidade Escolar
|
126
|
+
# 22 = Parcela de Consórcio
|
127
|
+
# 99 = Outros"
|
128
|
+
dados << "#{pagamento.especie_titulo}".adjust_size_to(2, '0', :right)
|
129
|
+
|
130
|
+
# 150 150 001 X(01) "Aceite do Título: "0" = Sem aceite "1" = Com aceite"
|
131
|
+
dados << "#{pagamento.aceite ? '1' : '0'}".adjust_size_to(1, '0')
|
132
|
+
|
133
|
+
# 151 156 006 9(06) Data de Emissão do Título: formato ddmmaa
|
134
|
+
dados << pagamento.data_emissao_formatado('%d%m%y')
|
135
|
+
|
136
|
+
# 157 158 002 9(02) "Primeira instrução codificada:
|
137
|
+
# Regras de impressão de mensagens nos boletos:
|
138
|
+
# * Primeira instrução (SEQ 34) = 00 e segunda (SEQ 35) = 00, não imprime nada.
|
139
|
+
# * 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.
|
140
|
+
# * Primeira e segunda instrução diferente das situações acima, imprimimos o conteúdo CNAB:
|
141
|
+
# 00 = AUSENCIA DE INSTRUCOES
|
142
|
+
# 01 = COBRAR JUROS
|
143
|
+
# 03 = PROTESTAR 3 DIAS UTEIS APOS VENCIMENTO
|
144
|
+
# 04 = PROTESTAR 4 DIAS UTEIS APOS VENCIMENTO
|
145
|
+
# 05 = PROTESTAR 5 DIAS UTEIS APOS VENCIMENTO
|
146
|
+
# 07 = NAO PROTESTAR
|
147
|
+
# 10 = PROTESTAR 10 DIAS UTEIS APOS VENCIMENTO
|
148
|
+
# 15 = PROTESTAR 15 DIAS UTEIS APOS VENCIMENTO
|
149
|
+
# 20 = PROTESTAR 20 DIAS UTEIS APOS VENCIMENTO
|
150
|
+
# 22 = CONCEDER DESCONTO SO ATE DATA ESTIPULADA
|
151
|
+
# 42 = DEVOLVER APOS 15 DIAS VENCIDO
|
152
|
+
# 43 = DEVOLVER APOS 30 DIAS VENCIDO"
|
153
|
+
dados << '00'
|
154
|
+
|
155
|
+
# 159 160 002 9(02) Segunda instrução: vide SEQ 33
|
156
|
+
dados << '00'
|
157
|
+
|
158
|
+
dados
|
159
|
+
end
|
160
|
+
|
161
|
+
# Informações referente aos juros e multas do pagamento
|
162
|
+
# Posição: 161 a 218
|
163
|
+
# Tamanho: 58
|
164
|
+
def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
|
165
|
+
detalhe = ''
|
166
|
+
|
167
|
+
# 161 166 006 9(02) "Taxa de mora mês Ex: 022000 = 2,20%)"
|
168
|
+
detalhe << pagamento.percentual_juros_formatado(6)
|
169
|
+
|
170
|
+
# 167 172 006 9(02) "Taxa de multa Ex: 022000 = 2,20%)"
|
171
|
+
detalhe << pagamento.percentual_multa_formatado(6)
|
172
|
+
|
173
|
+
# 173 173 001 9(01) "Tipo Distribuição: 1 – Cooperativa 2 - Cliente"
|
174
|
+
detalhe << "#{pagamento.tipo_emissao}".adjust_size_to(1)
|
175
|
+
|
176
|
+
# 174 179 006 9(06) "Data primeiro desconto:
|
177
|
+
# Informar a data limite a ser observada pelo cliente para o pagamento
|
178
|
+
# do título com Desconto no formato ddmmaa.
|
179
|
+
# Preencher com zeros quando não for concedido nenhum desconto.
|
180
|
+
# Obs: A data limite não poderá ser superior a data de vencimento do título."
|
181
|
+
detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0')
|
182
|
+
|
183
|
+
# 180 192 013 9(11)V99 "Valor primeiro desconto:
|
184
|
+
# Informar o valor do desconto, com duas casa decimais.
|
185
|
+
# Preencher com zeros quando não for concedido nenhum desconto."
|
186
|
+
detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right)
|
187
|
+
|
188
|
+
# 193 205 013 9(13) "193-193 – Código da moeda
|
189
|
+
# 194-205 – Valor IOF / Quantidade Monetária: ""000000000000""
|
190
|
+
# Se o código da moeda for REAL, o valor restante representa o IOF.
|
191
|
+
# Se o código da moeda for diferente de REAL, o valor restante será a quantidade monetária.
|
192
|
+
detalhe << "#{pagamento.codigo_moeda}".adjust_size_to(1,'9')
|
193
|
+
detalhe << (pagamento.moeda_real? ? ''.ljust(12 ,'0') : pagamento.valor_iof_formatado(12))
|
194
|
+
|
195
|
+
# 206 218 013 9(11)V99 Valor Abatimento
|
196
|
+
detalhe << "#{pagamento.valor_abatimento_formatado}".adjust_size_to(13,'0', :right)
|
197
|
+
|
198
|
+
detalhe
|
199
|
+
end
|
200
|
+
|
201
|
+
# Informações referente aos dados do sacado/pagador
|
202
|
+
# Posição: 219 a 394
|
203
|
+
# Tamanho: 176
|
204
|
+
def informacoes_do_sacado(pagamento, sequencial)
|
205
|
+
info = ''
|
206
|
+
# 219 220 002 9(01) "Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
207
|
+
info << "#{pagamento.pagador.tipo_cpf_cnpj}".adjust_size_to(2, '0', :right)
|
208
|
+
|
209
|
+
# 221 234 014 9(14) Número do CNPJ ou CPF do Pagador
|
210
|
+
info << "#{pagamento.pagador.cpf_cnpj}".adjust_size_to(14, '0', :right)
|
211
|
+
|
212
|
+
# 235 274 040 A(40) Nome do Pagador
|
213
|
+
info << "#{pagamento.pagador.nome}".adjust_size_to(40)
|
214
|
+
|
215
|
+
# 275 311 037 A(37) Endereço do Pagador
|
216
|
+
info << "#{pagamento.pagador.endereco}".adjust_size_to(37)
|
217
|
+
|
218
|
+
# 312 326 015 X(15) Bairro do Pagador
|
219
|
+
info << "#{pagamento.pagador.bairro}".adjust_size_to(15)
|
220
|
+
|
221
|
+
# 327 334 008 9(08) CEP do Pagador
|
222
|
+
info << "#{pagamento.pagador.cep}".adjust_size_to(8, '0')
|
223
|
+
|
224
|
+
# 335 349 015 A(15) Cidade do Pagador
|
225
|
+
info << "#{pagamento.pagador.cidade}".adjust_size_to(15)
|
226
|
+
|
227
|
+
# 350 351 002 A(02) UF do Pagador
|
228
|
+
info << "#{pagamento.pagador.uf}".adjust_size_to(2)
|
229
|
+
|
230
|
+
# 352 391 040 X(40) "Observações/Mensagem ou Sacador/Avalista:
|
231
|
+
# Quando o SEQ 14 – Indicativo de Mensagem ou Sacador/Avalista - for preenchido com Brancos,
|
232
|
+
# as informações constantes desse campo serão impressas no campo “texto de responsabilidade
|
233
|
+
# da Empresa, no Recibo do Sacado e na Ficha de Compensação do boleto de cobrança.
|
234
|
+
# Quando o SEQ 14 – Indicativo de Mensagem ou Sacador/Avalista - for preenchido com “A” ,
|
235
|
+
# este campo deverá ser preenchido com o nome/razão social do Sacador/Avalista
|
236
|
+
info << "#{pagamento.pagador.nome_avalista}".adjust_size_to(40)
|
237
|
+
|
238
|
+
# 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
|
239
|
+
info << "00"
|
240
|
+
|
241
|
+
# 394 395 001 X(01) Complemento do Registro: Brancos
|
242
|
+
info << " "
|
243
|
+
|
244
|
+
info
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
@@ -4,29 +4,7 @@ module BrBoleto
|
|
4
4
|
class Lote < BrBoleto::ActiveModelBase
|
5
5
|
# variavel que terá os pagamentos no qual será gerado o lote do arquivo de remessa
|
6
6
|
# Pode haver 1 ou vários pagamentos para o mesmo arquivo
|
7
|
-
|
8
|
-
|
9
|
-
def self.class_for_pagamentos
|
10
|
-
BrBoleto::Remessa::Pagamento
|
11
|
-
end
|
12
|
-
|
13
|
-
validates_each :pagamentos do |record, attr, value|
|
14
|
-
record.errors.add(attr, 'não pode estar vazio.') if value.empty?
|
15
|
-
value.each do |pagamento|
|
16
|
-
if pagamento.is_a? record.class.class_for_pagamentos
|
17
|
-
if pagamento.invalid?
|
18
|
-
pagamento.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
19
|
-
end
|
20
|
-
else
|
21
|
-
record.errors.add(attr, 'cada item deve ser um objeto Pagamento.')
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# O atributo pagamentos sempre irá retornar umm Array
|
27
|
-
def pagamentos
|
28
|
-
@pagamentos = [@pagamentos].flatten
|
29
|
-
end
|
7
|
+
include BrBoleto::HavePagamentos
|
30
8
|
end
|
31
9
|
end
|
32
10
|
end
|