PIT CoffeeVolver a la propuesta

PIT Coffee · Roadmap de backend

Qué necesita el servidor para que funcione cada pantalla, botón y función del lienzo PIT Coffee · App web. Los códigos (M04, E03, P05, A15) son los nombres de las pantallas en Doop. Las pantallas de escritorio del cliente (E01 a E13) usan las mismas llamadas que las de móvil, así que aparecen junto a su equivalente.

0. Cómo leer este documento

1. Piezas del backend

#PiezaQué haceLa usan
1Cuentas y sesiónEntrar con celular y código, entrar con correo, recuperar cuenta, perfil, borrar cuentaM27 a M30, M33, M34, M22, M26, E08, E09
2Personal y permisosPIN, puestos, invitaciones, qué puede hacer cada puestoP01, A12
3Ruta y paradasCalendario semanal, paradas del día, abrir, cerrar, retrasar, cancelar, posición del camiónM01 a M04, M41, E02, P02, P03, A05, A06
4Menú y disponibilidadCategorías, productos, tamaños, extras, alérgenos, agotados por hoyM07, M08, E03, P06, A03, A04
5InventarioCarga del día, consumo por receta, merma, apagado automáticoA16, P06
6Carrito y cotizaciónTotal, entrega, mínimo, cashback, promociones, cupo por franjaM09 a M12, M35, E01, E04, E13
7PagosTarjetas guardadas, cobro, rechazos, reembolsos, conciliaciónM13, M14, M37, M42, E11, A02, A15
8PedidosCrear, estados, código de entrega, cancelar, repetir, historialM15 a M21, M32, E05, E06, P04, P05, A02
9RepartoZonas, asignación, viaje, entrega, cliente no encontradoM10, M11, M17, P07 a P09, A07
10LealtadCashback, sellos, recompensas, promociones, registro de movimientosM18, M23, M24, E07, A09, A10, A13, A14
11AvisosNotificación web, WhatsApp, SMS, correo, bandeja, preferenciasM05, M06, M25, A08
12FacturaciónDatos fiscales, emitir y descargar facturaM38
13AyudaReportes de problema con un pedido, respuesta y compensaciónM39, A01
14ReportesVentas, productos, tiempos, exportar a ExcelA01, A11, A14
15Equipos del camiónEstado de dispositivos, impresora, cortes de internetA17, P10, M31
16Tiempo realCambios de pedido, cola, posición del camión y del repartidorM15 a M17, M41, P04, P07, A01
17Tareas programadasAvisos de cercanía, vencimientos, conciliación, cierres automáticosSección 6

2. Datos principales

TablaCampos clave
clientescelular verificado, correo, nombre, nota de gusto, parada habitual, estado (activa, por borrar)
lugares_frecuentescliente, nombre, texto del lugar, coordenadas, indicaciones, principal
personalnombre, puestos, PIN cifrado, estado (invitado, activo, baja), última entrada
permisos_puestopuesto, acción, permitido, límite (por ejemplo ajuste hasta $100)
paradasnombre, coordenadas, radio de aviso, radio de reparto, tarifa, mínimo, cupo por franja, minutos de anticipación
paradas_diaparada, fecha, llega, se va, estado (programada, en camino, abierta, en pausa, cerrada, cancelada), retraso, motivo
franjasparada del día, hora, cupo, ocupados, apartados
categorias, productos, tamanos, grupos_extra, extrasprecio, alérgenos, cuenta como sello, foto, publicado
agotados_diaproducto o extra, fecha, quién lo apagó, hora
insumos, recetas, inventario_dia, mermascargado, usado, queda, límite de aviso
carritoscliente, parada del día, forma de recibir, líneas, nota, usa cashback, recompensa
pedidosfolio, cliente, parada del día, franja, forma de recibir, estado, código de 3 dígitos, totales, propina, quiere factura
pedido_lineasproducto, tamaño, extras, cantidad, precio cobrado
pedido_eventospedido, estado, hora, quién, dispositivo (historial que no se borra)
pagospedido, intento, monto, estado, id del procesador, llave de idempotencia
reembolsospago, monto, motivo, estado, quién
tarjetascliente, token del procesador, marca, últimos 4, vence, principal (nunca el número completo)
entregaspedido, repartidor, viaje, prometido, estado, motivo de no entrega, llamadas, espera
cashback_movimientoscliente, tipo, monto, origen, quién, vence, saldo después (solo se agrega)
sellos_movimientos, recompensascliente, cantidad, origen, estado (disponible, usada, vencida)
promocionestipo, valor, tope, fechas, paradas, público, presupuesto, gastado, estado
avisos_preferencias, suscripciones_push, avisos_enviadospor cliente, canal, tipo, parada
datos_fiscales, facturasRFC, razón social, CP, régimen, uso, archivos
reportes_problemapedido, tipo, texto, foto, estado, resolución
solicitudes_paradacliente, lugar pedido (E02, «Pedir que el camión pase por aquí»)
dispositivos, cortes_conexionbatería, última señal, impresora, duración del corte
bitacoraquién, qué, cuándo, antes y después (toda acción del personal y del panel)

