RestaurantBrain feasibility study

#Payments, fiscalisation, privacy and security

This document is the single place compliance numbers live. Where another doc quotes a fiscal cost, a PCI scope, a lawful basis, a payments bps figure or a regulatory fine amount (§4.2), it must match this file. Deviations belong in 08 — Pros, cons, difficulties and risks, not here.

Label key: [verified] = checked against a live source on 2026-08-18 · [known] = training data ≤ May 2026 · [estimate] = reasoned guess. Legal-confidence key on every legal claim: H = statute/primary source read, low interpretation risk · M = statute known, application to our fact pattern untested · L = inference, needs counsel before it is relied on.


TL;DR

  • We never touch a PAN, ever. Semi-integrated only, Stripe Terminal (S700 + S710), zero EMV L2/L3 work forever. Our merchants land on SAQ B-IP, not SAQ P2PE — every "P2PE" claim is struck from sales material today (Stripe is not on the PCI SSC P2PE listing) [known] H. We self-assess as SAQ D-Service Provider with evidence collection starting month 1, because v4.0.1 wants ~12 months of continuous operational evidence and the first chain deal will ask [verified] H.
  • Payments SaaS economics do not save us; the payments contract does. The rail is Stripe Terminal; the money is a separate ISV/referral agreement (Viva.com first, then Nexi/Worldline/Global Payments via ČSOB-KB/Nuvei/Adyen). A2 is a hard gate: ≥25 bps residual, no merchant-ownership clause, in writing, at P0 exit — or stop. We never become a payfac (break-even ≈ EUR 333M TPV; PSD3/PSR applies H2 2027–early 2028) [verified] H.
  • Czechia is the only market in v1 because it is the only market with zero fiscalisation and zero producer liability. EET abolished 1 Jan 2023 [known] H. The binding rule everywhere else: enter only markets whose time-to-first-legal-invoice is under 60 days. That permanently excludes Spain — RD-ley 15/2025 postponed the taxpayer dates, not the 29 Jul 2025 producer deadline, and LGT art. 201 bis fines the producer [verified] H.
  • Buy the fiscal signing layer, and say why in the risk register: co-defendant risk transfer, not price. FiscalProvider is ours; fiskaly / Deutsche Fiskal / EFSTA sit behind it in every signing market; UA goes through Checkbox or Vchasno so we never hold a merchant's КЕП key; PL drives a GUM-homologated kasa-online printer (Posnet/Elzab/Novitus), never our own GUM certification.
  • The CRM's highest-volume capture channel is a legal question, not an engineering one. A neutral "join here" line inside a transactional e-receipt is assumption A4 (CZ counsel, EUR 3–5k, due M2). It is already assumed unlawful in Poland under PKE art. 398, where fines scale to 3% of the sender's prior-year turnover or PLN 1,000,000, whichever is higher [verified] H. PL e-receipts are fiscal-only, and we never aggregate one Viber/SMS sender across PL tenants.
  • Two guaranteed production failures, budgeted now, not later: SCA soft-declines (online_or_offline_pin_required) appear at ~1:1 with successful PIN transactions and will manufacture double charges if rendered as "failed" [verified] H; and in the CEE beachhead the PIN path is the common path, not the fallback (CZ no-CVM floor ≈ CZK 500 / ~EUR 20 against a EUR 8–12 café ticket) [known] M.

#1. Payments architecture

#1.1 The invariant

One PaymentTerminal port. Adapters: stripe-terminal (v1), adyen-terminal-api (hedge), ua-mono, ua-privat (P3). Check flow logic never branches on provider. Zero PAN in any API surface, log, ticket, screenshot or backup — enforced by an edge validator (reject Luhn-passing 13–19 digit sequences), a log-shipper scanner, a second scanner in the SIEM, and a CI test that fails the build on a leaked test payload.

Stored on payment_method: provider, provider_token, network_token_id, par (nullable), network_transaction_id, fingerprint, last4, brand, exp_month, exp_year, issuer_country, funding_type. Never pan, never cvv, never track data. Note last4 + expiry + name is not cardholder data under PCI but is personal data under GDPR (§6) H.

Topology: semi-integrated, server-driven with a local SDK fallback. Our backend creates the PaymentIntent; the reader owns the card data and the host link. Latency 1.5–4 s local, 3–7 s cloud [estimate].

#1.2 Card sale with tip (the canonical flow)

sequenceDiagram autonumber participant C as Cashier (POS app) participant D as Local store (SQLite) participant B as Backend (Ktor) participant S as Stripe (PSP) participant T as Reader S700/S710 participant G as Guest C->>D: Close Check → Tender{type=card, amount_minor} D->>D: Write payment_attempt{state=pending,<br/>idem_key=(check_id, attempt_seq)} in same txn as outbox row D->>B: POST /payments/attempts (idempotent) B->>S: CreatePaymentIntent(amount, currency, capture=automatic,<br/>on_behalf_of=site_acct, metadata{check_id, business_date, site_id}) B->>S: ProcessPaymentIntent(reader_id) S->>T: push collect T->>G: Display amount + tip prompt (on-terminal, pre-auth) G->>T: Select tip → tap/insert alt Contactless above CZ no-CVM floor (~CZK 500) T->>G: "Insert card, enter PIN" S-->>B: charge #1 soft-decline `online_or_offline_pin_required` Note over B: classify as IN-FLIGHT.<br/>NEVER surface as "declined".<br/>Filter from reconciliation matching. end T->>S: EMV auth (PIN verified) S-->>B: PaymentIntent succeeded<br/>amount_details.tip.amount, card_present{fingerprint,<br/>network_transaction_id}, acquirer reference B->>D: payment{state=approved, tip_minor, acquirer_ref persisted forever} D->>C: "Approved" + print/e-Receipt Note over B,S: If no response in N s → payment_attempt stays `unknown`,<br/>POS shows "checking with the bank", background job<br/>re-fetches the PaymentIntent, auto-reverses stale auths. B->>B: Nightly 3-way match: Check ↔ terminal journal ↔ settlement file

Non-negotiables visible in that diagram (canon §3.1 invariants 6, 7, 8): the local write and the outbox row are in one transaction; payment_attempt has an explicit unknown state that is never rendered as "failed"; the idempotency key is {check_id, attempt_seq}; the acquirer transaction reference is persisted forever; terminal ownership is a lease carrying the same durable monotonic epoch as print dispatch, reconciled nightly against the PSP by idempotency key.

#1.3 The flows that break naive integrations

