fdis 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +51 -0
  3. data/lib/cadena/ComercioExterior11.xslt +181 -0
  4. data/lib/cadena/Pagos10.xslt +165 -0
  5. data/lib/cadena/Pagos20.xsd +532 -0
  6. data/lib/cadena/Pagos20.xslt +233 -0
  7. data/lib/cadena/TuristaPasajeroExtranjero.xslt +40 -0
  8. data/lib/cadena/aerolineas.xslt +50 -0
  9. data/lib/cadena/cadena33.xslt +349 -0
  10. data/lib/cadena/cadenaoriginal_4_0.xslt +405 -0
  11. data/lib/cadena/catCFDI.xsd +162331 -0
  12. data/lib/cadena/certificadodedestruccion.xslt +60 -0
  13. data/lib/cadena/cfdiregistrofiscal.xslt +19 -0
  14. data/lib/cadena/cfdv33.xsd +737 -0
  15. data/lib/cadena/cfdv40.xsd +850 -0
  16. data/lib/cadena/consumodecombustibles.xslt +108 -0
  17. data/lib/cadena/detallista.xslt +42 -0
  18. data/lib/cadena/divisas.xslt +13 -0
  19. data/lib/cadena/donat11.xslt +13 -0
  20. data/lib/cadena/ecc11.xslt +102 -0
  21. data/lib/cadena/iedu.xslt +26 -0
  22. data/lib/cadena/implocal.xslt +39 -0
  23. data/lib/cadena/ine11.xslt +51 -0
  24. data/lib/cadena/leyendasFisc.xslt +28 -0
  25. data/lib/cadena/nomina12.xslt +412 -0
  26. data/lib/cadena/notariospublicos.xslt +301 -0
  27. data/lib/cadena/obrasarteantiguedades.xslt +33 -0
  28. data/lib/cadena/pagoenespecie.xslt +39 -0
  29. data/lib/cadena/pfic.xslt +13 -0
  30. data/lib/cadena/renovacionysustitucionvehiculos.xslt +152 -0
  31. data/lib/cadena/servicioparcialconstruccion.xslt +44 -0
  32. data/lib/cadena/terceros11.xslt +108 -0
  33. data/lib/cadena/utilerias.xslt +22 -0
  34. data/lib/cadena/valesdedespensa.xslt +70 -0
  35. data/lib/cadena/vehiculousado.xslt +63 -0
  36. data/lib/cadena/ventavehiculos11.xslt +53 -0
  37. data/lib/fdis/config.rb +94 -0
  38. data/lib/fdis/facturacion.rb +1028 -0
  39. data/lib/fdis/version.rb +3 -0
  40. data/lib/fdis.rb +17 -0
  41. metadata +139 -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,94 @@
1
+ module Fdis
2
+ class Config
3
+ attr_accessor :production_token, :dev_token, :doc_cer_path, :doc_key_path
4
+ attr_reader :pem, :serial, :cadena, :key_pass, :pem_cadena
5
+
6
+ def initialize(id_servicio, rfc, razon, regimen, doc_key_path, key_pass, doc_cer_path, production=false)
7
+ puts "---- Fdis:config:initialize"
8
+
9
+ @id_servicio = id_servicio.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
+ puts "---- Fdis:config:key_to_pem"
26
+
27
+ puts "-- 1"
28
+ @pem = %x[openssl pkcs8 -inform DER -in #{@doc_key_path} -passin pass:#{@key_pass}]
29
+ # @pem = %x[openssl rsa -inform DER -in #{@doc_key_path} -passin pass:#{@key_pass}]
30
+ puts "-- 2"
31
+ @pem_cadena = @pem.clone
32
+ @pem_cadena.slice!("-----BEGIN PRIVATE KEY-----")
33
+ @pem_cadena.slice!("-----END PRIVATE KEY-----")
34
+ @pem_cadena.delete!("\n")
35
+ end
36
+
37
+ def serial_number
38
+ puts "---- Fdis:config:serial_number"
39
+
40
+ response = %x[openssl x509 -inform DER -in #{@doc_cer_path} -noout -serial]
41
+ d_begin = response.index(/\d/)
42
+ number = (response[d_begin..-1]).chomp
43
+ final_serial = ""
44
+
45
+ number.each_char.with_index do |s, index|
46
+ if (index + 1).even?
47
+ final_serial << s
48
+ end
49
+ end
50
+
51
+ @serial = final_serial
52
+
53
+ end
54
+
55
+
56
+ def cer_cadena
57
+ puts "---- Fdis:config:cer_cadena"
58
+
59
+ file = File.read(@doc_cer_path)
60
+ text_certificate = OpenSSL::X509::Certificate.new(file)
61
+ cert_string = text_certificate.to_s
62
+ cert_string.slice!("-----BEGIN CERTIFICATE-----")
63
+ cert_string.slice!("-----END CERTIFICATE-----")
64
+ cert_string.delete!("\n")
65
+ @cadena = cert_string
66
+
67
+ end
68
+
69
+ end
70
+
71
+
72
+ UrlPro = "https://v4.cfdis.mx/api/Cfdi"
73
+ UrlDev = "https://v4.cfdis.mx/api/Cfdi/Timbrar40"
74
+
75
+ DocBase = %(<?xml version="1.0" encoding="utf-8"?>
76
+ <cfdi:Comprobante xsi:schemaLocation="http://www.sat.gob.mx/cfd/4 http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd" Version="4.0" xmlns:cfdi="http://www.sat.gob.mx/cfd/4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
77
+ <cfdi:Emisor />
78
+ <cfdi:Receptor />
79
+ <cfdi:Conceptos></cfdi:Conceptos>
80
+ <cfdi:Impuestos></cfdi:Impuestos>
81
+ </cfdi:Comprobante>)
82
+
83
+
84
+ Doc_concepto = %(
85
+ <cfdi:Concepto ClaveProdServ="25172504" NoIdentificacion="COST37125R17" Cantidad="1" ClaveUnidad="H87" Unidad="Pieza" Descripcion="Producto de prueba" ValorUnitario="1000.00" Importe="1000.00">
86
+ <cfdi:Impuestos>
87
+ <cfdi:Traslados>
88
+ <cfdi:Traslado Base="1000.00" Impuesto="002" TipoFactor="Tasa" TasaOCuota="0.160000" Importe="160.00" />
89
+ </cfdi:Traslados>
90
+ </cfdi:Impuestos>
91
+ </cfdi:Concepto>)
92
+
93
+
94
+ end