sw_fac 0.1.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.
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