Flowv1 (CZ, counter-service) decisionWhyEff. [estimate]
TipOn-terminal, pre-authorisation, captured as tip_minor on the Payment; per-employee attribution. Post-auth tip adjust is a US pattern and is generally unsupported by EU acquirers [known] H. Tip distribution/pooling is NOT built — canon §4 carries it as an out-of-scope row with the trigger "a paying UK or US customer, plus a German Steuerberater opinion"Tip is outside VAT scope; Service Charge is VAT-able revenue and a distinct entity. Conflating them mis-files VAT for every Customer at once Hin E
Tabs / pre-authNot in v1. Counter-service only. Card-present incremental auth is largely unavailable via EU partner APIs [known] M; the US "hold the card behind the bar" pattern is not viable in the EURemoving it removes an unsettled-balance concept and a walk-out write-off workflow0
SplitsBy amount and evenly, in v1. By seat / by item is v3 (P4) — it rides on table service, which moves out of the P3 build with the rest of full-service. Cents remainder allocated by deterministic largest-remainder, never round() per share. Check-level VAT is allocated to splits, never recomputed per splitPer-line VAT must re-sum to the Check VAT exactly, or the fiscal document is internally inconsistent Hin E
Void vs refundVoid before Daily Close; referenced refund after. Many EU acquirers have disabled unreferenced card-present refunds [known] M — hence the persist-forever acquirer referenceRestaurants close batches nightly, so almost every "fix yesterday" is a refund. UI copy must say "the Guest sees this in 3–10 days". This is the #1 support ticket in every POSin E
Partial refund after tipAllocatable across {food, service charge, tip}. Refunding an already-attributed Tip is a payroll clawback — model it explicitly, never implicitlyin E
Offline cardStore-and-forward is never built. The merchant eats every loss; forward-failure 1.5–4% [estimate]; SCA cumulative counters live at the issuer, so a Guest already over the limit is approved offline and declined on forward [known] HThe sales claim is exactly: "orders, kitchen, cash and receipts keep working with no internet; card payments depend on your acquirer." A9 exists only to fix that sentence0
DCCAcquirer-side only, never built. Our job: tolerate 3–8 s of extra terminal dialogue without timing out, and record both currencies + applied rate on the Receipt and in the ledger. Reg. (EU) 2019/518 transparency is the acquirer's obligation [known] MReal revenue in Prague old town, zero build0
SurchargingNever in the EU. PSD2 Art. 62(4) bans surcharging on IFR-covered EEA consumer cards; 62(5) let Member States ban it outright [known] H. A mandatory Service Charge is modelled in the tax engine, not in a surcharge engineDeleting the engine saves 1.5 eng-months and a permanent liability sink0
Cash roundingCZK 1, on the cash Tender only [known] H — not the card Tender, not the Check total, not the VAT base. Mixed tender: rounding computed on the residual cash amount. The Receipt carries a non-taxable rounding lineGetting this wrong makes every CZ Receipt wrongin E
SCA soft-decline*_pin_required is an in-flight state, never terminal; filtered before reconciliation matching. Stripe's own DE docs: PIN-authenticated transactions produce two charges, the first soft-declined [verified] HWithout this, a naive decline-rate dashboard reads ~50% in week one and staff re-run payments → the canonical double charge+0.5

Reconciliation is the hidden cost. Three-way match (Check ↔ terminal journal ↔ acquirer settlement) with tip-on-terminal rows, cash rounding on the residual tender, offline Checks landing hours late and phantom soft-declines. r02 budgeted 2.5 eng-months; c02 corrects to 4.5–6.0 for two acquirers, and it never finishes [estimate]. Canon absorbs this inside Domain E.


#2. Acquirer and terminal decision, per market

MarketCard-present railDevices availableOur payments revenueFiscal coupling to paymentsVerdict
CZ (v1)Stripe Terminal, semi-integratedWisePOS E, S710, S700, Verifone V660p/UX700/P630 (preview) — widest roster in CEE [verified]Thin but non-zero; must come from a separate ISV agreement (A2)NoneDEFAULT
UA (P3)monobank + PrivatBank Android terminals behind the same portBank-supplied Android terminalsEUR 0 to us — the merchant contracts the bank directly; neither publishes an ISV programme [known] MPRRO fiscalises the receipt; the payment result is a field on the Fiscal DocumentIntegrate, don't monetise
PL (P3)Stripe TerminalWisePOS E, S710, S700 [verified]Best CEE spread modelled: EUR 1,620 net payments gross profit / site / yr [estimate]kasa-online printer prints the paragon; POS drives itEnter, market 3
DE (v3 / P4, gated)Stripe Terminal — girocard IS supported, on WisePad 3 and S700 only; WisePOS E does not support girocard; S710 is not available in DE [verified] HS700 + WisePOS E onlyEUR 670 / site / yr [estimate] — the worst payments market in the planTSE signs every transactionDefer; 5-gate entry (§4.4)
IT / GRAny — but the terminal must be technically linked to the fiscal device (IT from 1 Jan 2026, GR since 2024) [verified] HA payments decision becomes a fiscal decisionNever in this plan
Chain escape hatchAdyen Terminal API (Nexo/SaleToPOI)Verifone/Castles estatesSameHedge only, ~8–12 eng-weeks

Recommended default: Stripe Terminal, two SKUs (S700 + S710), semi-integrated, plus a separately negotiated ISV/referral agreement for the economics. Reasons, in order: one SDK across every market we will ever enter under the 60-day rule; Stripe holds L2/L3 for the whole estate so our EMV certification cost is permanently zero; Stripe does not sell restaurant POS — SumUp does (Goodtill/Tiller/Shore), which is why SumUp Cloud API is a retention adapter at best and never the primary rail.

Two structural facts that constrain the choice:

FactConsequenceConf
Teya owns Storyous and holds a majority of Dotykačka — the two most likely CZ displacement targetsTeya is structurally unavailable as our CZ payments partner. A3: confirm by one direct call in M1. If wrong, it becomes the cheapest on-ramp and A2 gets much easierM
Adyen returns PAR for Visa/Mastercard on Terminal API payment and card-acquisition requests [verified]; Stripe documents fingerprint and network_transaction_id on card_present, and no payment_account_reference field appears in the Charge/PaymentIntent schema [verified — absence of documentation, not proof of absence]A6: one day of sandbox testing against both, due M1. If Stripe emits PAR, card-linked identity moves v2 core → v1.1. If not, it stays in v2 core (P3) and we do not switch PSPs for itM

Germany's girocard adds three problems the DE decision must carry (all [verified], H): (1) girocard has no native refund — Stripe refunds by SEPA transfer to the IBAN behind the card, which can fail if the account is closed, so refund_pending_sepa / refund_failed are real terminal states plus a remediation workflow and cashier copy (+0.75–1.0 eng-months); (2) no S710 in DE, so the hardware matrix is permanently two SKUs; (3) girocard does not support off-session payments, so SetupIntents route to the international network — one German Guest generates a girocard in-store authorisation and an international-network card-on-file token, and no PSP fingerprint will unify them. Only PAR could, and it is not established that a domestic girocard authorisation carries one.

