Vendors / Open source & self-hostable

Floreant POS

The best-known free restaurant POS is genuinely alive again — the official floreantpos/floreantpos repo is on a floreantpos-2.0 branch with a real feature-bearing 2.0 Beta (build 2001) dated 2026-05-23 (Cash & Card Management module, dashboard charts, drawer workflow), while floreant.org's public download page still only offers 1.4 build 1707; a separate community fork (fat-tire/floreantpos) shows 2026 activity that is Dependabot dependency bumps, not features.

scored dead legacy rubric

Claims in scope
278
Scored
45
Assessed
44
Unknown
234
Not applicable
36
Values challenged
0
84% of in-scope claims are unknown. This record measures what Floreant POS publishes at least as much as what it does. A vendor that documents little scores low here whether or not the capability exists. Absence of evidence is recorded as unknown, never as no.

Identity

Owner
OROCUBE LLC (single commercial steward; sells paid ORO POS upgrade and commercial support)
Parent
OROCUBE (commercial successor)
Who it is for
Small independent restaurants and small chains willing to self-host a Java/Swing desktop POS on their own LAN and PC hardware
Site
https://github.com/fat-tire/floreantpos

Pricing

transparency: quote-only · unit: free perpetual download (self-hosted); paid upsell priced by quote · processor lock-in: no

Software
Free download of the 1.4 (build 1707) community edition under OROCUBE's MRPL 1.2. OROCUBE monetizes via the paid ORO POS upgrade and commercial support; those figures are not published on floreant.org. No subscription, no per-terminal fee for the free edition.

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

Unknown

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.

Unknown

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.

Unknown

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.

Partial

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

Splitting exists two ways: SplitTicketDialog moves items one at a time between up to four TicketForSplitView panes (Number of Splits is a fixed 2/3/4 toggle), and a 'Split by seat number' button groups items by TicketItem.getSeatNumber() into the panes; the action is gated by the SPLIT_TICKET permission and logged to ACTION_HISTORY as SPLIT_CHECK. Shortfalls: (1) no even N-way and no arbitrary dollar/percentage split — item transfer is the only mechanism and no amount or percent field exists in the dialog; (2) merging does not exist in any form — the branch has no merge action, dialog, permission or ActionHistory constant (SPLIT_CHECK is the only check-restructuring constant), and SalesSummaryReportView fills the report template's MergeChecks/MergeAmount fields with a hard-coded blank string; (3) partial-payment handling is broken by inspection — saveTicket() reallocates prior transactions to a split ticket only under `originalTicket.getPaidAmount() > originalTicket.getTotalAmount()`, so a conventionally part-paid check (paid < total) splits without moving any payment. Read from a shallow clone of floreantpos-2.0 at commit 6cf73ad. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/ui/views/SplitTicketDialog.java · retrieved 2026-08-04

A
Unknown

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.

Unknown

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.

Unknown

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.

Yes

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

Self-hosted Java desktop app against a local DB; offline operation is the architecture, but no vendor-published offline matrix exists. https://github.com/floreantpos/floreantpos · retrieved 2026-08-01

E
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Partial

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

TICKET.DELIVEERY_DATE stores a future delivery date and ReceiptPrintService prints it as a 'Delivery:' header line, so a ticket can be future-dated. Shortfall: the core setDeliveryDate(int ticketId) here is an empty method body — only the paid Cust plugin fills it — and grep of the 2.0 source finds no fire time, lead time or prep-time scheduler at all. ReceiptPrintService.printToKitchen() runs synchronously when the order is saved, so a future-dated ticket still fires to the kitchen on receipt. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/ui/views/order/DefaultOrderServiceExtension.java · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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

No

Supports modifier groups nested at least three levels deep, each level with independent min/max selection counts and a forced-selection (required) flag.

menu-pricing-nested-modifiers

The Hibernate mapping is exhaustive and the modifier tree is exactly two levels: MenuItem holds a one-to-many of MenuItemModifierGroup (columns MIN_QUANTITY, MAX_QUANTITY, SORT_ORDER, many-to-one MODIFIER_GROUP), ModifierGroup carries NAME/ENABLED/EXCLUSIVED/REQUIRED and a set of MenuModifier, and MenuModifier.hbm.xml gives a MenuModifier a single many-to-one GROUP_ID back to its parent group and no collection of child groups at all. A modifier therefore cannot own a modifier group, so a third level is unreachable. The min/max and forced-selection halves of the claim do exist at the one level available — floreant.org/features markets it as "You can set force modifiers and maximum number of modifiers per item" — but the nesting the claim is about does not. Read from a shallow clone of floreantpos-2.0 at commit 6cf73ad. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/MenuItemModifierGroup.hbm.xml · retrieved 2026-08-04

A
Partial

A single modifier can carry different prices depending on the parent item and the selected size, configured as a matrix rather than by duplicating the modifier.

menu-pricing-modifier-price-by-parent-size

PIZZA_MODIFIER_PRICE keys a price row to a MenuItemSize and hangs a per-tier ModifierMultiplierPrice list off it, so a genuine size x quantity-tier price matrix exists without duplicating the modifier. Shortfall: getPriceForSizeAndMultiplier() applies that matrix only inside `if (isPizzaModifier() && priceList != null)` — an ordinary modifier falls back to the single MENU_MODIFIER.PRICE/EXTRA_PRICE columns — and the matrix is keyed by size alone, never by parent item, so one modifier cannot be priced differently on two different entrees. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/MenuModifier.java · retrieved 2026-08-03

A
Unknown

Supports fractional/sectioned modifier placement (at minimum halves, ideally quarters) with independent pricing per section. differentiator

menu-pricing-fractional-placement

Not scored by this record.

Unknown

The half-and-half pricing rule is operator-configurable among at least two of: charge the higher-priced half, average the halves, or charge each topping at a fraction of full price. differentiator

menu-pricing-half-and-half-rule

Not scored by this record.

Yes

