4. Automações invisíveis — o motor do sistema
4.1 Scheduler em background (thread fn-scheduler, tick 60s)
_carrinho_job_abandonar(15 min): marca carrinhos parados como abandonados._carrinho_job_regua(30 min): régua de recuperação de carrinho._reservas_job_liberar_vencidas(5 min): libera mesas de reservas sem check-in dentro da tolerância.event_bus.processar_outbox(cada tick): worker do Event Bus — entrega os eventos pendentes dooutbox_eventosaos assinantes com retry exponencial (ver §7.1)._push_job_agendados(1 min): envia push agendados via Firebase.
Nota de arquitetura: este scheduler in-process é o worker atual. A fundação (outbox + idempotência + retry) já está pronta para extrair um serviço/worker dedicado (Celery/Dramatiq/RQ) sem reescrever a lógica — ver §7.5 e o roadmap (§10).
4.2 Agente local de impressão (polling)
Agente no balcão faz polling em /api/agente/fila-impressao (header X-Agente-Token). Backend devolve em ESC/POS base64 por estação. Salão: itens de comanda não impressos. Delivery: pedidos aceitos (idempotente via producao_impressa). Piggyback fiscal: a cada poll resolve NFC-e pendentes (_atualizar_notas_processando, throttle 90s) → nota vira autorizada+XML sem abrir tela.
4.3 Motor único de produção + fluxo de status
_aplicar_transicao_status(pedido, status): carimba o horário de cada etapa (aceito_em/pronto_em/saiu_em/entregue_em), dispara o WhatsApp transacional por etapa (idempotente por flag = anti-ban) e publica o evento no Event Bus (pedido_em_preparo|pronto|saiu_entrega|entregue, ver §7.1). Acionado no Caixa/Pedidos, modal e app do motoboy. Textos editáveis em Mensagens do Bot.
Importante (arquitetura atual): o "status" não é mais um único campo linear. O pedido tem máquinas de estado SEPARADAS —payment_status,production_status,delivery_status,fiscal_status— sincronizadas neste motor (ver §7.2). Isso permite estados como "pago, parcialmente pronto, nota autorizada, aguardando motoboy".
4.4 Fechamento amarrado
Pedido aceito ou comanda fechada dispara em cadeia (idempotente): baixa de estoque → emissão NFC-e (gated) → impressão de produção → alimenta financeiro/relatórios.
4.5 Webhooks assíncronos
/webhooks/mercadopago: confirma pagamento do site (PIX/cartão) → aprova pedido, credita fidelidade, e-mail./webhooks/infinitepay: confirma cartão do app Android./webhooks/asaas: gateway de teste (parado; não remover)./admin/estufa/api/webhook/whatsapp: mensagem recebida → Estufa → dispara El Bigodón (se ligado).- Resend: eventos de e-mail.
4.6 Fidelidade, carteira & cashback
Pedido entregue/pago → _creditar_fidelidade_pedido (pontos+cashback, idempotente). Cancelado → _carteira_estornar_pedido. Carteira abate no checkout.
4.7 Editor de site ao vivo (after_request)
@app.after_request injeta o overlay do Editor quando admin acessa com ?editor=1 e aplica overrides salvos no site vivo. Outro after_request aplica cache longo a estáticos versionados.
Versão para IA/crawler: /manual.md (Markdown cru) · /manual/completo (página única) · /sitemap.xml