Skip to content

Compliance

Overview

Compliance settings help you meet legal and regulatory requirements including GDPR, food safety regulations, and fiscal requirements.

Key Purpose: Configure settings for legal and regulatory compliance.

Purpose

This page lets you configure GDPR consent flows, fiscal module integrations, food safety display options, age verification rules, and receipt legal requirements to meet your country's regulations.

Key Concepts

  • GDPR Compliance: Settings for privacy policy URL, terms and conditions, cookie consent banners, data retention periods, and marketing consent that control how customer data is collected and managed.
  • Fiscal Module: An optional integration with third-party fiscal providers (Fiskaly, EFSTA, or custom) required in countries like Belgium and Germany for tax-compliant transaction recording.
  • Age Verification: A checkout-time prompt triggered when alcoholic items are in the cart, with a configurable minimum age that varies by country (16-21 depending on jurisdiction and beverage type).
  • Allergen Display: A toggle controlling whether allergen icons and labels appear on menu items in Online Ordering and Kiosk, required by EU food information regulations.
  • Sequential Receipt Numbers: A toggle ensuring receipts are numbered in unbroken sequence, a legal requirement in many countries for tax audit purposes.

Actions

Configure GDPR Settings

Set your privacy policy URL, terms and conditions URL, enable the cookie consent banner, and define the data retention period and marketing consent requirements.

Enable Fiscal Module

Turn on fiscal compliance, select a fiscal provider (Fiskaly, EFSTA, or custom), and enter your fiscal registration ID for tax-compliant transaction recording.

Set Age Verification Rules

Enable age verification for alcohol orders and configure the minimum legal age appropriate for your country.

Manage Food Safety Display

Toggle allergen information and nutritional information display for customer-facing menu interfaces.

Location

  • Backoffice Route: /settings/compliance
  • Backend Controller: app/Http/Controllers/Api/ComplianceController.php
  • Vue Component: src/views/settings/ComplianceComponent.vue

GDPR Compliance

Privacy Policy URL

PropertyValue
Field IDprivacy_policy_url
LabelPrivacy Policy URL
TypeURL
RequiredYes (EU)

Description: Link to your privacy policy.

Customer Impact:

  • Shown during account creation
  • Link in footer of Online Ordering
  • Required for GDPR compliance

Terms & Conditions URL

PropertyValue
Field IDterms_url
LabelTerms & Conditions URL
TypeURL
RequiredRecommended

Description: Link to your terms and conditions.

Customer Impact:

  • Shown during checkout
  • Customer must accept before ordering

PropertyValue
Field IDcookie_consent_enabled
LabelShow Cookie Banner
TypeToggle
Defaulttrue

Description: Show cookie consent banner to visitors.

Business Logic:

  • Required in EU
  • Shows on first visit
  • Stores consent preference

Data Retention Period

PropertyValue
Field IDdata_retention_days
LabelData Retention
TypeNumber
UnitDays
Default730 (2 years)

Description: How long to keep customer data.

Business Logic:

  • Customer data deleted after this period
  • Transaction records may be kept longer (legal requirement)

PropertyValue
Field IDmarketing_consent_required
LabelRequire Marketing Consent
TypeToggle
Defaulttrue

Description: Require explicit consent for marketing emails.

Business Logic:

  • If true: Checkbox for marketing opt-in
  • If false: Opt-out model (not GDPR compliant)

Fiscal Compliance

Fiscal Module Enabled

PropertyValue
Field IDfiscal_enabled
LabelEnable Fiscal Module
TypeToggle
Defaultfalse

Description: Enable fiscal/tax compliance features.

Requirements by Country:

  • Belgium: Fiscal module required for hospitality
  • Netherlands: Not required
  • Germany: TSE (Technical Security Equipment) required

Fiscal Provider

PropertyValue
Field IDfiscal_provider
LabelFiscal Provider
TypeSelect
Optionsfiskaly, efsta, custom
Depends Onfiscal_enabled = true