Never: true payfac (EUR 1.0–1.6M year-one cost, 18–30 months, break-even ≈ EUR 333M TPV ≈ 400–600 sites) [estimate]; own EMV L3 (USD 120k–250k, 18–24 months per scheme per acquirer per region) [verified]; any conversation containing the phrase "your L3". Domestic-rail ECR/POI certification is not free either — c02 corrects r02's 0.75 eng-months to 2–4 eng-months and 3–6 months wall clock per acquirer per country, because you are queuing for a bank's quarterly certification window [estimate].

Unmodelled payments liabilities to price before P3 (A23): sub-merchant KYB stalls 10–20% of SMB applications, rejects 2–5% [estimate] — a signed Customer who cannot take cards for 9 days is a churn event; and under a platform-liable model, merchant negative balances and chargebacks land on us at EUR 15–40k/yr at 300 sites [estimate] given a 4–8%/yr restaurant failure rate. Both need an ops owner, not an engineer.


#3. PCI DSS v4.0.1 scope statement

All assessments in 2026 are against v4.0.1. The 51 previously future-dated requirements became mandatory 31 Mar 2025; all 64 new/changed requirements are in scope and expect ~12 months of continuous operational evidence [verified] H.

PartyLanding zoneRequirement count [estimate]Cost [estimate]
Our merchant, semi-integrated IP terminalSAQ B-IP~80Low; a real questionnaire, not a 2-page form
Our merchant, once our app runs on the reader (Apps-on-Devices, v3 / P4)SAQ C is the assessor's reasonable push~140–160 + quarterly ASV scans+3–5 h of onboarding per Site
Our merchant, online ordering with hosted/iframe payment (v2 core, P3)SAQ A~30–35Near zero
Us, as a Service ProviderSAQ D-Service Provider, self-assessed~250–300EUR 20–40k with QSA-assisted readiness
Us, above Level 1 SP threshold (>300k txn/yr as SP, or scheme designation)Annual ROCEUR 40–90k/yr QSA + EUR 60–150k first-year remediation + 3–5 eng-months of diverted engineering

SAQ P2PE is not achievable with this stack and is struck from every document and sales asset (canon §3, A19). Only a solution on the PCI SSC P2PE listing entitles a merchant to SAQ P2PE; Stripe is not on that listing [known] H. Vendors market "P2PE-grade" without a listing. For every acquirer we sign, demand the PCI SSC listing URL and the P2PE Instruction Manual, or plan for B-IP.

What we must do

  1. Start SAQ D-SP evidence collection in month 1 — logging, key management, change-control records, quarterly ASV scans, annual pen test, segmentation testing. You cannot buy 12 months of evidence in the quarter a chain asks.
  2. Ship a network posture as a field-services deliverable, not a checklist: terminals + KDS + printers on a dedicated VLAN/SSID off guest Wi-Fi. Canon already makes the Teltonika RUT241 router and a validated AP a hard requirement of the install — that is the PCI segmentation story and the peer-sync story in one line item (see 03 — Hardware, peripherals and the device fleet).
  3. Get a written QSA scoping opinion (EUR 5–10k) before the first Apps-on-Devices deployment, not after (A19). PA-DSS retired 28 Oct 2022 and was replaced by the PCI Software Security Framework; "our app runs on the payment terminal" is exactly the fact pattern where an assessor or an enterprise procurement team invokes it [known] M.
  4. Bind Tech E&O + Cyber, EUR 1–2M limit, EUR 8–25k/yr before Customer #1 (A18) [estimate]. It is a procurement gate for any chain — and it never covers producer-side fiscal fines.

What we must never do

  • Never accept a keyed PAN in our UI. Any MOTO/phone-order requirement is entered on the PIN pad, or the feature does not exist. This is an institutional rule, not a code-review preference: one careless field converts SAQ D-SP into a CDE.
  • Never store PAN, CVV or track data. Never put a card number in a support ticket, a screenshot, or a log line.
  • Never claim P2PE, "PCI compliant" without naming the SAQ, or "we're out of PCI scope".

#4. Fiscalisation

#4.1 The rule that generates the market list

Enter only markets whose time-to-first-legal-invoice is under 60 days.

Under S1, a market whose certification calendar exceeds the remaining runway is disqualified, not expensive. The failure mode is precise: start certification at month 12, spend 9 months of authority calendar, reach first revenue at month 21 with 3 months of runway — and you cannot pivot, because the dossier binds a software version you may no longer deploy over.

#4.2 The table

Cost = cash to first legal invoice, excluding our engineering. Eng-months are for that market's fiscal work only and sit inside canon Domain F.