Supports modifier quantity tiers (light / regular / extra / double) with a configurable price multiplier per tier, distinct from adding the modifier twice.

menu-pricing-topping-quantity-tiers

The MULTIPLIER table defines named tiers with NAME, TICKET_PREFIX, RATE, SORT_ORDER and DEFAULT_MULTIPLIER, maintained from the back office (MultiplierExplorerAction), with 'Regular' as the seeded default. MenuModifier.getPriceForMultiplier() returns the explicit MODIFIER_MULTIPLIER_PRICE.PRICE row for that tier when one is configured and otherwise `defaultPrice * multiplier.getRate() / 100`; TicketItem line 173 applies it to the single modifier line rather than repeating the modifier. floreant.org/features markets the same thing as 'Complex pricing of modifiers easy with Multiplier'. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/MenuModifier.java · retrieved 2026-08-03

A
Unknown

Item base price can be defined as a grid across two variant axes (e.g. size x crust/preparation) with a per-cell price override. differentiator

menu-pricing-size-style-matrix

Not scored by this record.

Unknown

Items can define an included-modifier allowance (e.g. three toppings included) that automatically charges only for overage and credits or forbids substitutions per configuration. differentiator

menu-pricing-included-allowance

Not scored by this record.

Unknown

Supports combo/meal construction where components can be swapped with a price delta, and the system can automatically detect and convert eligible a-la-carte items in the cart into the combo price.

menu-pricing-combos

Not scored by this record.

Unknown

Upsell/suggestive-sell prompts can be configured per item and per channel (POS, kiosk, online), and the vendor reports attach-rate on those prompts. differentiator

menu-pricing-upsell-prompts

Not scored by this record.

Unknown

A single 86 action propagates automatically to POS, KDS, the vendor's own online ordering, kiosk, and connected third-party marketplaces, with a documented propagation latency.

menu-pricing-86-propagation

Not scored by this record.

Unknown

Supports per-item countdown/par counts that decrement on sale and automatically 86 the item at zero, with a scheduled auto-restore. differentiator

menu-pricing-countdown-auto-86

Not scored by this record.

Unknown

Menus, individual items, and prices can be scheduled to activate and deactivate automatically by day and time in the location's own timezone.

menu-pricing-dayparting

Not scored by this record.

Unknown

Supports distinct price books per channel (dine-in, pickup, delivery, kiosk, each third-party marketplace) including percentage-markup rules applied to a base price rather than manual per-item entry.

menu-pricing-channel-price-books

Not scored by this record.

Unknown

Supports dual pricing / cash-discount at the item level with the card price displayed as the base price, applied consistently across POS, kiosk, and online ordering, and printed on the receipt. differentiator

menu-pricing-dual-pricing

Not scored by this record.

Unknown

Stores allergen flags and nutrition values per item and publishes them to online ordering and third-party menus, and can derive nutrition from linked recipe components rather than manual entry.

menu-pricing-allergen-nutrition

Not scored by this record.

Unknown

Menu items and modifiers can be linked to recipes/bills of materials so that a sale depletes theoretical inventory and yields item-level theoretical food cost. differentiator

menu-pricing-recipe-linkage

Not scored by this record.

Unknown

Pushes menus to third-party marketplaces through a certified direct integration (not scraping or a menu-management middleman) and surfaces per-item sync status and rejection errors to the operator.

menu-pricing-3p-menu-push

Not scored by this record.

Unknown

Supports rule-based dynamic pricing where item price varies automatically by time, demand, or channel, with configurable floor/ceiling guardrails.

menu-pricing-dynamic-pricing

Not scored by this record.

Payments & money movement

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

No

All first-party payment terminals accept EMV chip and NFC contactless including Apple Pay and Google Pay.

payments-emv-nfc

Software-only project with no first-party terminal line; runs on commodity PCs, so the capability has no subject. https://floreant.org/ · retrieved 2026-08-01

E
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

No

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

There is no gift-card entity anywhere in the 2.0 branch. The only gift construct is a tender type: PaymentType.GIFT_CERTIFICATE instantiates a GiftCertificateTransaction, a discriminator subclass of POS_TRANSACTION, and SettleTicketProcessor opens GiftCertDialog, which has exactly two inputs — a free-text certificate number and a hand-keyed face value. The processor then writes GIFT_CERT_NUMBER, GIFT_CERT_FACE_VALUE, GIFT_CERT_PAID_AMOUNT and GIFT_CERT_CASH_BACK_AMOUNT onto that one transaction. No card master table, no DAO lookup by card number, no issuance, activation or remaining-balance read, so real-time balance tracking is structurally impossible; and RestaurantDAO.getRestaurant() hard-codes get(1), so there is no group of locations to redeem across. floreant.org/features corroborates by listing "Gift card" only under the PRO column, linking to guide.orocube.com/generating-activating-gift-card/, which states in its own words that it covers ORO POS — the separate paid product, not Floreant. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/ui/views/payment/GiftCertDialog.java · retrieved 2026-08-04

A
Unknown

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.

Unknown

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.

Partial

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

2.0 changelog gates the Shifts & Cash Registers tab behind manager permission; immutable approver-attributed audit log not documented. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/CHANGELOG.md · retrieved 2026-08-01

B
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

Partial

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

floreant.org documents kitchen printer integration and the order screen has a Send Kitchen action; per-station KDS routing rules unverified. https://floreant.org/ · retrieved 2026-08-01

D
No

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

The KDS is one ticket grid whose entire filter surface is the two combos in KitchenFilterDialog, titled 'Select Printer and Order Type'. KitchenTicketDAO.loadKitchenTickets() returns KITCHEN_TICKET rows in WAITING status and then drops any whose PRINTER_GROUP does not contain the selected printer; a KITCHEN_TICKET is created per printer group, and the BUMP button closes that one row to DONE. The string 'expo' does not occur anywhere in the floreantpos-2.0 source, and nothing anywhere gates order completion on every contributing station having bumped. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/demo/KitchenDisplayView.java · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

No

