sunat_invoice 0.1.1 → 0.2.0
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/lib/sunat_invoice/catalogs.rb +144 -8
- data/lib/sunat_invoice/item.rb +3 -1
- data/lib/sunat_invoice/model.rb +9 -0
- data/lib/sunat_invoice/response_parser.rb +1 -0
- data/lib/sunat_invoice/tax.rb +1 -0
- data/lib/sunat_invoice/testing_support/signature_helper.rb +3 -3
- data/lib/sunat_invoice/trade_calculations.rb +3 -1
- data/sunat_invoice.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8c41fdc0f425786c5ce10ffb989fb2d38eb4838c019c1e5ed97777a57ec4246d
|
|
4
|
+
data.tar.gz: 021b2a2733ba5a3c980fd14aa09fce7d9ae3ccef2508571a6edf559ee2f57d1b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 523df13382787cd1e858e2c22f17dd13bc92ea1d6a11bb35d2470ffdfc95700207e1a11fa68642b2da7a8ad722f9d6dd710500ca291c1b6bc5617677061db72d
|
|
7
|
+
data.tar.gz: 3ca5bc91a0d178ab7ac41f574fbd052032097077819d09ee8011fbf029cd80f95dc4408d08de5d67d72047f8117ec8c6b4b79b5949d6bd621b9a5c555c46ae43
|
data/.rubocop.yml
CHANGED
|
@@ -8,20 +8,49 @@ module SunatInvoice
|
|
|
8
8
|
CATALOG_01 = [
|
|
9
9
|
'01', # FACTURA
|
|
10
10
|
'03', # BOLETA DE VENTA
|
|
11
|
+
'06', # CARTA DE PORTE AÉREO
|
|
11
12
|
'07', # NOTA DE CREDITO
|
|
12
13
|
'08', # NOTA DE DEBITO
|
|
13
14
|
'09', # GUIA DE REMISIÓN REMITENTE
|
|
14
15
|
'12', # TICKET DE MAQUINA REGISTRADORA
|
|
15
16
|
'13', # DOCUMENTO EMITIDO POR BANCOS, INSTITUCIONES FINANCIERAS
|
|
17
|
+
'14', # RECIBO DE SERVICIOS PÚBLICOS
|
|
18
|
+
'15',
|
|
19
|
+
# BOLETOS EMITIDOS POR SERVICIO TRANSPORTE PÚBLICO TERRESTRE REGULAR
|
|
20
|
+
# URBANO DE PASAJEROS Y FERROVIARIO PÚBLICO DE PASAJEROS
|
|
21
|
+
'16',
|
|
22
|
+
# BOLETOS EMITIDOS POR SERVICIO TRANSPORTE PÚBLICO TERRESTRE
|
|
23
|
+
# INTERPROVINCIAL DE PASAJEROS
|
|
16
24
|
'18', # DOCUMENTOS EMITIDOS POR LAS AFP
|
|
25
|
+
'20', # COMPROBANTE DE RETENCIÓN
|
|
26
|
+
'21',
|
|
27
|
+
# CONOCIMIENTO DE EMBARQUE POR EL SERVICIO DE TRANSPORTE DE CARGA MARÍTIMA
|
|
28
|
+
'24', # CERTIFICADO DE PAGO DE REGALÍAS EMITIDAS POR PERUPETRO S.A.
|
|
17
29
|
'31', # GUIA DE REMISIÓN TRANSPORTISTA
|
|
30
|
+
'37',
|
|
31
|
+
# DOCUMENTOS EMITIDOS POR CONCESIONARIOS DE SERVICIO DE REVISIONES
|
|
32
|
+
# TÉCNICAS
|
|
33
|
+
'40', # COMPRANTE DE PERCEPCIÓN
|
|
34
|
+
'43', # BOLETO DE COMPAÑIAS DE AVIACIÓN TRANSPORTE AÉREO NO REGULAR
|
|
35
|
+
'45',
|
|
36
|
+
# DOCUMENTOS EMITIDOS POR CENTROS EDUCATIVOS Y CULTURALES, UNIVERSIDADES,
|
|
37
|
+
# ASOCIACIONES Y FUNDACIONES
|
|
38
|
+
'56', # COMPROBANTE DE PAGO SEAE
|
|
39
|
+
'71', # GUIA DE REMISIÓN REMITENTE COMPLEMENTARIA
|
|
40
|
+
'72' # GUIA DE REMISIÓN TRANSPORTISTA COMPLEMENTARIA
|
|
41
|
+
|
|
18
42
|
].freeze
|
|
19
43
|
|
|
20
44
|
# Tipo de Tributo
|
|
21
45
|
CATALOG_05 = [
|
|
22
46
|
'1000', # IGV
|
|
47
|
+
'1016', # IVAP
|
|
23
48
|
'2000', # ISC
|
|
24
|
-
'
|
|
49
|
+
'9995', # EXP - EXPORTACION
|
|
50
|
+
'9996', # GRA - GRATUITO
|
|
51
|
+
'9997', # EXO - EXONERADO
|
|
52
|
+
'9998', # INA - INAFECTO
|
|
53
|
+
'9999' # OTROS
|
|
25
54
|
].freeze
|
|
26
55
|
|
|
27
56
|
# Tipo de Documentos de Identidad
|
|
@@ -31,7 +60,11 @@ module SunatInvoice
|
|
|
31
60
|
'4', # CARNET DE EXTRANJERIA
|
|
32
61
|
'6', # REG. UNICO DE CONTRIBUYENTES
|
|
33
62
|
'7', # PASAPORTE
|
|
34
|
-
'A'
|
|
63
|
+
'A', # CED. DIPLOMATICA DE IDENTIDAD
|
|
64
|
+
'B', # DOCUMENTO IDENTIDAD PAIS RESIDENCIA - NO DOMICILIADO
|
|
65
|
+
'C', # TAX IDENTIFICATION NUMBER - TIN – DOC TRIB PP.NN
|
|
66
|
+
'D', # IDENTIFICATION NUMBER - IN – DOC TRIB PP.JJ
|
|
67
|
+
'E' # TARJETA ANDINA DE MIGRACION - TAM
|
|
35
68
|
].freeze
|
|
36
69
|
|
|
37
70
|
# Tipo de Afectación del IGV
|
|
@@ -43,7 +76,9 @@ module SunatInvoice
|
|
|
43
76
|
'14', # Gravado – Retiro por publicidad
|
|
44
77
|
'15', # Gravado – Bonificaciones
|
|
45
78
|
'16', # Gravado – Retiro por entrega a trabajadores
|
|
79
|
+
'17', # Gravado –IVAP
|
|
46
80
|
'20', # Exonerado - Operación Onerosa
|
|
81
|
+
'21', # Exonerado - Transferencia Gratuita
|
|
47
82
|
'30', # Inafecto - Operación Onerosa
|
|
48
83
|
'31', # Inafecto – Retiro por Bonificación
|
|
49
84
|
'32', # Inafecto – Retiro
|
|
@@ -58,7 +93,7 @@ module SunatInvoice
|
|
|
58
93
|
CATALOG_08 = [
|
|
59
94
|
'01', # Sistema al valor
|
|
60
95
|
'02', # Aplicación del Monto Fijo
|
|
61
|
-
'03'
|
|
96
|
+
'03' # Sistema de Precios de Venta al Público
|
|
62
97
|
].freeze
|
|
63
98
|
|
|
64
99
|
# Tipo de Nota de Crédito Electrónica
|
|
@@ -71,13 +106,19 @@ module SunatInvoice
|
|
|
71
106
|
'06', # Devolución total
|
|
72
107
|
'07', # Devolución por ítem
|
|
73
108
|
'08', # Bonificación
|
|
74
|
-
'09'
|
|
109
|
+
'09', # Disminución en el valor
|
|
110
|
+
'10', # Otros Conceptos
|
|
111
|
+
'11', # Ajustes de operaciones de exportación
|
|
112
|
+
'12' # Ajustes afectos al IVAP
|
|
75
113
|
].freeze
|
|
76
114
|
|
|
77
115
|
# Tipo de Nota de Débito Electrónica
|
|
78
116
|
CATALOG_10 = [
|
|
79
117
|
'01', # Intereses por mora
|
|
80
|
-
'02'
|
|
118
|
+
'02', # Aumento en el valor
|
|
119
|
+
'03', # Penalidades/ otros conceptos
|
|
120
|
+
'10', # Ajustes de operaciones de exportación
|
|
121
|
+
'11' # Ajustes afectos al IVAP
|
|
81
122
|
].freeze
|
|
82
123
|
|
|
83
124
|
# Resumen Diario de Boletas de Ventas Electrónicas y Notas Electrónicas
|
|
@@ -93,6 +134,8 @@ module SunatInvoice
|
|
|
93
134
|
# Documentos Relacionados Tributarios
|
|
94
135
|
CATALOG_12 = [
|
|
95
136
|
'01', # Factura – emitida para corregir error en el RUC
|
|
137
|
+
'02', # Factura – emitida por anticipos
|
|
138
|
+
'03', # Boleta de Venta – emitida por anticipos
|
|
96
139
|
'04', # Ticket de Salida - ENAPU
|
|
97
140
|
'05', # Código SCOP
|
|
98
141
|
'99' # Otros
|
|
@@ -100,6 +143,7 @@ module SunatInvoice
|
|
|
100
143
|
|
|
101
144
|
# Otros conceptos tributarios
|
|
102
145
|
CATALOG_14 = [
|
|
146
|
+
'1000', # Total valor de venta –operaciones exportadas
|
|
103
147
|
'1001', # Total valor de venta - operaciones gravadas
|
|
104
148
|
'1002', # Total valor de venta - operaciones inafectas
|
|
105
149
|
'1003', # Total valor de venta - operaciones exoneradas
|
|
@@ -109,7 +153,8 @@ module SunatInvoice
|
|
|
109
153
|
'2002', # Retenciones
|
|
110
154
|
'2003', # Detracciones
|
|
111
155
|
'2004', # Bonificaciones
|
|
112
|
-
'2005'
|
|
156
|
+
'2005', # Total descuentos
|
|
157
|
+
'3001' # FISE (Ley 29852) Fondo Inclusión Social Energético
|
|
113
158
|
].freeze
|
|
114
159
|
|
|
115
160
|
# Elementos adicionales en la Factura y/o Boleta de Venta Electrónica
|
|
@@ -120,7 +165,7 @@ module SunatInvoice
|
|
|
120
165
|
# GRATUITAMENTE”
|
|
121
166
|
'2000', # Leyenda “COMPROBANTE DE PERCEPCIÓN”
|
|
122
167
|
'2001',
|
|
123
|
-
# Leyenda “BIENES TRANSFERIDOS EN LA AMAZONÍA REGIÓN
|
|
168
|
+
# Leyenda “BIENES TRANSFERIDOS EN LA AMAZONÍA REGIÓN SELVA PARA SER
|
|
124
169
|
# CONSUMIDOS EN LA MISMA”
|
|
125
170
|
'2002',
|
|
126
171
|
# Leyenda “SERVICIOS PRESTADOS EN LA AMAZONÍA REGIÓN SELVA PARA SER
|
|
@@ -129,6 +174,9 @@ module SunatInvoice
|
|
|
129
174
|
# Leyenda “CONTRATOS DE CONSTRUCCIÓN EJECUTADOS EN LA AMAZONÍA REGIÓN
|
|
130
175
|
# SELVA”
|
|
131
176
|
'2004', # Leyenda “Agencia de Viaje - Paquete turístico”
|
|
177
|
+
'2005', # Leyenda “Venta realizada por emisor itinerante”
|
|
178
|
+
'2006', # Leyenda: Operación sujeta a detracción
|
|
179
|
+
'2007', # Leyenda: Operación sujeta a IVAP
|
|
132
180
|
'3000', # Detracciones: CODIGO DE BB Y SS SUJETOS A DETRACCION
|
|
133
181
|
'3001', # Detracciones: NUMERO DE CTA EN EL BN
|
|
134
182
|
'3002',
|
|
@@ -163,9 +211,26 @@ module SunatInvoice
|
|
|
163
211
|
'4008',
|
|
164
212
|
# Beneficio Hospedajes: Paquete turístico – Tipo documento identidad del
|
|
165
213
|
# huésped
|
|
166
|
-
'4009'
|
|
214
|
+
'4009',
|
|
167
215
|
# Beneficio Hospedajes: Paquete turístico – Numero de documento identidad
|
|
168
216
|
# de huésped
|
|
217
|
+
'5000', # Proveedores Estado: Número de Expediente
|
|
218
|
+
'5001', # Proveedores Estado : Código de unidad ejecutora
|
|
219
|
+
'5002', # Proveedores Estado : N° de proceso de selección
|
|
220
|
+
'5003', # Proveedores Estado : N° de contrato
|
|
221
|
+
'6000', # Comercialización de Oro : Código Unico Concesión Minera
|
|
222
|
+
'6001', # Comercialización de Oro : N° declaración compromiso
|
|
223
|
+
'6002', # Comercialización de Oro : N° Reg. Especial .Comerci. Oro
|
|
224
|
+
'6003',
|
|
225
|
+
# Comercialización de Oro : N° Resolución que autoriza Planta de
|
|
226
|
+
# Beneficio
|
|
227
|
+
'6004', # Comercialización de Oro : Ley Mineral (% concent. oro)
|
|
228
|
+
'7000',
|
|
229
|
+
# Primera venta de mercancía identificable entre usuarios de la zona
|
|
230
|
+
# comercial
|
|
231
|
+
'7001'
|
|
232
|
+
# Venta exonerada del IGV-ISC-IPM. Prohibida la venta fuera de la zona
|
|
233
|
+
# comercial de Tacna
|
|
169
234
|
].freeze
|
|
170
235
|
|
|
171
236
|
# Tipo de Precio de Venta Unitario
|
|
@@ -173,5 +238,76 @@ module SunatInvoice
|
|
|
173
238
|
'01', # Precio unitario (incluye el IGV)
|
|
174
239
|
'02' # Valor referencial unitario en operaciones no onerosas
|
|
175
240
|
].freeze
|
|
241
|
+
|
|
242
|
+
# Tipo de Operación
|
|
243
|
+
CATALOG_17 = [
|
|
244
|
+
'01', # Venta Interna
|
|
245
|
+
'02', # Exportación de bienes
|
|
246
|
+
'03', # No Domiciliados
|
|
247
|
+
'04', # Venta Interna – Anticipos
|
|
248
|
+
'05', # Venta Itinerante
|
|
249
|
+
'06', # Factura Guía
|
|
250
|
+
'07', # Venta Arroz Pilado
|
|
251
|
+
'08', # Factura - Comprobante de Percepción
|
|
252
|
+
'10', # Factura - Guía remitente
|
|
253
|
+
'11', # Factura - Guía transportista
|
|
254
|
+
'12', # Boleta de venta – Comprobante de Percepción
|
|
255
|
+
'13', # Gasto Deducible Persona Natural
|
|
256
|
+
'14',
|
|
257
|
+
# Exportación de servicios – Prestación de servicios de hospedaje No Dom
|
|
258
|
+
'15', # Exportación de servicios – Transporte de navieras
|
|
259
|
+
'16',
|
|
260
|
+
# Exportación de servicios – Servicios a naves y aeronaves de bandera
|
|
261
|
+
# extranjera
|
|
262
|
+
'17', # Exportación de servicios – RES
|
|
263
|
+
'18',
|
|
264
|
+
# Exportación de servicios - Servicios que conformen un Paquete Turístico
|
|
265
|
+
'19',
|
|
266
|
+
# Exportación de servicios – Servicios complementarios al transporte de
|
|
267
|
+
# carga
|
|
268
|
+
'20',
|
|
269
|
+
# Exportación de servicios – Suministro de energía eléctrica a favor de
|
|
270
|
+
# sujetos domiciliados en ZED
|
|
271
|
+
'21'
|
|
272
|
+
# Exportación de servicios – Prestación servicios realizados parcialmente
|
|
273
|
+
# en el extranjero
|
|
274
|
+
].freeze
|
|
275
|
+
|
|
276
|
+
# Modalidad de traslado
|
|
277
|
+
CATALOG_18 = [
|
|
278
|
+
'01', # Transporte público
|
|
279
|
+
'02' # Transporte privado
|
|
280
|
+
].freeze
|
|
281
|
+
|
|
282
|
+
# Resumen diario de boletas de venta y notas electrónicas
|
|
283
|
+
# Códigos de estado de ítem
|
|
284
|
+
CATALOG_19 = [
|
|
285
|
+
'1', # Adicionar
|
|
286
|
+
'2', # Modificar
|
|
287
|
+
'3' # Anulado
|
|
288
|
+
].freeze
|
|
289
|
+
|
|
290
|
+
# Motivos de traslado
|
|
291
|
+
CATALOG_20 = [
|
|
292
|
+
'01', # Venta
|
|
293
|
+
'14', # Venta sujeta a confirmación del comprador
|
|
294
|
+
'02', # Compra
|
|
295
|
+
'04', # Traslado entre establecimientos de la misma empresa
|
|
296
|
+
'08', # Importación
|
|
297
|
+
'09', # Exportación
|
|
298
|
+
'18', # Traslado emisor itinerante CP
|
|
299
|
+
'19', # Traslado a zona primaria
|
|
300
|
+
'13' # Otros
|
|
301
|
+
].freeze
|
|
302
|
+
|
|
303
|
+
# Documentos relacionados-aplicable solo para Guía de remisión electrónica
|
|
304
|
+
CATALOG_21 = [
|
|
305
|
+
'01', # Numeración DAM
|
|
306
|
+
'02', # Número de orden de entrega
|
|
307
|
+
'03', # Número SCOP
|
|
308
|
+
'04', # Número de manifiesto de carga
|
|
309
|
+
'05', # Número de constancia de detracción
|
|
310
|
+
'06' # Otros
|
|
311
|
+
].freeze
|
|
176
312
|
end
|
|
177
313
|
end
|
data/lib/sunat_invoice/item.rb
CHANGED
data/lib/sunat_invoice/model.rb
CHANGED
|
@@ -7,5 +7,14 @@ module SunatInvoice
|
|
|
7
7
|
send("#{key}=", value) if respond_to?("#{key}=")
|
|
8
8
|
end
|
|
9
9
|
end
|
|
10
|
+
|
|
11
|
+
def to_hash
|
|
12
|
+
hash = {}
|
|
13
|
+
instance_variables.map do |var|
|
|
14
|
+
var_name = var.to_s.split('@')[1]
|
|
15
|
+
hash[var_name] = instance_variable_get(var)
|
|
16
|
+
end
|
|
17
|
+
hash
|
|
18
|
+
end
|
|
10
19
|
end
|
|
11
20
|
end
|
data/lib/sunat_invoice/tax.rb
CHANGED
|
@@ -12,17 +12,17 @@ module SignatureHelper
|
|
|
12
12
|
File.open("#{keys_dir}/cert_file", 'w') { |f| f.puts cert.to_pem }
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
def self.generate_certificate(
|
|
15
|
+
def self.generate_certificate(pkey)
|
|
16
16
|
name = OpenSSL::X509::Name.parse('CN=example.com/C=EE')
|
|
17
17
|
cert = OpenSSL::X509::Certificate.new
|
|
18
18
|
cert.version = 2
|
|
19
19
|
cert.serial = 0
|
|
20
20
|
cert.not_before = Time.now
|
|
21
21
|
cert.not_after = cert.not_before + 1 * 365 * 24 * 60 * 60
|
|
22
|
-
cert.public_key =
|
|
22
|
+
cert.public_key = pkey.public_key
|
|
23
23
|
cert.subject = name
|
|
24
24
|
cert.issuer = name
|
|
25
|
-
cert.sign
|
|
25
|
+
cert.sign pkey, OpenSSL::Digest::SHA1.new
|
|
26
26
|
cert
|
|
27
27
|
end
|
|
28
28
|
end
|
|
@@ -26,7 +26,8 @@ module SunatInvoice
|
|
|
26
26
|
total_code = get_total_code(item.taxes.first)
|
|
27
27
|
if total_code
|
|
28
28
|
@sale_totals[total_code] = 0 unless @sale_totals[total_code]
|
|
29
|
-
@sale_totals[total_code] = (@sale_totals[total_code] + item.bi_value)
|
|
29
|
+
@sale_totals[total_code] = (@sale_totals[total_code] + item.bi_value)
|
|
30
|
+
.round(2)
|
|
30
31
|
end
|
|
31
32
|
end
|
|
32
33
|
end
|
|
@@ -44,6 +45,7 @@ module SunatInvoice
|
|
|
44
45
|
|
|
45
46
|
def get_total_code(tax)
|
|
46
47
|
return unless tax
|
|
48
|
+
|
|
47
49
|
case tax.tax_type
|
|
48
50
|
# TODO: :isc
|
|
49
51
|
when :igv
|
data/sunat_invoice.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = 'sunat_invoice'
|
|
5
|
-
s.version = '0.
|
|
5
|
+
s.version = '0.2.0'
|
|
6
6
|
s.summary = 'Ruby gem to use SUNAT Electronic Billing from your app'
|
|
7
7
|
s.description = 'Generate and send Electronic Invoices to SUNAT'
|
|
8
8
|
s.authors = ['César Carruitero']
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sunat_invoice
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- César Carruitero
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-
|
|
11
|
+
date: 2019-12-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: nokogiri
|