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,405 @@
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:cfdi="http://www.sat.gob.mx/cfd/4" xmlns:cce11="http://www.sat.gob.mx/ComercioExterior11" xmlns:donat="http://www.sat.gob.mx/donat" xmlns:divisas="http://www.sat.gob.mx/divisas" xmlns:implocal="http://www.sat.gob.mx/implocal" xmlns:leyendasFisc="http://www.sat.gob.mx/leyendasFiscales" xmlns:pfic="http://www.sat.gob.mx/pfic" xmlns:tpe="http://www.sat.gob.mx/TuristaPasajeroExtranjero" xmlns:nomina12="http://www.sat.gob.mx/nomina12" xmlns:registrofiscal="http://www.sat.gob.mx/registrofiscal" xmlns:pagoenespecie="http://www.sat.gob.mx/pagoenespecie" xmlns:aerolineas="http://www.sat.gob.mx/aerolineas" xmlns:valesdedespensa="http://www.sat.gob.mx/valesdedespensa" xmlns:notariospublicos="http://www.sat.gob.mx/notariospublicos" xmlns:vehiculousado="http://www.sat.gob.mx/vehiculousado" xmlns:servicioparcial="http://www.sat.gob.mx/servicioparcialconstruccion" xmlns:decreto="http://www.sat.gob.mx/renovacionysustitucionvehiculos" xmlns:destruccion="http://www.sat.gob.mx/certificadodestruccion" xmlns:obrasarte="http://www.sat.gob.mx/arteantiguedades" xmlns:ine="http://www.sat.gob.mx/ine" xmlns:iedu="http://www.sat.gob.mx/iedu" xmlns:ventavehiculos="http://www.sat.gob.mx/ventavehiculos" xmlns:detallista="http://www.sat.gob.mx/detallista" xmlns:ecc12="http://www.sat.gob.mx/EstadoDeCuentaCombustible12" xmlns:consumodecombustibles11="http://www.sat.gob.mx/ConsumoDeCombustibles11" xmlns:gceh="http://www.sat.gob.mx/GastosHidrocarburos10" xmlns:ieeh="http://www.sat.gob.mx/IngresosHidrocarburos10" xmlns:cartaporte20="http://www.sat.gob.mx/CartaPorte20" xmlns:pago20="http://www.sat.gob.mx/Pagos20">
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
+ En esta sección se define la inclusión de las plantillas de utilerías para colapsar espacios
8
+ -->
9
+ <xsl:include href="utilerias.xslt"/>
10
+ <!--
11
+ En esta sección se define la inclusión de las demás plantillas de transformación para
12
+ la generación de las cadenas originales de los complementos fiscales
13
+ -->
14
+ <xsl:include href="donat11.xslt"/>
15
+ <xsl:include href="divisas.xslt"/>
16
+ <xsl:include href="implocal.xslt"/>
17
+ <xsl:include href="leyendasFisc.xslt"/>
18
+ <xsl:include href="pfic.xslt"/>
19
+ <xsl:include href="TuristaPasajeroExtranjero.xslt"/>
20
+ <xsl:include href="nomina12.xslt"/>
21
+ <xsl:include href="cfdiregistrofiscal.xslt"/>
22
+ <xsl:include href="pagoenespecie.xslt"/>
23
+ <xsl:include href="aerolineas.xslt"/>
24
+ <xsl:include href="valesdedespensa.xslt"/>
25
+ <xsl:include href="notariospublicos.xslt"/>
26
+ <xsl:include href="vehiculousado.xslt"/>
27
+ <xsl:include href="servicioparcialconstruccion.xslt"/>
28
+ <xsl:include href="renovacionysustitucionvehiculos.xslt"/>
29
+ <xsl:include href="certificadodedestruccion.xslt"/>
30
+ <xsl:include href="obrasarteantiguedades.xslt"/>
31
+ <xsl:include href="ComercioExterior11.xslt"/>
32
+ <xsl:include href="ine11.xslt"/>
33
+ <xsl:include href="iedu.xslt"/>
34
+ <xsl:include href="ventavehiculos11.xslt"/>
35
+ <xsl:include href="detallista.xslt"/>
36
+ <xsl:include href="ecc12.xslt"/>
37
+ <xsl:include href="consumodeCombustibles11.xslt"/>
38
+ <xsl:include href="GastosHidrocarburos10.xslt"/>
39
+ <xsl:include href="IngresosHidrocarburos.xslt"/>
40
+ <xsl:include href="CartaPorte20.xslt"/>
41
+ <xsl:include href="Pagos20.xslt"/>
42
+
43
+ <!-- Aquí iniciamos el procesamiento de la cadena original con su | inicial y el terminador || -->
44
+ <xsl:template match="/">|<xsl:apply-templates select="/cfdi:Comprobante"/>||</xsl:template>
45
+ <!-- Aquí iniciamos el procesamiento de los datos incluidos en el comprobante -->
46
+ <xsl:template match="cfdi:Comprobante">
47
+ <!-- Iniciamos el tratamiento de los atributos de comprobante -->
48
+ <xsl:call-template name="Requerido">
49
+ <xsl:with-param name="valor" select="./@Version"/>
50
+ </xsl:call-template>
51
+ <xsl:call-template name="Opcional">
52
+ <xsl:with-param name="valor" select="./@Serie"/>
53
+ </xsl:call-template>
54
+ <xsl:call-template name="Opcional">
55
+ <xsl:with-param name="valor" select="./@Folio"/>
56
+ </xsl:call-template>
57
+ <xsl:call-template name="Requerido">
58
+ <xsl:with-param name="valor" select="./@Fecha"/>
59
+ </xsl:call-template>
60
+ <xsl:call-template name="Opcional">
61
+ <xsl:with-param name="valor" select="./@FormaPago"/>
62
+ </xsl:call-template>
63
+ <xsl:call-template name="Requerido">
64
+ <xsl:with-param name="valor" select="./@NoCertificado"/>
65
+ </xsl:call-template>
66
+ <xsl:call-template name="Opcional">
67
+ <xsl:with-param name="valor" select="./@CondicionesDePago"/>
68
+ </xsl:call-template>
69
+ <xsl:call-template name="Requerido">
70
+ <xsl:with-param name="valor" select="./@SubTotal"/>
71
+ </xsl:call-template>
72
+ <xsl:call-template name="Opcional">
73
+ <xsl:with-param name="valor" select="./@Descuento"/>
74
+ </xsl:call-template>
75
+ <xsl:call-template name="Requerido">
76
+ <xsl:with-param name="valor" select="./@Moneda"/>
77
+ </xsl:call-template>
78
+ <xsl:call-template name="Opcional">
79
+ <xsl:with-param name="valor" select="./@TipoCambio"/>
80
+ </xsl:call-template>
81
+ <xsl:call-template name="Requerido">
82
+ <xsl:with-param name="valor" select="./@Total"/>
83
+ </xsl:call-template>
84
+ <xsl:call-template name="Requerido">
85
+ <xsl:with-param name="valor" select="./@TipoDeComprobante"/>
86
+ </xsl:call-template>
87
+ <xsl:call-template name="Requerido">
88
+ <xsl:with-param name="valor" select="./@Exportacion"/>
89
+ </xsl:call-template>
90
+ <xsl:call-template name="Opcional">
91
+ <xsl:with-param name="valor" select="./@MetodoPago"/>
92
+ </xsl:call-template>
93
+ <xsl:call-template name="Requerido">
94
+ <xsl:with-param name="valor" select="./@LugarExpedicion"/>
95
+ </xsl:call-template>
96
+ <xsl:call-template name="Opcional">
97
+ <xsl:with-param name="valor" select="./@Confirmacion"/>
98
+ </xsl:call-template>
99
+ <!--
100
+ Llamadas para procesar al los sub nodos del comprobante
101
+ -->
102
+ <xsl:apply-templates select="./cfdi:InformacionGlobal"/>
103
+ <xsl:for-each select="./cfdi:CfdiRelacionados">
104
+ <xsl:apply-templates select="."/>
105
+ </xsl:for-each>
106
+ <xsl:apply-templates select="./cfdi:Emisor"/>
107
+ <xsl:apply-templates select="./cfdi:Receptor"/>
108
+ <xsl:apply-templates select="./cfdi:Conceptos"/>
109
+ <xsl:apply-templates select="./cfdi:Impuestos"/>
110
+ <xsl:apply-templates select="./cfdi:Complemento"/>
111
+ </xsl:template>
112
+
113
+ <!-- Manejador de nodos tipo InformacionGlobal -->
114
+ <xsl:template match="cfdi:InformacionGlobal">
115
+ <!-- Iniciamos el tratamiento de los atributos del nodo tipo InformacionGlobal -->
116
+ <xsl:call-template name="Requerido">
117
+ <xsl:with-param name="valor" select="./@Periodicidad"/>
118
+ </xsl:call-template>
119
+ <xsl:call-template name="Requerido">
120
+ <xsl:with-param name="valor" select="./@Meses"/>
121
+ </xsl:call-template>
122
+ <xsl:call-template name="Requerido">
123
+ <xsl:with-param name="valor" select="./@Año"/>
124
+ </xsl:call-template>
125
+ </xsl:template>
126
+
127
+ <!-- Manejador de nodos tipo CFDIRelacionados -->
128
+ <xsl:template match="cfdi:CfdiRelacionados">
129
+ <!-- Iniciamos el tratamiento de los atributos del nodo tipo CFDIRelacionados -->
130
+ <xsl:call-template name="Requerido">
131
+ <xsl:with-param name="valor" select="./@TipoRelacion"/>
132
+ </xsl:call-template>
133
+ <xsl:for-each select="./cfdi:CfdiRelacionado">
134
+ <xsl:call-template name="Requerido">
135
+ <xsl:with-param name="valor" select="./@UUID"/>
136
+ </xsl:call-template>
137
+ </xsl:for-each>
138
+ </xsl:template>
139
+
140
+ <!-- Manejador de nodos tipo Emisor -->
141
+ <xsl:template match="cfdi:Emisor">
142
+ <!-- Iniciamos el tratamiento de los atributos del nodo tipo Emisor -->
143
+ <xsl:call-template name="Requerido">
144
+ <xsl:with-param name="valor" select="./@Rfc"/>
145
+ </xsl:call-template>
146
+ <xsl:call-template name="Requerido">
147
+ <xsl:with-param name="valor" select="./@Nombre"/>
148
+ </xsl:call-template>
149
+ <xsl:call-template name="Requerido">
150
+ <xsl:with-param name="valor" select="./@RegimenFiscal"/>
151
+ </xsl:call-template>
152
+ <xsl:call-template name="Opcional">
153
+ <xsl:with-param name="valor" select="./@FacAtrAdquirente"/>
154
+ </xsl:call-template>
155
+ </xsl:template>
156
+
157
+ <!-- Manejador de nodos tipo Receptor -->
158
+ <xsl:template match="cfdi:Receptor">
159
+ <!-- Iniciamos el tratamiento de los atributos del nodo tipo Receptor -->
160
+ <xsl:call-template name="Requerido">
161
+ <xsl:with-param name="valor" select="./@Rfc"/>
162
+ </xsl:call-template>
163
+ <xsl:call-template name="Requerido">
164
+ <xsl:with-param name="valor" select="./@Nombre"/>
165
+ </xsl:call-template>
166
+ <xsl:call-template name="Requerido">
167
+ <xsl:with-param name="valor" select="./@DomicilioFiscalReceptor"/>
168
+ </xsl:call-template>
169
+ <xsl:call-template name="Opcional">
170
+ <xsl:with-param name="valor" select="./@ResidenciaFiscal"/>
171
+ </xsl:call-template>
172
+ <xsl:call-template name="Opcional">
173
+ <xsl:with-param name="valor" select="./@NumRegIdTrib"/>
174
+ </xsl:call-template>
175
+ <xsl:call-template name="Requerido">
176
+ <xsl:with-param name="valor" select="./@RegimenFiscalReceptor"/>
177
+ </xsl:call-template>
178
+ <xsl:call-template name="Requerido">
179
+ <xsl:with-param name="valor" select="./@UsoCFDI"/>
180
+ </xsl:call-template>
181
+
182
+ </xsl:template>
183
+
184
+ <!-- Manejador de nodos tipo Conceptos -->
185
+ <xsl:template match="cfdi:Conceptos">
186
+ <!-- Llamada para procesar los distintos nodos tipo Concepto -->
187
+ <xsl:for-each select="./cfdi:Concepto">
188
+ <xsl:apply-templates select="."/>
189
+ </xsl:for-each>
190
+ </xsl:template>
191
+
192
+ <!--Manejador de nodos tipo Concepto-->
193
+ <xsl:template match="cfdi:Concepto">
194
+ <!-- Iniciamos el tratamiento de los atributos del Concepto -->
195
+ <xsl:call-template name="Requerido">
196
+ <xsl:with-param name="valor" select="./@ClaveProdServ"/>
197
+ </xsl:call-template>
198
+ <xsl:call-template name="Opcional">
199
+ <xsl:with-param name="valor" select="./@NoIdentificacion"/>
200
+ </xsl:call-template>
201
+ <xsl:call-template name="Requerido">
202
+ <xsl:with-param name="valor" select="./@Cantidad"/>
203
+ </xsl:call-template>
204
+ <xsl:call-template name="Requerido">
205
+ <xsl:with-param name="valor" select="./@ClaveUnidad"/>
206
+ </xsl:call-template>
207
+ <xsl:call-template name="Opcional">
208
+ <xsl:with-param name="valor" select="./@Unidad"/>
209
+ </xsl:call-template>
210
+ <xsl:call-template name="Requerido">
211
+ <xsl:with-param name="valor" select="./@Descripcion"/>
212
+ </xsl:call-template>
213
+ <xsl:call-template name="Requerido">
214
+ <xsl:with-param name="valor" select="./@ValorUnitario"/>
215
+ </xsl:call-template>
216
+ <xsl:call-template name="Requerido">
217
+ <xsl:with-param name="valor" select="./@Importe"/>
218
+ </xsl:call-template>
219
+ <xsl:call-template name="Opcional">
220
+ <xsl:with-param name="valor" select="./@Descuento"/>
221
+ </xsl:call-template>
222
+ <xsl:call-template name="Requerido">
223
+ <xsl:with-param name="valor" select="./@ObjetoImp"/>
224
+ </xsl:call-template>
225
+
226
+ <!-- Manejo de sub nodos de información Traslado de Conceptos:Concepto:Impuestos:Traslados-->
227
+ <xsl:for-each select="./cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado">
228
+ <xsl:call-template name="Requerido">
229
+ <xsl:with-param name="valor" select="./@Base"/>
230
+ </xsl:call-template>
231
+ <xsl:call-template name="Requerido">
232
+ <xsl:with-param name="valor" select="./@Impuesto"/>
233
+ </xsl:call-template>
234
+ <xsl:call-template name="Requerido">
235
+ <xsl:with-param name="valor" select="./@TipoFactor"/>
236
+ </xsl:call-template>
237
+ <xsl:call-template name="Opcional">
238
+ <xsl:with-param name="valor" select="./@TasaOCuota"/>
239
+ </xsl:call-template>
240
+ <xsl:call-template name="Opcional">
241
+ <xsl:with-param name="valor" select="./@Importe"/>
242
+ </xsl:call-template>
243
+ </xsl:for-each>
244
+
245
+ <!-- Manejo de sub nodos de Retencion por cada una de los Conceptos:Concepto:Impuestos:Retenciones-->
246
+ <xsl:for-each select="./cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion">
247
+ <xsl:call-template name="Requerido">
248
+ <xsl:with-param name="valor" select="./@Base"/>
249
+ </xsl:call-template>
250
+ <xsl:call-template name="Requerido">
251
+ <xsl:with-param name="valor" select="./@Impuesto"/>
252
+ </xsl:call-template>
253
+ <xsl:call-template name="Requerido">
254
+ <xsl:with-param name="valor" select="./@TipoFactor"/>
255
+ </xsl:call-template>
256
+ <xsl:call-template name="Requerido">
257
+ <xsl:with-param name="valor" select="./@TasaOCuota"/>
258
+ </xsl:call-template>
259
+ <xsl:call-template name="Requerido">
260
+ <xsl:with-param name="valor" select="./@Importe"/>
261
+ </xsl:call-template>
262
+ </xsl:for-each>
263
+
264
+ <!-- Manejo de los distintos sub nodos a cuenta de terceros de forma indistinta a su grado de dependencia -->
265
+ <xsl:for-each select="./cfdi:ACuentaTerceros">
266
+ <xsl:apply-templates select="."/>
267
+ </xsl:for-each>
268
+
269
+ <!-- Manejo de los distintos sub nodos de información aduanera de forma indistinta a su grado de dependencia -->
270
+ <xsl:for-each select="./cfdi:InformacionAduanera">
271
+ <xsl:apply-templates select="."/>
272
+ </xsl:for-each>
273
+
274
+ <!-- Llamada al manejador de nodos de CuentaPredial en caso de existir -->
275
+ <xsl:if test="./cfdi:CuentaPredial">
276
+ <xsl:apply-templates select="./cfdi:CuentaPredial"/>
277
+ </xsl:if>
278
+
279
+ <!-- Llamada al manejador de nodos de ComplementoConcepto en caso de existir -->
280
+ <xsl:if test="./cfdi:ComplementoConcepto">
281
+ <xsl:apply-templates select="./cfdi:ComplementoConcepto"/>
282
+ </xsl:if>
283
+
284
+ <!-- Llamada al manejador de nodos de Parte en caso de existir -->
285
+ <xsl:for-each select=".//cfdi:Parte">
286
+ <xsl:apply-templates select="."/>
287
+ </xsl:for-each>
288
+ </xsl:template>
289
+
290
+ <!-- Manejador de nodos tipo ACuentaTerceros -->
291
+ <xsl:template match="cfdi:ACuentaTerceros">
292
+ <!-- Manejo de los atributos del nodo tipo ACuentaTerceros -->
293
+ <xsl:call-template name="Requerido">
294
+ <xsl:with-param name="valor" select="./@RfcACuentaTerceros"/>
295
+ </xsl:call-template>
296
+ <xsl:call-template name="Requerido">
297
+ <xsl:with-param name="valor" select="./@NombreACuentaTerceros"/>
298
+ </xsl:call-template>
299
+ <xsl:call-template name="Requerido">
300
+ <xsl:with-param name="valor" select="./@RegimenFiscalACuentaTerceros"/>
301
+ </xsl:call-template>
302
+ <xsl:call-template name="Requerido">
303
+ <xsl:with-param name="valor" select="./@DomicilioFiscalACuentaTerceros"/>
304
+ </xsl:call-template>
305
+ </xsl:template>
306
+
307
+ <!-- Manejador de nodos tipo Información Aduanera -->
308
+ <xsl:template match="cfdi:InformacionAduanera">
309
+ <!-- Manejo de los atributos de la información aduanera -->
310
+ <xsl:call-template name="Requerido">
311
+ <xsl:with-param name="valor" select="./@NumeroPedimento"/>
312
+ </xsl:call-template>
313
+ </xsl:template>
314
+
315
+ <!-- Manejador de nodos tipo Información CuentaPredial -->
316
+ <xsl:template match="cfdi:CuentaPredial">
317
+ <xsl:call-template name="Requerido">
318
+ <xsl:with-param name="valor" select="./@Numero"/>
319
+ </xsl:call-template>
320
+ </xsl:template>
321
+
322
+ <!-- Manejador de nodos tipo ComplementoConcepto -->
323
+ <xsl:template match="cfdi:ComplementoConcepto">
324
+ <xsl:for-each select="./*">
325
+ <xsl:apply-templates select="."/>
326
+ </xsl:for-each>
327
+ </xsl:template>
328
+
329
+ <!-- Manejador de nodos tipo Parte -->
330
+ <xsl:template match="cfdi:Parte">
331
+ <!-- Iniciamos el tratamiento de los atributos de Parte-->
332
+ <xsl:call-template name="Requerido">
333
+ <xsl:with-param name="valor" select="./@ClaveProdServ"/>
334
+ </xsl:call-template>
335
+ <xsl:call-template name="Opcional">
336
+ <xsl:with-param name="valor" select="./@NoIdentificacion"/>
337
+ </xsl:call-template>
338
+ <xsl:call-template name="Requerido">
339
+ <xsl:with-param name="valor" select="./@Cantidad"/>
340
+ </xsl:call-template>
341
+ <xsl:call-template name="Opcional">
342
+ <xsl:with-param name="valor" select="./@Unidad"/>
343
+ </xsl:call-template>
344
+ <xsl:call-template name="Requerido">
345
+ <xsl:with-param name="valor" select="./@Descripcion"/>
346
+ </xsl:call-template>
347
+ <xsl:call-template name="Opcional">
348
+ <xsl:with-param name="valor" select="./@ValorUnitario"/>
349
+ </xsl:call-template>
350
+ <xsl:call-template name="Opcional">
351
+ <xsl:with-param name="valor" select="./@Importe"/>
352
+ </xsl:call-template>
353
+
354
+ <!-- Manejador de nodos tipo InformacionAduanera-->
355
+ <xsl:for-each select=".//cfdi:InformacionAduanera">
356
+ <xsl:apply-templates select="."/>
357
+ </xsl:for-each>
358
+ </xsl:template>
359
+
360
+ <!-- Manejador de nodos tipo Complemento -->
361
+ <xsl:template match="cfdi:Complemento">
362
+ <xsl:for-each select="./*">
363
+ <xsl:apply-templates select="."/>
364
+ </xsl:for-each>
365
+ </xsl:template>
366
+
367
+ <!-- Manejador de nodos tipo Domicilio fiscal -->
368
+ <xsl:template match="cfdi:Impuestos">
369
+ <!-- Manejo de sub nodos de Retencion por cada una de los Impuestos:Retenciones-->
370
+ <xsl:for-each select="./cfdi:Retenciones/cfdi:Retencion">
371
+ <xsl:call-template name="Requerido">
372
+ <xsl:with-param name="valor" select="./@Impuesto"/>
373
+ </xsl:call-template>
374
+ <xsl:call-template name="Requerido">
375
+ <xsl:with-param name="valor" select="./@Importe"/>
376
+ </xsl:call-template>
377
+ </xsl:for-each>
378
+ <!-- Iniciamos el tratamiento de los atributos de TotalImpuestosRetenidos-->
379
+ <xsl:call-template name="Opcional">
380
+ <xsl:with-param name="valor" select="./@TotalImpuestosRetenidos"/>
381
+ </xsl:call-template>
382
+ <!-- Manejo de sub nodos de información Traslado de Impuestos:Traslados-->
383
+ <xsl:for-each select="./cfdi:Traslados/cfdi:Traslado">
384
+ <xsl:call-template name="Requerido">
385
+ <xsl:with-param name="valor" select="./@Base"/>
386
+ </xsl:call-template>
387
+ <xsl:call-template name="Requerido">
388
+ <xsl:with-param name="valor" select="./@Impuesto"/>
389
+ </xsl:call-template>
390
+ <xsl:call-template name="Requerido">
391
+ <xsl:with-param name="valor" select="./@TipoFactor"/>
392
+ </xsl:call-template>
393
+ <xsl:call-template name="Opcional">
394
+ <xsl:with-param name="valor" select="./@TasaOCuota"/>
395
+ </xsl:call-template>
396
+ <xsl:call-template name="Opcional">
397
+ <xsl:with-param name="valor" select="./@Importe"/>
398
+ </xsl:call-template>
399
+ </xsl:for-each>
400
+ <!-- Iniciamos el tratamiento de los atributos de TotalImpuestosTrasladados-->
401
+ <xsl:call-template name="Opcional">
402
+ <xsl:with-param name="valor" select="./@TotalImpuestosTrasladados"/>
403
+ </xsl:call-template>
404
+ </xsl:template>
405
+ </xsl:stylesheet>