cnab240 0.0.4 → 0.0.5

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.
Files changed (57) hide show
  1. data/lib/cnab240/arquivo/arquivo.rb +34 -9
  2. data/lib/cnab240/arquivo/estrutura.rb +1 -0
  3. data/lib/cnab240/arquivo/header.rb +5 -5
  4. data/lib/cnab240/arquivo/lote.rb +15 -4
  5. data/lib/cnab240/arquivo/trailer.rb +2 -2
  6. data/lib/cnab240/{core_ext → ext}/bindata.rb +1 -1
  7. data/lib/cnab240/{core_ext → ext}/default_mixin.rb +1 -0
  8. data/lib/cnab240/ext/segmento_mixin.rb +7 -0
  9. data/lib/cnab240/pagamentos/header.rb +2 -2
  10. data/lib/cnab240/pagamentos/titulos/header.rb +2 -2
  11. data/lib/cnab240/pagamentos/titulos/trailer.rb +1 -1
  12. data/lib/cnab240/pagamentos/trailer.rb +1 -1
  13. data/lib/cnab240/pagamentos/tributos/header.rb +2 -2
  14. data/lib/cnab240/pagamentos/tributos/trailer.rb +1 -1
  15. data/lib/cnab240/segmentos/segmento_a.rb +2 -1
  16. data/lib/cnab240/segmentos/segmento_b.rb +2 -1
  17. data/lib/cnab240/segmentos/segmento_c.rb +2 -1
  18. data/lib/cnab240/segmentos/segmento_j.rb +2 -1
  19. data/lib/cnab240/segmentos/segmento_j52.rb +3 -2
  20. data/lib/cnab240/segmentos/segmento_n.rb +37 -3
  21. data/lib/cnab240/segmentos/segmento_n1.rb +21 -0
  22. data/lib/cnab240/segmentos/segmento_n2.rb +23 -0
  23. data/lib/cnab240/segmentos/segmento_n3.rb +23 -0
  24. data/lib/cnab240/segmentos/segmento_n4.rb +25 -0
  25. data/lib/cnab240/segmentos/segmento_n5.rb +23 -0
  26. data/lib/cnab240/segmentos/segmento_n6.rb +23 -0
  27. data/lib/cnab240/segmentos/segmento_n7.rb +23 -0
  28. data/lib/cnab240/segmentos/segmento_n8.rb +25 -0
  29. data/lib/cnab240/segmentos/segmento_o.rb +2 -1
  30. data/lib/cnab240/segmentos/segmento_w.rb +2 -1
  31. data/lib/cnab240/segmentos/segmento_w1.rb +1 -0
  32. data/lib/cnab240/segmentos/segmento_z.rb +2 -1
  33. data/lib/cnab240/version.rb +1 -1
  34. data/lib/cnab240.rb +12 -3
  35. data/spec/arquivo/arquivo_spec.rb +29 -2
  36. data/spec/arquivo/header_spec.rb +43 -0
  37. data/spec/bindata/bindata_spec.rb +40 -0
  38. data/spec/segmentos/segmento_a_spec.rb +9 -0
  39. data/spec/segmentos/segmento_b_spec.rb +9 -0
  40. data/spec/segmentos/segmento_c_spec.rb +9 -0
  41. data/spec/segmentos/segmento_j52_spec.rb +9 -0
  42. data/spec/segmentos/segmento_j_spec.rb +9 -0
  43. data/spec/segmentos/segmento_n1_spec.rb +43 -0
  44. data/spec/segmentos/segmento_n2_spec.rb +46 -0
  45. data/spec/segmentos/segmento_n3_spec.rb +45 -0
  46. data/spec/segmentos/segmento_n4_spec.rb +47 -0
  47. data/spec/segmentos/segmento_n5_spec.rb +45 -0
  48. data/spec/segmentos/segmento_n6_spec.rb +45 -0
  49. data/spec/segmentos/segmento_n7_spec.rb +46 -0
  50. data/spec/segmentos/segmento_n8_spec.rb +45 -0
  51. data/spec/segmentos/segmento_n_spec.rb +34 -1
  52. data/spec/segmentos/segmento_o_spec.rb +9 -0
  53. data/spec/segmentos/segmento_spec.rb +12 -0
  54. data/spec/segmentos/segmento_w_spec.rb +9 -0
  55. data/spec/segmentos/segmento_z_spec.rb +9 -0
  56. metadata +36 -7
  57. /data/lib/cnab240/{core_ext → ext}/attribute_accessors.rb +0 -0
