cnab240_bancoabc 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +17 -0
  3. data/LICENSE +21 -0
  4. data/README.md +72 -0
  5. data/Rakefile +48 -0
  6. data/lib/cnab240/bancoabc/entities/base.rb +50 -0
  7. data/lib/cnab240/bancoabc/entities/header.rb +120 -0
  8. data/lib/cnab240/bancoabc/entities/header_builder.rb +91 -0
  9. data/lib/cnab240/bancoabc/entities/header_lote_builder.rb +84 -0
  10. data/lib/cnab240/bancoabc/entities/register_p.rb +183 -0
  11. data/lib/cnab240/bancoabc/entities/register_q.rb +101 -0
  12. data/lib/cnab240/bancoabc/entities/register_r.rb +129 -0
  13. data/lib/cnab240/bancoabc/entities/register_s.rb +73 -0
  14. data/lib/cnab240/bancoabc/entities/register_t.rb +116 -0
  15. data/lib/cnab240/bancoabc/entities/register_u.rb +79 -0
  16. data/lib/cnab240/bancoabc/entities/trailler.rb +54 -0
  17. data/lib/cnab240/bancoabc/entities/trailler_builder.rb +45 -0
  18. data/lib/cnab240/bancoabc/entities/trailler_lote_builder.rb +49 -0
  19. data/lib/cnab240/bancoabc/ocorrencias.rb +68 -0
  20. data/lib/cnab240/bancoabc/services/parse_line.rb +21 -0
  21. data/lib/cnab240/bancoabc/version.rb +14 -0
  22. data/lib/cnab240_bancoabc.rb +25 -0
  23. data/spec/cnab240/bancoabc/entities/base_spec.rb +93 -0
  24. data/spec/cnab240/bancoabc/entities/header_spec.rb +64 -0
  25. data/spec/cnab240/bancoabc/entities/register_p_spec.rb +298 -0
  26. data/spec/cnab240/bancoabc/entities/register_q_spec.rb +149 -0
  27. data/spec/cnab240/bancoabc/entities/register_r_spec.rb +191 -0
  28. data/spec/cnab240/bancoabc/entities/register_t_spec.rb +64 -0
  29. data/spec/cnab240/bancoabc/entities/register_u_spec.rb +49 -0
  30. data/spec/cnab240/bancoabc/entities/trailler_builder_spec.rb +60 -0
  31. data/spec/cnab240/bancoabc/entities/trailler_lote_builder_spec.rb +65 -0
  32. data/spec/cnab240/bancoabc/entities/trailler_spec.rb +73 -0
  33. data/spec/cnab240/bancoabc/services/parse_line_spec.rb +37 -0
  34. data/spec/spec_helper.rb +34 -0
  35. metadata +223 -0
