Ejemplo minimo en CFDI 4.0
This commit is contained in:
parent
63c08d3a42
commit
5f91511266
|
@ -1,3 +1,4 @@
|
||||||
conf.py
|
conf.py
|
||||||
.pyenv/
|
.pyenv/
|
||||||
__pycache__/
|
__pycache__/
|
||||||
|
env/
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
{
|
{
|
||||||
"comprobante" : {
|
"comprobante" : {
|
||||||
"NoCertificado": "20001000000300022815",
|
|
||||||
"TipoCambio": "1",
|
"TipoCambio": "1",
|
||||||
"Moneda": "MXN",
|
"Moneda": "MXN",
|
||||||
"TipoDeComprobante": "I",
|
"TipoDeComprobante": "I",
|
||||||
|
@ -8,15 +7,20 @@
|
||||||
"SubTotal": "1000.00",
|
"SubTotal": "1000.00",
|
||||||
"Total": "1160.00",
|
"Total": "1160.00",
|
||||||
"FormaPago": "03",
|
"FormaPago": "03",
|
||||||
"MetodoPago": "PUE"
|
"MetodoPago": "PUE",
|
||||||
|
"Exportacion": "01"
|
||||||
},
|
},
|
||||||
"emisor": {
|
"emisor": {
|
||||||
"Rfc": "LAN7008173R5",
|
"Rfc": "EKU9003173C9",
|
||||||
|
"Nombre": "ESCUELA KEMPER URGATE",
|
||||||
"RegimenFiscal": "601"
|
"RegimenFiscal": "601"
|
||||||
},
|
},
|
||||||
"receptor": {
|
"receptor": {
|
||||||
"Rfc": "BASM740115RW0",
|
"Rfc": "BASM740115RW0",
|
||||||
"UsoCFDI": "G01"
|
"Nombre": "MAURICIO BAEZA SERVIN",
|
||||||
|
"DomicilioFiscalReceptor": "06850",
|
||||||
|
"RegimenFiscalReceptor": "612" ,
|
||||||
|
"UsoCFDI": "G03"
|
||||||
},
|
},
|
||||||
"conceptos": [
|
"conceptos": [
|
||||||
{
|
{
|
||||||
|
@ -26,6 +30,7 @@
|
||||||
"Descripcion": "Asesoría en desarrollo",
|
"Descripcion": "Asesoría en desarrollo",
|
||||||
"ValorUnitario": "1000.00",
|
"ValorUnitario": "1000.00",
|
||||||
"Importe": "1000.00",
|
"Importe": "1000.00",
|
||||||
|
"ObjetoImp": "02",
|
||||||
"impuestos": {
|
"impuestos": {
|
||||||
"traslados": [
|
"traslados": [
|
||||||
{
|
{
|
||||||
|
@ -43,6 +48,7 @@
|
||||||
"TotalImpuestosTrasladados": "160.00",
|
"TotalImpuestosTrasladados": "160.00",
|
||||||
"traslados": [
|
"traslados": [
|
||||||
{
|
{
|
||||||
|
"Base": "1000.00",
|
||||||
"Impuesto": "002",
|
"Impuesto": "002",
|
||||||
"TipoFactor": "Tasa",
|
"TipoFactor": "Tasa",
|
||||||
"TasaOCuota": "0.160000",
|
"TasaOCuota": "0.160000",
|
||||||
|
|
|
@ -46,7 +46,7 @@ def _process_command_line_arguments():
|
||||||
parser.add_argument('-d', '--dir-trabajo', dest='dir_trabajo', default='')
|
parser.add_argument('-d', '--dir-trabajo', dest='dir_trabajo', default='')
|
||||||
parser.add_argument('-de', '--dir-entrada', dest='dir_entrada', default='')
|
parser.add_argument('-de', '--dir-entrada', dest='dir_entrada', default='')
|
||||||
parser.add_argument('-dg', '--dir-generados', dest='dir_generados', default='')
|
parser.add_argument('-dg', '--dir-generados', dest='dir_generados', default='')
|
||||||
parser.add_argument('-dp', '--dir-por-timbrar', dest='dir_por_timbrar', default='')
|
parser.add_argument('-ds', '--dir-sellados', dest='dir_sellados', default='')
|
||||||
parser.add_argument('-dt', '--dir-timbrados', dest='dir_timbrados', default='')
|
parser.add_argument('-dt', '--dir-timbrados', dest='dir_timbrados', default='')
|
||||||
|
|
||||||
parser.add_argument('-g', '--generar', dest='generar',
|
parser.add_argument('-g', '--generar', dest='generar',
|
||||||
|
@ -55,8 +55,6 @@ def _process_command_line_arguments():
|
||||||
action='store_true', default=False, required=False)
|
action='store_true', default=False, required=False)
|
||||||
parser.add_argument('-t', '--timbrar', dest='timbrar',
|
parser.add_argument('-t', '--timbrar', dest='timbrar',
|
||||||
action='store_true', default=False, required=False)
|
action='store_true', default=False, required=False)
|
||||||
parser.add_argument('-c', '--cancelar', dest='cancelar',
|
|
||||||
action='store_true', default=False, required=False)
|
|
||||||
return parser.parse_args()
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,16 +35,16 @@ TIMEOUT = 10
|
||||||
class PACComercioDigital(object):
|
class PACComercioDigital(object):
|
||||||
ws = 'https://{}.comercio-digital.mx/{}'
|
ws = 'https://{}.comercio-digital.mx/{}'
|
||||||
URL = {
|
URL = {
|
||||||
'timbra': ws.format('ws', 'timbre/timbrarV5.aspx'),
|
'timbra': ws.format('ws', 'timbre4/timbrarV5.aspx'),
|
||||||
'cancel': ws.format('cancela', 'cancela3/cancelarUuid'),
|
'cancel': ws.format('cancela', 'cancela4/cancelarUuid'),
|
||||||
'cancelxml': ws.format('cancela', 'cancela3/cancelarXml'),
|
'cancelxml': ws.format('cancela', 'cancela4/cancelarXml'),
|
||||||
}
|
}
|
||||||
if DEBUG:
|
if DEBUG:
|
||||||
ws = 'https://pruebas.comercio-digital.mx/{}'
|
ws = 'https://pruebas.comercio-digital.mx/{}'
|
||||||
URL = {
|
URL = {
|
||||||
'timbra': ws.format('timbre/timbrarV5.aspx'),
|
'timbra': ws.format('timbre4/timbrarV5'),
|
||||||
'cancel': ws.format('cancela3/cancelarUuid'),
|
'cancel': ws.format('cancela4/cancelarUuid'),
|
||||||
'cancelxml': ws.format('cancela3/cancelarXml'),
|
'cancelxml': ws.format('cancela4/cancelarXml'),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
|
@ -26,11 +26,11 @@ log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
PACs = {
|
PACs = {
|
||||||
'finkok': PACFinkok,
|
# ~ 'finkok': PACFinkok,
|
||||||
'comercio': PACComercioDigital,
|
'comercio': PACComercioDigital,
|
||||||
}
|
}
|
||||||
NS_CFDI = {
|
NS_CFDI = {
|
||||||
'cfdi': 'http://www.sat.gob.mx/cfd/3',
|
'cfdi': 'http://www.sat.gob.mx/cfd/4',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,10 +52,10 @@ def _join(*paths):
|
||||||
|
|
||||||
|
|
||||||
class CFDI(object):
|
class CFDI(object):
|
||||||
_version = '3.3'
|
_version = '4.0'
|
||||||
_prefix = 'cfdi'
|
_prefix = 'cfdi'
|
||||||
_xmlns = 'http://www.sat.gob.mx/cfd/3'
|
_xmlns = 'http://www.sat.gob.mx/cfd/4'
|
||||||
schema = f'{_xmlns} http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd'
|
schema = f'{_xmlns} http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd'
|
||||||
_pagos = 'http://www.sat.gob.mx/Pagos'
|
_pagos = 'http://www.sat.gob.mx/Pagos'
|
||||||
PAGOS = {
|
PAGOS = {
|
||||||
'version': '1.0',
|
'version': '1.0',
|
||||||
|
|
|
@ -1,327 +1,401 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<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/3" 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:consumodecombustibles="http://www.sat.gob.mx/consumodecombustibles" 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:terceros="http://www.sat.gob.mx/terceros" xmlns:pago10="http://www.sat.gob.mx/Pagos">
|
<xsl:stylesheet version="2.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">
|
||||||
|
|
||||||
<!-- Con el siguiente método se establece que la salida deberá ser en texto -->
|
<!-- Con el siguiente método se establece que la salida deberá ser en texto -->
|
||||||
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
|
<xsl:output method="text" version="1.0" encoding="UTF-8" indent="no"/>
|
||||||
|
|
||||||
<xsl:include href="utilerias.xslt"/>
|
<xsl:include href="utilerias.xslt"/>
|
||||||
<xsl:include href="comercioexterior11.xslt"/>
|
<xsl:include href="nomina12.xslt"/>
|
||||||
<xsl:include href="leyendasFisc.xslt"/>
|
<xsl:include href="divisas.xslt"/>
|
||||||
<xsl:include href="nomina12.xslt"/>
|
<xsl:include href="ine11.xslt"/>
|
||||||
<xsl:include href="implocal.xslt"/>
|
<xsl:include href="iedu.xslt"/>
|
||||||
<xsl:include href="donat11.xslt"/>
|
<xsl:include href="leyendasFisc.xslt"/>
|
||||||
<xsl:include href="ine11.xslt"/>
|
<xsl:include href="cartaporte20.xslt"/>
|
||||||
<xsl:include href="iedu.xslt"/>
|
<xsl:include href="comercioexterior11.xslt"/>
|
||||||
<xsl:include href="pagos10.xslt"/>
|
<xsl:include href="donat11.xslt"/>
|
||||||
<xsl:include href="divisas.xslt"/>
|
<xsl:include href="pagos20.xslt"/>
|
||||||
<xsl:include href="servicioconstruccion.xslt"/>
|
<xsl:include href="implocal.xslt"/>
|
||||||
<xsl:include href="cartaporte20.xslt"/>
|
<!--
|
||||||
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/pfic/pfic.xslt"/>
|
||||||
<!-- Aquí iniciamos el procesamiento de la cadena original con su | inicial y el terminador || -->
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/TuristaPasajeroExtranjero/TuristaPasajeroExtranjero.xslt"/>
|
||||||
<xsl:template match="/">|<xsl:apply-templates select="/cfdi:Comprobante"/>||</xsl:template>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/cfdiregistrofiscal/cfdiregistrofiscal.xslt"/>
|
||||||
<!-- Aquí iniciamos el procesamiento de los datos incluidos en el comprobante -->
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/pagoenespecie/pagoenespecie.xslt"/>
|
||||||
<xsl:template match="cfdi:Comprobante">
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/aerolineas/aerolineas.xslt"/>
|
||||||
<!-- Iniciamos el tratamiento de los atributos de comprobante -->
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/valesdedespensa/valesdedespensa.xslt"/>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/notariospublicos/notariospublicos.xslt"/>
|
||||||
<xsl:with-param name="valor" select="./@Version"/>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/vehiculousado/vehiculousado.xslt"/>
|
||||||
</xsl:call-template>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/servicioparcialconstruccion/servicioparcialconstruccion.xslt"/>
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/renovacionysustitucionvehiculos/renovacionysustitucionvehiculos.xslt"/>
|
||||||
<xsl:with-param name="valor" select="./@Serie"/>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/certificadodestruccion/certificadodedestruccion.xslt"/>
|
||||||
</xsl:call-template>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/arteantiguedades/obrasarteantiguedades.xslt"/>
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/ventavehiculos/ventavehiculos11.xslt"/>
|
||||||
<xsl:with-param name="valor" select="./@Folio"/>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/detallista/detallista.xslt"/>
|
||||||
</xsl:call-template>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/EstadoDeCuentaCombustible/ecc12.xslt"/>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/consumodecombustibles/consumodeCombustibles11.xslt"/>
|
||||||
<xsl:with-param name="valor" select="./@Fecha"/>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/GastosHidrocarburos10/GastosHidrocarburos10.xslt"/>
|
||||||
</xsl:call-template>
|
<xsl:include href="http://www.sat.gob.mx/sitio_internet/cfd/IngresosHidrocarburos10/IngresosHidrocarburos.xslt"/>
|
||||||
<xsl:call-template name="Opcional">
|
-->
|
||||||
<xsl:with-param name="valor" select="./@FormaPago"/>
|
|
||||||
</xsl:call-template>
|
<!-- Aquí iniciamos el procesamiento de la cadena original con su | inicial y el terminador || -->
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:template match="/">|<xsl:apply-templates select="/cfdi:Comprobante"/>||</xsl:template>
|
||||||
<xsl:with-param name="valor" select="./@NoCertificado"/>
|
<!-- Aquí iniciamos el procesamiento de los datos incluidos en el comprobante -->
|
||||||
</xsl:call-template>
|
<xsl:template match="cfdi:Comprobante">
|
||||||
<xsl:call-template name="Opcional">
|
<!-- Iniciamos el tratamiento de los atributos de comprobante -->
|
||||||
<xsl:with-param name="valor" select="./@CondicionesDePago"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Version"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@SubTotal"/>
|
<xsl:call-template name="Opcional">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Serie"/>
|
||||||
<xsl:call-template name="Opcional">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@Descuento"/>
|
<xsl:call-template name="Opcional">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Folio"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@Moneda"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Fecha"/>
|
||||||
<xsl:call-template name="Opcional">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@TipoCambio"/>
|
<xsl:call-template name="Opcional">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@FormaPago"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@Total"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@NoCertificado"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@TipoDeComprobante"/>
|
<xsl:call-template name="Opcional">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@CondicionesDePago"/>
|
||||||
<xsl:call-template name="Opcional">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@MetodoPago"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@SubTotal"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@LugarExpedicion"/>
|
<xsl:call-template name="Opcional">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Descuento"/>
|
||||||
<xsl:call-template name="Opcional">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@Confirmacion"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Moneda"/>
|
||||||
<!--
|
</xsl:call-template>
|
||||||
Llamadas para procesar al los sub nodos del comprobante
|
<xsl:call-template name="Opcional">
|
||||||
-->
|
<xsl:with-param name="valor" select="./@TipoCambio"/>
|
||||||
<xsl:apply-templates select="./cfdi:CfdiRelacionados"/>
|
</xsl:call-template>
|
||||||
<xsl:apply-templates select="./cfdi:Emisor"/>
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:apply-templates select="./cfdi:Receptor"/>
|
<xsl:with-param name="valor" select="./@Total"/>
|
||||||
<xsl:apply-templates select="./cfdi:Conceptos"/>
|
</xsl:call-template>
|
||||||
<xsl:apply-templates select="./cfdi:Impuestos"/>
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:for-each select="./cfdi:Complemento">
|
<xsl:with-param name="valor" select="./@TipoDeComprobante"/>
|
||||||
<xsl:apply-templates select="."/>
|
</xsl:call-template>
|
||||||
</xsl:for-each>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:template>
|
<xsl:with-param name="valor" select="./@Exportacion"/>
|
||||||
|
</xsl:call-template>
|
||||||
<!-- Manejador de nodos tipo CFDIRelacionados -->
|
<xsl:call-template name="Opcional">
|
||||||
<xsl:template match="cfdi:CfdiRelacionados">
|
<xsl:with-param name="valor" select="./@MetodoPago"/>
|
||||||
<!-- Iniciamos el tratamiento de los atributos del CFDIRelacionados -->
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:with-param name="valor" select="./@TipoRelacion"/>
|
<xsl:with-param name="valor" select="./@LugarExpedicion"/>
|
||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
<xsl:for-each select="./cfdi:CfdiRelacionado">
|
<xsl:call-template name="Opcional">
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:with-param name="valor" select="./@Confirmacion"/>
|
||||||
<xsl:with-param name="valor" select="./@UUID"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
<!--
|
||||||
</xsl:for-each>
|
Llamadas para procesar al los sub nodos del comprobante
|
||||||
</xsl:template>
|
-->
|
||||||
|
<xsl:apply-templates select="./cfdi:InformacionGlobal"/>
|
||||||
<!-- Manejador de nodos tipo Emisor -->
|
<xsl:apply-templates select="./cfdi:CfdiRelacionados"/>
|
||||||
<xsl:template match="cfdi:Emisor">
|
<xsl:apply-templates select="./cfdi:Emisor"/>
|
||||||
<!-- Iniciamos el tratamiento de los atributos del Emisor -->
|
<xsl:apply-templates select="./cfdi:Receptor"/>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:apply-templates select="./cfdi:Conceptos"/>
|
||||||
<xsl:with-param name="valor" select="./@Rfc"/>
|
<xsl:apply-templates select="./cfdi:Impuestos"/>
|
||||||
</xsl:call-template>
|
<xsl:for-each select="./cfdi:Complemento">
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:apply-templates select="."/>
|
||||||
<xsl:with-param name="valor" select="./@Nombre"/>
|
</xsl:for-each>
|
||||||
</xsl:call-template>
|
</xsl:template>
|
||||||
<xsl:call-template name="Requerido">
|
|
||||||
<xsl:with-param name="valor" select="./@RegimenFiscal"/>
|
<!-- Manejador de nodos tipo InformacionGlobal -->
|
||||||
</xsl:call-template>
|
<xsl:template match="cfdi:InformacionGlobal">
|
||||||
</xsl:template>
|
<!-- Iniciamos el tratamiento de los atributos del nodo tipo InformacionGlobal -->
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
<!-- Manejador de nodos tipo Receptor -->
|
<xsl:with-param name="valor" select="./@Periodicidad"/>
|
||||||
<xsl:template match="cfdi:Receptor">
|
</xsl:call-template>
|
||||||
<!-- Iniciamos el tratamiento de los atributos del Receptor -->
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:with-param name="valor" select="./@Meses"/>
|
||||||
<xsl:with-param name="valor" select="./@Rfc"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:with-param name="valor" select="./@Año"/>
|
||||||
<xsl:with-param name="valor" select="./@Nombre"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
</xsl:template>
|
||||||
<xsl:call-template name="Opcional">
|
|
||||||
<xsl:with-param name="valor" select="./@ResidenciaFiscal"/>
|
<!-- Manejador de nodos tipo CFDIRelacionados -->
|
||||||
</xsl:call-template>
|
<xsl:template match="cfdi:CfdiRelacionados">
|
||||||
<xsl:call-template name="Opcional">
|
<!-- Iniciamos el tratamiento de los atributos del nodo tipo CFDIRelacionados -->
|
||||||
<xsl:with-param name="valor" select="./@NumRegIdTrib"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@TipoRelacion"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@UsoCFDI"/>
|
<xsl:for-each select="./cfdi:CfdiRelacionado">
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@UUID"/>
|
||||||
</xsl:template>
|
</xsl:call-template>
|
||||||
|
</xsl:for-each>
|
||||||
<!-- Manejador de nodos tipo Conceptos -->
|
</xsl:template>
|
||||||
<xsl:template match="cfdi:Conceptos">
|
|
||||||
<!-- Llamada para procesar los distintos nodos tipo Concepto -->
|
<!-- Manejador de nodos tipo Emisor -->
|
||||||
<xsl:for-each select="./cfdi:Concepto">
|
<xsl:template match="cfdi:Emisor">
|
||||||
<xsl:apply-templates select="."/>
|
<!-- Iniciamos el tratamiento de los atributos del nodo tipo Emisor -->
|
||||||
</xsl:for-each>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:template>
|
<xsl:with-param name="valor" select="./@Rfc"/>
|
||||||
|
</xsl:call-template>
|
||||||
<!--Manejador de nodos tipo Concepto-->
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:template match="cfdi:Concepto">
|
<xsl:with-param name="valor" select="./@Nombre"/>
|
||||||
<!-- Iniciamos el tratamiento de los atributos del Concepto -->
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:with-param name="valor" select="./@ClaveProdServ"/>
|
<xsl:with-param name="valor" select="./@RegimenFiscal"/>
|
||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:call-template name="Opcional">
|
||||||
<xsl:with-param name="valor" select="./@NoIdentificacion"/>
|
<xsl:with-param name="valor" select="./@FacAtrAdquirente"/>
|
||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:template>
|
||||||
<xsl:with-param name="valor" select="./@Cantidad"/>
|
|
||||||
</xsl:call-template>
|
<!-- Manejador de nodos tipo Receptor -->
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:template match="cfdi:Receptor">
|
||||||
<xsl:with-param name="valor" select="./@ClaveUnidad"/>
|
<!-- Iniciamos el tratamiento de los atributos del nodo tipo Receptor -->
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:with-param name="valor" select="./@Rfc"/>
|
||||||
<xsl:with-param name="valor" select="./@Unidad"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:with-param name="valor" select="./@Nombre"/>
|
||||||
<xsl:with-param name="valor" select="./@Descripcion"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:with-param name="valor" select="./@DomicilioFiscalReceptor"/>
|
||||||
<xsl:with-param name="valor" select="./@ValorUnitario"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Opcional">
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:with-param name="valor" select="./@ResidenciaFiscal"/>
|
||||||
<xsl:with-param name="valor" select="./@Importe"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Opcional">
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:with-param name="valor" select="./@NumRegIdTrib"/>
|
||||||
<xsl:with-param name="valor" select="./@Descuento"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@RegimenFiscalReceptor"/>
|
||||||
<!-- Manejo de sub nodos de información Traslado de Conceptos:Concepto:Impuestos:Traslados-->
|
</xsl:call-template>
|
||||||
<xsl:for-each select="./cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:with-param name="valor" select="./@UsoCFDI"/>
|
||||||
<xsl:with-param name="valor" select="./@Base"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:template>
|
||||||
<xsl:with-param name="valor" select="./@Impuesto"/>
|
|
||||||
</xsl:call-template>
|
<!-- Manejador de nodos tipo Conceptos -->
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:template match="cfdi:Conceptos">
|
||||||
<xsl:with-param name="valor" select="./@TipoFactor"/>
|
<!-- Llamada para procesar los distintos nodos tipo Concepto -->
|
||||||
</xsl:call-template>
|
<xsl:for-each select="./cfdi:Concepto">
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:apply-templates select="."/>
|
||||||
<xsl:with-param name="valor" select="./@TasaOCuota"/>
|
</xsl:for-each>
|
||||||
</xsl:call-template>
|
</xsl:template>
|
||||||
<xsl:call-template name="Opcional">
|
|
||||||
<xsl:with-param name="valor" select="./@Importe"/>
|
<!--Manejador de nodos tipo Concepto-->
|
||||||
</xsl:call-template>
|
<xsl:template match="cfdi:Concepto">
|
||||||
</xsl:for-each>
|
<!-- Iniciamos el tratamiento de los atributos del Concepto -->
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
<!-- Manejo de sub nodos de Retencion por cada una de los Conceptos:Concepto:Impuestos:Retenciones-->
|
<xsl:with-param name="valor" select="./@ClaveProdServ"/>
|
||||||
<xsl:for-each select="./cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion">
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:call-template name="Opcional">
|
||||||
<xsl:with-param name="valor" select="./@Base"/>
|
<xsl:with-param name="valor" select="./@NoIdentificacion"/>
|
||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:with-param name="valor" select="./@Impuesto"/>
|
<xsl:with-param name="valor" select="./@Cantidad"/>
|
||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:with-param name="valor" select="./@TipoFactor"/>
|
<xsl:with-param name="valor" select="./@ClaveUnidad"/>
|
||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:call-template name="Opcional">
|
||||||
<xsl:with-param name="valor" select="./@TasaOCuota"/>
|
<xsl:with-param name="valor" select="./@Unidad"/>
|
||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:with-param name="valor" select="./@Importe"/>
|
<xsl:with-param name="valor" select="./@Descripcion"/>
|
||||||
</xsl:call-template>
|
</xsl:call-template>
|
||||||
</xsl:for-each>
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ValorUnitario"/>
|
||||||
<!-- Manejo de los distintos sub nodos de información aduanera de forma indistinta a su grado de dependencia -->
|
</xsl:call-template>
|
||||||
<xsl:for-each select="./cfdi:InformacionAduanera">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:with-param name="valor" select="./@Importe"/>
|
||||||
</xsl:for-each>
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
<!-- Llamada al manejador de nodos de CuentaPredial en caso de existir -->
|
<xsl:with-param name="valor" select="./@Descuento"/>
|
||||||
<xsl:if test="./cfdi:CuentaPredial">
|
</xsl:call-template>
|
||||||
<xsl:apply-templates select="./cfdi:CuentaPredial"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:if>
|
<xsl:with-param name="valor" select="./@ObjetoImp"/>
|
||||||
|
</xsl:call-template>
|
||||||
<!-- Llamada al manejador de nodos de ComplementoConcepto en caso de existir -->
|
|
||||||
<xsl:if test="./cfdi:ComplementoConcepto">
|
<!-- Manejo de sub nodos de información Traslado de Conceptos:Concepto:Impuestos:Traslados-->
|
||||||
<xsl:apply-templates select="./cfdi:ComplementoConcepto"/>
|
<xsl:for-each select="./cfdi:Impuestos/cfdi:Traslados/cfdi:Traslado">
|
||||||
</xsl:if>
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Base"/>
|
||||||
<!-- Llamada al manejador de nodos de Parte en caso de existir -->
|
</xsl:call-template>
|
||||||
<xsl:for-each select=".//cfdi:Parte">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:with-param name="valor" select="./@Impuesto"/>
|
||||||
</xsl:for-each>
|
</xsl:call-template>
|
||||||
</xsl:template>
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@TipoFactor"/>
|
||||||
<!-- Manejador de nodos tipo Información Aduanera -->
|
</xsl:call-template>
|
||||||
<xsl:template match="cfdi:InformacionAduanera">
|
<xsl:call-template name="Opcional">
|
||||||
<!-- Manejo de los atributos de la información aduanera -->
|
<xsl:with-param name="valor" select="./@TasaOCuota"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@NumeroPedimento"/>
|
<xsl:call-template name="Opcional">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Importe"/>
|
||||||
</xsl:template>
|
</xsl:call-template>
|
||||||
|
</xsl:for-each>
|
||||||
<!-- Manejador de nodos tipo Información CuentaPredial -->
|
|
||||||
<xsl:template match="cfdi:CuentaPredial">
|
<!-- Manejo de sub nodos de Retencion por cada una de los Conceptos:Concepto:Impuestos:Retenciones-->
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:for-each select="./cfdi:Impuestos/cfdi:Retenciones/cfdi:Retencion">
|
||||||
<xsl:with-param name="valor" select="./@Numero"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Base"/>
|
||||||
</xsl:template>
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
<!-- Manejador de nodos tipo ComplementoConcepto -->
|
<xsl:with-param name="valor" select="./@Impuesto"/>
|
||||||
<xsl:template match="cfdi:ComplementoConcepto">
|
</xsl:call-template>
|
||||||
<xsl:for-each select="./*">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:with-param name="valor" select="./@TipoFactor"/>
|
||||||
</xsl:for-each>
|
</xsl:call-template>
|
||||||
</xsl:template>
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@TasaOCuota"/>
|
||||||
<!-- Manejador de nodos tipo Parte -->
|
</xsl:call-template>
|
||||||
<xsl:template match="cfdi:Parte">
|
<xsl:call-template name="Requerido">
|
||||||
<!-- Iniciamos el tratamiento de los atributos de Parte-->
|
<xsl:with-param name="valor" select="./@Importe"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@ClaveProdServ"/>
|
</xsl:for-each>
|
||||||
</xsl:call-template>
|
|
||||||
<xsl:call-template name="Opcional">
|
<!-- Manejo de los distintos sub nodos a cuenta de terceros de forma indistinta a su grado de dependencia -->
|
||||||
<xsl:with-param name="valor" select="./@NoIdentificacion"/>
|
<xsl:for-each select="./cfdi:ACuentaTerceros">
|
||||||
</xsl:call-template>
|
<xsl:apply-templates select="."/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:for-each>
|
||||||
<xsl:with-param name="valor" select="./@Cantidad"/>
|
|
||||||
</xsl:call-template>
|
<!-- Manejo de los distintos sub nodos de información aduanera de forma indistinta a su grado de dependencia -->
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:for-each select="./cfdi:InformacionAduanera">
|
||||||
<xsl:with-param name="valor" select="./@Unidad"/>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:call-template>
|
</xsl:for-each>
|
||||||
<xsl:call-template name="Requerido">
|
|
||||||
<xsl:with-param name="valor" select="./@Descripcion"/>
|
<!-- Llamada al manejador de nodos de CuentaPredial en caso de existir -->
|
||||||
</xsl:call-template>
|
<xsl:if test="./cfdi:CuentaPredial">
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:apply-templates select="./cfdi:CuentaPredial"/>
|
||||||
<xsl:with-param name="valor" select="./@ValorUnitario"/>
|
</xsl:if>
|
||||||
</xsl:call-template>
|
|
||||||
<xsl:call-template name="Opcional">
|
<!-- Llamada al manejador de nodos de ComplementoConcepto en caso de existir -->
|
||||||
<xsl:with-param name="valor" select="./@Importe"/>
|
<xsl:if test="./cfdi:ComplementoConcepto">
|
||||||
</xsl:call-template>
|
<xsl:apply-templates select="./cfdi:ComplementoConcepto"/>
|
||||||
|
</xsl:if>
|
||||||
<!-- Manejador de nodos tipo InformacionAduanera-->
|
|
||||||
<xsl:for-each select=".//cfdi:InformacionAduanera">
|
<!-- Llamada al manejador de nodos de Parte en caso de existir -->
|
||||||
<xsl:apply-templates select="."/>
|
<xsl:for-each select=".//cfdi:Parte">
|
||||||
</xsl:for-each>
|
<xsl:apply-templates select="."/>
|
||||||
</xsl:template>
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
<!-- Manejador de nodos tipo Complemento -->
|
|
||||||
<xsl:template match="cfdi:Complemento">
|
<!-- Manejador de nodos tipo ACuentaTerceros -->
|
||||||
<xsl:for-each select="./*">
|
<xsl:template match="cfdi:ACuentaTerceros">
|
||||||
<xsl:apply-templates select="."/>
|
<!-- Manejo de los atributos del nodo tipo ACuentaTerceros -->
|
||||||
</xsl:for-each>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:template>
|
<xsl:with-param name="valor" select="./@RfcACuentaTerceros"/>
|
||||||
|
</xsl:call-template>
|
||||||
<!-- Manejador de nodos tipo Domicilio fiscal -->
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:template match="cfdi:Impuestos">
|
<xsl:with-param name="valor" select="./@NombreACuentaTerceros"/>
|
||||||
<!-- Manejo de sub nodos de Retencion por cada una de los Impuestos:Retenciones-->
|
</xsl:call-template>
|
||||||
<xsl:for-each select="./cfdi:Retenciones/cfdi:Retencion">
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:with-param name="valor" select="./@RegimenFiscalACuentaTerceros"/>
|
||||||
<xsl:with-param name="valor" select="./@Impuesto"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Requerido">
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:with-param name="valor" select="./@DomicilioFiscalACuentaTerceros"/>
|
||||||
<xsl:with-param name="valor" select="./@Importe"/>
|
</xsl:call-template>
|
||||||
</xsl:call-template>
|
</xsl:template>
|
||||||
</xsl:for-each>
|
|
||||||
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosRetenidos-->
|
<!-- Manejador de nodos tipo Información Aduanera -->
|
||||||
<xsl:call-template name="Opcional">
|
<xsl:template match="cfdi:InformacionAduanera">
|
||||||
<xsl:with-param name="valor" select="./@TotalImpuestosRetenidos"/>
|
<!-- Manejo de los atributos de la información aduanera -->
|
||||||
</xsl:call-template>
|
<xsl:call-template name="Requerido">
|
||||||
<!-- Manejo de sub nodos de información Traslado de Impuestos:Traslados-->
|
<xsl:with-param name="valor" select="./@NumeroPedimento"/>
|
||||||
<xsl:for-each select="./cfdi:Traslados/cfdi:Traslado">
|
</xsl:call-template>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:template>
|
||||||
<xsl:with-param name="valor" select="./@Impuesto"/>
|
|
||||||
</xsl:call-template>
|
<!-- Manejador de nodos tipo Información CuentaPredial -->
|
||||||
<xsl:call-template name="Requerido">
|
<xsl:template match="cfdi:CuentaPredial">
|
||||||
<xsl:with-param name="valor" select="./@TipoFactor"/>
|
<xsl:call-template name="Requerido">
|
||||||
</xsl:call-template>
|
<xsl:with-param name="valor" select="./@Numero"/>
|
||||||
<xsl:call-template name="Requerido">
|
</xsl:call-template>
|
||||||
<xsl:with-param name="valor" select="./@TasaOCuota"/>
|
</xsl:template>
|
||||||
</xsl:call-template>
|
|
||||||
<xsl:call-template name="Requerido">
|
<!-- Manejador de nodos tipo ComplementoConcepto -->
|
||||||
<xsl:with-param name="valor" select="./@Importe"/>
|
<xsl:template match="cfdi:ComplementoConcepto">
|
||||||
</xsl:call-template>
|
<xsl:for-each select="./*">
|
||||||
</xsl:for-each>
|
<xsl:apply-templates select="."/>
|
||||||
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosTrasladados-->
|
</xsl:for-each>
|
||||||
<xsl:call-template name="Opcional">
|
</xsl:template>
|
||||||
<xsl:with-param name="valor" select="./@TotalImpuestosTrasladados"/>
|
|
||||||
</xsl:call-template>
|
<!-- Manejador de nodos tipo Parte -->
|
||||||
</xsl:template>
|
<xsl:template match="cfdi:Parte">
|
||||||
</xsl:stylesheet>
|
<!-- Iniciamos el tratamiento de los atributos de Parte-->
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ClaveProdServ"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@NoIdentificacion"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Cantidad"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@Unidad"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Descripcion"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@ValorUnitario"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@Importe"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
|
||||||
|
<!-- Manejador de nodos tipo InformacionAduanera-->
|
||||||
|
<xsl:for-each select=".//cfdi:InformacionAduanera">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Manejador de nodos tipo Complemento -->
|
||||||
|
<xsl:template match="cfdi:Complemento">
|
||||||
|
<xsl:for-each select="./*">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Manejador de nodos tipo Domicilio fiscal -->
|
||||||
|
<xsl:template match="cfdi:Impuestos">
|
||||||
|
<!-- Manejo de sub nodos de Retencion por cada una de los Impuestos:Retenciones-->
|
||||||
|
<xsl:for-each select="./cfdi:Retenciones/cfdi:Retencion">
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Impuesto"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Importe"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:for-each>
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosRetenidos-->
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalImpuestosRetenidos"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<!-- Manejo de sub nodos de información Traslado de Impuestos:Traslados-->
|
||||||
|
<xsl:for-each select="./cfdi:Traslados/cfdi:Traslado">
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Base"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Impuesto"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@TipoFactor"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TasaOCuota"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@Importe"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:for-each>
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos de TotalImpuestosTrasladados-->
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalImpuestosTrasladados"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
||||||
|
|
|
@ -0,0 +1,233 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<xsl:stylesheet version="2.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:pago20="http://www.sat.gob.mx/Pagos20">
|
||||||
|
|
||||||
|
<xsl:template match="pago20:Pagos">
|
||||||
|
<!--Manejador de Atributos Pagos-->
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Version" />
|
||||||
|
</xsl:call-template>
|
||||||
|
|
||||||
|
<!-- Iniciamos el manejo de los elementos de tipo Totales. -->
|
||||||
|
<xsl:for-each select="./pago20:Totales">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
|
||||||
|
<!-- Iniciamos el manejo de los elementos de tipo Pago. -->
|
||||||
|
<xsl:for-each select="./pago20:Pago">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos de pago20:Totales. -->
|
||||||
|
<xsl:template match="pago20:Totales">
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalRetencionesIVA" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalRetencionesISR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalRetencionesIEPS" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalTrasladosBaseIVA16" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalTrasladosImpuestoIVA16" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalTrasladosBaseIVA8" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalTrasladosImpuestoIVA8" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalTrasladosBaseIVA0" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalTrasladosImpuestoIVA0" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TotalTrasladosBaseIVAExento" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@MontoTotalPagos" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos de pago20:Pago -->
|
||||||
|
<xsl:template match="pago20:Pago">
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@FechaPago" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@FormaDePagoP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@MonedaP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TipoCambioP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@Monto" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@NumOperacion" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@RfcEmisorCtaOrd" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@NomBancoOrdExt" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@CtaOrdenante" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@RfcEmisorCtaBen" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@CtaBeneficiario" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TipoCadPago" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@CertPago" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@CadPago" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@SelloPago" />
|
||||||
|
</xsl:call-template>
|
||||||
|
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos de pago20:DocumentoRelacionado. -->
|
||||||
|
<xsl:for-each select="./pago20:DoctoRelacionado">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos de pago20:ImpuestosP. -->
|
||||||
|
<xsl:for-each select="./pago20:ImpuestosP">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos de pago20:DoctoRelacionado. -->
|
||||||
|
<xsl:template match="pago20:DoctoRelacionado">
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@IdDocumento" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@Serie" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@Folio" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@MonedaDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@EquivalenciaDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@NumParcialidad" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImpSaldoAnt" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImpPagado" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImpSaldoInsoluto" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ObjetoImpDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos del subnodo ImpuestosDR-RetencionesDR-RetencionDR. -->
|
||||||
|
<xsl:for-each select="./pago20:ImpuestosDR/pago20:RetencionesDR/pago20:RetencionDR">
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@BaseDR"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImpuestoDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@TipoFactorDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@TasaOCuotaDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImporteDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:for-each>
|
||||||
|
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos del subnodo ImpuestosDR-TrasladosDR-TrasladoDR. -->
|
||||||
|
<xsl:for-each select="./pago20:ImpuestosDR/pago20:TrasladosDR/pago20:TrasladoDR">
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@BaseDR"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImpuestoDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@TipoFactorDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TasaOCuotaDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@ImporteDR" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Iniciamos el tratamiento de los atributos de pago20:ImpuestosP. -->
|
||||||
|
<xsl:template match="pago20:ImpuestosP">
|
||||||
|
<xsl:apply-templates select="./pago20:RetencionesP"/>
|
||||||
|
<xsl:apply-templates select="./pago20:TrasladosP"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="pago20:RetencionesP">
|
||||||
|
<xsl:for-each select="./pago20:RetencionP">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="pago20:TrasladosP">
|
||||||
|
<xsl:for-each select="./pago20:TrasladoP">
|
||||||
|
<xsl:apply-templates select="."/>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="pago20:RetencionP">
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImpuestoP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImporteP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="pago20:TrasladoP">
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@BaseP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@ImpuestoP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Requerido">
|
||||||
|
<xsl:with-param name="valor" select="./@TipoFactorP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@TasaOCuotaP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:call-template name="Opcional">
|
||||||
|
<xsl:with-param name="valor" select="./@ImporteP" />
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
</xsl:stylesheet>
|
Loading…
Reference in New Issue