siap_exporter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/siap_exporter.rb +211 -0
  3. metadata +73 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: bc212a11bfb77c9844ea93aac756caa4bfb7e011
4
+ data.tar.gz: 41198c470adc2ce60d460ac8c2fb3aae22475214
5
+ SHA512:
6
+ metadata.gz: c0aecd73b2e2db4a5777acdde0fa86f9eb4c65d2c8f2fc90e6c8a11c3b56f667c3532cbf2e5e2b6aa6d94d1cd49281978cf5a3b9ba83d263edf732485ecba160
7
+ data.tar.gz: df45f8a32e18ff52f1ab804622044faa9a8e1358795d51ff5a09d87a9a509a2829cc1023735fae47b11f6b9f5541c631e4ea3a68871370c8681bcefffc8fbdc1
@@ -0,0 +1,211 @@
1
+ require 'fixed_width_dsl'
2
+ require 'date'
3
+
4
+ module SiapExporter
5
+ TIPO_COMPROBANTE = {
6
+ 'A' => 1,
7
+ 'B' => 6,
8
+ 'NCA' => 3
9
+ }
10
+ TIPO_ALICUOTA = {
11
+ 5 => [:gravado_21, :iva_21],
12
+ 4 => [:gravado_10, :iva_10]
13
+ }
14
+
15
+ class ComprasVentas
16
+
17
+ AlicuotaVenta = FixedWidthDSL.define do
18
+ field :tipo_comprobante, 3, :integer, '0'
19
+ field :punto_de_venta, 5, :integer, '0'
20
+ field :numero_comprobante, 20, :integer, '0'
21
+ field :gravado, 15, :integer, '0'
22
+ field :tipo_alicuota, 4, :integer, '0'
23
+ field :impuesto, 15, :integer, '0'
24
+ end
25
+
26
+ Venta = FixedWidthDSL.define do
27
+ field :fecha, 8, :integer, '0'
28
+ field :tipo_comprobante, 3, :integer, '0'
29
+ field :punto_de_venta, 5, :integer, '0'
30
+ field :numero_comprobante, 20, :integer, '0'
31
+ field :numero_comprobante_hasta, 20, :integer, '0'
32
+ field :codigo_documento_comprador, 2, :integer, '0'
33
+ field :numero_identificacion_comprador, 20, :integer, '0'
34
+ field :denominacion_comprador, 30, :string, '-'
35
+ field :total, 15, :integer, '0'
36
+ field :no_gravado, 15, :integer, '0'
37
+ field :no_categorizados, 15, :integer, '0'
38
+ field :exento, 15, :integer, '0'
39
+ field :impuestos_nacionales, 15, :integer, '0'
40
+ field :ingresos_brutos, 15, :integer, '0'
41
+ field :impuestos_municipales, 15, :integer, '0'
42
+ field :impuestos_internos, 15, :integer, '0'
43
+ field :moneda, 3, :string, '0'
44
+ field :cambio, 10, :integer, '0'
45
+ field :cantidad_de_alicuotas, 1, :integer, '0'
46
+ field :codigo_de_operacion, 1, :integer, '0'
47
+ field :otros_tributos, 15, :integer, '0'
48
+ field :vencimiento_de_pago, 8, :integer, '0'
49
+ end
50
+
51
+ AlicuotaCompra = FixedWidthDSL.define do
52
+ field :tipo_comprobante, 3, :integer, '0'
53
+ field :punto_de_venta, 5, :integer, '0'
54
+ field :numero_comprobante, 20, :integer, '0'
55
+ field :codigo_documento_vendedor, 2, :integer, '0'
56
+ field :numero_identificacion_vendedor, 20, :integer, '0'
57
+ field :gravado, 15, :integer, '0'
58
+ field :tipo_alicuota, 4, :integer, '0'
59
+ field :impuesto, 15, :integer, '0'
60
+ end
61
+
62
+ Compra = FixedWidthDSL.define do
63
+ field :fecha, 8, :string
64
+ field :tipo_comprobante, 3, :integer, '0'
65
+ field :punto_de_venta, 5, :integer, '0'
66
+ field :numero_comprobante, 20, :integer, '0'
67
+ field :despacho_importacion, 16, :string, '-'
68
+ field :codigo_documento_vendedor, 2, :integer, '0'
69
+ field :numero_identificacion_vendedor, 20, :integer, '0'
70
+ field :denominacion_vendedor, 30, :string, '-'
71
+ field :total, 15, :integer, '0'
72
+ field :no_gravado, 15, :integer, '0'
73
+ field :exento, 15, :integer, '0'
74
+ field :a_cuenta_iva, 15, :integer, '0'
75
+ field :impuestos_nacionales, 15, :integer, '0'
76
+ field :ingresos_brutos, 15, :integer, '0'
77
+ field :impuestos_municipales, 15, :integer, '0'
78
+ field :impuestos_internos, 15, :integer, '0'
79
+ field :moneda, 3, :string, '0'
80
+ field :cambio, 10, :integer, '0'
81
+ field :cantidad_de_alicuotas, 1, :integer, '0'
82
+ field :codigo_de_operacion, 1, :integer, '0'
83
+ field :credito_fiscal, 15, :integer, '0'
84
+ field :otros_tributos, 15, :integer, '0'
85
+ field :cuit_emisor_corredor, 11, :integer, '0'
86
+ field :denominacion_emisor_corredor, 30, :string, '-'
87
+ field :iva_comision, 15, :integer, '0'
88
+ end
89
+
90
+ def self.generate comprobantes
91
+ new(comprobantes).generate
92
+ end
93
+
94
+ def initialize comprobantes
95
+ @comprobantes = comprobantes
96
+ @ventas = []
97
+ @alicuotas_ventas = []
98
+ @compras = []
99
+ @alicuotas_compras = []
100
+ end
101
+
102
+ def generate
103
+ @comprobantes.each do |comprobante|
104
+ if comprobante[:numero_identificacion_comprador]
105
+ # las alicuotas se deben generar antes que la venta, porque la
106
+ # cantidad se indica en el registro de venta
107
+ alicuotas_venta(comprobante)
108
+ venta(comprobante)
109
+ else
110
+ alicuotas_compra(comprobante)
111
+ compra(comprobante)
112
+ end
113
+ end
114
+ {
115
+ ventas: @ventas.join("\n"),
116
+ alicuotas_ventas: @alicuotas_ventas.join("\n"),
117
+ compras: @compras.join("\n"),
118
+ alicuotas_compras: @alicuotas_compras.join("\n")
119
+ }
120
+ end
121
+
122
+ private
123
+
124
+ def alicuotas_venta comprobante
125
+ comprobante[:cantidad_de_alicuotas] = 0
126
+ TIPO_ALICUOTA.each do |id, claves|
127
+ gravado = comprobante[claves[0]]
128
+ if gravado
129
+ alicuota = comprobante.merge(
130
+ tipo_comprobante: tipo_comprobante(comprobante[:tipo_comprobante]),
131
+ gravado: gravado,
132
+ tipo_alicuota: id,
133
+ impuesto: comprobante[claves[1]])
134
+ @alicuotas_ventas << AlicuotaVenta.apply(alicuota)
135
+ comprobante[:cantidad_de_alicuotas] += 1
136
+ end
137
+ end
138
+ end
139
+
140
+ def venta comprobante
141
+ comprobante = comprobante.merge(
142
+ fecha: comprobante[:fecha].gsub('-', ''),
143
+ tipo_comprobante: tipo_comprobante(comprobante[:tipo_comprobante]),
144
+ numero_comprobante_hasta: comprobante[:numero_comprobante],
145
+ codigo_documento_comprador: 80,
146
+ total: total(comprobante),
147
+ no_categorizados: 0,
148
+ impuestos_nacionales: 0,
149
+ ingresos_brutos: 0,
150
+ impuestos_municipales: 0,
151
+ impuestos_internos: 0,
152
+ moneda: 'PES',
153
+ cambio: 1000000,
154
+ codigo_de_operacion: 0,
155
+ otros_tributos: 0,
156
+ vencimiento_de_pago: 0)
157
+ @ventas << Venta.apply(comprobante)
158
+ end
159
+
160
+ def alicuotas_compra comprobante
161
+ comprobante[:cantidad_de_alicuotas] = 0
162
+ TIPO_ALICUOTA.each do |id, claves|
163
+ gravado = comprobante[claves[0]]
164
+ if gravado
165
+ alicuota = comprobante.merge(
166
+ codigo_documento_vendedor: 80,
167
+ tipo_comprobante: tipo_comprobante(comprobante[:tipo_comprobante]),
168
+ gravado: gravado,
169
+ tipo_alicuota: id,
170
+ impuesto: comprobante[claves[1]])
171
+ @alicuotas_compras << AlicuotaCompra.apply(alicuota)
172
+ comprobante[:cantidad_de_alicuotas] += 1
173
+ end
174
+ end
175
+ end
176
+
177
+ def compra comprobante
178
+ comprobante = comprobante.merge(
179
+ fecha: Date.parse(comprobante[:fecha]).strftime('%Y%m%d'),
180
+ tipo_comprobante: tipo_comprobante(comprobante[:tipo_comprobante]),
181
+ despacho_importacion: '',
182
+ codigo_documento_vendedor: 80,
183
+ total: total(comprobante),
184
+ a_cuenta_iva: 0,
185
+ impuestos_nacionales: 0,
186
+ ingresos_brutos: 0,
187
+ impuestos_municipales: 0,
188
+ impuestos_internos: 0,
189
+ moneda: 'PES',
190
+ cambio: 1000000,
191
+ codigo_de_operacion: 0,
192
+ credito_fiscal: 0,
193
+ otros_tributos: 0,
194
+ cuit_emisor_corredor: 0,
195
+ denominacion_emisor_corredor: '',
196
+ iva_comision: 0
197
+ )
198
+ @compras << Compra.apply(comprobante)
199
+ end
200
+
201
+
202
+ def tipo_comprobante tipo
203
+ TIPO_COMPROBANTE.fetch(tipo)
204
+ end
205
+
206
+ def total comprobante
207
+ comprobante.values_at(:gravado_21, :iva_21, :gravado_10, :iva_10,
208
+ :no_gravado, :exento).compact.reduce(0, :+)
209
+ end
210
+ end
211
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: siap_exporter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Eloy Espinaco
8
+ - Lionel Hsu
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-10-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: fixed_width_dsl
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '='
19
+ - !ruby/object:Gem::Version
20
+ version: 0.1.1
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '='
26
+ - !ruby/object:Gem::Version
27
+ version: 0.1.1
28
+ - !ruby/object:Gem::Dependency
29
+ name: cutest
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.0'
42
+ description: Ayuda a generar archivos para poder ser importados enel siap desde ruby.
43
+ email: eloyesp@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/siap_exporter.rb
49
+ homepage: https://github.com/bluelemons/siap-exporter
50
+ licenses:
51
+ - AGPL-3.0+
52
+ metadata: {}
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 2.5.1
70
+ signing_key:
71
+ specification_version: 4
72
+ summary: Exporta archivos para el SIAp de AFIP
73
+ test_files: []