@@ -42,24 +42,49 @@ module Cnab240::Arquivo
42
42
  line.gsub!("\n", "")
43
43
  line_number = line_number + 1
44
44
  raise "Invalid line length: #{line.length} expected 240 at line number #{line_number}\n\t Line: [#{line}]" unless line.length == 240
45
- case line[7..7] # ruby 1.8.7 requires this fuck
45
+ case line[7..7] # ruby 1.8.7
46
46
  when '0' # header de arquivo
47
47
  arquivos << Arquivo.new
48
48
  arquivos.last.header = Header.read(line)
49
49
  when '1'
50
- # raise NotImplementedError.new("Tipo de registro not implemented")
50
+ case line[13..15]
51
+ when '044'
52
+ arquivos.last.lotes << Cnab240::Lote.new(:operacao => :pagamento, :tipo => :none) do |l|
53
+ l.header = Cnab240::Pagamentos::Header.read(line)
54
+ end
55
+ when '040'
56
+ arquivos.last.lotes << Cnab240::Lote.new(:operacao => :pagamento_titulo_cobranca, :tipo => :none) do |l|
57
+ l.header = Cnab240::PagamentosTitulos::Header.read(line)
58
+ end
59
+ when '011'
60
+ arquivos.last.lotes << Cnab240::Lote.new(:operacao => :pagamento_titulo_tributos, :tipo => :none) do |l|
61
+ l.header = Cnab240::PagamentosTributos::Header.read(line)
62
+ end
63
+ else
64
+ raise "Invalid tipo de lote: #{line[13..15]} at line #{line_number}"
65
+ end
51
66
  when '2'
52
- # raise NotImplementedError.new("Tipo de registro not implemented")
53
- when '3'
54
- # raise NotImplementedError.new("Tipo de registro not implemented")
67
+ raise NotImplementedError.new("Tipo de registro not implemented")
68
+ when '3'
69
+ raise "Invalid segmento de lote: #{line[13..13]} at line #{line_number}" unless ESTRUTURA[:segmentos_implementados].include? line[13..13].downcase.intern
70
+ case line[13..13]
71
+ when 'J'
72
+ if line[17..18] == '52'
73
+ arquivos.last.lotes.last.read_segmento('J52', line)
74
+ else
75
+ arquivos.last.lotes.last.read_segmento('J', line)
76
+ end
77
+ else
78
+ arquivos.last.lotes.last.read_segmento(line[13..13], line)
79
+ end
55
80
  when '4'
56
- # raise NotImplementedError.new("Tipo de registro not implemented")
81
+ raise NotImplementedError.new("Tipo de registro not implemented")
57
82
  when '5'
58
- # raise NotImplementedError.new("Tipo de registro not implemented")
83
+ arquivos.last.lotes.last.trailer.read(line)
59
84
  when '9'
60
- arquivos.last.header = Trailer.read(line)
85
+ arquivos.last.trailer = Trailer.read(line)
61
86
  else
62
- raise "Invalid tipo de registro: #{line[7]} at line #{line_number} \n\t Line: [#{line}]"
87
+ raise "Invalid tipo de registro: #{line[7..7]} at line #{line_number} \n\t Line: [#{line}]"
63
88
  end
64
89
  end
65
90
  arquivos
@@ -1,6 +1,7 @@
1
1
  module Cnab240
2
2
 