MarketRequirementCertifierElapsed to first legal invoiceCash cost (EUR)Eng-monthsVerdictConf
CZNone. EET abolished 1 Jan 2023. VAT records + kontrolní hlášení only0 days~00.25ENTER — market 1, all of v1H
UAPRRO: register 20-ОПП / 1-ПРРО / 5-ПРРО; sign receipts with КЕП (ДСТУ 4145-2002); fiscalise against the ДПС server; mandatory offline mode with pre-issued fiscal-number rangesДПС (registration only, no product certification)0–30 days~01.75 via Checkbox/Vchasno (5–6 if direct + КЕП custody)ENTER — market 2 (P3)H
PLkasa online (GUM-homologated printer) or kasa wirtualna. Gastronomy (PKD 56) is on the permitted virtual list [verified] — but a virtual register still needs GUM confirmation. Plus KSeF (all taxpayers 1 Apr 2026; simplified invoices into KSeF from 1 Jan 2027) [verified] + JPK_V7MGUM (virtual); no cert if driving a homologated printer<60 d via printer partner; 6–12 months via GUM~5k partner integration; PLN 50–150k via GUM3.5 partner route (+4.0 GUM)ENTER — market 3 (P3), printer-partner route only (A12)H on eligibility, M on GUM cost/elapsed
NLNone. 7-year administratieplicht; Keurmerk is voluntary0 days~00.5DEFER — passes the rule, rejected commercially (Dutch support FTE EUR 4,200–5,200/mo vs EUR 2,500 CZ, cannot be served from Kyiv)H
DETSE (BSI TR-03153) signs every transaction; DSFinV-K 2.3 export (~20–30 CSVs); ELSTER register notification within 1 month; BelegausgabepflichtBSI certifies TSE modules, not our POS<60 days with a cloud TSE contract0 cert + EUR 10–15/register/mo [verified]3.0 (+1.0 hardware TSE)DEFER to v3 (P4), behind a 5-gate checklist (§4.4)H
ATRKSV: AES-256 turnover counter, signature chain via a certified SEE, QR on receipt, FinanzOnline registration, DEP export, monthly Nullbeleg + JahresbelegBMF-approved SEE providers (A-Trust, PrimeSign)<60 daysEUR 5–10/register/mo cloud2.0DEFER to v3 (P4) — DE's cheap sibling, same language, ~1/3 the engineering. Do them together or not at allH
FRart. 286-I-3°bis CGI: inaltérabilité, sécurisation, conservation, archivage + JET event journal + clôtures. Self-attestation restored by LOI n° 2026-103 du 19 fév. 2026, art. 125, effective 21 Feb 2026 [verified]. Receipt printing prohibited by default (loi AGEC)Éditeur self-attests; NF525/LNE now optional<60 days (self-attest)0 self / EUR 15–30k + 5–10k/yr NF5252.5 + 2.0 e-reportingDEFER — and note the clock: B2B e-invoice reception is mandatory for all businesses from 1 Sept 2026 [verified], ~2 weeks out. Any FR customer onboarded after that needs PA/PDP reception on day oneH on the reversal; M on whether a French auditor accepts an attestation from a non-resident editor with no French establishment
UKNone fiscal. The binding regulation is the Employment (Allocation of Tips) Act 2023 (in force 1 Oct 2024): 100% to workers, written policy, 3-year records, worker right to request0 days~02.5 (tips law, not fiscal)DEFER — most crowded market on earth; do not build the Tipping Act until a UK Customer pays for itH
ITRegistratore Telematico or AdE-approved software solution; corrispettivi; mandatory POS-terminal ↔ RT linkage from 1 Jan 2026, 45-day per-merchant registration clock [verified]Agenzia delle Entrate6–12 months own homologationEUR 30–80k own; ~0 with an RT partner4.5–5.5 + a permanent ops taskNEVER in this planH
ROAMEF certified hardware + electronic journal; e-Factura incl. B2C; SAF-T D406 completing through 2026ICI / Comisia AMEF; ANAF3–6 monthsEUR 10–20k4.0NEVER in this plan — three parallel obligations, narrowest Stripe reader roster in CEE (WisePOS E + S710 only) [verified]H
SKeKasa: ORP + certified CHDÚ; the cash-register program itself is certifiedFinančná správa SR3–6 monthsEUR 5–15k + EUR 100–200/unit3.0NEVER in this plan — fails the 60-day rule. CZ and SK do not share a productH
HUOnline pénztárgép with AEE, NAV type-approved; e-pénztárgép software regime opened 2025; Online Számla 3.0; +4% turizmusfejlesztési hozzájárulás on the 5% baseNAV / MKEH6–12 monthsEUR 20–50k5.0NEVER in this planM
BEGKS/SCE + FDM 2.0 blackbox talking to FPS Finance by API. Only 13 certified software suppliers for v2 as of Mar 2026 [verified]; forced migration wave runs 2026–2028FPS/SPF Finances6–12 monthsEUR 20–50k6.0NEVER in this plan — genuinely defensible moat, wrong shape for S1 runwayH
PTAT producer certification (cert number printed on every document), RSA signature chain, ATCUD series webservice, QR, SAF-T (PT). Portuguese NIF + local representative in practiceAutoridade Tributária3–6 months + entityEUR 15–30k4.5NEVER in this planH
GRΦΗΜ type approval + myDATA + mandatory POS↔register interconnection + AADE ERP registrationAADE6–12 monthsEUR 25–60k6.5NEVER in this plan — highest compliance density per euro of TAM in EuropeH
ES (state)Verifactu / no-Verifactu chained signed records + QR on every simplified invoice; producer files a declaración responsableAEAT (self-declaration, audited)NEVER. The taxpayer dates moved to 1 Jan 2027 / 1 Jul 2027; the producer deadline of 29 Jul 2025 did not [verified]. LGT art. 201 bis fines the producer per product per exercise. Offering a non-compliant product into ES is already the sanctionable act. No Spanish-language website, no ES activity, until counsel signs and the exposure is insured — and it is not insurableH on the producer date; M on treatment of a non-resident producer selling remotely
ES (Basque/Navarra)TicketBAI — 3 provincial XSDs + Navarra, 4 registriesDiputación Foral × 3NEVER. Deleted, not deferred. A fourth country's work for ~15k venuesH
USNo fiscalisation. Equivalent burden = ~13,000 sales-tax jurisdictions + FLSA tips + TCPA + state privacyTax engine subs6.0NEVER in this planH

Penalty exposure — the three figures the risk register quotes. These are the only fine amounts anywhere in the deliverable; they live here and 08 — Pros, cons, difficulties and risks cites this table rather than restating them. Each carries a legal-confidence grade and a named owner who must close it before the figure is used in a contract, a board pack or an investor deck.

RegimeAmountStatuteFalls onLabelLegal confVerification owner
ES — producer liabilityEUR 150,000 per exercise, per type of software, plus ~EUR 1,000 per system commercialisedLGT art. 201 bis (introduced by Ley 11/2021, antifraude)The producer / distributor of the invoicing software — us, not the merchant[verified] — Spanish tax commentary on art. 201 bis read 2026-08-18; the BOE text itself was not readM — the amount and its per-exercise, per-product basis are consistently reported, but the application to a non-resident producer selling remotely into ES is untested. This is the number that justifies the permanent Spain exclusion, so it must not stay at MSpanish counsel (§9 row 14) — only if ES is ever reconsidered
DE — merchant fine after a Kassennachschauup to EUR 25,000 per violation, plus turnover estimation (Hinzuschätzung) against the merchant§ 379 AO (Steuerordnungswidrigkeit for breaches of § 146a AO / KassenSichV)The merchant; it reaches us only through indemnity and reputation[verified] — German tax-practice sources read 2026-08-18H on the EUR 25,000 ceiling; M on whether an ISV can be reached directly rather than through the merchant's indemnity claimGerman counsel (§9 row 18) — before P4 DE entry
FR — non-compliant caisse softwareEUR 7,500 per non-compliant software, not applied if a valid certificate/attestation is produced within 30 days of the controlart. 1770 duodecies CGIThe user (merchant), with the éditeur's attestation standing behind it[verified] — Légifrance article 1770 duodecies and French practitioner commentary read 2026-08-18H on the amount and the 30-day cure; M on a non-resident éditeur's standing to attest at all (§4.2 FR row)French counsel (§9 row 15) — before any FR sale

None of these are insurable. Tech E&O (§8) covers neither a producer-side fiscal fine levied on us nor a regulatory fine levied on a Customer by our defect. The ES row is the reason Spain is a permanent exclusion rather than a deferral; the DE and FR rows are why the signing vendor sits in the chain as a co-defendant.

