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
Cells 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

order-capture-floor-plan-editor

Not scored by this record.

Unknown

order-capture-seat-level

Not scored by this record.

Unknown

order-capture-coursing-hold-fire

Not scored by this record.

Partial

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

order-capture-bar-tab-preauth differentiator

Not scored by this record.

Unknown

order-capture-transfer-audit

Not scored by this record.

Unknown

order-capture-native-handheld

Not scored by this record.

Yes

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

order-capture-qr-same-check differentiator

Not scored by this record.

Unknown

order-capture-kiosk-first-party differentiator

Not scored by this record.

Unknown

order-capture-drive-thru

Not scored by this record.

Unknown

order-capture-drive-thru-timers

Not scored by this record.

Unknown

order-capture-voice-ai differentiator

Not scored by this record.

Unknown

order-capture-throttling differentiator

Not scored by this record.

Partial

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

order-capture-catering

Not scored by this record.

Unknown

order-capture-order-ready-signal differentiator

Not scored by this record.

Unknown

order-capture-void-comp-controls

Not scored by this record.

Menu, modifiers & pricing engine

No

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

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

menu-pricing-fractional-placement differentiator

Not scored by this record.

Unknown

menu-pricing-half-and-half-rule differentiator

Not scored by this record.

Yes

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

menu-pricing-size-style-matrix differentiator

Not scored by this record.

Unknown

menu-pricing-included-allowance differentiator

Not scored by this record.

Unknown

menu-pricing-combos

Not scored by this record.

Unknown

menu-pricing-upsell-prompts differentiator

Not scored by this record.

Unknown

menu-pricing-86-propagation

Not scored by this record.

Unknown

menu-pricing-countdown-auto-86 differentiator

Not scored by this record.

Unknown

menu-pricing-dayparting

Not scored by this record.

Unknown

menu-pricing-channel-price-books

Not scored by this record.

Unknown

menu-pricing-dual-pricing differentiator

Not scored by this record.

Unknown

menu-pricing-allergen-nutrition

Not scored by this record.

Unknown

menu-pricing-recipe-linkage differentiator

Not scored by this record.

Unknown

menu-pricing-3p-menu-push

Not scored by this record.

Unknown

menu-pricing-dynamic-pricing

Not scored by this record.

Payments & money movement

Unknown

payments-processor-choice differentiator

Not scored by this record.

Unknown

payments-published-rates differentiator

Not scored by this record.

Unknown

payments-dual-pricing differentiator

Not scored by this record.

Unknown

payments-surcharge-guardrails differentiator

Not scored by this record.

No

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

payments-softpos-tap-to-pay differentiator

Not scored by this record.

Unknown

payments-pay-at-table

Not scored by this record.

Unknown

payments-qr-guest-pay differentiator

Not scored by this record.

Unknown

payments-tip-adjust

Not scored by this record.

Unknown

payments-tip-pooling differentiator

Not scored by this record.

Unknown

payments-offline-store-and-forward differentiator

Not scored by this record.

Unknown

payments-offline-decline-liability differentiator

Not scored by this record.

No

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

payments-house-accounts

Not scored by this record.

Unknown

payments-split-tender

Not scored by this record.

Partial

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

payments-chargeback-tooling differentiator

Not scored by this record.

Unknown

payments-card-on-file differentiator

Not scored by this record.

Unknown

payments-payout-timing differentiator

Not scored by this record.

Unknown

payments-p2pe-pci4

Not scored by this record.

Kitchen & production

Partial

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

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

kitchen-course-firing differentiator

Not scored by this record.

Unknown

kitchen-prep-time-pacing differentiator

Not scored by this record.

Unknown

kitchen-order-throttling differentiator

Not scored by this record.

Unknown

kitchen-channel-pause-propagation differentiator

Not scored by this record.

Unknown

kitchen-order-ready-callback differentiator

Not scored by this record.

No

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

kitchen-all-day-counts

Not scored by this record.

Unknown

kitchen-sla-alerts

Not scored by this record.

Unknown

kitchen-printer-fallback differentiator

Not scored by this record.

Unknown

kitchen-offline-operation differentiator

Not scored by this record.

Unknown

kitchen-item-build-screens differentiator

Not scored by this record.

Unknown

kitchen-pizza-fractional-display differentiator

Not scored by this record.

Unknown

kitchen-recall-refire

Not scored by this record.

Unknown

kitchen-order-modification-alerts differentiator

