sw_fac 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +8 -0
  3. data/.travis.yml +5 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +26 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +39 -0
  8. data/Rakefile +10 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/lib/cadena/ComercioExterior11.xslt +181 -0
  12. data/lib/cadena/Pagos10.xslt +165 -0
  13. data/lib/cadena/TuristaPasajeroExtranjero.xslt +40 -0
  14. data/lib/cadena/aerolineas.xslt +50 -0
  15. data/lib/cadena/cadena33.xslt +349 -0
  16. data/lib/cadena/certificadodedestruccion.xslt +60 -0
  17. data/lib/cadena/cfdiregistrofiscal.xslt +19 -0
  18. data/lib/cadena/cfdv33.xsd +737 -0
  19. data/lib/cadena/consumodecombustibles.xslt +108 -0
  20. data/lib/cadena/detallista.xslt +42 -0
  21. data/lib/cadena/divisas.xslt +13 -0
  22. data/lib/cadena/donat11.xslt +13 -0
  23. data/lib/cadena/ecc11.xslt +102 -0
  24. data/lib/cadena/iedu.xslt +26 -0
  25. data/lib/cadena/implocal.xslt +39 -0
  26. data/lib/cadena/ine11.xslt +51 -0
  27. data/lib/cadena/leyendasFisc.xslt +28 -0
  28. data/lib/cadena/nomina12.xslt +412 -0
  29. data/lib/cadena/notariospublicos.xslt +301 -0
  30. data/lib/cadena/obrasarteantiguedades.xslt +33 -0
  31. data/lib/cadena/pagoenespecie.xslt +39 -0
  32. data/lib/cadena/pfic.xslt +13 -0
  33. data/lib/cadena/renovacionysustitucionvehiculos.xslt +152 -0
  34. data/lib/cadena/servicioparcialconstruccion.xslt +44 -0
  35. data/lib/cadena/terceros11.xslt +108 -0
  36. data/lib/cadena/utilerias.xslt +22 -0
  37. data/lib/cadena/valesdedespensa.xslt +70 -0
  38. data/lib/cadena/vehiculousado.xslt +63 -0
  39. data/lib/cadena/ventavehiculos11.xslt +53 -0
  40. data/lib/sw_fac/config.rb +69 -0
  41. data/lib/sw_fac/facturacion.rb +616 -0
  42. data/lib/sw_fac/tools.rb +105 -0
  43. data/lib/sw_fac/version.rb +3 -0
  44. data/lib/sw_fac.rb +18 -0
  45. data/sw_fac.gemspec +38 -0
  46. data/test/sw_fac_test.rb +11 -0
  47. data/test/test_helper.rb +4 -0
  48. metadata +146 -0