3. Estados de un pedido

stateDiagram-v2
    [*] --> PorPagar
    PorPagar --> Pagado: cobro aprobado
    PorPagar --> Vencido: pasó el apartado
    Pagado --> EnPreparacion: Empezar (P04)
    Pagado --> Cancelado: cliente cancela (M32)
    EnPreparacion --> Listo: Marcar listo (P04)
    Listo --> Entregado: código en ventanilla (P05)
    Listo --> EnCamino: Lo llevo yo (P07)
    EnCamino --> Entregado: Entregado a (P09)
    EnCamino --> NoEntregado: no salió (P09)
    NoEntregado --> Entregado: pasa a recoger
    NoEntregado --> Reembolsado: decide admin (A02)
    Listo --> Guardado: no alcanza a pasar (M16)
    Guardado --> Entregado
    Pagado --> Reembolsado: parada cancelada (P03)
    Entregado --> [*]

Reglas que el servidor hace cumplir:

4. Flujos completos

4.1 Pedir y recoger en el camión

  1. La página pide la ruta del día y el menú de la parada elegida (M01, M07).
  2. El cliente arma el carrito. Cada cambio pide una cotización al servidor (M09).
  3. Al tocar «Ir a pagar», el servidor valida todo otra vez y aparta un lugar en la franja por 5 minutos (M35).
  4. Al tocar «Pagar», el servidor crea el pedido «Por pagar», aparta el cashback y cobra con una llave de idempotencia (M13).
  5. El procesador confirma por webhook. El pedido pasa a «Pagado», recibe folio y código de 3 dígitos, y entra a la cola de preparación (P04).
  6. Preparación toca «Empezar» y luego «Marcar listo». El cliente ve cada paso en vivo (M15, M16) y recibe el aviso de «listo».
  7. En ventanilla, el personal teclea el código y toca «Entregar» (P05).
  8. Al entregar: se acredita el cashback, se suman sellos, se desbloquea la recompensa si toca y se descuenta el inventario (M18).

4.2 Entrega cercana

Igual que 4.1, con estos cambios:

  1. La cotización revisa que el lugar esté dentro del radio de reparto de la parada, suma la tarifa y exige el pedido mínimo. Si queda fuera, responde con las alternativas de M11.
  2. Al quedar «Listo», el pedido aparece en la lista del repartidor (P07). «Lo llevo yo» lo asigna. «Llevarlo en el mismo viaje» lo suma al viaje abierto.
  3. El teléfono del repartidor manda su posición mientras el viaje está abierto. El cliente la ve en M17.
  4. «Ya llegué, avisarle» manda el aviso y arranca un reloj de 5 minutos (P08, P09).
  5. «Entregado a…» cierra el pedido. Si el cliente no sale, «Regresar al camión» se activa al terminar el reloj, pide motivo y deja el pedido «No entregado» 20 minutos en la repisa. El reembolso lo decide la administradora (A02).

4.3 El pago falla