@@ -0,0 +1,101 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240
4
+ module BancoABC
5
+ module Entities
6
+ class RegisterQ < Base
7
+ def register?
8
+ true
9
+ end
10
+
11
+ def codigo_banco(data = nil)
12
+ append_space(data, 3)
13
+ end
14
+
15
+ def lote_servico(data = nil)
16
+ append_space(data, 4)
17
+ end
18
+
19
+ def tipo_registro(data = nil)
20
+ append_space(data, 1)
21
+ end
22
+
23
+ def numero_registro(data = nil)
24
+ prepend_zero(data, 5)
25
+ end
26
+
27
+ def segmento
28
+ "Q"
29
+ end
30
+
31
+ def cnab(data = nil)
32
+ append_space(data, 1)
33
+ end
34
+
35
+ def codigo_movimento(data = nil)
36
+ append_space(data, 2)
37
+ end
38
+
39
+ def tipo_inscricao(data = nil)
40
+ append_space(data, 1)
41
+ end
42
+
43
+ def numero_inscricao(data = nil)
44
+ prepend_zero(data, 15)
45
+ end
46
+
47
+ def nome(data = nil)
48
+ append_space(data, 40)
49
+ end
50
+
51
+ def endereco(data = nil)
52
+ append_space(data, 40)
53
+ end
54
+
55
+ def bairro(data = nil)
56
+ append_space(data, 15)
57
+ end
58
+
59
+ def cep(data = nil)
60
+ append_space(data, 5)
61
+ end
62
+
63
+ def sufixo_cep(data = nil)
64
+ append_space(data, 3)
65
+ end
66
+
67
+ def cidade(data = nil)
68
+ append_space(data, 15)
69
+ end
70
+
71
+ def uf(data = nil)
72
+ append_space(data, 2)
73
+ end
74
+
75
+ def tipo_inscricao_sac(data = nil)
76
+ append_space(data, 1)
77
+ end
78
+
79
+ def numero_inscricao_sac(data = nil)
80
+ prepend_zero(data, 15)
81
+ end
82
+
83
+ def nome_sac(data = nil)
84
+ append_space(data, 40)
85
+ end
86
+
87
+ def banco_correspondente
88
+ "0" * 3
89
+ end
90
+
91
+ def nosso_numero_banco(data = nil)
92
+ append_space(data, 20)
93
+ end
94
+
95
+ def uso_livre(data = nil)
96
+ append_space(data, 8)
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,129 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240
4
+ module BancoABC
5
+ module Entities
6
+ class RegisterR < Base
7
+ def register?
8
+ true
9
+ end
10
+
11
+ def codigo_banco(data = nil)
12
+ prepend_zero(data, 3)
13
+ end
14
+
15
+ def lote_servico(data = nil)
16
+ prepend_zero(data, 4)
17
+ end
18
+
19
+ def tipo_registro(data = nil)
20
+ prepend_zero(data, 1)
21
+ end
22
+
23
+ def numero_registro(data = nil)
24
+ prepend_zero(data, 5)
25
+ end
26
+
27
+ def segmento
28
+ "R"
29
+ end
30
+
31
+ def cnab(data = nil)
32
+ append_space(data, 1)
33
+ end
34
+
35
+ def codigo_movimento(data = nil)
36
+ prepend_zero(data, 2)
37
+ end
38
+
39
+ def cod_desconto_2(data = nil)
40
+ prepend_zero(data, 1)
41
+ end
42
+
43
+ def data_desconto_2(data = nil)
44
+ prepend_zero(data, 8)
45
+ end
46
+
47
+ def valor_desconto_2(data = nil)
48
+ prepend_zero(data, 15)
49
+ end
50
+
51
+ def cod_desconto_3(data = nil)
52
+ prepend_zero(data, 1)
53
+ end
54
+
55
+ def data_desconto_3(data = nil)
56
+ prepend_zero(data, 8)
57
+ end
58
+
59
+ def valor_desconto_3(data = nil)
60
+ prepend_zero(data, 15)
61
+ end
62
+
63
+ def cod_multa(data = nil)
64
+ prepend_zero(data, 1)
65
+ end
66
+
67
+ def data_multa(data = nil)
68
+ prepend_zero(data, 8)
69
+ end
70
+
71
+ def valor_multa(data = nil)
72
+ prepend_zero(data, 15)
73
+ end
74
+
75
+ def informacao_sacado(data = nil)
76
+ prepend_zero(data, 10)
77
+ end
78
+
79
+ def mensagem_3(data = nil)
80
+ append_space(data, 40)
81
+ end
82
+
83
+ def mensagem_4(data = nil)
84
+ append_space(data, 40)
85
+ end
86
+
87
+ def uso_exclusivo(data = nil)
88
+ append_space(data, 20)
89
+ end
90
+
91
+ def cod_ocorrencia_sacado(data = nil)
92
+ prepend_zero(data, 8)
93
+ end
94
+
95
+ def cod_banco_conta_debito(data = nil)
96
+ append_space(data, 3)
97
+ end
98
+
99
+ def cod_agencia_debito(data = nil)
100
+ append_space(data, 5)
101
+ end
102
+
103
+ def digito_verificador_agencia(data = nil)
104
+ append_space(data, 1)
105
+ end
106
+
107
+ def conta_corrente_debito(data = nil)
108
+ append_space(data, 12)
109
+ end
110
+
111
+ def digito_verificador_conta(data = nil)
112
+ append_space(data, 1)
113
+ end
114
+
115
+ def digito_verificador_agencia_conta(data = nil)
116
+ append_space(data, 1)
117
+ end
118
+
119
+ def aviso_debito_automatico(data = nil)
120
+ prepend_zero(data, 1)
121
+ end
122
+
123
+ def uso_exclusivo_cnab(data = nil)
124
+ append_space(data, 9)
125
+ end
126
+ end
127
+ end
128
+ end
129
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240
4
+ module BancoABC
5
+ module Entities
6
+ class RegisterS < Base
7
+ def register?
8
+ true
9
+ end
10
+
11
+ def banco
12
+ "246"
13
+ end
14
+
15
+ def lote
16
+ prepend_zero("0001", 3)
17
+ end
18
+
19
+ def registro
20
+ "3"
21
+ end
22
+
23
+ def numero_registro(data = nil)
24
+ prepend_zero(data, 5)
25
+ end
26
+
27
+ def sequencial_registro_lote(data = nil)
28
+ append_space(data, 5) # incremental
29
+ end
30
+
31
+ def segmento_registro_detalhe
32
+ "S"
33
+ end
34
+
35
+ def uso_exclusivo_febraban_1(data = nil)
36
+ append_space(data, 1)
37
+ end
38
+
39
+ def codigo_movimento(data = nil)
40
+ prepend_zero(data, 2)
41
+ end
42
+
43
+ def tipo_impressao
44
+ "3"
45
+ end
46
+
47
+ def mensagem1(data = nil)
48
+ append_space(data, 40)
49
+ end
50
+
51
+ def mensagem2(data = nil)
52
+ append_space(data, 40)
53
+ end
54
+
55
+ def mensagem3(data = nil)
56
+ append_space(data, 40)
57
+ end
58
+
59
+ def mensagem4(data = nil)
60
+ append_space(data, 40)
61
+ end
62
+
63
+ def mensagem5(data = nil)
64
+ append_space(data, 40)
65
+ end
66
+
67
+ def uso_exclusivo_febraban_2(data = nil)
68
+ append_space(data, 22)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240
4
+ module BancoABC
5
+ module Entities
6
+ class RegisterT < Base
7
+ attr_reader :line
8
+
9
+ def initialize(line)
10
+ @line = line
11
+ end
12
+
13
+ def register?
14
+ true
15
+ end
16
+
17
+ def data
18
+ {
19
+ segmento: segmento.strip,
20
+ codigo_movimento: cod_movimento.strip,
21
+ ocorrencia: ocorrencia.strip,
22
+ identificacao_do_titulo: identificacao_do_titulo.strip,
23
+ codigo_carteira: codigo_carteira.strip,
24
+ numero_documento: numero_documento.strip,
25
+ data_vencimento: data_vencimento.strip,
26
+ valor_titulo: valor_titulo.strip,
27
+ numero_do_banco: numero_do_banco.strip,
28
+ agencia: agencia.strip,
29
+ digito_verificador: digito_verificador.strip,
30
+ uso_empresa: uso_empresa.strip,
31
+ tipo_inscricao: tipo_inscricao.strip,
32
+ numero_inscricao: numero_inscricao.strip,
33
+ nome: nome.strip,
34
+ valor_de_tarifas_custas_correspondentes: valor_de_tarifas_custas_correspondentes.strip,
35
+ motivo_ocorrencia: motivo_ocorrencia.strip
36
+ }
37
+ end
38
+
39
+ def ocorrencia
40
+ action = CNAB240::BancoABC::OCORRENCIAS.select { |_k, v| v == cod_movimento }
41
+ return "ocorrencia_nao_mapeada" if action.empty?
42
+
43
+ action.keys.last.to_s
44
+ end
45
+
46
+ def operacao
47
+ Operacao.find_by(id_bancario: uso_empresa.strip)
48
+ end
49
+
50
+ def segmento
51
+ line[13]
52
+ end
53
+
54
+ def cod_movimento
55
+ line[15..16]
56
+ end
57
+
58
+ def identificacao_do_titulo
59
+ line[46..56]
60
+ end
61
+
62
+ def codigo_carteira
63
+ line[57]
64
+ end
65
+
66
+ def numero_documento
67
+ line[58..72]
68
+ end
69
+
70
+ def data_vencimento
71
+ line[73..80]
72
+ end
73
+
74
+ def valor_titulo
75
+ line[81..95]
76
+ end
77
+
78
+ def numero_do_banco
79
+ line[96..98]
80
+ end
81
+
82
+ def agencia
83
+ line[99..103]
84
+ end
85
+
86
+ def digito_verificador
87
+ line[104]
88
+ end
89
+
90
+ def uso_empresa
91
+ line[105..129]
92
+ end
93
+
94
+ def tipo_inscricao
95
+ line[132]
96
+ end
97
+
98
+ def numero_inscricao
99
+ line[133..147]
100
+ end
101
+
102
+ def nome
103
+ line[148..187]
104
+ end
105
+
106
+ def valor_de_tarifas_custas_correspondentes
107
+ line[198..212]
108
+ end
109
+
110
+ def motivo_ocorrencia
111
+ line[213..222]
112
+ end
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240
4
+ module BancoABC
5
+ module Entities
6
+ class RegisterU < Base
7
+ attr_reader :line
8
+
9
+ def initialize(line)
10
+ @line = line
11
+ end
12
+
13
+ def register?
14
+ true
15
+ end
16
+
17
+ def data
18
+ {
19
+ segmento: segmento.strip,
20
+ acrescimos: acrescimos.strip,
21
+ valor_desconto: valor_desconto.strip,
22
+ valor_abatimento: valor_abatimento.strip,
23
+ valor_iof: valor_iof.strip,
24
+ valor_pago: valor_pago.strip,
25
+ valor_liquido: valor_liquido.strip,
26
+ valor_outras_despesas: valor_outras_despesas.strip,
27
+ valor_outros_creditos: valor_outros_creditos.strip,
28
+ data_ocorrencia: data_ocorrencia.strip,
29
+ data_credito: data_credito.strip
30
+ }
31
+ end
32
+
33
+ def segmento
34
+ line[13]
35
+ end
36
+
37
+ def acrescimos
38
+ line[17..31]
39
+ end
40
+
41
+ def valor_desconto
42
+ line[32..46]
43
+ end
44
+
45
+ def valor_abatimento
46
+ line[47..61]
47
+ end
48
+
49
+ def valor_iof
50
+ line[62..76]
51
+ end
52
+
53
+ def valor_pago
54
+ line[77..91]
55
+ end
56
+
57
+ def valor_liquido
58
+ line[92..106]
59
+ end
60
+
61
+ def valor_outras_despesas
62
+ line[107..121]
63
+ end
64
+
65
+ def valor_outros_creditos
66
+ line[122..136]
67
+ end
68
+
69
+ def data_ocorrencia
70
+ line[137..144]
71
+ end
72
+
73
+ def data_credito
74
+ line[145..152]
75
+ end
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240
4
+ module BancoABC
5
+ module Entities
6
+ class Trailler < Base
7
+ attr_reader :line
8
+
9
+ def initialize(line)
10
+ @line = line
11
+ end
12
+
13
+ def trailler?
14
+ true
15
+ end
16
+
17
+ def data; end
18
+
19
+ # Identificacao do registro trailler
20
+ def codigo_banco
21
+ line[0..2]
22
+ end
23
+
24
+ def lote_do_servico
25
+ line[3..6]
26
+ end
27
+
28
+ def tipo_registro
29
+ line[7]
30
+ end
31
+
32
+ def uso_exclusivo_febraban_1
33
+ line[8..16]
34
+ end
35
+
36
+ def quantidade_lotes
37
+ line[17..22]
38
+ end
39
+
40
+ def quantidade_registros
41
+ line[23..28]
42
+ end
43
+
44
+ def quantidade_contas_para_conciliacao
45
+ line[29..34]
46
+ end
47
+
48
+ def uso_exclusivo_febraban_2
49
+ line[35..239]
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240
4
+ module BancoABC
5
+ module Entities
6
+ class TraillerBuilder < Base
7
+ def trailler?
8
+ true
9
+ end
10
+
11
+ def codigo_banco
12
+ "246"
13
+ end
14
+
15
+ def lote_do_servico
16
+ "9" * 4
17
+ end
18
+
19
+ def tipo_registro
20
+ "9"
21
+ end
22
+
23
+ def quantidade_lotes
24
+ "#{'0' * 5}1"
25
+ end
26
+
27
+ def quantidade_registros(data = nil)
28
+ prepend_zero(data, 6)
29
+ end
30
+
31
+ def quantidade_contas_para_conciliacao
32
+ "0" * 6
33
+ end
34
+
35
+ def uso_exclusivo_febraban_1(data = nil)
36
+ append_space(data, 9)
37
+ end
38
+
39
+ def uso_exclusivo_febraban_2(data = nil)
40
+ append_space(data, 205)
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240
4
+ module BancoABC
5
+ module Entities
6
+ class TraillerLoteBuilder < Base
7
+ def trailler?
8
+ true
9
+ end
10
+
11
+ def codigo_banco
12
+ "246"
13
+ end
14
+
15
+ def lote_do_servico
16
+ "#{'0' * 3}1"
17
+ end
18
+
19
+ def tipo_registro
20
+ "5"
21
+ end
22
+
23
+ def uso_exclusivo_febraban(data = nil)
24
+ append_space(data, 9)
25
+ end
26
+
27
+ def quantidade_registros_lotes(data = nil)
28
+ prepend_zero(data, 6)
29
+ end
30
+
31
+ def quantidade_titulos_cobranca
32
+ "0" * 6
33
+ end
34
+
35
+ def valor_total_titulos_carteira
36
+ "0" * 17
37
+ end
38
+
39
+ def uso_abc(data = nil)
40
+ append_space(data, 8)
41
+ end
42
+
43
+ def uso_exclusivo(data = nil)
44
+ append_space(data, 117)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CNAB240::BancoABC
4
+ OCORRENCIAS = {
5
+ confirma_entrada_cip: "01",
6
+ entrada_confirmada: "02",
7
+ entrada_rejeitada: "03",
8
+ transferencia_de_carteira_entrada: "04",
9
+ transferencia_de_carteira_baixa: "05",
10
+ liquidacao: "06",
11
+ confirmacao_do_recebimento_instrucao_desconto: "07",
12
+ confirmacao_do_recebimento_cancelamento_desconto: "08",
13
+ baixa: "09",
14
+ titulo_em_carteira: "11",
15
+ confirma_abatimento: "12",
16
+ confirma_abatimento_cancelado: "13",
17
+ vencimento_alterado: "14",
18
+ franco_de_pagamento: "15",
19
+ liquidacao_sem_registro: "17",
20
+ protesto: "19",
21
+ sustacao: "20",
22
+ remessa_a_cartorio: "23",
23
+ retirada_cartorio_e_manutencao_em_carteira: "24",
24
+ baixado_protesto: "25",
25
+ instrucao_rejeitada: "26",
26
+ confirmacao_pedido_alteracao_outros_dados: "27",
27
+ debito_de_tarifas_custas_correspondentes: "28",
28
+ ocorrencia_pagador: "29",
29
+ alteracao_dados_rejeitada: "30",
30
+ confirmacao_alteracao_dados_rateio_credito: "33",
31
+ confirmacao_cancelamento_dados_rateio_credito: "34",
32
+ confirmacao_desagendamento_debito_automatico: "35",
33
+ comfirmacao_de_envio_email_sms: "36",
34
+ envio_de_email_rejeitado: "37",
35
+ confirmacao_alteracao_prazo_limite_recebimento: "38",
36
+ confirmacao_dispensa_prazo_limite_recebimento: "39",
37
+ confirmacao_alteracao_numero_titulo_beneficiario: "40",
38
+ confirmacao_alteracao_numero_controle_participante: "41",
39
+ confirmacao_alteracao_dados_pagador: "42",
40
+ confirmacao_alteracao_dados_sacador_avalista: "43",
41
+ titulo_pago_cheque_devolvido: "44",
42
+ titulo_pago_cheque_compensado: "45",
43
+ instrucao_protesto_confirmada: "46",
44
+ instrucao_protesto_fins_falimentares_confirmada: "47",
45
+ confirmacao_instrucao_transferencia_carteira_modalidade_cobranca: "48",
46
+ alteracao_contrato_cobranca: "49",
47
+ titulo_pago_chegue_pendente_liquidacao: "50",
48
+ titulo_dda_reconhecido: "51",
49
+ titulo_dda_nao_reconhecido: "52",
50
+ titulo_dda_recusado_cip: "53",
51
+ confirmacao_instrucao_baixa_titulo_negativado_sem_protesto: "54",
52
+ confirmacao_pedido_dispensa_multa: "55",
53
+ confirmacao_pedido_cobranca_multa: "56",
54
+ confirmacao_pedido_alteracao_cobranca_juros: "57",
55
+ confirmacao_pedido_alteracao_valor_data_desconto: "58",
56
+ confirmacao_pedido_alteracao_beneficiario_titulo: "59",
57
+ confirmacao_pedido_dispensa_juros_mora: "60",
58
+ confirmacao_alteracao_valor_nominal_titulo: "61",
59
+ titulo_sustado_judicialmente: "63",
60
+ confirmacao_alteracao_valor_minimo_percentual: "64",
61
+ confirmacao_instrucao_sustar_alterar_vencimento: "94",
62
+ confirmacao_alteracao_campo_livre: "95",
63
+ confirmacao_alteracao_seu_numero: "96",
64
+ confirmacao_agendamento_devolucao: "97",
65
+ confirmacao_alteracao_mora: "98",
66
+ confirmacao_alteracao_multa: "99"
67
+ }.freeze
68
+ end