fdis 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 (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