KDS supports physical bump bars or programmable keypads in addition to touchscreen interaction, with documented supported models.

kitchen-bump-bar-hardware

The vendor's own feature page lists 'KDS with bump bar' in the block of features that require the paid ORO POS upgrade — i.e. the vendor states it is not in Floreant POS. The source agrees: BUMP in KitchenTicketView is a Swing PosButton with no KeyListener, KeyStroke or InputMap binding in the whole com.floreantpos.demo package, and etc/jpos.xml declares only POSPrinter, KitchenPrinter and CashDrawer JavaPOS device categories. No supported bump-bar models are published. http://floreant.org/features/ · retrieved 2026-08-03

C
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

Partial

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

floreant.org markets a delivery plugin as a first-party add-on; driver clock-in, assignment state and run history not documented. https://floreant.org/ · retrieved 2026-08-01

D
No

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

The product defines the extension surface for exactly this capability and ships it empty: OrderServiceExtension declares getDeliveryDispatchView(orderType), openDeliveryDispatchDialog(orderType), getDriverView() and assignDriver(ticketId), and the bundled DefaultOrderServiceExtension implements getDeliveryDispatchView and getDriverView as `return null`, with openDeliveryDispatchDialog and assignDriver as empty method bodies. SwitchboardView's assign-driver flow calls that empty stub after confirming the order type is delivery, and LoginView's DRIVER VIEW button returns without acting when getDriverView() is null. TICKET.DRIVER_ID and the DriverAssigned/OnTheWay TicketStatus values exist as schema, but no dispatch screen, driver-availability view, per-order elapsed-time board or multi-order run assignment exists anywhere in the branch — the hooks await a paid plugin, and OROCUBE's Cust plugin page enumerates delivery zones, caller ID, customer registration and reorder with no dispatch board among them. Read from a shallow clone of floreantpos-2.0 at commit 6cf73ad. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/ui/views/order/DefaultOrderServiceExtension.java · retrieved 2026-08-04

A
Unknown

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.

Unknown

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.

Unknown

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.

Partial

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_CHARGE carries NAME, ZIP_CODE, START_RANGE, END_RANGE and CHARGE_AMOUNT, and DELIVERY_CONFIGURATION.CHARGE_BY_ZIP_CODE switches zip-based against distance-based zones; OROCUBE's Cust plugin page states 'Different zones can be created depending on the distance in between the store and the delivery address and thereby different zones can be charged differently for delivery. The zip code associated with the delivery address can also be used to categorize different zones.' Shortfall: the zone row holds a fee and nothing else — no per-zone order minimum and no per-zone quoted promise time exist in the schema or the plugin page — and DELIVERY_ADDRESS.DISTANCE is a stored number with no address-validation step in the open-source core, which never reads DeliveryChargeDAO at all. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/DeliveryCharge.hbm.xml · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

Menu, pricing, modifiers, and photos publish from the POS master menu out to connected third-party marketplaces, including channel-specific price markups, without maintaining a separate menu in each portal.

delivery-menu-push

Not scored by this record.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

No

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

No ordering site exists to ship: the only inbound-order surface in the 2.0 branch is the abstract OnlineOrderPlugin contract (isSourceMatched, initFilterButton, loadTickets(PaginatedTableModel), initOrderInfoActionButtons, initSwitchboardActionButtons) plus ShowOnlineTicketManagementAction, which hides itself when no TicketImportPlugin is installed — machinery for displaying orders imported from an external system, not for taking them. The only HTTP server anywhere in the source is com.floreantpos.dejavoo.proxy.DejavooProxyServer, a localhost payment-terminal proxy. OROCUBE's own Floreant add-on catalogue at pos.orocube.com enumerates exactly three plugins (Cust, Floorplan, Inventory) with no web-ordering product, so there is no first-party ordering channel on any terms, commission-free or otherwise. Read from a shallow clone of floreantpos-2.0 at commit 6cf73ad. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/extension/OnlineOrderPlugin.java · retrieved 2026-08-04

A
No

The web/app ordering menu is generated from the same POS menu record as in-store — one item edit propagates to all first-party digital channels without a separate digital menu build.

digital-menu-single-source

There is no first-party digital channel for the POS menu record to feed (see digital-first-party-web), so single-source propagation has nothing to propagate to. The product's only menu-movement mechanisms confirm it: MenuJsonExportAction/MenuJsonImportAction is a manual whole-menu JSON file export moved between installations by hand, and inbound online orders land on the ONLINE_ORDER sync table as pre-built TICKET_JSON blobs constructed by the external ordering system against its own copy of the menu — nothing in the branch publishes the POS menu outward to any digital channel, so an item edit at the register propagates nowhere. Read from a shallow clone of floreantpos-2.0 at commit 6cf73ad. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/bo/actions/MenuJsonExportAction.java · retrieved 2026-08-04

A
Unknown

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.

No

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

There is no first-party guest-facing channel for an account to live in: OROCUBE's Floreant add-on catalogue at pos.orocube.com enumerates exactly three plugins (Cust, Floorplan, Inventory) with no online-ordering product, and floreant.org lists the order types as Dine-in and Takeout. CUSTOMER rows are created by staff in the back office; saved addresses do exist (the DELIVERY_ADDRESS bag) and the Cust plugin offers 'Order history & Reorder' at the POS, but the only card-on-file column is CUSTOMER.CREDIT_CARD_NO, a plaintext varchar(30) sitting beside CREDIT_LIMIT and CREDIT_SPENT — a house-account number. No tokenization, vault or guest login appears anywhere in the 2.0 source. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/Customer.hbm.xml · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

Partial

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

A single CUSTOMER table is the sole guest identity and TICKET.CUSTOMER_ID points at CUSTOMER.AUTO_ID, so in-store transactions do roll up per guest, searchable by mobile, loyalty number or name. Shortfall: CustomerDAO's entire public surface is getNumberOfCustomers, findBy(mobile, loyalty, name), findByMobileNumber, findByName, findById and loadCustomers — there is no merge or dedup routine of any kind, so two records for the same phone number stay two records; and ONLINE_ORDER stores CUST_ID as an unmapped varchar(128) rather than a foreign key, so anything arriving through the online-order sync table is not joined to the profile. No kiosk channel exists. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/dao/CustomerDAO.java · retrieved 2026-08-03

