Aprende a Timbrar Nómina CFDI con PHP y MySQL Fácilmente - Guía Paso a Pasopost-template-default single single-post postid-46 single-format-standard et_pb_button_helper_class et_fixed_nav et_show_nav et_secondary_nav_enabled et_primary_nav_dropdown_animation_fade et_secondary_nav_dropdown_animation_fade et_header_style_left et_pb_footer_columns4 et_cover_background et_pb_gutter et_pb_gutters3 et_right_sidebar et_divi_theme et-db
771 715 4434

En el ámbito de la gestión fiscal y laboral, la emisión y timbrado de recibos de nómina es un proceso esencial. Este tutorial se enfoca en cómo realizar el timbrado de un Comprobante Fiscal Digital por Internet (CFDI) de nómina utilizando PHP y MySQL, basándose en un sistema de demostración que facilita la comprensión de los mecanismos internos.

Un Demo PHP es un pequeño sistema que permite realizar las pruebas necesarias para aprender a cómo timbrar un CFDI con nuestro servicio de timbrado. De forma general, en este Demo podrás seleccionar cualquiera de los CFDI prestablecidos para timbrarlo, incluyendo un Recibo de Nómina. Este Demo está configurado para funcionar en Ambiente de Pruebas con el RFC Emisor de pruebas. Se muestran el Usuario y Clave de timbrado correspondiente al RFC de pruebas.

Una vez que el CFDI ha sido timbrado aparecerán en pantalla el Layout creado del CFDI y el XML timbrado, así como la respuesta de nuestro servicio de timbrado. Además, podrás guardar en tu computadora el Layout y el XML. También, podrás consultar el estatus del CFDI en el SAT y proceder a su cancelación.

Arquitectura General y Funcionamiento del Demo PHP

Comenzaremos explicando el funcionamiento interno del Demo detallando todas las carpetas y archivos que contiene. El Demo está compuesto por diferentes carpetas y archivos. Como se puede observar, cualquier acción que se ejecute desde la interfaz gráfica del Demo hecha en HTML realizará una llamada al código JavaScript. En el código JavaScript se realizan algunas validaciones y preparativos para poder realizar una llamada a PHP. En PHP se llevan a cabo los procesos más detallados. Por ejemplo, para el timbrado de un CFDI es en el código PHP en donde se crea el Layout, se consumen los servicios web de Conversión de Layout a XML y de Timbrado.

Estructura de Carpetas y Archivos Clave

  • Interfaz Gráfica (HTML): Contiene el código fuente HTML de la interfaz gráfica que se visualiza en el navegador de internet.
  • Lógica de Interacción (JavaScript): Contiene el código fuente JavaScript que se encarga de responder a las acciones que el usuario realiza desde la interfaz gráfica. Aquí se encuentra la librería de JavaScript con JQuery (archivo jquery-1.11.3.min.js).
  • Archivos Temporales: En esta carpeta se crean los archivos de Layout, XML, PDF y demás. Estos archivos son temporales y el Demo los utiliza para completar diferentes procesos que el usuario ejecuta a través de los botones de la interfaz gráfica. Al timbrar un CFDI, en esta carpeta se crea el archivo Layout y el archivo XML, mismos que se utilizan cuando solicitas la descarga de ellos desde la interfaz gráfica.
  • Ejemplos de CFDI (TimbradoCFDI): Esta carpeta contiene archivos PHP que corresponden a cada uno de los ejemplos de CFDI que puedes timbrar con el Demo. Nota: Los códigos fuentes de cada ejemplo de CFDI que puedes timbrar están dentro del Demo en la carpeta "TimbradoCFDI" que contiene archivos PHP que corresponden a cada ejemplo.
  • XSLT: Esta carpeta contiene la carpeta Complementos y el archivo cadenaoriginal_4_0.xslt para la creación de la cadena original de un CFDI. Es importante destacar que por defecto el Demo utiliza los archivos XSLT que ya están incluídos en nuestro servicio de Conversión de Layout a XML, por lo que esta carpeta y su contenido no son utilizados a menos que se configure la interfaz gráfica para usar los archivos XSLT de esta carpeta.

Proceso de Timbrado de un CFDI de Nómina