4.4 Retraso o cancelación de una parada

4.5 Sin conexión

5. Pantalla por pantalla

Cada fila: qué toca la persona, qué llamada hace, qué manda, qué espera de vuelta y qué puede salir mal.

5.1 Cliente · entrar y cuenta

PantallaBotón o funciónLlamadaMandaEsperaErrores que debe contestar
M27, E09Enviarme un códigoPOST /sesion/codigocelularsegundos para pedir otronúmero inválido, demasiados intentos
M28ContinuarPOST /sesion/verificarcelular, códigosesión, y si es cuenta nuevacódigo incorrecto, 5 intentos agotados, código vencido
M28Recibirlo por WhatsAppPOST /sesion/codigocelular, canaligual que arribasin WhatsApp en ese número
M28Cambiarsin llamada
M29Empezar a pedirPATCH /yonombre, correo, parada habitualperfilcorreo ya usado en otra cuenta
M33Enviarme el enlacePOST /sesion/enlacecorreoconfirmacióncorreo mal escrito, demasiados envíos
M33(abrir el enlace)POST /sesion/enlace/usartokensesiónenlace vencido (15 min) o ya usado
M34Enviarme el enlace, número nuevoPOST /cuenta/recuperar, luego POST /cuenta/cambiar-celularcorreo, después celular y códigocuenta con saldo y sellos intactossin correo registrado (se resuelve en el camión con identificación)
M27, E09Ver el menú sin cuentaGET /ruta/hoy, GET /menudatos públicos
E09Entrada del personalnavegación a P01
M22, E08(abrir Cuenta)GET /yoperfil, saldo, sellos, resumen
M22, E08Cerrar sesiónDELETE /sesion
M26, E08Guardar cambiosPATCH /yonombre, correo, gustoperfilcambiar celular exige código nuevo
M26Agregar o editar lugarPOST, PATCH, DELETE /yo/lugaresnombre, lugar, indicaciones, principallistalugar fuera del parque
M30, E08Eliminar mi cuentaDELETE /yoconfirmaciónfecha de borrado (30 días)pedido en curso: se programa al cerrarlo
M40Descargar en PDFGET /legal/{documento}texto, versión, PDF

5.2 Cliente · ruta, menú y avisos

PantallaBotón o funciónLlamadaMandaEsperaErrores
M01 a M03, E01, E10(abrir Inicio)GET /ruta/hoyubicación opcionalparadas, estado de cada una, distancia a pie, si acepta pedidossin ruta hoy: próxima fecha y semana (M03)
M04, E02Días de la semanaGET /ruta?fecha=fechaparadas de ese día
M41(mapa en vivo)canal camionposición, llegada estimada, hora del datoseñal perdida: usar hora programada
M01, M04, M41Avisarme, Avisarme cuando llegue, Avisarme el lunesPOST /avisos/seguirparada del día o fechaconfirmaciónsin permiso de avisos: mandar a M05
M36Avisarme cuando reabranPOST /avisos/seguirparada del día, tipo reaperturaconfirmación
E02Pedir que el camión pase por aquíPOST /solicitudes-paradalugarconteo de solicitudesuna por persona y lugar
M05Usar mi ubicaciónPOST /yo/ubicacion y POST /avisos/suscripcioncoordenadas, suscripción pushparadas a piepermiso negado
M05Elegir mi parada a manoPUT /yo/paradasparadaslista
M25, E08Interruptores de avisos y canalesPATCH /yo/avisostipo, canal, activopreferenciasWhatsApp requiere celular verificado
M25, E08Dejar de usar mi ubicaciónDELETE /yo/ubicacionconfirmación
M06(abrir bandeja)GET /yo/avisos, POST /yo/avisos/leidoslista con enlace a su pedido o parada
M07, E01Categorías, listaGET /menu?parada_dia=parada del díaproductos, precios, agotados, si se puede pedirparada en pausa: menú visible, sin agregar (M36)
M08, E03(abrir producto)GET /productos/{id}tamaños, leches, extras, alérgenos, agotados