A
Unknown

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.

No

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

CUSTOMER carries LOYALTY_NO and LOYALTY_POINT columns, but the only code in the entire floreantpos-2.0 tree that touches loyaltyPoint is tfLoyaltyPoint on this form — an IntegerTextField a manager types a number into. No accrual rule exists in any form: not points-per-dollar, not visit/punch count, not spend tier. Nothing on the settlement path (PosTransactionService) increments the field, so points are hand-keyed rather than earned. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/ui/forms/CustomerForm.java · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

No

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

A case-insensitive grep of the whole floreantpos-2.0 source finds no occurrence of birthday, campaign, win-back, SMTP, mail-send or SMS: there is no messaging transport, no scheduler and no campaign entity to hang a trigger on. CUSTOMER has a DOB column with no consumer anywhere. OROCUBE's Floreant add-on catalogue offers only Cust, Floorplan and Inventory — there is no marketing or loyalty module to buy either. https://github.com/floreantpos/floreantpos/tree/floreantpos-2.0/src/com/floreantpos · retrieved 2026-08-03 · not refetchable · site policy · graded A when read

B
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

Partial

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

2.0 changelog documents drawer sessions with a named opener and a Shift table; PIN/badge clock-in flow itself not described. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/CHANGELOG.md · retrieved 2026-08-01

B
Unknown

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.

Unknown

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.

Partial

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

Permissions are genuinely per-action, not fixed tiers: UserPermission declares 27 discrete permissions — Void Ticket, Add Discount, Refund, Drawer Assignment, Drawer Pull, View Reports, View Back Office, Modify Printed Ticket, Transfer Ticket, Reopen Ticket, Perform Manager Task among them — and UserType holds an arbitrary Set<UserPermission> checked by hasPermission(), created at Back Office > Admin > User Type per the OROCUBE user-permissions guide. Shortfall: the set is a fixed compile-time array with no comp and no price-change permission, and there is no location dimension to scope any of it to — RestaurantDAO.getRestaurant() hard-codes get(1), one store per database. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/UserPermission.java · retrieved 2026-08-03

A
Partial

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

ACTION_HISTORY (ACTION_TIME, ACTION_NAME, DESCRIPTION, USER_ID) is written on void, split, settle, payout, tips payout and check create/edit, and is queryable after the fact by date range through the Journal Report (ReportService line 255). Shortfall: the attribution is wrong for exactly the case the claim is about — PosAction.actionPerformed() prompts for a manager secret key when the operator lacks the permission and stores that approver in `authorizedUser`, but this dialog and every other call site pass Application.getCurrentUser() to saveHistory(), so the row names the logged-in cashier, not the approving manager. ACTION_HISTORY is an ordinary Hibernate-mapped table with no append-only or tamper-evidence guarantee. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/ui/dialog/VoidTicketDialog.java · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

Partial

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

A recipe exists, but only as a depletion link and only in the add-on: the Inventory plugin "will add a new tab in Menu Item. It will let you connect Raw material with Menu items" and gives "Recipe to deduct ingredient items when they are sold. It does not deduct fractional units." Named shortfalls: (1) the recipe is one level deep — the page enumerates the module's features and no sub-recipe, prep item or nested-recipe construct appears; (2) nothing on that enumeration is costing — no plate cost, no cost roll-up, no recalculation on an ingredient price change; (3) fractional units are explicitly not deducted, so even the depletion is coarse; (4) it is not in the product at all without the plugin — INVENTORY_ITEM in the core 2.0 branch has no menu-item association and carries only UNIT_PURCHASE_PRICE and AVERAGE_PACKAGE_PRICE with no recipe entity in the mapping set, and floreant.org/features lists "The recipe" under PRO; (5) the plugin page itself warns it "is going to be phased out soon and considered 'AS IS' without any support or replacement". https://pos.orocube.com/product/inventoryfloreant-pos/ · retrieved 2026-08-04

C
Partial

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

INVENTORY_ITEM carries a purchase unit (PUNIT_ID) and a separate recipe unit (RECIPE_UNIT_ID) with UNIT_PER_PACKAGE as the explicit conversion factor and TOTAL_UNIT_PACKAGES / TOTAL_RECEPIE_UNITS held in parallel; PACKAGING_UNIT adds FACTOR, BASEUNIT and DIMENSION, and OROCUBE's Inventory plugin page confirms 'Packing Units — maintains packing and recipe units'. Shortfall: there is no distinct count unit — counting is in packages — and no yield or waste percentage field exists anywhere in the inventory schema or on the plugin's feature list, so raw-to-usable conversion cannot be expressed at all. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/InventoryItem.hbm.xml · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

No

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

InventoryTransactionType is exactly IN(1), OUT(-1) and UNCHANGED(0), and INVENTORY_TRANSACTION records one dated adjustment per row — there is no count, stocktake, count-session or variance entity anywhere in the schema. OROCUBE's Inventory plugin page enumerates the module's whole feature set — inventory items with cost/unit/location, item-group/unit/vendor lookups, warehouses and locations, recipe in menu item, shopping list generated from re-order level, On Hand Report and Transaction Report — and no physical, spot or cycle count is among them. Caveat: that plugin's own source is not in the floreantpos repository, so this rests on the shared schema plus the vendor's feature enumeration. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/InventoryTransactionType.java · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

Joins recipe cost to actual item sales mix to report contribution margin per menu item, and flags items whose margin fell below a configured threshold after ingredient cost changes. differentiator

inventory-menu-margin-linkage

Not scored by this record.

Reporting, BI & data access

Partial

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