Not scored by this record.

Unknown

kitchen-guest-ready-notification differentiator

Not scored by this record.

Unknown

kitchen-waste-logging

Not scored by this record.

Unknown

kitchen-speed-of-service-reporting

Not scored by this record.

Unknown

kitchen-prep-forecasting

Not scored by this record.

Delivery, dispatch & third-party channels

Partial

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

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

delivery-route-map differentiator

Not scored by this record.

Unknown

delivery-driver-tracking differentiator

Not scored by this record.

Unknown

delivery-zones-polygon differentiator

Not scored by this record.

Partial

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

delivery-address-validation

Not scored by this record.

Unknown

delivery-driver-comp differentiator

Not scored by this record.

Unknown

delivery-cash-reconcile

Not scored by this record.

Unknown

delivery-daas-dispatch

Not scored by this record.

Unknown

delivery-daas-fallback differentiator

Not scored by this record.

Unknown

delivery-3p-direct-integration differentiator

Not scored by this record.

Unknown

delivery-3p-injection

Not scored by this record.

Unknown

delivery-menu-push

Not scored by this record.

Unknown

delivery-86-sync

Not scored by this record.

Unknown

delivery-store-pause

Not scored by this record.

Unknown

delivery-3p-reconciliation differentiator

Not scored by this record.

Unknown

delivery-injection-error-visibility differentiator

Not scored by this record.

Unknown

delivery-tracking-page

Not scored by this record.

Unknown

delivery-promise-time differentiator

Not scored by this record.

Unknown

delivery-offline-behavior

Not scored by this record.

Digital ordering & guest-facing channels

No

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

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

digital-native-app differentiator

Not scored by this record.

No

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-upsell-engine differentiator

Not scored by this record.

Unknown

digital-scheduled-pacing

Not scored by this record.

Unknown

digital-fulfillment-modes

Not scored by this record.

Unknown

digital-qr-table

Not scored by this record.

Unknown

digital-kiosk differentiator

Not scored by this record.

Unknown

digital-group-ordering

Not scored by this record.

Unknown

digital-catering-portal differentiator

Not scored by this record.

Unknown

digital-voice-ai-phone differentiator

Not scored by this record.

Unknown

digital-drivethru-ai

Not scored by this record.

Unknown

digital-sms-ordering

Not scored by this record.

Unknown

digital-google-order differentiator

Not scored by this record.

Unknown

digital-apple-business-connect

Not scored by this record.

Unknown

digital-loyalty-attach

Not scored by this record.

Unknown

digital-subscriptions

Not scored by this record.

Unknown

digital-promo-parity

Not scored by this record.

Unknown

digital-guest-data-ownership differentiator

Not scored by this record.

Unknown

digital-checkout-pci-sca

Not scored by this record.

Unknown

digital-surcharge-transparency differentiator

Not scored by this record.

Guest data, loyalty & marketing

Partial

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

guest-loyalty-thirdparty-identity-attach differentiator

Not scored by this record.

No

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

guest-loyalty-tiers differentiator

Not scored by this record.

Unknown

guest-loyalty-offline-behavior differentiator

Not scored by this record.

Unknown

guest-loyalty-offer-stacking-rules differentiator

Not scored by this record.

Unknown

guest-loyalty-targeted-offers differentiator

Not scored by this record.

Unknown

guest-loyalty-rfm-segmentation differentiator

Not scored by this record.

No

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

guest-loyalty-native-email-sms differentiator

Not scored by this record.

Unknown

guest-loyalty-consent-management

Not scored by this record.

Unknown

guest-loyalty-10dlc-registration

Not scored by this record.

Unknown

guest-loyalty-campaign-attribution differentiator

Not scored by this record.

Unknown

guest-loyalty-data-export-portability differentiator

Not scored by this record.

Unknown

guest-loyalty-review-capture-routing differentiator

Not scored by this record.

Unknown

guest-loyalty-referral-program

Not scored by this record.

Unknown

guest-loyalty-wallet-pass differentiator

Not scored by this record.

Unknown

guest-loyalty-privacy-rights-tooling

Not scored by this record.

Unknown

guest-loyalty-redemption-fraud-controls

Not scored by this record.

Unknown

guest-loyalty-ai-offer-recommendation differentiator

Not scored by this record.

Unknown

guest-loyalty-stored-value-gift

Not scored by this record.

Labor & workforce

Partial

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

labor-photo-punch-verification differentiator

