#R01 — POS Hardware & Peripherals
Scope: terminals, receipt/kitchen printing, counter peripherals, in-restaurant networking, build-vs-resell hardware, and a certified v1 matrix.
Date: 2026-08-18. Prices are single-unit EU reseller, ex-VAT, unless stated. Labels: [verified] = checked this session with a URL, [known] = confident from training data, [estimate] = reasoned guess.
Bottom line: the hardware is not the hard part — buying it is easy, driving it is not. The real cost centres are (1) the printing stack, which is 8–10 engineer-months of genuinely nasty work and produces ~60% of your support tickets forever; (2) fiscalization hardware in Poland/Romania, which invalidates the "just print ESC/POS" assumption and is a market-entry gate, not a feature; (3) the fact that a browser cannot open a TCP socket, which forces an architectural decision (native app vs. pull-based cloud printing) in week one. Reselling commodity hardware is correct and the legal argument for it is stronger than the cost argument.
#1. Terminal options
#1.1 The four archetypes
| Archetype | Examples | Price/station (ex VAT) | Where it wins | Where it dies |
|---|---|---|---|---|
| Consumer tablet + stand | iPad 11" (A16, 2025) + Heckler WindFall / Bouncepad Counter | EUR 400–460 tablet + EUR 120–230 stand = EUR 520–690 | Beautiful, fast, guests trust it, staff already know it, huge App Store distribution, 5–6 yr OS support | No sealed bezel, no swappable battery, no built-in printer/NFC/scanner, USB-C peripheral support is limited, theft target, Apple's 15–30% IAP rules if you ever bill in-app |
| Android all-in-one POS | Sunmi D3 Mini / D3 Pro / T3 Pro, iMin D4, Elo I-Series 4 | EUR 465–945 (Sunmi) [verified], EUR ~1,150–1,300 (Elo 15") [verified/est] | Built-in printer + NFC + cash-drawer port + customer display in one box, one power cable, commercial 3–5 yr lifecycle, mounts on any counter | Android version rot, GMS/EDLA licensing trap (§1.3), mediocre panels (250–400 nits), vendor SDK quality varies, 1-yr warranty is standard |
| Payment-terminal-as-POS | PAX A920Pro, PAX A77, Sunmi V3 Mix, Nexgo N86 | EUR 380–600 [verified] for Sunmi V3 Mix EUR 575 | One device for order + payment; acquirer often subsidizes it to EUR 0–15/mo | Usually estate-locked by the acquirer. You cannot sideload on a PAX A920Pro in most European estates without the acquirer's key + PAXSTORE tenancy. Assume you don't control the device |
| Legacy Windows terminal | HP Engage One Pro, Toshiba TCx 800, Advantech UTC-5-series | EUR 900–1,800 [estimate] | Sunk cost at existing sites; drives every legacy serial peripheral; the only realistic host for Polish fiscal printer DLLs | Windows licensing + patching + antivirus + your support burden; nobody buys these new for a 1-site café |
#1.2 Concrete price anchors (checked 2026-08-18)
Source: shopnfc.com EU catalogue, single-unit prices [verified].
| SKU | Spec | Price EUR |
|---|---|---|
| Sunmi D3 Mini (no GMS) | 10.1" desktop AIO, 58mm printer, Android 13 | 465 |
| Sunmi D3 Pro (no GMS) | 15.6" desktop AIO | 605 |
| Sunmi D3 Pro (GMS) | 15.6", Google-certified | 639 |
| Sunmi T3 POS 15.6" (Android 13) | 15.6", no integrated printer | 688.97 |
| Sunmi T3 POS 15.6" (GMS EDLA) | Google-certified variant | 945 |
| Sunmi CPad 14" (GMS EDLA) | 14" tablet-style | 735 |
| Sunmi V3 Mix | handheld/counter hybrid, printer + 2D scanner + NFC + battery | 575 |
| Sunmi V3 (GMS EDLA) | handheld + printer | 384–447 |
| Sunmi L2s Pro (Zebra scan engine) | rugged handheld, IP67 | 595 |
| Sunmi L2s Pro (Sunmi scan engine) | rugged handheld | 535 |
| Sunmi L3 (dual NFC) | rugged handheld | 495 |
| Sunmi M3 | rugged terminal | 385 |
| Elo I-Series 4, 15.6" Android (E392786, RK3399) | 15.6" AIO, no printer | ~USD 1,303 → EUR ~1,150 [verified USD] |
Distributor reality: these are retail. As a registered reseller with a distributor (Jarltech, Logiscenter, ITG Store, Concept Data, Sunmi's regional distributors) expect 28–40% off list at 50+ units/yr [estimate], and Sunmi will quote directly at 100+ units. Budget your hardware GM at 15–25% after freight, spares, and DOA.
#1.3 The GMS / EDLA trap — read this before choosing Android
Google requires an EDLA (Enterprise Device Licensing Agreement) for GMS on dedicated/purpose-built devices; that is why the Sunmi catalogue splits into "no GMS" and "GMS EDLA" SKUs at a EUR 30–260 delta [verified from price table]. Consequences on a non-GMS device:
- No Firebase Cloud Messaging. Your push channel for "new online order arrived" must be your own persistent MQTT/WebSocket connection with your own reconnect/backoff/doze handling. Budget 1.0 eng-month for a reliable foreground-service transport, plus battery/thermal testing.
- No Play Store distribution → you ship APKs by MDM/OTA yourself, plus your own update rollout, staged rollback, and signing infrastructure.
- No Google Sign-In / Maps / Play Integrity / SafetyNet.
- WebView and Chrome are frozen at the ROM's version unless the vendor ships an update. On a 2023 Sunmi ROM you can be stuck on a WebView with no
ResizeObserveredge cases fixed, noIntl.Segmenter, etc. If your POS UI is a WebView, this is a genuine product risk.
Recommendation: buy GMS/EDLA SKUs even at +EUR 100–250/unit for anything running your app. Non-GMS is acceptable only for KDS and customer-facing displays.
#1.4 Environmental reality: spills, heat, glare, gloves
| Factor | Number | Practical rule |
|---|---|---|
| Screen brightness | Consumer iPad ~500 nits; typical Android POS 250–400 nits [known] | Anything under ~600 nits is unreadable on a sunlit terrace. A terrace-heavy Mediterranean site needs an iPad or a high-bright Elo (1,000+ nits models exist, ~2× price) |
| Ingress | Sunmi/Elo desktop AIOs are not IP-rated on the front glass; Sunmi L2s Pro/L3 handhelds are IP67, 1.2–1.5 m drop [known] | Assume every counter terminal will meet a spilled Coke. Specify a counter unit with a flush glass front and no top-facing vents; forbid mounting under a shelf where steam collects |
| Heat | Passive-cooled AIOs throttle above ~40 °C ambient; a pass window above a grill hits 45–55 °C [estimate] | Never put the terminal or KDS in the hot line. KDS goes on the cold side of the pass, 1.5 m minimum from a fryer, screen tilted down to shed grease |
| Gloves / wet hands | PCAP touch fails with nitrile gloves + water film [known] | Kitchen-side input = bump bar (physical keys) or IR-touch monitor, not PCAP. This single decision saves you dozens of "the KDS doesn't respond" tickets |
| Grease film | Builds visible haze in 2–4 weeks over a pass [estimate] | Ship a cleaning protocol and a spare screen protector as a consumable |
#1.5 Lifespan and warranty
| Item | Realistic service life | Standard warranty | Notes |
|---|---|---|---|
| iPad | 5–6 yr hardware, OS support ~6–7 yr | 1 yr (AppleCare+ ~EUR 79–99 for 2 yr) [estimate] | Battery swelling at 3–4 yr in always-charging kiosk mode is the actual failure mode. Use a stand that lets you charge-limit or a powered stand with a charge controller |
| Sunmi AIO | 4–6 yr | 12 months [known] | Extended warranty available via distributor. Thermal printhead in the D-series is the wear part |
| Elo I-Series | 5–7 yr | 3 years standard [known] | Best warranty in the category; part of why Elo costs 2× Sunmi |
| Thermal printer (Epson/Star) | 5–8 yr; printhead rated ~100–150 km / 1.5–2 M cuts [known] | 1–3 yr depending on model/region; Epson CoverPlus adds on-site/exchange | Autocutter is the failure part, not the head, in high-volume bars |
| Impact printer (TM-U220II) | 7–10 yr | 1–2 yr | Ribbon is a consumable, ~EUR 4–8, changed every 1–3 months |
Refresh planning: assume you re-certify your hardware matrix every 18 months because SKUs go EOL. Budget 0.25 eng-months/quarter forever for matrix maintenance.
#2. Receipt and kitchen printing (the hard part)
#2.1 Protocol landscape
| Layer | Reality |
|---|---|
| ESC/POS | Epson's de-facto command set. ESC @ init, ESC a n align, GS ! n size, GS v 0 raster image, GS V m cut, ESC p m t1 t2 drawer kick, DLE EOT n real-time status. Every clone implements ~80% of it, differently. [known] |
| StarPRNT / Star Line Mode | Star's native set. Star printers can be switched to ESC/POS emulation via config, but cutting, logos, and status differ. Do not assume; detect and branch. [known] |
| Code pages | This is where CEE bleeds. Polish diacritics need CP852 or CP1250; Romanian ș/ț need CP852/CP1250 + the printer's font actually containing them; Ukrainian/Russian need CP866 or CP1251. You must emit ESC t n per printer per language and maintain a per-model code-page capability table. Fallback: render the whole ticket as a raster bitmap (GS v 0) — universal, ~3–5× slower, ~2× paper feed latency, but it always works and it lets you use real fonts. [known] |
| Raster-first strategy | Strongly recommended for v1: one rendering path (HTML/Canvas → 1-bit bitmap → GS v 0), plus a text fast-path only for high-volume bars where speed matters. Halves your per-model bug surface. |
#2.2 Recommended printer SKUs and prices
| Model | Type | Interfaces | Price EUR ex VAT | Notes |
|---|---|---|---|---|
| Epson TM-m30III (C31CK50152) | 58/80 mm thermal, 203 dpi | USB-B, USB-C, Ethernet, Bluetooth, Wi-Fi — all in one SKU | 314.87 [verified, Jarltech] | The default front-of-house printer. All-interface SKU removes the "wrong variant ordered" support class entirely. Worth the premium |
| Epson TM-m30III-H | Same + 4× powered USB hub | USB/LAN/BT/WLAN | ~EUR 360–400 [estimate] | Use where the printer is the USB hub for scanner + CFD on an iPad build |
| Epson TM-T88VII | 80 mm thermal, 180 dpi, 500 mm/s | USB + Ethernet (variants) | ~EUR 400–480 [estimate] | High-volume QSR/bar. 500 mm/s [verified from listing]. Overkill for a 40-cover bistro |
| Epson TM-U220II | 76 mm impact, 2-colour, up to 6 lps | USB, Ethernet, Wi-Fi | ~EUR 280–340 [estimate] | Announced 2024-07-11, replaces the EOL TM-U220 [verified]. The kitchen printer. Thermal paper fades to black near heat/steam; impact does not. Two-colour = red for allergens/86'd items |
| Star TSP143IV / TSP100IV | 80 mm thermal | Ethernet + USB-C/USB-A; CloudPRNT built in | ~EUR 230–280 [estimate] | Best price/feature for a cloud-pull architecture [verified: CloudPRNT supported] |
| Star mC-Print3 | 80 mm thermal, compact | USB/LAN/BT/(WLAN), CloudPRNT | ~EUR 260–310 [estimate] | Direct TM-m30III competitor; has USB host ports for peripherals |
| Star SP742 HI X | 76 mm impact, CloudPRNT | Ethernet | ~EUR 300–360 [estimate] | The Star kitchen printer; CloudPRNT-capable impact is rare and useful [verified] |
| Star mC-Label3 / TSP100IVSK | Linerless label | LAN, CloudPRNT | ~EUR 320–420 [estimate] | Takeaway bag labels, prep labels |
| Bixolon SRP-Q300 / SRP-330III | 80 mm thermal | USB/LAN/Serial | ~EUR 150–210 [estimate] | 30% cheaper, SDK/docs noticeably worse, no cloud-pull equivalent. Support it, don't lead with it |
| Xprinter / Rongta / generic | 80 mm thermal | USB/LAN/BT | EUR 55–95 [estimate] | You will encounter these constantly in UA/PL/RO. Raw port 9100 ESC/POS usually works. No status reporting worth trusting, no warranty, cut mechanism dies in 12–18 months. Support "best effort, unsupported" mode — refusing them loses deals |
#2.3 Interface decision matrix
| Interface | Latency | Reliability | Multi-client | Verdict |
|---|---|---|---|---|
| Ethernet, raw TCP 9100 | 20–80 ms | Highest | Yes (one at a time; no locking — you must serialize) | Default for every fixed printer. Requires a native app or a local agent |
| Ethernet + ePOS-Print / CloudPRNT | 0.2–10 s (poll) | Highest | Yes | Default when your client is a browser (§2.4) |
| USB | <20 ms | High | No (single host) | Fine when the printer sits under the terminal and the host is Android/Windows. Impossible from iOS (§2.5) |
| Bluetooth Classic SPP | 50–300 ms | Medium; pairing drops, 8-device limits | No | Only for mobile/handheld printing. On iOS the printer must be MFi-certified — Epson and Star sell MFi variants; generic BT printers cannot be reached from an iOS app at all |
| Wi-Fi (printer on WLAN) | 30 ms–3 s, spiky | Worst | Yes | Avoid. Every "the printer is offline" ticket originates here. Accept only where cabling is physically impossible, and then insist on a dedicated AP within line of sight |
| RS-232 serial | <10 ms | High | No | Legacy fiscal printers, scales, some kitchen printers. Needs a USB-serial bridge (FTDI FT232R, ~EUR 12) or a Windows host |
#2.4 Cloud-pull printing: Epson Server Direct Print vs Star CloudPRNT
Both invert the connection: the printer polls your HTTPS server for jobs. This is the only clean way to print from a browser-based or cloud-only POS.
| Epson Server Direct Print | Star CloudPRNT / CloudPRNT Next | |
|---|---|---|
| Models | TM-m30III, TM-T88VII, TM-U220II, TM-i series [verified feature exists on m30III] | TSP100IV, TSP654II/743II/847II HI X, mC-Print2/3, mC-Label3, SP742 HI X [verified] |
| Transport | Printer HTTP POSTs to your URL at a configured interval; you respond with ePOS-Print XML | Printer polls your URL (HTTP/HTTPS JSON API); optionally MQTT on supported models [verified] |
| Payload | ePOS-Print XML (<text>, <image>, <cut>, <pulse>) | Star markup, ESC/POS passthrough, PNG, or Star Document Markup |
| Status back | Printer reports status in the poll (paper, cover, error) | Same, plus job-level ack |
| Latency | Poll interval, typically 3–15 s; can go to ~1 s at network cost [estimate] | Same; MQTT variant is sub-second [verified feature] |
| Licence cost | None disclosed; built into the printer | None disclosed on the product page [verified]; StarPrinter.Online is a separate managed service |
Architectural consequence: if you go browser-first, a 3–10 s delay on the guest's receipt at the counter is a UX wart your competitors (native apps + port 9100) don't have. Kitchen tickets don't care. Recommended hybrid: native app → raw 9100 for the receipt printer at the till; CloudPRNT/SDP for every remote kitchen/bar printer and for the "print from the back office in the browser" case.
#2.5 What is genuinely impossible from iOS and from a browser
| Capability | Safari/iOS WebView | Chrome (Android/desktop) | Native iOS app | Native Android app |
|---|---|---|---|---|
| Raw TCP socket to port 9100 | No (no API exists in any browser) | No | Yes (NWConnection) | Yes (Socket) |
| WebUSB | No | Yes | n/a | n/a |
| Web Bluetooth | No (Apple has not shipped it) | Yes | Yes, MFi-only for Classic SPP; BLE printers via CoreBluetooth | Yes |
| Web Serial | No | Yes (desktop) | n/a | Yes via USB-serial |
| mDNS/Bonjour discovery | No | No | Yes — requires the com.apple.developer.networking.multicast entitlement, which Apple grants by application only [known] | Yes (NsdManager) |
| Local network access | n/a | n/a | Requires NSLocalNetworkUsageDescription + user consent prompt (iOS 14+) | Normal |
| Epson ePOS-Print from JS | Yes only if the page is HTTP, or the printer serves a trusted HTTPS cert — an HTTPS page calling http://192.168.1.50/cgi-bin/epos/service.cgi is blocked as mixed content [known] | Same problem | n/a | n/a |
Three land mines here, each of which has killed a POS roadmap:
- Mixed content. Your PWA is on HTTPS. The printer speaks HTTP on a RFC1918 address. Browsers block it, and you cannot get a public CA cert for
192.168.1.50. Workarounds: (a) a local agent on localhost with a real cert for a wildcard*.local.yourdomain.comresolving to 127.0.0.1 — this is what several vendors do and it costs you an installer per OS; (b) cloud-pull printing; (c) ship a native app. There is no fourth option. - iOS multicast entitlement. Discovery of printers by Bonjour from an iOS app needs an Apple-approved entitlement. Application turnaround is weeks and can be refused. Plan a manual-IP-entry fallback from day one.
- Chrome's Private Network Access restrictions have been tightening; a public HTTPS page reaching a private IP is on a deprecation path
[known — verify current Chrome policy before committing].
#2.6 Discovery and addressing
| Mechanism | Detail |
|---|---|
| mDNS/Bonjour | _printer._tcp (LPR), _pdl-datastream._tcp (port 9100), _ipp._tcp. Not all POS printers advertise; Epson TM-m30III does advertise _printer._tcp when networked [estimate — verify per firmware] |
| Epson proprietary discovery | UDP broadcast on port 3289 (used by EpsonNet Config / Epson Device Admin) [known]. Your discovery should send this alongside mDNS |
| Star discovery | Star's SDK ships a discovery API over UDP broadcast; also mDNS on newer models [known] |
| Brute-force ARP sweep | Scan the /24, TCP-connect port 9100, read the DLE EOT status response, match MAC OUI (00:26:AB Epson, 00:15:C7/Star OUIs) to identify vendor. Ugly, slow (2–15 s for a /24), and the only thing that works behind a switch with mDNS snooping. Ship it anyway. |
| Addressing policy | Do not rely on DHCP. At install: assign a static IP outside the DHCP pool (e.g. .240–.250), record the MAC, and physically label the printer with its IP and role ("KITCHEN — 192.168.1.241"). Store MAC as the durable key so you can re-find the printer after an ISP swaps the router |
#2.7 Routing rules (item → station)
Minimum viable model that survives contact with a real kitchen:
PrintStation { id, name, printer_ids[], fallback_station_id, language, layout_template }
RoutingRule { menu_category_id | menu_item_id | modifier_group_id, station_id, priority }
Ticket policy { consolidate_by: station|course|seat, fire_mode: on_send|on_course_fire, reprint_marks }Requirements that always come up and that you must not defer:
- Course firing. Starters print now; mains print when the waiter fires course 2. Without it you cannot sell to any table-service restaurant above a bistro.
- Multi-station items. A burger prints to Grill; its side salad prints to Cold; the expo/pass gets the whole order. One item → N printers.
- Modifier inheritance. "No onion" must reach the same station as the burger, in bold/red.
- Kitchen language ≠ guest language. In PL/CZ/DE the kitchen brigade is frequently Ukrainian-speaking. Per-station language on menu item names is a genuine differentiator in this beachhead and costs you a translation column, not an architecture.
- Void/modify tickets. A cancelled item must print a clearly marked VOID slip at the station that got the original, or the kitchen makes it anyway.
- Reprint with a marker. Every ticket carries a short job ID; reprints are stamped
** REPRINT **.
#2.8 Failover, deduplication and paper-out
Detection. For raw 9100: DLE EOT 1..4 returns Automatic Status Back bytes — printer status, offline cause, error, and paper sensor (paper near-end vs paper-end) [known]. Poll every 20–30 s per printer. For CloudPRNT/SDP, status arrives free in every poll — a strictly better health signal.
Failure taxonomy and response:
| Condition | Detect via | Response |
|---|---|---|
| Paper near-end | ASB roll sensor | Non-blocking toast to manager: "Kitchen printer paper low" |
| Paper out | ASB | Block? No. Route to fallback station, alert loudly, keep the job queued for reprint |
| Cover open | ASB | Same as paper out; auto-recovers |
| Cutter jam | ASB error byte; needs ESC @ or power cycle to clear [known] | Alert + instructions; some models auto-recover after cover open/close |
| Head overheat | ASB | Back off 30 s, retry; common in a hot pass with a heavy raster job |
| TCP connect refused / timeout | Socket | Mark offline after 2 consecutive failures (~60 s), fail over, alert |
| Printer powered off | Same | Same. This is 40%+ of real incidents [estimate] |
Fallback chain (configurable per station): primary printer → secondary printer at same station → expo printer → KDS screen → manager tablet push notification. The last two rungs are what actually saves service.
Duplicate suppression is the hard bit. With raw 9100 you get no job-level ack: the printer may have printed the ticket and then lost power before your socket flushed. You will either double-print or lose tickets. Mitigations that work in practice:
- Assign a monotonically increasing per-station job number, print it on the ticket, and let staff resolve visually ("we already have #412").
- After a socket error, do not auto-retry silently. Surface "Ticket #412 may not have printed — Reprint?" to the person who sent it.
- With CloudPRNT/SDP, the printer acknowledges the job ID after printing — genuine at-least-once with dedupe. Another argument for the pull model on kitchen printers.
#3. Peripherals
#3.1 Cash drawer
- Driven from the printer's DK port (RJ11/RJ12, 6P6C) with
ESC p m t1 t2(m=0 → pin 2, m=1 → pin 5). No separate driver, no separate cable to the PC.[known] - Voltage mismatch is the classic destroyed-hardware incident: Epson/Star DK ports drive 24 V solenoids; many cheap drawers are 12 V. A 12 V drawer on a 24 V port burns out; a 24 V drawer on a 12 V port simply doesn't open. Specify the drawer with the printer, always.
- One DK port = one drawer. Two drawers (two cashiers, one printer) needs a splitter box (~EUR 60) or a second printer. Two-drawer setups also need cash-accountability logic in software.
- Drawer-open sense line is readable via ASB → log every drawer open with a user ID and correlate against no-sale/void events. This is a genuine loss-prevention feature that sells; it costs ~0.2 eng-months.
- SKUs: APG Vasario 1616 (
EUR 110–150), Safescan SD-4141 (EUR 70–100), Star CB-2002 (~EUR 100)[estimate].
#3.2 Legal-for-trade scales — a compliance trap, not an integration
Used for salad-by-weight, deli counters, bakeries, self-serve buffets.
- EU: the instrument must be MID-conformant (Directive 2014/32/EU, Annex NAWI) / OIML R76 class III, with CE + M marking and a metrology verification. US: NTEP CoC + NIST Handbook 44.
- The trap: if your software takes the raw weight and computes the price shown to the customer, the price-computing function may fall inside the legally-relevant software and you inherit WELMEC 7.2 software requirements (checksum-protected legally relevant code, audit trail of legally relevant parameters, separation of legally relevant and non-relevant software, documented version identification)
[known — verify with a notified body before scoping]. That is a notified-body engagement, not a sprint. - v1 rule: only integrate scales that are themselves price-computing and legal-for-trade with their own display (Dibal, Bizerba, CAS PD-II, Mettler Toledo Ariva). The POS receives a completed line item (weight + unit price + total), never computes it. That keeps you out of the legal metrology scope.
- Protocols: mostly RS-232 ASCII (Toledo/8213-style, CAS, Dibal proprietary), a few USB-HID scales using HID Point of Sale Usage Page 0x8D — those are readable from Chrome via WebHID, which is a pleasant surprise for a browser back office
[known]. - Cost: EUR 400–1,500/scale, plus a periodic re-verification obligation (typically annual/biennial, per member state).
#3.3 Barcode scanners
- HID keyboard-wedge is the whole answer for v1. Zero integration, works on iPad (Bluetooth HID), Android, Windows. Configure a CR suffix, optionally an STX prefix, via the manufacturer's config-barcode sheet.
- App-side detection: buffer keystrokes and treat a burst with <30 ms inter-key gaps ending in Enter as a scan, not typing. Handle focus stealing — the most common bug is scanning into whatever field happens to be focused.
- SKUs: Zebra DS2208 (EUR 90–130), Honeywell Voyager 1450g 2D (EUR 100–140), Datalogic QuickScan QD2430 (EUR 90–120)
[estimate]. - Also plan camera scanning on tablets/handhelds for loyalty QR and e-receipt codes — Sunmi V3 Mix / L2s Pro ship a real 2D engine, which beats camera scanning by ~3× in speed.
#3.4 Prep and label printers
| Model | Language | Price EUR | Use |
|---|---|---|---|
| Brother QL-820NWB | ESC/P raster; Brother Print SDK (iOS/Android), b-PAC (Windows) | 250–320 [estimate] | HACCP prep labels (use-by/date-marked), allergen labels. Uses DK die-cut/continuous rolls |
| Brother TD-4550DNWB | ZPL/EPL emulation + Brother | 450–550 [estimate] | Higher-volume label; ZPL emulation means one code path with Zebra |
| Zebra ZD421d | ZPL II over raw 9100 | 380–520 [estimate] | Easiest label integration in existence: send ZPL text over a socket, done. ~1 eng-week |
| Star mC-Label3 / TSP100IVSK | Star markup + CloudPRNT | 320–420 [estimate] | Linerless takeaway bag labels; CloudPRNT keeps it in the same code path as receipts |
Practical: target ZPL for anything serious (Zebra + Brother TD emulation), and add Brother QL only when a customer needs the small DK label form factor. HACCP date-labelling is a real EU obligation for prepped food and a low-effort upsell (~EUR 8–15/site/month).
#3.5 KDS and bump bars
| Option | Cost/station | Notes |
|---|---|---|
| Elo I-Series 4, 15"/22" Android, wall-mounted | EUR 1,150–1,700 [verified/est] | Sealed front, 3-yr warranty, correct for a hot line |
| Sunmi D3 Pro / T3 as KDS | EUR 605–690 [verified] | Cheapest credible; 1-yr warranty |
| Android TV box / Chromebox + commercial 24–32" monitor | EUR 120 box + EUR 200–400 monitor | Cheapest big-screen; monitor must be commercial-grade (16/7 or 24/7 duty) or it dies in a year |
| iPad + wall mount | EUR 520–690 | Only for cold prep / bar |
Bump bar — do not skip:
- Logic Controls KB1700 (USB HID, programmable, spill-resistant): EUR 250–350
[estimate]. Industry standard. - Budget alternative: a EUR 15 USB numeric keypad with printed key caps. Works. Looks amateur. Sells anyway to a 1-site café.
- Foot pedal or a large physical "BUMP" button for the fryer station.
- Implementation is trivial (HID key events → actions) but you must support key remapping per site and lock the KDS app so the keypad can't nav away.
KDS software requirements that surprise people: order age colour thresholds, all-day counts, recall of bumped orders, split-by-station vs. expo view, prep-time prediction, and screen-off/on scheduling so a 22" panel doesn't burn in with a static header.
#3.6 Customer-facing displays, kiosks, handhelds, pagers, caller-ID
| Device | Recommendation |
|---|---|
| CFD | Prefer the dual-screen variants of the Android AIO (Sunmi D3 Pro dual-screen, +EUR 80–150) over a separate device. Second-best: a EUR 150 Android tablet in kiosk mode on a pole mount. Content: line items, total, loyalty prompt, tip prompt, QR for e-receipt |
| Self-order kiosk | Elo 22" I-Series + floor/counter stand: EUR 1,800–2,600 [estimate]; Sunmi K2 Mini: EUR 1,200–1,800 [estimate]. Defer to v2 — the blocker isn't the screen, it's the unattended payment terminal (PAX IM30, Worldline/Nexi unattended units), which is a different PCI PTS approval class and a separate acquirer certification. Kiosks are a 6–9 month project of their own |
| Handhelds | Sunmi V3 Mix EUR 575 / L2s Pro EUR 535–595 [verified], or Zebra TC22/TC27 EUR 800–1,100 [estimate]. Realities: waiters drop them (specify IP67 + 1.2 m drop), batteries do not survive a double shift (specify swappable, buy 1.5 batteries/device), and they get taken home. Cheapest credible alternative is a mid-range Android phone in a rugged case at EUR 200 |
| Pagers | Retekess/LRS coaster pagers, EUR 350–600 for a 10–20 pager set + charger base [estimate]. Integration is poor — most bases take a serial "call number N" command at best. Do not integrate in v1. Use SMS or WhatsApp "your order is ready", which costs EUR 0.03–0.05/message and is strictly better data for the CRM side of the product |
| Caller-ID | PSTN is effectively dead in EU. Do not buy USB CID modems. Integrate at the SIP layer: 3CX / Asterisk AMI or ARI webhook on INVITE, or a Twilio/Vonage number → webhook → pop the guest's CRM record. ~1.5 eng-weeks and it works for VoIP, mobile, and any market |
#4. In-restaurant networking — why "the printer is offline" is ticket #1
#4.1 The physics
A commercial kitchen is a worst case for 2.4 GHz: stainless steel surfaces everywhere (specular reflection + multipath), a microwave oven radiating in channels 6–11, walk-in fridges as Faraday cages, and tiled walls. A dining room 8 m away can be fine while the pass is at −85 dBm. 5 GHz has better spectrum but worse penetration through the brick/tile wall between the dining room and the kitchen.
Rule: anything that prints gets a cable. This one policy removes the largest single class of support tickets.
#4.2 Reference site network (single-site, 40–80 covers)
| Component | SKU | Price EUR | Notes |
|---|---|---|---|
| Router/firewall | Teltonika RUT241 (4G) or UniFi Cloud Gateway | 130–250 [estimate] | RUT241 gives you 4G and the primary link in one box for a small site |
| PoE switch | UniFi Flex Mini 2.5G / TP-Link TL-SG1008P (8-port, 4× PoE) | 60–130 [estimate] | PoE powers the APs, not the printers |
| APs | UniFi U6/U7 Lite/Pro ×1–2 | 110–200 each [estimate] | One in the dining room, one near (not in) the kitchen |
| 4G failover | Built into RUT241, or a separate LTE dongle | +EUR 8–15/mo SIM | For card payments and cloud sync during ISP outages |
| UPS | 600–900 VA line-interactive (APC BE850G2) for router+switch+till | 90–150 [estimate] | In Ukraine this is not optional — see §4.4 |
| Cabling | Cat6, 3–6 runs | EUR 200–500 installed [estimate] | The single biggest install-day variable. In a listed/renovated building it can be EUR 1,500+ |
| Total | EUR 600–1,300 + cabling | Typically 20–35% of the total hardware bill and the part customers didn't budget for |
#4.3 VLANs and PCI scope
Minimum three VLANs: POS (terminals, printers, KDS), PAY (card terminals), GUEST (client isolation on, rate-limited, no route to POS/PAY). Segmenting the payment terminals materially reduces PCI DSS scope; PCI DSS v4.0.1 is in force with the previously future-dated requirements mandatory since 31 Mar 2025 [known — verify exact SAQ applicability with your acquirer]. With a semi-integrated / P2PE terminal, the merchant typically lands on SAQ P2PE or SAQ B-IP instead of SAQ D, which is the difference between a 30-question form and a 300-question one.
Practical caveat: 70% of your SMB sites will have an ISP-supplied all-in-one router with no VLAN support. Your two options are (a) ship your own router as part of the bundle — the right answer, EUR 130–250 — or (b) accept a flat network and design for it (device-level auth, TLS everywhere, no trust in the LAN).
#4.4 Ukraine/CEE-specific: power
Ukrainian sites experience scheduled and unscheduled outages. A POS that dies with the mains is unsellable there. Required stack:
- Offline-first POS — orders, payments-by-cash, and printing must work with zero internet. This is an architectural requirement that reaches into every layer of the product, not a hardware item.
- UPS on router + switch + one till + one kitchen printer (~250–400 W for 2–4 h): APC BE850G2 (EUR 120) for a short bridge, or an EcoFlow River 2 / River 3 (EUR 220–350, 256–300 Wh) for multi-hour
[estimate]. - 4G/Starlink failover.
- Terminals with internal batteries (handhelds, Sunmi V-series, iPads) keep selling when the AIO doesn't. This is a real reason to favour tablets/handhelds in the UA beachhead.
This is a genuine competitive edge: Lightspeed/Square/SumUp do not design for a 4-hour blackout. Say so in the sales deck.
#4.5 Root-cause ranking for "the printer is offline" [estimate, from category experience]
| Rank | Cause | Share | Prevention |
|---|---|---|---|
| 1 | Printer power unplugged (staff needed the socket) | ~25% | Labelled plug, cable clip, heartbeat alert within 60 s |
| 2 | DHCP lease changed / router replaced by ISP | ~20% | Static IPs outside the pool; MAC-keyed re-discovery |
| 3 | Wi-Fi printer out of range / congested | ~15% | Don't sell Wi-Fi printers |
| 4 | Cover ajar / paper out / cutter jam | ~15% | ASB polling + proactive alert before it blocks |
| 5 | Cheap unmanaged switch or PSU failed | ~8% | Spare switch in the van; a EUR 25 switch is a false economy |
| 6 | Client isolation / guest VLAN misconfig after someone "fixed the wifi" | ~7% | Ship the router; lock the config |
| 7 | Firmware/app regression on our side | ~5% | Staged rollout, per-model regression rig |
| 8 | Actual printer hardware failure | ~5% | Spare pool + advance-exchange warranty |
Support economics: at 0.6–1.2 hardware tickets per site per month and 15 min average handling [estimate], one support FTE covers roughly 400–700 sites. Build remote diagnostics (printer status page, "send test print" button, network self-test, one-tap log upload) before you have 100 sites, or your gross margin evaporates into a phone queue.
#5. Build your own hardware? (Short answer: no. Long answer below.)
#5.1 What "build your own" actually means
Three tiers, increasing cost:
| Tier | What you get | MOQ | NRE | Lead time |
|---|---|---|---|---|
| T1 — Cosmetic white label | Your logo on the boot animation, silkscreen, retail box, preloaded ROM | 300–1,000 units [estimate] | EUR 5–20k [estimate] | 8–12 weeks |
| T2 — Custom ROM + minor mech | Custom Android build, your MDM baked in, custom port layout or bezel | 2,000–5,000 units [estimate] | EUR 50–150k [estimate] | 16–24 weeks |
| T3 — New ID / new tooling | Your industrial design, injection-mould tooling, custom mainboard | 5,000–10,000 units [estimate] | EUR 250k–1M+ [estimate] (tooling alone EUR 60–200k) | 9–15 months |
ODM candidates: Sunmi, PAX, Centerm, iMin, Telpo, Urovo, Newland, Feitian. All will do T1; Sunmi and Telpo are the most cooperative with T2 at small volumes [estimate].
#5.2 Indicative BOM for a 15.6" Android AIO with printer [estimate]
| Item | Cost USD |
|---|---|
| 15.6" FHD panel | 60–80 |
| PCAP touch + cover glass | 22–35 |
| SoC board (RK3568 / Snapdragon 6-series), 4 GB / 64 GB | 45–90 |
| 80 mm thermal print mech (Seiko CAPD347 / Fujitsu FTP-628 / APS) + controller | 25–40 |
| NFC module, MSR (optional), speaker, Wi-Fi/BT module | 15–25 |
| PSU + cabling + housing (tooling amortized) | 30–55 |
| Assembly, test, packaging | 20–30 |
| BOM total | 217–355 |
| ODM invoice price (BOM × 1.4–1.6) | 310–520 |
Against a Sunmi D3 Pro at EUR 605 retail / ~EUR 400 at reseller price [verified retail, estimated reseller], your saving at T1 is near zero; at T2/T3 it is maybe EUR 60–120/unit — which you recover only after 3,000–8,000 units, before counting the costs below.
#5.3 The regulatory bill you inherit the moment you put your brand on it
This, not the BOM, is the argument.
| Obligation | Trigger | Cost/effort |
|---|---|---|
| CE marking — EMC 2014/30/EU, LVD 2014/35/EU, RED 2014/53/EU (radio) | Placing under your own brand | EUR 15–40k lab testing per SKU + technical file [estimate] |
| UKCA | GB market | Largely CE-equivalent testing, additional paperwork [estimate] |
| FCC Part 15 B/C | US market | USD 8–25k per radio SKU [estimate] |
| RoHS / REACH | EU | Supplier declarations + your own compliance file |
| WEEE producer registration | EU, per member state | Registration + annual fees + take-back. Germany (Stiftung EAR) requires a registration and a guarantee for B2C; Poland (GIOŚ/BDO), France (eco-organisme), etc. Budget EUR 500–3,000/country/yr + admin [estimate] |
| EU Battery Regulation 2023/1542 | Any device with a battery | Producer registration, due diligence, labelling; obligations phase in through 2025–2027 [known — verify current phase-in dates] |
| GPSR — Regulation (EU) 2023/988, applicable since 13 Dec 2024 | Any consumer-facing product; private-labelling makes you the manufacturer | EU responsible person, technical documentation, traceability, incident reporting [known] |
| Cyber Resilience Act — Regulation (EU) 2024/2847 | "Products with digital elements" placed on the EU market under your brand. Vulnerability-reporting obligations from ~Sep 2026; main obligations ~Dec 2027 [known — verify exact dates] | SBOM, coordinated vulnerability disclosure, security updates for the support period (5 years default), conformity assessment. This is the sleeper cost — it can be several engineer-months/year forever |
| Packaging (PPWR), CE for the PSU, EU declarations of conformity | Always | Ongoing |
If you resell under the OEM's brand, essentially all of the above stays with Sunmi/Epson/Elo. That is worth more than EUR 100/unit of margin to a 4-person company.
#5.4 Operations you also inherit
- DOA rate 1–3%; annual failure rate 3–8% for printers and AIOs
[estimate]. At 500 installed sites × 2.5 devices, that's 40–100 RMAs/year. - Spare pool at 5–8% of installed base, in-region. At 500 sites that's ~60 units of dead capital, ~EUR 30–45k.
- RMA to China is 3–8 weeks door-to-door. You must ship a replacement first and eat the float, or your customer is down for a month.
- Working capital. 300 sites × EUR 1,400 hardware = EUR 420k of inventory + in-transit. For an S1 bootstrapped team this alone ends the discussion. Even at S2 (EUR 5–10M), spending EUR 500k on inventory instead of 4 engineers and 3 salespeople is a bad trade.
- Firmware ownership. Own hardware means owning Android security patches, bootloader, and OTA — 1.5–3 engineer-months/year, minimum.
#5.5 Who builds and why
| Vendor | Builds hardware? | Why |
|---|---|---|
| Square, SumUp, Zettle, Toast | Yes | Payments-led. The reader is the moat; they subsidize hardware against interchange revenue and have 100k+ unit volumes. Toast raised ~USD 900M+ pre-IPO to do it [known] |
| Lightspeed, Revel, TouchBistro, Storyous, Dotypos, poster/Syrve (CEE) | No — they certify and resell | Software-led. Hardware is a channel/support cost, not a moat |
You are software-led at v1 and you are not an acquirer. Resell. Revisit only if (a) you cross ~3,000 terminals/year, and (b) you become the merchant-of-record on payments so hardware can be subsidized, and (c) you have a dedicated hardware/ops hire. All three, not any one.
One nuance where the brief is slightly wrong: don't just "certify commodity hardware" — sell a branded bundle (your box, your quick-start card, your pre-provisioned config, your SIM, your support number) of OEM-branded devices. You get the perceived integration of own hardware and none of the CE/GPSR/CRA/WEEE liability, because the device is still legally Sunmi's.
#6. Recommended certified hardware matrix — v1
#6.1 Tiers
Tier A — "Café / bar, 1 till" (target BOM EUR 1,200–1,700)
| Role | SKU | Price EUR | What breaks |
|---|---|---|---|
| Till | Sunmi D3 Mini (GMS if available, else D3 Pro GMS) | 465–639 [verified] | Integrated 58 mm printer is narrow for itemised receipts; printhead is the wear part |
| Receipt printer (if separate) | included in D3 | — | — |
| Cash drawer | Safescan SD-4141, 24 V | 70–100 [estimate] | Voltage mismatch; runners jam with coins |
| Card terminal | acquirer-supplied (Viva/SumUp/Nexi/Adyen) | 0–299 | Estate-locked; pairing drops |
| Router | Teltonika RUT241 | 130–180 [estimate] | Nothing; it's the most reliable box on the list |
| UPS | APC BE850G2 | 110–140 [estimate] | Battery dies at 3 yr |
Tier B — "Full-service restaurant, 2 tills + kitchen" (target BOM EUR 3,500–5,500)
| Role | SKU | Qty | Price EUR each | What breaks |
|---|---|---|---|---|
| Till | Sunmi D3 Pro GMS 15.6" | 2 | 639 [verified] | Grease film on glass; Android version rot |
| Front receipt printer | Epson TM-m30III (C31CK50152, all-interface) | 1 | 314.87 [verified] | Autocutter after ~1–1.5 M cuts; paper roll changes |
| Kitchen printer | Epson TM-U220II (Ethernet) | 1–2 | 280–340 [estimate] | Ribbon every 4–10 weeks; loud; slow (6 lps) but survives steam |
| Bar printer | Star TSP143IV LAN (CloudPRNT) | 1 | 230–280 [estimate] | Thermal fade near ice/condensation |
| KDS | Elo I-Series 4 15.6" Android, wall mount | 1 | ~1,150 [verified USD-derived] | Nothing for 3 years; that's why it costs this |
| Bump bar | Logic Controls KB1700 | 1 | 250–350 [estimate] | Keys stick with grease; wipeable membrane |
| Handheld | Sunmi V3 Mix or L2s Pro | 2 | 535–595 [verified] | Dropped; battery; lost |
| Cash drawer | APG Vasario 1616, 24 V | 1 | 110–150 [estimate] | Runners |
| Scanner | Zebra DS2208 (only if retail/bottle-shop) | 0–1 | 90–130 [estimate] | Cable strain relief |
| Network | RUT241 + 8-port PoE switch + 1–2 UniFi U6 Lite | 1 set | 400–650 [estimate] | Cabling labour is the variable |
| UPS | APC BE850G2 or EcoFlow River 2 | 1 | 110–350 [estimate] | Battery at 3 yr |
Tier C — "Small chain / high-volume QSR": swap the front printer for TM-T88VII (EUR 400–480), add a second KDS, add Star SP742 HI X at the expo, add a Zebra ZD421d for takeaway labels, add a managed UniFi gateway.
#6.2 The explicit "we do NOT support in v1" list
Publishing this saves more engineering time than any feature.
- Wi-Fi-only printers (LAN or USB only; Wi-Fi is "unsupported, best effort")
- Serial-only legacy printers without a network bridge
- Bluetooth printers on iOS that are not MFi-certified
- Coaster pagers (use SMS/WhatsApp)
- USB caller-ID modems (use SIP webhooks)
- Non-price-computing scales (legal metrology risk)
- Self-order kiosks with unattended payment (v2)
- Windows POS terminals as primary — except as a fiscal-printer bridge in PL
#6.3 The elephant: fiscalization changes the printer matrix per country
This is hardware policy, not just tax policy, and it must be settled before you buy anything.
| Market | Regime | Hardware consequence |
|---|---|---|
| Ukraine | PRRO — software fiscal registrar, receipts signed and transmitted to the ДПС API; no certified hardware device required [known] | Best case for us. Any ESC/POS printer works; the fiscal receipt is generated in software. This is a real reason to beach-head in UA |
| Poland | Online fiscal cash registers mandatory for gastronomy; certified fiscal printers (Posnet Thermal XL2 Online, Elzab Mera Online, Novitus HD Online) with GUM homologation; plus "kasy wirtualne" (virtual/software cash registers) approved for gastronomy since ~2020–21, which require GUM certification of your software [known — must verify current GUM requirements and the approval process/timeline] | Either you drive a fiscal printer over a proprietary serial/USB protocol (Posnet Thermal protocol; vendor SDKs are frequently Windows DLLs, forcing a Windows or Linux bridge box on-site, +EUR 200–350/site), or you certify a virtual cash register with GUM. Both are multi-month projects. This is the #1 gate on the Polish market |
| Czechia | EET repealed, effective 1 Jan 2024 [known] | No fiscal hardware. Clean market |
| Romania | AMEF electronic fiscal devices mandatory (Datecs, Tremol, Custom), electronic journal + periodic ANAF reporting [known] | You must integrate a certified fiscal device over serial/USB with a vendor protocol. Similar cost profile to Poland |
| Germany | KassenSichV / TSE — every till needs a certified Technical Security Element (TSE) [known] | TSE as a USB stick (EUR 60–200), microSD, or cloud TSE (fiskaly, Deutsche Fiskal, ~EUR 5–12/till/month). Cloud TSE is the sane path and is a software integration, not a device — Germany is more tractable than Poland |
| Austria / France / Italy | AT: RKSV signature device (smartcard/HSM or cloud). FR: NF525 / loi anti-fraude software certification. IT: telematic RT printers (Epson FP-81II RT, Custom) [known] | IT is hardware-bound (RT printers); FR is a software certification; AT is a cloud-signable device |
| US | No fiscalization | Only sales-tax logic. Easiest of all |
Impact on this document's recommendations: the "Epson TM-m30III everywhere" plan holds in UA, CZ, DE, AT, FR, and the US. It does not hold in PL, RO, or IT, where a certified fiscal printer sits between your software and the paper. Budget 4–8 engineer-months per fiscal-hardware market on top of everything in §7.
#Build effort
Assumes S1 (founder + 2–4 engineers, AI-assisted). AI assistance helps a lot with the ESC/POS/ZPL/XML plumbing and almost not at all with device-specific quirks, which require the physical device on a desk. Budget EUR 6–10k for a device lab (one of every SKU in §6.1 plus 3–4 clones) — without it these estimates are fiction.
| # | Work item | Eng-months | Variance drivers |
|---|---|---|---|
| 1 | Print rendering core: layout DSL → 1-bit raster + text fast path, code pages (CP852/1250/866/1251), logos, QR, barcodes, paper widths 58/76/80 mm | 2.5 | Raster-only halves this to ~1.5; supporting the text fast path per model doubles the model-specific bugs |
| 2 | Transport drivers: raw TCP 9100, Epson ePOS-Print XML + ePOS-Device SDK, Star CloudPRNT (+MQTT), Epson Server Direct Print, Android USB, iOS MFi Bluetooth | 3.0 | Each additional transport ≈ 0.5–0.7 mo. Dropping BT/USB for LAN-only saves 1.0 mo and loses handheld printing |
| 3 | Discovery & provisioning: mDNS, Epson UDP 3289, Star discovery, ARP+9100 sweep, iOS multicast entitlement, static-IP wizard, MAC-keyed re-binding, physical labelling flow | 1.5 | Apple entitlement approval is an external dependency of unknown duration; manual-IP fallback is mandatory anyway |
| 4 | Routing engine: item/category/modifier → station, multi-station fan-out, course firing, consolidation modes, per-station language, void/modify tickets, reprint with job IDs | 2.0 | Course firing and multi-station fan-out are ~60% of this. Cutting them makes the product unsellable to table service |
| 5 | Health, failover, dedupe, telemetry: ASB polling, offline detection, fallback chain, at-least-once semantics, "may not have printed" UX, per-printer health page, alerting | 2.0 | Getting duplicate-suppression right is the risk; the naive version ships in 0.7 mo and generates angry tickets forever |
| 6 | KDS app (Android + web) + bump bar + expo view + all-day counts + recall + screen scheduling | 3.0 | A "list of tickets" ships in 1.0; a KDS a chef will actually accept is 3.0 |
| 7 | Cash drawer (kick + open-audit), HID scanner handling, customer-facing display | 1.0 | Low risk |
| 8 | Label/prep printing: ZPL (Zebra + Brother TD), Brother QL SDK, HACCP date-label templates | 1.0 | ZPL alone is 0.4; adding Brother QL SDKs for iOS+Android is +0.6 |
| 9 | Scales: RS-232 protocol adapters (Toledo/CAS/Dibal), USB-HID + WebHID, price-computing-scale-only policy | 1.0 | +2.0–4.0 if you ever decide the POS computes trade prices → WELMEC 7.2 / notified body |
| 10 | Device management: kiosk lockdown, OTA APK distribution, remote log pull, remote reboot, config push, own push transport for non-GMS devices | 2.0 | Using an off-the-shelf MDM (Esper, Scalefusion, Sunmi's own) cuts this to ~0.8 at EUR 2–5/device/mo |
| 11 | Hardware certification lab: per-model test matrix, automated regression rig (a shelf of printers + a nightly job), documented compatibility list | 1.5 + 0.25/quarter forever | Number of certified SKUs is the multiplier. 6 SKUs is manageable; 20 is a full-time job |
| 12 | Installer/field tooling: site survey checklist, network self-test, one-tap provisioning, printed labels, install runbook | 1.0 | Directly reduces support cost; skipping it is a false economy |
| 13 | Support tooling & docs: printer status page, "send test print", diagnostics bundle, troubleshooting decision tree | 0.5 | — |
| Subtotal — hardware & peripherals v1 | ≈ 22–26 (take 24) | ||
| A | Add-on: Polish fiscal printer integration (Posnet/Elzab/Novitus protocols, Windows/Linux bridge box, service-technician workflow) | +4.0–6.0 | Windows-only vendor DLLs; homologation and authorised-service constraints |
| A' | Alternative: Polish virtual cash register (GUM certification of our software) | +6.0–10.0 + external cert cost/time | Certification body timeline is the risk, not the code |
| B | Add-on: Romanian AMEF integration | +3.0–5.0 | Similar shape to PL fiscal printers |
| C | Add-on: German cloud TSE (fiskaly / Deutsche Fiskal) | +1.5–2.5 | Pure API work; cheapest fiscal market to enter |
| D | Add-on: self-order kiosk + unattended payment terminal | +5.0–8.0 | Unattended EMV certification with the acquirer dominates |
Calendar time, S1 (3 engineers, ~1 on hardware full-time + shared): the 24 eng-months of core work is 9–12 calendar months with one dedicated hardware/integrations engineer plus part-time help — and it is genuinely parallelizable with the POS app work. S2 can compress to 5–6 months with 3 dedicated engineers plus a field/ops hire, but not below that, because device quirks are discovered serially at real sites.
#Open questions / what would change this answer
- Which country is the true beachhead? If it's Poland, fiscalization hardware is the first thing built and adds 4–10 eng-months plus an external certification dependency — that reorders the entire roadmap. If it's Ukraine (PRRO, software-only fiscal), the hardware plan in §6 is correct as written and you can ship in 9 months. Verify: current GUM requirements and approval timeline for kasy wirtualne in gastronomy; current ДПС PRRO API and whether the software-RRO route still requires no certified device.
- Browser-first or native-first? This is the single highest-leverage decision in the document. Browser-first forces cloud-pull printing (Epson SDP / Star CloudPRNT), which caps your printer matrix to those two vendors' supported models and adds 0.2–10 s receipt latency. Native-first (iOS + Android apps) unlocks raw 9100 and every clone printer, at the cost of app-store distribution and two more codebases. Verify: current Chrome Private Network Access policy and whether Apple has granted multicast entitlements for POS use recently.
- Do we become a payment facilitator / merchant of record? If yes, own hardware becomes defensible (subsidize the terminal against interchange, Square/SumUp model) and §5's conclusion flips at ~3,000 units/yr. If no, resell forever.
- Exact reseller pricing. The EUR figures in §1.2 are single-unit retail
[verified]. Real distributor pricing at 50–200 units/yr is the number that decides whether hardware is a 15% or a 30% GM line. Verify: get quotes from Jarltech, Logiscenter, ITG Store, and Sunmi EU direct for a 100-unit annual commitment on D3 Pro GMS, TM-m30III, TM-U220II, TSP143IV. - Cyber Resilience Act applicability. If CRA obligations extend to POS software placed on the EU market — not just branded devices — the "just resell" escape hatch shrinks and you owe SBOM + vulnerability handling + 5-year support regardless. Verify: current CRA guidance on SaaS vs. "products with digital elements," and the Sep 2026 reporting-obligation date.
- Legal metrology. Whether a POS that receives weight from a legal-for-trade scale and prints it on a receipt is itself in scope of WELMEC 7.2 varies by member state's interpretation. If it is in scope even for our receive-only design, weight-based selling becomes a v3 feature, not a v1 one. Verify: with a notified body (e.g. NMi, PTB) in the target market before promising a deli-counter customer anything.