5.3 Cliente · carrito, pago y pedido

PantallaBotón o funciónLlamadaMandaEsperaErrores
M08, E03Agregar · $180POST /carrito/lineasproducto, tamaño, extras, cantidadcarrito cotizadoproducto o extra agotado, parada cerrada
M07, M09, E01− y +PATCH, DELETE /carrito/lineas/{id}cantidadcarrito cotizado
M09, M10Recojo en el camión, Que me lo llevenPATCH /carritoforma de recibir, lugar, indicaciones, teléfonocotización con tarifa, mínimo y hora estimadafuera de zona con alternativas (M11, E13), falta para el mínimo
M09, M10, E04Cambiar (parada u hora)GET /paradas-dia/{id}/franjas, PATCH /carritofranjafranjas con cupofranja llena (M35)
M09Nota para el baristaPATCH /carritonotalargo máximo
M09, E01Usar mi cashbackPATCH /carritousar, monto opcionalnuevo totalsaldo insuficiente o vencido
M24, E07Usar, Usar en mi pedidoPOST /carrito/recompensarecompensacarrito con la línea en $0recompensa vencida o no combinable
M12, M20, M18, E06Repetir, Repetir este pedidoPOST /pedidos/{id}/repetirparada del día actualcarrito nuevo y lo que cambióproductos agotados o con otro precio
M19, E12Pedir lo mismo para mañanaPOST /pedidos/{id}/repetirparada del día sugeridacarrito para esa parada
M11, E13Recoger en el camión, Pedir para las 13:30, Usar otra direcciónPATCH /carritola opción elegidacotización
M09, M10Ir a pagarPOST /carrito/apartarlugar apartado 5 min, total firmecupo lleno, precios cambiaron
M35Recoger a las 11:00POST /carrito/apartarfranjaapartadofranja se llenó mientras elegía
M13, E04Propina, Necesito facturasin llamada, viaja al pagar
M13, E04Pagar $236.50POST /pedidoscarrito, tarjeta, propina, factura, llave de idempotenciapedido con folio y estado, o paso extra del banco (3D Secure)rechazo con motivo (M14, E11), apartado vencido, parada cerró
M14, E11Pagar con MastercardPOST /pedidos/{id}/pagosotra tarjeta, llave nuevaigual que arribaapartado de 10 min vencido
M14, E11Volver a mi pedidosin llamada
M37Guardar tarjetaformulario del procesador, luego POST /yo/tarjetastoken, principaltarjeta con últimos 4tarjeta inválida, cargo de prueba rechazado
M37QuitarDELETE /yo/tarjetas/{id}listatarjeta con pedido por cobrar
M15 a M17, E05(seguimiento)GET /pedidos/{id} y canal pedido:{id}pasos con hora, posición en la cola, código, repartidor, llegada estimada
M15, M16Cómo llegarabre mapas con las coordenadas
M15, M18, E05Ver reciboGET /pedidos/{id}/reciborecibo
M32Sí, cancelar y reembolsarPOST /pedidos/{id}/cancelarmotivo opcionalreembolso a tarjeta y cashback devueltoya entró a la barra: no se puede
M32Conservar mi pedidosin llamada
M16No voy a alcanzar a pasarPOST /pedidos/{id}/guardarparada donde se le guardaúltima parada del día: ofrece reembolso según política
M20, M21, E06Seguir, Ver los anterioresGET /pedidos?pagina=lista
M42Ver el comprobante del reembolsoGET /reembolsos/{id}comprobante
M15, M18, M39, E05Necesito ayuda, Tuve un problema, Enviar reportePOST /pedidos/{id}/reportestipo, texto, fotonúmero de reportefuera del plazo para reportar
M19, M39, M42Hablar con alguien, Escribirle por WhatsAppenlace a WhatsApp con el folio

5.4 Cliente · lealtad y facturas