3
3
  ESTRUTURA = {
4
+ :segmentos_implementados => [:a, :b, :c, :j, :j52, :o, :n, :w, :z],
4
5
  :pagamento => {
5
6
  :header => Cnab240::Pagamentos::Header,
6
7
  :trailer => Cnab240::Pagamentos::Trailer,
@@ -1,13 +1,13 @@
1
1
  module Cnab240::Arquivo
2
2
  class Header < BinData::Record
3
3
 
4
- include Cnab240::DefaultMixin
4
+ include Cnab240::DefaultMixin
5
5
 
6
6
  string :controle_banco, :length => 3, :pad_byte => '0'
7
- string :controle_lote, :value => '0000'
8
- string :controle_registro, :value => '0'
7
+ string :controle_lote, :length => 4, :initial_value => '0000', :pad_byte => '0'
8
+ string :controle_registro, :length => 1, :initial_value => '0', :pad_byte => '0'
9
9
 
10
- string :cnab_g004_1, :length => 9, :pad_byte => ' '
10
+ string :cnab_g004_1, :length => 9, :initial_value => ' ', :pad_byte => ' '
11
11
 
12
12
  string :empresa_tipo, :length => 1, :pad_byte => '0'
13
13
  string :empresa_numero, :length => 14, :pad_byte => '0'
@@ -27,7 +27,7 @@ module Cnab240::Arquivo
27
27
  string :arquivo_data_geracao, :length => 8, :pad_byte => '0'
28
28
  string :arquivo_hora_geracao,:length => 6, :pad_byte => '0'
29
29
  string :arquivo_sequencia, :length => 6, :pad_byte => '0'
30
- string :arquivo_layout, :value => '085'
30
+ string :arquivo_layout, :length => 3, :initial_value => '085'
31
31
  string :arquivo_densidade, :length => 5, :pad_byte => '0'
32
32
 
33
33
  string :reservado_banco, :length => 20, :pad_byte => ' '
@@ -19,17 +19,28 @@ module Cnab240
19
19
  @header = estrutura[:header].new
20
20
  @trailer = estrutura[:trailer].new
21
21
 
22
- estrutura[:segmentos].each do |s|
23
- raise "Tipo nao suportado: [#{s}][#{tipo}]" if estrutura[s][tipo].nil?
24
- if estrutura[s][tipo] == true
25
- self << s
22
+ yield self if block_given?
23
+
24
+ if tipo != :none
25
+ estrutura[:segmentos].each do |s|
26
+ raise "Tipo nao suportado: [#{s}][#{tipo}]" if (estrutura[s][tipo].nil?) && tipo != :any
27
+ if (tipo == :any) || (estrutura[s][tipo] == true)
28
+ self << s
29
+ end
26
30
  end
27
31
  end
28
32
  end
29
33
 
34
+ def read_segmento(s, line)
35
+ segmento = self << s
36
+ segmentos[s] = segmento.read(line)
37
+ end
38
+
30
39
  def <<(s)
31
40
  segmentos[s] = eval("Segmento#{s.to_s.upcase}.new")
41
+ segmentos[s].lote = self
32
42
  add_segmento_accessors(s)
43
+ segmentos[s]
33
44
  end
34
45
 
35
46
  def linhas
@@ -4,8 +4,8 @@ module Cnab240::Arquivo
4
4
  include Cnab240::DefaultMixin
5
5
 
6
6
  string :controle_banco, :length => 3, :pad_byte => '0'
7
- string :controle_lote, :value => '9999', :pad_byte => '0'
8
- string :controle_registro, :value => '9', :pad_byte => '0'
7
+ string :controle_lote, :length => 4, :initial_value => '9999', :pad_byte => '0'
8
+ string :controle_registro, :length => 1, :initial_value => '9', :pad_byte => '0'
9
9
 
10
10
  string :cnab_g004_1, :length => 9, :pad_byte => ' '
11
11
 
@@ -4,7 +4,7 @@ module BinData
4
4
  self.auto_fill if self.respond_to?(:auto_fill)
5
5
  s = StringIO.new
6
6
  self.write(s)
7
- raise "Invalid line length #{s.string.length}" unless s.string.length == 240
7
+ raise "Invalid line length #{s.string.length}" unless (s.string.length == 240) || self.respond_to?(:lote)
8
8
  s.string
9
9
  end
10
10
  end
@@ -1,5 +1,6 @@
1
1
  module Cnab240
2
2
  module DefaultMixin
3
+
3
4
  def initialize_instance
4
5
  super
5
6
  Cnab240.defaults.each do |k, v|
@@ -0,0 +1,7 @@
1
+ module Cnab240
2
+ module SegmentoMixin
3
+
4
+ attr_accessor :lote
5
+
6
+ end
7
+ end
@@ -7,10 +7,10 @@ module Cnab240::Pagamentos
7
7
  string :controle_lote, :length => 4, :pad_byte => '0'
8
8
  string :controle_registro, :length => 1, :initial_value => '1', :pad_byte => '0'
9
9
 
10
- string :servico_operacao, :value => 'C', :pad_byte => ' '
10
+ string :servico_operacao, :length => 1, :initial_value => 'C', :pad_byte => ' '
11
11
  string :servico_tipo, :length => 2 , :pad_byte => '0'
12
12
  string :servico_forma, :length => 2, :pad_byte => '0'
13
- string :servico_layout, :value => '044', :pad_byte => '0'
13
+ string :servico_layout, :length => 3, :initial_value => '044', :pad_byte => '0'
14
14
 
15
15
  string :cnab_g004_1, :length => 1, :pad_byte => ' '
16
16
 
@@ -7,10 +7,10 @@ module Cnab240::PagamentosTitulos
7
7
  string :controle_lote, :length => 4, :pad_byte => '0'
8
8
  string :controle_registro, :length => 1, :initial_value => '1', :pad_byte => '0'
9
9
 
10
- string :servico_operacao, :value => 'C', :pad_byte => ' '
10
+ string :servico_operacao, :length => 1, :initial_value => 'C', :pad_byte => ' '
11
11
  string :servico_tipo, :length => 2 , :pad_byte => '0'
12
12
  string :servico_forma, :length => 2, :pad_byte => '0'
13
- string :servico_layout, :value => '040', :pad_byte => '0'
13
+ string :servico_layout, :length => 3, :initial_value => '040', :pad_byte => '0'
14
14
 
15
15
  string :cnab_g004_1, :length => 1, :pad_byte => ' '
16
16
 
@@ -5,7 +5,7 @@ module Cnab240::PagamentosTitulos
5
5
 
6
6
  string :controle_banco, :length => 3, :pad_byte => '0'
7
7
  string :controle_lote, :length => 4, :pad_byte => '0'
8
- string :controle_registro, :value => '5', :pad_byte => '0'
8
+ string :controle_registro, :length => 1, :initial_value => '5', :pad_byte => '0'
9
9
 
10
10
  string :cnab_g004_1, :length => 9, :pad_byte => '0'
11
11
  string :totais_qtde_registros, :length => 6, :pad_byte => '0'
@@ -5,7 +5,7 @@ module Cnab240::Pagamentos
5
5
 
6
6
  string :controle_banco, :length => 3, :pad_byte => '0'
7
7
  string :controle_lote, :length => 4, :pad_byte => '0'
8
- string :controle_registro, :value => '5', :pad_byte => '0'
8
+ string :controle_registro, :length => 1, :initial_value => '5', :pad_byte => '0'
9
9
 
10
10
  string :cnab_g004_1, :length => 9, :pad_byte => '0'
11
11
  string :totais_qtde_registros, :length => 6, :pad_byte => '0'
@@ -7,10 +7,10 @@ module Cnab240::PagamentosTributos
7
7
  string :controle_lote, :length => 4, :pad_byte => '0'
8
8
  string :controle_registro, :length => 1, :initial_value => '1', :pad_byte => '0'
9
9
 
10
- string :servico_operacao, :value => 'C', :pad_byte => ' '
10
+ string :servico_operacao, :length => 1, :initial_value => 'C', :pad_byte => ' '
11
11
  string :servico_tipo, :length => 2 , :pad_byte => '0'
12
12
  string :servico_forma, :length => 2, :pad_byte => '0'
13
- string :servico_layout, :value => '011', :pad_byte => '0'
13
+ string :servico_layout, :length => 3, :initial_value => '011', :pad_byte => '0'
14
14
 
15
15
  string :cnab_g004_1, :length => 1, :pad_byte => ' '
16
16
 
@@ -5,7 +5,7 @@ module Cnab240::PagamentosTributos
5
5
 
6
6
  string :controle_banco, :length => 3, :pad_byte => '0'
7
7
  string :controle_lote, :length => 4, :pad_byte => '0'
8
- string :controle_registro, :value => '5', :pad_byte => '0'
8
+ string :controle_registro, :length => 1, :initial_value => '5', :pad_byte => '0'
9
9
 
10
10
  string :cnab_g004_1, :length => 9, :pad_byte => '0'
11
11
  string :totais_qtde_registros, :length => 6, :pad_byte => '0'
@@ -2,13 +2,14 @@ module Cnab240
2
2
  class SegmentoA < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :controle_banco, :length => 3, :pad_byte => '0'
7
8
  string :controle_lote, :length => 4, :pad_byte => '0'
8
9
  string :controle_registro, :length => 1, :initial_value => '3', :pad_byte => '0'
9
10
 
10
11
  string :servico_numero_registro, :length => 5, :pad_byte => '0'
11
- string :servico_codigo_segmento, :value => 'A', :pad_byte => ' '
12
+ string :servico_codigo_segmento, :length => 1, :initial_value => 'A', :pad_byte => ' '
12
13
  string :servico_tipo_movimento, :length => 1, :pad_byte => '0'
13
14
  string :servico_codigo_movimento, :length => 2, :pad_byte => '0'
14
15
 
@@ -2,13 +2,14 @@ module Cnab240
2
2
  class SegmentoB < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :controle_banco, :length => 3, :pad_byte => '0'
7
8
  string :controle_lote, :length => 4, :pad_byte => '0'
8
9
  string :controle_registro, :length => 1, :initial_value => '3', :pad_byte => '0'
9
10
 
10
11
  string :servico_numero_registro, :length => 5, :pad_byte => '0'
11
- string :servico_codigo_segmento, :value => 'B', :pad_byte => ' '
12
+ string :servico_codigo_segmento, :length => 1, :initial_value => 'B', :pad_byte => ' '
12
13
 
13
14
  string :cnab240_g004_1, :length => 3, :pad_byte => ' '
14
15
 
@@ -2,13 +2,14 @@ module Cnab240
2
2
  class SegmentoC < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :controle_banco, :length => 3, :pad_byte => '0'
7
8
  string :controle_lote, :length => 4, :pad_byte => '0'
8
9
  string :controle_registro, :length => 1, :initial_value => '3', :pad_byte => '0'
9
10
 
10
11
  string :servico_numero_registro, :length => 5, :pad_byte => '0'
11
- string :servico_codigo_segmento, :value => 'C', :pad_byte => ' '
12
+ string :servico_codigo_segmento, :length => 1, :initial_value => 'C', :pad_byte => ' '
12
13
 
13
14
  string :cnab240_g004_1, :length => 3, :pad_byte => ' '
14
15
 
@@ -2,13 +2,14 @@ module Cnab240
2
2
  class SegmentoJ < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :controle_banco, :length => 3, :pad_byte => '0'
7
8
  string :controle_lote, :length => 4, :pad_byte => '0'
8
9
  string :controle_registro, :length => 1, :initial_value => '3', :pad_byte => '0'
9
10
 
10
11
  string :servico_numero_registro, :length => 5, :pad_byte => '0'
11
- string :servico_codigo_segmento, :value => 'J', :pad_byte => ' '
12
+ string :servico_codigo_segmento, :length => 1, :initial_value => 'J', :pad_byte => ' '
12
13
  string :servico_tipo_movimento, :length => 1, :pad_byte => '0'
13
14
  string :servico_codigo_movimento, :length => 2, :pad_byte => '0'
14
15
 
@@ -2,17 +2,18 @@ module Cnab240
2
2
  class SegmentoJ52 < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :controle_banco, :length => 3, :pad_byte => '0'
7
8
  string :controle_lote, :length => 4, :pad_byte => '0'
8
9
  string :controle_registro, :length => 1, :initial_value => '3', :pad_byte => '0'
9
10
 
10
11
  string :servico_numero_registro, :length => 5, :pad_byte => '0'
11
- string :servico_codigo_segmento, :value => 'J', :pad_byte => ' '
12
+ string :servico_codigo_segmento, :length => 1, :initial_value => 'J', :pad_byte => ' '
12
13
  string :servico_tipo_movimento, :length => 1, :pad_byte => '0'
13
14
  string :servico_codigo_movimento, :length => 2, :pad_byte => '0'
14
15
 
15
- string :cod_registro_opcional, :value => '52'
16
+ string :cod_registro_opcional, :length => 2, :initial_value => '52'
16
17
 
17
18
  string :sacado_tipo_inscricao, :length => 1, :pad_byte => '0'
18
19
  string :sacado_numero_inscricao, :length => 15, :pad_byte => '0'
@@ -2,13 +2,14 @@ module Cnab240
2
2
  class SegmentoN < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :controle_banco, :length => 3, :pad_byte => '0'
7
8
  string :controle_lote, :length => 4, :pad_byte => '0'
8
9
  string :controle_registro, :length => 1, :initial_value => '3', :pad_byte => '0'
9
10
 
10
11
  string :servico_numero_registro, :length => 5, :pad_byte => '0'
11
- string :servico_codigo_segmento, :value => 'N', :pad_byte => ' '
12
+ string :servico_codigo_segmento, :length => 1, :initial_value => 'N', :pad_byte => ' '
12
13
  string :servico_tipo_movimento, :length => 1, :pad_byte => '0'
13
14
  string :servico_codigo_movimento, :length => 2, :pad_byte => '0'
14
15
 
@@ -18,9 +19,42 @@ module Cnab240
18
19
  string :data_pagamento, :length => 8, :pad_byte => '0'
19
20
  string :valor_pagamento, :length => 15, :pad_byte => '0'
20
21
 
21
- string :informacoes_complementares, :length => 120, :pad_byte => ' '
22
+ # string :informacoes_complementares, :length => 120, :pad_byte => ' '
23
+ choice :n_complemento, :selection => :get_n do
24
+ string 0, :length => 120, :pad_byte => ' '
25
+ segmento_n1 1
26
+ segmento_n1 2
27
+ segmento_n3 3
28
+ segmento_n4 4
29
+ segmento_n5 5
30
+ segmento_n6 6
31
+ segmento_n7 7
32
+ segmento_n8 8
33
+ end
22
34
 
23
- string :ocorrencias, :length => 10, :pad_byte => ' '
35
+ string :ocorrencias, :length => 10, :pad_byte => ' '
36
+
37
+ def get_n
38
+ servico_forma_nX = {
39
+ '00' => 0,
40
+ '17' => 1,
41
+ '16' => 2,
42
+ '18' => 3,
43
+ '22' => 4,
44
+ '23' => 4,
45
+ '24' => 4,
46
+ '25' => 5,
47
+ '27' => 6,
48
+ '26' => 7,
49
+ '21' => 8
50
+ }
51
+ begin
52
+ servico_forma = lote.header.servico_forma
53
+ rescue
54
+ servico_forma = '00'
55
+ end
56
+ return servico_forma_nX[servico_forma]
57
+ end
24
58
 
25
59
  end
26
60
  end
@@ -0,0 +1,21 @@
1
+ module Cnab240
2
+ class SegmentoN1 < BinData::Record
3
+
4
+ include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
6
+
7
+ string :receita, :length => 6, :pad_byte => ' '
8
+ string :tipo_identificacao_contribuinte, :length => 2, :pad_byte => '0'
9
+ string :identificacao_contribuinte, :length => 14, :pad_byte => '0'
10
+ string :identificacao_tributo, :length => 2, :pad_byte => ' '
11
+
12
+ string :mes_ano_competencia, :length => 6, :pad_byte => '0'
13
+ string :valor_tributo, :length => 15, :pad_byte => '0'
14
+ string :valor_outras_entidades, :length => 15, :pad_byte => '0'
15
+ string :atualizacao_monetaria, :length => 15, :pad_byte => '0'
16
+
17
+ string :cnab, :length => 45, :pad_byte => ' '
18
+
19
+
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module Cnab240
2
+ class SegmentoN2 < BinData::Record
3
+
4
+ include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
6
+
7
+ string :receita, :length => 6, :pad_byte => ' '
8
+ string :tipo_identificacao_contribuinte, :length => 2, :pad_byte => '0'
9
+ string :identificacao_contribuinte, :length => 14, :pad_byte => '0'
10
+ string :identificacao_tributo, :length => 2, :pad_byte => ' '
11
+
12
+ string :periodo_apuracao, :length => 8, :pad_byte => '0'
13
+ string :numero_referencia, :length => 17, :pad_byte => '0'
14
+ string :valor_principal, :length => 15, :pad_byte => '0'
15
+ string :valor_multa, :length => 15, :pad_byte => '0'
16
+ string :valor_juros_encargos, :length => 15, :pad_byte => '0'
17
+ string :data_vencimento, :length => 8, :pad_byte => '0'
18
+
19
+ string :cnab, :length => 18, :pad_byte => ' '
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Cnab240
2
+ class SegmentoN3 < BinData::Record
3
+
4
+ include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
6
+
7
+ string :receita, :length => 6, :pad_byte => ' '
8
+ string :tipo_identificacao_contribuinte, :length => 2, :pad_byte => '0'
9
+ string :identificacao_contribuinte, :length => 14, :pad_byte => '0'
10
+ string :identificacao_tributo, :length => 2, :pad_byte => ' '
11
+
12
+ string :periodo_apuracao, :length => 8, :pad_byte => '0'
13
+ string :receita_bruta, :length => 15, :pad_byte => '0'
14
+ string :percentual, :length => 7, :pad_byte => '0'
15
+ string :valor_principal, :length => 15, :pad_byte => '0'
16
+ string :valor_multa, :length => 15, :pad_byte => '0'
17
+ string :valor_juros_encargos, :length => 15, :pad_byte => '0'
18
+
19
+ string :cnab, :length => 21, :pad_byte => ' '
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module Cnab240
2
+ class SegmentoN4 < BinData::Record
3
+
4
+ include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
6
+
7
+ string :receita, :length => 6, :pad_byte => ' '
8
+ string :tipo_identificacao_contribuinte, :length => 2, :pad_byte => '0'
9
+ string :identificacao_contribuinte, :length => 14, :pad_byte => '0'
10
+ string :identificacao_tributo, :length => 2, :pad_byte => ' '
11
+
12
+ string :vencimento, :length => 8, :pad_byte => '0'
13
+ string :ie_munic_declar, :length => 12, :pad_byte => '0'
14
+ string :divida_ativa_etiqueta, :length => 13, :pad_byte => '0'
15
+ string :periodo_referencia, :length => 6, :pad_byte => '0'
16
+ string :numero_parcela_notificacao, :length => 13, :pad_byte => '0'
17
+ string :valor_receita, :length => 15, :pad_byte => '0'
18
+ string :valor_juros_encargos, :length => 14, :pad_byte => '0'
19
+ string :valor_multa, :length => 14, :pad_byte => '0'
20
+
21
+ string :cnab, :length => 1, :pad_byte => ' '
22
+
23
+
24
+ end
25
+ end
@@ -0,0 +1,23 @@
1
+ module Cnab240
2
+ class SegmentoN5 < BinData::Record
3
+
4
+ include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
6
+
7
+ string :receita, :length => 6, :pad_byte => ' '
8
+ string :tipo_identificacao_contribuinte, :length => 2, :pad_byte => '0'
9
+ string :identificacao_contribuinte, :length => 14, :pad_byte => '0'
10
+ string :identificacao_tributo, :length => 2, :pad_byte => ' '
11
+
12
+ string :exercicio, :length => 4, :pad_byte => '0'
13
+ string :renavam, :length => 9, :pad_byte => '0'
14
+ string :uf, :length => 2, :pad_byte => ' '
15
+ string :municipio, :length => 5, :pad_byte => '0'
16
+ string :placa, :length => 7, :pad_byte => ' '
17
+ string :opcao_pagamento, :length => 1, :pad_byte => ' '
18
+
19
+ string :cnab, :length => 68, :pad_byte => ' '
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Cnab240
2
+ class SegmentoN6 < BinData::Record
3
+
4
+ include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
6
+
7
+ string :receita, :length => 6, :pad_byte => ' '
8
+ string :tipo_identificacao_contribuinte, :length => 2, :pad_byte => '0'
9
+ string :identificacao_contribuinte, :length => 14, :pad_byte => '0'
10
+ string :identificacao_tributo, :length => 2, :pad_byte => ' '
11
+
12
+ string :exercicio, :length => 4, :pad_byte => '0'
13
+ string :renavam, :length => 9, :pad_byte => '0'
14
+ string :uf, :length => 2, :pad_byte => ' '
15
+ string :municipio, :length => 5, :pad_byte => '0'
16
+ string :placa, :length => 7, :pad_byte => ' '
17
+ string :opcao_pagamento, :length => 1, :pad_byte => ' '
18
+
19
+ string :cnab, :length => 68, :pad_byte => ' '
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module Cnab240
2
+ class SegmentoN7 < BinData::Record
3
+
4
+ include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
6
+
7
+ string :receita, :length => 6, :pad_byte => ' '
8
+ string :tipo_identificacao_contribuinte, :length => 2, :pad_byte => '0'
9
+ string :identificacao_contribuinte, :length => 14, :pad_byte => '0'
10
+ string :identificacao_tributo, :length => 2, :pad_byte => ' '
11
+
12
+ string :exercicio, :length => 4, :pad_byte => '0'
13
+ string :renavam, :length => 9, :pad_byte => '0'
14
+ string :uf, :length => 2, :pad_byte => ' '
15
+ string :municipio, :length => 5, :pad_byte => '0'
16
+ string :placa, :length => 7, :pad_byte => ' '
17
+ string :opcao_pagamento, :length => 1, :pad_byte => ' '
18
+ string :opcao_retirada, :length => 1, :pad_byte => ' '
19
+ string :cnab, :length => 67, :pad_byte => ' '
20
+
21
+
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ module Cnab240
2
+ class SegmentoN8 < BinData::Record
3
+
4
+ include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
6
+
7
+ string :receita, :length => 6, :pad_byte => ' '
8
+ string :tipo_identificacao_contribuinte, :length => 2, :pad_byte => '0'
9
+ string :identificacao_contribuinte, :length => 14, :pad_byte => '0'
10
+
11
+
12
+ string :ie_munic_declar, :length => 8, :pad_byte => ' '
13
+
14
+ string :origem, :length => 16, :pad_byte => '0'
15
+ string :valor_principal, :length => 15, :pad_byte => '0'
16
+ string :atualizacao_monetaria, :length => 15, :pad_byte => ' '
17
+ string :valor_mora, :length => 15, :pad_byte => '0'
18
+ string :valor_multa, :length => 15, :pad_byte => ' '
19
+ string :data_vencimento, :length => 8, :pad_byte => ' '
20
+ string :periodo_parcela, :length => 6, :pad_byte => ' '
21
+
22
+
23
+
24
+ end
25
+ end
@@ -2,13 +2,14 @@ module Cnab240
2
2
  class SegmentoO < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :controle_banco, :length => 3, :pad_byte => '0'
7
8
  string :controle_lote, :length => 4, :pad_byte => '0'
8
9
  string :controle_registro, :length => 1, :initial_value => '3', :pad_byte => '0'
9
10
 
10
11
  string :servico_numero_registro, :length => 5, :pad_byte => '0'
11
- string :servico_codigo_segmento, :value => 'O', :pad_byte => ' '
12
+ string :servico_codigo_segmento, :length => 1, :initial_value => 'O', :pad_byte => ' '
12
13
  string :servico_tipo_movimento, :length => 1, :pad_byte => '0'
13
14
  string :servico_codigo_movimento, :length => 2, :pad_byte => '0'
14
15
 
@@ -2,13 +2,14 @@ module Cnab240
2
2
  class SegmentoW < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :controle_banco, :length => 3, :pad_byte => '0'
7
8
  string :controle_lote, :length => 4, :pad_byte => '0'
8
9
  string :controle_registro, :length => 1, :initial_value => '3', :pad_byte => '0'
9
10
 
10
11
  string :servico_numero_registro, :length => 5, :pad_byte => '0'
11
- string :servico_codigo_segmento, :value => 'W', :pad_byte => ' '
12
+ string :servico_codigo_segmento, :length => 1, :initial_value => 'W', :pad_byte => ' '
12
13
  string :complemento, :length => 1, :pad_byte => '0'
13
14
 
14
15
  string :uso_informacoes_1_e_2, :length => 1, :pad_byte => ' '
@@ -2,6 +2,7 @@ module Cnab240
2
2
  class SegmentoW1 < BinData::Record
3
3
 
4
4
  include Cnab240::DefaultMixin
5
+ include Cnab240::SegmentoMixin
5
6
 
6
7
  string :identificador_tributo, :length => 2, :pad_byte => ' '
7
8
  string :receita, :length => 6, :pad_byte => ' '