Repository navigation
[EPIC] Public-support findings (4 - 29 Sep 2026) - close-out tracker #830
Description
Source: WhatsApp Official Flo POS Support transcripts, 4 - 29 Sep 2026. Continuation (20 - 29 Sep) reviewed 29 Sep against the 3.11.0 (21 Sep) and 3.12.0 (29 Sep) release notes.
Already shipped - verify and close, no new work
- Cash close core: Cierre de caja: day close with counted-vs-expected cash (Z report) #649 (day close with counted vs expected cash) and feat(shifts): cashier shift open/close with variance and session Z (#279) #836 (cashier shift open/close with variance and session Z, 3.12.0)
- Business-day cutoff: feat(cash): configurable business day cutoff time for cross-midnight venues #692 (from the +90 cross-midnight ask, 10 Sep) plus fix: business day differed between UI and reports #876 (business day differed between UI and reports, 3.12.0)
- Inventory core: Feature: Supplies stock - manual counts, receives, adjustments, and waste #768 (supplies stock, includes receives), Feature: Recipe/BOM ingredient depletion pilot #769 (recipe/BOM pilot, shipped in feat(inventory): supplies stock and recipe BOM depletion #821), feat(inventory): volume units and linked portion deduction #817 (volume units and linked portion deduction, 3.12.0; answers the +90 22 Sep ask: 100 cl bottle sold as 4 cl glasses, stock tracked in ml/cl). Verify the remaining Sep asks (+230, +52, +225) and that receives cover the "no intake beyond edit product" complaint (+90 22 Sep)
- Refund backend: Financials: Implement idempotent refund system & fix partial refund over-collection #278. What is left is PIN wording and UX, not the backend
- Currency: feat: customizable currency symbol/position and locale-aware separator parsing #693 (symbol, separators; COP showed
11instead of11.000, 9 Sep) plus MAD Epic: Morocco / MAD currency support #264/Add Morocco (MA) / MAD currency profile to POS and Checkout #265/Keep Electron thermal receipts in sync after Settings currency changes #266, and in 3.12.0 feat: add safe store currency reset #832 (safe store currency reset) with fix: validate setup currencies against supported list #839 (closes fix(auth): align currency validation in setup initialize with supported ISO list #835, setup currency validation). Dual-currency display stays open as S9 - Printing core: [Windows] USB thermal printers cannot reliably print raw ESC/POS receipts #206 "Printer is not connected. Call connect() first." fires due to no silent WebUSB reconnect and inconsistent fallback guards #534 research(printing): evaluate bidi, shaping, and raster fallback for non-Latin thermal printers #446 refactor(printing): establish multilingual semantic print architecture and extensible templates #438 feat(printers): add capability-gated raster printing for non-Latin thermal output #643 feat(printers): multi-line item wrapping, raster font scaling, and code page preservation #659 docs(printers): add physical hardware validation matrix and testing protocol #658 No Bill / KOT printing when using server app #700 Bug: Windows printer failures can expose the full PowerShell EncodedCommand in support tickets #789 Bug: Windows printer diagnostics corrupt non-ASCII PowerShell output #790 (plus fix(printers): validate updates and keep default selection consistent #227), and in 3.12.0 fix(print): 80mm receipts resolve to 42 columns #872 (80mm receipts resolve to 42 columns) and fix: print cash tendered and change on receipts #845 (cash tendered and change on receipts, closes Feature: Print cash tendered amount and change on receipts #770). Still open from chat: kitchen routing from the waiter app (12 Sep; station-per-printer shipped in 3.11 and refined in feat(kds): improve kitchen station assignments #828, confirm the waiter-app path), MAS USB, 58mm widths, accent and non-Latin text blocking the whole receipt
- Dark mode: [Feature] Implement End-to-End Dark Theme Support and Title Bar Synchronization #513 Dark mode issue - text not visible properly #623 Text of Dropdowns in dark mode not visible #681 Some dark mode items still need improvements/ native dark mode #713 Dark mode issues, cannot read test. #726. Still open: invisible category text on 9 Sep plus login failures after switching themes
- WhatsApp: fix(whatsapp): prevent duplicate startup sockets and add diagnostics #687 Restrict Whatsapp Inbox tab to Owner/Manager #710 The whatsapp sent message missing information #711 Label/Visibility on order in Orders page if Whatsapp is already sent or not #718. Still open: message stuck at "Sending" (14 Sep), Mac reconnect flow (9 Sep)
- Backup and restore: Enhancement: Google Drive integration for automated DB backups #129 (Drive backend), fix: unblock local restore after stale Drive state #827 (stale-state unblock), and in 3.12.0 feat(backup): add restore-from-file control #892 (restore-from-file control) plus fix(titlebar): restore the application menu on Windows and Linux #856 (application menu restored on Windows and Linux). This closes the missing Windows restore button from the +961 21-22 Sep thread; the manual flo-backup-*.db workaround was confirmed working on 22 Sep
- Billing and checkout fixes from the continuation, 3.12.0: fix(billing): zero-balance settlement, zero-total split siblings, refunded sibling completion #812 (zero-balance settlement, zero-total split siblings, refunded sibling completion; the +55 25 Sep split-check report), fix: order 500s and PowerShell CLIXML noise in support tickets #886 (order 500s became 4xx, with Order creation returns HTTP 500 instead of a 4xx for ordinary validation failures #884, PowerShell CLIXML noise gone; +98 25 Sep), fix: use the fresh subtotal as the tax basis #882 (closes Decide the authoritative subtotal for tax rescaling #877, fresh subtotal as the tax basis), fix(tax): refunded items counted in printed tax #873 (refunded items counted in printed tax), fix: cap order item payload size and clamp bill flat discounts to subtotal #813 (payload cap and flat-discount clamp), feat(diagnostics): end-to-end store diagnostics for checkout, payments, and API failures #815 and feat: add an in-app diagnostics screen #888 (store diagnostics plus an in-app diagnostics screen; the "error should say what it is" ask, +1-829 26 Sep)
- Online order type: Feature: Add Online order type, external order ID mapping, & online receipt header banner #284. Remainder lives in "delivery" order type issues/limitations #694
- Update infra: feat: in-app auto-update with notification badge #58 fix(updater): quitAndInstall blocks cleanup coordinator, causing services to stay alive and new version to never launch #543 Runtime upgrade test matrix: real N -> N+1 installs per platform #468
Already open - linked, not duplicated
#279 (shift remainder; core shipped in 3.12.0 via #836), #280 (ledger, closed 26 Sep), #358 #645 (inventory and expense), #364 (tips; on 27 Sep Gutkirat scoped it after the next release, taxes and reporting make it complex), #694 (delivery limits), #478 (QR menu), #428 (attendance, from the +91 ask on 6 Sep), #703 (void and refund wording), #285 (money foundation), #361 #286 (multi-counter and devices), #717 (cashier link customer, closed 26 Sep), #639 (order UX), #696 (server app), #469 #204 (release hardening), #834 (optional kitchen delivery enforcement before billing with a KDS-disabled bypass; opened 23 Sep from the +52 thread), #370 #369 (epics and arch)
Gaps - sub-issues of this epic
- S1 Report export and share. Excel and PDF for daily and Z reports, accountant export (+505 on 21 Sep, +1-829 on 16 and 22 Sep, repeated for web on 22 Sep), send through WhatsApp (+1-829 on 14 Sep). Shipped in 3.12.0: owner-only daily sales Excel/CSV export (feat(reports): add owner-only daily sales Excel/CSV export #809). Remainder: PDF, Z-report export, WhatsApp send
- S2 Checkout charges. Optional service and packing toggle (+55 BR on 13 and 22 Sep: the service amount is paid to employees monthly so a discount hides it, and manual tax cannot be removed at payment; Gutkirat promised a fix on 22 Sep) plus switching tender and payment method after checkout (+63 on 11 Sep). Tips overlap: +505 on 27 Sep wants a waiter tip percentage, removable per invoice, with tax untouched; the Mexico user uses the manual "service charges" tax category as a workaround and worries about the invoicing breakdown (+52, 27 Sep). Only the tax-basis correctness shipped (Decide the authoritative subtotal for tax rescaling #877 closed by fix: use the fresh subtotal as the tax basis #882). Links Feature: Tipping (separate tip_amount, customer-facing selection) #364 Financials: Implement idempotent refund system & fix partial refund over-collection #278
- S3 Roles and sessions. Mostly shipped in 3.12.0: feat: allow cashiers to record cash movements from pos topbar #811 (cash movements from the POS topbar; fixes the cashier button-location complaint, +90 on 18 and 20 Sep), feat(shifts): cashier shift open/close with variance and session Z (#279) #836 (cashier shift open/close), fix: align restricted staff permissions #913 with [Release Blocker] Pre-Release Handoff: Align UI Permissions & Landing Fallback for Restricted Staff, Fix DB Audit Formula #912 (restricted staff permissions; the "cook can invoice" thread, 21 Sep), and configurable role permissions. Remainder: simultaneous owner plus cashier sessions and waiter-as-cashier per-waiter drawers (+1-829 on 21 Sep). Links Feature: Shift lifecycle management, cash drawer reconciliation, & business day close #279 Cashier cannot link a customer in orders page #717 design: define order void and archive semantics #703
- S4 Delivery and caller ID. Shipped in 3.12.0: feat: print courier slips with full contact #895 (courier slips with full contact) and feat(print): delivery address on receipt #906 (delivery address on receipt); these answer the +90 delivery-slip print asks of 10 Sep. Remainder: courier slip without charging, payment-type field, caller-ID LAN popup (Sami on 4 and 8 Sep). Links "delivery" order type issues/limitations #694 Feature: QR code table ordering (Phase 1: digital menu, Phase 2: relayed ordering) #478
- S5 Catalog helpers. Nested category tree (+44 on 21 Sep), menu printing (+505 on 9 Sep). Nothing shipped yet
- S6 Backup safety. Shipped in 3.12.0: feat(backup): add restore-from-file control #892 (restore-from-file, the missing Windows button from the +961 thread on 21-22 Sep), fix(titlebar): restore the application menu on Windows and Linux #856 (application menu on Windows and Linux), fix: unblock local restore after stale Drive state #827 (stale Drive state). User confirmed restore works. Remainder: downgrader flow (Bankim on 8 Sep). Links Enhancement: Google Drive integration for automated DB backups #129
- S7 Cash float and purchase clarity. "Movimiento de efectivo" is now reachable from the POS topbar (feat: allow cashiers to record cash movements from pos topbar #811) and shifts have open/close with variance (feat(shifts): cashier shift open/close with variance and session Z (#279) #836). Recording purchases and expenses is still unclear (Somos Coffee on 13 and 16 Sep). Links Feature: Materials expense tracking (cash drawer delivered separately) #645 Feature: Shift lifecycle management, cash drawer reconciliation, & business day close #279
- S8 User docs and in-app help. Shipped in 3.12.0: feat(diagnostics): end-to-end store diagnostics for checkout, payments, and API failures #815 and feat: add an in-app diagnostics screen #888 (diagnostics), fix: order 500s and PowerShell CLIXML noise in support tickets #886 with Order creation returns HTTP 500 instead of a 4xx for ordinary validation failures #884 (real errors instead of raw 500s), fix(print): 80mm receipts resolve to 42 columns #872 (80mm columns). Still open: end-of-day and shift lifecycle docs, PIN taxonomy (master PIN is not the manager PIN, 17 Sep), role matrix, multi-PC LAN with ports 3001-3004 and Tailscale (Nicaragua and Mexico users on 18-26 Sep), per-OS backup and restore paths, log locations (Send Log in 3.8.6), update channels (four channels out of sync, 13 Sep screenshot; MAS propagation stalled on 29 Sep), "VPN Mesh" label rename or tooltip, delivered-before-payment policy, now owned by Feature: Optional kitchen delivery enforcement before billing with KDS-disabled bypass #834 after the +52 thread on 23 Sep, error-message UX (
Burrito de Camarón,Failed to process order), English-only docs wall (FR user), open vs proprietary boundary (FloAdmin and RevFlo handshake; blue.flowcafe.com explained on 22 Sep), FAQ plus login-screen support entry (Bankim 13 Sep). PWA and mobile-camera mismatch (+55 on 23 Sep, Sami on 5 Sep) starts here as docs unless reproduced - S9 Dual currency and exchange-rate display. Currency choice independent from country: Lebanon wants USD instead of forced LBP, with both shown at a configurable rate (+961 on 22 Sep, +92 PKR the same day). Mobile money differed from the PC (+55 BR on 23 Sep, RevFlo 1.0.3). Partial: feat: add safe store currency reset #832 (safe currency reset) and fix: validate setup currencies against supported list #839/fix(auth): align currency validation in setup initialize with supported ISO list #835 (setup validation). Links Architecture [Needs Review]: Integer minor-unit Money foundation (main/core/money.ts) #285 feat: customizable currency symbol/position and locale-aware separator parsing #693
Ops notes, no code issue
Multi-branch is not supported. FloCafe keeps one independent database per site, so menus, customers and reports are not shared across locations. The Tailscale setup from chat only links the devices of a single restaurant (cashier PC, kitchen screen, waiter phones on ports 3001-3004). This needs a docs note, nothing to build. PT-language group request (+55 on 22 Sep) is an ops decision, not code. RevFlo Android stays proprietary with handshake only; open vendor-reported bugs: QR scanner camera permission never requested (29 Sep, fix promised) and money mismatch vs the PC (23 Sep). 3.12.0 GitHub release published 29 Sep 15:24 UTC; +90 saw the macOS update as stuck on 29 Sep, track under #469/#204. Swiggy/Zomato aggregator order intake (+91 on 23 Sep) is a roadmap ask, nearest home #694.
Acceptance
Each sub-issue closed with the shipped version tag; #280 closed on 26 Sep (done); no duplicates of any number listed above.
Activity
feat(backup): add restore-from-file control
feat(backup): add restore-from-file control
feat(backup): add restore-from-file control
feat(backup): add restore-from-file control (#892)
[-][EPIC] Public-support findings (4 - 23 Sep 2026) - close-out tracker[/-][+][EPIC] Public-support findings (4 - 29 Sep 2026) - close-out tracker[/+]khaira777 commentedon Oct 23, 2026
S1 Report export and share - status update (23 Oct, main @ 8e39053)
Done
GET /reports/x-report/exportand/reports/z-report/export(main/routes/reports.ts), buttons inCashCloseModal.tsx, tests intests/reports-export.test.ts.SendWhatsAppReportModal.tsx,frontend/src/lib/whatsapp-share.ts,tests/reports-whatsapp.test.ts).Still open (verified)
format must be xlsx or csv(reports.ts~L1233, L1291, L1416). The only PDF path is the genericprintToPDFIPC, and only the menu printer uses it. Suggested approach: reuseprintToPDFwith report HTML built fromcash-close-export.ts/daily-sales-export.ts. Web mode will need a browser-print fallback.docs/reference/daily-sales-export.mdsays "one business day at a time". A per-tax-rate ledger is also missing.khaira777 commentedon Oct 23, 2026
S2 Checkout charges - status update (23 Oct, main @ 8e39053)
Done
shared/charges.tshasis_optionalandwaived.PATCH /bills/:id/chargesrejects waiving a mandatory charge (charge_not_waivable) and writes an audit entry. Waive/Apply controls are inPaymentModal.tsx,CartPanel.tsxandPrepaidCheckoutModal.tsx. Follow-ups: fix(charges): round percentage fees exactly #1118 (3.13.0), plus feat(catalog): consolidate add-on editor and add charge presets (#1155, #1157) #1186 presets and fix: preserve concurrent charge waivers during item void async PIN check #1258 (both main, unreleased). Service and packaging totals are separate columns in the daily export, so a discount no longer hides the service amount (the +55 BR ask).Still open (verified)
UPDATE payments SETanywhere. feat(orders): support expected payment method and delivery note #977 "expected payment method" is a pre-payment hint on delivery orders, not this. Needed: a manager-PIN-gated correction onmain/routes/bills.ts, an audit entry, a cash-session expected-cash recompute, a block once the Z/day close is done, UI inOrderDetailPanel.tsx, and tests.tip_amount,gratuityandtipsreturn 0 hits outside i18n). Tracked by Feature: Tipping (separate tip_amount, customer-facing selection) #364 (open). Interim workaround: an optional percentage custom charge with no tax category, waivable per bill, but not attributed to a waiter.khaira777 commentedon Oct 23, 2026
S3 Roles and sessions - status update (23 Oct, main @ 8e39053)
Shift lifecycle work is done (#279 closed 20 Oct, plus #1129 in 3.13.0 and #1318 on main, unreleased). Both remainders below are still open and have no tracking issue.
frontend/src/store/auth.tsstores a singletoken/tenantin localStorage, and there is no switch-user or lock-screen flow. Separate devices can already be logged in at the same time (stateless JWTs). Per-action manager PIN overrides exist, but they are not a second session. Needed: a PIN-based quick user switch or lock-and-switch (store/auth.ts, AuthGuard/Sidebar, a PIN switch endpoint inmain/routes/auth.ts). Decide how the open cash session follows the active user.CREATE UNIQUE INDEX cash_sessions_one_open ... WHERE status='open'(main/db.ts~L7013),409 session_already_openincash-sessions.ts, asserted intests/cash-sessions.test.ts. Feature: Shift lifecycle management, cash drawer reconciliation, & business day close #279 lists "concurrent multi-till sessions" as left out on purpose. Needed: a product decision first, then a migration that scopes open sessions per drawer or user, drawer ownership on sessions and movements, and user-scopedgetOpenSession/shift-session-gate.ts, with day-close aggregation across drawers. Related: Architecture [Needs Review]: Sortable ULID identifiers & multi-device hierarchy (main/core/ids.ts) #286.khaira777 commentedon Oct 23, 2026
S4 Delivery and caller ID - status update (23 Oct, main @ 8e39053)
Done
main/routes/printers.ts~L1390), and the button sits outside the payment branches inOrderCard.tsx/OrderDetailPanel.tsx. Test:tests/delivery-slip-printing.test.ts"reachable before payment". Payment status and amount due on the slip: 30eee4c (3.12.0).expected_payment_method(_id)anddelivery_note, with a selector inCartPanel.tsxand rendering on the slip. "delivery" order type issues/limitations #694 closed 6 Oct.Still open (verified)
caller.?id|incoming.?call|telephony|sip:returns 0 hits and there is no tracking issue. Needed: pick a caller-ID source first (USB CID modem, SIP/VoIP webhook, or Android companion). Then build an ingest route on the LAN API, a phone lookup through the customers route, and a push to POS clients that opens a pre-filled delivery order.khaira777 commentedon Oct 23, 2026
S5 Catalog helpers - status update (23 Oct, main @ 8e39053)
Done
POST /api/printers/print-menu,main/printers/document-menu.ts,PrintMenuModal.tsx(POS topbar and products page). Tests:tests/menu-printing.test.ts,frontend/e2e/menu-printing.spec.ts.Still open (verified): nested category tree (+44, 21 Sep)
categories.parent_idwith cycle validation (main/routes/categories.ts~L111-140), and GET with?root/?parent_idnests one level.parent_idappears only infrontend/src/lib/types.ts. The category form on the products page never sends it, and POS loads a flat list. feat(pos): configurable category and item sort order #1311 (sort order) did not add hierarchy.ProductGrid.tsx, a parent column in menu CSV import/export, and grouping in menu printing. Decide max depth (API nests 1 level).khaira777 commentedon Oct 23, 2026
S6 Backup safety - status update (23 Oct, main @ 8e39053)
Restore-from-file, stale Drive state and menus shipped earlier. Since then: daily local backup to Documents/FloCafe/Backups (#1303, #1329, #1331) and paginated backup history (#1271). These are on main and unreleased.
Still open (verified): downgrader flow (Bankim, 8 Sep)
SchemaVersionMismatchError(main/db.ts~L7816).main/index.tstreats it as a generic startup failure:dialog.showErrorBox('Initialization Error', ...), then the app exits. The message only says "Please update Flo Cafe to the latest version". The app takes an automatic pre-migration backup, but nothing points the user to it or offers to restore it.tests/backup-restore-production.test.ts).SchemaVersionMismatchError. It should list the pre-upgrade backups (app/schema version from_flo_meta) and offer "restore pre-upgrade backup (loses newer data)" or "move newer DB aside and start fresh", plus user docs for the manual path per OS. Add a startup test next totests/startup-failure-child.cjs. No tracking issue exists.khaira777 commentedon Oct 23, 2026
S8 User docs and in-app help - status update (23 Oct, main @ 8e39053)
docs/is still developer-facing. The only operator guides areprinters.md,linux.mdandgoogle-drive-setup.md, and there is no FAQ or user guide anywhere (rg FAQover docs, README and frontend returns 0 hits).Done / partial
localNetworkHint/vpnMeshNetworkHintin all locales. The label is unchanged and the hint does not name Tailscale.Burrito de Camaróncase is not reproduced.docs/reference/roles-and-permissions.md, but README help does not link it.Still open: write user-facing pages for
business-time.mdandorder-lifecycle.md.kitchenDeliveryOverridePromptstill says "Manager PIN" while refunds say "Staff Approval PIN".app.getPath('userData'). "Send Log" is now Diagnostics "Copy for support".6 remaining items
khaira777 commentedon Oct 23, 2026
Handoff: sub-issues created and decisions taken (23 Oct)
Every remaining gap from the status comments above now has its own issue, linked as a sub-issue of this epic. Each one is self-contained: verified current behavior with file anchors, the decisions taken, scope, acceptance criteria and test commands.
Ready to build (decisions made)
printToPDFIPC; browser-print fallback in web modefrom/to, capped at 93 days, plus a per-tax-rate summary sheetparent_idalready exists, so this is mostly UIfailedplus retry; late ACK still promotes; startup sweepNeeds decision / discovery
Needs repro
#1345 theme then login, #1346 Mac WhatsApp reconnect, #1347 MAS USB printing, #1349 re-verify dark category chips and 58mm.
Elsewhere
Suggested order