El proceso de timbrado de un CFDI al inicio puede resultar algo complejo, pero se vuelve sencillo una vez que se ha revisado el código fuente a detalle. Permite timbrar un CFDI. Puedes seleccionar la versión disponible del CFDI y establecer una fecha de emisión diferente a la que aparece por defecto. Encontrarás todos los tipos de CFDI y sus complementos que tenemos disponibles para realizar las pruebas de timbrado.

Lea también: Proceso Detallado de Timbrado de Pagos

La lógica de timbrado implica una función específica que se encargará de revisar qué ejemplo de CFDI fue seleccionado para timbrar y después realiza la llamada al archivo PHP correspondiente al ejemplo de CFDI seleccionado. Dentro del código PHP se crea el Layout, se convierte a XML y se timbra. Se obtiene el identificador del ComboBox del CFDI seleccionado y se procede a hacer una validación para determinar la ruta del archivo PHP mencionada.

Una vez definida la ruta del archivo PHP, se procede a verificar si se utilizará el XSLT incluído en el servicio de Conversión de Layout a XML o si se utilizarán los que están de manera local en el Demo. Después, se realiza la llamada al archivo PHP mediante una función Ajax. En ella, podemos observar que indicamos la ruta del PHP que queremos ejecutar y los parámetros que le vamos a enviar: la fecha de emisión y la configuración del XSLT. La diferencia entre ambas opciones consiste en que para la primera opción, se utiliza el XSLT incluído en nuestro servicio web e internamente dicho archivo XSLT consume a otros archivos XSLT correspondientes a los diversos complementos que existen para el CFDI. Siempre se recomienda utilizar el XSLT incluído en nuestro servicio web de Conversión de Layout a XML.

Únicamente veremos lo más relevante del código PHP, ya que dependiendo del tipo de CFDI puede resultar extenso. Si la conversión fue exitosa, entonces obtenemos el XML sin timbrar en Base64. En caso contrario, obtenemos el mensaje de error que respondió el servicio web. Con este resultado, se determina si se procede o no a timbrar el XML.

Una vez que tenemos el XML sin timbrar en Base64, se procede al timbrado del mismo. En ambos casos, se obtiene la respuesta del servicio web y validamos la variable $codigo para determinar si el timbrado se realizó con éxito y guardar el XML timbrado en la variable $xmlTimbrado. Cuando timbras un CFDI aparecerá el XML resultante en la sección Resultados ubicada en el lado derecho del Demo. El proceso de guardado del Layout y el XML es muy sencillo, utilizando llamadas Ajax al archivo DescargaArchivos.php para la descarga.

Conversión de Layout a XML y Creación de PDF

Cuando se procede a timbrar un CFDI internamente se crea un Layout, el cual es un texto con un formato establecido que corresponde a la estructura de un CFDI. Este Layout se convierte a un XML utilizando el Certificado de Sello Digital, Llave Privada y Contraseña del Emisor. Es posible seleccionar el formato del PDF correspondiente al tipo de CFDI que fue timbrado. Por defecto, está seleccionado el formato de una Factura Electrónica, mismo que abarca otros tipos de CFDI con complementos. El proceso de descarga de PDF consiste en utilizar el archivo XML existente en la carpeta Archivos para enviarlo a nuestro servicio web de Creación de PDF.

Lea también: ¿Qué es el Timbrado de Nómina?

Consulta de Estatus y Cancelación de CFDI

El proceso de consulta del estatus en el SAT de un CFDI es pequeño. Se requiere haber timbrado un CFDI para que se haya creado internamente el archivo de XML en la carpeta Archivos. La función realiza una llamada al archivo ConsultarEstatusCFDISAT.php y evalúa la respuesta que recibe para determinar si hubo un error o no, mostrando el resultado en la sección de Resultados de la interfaz gráfica. Una vez que el servicio web devuelve una respuesta, se hace una evaluación con una serie de IF-ELSE para las acciones a realizar dependiendo del estatus del CFDI que recibimos. Dentro de esta condición, podemos observar que de manera opcional está la consulta del Acuse de Cancelación del CFDI cuyo estatus en el SAT es Cancelado. Para ello se realiza el consumo a un servicio web de consultas enviando como parámetros la información del CFDI. Nota: No existe ambiente de pruebas para la consulta de estatus de un CFDI en el SAT porque los CFDI timbrados en ambiente de pruebas no existen en el SAT, por lo que no es posible realizar una consulta de estatus.

