fdis2 0.1.5

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