Cómo Automatizar la Facturación en Walmart y Sam's Club: 5 Trampas Ocultas del Portal CFDI 4.0
Share
Cómo Automatizar la Facturación en Walmart y Sam's Club: 5 Trampas Ocultas del Portal CFDI 4.0
Si alguna vez intentaste automatizar la descarga de facturas de supermercados en México, sabes que el camino está lleno de obstáculos invisibles. Nosotros lo hicimos, y en el proceso encontramos cinco errores que no están documentados en ningún lado.
Este artículo documenta exactamente qué sale mal y cómo resolverlo.
El Problema: Facturación Manual = Tiempo Perdido
Un cliente nuestro acumulaba tickets de Walmart y Sam's Club sin facturar. Facturas que representan gastos deducibles reales, perdidos por el solo hecho de que el proceso manual es tedioso: entrar al portal, capturar el RFC, llenar los campos, esperar el PDF.
La solución obvia: automatizarlo. La realidad: el portal tiene comportamientos que ninguna documentación oficial menciona.
El Portal: facturación.walmartmexico.com.mx
Dato importante que muchos no saben: Walmart y Sam's Club usan exactamente el mismo portal de facturación. El acceso es por subdominio diferente, pero la lógica es idéntica. Esto significa que un solo adaptador automatizado cubre ambas cadenas.
El portal está hecho en ASP.NET WebForms con postbacks AJAX para algunas secciones. Eso es clave para entender los bugs.
Los 5 Bugs que Encontramos (y sus Soluciones)
Bug 1: La Fecha Aparece Como 2024 en vez de 2026
El ticket tiene la fecha en formato DD/MM/YY. Cuando el parser la convierte a fecha completa, interpreta "26" como el año 1926, no 2026.
Muchas librerías de parsing de fechas en Python asumen que si el año tiene 2 dígitos y es menor a 50, es el siglo XX. Años mayores a 68 se interpretan como 1900+. El año 26 queda atrapado en esa lógica.
Solución: Lógica explícita post-parsing:if year < 100:
year += 2000 if year < 50 else 1900
Bug 2: El Régimen Fiscal Borra los Datos que ya Capturaste
El formulario tiene un campo de régimen fiscal que dispara un postback AJAX al seleccionarse. Ese postback regenera partes del formulario del lado del servidor y, en el proceso, limpia los campos de CP, email y uso de CFDI que ya habías llenado.
El orden de llenado importa. Si capturas CP y email antes del régimen fiscal, los pierdes.
Solución: Seleccionar el régimen fiscal primero, luego llenar todos los demás campos. O re-llenar los campos después del postback con una espera explícita.Bug 3: La Sesión Se Pierde Sin Que el Portal Avise
Si la sesión expira mientras el bot está procesando (o si hay algún error intermedio), el portal hace un redirect silencioso a Default.aspx en vez de mostrar un error visible.
Si tu automatización no detecta ese redirect, seguirá intentando llenar campos que ya no existen, sin entender por qué falla.
Solución: Verificar después de cada acción significativa que no estás en la página de inicio de sesión:if "Default.aspx" in driver.current_url:
raise SessionExpiredException("Sesión perdida, re-autenticar")
Bug 4: Sam's Club Salta una Pantalla que Walmart Sí Muestra
El flujo de Walmart incluye una pantalla de método de pago (frmPaymentType). Sam's Club omite esa pantalla y avanza directo a confirmación.
Un bot diseñado para Walmart se queda esperando una pantalla que en Sam's nunca llega.
Solución: Hacer el paso de método de pago condicional:payment_form = driver.find_elements(By.ID, "frmPaymentType")
if payment_form:
# Llenar datos de pago
pass
Continuar con confirmación directamente
Bug 5: El Portal Rechaza Emails Corporativos con Dominios Privados
El campo de email del receptor (donde llega la factura) tiene validación que rechaza dominios que no reconoce. Dominios corporativos propios, como @empresa.com o @empresa.cloud, pueden ser rechazados.
No hay mensaje de error claro. El formulario simplemente no avanza.
Solución: Usar un email de Gmail o dominio reconocido para este campo. Si automatizas para un cliente, confirmar qué email acepta el portal antes de configurar el sistema.La Regla de Oro del CFDI 4.0
El cambio más importante de CFDI 4.0 respecto a versiones anteriores: los datos del receptor deben coincidir exactamente con la Constancia de Situación Fiscal (CSF) del SAT.
Nombre, RFC, código postal, y régimen fiscal deben ser idénticos carácter a carácter. Si el nombre en tu sistema dice "GARCIA LOPEZ MARIA" pero en el SAT está registrado como "GARCÍA LÓPEZ MARÍA" (con tildes), la factura se rechaza.
Antes de automatizar la facturación de cualquier cliente, verificar sus datos contra el SAT primero.
Resultado
Con estos cinco ajustes, el sistema ahora obtiene facturas de Walmart y Sam's de forma completamente automatizada. El cliente recibe las facturas en Telegram sin intervención manual. Dos tickets que estaban pendientes fueron facturados en la misma sesión: uno de $830 y otro de $3,919.
Preguntas Frecuentes
¿Funciona esto para otros portales de supermercados?Cada cadena tiene su propio portal. HEB, Soriana y Chedraui tienen portales distintos con sus propios comportamientos. Los bugs documentados aquí son específicos de Walmart/Sam's.
¿Se puede aplicar el mismo enfoque a otros portales?Sí. Los patrones son generalizables: postbacks AJAX que borran campos, sesiones sin aviso, flujos que varían entre sub-marcas. El debug es el mismo: revisar redirects, verificar estado del formulario después de cada acción, hacer condicionales para pasos opcionales.
¿Qué herramienta usaron para la automatización?Playwright en Python, con un sistema de gestión de sesiones persistentes para evitar re-autenticación en cada ejecución.
---
Si necesitas automatizar la facturación de tu empresa o resolver problemas con portales CFDI 4.0, escribe a contacto@varelainsights.com.