PantallaBotón o funciónLlamadaEspera
M23, E07(saldo y movimientos)GET /yo/cashbacksaldo, cuánto vence y cuándo, movimientos, regla vigente
M24, E07(sellos y recompensas)GET /yo/recompensassellos, recompensas disponibles, bloqueadas e historial
M18(pantalla de entregado)viene en GET /pedidos/{id}cashback ganado, sellos sumados, recompensa desbloqueada
M38Guardar datosPUT /yo/datos-fiscalesdatos validados (RFC, CP, régimen)
M38FacturarPOST /pedidos/{id}/facturafactura en proceso; error si pasó el fin de mes
M38DescargarGET /facturas/{id}PDF y XML

5.5 Personal

Toda llamada del personal lleva la sesión del PIN y revisa el permiso del puesto.

PantallaBotón o funciónLlamadaMandaEsperaErrores
P01Teclado y PINPOST /personal/sesionPIN, id del dispositivosesión, puestos, a qué pantalla vaPIN incorrecto, bloqueo tras varios intentos, persona dada de baja
P02(abrir)GET /operador/hoyparada actual, contadores, ruta
P02Recibir pedidos nuevos (interruptor)POST /paradas-dia/{id}/pausaactivo, reapertura estimadaestado
P02Cerrar parada y salir a la siguientePOST /paradas-dia/{id}/cerrarresumen y siguiente paradapedidos sin entregar: pide qué hacer con cada uno
P02(al llegar) abrir paradaPOST /paradas-dia/{id}/abrirposiciónestado abierta, dispara aviso «llegó»lejos del punto de la parada: pide confirmar
P03Avisar retraso de 15 minPOST /paradas-dia/{id}/retrasominutos, motivonueva hora, a cuántos se avisó
P03Cancelar paradaPOST /paradas-dia/{id}/cancelarmotivo, PINpedidos reembolsados, avisos enviadossin permiso, reembolso fallido en algún pedido (queda en A15)
P04PestañasGET /preparacion/cola?estado= y canal cola:{parada_dia}pedidos ordenados por hora prometida, tiempos de espera
P04EmpezarPOST /pedidos/{id}/empezarpedido en preparación, manda a imprimir la etiquetacancelado por el cliente un segundo antes
P04Marcar listoPOST /pedidos/{id}/listorepisa o bolsapedido listo, aviso al cliente o al reparto
P05Código de 3 númerosGET /preparacion/buscar?codigo=código, parada del díapedido listo que coincideno existe, ya entregado, es de otra parada
P05Buscar por nombreGET /preparacion/buscar?texto=nombre o teléfonocoincidencias
P05Entregar pedido A-118POST /pedidos/{id}/entregarcódigoentregado; dispara cashback, sellos e inventariocódigo no coincide
P06Interruptor de producto o extraPUT /agotados-diaproducto o extra, agotadoestado y cuántos pedidos pagados lo traenhay pedidos pagados que lo traen: avisa cuáles
P07(abrir)GET /reparto/mis-entregas y canal reparto:{repartidor}por salir, en espera, hechas
P07Lo llevo yoPOST /entregas/{id}/tomarviaje abiertoya lo tomó otro
P07Llevarlo en el mismo viajePOST /viajes/{id}/agregarentregaviaje con orden sugerido
P08(en camino)POST /reparto/posicion cada pocos segundoscoordenadas
P08Ya llegué, avisarlePOST /entregas/{id}/lleguereloj de espera, aviso enviado
P08, P09Llamar al clientePOST /entregas/{id}/llamadanúmero enmascarado o registro de la llamada
P09Entregado a MarcoPOST /entregas/{id}/entregarentregado, siguiente entrega del viaje
P08, P09No encuentro al cliente, Regresar al camiónPOST /entregas/{id}/no-entregadomotivopedido en repisa 20 min, queda para decisión del adminantes de cumplir la espera: rechazado
P10Empezar, Reintentarcola local, luego POST /sincronizaracciones con hora local e id únicoresultado por acciónacción ya no válida

5.6 Administración

