Captura1

Como buen godín, cada año me enfrento a la misma rutina: revisar y hacer una relación de todas mis facturas para asegurarme de que todo lo capturado en el SAT coincide con lo que tengo en mis registros. Este proceso puede resultar tedioso, especialmente cuando se trata de un gran volumen de documentos. Para simplificar esta tarea, decidí crear un script en Python que me ayude a generar una relación básica de mis facturas electrónicas. En este artículo, te compartiré el contexto de esta herramienta, cómo funciona y cómo puedes implementarla en tu propio flujo de trabajo.

Contexto

Desde que el SAT actualizó su sistema de facturación, muchos de nosotros hemos tenido que adaptarnos a cambios que, aunque positivos, pueden complicar la gestión de nuestras facturas. Este script está diseñado para procesar las facturas electrónicas en formato XML, extraer información clave y generar un archivo CSV que contenga una relación de estas facturas.

¿Qué hace el script?

El script que he desarrollado tiene como objetivo principal extraer datos relevantes de las facturas en formato XML y organizarlos en un archivo CSV que puede ser abierto por Excel. A través de un análisis de la estructura XML de las facturas, el script identifica y recopila detalles como la fecha de emisión, el RFC del emisor y receptor, los nombres correspondientes y el total de cada factura. Esto permite una revisión más ágil y eficiente de la información.

Limitaciones

Es importante mencionar que este script funciona únicamente con las facturas del año actual y del año anterior, siempre y cuando las empresas hayan actualizado sus formatos de facturación. Esto significa que las facturas de años anteriores que no se hayan actualizado no serán procesadas correctamente.

Instalación de librerías necesarias

Antes de ejecutar el script, asegúrate de tener Python instalado en tu máquina. El script utiliza las bibliotecas estándar de Python, por lo que no necesitas instalar librerías adicionales. Sin embargo, si no tienes Python, puedes descargarlo desde aquí.

Cómo usar el script paso a paso

  1. Preparar el entorno:
    • Crea una carpeta en tu computadora donde colocarás todas tus facturas en formato XML.
  2. Guardar el script:
    • Copia el código proporcionado a continuación en un archivo llamado procesar_facturas.py.
    import os
    import xml.etree.ElementTree as ET
    import csv
    
    def extract_data_from_xml(xml_file):
        tree = ET.parse(xml_file)
        root = tree.getroot()
    
        # Namespace utilizado en las facturas electrónicas
        ns = {'cfdi': 'http://www.sat.gob.mx/cfd/4'}
    
        # Datos básicos de la factura
        fecha = root.attrib.get('Fecha')
        total = root.attrib.get('Total')
    
        # Intentamos encontrar el elemento Emisor y Receptor
        emisor = root.find('cfdi:Emisor', ns)
        receptor = root.find('cfdi:Receptor', ns)
    
        # Verificamos que los elementos existan antes de intentar acceder a sus atributos
        rfc_emisor = emisor.attrib.get('Rfc') if emisor is not None else 'No encontrado'
        nombre_emisor = emisor.attrib.get('Nombre') if emisor is not None else 'No encontrado'
        rfc_receptor = receptor.attrib.get('Rfc') if receptor is not None else 'No encontrado'
        nombre_receptor = receptor.attrib.get('Nombre') if receptor is not None else 'No encontrado'
    
        return [fecha, rfc_emisor, nombre_emisor, rfc_receptor, nombre_receptor, total]
    
    def process_xml_folder():
        folder_path = os.path.dirname(os.path.abspath(__file__))
        data = []
        for file_name in os.listdir(folder_path):
            if file_name.endswith('.xml'):
                xml_path = os.path.join(folder_path, file_name)
                try:
                    data.append(extract_data_from_xml(xml_path))
                except ET.ParseError as e:
                    print(f"Error al parsear {file_name}: {e}")
                except Exception as e:
                    print(f"Error procesando {file_name}: {e}")
    
        return data
    
    def save_to_csv(data, output_file):
        header = ['Fecha', 'RFC Emisor', 'Nombre Emisor', 'RFC Receptor', 'Nombre Receptor', 'Total']
           
        with open(output_file, 'w', newline='', encoding='utf-8') as csv_file:
            writer = csv.writer(csv_file)
            writer.writerow(header)
            writer.writerows(data)
    
    # El script toma automáticamente la ruta del directorio donde está guardado
    output_file = 'relacion_gastos.csv'
    
    data = process_xml_folder()
    save_to_csv(data, output_file)
    
    print(f"Datos guardados en {output_file}")
    
  3. Colocar las facturas:
    • Mueve todas tus facturas XML a la misma carpeta donde guardaste el script.
  4. Ejecutar el script:
    • Abre una terminal o símbolo del sistema.
    • Navega a la carpeta donde está el script y ejecuta el siguiente comando:

      python procesar_facturas.py
      
  5. Revisar el archivo CSV:
    • Una vez que el script termine de ejecutarse, encontrarás un archivo llamado relacion_gastos.csv en la misma carpeta. Este archivo contendrá la relación de tus facturas con la información extraída.

Este script es una herramienta sencilla pero efectiva para ayudar a los godínes a mantener un control más organizado de sus facturas. Puedes ahorrar tiempo y reducir la posibilidad de errores en la revisión de tus documentos fiscales.