Description: Third-party fiscal compliance provider.


Fiscal ID

PropertyValue
Field IDfiscal_id
LabelFiscal ID
TypeText
Depends Onfiscal_enabled = true

Description: Your fiscal registration ID.


Food Safety

Allergen Information

PropertyValue
Field IDallergen_display
LabelShow Allergen Information
TypeToggle
Defaulttrue

Description: Display allergen information on menu items.

Customer Impact:

  • Allergen icons/labels on items
  • Allergen filter in menu
  • Required in EU

Nutritional Information

PropertyValue
Field IDnutritional_display
LabelShow Nutritional Information
TypeToggle
Defaultfalse

Description: Display nutritional information (calories, etc.).

Customer Impact:

  • Calorie counts on items
  • Nutritional details in item view

Alcohol Age Verification

PropertyValue
Field IDalcohol_age_check
LabelAge Verification for Alcohol
TypeToggle
Defaulttrue

Description: Require age confirmation for alcohol orders.

Business Logic:

  • If cart contains alcohol → Age check prompt
  • Customer confirms they are of legal age
  • May require ID check on delivery

Minimum Alcohol Age

PropertyValue
Field IDminimum_alcohol_age
LabelMinimum Age
TypeNumber
Default18
Depends Onalcohol_age_check = true

Description: Minimum age to purchase alcohol.

By Country:

  • Netherlands: 18
  • Belgium: 16 (beer/wine), 18 (spirits)
  • Germany: 16 (beer/wine), 18 (spirits)
  • UK: 18
  • USA: 21

Receipt Requirements

VAT Number on Receipt

PropertyValue
Field IDvat_on_receipt
LabelShow VAT Number
TypeToggle
Defaulttrue

Description: Display VAT number on receipts.

Legal Requirement: Required in EU for VAT-registered businesses.


Company Registration on Receipt

PropertyValue
Field IDcompany_reg_on_receipt
LabelShow Company Registration
TypeToggle
Defaultfalse

Description: Display company registration number on receipts.


Sequential Receipt Numbers

PropertyValue
Field IDsequential_receipts
LabelSequential Receipt Numbers
TypeToggle
Defaulttrue

Description: Use sequential numbering for receipts.

Legal Requirement: Required in many countries for tax purposes.


Business Logic

GDPR Data Request Flow

Customer requests data export/deletion


Verify customer identity


Export Request:
├── Compile all customer data
├── Generate downloadable file
└── Send to customer

Deletion Request:
├── Delete personal data
├── Anonymize transaction records
├── Confirm deletion to customer
Visitor arrives at site


Cookie consent given?
├── Yes → Load all cookies

└── No → Show consent banner
         ├── Accept All → Set consent, load cookies
         ├── Reject → Set minimal cookies only
         └── Customize → Show options

Age Verification Flow

Customer adds alcohol to cart


Proceed to checkout


Age verification prompt:
"I confirm I am 18 years or older"

        ├── Confirmed → Continue checkout
        └── Not confirmed → Remove alcohol items

Customer Impact

Online Ordering

  • Cookie consent banner
  • Privacy policy link
  • Terms acceptance at checkout
  • Age verification for alcohol
  • Allergen information display

Data Rights

  • Request data export
  • Request data deletion
  • Update marketing preferences

Relations

Depends On

  • Locations: Compliance varies by country

Affects

  • Online Ordering: Consent flows
  • Customers: Data handling
  • Receipts: Required information
  • Menu Items: Allergen display

Business Rules

  • Cookie consent is required for EU visitors; the banner appears on first visit and the preference is stored so it does not reappear once accepted or rejected.
  • Data retention defaults to 730 days (2 years); after this period customer personal data is deleted, but transaction records may be kept longer to satisfy legal accounting requirements.
  • Marketing consent must be opt-in (checkbox) when marketing_consent_required is true; using opt-out mode is not GDPR compliant in the EU.
  • Age verification is triggered at checkout only when the cart contains items flagged as alcoholic; if the customer does not confirm, alcoholic items are removed from the cart.
  • Fiscal module settings (provider, fiscal ID) are only editable when fiscal_enabled is true; Belgium requires this module for hospitality businesses, while the Netherlands does not.