PhaseMarketFiscal workGate
P1–P2Czechia0.25 eng-months. VAT config, Receipt content, CZK 1 cash roundingA11: CZ does not reintroduce a cash-register obligation before 2029 (quarterly review). If it does: +2.5–3.5 eng-months on the only market with revenue
P3, market 2Ukraine1.75 via Checkbox or Vchasno Kasa as intermediaryA13 is a hard architectural gate: we never hold a merchant's КЕП key. If intermediation is not available, UA rises to 5–6 eng-months and carries custody liability in an incident — Ukrainian qualified-signature law presumes sole control by the signatory, so "every UA cloud POS does it" is not a defence M
P3, market 3Poland3.5 via a GUM-homologated kasa-online printer partner + KSeF + JPK_V7MA12. If GUM is unavoidable: 6–12 months, PLN 50–150k, plus a Windows/Linux bridge box at +EUR 200–350/site → PL is deferred and DE+AT is pulled forward out of v3 to become market 3, at ~4.5 eng-months P3 cannot absorb
v3 (P4)DE + AT together~4.5 combined, with fiskaly or Deutsche Fiskal in the chainA10: a fiskaly/EFSTA multi-country quote under EUR 8/register/month at 500 registers. If not, build-vs-buy flips to 18–22 eng-months + 1.5 FTE/yr and DE+AT leaves the plan

Buy the signing layer. The argument is co-defendant risk transfer, not price. Spain fines the producer; France makes a false attestation the éditeur's liability; BE/PT/SK bind the certificate to us. A middleware vendor with its own certification in the chain is a named party in any dispute. At EUR 10–15/register/month in DE/AT that is 15–25% of a EUR 59/month subscription price (subscription-only, per canon §5.4 — not a blended or total-recurring figure) [verified] on the EUR 10–15 input — which is why Germany is priced at EUR 89–129, never EUR 59. Reconsider building per country only above ~2,000 registers.

The certification mechanics nobody budgets (relevant the moment we ever enter a certifying market): elapsed ≈ 3× engineering time; the dossier is 40–150 pages of a senior engineer's writing (3–6 weeks) plus EUR 8–25k local counsel and a named 12-month relationship owner; and the certificate names a software version. That is why canon invariant 12 exists: fiscal logic lives in a slow-release, separately-versioned module, architecturally isolated from the fast app (see 02 — System architecture).

#4.4 The five gates before we quote a German date

All five true, or no date: (1) girocard live on S700 in production; (2) refund_pending_sepa / refund_failed states and cashier copy shipped; (3) DSFinV-K 2.3 export passing a real conformance test; (4) a signed fiskaly or Deutsche Fiskal contract; (5) a written insurance position. ~5 eng-months plus 6–8 weeks of vendor onboarding. Germany's permanent 7% VAT on all Speisen from 1 Jan 2026 is a genuine reason to talk to every operator — but it is a reason to be ready, not early.

#4.5 The unpriced liability: the fiscal archive after churn (A24)

Nothing in the research models it. If we hold a merchant's fiscal records, in Germany we sit inside their §147 AO retention duty (8–10 years) and their Verfahrensdokumentation; in France we hold the signed archives; in Ukraine we may hold their КЕП. A churned Customer's data cannot simply be deleted at contract end. Define and price a handover artefact and an export format before Customer #1, or we inherit a decade of unbounded availability obligation per churned merchant [estimate] M.


#5. VAT, eat-in vs takeaway, and Receipt rules

The universal data-model mistake is one VAT rate per product. The rate is f(item, channel, packaging, temperature, container, on-premise?, customer_type, date). Canon invariant 2: unit_price_minor, tax_rate_bp and menu_snapshot_id are snapshotted onto the Line at order time and never recomputed. (The field is menu_snapshot_id, matching the Menu Snapshot entity in canon §6 and the schema in 02 — System architecture; "menu version" is not a schema name.)

MarketFoodDrinksEat-in vs takeawayThe trapConf
CZ (v1)12% reduced catering21% on draft beer (reclassified out of the reduced rate in the 2024 reform); non-alcoholic served at 12%No splitBeverages must be separated from the food service on the same Check. Two rates, one Line grid [verified]H
UA (P3)20%20% + 5% retail excise on alcohol shown separatelyNo splitSingle-tax (ФОП) merchants have different receipt dutiesM
PL (P3)Gastronomy services 8%; ready meals 5%23%, and coffee/tea-based beverages are 23% even servedNo splitPKWiU classification per menu Item; GTU codes on invoices. A latte and a lemonade are not the same rateM
DE (v3)7% on all Speisen — in-house, takeaway, delivery, events — permanently from 1 Jan 2026 [verified]19% on all drinks; milk drinks ≥75% milk and tap water to-go may be 7%Abolished from 1 Jan 2026Combined offers (buffet, all-inclusive) must be split; the tax authority accepts allocating 30% of the package price to drinks. That is a pricing subsystem, not a config fieldH
AT (v3)10%20%No splitH

Service Charge vs Tip is a schema decision, not a label. A voluntary Tip is outside the scope of VAT; a mandatory Service Charge is part of the taxable consideration and is VAT-able [known] H. They are distinct, non-convertible entities from commit one (canon §6). If both are called "tip", every Customer's VAT return is wrong simultaneously.

Germany's tip nuance is sharper than "make it a config field" (relevant only at DE entry): §3 Nr. 51 EStG exempts amounts paid voluntarily by a third party to the employee. Passing through the employer's account does not by itself destroy the exemption — pooling does. The moment the employer runs an allocation scheme, entitlement derives from the employer, not the Guest, and it is wages: payroll tax, social contributions, employer withholding liability. Offering tip pooling in Germany is offering a payroll-tax event. Either hard-disable pooling in DE, or generate a payroll export that treats it as wages [known] M — re-verify with a German Steuerberater before any DE tips feature ships. This is a second reason canon ships tip capture and per-employee attribution only, never distribution.

Receipt rules. The Receipt renderer is a per-country template engine with a golden-file test suite, not string concatenation (~1.5 eng-months framework + ~2 eng-days per country). Every country requires at minimum: merchant name + tax ID, date/time, sequential document number, per-rate VAT breakdown, Tender method. CZ adds nothing fiscal — which is the whole point of CZ. UA adds the PRRO fiscal number and QR. PL's paragon is printed by the homologated printer, not by us.

Two renderers, gated on consent state. This is a real feature nobody costed until c02: a fiscal-only template with zero promotional content, and a promotional template carrying the join invitation. Poland and Germany get fiscal-only, always. +0.5–0.75 eng-months [estimate].

Canon invariants that bind the Receipt (see 02 — System architecture): Fiscal Document numbers are allocated only by the certified fiscal component, never by application code; Check numbers come from Coordinator-leased blocks; kitchen Ticket numbers are cosmetic; Business Day is leased from the Coordinator and a Device more than 5 minutes from Coordinator HLC-physical time may take orders but may not close or tender; the fiscal adapter refuses to sign outside a trusted-time threshold; rendered ticket bitmaps are never persisted beyond a 24h retry window.


#6. GDPR and ePrivacy design

#6.1 Controller model

Model A: per-tenant silo. The Customer (restaurant Org) is controller; we are processor under an Art. 28 DPA. The schema is partitioned so a consumer-network model (B) is addable, via a nullable network_identity_id, but cross-brand network behaviour is never built in v1–v2 (canon). Silently sharing Guest data across Orgs would be an unlawful disclosure in several EU DPAs' view H — and a commercial betrayal that surfaces in every chain's security review.

