El problema: "me da mi factura, por favor"
En Mexico, los comensales pueden solicitar factura fiscal por su consumo en restaurantes. Para el restaurante La Parrilla del Norte con 3 sucursales y un promedio de 10 facturas diarias por sucursal, el proceso manual era un cuello de botella:
- El comensal pide factura al mesero. Da sus datos fiscales (RFC, razon social, uso CFDI).
- El mesero anota los datos en un papelito o los dicta al cajero.
- El cajero abre el sistema de facturacion, captura los datos del comensal y los conceptos del ticket.
- Timbra con el PAC. Espera respuesta.
- Abre Word/Excel, copia los datos del CFDI y genera el PDF manualmente.
- Pregunta al comensal: "a que correo se la mando?"
- Abre el email, adjunta el PDF + XML, envia.
Este proceso tomaba entre 8 y 15 minutos por factura. Con 10 facturas al dia por sucursal (30 total), eran 4-7 horas diarias de trabajo del cajero solo en facturacion. Y el comensal esperaba 15 minutos despues de pagar, una experiencia terrible.
La solucion: factura al celular en 30 segundos
El nuevo flujo con Reportia + WhatsApp Business API:
Comensal escanea QR en la mesa
Cada mesa tiene un QR que abre un formulario web simple. El comensal captura su RFC, razon social, uso CFDI y numero de WhatsApp. El formulario valida el RFC contra el catalogo del SAT en tiempo real.
POS cierra la cuenta y timbra
Cuando el cajero cierra la cuenta, el POS (SoftRestaurant) envia el CFDI al PAC y recibe el XML timbrado. Los datos del comensal ya estan pre-cargados del formulario QR.
Reportia genera el PDF
Un webhook dispara POST a /v1/render con los datos del CFDI y la plantilla del restaurante (logo, colores, desglose de platillos con IVA). Reportia devuelve el PDF en menos de 2 segundos.
WhatsApp automatico al comensal
El script envia el PDF + XML por WhatsApp Business API al numero que el comensal dejo en el formulario QR. El mensaje incluye: "Aqui esta tu factura de La Parrilla del Norte. Gracias por visitarnos." El comensal recibe su factura antes de levantarse de la mesa.
Ejemplo de codigo: del POS al WhatsApp
Asi se ve el script que recibe el webhook del POS, genera el PDF con Reportia y envia por WhatsApp:
import requests
def generar_y_enviar_factura(venta: dict, datos_fiscales: dict):
"""Recibe datos del POS + datos fiscales del QR form."""
# 1. Armar JSON para Reportia
data = {
"template": "factura-restaurante",
"format": "pdf",
"data": {
"restaurante": "La Parrilla del Norte",
"sucursal": venta["sucursal"],
"emisor": {
"rfc": "PNO210315AB1",
"nombre": "PARRILLA DEL NORTE SA DE CV",
"regimen": "601"
},
"receptor": {
"rfc": datos_fiscales["rfc"],
"nombre": datos_fiscales["razon_social"],
"uso_cfdi": datos_fiscales["uso_cfdi"],
"domicilio_fiscal": datos_fiscales["cp"]
},
"conceptos": [
{
"descripcion": item["nombre"],
"cantidad": item["cantidad"],
"precio_unitario": item["precio"],
"importe": item["cantidad"] * item["precio"],
"iva": item["cantidad"] * item["precio"] * 0.16,
"clave_sat": "90101500" # Restaurantes
}
for item in venta["items"]
],
"propina": venta.get("propina", 0),
"subtotal": venta["subtotal"],
"iva": venta["iva"],
"total": venta["total"],
"uuid": venta["uuid_timbrado"],
"mesa": venta["mesa"],
"mesero": venta["mesero"],
"fecha": venta["fecha"],
"metodo_pago": venta["metodo_pago"],
"forma_pago": venta["forma_pago"]
}
}
# 2. Generar PDF con Reportia
resp = requests.post(
"https://reportia.4l3.org/v1/render",
json=data,
timeout=10
)
pdf_bytes = resp.content
# 3. Enviar por WhatsApp Business API
wa_resp = requests.post(
"https://graph.facebook.com/v19.0/PHONE_ID/messages",
headers={"Authorization": "Bearer WA_TOKEN"},
json={
"messaging_product": "whatsapp",
"to": datos_fiscales["whatsapp"],
"type": "document",
"document": {
"filename": f"factura_{venta['uuid_timbrado'][:8]}.pdf",
"caption": "Aqui esta tu factura de La Parrilla "
"del Norte. Gracias por visitarnos."
}
},
files={"file": ("factura.pdf", pdf_bytes, "application/pdf")}
)
return {"pdf_size": len(pdf_bytes), "wa_status": wa_resp.status_code}
Anatomia de la factura de restaurante
La plantilla esta optimizada para el giro de restaurantes y alimentos:
Encabezado
- Logo del restaurante
- Datos del emisor (RFC, razon social)
- Sucursal y numero de mesa
- Nombre del mesero (opcional)
Detalle de consumo
- Tabla: platillo, cantidad, precio unitario, importe
- Desglose por tipo: alimentos vs bebidas
- Propina separada (si aplica)
- Clave SAT 90101500 (servicios de restaurante)
Impuestos
- IVA 16% desglosado por concepto
- IEPS si hay bebidas alcoholicas
- Subtotal, impuestos y total claro
- Forma y metodo de pago (tarjeta, efectivo)
Timbrado SAT
- UUID del timbre fiscal digital
- Sello digital del SAT
- Cadena original del complemento
- QR de verificacion SAT (opcional)
Resultados despues de 2 meses
Antes (manual)
- 8-15 min por factura
- 4-7 horas diarias de cajero en facturacion
- Comensal esperaba 15 min despues de pagar
- Errores en datos fiscales por dictado
- 20% de comensales no regresaban por su factura
Despues (Reportia + WhatsApp)
- 30 segundos por factura (end-to-end)
- 10 minutos/dia (automatico)
- Comensal recibe factura antes de irse
- 0 errores (datos del QR validados contra SAT)
- 98% de solicitudes atendidas al instante
La mejora mas valiosa fue la experiencia del comensal. Ya no tiene que dictar datos fiscales, esperar 15 minutos, ni regresar otro dia por su factura. Escanea el QR, llena sus datos, y cuando paga recibe la factura en WhatsApp.
El costo: $9 USD/mes en el plan Pro de Reportia (300 facturas al mes, dentro del limite de 1,000). El ahorro en tiempo del cajero paga el costo 50 veces al mes.
Flujo completo: de la mesa al WhatsApp
Compatibilidad con sistemas POS
Si tu POS exporta datos de ventas como JSON, CSV o via API, funciona con Reportia:
Costos para restaurantes
| Plan | Precio | Facturas/mes | Ideal para |
|---|---|---|---|
| Free | $0 | 50 | Restaurante pequeno (2 facturas/dia) |
| Pro | $9 USD/mes | 1,000 | Restaurante mediano (1-3 sucursales) |
| Scale | $29 USD/mes | 10,000 | Cadena de restaurantes (10+ sucursales) |
| Lifetime | $49 pago unico | 1,000/mes para siempre | Restaurante que quiere pagar una vez |