Vendors / Regional & international
Sapaad
A modular cloud restaurant suite built around delivery-heavy operators — Home Delivery Manager and rider management are first-party, offline auto-sync is a named feature, and pricing is quote-only.
scored live legacy rubric
- Claims in scope
- 312
- Scored
- 45
- Assessed
- 45
- Unknown
- 267
- Not applicable
- 2
- Values challenged
- 7
unknown, never as no.Identity
- Owner
- Sapaad Software Pvt. Ltd. — privately held; operates across India, the UAE and wider Asia-Pacific (exhibits at AAHAR/FFCC in India and works with UAE restaurant groups)
- Who it is for
- Small restaurants, cafes and delivery-led outlets in the Middle East, India and Southeast Asia; claims 15,000+ restaurants
- Site
- https://www.sapaad.com/
Pricing
transparency: unknown · unit: Subscription per month/year/multi-year, priced by module selection (per-location/terminal breakdown not disclosed) · processor lock-in: no
- Software
- No figures published; pricing page is a "Contact for pricing" lead form. Described as subscription-based with monthly, yearly or multi-year plans, modules selected à la carte, plus a 14-day free trial.
Capabilities
Every claim is binary and checkable. Grades: A primary documentation · B product documentation · C pricing or feature page · D marketing claim · E third-party reporting · F inference with no source. A yes on a differentiator claim requires A or B.
Order capture & FOH workflow
Provides a graphical floor-plan editor where an operator can draw sections, place tables of varying shape/capacity, save multiple floor-plan layouts per location, and assign sections to servers.
order-capture-floor-plan-editor
Not scored by this record.
Order lines can be tagged to a seat number at entry, and the check can be split by seat afterward without re-keying items.
order-capture-seat-level
Not scored by this record.
Items can be assigned to courses and held, with a fire-next-course action available from a handheld or terminal that releases only that course to the kitchen.
order-capture-coursing-hold-fire
Not scored by this record.
Supports splitting a check by item, by seat, by even N-way, and by arbitrary dollar/percentage amount, and merging checks or tables back together, including after partial payment.
order-capture-split-merge
Split-bill is a real first-party Dine-In feature, but no split MODE is documented and check/table merge is absent. Enablement (re-fetched live, HTTP 200, article updated 2024-02-15): 'To enable staff to split bills for Dine-In orders: Step 1: Visit Setup > Global Settings > Others. Step 2: Enable Split Bill under the Dine-in section' - a single global toggle, Dine-In only. Two companion articles treat it as a working feature rather than a stub: the split prompt appears at print time only if 'the Printing Rule under Dine-In for When Customer Requesting Bill is set to Local Printer', and discounting is order-constrained - 'apply the discount first and then split the bill'. SHORTFALL: the KB never describes what the split does. None of the claim's four enumerated split modes - by item, by seat, by even N-way, by arbitrary dollar/percentage amount - is documented, and NO merging of checks or tables appears anywhere. Do NOT cite multi-tender settlement ('enter the partial amount... select the payment type Cash... then enter the remaining amount, select the payment type Card') as split-check evidence: that is splitting a TENDER across one bill, a different capability from splitting a check into separate bills. CODE CORROBORATION (mirror binary, grade B, corroboration not census): Sapaad POS v12.16 (com.sapaad.pos) classes3.dex carries a first-party split-bill UI symbol cluster - splitListItems, splitAmountCheck, splitAmount, splitAmountLayout, buildBillSplitAmounts, totalAmountBeforeSplit, processSplitPayment, and Android resource ids split_amount_layout, split_payment_amount, split_payment_background. It is first-party, not library, because the same string region carries Sapaad's characteristic misspelling processResturantOffers and totalAmountAfterCashRounding. An item list plus per-item check plus computed split amounts is CONSISTENT with by-item and by-amount splitting, but symbol-name inference is not documentation and does not resolve the four modes. CONTROLS/POISON: across the 568-slug KB union (330-link /help index plus related-link harvesting; a slug-level bound, not a body-text census) merge, combine, join, consolidat, seat and evenly all return ZERO; seat and merge are also zero across 29 marketing pages, www.txt and the ToS - the only site-wide hit is a blog headline, 'How Gen Z Wants to Order and Split the Bill'. The APK merge count is pure library noise, re-tested by tokenising on camelCase: all 390 merge / 16 merged / 8 merging tokens are protobuf mergeFrom, androidx mergeDrawableStates and MergedDataBinderMapper, checkbox *_merged_animation assets, kotlinx FlowKt__MergeKt, Firebase, Tink and Stripe offline-mode files; the 4 seat tokens sit inside a bundled TLD/URL regex. Of 1,164 non-lambda com.sapaad.* symbols, ZERO match split, merge, seat, transfer or course. That dex zero binds only the Android app, a subset of the pos.sapaad.com web POS, whose bundle is login-gated. https://kb.sapaad.com/help/how-to-enable-split-bill-for-dine-in-orders · retrieved 2026-09-15 adversarially verified
Opens a bar tab against a card pre-authorization with a configurable auth amount, supports incremental re-auth as the tab grows, and auto-closes stale tabs at end of day. differentiator
order-capture-bar-tab-preauth
Not scored by this record.
An open check can be transferred between servers, tables, and devices, and the transfer is recorded in an audit log naming both employees.
order-capture-transfer-audit
Not scored by this record.
Ships a first-party handheld ordering app running natively on the handheld device (not a remote/mirrored desktop session) that can send to kitchen and take a card payment tableside.
order-capture-native-handheld
Not scored by this record.
With the internet down, terminals and handhelds can still create orders, apply modifiers, send to kitchen, and tender cash, and the vendor publishes what does and does not work offline.
order-capture-offline-order-entry
"Offline Mode (Auto Sync)" is a named feature letting restaurants keep operating offline with sync on reconnect; the vendor does not publish what specifically degrades. https://www.sapaad.com/ · retrieved 2026-08-01
Guest QR at-table ordering writes items onto the same open check as server-entered items, rather than creating a separate order ticket. differentiator
order-capture-qr-same-check
Not scored by this record.
Offers a first-party self-order kiosk that renders the same menu and modifier tree as the POS with no separate menu build, and the vendor documents ADA/accessibility conformance for it. differentiator
order-capture-kiosk-first-party
Not scored by this record.
Supports drive-thru-specific order flow: order-point/pay-window/pickup-window separation, order sequencing or tandem-lane assignment, and pull-forward or parking-spot assignment.
order-capture-drive-thru
Not scored by this record.
Captures and reports drive-thru speed-of-service timers by segment (order, total, window) tied to individual orders.
order-capture-drive-thru-timers
Not scored by this record.
Vendor ships a first-party AI voice ordering agent for phone and/or drive-thru that injects orders directly as POS orders, or publishes a documented API partner program for third-party voice AI. differentiator
order-capture-voice-ai
Not scored by this record.
Supports order throttling: per-channel capacity limits per time slot with automatic quote-time extension when kitchen load exceeds a configured threshold. differentiator
order-capture-throttling
Not scored by this record.
Accepts future-dated/scheduled orders with a per-channel lead time and automatically injects them into the make queue at a computed fire time rather than on receipt.
order-capture-scheduled-orders
CRM order entry has a Schedule button: "select the date and time that you want this order to print in your kitchen". The order parks under Delivery Manager > Home Deliveries > Future Orders until then, and a separate article states "the ingredients for the order will get deducted from the inventory on its scheduled day" — so it fires at a set time rather than on receipt. Shortfall: the fire time is the operator- or guest-selected print time, not a computed fire time derived from a configurable per-channel kitchen lead time. The only lead-time setting documented is Sapaad.Online's store-wide delivery ETA, to which Sapaad "adds an additional 15 minutes buffer time" for the displayed promise; no per-channel prep offset governs when the ticket reaches the make queue. https://kb.sapaad.com/help/how-to-place-a-future-order · retrieved 2026-08-03
Provides a distinct catering order flow with quotes, deposits, balance-due tracking, and a delivery/event schedule separate from the standard order queue.
order-capture-catering
Not scored by this record.
Pushes an order-ready signal back to third-party marketplaces (e.g. DoorDash) from POS or KDS state, rather than requiring a tablet tap. differentiator
order-capture-order-ready-signal
Not scored by this record.
Voids, comps, and discounts require a reason code and can be gated behind role-based manager approval, with all instances recorded in an exception report.
order-capture-void-comp-controls
Not scored by this record.
Menu, modifiers & pricing engine
Payments & money movement
The POS operates with third-party payment processors of the merchant's choosing (documented list of supported processors/gateways) rather than requiring the vendor's in-house processing. differentiator
payments-processor-choice
Not scored by this record.
Vendor publishes card-processing pricing publicly (a specific flat rate or interchange-plus markup) rather than quote-only. differentiator
payments-published-rates
Not scored by this record.
Native dual-pricing / cash-discount mode stores two prices per item and prints both cash and card totals on the guest check and receipt. differentiator
payments-dual-pricing
Not scored by this record.
Surcharging engine automatically excludes debit and prepaid cards via BIN/product-code detection, enforces the network percentage cap, and can be enabled or disabled per location. differentiator
payments-surcharge-guardrails
Not scored by this record.
All first-party payment terminals accept EMV chip and NFC contactless including Apple Pay and Google Pay.
payments-emv-nfc
CLAIM: all first-party payment terminals accept EMV chip and NFC contactless including Apple Pay and Google Pay. VERDICT: partial/C. The vendor asserts card-present chip and contactless acceptance across its POS surfaces, but through integrated processor devices and SoftPOS, not a first-party terminal whose EMV/NFC certification or wallet support is documented. EVIDENCE (vendor marketing, grade C): sapaad-go page: "Embedded payments: Chip & PIN, SoftPOS, and gateways built in — however a guest chooses to pay, it just works" and "Chip & PIN, SoftPOS, and gateways processed natively across every side"; https://www.sapaad.com/sapaad-go-any-side-commerce/ (modified 2026-08-14) mentions "an all-in-one terminal option ... a single purpose-built unit that bundles order-taking, payment acceptance, and a kitchen display licence together" with no make, model or card-scheme spec. https://www.sapaad.com/sapaad-waiter/ FAQ: servers can "accept contactless tap payments directly on the device". https://www.sapaad.com/restaurant-kiosk/: "Accept card, wallet, or contactless payments right at the kiosk." NEW SURFACE, https://www.sapaad.com/wp-json/wp/v2/feature_checklist (WP REST custom post type, X-WP-Total 562, fetched in full; 39 categories via /wp-json/wp/v2/feature_checklist_category; titles only, content empty; not mined by the q310 pass): category 'payments' lists "NFC Payments", "Integrated POS Terminals"; 'payment-partner-features' lists "Card-present payments", "Tap & Pay", "SoftPOS"; 'waiter-app' lists "Card-present / card-not-present" and "SoftPOS payments"; 'payment-partners' names 27 processors incl. Geidea, Magnati, Adyen, Stripe, Network International, Worldpay, fiserv, Mswipe and "Sapaad Pay". Release note https://www.sapaad.com/whats-new-in-sapaad-march-2022-round-up/: "Sapaad's native POS, in addition to Sapaad Kiosk, also supports payments from Geidea customers in Saudi Arabia." Corroborates the q310 APK finding (com/sapaad/pos/payment/geidea/GeideaConnectionManager, MagnatiSoftposClient, StripeDiscoveryManager). SHORTFALL: no first-party terminal is specified; the Apple Pay / Google Pay mentions on sapaad.com are scoped to QR/online payment (one-qr-code-standard, qr-scan-and-pay-in-restaurants), not in-person terminals; the KB Payments category (payments-44, 10 articles) covers payment types only. Sapaad Pay (whats-new-in-sapaad-september-2023-roundup-2) is a Stripe transaction dashboard, not hardware. Generic blog commentary on EMV/NFC (payment-methods-every-restaurant-needs-to-have-this-2025) excluded. Retrieved 2026-09-16. https://www.sapaad.com/sapaad-go/ · retrieved 2026-09-16 adversarially verified
Accepts contactless payments directly on a phone (Tap to Pay on iPhone and/or Android tap-to-pay) with no separate card reader. differentiator
payments-softpos-tap-to-pay
Not scored by this record.
Vendor ships a handheld that takes EMV/NFC payment at the table, including tip prompt and check splitting, without carrying the card away.
payments-pay-at-table
Not scored by this record.
Guest can scan a QR code on the printed check or table tent to view and pay the check from their own phone, with the payment closing the check in the POS automatically. differentiator
payments-qr-guest-pay
Not scored by this record.
Supports both pre-auth-then-tip-adjust and on-device tip prompt flows, with a documented batch/adjust window and a manager screen for unadjusted tips.
payments-tip-adjust
Not scored by this record.
Configurable tip pooling and distribution rules (by hours worked, sales, role percentage, or points) that produce a per-employee tip allocation exportable to payroll. differentiator
payments-tip-pooling
Not scored by this record.
Card payments can be captured while the internet is down via store-and-forward, with configurable per-transaction and cumulative offline limits. differentiator
payments-offline-store-and-forward
Not scored by this record.
Vendor publicly documents who bears the loss when a stored offline transaction declines on reconnect, and surfaces a post-reconnect report of failed offline payments. differentiator
payments-offline-decline-liability
Not scored by this record.
First-party gift cards with real-time balance tracking, redeemable across every location in the group and through the online-ordering channel.
payments-gift-cards
Asked exactly this question, Sapaad's help centre answers with a bookkeeping workaround rather than a product. The article (re-fetched live 2026-09-15, HTTP 200, titled "How to accept gift cards from customers?", updated 2019-09-10) reads in full: "First, you need to create a new payment type labeled 'Gift Card'. To add a new payment type: Step 1: Visit Setup > Global Settings > Payment Types. Step 2: Click Add Payment Type. Step 3: Enter the details and click Save. When a customer uses a gift card, simply select the option from your list of payment types and settle the bill." That is a tender label only -- no issuance, no balance, no cross-location ledger, no online-ordering redemption, i.e. none of the three conjuncts the claim requires. The same article shape is the vendor's standard answer for other missing ledgers: "how-can-i-manage-customers-who-purchase-items-on-credit-in-sapaad" likewise says create a payment type named Credit, settle, and record the customer in the Add Notes field. BOUND: the live product navigation on www.sapaad.com/pricing/ enumerates the whole module line-up in five groups -- Restaurant POS, Inventory, KDS, Waiter App, Table Management, CRM, Loyalty Management, Customer Display Screen, Online Ordering, Home Delivery Manager, Self Ordering Kiosk, Promotion Engine, QR Code Ordering, Dashboard, Advanced BI Dashboard, Mall GTO Reporting, Ask Vantage -- and there is no gift/stored-value module. CONTROLS: 'gift', 'voucher', 'stored value' and 'prepaid' return zero across a 3,629-URL first-party URL census and zero across the Loyalty, CRM, Promotion Engine, payment-gateway and online-ordering product pages re-fetched live on 2026-09-15 (these are the very pages whose earlier omission manufactured a false birthday/win-back zero, so the hole was re-tested and does not apply here); across the 568-slug KB URL union the single hit is this workaround article. POISON FOUND AND DISCOUNTED: the Sapaad Android POS binary does contain 'GiftCardBrand', 'gift_card_bin_entries', 'prepaid_card_indicator' and 'Wallet', but every one is a com/stripe/proto or Stripe Terminal SDK symbol (card-BIN metadata), plus one ICANN TLD regex listing 'gift'; the app's own com/sapaad/pos namespace has PaymentTypesGridViewAdapter, PaymentTypeConverter, DiscountCalculations and LoyaltyPointCalculation and no gift or stored-value class, and its 'VOUCHER' strings are PrinterVoucher and VFI_QRVoucherNo, i.e. terminal receipt artefacts. The 'vouchers' offered on the online-ordering page ('Create discounts, vouchers, and bundles') are discount coupons, not stored value. CAVEAT: the KB union is the union of the /help index and related-article links, not a publisher manifest -- the Groove help centre exposes no sitemap (robots.txt allows only /help, /knowledge_base/ and /assets) -- so the KB leg is a large bound; the verdict does not rest on it alone, but on the vendor's own recommended workaround plus the closed module enumeration. https://kb.sapaad.com/help/i-have-distributed-gift-vouchers-to-customers-how-can-i-account-for-that · retrieved 2026-09-15 adversarially verified
House/on-account tabs with per-account credit limits, running balance, and periodic statement or invoice generation.
payments-house-accounts
Not scored by this record.
A single check can be settled with multiple tenders and split by seat, by item, by even shares, or by arbitrary amount, with no hard cap below eight ways.
payments-split-tender
Not scored by this record.
Voids, refunds, discounts, and no-sales require role-based authorization (manager PIN or approval) and write to an immutable audit log identifying the approver.
payments-refund-void-controls
CLAIM (conjunctive): voids/refunds/discounts/no-sales require role-based authorization AND write to an immutable audit log identifying the approver. PARTLY MET -- an override gate exists, but only on order cancellation and item modification: "Supervisor Password is a mandatory security password to be entered at the time of canceling an order and modifying an item. The default password is 1234" (changed at Setup > Global Settings > Supervisor Password), switched on by the checkbox "Require Supervisor Password to Modify Order Or Item" at Setup > Global Settings > Others; the walk-in cancellation article confirms the prompt sits in the flow and that the operator must "Select the order cancellation reason from the dropdown", with cancellation reasons mandatory. A separate and genuinely role-based control exists: Setup > Staff > Edit Role > Transactions > uncheck "Modify Completed Orders". SHORT (1) coverage: the gate does not reach all four listed actions. In the POS APK the supervisor prompt sits on the void/modify paths only (CartListAdapter$voidItem alongside CartListAdapter$authenticateSupervisorPassword, BillingFragment$popupVoidOrder, $voidWalkinOrder, DialogVoidOrderBinding, VoidOrderRequest), while the discount path (PromotionManager$advApplyDiscount) carries no such gate, no no-sale/cash-drawer gate is documented, and the KB routes refunds out of the POS altogether: "To refund the customer, visit your merchant account and manually refund the amount to the customer’s card." SHORT (2) approver identity: the credential is one company-wide secret, not a manager PIN. The APK calls the endpoint "v1/companies/{company_id}/supervisor-password-check" -- company-scoped, with no user id in the path -- and the swipe-card variant writes one staff member’s card into that same single Global Settings field. An override therefore cannot be attributed to the individual who approved it. SHORT (3) audit log: not established. The Cancelled Orders Report, the Cancelled Items report, the Total Discounts Report (Dashboard > Marketing) and the Modifications and Reprints Report (Dashboard > Sales) all exist, but the four KB articles describing them give navigation, date-range filtering and CSV export only and name no column, so no document shows that an approver is recorded, and nothing asserts immutability. CONTROLS/POISON: the only "full audit trail" phrase on sapaad.com belongs to the Unified Promotion Engine and is about changes to PROMOTIONS -- a homonym that must not be borrowed for override logging. The staff-management product page’s "Activity logs -- See what actions staff take during their shift, from orders placed to refunds processed" is grade-C marketing and does not say an override approver is recorded. CORPUS BOUND (corrected on verification): the "audit"/"activity" zero is bound to the 91 KB articles actually fetched, NOT to a 568-slug census. The same corpus also returns zero for the token "void", which the KB demonstrably does discuss, and the 568-slug union omits the whole Dashboard & Reports article set (where-can-i-view-all-my-cancelled-orders, i-want-to-see-cancelled-items-for-the-day, how-do-i-view-the-list-of-reprinted-bills, how-can-i-view-the-bills-settled-by-a-particular-cashier) -- precisely the pages that would carry the proposition. It is a corpus, not a census, and cannot support a "no". UNRESOLVED: the refund contradiction stands. The KB says to refund in your merchant account; the Payment Solutions FAQ "Can I handle refunds and chargebacks inside Sapaad?" answers "Yes. Refunds are processed directly through your Sapaad POS. Chargebacks are managed by your payment gateway, but all related transactions remain visible in your reports." Both re-fetched 2026-09-15 and both still say it; no third document reconciles them. (The APK carries Stripe Terminal and Epson CAT refund calls, which would let a card-present refund run in-POS while gateway-collected online payments are refunded in the gateway back office -- but that is inference, not evidence, and is not relied on.) OVERLAP: the shared-credential finding is the same underlying fact as labor-manager-override-audit and rests on the same mirror APK; the two cells are not independent corroboration. GRADE: B -- kb.sapaad.com help-centre articles; the APK is an anonymous third-party mirror (apkcombo) and is capped at B. https://kb.sapaad.com/help/what-is-the-order-cancelation-password · retrieved 2026-09-15 adversarially verified
In-product dispute/chargeback dashboard that lists open disputes and allows evidence submission assembled from the POS transaction record. differentiator
payments-chargeback-tooling
Not scored by this record.
Tokenized card-on-file for a guest profile, reusable across online ordering, phone orders, and in-store, with no PAN stored by the merchant. differentiator
payments-card-on-file
Not scored by this record.
Vendor publishes its deposit schedule and offers a next-day or same-day/instant funding option. differentiator
payments-payout-timing
Not scored by this record.
A single account can route settlement funds to different bank accounts per location or legal entity (separate MIDs or split settlement) under unified reporting. differentiator
payments-multi-entity-routing
Not scored by this record.
Vendor provides point-to-point encryption and a current PCI DSS 4.x Attestation of Compliance / P2PE listing available to merchants on request.
payments-p2pe-pci4
Not scored by this record.
Kitchen & production
Items route to specific KDS stations by item, category, order type, or revenue center, with routing rules configurable per location without vendor involvement.
kitchen-station-routing
Sapaad KDS 2.0 routes items to prep stations by MENU CATEGORY, and a category may be assigned to more than one station: "Yes, a menu category can be assigned to multiple kitchen stations. This is useful for combos that are comrpised [sic] of menu items that would need to be prepared by different kitchen stations" (kb.sapaad.com/help/can-one-category-be-split-between-two-prep-stations, retrieved 2026-09-15). Routing is automatic, not manual: "Once you enable Sapaad KDS 2.0, the menu items of orders will automatically split to their predefined kitchen station. There is no need for manual intervention" (/help/how-do-i-split-the-order-by-category-to-multiple-kitchen-stations), and third-party channel orders follow the same map -- "Once Foodpanda orders have been confirmed, the items are automatically sent to predefined kitchen stations" (/help/will-my-foodpanda-orders-be-displayed-on-sapaad-kds-2-0). The rules are operator-editable per location, with no vendor involvement: "Step 1: Visit Setup > Location Setup. Step 2: Select the appropriate location. Step 3: Click on Printer & Peripheral Settings > KDS Stations. Step 4: On the Preparation Screen tab, click on '+ Add'. Step 5: Enter Station Name, select Categories, set Threshold in Minutes, and define the KDS interface of your device" (/help/how-do-i-create-kitchen-stations-in-sapaad-kds-2-dot-0), and KDS can be scoped to chosen order types (Setup > Sapaad Add-Ons > Sapaad KDS) and to chosen locations. SHORTFALLS, none of which defeat the claim's disjunction: granularity is the category, never the item -- "Sapaad KDS 2.0 requires you to assign menu categories from Sapaad Cloud POS to each Kitchen Prep Screen. You cannot assign specific menu items... you will need to make the required changes on the menu categories in Sapaad Cloud POS" (/help/how-do-i-set-up-my-kitchen-stations-different-from-my-menu), so a differently-shaped routing map costs a menu restructure; "one KDS Station in Sapaad can be associated with only one device"; combo bumps do not propagate across stations (/help/how-are-combo-items-and-modifiers-split-between-kitchen-stations); and KDS 2.0 is a paid per-station add-on activated by self-serve checkout at Setup > My Account (/help/how-do-i-activate-sapaad-kds-2-dot-0-on-my-account), not a bundled module. https://kb.sapaad.com/help/can-one-category-be-split-between-two-prep-stations · retrieved 2026-09-15 adversarially verified
An expo screen consolidates items from multiple prep stations into a single order view and only marks the order complete when every contributing station has bumped its items.
kitchen-expo-consolidation
KDS 2.0 ships a distinct Expedite Screen alongside the per-station Kitchen Prep Screens. Items are auto-split to stations ("the menu items of orders will automatically split to their predefined kitchen station"), and the Expedite Screen holds the whole order back until every contributing station has bumped: "uncompleted menu items are displayed in gray while completed items are displayed in black... Once all items appear in black, the order is ready to be served." A further article makes delivery hand-off conditional on the dispatcher completing the order on the Expedite Screen. https://kb.sapaad.com/help/how-do-i-know-when-an-order-is-waiting-to-be-served · retrieved 2026-08-03
Items can be assigned to courses and held, then fired to the kitchen on demand from a server terminal, handheld, or expo screen. differentiator
kitchen-course-firing
Not scored by this record.
Per-item cook times are configurable and the KDS staggers item start/display times so that all items on an order finish simultaneously. differentiator
kitchen-prep-time-pacing
Not scored by this record.
Kitchen load throttling automatically paces or delays release of incoming digital orders, or extends quoted prep times, once a configurable order-volume or ticket-time threshold is crossed. differentiator
kitchen-order-throttling
Not scored by this record.
Pausing a store or 86ing an item from the POS/KDS propagates the pause or availability change back to connected third-party marketplaces (DoorDash, Uber Eats, Grubhub) automatically. differentiator
kitchen-channel-pause-propagation
Not scored by this record.
Bumping an order ready on the KDS sends an order-ready status event back to the third-party marketplace so couriers are dispatched on actual readiness. differentiator
kitchen-order-ready-callback
Not scored by this record.
KDS supports physical bump bars or programmable keypads in addition to touchscreen interaction, with documented supported models.
kitchen-bump-bar-hardware
Each KDS station is set to a Touch or Bump interface under Setup > Location Setup > Printer & Peripheral Settings > KDS Stations, touch and bump can run side by side, and there is a dedicated keyboard-shortcut article for the bump interface; "Chefs can bump off completed items with a mouse, keyboard, or numeric keypad." Shortfall: no supported bump-bar models are documented. Sapaad states it "is device agnostic" with only a 1024x768 minimum resolution and publishes no compatibility list, so the operator has no vendor-tested keypad to buy against. https://kb.sapaad.com/help/how-do-i-specify-the-type-of-device-i-am-using-for-each-station · retrieved 2026-08-03
An all-day view aggregates outstanding quantities per item (and per modifier) across all open tickets on the station.
kitchen-all-day-counts
Not scored by this record.
Configurable target cook times per station or order type, with visual color escalation and/or audible alert when a ticket exceeds target.
kitchen-sla-alerts
Not scored by this record.
If a KDS screen or kitchen printer goes offline, tickets automatically fail over to a designated backup printer or screen with no ticket loss. differentiator
kitchen-printer-fallback
Not scored by this record.
KDS continues to receive and display tickets from on-site POS terminals when the internet or cloud backend is unreachable. differentiator
kitchen-offline-operation
Not scored by this record.
Station screens can display item-level build/assembly detail (recipe steps, portioning, or full modifier breakout) rather than only the ticket line text. differentiator
kitchen-item-build-screens
Not scored by this record.
Sectioned/fractional topping placement (halves, quarters, specific sections) is rendered visually and unambiguously on the make-line screen or ticket. differentiator
kitchen-pizza-fractional-display
Not scored by this record.
A bumped ticket can be recalled/unbumped, and an individual item can be refired or reprinted without re-entering the order.
kitchen-recall-refire
Not scored by this record.
Edits made in the POS to an order already displayed in the kitchen visually flag the added, changed, or removed items on the live ticket. differentiator
kitchen-order-modification-alerts
Not scored by this record.
Bumping an order ready triggers a guest-facing notification — SMS/text, app push, or an order-status display board — without a separate product purchase. differentiator
kitchen-guest-ready-notification
Not scored by this record.
Waste, spoilage, and remakes can be logged directly at the kitchen/KDS screen with reason codes, and the entry depletes inventory.
kitchen-waste-logging
Not scored by this record.
Reports actual ticket and per-station times (average and percentile) sliced by daypart, station, and order channel, exportable to CSV or an API.
kitchen-speed-of-service-reporting
Not scored by this record.
Generates prep lists or predicted prep quantities from historical sales and forecast demand, surfaced to kitchen staff as a daily prep task list.
kitchen-prep-forecasting
Not scored by this record.
Delivery, dispatch & third-party channels
Product includes a native in-house driver module: drivers are first-class entities with clock-in/out, assignment state (in-store / on-run / returning), and per-driver run history reportable from the POS itself (not via a third-party add-on).
delivery-driver-roster
Home Delivery Manager plus a named Rider Management capability make drivers first-class; clock-in/out states and per-driver run history are not documented. https://www.sapaad.com/ · retrieved 2026-08-01
Provides a dedicated dispatch/expo screen showing undispatched orders, driver availability, and elapsed time per order, with multi-order run batching (assigning 2+ orders to one driver as a single run).
delivery-dispatch-board
Home Delivery Manager is described as tracking and managing deliveries, which implies a dispatch view; multi-order run batching is not documented. https://www.sapaad.com/ · retrieved 2026-08-01
Dispatch includes a live map view with geocoded stops and system-generated route sequencing (turn order optimization) for a multi-stop run, not just a static address list. differentiator
delivery-route-map
Not scored by this record.
Captures live driver GPS position from a driver-facing mobile app and surfaces it back to the dispatch screen. differentiator
delivery-driver-tracking
Not scored by this record.
Delivery areas can be defined as arbitrary map polygons or by drive-time isochrones, not solely as a radius or a ZIP/postcode list. differentiator
delivery-zones-polygon
Not scored by this record.
Each delivery zone carries its own independently configurable delivery fee, order minimum, and quoted promise time, applied automatically from the validated customer address.
delivery-zone-pricing
Delivery Areas are first-class objects under Location Setup > Delivery Settings, uploadable in bulk and definable by postal code. Two of the three fields are per-area: a Delivery Fee surcharge — "edit the delivery area and on the right, you will be able to enter the delivery fee for that particular area" — and a Minimum Order Value, "the minimum amount defined for an order for it to be delivered to a particular Delivery Area". Shortfall: the quoted promise time is not per-zone. The only documented ETA is a single store-wide default ("How to set up my default ETA of orders in Sapaad.Online") plus a flat 15-minute buffer, so every zone quotes the same promise time. https://kb.sapaad.com/help/how-to-add-different-delivery-fee-for-different-areas · retrieved 2026-08-03
Address entry is validated/geocoded against a mapping service at order time and rejects or flags out-of-zone addresses before the order is accepted.
delivery-address-validation
Not scored by this record.
Tracks per-delivery driver compensation inputs — mileage or distance driven per run, per-delivery flat reimbursement, and driver-retained tips — and exports them to payroll as separate reimbursement vs. wage lines. differentiator
delivery-driver-comp
Not scored by this record.
Provides a driver cash bank / settle-up flow that reconciles cash collected, orders assigned, and tips owed at end of shift, producing a per-driver over/short figure.
delivery-cash-reconcile
Not scored by this record.
Can hand a first-party order to an on-demand courier marketplace (DoorDash Drive, Uber Direct, Nash, Relay or equivalent) natively from the POS, with the courier quote and status returning into the order record.
delivery-daas-dispatch
Not scored by this record.
Supports hybrid dispatch: rules that automatically overflow an order to a DaaS courier when no in-house driver is available, out of zone, or past a wait threshold. differentiator
delivery-daas-fallback
Not scored by this record.
Offers direct, first-party certified API integrations with DoorDash, Uber Eats, and Grubhub marketplaces (vendor-owned, not solely resold through Otter/Deliverect/Chowly/ItsaCheckmate middleware). differentiator
delivery-3p-direct-integration
Not scored by this record.
Third-party marketplace orders inject automatically into the POS as normal tickets that fire to KDS/printers without tablet re-keying or manual accept.
delivery-3p-injection
Not scored by this record.
Marking an item or modifier 86'd in the POS pushes item-level out-of-stock status to connected third-party channels in near real time, and restores it on availability (DoorDash requires item and item-option 86ing of new POS partners).
delivery-86-sync
Not scored by this record.
Store can be paused/deactivated on each connected third-party marketplace from inside the POS with a timed auto-reactivation, rather than only from each marketplace's own tablet or portal.
delivery-store-pause
Not scored by this record.
Produces a third-party reconciliation report matching marketplace payout deposits to POS-recorded 3P sales, itemizing commission, marketing fees, refunds/adjustments, and identifying missing or unpaid orders. differentiator
delivery-3p-reconciliation
Not scored by this record.
Vendor exposes integration health to the operator — failed/rejected order injections, connection status per channel, and alerts on failure — rather than failing silently. differentiator
delivery-injection-error-visibility
Not scored by this record.
Guests receive a branded order status / driver tracking page or SMS link on the restaurant's own domain for first-party delivery orders, driven by real order and driver state.
delivery-tracking-page
Not scored by this record.
Quoted delivery promise times adjust dynamically from current kitchen load, driver availability, and zone drive time, rather than a fixed per-store constant. differentiator
delivery-promise-time
Not scored by this record.
Vendor documents explicit offline behavior for delivery: whether cash delivery orders, driver assignment, and driver settlement continue during an internet outage.
delivery-offline-behavior
Not scored by this record.
Digital ordering & guest-facing channels
Vendor ships a first-party, commission-free web ordering site on the restaurant's own branding/domain that writes orders directly into the POS with no per-order marketplace commission.
digital-first-party-web
First-party online ordering, QR ordering and kiosk modules on the vendor's own platform, distinct from the aggregator integrations it also offers. https://www.sapaad.com/ · retrieved 2026-08-01
Vendor offers a branded native iOS and Android ordering app (published under the restaurant's own brand in the App Store/Play Store), not only a mobile web page or a shared multi-restaurant marketplace app. differentiator
digital-native-app
Not scored by this record.
Guests can create an account with saved addresses, saved (tokenized) payment methods, and one-tap reorder of a previous order across first-party channels.
digital-account-saved-payment
Guest accounts exist on Sapaad.Online: customers "register to your online ordering channel with their mobile number or email address" or "using their Google or Facebook accounts", with email-OTP verification, and the CRM holds multiple labelled addresses per customer. Shortfall: no saved card. The payment-methods article enumerates the options as "Cash on Delivery, Swipe on Delivery, and Online Payments" through a redirected gateway (Stripe, PayTabs, QPay, PayU, CCAvenue, MyFatoorah, DPO, Omise) with no tokenised card-on-file, and none of the 75 Sapaad.Online articles describes one-tap reorder of a previous order. https://kb.sapaad.com/help/how-do-my-customers-register-to-my-online-channel · retrieved 2026-08-03
Digital checkout presents configurable or algorithmic upsell/cross-sell suggestions (rules-based add-ons or personalized recommendations from order history), with attach-rate reporting on those suggestions. differentiator
digital-upsell-engine
Not scored by this record.
Supports future/scheduled orders with per-daypart throttling — capacity limits on orders or items per time slot that automatically close slots when the kitchen is saturated.
digital-scheduled-pacing
Not scored by this record.
Single digital ordering flow supports pickup, curbside (with arrival check-in), dine-in/QR table ordering, and delivery, with mode-specific fees and prep timing.
digital-fulfillment-modes
Not scored by this record.
Supports guest-facing QR scan-to-order and/or scan-to-pay at the table that opens or attaches to the existing POS check, including splitting and tipping.
digital-qr-table
Not scored by this record.
Vendor ships a self-order kiosk running the same menu and modifier logic as the POS, with accessibility-compliant UI and unattended EMV payment. differentiator
digital-kiosk
Not scored by this record.
Supports group ordering: a shareable link where multiple participants add their own items to one order under a per-person or total spend cap, with split or single payment.
digital-group-ordering
Not scored by this record.
Offers a distinct catering ordering flow with separate catering menu/minimums, lead-time rules, quotes or proposals, deposits, and invoice/house-account or ACH payment terms. differentiator
digital-catering-portal
Not scored by this record.
Vendor offers AI voice phone ordering (native or a named certified partner) that answers inbound calls and injects the completed order into the POS without staff transcription. differentiator
digital-voice-ai-phone
Not scored by this record.
Supports AI voice ordering at the drive-thru lane, integrated with the POS menu/modifiers and with escalation-to-human handoff.
digital-drivethru-ai
Not scored by this record.
Supports conversational SMS or chat ordering/reordering (text-to-order or text-a-link) that lands in the POS.
digital-sms-ordering
Not scored by this record.
Supports Order with Google — the restaurant's direct ordering link is provisioned to the Google Business Profile as an ordering option (ideally set as 'Preferred by Business'), rather than leaving marketplace links as the only choice. differentiator
digital-google-order
Not scored by this record.
Supports Apple Business Connect ordering placement — an 'Order Food' custom action on the Apple Maps place card pointing at the vendor's first-party ordering flow.
digital-apple-business-connect
Not scored by this record.
Loyalty accrual and redemption work inside the first-party digital ordering flow using the same guest identity as in-store, not as a separate post-purchase enrollment.
digital-loyalty-attach
Not scored by this record.
Supports guest subscription / membership programs (recurring billing for a delivery-fee waiver, a per-period item entitlement, or a paid loyalty tier) managed in the platform.
digital-subscriptions
Not scored by this record.
Discounts, coupon codes, and loyalty offers are defined once and honored identically across POS, kiosk, and first-party digital channels, with channel eligibility controls.
digital-promo-parity
Not scored by this record.
Vendor documents that the operator owns and can export first-party guest records (email, phone, consented marketing status, order history) in bulk, without a fee or vendor approval. differentiator
digital-guest-data-ownership
Not scored by this record.
Digital checkout uses vendor-hosted fields or a hosted payment page so card data never touches the restaurant's page, with the vendor publishing PCI DSS 4.0 compliance (including the client-side script-integrity requirements effective March 2025) and supporting 3DS.
digital-checkout-pci-sca
Not scored by this record.
Digital channels support the same service-fee / dual-pricing / card-surcharge configuration as the POS, with the required guest-facing disclosure and correct handling of jurisdictions and card brands where surcharging is prohibited. differentiator
digital-surcharge-transparency
Not scored by this record.
Guest data, loyalty & marketing
Maintains a single guest profile that automatically merges transactions from in-store POS, first-party web/app ordering, and kiosk under one identity (phone or email match), with documented dedup/merge behavior.
guest-loyalty-unified-profile
CRM and loyalty are first-party modules under customer engagement; identity matching and dedup/merge rules are not documented. https://www.sapaad.com/ · retrieved 2026-08-01
Orders arriving from third-party marketplaces (DoorDash, Uber Eats, Grubhub) attach to a native guest profile with usable guest identity rather than landing as anonymous tickets. differentiator
guest-loyalty-thirdparty-identity-attach
Not scored by this record.
Supports at least two of points-per-dollar, visit/punch-count, and spend-tier accrual as configuration, without custom development or a bolt-on loyalty vendor.
guest-loyalty-accrual-models
The loyalty setup screen is enumerated in full and offers exactly one accrual model — a spend ratio. The configurable fields are the Loyalty Formula (documented example "$10 = $1 Loyalty"), the order types that may earn, and Minimum/Maximum Redeem Value; earning is otherwise automatic "on every order". The remaining variation offered is a different loyalty value for online customers and per-menu-item overrides/exclusions — all still spend-based. Across the whole 28-article Sapaad Loyalty category there is no visit or punch-count accrual and no spend-tier/status-tier construct, so the second accrual model the claim requires is absent. https://kb.sapaad.com/help/how-to-enable-loyalty · retrieved 2026-08-03
Supports status tiers with automatic promotion and demotion driven by rolling-window spend or visit counts. differentiator
guest-loyalty-tiers
Not scored by this record.
Documents explicitly what loyalty lookup, accrual, and redemption do when the POS loses connectivity (queue-and-reconcile vs blocked). differentiator
guest-loyalty-offline-behavior
Not scored by this record.
Offer/discount engine exposes explicit stacking and precedence rules (exclusive vs combinable, order of application) as configuration. differentiator
guest-loyalty-offer-stacking-rules
Not scored by this record.
Offers can be issued to a dynamically defined audience (rules over recency, frequency, spend, or items purchased) rather than only broadcast to the whole list. differentiator
guest-loyalty-targeted-offers
Not scored by this record.
Automatically computes recency/frequency/monetary or equivalent lifecycle segments (new, regular, at-risk, lapsed, VIP) without the operator building the queries. differentiator
guest-loyalty-rfm-segmentation
Not scored by this record.
Ships triggered lifecycle automations (birthday, first-visit thank-you, lapsed win-back) as configurable always-on campaigns rather than one-off manual sends.
guest-loyalty-lifecycle-automation
329th: MOVED unknown -> no/B on a NEW CENSUS of the whole help centre plus positive evidence of the alternative. NEW SURFACE: kb.sapaad.com (GrooveHQ) crawled to an href FIXPOINT from /help - 6 rounds, 1,169 URLs discovered, 1,167 x HTTP 200 (1,087 article pages + 80 category/tag index pages), 2 misses (only the URL-encoded tag indexes /help/tag/Sapaad.Online and /help/tag/Sapaad%20KDS%202.0, both 406; every article they list is also listed by its own category page). Validation: all 22 kb.sapaad.com URLs already cited in claims.jsonl are inside the listing. Prior passes held only 92+87 articles, so this is ~6x the corpus. POSITIVE EVIDENCE OF THE ONE-OFF MANUAL SEND the claim excludes, verbatim: 'To view your customers who haven't ordered in up to six months: Step 1: Visit Dashboard > Marketing. Step 2: Expand the Inactive Customers Report. Step 3: Select the time period... Step 4: Select customers by selecting the checkbox on the left of their names, then click Send SMS. Type in a message, perhaps offering a discount.' (https://kb.sapaad.com/help/where-can-i-view-my-customers-who-havent-ordered-in-a-while, Updated on March 22, 2021, retrieved 2026-09-18). The sibling article https://kb.sapaad.com/help/how-do-i-identify-inactive-customers gives the same report with export/Saved Reports and no send trigger. So the lapsed-win-back leg is a report plus a manual multi-select SMS - exactly 'one-off manual sends' rather than an always-on campaign. BOUND/CONTROLS over the 1,168-document census, tokenised (\b...\b), case-insensitive, whitespace-tolerant: birthday 0/1168; anniversary 0/1168; win back 0/1168; winback 0/1168; lapsed 0/1168; dormant 0/1168; 'first visit' 0/1168; campaign 0/1168; drip 0/1168; newsletter 0/1168; 'sms campaign' 0/1168; 'email campaign' 0/1168; segment 0/1168; automation 1/1168 (POISON: 'Marketing automation' inside the GrabFood Connect benefits article, a delivery-aggregator integration, not loyalty). Known-positive controls on the same corpus: printer 55/1168, loyalty 47/1168, invoice 40/1168, so the regex works. POISON PUBLISHED: 'thank you' is 1089/1168 because every GrooveHQ page footer reads 'Thank you for leaving a rating!' - a raw grep for the first-visit-thank-you conjunct is worthless on this KB. Corroborating corpora already on disk, re-grepped per this cell: the 562-title feature_checklist WP REST custom post type (.cache/q317/sapaad/feature_checklist.json) has no birthday/anniversary/win-back/lapsed item; the 544 first-party Vantage source-map sources (.cache/q321/sapaad/vantage) have none; the 24 release-note posts have none; and the Encore retention page's only always-on trigger is survey-rating-gated with 'A person always sends, fixes and releases.' Retrieved 2026-09-18. https://kb.sapaad.com/help/where-can-i-view-my-customers-who-havent-ordered-in-a-while · retrieved 2026-09-18 adversarially verified
Sends both email and SMS campaigns natively from the platform, not solely by handing the list to a third-party ESP. differentiator
guest-loyalty-native-email-sms
Not scored by this record.
Captures per-channel marketing consent with timestamp and source of consent, and honors revocation received by any reasonable means (not just the STOP keyword) across all channels.
guest-loyalty-consent-management
Not scored by this record.
Handles or explicitly documents A2P 10DLC brand and campaign registration required for the operator to send SMS through the platform.
guest-loyalty-10dlc-registration
Not scored by this record.
Reports redemption and incremental sales attributable to a specific campaign or offer, tying redeemed offers to actual check totals. differentiator
guest-loyalty-campaign-attribution
Not scored by this record.
Provides self-serve export of the full guest list and transaction history, including contact PII, via CSV or API, without a vendor fee or support ticket. differentiator
guest-loyalty-data-export-portability
Not scored by this record.
Exposes a documented outbound guest and order event API or webhook stream that a CDP or marketing platform can subscribe to (e.g. Olo, Punchh, Bridg, Klaviyo). differentiator
guest-loyalty-cdp-event-api
Not scored by this record.
Triggers post-transaction feedback requests and routes responses by score, sending low scores to private service recovery and high scores toward public review sites. differentiator
guest-loyalty-review-capture-routing
Not scored by this record.
Includes a native referral mechanic with per-guest codes or links, attribution of the referred guest's first order, and two-sided rewards.
guest-loyalty-referral-program
Not scored by this record.
Issues an Apple Wallet or Google Wallet loyalty pass with push-updatable balance, as an alternative to requiring a branded app download. differentiator
guest-loyalty-wallet-pass
Not scored by this record.
Provides admin tooling to fulfill guest data access and deletion requests (CCPA/CPRA-style) including deletion propagation to loyalty and marketing records.
guest-loyalty-privacy-rights-tooling
Not scored by this record.
Enforces loyalty fraud controls such as redemption velocity limits, manager approval on manual point adjustments, and flagging of employee self-redemption, with an audit log.
guest-loyalty-redemption-fraud-controls
Not scored by this record.
Vendor documents AI/ML-generated recommendations for offer content, target audience, or send timing (claim-level; verify it is a shipped product feature, not a roadmap statement). differentiator
guest-loyalty-ai-offer-recommendation
Not scored by this record.
Offers native stored-value/gift card balances tied to the same guest profile and redeemable across all locations of the brand.
guest-loyalty-stored-value-gift
Not scored by this record.
Labor & workforce
Employees clock in and out at the POS terminal using a PIN, badge, or card, with no separate time-clock hardware required.
labor-clock-in-at-pos
329th: MOVED unknown -> partial/B. NEW SURFACES: (a) the whole kb.sapaad.com help centre crawled to an href fixpoint (1,169 URLs, 1,167 x 200, 1,087 article pages, 2 tag-index 406 misses; all 22 already-cited KB URLs inside it) - ~6x the 92+87 articles prior passes held; (b) the COMPLETE resources.arsc value string pool of the shipped Android POS app com.sapaad.pos (APK on disk from the q310 pass, AndroidManifest entry dated 2026-09-09; 10,557 strings extracted with a local ARSC parser, .cache/q329/sapaad/arsc-strings.txt). WHAT SATISFIES PART OF THE CLAIM: staff identify themselves AT THE POS TERMINAL with a card or biometric and no separate time-clock hardware, and the vendor itself presents the resulting timestamped history as attendance. Verbatim: 'Sapaad provides simple and convenient solutions to access your POS. You can log in to Sapaad with username and password, swipe cards, or a biometric login.' (https://kb.sapaad.com/help/what-are-the-different-methods-to-log-in-to-sapaad - a closed three-item enumeration of login methods); 'Step 4: Click on the Swipe Card No. field and swipe the card on the card reader attached to the POS... enter the URL https://pos.sapaad.com/users/login_swipe... Swipe the card on the card reader and you'll be able to log in to Sapaad.' (https://kb.sapaad.com/help/can-i-implement-swipe-cards-for-my-users-to-log-in-instead-of-username-and-password, Updated February 9, 2024); 'Sapaad makes it easy to monitor your staff's attendance. To view the log in history of a staff, visit Setup > Staff... Click on the History button to view their log history.' (https://kb.sapaad.com/help/how-can-i-view-a-staff-s-log-in-history); 'a complete log of staff usage, deters buddy punching' (https://kb.sapaad.com/help/what-are-the-benefits-of-sapaad-biometrics). NAMED SHORTFALL: it is a login-session log, not a clock-in/clock-out timecard - there is no punch event, no hours total, no break tracking and no payroll output anywhere, and the vendor's own answer to the shift-hours question is a LOGIN-METHOD WORKAROUND rather than a schedule-aware clock: 'In Sapaad, you can restrict staff log in times to their shift hours by simply opting for alternative log in methods, such as swipe cards or biometrics devices, over username and password.' (https://kb.sapaad.com/help/how-do-i-restrict-staff-access-to-sapaad-to-their-shift-hours, Updated September 8, 2019). Labour scheduling is delegated to the 7Shifts integration. BOUND/CONTROLS, tokenised case-insensitive: over the 1,168-doc KB census 'clock in' 0, 'clock out' 0, clocking 0, timesheet 0, timecard 0, 'time card' 0, payroll 0, 'working hours' 0, attendance 1 (only the log-in-history article above); shift 3/1168 and all three are the shift-hours/roles/pricing articles. Over the 10,557-string Android POS resource pool: punch 0, attendance 0, timesheet 0, timecard 0, swipe 0, badge 0 (POISON: 'clock' hits 2, both Android Material time-picker strings "%1$s o'clock" and 'Switch to clock mode for the time input'; 'shift' hits are the 'Shift+' keyboard-modifier strings); the app's only in-app permission slugs are order.create, order.modify, order.cancel, walkin.manage, walkin_orders.view, sales_summary_reports.view - no labour permission. Also re-grepped per this cell: the 25-article Staff Management KB category index enumerates every staff function (add/edit/delete staff, roles, access rights, locations, swipe cards, log-in history, tips, shift-hour restriction) and contains no clock-in, timecard or attendance article; the 562-title feature_checklist has clock/punch/attendance/timesheet/timecard 0; the 544 Vantage sources have 0; the 320,339-line dex string dump of the same APK has clockIn 2, both android.app.AlarmManager$AlarmClockInfo / createAlarmClockInfo. SCOPE CAVEAT: the app census covers the native Android POS app only; pos.sapaad.com's browser POS is not bundle-censused, which is why this is partial and not no. Retrieved 2026-09-18. https://kb.sapaad.com/help/how-do-i-restrict-staff-access-to-sapaad-to-their-shift-hours · retrieved 2026-09-18 adversarially verified
Captures a photo at punch (or performs facial verification) attached to the timecard entry, with a photo-only mode available that stores no biometric template. differentiator
labor-photo-punch-verification
Not scored by this record.
Supports mobile clock-in restricted by geofence or location validation for staff who do not punch at a fixed terminal.
labor-geofenced-mobile-punch
Not scored by this record.
Records time punches while the POS is offline and reconciles them on reconnect without loss or duplicate entries, with the behavior documented. differentiator
labor-offline-time-punch
Not scored by this record.
Permissions are grantable per discrete action (void, comp, discount, refund, drawer open, price change, report access) per role and per location, not limited to fixed cashier/manager/admin tiers.
labor-granular-rbac
Roles are user-defined rather than fixed tiers — Setup > Staff > Add New Role takes "the role name, default page and access rights and permissions", and "Under Access Rights & Permissions, uncheck the checkboxes to restrict access permissions to staff with this role." Individual toggles are evidenced by task articles: restrict a role to Dashboard > Business Summary Reports only, block modifying old bills, grant management of the Modifier List, require an admin to approve purchase orders, restrict Sapaad Waiter to printing bills only, allow overriding the location on a delivery order. Shortfall: the permission matrix itself is never published, so per-action coverage of void/comp/discount/refund/drawer-open/price-change is unverified; and permissions attach to the role only — staff are separately assigned to one or more locations, with no documented per-location variation of a role's rights. https://kb.sapaad.com/help/how-to-restrict-access-permissions-for-staff · retrieved 2026-08-03
Manager overrides and approvals are attributed to the individual approver and written to an immutable audit trail queryable after the fact.
labor-manager-override-audit
MERGE (321st): grade A -> B (shipped source map, consistent with bite); partial because no approver column and immutability unstated. CLAIM: manager overrides and approvals attributed to the individual approver AND written to an immutable audit trail AND queryable after the fact. VERDICT: unknown -> partial/A (queryable, staff-attributed per-order audit trail exists; approver attribution and immutability not shown). NEW SURFACE: crt.sh + certspotter for sapaad.com listed 110+ subdomains; production hosts probed at / and /swagger, /swagger/index.html, /swagger/v1/swagger.json, /api-docs, /openapi.json, /docs, /robots.txt and a nonsense path. No anonymous spec anywhere: partners.sapaad.com ("Sapaad Open Api" partner portal, Rails; every doc path 404, docs behind partner login), open-api-portal 503, api-gateway/-2/3 403 JSON, prints.sapaad.com 404 on every path, kds.sapaad.com 302 -> /error/missing_token, api2/app2 robots "Disallow: /" (generic *, not ClaudeBot). NEW SURFACE: vantage.sapaad.com (= dashboard.sapaad.com, title "Sapaad Vantage", PRODUCTION) serves /packs/manifest.json (18 JS assets) and anonymous source maps with sourcesContent; main-b2bdd5d6989af419772a.js.map holds 544 first-party sources (app/app/javascript/**). EVIDENCE (source files inside the map, production Vantage back office): features/subR/components/orderDetails/dataProvider.tsx builds per-order endpoints `/api/v1/dar/${dashboard}/${widget}/sub-r/${order_id}` + "/order-history", "/modifications", "/audit-logs". orderDetails/auditLogs.tsx renders a "Logs" tab: heading "Order Log", "This is the complete audit trail for Order Number {data?.order_no}", columns ['Activity', 'Staff', 'Date & Time', 'Activity Summary'] from item.event, item.user_name, item.business_date_time, item.event_summary, with CSV export "Order_<no>_Audit_Log.csv". orderDetails/modification.tsx (History tab, shown only for orders dated before 2026-01-01): columns "Modified Item", "Modification Type", "Modified By" (i.staff_name), "Date & Time", "Reason" (i.modification_reason). So order changes are recorded per order with the acting staff member, time and reason, and can be queried and exported after the fact. SHORTFALL: (1) the only attribution column is the ACTING staff member ("Staff"/"Modified By"); no approver/supervisor field exists in either table (tokenised case-insensitive over the 544 sources: approver 0, supervisor 0, approved 0; authoriz* 33, all POISON: JWT `Authorization` headers, authorizeUser(), authorizedCompanies, WidgetLockedUnauthorized), and the vendor's own gate is a single business-wide "Supervisor Password" (archived help.sapaad.com, see existing note), so the approving individual is not shown to be recorded; (2) immutability is not stated anywhere; (3) the event enum is server-side, so which override types are logged is not enumerated. POISON: 'override' 20+ hits are all CSS/prop names (override-message, "Override global font-size"). Weaker than ideal: this is UI source, not a help article. Retrieved 2026-09-17. https://vantage.sapaad.com/packs/js/main-b2bdd5d6989af419772a.js.map · retrieved 2026-09-17 adversarially verified
Builds and publishes employee shift schedules inside the same platform that holds the timekeeping data, rather than requiring a third-party scheduling app. differentiator
labor-native-scheduling
Not scored by this record.
Generates recommended staffing levels or labor hours by daypart from the operator's own POS sales history, not just a static template. differentiator
labor-demand-labor-forecast
Not scored by this record.
Displays labor cost as a percentage of sales in real time during service on a manager view or POS, not only in end-of-day or next-morning reports. differentiator
labor-realtime-labor-percent
Not scored by this record.
Warns or blocks at clock-in when an employee is approaching or would cross a configured overtime threshold, before the overtime is incurred. differentiator
labor-overtime-prevention
Not scored by this record.
Configures meal and rest break rules per state or jurisdiction, prompts required break attestation, and flags missed breaks for premium pay. differentiator
labor-break-compliance-by-state
Not scored by this record.
Supports predictive-scheduling ordinances by tracking advance-notice deadlines for published schedules and calculating predictability pay owed for employer-initiated changes.
labor-fair-workweek-support
Not scored by this record.
Enforces minor-labor restrictions (age-based maximum hours, prohibited time windows, school-day limits) at both scheduling and clock-in.
labor-minor-labor-rules
Not scored by this record.
Computes tip pooling and tip-outs automatically per shift from configurable rules (percentage of sales, hours worked, points, or role), rather than requiring a manual spreadsheet.
labor-tip-pooling-rules
Not scored by this record.
Retains a per-shift, per-employee record of tips received, amounts contributed to the pool, and amounts distributed from the pool, exportable for audit.
labor-tip-distribution-audit-trail
Not scored by this record.
Payroll export separates cash from charged qualified tips and carries a Treasury tipped-occupation code, supporting the W-2 Box 12 code TP and Box 14b reporting required for tax year 2026. differentiator
labor-qualified-tips-w2-reporting
Not scored by this record.
Vendor processes payroll itself as a first-party product (tax filing and direct deposit), as opposed to exporting to a third-party payroll provider only. differentiator
labor-native-payroll
Not scored by this record.
Exports timecards, wages, and tips in documented formats or via direct integration for at least two major payroll providers (e.g. Gusto, ADP, Paychex, QuickBooks).
labor-payroll-export-formats
Not scored by this record.
Employees can request shift swaps or claim open shifts in a self-service app, subject to a manager approval workflow that enforces overtime and role eligibility. differentiator
labor-shift-swap-workflow
Not scored by this record.
Provides digital new-hire onboarding that collects W-4 and I-9 documentation and supports E-Verify submission.
labor-digital-onboarding-i9
Not scored by this record.
Reports per-employee sales performance metrics (average check, items or category attachment rate, void and comp rate) by server or cashier. differentiator
labor-server-performance-metrics
Not scored by this record.
Inventory, purchasing & cost control
Supports multi-level recipe/BOM costing where a recipe can contain sub-recipes (prep items) and plate cost recalculates automatically when any component ingredient's cost changes.
inventory-recipe-bom-costing
All four conjuncts are met natively and are documented in Sapaad's own help centre. COMPONENT RECIPES: a recipe is defined per menu item at Setup > Inventory Setup > Recipes by searching each ingredient and entering the quantity used, and 'Once you define a recipe for a particular item, it will help you determine your cost of goods and profitability' (kb.sapaad.com/help/what-is-a-recipe, /how-to-create-a-recipe); Recipe Unit is a per-ingredient field (/what-does-recipe-unit-mean-in-the-ingredient-csv-file). SUB-RECIPE NESTING: 'Sub-recipe is also known as semi-processed or semi-finished goods which are prepared in large quantities, stored, and then used in a recipe as per the order' - a sub recipe is created as an Ingredient Type on Setup > Inventory Setup > Ingredients & Sub Recipes, carries its own 'Sub Recipe Ingredients' list with quantities, its own measurement unit ('the same unit in which you want to use this sub recipe in your recipes'), opening balance, reorder level and Track Inventory, so it is consumed by parent recipes exactly as an ingredient is (/what-is-a-sub-recipe, /how-to-add-a-sub-recipe). Depth is explicitly unbounded: 'You can add an unlimited number of sub-recipes to a recipe' (/how-many-sub-recipes-can-i-add-to-a-recipe). The documented setup order is ingredients, then sub-recipes, then recipes, then finished goods (/how-to-set-up-my-inventory). COST ROLLUP: Batch Production is the prep layer - 'the processing of batches of semi-finished ingredients for your recipes, for e.g. sauces, marinades, fillings, and gravies. Sapaad automatically reduces the stock of ingredients required to prepare the batch and simultaneously increases the stock of the batched item', run against 'the recipe or sub recipe' (/what-is-batch-production). A sub recipe has no cost field of its own; its value derives from the ingredients it consumes, valued on the 'weighted average formula' (/how-does-the-sapaad-inventory-work). RECALCULATION: stated verbatim - 'When receiving items in a purchase order at a higher cost, the recipe cost in which the corresponding ingredients are used will be updated' (/what-happens-to-my-recipe-cost-when-i-receive-ingredients-of-that-recipe-at-a-higher-cost). Supporting surface: ingredient Usage shows which recipes consume an ingredient (/how-do-i-identify-which-recipes-use-a-particular-ingredient) and a Global Targeted Food Cost is configurable (/how-to-set-my-global-targeted-food-cost). CAVEATS, not shortfalls: the recalculation article is worded only for receipts 'at a higher cost' and does not separately state that the update traverses ingredient -> sub-recipe -> parent recipe; and correcting a mis-keyed cost per unit is a manual, destructive procedure - 'issue out all its current stock from your locations with a hand value of 0. Then, you can receive the available stock for a location with the correct price' (/how-can-i-update-the-incorrect-cost-per-unit-for-an-ingredient) - which is error correction, not a cost change, and does not bear on automatic rollup. Actual food cost is a manual division from the Theoretical Stock Report (/how-do-i-identify-my-actual-food-cost). POISON: 'finished good' is a homonym - it denotes both purchased stock with a 'Tax for Purchase' field and items 'prepared in batches at the restaurant' (/what-is-a-finished-good, /how-to-add-supplier-tax-in-purchase-orders-for-finished-good-prices), so it proves nothing about nesting either way; the prep layer is Sub Recipe, a distinct first-class object, and the finished-good route is for selling central-kitchen output, not for nesting. https://kb.sapaad.com/help/inventory-7 · retrieved 2026-09-15 adversarially verified
Stores purchase unit, recipe unit, and count unit per item with explicit conversion factors, plus a yield/waste percentage applied to raw-to-usable conversion.
inventory-unit-conversion-yields
The purchase-to-recipe conversion is explicit on the ingredient record: a measurement unit that "should be the same unit in which you want to use this ingredient in your recipes", plus Buying Unit, Buying Unit Value and Net Weight Value, the last defined as "the weight of the actual goods or drained weight (in the recipe unit)" — so drained yield on a purchased pack is captured. Shortfall: there is no third count unit — stock takes are entered in the ingredient's single measurement unit, and "Why am I unable to change the unit of measurement of an ingredient?" confirms one unit per item — and no yield or waste percentage field applying a raw-to-usable factor. Waste is instead a separate after-the-fact Stock Issue transaction. https://kb.sapaad.com/help/how-to-add-an-ingredient · retrieved 2026-08-03
Produces a theoretical-vs-actual usage variance report per item for a defined count period, showing theoretical usage from POS sales times recipe, actual usage from counts plus receipts, and the variance in both units and currency. differentiator
inventory-theoretical-vs-actual
Not scored by this record.
Depletes ingredient on-hand quantities in near real time as orders are fired at the POS, including depletion driven by modifier selections, not only in an end-of-day batch. differentiator
inventory-realtime-depletion
Not scored by this record.
Automatically 86s (marks unavailable) menu items on the POS, online ordering, and connected third-party delivery menus when a component ingredient hits zero or a configured threshold. differentiator
inventory-86-auto-sync
Not scored by this record.
Supports full physical inventory, ad-hoc spot counts of a subset, and scheduled recurring cycle counts, with each count's variance recorded as separate history rather than overwriting prior counts.
inventory-count-modes
Two of the three modes are documented. A full count is the default New Stock Take; an ad-hoc subset count is explicit — a partial stock take is "a stock take for only certain inventory items", built by searching items or selecting a category. Counts run through a submit/review/reconcile workflow with positive and negative variance handling, auto-reconcile, rejection of an incorrect submission, and a date-ranged Stock Takes Report plus an exportable Variance Report, so counts are retained as history rather than overwritten. Shortfall: no scheduled recurring cycle count. The 55-article Inventory category offers only the advice that "you can do a stock take at your location daily, monthly or every fortnight" — a cadence the operator must run manually, with no scheduling object. https://kb.sapaad.com/help/can-i-take-a-partial-stock-take · retrieved 2026-08-03
Provides a mobile/tablet counting app supporting barcode or QR scanning that continues to accept counts with no network connectivity and syncs on reconnect.
inventory-mobile-count-offline
Not scored by this record.
Ships pre-built electronic vendor catalog and order-transmission integrations with named broadline distributors (e.g. Sysco, US Foods, Performance Food Group) that send purchase orders and receive invoices electronically rather than by emailed PDF. differentiator
inventory-vendor-catalogs-edi
Not scored by this record.
Ingests supplier invoices from photo, PDF, or email and extracts line-item detail (item, quantity, unit, price) into the inventory ledger without manual line entry. differentiator
inventory-invoice-ocr
Not scored by this record.
Tracks per-item purchase price history across invoices and alerts when a received price exceeds the prior or contracted price by a configurable threshold. differentiator
inventory-price-change-alerts
Not scored by this record.
Maintains par levels per item per location and generates suggested purchase order quantities from on-hand versus par, with at least one mode driven by a sales forecast rather than a static par. differentiator
inventory-par-auto-suggest
Not scored by this record.
Provides a structured waste/spoilage logging workflow with reason codes that debits inventory and reports waste cost separately from usage variance.
inventory-waste-logging
Not scored by this record.
Supports inter-location inventory transfers as a two-sided transaction crediting the sending location and debiting the receiving location, with an in-transit or approval state.
inventory-transfers
Not scored by this record.
Supports a commissary/central kitchen model where one location produces prep items and issues or sells them to other locations at a computed transfer cost.
inventory-commissary
Not scored by this record.
Captures lot/batch numbers at receiving and links them through production to sales or transfers, enabling a backward and forward recall trace.
inventory-lot-traceability
Not scored by this record.
Tracks expiration or use-by dates on received and prepped items and surfaces an expiring-soon report or alert before spoilage.
inventory-shelf-life-expiry
Not scored by this record.
Supports partial-bottle liquid inventory by weight (scale integration) or by bottle fraction for bar and beverage counting.
inventory-bar-partial-bottle
Not scored by this record.
Exports period COGS and accounts-payable invoice detail in a named accounting system's import format (e.g. QuickBooks, Sage Intacct, NetSuite) with GL account mapping configurable per item category.
inventory-cogs-gl-export
Not scored by this record.
Inventory and recipe costing are delivered natively by the POS vendor rather than requiring a separately-contracted third-party product (e.g. MarginEdge, MarketMan, Restaurant365) to function. differentiator
inventory-native-not-partner
Not scored by this record.
Reporting, BI & data access
Provides a live sales dashboard reflecting transactions within minutes of the sale, accessible from both a browser and a mobile app off-premise.
reporting-realtime-dashboard
Live dashboards plus Sapaad Vantage BI and an "Ask Vantage" AI assistant are named analytics modules. https://www.sapaad.com/ · retrieved 2026-08-01
Generates a daily close-out/EOD report reconciling gross sales, net sales, tax, tips, discounts, refunds, tender types, and expected cash deposit in one document.
reporting-eod-closeout
Business Summary is Sapaad's end-of-day artefact — the article is filed under exactly that question — and "gives you a comprehensive breakdown of sales by staff, sales by category, delivery sales, cancelled orders, discounts, surcharges, and more, all at a single glance", savable as PDF. Shortfall: it is not one reconciling document. Tax is a separate Tax Report with its own per-tax breakdown article, tender split is a separate "daily sales by payment type" report, and nothing in the 76-article Dashboard & Reports category produces an expected cash deposit or a tip total for the day; driver cash is a further separate report. https://kb.sapaad.com/help/how-do-i-make-the-end-of-day-report · retrieved 2026-08-03
Provides a product mix (PMIX) report at individual menu item AND modifier level with quantity, gross and net sales, filterable by daypart and revenue center.
reporting-pmix-modifier-level
Modifier-level product mix exists: a Top Modifiers Report and a Top Paid Modifiers Report under Dashboard > Marketing, plus a Top Selling Inventory Modifiers report, each date-ranged, filterable by order type and exportable to CSV; item-level mix comes from the Total Orders Report exported "By Item", with best-selling, per-staff, per-location and combo-component views. Shortfall: the documentation never states the columns, so quantity-versus-gross-versus-net breakdown is unconfirmed; the only documented filters are date range, order type and location, with no daypart filter on the modifier reports and no revenue-centre dimension anywhere. https://kb.sapaad.com/help/where-can-i-view-my-top-selling-modifiers · retrieved 2026-08-03
Produces an audit report of comps, voids, discounts, and price overrides attributed to the employee who applied them and the manager who approved them, with reason codes and timestamps.
reporting-comps-voids-audit
Not scored by this record.
Reports cash over/short per drawer, per shift, and per employee, comparing counted cash to expected cash from tendered transactions and paid-outs.
reporting-cash-over-short
Not scored by this record.
Reports sales per labor hour and labor cost as a percentage of sales by hour, by department, and by employee, using actual clocked hours from the POS time clock.
reporting-labor-productivity
Not scored by this record.
Reports per-server metrics including average check, items per check, attachment rate for named categories, and tips as a percentage of sales. differentiator
reporting-server-scorecards
Not scored by this record.
Reports revenue and margin by fulfillment channel — dine-in, direct online, first-party delivery, and each third-party marketplace separately — net of marketplace commission fees. differentiator
reporting-channel-profitability
Not scored by this record.
Provides a consolidated multi-location report with side-by-side location comparison and drill-down from group total to a single location and then to an individual transaction. differentiator
reporting-multiloc-drilldown
Not scored by this record.
Includes a self-service report builder letting a non-developer choose dimensions, measures, and filters and save the result, rather than only fixed canned reports. differentiator
reporting-custom-report-builder
Not scored by this record.
Supports scheduling any report for automatic recurring delivery by email or to a shared destination on a defined cadence and recipient list.
reporting-scheduled-delivery
Not scored by this record.
Offers automated recurring bulk export of transaction-level raw data to a customer-controlled destination (S3, SFTP, Snowflake, BigQuery, or equivalent), not just manual CSV download. differentiator
reporting-raw-warehouse-export
Not scored by this record.
Publishes a documented public REST or GraphQL API covering orders, payments, menu, and labor data, with self-service developer credentials obtainable without a signed partner agreement. differentiator
reporting-public-api
Not scored by this record.
Emits outbound webhooks for order and payment lifecycle events to a customer-supplied endpoint, with documented retry behavior and payload signature verification. differentiator
reporting-webhooks
Not scored by this record.
API and raw-data access are included in the standard subscription rather than gated behind an additional per-location fee, revenue share, or enterprise-only contract. differentiator
reporting-api-not-upcharged
Not scored by this record.
Core reporting beyond basic sales summaries — labor vs sales, PMIX, comps/voids audit, multi-location comparison — is available on the entry-level paid plan rather than requiring a higher tier or an add-on analytics SKU. differentiator
reporting-tier-paywall
Not scored by this record.
Documents a historical retention window of at least 24 months of transaction-level detail queryable in the reporting UI, with no silent truncation or archive retrieval fee. differentiator
reporting-history-retention
Not scored by this record.
Sends proactive push or email alerts when an operator-configured metric breaches a threshold or deviates from its historical pattern (e.g. void spike, sales below forecast, discount rate anomaly). differentiator
reporting-anomaly-alerts
Not scored by this record.
Offers a natural-language query or AI assistant that answers ad-hoc questions against the operator's own sales and labor data and returns a figure or chart, not a generic help-article response.
reporting-nl-query
Not scored by this record.
Reports guest-level analytics including new versus returning guest counts, visit frequency, and lifetime spend cohorts tied to identifiable guest records from loyalty or online ordering. differentiator
reporting-guest-cohorts
Not scored by this record.
Produces a forward sales forecast at daypart or hourly granularity from the location's own history, exposed in the reporting UI and consumable by scheduling or ordering workflows. differentiator
reporting-sales-forecast
Not scored by this record.
Generates payroll- and tax-ready tip reporting: declared versus charged tips per employee, tip pool distribution detail, and a tax liability summary by jurisdiction.
reporting-tip-tax-compliance
Not scored by this record.
Multi-location, franchise & enterprise governance
Supports a named organizational hierarchy of at least three levels (e.g. enterprise > region/group > location) as a first-class object that reporting and permissions can be scoped to, not just a flat list of locations.
multi-location-org-hierarchy
Mall reporting is a named multi-outlet report type, implying grouping above the location; a formal three-level hierarchy object is not documented. https://www.sapaad.com/ · retrieved 2026-08-01
Corporate menu items expose per-field override rules so a location can change some attributes (e.g. price, availability) while corporate locks others (e.g. name, image, recipe), and locked fields are not editable at store level. differentiator
multi-location-local-override-policy
Not scored by this record.
Supports price tiers/zones so one menu item carries different prices per location group, per order channel, and per daypart without duplicating the item record.
multi-location-price-zones
Per-location pricing works on one item record — Menu Management > edit item > "In the Branch Price field, enter the updated price of the item" for the chosen location. Shortfall: the channel dimension requires duplication, which the claim excludes. Sapaad's own answer for a different delivery-channel price is "Simply create separate items for your Dine-In and GrabFood menus with the appropriate prices", hiding the channel copy from the POS with a Hide in POS checkbox. There is also no location-group or price-zone object — prices are set per individual branch — and no daypart pricing anywhere in Menu Setup. https://www.sapaad.com/knowledge-base/how-can-i-have-different-menu-prices-for-dine-in-and-grabfood/ · retrieved 2026-08-03
Menu, price, and promo changes can be scheduled to activate at a future date/time interpreted in each target location's own timezone, and can be rolled back after activation. differentiator
multi-location-scheduled-publish
Not scored by this record.
A new location can be provisioned by cloning a documented configuration template (menu, taxes, roles, printers, modifiers, tenders) rather than being configured from scratch, and the vendor publishes the expected time-to-open. differentiator
multi-location-new-store-template
Not scored by this record.
The permission model distinguishes a franchisor/corporate tenant from an independently-owned franchisee tenant, so corporate can see franchisee sales and enforce config while the franchisee owns its own employees, banking, and labor data. differentiator
multi-location-corp-vs-franchisee-roles
Not scored by this record.
Calculates franchise royalty, ad-fund, and marketing-fee amounts automatically from POS net sales on a defined schedule, with a configurable royalty basis (gross vs net of discounts/comps/third-party). differentiator
multi-location-royalty-calculation
Not scored by this record.
Supports automated ACH/debit collection of calculated royalties and fees from franchisee accounts, with a franchisee-visible statement of what was charged.
multi-location-royalty-collection
Not scored by this record.
Provides above-store reporting that aggregates sales, labor, discounts, voids, and item mix across any selected set of locations in one view, with store-vs-store ranking and variance flags.
multi-location-consolidated-reporting
Not scored by this record.
Item-level sales roll up across locations under a shared corporate item ID even when stores have renamed or locally priced the item. differentiator
multi-location-normalized-item-rollup
Not scored by this record.
Gift cards issued at one location are redeemable at any other location in the brand, with a reported outstanding-liability balance and inter-store settlement/redemption reconciliation between owners.
multi-location-cross-location-giftcard
Not scored by this record.
A single customer loyalty profile, balance, and stored order history is shared across all locations in the brand rather than being per-location.
multi-location-cross-location-loyalty
Not scored by this record.
A single location/terminal can operate two or more distinct brands or virtual brands with separate menus, receipts/branding, and separately reportable revenue, on the same hardware and drawer. differentiator
multi-location-multi-brand
Not scored by this record.
Tax configuration is per-location with support for multiple simultaneous tax rates, jurisdiction-specific rules (e.g. prepared-food vs grocery, inclusive vs exclusive tax), and per-location tax exemptions.
multi-location-multi-tax-jurisdiction
Not scored by this record.
Produces an immutable audit log of who changed which configuration object (price, tax, permission, discount) at which location and when, exportable or queryable by corporate. differentiator
multi-location-config-audit-log
Not scored by this record.
Publishes a documented multi-location API (or data warehouse/BI export) that returns transaction-level data across all locations in one authenticated call, without per-location credentials. differentiator
multi-location-enterprise-api
Not scored by this record.
Labor rules (overtime, break enforcement, predictive-scheduling compliance) are configurable per location or location group and enforced at the terminal, not just reported after the fact.
multi-location-central-labor-policy
Not scored by this record.
Hardware & physical footprint
The POS software runs on commodity off-the-shelf hardware (standard iPads, Android tablets, or PCs) that the operator can buy from a third party, rather than only on vendor-supplied proprietary terminals. differentiator
hardware-commodity-devices
Not scored by this record.
Vendor documentation names the specific client operating systems supported (iOS/iPadOS, Android, Windows, Linux/web) and states minimum OS versions and device specs.
hardware-os-platforms
Sapaad publishes client platform minimums in its help centre. The POS/web client article 'Which devices does Sapaad work on?' (dated December 8, 2025) states: 'Sapaad is cloud-based and device agnostic. All you need is an internet connection and a device with a web browser... However, we do have certain minimum hardware requirements to ensure your Sapaad experience is optimized', followed by an explicit spec list - 'Browser: Google Chrome, Mozilla Firefox, Safari'; 'RAM: Minimum 4GB'; 'Hard Disk: Minimum 320GB'; 'Operating System: Windows 8 and above & Mac OS X 10.8 and above'; 'Processor: Intel Core i3 and above'. All five label/value pairs verified against raw bytes in a single <p> block, so the pairing is not a tag-stripping artefact. That page covers the desktop/web client only and never mentions iOS, iPadOS, Android or Linux; the mobile minimums are published on separate, live kb.sapaad.com articles which I re-fetched at 200: the iOS app needs 'iOS devices running OS 12 and above with a minimum screen size of 10.2 inches' (updated December 21, 2020); Sapaad CDS states 'For iOS: You can use any iPad OS version 13 and higher. For the Android OS: You can use version 9 and higher. Your Android device must have a minimum screen size of 8"' (updated January 17, 2022); and KDS 2.0 is 'device agnostic and can be used on any OS and device with a minimum resolution of 1024x768, as well as on both touch and bump interface' (updated August 4, 2023), with a companion article confirming no proprietary hardware is required. Named OSs, minimum OS versions and device specs are therefore all published first-party, satisfying every conjunct - though no single page enumerates the whole client set, and the iOS-app and CDS articles are three to five years old. RETRIEVAL TRAP, both halves re-tested: the cited www.sapaad.com URL is live (HTTP 200, 261,730 bytes, correct <title>, full article body); the research pass's own soft-404 marker fired falsely because its regex matched the literal string '404' inside the page's WordPress chrome, so do not trust byte-length or keyword heuristics on this host. The identically-named slug kb.sapaad.com/help/which-devices-does-sapaad-work-on IS a genuine Groove soft-404 - HTTP 200 but 24,676 bytes, <title> 'Page Not Found - 404' and body 'Uh-oh, we can't find that page!' - so the www host is the one that must be cited. robots.txt on both hosts permits the cited paths (www: 'Allow: /' with only /wp-admin/ disallowed; kb: 'Disallow: /' but explicit 'Allow: /help'). https://www.sapaad.com/knowledge-base/which-devices-does-sapaad-work-on/ · retrieved 2026-09-15 adversarially verified
Offers a purpose-built handheld ordering device with an integrated card reader (not a phone case add-on), with published drop rating and IP ingress rating.
hardware-handheld-purpose-built
Not scored by this record.
The handheld supports hot-swappable or field-replaceable batteries, or the vendor publishes a rated battery life for a full shift. differentiator
hardware-handheld-battery-swap
Not scored by this record.
Handhelds support cellular/LTE connectivity as a documented fallback when store Wi-Fi drops, either built into the device or via a vendor-supplied failover.
hardware-handheld-lte
Not scored by this record.
Terminals continue to take orders, print to kitchen, and record cash sales with the internet down, and the vendor documents explicitly which functions degrade (card auth, loyalty lookup, refunds).
hardware-offline-mode
Offline Mode with auto-sync is claimed for continued operation; the vendor does not publish which functions degrade (card auth, loyalty, refunds). https://www.sapaad.com/ · retrieved 2026-08-01
Sells or supports a dedicated kitchen display system with bump-bar or touch input, station routing, and course/fire timing, as a first-party product rather than an integration-only dependency.
hardware-kds
Kitchen Display System is a first-party module in the operations suite, not an integration dependency. https://www.sapaad.com/ · retrieved 2026-08-01
Offers a self-order kiosk running the same menu and modifier engine as the POS, in both countertop and freestanding form factors, with integrated payment and accessibility (ADA) compliance documented. differentiator
hardware-kiosk
Not scored by this record.
Supports drive-thru-specific hardware: outdoor digital menu boards, order confirmation displays, and speaker/headset integration, with a documented timer/speed-of-service measurement.
hardware-drive-thru
Not scored by this record.
Works with standard ESC/POS thermal receipt and kitchen printers from more than one manufacturer (e.g. Epson and Star), including LAN/Ethernet printers, rather than only vendor-branded printers.
hardware-printer-compatibility
Not scored by this record.
Supports the standard peripheral set — cash drawers (including multi-drawer per terminal), barcode scanners, scales for by-weight items, and customer-facing displays — with a published compatibility list.
hardware-peripherals
Not scored by this record.
Card entry happens on a PCI-listed PTS device using validated point-to-point encryption, so the POS application and tablet stay out of PCI scope; the vendor states the merchant's SAQ type.
hardware-p2pe-terminal
Not scored by this record.
Supports contactless acceptance directly on a commodity phone or tablet (Tap to Pay on iPhone / Tap to Pay on Android) with no separate reader. differentiator
hardware-tap-to-phone
Not scored by this record.
Hardware prices are published per SKU on the vendor's public site, rather than quote-only. differentiator
hardware-pricing-transparency
Not scored by this record.
Hardware can be purchased outright (owned) as an alternative to a mandatory lease or subscription-bundled rental, and the vendor states which. differentiator
hardware-ownership-vs-lease
Not scored by this record.
Vendor documentation confirms whether hardware purchased from the vendor remains usable with other software after cancellation, i.e. it is not software-locked or remotely bricked. differentiator
hardware-usable-after-churn
Not scored by this record.
Publishes a hardware warranty term and a replacement/advance-exchange SLA with a stated turnaround (e.g. next-business-day depot swap). differentiator
hardware-rma-sla
Not scored by this record.
Staff can run the ordering or payment app on their own personal phone (BYOD) with a documented permission and security model.
hardware-byod
Not scored by this record.
Provides a remote device-management console showing each terminal, printer, and KDS as online/offline, with remote reboot, software-version visibility, and staged rollout of updates. differentiator
hardware-remote-device-management
Not scored by this record.
Integrates with specialty beverage hardware — self-pour tap walls, flow meters, or liquor pour spouts — such that pours post to a POS tab automatically.
hardware-selfpour-scales
Not scored by this record.
Supports inbound caller ID hardware or a telephony integration that pops the customer record and order history at the POS on an incoming call.
hardware-callerid-integration
Not scored by this record.
Integrations, API & extensibility
Public, self-serve API reference documentation is readable without a signed partner agreement, NDA, or sales call.
extensibility-public-api-docs
Sapaad's API is gated behind a manually reviewed partner application and a signed licensing agreement; no public reference documentation exists. The vendor's Custom APIs & Developer Tools page answers 'What do "Custom APIs & Developer Tools" let me do?' with: 'They let you pull data from Sapaad, including sales, inventory, and staff stats, into your own systems or custom apps. You get an API plus a unique vendor key after signing an API licensing agreement.' That page carries only feature bullets ('Robust REST APIs', 'Real time webhooks', 'Secure authentication', 'Detailed documentation') and a demo form -- no endpoint reference, auth spec, schema or sandbox. Two kb.sapaad.com help articles state the gate independently and in identical words: obtaining the 'application programming interface and the vendor key unique to you' requires 'signing and accepting the terms of the API licensing agreement which is available on the Sapaad database', i.e. inside the authenticated product ('can-i-integrate-my-customized-application-...' and 'upon-request-would-sapaad-integrate-with-a-third-party-...', both updated 2022-09-01); a third adds 'there is a cost associated for the Sapaad Sales API'. A developer portal DOES exist and was missed by the research pass: www.sapaad.com/openapi/ is a bodyless WordPress page whose only content is an iframe titled 'Sapaad Open API' wrapping partners.sapaad.com (robots.txt is comment-only, so crawling is permitted; zero Wayback captures ever). Its anonymous surface is a marketing shell plus a registration form. /partner_portal and /partner_portal/docs both 302 to /partner/login while sibling guesses 404, so a docs route exists and is authentication-gated. Registration is not self-serve: the form requires a contracts address, mutual-client counts, integration capacity, IP addresses and a marketplace product description, and states 'Our team will review your application and respond within 2-3 business days.' The portal's own copy promises 'instant sandbox access, clean docs, and automated onboarding' only on the far side of that review. Controls run 2026-09-15: api.sapaad.com 404s every docs path (root is 200 with zero bytes); developer.sapaad.com, docs.sapaad.com, order-engine-go.sapaad.com present no valid certificate; api-gateway3.sapaad.com (named in the Android POS APK) 403s every path including robots.txt, which is a refusal and not an absence; payments.sapaad.com 404s all docs paths; Wayback CDX returns zero captures for developer/docs/api/apidocs.sapaad.com, www.sapaad.com/api*, /develop*, /openapi* and partners.sapaad.com/*. The only 'API' articles in a 568-slug KB census are the two licensing-gate articles plus a Cloud Print Agent key and a Location API key, which are printing keys read out of Location Setup, not an API reference. Poison noted: 'Detailed documentation' on the feature page is a marketing bullet promising developer guides, not a link to any, and treating it as evidence of public docs would invert the finding. https://www.sapaad.com/custom-apis-developer-tools/ · retrieved 2026-09-15 adversarially verified
API access is included in the base subscription at no additional per-location fee, surcharge, or upgraded plan requirement. differentiator
extensibility-api-access-cost
Not scored by this record.
A free sandbox or test environment with seeded data is available to developers without owning a paid production account. differentiator
extensibility-free-sandbox
Not scored by this record.
Third-party apps authenticate via OAuth 2.0 with scoped, operator-granted, individually revocable permissions (not shared static API keys or credential sharing).
extensibility-oauth-partner-apps
Sapaad's developer page names its authentication model and it is a static shared secret, not OAuth: "Protect every connection with token-based access. Only authorized systems can retrieve or send data to your Sapaad environment", and its FAQ states a developer receives "an API plus a unique vendor key after signing an API licensing agreement." A per-vendor key issued under a contract is neither operator-granted nor scoped nor individually revocable by the restaurant. The same pattern appears inside the product — the Cloud Print Agent is paired using an account API key. No OAuth 2.0 authorisation flow, consent screen or scope list is described anywhere on sapaad.com or kb.sapaad.com. https://www.sapaad.com/custom-apis-developer-tools/ · retrieved 2026-08-03
The platform pushes real-time webhooks for order lifecycle events (created, modified, paid, voided, refunded) rather than requiring polling.
extensibility-webhooks-push
Push delivery is claimed on the vendor's developer page: "Real time webhooks — Receive instant updates as events happen across your system. From new orders to payment confirmations, stay synced without polling." Shortfall: this is a feature page, not a reference. Only two event families are named (order created, payment confirmed); modified, voided and refunded are not, and there is no public event catalogue, payload schema, retry or signature documentation to check them against — the page states endpoint references are released only after an API licensing agreement is signed, so the claimed coverage cannot be verified from anything public. https://www.sapaad.com/custom-apis-developer-tools/ · retrieved 2026-08-03
Webhooks are cryptographically signed (e.g. HMAC) AND documented to retry with backoff, with a replayable event log for missed deliveries. differentiator
extensibility-webhook-reliability
Not scored by this record.
A public write API accepts externally originated orders into the POS as first-class tickets that fire to KDS/printers and land in reporting.
extensibility-order-injection-api
Not scored by this record.
Every core object the API can read (orders, menu, customers, employees, inventory) can also be written or updated via the same API. differentiator
extensibility-data-symmetry
Not scored by this record.
API rate limits are published as specific numeric quotas with documented throttling behavior and headers.
extensibility-published-rate-limits
Not scored by this record.
The vendor is a named DoorDash Preferred Integration Partner (DPIP) under the 2026 program requirements. differentiator
extensibility-doordash-preferred
Not scored by this record.
Direct, first-party certified integrations exist with DoorDash, Uber Eats, and Grubhub without requiring a paid middleware layer (Otter/Chowly/Deliverect/Checkmate). differentiator
extensibility-first-party-delivery-integrations
Not scored by this record.
The POS is a supported endpoint for at least two major aggregation middleware platforms (Deliverect, Chowly, Otter, Checkmate, ItsaCheckmate).
extensibility-middleware-compatibility
Not scored by this record.
Native, vendor-maintained connectors exist for QuickBooks Online and at least one other GL/accounting system, with mapped journal entries rather than CSV-only export.
extensibility-accounting-connectors
Not scored by this record.
Labor hours export natively to at least two named payroll providers (e.g. Gusto, ADP, Paychex, Paylocity) without manual re-keying.
extensibility-payroll-export
Not scored by this record.
Raw transaction-level data can be exported on a schedule to a customer-controlled destination (S3/SFTP/warehouse/Snowflake share), not only viewed in the vendor's reporting UI. differentiator
extensibility-bi-data-warehouse
Not scored by this record.
The vendor operates a public integrations marketplace listing named third-party apps that operators can browse and self-install.
extensibility-app-marketplace
Not scored by this record.
Operators can define custom fields or run vendor-hosted custom logic/scripts against POS objects without a vendor engineering engagement.
extensibility-custom-fields-scripting
Not scored by this record.
The vendor supports a headless/embedded mode where a third-party UI (kiosk, web ordering, drive-thru) drives the POS transaction engine via API.
extensibility-headless-embedded
Not scored by this record.
The vendor publishes an API changelog and a stated deprecation/notice policy for breaking changes.
extensibility-api-versioning-deprecation
Not scored by this record.
A complete historical data export (orders, customers, menu, payments metadata) is available to the operator on demand, in a documented machine-readable format, at contract end. differentiator
extensibility-data-portability-exit
Not scored by this record.
Reliability, offline & operations
Order entry, ticket routing, and check printing continue on-terminal when the internet connection is lost.
reliability-offline-order-entry
Offline Mode (Auto Sync) is claimed to keep the restaurant operational during an outage; ticket routing and check printing behavior is not itemized. https://www.sapaad.com/ · retrieved 2026-08-01
Card payments can be accepted while offline via store-and-forward, not just cash-only fallback. differentiator
reliability-offline-card-auth
Not scored by this record.
The vendor publicly documents who bears the loss when a store-and-forward transaction declines after connectivity returns, and states any per-transaction or cumulative offline cap. differentiator
reliability-offline-decline-liability
Not scored by this record.
Multiple terminals continue to share a single check/table state over the local network while the internet is down (LAN-only degraded operation, not per-terminal islands). differentiator
reliability-lan-degraded-multi-terminal
Not scored by this record.
The vendor documents a local/on-premise transaction engine or edge server (not purely cloud-hosted request/response) for the ordering path. differentiator
reliability-local-transaction-engine
Not scored by this record.
Kitchen display and/or kitchen printer routing continues to function while offline.
reliability-offline-kds-printing
Explicit vendor denial, verbatim from the KDS 2.0 help article (updated 2023-08-04): "No, Sapaad KDS 2.0 does not work in offline mode. An internet connection is required for Sapaad Cloud POS to send orders to Kitchen Prep Screens." Corroborated architecturally in the same category: KDS 2.0 "is completely web-based", "can only be used with Sapaad Cloud POS", and the go-live prerequisites tell the operator to "ensure that you have a stable internet connection". The claim is disjunctive (display and/or printer routing), so the printing half is stated separately: no Sapaad page addresses kitchen printing during an outage, and the finding there rests on documented architecture rather than a denial. Kitchen tickets print through the Sapaad Cloud Print Agent, installed on a Windows POS machine and authenticated with "a 32-digit secret API key that allows Sapaad Cloud Print Agent to recognize your location", and it is "needed for the Call Center to access remote printing at your location"; an iPad cannot reach a printer without it. Offline work is queued rather than dispatched -- the iOS offline-mode article says that on reconnect the app "auto-syncs to retrieve orders punched offline" -- so an order punched during an outage has not reached the cloud that feeds both kitchen paths. Residual not refuted by any source: Chrome's --kiosk-printing flag auto-prints from an already-loaded browser tab to a locally installed printer, so a walk-in bill may still print locally; whether an offline walk-in order fires a kitchen slip that way is unstated. Scope: this is not a failover finding -- reliability-printer-fallback (automatic re-route to a backup printer or KDS station, with a staff alert) remains unknown. The "KDS 2.0" wording excludes no older product: the 568-slug KB union contains no KDS 1.0 article, and the generic "What is Sapaad KDS?" article describes the same category-routed add-on. https://kb.sapaad.com/help/does-kds-work-in-offline-mode · retrieved 2026-09-15 adversarially verified
The system automatically fails over to a backup printer or KDS station when a configured kitchen printer is unreachable, and alerts staff.
reliability-printer-fallback
329th: MOVED unknown -> no/B. The prior pass's partial/C (per-printer error alerts) was refused because alerts are not the claim core; this row instead rests on the SETTINGS ENUMERATION of the print configuration itself plus a bounded census. NEW SURFACES: (a) kb.sapaad.com crawled to an href fixpoint (1,169 URLs, 1,167 x 200, 1,087 article pages, 2 tag-index 406 misses; all 22 already-cited KB URLs inside it); (b) the complete resources.arsc value string pool of the shipped Android POS app com.sapaad.pos (10,557 strings, manifest dated 2026-09-09). POSITIVE EVIDENCE: the print configuration is a ONE-TEMPLATE-TO-ONE-PRINTER assignment with no secondary/backup field. Print Settings has exactly four tabs - Invoice Templates, Secondary Printers, Item Printing, Printing Rules - and the rule is: 'Under each order type, select the Print Template and assign it to the right Printer. For e.g. for Walk-In orders, select Invoice Template and assign it to the local printer.' (https://kb.sapaad.com/help/how-to-set-up-printing-rules, Updated March 25, 2021); item-level routing likewise 'assigning menu items to specific printers' with one template per section printer (https://kb.sapaad.com/help/configuring-item-level-print-routing, Updated February 9, 2024). 'Secondary Printers' is a NAMED-STATION registry (e.g. 'Kitchen', 'bar'), NOT a standby - each is assigned its own physical printer in the Cloud Print Agent and its own rule (https://kb.sapaad.com/help/where-can-i-download-cloud-print-how-can-i-install-slash-configure-it). And the vendor's own remedy when printing fails is MANUAL OS remediation, not a re-route: 'If Cloud Print is not printing automatically but printing when refreshed, here's what you need to do: ... Check for Updates ... Additionally, you need to disable your Windows Firewall settings.' (https://kb.sapaad.com/help/why-is-cloud-print-not-printing-automatically, Updated August 1, 2023). The Android app's actual failure behaviour is RETRY ON THE SAME PRINTER, not failover: its only failed-print worker class is PrintQueueWorkerForFailedPrints (dex string FETCHPRINTQUEUEWORKERFORFAILEDPRINTS), alongside the 2021 release note 'Multiple print requests are handled by a resilient, internal, asynchronous queue'. BOUND/CONTROLS, tokenised case-insensitive, whitespace-tolerant, over the 1,168-document KB census: failover 0/1168, 'fail over' 0/1168, fallback 0/1168, 'backup printer' 0/1168, 'alternate printer' 0/1168, 'another printer' 0/1168, reroute 0/1168, 're route' 0/1168, redundant 0/1168. Known-positive controls on the same corpus: printer 55/1168, printers 15/1168, printing 43/1168. ENUMERATION: the Printing KB category index lists all 27 printing articles and none is about a backup printer, failover or a dead-printer re-route. Over the 10,557-string Android resource pool: failover 0, 'backup printer' 0, reroute 0 - while the alert conjunct IS met there ('Printer Error', 'Unable to detect printer. Please check if the printer is on and connected to the network and try again', 'Please wait, confirming printer availability', resource ids alert_printer_error / alert_printer_connection_error / alert_no_printer_configured). Also re-grepped: 562 feature_checklist titles - 'network-and-cloud-printing' lists 9 items (Air, Category-based, Cloud, Invoice, Kitchen, Label, Local, Network, Remote Printing), no failover (POISON: 'High Availability & Failover-Ready Environment' is in category security-encryption and is about hosting); 544 Vantage sources (fallback 26, all React error-boundary/empty-state poison); 24 release notes 0. SCOPE: covers the browser POS's published print configuration and the native Android POS app; the Cloud Print Agent's own Windows binary is emailed by support and was not obtained. Retrieved 2026-09-18. https://kb.sapaad.com/help/how-to-set-up-printing-rules · retrieved 2026-09-18 adversarially verified
The vendor documents its conflict-resolution behavior for edits made on two devices during a network partition (e.g. last-write-wins, merge, or operator prompt).
reliability-sync-conflict-handling
Not scored by this record.
The vendor publishes an explicit list of which features are unavailable offline (gift cards, loyalty lookup, refunds, manual card entry, text-to-pay).
reliability-offline-feature-matrix
Not scored by this record.
A public, per-component status page exists showing current and historical incident state without a login.
reliability-public-status-page
Not scored by this record.
A contractual uptime SLA with a stated percentage AND a service credit remedy is published or available in the standard agreement. differentiator
reliability-contractual-uptime-sla
Not scored by this record.
The vendor publishes written post-incident reports or root-cause summaries for major outages.
reliability-incident-postmortems
Not scored by this record.
24/7/365 live human support by phone is included in the base subscription, not sold as a premium support tier.
reliability-247-live-support
Not scored by this record.
The vendor offers in-person on-site installation and go-live support (first-party or certified dealer network), not remote-only self-install. differentiator
reliability-onsite-install
Not scored by this record.
A hardware replacement/advance-exchange program with a stated turnaround time is included or purchasable.
reliability-hardware-replacement-sla
Not scored by this record.
Operators can trigger and retrieve their own data backup/restore, or the vendor publishes RPO/RTO figures for data recovery.
reliability-backup-restore
Not scored by this record.
The vendor publishes a current PCI DSS v4.0/4.0.1 Attestation of Compliance or equivalent (e.g. validated P2PE listing) covering the post-March-2025 future-dated requirements.
reliability-pci-dss-4-attestation
Not scored by this record.
Multi-factor authentication is enforceable on back-office and POS administrative logins, with role-based permissions.
reliability-mfa-role-based-access
Not scored by this record.
A public, free training library (video/LMS) and a practice/training mode on the terminal exist for staff onboarding.
reliability-self-serve-training
Not scored by this record.
Any terminal can assume the master/server role automatically if the designated primary terminal or local server fails. differentiator
reliability-failover-terminal-role
Not scored by this record.
Terminals support an automatic cellular/LTE failover for connectivity, first-party or documented.
reliability-cellular-backup
Not scored by this record.
Commercial, compliance & data ownership
Vendor publicly offers a month-to-month subscription with no minimum multi-year term commitment for its core POS software tier. differentiator
commercial-month-to-month-contract
Not scored by this record.
Vendor's published terms of service or MSA state no early termination fee / no liquidated damages for cancelling the software subscription before term end. differentiator
commercial-no-early-termination-fee
Not scored by this record.
The auto-renewal term and the required cancellation notice window (e.g. 30/60/90 days) are stated in publicly accessible contract terms rather than only in a signed quote.
commercial-autorenew-terms-published
Published, but only for one of Sapaad's two contracting entities. Sapaad serves a LOCALE-SPECIFIC family of ten Terms of Service pages, and they are two different contracts. The India variant, https://www.sapaad.com/in/terms-of-service/ (Last Updated: July 2026; 'Sapaad Software Private Limited', governed by the laws of India, courts of Bengaluru) publishes exactly what this claim asks for, in two places. Its 'Term, Suspension, and Termination' section states: 'The initial term of your subscription ("Subscription Term") is specified in your Order unless expressly stated otherwise, the Subscription Term shall automatically renew for successive periods equal in duration to the initial term, unless you cancel or unsubscribe through your user dashboard or provide notice to the Company via email or call no later than five (5) days prior to the intended termination date.' Its payment section repeats the mechanic: 'Subscriptions auto renew on the next billing date unless you cancel before the next billing period. You may self cancel from your account page or by notifying us at least 5 days in advance so we can stop charging your card on the upcoming billing date.' So both conjuncts -- the auto-renewal term (successive periods equal to the initial term) and the required cancellation notice window (5 days) -- are stated in publicly accessible contract terms, diligenceable before signing. SHORTFALL: this is true only of the India entity. The root ToS at https://www.sapaad.com/terms-of-service/ and its /us/, /ae/, /sg/, /sa/ and /kw/ variants are a different, shorter contract between 'Sapaad Pte. Ltd., a private company incorporated in Singapore' and the Customer, governed by Singapore law, whose section 7 'Term and Termination' has exactly three clauses and expressly defers the term to the order form: 'Term. This agreement continues until the 30th day after all orders have expired, unless earlier terminated as provided below.' / 'Term of Orders. The term of each order must be specified in the order.' / 'Mutual Termination for Material Breach ... at the end of a written or electronic 15-day notice/cure period.' Tokenised over the full 21,907-character extracted Singapore text: renew 0, renewal 0, auto-renew 0, automatically renew 0, cancel 0, cancellation 0, subscription 0, refund 0, order form 0; 'notice' 1 (the breach cure period, not an opt-out window); 'expire' 1 and it is 'expired' in the clause above; 'term' 25 substring / 9 word-boundary, all generic. So an operator in the UAE, Saudi, Kuwait, Singapore or the US -- Sapaad's Gulf heartland -- still cannot diligence renewal or notice terms before signing, while an India operator can. CORPUS BOUND: the sitemap index names five page sitemaps, not one; across all of page-sitemap1-5.xml (828 unique URLs, re-derived) the only legal documents are terms-of-service in ten locale variants, privacy-policy, privacy-and-security and sapaad-dash-privacy-policy. There is no MSA, subscription agreement, billing or refund page. Term LENGTHS are published outside the legal pages -- the Promotion Engine page's FAQ states 'A standard Sapaad POS subscription for one outlet begins at US$59.99 per month ... Subscribe yearly at $49.99, and get three months free. Subscribe for two years at $39.99, and you get 12 months free!' -- but that page carries renew 0 / cancellation 0 and states no renewal or notice term. RETRIEVAL NOTE: www.sapaad.com returns a byte-identical 75,193-byte '403 - Forbidden' interstitial to a non-browser User-Agent on every path, although robots.txt is 'Allow: /' with only /wp-admin/ disallowed; a browser UA returns 200. The 403 is a WAF refusal, not a policy bar and not an absence. https://www.sapaad.com/terms-of-service/ · retrieved 2026-09-15 adversarially verified
The POS software can be purchased and operated with a third-party payment processor of the operator's choice (no mandatory in-house processing lock). differentiator
commercial-processing-not-bundled
Not scored by this record.
Vendor publishes an interchange-plus (cost-plus) processing rate option with the markup stated as a specific bps + per-transaction figure, rather than only blended/flat card-present rates. differentiator
commercial-interchange-plus-published
Not scored by this record.
The processing agreement caps or prohibits unilateral vendor-initiated rate increases outside of pass-through interchange/network changes, or grants penalty-free exit on any increase. differentiator
commercial-rate-increase-clause
Not scored by this record.
Per-location and per-additional-terminal software pricing is published as specific dollar figures on the vendor's public site (not 'contact sales' only).
commercial-pricing-published
Vendor's own pricing page (www.sapaad.com/pricing 301s here) publishes no figures for any module or tier: it is headed "Find the right plan for your restaurant", says "we'll help you choose the modules and pricing that fit your operations perfectly", and its only action is "Get your custom quote" via a name/email/restaurant/phone form. The 16 modules are listed by name with no price against any of them. https://www.sapaad.com/contact-for-pricing/ · retrieved 2026-08-08 adversarially verified
Individual modules (online ordering, KDS, loyalty, inventory, payroll, marketing) can be purchased à la carte and cancelled independently without repricing the base POS subscription. differentiator
commercial-module-unbundling
Not scored by this record.
All required terminals, KDS screens, and printers can be purchased outright at a published price, with no mandatory multi-year hardware lease or rental.
commercial-hardware-purchase-outright
Sapaad locks no hardware, because it supplies none. On KDS: "No, you do not need any proprietary hardware with Sapaad KDS 2.0. It is device agnostic and can be used on any OS and device with a minimum resolution of 1024x768." On the POS itself: "Sapaad is cloud-based and device agnostic. All you need is an internet connection and a device with a web browser", with published minimum specs (Chrome/Firefox/Safari, 4GB RAM, Intel Core i3, Windows 8+ or OS X 10.8+), an Android-tablet article, and printers driven through the Cloud Print Agent rather than a proprietary interface. Terminals, KDS screens and printers are therefore bought outright on the open market at retail prices, with no Sapaad lease or rental to sign. Caveat on the literal wording: the published price is the retailer's, not Sapaad's, since Sapaad does not resell hardware. https://kb.sapaad.com/help/do-i-need-proprietary-hardware · retrieved 2026-08-03
Vendor documents support for at least one non-proprietary/third-party hardware option (e.g. standard iPad, Epson/Star ESC/POS printers, generic cash drawer) rather than requiring vendor-only devices. differentiator
commercial-hardware-not-locked
Not scored by this record.
One-time implementation, menu-build, onboarding, and training fees are published as specific amounts or explicitly stated as $0.
commercial-implementation-fee-published
Not scored by this record.
Operators can self-serve export their full transactional history (orders, line items, payments, labor) to CSV or a documented API without contacting support or paying a fee.
commercial-data-export-self-serve
Not scored by this record.
Guest/customer records, loyalty balances or point ledgers, and gift-card liability balances are exportable in machine-readable form by the operator. differentiator
commercial-export-customer-and-loyalty
Not scored by this record.
Contract or documentation specifies a post-termination data retrieval window (a defined number of days during which the operator can still export their data) rather than immediate cutoff. differentiator
commercial-post-termination-export-window
Not scored by this record.
Published terms explicitly state the merchant owns its transaction and customer data, and constrain the vendor's right to use or resell that data (beyond aggregated/de-identified use) for its own products or marketing. differentiator
commercial-data-ownership-clause
Not scored by this record.
The POS is source-available or open source with a documented self-hosting option (source published under an OSI or source-available license, not merely an open API).
commercial-source-available-selfhost
Not scored by this record.
Vendor documents validated P2PE or hardware-encrypted card entry plus tokenization such that the merchant's PCI scope is reduced to SAQ A / SAQ P2PE-HW, and names the applicable SAQ.
commercial-pci-p2pe-tokenization
Not scored by this record.
Vendor documents PCI DSS v4.0.1 future-dated controls in effect since 31 Mar 2025 — notably MFA for all access to the cardholder data environment including POS and back-office logins, and (for hosted ordering pages) payment-page script integrity monitoring per Req 6.4.3/11.6.1.
commercial-pci-dss-4-controls
Not scored by this record.
Vendor states it holds a current SOC 2 Type II (or ISO 27001) attestation and will provide the report under NDA via a trust center or on request.
commercial-soc2-attestation
Not scored by this record.
Product provides in-app tooling for CCPA/CPRA and GDPR data-subject requests — locating, exporting, and deleting an individual guest's records — plus a published DPA the operator can execute.
commercial-privacy-dsar-tooling
Not scored by this record.
Vendor publishes an accessibility conformance report (VPAT/ACR) claiming WCAG 2.1 AA (or later) for its self-order kiosk and consumer web-ordering surfaces, including a documented tactile/audio non-visual access mode on kiosks. differentiator
commercial-wcag-kiosk-accessibility
Not scored by this record.
POS supports card-network-compliant dual pricing / cash discount or surcharging with automatic exclusion of debit and prepaid cards from any surcharge, and required receipt and menu-board disclosure of the fee. differentiator
commercial-dual-pricing-compliant
Not scored by this record.
Adversarial verification
An independent pass was instructed to refute this record, defaulting to downgrade when uncertain. It challenged 7 values — 7 upheld, 0 downgraded, 0 upgraded. It separately resolved 28 previously unknown values. This is published in full because a reader who can see which values were contested, on what evidence, and which way they moved has something no affiliate-funded comparison offers.
Capability claims
| Claim | As first scored | Verdict | What the verifier found |
|---|---|---|---|
| order-capture-scheduled-orders | unknown (F) — "No public documentation located during the 2026-08-01 research pass" | resolve-to-partial | Placeholder rationale meant the cell was never examined. The 2026-08-01 pass cited only www.sapaad.com marketing; the vendor's actual help centre is at kb.sapaad.com. Future Orders are documented end to end: a Schedule button that selects "the date and time that you want this order to print in your kitchen", a Future Orders queue in Delivery Manager, a Reschedule article, an Accept Scheduled Orders global toggle for Sapaad.Online, and inventory deduction "on its scheduled day". Held at partial because the fire time is operator/guest-chosen rather than computed from a per-channel kitchen lead time. source |
| menu-pricing-modifier-price-by-parent-size | unknown (F) — placeholder rationale | resolve-to-partial | Modifier price is stored per parent menu item — the bulk-update dialog says "enter the new price under Modifier Price for each item" — so one axis of the required matrix exists. No size axis: size is not a documented item attribute, and neither the Menu Setup (38) nor Modifiers (29) category has a per-size modifier price. source |
| menu-pricing-topping-quantity-tiers | unknown (F) — placeholder rationale | resolve-to-no | Positive evidence of absence, not merely a failed search. Sapaad's documented mechanism for more of a topping is Add Multiple Quantity — choosing the same modifier repeatedly ("order chicken twice") — which is precisely the alternative the claim excludes. The Modifiers category enumerates the modifier properties available (additional price, group limits, mandatory, preselected, add-multiple-quantity, inventory tracking, templates); no tier and no per-tier multiplier is among them. source |
| kitchen-expo-consolidation | unknown (F) — placeholder rationale | resolve-to-yes | KDS 2.0 has a first-class Expedite Screen separate from the per-station Prep Screens; items auto-split to their predefined station, and the Expedite Screen gates completion on every station: "uncompleted menu items are displayed in gray while completed items are displayed in black... Once all items appear in black, the order is ready to be served." Grade B vendor documentation, adequate for a yes on a table-stakes claim. source |
| kitchen-bump-bar-hardware | unknown (F) — placeholder rationale | resolve-to-partial | A Bump interface is a per-station setting alongside Touch, both can run simultaneously, and there is a dedicated bump keyboard-shortcut article; bumping is by "mouse, keyboard, or numeric keypad". Held at partial rather than yes because the claim requires documented supported models and Sapaad publishes none — it states only that it is device agnostic at 1024x768 minimum. source |
| delivery-zone-pricing | unknown (F) — placeholder rationale | resolve-to-partial | Delivery Areas carry a per-area Delivery Fee surcharge and a per-area Minimum Order Value, and can be defined by postal code and bulk-uploaded. The third required field fails: the quoted promise time is a single store-wide default ETA plus a fixed 15-minute buffer, identical for every zone. source |
| digital-account-saved-payment | unknown (F) — placeholder rationale | resolve-to-partial | Sapaad.Online guest accounts are documented (mobile/email registration, Google and Facebook sign-in, email OTP) and CRM holds labelled addresses per customer. The payment-methods article enumerates the checkout options — cash on delivery, swipe on delivery, gateway-redirect online payment — with no tokenised card-on-file, and none of the 75 Sapaad.Online articles describes one-tap reorder. source |
| guest-loyalty-accrual-models | unknown (F) — placeholder rationale | resolve-to-no | The loyalty setup screen is enumerated in the vendor's own docs and offers exactly one accrual model: a spend ratio ("$10 = $1 Loyalty"), plus eligible order types and min/max redeem values. Remaining variation is a different rate for online customers and per-item overrides — all spend-based. The full 28-article Loyalty category contains no visit/punch accrual and no spend-tier construct, so the claim's requirement of at least two models fails on enumerated alternatives. source |
| labor-granular-rbac | unknown (F) — placeholder rationale | resolve-to-partial | Roles are user-defined, not fixed tiers, and permissions are checkbox-level: documented individual toggles include Business Summary Reports only, blocking modification of old bills, managing the Modifier List, admin approval of purchase orders, restricting Sapaad Waiter to bill printing, and location override on delivery orders. Held at partial because the permission matrix is never published (void/comp/refund/drawer/price-change unverified) and rights attach to the role alone — staff are separately assigned to locations, with no per-location variation of a role documented. source |
| inventory-unit-conversion-yields | unknown (F) — placeholder rationale | resolve-to-partial | Buying Unit, Buying Unit Value and Net Weight Value ("the weight of the actual goods or drained weight (in the recipe unit)") give an explicit purchase-to-recipe conversion with drained yield on the pack. Held at partial: there is no distinct count unit — one measurement unit per ingredient, and it cannot be changed — and no yield/waste percentage applied to raw-to-usable conversion; waste is a separate Stock Issue transaction after the fact. source |
| inventory-count-modes | unknown (F) — placeholder rationale | resolve-to-partial | Full counts and ad-hoc partial counts ("a stock take for only certain inventory items", by search or category) are both documented, with submit/review/reconcile workflow, variance handling, auto-reconcile, rejection, a date-ranged Stock Takes Report and an exportable Variance Report — so history is retained per count. The third mode fails: no scheduled recurring cycle count exists, only advice to count "daily, monthly or every fortnight" manually. source |
| reporting-eod-closeout | unknown (F) — placeholder rationale | resolve-to-partial | Business Summary is Sapaad's named EOD report (the help article is literally titled for making the end-of-day report) covering sales by staff and category, delivery sales, cancelled orders, discounts and surcharges, savable as PDF. It is not the single reconciling document the claim describes: tax, tender-type split and driver cash are separate reports, and no report in the 76-article Dashboard & Reports category produces an expected cash deposit or a day tip total. source |
| reporting-pmix-modifier-level | unknown (F) — placeholder rationale | resolve-to-partial | Modifier-level mix genuinely exists — Top Modifiers, Top Paid Modifiers and Top Selling Inventory Modifiers reports — alongside item-level mix via the Total Orders Report exported By Item. Held at partial: the docs never state the columns, so the quantity/gross/net breakdown is unverified, and the documented filters are date range, order type and location only, with no daypart filter on the modifier reports and no revenue-centre dimension anywhere in the platform. source |
| multi-location-central-menu-publish | unknown (F) — placeholder rationale | resolve-to-partial | The menu is authored once at company level and consumed by every location via Location Availability and Branch Price, with bulk CSV upload — central authoring is real. But because locations read the one live record, there is no publish action targeting a chosen set of locations, no staging, and no publish/version history of what was pushed, when and by whom; the only sync articles are outbound to aggregators. source |
| multi-location-price-zones | unknown (F) — placeholder rationale | resolve-to-partial | Branch Price gives per-location pricing on a single item record. The channel dimension explicitly fails the claim's no-duplication test: Sapaad's own KB instructs "Simply create separate items for your Dine-In and GrabFood menus with the appropriate prices" with Hide in POS on the copy. There is also no location-group/zone object and no daypart pricing. source |
| extensibility-oauth-partner-apps | unknown (F) — placeholder rationale | resolve-to-no | Sapaad names its auth model and it is a static shared secret: "token-based access" with a developer receiving "an API plus a unique vendor key after signing an API licensing agreement". A per-vendor key issued under contract is not operator-granted, scoped or individually revocable by the restaurant. No OAuth 2.0 flow, consent screen or scope list appears on sapaad.com or kb.sapaad.com. Graded C because the only source is a first-party feature page, not a developer reference — the reference is gated behind the licensing agreement. source |
| extensibility-webhooks-push | unknown (F) — placeholder rationale | resolve-to-partial | Push delivery is claimed first-party: "Real time webhooks — Receive instant updates as events happen across your system. From new orders to payment confirmations, stay synced without polling." Not raised to yes: this is a feature page (grade C) rather than a reference; only order-created and payment-confirmed are named, modified/voided/refunded are not, and no public event catalogue, payload schema, retry or signature documentation exists to verify coverage — endpoint references are released only after signing an API licensing agreement. source |
| commercial-hardware-purchase-outright | unknown (F) — placeholder rationale | resolve-to-yes | Sapaad requires no proprietary hardware and supplies none: "No, you do not need any proprietary hardware with Sapaad KDS 2.0. It is device agnostic and can be used on any OS and device with a minimum resolution of 1024x768", and the POS itself runs in a browser on any device meeting published minimum specs, with printers driven via the Cloud Print Agent. Terminals, KDS screens and printers are therefore bought outright on the open market with no Sapaad lease or rental. The note records the one literal caveat — the published price is the retailer's, since Sapaad does not resell hardware. source |
| menu-pricing-nested-modifiers | unknown (F) — "No public documentation located during the 2026-08-01 research pass" | resolve-to-partial | Placeholder meant the cell was never examined; the 2026-08-01 pass cited only www.sapaad.com marketing. The vendor's help centre documents min/max Group Limits per modifier group and mandatory-by-minimum-1, with any number of mandatory groups per item — the min/max and forced-selection half of the claim. But the documented data model is two tiers only (group contains modifiers, groups attach to the menu item); Advanced Modifiers, Build Your Own and combo-with-advanced-modifiers all stop at Add Group on the parent item, and no article describes a modifier carrying its own group. Held at partial for the missing third level rather than no, since a nesting limit is nowhere stated. source |
| commercial-pricing-published | no, grade B - Pricing page is a lead-capture form headed "Contact for pric | upheld | Grade only, value untouched. Corpus-wide mechanical pass (workflows/regrade-marketing-pages.mjs): the cited page is a first-party pricing/feature/product page, which atlas-evidence-rules grades C ("vendor pricing page or feature page - first-party, but written to sell"), not B ("vendor product documentation - the manual, the help centre, the admin guide"). No claim was re-researched in this pass and no evidence was re-read; only the grade was brought into line with the source type. source |
| commercial-pricing-published | no, grade C - Pricing page is a lead-capture form headed "Contact for pricing" with no fig | upheld | Citation staleness check: https://www.sapaad.com/pricing 301s to https://www.sapaad.com/contact-for-pricing/, so the recorded citation was dead. Fetched the destination directly. It is the vendor's own pricing page, not a homepage or section index, and it carries no dollar figure for any module or tier - heading "Find the right plan for your restaurant", body "Whether you run a cafe or a large enterprise, we'll help you choose the modules and pricing that fit your operations perfectly", sole CTA "Get your custom quote" over a lead-capture form. The recorded note's quoted heading "Contact for pricing" is the page title element, not a heading on the page, so the note was reworded to quote what the page actually says. Value no and grade C stand on the re-retrieved page. source |
| extensibility-public-api-docs | unknown, grade F | resolve-to-no | Value upheld, note materially rewritten, and the proposal's central control falsified. The load-bearing quote is genuine: I confirmed it in raw bytes (no tag-welding -- the FAQ question and answer sit in adjacent sibling elements with the answer text contiguous), and www.sapaad.com/robots.txt allows /, so the citation is not quarantine material. But the proposal's controls asserted in substance that no developer surface exists because api/developer/docs/my/cloud subdomains fail to resolve, which is absence-of-a-subdomain, not a closed enumeration. Following the addmi precedent I re-derived from the publisher's own manifest instead of guessing hosts, and the sitemap named two pages the pass never opened: /openapi/ and /thank-you-open-api/. /openapi/ returns 42KB that strips to a single line ('OpenAPI Portal - Sapaad') because its entire body is an iframe onto partners.sapaad.com -- a live Sapaad Open API partner portal on a host nobody had probed. So the note as proposed was factually wrong about the vendor having no developer portal, and would have published a false statement about a named business. Having found it, the portal makes the `no` stronger rather than weaker: 12 docs paths on that host 404, /partner_portal and /partner_portal/docs 302 to /partner/login (a route that exists and is gated, discriminated from the 404s), the app bundle is 157 bytes and names nothing, and access begins with a vetted application answering to a 2-3 business day human review. That is positive evidence of absence against a claim whose text is 'readable without a signed partner agreement, NDA, or sales call' -- every one of the three gates is present. GRADE: C is what the cited URL supports and is what I have recorded, but it understates the evidence. The real load-bearing statements are the two kb.sapaad.com help-centre articles, which are vendor product documentation and support grade B, and they are not currently keys in notes.json. Recommend adding https://kb.sapaad.com/help/can-i-integrate-my-customized-application-with-sapaad-for-the-purposes-of-exporting-my-data-to-my-customized-application-from-my-sapaad-database and https://partners.sapaad.com/ to notes.json and re-basing this cell to the KB article at grade B. Note also that the current row in data/vendors/sapaad/claims.jsonl is unknown/F, so applying this is a resolve-to-no, not a downgrade, and must be written to verification.jsonl as resolve-to-no. source |
| commercial-autorenew-terms-published | unknown, grade F | upheld | Proposed no from the Sapaad KB, product pages and the decompiled POS APK (310th session); rejected on verification: Rejected: the proposed no is refuted by Sapaad's own legal corpus. I reproduced the proposal's factual base exactly -- section 7 verified in RAW bytes inside discrete <p> tags (no tag-stripping weld), all three clauses verbatim as quoted, and my independent tokenised counts over 21,907 extracted chars match its 21,840-char figures token for token (renew 0, renewal 0, cancel 0, subscription 0, refund 0, notice 1, expire 1). The proposal's error is not its reading of the Singapore ToS; it is that the ToS it read is not the whole commercial corpus. The prompt's warning that a renewal term might live somewhere unexpected was correct, but the unexpected place was not a product page -- it was a SECOND TERMS OF SERVICE. Sapaad publishes ten locale ToS pages; I fetched all ten and diffed them. The root, /us/, /ae/, /sg/, /sa/ and /kw/ pages are the Singapore Sapaad Pte. Ltd. contract with the order-deferral clause and renew=0/cancel=0. The /in/ page is a different, longer and NEWER contract (Last Updated July 2026, governed by Indian law, Bengaluru courts) with renew=5, cancel=4, subscription=16 and no order-deferral clause at all, and it states both conjuncts the claim tests: automatic renewal 'for successive periods equal in duration to the initial term' and a five (5) day cancellation notice window, corroborated by an independent payment-section sentence ('at least 5 days in advance'). Both were confirmed in raw bytes within a single <li>, not a stripped-text artefact. On the entity point the prompt raised: this is the substantive issue, not a bookkeeping one. The record's product.yaml names 'Sapaad Software Pvt. Ltd.', and that is precisely the entity of the /in/ ToS ('Sapaad Software Private Limited'), i.e. the record is nominally scoped to the one entity that DOES publish renewal terms -- so a no would have been wrong on the record's own stated entity. Scored partial rather than yes because publication is real but materially limited to the India entity, while the Singapore entity governing Sapaad's Gulf and US locales publishes nothing; the shortfall is named in the note. On peer consistency: I checked all 99 peer rows for this claim (23 no, 13 unknown). The no family is scored on the publication test itself, and nash is the exact shape the proposal invoked -- public terms that expressly place the renewal term in the Order Form -- scored no/B. Had the Singapore ToS been Sapaad's only contract, no/B would have been consistent and I would have upheld it; the peer precedent is sound and is not what fails here. What fails is the corpus bound: the proposal asserted a 'site-wide legal census' from a sitemap it under-derived. The index names page-sitemap1-5.xml; re-deriving all five gives 828 unique URLs and ten ToS variants, where the single page-sitemap.xml the proposal appears to have used is a 200-URL subset that omits the root terms-of-service entirely. A census that misses nine of ten copies of the governing contract cannot bound an absence. Two caveats for the record: final_url is set to the root ToS because the deciding document, https://www.sapaad.com/in/terms-of-service/, is NOT a key in notes.json and the schema constrains final_url to that file -- the India URL is quoted in full in the note and should be added to notes.json as the primary citation. And www.sapaad.com 403s every non-browser User-Agent with an identical 75,193-byte interstitial on all paths despite robots.txt Allow: /, so any future pass fetching this host with the default agent will bank interstitials as bodies and manufacture zeros; a browser UA returns 200. source |
| inventory-recipe-bom-costing | unknown, grade F | resolve-to-yes | The partial proposal is refuted on both of its named shortfalls, and its controls are falsified. (1) Its claim that "'sub-recipe' and 'bill of material' are absent from Sapaad's vocabulary -- the vendor's own term is 'finished good'" is FALSE. Sapaad uses 'Sub Recipe' as a first-class object name in at least five articles I fetched at HTTP 200 today: /what-is-a-sub-recipe, /how-to-add-a-sub-recipe, /how-many-sub-recipes-can-i-add-to-a-recipe, /how-to-delete-a-sub-recipe, and the setup path 'Setup > Inventory Setup > Ingredients & Sub Recipes'. (2) Its claim that 'no vendor document states that plate cost recalculates automatically when a component ingredient's cost changes' is FALSE. /what-happens-to-my-recipe-cost-when-i-receive-ingredients-of-that-recipe-at-a-higher-cost says exactly that, and it is linked from the very Inventory index (inventory-7) the proposal cites as its closed-list caveat - I grepped the saved inventory-7 body and the link is there. (3) The proposal misidentified the prep layer: it read the Batch Production mechanism off /how-can-i-configure-a-recipe-as-a-finished-good, which is about selling central-kitchen retail output, and concluded nesting was a hand-entered workaround. The actual Batch Production article (/what-is-batch-production, never cited) says Sapaad 'automatically reduces the stock of ingredients required to prepare the batch and simultaneously increases the stock of the batched item', run against 'the recipe or sub recipe'. CORPUS FAILURE, published as poison: the 568-slug kb-urls-union.txt to which the proposal bound its absence controls contains ZERO of the four sub-recipe slugs (grep -ci 'sub.recipe' returns 0) and none of the Inventory Setup slugs /what-is-a-recipe, /how-to-create-a-recipe, /how-to-set-my-global-targeted-food-cost, /what-is-a-finished-good. The union is a corpus, not a census - the Inventory Setup category page /help/inventory-5, reachable as the single outbound /help link inside /how-to-set-up-my-inventory, exposes all of them. Every zero bound to that union about recipe vocabulary is unsafe. Verified date 2026-09-15; all fifteen articles fetched raw by me at HTTP 200 (two guessed slugs, /how-to-add-a-recipe and /how-to-add-a-finished-good, returned the Groove soft-404 'Uh-oh, we can't find that page!' at 200 - the real slugs are /how-to-create-a-recipe and /how-to-set-up-finished-goods). Value amended partial -> yes at grade B; the claim is table-stakes weight, and the evidence is vendor product documentation, so the differentiator grade floor is not in play. Note that against the row actually in data/vendors/sapaad/claims.jsonl (unknown/F, 'recipe/BOM and sub-recipe costing are not enumerated') this is a RESOLUTION, not a challenge: verification.jsonl should record resolve-to-yes, not upgrade-to-yes. source |
| labor-clock-in-at-pos | unknown, grade F | upheld | Proposed partial from the Sapaad KB, product pages and the decompiled POS APK (310th session); rejected on verification: The claim is a conjunct: employees CLOCK IN AND OUT at the POS terminal using a PIN, badge or card, with no separate time-clock hardware. Conjunct audit against re-fetched vendor documentation: (1) clock in AND out -- NOT MET, and the proposal concedes it ('there is no clock-in/clock-out punch, no timecard and no labour-hours timesheet'); (2) at the POS terminal -- met for LOGIN only (swipe 'the card on the card reader attached to the POS', then pos.sapaad.com/users/login_swipe); (3) PIN/badge/card -- partly met, the closed set is 'username and password, Magnetic Stripe Cards, or Sapaad Biometrics', so a magnetic card qualifies but no PIN is documented; (4) no separate hardware -- met on the password route, fails on Biometrics (a separately purchased device). The one conjunct the claim is NAMED for fails, so the partial is self-refuting: what survives is authentication, a different capability already scored under access control. I verified the proposal's three marketing quotes live and they are real (staff-management page: 'Login history -- Track exactly when and where staff log in. Review past activity to support payroll, accountability, and security'; FAQ: 'You can also limit the ability to modify old bills or define shift hours for logins'), but the KB article of that exact title FALSIFIES the second one: 'you can restrict staff log in times to their shift hours by simply opting for alternative log in methods, such as swipe cards or biometrics devices, over username and password' -- a vendor-recommended workaround, not a configurable shift window, and therefore evidence AGAINST a time clock. Corroborated by how-to-edit-staff-details: 'only staff names and passwords can be edited', i.e. the staff record carries no hours or shift field. 'Attendance' is the vendor's own framing of an ACCESS LOG, not a time capture. Absence controls re-run tokenised over 172 bodies (81 labour-adjacent slugs fetched fresh from the 568-slug kb-urls-union.txt, plus 91 already on disk), not over the 330-link index and not over slug strings: 'clock in', 'clock out', 'clock', 'timesheet', 'timecard', 'time clock', 'hours worked', 'payroll', 'logout'/'log out' all ZERO; 'attendance' 1 (the login-history article itself); 'shift' 2 (the workaround article and the category index). POISON FOUND: 'punch' is NOT zero -- 2 hits, both homonyms, 'deters buddy punching' in Sapaad Biometrics marketing and 'orders punched offline' meaning order entry; a published 'punch: 0' would have been false. Bound: the Staff Management category index is a CLOSED enumeration of 25 articles and not one concerns punches, timecards, hours, breaks or payroll export. Published APK traps re-tested and confirmed as framework noise -- the 129 'Clock' strings are Android/Compose (SystemClock, ClockHandView, ClockFaceView, TimePickerClockPresenter, TickClock, OffsetClock, UptimeClockFactory) and the 'shift' strings are a barcode encoder (BinaryShiftToken, getBinaryShiftByteCount), a keyboard (isShiftPressed) and Compose layout; attributing by package, com.sapaad.pos ships LoginActivity, LoginViewModel, UserDao and FragmentLogoutBinding -- session auth, with no time-capture class anywhere -- and 'login_swipe' and 'biometric' are themselves ZERO in the dex, so the card route is not even attested in the Android app. NOT taken to 'no', despite a closed category enumeration plus a workaround recommendation: the live staff-management page ships a hidden modal dictionary asserting 'Real-time shift and attendance tracking' and 'Multi-branch scheduling and attendance management', so a positive absence would contradict a first-party claim. Cell stays unknown/F; on application it carries a rationale and NO url (final_url above is the page I re-opened). Lead for a future pass: if that scheduling/attendance marketing is ever backed by documentation, this cell and labor-scheduling move together. source |
| payments-emv-nfc | unknown, grade F | upheld | Proposed no from the Sapaad KB, product pages and the decompiled POS APK (310th session); rejected on verification: The attribution trap reproduces exactly as published, and I re-ran it: tokenised over all 6 dex files, every EMV token is com/stripe/* or com/stripe/bbpos/* (Lcom/stripe/hardware/emv/InterfaceType, EmvTransactionType, DomesticDebitAidsParser, StartEmvRequest) and every NFC token likewise (com/stripe/hardware/nfc/NfcDetectCardData, com/stripe/cots/common/NfcAntennaLogger, TapToPayAndroidContactlessErrorEvent). Zero com/sapaad/* EMV or NFC classes exist. Wallet control, prefix-stripped and tokenised: 'apple pay'/'applepay'/'google pay'/'googlepay' = 0 hits across the whole dex dump; the only 'Tap to Pay' strings are Stripe's own ('Contact Stripe support to enable this feature'). I also confirmed a fresh substring trap the proposal did not name: the KB's only 'Stripe' hits are 'Magnetic Stripe Cards' (staff login), not the processor. So the researcher is right that no EMV/NFC vocabulary may be attributed to Sapaad. The no still fails, on three independent grounds. (1) THE CITED PAGE CANNOT CARRY AN ABSENCE, AND AFFIRMATIVELY CONTRADICTS IT. The FAQ quote is explicitly scoped to online payments -- 'Sapaad's payment gateway integration is for online payments through Sapaad.Online and QR Ordering' -- so it answers a question about the online channel, not about card-present acceptance at the POS. The same page states the opposite of the proposed verdict elsewhere: 'Accept card payments directly through your POS. No need to reenter amounts or switch devices', under the heading 'Integrated credit and debit payments', and opens 'accept cards, wallets, and mobile payments securely and reliably across in-store and online sales.' A page asserting in-store card acceptance is not positive evidence of absence. notes.json already flagged this URL as self-contradicting ('Refunds are processed directly through your Sapaad POS'). (2) THE FIRST-PARTY CODE POINTS THE OTHER WAY. Sapaad's own namespace drives card-present terminals: com/sapaad/pos/payment/geidea/GeideaConnectionManager, .../geidea/magnati/MagnatiPaymentManager, .../geidea/magnatisfotpos/MagnatiSoftposClient, .../payment/stripe/StripeDiscoveryManager, models Terminal, TerminalConfigurations, PaymentDevice, Mpos, SoftPos, plus a PaymentTerminalGridViewAdapter$PaymentTerminalSelectedListener and PaymentSettingsFragment. Sapaad-authored (non-Stripe) log strings confirm live flows: 'Initialising Softpos Payment', 'Initialising Softpos Terminal Registration', 'Softpos Terminal status', 'Geidea terminal texception line no : 130', 'card payment selection exception :', and a constructor binding Sapaad's TerminalConfigurations to com/stripe/stripeterminal/external/models/Reader. Geidea's own SDK (geidea/net/terminal_comm_api/TerminalResponder) is bundled. Card-present EMV/NFC acceptance is therefore plainly reachable through Sapaad's POS via certified third-party devices -- which is the atlas's partial shape, not its no shape (odoo-pos partial/B, positouch partial/B, squirrel-systems partial/D all record exactly 'vendor ships no terminal, EMV/NFC comes from the integrated processor device'). The sambapos/tastyigniter no/B precedents rest on closed ENUMERATIONS of an online-only gateway set; Sapaad has no such enumeration and has an affirmative card-present code path, so it does not match them. (3) THE ABSENCE CONTROLS DO NOT BIND. The proposal claims a KB-wide zero, but only 90 of the 568 union slugs have a body on disk -- 16% -- and the five slugs most on point are all MISSING, not fetched: what-type-of-payments-do-you-accept, how-do-i-add-more-modes-of-payment, payments-44, can-i-enable-payments-on-sapaad-direct-lite, is-there-an-option-to-close-a-delivery-order-through-credit-card-on-delivery-assistant. A corpus is not a census, and this corpus omits precisely the documents that would settle the cell. Sourcing defect for the record: the proposal's second quote ('supports the top gateways in the US, Europe, MENA, and Asia including Stripe, Adyen, WorldPay, PayU, PayTabs, MyFatoorah, and Geidea') is NOT on the cited payment-gateway-integrations page. It is real but lives on restaurant-pos-promotion-engine and restaurant-pos-system; citing it to the proposed URL would have been unverifiable at the stated address. Grade point conceded: a mirror-binary finding is grade B at most, and the proposal mixed a grade-C marketing URL with grade-A code language, so B was not supportable as framed either. No double count -- payments-softpos-tap-to-pay is not scored for sapaad and remains open; the Stripe Tap to Pay strings belong to that cell, not this one, and are Stripe's in any case. Row stays as it is: unknown / grade F, rationale only and no url, per the evidence rules. final_url is recorded solely because the harness requires a notes.json key; it is the page I refuted, not a citation. Next pass should fetch the five missing payment slugs and, if they describe terminal setup, write partial/B on the apkcombo binary with the shortfall named as 'no first-party terminal; EMV/NFC depends on the Geidea/Magnati/Stripe device, and Apple Pay/Google Pay are unevidenced'. source |
| payments-gift-cards | unknown, grade F | resolve-to-no | Resolution of an unknown, not a challenge: the current row in data/vendors/sapaad/claims.jsonl is unknown/F ('gift cards are not enumerated among them'), so this applies as resolve-to-no in verification.jsonl. Upheld at the proposed value and grade. The `no` is not a failed search: it rests on the named form of positive absence evidence -- the vendor's own help centre, asked this exact question, recommending a workaround (relabel a payment type) instead of a product -- which I re-fetched live myself at 200 rather than trusting the cache, and which the identical 'create a payment type named Credit' answer for on-account customers shows to be this vendor's house style for capabilities it lacks. It is additionally bounded by a closed first-party enumeration the researcher did not cite: the 17-module product navigation on the live pricing page, which lists Loyalty Management and Promotion Engine but no gift or stored-value module. The corpus warning was discharged directly -- Loyalty, CRM, Promotion Engine (both URLs), payment-gateway-integrations and online-ordering were re-fetched live today and return zero for gift/voucher/stored value/prepaid, so the hole that falsified the birthday control does not hide gift cards. The stored-value vs coupon trap is present and resolved against the capability: the only first-party 'voucher' is a discount coupon on the ordering page. The third-party-credit trap is also present and resolved: every gift/prepaid/wallet token in the POS APK belongs to the bundled Stripe Terminal SDK's card-BIN model, not to Sapaad, so it evidences card-brand metadata, not an issued gift card; crediting it to Sapaad would have been the error. Grade B is right -- kb.sapaad.com is the vendor help centre, product documentation, not a marketing page; C would under-grade it and A is unavailable as there is no API reference. No double count with the loyalty cells: guest-loyalty-accrual-models (no/B) rests on the Loyalty setup screen's single spend-ratio accrual and guest-loyalty-unified-profile on identity matching, whereas this cell is a stored-value tender proposition resting on a different article and the module enumeration, so one fact is not being spent twice. source |
| guest-loyalty-lifecycle-automation | unknown, grade F | upheld | Proposed partial from the Sapaad KB, product pages and the decompiled POS APK (310th session); rejected on verification: REJECTED; cell stays unknown/F. I re-fetched all four cited pages myself (unified-promotion-engine, restaurant-pos-promotion-engine, restaurant-crm, restaurant-loyalty-program, all 200) and confirmed the proposal's quotes verbatim in RAW bytes -- they are accurate, but they do not carry the claim. (1) TWO OF THREE CONJUNCTS ARE ABSENT, and the proposal concedes both: 'birthday' occurs exactly ONCE across all four pages, on restaurant-pos-promotion-engine (not on the cited unified-promotion-engine page at all -- 0 hits there), and it is a promo-code use case, 'Make promotions available to everyone or restrict them to select customers with promo codes. Perfect for birthday rewards, loyalty programs, or private events.' No first-visit thank-you exists. A partial that shortfalls two of three conjuncts of a conjunctive claim is self-refuting. (2) THE THIRD CONJUNCT IS NOT MET EITHER, which the proposal got wrong. The claim requires triggered lifecycle automations 'as configurable always-on campaigns rather than one-off manual sends' -- the unit is a SEND. Sapaad's win-back is an eligibility filter on a DISCOUNT, evaluated inbound at order time: 'Set eligibility like "not ordered in 30+ days" -- evaluated in real time'; 'A win-back coupon targets customers who haven't ordered in 30+ days, evaluated dynamically.' Nothing is sent to the guest between visits; the coupon only applies when the lapsed guest returns of their own accord. That is the same distinction the atlas already drew against Aloha ('always-on earn rules that fire at the terminal on the member's next visit, not outbound triggered messages'). Sapaad's actual outbound is manual: Setup > Sapaad Add-Ons > SMS > Send, 'Step 2: Type in the numbers of the customers and enter your message. Step 3: Click Send.' (3) THE SUPPORTING EVIDENCE IS WEAKER THAN GRADE C. The 'First-time / Never ordered' audience the proposal cites is not prose -- it is a toggle inside a MOCKED-UP PRODUCT SCREENSHOT rendered in HTML on a marketing launch page, sitting beside a fake results ticker ('GET30 win-back -- 31% redemption, recovered $6.5k from lapsed guests'). The same mock shows a 'Loyalty members / Gold & Platinum' toggle, and the atlas's own guest-loyalty-accrual-models cell (no/B, kb.sapaad.com/help/how-to-enable-loyalty, whole 28-article Loyalty category enumerated) establishes that Sapaad has NO status-tier construct at all -- spend-ratio accrual only. The mock therefore depicts a product Sapaad does not ship, and cannot establish that any audience in it is real. That is grade D marketing art, not a feature bullet. (4) ABSENCE CONTROL, BOUND. I fetched all 568 slugs of kb-urls-union.txt myself (567x200, 565 bodies on disk, 3 failures) and ran the control over that corpus: birthday 0, anniversary 0, win-back 0, winback 0, welcome 0, re-engage 0, segment 0, 'not ordered in' 0. Positive control 'automatic' hits 34 files, so the corpus is live. This bounds the absence to Sapaad's ENTIRE published help centre, which is the corpus the research pass's original false zero lacked -- and unlike that 19-page product corpus, this one is the publisher's own manifest of its documentation. POISON FOUND AND PUBLISHED: 'lapsed' returned 1 file and it is 'elapsed time' on the kitchen prep screen -- substring trap, tokenises to 0. 'automated' returned 1 file and it is 'an automated SMS to customers to confirm their delivery order' -- a TRANSACTIONAL order-confirmation SMS, a homonym of lifecycle automation, not an instance of it. 'thank you' returns 524 of 565 files because every KB page footer says 'Thank you for leaving a rating!' -- unusable as a control, do not reuse it. 'campaign' returns 2 files and both are DIGITAL-SIGNAGE campaigns on the Sapaad CDS customer display, plus pricing boilerplate. (5) NOT A 'no': the vendor does advertise a win-back audience on a live first-party page, so positive evidence of absence is not available for the win-back conjunct and 'no' would overreach. unknown/F is the correct resting state. The existing rationale 'A promotions module exists; triggered always-on birthday/win-back campaigns are not described' survives unchanged and is now bound to a 565-page corpus rather than asserted. source |
| reliability-offline-kds-printing | unknown, grade F | resolve-to-no | Re-fetched https://kb.sapaad.com/help/does-kds-work-in-offline-mode myself (HTTP 200) and confirmed the quote byte-for-byte in the raw HTML, where it sits inside one <p class="p1"><span class="s1"> element -- no tag-welding, no HTML-comment concealment, so the tag-stripping contiguity trap does not apply. kb.sapaad.com robots.txt is Disallow: / with an explicit Allow: /help, so the path is permitted. Three challenges run. (1) Breadth: the denial is about Kitchen Prep Screens, and the claim is a disjunction that also covers kitchen printer routing, which no vendor page addresses -- the proposal conceded this in its own CAVEATS yet published an unqualified no. I did not downgrade to partial, because partial asserts that one path does survive an outage and there is no evidence any does; instead I amended the note to bound the finding: the KDS half is an explicit denial, the printing half is inference from the Cloud Print Agent's per-location API key, the call-centre remote-printing use case, the iPad's dependence on the agent, and the iOS article's "auto-syncs to retrieve orders punched offline", with the unrefuted Chrome --kiosk-printing local path named as the residual. (2) Older KDS: closed. Substring control over the 568-slug union returns 35 KDS slugs and zero mentioning 1.0 or a legacy KDS; the generic what-is-sapaad-kds (2022) and is-the-android-app-integrated-with-sapaad-s-kds describe the same category-routing product, and the denial article's own slug is generic (does-kds-work-in-offline-mode) while its title names KDS 2.0. (3) Absence controls bound to the union, not the /help index: the whole offline vocabulary is three slugs -- the KDS denial, does-sapaad-biometrics-work-offline (also an explicit no) and does-sapaad-s-ios-app-work-offline (order capture with auto-sync). Widening past the substring to internet/connection/network/outage/sync/down returns nothing on kitchen delivery during an outage; the 23 print slugs contain no offline-printing article. Evidence re-based: the proposal leaned on the www.sapaad.com/offline-mode/ enumeration, which 403s to retrieval even though that host's robots.txt is Allow: /, so I do not cite it and the closed-enumeration leg is not load-bearing here. Double counts checked: reliability-offline-order-entry and hardware-offline-mode are order capture, a different proposition; reliability-printer-fallback is failover and is explicitly disclaimed in the note. One defect found outside this cell -- kitchen-offline-operation (differentiator, "KDS continues to receive and display tickets... when the internet or cloud backend is unreachable") is in scope for sapaad per scripts/analyze/scope.mjs but has no row in claims.jsonl; this same article resolves it cleanly and it should be scored there rather than by stretching this cell. Grade B is correct: vendor help centre, first-party, retrieved 2026-09-15. source |
| hardware-os-platforms | unknown, grade F | resolve-to-yes | Re-fetched the cited page myself (HTTP 200, 261,730 bytes, no redirect) and confirmed all five quoted spec lines verbatim, then re-checked them against raw HTML because a tag-stripping normaliser can weld or split label/value pairs - they sit in one <p> with <strong> values, so the quotes hold. Both published traps reproduced exactly as described: the www page is live and the research pass's soft-404 flag was its own regex matching '404' in site chrome, while the same slug on kb.sapaad.com is a real soft-404 (200 + 'Page Not Found - 404' + 'Uh-oh, we can't find that page!'); the upheld citation is the www one. The challenge was that versions might be missing, leaving partial as the honest value - it did not hold: the page states minimum OS VERSIONS ('Windows 8 and above', 'Mac OS X 10.8 and above'), not merely platform names, plus device specs (4GB RAM, 320GB disk, Intel Core i3) and named browsers, so all three conjuncts of the claim are met on the cited page for the web client. The genuine gap is breadth, not depth: that page omits iOS/iPadOS/Android entirely. Rather than accept the proposal's uncited assertion, I bound the mobile side myself against the 568-slug kb-urls-union.txt corpus, which surfaced an article the proposal never cited - 'What are the minimum specifications required to use Sapaad's iOS app?' (iOS 12+, 10.2-inch minimum) - alongside the CDS article (iPadOS 13+, Android 9+, 8-inch minimum) and both KDS 2.0 articles (any OS, 1024x768 minimum), all re-fetched live at 200. Vendor documentation therefore names the client OSs with minimum versions and device specs across the KB, so the value stands rather than dropping to partial. Grade B is correct: this is the vendor's own help centre, not marketing, and it is an upgrade from the record's current unknown/F ('no named OS versions or device specs'), which the live pages falsify. Recorded caveats: no single page covers the whole client set, the iOS and CDS articles date from 2020 and 2022, and the iOS-app minimum (iOS 12+) differs from the CDS minimum (iPadOS 13+) because they are different products, not a contradiction. source |
| labor-manager-override-audit | unknown, grade F | upheld | Proposed partial from the Sapaad KB, product pages and the decompiled POS APK (310th session); rejected on verification: REJECTED: the proposed partial shortfalls EVERY conjunct of a three-part conjunctive claim (attributed to the INDIVIDUAL APPROVER, written to an IMMUTABLE trail, QUERYABLE after the fact), which is self-refuting, and its own evidence refutes the first conjunct outright. (1) APPROVER ATTRIBUTION AFFIRMATIVELY FAILS. I re-fetched the cited article live: the override credential is one global secret -- 'Supervisor Password is a mandatory security password to be entered at the time of canceling an order and modifying an item', 'The default password is 1234', changed at a single business-wide field, 'Visit Setup > Global Settings > Supervisor Password. Step 2: Enter the new password and click Save.' The page 'contains no information regarding logging mechanisms, audit trails, recording of approvals, or attribution of overrides'. The swipe-card variant writes ONE staff member's card into that same single field, so it identifies the field's owner, not whoever swiped. Anyone holding 1234 can approve and nothing distinguishes them. (2) THE POS BINARY CONFIRMS A GATE, NOT A RECORD. In com.sapaad.pos the only override machinery is a password dialog: CartListAdapter\, BillingFragment\, DialogPopup\, alongside popupItemModifyDialog. There is no approver, approvedBy, overrideBy, auditLog or activityLog symbol anywhere under com/sapaad/. CONTROL POISON I had to strip: a raw grep for 'Override' in the APK returns hundreds of hits and EVERY ONE is AndroidX framework noise -- ConstraintOverride_* attribute names and WorkManager's next_schedule_time_override column; scoping to the com/sapaad namespace leaves zero override symbols. A published count off the unscoped grep would have been a fabrication. (3) THE ONLY 'MET' EVIDENCE IS A 21-WORD MARKETING BULLET AND IT IS NOT ABOUT OVERRIDES. www.sapaad.com/staff-management/ is a vendor feature page (grade C, not the B proposed) whose 'Activity logs' bullet reads in full: 'See what actions staff take during their shift, from orders placed to refunds processed. Maintain oversight without micromanaging.' I re-fetched it: the page does not mention manager overrides, approvals, void or discount approvals, immutability, or querying/exporting the log, and its six bullets (Role based access, Login history, Activity logs, Permission control, Staff sales report, Secure passwords) carry nothing further. That bullet describes the ACTING staff member's own shift activity -- which is the opposite of the claim, whose whole point is capturing a SECOND, approving party. It cannot establish attribution of an override to an approver, and marketing establishes claims not facts. (4) IMMUTABILITY AND QUERYABILITY ARE UNDOCUMENTED and the proposal concedes both ('Immutability is nowhere asserted'; 'I have no document showing what an activity-log row actually records for an override'). The KB's only trail is attendance: 'To view the log in history of a staff, visit Setup > Staff... Click on the History button.' ABSENCE CONTROL, bound properly: across the full 568-slug KB union manifest there is no activity-log or audit-log article at ANY slug -- the only matching slugs are how-can-i-view-a-staff-s-log-in-history and how-to-view-the-billing-history-of-my-sapaad-subscription. Over the 121 bodies actually fetched, tokenised 'audit' = 0 and 'activity' = 0 (with 'supervisor' = 26 as a live positive control, so the corpus is not simply empty). CORRECTION TO THE PROPOSAL: it wrote 'zero across a 568-slug KB census' -- the zero is a 121-BODY corpus measurement; only the slug-level absence is bounded to 568. PUBLISHED HOMONYM, rejected for reuse: the single 'full audit trail on every change' phrase on sapaad.com belongs to the Unified Promotion Engine and describes changes to PROMOTIONS, not overrides. DOUBLE-COUNT with payments-refund-void-controls: that cell's evidence IS this cell's evidence -- the same what-is-the-order-cancelation-password article and the same APK authenticateSupervisorPassword/voidItem strings. The shared supervisor-password gate may be scored once, as refund/void authorization; it may not be re-banked here as an audit record. CONSISTENCY: the sibling verifier rejected the identically shaped addmi proposal today on exactly this distinction (an override PIN is a permission gate, not the audit record), following unicenta-opos on 2026-09-05. Sapaad's case is weaker still, since addmi at least had a per-session author identity. NOT downgraded to 'no': the Activity logs bullet is a real vendor assertion that something is recorded, and the Sapaad back office is outside this corpus, so a row-level approver field cannot be excluded -- a corpus is not a census. Cell stays unknown/F. source |
| payments-refund-void-controls | unknown, grade F | resolve-to-partial | Value and grade survive; the note did not. Three defects. (1) The absence control was published as a "568-slug KB census"; only 91 KB articles were ever fetched to disk, and that corpus returns zero for "void" as well as for "audit"/"activity" although the KB plainly discusses voids -- a self-refuting census. Worse, the 568-slug union itself omits the Dashboard & Reports article set, i.e. exactly the cancelled-orders, cancelled-items, discounts and reprints pages that would carry the audit proposition; I recovered those slugs from the dashboard-and-reports index and fetched all four. They give navigation and CSV export only and name no column, so the approver conjunct is undetermined, not absent, and the control is rewritten to bind to the 91 fetched bodies. (2) The MET half was overstated: the supervisor prompt covers order cancellation and item modification only. The APK shows the gate on CartListAdapter/BillingFragment void paths while PromotionManager$advApplyDiscount has none, no no-sale gate is documented, and the KB puts refunds in the merchant gateway account -- so the authorization conjunct is met for one of the four named actions plus a role permission on Modify Completed Orders, not for the set. (3) Upgrade in kind, not in value: the shared-credential shortfall is better evidenced than the researcher had it -- the APK calls "v1/companies/{company_id}/supervisor-password-check", a company-scoped endpoint with no user id, which settles that the credential is per-company rather than per-user without relying on the "default password is 1234" line. The vendor refund contradiction is NOT resolved: I re-fetched both pages today and both still assert their opposite, with no reconciling document; it is recorded as open. Partial/B upheld on the amended note; the homonym rule was respected (the only sapaad.com "full audit trail" is the Promotion Engine’s, about promotion changes), and the double count with labor-manager-override-audit is now disclosed in the note. source |
| order-capture-split-merge | unknown, grade F | resolve-to-partial | Re-opened all four cited KB articles live (all HTTP 200, no soft-404) and re-ran the published merge trap. Value survives as partial but the proposal's reasoning is corrected on both sides. (1) The MET side was inflated: it counted multi-tender settlement toward a split-check claim. Splitting a tender across one bill is not splitting a check, so that article is struck from the supporting set; what survives is the Split Bill toggle plus the print-prompt and discount-ordering articles, which is enough to establish a native Dine-In split feature at grade B but establishes no mode. (2) The zero was overstated and mis-bounded: the proposal wrote 'no arbitrary-amount split is documented anywhere' and bounded its dex zero to class NAMES only ('no com/sapaad/* class containing Split'). That class-name zero is true - I reproduced it, 0 of 1,164 non-lambda com.sapaad symbols - but it is the wrong bound, because the split UI lives in field, method and resource strings, not class names: classes3.dex carries splitListItems, splitAmountCheck, buildBillSplitAmounts, totalAmountBeforeSplit, processSplitPayment and split_amount_layout, first-party by their adjacency to the Sapaad-specific processResturantOffers typo. So a by-item/by-amount split probably exists and is simply undocumented; publishing a flat 'not documented anywhere' would have been a false zero about a named business. The merge half is unaffected and the trap is confirmed: tokenising on camelCase, every one of the 390 merge tokens resolves to protobuf, androidx, kotlinx, Firebase, Tink or Stripe, with zero first-party merge, and merge/combine/join/consolidat/seat/evenly are all zero across the 568-slug union, 29 marketing pages and the ToS. Merge therefore stands as the named shortfall. Grade held at B (help centre); not raised on the binary, which is corroboration and is bounded to the Android app rather than the web POS. Recorded limitation: the 568-slug control is slug-level, so it cannot exclude a merge article filed under a slug that does not contain the word. source |
| kitchen-station-routing | unknown, grade F | resolve-to-yes | All six proposal quotes re-fetched at 200 from kb.sapaad.com (robots.txt allows /help; Disallow: / applies elsewhere) and confirmed verbatim, with one correction: the source reads "comrpised", not "comprised" -- the proposal silently normalised a typo, so I marked it [sic]. Two further proposal quotes were attributed loosely: the "Setup > Location Setup ... KDS Stations" path is not in the cited article at all but in /help/how-do-i-create-kitchen-stations-in-sapaad-kds-2-dot-0, where it is three separate numbered steps welded into one sentence; the amended note names that article and quotes the steps as steps. I fetched fresh rather than trusting the 90-of-568 local KB corpus, and re-derived the KDS surface from kb-urls-union.txt (568 slugs): 40 station/KDS slugs, of which I read 12. Value survives the disjunction test. The taxonomy claim reads "by item, category, order type, or revenue center" -- a disjunction over the routing axis, conjoined only with "configurable per location without vendor involvement". The category disjunct is met and explicitly documented; the item disjunct is explicitly closed by the vendor ("you can assign menu categories to multiple kitchen stations but you cannot assign specific menu items"), which is a shortfall against a conjunctive reading the claim does not make. Downgrading to partial on item-level granularity would silently rewrite the claim as a conjunction, so I declined. The second conjunct is independently satisfied at grade B: the setup path is a documented six-step back-office flow under Location Setup, per location, no support ticket. Multi-station routing of a single order is also documented anyway (a category on several stations; combo items split across Prep Screens and consolidated on the Expedite Screen). Weight is table-stakes, not differentiator, so grade B clears the floor with room. Prior row was unknown/F ("routing rule configurability is not documented") -- that premise is falsified; in atlas terms this is a resolve-to-yes, not a challenge. source |
| commercial-autorenew-terms-published | unknown, grade F | resolve-to-partial | Rejected: the proposed no is refuted by Sapaad's own legal corpus. I reproduced the proposal's factual base exactly -- section 7 verified in RAW bytes inside discrete <p> tags (no tag-stripping weld), all three clauses verbatim as quoted, and my independent tokenised counts over 21,907 extracted chars match its 21,840-char figures token for token (renew 0, renewal 0, cancel 0, subscription 0, refund 0, notice 1, expire 1). The proposal's error is not its reading of the Singapore ToS; it is that the ToS it read is not the whole commercial corpus. The prompt's warning that a renewal term might live somewhere unexpected was correct, but the unexpected place was not a product page -- it was a SECOND TERMS OF SERVICE. Sapaad publishes ten locale ToS pages; I fetched all ten and diffed them. The root, /us/, /ae/, /sg/, /sa/ and /kw/ pages are the Singapore Sapaad Pte. Ltd. contract with the order-deferral clause and renew=0/cancel=0. The /in/ page is a different, longer and NEWER contract (Last Updated July 2026, governed by Indian law, Bengaluru courts) with renew=5, cancel=4, subscription=16 and no order-deferral clause at all, and it states both conjuncts the claim tests: automatic renewal 'for successive periods equal in duration to the initial term' and a five (5) day cancellation notice window, corroborated by an independent payment-section sentence ('at least 5 days in advance'). Both were confirmed in raw bytes within a single <li>, not a stripped-text artefact. On the entity point the prompt raised: this is the substantive issue, not a bookkeeping one. The record's product.yaml names 'Sapaad Software Pvt. Ltd.', and that is precisely the entity of the /in/ ToS ('Sapaad Software Private Limited'), i.e. the record is nominally scoped to the one entity that DOES publish renewal terms -- so a no would have been wrong on the record's own stated entity. Scored partial rather than yes because publication is real but materially limited to the India entity, while the Singapore entity governing Sapaad's Gulf and US locales publishes nothing; the shortfall is named in the note. On peer consistency: I checked all 99 peer rows for this claim (23 no, 13 unknown). The no family is scored on the publication test itself, and nash is the exact shape the proposal invoked -- public terms that expressly place the renewal term in the Order Form -- scored no/B. Had the Singapore ToS been Sapaad's only contract, no/B would have been consistent and I would have upheld it; the peer precedent is sound and is not what fails here. What fails is the corpus bound: the proposal asserted a 'site-wide legal census' from a sitemap it under-derived. The index names page-sitemap1-5.xml; re-deriving all five gives 828 unique URLs and ten ToS variants, where the single page-sitemap.xml the proposal appears to have used is a 200-URL subset that omits the root terms-of-service entirely. A census that misses nine of ten copies of the governing contract cannot bound an absence. Two caveats for the record: final_url is set to the root ToS because the deciding document, https://www.sapaad.com/in/terms-of-service/, is NOT a key in notes.json and the schema constrains final_url to that file -- the India URL is quoted in full in the note and should be added to notes.json as the primary citation. And www.sapaad.com 403s every non-browser User-Agent with an identical 75,193-byte interstitial on all paths despite robots.txt Allow: /, so any future pass fetching this host with the default agent will bank interstitials as bodies and manufacture zeros; a browser UA returns 200. source |
Sources
Every URL this record cites. 54 in total.
- https://www.sapaad.com/
- https://www.sapaad.com/pricing
- https://kb.sapaad.com/help
- https://kb.sapaad.com/help/how-to-place-a-future-order
- https://kb.sapaad.com/help/when-will-the-ingredients-for-my-order-scheduled-for-another-day-get-deducted-from-my-inventory
- https://kb.sapaad.com/help/how-is-the-order-scheduled-for-time-calculated
- https://kb.sapaad.com/help/how-to-update-the-price-of-a-modifier-for-all-associated-menu-items-at-once
- https://kb.sapaad.com/help/how-to-add-price-to-a-modifier
- https://kb.sapaad.com/help/what-is-add-multiple-quantity
- https://kb.sapaad.com/help/advanced-modifiers
- https://kb.sapaad.com/help/how-do-i-know-when-an-order-is-waiting-to-be-served
- https://kb.sapaad.com/help/how-do-i-split-the-order-by-category-to-multiple-kitchen-stations
- https://kb.sapaad.com/help/how-do-i-specify-the-type-of-device-i-am-using-for-each-station
- https://kb.sapaad.com/help/how-do-i-operate-sapaad-kds-2-dot-0-with-a-bump-interface
- https://kb.sapaad.com/help/how-to-add-different-delivery-fee-for-different-areas
- https://kb.sapaad.com/help/what-is-minimum-order-value
- https://kb.sapaad.com/help/how-do-my-customers-register-to-my-online-channel
- https://kb.sapaad.com/help/what-payment-methods-can-i-have-for-my-online-ordering-channel
- https://kb.sapaad.com/help/how-to-enable-loyalty
- https://kb.sapaad.com/help/loyalty-1
- https://kb.sapaad.com/help/how-to-restrict-access-permissions-for-staff
- https://kb.sapaad.com/help/how-can-i-create-new-role
- https://kb.sapaad.com/help/how-do-i-restrict-staff-access-to-business-summary-only
- https://kb.sapaad.com/help/staff-and-roles
- https://kb.sapaad.com/help/how-to-enable-the-supervisor-password-to-cancel-an-order-or-modify-an-item-in-delivery-orders
- https://kb.sapaad.com/help/how-to-add-an-ingredient
- https://kb.sapaad.com/help/what-is-net-weight-value
- https://kb.sapaad.com/help/can-i-take-a-partial-stock-take
- https://kb.sapaad.com/help/how-to-do-a-stock-take
- https://kb.sapaad.com/help/inventory-7
- https://kb.sapaad.com/help/how-do-i-make-the-end-of-day-report
- https://kb.sapaad.com/help/dashboard-and-reports
- https://kb.sapaad.com/help/where-can-i-view-my-top-selling-modifiers
- https://kb.sapaad.com/help/how-to-view-item-details-on-the-total-orders-report
- https://kb.sapaad.com/help/how-to-make-an-item-available-at-a-particular-location
- https://kb.sapaad.com/help/how-to-update-the-price-of-an-item-for-one-location
- https://www.sapaad.com/knowledge-base/how-can-i-have-different-menu-prices-for-dine-in-and-grabfood/
- https://www.sapaad.com/custom-apis-developer-tools/
- https://kb.sapaad.com/help/do-i-need-proprietary-hardware
- https://www.sapaad.com/knowledge-base/which-devices-does-sapaad-work-on/
- https://kb.sapaad.com/help/printing-8
- https://kb.sapaad.com/help/how-to-set-up-printing-rules
- https://kb.sapaad.com/help/why-is-cloud-print-not-printing-automatically
- https://kb.sapaad.com/help/what-are-group-limits
- https://kb.sapaad.com/help/how-many-mandatory-modifiers-can-i-have-for-each-item
- https://kb.sapaad.com/help/what-is-the-difference-between-modifier-list-and-modifier-group
- https://kb.sapaad.com/help/how-do-i-set-up-a-build-your-own-menu-item-in-sapaad-1
- https://kb.sapaad.com/help/how-to-add-a-combo-item-with-advanced-modifiers
- https://kb.sapaad.com/help/i-have-distributed-gift-vouchers-to-customers-how-can-i-account-for-that
- https://kb.sapaad.com/help/does-kds-work-in-offline-mode
- https://kb.sapaad.com/help/what-is-the-order-cancelation-password
- https://kb.sapaad.com/help/how-to-enable-split-bill-for-dine-in-orders
- https://kb.sapaad.com/help/can-one-category-be-split-between-two-prep-stations
- https://www.sapaad.com/terms-of-service/