#6.2 Lawful basis, per processing purpose

PurposeLawful basisTrapConf
Take an Order/Check, take payment, issue a ReceiptArt. 6(1)(b) contractH
Retain the transaction for tax/fiscal purposesArt. 6(1)(c) legal obligationThis beats erasure under Art. 17(3)(b). Retention: DE 8–10 yrs (§147 AO / §257 HGB), PL 5 yrs from year end, CZ 10 yrs VAT records, UA ~1,095 daysH
Loyalty account, points/stamps ledger, tier calculationArt. 6(1)(b) contract — the programme T&Cs are the contractNot consent. Get this wrong and a Guest can "withdraw consent" and demand their points surviveH
Personalised offers / profiling MembersArt. 6(1)(a) consent. Ship consent-based; it is portable and defensible. LI is arguable in some states but requires a documented LIADivergent DPA views (DE/FR/AT/NL push consent)M
Email marketingePrivacy Dir. Art. 13 → consent, or soft opt-in (existing customer, own similar goods, opt-out at collection and in every message)Double opt-in is the de facto evidentiary standard in DE [verified]. We ship double opt-in everywhere; it costs nothing extraH
SMS marketingConsentPoland: PKE art. 398 — prior GDPR-standard consent, no soft opt-in. Fine = 3% of the sender's prior-year turnover or PLN 1,000,000, whichever is higher [verified]. A5H
The "join here" line in a transactional e-ReceiptUndecided — this is A4The highest-volume capture channel in the model. If it is obchodní sdělení under zák. 480/2004, v1 blended identity capture drops from 30–38% to 22–28% (the ~52% figure is v2 core, reachable only once guest ordering, the QR PWA and Wallet passes ship in P3) and the ARPU case weakens. EUR 3–5k of Czech counsel, due M2L until counsel signs
WhatsApp / Viber marketingConsent + platform policy, per-tenant sender onlyWe never aggregate one sender across tenants in Poland — aggregation makes RestaurantBrain the sender of record for hundreds of merchants' direct marketing in a strict-consent regime, and the fine scales to our revenue. Also: WhatsApp puts Guest phone numbers into Meta (US transfer under the DPF, under active litigation) — keep an EU-only local-aggregator path for every automationH
Card-linked identification (PAR)Art. 6(1)(a) consent, at enrolment onlyCounting anonymous repeat visits by PAR for aggregate analytics is defensible with an LIA + DPIA; silently card-linking to a marketing profile is a complaint waiting to happen, and scheme rules separately restrict PAR use for marketing without cardholder consentM
Allergies / dietary needsArt. 9(2)(a) explicit consent — special category dataA false identity merge exposes Guest A's allergy notes to Guest B: a reportable personal-data breach. Bias hard toward false splits. Probabilistic matching is out of scope until 500 tenants + a labelled evaluation setH
Aggregate sales analyticsNot personal data once aggregatedKeep a pseudonymised pathH
Sending audiences to Meta/Google AdsConsent + a documented joint-controller position (post-Fashion ID)Common vendor shortcut. Not in v1M

Art. 7(4) — the loyalty-discount problem, structured in three layers: (1) join = contract, Art. 6(1)(b); points and Member prices are the consideration, and this is allowed to be conditional. (2) Marketing consent = separate, optional, unbundled, per channel and per purpose — and the Member discount must not depend on it. (3) Profiling = a third, separate consent. A Member who ticks nothing still earns points and still receives transactional messages. Get layer 2 wrong and several EU DPAs invalidate the consent retroactively, which invalidates every campaign already sent H.

Also required from day one: Art. 30 records of processing, a subprocessor register, and an Art. 35 DPIA — systematic profiling of Guests at scale is a plausible trigger (EUR 3–8k external counsel per major market) [estimate] M.

MethodEvidence qualityVerdict
Link in the transactional SMS/email → Guest's own device, double opt-inBest: IP, user agent, timestamp, exact policy text version, click proofPrimary — where A4 permits it. Never in PL. Never in DE.
Guest enters details in our QR/web ordering flow with unbundled checkboxesVery goodPrimary. The only channel where a 60–90% capture claim is credible
Printed Receipt QR → join landing pageVery good (same evidence as above)The PL/DE fallback. 1–4% scan, ~50% completion [estimate]
Customer-facing display with tick + confirmGood if the wording is legible and untimedv3 (P4), where a CFD exists
Cashier ticks a box on the Guest's behalfWorthless. DPAs have fined for itStructurally impossible. Canon invariant 10: consent_record.ui_surface is an enum with no pos_staff value and the API rejects it. This is an ADR with a test, not a style-guide note — because every Customer will ask for it in week two and a sales engineer will otherwise ship it as a custom field

The Consent Record is append-only (never UPDATE), stores the SHA-256 of the exact wording shown plus locale and ui_surface, keeps withdrawal proof as carefully as grant proof, and chains via prev_record_id. Every outbound message checks consent at send time, not at audience-build time — a 4-hour-old Audience can contain someone who unsubscribed 3 hours ago.

Provenance suppression (canon invariant 11): the migration importer sets marketing suppression by provenance, and the segment builder cannot clear it. Concrete failure this prevents: a restaurant migrates from Dotypos, we import 18 months of Glovo Orders, the segment builder includes them, the first winback SMS goes to people who only ever ordered through an aggregator — an unlawful-processing complaint with the Customer's name on it and our infrastructure underneath.

#6.4 Erasure across offline Devices

This requirement dictates the sync architecture; retrofitting it into an immutable event log is a rewrite, not a sprint.

flowchart LR R[Guest erasure request] --> V[Verify identity, tenant-scope it] V --> E["erasure_order{guest_id, org_id, issued_at,<br/>scope, deadline} — a first-class replicated object"] E --> P[(Postgres: delete Identity + Profile,<br/>null guest_id on financial events,<br/>write unlinkable tombstone id)] E --> A[(Analytics replica / materialised views)] E --> M[ESP / SMS aggregator: delete + keep hashed suppression] E --> S[Sync gateway] S --> D1[Device 1 — applies, ACKs] S --> D2[Device 2 — offline 40 d] D2 -.->|on reconnect: apply pending tombstone log<br/>BEFORE serving any loyalty lookup| S S --> D3[Device 3 — offline 95 d] D3 -.->|treated as lost: revoke credentials,<br/>per-device data key revoked server-side<br/>→ local store becomes unreadable| X[(unreadable)] P --> L["erasure_log{request_id, org, hashed_subject,<br/>issued_at, completed_at, systems_acked}"]