PantallaBotón o funciónLlamadaMandaEspera
A01(abrir Hoy)GET /admin/hoy y canal adminparadas con contadores, alertas, venta, cashback, equipo en turno
A01Mandar avisolleva a A08
A01Ver pedido, Reembolsar o guardar, Ver menú, Resolvernavegación con el id de la alerta
A02Filtros y búsquedaGET /admin/pedidosfecha, parada, estado, forma, textolista paginada
A02(detalle)GET /admin/pedidos/{id}líneas, pagos, eventos, quién hizo qué
A02Reembolsar $68.00 y avisar al clientePOST /admin/pedidos/{id}/reembolsomonto total o parcial, motivoreembolso, ajuste de cashback, aviso enviado
A03Categorías, Nueva categoríaGET, POST /admin/categoriasnombre, ordenlista
A03Agregar producto, Editarlleva a A04
A03Interruptor «A la venta»PUT /agotados-dia o PATCH /admin/productos/{id}por hoy o definitivoestado
A04Guardar y publicarPUT /admin/productos/{id}nombre, descripción, categoría, ingredientes, alérgenos, sello, tamaños, extras, recetaproducto publicado; errores por campo (tamaño sin precio)
A04Agregar tamaño, Quitarparte del guardado
A04Cambiar fotoPOST /admin/archivosimagenURL
A04Descartarsin llamada
A04Quitar del menúDELETE /admin/productos/{id}se archiva, no se borra, por el historial
A05Semana anterior, SiguienteGET /admin/paradas-dia?semana=paradas por día con pedidos
A05Copiar a la siguiente semanaPOST /admin/semanas/copiarsemana origenparadas creadas y choques
A06Guardar paradaPUT /admin/paradas-dia/{id}lugar, horas, radio de aviso, radio de reparto, tarifa, mínimo, anticipación, cupo, qué hacer si se llenaparada; si ya hay pedidos, avisa a esos clientes
A06Mover pinparte del guardadocoordenadascuántos clientes alcanza cada radio
A06Quitar paradaDELETE /admin/paradas-dia/{id}con pedidos: los reembolsa como cancelación
A07(abrir)GET /admin/repartoentregas en curso, repartidores, puntualidad
A07Asignar o cambiar repartidorPATCH /admin/entregas/{id}repartidorentrega
A07Agregar repartidorPOST /admin/personaldatos, puestoinvitación
A07Cambiar reglasPUT /admin/reparto/reglasespera, entregas por viaje, tiempo en repisareglas
A08Interruptores por aviso y canal, textosPUT /admin/avisos/plantillastexto, canalesplantillas
A08Mandar a 64 personasPOST /admin/avisos/enviarpúblico, texto, canalescuántos se enviaron y cuántos fallaron
A09Guardar reglasPUT /admin/lealtad/reglasporcentaje, tope, cuándo se acredita, vigencia, pago con saldo, sellos, premioreglas con fecha de inicio; no cambian lo ya ganado
A09Nueva (promoción)lleva a A13
A09Ver todo el registrolleva a A14
A10Pestañas y búsquedaGET /admin/clientessegmento, textolista
A10Sumar $20.00 a DanielaPOST /admin/clientes/{id}/ajustemonto, motivomovimiento; rechazo si pasa el límite del puesto
A10Ver sus 14 pedidosGET /admin/pedidos?cliente=lista
A11Rangos de fechaGET /admin/reportesdesde, hastaventa por día y parada, productos, tiempos, lealtad
A11, A14Descargar en ExcelGET /admin/reportes/exportarrango, tipoarchivo
A12Invitar a alguienPOST /admin/personalnombre, celular, puestosinvitación enviada
A12EditarPATCH /admin/personal/{id}puestos, bajapersona; al dar de baja se cierran sus sesiones
A12Reenviar, ReactivarPOST /admin/personal/{id}/invitacion, PATCHestado
A12Cambiar permisosPUT /admin/permisospuesto, acción, permitido, límitematriz
A13Guardar borrador, Programar promociónPUT /admin/promociones/{id}tipo, valor, tope, textos, fechas, paradas, público, mínimo, presupuesto, combinaciones, aviso al empezarpromoción y costo estimado
A13Eliminar promociónDELETE /admin/promociones/{id}solo si no ha empezado; si ya empezó, se termina
A14FiltrosGET /admin/lealtad/movimientosfecha, tipo, manuales, textomovimientos con saldo después; no se editan ni se borran
A15PestañasGET /admin/pagos/problemasestadocasos con su línea de tiempo
A15Crear pedido y avisar a PabloPOST /admin/pagos/problemas/{id}/resolveracción: crear pedido, reembolsar, reembolsar con cashbackcaso resuelto, pedido o reembolso
A15Llamar al clienteenlace telefónico, queda en bitácora
A16(abrir)GET /admin/inventario/hoycargado, usado, queda, para cuánto alcanza, pronóstico de la siguiente parada
A16Registrar mermaPOST /admin/inventario/mermasinsumo, cantidad, motivoinventario
A16Cargar inventario de mañanaPUT /admin/inventario/{fecha}cantidadescarga
A16Pedir resurtido antes de la 1:00POST /admin/inventario/resurtidoinsumos, horaaviso a quien surte
A16Cambiar límites y recetasPUT /admin/insumos, PUT /admin/recetas
A17(abrir)GET /admin/equiposdispositivos, batería, señal, impresora, cortes del día
A17Imprimir etiqueta al empezar (interruptor)PUT /admin/impresionactivoajuste
A17Imprimir pruebaPOST /admin/impresion/pruebaorden enviada a la tableta
A17Cambiar diseñoPUT /admin/impresion/plantillacampos de la etiquetaplantilla
A17Cambiar tiempos y a quién se avisaPUT /admin/equipos/reglasminutos, contactosreglas