El proceso de cancelación de un CFDI al inicio puede resultar algo complejo, pero se vuelve sencillo una vez que se ha revisado el código fuente a detalle. Se requiere haber timbrado un CFDI para que se haya creado internamente el archivo de XML en la carpeta Archivos. Se utiliza el archivo XML de un CFDI timbrado para obtener la información con la que se creará un archivo XML de Solicitud de Cancelación para posteriormente enviarlo a un servicio web que realizará el proceso de cancelación. Después, evalúa la respuesta que recibe para determinar si hubo un error o no, y lo muestra en la sección de Resultados de la interfaz gráfica. Si hubo éxito, entonces obtenemos el XML de Solicitud de Cancelación que nos devuelve el servicio codificado en Base64. Nota: No existe ambiente de pruebas para la cancelación de CFDI porque los CFDI timbrados en ambiente de pruebas no existen en el SAT, por lo que no es posible realizar una cancelación.

Integración de Datos de Nómina con MySQL

Para la generación de los CFDI de nómina, es fundamental contar con una base de datos que almacene la información de los empleados y sus asignaciones. Un sistema de nómina en PHP requerirá una base de datos MySQL para gestionar estos datos. Los campos típicos en una tabla de asignaciones de empleados (por ejemplo, asignacionesdeempleados) podrían incluir:

Campo Descripción Tipo (ej.) Longitud (ej.)
CEDULA Identificación del empleado INT 10
NOMBRES Nombres del empleado VARCHAR 100
APELLIDOS Apellidos del empleado VARCHAR 100
SUELDO Sueldo base DECIMAL 10,2
SUELDOQUINCENAL Sueldo quincenal DECIMAL 10,2
SUELDOMENSUAL Sueldo mensual DECIMAL 10,2
BONOPORASISTENCIA Bono por asistencia DECIMAL 10,2
HORASEXTRA Monto por horas extra DECIMAL 10,2
BONOVACACIONAL Bono vacacional DECIMAL 10,2
COMISIONES Monto por comisiones DECIMAL 10,2
BONONOCTURNO Bono nocturno DECIMAL 10,2
DIASFERIADOS Pago por días feriados DECIMAL 10,2
PRIMADERESPONSABILIDAD Prima de responsabilidad DECIMAL 10,2
PRIMAPROFESIONALIZACION Prima de profesionalización DECIMAL 10,2
PRIMADETRANSPORTE Prima de transporte DECIMAL 10,2

Es esencial que los campos de la base de datos coincidan con los datos que se intentan insertar desde la aplicación PHP, para evitar errores en el almacenamiento de la información de nómina que luego se usará para el timbrado. La correcta estructuración de la base de datos MySQL es el primer paso para un sistema de nómina funcional.

Herramientas para la Gestión de MySQL

Para la creación y gestión de la base de datos MySQL, existen diversas herramientas que facilitan el trabajo:

Lea también: requisitos fundamentales para el timbrado de nómina

  • Línea de comandos: Permite crear bases de datos y usuarios directamente.
  • phpMyAdmin: Una interfaz web popular para la administración de MySQL.
  • MySQL Workbench: Una herramienta de diseño, desarrollo y administración de bases de datos robusta.
  • Sequel Pro: Interfaz gráfica para MySQL (especialmente en macOS).
  • DBeaver: Una excelente herramienta universal para la gestión de diferentes tipos de bases de datos, incluyendo MySQL.
  • DbVisualizer: Otra herramienta potente para administrar diversas bases de datos.

La combinación de un sistema PHP bien estructurado, un servicio de timbrado eficiente y una base de datos MySQL robusta, permite crear soluciones completas para la emisión y timbrado de recibos de nómina. Este enfoque puede ser escalable para diferentes tamaños de empresa, desde personas físicas hasta grandes corporaciones que requieren interconectar su sistema ERP.

tags: #tutorial #timbrado #de #nomina #con #php