Rules that make this defensible: erase vs pseudonymise — financial event rows survive (Art. 17(3)(b) + tax law); we null the guest_id FK and delete the Identity and Profile rows, which works because canon invariant 9 already puts Guest PII in a separate crypto-shreddable store keyed by guest_id, with the financial event log holding only guest_id. Suppression lists survive erasure (documented in the privacy notice; deleting them means the person gets marketed to again). Backups are excluded from immediate erasure, purged by rotation within N ≤ 35 days, with erasure re-applied on any restore — write that in the DPA. Erasure is Org-scoped: a request to Brand A must not touch Brands B–L.

Effort: r06 said 3.0 eng-months; c02 corrects to 5–6 because it touches the sync core, the fiscal store, the analytics replica, the ESP and every terminal [estimate]. It is inside canon Domain G, and it is the item every EU chain's security questionnaire asks about.

#6.5 Retention schedule

Data classRetentionBasis
Financial event log, Fiscal Documents, Daily CloseCZ 10 yrs; DE 8–10 yrs (§147 AO); PL 5 yrs from year end; UA ~1,095 dArt. 6(1)(c) + national tax law H
On-Device closed Checks7 days, plus all open Checks; hard alarm at 500 MB. Cloud is the archiveCanon invariant 15
Rendered ticket/receipt bitmaps24h retry window, never beyondCanon invariant 9
Guest Identity + Profile + Consent RecordsLife of the Membership + 24 months inactivity, then eraseArt. 5(1)(e) M
Hashed suppression entriesIndefiniteArt. 6(1)(c) / LI H
Backups≤35 days rotationContractual (DPA)
Support tickets / logs containing telemetry12 monthsLI M

#6.6 DSAR flow

Art. 15/20 export = one JSON + one CSV: Profile, Consent Records with the exact wording shown, loyalty ledger, transaction summary, and campaign sends with the reason the Guest was targeted (Audience name + rule). Target: ≤24h automated, statutory ceiling 30 days. The same export code, run in reverse, is the EU Data Act switching/exit artefact (Reg. (EU) 2023/2854, applicable 12 Sep 2025, switching charges withdrawn by 12 Jan 2027) [known] H — build it once, ~0.5–1.0 eng-months.

DORA (Reg. (EU) 2022/2554, applying since 17 Jan 2025) [known] H: we are not a financial entity, but every EU PSP now pushes Art. 30 contractual clauses onto ISVs in their service chain — register of information, audit and access rights, exit strategy, incident-reporting timelines, subcontracting restrictions. It is a standard blocker in PSP onboarding today. First-time cost EUR 8–20k counsel + ~0.5 eng-months [estimate]. It belongs in P0, not in a later phase.


#7. Security programme

ControlDecisionNote
RBACPer-Site role assignment plus per-action overrides. Explicitly gated actions: void_after_send, discount > N%, comp, no_sale_drawer_open, refund, reopen_closed_check, price_override, 86_item, export_data, edit_time_entryA Comp is not a Void; both carry actor + reason
Employee / manager PINArgon2id, tuned to ~250 ms on the slowest certified SKU, salted per (org, employee), wrapped with the device-bound Keystore key, and scoped to managers assigned to that Site, not the whole OrgCanon invariant 17. The naive design — a hashed 4-digit PIN + permission bitmask shipped inside the config snapshot — yields the entire manager PIN set from a stolen handheld in seconds at 10⁴ candidates
Offline authorisationManager override must work with no WAN — that is exactly when it is needed. Two channels: offline PIN at the Device (above), and online push approval with request context where connectivity exists
Audit trailThe append-only event log is the audit trail — one of the genuine dividends of event sourcing (DE DSFinV-K wants exactly this shape). Every time-entry edit is an append-only correction with actor and reason; a suppressed duplicate discount is recorded as suppressed, visible in audit, not silently dropped
Internal support consoleRead-only Site impersonation in the S1 cut, with a hard permission + audit model. You are looking at Customers' financial dataFull console is Full-scope only
SecretsPer-tenant credential vault for connector tokens; device-bound Keystore keys for sync auth and the local SQLCipher store; per-device revocable data keys (the only real answer to "the tablet is in a drawer and I cannot erase it"); AI access only through the internal ai-gateway — nothing else imports the SDK
Config integrityFeature flags and config evaluated offline from a signed, monotonically-versioned bundle the Device refuses to downgrade, LKG cache, 7-day TTL that warns rather than failsCanon §3
Release safetyFreeze Thu 12:00 → Mon 10:00. Cohorts lab → 3 friendly Sites → 10% → 40% → 100%, 24h soak spanning a dinner service at each step. Android rollback does not exist; kill switches are the only mitigation pathCanon invariant 14
Correctness of money codeThe property suite is written by a human before the fold exists; the fold is accepted only by the property suite, never by review. Anything touching money is property-tested by a human who did not write the implementationCanon invariant 13
Pen testAnnual external pen test from month 1 — it is a PCI v4.0.1 evidence item and a chain-procurement item. EUR 6–12k/yr for a scoped web + API + mobile test [estimate]
Quarterly ASV scansFrom month 1, on the external perimeterPCI
SOC 2 / ISO 27001Proposed trigger, not yet canon: neither before P2 exit. Start ISO 27001 (the EU-procurement-relevant one) when the first ≥10-Site chain or a DE/NL enterprise asks — Stage 1+2 EUR 15–30k plus ~0.3 FTE/yr [estimate]. SOC 2 Type II only if a US-headquartered chain demands it; the observation window alone is 6–12 months, so it can never be produced reactivelyFlagged in cross-doc notes: canon does not decide this

#8. Compliance cost roll-up (canonical)

Engineering effort lives in canon §5.1 and is restated here so no other doc re-derives it. AI-assist multipliers are already baked in (E/F/G legal-and-correctness rows compress by 0–10% only; certification queues, field install and trust compress by 0%).

Canon domainMVPv1 sellable (S1 cut)v1 sellable (Full)v2 delta
E Payments + PCI4.011.013.5+6.0
F Fiscal + regulatory (CZ only in v1)2.58.09.5+11.0
G CRM / loyalty / privacy2.519.029.0+11.0

Read the v2 delta column as the full v2 delta — the S2 figure. Under S1, P3 ships v2 core only (T2 LAN multi-station, UA PRRO, PL kasa-online + KSeF + JPK_V7M, guest ordering + QR PWA + Wallet passes, card-linked identity, Brand Vouchers, WhatsApp/Viber, segmentation and the payments-attach machinery); table service, handheld, customer-facing display, Apps-on-Devices, the HubRise-resold delivery module and DE+AT fiscal move to v3 (P4 and later). So of Domain F's +11.0, the DE+AT ~4.5 (§4.3) sits in v3, leaving the UA (1.75) and PL (3.5) market lines plus the shared receipt/compliance framework work inside S1's P3. See 07 — Roadmap, Team and Budget for the phase arithmetic.

One tension, stated rather than smoothed: Domain E's 11.0 (S1 cut) must simultaneously carry reconciliation at 4.5–6.0 (§1.3) and the PCI programme at ~1.2 eng-months/yr, which leaves 2–3.5 for the terminal port, Stripe adapter, splits, voids/refunds, tips capture and tokenisation. It fits only at the bottom of both ranges. Flagged for the P0 re-plan, not resolved here.