2.0 adds KPI cards, daily-trend, hourly-sales and cash/card charts, but as a desktop dialog — no browser or off-premise mobile access. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/CHANGELOG.md · retrieved 2026-08-01

B
Partial

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

Drawer-pull workflow with accountable vs actual cash, net sales, tax and tips; full tender-type and refund reconciliation unverified. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/CHANGELOG.md · retrieved 2026-08-01

B
Partial

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

createModels() builds two aggregations — itemMap keyed by menu item id and modifierMap keyed by modifier id — each accumulating quantity, gross total, discount, tax total and net total, and passes them into the sales_report Jasper template as itemDataSource and modifierDataSource. So PMIX genuinely reaches modifier level with quantity and gross/net. Shortfall: the ticket query is DateUtils.startOfDay(from) to DateUtils.endOfDay(to), so the window is always whole days and no daypart filter is possible, and the only other filter is terminal (findTickets(date1, date2, type, terminal)) — there is no revenue-center object in the schema to filter on. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/report/SalesReport.java · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

No

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

RestaurantDAO.getRestaurant() is literally `getInstance().get(Integer.valueOf(1))` — one RESTAURANT row per database — and the same hard-coded get(1) is repeated in PosPrintService and TaxConfigurationView. There is no location, store, outlet, region or group entity in the domain model; the only OUTLET_ID and STORE_ID in the schema are opaque varchar columns on the ONLINE_ORDER sync table, not mapped objects. With no location object there is nothing for a second or third tier to contain, and neither reporting nor permissions carry a scope dimension. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/dao/RestaurantDAO.java · retrieved 2026-08-03

A
No

A corporate-level menu can be authored once and published to a chosen set of locations in a single action, with a publish/version history showing what was pushed, when, and by whom.

multi-location-central-menu-publish

The vendor's own propagation mechanism is enumerated by this back-office action and its partner MenuJsonImportAction: a whole-menu JSON file exported from one installation and imported by hand into another, one database at a time. There is no corporate tier to author at (one RESTAURANT row per database), no way to select a set of locations, and no publish, version or push-history table anywhere in the schema to record what was pushed, when or by whom. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/bo/actions/MenuJsonExportAction.java · retrieved 2026-08-03

A
Partial

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

Two of the three dimensions exist without duplicating the item record: MENUITEM_SHIFT holds a SHIFT_PRICE per Shift, which is daypart pricing (floreant.org markets it as 'Shift-wise pricing'), and MenuItem.getPriceByOrderType() reads a '<ORDERTYPE>_PRICE' entry out of the MENU_ITEM_PROPERTIES map, which is per-channel pricing. Shortfall: the location-group dimension does not exist — there is no price tier or zone object and no location entity to attach one to, since RestaurantDAO hard-codes get(1) for a single store per database — so one item cannot carry different prices per location group. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/MenuItem.hbm.xml · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

Unknown

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.

Partial

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

Java desktop application, so Windows/macOS/Linux in practice, but no published minimum OS versions or device specs. https://floreant.org/download/ · retrieved 2026-08-01

E
Unknown

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.

Unknown

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.

Unknown

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.

Partial

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

On-premise architecture means it runs without internet; the vendor publishes no explicit degradation matrix for card auth or loyalty. https://floreant.org/ · retrieved 2026-08-01

E
Partial

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

A first-party KDS is genuinely in the product: the login screen's Kitchen Display button opens KitchenDisplayView, KITCHEN_TICKET rows are created per printer group and filtered by KitchenFilterDialog's printer and order-type combos (station routing), each KitchenTicketView card carries on-screen touch BUMP and VOID buttons, and a per-ticket TimerWatch header counts elapsed time since create, turning yellow then red at configurable YellowTimeOut (300s) / RedTimeOut (600s) thresholds. Named shortfalls: (1) no bump-bar input — BUMP is a Swing PosButton with no KeyListener, KeyStroke or InputMap binding in the com.floreantpos.demo package, and floreant.org/features places 'KDS with bump bar' in the paid ORO POS upgrade column; (2) no course/fire timing — a case-insensitive grep of the whole branch finds no course, coursing or firing construct, and ReceiptPrintService.printToKitchen() fires every kitchen ticket synchronously on save, so nothing can be held or fired by course. Read from a shallow clone of floreantpos-2.0 at commit 6cf73ad. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/demo/KitchenTicketView.java · retrieved 2026-08-04

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

No

Public, self-serve API reference documentation is readable without a signed partner agreement, NDA, or sales call.

extensibility-public-api-docs

Full source is public on GitHub, but no self-serve REST API reference is published — source availability is not API documentation. https://github.com/floreantpos/floreantpos · retrieved 2026-08-01

E
Unknown

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.

Unknown

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.

No

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

Desktop app with direct database access; no OAuth 2.0 authorization server or scoped operator-granted app permissions. https://github.com/floreantpos/floreantpos · retrieved 2026-08-01

E
No

The platform pushes real-time webhooks for order lifecycle events (created, modified, paid, voided, refunded) rather than requiring polling.

extensibility-webhooks-push

Integration is pull-based by construction: ONLINE_ORDER carries LAST_UPDATE_TIME and LAST_SYNC_TIME alongside a TICKET_JSON blob, and the OnlineOrderPlugin contract is loadTickets(PaginatedTableModel ticketListTableModel) — a polled table read on a timer. The only HTTP server in the whole 2.0 source is com.floreantpos.dejavoo.proxy.DejavooProxyServer, a localhost proxy for a Dejavoo payment terminal; there is no outbound event publisher, no subscription registry, no endpoint configuration and no signing secret for any order lifecycle event. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/model/OnlineOrder.hbm.xml · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

Menu items, modifiers, and prices can be written and updated via API, not just read. differentiator

extensibility-menu-write-api

Not scored by this record.

Unknown

The vendor is a named DoorDash Preferred Integration Partner (DPIP) under the 2026 program requirements. differentiator

extensibility-doordash-preferred

Not scored by this record.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

Yes

Order entry, ticket routing, and check printing continue on-terminal when the internet connection is lost.

