<?xml version=“1.0” encoding=“utf-8”?> <xsl:stylesheet version=“1.0” xmlns:xsl=“www.w3.org/1999/XSL/Transform” xmlns:xs=“www.w3.org/2001/XMLSchema” xmlns:fn=“www.w3.org/2005/xpath-functions” xmlns:nomina12=“www.sat.gob.mx/nomina12”>

<xsl:template match="nomina12:Nomina">
  <!--Manejador de nodos tipo Nomina-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Version" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TipoNomina" />
  </xsl:call-template>
  <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="./@FechaInicialPago" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@FechaFinalPago" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@NumDiasPagados" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalPercepciones" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalDeducciones" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalOtrosPagos" />
  </xsl:call-template>

  <!--  Iniciamos el manejo de los elementos hijo en la secuencia -->
  <xsl:for-each select="./nomina12:Emisor">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

  <xsl:for-each select="./nomina12:Receptor">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

  <xsl:for-each select="./nomina12:Percepciones">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

  <xsl:for-each select="./nomina12:Deducciones">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

  <xsl:for-each select="./nomina12:OtrosPagos">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

  <xsl:for-each select="./nomina12:Incapacidades">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

</xsl:template>

<xsl:template match="nomina12:Emisor">
  <!--Manejador de nodos tipo nomina12:Emisor-->
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@Curp" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@RegistroPatronal" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@RfcPatronOrigen" />
  </xsl:call-template>

  <!--  Iniciamos el tratamiento de los atributos de nomina12:EntidadSNCF-->
  <xsl:for-each select="./nomina12:EntidadSNCF">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

</xsl:template>

  <!--  Iniciamos el manejo de los elementos hijo en la secuencia EntidadSNCF-->
<xsl:template match="nomina12:EntidadSNCF">
  <!--  Iniciamos el manejo de los nodos dependientes -->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@OrigenRecurso" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@MontoRecursoPropio" />
  </xsl:call-template>

</xsl:template>

<xsl:template match="nomina12:Receptor">
  <!--Manejador de nodos tipo nomina12:Receptor-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Curp" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@NumSeguridadSocial" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@FechaInicioRelLaboral" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@Antigüedad" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TipoContrato" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@Sindicalizado" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TipoJornada" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TipoRegimen" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@NumEmpleado" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@Departamento" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@Puesto" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@RiesgoPuesto" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@PeriodicidadPago" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@Banco" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@CuentaBancaria" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@SalarioBaseCotApor" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@SalarioDiarioIntegrado" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@ClaveEntFed" />
  </xsl:call-template>

  <!--  Iniciamos el tratamiento de los atributos de nomina12:SubContratacion-->
  <xsl:for-each select="./nomina12:SubContratacion">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

</xsl:template>

  <!--  Iniciamos el manejo de los elementos hijo en la secuencia SubContratacion-->
<xsl:template match="nomina12:SubContratacion">
  <!--  Iniciamos el manejo de los nodos dependientes -->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@RfcLabora" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@PorcentajeTiempo" />
  </xsl:call-template>

</xsl:template>

<xsl:template match="nomina12:Percepciones">
  <!--Manejador de nodos tipo nomina12:Percepciones-->
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalSueldos" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalSeparacionIndemnizacion" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalJubilacionPensionRetiro" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TotalGravado" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TotalExento" />
  </xsl:call-template>

  <!--  Iniciamos el tratamiento de los atributos de nomina12:Percepcion-->
  <xsl:for-each select="./nomina12:Percepcion">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

  <!--  Iniciamos el tratamiento de los atributos de nomina12:JubilacionPensionRetiro-->
  <xsl:for-each select="./nomina12:JubilacionPensionRetiro">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

  <!--  Iniciamos el tratamiento de los atributos de nomina12:SeparacionIndemnizacion-->
  <xsl:for-each select="./nomina12:SeparacionIndemnizacion">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

</xsl:template>
 <!--  Iniciamos el manejo de los elementos hijo en la secuencia Percepcion-->
<xsl:template match="nomina12:Percepcion">
  <!--Manejador de nodos tipo nomina12:Percepcion-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TipoPercepcion" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Clave" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Concepto" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@ImporteGravado" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@ImporteExento" />
  </xsl:call-template>

  <!--  Iniciamos el tratamiento de los atributos de nomina12:AccionesOTitulos-->
  <xsl:for-each select="./nomina12:AccionesOTitulos">
    <xsl:apply-templates select="."/>
  </xsl:for-each>
  <!--  Iniciamos el tratamiento de los atributos de nomina12:HorasExtra-->
  <xsl:for-each select="./nomina12:HorasExtra">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

</xsl:template>

<!--  Iniciamos el manejo de los elementos hijo en la secuencia AccionesOTitulos-->
<xsl:template match="nomina12:AccionesOTitulos">
  <!--  Iniciamos el manejo de los nodos dependientes -->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@ValorMercado" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@PrecioAlOtorgarse" />
  </xsl:call-template>