Recurring cash costValueLabel
Fiscal signing COGS, DE/ATEUR 10–15/register/month = 15–25% of a EUR 59/month subscription price → price DE at EUR 89–129[verified]
Our PCI, years 1–2 (SAQ D-SP)EUR 20–40k one-off + ~0.3 eng-months per quarter (≈1.2 eng-months/yr) ongoing — evidence collection, ASV scan remediation, annual pen-test follow-up. Inside canon Domain E's 11.0 (S1 cut), not additional to it[estimate]
Our PCI, at Level 1 SP (ROC)EUR 40–90k/yr QSA + EUR 60–150k first-year remediation + 3–5 eng-months diverted[estimate]
Tech E&O + Cyber, EUR 1–2M limitEUR 8–25k/yr, before Customer #1. Never covers producer-side fiscal fines[estimate]
Merchant negative-balance / chargeback reserve at 300 sitesEUR 15–40k/yr[estimate]
Privacy counsel, per market, one-offCZ/PL/RO EUR 15–30k · DE/AT/NL EUR 30–60k · UA EUR 5–12k[estimate]
Permanent compliance maintenanceCZ+UA+NL+UK combined 0.15 FTE · DE+AT combined 0.3–0.4 FTE · PL+RO combined 0.4 FTE · each certifying market 0.25 FTE forever[estimate]

A 10-country European footprint carries 2.5–3.0 FTE of permanent compliance engineering. Under S1 that is mathematically impossible past three or four countries. This, not market size, is why the plan is CZ → UA → PL. See 07 — Roadmap, Team and Budget for how that lands in the phase plan and 01 — Feasibility verdict for the go/no-go.


#9. Standing "verify with local counsel before commit" list

Nothing below may be relied on in a contract, a sales claim or a schema decision until the named owner closes it. Each maps to a canon assumption where one exists.

#QuestionOwnerDueCostIf unresolved
1A4 — Is a neutral "join here" line inside a transactional e-Receipt obchodní sdělení under zák. 480/2004 in CZ? Plus: loyalty T&C structure under Art. 7(4), and VAT on points redemption vs a free Item on the CZ ReceiptCzech counselM2EUR 3–5kThe highest-volume capture channel is unusable; v1 blended capture falls 30–38% → 22–28% (~52% is the v2-core figure, not a v1 one)
2A2 — Written ISV/referral term sheet at ≥25 bps, no merchant-ownership clause, no unreachable volume minimumFounderP0 exitStop. SaaS-only CEE is 0.65–0.95× LTV/CAC
3A6 — Does Stripe emit PAR on card-present in CZ? (Adyen does, on Terminal API [verified])Backend lead, one-day sandbox testM1~0Card-linked identity stays in v2 core (P3). Do not switch PSPs for it
4A13 — Does UA law permit PRRO fiscalisation through Checkbox/Vchasno such that we never hold a merchant's КЕП? And what is our liability if a held key is misused?UA counsel + compliance ownerbefore P3 UAEUR 5–10kUA fiscal 1.75 → 5–6 eng-months and carries custody liability in an incident
5A12 — Can we drive a GUM-homologated kasa-online printer in PL without GUM-certifying our software?Compliance owner + one PL vendorbefore P3PL deferred; DE+AT is pulled forward from v3 to become market 3
6A5 — Does PKE art. 398 permit any service-neutral join line in PL, and does it forbid an aggregated sender?Polish counselbefore P3 PLEUR 3–5kAlready assumed restrictive. PL = fiscal-only Receipts, per-tenant senders only
7A24 — Can we define and price a fiscal-archive handover artefact for churned merchants without inheriting a decade of availability obligation?Legal + compliancebefore Customer #1EUR 5–10kUnbounded, unpriced liability per churned merchant
8A19 — QSA scoping opinion: is our merchants' landing zone SAQ B-IP, and does SAQ C apply once our app runs on the reader?QSAbefore any Apps-on-Devices deploymentEUR 5–10kNothing changes for v1. Strike every "SAQ P2PE" claim now, regardless
9A10 — fiskaly / EFSTA multi-country quote under EUR 8/register/month at 500 registers?Founder, two direct quotesbefore P4 DE/AT~0Build-vs-buy flips; DE+AT leaves the plan
10A18 — Tech E&O + Cyber at EUR 1–2M for an EU SaaS in fiscalised markets, EUR 8–25k/yrFounderbefore Customer #1A procurement gate for every chain
11A17 — For a white-label Guest ordering page, is the restaurant the EAA service provider, not us?EU counsel, 2-hour questionbefore v2-core Guest ordering (P3)EUR 1–2kMicroenterprise exemption never applies → EN 301 549 / WCAG 2.1 AA from day one, +1.5 eng-months and a permanent audit duty
12A23 — Sub-merchant KYB stall rate and merchant negative-balance exposure under the chosen ISV/payfac modelOps owner (not an engineer)before P3 payments attachRolling reserves, delayed payout on prepaid sales, and an ops hire
13DE tips: does §3 Nr. 51 EStG survive employer pass-through without pooling?German Steuerberaterbefore any DE tips featureEUR 2–5kShip direct attribution only; hard-disable pooling in DE
14ES: how does AEAT treat a non-resident producer offering invoicing software into Spain?Spanish counselonly if ES is ever reconsideredEUR 8–15kUntil then: no ES activity, including a Spanish-language website
15FR: will a French auditor accept a self-attestation from a non-resident éditeur with no French establishment?French counselbefore any FR saleEUR 5–10kThe risk is not the certificate, it is standing to attest
16Aggregator partner terms: does any Glovo/Wolt/Bolt agreement permit an in-parcel winback QR?Founder + counselbefore either the connector or the QR is builtEUR 3–5kThe feature and the connector cannot both be safe. Decide in writing first. Penalty is connector revocation across every Site at once
17MSA drafting: third-party connector availability expressly not warranted, excluded from the SLA, never a condition of subscription; on revocation we owe migration assistance, not refundsCounselbefore the first invoiceEUR 3–5kEvery platform revocation converts into refund liability and SLA credits across the affected base simultaneously
18DE penalties (§4.2): confirm the § 379 AO ceiling of EUR 25,000 per violation for § 146a AO breaches, and whether a foreign ISV can be pursued directly rather than through the merchant's indemnityGerman counsel / Steuerberaterbefore P4 DE entryEUR 2–5kThe DE fine figure stays at legal confidence M and cannot be quoted in a contract, a board pack or an investor deck

Related: 01 — Feasibility verdict · 02 — System architecture · 03 — Hardware, peripherals and the device fleet · 05 — The CRM Product and Scope Tiers · 06 — Integrations · 07 — Roadmap, Team and Budget · 08 — Pros, cons, difficulties and risks