Not scored by this record.

Unknown

labor-offline-time-punch differentiator

Not scored by this record.

Partial

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

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

labor-native-scheduling differentiator

Not scored by this record.

Unknown

labor-demand-labor-forecast differentiator

Not scored by this record.

Unknown

labor-realtime-labor-percent differentiator

Not scored by this record.

Unknown

labor-overtime-prevention differentiator

Not scored by this record.

Unknown

labor-break-compliance-by-state differentiator

Not scored by this record.

Unknown

labor-minor-labor-rules

Not scored by this record.

Unknown

labor-tip-pooling-rules

Not scored by this record.

Unknown

labor-tip-distribution-audit-trail

Not scored by this record.

Unknown

labor-qualified-tips-w2-reporting differentiator

Not scored by this record.

Unknown

labor-native-payroll differentiator

Not scored by this record.

Unknown

labor-payroll-export-formats

Not scored by this record.

Unknown

labor-shift-swap-workflow differentiator

Not scored by this record.

Unknown

labor-server-performance-metrics differentiator

Not scored by this record.

Inventory, purchasing & cost control

Partial

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

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

inventory-theoretical-vs-actual differentiator

Not scored by this record.

Unknown

inventory-realtime-depletion differentiator

Not scored by this record.

Unknown

inventory-86-auto-sync differentiator

Not scored by this record.

No

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

inventory-mobile-count-offline

Not scored by this record.

Unknown

inventory-vendor-catalogs-edi differentiator

Not scored by this record.

Unknown

inventory-invoice-ocr differentiator

Not scored by this record.

Unknown

inventory-price-change-alerts differentiator

Not scored by this record.

Unknown

inventory-par-auto-suggest differentiator

Not scored by this record.

Unknown

inventory-waste-logging

Not scored by this record.

Unknown

inventory-shelf-life-expiry

Not scored by this record.

Unknown

inventory-bar-partial-bottle

Not scored by this record.

Unknown

inventory-cogs-gl-export

Not scored by this record.

Unknown

inventory-native-not-partner differentiator

Not scored by this record.

Unknown

inventory-menu-margin-linkage differentiator

Not scored by this record.

Reporting, BI & data access

Partial

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

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

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

reporting-comps-voids-audit

Not scored by this record.

Unknown

reporting-cash-over-short

Not scored by this record.

Unknown

reporting-labor-productivity

Not scored by this record.

Unknown

reporting-server-scorecards differentiator

Not scored by this record.

Unknown

reporting-channel-profitability differentiator

Not scored by this record.

Unknown

reporting-scheduled-delivery

Not scored by this record.

Unknown

reporting-public-api differentiator

Not scored by this record.

Unknown

reporting-webhooks differentiator

Not scored by this record.

Unknown

reporting-api-not-upcharged differentiator

Not scored by this record.

Unknown

reporting-tier-paywall differentiator

Not scored by this record.

Unknown

reporting-history-retention differentiator

Not scored by this record.

Unknown

reporting-anomaly-alerts differentiator

Not scored by this record.

Unknown

reporting-nl-query

Not scored by this record.

Unknown

reporting-guest-cohorts differentiator

Not scored by this record.

Unknown

reporting-sales-forecast differentiator

Not scored by this record.

Unknown

reporting-tip-tax-compliance

Not scored by this record.

Multi-location, franchise & enterprise governance

No

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

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

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

multi-location-consolidated-reporting

Not scored by this record.

Unknown

multi-location-cross-location-giftcard

Not scored by this record.

Unknown

multi-location-cross-location-loyalty

Not scored by this record.

Unknown

multi-location-multi-brand differentiator

Not scored by this record.

Unknown

multi-location-multi-tax-jurisdiction

Not scored by this record.

Unknown

multi-location-central-labor-policy

Not scored by this record.

Hardware & physical footprint

Unknown

hardware-commodity-devices differentiator

Not scored by this record.

Partial

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

hardware-handheld-purpose-built

Not scored by this record.

Unknown

hardware-handheld-battery-swap differentiator

Not scored by this record.

Unknown

hardware-handheld-lte

Not scored by this record.

Partial

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

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

hardware-kiosk differentiator

Not scored by this record.

Unknown

hardware-drive-thru

Not scored by this record.

Unknown

hardware-printer-compatibility

Not scored by this record.

Unknown

hardware-peripherals

Not scored by this record.

Unknown

hardware-p2pe-terminal

Not scored by this record.

