Vendors / Open source & self-hostable
Kriolos POS
Kriolos POS (kriolos-obiz)
The most genuinely active project in this open-source batch by commit cadence — merged PRs as recently as 2026-07-29 and a rolling alpha release tagged v1.0.0-alpha-2026-07-12-Cabo-Verde — but its own README still carries a 'IN DEVELOPMENT (NOT RELEASE YET)' warning and it has never cut a stable 1.0, so it is a maintained uniCenta successor rather than a deployable restaurant POS.
scored live legacy rubric
- Claims in scope
- 278
- Scored
- 45
- Assessed
- 44
- Unknown
- 234
- Not applicable
- 36
- Values challenged
- 0
unknown, never as no.Identity
- Owner
- KriolOS Team (community project, GPL-3.0; a continuation of the uniCenta/Openbravo Java POS lineage, related to poolborges/unicenta-pos)
- Who it is for
- Small retail and hospitality operators on the Openbravo/uniCenta Java lineage who want a maintained, GPL-licensed successor to uniCenta rather than a subscription POS
- Site
- https://github.com/kriolos-obiz/kriolos-pos
Pricing
transparency: unknown · unit: free (GPL-3.0, self-hosted) · processor lock-in: no
- Software
- Free and open source under GPL-3.0, self-hosted. No published commercial tiers, subscription, or per-terminal pricing. Distributed as GitHub pre-releases only.
Capabilities
Every claim is binary and checkable. Grades: A primary documentation · B product documentation · C pricing or feature page · D marketing claim · E third-party reporting · F inference with no source. A yes on a differentiator claim requires A or B.
Order capture & FOH workflow
Provides a graphical floor-plan editor where an operator can draw sections, place tables of varying shape/capacity, save multiple floor-plan layouts per location, and assign sections to servers.
order-capture-floor-plan-editor
Not scored by this record.
Order lines can be tagged to a seat number at entry, and the check can be split by seat afterward without re-keying items.
order-capture-seat-level
Not scored by this record.
Items can be assigned to courses and held, with a fire-next-course action available from a handheld or terminal that releases only that course to the kitchen.
order-capture-coursing-hold-fire
Not scored by this record.
Supports splitting a check by item, by seat, by even N-way, and by arbitrary dollar/percentage amount, and merging checks or tables back together, including after partial payment.
order-capture-split-merge
Split and merge both exist, but only in item-move form. btnSplit on the sale panel (enabled when the user holds sales.Total and the ticket has more than one article) opens ReceiptSplit, a two-pane dialog whose only controls are move-one and move-all buttons (jBtnToRightOne/All, jBtnToLeftOne/All) shifting whole lines between the current ticket and one new ticket; on OK the split-off ticket goes straight to payment via closeTicket(). Tables merge in JTicketsBagRestaurantMap: after the 'This will Merge tables' confirmation, every line of the clipboard table's ticket is appended to the target ticket and the source shared ticket is deleted. Shortfall: splitting is by whole line item into exactly two checks per pass - there is no seat concept on a ticket (places.SEATS is table capacity in the floor-plan editor; ticketlines has no seat column), no even N-way split, and no split by arbitrary dollar or percentage amount anywhere in the payment flow. The after-partial-payment case cannot arise at all, because payment closes a receipt: an open ticket carries no payments to split around. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/sales/ReceiptSplit.java · retrieved 2026-08-04
Opens a bar tab against a card pre-authorization with a configurable auth amount, supports incremental re-auth as the tab grows, and auto-closes stale tabs at end of day. differentiator
order-capture-bar-tab-preauth
Not scored by this record.
An open check can be transferred between servers, tables, and devices, and the transfer is recorded in an audit log naming both employees.
order-capture-transfer-audit
Not scored by this record.
Ships a first-party handheld ordering app running natively on the handheld device (not a remote/mirrored desktop session) that can send to kitchen and take a card payment tableside.
order-capture-native-handheld
Not scored by this record.
With the internet down, terminals and handhelds can still create orders, apply modifiers, send to kitchen, and tender cash, and the vendor publishes what does and does not work offline.
order-capture-offline-order-entry
Self-hosted Java desktop POS against a local database; internet is not in the order-entry path. No published offline matrix. https://github.com/kriolos-obiz/kriolos-pos · retrieved 2026-08-01
Guest QR at-table ordering writes items onto the same open check as server-entered items, rather than creating a separate order ticket. differentiator
order-capture-qr-same-check
Not scored by this record.
Offers a first-party self-order kiosk that renders the same menu and modifier tree as the POS with no separate menu build, and the vendor documents ADA/accessibility conformance for it. differentiator
order-capture-kiosk-first-party
Not scored by this record.
Supports drive-thru-specific order flow: order-point/pay-window/pickup-window separation, order sequencing or tandem-lane assignment, and pull-forward or parking-spot assignment.
order-capture-drive-thru
Not scored by this record.
Captures and reports drive-thru speed-of-service timers by segment (order, total, window) tied to individual orders.
order-capture-drive-thru-timers
Not scored by this record.
Vendor ships a first-party AI voice ordering agent for phone and/or drive-thru that injects orders directly as POS orders, or publishes a documented API partner program for third-party voice AI. differentiator
order-capture-voice-ai
Not scored by this record.
Supports order throttling: per-channel capacity limits per time slot with automatic quote-time extension when kitchen load exceeds a configured threshold. differentiator
order-capture-throttling
Not scored by this record.
Accepts future-dated/scheduled orders with a per-channel lead time and automatically injects them into the make queue at a computed fire time rather than on receipt.
order-capture-scheduled-orders
The full Liquibase schema is public. receipts carries only (ID, MONEY, DATENEW, ATTRIBUTES, PERSON), tickets only (ID, TICKETTYPE, TICKETID, PERSON, CUSTOMER, STATUS) and sharedtickets only (ID, NAME, CONTENT, APPUSER, PICKUPID, LOCKED) - there is no future fire-time, promise-time or lead-time column anywhere, so a held ticket cannot be dated forward or auto-fired. The reservations table (CREATED, DATENEW, TITLE, CHAIRS, ISDONE, DESCRIPTION) is a table-booking calendar, not an order. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-03
Provides a distinct catering order flow with quotes, deposits, balance-due tracking, and a delivery/event schedule separate from the standard order queue.
order-capture-catering
Not scored by this record.
Pushes an order-ready signal back to third-party marketplaces (e.g. DoorDash) from POS or KDS state, rather than requiring a tablet tap. differentiator
order-capture-order-ready-signal
Not scored by this record.
Voids, comps, and discounts require a reason code and can be gated behind role-based manager approval, with all instances recorded in an exception report.
order-capture-void-comp-controls
Not scored by this record.
Menu, modifiers & pricing engine
Payments & money movement
The POS operates with third-party payment processors of the merchant's choosing (documented list of supported processors/gateways) rather than requiring the vendor's in-house processing. differentiator
payments-processor-choice
Not scored by this record.
Vendor publishes card-processing pricing publicly (a specific flat rate or interchange-plus markup) rather than quote-only. differentiator
payments-published-rates
Not scored by this record.
Native dual-pricing / cash-discount mode stores two prices per item and prints both cash and card totals on the guest check and receipt. differentiator
payments-dual-pricing
Not scored by this record.
Surcharging engine automatically excludes debit and prepaid cards via BIN/product-code detection, enforces the network percentage cap, and can be enabled or disabled per location. differentiator
payments-surcharge-guardrails
Not scored by this record.
All first-party payment terminals accept EMV chip and NFC contactless including Apple Pay and Google Pay.
payments-emv-nfc
Community software project with no first-party payment terminal line; nothing to certify for EMV or NFC. https://github.com/kriolos-obiz/kriolos-pos · retrieved 2026-08-01
Accepts contactless payments directly on a phone (Tap to Pay on iPhone and/or Android tap-to-pay) with no separate card reader. differentiator
payments-softpos-tap-to-pay
Not scored by this record.
Vendor ships a handheld that takes EMV/NFC payment at the table, including tip prompt and check splitting, without carrying the card away.
payments-pay-at-table
Not scored by this record.
Guest can scan a QR code on the printed check or table tent to view and pay the check from their own phone, with the payment closing the check in the POS automatically. differentiator
payments-qr-guest-pay
Not scored by this record.
Supports both pre-auth-then-tip-adjust and on-device tip prompt flows, with a documented batch/adjust window and a manager screen for unadjusted tips.
payments-tip-adjust
Not scored by this record.
Configurable tip pooling and distribution rules (by hours worked, sales, role percentage, or points) that produce a per-employee tip allocation exportable to payroll. differentiator
payments-tip-pooling
Not scored by this record.
Card payments can be captured while the internet is down via store-and-forward, with configurable per-transaction and cumulative offline limits. differentiator
payments-offline-store-and-forward
Not scored by this record.
Vendor publicly documents who bears the loss when a stored offline transaction declines on reconnect, and surfaces a post-reconnect report of failed offline payments. differentiator
payments-offline-decline-liability
Not scored by this record.
First-party gift cards with real-time balance tracking, redeemable across every location in the group and through the online-ordering channel.
payments-gift-cards
First-party gift vouchers are native, not an integration: a vouchers table (ID, VOUCHER_NUMBER, CUSTOMER, AMOUNT, STATUS CHAR(1)) is created by the shipped changelog, a Vouchers back-office panel issues them, JPaymentVoucher is a first-class tender, and vouchers carries no location column so a voucher is redeemable at any terminal on the shared database. Shortfall: there is no balance. VoucherInfo defines STATUS as a binary flag - 'A' available, 'D' redeemed - with no remaining-balance field, and JPaymentVoucher.setStates() loads the whole AMOUNT and calls moneyEditor.setEnabled(false), so redemption is all-or-nothing: a 50 voucher spent on a 12 ticket is consumed entirely and the 38 is lost. Partial redemption, reload and running-balance tracking therefore do not exist. There is also no online-ordering channel in the product at all (it is a desktop Java POS with no web ordering module), so the redeem-through-online-ordering half of the claim has nothing to run on. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/payment/JPaymentVoucher.java · retrieved 2026-08-04
House/on-account tabs with per-account credit limits, running balance, and periodic statement or invoice generation.
payments-house-accounts
Not scored by this record.
A single check can be settled with multiple tenders and split by seat, by item, by even shares, or by arbitrary amount, with no hard cap below eight ways.
payments-split-tender
Not scored by this record.
Voids, refunds, discounts, and no-sales require role-based authorization (manager PIN or approval) and write to an immutable audit log identifying the approver.
payments-refund-void-controls
Authorization is genuinely role-based: the shipped role files grant discrete permissions sales.RefundTicket, sales.DeleteLines, sales.DeleteTicket, refund.cash/cheque/voucher/magcard, button.opendrawer, button.linediscount and button.totaldiscount, and Role.Employee.xml deliberately omits every refund, delete-ticket and open-drawer entry. Voids and no-sales are logged - JPanelTicket calls dlSystem.execLineRemoved(user name, ticket id, product, units) into the lineremoved table, draweropened records (OPENDATE, NAME, TICKETID), and both blocks print on the close-cash report. Shortfall: the log records the logged-in operator, never an approving manager; there is no per-user approval prompt (the optional override is a single shared static PIN read from the override.pin application property in JPanelTicket.changeCount()); discounts and refunds are written to no audit table at all; and lineremoved/draweropened are ordinary mutable tables with no immutability guarantee. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/Role.Manager.xml · retrieved 2026-08-03
In-product dispute/chargeback dashboard that lists open disputes and allows evidence submission assembled from the POS transaction record. differentiator
payments-chargeback-tooling
Not scored by this record.
Tokenized card-on-file for a guest profile, reusable across online ordering, phone orders, and in-store, with no PAN stored by the merchant. differentiator
payments-card-on-file
Not scored by this record.
Vendor publishes its deposit schedule and offers a next-day or same-day/instant funding option. differentiator
payments-payout-timing
Not scored by this record.
Vendor provides point-to-point encryption and a current PCI DSS 4.x Attestation of Compliance / P2PE listing available to merchants on request.
payments-p2pe-pci4
Not scored by this record.
Kitchen & production
Items route to specific KDS stations by item, category, order type, or revenue center, with routing rules configurable per location without vendor involvement.
kitchen-station-routing
Per-item routing exists and an admin can configure it without vendor involvement: products.PRINTTO is a per-product field rendered in ProductsEditor as a combo box with the fixed values 0-6, script.SendOrder.bs loops the ticket lines and branches on line property product.printer to print templates Printer.Ticket.P1 through P6, and DeviceTicket binds machine.printer.1..6 to actual devices. Shortfalls: (1) the destinations are kitchen printers, not KDS stations - the only KDS code in the tree, KitchenDisplay.java, inserts into a KITCHENDISPLAY table that no changelog ever creates and the class is never instantiated anywhere in the repository, so there is no shipped KDS to route to; (2) routing keys off the product row only - there is no rule by category, order type or revenue centre, so a category-wide change means editing every product; (3) the six destinations are a hard-coded 0-6 enumeration, not an extensible station list; and (4) the printer-to-device binding lives in per-terminal machine.printer.N application properties, so routing is configured per workstation rather than centrally per location. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/script.SendOrder.bs · retrieved 2026-08-04
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
No expo or consolidation view ships. Kitchen routing is per-line only: script.SendOrder.bs branches on line.getProperty('product.printer') values 1-6 and prints Printer.Ticket.P1..P6, while RemoteOrderDisplay.remoteOrderDisplay() deletes and re-inserts one orders row per ticket line carrying a per-line display id, for an external display client that is not part of this repository. Nothing aggregates several stations into one order view and nothing gates order completion on every contributing station having bumped. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/sales/RemoteOrderDisplay.java · retrieved 2026-08-03
Items can be assigned to courses and held, then fired to the kitchen on demand from a server terminal, handheld, or expo screen. differentiator
kitchen-course-firing
Not scored by this record.
Per-item cook times are configurable and the KDS staggers item start/display times so that all items on an order finish simultaneously. differentiator
kitchen-prep-time-pacing
Not scored by this record.
Kitchen load throttling automatically paces or delays release of incoming digital orders, or extends quoted prep times, once a configurable order-volume or ticket-time threshold is crossed. differentiator
kitchen-order-throttling
Not scored by this record.
Pausing a store or 86ing an item from the POS/KDS propagates the pause or availability change back to connected third-party marketplaces (DoorDash, Uber Eats, Grubhub) automatically. differentiator
kitchen-channel-pause-propagation
Not scored by this record.
Bumping an order ready on the KDS sends an order-ready status event back to the third-party marketplace so couriers are dispatched on actual readiness. differentiator
kitchen-order-ready-callback
Not scored by this record.
KDS supports physical bump bars or programmable keypads in addition to touchscreen interaction, with documented supported models.
kitchen-bump-bar-hardware
The kriolos-opos-hardware module enumerates every supported peripheral class - DevicePrinterESCPOS/JavaPOS/Plain/Printer/Null, DeviceFiscalPrinter, DeviceDisplay (ESCPOS, JavaPOS, LED8, PDLED8, SurePOS, serial, window and dual-screen), DeviceScale and DeviceScanner. There is no bump bar, programmable keypad or KDS input device among them, and the strings 'bump' and 'bumpbar' do not occur anywhere in the repository. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-hardware/src/main/java/com/openbravo/pos/printer/DeviceTicket.java · retrieved 2026-08-03
An all-day view aggregates outstanding quantities per item (and per modifier) across all open tickets on the station.
kitchen-all-day-counts
Not scored by this record.
Configurable target cook times per station or order type, with visual color escalation and/or audible alert when a ticket exceeds target.
kitchen-sla-alerts
Not scored by this record.
If a KDS screen or kitchen printer goes offline, tickets automatically fail over to a designated backup printer or screen with no ticket loss. differentiator
kitchen-printer-fallback
Not scored by this record.
KDS continues to receive and display tickets from on-site POS terminals when the internet or cloud backend is unreachable. differentiator
kitchen-offline-operation
Not scored by this record.
Station screens can display item-level build/assembly detail (recipe steps, portioning, or full modifier breakout) rather than only the ticket line text. differentiator
kitchen-item-build-screens
Not scored by this record.
Sectioned/fractional topping placement (halves, quarters, specific sections) is rendered visually and unambiguously on the make-line screen or ticket. differentiator
kitchen-pizza-fractional-display
Not scored by this record.
A bumped ticket can be recalled/unbumped, and an individual item can be refired or reprinted without re-entering the order.
kitchen-recall-refire
Not scored by this record.
Edits made in the POS to an order already displayed in the kitchen visually flag the added, changed, or removed items on the live ticket. differentiator
kitchen-order-modification-alerts
Not scored by this record.
Bumping an order ready triggers a guest-facing notification — SMS/text, app push, or an order-status display board — without a separate product purchase. differentiator
kitchen-guest-ready-notification
Not scored by this record.
Waste, spoilage, and remakes can be logged directly at the kitchen/KDS screen with reason codes, and the entry depletes inventory.
kitchen-waste-logging
Not scored by this record.
Reports actual ticket and per-station times (average and percentile) sliced by daypart, station, and order channel, exportable to CSV or an API.
kitchen-speed-of-service-reporting
Not scored by this record.
Generates prep lists or predicted prep quantities from historical sales and forecast demand, surfaced to kitchen staff as a daily prep task list.
kitchen-prep-forecasting
Not scored by this record.
Delivery, dispatch & third-party channels
Product includes a native in-house driver module: drivers are first-class entities with clock-in/out, assignment state (in-store / on-run / returning), and per-driver run history reportable from the POS itself (not via a third-party add-on).
delivery-driver-roster
The complete GPL source is the product, and it contains no driver concept at all. The shipped Liquibase changelog creates 53 tables and none is a driver, run, dispatch or delivery table; the only staff entities are people (POS operators with role, password and card) and the shifts/shift_breaks timekeeping tables, which carry no assignment-state or run column. A repository-wide search for driver, dispatch, courier and delivery matches only JDBC driver classes, Swing event-dispatch comments, the Courier New font and a supplier delivery-note tooltip. With no driver entity, clock-in state, run history or driver report anywhere in the tree, an in-house driver module does not exist. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-04
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
No dispatch or expo board ships anywhere in the source. The only order-display code is RemoteOrderDisplay, which deletes and re-inserts one orders row per ticket line for an external display client that is not part of the repository - it shows nothing itself and knows nothing about drivers. The schema has no dispatch, run or driver table to drive such a board, no undispatched-order state, no elapsed-time tracking beyond the ticket timestamp, and no structure for batching multiple orders into one run. The sales screens in kriolos-opos-app are the register, the floor-plan map (JTicketsBagRestaurantMap) and the shared-ticket list; there is no dispatch view among them. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/sales/RemoteOrderDisplay.java · retrieved 2026-08-04
Dispatch includes a live map view with geocoded stops and system-generated route sequencing (turn order optimization) for a multi-stop run, not just a static address list. differentiator
delivery-route-map
Not scored by this record.
Captures live driver GPS position from a driver-facing mobile app and surfaces it back to the dispatch screen. differentiator
delivery-driver-tracking
Not scored by this record.
Delivery areas can be defined as arbitrary map polygons or by drive-time isochrones, not solely as a radius or a ZIP/postcode list. differentiator
delivery-zones-polygon
Not scored by this record.
Each delivery zone carries its own independently configurable delivery fee, order minimum, and quoted promise time, applied automatically from the validated customer address.
delivery-zone-pricing
There is no delivery entity in the schema at all - no zone, fee, promise-time or dispatch table. Guest addresses live as free text on customers (ADDRESS, ADDRESS2, POSTAL, CITY, REGION, COUNTRY) with no geocoding, zone assignment or per-zone fee/minimum, so a delivery charge can only be rung in as an ordinary product line. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-03
Address entry is validated/geocoded against a mapping service at order time and rejects or flags out-of-zone addresses before the order is accepted.
delivery-address-validation
Not scored by this record.
Tracks per-delivery driver compensation inputs — mileage or distance driven per run, per-delivery flat reimbursement, and driver-retained tips — and exports them to payroll as separate reimbursement vs. wage lines. differentiator
delivery-driver-comp
Not scored by this record.
Provides a driver cash bank / settle-up flow that reconciles cash collected, orders assigned, and tips owed at end of shift, producing a per-driver over/short figure.
delivery-cash-reconcile
Not scored by this record.
Can hand a first-party order to an on-demand courier marketplace (DoorDash Drive, Uber Direct, Nash, Relay or equivalent) natively from the POS, with the courier quote and status returning into the order record.
delivery-daas-dispatch
Not scored by this record.
Supports hybrid dispatch: rules that automatically overflow an order to a DaaS courier when no in-house driver is available, out of zone, or past a wait threshold. differentiator
delivery-daas-fallback
Not scored by this record.
Offers direct, first-party certified API integrations with DoorDash, Uber Eats, and Grubhub marketplaces (vendor-owned, not solely resold through Otter/Deliverect/Chowly/ItsaCheckmate middleware). differentiator
delivery-3p-direct-integration
Not scored by this record.
Third-party marketplace orders inject automatically into the POS as normal tickets that fire to KDS/printers without tablet re-keying or manual accept.
delivery-3p-injection
Not scored by this record.
Marking an item or modifier 86'd in the POS pushes item-level out-of-stock status to connected third-party channels in near real time, and restores it on availability (DoorDash requires item and item-option 86ing of new POS partners).
delivery-86-sync
Not scored by this record.
Store can be paused/deactivated on each connected third-party marketplace from inside the POS with a timed auto-reactivation, rather than only from each marketplace's own tablet or portal.
delivery-store-pause
Not scored by this record.
Produces a third-party reconciliation report matching marketplace payout deposits to POS-recorded 3P sales, itemizing commission, marketing fees, refunds/adjustments, and identifying missing or unpaid orders. differentiator
delivery-3p-reconciliation
Not scored by this record.
Vendor exposes integration health to the operator — failed/rejected order injections, connection status per channel, and alerts on failure — rather than failing silently. differentiator
delivery-injection-error-visibility
Not scored by this record.
Guests receive a branded order status / driver tracking page or SMS link on the restaurant's own domain for first-party delivery orders, driven by real order and driver state.
delivery-tracking-page
Not scored by this record.
Quoted delivery promise times adjust dynamically from current kitchen load, driver availability, and zone drive time, rather than a fixed per-store constant. differentiator
delivery-promise-time
Not scored by this record.
Vendor documents explicit offline behavior for delivery: whether cash delivery orders, driver assignment, and driver settlement continue during an internet outage.
delivery-offline-behavior
Not scored by this record.
Digital ordering & guest-facing channels
Vendor ships a first-party, commission-free web ordering site on the restaurant's own branding/domain that writes orders directly into the POS with no per-order marketplace commission.
digital-first-party-web
The Maven reactor enumerates the entire product - kriolos-opos-spi, assets-reports, assets-image, thirdparty, base, hardware, domain, i18n, i18n_pt, lib-report, app, jpackage and docs - and none of these modules is or contains a web server, ordering site or HTTP endpoint; the application is a Swing desktop POS. The only e-commerce traces in the tree are three author comments inherited from uniCenta ('outline/prep for eCommerce connector' in OrderCustomerList, OrderSupplierList and TicketSelector) marking scaffolding that was never built. There is no first-party web ordering channel of any kind, commissioned or not. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/pom.xml · retrieved 2026-08-04
Vendor offers a branded native iOS and Android ordering app (published under the restaurant's own brand in the App Store/Play Store), not only a mobile web page or a shared multi-restaurant marketplace app. differentiator
digital-native-app
Not scored by this record.
Guests can create an account with saved addresses, saved (tokenized) payment methods, and one-tap reorder of a previous order across first-party channels.
digital-account-saved-payment
The product is a Java desktop application with no guest-facing channel: the Maven reactor is app, base, domain, hardware, i18n, jpackage, lib-report, spi, thirdparty and asset modules, with no web or ordering server. There is no card-on-file vault - payments stores per-transaction TRANSID, CARDNAME and RETURNMSG with no customer token relation - and no guest login, saved address or reorder concept exists in the schema. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-03
Digital checkout presents configurable or algorithmic upsell/cross-sell suggestions (rules-based add-ons or personalized recommendations from order history), with attach-rate reporting on those suggestions. differentiator
digital-upsell-engine
Not scored by this record.
Supports future/scheduled orders with per-daypart throttling — capacity limits on orders or items per time slot that automatically close slots when the kitchen is saturated.
digital-scheduled-pacing
Not scored by this record.
Single digital ordering flow supports pickup, curbside (with arrival check-in), dine-in/QR table ordering, and delivery, with mode-specific fees and prep timing.
digital-fulfillment-modes
Not scored by this record.
Supports guest-facing QR scan-to-order and/or scan-to-pay at the table that opens or attaches to the existing POS check, including splitting and tipping.
digital-qr-table
Not scored by this record.
Vendor ships a self-order kiosk running the same menu and modifier logic as the POS, with accessibility-compliant UI and unattended EMV payment. differentiator
digital-kiosk
Not scored by this record.
Supports group ordering: a shareable link where multiple participants add their own items to one order under a per-person or total spend cap, with split or single payment.
digital-group-ordering
Not scored by this record.
Offers a distinct catering ordering flow with separate catering menu/minimums, lead-time rules, quotes or proposals, deposits, and invoice/house-account or ACH payment terms. differentiator
digital-catering-portal
Not scored by this record.
Vendor offers AI voice phone ordering (native or a named certified partner) that answers inbound calls and injects the completed order into the POS without staff transcription. differentiator
digital-voice-ai-phone
Not scored by this record.
Supports AI voice ordering at the drive-thru lane, integrated with the POS menu/modifiers and with escalation-to-human handoff.
digital-drivethru-ai
Not scored by this record.
Supports conversational SMS or chat ordering/reordering (text-to-order or text-a-link) that lands in the POS.
digital-sms-ordering
Not scored by this record.
Supports Order with Google — the restaurant's direct ordering link is provisioned to the Google Business Profile as an ordering option (ideally set as 'Preferred by Business'), rather than leaving marketplace links as the only choice. differentiator
digital-google-order
Not scored by this record.
Supports Apple Business Connect ordering placement — an 'Order Food' custom action on the Apple Maps place card pointing at the vendor's first-party ordering flow.
digital-apple-business-connect
Not scored by this record.
Loyalty accrual and redemption work inside the first-party digital ordering flow using the same guest identity as in-store, not as a separate post-purchase enrollment.
digital-loyalty-attach
Not scored by this record.
Supports guest subscription / membership programs (recurring billing for a delivery-fee waiver, a per-period item entitlement, or a paid loyalty tier) managed in the platform.
digital-subscriptions
Not scored by this record.
Discounts, coupon codes, and loyalty offers are defined once and honored identically across POS, kiosk, and first-party digital channels, with channel eligibility controls.
digital-promo-parity
Not scored by this record.
Vendor documents that the operator owns and can export first-party guest records (email, phone, consented marketing status, order history) in bulk, without a fee or vendor approval. differentiator
digital-guest-data-ownership
Not scored by this record.
Digital checkout uses vendor-hosted fields or a hosted payment page so card data never touches the restaurant's page, with the vendor publishing PCI DSS 4.0 compliance (including the client-side script-integrity requirements effective March 2025) and supporting 3DS.
digital-checkout-pci-sca
Not scored by this record.
Digital channels support the same service-fee / dual-pricing / card-surcharge configuration as the POS, with the required guest-facing disclosure and correct handling of jurisdictions and card brands where surcharging is prohibited. differentiator
digital-surcharge-transparency
Not scored by this record.
Guest data, loyalty & marketing
Maintains a single guest profile that automatically merges transactions from in-store POS, first-party web/app ordering, and kiosk under one identity (phone or email match), with documented dedup/merge behavior.
guest-loyalty-unified-profile
customers is the only guest record and it can only be populated from the POS; there is no first-party web, app or kiosk channel in the product to merge from, and no dedup or merge machinery in the schema - no alias, match or merge table, and CARD, EMAIL and PHONE are plain nullable columns with no uniqueness or match rule. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-03
Orders arriving from third-party marketplaces (DoorDash, Uber Eats, Grubhub) attach to a native guest profile with usable guest identity rather than landing as anonymous tickets. differentiator
guest-loyalty-thirdparty-identity-attach
Not scored by this record.
Supports at least two of points-per-dollar, visit/punch-count, and spend-tier accrual as configuration, without custom development or a bolt-on loyalty vendor.
guest-loyalty-accrual-models
The schema contains no points, visit, punch, tier or accrual table. The only guest-value constructs are customers.DISCOUNT (a flat per-customer percentage), customers.ISVIP, the MAXDEBT/CURDEBT house-account fields, and vouchers(ID, VOUCHER_NUMBER, CUSTOMER, AMOUNT, STATUS), which is stored value rather than an accrual program. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-03
Supports status tiers with automatic promotion and demotion driven by rolling-window spend or visit counts. differentiator
guest-loyalty-tiers
Not scored by this record.
Documents explicitly what loyalty lookup, accrual, and redemption do when the POS loses connectivity (queue-and-reconcile vs blocked). differentiator
guest-loyalty-offline-behavior
Not scored by this record.
Offer/discount engine exposes explicit stacking and precedence rules (exclusive vs combinable, order of application) as configuration. differentiator
guest-loyalty-offer-stacking-rules
Not scored by this record.
Offers can be issued to a dynamically defined audience (rules over recency, frequency, spend, or items purchased) rather than only broadcast to the whole list. differentiator
guest-loyalty-targeted-offers
Not scored by this record.
Automatically computes recency/frequency/monetary or equivalent lifecycle segments (new, regular, at-risk, lapsed, VIP) without the operator building the queries. differentiator
guest-loyalty-rfm-segmentation
Not scored by this record.
Ships triggered lifecycle automations (birthday, first-visit thank-you, lapsed win-back) as configurable always-on campaigns rather than one-off manual sends.
guest-loyalty-lifecycle-automation
No campaign, message, segment or scheduler table exists in the schema and no mail or SMS transport ships in any module, so birthday, first-visit and lapsed win-back automations cannot be configured. customers does not even carry a birth date column. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-03
Sends both email and SMS campaigns natively from the platform, not solely by handing the list to a third-party ESP. differentiator
guest-loyalty-native-email-sms
Not scored by this record.
Captures per-channel marketing consent with timestamp and source of consent, and honors revocation received by any reasonable means (not just the STOP keyword) across all channels.
guest-loyalty-consent-management
Not scored by this record.
Handles or explicitly documents A2P 10DLC brand and campaign registration required for the operator to send SMS through the platform.
guest-loyalty-10dlc-registration
Not scored by this record.
Reports redemption and incremental sales attributable to a specific campaign or offer, tying redeemed offers to actual check totals. differentiator
guest-loyalty-campaign-attribution
Not scored by this record.
Provides self-serve export of the full guest list and transaction history, including contact PII, via CSV or API, without a vendor fee or support ticket. differentiator
guest-loyalty-data-export-portability
Not scored by this record.
Triggers post-transaction feedback requests and routes responses by score, sending low scores to private service recovery and high scores toward public review sites. differentiator
guest-loyalty-review-capture-routing
Not scored by this record.
Includes a native referral mechanic with per-guest codes or links, attribution of the referred guest's first order, and two-sided rewards.
guest-loyalty-referral-program
Not scored by this record.
Issues an Apple Wallet or Google Wallet loyalty pass with push-updatable balance, as an alternative to requiring a branded app download. differentiator
guest-loyalty-wallet-pass
Not scored by this record.
Provides admin tooling to fulfill guest data access and deletion requests (CCPA/CPRA-style) including deletion propagation to loyalty and marketing records.
guest-loyalty-privacy-rights-tooling
Not scored by this record.
Enforces loyalty fraud controls such as redemption velocity limits, manager approval on manual point adjustments, and flagging of employee self-redemption, with an audit log.
guest-loyalty-redemption-fraud-controls
Not scored by this record.
Vendor documents AI/ML-generated recommendations for offer content, target audience, or send timing (claim-level; verify it is a shipped product feature, not a roadmap statement). differentiator
guest-loyalty-ai-offer-recommendation
Not scored by this record.
Offers native stored-value/gift card balances tied to the same guest profile and redeemable across all locations of the brand.
guest-loyalty-stored-value-gift
Not scored by this record.
Labor & workforce
Employees clock in and out at the POS terminal using a PIN, badge, or card, with no separate time-clock hardware required.
labor-clock-in-at-pos
JPanelEmployeePresence is a POS-resident panel with Check In and Check Out buttons plus a row of configurable break buttons; DataLogicPresenceManagement writes INSERT INTO shifts(ID, STARTSHIFT, PPLID) and UPDATE shifts SET ENDSHIFT = ? WHERE ENDSHIFT IS NULL AND PPLID = ?, with breaks recorded in shift_breaks(SHIFTID, BREAKID, STARTTIME, ENDTIME). Identification is the POS login itself - people carries APPPASSWORD and CARD, so PIN or magnetic card - and no separate time-clock hardware is required. The epm_dailypresence, epm_dailyschedule and epm_performance reports read the same tables. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/epm/JPanelEmployeePresence.java · retrieved 2026-08-03
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.
Records time punches while the POS is offline and reconciles them on reconnect without loss or duplicate entries, with the behavior documented. differentiator
labor-offline-time-punch
Not scored by this record.
Permissions are grantable per discrete action (void, comp, discount, refund, drawer open, price change, report access) per role and per location, not limited to fixed cashier/manager/admin tiers.
labor-granular-rbac
Permissions are per discrete action rather than fixed tiers: role XML grants individual entries including sales.Override, sales.DeleteLines, sales.EditLines, sales.EditTicket, sales.RefundTicket, sales.DeleteTicket, sales.ChangeTaxOptions, sales.Total, button.opendrawer, button.linediscount, button.totaldiscount, per-tender payment.* and refund.* entries, and one entry per report script (e.g. /com/openbravo/reports/sales_cashflow.bs), all checked at runtime through m_App.hasPermission(...). Roles are editable in the Roles admin panel. Shortfall: grants are global to the role - roles(ID, NAME, PERMISSIONS) has no location column and people(ROLE) assigns exactly one role per user with no location scoping, so per-location permission grants cannot be expressed. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/Role.Employee.xml · retrieved 2026-08-03
Manager overrides and approvals are attributed to the individual approver and written to an immutable audit trail queryable after the fact.
labor-manager-override-audit
The only override mechanism is JPanelTicket.changeCount(), which reads a single shared static PIN from the override.pin application property and compares it against a JPasswordDialog entry ('Enter PIN Number' / 'PIN Number Incorrect'). It is one secret shared by all managers, it is tied to no user record, and nothing is persisted on success - no row, no timestamp, no approver identity. The sales.Override permission itself only widens shared-ticket visibility in JTicketsBagShared. lineremoved and draweropened record the operator who acted, never an approver. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/sales/JPanelTicket.java · retrieved 2026-08-03
Builds and publishes employee shift schedules inside the same platform that holds the timekeeping data, rather than requiring a third-party scheduling app. differentiator
labor-native-scheduling
Not scored by this record.
Generates recommended staffing levels or labor hours by daypart from the operator's own POS sales history, not just a static template. differentiator
labor-demand-labor-forecast
Not scored by this record.
Displays labor cost as a percentage of sales in real time during service on a manager view or POS, not only in end-of-day or next-morning reports. differentiator
labor-realtime-labor-percent
Not scored by this record.
Warns or blocks at clock-in when an employee is approaching or would cross a configured overtime threshold, before the overtime is incurred. differentiator
labor-overtime-prevention
Not scored by this record.
Configures meal and rest break rules per state or jurisdiction, prompts required break attestation, and flags missed breaks for premium pay. differentiator
labor-break-compliance-by-state
Not scored by this record.
Enforces minor-labor restrictions (age-based maximum hours, prohibited time windows, school-day limits) at both scheduling and clock-in.
labor-minor-labor-rules
Not scored by this record.
Computes tip pooling and tip-outs automatically per shift from configurable rules (percentage of sales, hours worked, points, or role), rather than requiring a manual spreadsheet.
labor-tip-pooling-rules
Not scored by this record.
Retains a per-shift, per-employee record of tips received, amounts contributed to the pool, and amounts distributed from the pool, exportable for audit.
labor-tip-distribution-audit-trail
Not scored by this record.
Payroll export separates cash from charged qualified tips and carries a Treasury tipped-occupation code, supporting the W-2 Box 12 code TP and Box 14b reporting required for tax year 2026. differentiator
labor-qualified-tips-w2-reporting
Not scored by this record.
Vendor processes payroll itself as a first-party product (tax filing and direct deposit), as opposed to exporting to a third-party payroll provider only. differentiator
labor-native-payroll
Not scored by this record.
Exports timecards, wages, and tips in documented formats or via direct integration for at least two major payroll providers (e.g. Gusto, ADP, Paychex, QuickBooks).
labor-payroll-export-formats
Not scored by this record.
Employees can request shift swaps or claim open shifts in a self-service app, subject to a manager approval workflow that enforces overtime and role eligibility. differentiator
labor-shift-swap-workflow
Not scored by this record.
Reports per-employee sales performance metrics (average check, items or category attachment rate, void and comp rate) by server or cashier. differentiator
labor-server-performance-metrics
Not scored by this record.
Inventory, purchasing & cost control
Supports multi-level recipe/BOM costing where a recipe can contain sub-recipes (prep items) and plate cost recalculates automatically when any component ingredient's cost changes.
inventory-recipe-bom-costing
The multi-level structure is real: products_bundle (ID, PRODUCT, PRODUCT_BUNDLE, QUANTITY) defines a component list per product, and DataLogicSales.adjustStock() calls getProductsBundle() and recurses into each component, multiplying quantity at each level, so a bundle whose component is itself a bundle explodes all the way down to raw stock on sale. Shortfall: none of it is costing. Nothing in the tree rolls component cost up to a parent - products.PRICEBUY is a hand-entered per-row field, and every reference to it (StockDiaryEditor, StockManagement, the inventory and label reports) reads it as stored; no code computes a parent's PRICEBUY or a plate cost from its components, so changing an ingredient cost updates nothing upstream. The bundle explosion in deleteTicket() even values components at getPriceSell(), not cost. There is no yield or conversion factor to cost against either: UomEditor is a single name field. Plate cost must be maintained by hand exactly as the claim warns against. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-domain/src/main/java/com/openbravo/pos/forms/DataLogicSales.java · retrieved 2026-08-04
Stores purchase unit, recipe unit, and count unit per item with explicit conversion factors, plus a yield/waste percentage applied to raw-to-usable conversion.
inventory-unit-conversion-yields
The unit-of-measure editor exposes a single field, name (UomEditor declares only m_jName), and the uom table is (ID, NAME). products references one uom column plus scalar STOCKCOST, STOCKVOLUME and STOCKUNITS. There is no purchase/recipe/count unit distinction, no conversion factor between units, and no yield or waste percentage field anywhere in the schema. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/inventory/UomEditor.java · retrieved 2026-08-03
Produces a theoretical-vs-actual usage variance report per item for a defined count period, showing theoretical usage from POS sales times recipe, actual usage from counts plus receipts, and the variance in both units and currency. differentiator
inventory-theoretical-vs-actual
Not scored by this record.
Depletes ingredient on-hand quantities in near real time as orders are fired at the POS, including depletion driven by modifier selections, not only in an end-of-day batch. differentiator
inventory-realtime-depletion
Not scored by this record.
Automatically 86s (marks unavailable) menu items on the POS, online ordering, and connected third-party delivery menus when a component ingredient hits zero or a configured threshold. differentiator
inventory-86-auto-sync
Not scored by this record.
Supports full physical inventory, ad-hoc spot counts of a subset, and scheduled recurring cycle counts, with each count's variance recorded as separate history rather than overwriting prior counts.
inventory-count-modes
The movement-reason enumeration is closed and complete - IN_PURCHASE, IN_REFUND, IN_MOVEMENT, OUT_SALE, OUT_REFUND, OUT_BREAK, OUT_MOVEMENT, OUT_SAMPLE, OUT_FREE, OUT_USED, OUT_SUBTRACT, OUT_CROSSING - and contains no stocktake or count reason. The schema has no count-session table either: stockdiary is a flat movement log and stockcurrent holds only (LOCATION, PRODUCT, ATTRIBUTESETINSTANCE_ID, UNITS). A physical count can therefore only be keyed in as Adjust Add / Adjust Subtract movements, with no full-count, spot-count or scheduled cycle-count workflow and no per-count variance history. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-domain/src/main/java/com/openbravo/pos/inventory/MovementReason.java · retrieved 2026-08-03
Provides a mobile/tablet counting app supporting barcode or QR scanning that continues to accept counts with no network connectivity and syncs on reconnect.
inventory-mobile-count-offline
Not scored by this record.
Ships pre-built electronic vendor catalog and order-transmission integrations with named broadline distributors (e.g. Sysco, US Foods, Performance Food Group) that send purchase orders and receive invoices electronically rather than by emailed PDF. differentiator
inventory-vendor-catalogs-edi
Not scored by this record.
Ingests supplier invoices from photo, PDF, or email and extracts line-item detail (item, quantity, unit, price) into the inventory ledger without manual line entry. differentiator
inventory-invoice-ocr
Not scored by this record.
Tracks per-item purchase price history across invoices and alerts when a received price exceeds the prior or contracted price by a configurable threshold. differentiator
inventory-price-change-alerts
Not scored by this record.
Maintains par levels per item per location and generates suggested purchase order quantities from on-hand versus par, with at least one mode driven by a sales forecast rather than a static par. differentiator
inventory-par-auto-suggest
Not scored by this record.
Provides a structured waste/spoilage logging workflow with reason codes that debits inventory and reports waste cost separately from usage variance.
inventory-waste-logging
Not scored by this record.
Tracks expiration or use-by dates on received and prepped items and surfaces an expiring-soon report or alert before spoilage.
inventory-shelf-life-expiry
Not scored by this record.
Supports partial-bottle liquid inventory by weight (scale integration) or by bottle fraction for bar and beverage counting.
inventory-bar-partial-bottle
Not scored by this record.
Exports period COGS and accounts-payable invoice detail in a named accounting system's import format (e.g. QuickBooks, Sage Intacct, NetSuite) with GL account mapping configurable per item category.
inventory-cogs-gl-export
Not scored by this record.
Inventory and recipe costing are delivered natively by the POS vendor rather than requiring a separately-contracted third-party product (e.g. MarginEdge, MarketMan, Restaurant365) to function. differentiator
inventory-native-not-partner
Not scored by this record.
Reporting, BI & data access
Provides a live sales dashboard reflecting transactions within minutes of the sale, accessible from both a browser and a mobile app off-premise.
reporting-realtime-dashboard
CLAIM: live sales dashboard within minutes, from both a browser and a mobile app off-premise. VERDICT: no/A. POSITIVE EVIDENCE OF ABSENCE: kriolos-opos-mobile README.adoc (commit d8226fc) "WARNING: NO Code, only public docs and roadmap for partners", "This repository will not container source code", "Future Plans * Android Play store ... * Apple Store", with "Cloud SaaS * BackOffice UI: React" listed as a plan; its OpenAPI draft specs/kriolos-pos-spec-1.0.0-DRAFT.json enumerates 15 paths (/api/bpartners, /api/catalog*, /api/categories*, /api/notifications, /api/products*) -- no sales or report path. kriolos-opos-webapi (commit 39c47ec): SalesOrdersController is an empty class ('@RequestMapping("/api/salesorder") public class SalesOrdersController { }'). kriolos-pos (commit f3455ce) docs/guide-migration/implementation_plan.adoc: "The UI is built on Swing, which is mature but dated. Consider modernizing if a web or mobile interface is desired in the future." BOUND: the kriolos-obiz org reports public_repos 5 (kriolos-pos, kriolos-obiz, kriolos-opos-mobile, kriolos-opos-webapi, .github profile), all four non-empty repos listed via api.github.com git/trees/<sha>?recursive=1 (truncated=false for each) and read from raw.githubusercontent.com at that sha, no git clone. CONTROLS: tokenised, case-insensitive over 1,277 source/doc files (java, xml, bs, properties, adoc, form, json, md, yml) in kriolos-pos + webapi + mobile, and all 40 text files (of 59 blobs) of kriolos-obiz: 'dashboard(s)' 0, 'realtime' 0, 'browser' 0. POISON: 'live' 4 = "label.StripeLiveKey"/JavaPOS; 'mobile' 20 = "label.phone2=Mobile Phone" and the no-code mobile README; 'cloud' = a Formats.java symbol. Reports are JasperReports .jrxml run inside the Swing desktop app. Retrieved 2026-09-16. https://github.com/kriolos-obiz/kriolos-opos-mobile/blob/d8226fcd6a33516ba8fc9b4670c524f63882bdfc/README.adoc · retrieved 2026-09-16 adversarially verified
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
Printer.CloseCash.xml produces one close-cash document per cash session covering payments broken out by tender type with amounts, Total Sales, number of payments, a tax-analysis line per tax rate, a Line Voids block (ticket, user, product, units) from lineremoved, a No Sales block (user, ticket) from draweropened, receipt count, SubTotal / Taxes / Totals, and closed-by user, terminal, sequence and start/end date. Shortfall: no tip total is printed even though payments.TIP is stored, no discount total appears, and there is no counted-cash versus expected-cash reconciliation line, so the deposit still has to be derived off the report. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/Printer.CloseCash.xml · retrieved 2026-08-03
Provides a product mix (PMIX) report at individual menu item AND modifier level with quantity, gross and net sales, filterable by daypart and revenue center.
reporting-pmix-modifier-level
sales_extproducts.bs is a real product-mix report: it groups ticketlines by product reference and name (and category and customer) returning SUM(UNITS) as TOTALunits with TOTALnet, TOTALtax and TOTALgross, filterable by date interval, customer and product/category. Shortfall: it is item-level only. Modifiers are stored as an opaque ATTRIBUTES blob on ticketlines and are never joined or aggregated by any shipped report, and the only time filter is a start/end datetime interval - there is no daypart grouping, and the schema has no revenue-centre concept to filter on. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-assets-reports/src/main/resources/com/openbravo/reports/sales_extproducts.bs · retrieved 2026-08-03
Produces an audit report of comps, voids, discounts, and price overrides attributed to the employee who applied them and the manager who approved them, with reason codes and timestamps.
reporting-comps-voids-audit
Not scored by this record.
Reports cash over/short per drawer, per shift, and per employee, comparing counted cash to expected cash from tendered transactions and paid-outs.
reporting-cash-over-short
Not scored by this record.
Reports sales per labor hour and labor cost as a percentage of sales by hour, by department, and by employee, using actual clocked hours from the POS time clock.
reporting-labor-productivity
Not scored by this record.
Reports per-server metrics including average check, items per check, attachment rate for named categories, and tips as a percentage of sales. differentiator
reporting-server-scorecards
Not scored by this record.
Reports revenue and margin by fulfillment channel — dine-in, direct online, first-party delivery, and each third-party marketplace separately — net of marketplace commission fees. differentiator
reporting-channel-profitability
Not scored by this record.
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.
Publishes a documented public REST or GraphQL API covering orders, payments, menu, and labor data, with self-service developer credentials obtainable without a signed partner agreement. differentiator
reporting-public-api
Not scored by this record.
Emits outbound webhooks for order and payment lifecycle events to a customer-supplied endpoint, with documented retry behavior and payload signature verification. differentiator
reporting-webhooks
Not scored by this record.
API and raw-data access are included in the standard subscription rather than gated behind an additional per-location fee, revenue share, or enterprise-only contract. differentiator
reporting-api-not-upcharged
Not scored by this record.
Core reporting beyond basic sales summaries — labor vs sales, PMIX, comps/voids audit, multi-location comparison — is available on the entry-level paid plan rather than requiring a higher tier or an add-on analytics SKU. differentiator
reporting-tier-paywall
Not scored by this record.
Documents a historical retention window of at least 24 months of transaction-level detail queryable in the reporting UI, with no silent truncation or archive retrieval fee. differentiator
reporting-history-retention
Not scored by this record.
Sends proactive push or email alerts when an operator-configured metric breaches a threshold or deviates from its historical pattern (e.g. void spike, sales below forecast, discount rate anomaly). differentiator
reporting-anomaly-alerts
Not scored by this record.
Offers a natural-language query or AI assistant that answers ad-hoc questions against the operator's own sales and labor data and returns a figure or chart, not a generic help-article response.
reporting-nl-query
Not scored by this record.
Reports guest-level analytics including new versus returning guest counts, visit frequency, and lifetime spend cohorts tied to identifiable guest records from loyalty or online ordering. differentiator
reporting-guest-cohorts
Not scored by this record.
Produces a forward sales forecast at daypart or hourly granularity from the location's own history, exposed in the reporting UI and consumable by scheduling or ordering workflows. differentiator
reporting-sales-forecast
Not scored by this record.
Generates payroll- and tax-ready tip reporting: declared versus charged tips per employee, tip pool distribution detail, and a tax liability summary by jurisdiction.
reporting-tip-tax-compliance
Not scored by this record.
Multi-location, franchise & enterprise governance
Supports a named organizational hierarchy of at least three levels (e.g. enterprise > region/group > location) as a first-class object that reporting and permissions can be scoped to, not just a flat list of locations.
multi-location-org-hierarchy
locations is (ID, NAME, ADDRESS) with no parent, group or level column, and nothing else in the schema references a location grouping. It is a flat warehouse list used for stock movements; there is no enterprise/region/location hierarchy for reporting or permissions to be scoped to. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-03
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
products carries exactly one PRICEBUY and one PRICESELL and there is no price-list, price-tier or channel-price table in the schema; ticketlines stores the resolved PRICE per line. The only price-variation mechanisms are customers.DISCOUNT (a flat percentage on one guest) and the isvprice variable-price flag, so per-location-group, per-channel or per-daypart pricing requires duplicating the product. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml · retrieved 2026-08-03
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.
Gift cards issued at one location are redeemable at any other location in the brand, with a reported outstanding-liability balance and inter-store settlement/redemption reconciliation between owners.
multi-location-cross-location-giftcard
Not scored by this record.
A single customer loyalty profile, balance, and stored order history is shared across all locations in the brand rather than being per-location.
multi-location-cross-location-loyalty
Not scored by this record.
A single location/terminal can operate two or more distinct brands or virtual brands with separate menus, receipts/branding, and separately reportable revenue, on the same hardware and drawer. differentiator
multi-location-multi-brand
Not scored by this record.
Tax configuration is per-location with support for multiple simultaneous tax rates, jurisdiction-specific rules (e.g. prepared-food vs grocery, inclusive vs exclusive tax), and per-location tax exemptions.
multi-location-multi-tax-jurisdiction
Not scored by this record.
Labor rules (overtime, break enforcement, predictive-scheduling compliance) are configurable per location or location group and enforced at the terminal, not just reported after the fact.
multi-location-central-labor-policy
Not scored by this record.
Hardware & physical footprint
The POS software runs on commodity off-the-shelf hardware (standard iPads, Android tablets, or PCs) that the operator can buy from a third party, rather than only on vendor-supplied proprietary terminals. differentiator
hardware-commodity-devices
Not scored by this record.
Vendor documentation names the specific client operating systems supported (iOS/iPadOS, Android, Windows, Linux/web) and states minimum OS versions and device specs.
hardware-os-platforms
CLAIM: docs name the client OSs AND state minimum OS versions and device specs. VERDICT: partial/B. EVIDENCE: README.adoc (commit f3455ce) names three desktop OSs with per-OS config paths: "Windows: %APPDATA%/KriolOS/kriolos-opos.properties", "Linux: ~/.local/share/kriolos/kriolos-opos.properties", "macOS: ~/Library/Application Support/KriolOS/kriolos-opos.properties", with separate "Example Compile and Execute (windows powershell/Terminal)" and "(Linux/Unix Bash)" recipes and a "Linux Issue" section. Runtime floor from source (grade A): pom.xml maven-enforcer "requireJavaVersion [17,)" / "This project requires JDK 17 or higher to build!"; kriolos-opos-jpackage/pom.xml has jpackage-windows (MSI, EXE) and jpackage-macos (DMG, PKG) profiles and Linux deb options (linuxDebMaintainer). SHORTFALL: no minimum OS version and no device spec (CPU/RAM/screen) anywhere in the held docs corpus (docs/guide-user, guide-devel, guide-comercial, guide-migration -- all 29 .adoc files read; 'minimum'/'requirement' hit only OSGi "capabilities and requirement"; the one resolution is a config comment "Maximum Category height for 1024x768"); no iOS/Android client exists (kriolos-opos-mobile README "NO Code"). The latest release v1.0.0-alpha-2026-07-12-Cabo-Verde ships a cross-platform dist.zip, not per-OS installers. RETRIEVAL: api.github.com git/trees/<sha>?recursive=1 (truncated=false) + raw.githubusercontent.com; release asset list via api.github.com; no git clone. Retrieved 2026-09-16. https://github.com/kriolos-obiz/kriolos-pos/blob/f3455ce560ace1d17704478ae36ec7f2d994c210/README.adoc · retrieved 2026-09-16 adversarially verified
Offers a purpose-built handheld ordering device with an integrated card reader (not a phone case add-on), with published drop rating and IP ingress rating.
hardware-handheld-purpose-built
Not scored by this record.
The handheld supports hot-swappable or field-replaceable batteries, or the vendor publishes a rated battery life for a full shift. differentiator
hardware-handheld-battery-swap
Not scored by this record.
Handhelds support cellular/LTE connectivity as a documented fallback when store Wi-Fi drops, either built into the device or via a vendor-supplied failover.
hardware-handheld-lte
Not scored by this record.
Terminals continue to take orders, print to kitchen, and record cash sales with the internet down, and the vendor documents explicitly which functions degrade (card auth, loyalty lookup, refunds).
hardware-offline-mode
On-premise architecture runs without internet; no vendor statement enumerates which functions degrade. https://github.com/kriolos-obiz/kriolos-pos · retrieved 2026-08-01
Sells or supports a dedicated kitchen display system with bump-bar or touch input, station routing, and course/fire timing, as a first-party product rather than an integration-only dependency.
hardware-kds
No first-party KDS exists. The only KDS code in the tree is KitchenDisplay.java, whose addRecord() inserts (ID, ORDERTIME, PLACE, PICKUPID, PRODUCT, MULTIPLY, ATTRIBUTES) into a KITCHENDISPLAY table that no Liquibase changelog creates, and the class is never instantiated anywhere in the repository - dead code with no display UI behind it. Kitchen output actually ships as printing: script.SendOrder.bs routes lines by product.printer 1-6 to Printer.Ticket.P1..P6 templates on locally bound printers ('Print to Kitchen Printer' in the shipped strings). The hardware module's peripheral enumeration (printers, fiscal printer, customer displays, scale, scanner) includes no KDS screen or bump-bar input device, and nothing anywhere implements station routing to a display or course/fire timing. RemoteOrderDisplay presupposes an external display client that is not part of the product. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-domain/src/main/java/com/openbravo/pos/sales/KitchenDisplay.java · retrieved 2026-08-04
Offers a self-order kiosk running the same menu and modifier engine as the POS, in both countertop and freestanding form factors, with integrated payment and accessibility (ADA) compliance documented. differentiator
hardware-kiosk
Not scored by this record.
Supports drive-thru-specific hardware: outdoor digital menu boards, order confirmation displays, and speaker/headset integration, with a documented timer/speed-of-service measurement.
hardware-drive-thru
Not scored by this record.
Works with standard ESC/POS thermal receipt and kitchen printers from more than one manufacturer (e.g. Epson and Star), including LAN/Ethernet printers, rather than only vendor-branded printers.
hardware-printer-compatibility
Not scored by this record.
Supports the standard peripheral set — cash drawers (including multi-drawer per terminal), barcode scanners, scales for by-weight items, and customer-facing displays — with a published compatibility list.
hardware-peripherals
Not scored by this record.
Card entry happens on a PCI-listed PTS device using validated point-to-point encryption, so the POS application and tablet stay out of PCI scope; the vendor states the merchant's SAQ type.
hardware-p2pe-terminal
Not scored by this record.
Supports contactless acceptance directly on a commodity phone or tablet (Tap to Pay on iPhone / Tap to Pay on Android) with no separate reader. differentiator
hardware-tap-to-phone
Not scored by this record.
Hardware prices are published per SKU on the vendor's public site, rather than quote-only. differentiator
hardware-pricing-transparency
Not scored by this record.
Hardware can be purchased outright (owned) as an alternative to a mandatory lease or subscription-bundled rental, and the vendor states which. differentiator
hardware-ownership-vs-lease
Not scored by this record.
Vendor documentation confirms whether hardware purchased from the vendor remains usable with other software after cancellation, i.e. it is not software-locked or remotely bricked. differentiator
hardware-usable-after-churn
Not scored by this record.
Publishes a hardware warranty term and a replacement/advance-exchange SLA with a stated turnaround (e.g. next-business-day depot swap). differentiator
hardware-rma-sla
Not scored by this record.
Staff can run the ordering or payment app on their own personal phone (BYOD) with a documented permission and security model.
hardware-byod
Not scored by this record.
Provides a remote device-management console showing each terminal, printer, and KDS as online/offline, with remote reboot, software-version visibility, and staged rollout of updates. differentiator
hardware-remote-device-management
Not scored by this record.
Integrates with specialty beverage hardware — self-pour tap walls, flow meters, or liquor pour spouts — such that pours post to a POS tab automatically.
hardware-selfpour-scales
Not scored by this record.
Supports inbound caller ID hardware or a telephony integration that pops the customer record and order history at the POS on an incoming call.
hardware-callerid-integration
Not scored by this record.
Integrations, API & extensibility
Public, self-serve API reference documentation is readable without a signed partner agreement, NDA, or sales call.
extensibility-public-api-docs
AsciiDoc project docs and full GPL-3.0 source are public, but there is no self-serve REST API reference. https://github.com/kriolos-obiz/kriolos-pos · retrieved 2026-08-01
API access is included in the base subscription at no additional per-location fee, surcharge, or upgraded plan requirement. differentiator
extensibility-api-access-cost
Not scored by this record.
A free sandbox or test environment with seeded data is available to developers without owning a paid production account. differentiator
extensibility-free-sandbox
Not scored by this record.
Third-party apps authenticate via OAuth 2.0 with scoped, operator-granted, individually revocable permissions (not shared static API keys or credential sharing).
extensibility-oauth-partner-apps
Desktop application with direct database access; no OAuth 2.0 authorization server or scoped third-party app grants. https://github.com/kriolos-obiz/kriolos-pos · retrieved 2026-08-01
The platform pushes real-time webhooks for order lifecycle events (created, modified, paid, voided, refunded) rather than requiring polling.
extensibility-webhooks-push
The extension points that ship are in-process BeanShell scripts stored as application resources - customer.created.bs, customer.updated.bs, customer.deleted.bs, event.addline.bs, event.removeline.bs, event.setline.bs, script.Event.Total.bs - executed inside the terminal JVM. There is no outbound HTTP event delivery, no subscription registry, no signing and no retry. The one networked hook, script.poshubclient.bs, has both its import and its only call commented out and merely prints a debug line. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/script.poshubclient.bs · retrieved 2026-08-03
Webhooks are cryptographically signed (e.g. HMAC) AND documented to retry with backoff, with a replayable event log for missed deliveries. differentiator
extensibility-webhook-reliability
Not scored by this record.
A public write API accepts externally originated orders into the POS as first-class tickets that fire to KDS/printers and land in reporting.
extensibility-order-injection-api
Not scored by this record.
The vendor is a named DoorDash Preferred Integration Partner (DPIP) under the 2026 program requirements. differentiator
extensibility-doordash-preferred
Not scored by this record.
Direct, first-party certified integrations exist with DoorDash, Uber Eats, and Grubhub without requiring a paid middleware layer (Otter/Chowly/Deliverect/Checkmate). differentiator
extensibility-first-party-delivery-integrations
Not scored by this record.
The POS is a supported endpoint for at least two major aggregation middleware platforms (Deliverect, Chowly, Otter, Checkmate, ItsaCheckmate).
extensibility-middleware-compatibility
Not scored by this record.
Native, vendor-maintained connectors exist for QuickBooks Online and at least one other GL/accounting system, with mapped journal entries rather than CSV-only export.
extensibility-accounting-connectors
Not scored by this record.
Labor hours export natively to at least two named payroll providers (e.g. Gusto, ADP, Paychex, Paylocity) without manual re-keying.
extensibility-payroll-export
Not scored by this record.
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.
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.
A complete historical data export (orders, customers, menu, payments metadata) is available to the operator on demand, in a documented machine-readable format, at contract end. differentiator
extensibility-data-portability-exit
Not scored by this record.
Reliability, offline & operations
Order entry, ticket routing, and check printing continue on-terminal when the internet connection is lost.
reliability-offline-order-entry
Local install and local database make order entry and printing independent of internet connectivity. https://github.com/kriolos-obiz/kriolos-pos · retrieved 2026-08-01
Card payments can be accepted while offline via store-and-forward, not just cash-only fallback. differentiator
reliability-offline-card-auth
Not scored by this record.
The vendor publicly documents who bears the loss when a store-and-forward transaction declines after connectivity returns, and states any per-transaction or cumulative offline cap. differentiator
reliability-offline-decline-liability
Not scored by this record.
Multiple terminals continue to share a single check/table state over the local network while the internet is down (LAN-only degraded operation, not per-terminal islands). differentiator
reliability-lan-degraded-multi-terminal
Not scored by this record.
The vendor documents a local/on-premise transaction engine or edge server (not purely cloud-hosted request/response) for the ordering path. differentiator
reliability-local-transaction-engine
Not scored by this record.
Kitchen display and/or kitchen printer routing continues to function while offline.
reliability-offline-kds-printing
Kitchen routing runs entirely on the terminal with no network service in the path: script.SendOrder.bs reads line.getProperty('product.printer') and calls sales.printTicket('Printer.Ticket.P1') through P6, and DeviceTicket binds each machine.printer.N property to a locally attached serial, USB, file, JavaPOS or system printer via DevicePrinterESCPOS/JavaPOS/Plain/Printer. An internet outage cannot affect kitchen printing. The terminal does still need its database connection, and no display client ships for the KDS half of the claim. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/script.SendOrder.bs · retrieved 2026-08-03
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
DeviceTicket.getDevicePrinter(key) ends 'return printer == null ? m_nullprinter : printer' - a DevicePrinterNull that silently discards output when the configured printer is missing. Printer initialisation failures are swallowed into logger.log(Level.WARNING, e.getMessage(), e) with no user-visible alert, and machine.printer.1 through machine.printer.6 are independent named destinations with no backup, failover or alternate-station property. There is no fallback path. https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-hardware/src/main/java/com/openbravo/pos/printer/DeviceTicket.java · retrieved 2026-08-03
The vendor documents its conflict-resolution behavior for edits made on two devices during a network partition (e.g. last-write-wins, merge, or operator prompt).
reliability-sync-conflict-handling
Not scored by this record.
The vendor publishes an explicit list of which features are unavailable offline (gift cards, loyalty lookup, refunds, manual card entry, text-to-pay).
reliability-offline-feature-matrix
Not scored by this record.
A public, per-component status page exists showing current and historical incident state without a login.
reliability-public-status-page
Not scored by this record.
24/7/365 live human support by phone is included in the base subscription, not sold as a premium support tier.
reliability-247-live-support
Not scored by this record.
The vendor offers in-person on-site installation and go-live support (first-party or certified dealer network), not remote-only self-install. differentiator
reliability-onsite-install
Not scored by this record.
A hardware replacement/advance-exchange program with a stated turnaround time is included or purchasable.
reliability-hardware-replacement-sla
Not scored by this record.
The vendor publishes a current PCI DSS v4.0/4.0.1 Attestation of Compliance or equivalent (e.g. validated P2PE listing) covering the post-March-2025 future-dated requirements.
reliability-pci-dss-4-attestation
Not scored by this record.
Multi-factor authentication is enforceable on back-office and POS administrative logins, with role-based permissions.
reliability-mfa-role-based-access
Not scored by this record.
A public, free training library (video/LMS) and a practice/training mode on the terminal exist for staff onboarding.
reliability-self-serve-training
Not scored by this record.
Any terminal can assume the master/server role automatically if the designated primary terminal or local server fails. differentiator
reliability-failover-terminal-role
Not scored by this record.
Terminals support an automatic cellular/LTE failover for connectivity, first-party or documented.
reliability-cellular-backup
Not scored by this record.
Commercial, compliance & data ownership
Vendor publicly offers a month-to-month subscription with no minimum multi-year term commitment for its core POS software tier. differentiator
commercial-month-to-month-contract
Not scored by this record.
Vendor's published terms of service or MSA state no early termination fee / no liquidated damages for cancelling the software subscription before term end. differentiator
commercial-no-early-termination-fee
Not scored by this record.
The auto-renewal term and the required cancellation notice window (e.g. 30/60/90 days) are stated in publicly accessible contract terms rather than only in a signed quote.
commercial-autorenew-terms-published
CLAIM: auto-renewal term and cancellation notice window in public terms. VERDICT: stays unknown. SURFACES CHECKED: all 4 non-empty public repos of the kriolos-obiz org (public_repos 5) at kriolos-pos f3455ce, kriolos-opos-mobile d8226fc, kriolos-opos-webapi 39c47ec, kriolos-obiz f32bfcf, listed via api.github.com git/trees (truncated=false) and read from raw.githubusercontent.com: no TERMS, pricing or subscription file; tokenised controls over all 49 .adoc/.md/.txt/README/NOTICE files: 'subscription' 0, 'renew'/'renewal' 0, 'cancel'/'cancellation' 0, 'pricing' 0; 'partners' 3, all in the mobile README. A commercial offer is only PLANNED: kriolos-opos-mobile README "Cloud SaaS", "Spring Current version (On Promise, Source Available for Partners)", "Whitelabel product" -- no partner or SaaS terms are published, and the GitHub org lists no website (homepage empty). The GPL-3.0 desktop app has no subscription to renew. Retrieved 2026-09-16. || 330th: 330th -- NEW SURFACES, all empty; the cell is held because the product has no subscription to renew, not because a corpus was refused. (a) The GitHub RELEASES API (the 317th censused git trees only): api.github.com/repos/kriolos-obiz/kriolos-pos/releases returns 5 releases, newest v1.0.0-alpha-2026-07-12-Cabo-Verde (2026-07-12), and the bodies are pull-request changelogs only ('Initial support to build SelfContain Distribution (NO NEED Java Instalation) with JPackage', 'Features/qrcode support') -- no offer, plan, price, term or renewal language, and the artefacts are self-contained desktop installers, i.e. a perpetual GPL-3.0 download rather than a subscription. (b) The org profile repo kriolos-obiz/.github is EMPTY (git/trees answers 409 Git Repository is empty), so there is no org-level README carrying terms. (c) The org has NO WEBSITE: api.github.com/orgs/kriolos-obiz has blog null, email null, description 'Kriol Open Source - Open Business Informatic Systems'; kriolos.com and www.kriolos.com do not resolve (NXDOMAIN, curl exit 6); kriolos-obiz.github.io is 404; sourceforge.net/projects/kriolos-opos 403s a browser-UA curl (a refusal, and SourceForge is a third-party host in any case). (d) The org still has the same 5 repos (kriolos-pos GPL-3.0 pushed 2026-09-07, kriolos-obiz GPL-3.0, kriolos-opos-mobile Unlicense, kriolos-opos-webapi, .github empty) and none has gained a TERMS/pricing file; kriolos-opos-mobile's whole tree (truncated:false) is LICENSE, README.adoc, one swagger screenshot and specs/kriolos-pos-spec-1.0.0-DRAFT.json. Per the 321st merge policy (a feature the product lacks ENTIRELY is a hold, not a no) this stays unknown: there is no publicly offered subscription whose auto-renewal term could be published. Retrieved 2026-09-18. adversarially verified
The POS software can be purchased and operated with a third-party payment processor of the operator's choice (no mandatory in-house processing lock). differentiator
commercial-processing-not-bundled
Not scored by this record.
Vendor publishes an interchange-plus (cost-plus) processing rate option with the markup stated as a specific bps + per-transaction figure, rather than only blended/flat card-present rates. differentiator
commercial-interchange-plus-published
Not scored by this record.
The processing agreement caps or prohibits unilateral vendor-initiated rate increases outside of pass-through interchange/network changes, or grants penalty-free exit on any increase. differentiator
commercial-rate-increase-clause
Not scored by this record.
Per-location and per-additional-terminal software pricing is published as specific dollar figures on the vendor's public site (not 'contact sales' only).
commercial-pricing-published
Unambiguously free: GPL-3.0 licensed with releases distributed on GitHub and no commercial tier offered. https://github.com/kriolos-obiz/kriolos-pos · retrieved 2026-08-01
Individual modules (online ordering, KDS, loyalty, inventory, payroll, marketing) can be purchased à la carte and cancelled independently without repricing the base POS subscription. differentiator
commercial-module-unbundling
Not scored by this record.
All required terminals, KDS screens, and printers can be purchased outright at a published price, with no mandatory multi-year hardware lease or rental.
commercial-hardware-purchase-outright
No first-party hardware sold, so no mandatory lease; operators buy commodity hardware themselves. https://github.com/kriolos-obiz/kriolos-pos · retrieved 2026-08-01
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.
Operators can self-serve export their full transactional history (orders, line items, payments, labor) to CSV or a documented API without contacting support or paying a fee.
commercial-data-export-self-serve
Not scored by this record.
Guest/customer records, loyalty balances or point ledgers, and gift-card liability balances are exportable in machine-readable form by the operator. differentiator
commercial-export-customer-and-loyalty
Not scored by this record.
Contract or documentation specifies a post-termination data retrieval window (a defined number of days during which the operator can still export their data) rather than immediate cutoff. differentiator
commercial-post-termination-export-window
Not scored by this record.
Published terms explicitly state the merchant owns its transaction and customer data, and constrain the vendor's right to use or resell that data (beyond aggregated/de-identified use) for its own products or marketing. differentiator
commercial-data-ownership-clause
Not scored by this record.
Vendor documents validated P2PE or hardware-encrypted card entry plus tokenization such that the merchant's PCI scope is reduced to SAQ A / SAQ P2PE-HW, and names the applicable SAQ.
commercial-pci-p2pe-tokenization
Not scored by this record.
Vendor documents PCI DSS v4.0.1 future-dated controls in effect since 31 Mar 2025 — notably MFA for all access to the cardholder data environment including POS and back-office logins, and (for hosted ordering pages) payment-page script integrity monitoring per Req 6.4.3/11.6.1.
commercial-pci-dss-4-controls
Not scored by this record.
Product provides in-app tooling for CCPA/CPRA and GDPR data-subject requests — locating, exporting, and deleting an individual guest's records — plus a published DPA the operator can execute.
commercial-privacy-dsar-tooling
Not scored by this record.
Vendor publishes an accessibility conformance report (VPAT/ACR) claiming WCAG 2.1 AA (or later) for its self-order kiosk and consumer web-ordering surfaces, including a documented tactile/audio non-visual access mode on kiosks. differentiator
commercial-wcag-kiosk-accessibility
Not scored by this record.
POS supports card-network-compliant dual pricing / cash discount or surcharging with automatic exclusion of debit and prepaid cards from any surcharge, and required receipt and menu-board disclosure of the fee. differentiator
commercial-dual-pricing-compliant
Not scored by this record.
Adversarial verification
An independent pass was instructed to refute this record, defaulting to downgrade when uncertain. It challenged 0 values — 0 upheld, 0 downgraded, 0 upgraded. It separately resolved 34 previously unknown values. This is published in full because a reader who can see which values were contested, on what evidence, and which way they moved has something no affiliate-funded comparison offers.
Capability claims
| Claim | As first scored | Verdict | What the verifier found |
|---|---|---|---|
| order-capture-scheduled-orders | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The full Liquibase schema is public. receipts carries only (ID, MONEY, DATENEW, ATTRIBUTES, PERSON), tickets only (ID, TICKETTYPE, TICKETID, PERSON, CUSTOMER, STATUS) and sharedtickets only (ID, NAME, CONTENT, APPUSER, PICKUPID, LOCKED) - there is no future fire-time, promise-time or lead-time column anywhere, so a held ticket cannot be dated forward or auto-fired. The reservations table (CREATED, DATENEW, TITLE, CHAIRS, ISDONE, DESCRIPTION) is a table-booking calendar, not an order. source |
| menu-pricing-modifier-price-by-parent-size | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | Modifiers are modelled as product attributes: attribute(ID, NAME), attributevalue(ID, ATTRIBUTE_ID, VALUE), attributeuse and attributesetinstance carry no price column at all, so an attribute value cannot hold a price, let alone a per-parent/per-size matrix. The only priced alternative is a complement product (products_com joins PRODUCT to PRODUCT2), and products holds a single PRICESELL per row, so a differently priced topping requires a duplicated product record. source |
| menu-pricing-topping-quantity-tiers | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | No quantity-tier or price-multiplier field exists: attributevalue is (ID, ATTRIBUTE_ID, VALUE) with no numeric price or factor, and ticketlines carries only UNITS and PRICE. Light/regular/extra can only be expressed by adding the complement product again or by creating separate products. source |
| payments-refund-void-controls | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-partial | Authorization is genuinely role-based: the shipped role files grant discrete permissions sales.RefundTicket, sales.DeleteLines, sales.DeleteTicket, refund.cash/cheque/voucher/magcard, button.opendrawer, button.linediscount and button.totaldiscount, and Role.Employee.xml deliberately omits every refund, delete-ticket and open-drawer entry. Voids and no-sales are logged - JPanelTicket calls dlSystem.execLineRemoved(user name, ticket id, product, units) into the lineremoved table, draweropened records (OPENDATE, NAME, TICKETID), and both blocks print on the close-cash report. Shortfall: the log records the logged-in operator, never an approving manager; there is no per-user approval prompt (the optional override is a single shared static PIN read from the override.pin application property in JPanelTicket.changeCount()); discounts and refunds are written to no audit table at all; and lineremoved/draweropened are ordinary mutable tables with no immutability guarantee. source |
| kitchen-expo-consolidation | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | No expo or consolidation view ships. Kitchen routing is per-line only: script.SendOrder.bs branches on line.getProperty('product.printer') values 1-6 and prints Printer.Ticket.P1..P6, while RemoteOrderDisplay.remoteOrderDisplay() deletes and re-inserts one orders row per ticket line carrying a per-line display id, for an external display client that is not part of this repository. Nothing aggregates several stations into one order view and nothing gates order completion on every contributing station having bumped. source |
| kitchen-bump-bar-hardware | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The kriolos-opos-hardware module enumerates every supported peripheral class - DevicePrinterESCPOS/JavaPOS/Plain/Printer/Null, DeviceFiscalPrinter, DeviceDisplay (ESCPOS, JavaPOS, LED8, PDLED8, SurePOS, serial, window and dual-screen), DeviceScale and DeviceScanner. There is no bump bar, programmable keypad or KDS input device among them, and the strings 'bump' and 'bumpbar' do not occur anywhere in the repository. source |
| delivery-zone-pricing | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | There is no delivery entity in the schema at all - no zone, fee, promise-time or dispatch table. Guest addresses live as free text on customers (ADDRESS, ADDRESS2, POSTAL, CITY, REGION, COUNTRY) with no geocoding, zone assignment or per-zone fee/minimum, so a delivery charge can only be rung in as an ordinary product line. source |
| digital-account-saved-payment | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The product is a Java desktop application with no guest-facing channel: the Maven reactor is app, base, domain, hardware, i18n, jpackage, lib-report, spi, thirdparty and asset modules, with no web or ordering server. There is no card-on-file vault - payments stores per-transaction TRANSID, CARDNAME and RETURNMSG with no customer token relation - and no guest login, saved address or reorder concept exists in the schema. source |
| guest-loyalty-unified-profile | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | customers is the only guest record and it can only be populated from the POS; there is no first-party web, app or kiosk channel in the product to merge from, and no dedup or merge machinery in the schema - no alias, match or merge table, and CARD, EMAIL and PHONE are plain nullable columns with no uniqueness or match rule. source |
| guest-loyalty-accrual-models | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The schema contains no points, visit, punch, tier or accrual table. The only guest-value constructs are customers.DISCOUNT (a flat per-customer percentage), customers.ISVIP, the MAXDEBT/CURDEBT house-account fields, and vouchers(ID, VOUCHER_NUMBER, CUSTOMER, AMOUNT, STATUS), which is stored value rather than an accrual program. source |
| guest-loyalty-lifecycle-automation | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | No campaign, message, segment or scheduler table exists in the schema and no mail or SMS transport ships in any module, so birthday, first-visit and lapsed win-back automations cannot be configured. customers does not even carry a birth date column. source |
| labor-clock-in-at-pos | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-yes | JPanelEmployeePresence is a POS-resident panel with Check In and Check Out buttons plus a row of configurable break buttons; DataLogicPresenceManagement writes INSERT INTO shifts(ID, STARTSHIFT, PPLID) and UPDATE shifts SET ENDSHIFT = ? WHERE ENDSHIFT IS NULL AND PPLID = ?, with breaks recorded in shift_breaks(SHIFTID, BREAKID, STARTTIME, ENDTIME). Identification is the POS login itself - people carries APPPASSWORD and CARD, so PIN or magnetic card - and no separate time-clock hardware is required. The epm_dailypresence, epm_dailyschedule and epm_performance reports read the same tables. source |
| labor-granular-rbac | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-partial | Permissions are per discrete action rather than fixed tiers: role XML grants individual entries including sales.Override, sales.DeleteLines, sales.EditLines, sales.EditTicket, sales.RefundTicket, sales.DeleteTicket, sales.ChangeTaxOptions, sales.Total, button.opendrawer, button.linediscount, button.totaldiscount, per-tender payment.* and refund.* entries, and one entry per report script (e.g. /com/openbravo/reports/sales_cashflow.bs), all checked at runtime through m_App.hasPermission(...). Roles are editable in the Roles admin panel. Shortfall: grants are global to the role - roles(ID, NAME, PERMISSIONS) has no location column and people(ROLE) assigns exactly one role per user with no location scoping, so per-location permission grants cannot be expressed. source |
| labor-manager-override-audit | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The only override mechanism is JPanelTicket.changeCount(), which reads a single shared static PIN from the override.pin application property and compares it against a JPasswordDialog entry ('Enter PIN Number' / 'PIN Number Incorrect'). It is one secret shared by all managers, it is tied to no user record, and nothing is persisted on success - no row, no timestamp, no approver identity. The sales.Override permission itself only widens shared-ticket visibility in JTicketsBagShared. lineremoved and draweropened record the operator who acted, never an approver. source |
| inventory-unit-conversion-yields | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The unit-of-measure editor exposes a single field, name (UomEditor declares only m_jName), and the uom table is (ID, NAME). products references one uom column plus scalar STOCKCOST, STOCKVOLUME and STOCKUNITS. There is no purchase/recipe/count unit distinction, no conversion factor between units, and no yield or waste percentage field anywhere in the schema. source |
| inventory-count-modes | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The movement-reason enumeration is closed and complete - IN_PURCHASE, IN_REFUND, IN_MOVEMENT, OUT_SALE, OUT_REFUND, OUT_BREAK, OUT_MOVEMENT, OUT_SAMPLE, OUT_FREE, OUT_USED, OUT_SUBTRACT, OUT_CROSSING - and contains no stocktake or count reason. The schema has no count-session table either: stockdiary is a flat movement log and stockcurrent holds only (LOCATION, PRODUCT, ATTRIBUTESETINSTANCE_ID, UNITS). A physical count can therefore only be keyed in as Adjust Add / Adjust Subtract movements, with no full-count, spot-count or scheduled cycle-count workflow and no per-count variance history. source |
| reporting-eod-closeout | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-partial | Printer.CloseCash.xml produces one close-cash document per cash session covering payments broken out by tender type with amounts, Total Sales, number of payments, a tax-analysis line per tax rate, a Line Voids block (ticket, user, product, units) from lineremoved, a No Sales block (user, ticket) from draweropened, receipt count, SubTotal / Taxes / Totals, and closed-by user, terminal, sequence and start/end date. Shortfall: no tip total is printed even though payments.TIP is stored, no discount total appears, and there is no counted-cash versus expected-cash reconciliation line, so the deposit still has to be derived off the report. source |
| reporting-pmix-modifier-level | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-partial | sales_extproducts.bs is a real product-mix report: it groups ticketlines by product reference and name (and category and customer) returning SUM(UNITS) as TOTALunits with TOTALnet, TOTALtax and TOTALgross, filterable by date interval, customer and product/category. Shortfall: it is item-level only. Modifiers are stored as an opaque ATTRIBUTES blob on ticketlines and are never joined or aggregated by any shipped report, and the only time filter is a start/end datetime interval - there is no daypart grouping, and the schema has no revenue-centre concept to filter on. source |
| multi-location-org-hierarchy | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | locations is (ID, NAME, ADDRESS) with no parent, group or level column, and nothing else in the schema references a location grouping. It is a flat warehouse list used for stock movements; there is no enterprise/region/location hierarchy for reporting or permissions to be scoped to. source |
| multi-location-central-menu-publish | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | An install is a single application database shared by its terminals - products, categories and prices exist once, with no location column and no store-level copy to publish to. The schema contains no publish, version, changeset or deployment-history table, and no module in the reactor performs cross-database menu distribution. source |
| multi-location-price-zones | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | products carries exactly one PRICEBUY and one PRICESELL and there is no price-list, price-tier or channel-price table in the schema; ticketlines stores the resolved PRICE per line. The only price-variation mechanisms are customers.DISCOUNT (a flat percentage on one guest) and the isvprice variable-price flag, so per-location-group, per-channel or per-daypart pricing requires duplicating the product. source |
| extensibility-webhooks-push | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The extension points that ship are in-process BeanShell scripts stored as application resources - customer.created.bs, customer.updated.bs, customer.deleted.bs, event.addline.bs, event.removeline.bs, event.setline.bs, script.Event.Total.bs - executed inside the terminal JVM. There is no outbound HTTP event delivery, no subscription registry, no signing and no retry. The one networked hook, script.poshubclient.bs, has both its import and its only call commented out and merely prints a debug line. source |
| reliability-offline-kds-printing | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-yes | Kitchen routing runs entirely on the terminal with no network service in the path: script.SendOrder.bs reads line.getProperty('product.printer') and calls sales.printTicket('Printer.Ticket.P1') through P6, and DeviceTicket binds each machine.printer.N property to a locally attached serial, USB, file, JavaPOS or system printer via DevicePrinterESCPOS/JavaPOS/Plain/Printer. An internet outage cannot affect kitchen printing. The terminal does still need its database connection, and no display client ships for the KDS half of the claim. source |
| reliability-printer-fallback | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | DeviceTicket.getDevicePrinter(key) ends 'return printer == null ? m_nullprinter : printer' - a DevicePrinterNull that silently discards output when the configured printer is missing. Printer initialisation failures are swallowed into logger.log(Level.WARNING, e.getMessage(), e) with no user-visible alert, and machine.printer.1 through machine.printer.6 are independent named destinations with no backup, failover or alternate-station property. There is no fallback path. source |
| menu-pricing-nested-modifiers | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The shipped DDL enumerates the whole model: products has one ATTRIBUTESET_ID, attributeset(ID, NAME), attributeuse(ID, ATTRIBUTESET_ID, ATTRIBUTE_ID, LINENO), attribute(ID, NAME), attributevalue(ID, ATTRIBUTE_ID, VALUE). Flat two levels, no self-referencing parent group, no MIN/MAX columns, no required flag. products_com and products_bundle are the only other composition tables and carry none of those either. The one forced-selection control is a single product-level boolean, ISVERPATRIB ('mandatory' in ProductsEditor), which prompts for the entire attribute set once. source |
| payments-gift-cards | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-partial | Native first-party vouchers do exist - a vouchers table, a back-office issuing panel and JPaymentVoucher as a tender - and with no location column they work across the group on one shared database. But VoucherInfo's STATUS is binary 'A'/'D' with no balance field, and JPaymentVoucher disables moneyEditor and loads the full amount, so redemption is all-or-nothing and no real-time balance is tracked. No online-ordering channel exists in the product to redeem through. source |
| kitchen-station-routing | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-partial | products.PRINTTO (a 0-6 combo in ProductsEditor) plus script.SendOrder.bs branching to Printer.Ticket.P1..P6 give genuine admin-configurable per-item routing. But the destinations are printers, not KDS stations - KitchenDisplay.java writes to a KITCHENDISPLAY table no changelog creates and is never instantiated - routing keys off the product row only with no category/order-type/revenue-centre rule, the six destinations are hard-coded, and printer bindings are per-terminal machine.printer.N properties rather than per-location config. source |
| inventory-recipe-bom-costing | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-partial | products_bundle(PRODUCT, PRODUCT_BUNDLE, QUANTITY) plus the recursive DataLogicSales.adjustStock() give real multi-level component explosion down to raw stock, so sub-recipes exist structurally. The costing half does not: products.PRICEBUY is hand-entered and every consumer reads it as stored; no code rolls component cost up to a parent, deleteTicket() even values exploded components at PRICESELL, and UomEditor has no conversion or yield factor. An ingredient cost change propagates nowhere. source |
| order-capture-split-merge | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-partial | Both halves exist in item-move form only. btnSplit (gated on sales.Total and more than one article) opens ReceiptSplit, a two-pane dialog with move-one/move-all buttons shifting whole lines to one new ticket, which is then paid immediately via closeTicket(); JTicketsBagRestaurantMap merges tables by appending the clipboard table's lines into the target ticket and deleting the source shared ticket after a confirmation. Missing: any seat concept (places.SEATS is floor-plan table capacity; ticketlines has no seat column), even N-way splits, and dollar/percentage splits. Payment closes a receipt, so the after-partial-payment case is structurally impossible rather than supported. source |
| delivery-driver-roster | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The complete source contains no driver concept: none of the 53 Liquibase tables is a driver, run or dispatch table, the only staff entities are people plus the shifts/shift_breaks timekeeping pair with no assignment-state column, and a tree-wide search for driver/dispatch/courier/delivery matches only JDBC drivers, Swing EDT comments, the Courier New font and a supplier delivery-note tooltip. source |
| delivery-dispatch-board | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | No dispatch or expo screen ships: the sales views are the register, the floor-plan map and the shared-ticket list. The only order-display code, RemoteOrderDisplay, writes one orders row per ticket line for an external display client outside the repository, and the schema has no dispatch state, driver availability or run-batching structure for a board to show. source |
| digital-first-party-web | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The Maven reactor enumerates the whole product (spi, assets-reports, assets-image, thirdparty, base, hardware, domain, i18n, i18n_pt, lib-report, app, jpackage, docs) and contains no web server, ordering site or HTTP endpoint - it is a Swing desktop POS. The only e-commerce traces are three 'outline/prep for eCommerce connector' author comments inherited from uniCenta, marking scaffolding never built. source |
| digital-menu-single-source | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | There is no digital menu for the POS menu record to feed: no web, app or kiosk module exists in the reactor, and no menu-export or publish code exists anywhere in the tree. The capability is absent because the product has no first-party digital channel at all. source |
| hardware-kds | unknown (grade F) - "No public documentation located during the 2026-08-01 research pass.", a placeholder marking a cell nobody had examined. | resolve-to-no | The only KDS code, KitchenDisplay.java, inserts into a KITCHENDISPLAY table no changelog creates and is never instantiated - dead code with no display UI. Kitchen output ships as printing (script.SendOrder.bs to Printer.Ticket.P1..P6 on local printers), the hardware module's peripheral enumeration includes no KDS screen or bump-bar device, and nothing implements station routing to a display or course/fire timing. RemoteOrderDisplay presupposes an external display client not in the product. source |
Sources
Every URL this record cites. 24 in total.
- https://github.com/kriolos-obiz/kriolos-pos
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/pos_liquidbase/db-changelog-v4_5.xml
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/Role.Manager.xml
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/Role.Employee.xml
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/sales/JPanelTicket.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/epm/JPanelEmployeePresence.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-domain/src/main/java/com/openbravo/pos/epm/DataLogicPresenceManagement.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/inventory/UomEditor.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-domain/src/main/java/com/openbravo/pos/inventory/MovementReason.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/Printer.CloseCash.xml
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-assets-reports/src/main/resources/com/openbravo/reports/sales_extproducts.bs
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-hardware/src/main/java/com/openbravo/pos/printer/DeviceTicket.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/script.SendOrder.bs
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/sales/RemoteOrderDisplay.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/resources/com/openbravo/pos/templates/script.poshubclient.bs
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/inventory/ProductsEditor.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-domain/src/main/java/com/openbravo/pos/forms/DataLogicSales.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/payment/JPaymentVoucher.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-domain/src/main/java/com/openbravo/pos/voucher/VoucherInfo.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-domain/src/main/java/com/openbravo/pos/sales/KitchenDisplay.java
- https://api.github.com/repos/kriolos-obiz/kriolos-pos/git/trees/main?recursive=1
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/sales/ReceiptSplit.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/kriolos-opos-app/src/main/java/com/openbravo/pos/sales/restaurant/JTicketsBagRestaurantMap.java
- https://raw.githubusercontent.com/kriolos-obiz/kriolos-pos/main/pom.xml