reliability-offline-order-entry

Local database and local terminal; order entry and printing are LAN operations independent of internet connectivity. https://github.com/floreantpos/floreantpos · retrieved 2026-08-01

E
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Yes

Kitchen display and/or kitchen printer routing continues to function while offline.

reliability-offline-kds-printing

Kitchen printing is LAN-attached from the local application, so it is unaffected by internet loss. https://floreant.org/ · retrieved 2026-08-01

E
No

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

printToKitchen() resolves the single Printer bound to each KITCHEN_TICKET's printer group, skips the ticket outright if that printer is null, and otherwise calls printQuitely() — whose catch block logs 'No print selected' via logger.error and returns, with the PrinterAbortException branch commented `//do nothing`. There is no second printer to fail over to, no retry, and no operator alert; an unreachable kitchen printer silently drops the ticket. PRINTER_GROUP is a routing list of printer names, not a failover chain, and the OROCUBE back-office guide describes it only as routing. https://github.com/floreantpos/floreantpos/blob/floreantpos-2.0/src/com/floreantpos/report/ReceiptPrintService.java · retrieved 2026-08-03

A
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

The vendor performs the initial menu build as part of onboarding rather than leaving it entirely to the operator. differentiator

reliability-menu-build-service

Not scored by this record.

Unknown

A hardware replacement/advance-exchange program with a stated turnaround time is included or purchasable.

reliability-hardware-replacement-sla

Not scored by this record.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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

Unknown

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.

Unknown

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.

Unknown

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

HELD unknown. NEW SURFACE: WP REST census of pos.orocube.com (/wp-json/wp/v2/pages X-WP-Total 42), orocube.com (6 pages, 28 posts), floreant.org (27 pages, 261 posts), guide.orocube.com (2 pages, 189 posts); tokenised controls auto-renew|renewal|renews|cancellation|subscription term|notice period|licence term. Only two contract documents exist, both for ORO POS (the paid successor), not Floreant POS: (1) 'POS Support Terms and Conditions' (Support-Term-2.0.02/23/08, modified 2023-09-01): fees 'according to the terms outlined in the service agreement between the parties'; termination only 'if the other party breaches any material provision ... and fails to cure such breach within thirty (30) days'; no renewal term, no cancellation notice window. (2) 'Software Upgrade Terms & Conditions for ORO POS 1.4': 'we cannot extend the license for ORO POS 1.4 ... must purchase a new license for ORO POS 1.5 ... updates and support for the specified duration' (duration not stated). The 'renewal' hits on floreant.org are SEO blog posts about other vendors (poison). Floreant POS itself is a free perpetual MRPL download with no term, so the claim does not apply to it; the ORO POS terms defer term length to an unpublished service agreement (would support a no for ORO POS, a sibling product, not this record). Retrieved 2026-09-17. || 330th: HELD unknown (claim does not apply). NEW SURFACE, and it now CITES what the 321st asserted without a source: the product's own shipped licence, read from the repo via api.github.com/raw.githubusercontent.com (never cloned, never fetching github.com pages). Repo floreantpos/floreantpos, branch floreantpos-2.0, sha 6cf73ad8eaedd94400ba4bdff0a7f7cc98bf5356 (2026-05-23); git/trees?recursive=1 returns truncated:false, 1,540 blobs; the only contract artefacts in the whole tree are LICENSE (880 B), resources/FloreantLicense.html (35,760 B) and src/com/floreantpos/ui/dialog/LicenseDialog.java (7,191 B), i.e. the licence the application itself displays. LICENSE header: 'The contents of this file are subject to the MRPL 1.2 (the "License"), being the Mozilla Public License Version 1.1 with a permitted attribution clause ... The Original Code is FLOREANT POS. The Initial Developer of the Original Code is OROCUBE LLC'. CONTROLS over the 24,112 chars of extracted licence text, tokenised, case-insensitive: `renew` 0, `subscription` 0, `perpetual` 0, `cancel` 0, `expire` 0, `duration` 0, `term of` 0; `fee` 2 (poison: a permission to 'charge a fee for warranty, support, indemnity' on your own behalf, and 'attorneys' fees' in the venue clause); `terminat*` 9, all clause 8: '8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days'. So the only contract covering Floreant POS is a royalty-free source licence with no term, no renewal and no cancellation notice window - there is no auto-renewal to publish, so the claim is not-applicable rather than failed (per the standing hold on features a product lacks entirely). Also probed today and dead ends: http://www.floreantpos.org/license.html, the URL the LICENSE header itself points at, returns Cloudflare 522; floreant.org/license.html and floreant.org/pricing/ are WP 404s (59,369-byte soft-404 body, discriminated against floreant.org/download/ at 68,884); orocube.com/shop/ 404. Retrieved 2026-09-18. adversarially verified

F
Unknown

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.

Unknown

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.

Unknown

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.

Partial

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

Community edition price is unambiguously free and published; paid ORO POS and support pricing are not on the public site. https://floreant.org/download/ · retrieved 2026-08-01

B
Unknown

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.

Partial

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

No first-party hardware is sold, so there is no mandatory lease; operators buy commodity PCs and printers themselves. https://floreant.org/ · retrieved 2026-08-01

E
Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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.

Unknown

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 0 values — 0 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