Unknown

hardware-tap-to-phone differentiator

Not scored by this record.

Unknown

hardware-pricing-transparency differentiator

Not scored by this record.

Unknown

hardware-ownership-vs-lease differentiator

Not scored by this record.

Unknown

hardware-usable-after-churn differentiator

Not scored by this record.

Unknown

hardware-rma-sla differentiator

Not scored by this record.

Unknown

hardware-byod

Not scored by this record.

Unknown

hardware-remote-device-management differentiator

Not scored by this record.

Unknown

hardware-selfpour-scales

Not scored by this record.

Unknown

hardware-callerid-integration

Not scored by this record.

Integrations, API & extensibility

No

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

extensibility-api-access-cost differentiator

Not scored by this record.

Unknown

extensibility-free-sandbox differentiator

Not scored by this record.

No

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

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

extensibility-webhook-reliability differentiator

Not scored by this record.

Unknown

extensibility-order-injection-api

Not scored by this record.

Unknown

extensibility-menu-write-api differentiator

Not scored by this record.

Unknown

extensibility-doordash-preferred differentiator

Not scored by this record.

Unknown

extensibility-first-party-delivery-integrations differentiator

Not scored by this record.

Unknown

extensibility-middleware-compatibility

Not scored by this record.

Unknown

extensibility-accounting-connectors

Not scored by this record.

Unknown

extensibility-payroll-export

Not scored by this record.

Unknown

extensibility-app-marketplace

Not scored by this record.

Unknown

extensibility-headless-embedded

Not scored by this record.

Unknown

extensibility-data-portability-exit differentiator

Not scored by this record.

Reliability, offline & operations

Yes

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

reliability-offline-card-auth differentiator

Not scored by this record.

Unknown

reliability-offline-decline-liability differentiator

Not scored by this record.

Unknown

reliability-lan-degraded-multi-terminal differentiator

Not scored by this record.

Unknown

reliability-local-transaction-engine differentiator

Not scored by this record.

Yes

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

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

reliability-sync-conflict-handling

Not scored by this record.

Unknown

reliability-offline-feature-matrix

Not scored by this record.

Unknown

reliability-public-status-page

Not scored by this record.

Unknown

reliability-247-live-support

Not scored by this record.

Unknown

reliability-onsite-install differentiator

Not scored by this record.

Unknown

reliability-menu-build-service differentiator

Not scored by this record.

Unknown

reliability-hardware-replacement-sla

Not scored by this record.

Unknown

reliability-pci-dss-4-attestation

Not scored by this record.

Unknown

reliability-mfa-role-based-access

Not scored by this record.

Unknown

reliability-self-serve-training

Not scored by this record.

Unknown

reliability-failover-terminal-role differentiator

Not scored by this record.

Unknown

reliability-cellular-backup

Not scored by this record.

Commercial, compliance & data ownership

Unknown

commercial-month-to-month-contract differentiator

Not scored by this record.

Unknown

commercial-no-early-termination-fee differentiator

Not scored by this record.

Unknown

commercial-autorenew-terms-published

Free edition is a perpetual download with no subscription term; ORO POS and support contract terms are not published.

F
Unknown

commercial-processing-not-bundled differentiator

Not scored by this record.

Unknown

commercial-interchange-plus-published differentiator

Not scored by this record.

Unknown

commercial-rate-increase-clause differentiator

Not scored by this record.

Partial

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

commercial-module-unbundling differentiator

Not scored by this record.

Partial

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

commercial-hardware-not-locked differentiator

Not scored by this record.

Unknown

commercial-data-export-self-serve

Not scored by this record.

Unknown

commercial-export-customer-and-loyalty differentiator

Not scored by this record.

Unknown

commercial-post-termination-export-window differentiator

Not scored by this record.

Unknown

commercial-data-ownership-clause differentiator

Not scored by this record.

Unknown

commercial-pci-p2pe-tokenization

Not scored by this record.

Unknown

commercial-pci-dss-4-controls

Not scored by this record.

Unknown

commercial-privacy-dsar-tooling

Not scored by this record.

Unknown

commercial-wcag-kiosk-accessibility differentiator

Not scored by this record.

Unknown

commercial-dual-pricing-compliant differentiator

Not scored by this record.

Adversarial verification

An independent pass was instructed to refute this record, defaulting to downgrade when uncertain. It challenged 28 values — 0 upheld, 0 downgraded, 0 upgraded. 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.