FAQs

  • "Is the cookie consent banner mandatory?" In the EU, yes; the system shows it on first visit and respects the visitor's choice for subsequent visits.
  • "What happens when a customer requests data deletion?" Personal data is deleted and transaction records are anonymized; a confirmation is sent to the customer.
  • "Do I need a fiscal module in the Netherlands?" No, it is not required; the fiscal module is primarily needed in Belgium (hospitality) and Germany (TSE requirement).
  • "Can I set different minimum alcohol ages for beer vs. spirits?" The current system uses a single minimum age field; for countries with split ages (e.g., Belgium: 16 for beer/wine, 18 for spirits), set the higher age or manage product-level restrictions.
  • "Are allergen icons shown automatically?" Allergen display must be enabled in compliance settings, and individual menu items must have allergen data configured for the icons to appear.

Troubleshooting

Causes:

  1. Cookies being cleared
  2. Consent not saving
  3. Browser blocking cookies

Solutions:

  1. Check browser settings
  2. Verify consent storage
  3. Allow cookies from site

Problem: GDPR data request not processing

Causes:

  1. Large data volume
  2. System error
  3. Email delivery issue

Solutions:

  1. Wait for processing
  2. Check system logs
  3. Verify email address

Problem: Age verification not showing

Causes:

  1. Feature disabled
  2. No alcohol items in cart
  3. Items not marked as alcohol

Solutions:

  1. Enable age verification
  2. Check cart contents
  3. Mark items as containing alcohol

Examples

EU Compliant Settings

json
{
  "privacy_policy_url": "https://restaurant.com/privacy",
  "terms_url": "https://restaurant.com/terms",
  "cookie_consent_enabled": true,
  "data_retention_days": 730,
  "marketing_consent_required": true,
  "allergen_display": true,
  "alcohol_age_check": true,
  "minimum_alcohol_age": 18,
  "vat_on_receipt": true,
  "sequential_receipts": true
}

Belgium Fiscal Compliance

json
{
  "fiscal_enabled": true,
  "fiscal_provider": "fiskaly",
  "fiscal_id": "BE-FISCAL-12345",
  "vat_on_receipt": true,
  "company_reg_on_receipt": true,
  "sequential_receipts": true
}
┌─────────────────────────────────────────────────────────────┐
│ 🍪 We use cookies                                           │
│                                                             │
│ We use cookies to improve your experience on our site.      │
│ By continuing, you agree to our use of cookies.             │
│                                                             │
│ [Privacy Policy]                                            │
│                                                             │
│ [Reject All]  [Customize]  [Accept All]                     │
└─────────────────────────────────────────────────────────────┘

Age Verification Prompt

┌─────────────────────────────────────────────────────────────┐
│ 🍺 Age Verification Required                                │
│                                                             │
│ Your order contains alcoholic beverages.                    │
│                                                             │
│ Please confirm that you are 18 years of age or older.       │
│                                                             │
│ ☐ I confirm I am 18 years or older                         │
│                                                             │
│ [Cancel]                              [Continue to Checkout]│
└─────────────────────────────────────────────────────────────┘

GDPR Data Export

json
{
  "customer_data_export": {
    "personal_info": {
      "name": "Jan de Vries",
      "email": "jan@example.com",
      "phone": "+31612345678",
      "created_at": "2023-01-15"
    },
    "addresses": [
      {
        "label": "Home",
        "address": "Kalverstraat 123, Amsterdam"
      }
    ],
    "orders": [
      {
        "order_number": "1234",
        "date": "2024-01-10",
        "total": 32.50
      }
    ],
    "loyalty": {
      "points_balance": 450,
      "points_earned": 1200,
      "points_redeemed": 750
    },
    "marketing_consent": true,
    "consent_date": "2023-01-15"
  }
}