ClaimAs first scoredVerdictWhat the verifier found
order-capture-scheduled-ordersunknown, grade F — "No public documentation located during the 2026-08-01 research pass."resolve-to-partialThe placeholder marked a cell nobody had examined. Floreant is open source, so the implementation is primary evidence. TICKET.DELIVEERY_DATE exists and ReceiptPrintService prints it as a 'Delivery:' header, but the core setDeliveryDate(int) is an empty method body and no fire-time or lead-time scheduler exists anywhere in the branch; printToKitchen() is called synchronously on save. source
menu-pricing-modifier-price-by-parent-sizeunknown, grade F — placeholder rationaleresolve-to-partialPIZZA_MODIFIER_PRICE is keyed to a MenuItemSize with a per-tier price list hanging off it, so a size price matrix is real. But MenuModifier.getPriceForSizeAndMultiplier() gates it on isPizzaModifier(), and the matrix has no parent-item axis, so the claim's 'depending on the parent item and the selected size' is only half met. source
menu-pricing-topping-quantity-tiersunknown, grade F — placeholder rationaleresolve-to-yesThe MULTIPLIER entity is exactly this capability: named tiers with a RATE, a back-office explorer to maintain them, an optional explicit per-tier price override in MODIFIER_MULTIPLIER_PRICE, and application on a single modifier line via getPriceForMultiplier(). Grade A source, so the differentiator floor is not an issue; floreant.org/features corroborates at grade C. source
kitchen-expo-consolidationunknown, grade F — placeholder rationaleresolve-to-noPositive absence, not merely unfound: the KDS filter dialog is titled 'Select Printer and Order Type' and those two combos are its whole surface; loadKitchenTickets() returns per-printer-group KITCHEN_TICKET rows and BUMP closes one row. The token 'expo' does not appear anywhere in the branch and no completion gate spans stations. source
kitchen-bump-bar-hardwareunknown, grade F — placeholder rationaleresolve-to-noThe vendor states the limitation itself: floreant.org/features lists 'KDS with bump bar' among the features requiring the paid ORO POS upgrade. Corroborated in source — BUMP is a Swing button with no key bindings in com.floreantpos.demo, and etc/jpos.xml declares only POSPrinter, KitchenPrinter and CashDrawer. source
delivery-zone-pricingunknown, grade F — placeholder rationaleresolve-to-partialZones with independent fees are real (DELIVERY_CHARGE by zip or distance band; the Cust plugin page describes both), but the row carries a charge amount only — no order minimum and no promise time — and the open-source core never reads DeliveryChargeDAO, so automatic application from a validated address is not demonstrable. source
digital-account-saved-paymentunknown, grade F — placeholder rationaleresolve-to-noOROCUBE's own add-on catalogue enumerates exactly three Floreant plugins and no online-ordering product, and floreant.org's order types are Dine-in and Takeout — there is no first-party guest channel for an account to exist in. The only card-on-file column is CUSTOMER.CREDIT_CARD_NO, a plaintext varchar(30) house-account field; no tokenization appears in the branch. source
guest-loyalty-unified-profileunknown, grade F — placeholder rationaleresolve-to-partialOne CUSTOMER table with TICKET.CUSTOMER_ID does unify in-store history per guest, so this is not a no. But CustomerDAO's full public surface is lookup by mobile/loyalty/name/id with no merge or dedup routine, and ONLINE_ORDER.CUST_ID is an unmapped varchar rather than a foreign key. source
guest-loyalty-accrual-modelsunknown, grade F — placeholder rationaleresolve-to-noLOYALTY_POINT exists as a column, which is what makes this cell look scoreable, but the only consumer in the entire branch is an IntegerTextField on the back-office customer form. No accrual rule of any kind — per-dollar, per-visit or per-tier — and nothing on the settlement path touches the field. source
guest-loyalty-lifecycle-automationunknown, grade F — placeholder rationaleresolve-to-noNo messaging transport, scheduler or campaign entity exists: grep of the branch finds no birthday, campaign, win-back, SMTP, mail-send or SMS token, and CUSTOMER.DOB has no consumer. The vendor's add-on catalogue offers no marketing module either, so there is no purchasable path to it. source
labor-granular-rbacunknown, grade F — placeholder rationaleresolve-to-partialStronger than the blank implied: 27 discrete permissions assignable in any combination to arbitrary user types, including void, discount, refund, drawer assignment and drawer pull, confirmed in both source and the OROCUBE user-permissions guide. Held at partial because the set is compile-time fixed with no comp or price-change permission and there is no location to scope to. source
labor-manager-override-auditunknown, grade F — placeholder rationaleresolve-to-partialACTION_HISTORY records performer, time, action and description and is queryable via the Journal Report, so an audit trail exists. The shortfall is specific and checkable: PosAction captures the overriding manager in authorizedUser, but every saveHistory() call site passes Application.getCurrentUser(), so overrides are attributed to the cashier. source
inventory-unit-conversion-yieldsunknown, grade F — placeholder rationaleresolve-to-partialPurchase unit and recipe unit are separate mapped columns with UNIT_PER_PACKAGE as the conversion factor and PACKAGING_UNIT.FACTOR/BASEUNIT behind them — the conversion half of the claim is met. No yield or waste percentage field exists anywhere in the inventory schema or on the plugin's published feature list. source
inventory-count-modesunknown, grade F — placeholder rationaleresolve-to-noInventoryTransactionType is IN/OUT/UNCHANGED with no count-session or variance entity in the shared schema, and OROCUBE's Inventory plugin page enumerates the module's whole feature set — items, lookups, warehouses, recipes, shopping list, On Hand and Transaction reports — with no physical, spot or cycle count among them. Noted in the cell that the plugin's own source is not public. source
reporting-pmix-modifier-levelunknown, grade F — placeholder rationaleresolve-to-partialBetter than the blank suggested: SalesReport builds a separate modifierMap alongside itemMap with quantity, gross, discount, tax and net, rendered as its own band of sales_report — modifier-level PMIX is genuinely present. Held at partial because the window is forced to whole days (startOfDay/endOfDay), killing daypart filtering, and terminal is the only other filter. source
multi-location-org-hierarchyunknown, grade F — placeholder rationaleresolve-to-noRestaurantDAO.getRestaurant() is a hard-coded get(1) repeated across the codebase — one RESTAURANT row per database. No location, store, outlet or region entity exists in the domain model, so there is no object for a hierarchy to be built from, and neither reporting nor permissions carry a scope dimension. source
multi-location-central-menu-publishunknown, grade F — placeholder rationaleresolve-to-noThe alternative the product actually ships is enumerated in the back office: MenuJsonExportAction and MenuJsonImportAction, a manual whole-menu JSON file moved between installs one database at a time. No location-set selection and no publish/version history table exist. source
multi-location-price-zonesunknown, grade F — placeholder rationaleresolve-to-partialTwo of the three axes are present without duplicating the item: MENUITEM_SHIFT gives a per-shift (daypart) price and getPriceByOrderType() gives a per-channel price out of MENU_ITEM_PROPERTIES. The location-group axis cannot exist in a schema with one RESTAURANT row per database. source
extensibility-webhooks-pushunknown, grade F — placeholder rationaleresolve-to-noThe integration path is explicitly poll-based: ONLINE_ORDER carries LAST_SYNC_TIME and the OnlineOrderPlugin contract is loadTickets(PaginatedTableModel). The only HTTP server in the branch is a localhost Dejavoo payment-terminal proxy; no event publisher, subscription registry or signing secret exists. source
reliability-printer-fallbackunknown, grade F — placeholder rationaleresolve-to-noprintToKitchen() skips a ticket outright when its printer is null and otherwise calls printQuitely(), which swallows every exception into logger.error and returns — the PrinterAbortException branch is commented '//do nothing'. There is no backup printer, retry or alert; PRINTER_GROUP is routing, not failover, and the OROCUBE back-office guide describes it only as routing. source
menu-pricing-nested-modifiersunknown, grade F - "No public documentation located during the 2026-08-01 research pass."resolve-to-noThe placeholder marked a cell nobody had examined. The ORM mapping is exhaustive primary evidence: MenuItem -> MenuItemModifierGroup (MIN_QUANTITY/MAX_QUANTITY) -> ModifierGroup (REQUIRED) -> MenuModifier, and MenuModifier has a single many-to-one parent GROUP_ID with no collection of child groups, so a modifier cannot be modified and a third level is unreachable. Min/max and forced selection exist, but only at the one available level, and guide.orocube.com/floreant-pos-menu-programming/ documents nothing beyond 'Modifiers ... stay the same way under Modifier groups'. source
payments-gift-cardsunknown, grade F - "No public documentation located during the 2026-08-01 research pass."resolve-to-noThe placeholder marked a cell nobody had examined. Floreant's only gift construct is a tender: GiftCertDialog collects a free-text certificate number and a typed face value, which SettleTicketProcessor writes onto a GiftCertificateTransaction row. There is no card master table, no lookup by card number and no balance field, so real-time balance tracking cannot exist, and RestaurantDAO hard-codes a single location. floreant.org/features lists 'Gift card' as PRO only and its linked guide covers ORO POS, a different paid product. source
inventory-recipe-bom-costingunknown, grade F - "No public documentation located during the 2026-08-01 research pass."resolve-to-partialThe placeholder marked a cell nobody had examined. The core 2.0 branch has no recipe entity at all - INVENTORY_ITEM carries purchase/average package price and no menu-item link. Recipes come only from the closed-source Inventory add-on, whose own feature enumeration describes a single-level ingredient-depletion link ('Recipe to deduct ingredient items when they are sold. It does not deduct fractional units') with no sub-recipes, no plate cost and no recalculation on ingredient cost change. Scored partial rather than no because the recipe construct itself is real and vendor-documented; the costing the claim is about is not. source
order-capture-split-mergeunknown, grade F - "No public documentation located during the 2026-08-01 research pass."resolve-to-partialThe placeholder marked a cell nobody had examined. SplitTicketDialog is real: item-transfer splitting across up to four panes plus a split-by-seat button, permission-gated and logged as SPLIT_CHECK. But no even N-way or dollar/percent split mechanism exists, and merge is absent in every form — no action, dialog, permission or ActionHistory constant, and the sales-summary report's MergeChecks/MergeAmount fields are filled with a hard-coded blank. source
delivery-dispatch-boardunknown, grade F - "No public documentation located during the 2026-08-01 research pass."resolve-to-noThe placeholder marked a cell nobody had examined. Positive absence: the product itself declares the dispatch extension points — getDeliveryDispatchView, openDeliveryDispatchDialog, getDriverView, assignDriver — and the bundled DefaultOrderServiceExtension implements them as `return null` and empty method bodies, so the Switchboard's assign-driver button and the login screen's DRIVER VIEW button do nothing in the open-source product. No dispatch screen, availability view, elapsed-time board or run batching exists in the branch, and OROCUBE's Cust plugin page enumerates its delivery features without a dispatch board. source
digital-first-party-webunknown, grade F - "No public documentation located during the 2026-08-01 research pass."resolve-to-noThe placeholder marked a cell nobody had examined. Floreant ships no ordering site: the only inbound-order surface is the abstract OnlineOrderPlugin/TicketImportPlugin contract that displays orders imported from an external system, the only HTTP server in the branch is a localhost Dejavoo payment-terminal proxy, and OROCUBE's add-on catalogue enumerates exactly three Floreant plugins with no web-ordering product among them. source
digital-menu-single-sourceunknown, grade F - "No public documentation located during the 2026-08-01 research pass."resolve-to-noThe placeholder marked a cell nobody had examined. With no first-party digital channel (digital-first-party-web is no), nothing consumes the POS menu record: the only menu-movement mechanism is the manual MenuJsonExport/Import file pair, and online orders arrive as TICKET_JSON blobs pre-built by the external system against its own menu copy. An item edit at the register propagates to no digital channel. source
hardware-kdsunknown, grade F - "No public documentation located during the 2026-08-01 research pass."resolve-to-partialThe placeholder marked a cell nobody had examined. A first-party KDS exists and is stronger than the blank implied: launchable from the login screen, per-printer-group station routing, touch BUMP/VOID buttons, and a per-ticket elapsed timer with configurable yellow/red aging thresholds. Held at partial because bump-bar input does not exist (no key bindings; floreant.org/features puts 'KDS with bump bar' in the paid ORO POS column) and no course/fire construct appears anywhere in the branch. source

Sources

Every URL this record cites. 37 in total.