@@ -0,0 +1,108 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:terceros="http://www.sat.gob.mx/terceros">
3
+ <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
4
+ <!-- Manejador de nodos tipo PorCuentadeTerceros -->
5
+ <xsl:template match="terceros:PorCuentadeTerceros">
6
+ <!--Iniciamos el tratamiento de los atributos del complemento concepto Por cuenta de Terceros -->
7
+ <xsl:call-template name="Requerido">
8
+ <xsl:with-param name="valor" select="./@version"/>
9
+ </xsl:call-template>
10
+ <xsl:call-template name="Requerido">
11
+ <xsl:with-param name="valor" select="./@rfc"/>
12
+ </xsl:call-template>
13
+ <xsl:call-template name="Opcional">
14
+ <xsl:with-param name="valor" select="./@nombre"/>
15
+ </xsl:call-template>
16
+ <!--Iniciamos el tratamiento de los atributos de la información fiscal del complemento de terceros -->
17
+ <xsl:apply-templates select=".//terceros:InformacionFiscalTercero"/>
18
+ <!-- Manejo de los atributos de la información aduanera del complemento de terceros -->
19
+ <xsl:for-each select=".//terceros:InformacionAduanera">
20
+ <xsl:apply-templates select="."/>
21
+ </xsl:for-each>
22
+ <!-- Manejo de los atributos de la cuenta predial del complento de terceros -->
23
+ <xsl:if test="./terceros:CuentaPredial">
24
+ <xsl:apply-templates select="./terceros:CuentaPredial"/>
25
+ </xsl:if>
26
+ <!-- Manejador de nodos tipo Impuestos-->
27
+ <xsl:for-each select=".//terceros:Retenciones/terceros:Retencion">
28
+ <xsl:apply-templates select="."/>
29
+ </xsl:for-each>
30
+ <xsl:for-each select=".//terceros:Traslados/terceros:Traslado">
31
+ <xsl:apply-templates select="."/>
32
+ </xsl:for-each>
33
+ </xsl:template>
34
+ <!-- Manejador de nodos tipo Retencion -->
35
+ <xsl:template match="terceros:Retencion">
36
+ <xsl:call-template name="Requerido">
37
+ <xsl:with-param name="valor" select="./@impuesto"/>
38
+ </xsl:call-template>
39
+ <xsl:call-template name="Requerido">
40
+ <xsl:with-param name="valor" select="./@importe"/>
41
+ </xsl:call-template>
42
+ </xsl:template>
43
+ <!-- Manejador de nodos tipo Traslado -->
44
+ <xsl:template match="terceros:Traslado">
45
+ <xsl:call-template name="Requerido">
46
+ <xsl:with-param name="valor" select="./@impuesto"/>
47
+ </xsl:call-template>
48
+ <xsl:call-template name="Requerido">
49
+ <xsl:with-param name="valor" select="./@tasa"/>
50
+ </xsl:call-template>
51
+ <xsl:call-template name="Requerido">
52
+ <xsl:with-param name="valor" select="./@importe"/>
53
+ </xsl:call-template>
54
+ </xsl:template>
55
+ <!-- Manejador de nodos tipo Información Aduanera -->
56
+ <xsl:template match="terceros:InformacionAduanera">
57
+ <!-- Manejo de los atributos de la información aduanera -->
58
+ <xsl:call-template name="Requerido">
59
+ <xsl:with-param name="valor" select="./@numero"/>
60
+ </xsl:call-template>
61
+ <xsl:call-template name="Requerido">
62
+ <xsl:with-param name="valor" select="./@fecha"/>
63
+ </xsl:call-template>
64
+ <xsl:call-template name="Opcional">
65
+ <xsl:with-param name="valor" select="./@aduana"/>
66
+ </xsl:call-template>
67
+ </xsl:template>
68
+ <!-- Manejador de nodos tipo Información CuentaPredial -->
69
+ <xsl:template match="terceros:CuentaPredial">
70
+ <xsl:call-template name="Requerido">
71
+ <xsl:with-param name="valor" select="./@numero"/>
72
+ </xsl:call-template>
73
+ </xsl:template>
74
+ <!-- Manejador de nodos tipo Domicilio fiscal -->
75
+ <xsl:template match="terceros:InformacionFiscalTercero">
76
+ <!-- Iniciamos el tratamiento de los atributos del Domicilio Fiscal -->
77
+ <xsl:call-template name="Requerido">
78
+ <xsl:with-param name="valor" select="./@calle"/>
79
+ </xsl:call-template>
80
+ <xsl:call-template name="Opcional">
81
+ <xsl:with-param name="valor" select="./@noExterior"/>
82
+ </xsl:call-template>
83
+ <xsl:call-template name="Opcional">
84
+ <xsl:with-param name="valor" select="./@noInterior"/>
85
+ </xsl:call-template>
86
+ <xsl:call-template name="Opcional">
87
+ <xsl:with-param name="valor" select="./@colonia"/>
88
+ </xsl:call-template>
89
+ <xsl:call-template name="Opcional">
90
+ <xsl:with-param name="valor" select="./@localidad"/>
91
+ </xsl:call-template>
92
+ <xsl:call-template name="Opcional">
93
+ <xsl:with-param name="valor" select="./@referencia"/>
94
+ </xsl:call-template>
95
+ <xsl:call-template name="Requerido">
96
+ <xsl:with-param name="valor" select="./@municipio"/>
97
+ </xsl:call-template>
98
+ <xsl:call-template name="Requerido">
99
+ <xsl:with-param name="valor" select="./@estado"/>
100
+ </xsl:call-template>
101
+ <xsl:call-template name="Requerido">
102
+ <xsl:with-param name="valor" select="./@pais"/>
103
+ </xsl:call-template>
104
+ <xsl:call-template name="Requerido">
105
+ <xsl:with-param name="valor" select="./@codigoPostal"/>
106
+ </xsl:call-template>
107
+ </xsl:template>
108
+ </xsl:stylesheet>
@@ -0,0 +1,22 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
3
+
4
+ <!-- Manejador de datos requeridos -->
5
+ <xsl:template name="Requerido">
6
+ <xsl:param name="valor"/>|<xsl:call-template name="ManejaEspacios">
7
+ <xsl:with-param name="s" select="$valor"/>
8
+ </xsl:call-template>
9
+ </xsl:template>
10
+
11
+ <!-- Manejador de datos opcionales -->
12
+ <xsl:template name="Opcional">
13
+ <xsl:param name="valor"/>
14
+ <xsl:if test="$valor">|<xsl:call-template name="ManejaEspacios"><xsl:with-param name="s" select="$valor"/></xsl:call-template></xsl:if>
15
+ </xsl:template>
16
+
17
+ <!-- Normalizador de espacios en blanco -->
18
+ <xsl:template name="ManejaEspacios">
19
+ <xsl:param name="s"/>
20
+ <xsl:value-of select="normalize-space(string($s))"/>
21
+ </xsl:template>
22
+ </xsl:stylesheet>
@@ -0,0 +1,70 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:valesdedespensa="http://www.sat.gob.mx/valesdedespensa">
3
+
4
+ <!-- Manejador de nodos tipo valesdedespensa:ValesDeDespensa -->
5
+ <xsl:template match="valesdedespensa:ValesDeDespensa">
6
+
7
+ <!-- Iniciamos el tratamiento de los atributos de valesdedespensa:ValesDeDespensa -->
8
+
9
+ <xsl:call-template name="Requerido">
10
+ <xsl:with-param name="valor" select="./@version"/>
11
+ </xsl:call-template>
12
+ <xsl:call-template name="Requerido">
13
+ <xsl:with-param name="valor" select="./@tipoOperacion"/>
14
+ </xsl:call-template>
15
+ <xsl:call-template name="Opcional">
16
+ <xsl:with-param name="valor" select="./@registroPatronal"/>
17
+ </xsl:call-template>
18
+ <xsl:call-template name="Requerido">
19
+ <xsl:with-param name="valor" select="./@numeroDeCuenta"/>
20
+ </xsl:call-template>
21
+ <xsl:call-template name="Requerido">
22
+ <xsl:with-param name="valor" select="./@total"/>
23
+ </xsl:call-template>
24
+
25
+ <!-- Iniciamos el manejo de los nodos dependientes -->
26
+ <xsl:apply-templates select="./valesdedespensa:Conceptos"/>
27
+
28
+ </xsl:template>
29
+
30
+ <!-- Manejador de nodos tipo valesdedespensa:Conceptos -->
31
+ <xsl:template match="valesdedespensa:Conceptos">
32
+
33
+ <!-- Iniciamos el manejo de los nodos dependientes -->
34
+
35
+ <xsl:for-each select="./valesdedespensa:Concepto">
36
+ <xsl:apply-templates select="."/>
37
+ </xsl:for-each>
38
+
39
+ </xsl:template>
40
+
41
+ <!-- Manejador de nodos tipo valesdedespensa:Concepto -->
42
+ <xsl:template match="valesdedespensa:Concepto">
43
+
44
+ <!-- Iniciamos el tratamiento de los atributos de valesdedespensa:Concepto -->
45
+
46
+ <xsl:call-template name="Requerido">
47
+ <xsl:with-param name="valor" select="./@identificador"/>
48
+ </xsl:call-template>
49
+ <xsl:call-template name="Requerido">
50
+ <xsl:with-param name="valor" select="./@fecha"/>
51
+ </xsl:call-template>
52
+ <xsl:call-template name="Requerido">
53
+ <xsl:with-param name="valor" select="./@rfc"/>
54
+ </xsl:call-template>
55
+ <xsl:call-template name="Requerido">
56
+ <xsl:with-param name="valor" select="./@curp"/>
57
+ </xsl:call-template>
58
+ <xsl:call-template name="Requerido">
59
+ <xsl:with-param name="valor" select="./@nombre"/>
60
+ </xsl:call-template>
61
+ <xsl:call-template name="Opcional">
62
+ <xsl:with-param name="valor" select="./@numSeguridadSocial"/>
63
+ </xsl:call-template>
64
+ <xsl:call-template name="Requerido">
65
+ <xsl:with-param name="valor" select="./@importe"/>
66
+ </xsl:call-template>
67
+
68
+ </xsl:template>
69
+
70
+ </xsl:stylesheet>
@@ -0,0 +1,63 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:vehiculousado="http://www.sat.gob.mx/vehiculousado">
3
+
4
+ <!-- Con el siguiente método se establece que la salida deberá ser en texto -->
5
+ <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
6
+
7
+ <!-- Aquí iniciamos el procesamiento de la cadena original con su | inicial y el terminador || -->
8
+ <xsl:template match="/">|<xsl:apply-templates select="/vehiculousado:VehiculoUsado"/>||</xsl:template>
9
+ <!-- Aquí iniciamos el procesamiento de los datos incluidos en el comprobante -->
10
+ <xsl:template match="vehiculousado:VehiculoUsado">
11
+ <!-- Iniciamos el tratamiento de los atributos de comprobante -->
12
+ <xsl:call-template name="Requerido">
13
+ <xsl:with-param name="valor" select="./@Version"/>
14
+ </xsl:call-template>
15
+ <xsl:call-template name="Requerido">
16
+ <xsl:with-param name="valor" select="./@montoAdquisicion"/>
17
+ </xsl:call-template>
18
+ <xsl:call-template name="Requerido">
19
+ <xsl:with-param name="valor" select="./@montoEnajenacion"/>
20
+ </xsl:call-template>
21
+ <xsl:call-template name="Requerido">
22
+ <xsl:with-param name="valor" select="./@claveVehicular"/>
23
+ </xsl:call-template>
24
+ <xsl:call-template name="Requerido">
25
+ <xsl:with-param name="valor" select="./@marca"/>
26
+ </xsl:call-template>
27
+ <xsl:call-template name="Requerido">
28
+ <xsl:with-param name="valor" select="./@tipo"/>
29
+ </xsl:call-template>
30
+ <xsl:call-template name="Requerido">
31
+ <xsl:with-param name="valor" select="./@modelo"/>
32
+ </xsl:call-template>
33
+ <xsl:call-template name="Opcional">
34
+ <xsl:with-param name="valor" select="./@numeroMotor"/>
35
+ </xsl:call-template>
36
+ <xsl:call-template name="Opcional">
37
+ <xsl:with-param name="valor" select="./@numeroSerie"/>
38
+ </xsl:call-template>
39
+ <xsl:call-template name="Opcional">
40
+ <xsl:with-param name="valor" select="./@NIV"/>
41
+ </xsl:call-template>
42
+ <xsl:call-template name="Requerido">
43
+ <xsl:with-param name="valor" select="./@valor"/>
44
+ </xsl:call-template>
45
+ <!--
46
+ Llamadas para procesar al los sub nodos
47
+ -->
48
+ <xsl:apply-templates select="./vehiculousado:InformacionAduanera"/>
49
+ </xsl:template>
50
+ <!-- Manejador de nodos tipo informacionaduanera -->
51
+ <xsl:template match="vehiculousado:InformacionAduanera">
52
+ <!-- Iniciamos el tratamiento de los atributos del Emisor -->
53
+ <xsl:call-template name="Requerido">
54
+ <xsl:with-param name="valor" select="./@numero"/>
55
+ </xsl:call-template>
56
+ <xsl:call-template name="Requerido">
57
+ <xsl:with-param name="valor" select="./@fecha"/>
58
+ </xsl:call-template>
59
+ <xsl:call-template name="Opcional">
60
+ <xsl:with-param name="valor" select="./@aduana"/>
61
+ </xsl:call-template>
62
+ </xsl:template>
63
+ </xsl:stylesheet>
@@ -0,0 +1,53 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:ventavehiculos="http://www.sat.gob.mx/ventavehiculos">
3
+ <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
4
+
5
+ <!-- Manejador de nodos tipo VentaVehiculos-->
6
+
7
+ <xsl:template match="ventavehiculos:VentaVehiculos">
8
+
9
+ <!--Iniciamos el tratamiento de los atributos del complemento concepto VentaVehiculos-->
10
+
11
+ <xsl:call-template name="Requerido">
12
+ <xsl:with-param name="valor" select="./@version"/>
13
+ </xsl:call-template>
14
+
15
+ <xsl:call-template name="Requerido">
16
+ <xsl:with-param name="valor" select="./@ClaveVehicular"/>
17
+ </xsl:call-template>
18
+
19
+ <xsl:if test="./@version='1.1'">
20
+
21
+ <xsl:call-template name="Requerido">
22
+ <xsl:with-param name="valor" select="./@Niv"/>
23
+ </xsl:call-template>
24
+
25
+ </xsl:if>
26
+
27
+ <!-- Manejo de los atributos de la información aduanera del complemento de terceros -->
28
+
29
+ <xsl:for-each select=".//ventavehiculos:InformacionAduanera">
30
+ <xsl:apply-templates select="."/>
31
+ </xsl:for-each>
32
+
33
+ </xsl:template>
34
+
35
+ <!-- Manejador de nodos tipo Información Aduanera -->
36
+
37
+ <xsl:template match="ventavehiculos:InformacionAduanera">
38
+
39
+ <!-- Manejo de los atributos de la información aduanera -->
40
+
41
+ <xsl:call-template name="Requerido">
42
+ <xsl:with-param name="valor" select="./@numero"/>
43
+ </xsl:call-template>
44
+
45
+ <xsl:call-template name="Requerido">
46
+ <xsl:with-param name="valor" select="./@fecha"/>
47
+ </xsl:call-template>
48
+
49
+ <xsl:call-template name="Opcional">
50
+ <xsl:with-param name="valor" select="./@aduana"/>
51
+ </xsl:call-template>
52
+ </xsl:template>
53
+ </xsl:stylesheet>
@@ -0,0 +1,69 @@
1
+ module SwFac
2
+ class Config
3
+ # attr_accessor :production_token, :dev_token
4
+ attr_accessor :production_token, :dev_token, :doc_cer_path, :doc_key_path
5
+ attr_reader :pem, :serial, :cadena, :key_pass, :pem_cadena
6
+
7
+ def initialize(production_token, development_token, rfc, razon, regimen, doc_key_path, key_pass, doc_cer_path, production=false)
8
+ @production_token = production_token.to_s
9
+ @dev_token = development_token.to_s
10
+ @rfc = rfc.to_s
11
+ @razon = razon.to_s
12
+ @regimen_fiscal = regimen
13
+ @doc_key_path = doc_key_path.to_s
14
+ @key_pass = key_pass.to_s
15
+ @doc_cer_path = doc_cer_path
16
+ @production = production
17
+
18
+ key_to_pem
19
+ serial_number
20
+ cer_cadena
21
+
22
+ end
23
+
24
+ def key_to_pem
25
+ @pem = %x[openssl pkcs8 -inform DER -in #{@doc_key_path} -passin pass:#{@key_pass}]
26
+ @pem_cadena = @pem.clone
27
+ @pem_cadena.slice!("-----BEGIN PRIVATE KEY-----")
28
+ @pem_cadena.slice!("-----END PRIVATE KEY-----")
29
+ @pem_cadena.delete!("\n")
30
+ end
31
+
32
+ def serial_number
33
+ response = %x[openssl x509 -inform DER -in #{@doc_cer_path} -noout -serial]
34
+ d_begin = response.index(/\d/)
35
+ number = (response[d_begin..-1]).chomp
36
+ final_serial = ""
37
+
38
+ number.each_char do |s|
39
+ unless (s == "3")
40
+ final_serial << s
41
+ end
42
+ end
43
+ @serial = final_serial
44
+ end
45
+
46
+
47
+ def cer_cadena
48
+ file = File.read(@doc_cer_path)
49
+ text_certificate = OpenSSL::X509::Certificate.new(file)
50
+ cert_string = text_certificate.to_s
51
+ cert_string.slice!("-----BEGIN CERTIFICATE-----")
52
+ cert_string.slice!("-----END CERTIFICATE-----")
53
+ cert_string.delete!("\n")
54
+ @cadena = cert_string
55
+
56
+ end
57
+
58
+ end
59
+
60
+
61
+ UrlProduction = "http://services.sw.com.mx/"
62
+ UrlDev = "http://services.test.sw.com.mx/"
63
+
64
+ DocBase = %(<?xml version="1.0" encoding="utf-8"?><cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd" Version="3.3" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><cfdi:Emisor /><cfdi:Receptor /><cfdi:Conceptos></cfdi:Conceptos><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" /></cfdi:Traslados></cfdi:Impuestos></cfdi:Comprobante>)
65
+
66
+ Doc_concepto = %(<cfdi:Concepto ClaveProdServ="25172504" NoIdentificacion="COST37125R17" Cantidad="1" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Producto de prueba" ValorUnitario="1000.00" Importe="1000.00"><cfdi:Impuestos><cfdi:Traslados><cfdi:Traslado Base="1000.00" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="160.00" /></cfdi:Traslados></cfdi:Impuestos></cfdi:Concepto>)
67
+
68
+
69
+ end