6. Tareas que corren solas

TareaCada cuántoQué hace
Aviso de cercaníacada minutoManda «llega en 10 min» a quienes siguen la parada o están dentro del radio de aviso
Liberar apartadoscada minutoSuelta lugares de franja y cashback de pedidos «Por pagar» vencidos
Conciliación de pagoscada 5 minCompara cobros del procesador contra pedidos; detecta duplicados y cobros sin pedido
Vigilar la colacada minutoAlerta en A01 si un pedido lleva más de la meta sin empezar
Latido del camióncontinuoPausa la parada si se pierde la señal; SMS a la administradora a los 10 min
Repisa de no entregadoscada minutoA los 20 min pasa el caso a decisión de la administradora
Inventariocon cada entregaDescuenta por receta, apaga productos al llegar a cero, alerta de poco inventario
VencimientosdiarioVence cashback y recompensas; avisa unos días antes
Promocionescada minutoLas enciende y apaga por fecha y por presupuesto
Reencendido de agotadosdiario, al cierreLo apagado «por hoy» vuelve a venderse
Cierre automático de paradaa la hora de salidaAvisa al operador y cierra si no responde
Borrado de cuentasdiarioBorra lo programado hace 30 días, conserva comprobantes fiscales
Reintento de reembolsoscada horaReintenta los fallidos y los deja en A15 si el banco los rechaza

7. Avisos: qué los dispara y por dónde salen

EventoPágina (push)WhatsAppSMSCorreo
Código para entraropcionalsí
Enlace para entrarsí
Camión llega en 10 min, llegósíopcional
Retraso o cambio de lugarsísí
Parada cancelada y reembolsosísísí
Pedido listo, en camino, entregadosíopcional
El repartidor llegósísí
Cashback ganado, recompensa lista, por vencersí
Recibo, factura, reembolsosí
Pedidos reabiertossí
Promociónsíopcional
Camión sin señal (a la administradora)sí

Cada envío respeta las preferencias del cliente (M25), se guarda en la bandeja (M06) y registra si llegó o falló. En iPhone, la notificación de la página solo funciona si la persona agregó PIT Coffee a su pantalla de inicio, así que WhatsApp es el respaldo.

8. Tiempo real

CanalQuién escuchaQué manda
pedido:{id}el cliente dueño del pedidocambios de estado, hora estimada, posición del repartidor
camioncualquier clienteposición del camión, parada actual, pausa o reapertura
cola:{parada_dia}preparación y operadorpedidos nuevos, cancelados y cambios de estado
reparto:{repartidor}repartidorentregas listas y reasignaciones
adminpanelcontadores, alertas y pagos con problema