</xsl:template>

<!--  Iniciamos el manejo de los elementos hijo en la secuencia HorasExtra-->
<xsl:template match="nomina12:HorasExtra">
  <!--  Iniciamos el manejo de los nodos dependientes -->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Dias" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TipoHoras" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@HorasExtra" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@ImportePagado" />
  </xsl:call-template>
</xsl:template>

 <!--  Iniciamos el manejo de los elementos hijo en la secuencia JubilacionPensionRetiro-->
<xsl:template match="nomina12:JubilacionPensionRetiro">
  <!--Manejador de nodos tipo nomina12:JubilacionPensionRetiro-->
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalUnaExhibicion" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalParcialidad" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@MontoDiario" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@IngresoAcumulable" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@IngresoNoAcumulable" />
  </xsl:call-template>
</xsl:template>

  <!--  Iniciamos el manejo de los elementos hijo en la secuencia SeparacionIndemnizacion-->
<xsl:template match="nomina12:SeparacionIndemnizacion">
  <!--Manejador de nodos tipo nomina12:JubilacionPensionRetiro-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TotalPagado" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@NumAñosServicio" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@UltimoSueldoMensOrd" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@IngresoAcumulable" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@IngresoNoAcumulable" />
  </xsl:call-template>
</xsl:template>

<xsl:template match="nomina12:Deducciones">
  <!--Manejador de nodos tipo nomina12:Deducciones-->
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalOtrasDeducciones" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@TotalImpuestosRetenidos" />
  </xsl:call-template>

  <!--  Iniciamos el tratamiento de los atributos de nomina12:Deduccion-->
  <xsl:for-each select="./nomina12:Deduccion">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

</xsl:template>

  <!--  Iniciamos el manejo de los elementos hijo en la secuencia Deduccion-->
<xsl:template match="nomina12:Deduccion">
  <!--Manejador de nodos tipo nomina12:Deduccion-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TipoDeduccion" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Clave" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Concepto" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Importe" />
  </xsl:call-template>
</xsl:template>

  <xsl:template match="nomina12:OtrosPagos">

  <!--  Iniciamos el tratamiento de los atributos de nomina12:OtroPago-->
  <xsl:for-each select="./nomina12:OtroPago">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

</xsl:template>

<!--  Iniciamos el manejo de los elementos hijo en la secuencia OtroPago-->
<xsl:template match="nomina12:OtroPago">
  <!--Manejador de nodos tipo nomina12:OtroPago-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TipoOtroPago" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Clave" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Concepto" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Importe" />
  </xsl:call-template>

  <!--  Iniciamos el tratamiento de los atributos de nomina12:SubsidioAlEmpleo-->
  <xsl:for-each select="./nomina12:SubsidioAlEmpleo">
    <xsl:apply-templates select="."/>
  </xsl:for-each>
  <!--  Iniciamos el tratamiento de los atributos de nomina12:CompensacionSaldosAFavor-->
  <xsl:for-each select="./nomina12:CompensacionSaldosAFavor">
    <xsl:apply-templates select="."/>
  </xsl:for-each>

</xsl:template>

<!--  Iniciamos el manejo de los elementos hijo en la secuencia SubsidioAlEmpleo-->
<xsl:template match="nomina12:SubsidioAlEmpleo">
  <!--Manejador de nodos tipo nomina12:SubsidioAlEmpleo-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@SubsidioCausado" />
  </xsl:call-template>
</xsl:template>

<!--  Iniciamos el manejo de los elementos hijo en la secuencia CompensacionSaldosAFavor-->
<xsl:template match="nomina12:CompensacionSaldosAFavor">
  <!--Manejador de nodos tipo nomina12:CompensacionSaldosAFavor-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@SaldoAFavor" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@Año" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@RemanenteSalFav" />
  </xsl:call-template>
</xsl:template>

<xsl:template match="nomina12:Incapacidades">
  <!--  Iniciamos el tratamiento de los atributos de nomina12:Incapacidades-->
  <xsl:for-each select="./nomina12:Incapacidad">
    <xsl:apply-templates select="."/>
  </xsl:for-each>
</xsl:template>

<!--  Iniciamos el manejo de los elementos hijo en la secuencia Incapacidad-->
<xsl:template match="nomina12:Incapacidad">
  <!--Manejador de nodos tipo nomina12:Incapacidad-->
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@DiasIncapacidad" />
  </xsl:call-template>
  <xsl:call-template name="Requerido">
    <xsl:with-param name="valor" select="./@TipoIncapacidad" />
  </xsl:call-template>
  <xsl:call-template name="Opcional">
    <xsl:with-param name="valor" select="./@ImporteMonetario" />
  </xsl:call-template>

</xsl:template>

</xsl:stylesheet>