Si el canal se cae, la página vuelve a pedir el estado completo al reconectar. Ninguna pantalla depende solo de mensajes en vivo.

9. Roadmap por fases

Cada fase deja algo que se puede usar y probar. El orden sigue las dependencias: no se puede cobrar sin pedido, ni pedir sin menú y parada.

FaseQué se construyePantallas que quedan funcionandoDepende de
0 · CimientosProyecto, base de datos, bitácora, manejo de errores, entornos de prueba, cuentas con los proveedoresningunadecisiones de la sección 10
1 · EntrarCódigo por SMS, enlace por correo, perfil, PIN del personal, puestos y permisosM27 a M29, M33, M22, M26, E08, E09, P01, A120
2 · Ruta y menúParadas, calendario, menú, productos, agotados por hoyM01 a M04, M07, M08, E01 a E03, E10, A03 a A06, P061
3 · Pedir y pagarCarrito, cotización, franjas, tarjetas, cobro, rechazo, idempotenciaM09, M12 a M14, M35, M37, E04, E112
4 · Operación del camiónAbrir y cerrar parada, pausa, cola, listo, código de ventanilla, seguimiento en vivo, historialP02, P04, P05, M15, M16, M20, M21, M36, E05, E06, A01, A023
5 · AvisosNotificación web, WhatsApp, plantillas, bandeja, preferencias, aviso de cercanía, retrasoM05, M06, M25, M41, P03 (retraso), A084
6 · Cancelaciones y reembolsosCancelar a tiempo, cancelar parada, reembolsos, conciliación, pagos con problemaM19, M32, M42, E12, P03 (cancelar), A154
7 · LealtadCashback, sellos, recompensas, reglas, ajustes, registroM18, M23, M24, E07, A09, A10, A144
8 · Entrega cercanaZonas, tarifa, mínimo, asignación, viaje, posición, no entregadoM10, M11, M17, E13, P07 a P09, A074, 5
9 · Sin conexiónCaché del cliente, cola local del personal, sincronización, latido del camiónM31, P10, A17 (conexión)4
10 · GestiónPromociones, inventario con recetas, reportes, Excel, impresoraA11, A13, A16, A177
11 · CumplimientoFacturas, ayuda y reportes, recuperar cuenta, borrar cuenta, textos legalesM30, M34, M38 a M406

Lo mínimo para operar un día real es de la fase 0 a la 6: entrar, pedir, pagar, preparar, entregar en ventanilla, avisar y poder reembolsar. Las fases 7 a 11 se pueden lanzar después sin rehacer lo anterior, siempre que desde la fase 3 el pedido ya guarde los campos de entrega, cashback y factura aunque vayan vacíos.

10. Decisiones que faltan (bloquean la fase 0)

TemaQué hay que decidirA qué afecta
Procesador de pagosCuál se usa, si guarda tarjetas, comisiones y tiempos de reembolsoM13, M14, M37, M42, A15
SMS y WhatsAppProveedor y plantillas de WhatsApp aprobadasM28, todos los avisos
FacturaciónProveedor de timbrado, si se factura propina y entregaM38
Reglas de lealtadPorcentaje, tope, vigencia, cuántos sellos, qué se combinaFase 7
RepartoRadio, tarifa, mínimo, minutos de espera, tiempo en repisaFase 8
Política de reembolsosQuién decide y cuándo se reembolsa un «no entregado» o un pedido no recogidoM16, P09, A02
Permisos por puestoLa matriz de A12 es una propuestaFase 1
Textos legalesTérminos, aviso de privacidad y políticasM40
Posición del camiónSi sale del teléfono del operador o de un GPS del camiónM41, avisos de cercanía
ImpresoraModelo y cómo se conecta a la tabletaA17, P04
Solicitudes de paradaCuántas hacen falta para sumar una parada y quién las revisaE02