انتقل إلى المحتوى
TAQNIX
وحدات Odooإضافات ووردبريسقوالب ووردبريسقوالب Shopifyقوالب التطبيقاتالسكربتات والأدواتالمدونةبِع على TAQNIX

توثيق تقنِكس لنقاط البيع

دليل تقنِكس لنقاط البيع: تثبيت التطبيق وتشغيله وتهيئة أودو وربط الجهاز والبيع والدفع والإيصالات والعمل دون اتصال والطلبات والمزامنة وطاولات المطعم وتذاكر المطبخ والشاشات الاحترافية وإغلاق الجلسة والإعدادات والسمات ومحرك الضرائب والبنية والأمان والدقة والحدود.

يشرح الإصدار 1.0.0حُدّث في 30 أكتوبر 2026

ابدأ من هنا

ببساطة: Taqnix POS Terminal نقطة بيع لأودو 19 تعمل في المتصفح كتطبيق قابل للتثبيت (PWA). يحتفظ الجهاز بالمنتجات والعملاء والطلبات المفتوحة على نفسه، فيواصل البيع عند انقطاع الشبكة. ثم يرسل الطلبات إلى أودو بالاستدعاء نفسه الذي تستخدمه نقطة البيع الأصلية في أودو (pos.order.sync_from_ui). لا توجد وحدة أودو تُثبَّت: التطبيق يعمل خارج أودو ويتصل به. الواجهة بالعربية والإنجليزية، وهو جاهز للتشغيل (يكفيك Node.js) ومعه الشيفرة المصدرية الكاملة، لشركة واحدة وبعدد غير محدود من الأجهزة.

التطبيق للمقاهي والمتاجر والمطاعم التي تعمل على أودو 19، وللمُركِّبين الذين يجهّزون أودو لعملائهم. الترخيص لشركة واحدة: على المُركِّب أن يشتري نسخة لكل شركة عميلة (الفصل 30).

الصور في هذا الدليل من متجر تجريبي اسمه Harbor Café & Market (بالدولار الأمريكي، العنوان 1200 Harbor Walk, Dearborn MI). فيه نقطتا بيع:

  • المتجر الرئيسي: تجزئة ومقهى. الأسعار المعروضة شاملة الضريبة، وتقريب النقد 0.05 على الدفع النقدي، وبرنامج الولاء «مكافآت هاربر»، وكود الخصم SUMMER10.
  • مطعم هاربر: طابقان هما «الطابق الأرضي» و«التراس»، وطابعتان للمطبخ والبار. الأسعار المعروضة دون الضريبة.

أمين الصندوق في الصور هو Tom Becker، وهو مستخدم عادي لنقطة البيع. عنوان أودو الظاهر في الصور خادم تجريبي محلي؛ عندك سيكون عنوان أودو الخاص بشركتك.

نصيحة: لا تحتاج إلى فهم الشيفرة لتستعمل الجهاز: الفصلان 4 و5 للتثبيت وتجهيز أودو، والفصول من 6 إلى 21 تشرح الاستعمال اليومي، والفصول من 22 إلى 25 للمطوّرين ومسؤولي الخوادم.

أودو علامة تجارية لشركة Odoo S.A. وهذا المنتج لم تصنعه Odoo S.A. ولم تعتمده.

أربعة مشاهد من الجهاز: دفع مقسّم على أكثر من طريقة مع باقٍ، والطاولات والمطبخ، وطلبات تنتظر ثم تُرسل إلى أودو، والبيع دون اتصال.
أربعة مشاهد من الجهاز: دفع مقسّم على أكثر من طريقة مع باقٍ، والطاولات والمطبخ، وطلبات تنتظر ثم تُرسل إلى أودو، والبيع دون اتصال.

ماذا تحصل عليه

ببساطة: جهاز بيع كامل في المتصفح: شاشة بيع، ودفع وإيصال، وطلبات واسترداد، ومزامنة، وإعدادات. وتظهر شاشات المطعم فقط عندما تكون نقطة البيع مطعمًا.
الميزةما تفعلهالفصل
الإعداد واختبار الاتصالشاشة اربط هذا الجهاز بأودو: العنوان وقاعدة البيانات واسم الدخول ومفتاح API، ثم تقرير يذكر ما ينقص المستخدم من صلاحيات.6
اختيار نقطة البيع والنقد الافتتاحيبطاقة لكل نقطة بيع، وفتح الجلسة بعدّ الأوراق والعملات أو بإدخال المبلغ.7
شاشة البيعبحث بالاسم أو المرجع أو الباركود، وفئات ومفضلة، وخصم وملاحظة وقائمة أسعار، ولوحة أرقام، وماسح باركود.8
المتغيرات والكومبونافذة خيارات المنتج (الحجم واللون والإضافات) وبطاقات اختيار لكل مجموعة في الكومبو.9
العملاءبحث وتعديل وعميل جديد. يمكن إنشاء العميل دون اتصال عندما يسمح أودو للمستخدم بذلك.10
الدفع والإيصالعدة طرق دفع، وباقٍ، وتقريب النقد، وخيار الفاتورة. إيصال بعرض 58 أو 80 مم مع باركود ورمز QR.11
العمل دون اتصالكل ما يلزم للبيع محفوظ على الجهاز، وقائمة انتظار ترسل الطلبات بالترتيب عند عودة الاتصال.12
الطلباتإعادة طباعة واسترداد وإعادة مزامنة وتصدير JSON وحذف الطلبات التي رفضها أودو.13
شاشة المزامنةقائمة الانتظار وسجل الأحداث وحالة الاتصال والبيانات المحفوظة والتخزين وملف التشخيص.14
المطعم (عند تثبيت وحدة المطعم في أودو)مخطط الصالة والطاولات، وتذاكر المطبخ، وتقسيم الفاتورة، والنقل والدمج، والإكرامية.15
الميزات الاحترافية (داخل السعر)لوحة المؤشرات، والاستعلام عن المخزون، والحجز بعربون، والولاء وأكواد الخصم.16 إلى 19
إغلاق الجلسةعدّ النقد، وملخص الجلسة، وتقرير الإغلاق.20
الإعداداتخمسة مظاهر ولون للعلامة، والكثافة وحجم النص واللغة والأرقام، وقفل PIN، ورمز المدير، وملف الإعدادات.21
تطبيق ويب جاهز للتشغيلالجهاز مبنيّ مسبقًا مع ملف تشغيل لويندوز وماك ولينكس: فُكّ الضغط وشغّله وافتح العنوان. يكفي أن يكون Node.js مثبّتًا.4
الحزمةالشيفرة المصدرية والاختبارات وملف Dockerfile وأمثلة nginx.4 و24

التقنية: Next.js 16 وReact 19 وTypeScript وTailwind CSS 4. البيانات المحلية في IndexedDB عبر Dexie، وحالة الواجهة في Zustand، والتحقق من البيانات بـ Zod.

ما تحتاج إليه

ببساطة: تحتاج إلى أودو 19 مع نقطة البيع، وخادم صغير يشغّل التطبيق (Node.js أو Docker) بعنوان HTTPS، ومتصفحًا من عائلة Chromium على كل جهاز بيع.
البندالتفاصيل
أودوالإصدار 19 Community مع تطبيق نقطة البيع. نسخة Enterprise لم تُختبر. إذا كان الخادم أقدم من 19 فإن شاشة الإعداد تحذّر ولا ترفض، لكن الإصدارات الأخرى لم تُختبر.
وحدات أودو الاختياريةالمطعم (pos_restaurant) لشاشات المطعم، والولاء (pos_loyalty) لنقاط العملاء وأكواد الخصم، والخصم (pos_discount) للخصم على الطلب كله.
لتشغيل التطبيقNode.js 20.9 أو أحدث (وهو كل ما يحتاجه التطبيق الجاهز للتشغيل)، أو Docker. ملف الصورة المرفق يستخدم Node 24 ويبني الشيفرة المصدرية.
HTTPSلا يُثبَّت التطبيق (PWA) ولا يعمل دون اتصال إلا من عنوان https:// أو من http://localhost. جهّز شهادة TLS للعنوان الذي يفتحه الجهاز (الفصل 4).
المتصفح على جهاز البيعمتصفح من عائلة Chromium (Chrome أو Edge) فيه Service Workers وIndexedDB وWeb Locks. Safari وFirefox لم يُختبرا.
مستخدم أودومستخدم لكل جهاز أو لكل أمين صندوق: مستخدم داخلي مع صلاحية نقطة البيع / مستخدم، ومعه مفتاح API (الفصل 5).
الطابعات والماسحاتاختيارية. الطباعة عبر المتصفح فقط، والماسح يعمل كلوحة مفاتيح. لم تُجرَّب الطابعات والماسحات وأدراج النقد على أجهزة حقيقية (الفصل 27).

التثبيت والتشغيل

ببساطة: التطبيق برنامج Node.js. تحتوي الحزمة على نسختين منه: نسخة جاهزة للتشغيل (فُكّ الضغط وشغّلها ويكفيك Node.js) وشيفرة مصدرية تبنيها بنفسك. في الحالتين تشغّله على حاسوب أو خادم، وتضع أمامه HTTPS إذا كانت أجهزة البيع على أجهزة أخرى، ثم يفتحه كل جهاز بيع من المتصفح ويثبّته كتطبيق.

الخيار 1: تطبيق الويب الجاهز للتشغيل

لا شيء لتثبيته ولا لبنائه.

  1. ثبّت Node.js 20.9 أو أحدث من nodejs.org (الأمر node -v يعرض الإصدار الذي عندك).
  2. فُكّ ضغط الحزمة، ثم فُكّ ضغط الملف taqnix-pos-terminal-webapp.zip الذي فيها. المجلد taqnix-pos-terminal-webapp هو التطبيق الجاهز.
  3. افتح نافذة أوامر (موجّه الأوامر في ويندوز) داخل هذا المجلد وشغّل التطبيق مع عنوان أودو: sh start.sh https://erp.example.com على ماك ولينكس، وstart.bat https://erp.example.com على ويندوز.
  4. افتح http://localhost:3000 في Chrome أو Edge واربط الجهاز بأودو (الفصل 6). لإيقافه اضغط Ctrl+C.
# macOS and Linux, in the folder taqnix-pos-terminal-webapp
sh start.sh https://erp.example.com
# Windows (Command Prompt, or double-click start.bat)
start.bat https://erp.example.com
# another port; every option
sh start.sh https://erp.example.com --port 3100
sh start.sh --help
# the same without the launcher script
node run.cjs https://erp.example.com

ملف التشغيل يتحقق من إصدار Node.js، ويضيف عنوان أودو الذي تكتبه إلى POS_ALLOWED_ORIGINS، ويقرأ الملف .env (انسخ .env.example إلى .env لتحفظ إعداداتك)، وينبّهك إذا كان المنفذ مشغولًا. وفي المجلد أيضًا ملف README.txt خاص به.

يستمع التطبيق على هذا الحاسوب فقط (127.0.0.1) ما لم تطلب غير ذلك. وهذا يكفي للتجربة ولجهاز بيع على الحاسوب نفسه: العنوان http://localhost يُعدّ آمنًا في المتصفح، فيُثبَّت التطبيق ويعمل دون اتصال. لأجهزة بيع على أجهزة أخرى شغّله بالخيار --host 0.0.0.0 (أو POS_HOST=0.0.0.0) وضع أمامه HTTPS (أدناه). ولتشغيله مع الحاسوب وإعادة تشغيله بعد أي توقف شغّل node run.cjs بمدير عمليات تستخدمه عندك (systemd أو pm2 أو مجدول مهام ويندوز).

الخيار 2: البناء من الشيفرة المصدرية

لمن يعدّل التطبيق أو يريد بناءه على خادمه.

  1. فُكّ ضغط الحزمة ثم الملف taqnix-pos-terminal.zip وادخل إلى المجلد src/pos-terminal (الذي فيه الملف package.json).
  2. ثبّت الاعتماديات بالأمر npm ci.
  3. انسخ الملف .env.example إلى .env واكتب فيه عنوان أودو في POS_ALLOWED_ORIGINS.
  4. ابنِ التطبيق بالأمر npm run build. ينتج عنه نسخة الإنتاج وملف الـ service worker وملف التراخيص.
  5. شغّله بالأمر npm start. المنفذ الافتراضي 3000، ويُغيَّر بالخيار -p.
  6. افتح عنوان التطبيق من متصفح جهاز البيع (القسم الأخير من هذا الفصل).
npm ci
npm run dev            # development server on http://localhost:3000 (permissive proxy defaults)
npm run build          # production build + service worker (scripts/make-sw.mjs) + licences file
npm start              # production server (NODE_ENV=production), port 3000 (-p to change)
POS_STANDALONE=1 npm run build   # .next/standalone, used by the Dockerfile
npm run pack:webapp    # after that build: a ready-to-run folder in webapp-dist/, like the one in the package
docker compose up -d   # build + run with the settings of .env (copy .env.example)

متغيرات البيئة

تُكتب في الملف .env (أو في بيئة الحاوية). في وضع التطوير (npm run dev) يُسمح بأي عنوان أودو وبالعناوين الخاصة.

المتغيرمعناه
POS_ALLOWED_ORIGINSقائمة مفصولة بفواصل بعناوين أودو التي يسمح لها الوسيط /api/odoo بالوصول. في الإنتاج لا يُسمح بغيرها.
POS_ALLOW_ANY_ORIGIN=1يقبل أي عنوان أودو يُكتب في شاشة الإعداد. للشبكات الموثوقة وللتطوير فقط: على خادم مفتوح للإنترنت يحوّل الوسيط إلى مرحّل نحو أي خادم عام.
POS_ALLOW_PRIVATE=1يسمح بالعناوين الخاصة (10.x و192.168.x و127.0.0.1) للعناوين التي لم تُذكر صراحة. عناوين link-local وبيانات السحابة الوصفية مرفوضة دائمًا.
POS_TRUST_PROXY=1يفعّله من يضع التطبيق خلف وسيط عكسي يكتب X-Forwarded-For وX-Forwarded-Host وX-Forwarded-Proto. بدونه تُتجاهل هذه الترويسات.
POS_DISABLE_JSONRPC=1يرفض /jsonrpc: تعمل مفاتيح API فقط ولا تُقبل كلمات مرور أودو. موصى به على أودو 19.
POS_CONNECT_SRCعناوين إضافية تُضاف إلى connect-src في سياسة الأمان. للوضع المباشر فقط (الفصل 6).
POS_PROXY_LOG=1يسجّل الطريقة والمسار والحالة للطلبات المارّة، ولا يسجّل محتواها ولا المفاتيح.
POS_HOST، PORTللتطبيق الجاهز للتشغيل فقط: العنوان (الافتراضي 127.0.0.1 أي هذا الحاسوب فقط) والمنفذ (الافتراضي 3000) اللذان يستمع عليهما. القيمة 0.0.0.0 تفتحه للشبكة: خلف HTTPS فقط.
POS_ALLOWED_ORIGINS=https://erp.example.com
# POS_ALLOW_ANY_ORIGIN=1
# POS_ALLOW_PRIVATE=1
# POS_CONNECT_SRC=https://erp.example.com
# POS_TRUST_PROXY=1
# POS_DISABLE_JSONRPC=1
# POS_HOST=127.0.0.1
# PORT=3000

Docker

يأتي مع الحزمة ملفا Dockerfile وdocker-compose.yml. الأمر docker compose up -d يبني الصورة ويشغّلها بإعدادات الملف .env.

# docker-compose.yml
services:
  pos:
    build: .
    restart: unless-stopped
    ports:
      - "3000:3000"
    env_file: .env

# without compose (header of the Dockerfile)
docker build -t taqnix-pos . && docker run -p 3000:3000 --env-file .env taqnix-pos
مهم: ملف الصورة مرفق لكنه لم يُبنَ ولم يُختبر هنا. جرّبه على خادم تجريبي قبل الاعتماد عليه.

واجهة HTTPS بـ nginx

المثال deploy/nginx.conf.example يضع TLS أمام التطبيق. النقاط المهمة فيه:

  • شغّل التطبيق مع POS_TRUST_PROXY=1 لأن nginx هو الذي يكتب ترويسات X-Forwarded-*.
  • الملف /sw.js لا يُخزَّن مؤقتًا أبدًا، لا في nginx ولا في أي CDN، وإلا لن تصل التحديثات.
  • client_max_body_size 26m: يقبل الوسيط حتى 25 ميغابايت (طلبات فيها بنود كثيرة، وصور).
  • العنوان العام يحتاج إلى حماية: VPN أو SSO أو قائمة عناوين مسموحة (الفصل 25).
# TLS front for the terminal (a PWA can only be installed from https:// or http://localhost).
# Run the app with POS_TRUST_PROXY=1 behind this proxy (it writes the X-Forwarded-* headers below).
# Internet-facing? /api/odoo has no login of its own: restrict who reaches it (VPN, SSO / identity-aware
# proxy, or an IP allow-list like the commented `allow`/`deny` lines below).
server {
  listen 443 ssl http2;
  server_name pos.example.com;
  ssl_certificate     /etc/letsencrypt/live/pos.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/pos.example.com/privkey.pem;

  client_max_body_size 26m;          # the proxy accepts up to 25 MB (orders with many lines, images)

  # allow 203.0.113.0/24;           # the shop's public address(es)
  # deny all;

  location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    # overwrite (never append) what the client sent: the app trusts these only with POS_TRUST_PROXY=1
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 70s;          # the proxy gives Odoo 60 s
  }

  # The service worker must never be cached by a CDN or by nginx
  location = /sw.js {
    proxy_pass http://127.0.0.1:3000;
    add_header Cache-Control "no-cache, no-store, must-revalidate" always;
  }
}

التثبيت على جهاز البيع

  1. افتح عنوان التطبيق https://... في Chrome أو Edge.
  2. اضغط زر التثبيت في المتصفح. وعندما يسمح المتصفح يعرض التطبيق أيضًا شريطًا صغيرًا فيه الرسالة «ثبّت التطبيق على هذا الجهاز لاستخدامه بملء الشاشة وتشغيله أسرع.» وزرّا تثبيت وتجاهل.
  3. شغّل التطبيق المثبّت من قائمة التطبيقات أو من سطح المكتب. تجد حالة التثبيت أيضًا في الإعدادات ثم حول.
نصيحة: بعد أول زيارة ناجحة يبدأ الجهاز دون شبكة، لأن ملفات التطبيق محفوظة عنده. للتحديث انظر الفصل 29.
التطبيق مفتوحًا كتطبيق مثبّت في نافذة Chrome بوضع التطبيق (دون تبويبات ولا شريط عنوان) على نقطة بيع مطعم هاربر: الطاولة 5 وأربعة ضيوف، وأربعة بنود كلها «في المط
التطبيق مفتوحًا كتطبيق مثبّت في نافذة Chrome بوضع التطبيق (دون تبويبات ولا شريط عنوان) على نقطة بيع مطعم هاربر: الطاولة 5 وأربعة ضيوف، وأربعة بنود كلها «في المطبخ»، والإجمالي 30.10 دولار.

جهّز أودو

ببساطة: التطبيق يستعمل حساب مستخدم عاديًا في أودو. جهّز المستخدم ومفتاح API ونقطة البيع، وامنحه الصلاحيات الإضافية التي تحتاج إليها ميزاتك.
  1. أنشئ لكل جهاز (أو لكل أمين صندوق) مستخدمًا في أودو: مستخدم داخلي مع المجموعة نقطة البيع / مستخدم فقط.
  2. من تفضيلات هذا المستخدم افتح أمان الحساب وأنشئ مفتاح API جديد بالنطاق rpc. انسخ المفتاح فورًا: لا يعرضه أودو مرة ثانية. استعمل المفتاح بدل كلمة المرور في شاشة الإعداد.
  3. اضبط نقطة البيع في أودو: طرق الدفع (طريقة نقدية واحدة لكل نقطة بيع)، ومراقبة النقد إن أردت عدّ الدرج عند الفتح والإغلاق، ودفتر اليومية الذي تصدر منه الفواتير إذا أردت استعمال خيار فاتورة.
  4. اضغط اختبار الاتصال في التطبيق (الفصل 6). التقرير يقول لك ما ينقص هذا المستخدم.

صلاحيات اختيارية

المستخدم العادي لنقطة البيع لا يملك بعض الصلاحيات في أودو 19. لا يمنعه ذلك من البيع، لكن بعض الميزات تحتاج إليها:

الصلاحية في أودوما تفتحه في التطبيق
جهات الاتصال / الإنشاءإنشاء العملاء. بدونها يحفظ التطبيق العميل الجديد على الجهاز ويرفضه أودو عند الإرسال، وتبقى الطلبات التي تنتظره في قائمة الانتظار.
المنتجات / الإنشاءحفظ القيم النصية الحرة لخصائص المنتج (الخيار «أخرى (حدد)»).
المحاسبة / الفوترةتسجيل إيداع النقد وسحبه. لا يوجد زر لذلك في هذا التطبيق: سجّل الحركات النقدية في أودو.
صلاحيات قراءة المحاسبةطباعة تقرير Z الكامل من أودو. بدونها يعرض التطبيق ملخصًا للجلسة، ويطبع المدير التقرير الكامل من أودو.
المخزون / مستخدمبيع المنتجات المتتبَّعة بالدفعة أو بالرقم التسلسلي. بدونها يرفض أودو الطلب وتبقى في شاشة المزامنة.
مسؤول نقطة البيعلا يلزم للبيع. يحتاج إليه من سيغلق في أودو جلسة علقت في حالة «قيد الإغلاق» (الفصل 20).

الضرائب والأوضاع المالية

اربط في كل وضع مالي كل ضريبة صراحةً بضريبة أخرى، ولو كانت ضريبة نسبتها 0 %. الوضع المالي بلا أسطر ضرائب يتصرف في أودو 19 نفسه تصرفًا غير متسق: عميل أودو يُبقي الضرائب والخادم يحذفها، فلا تتطابق قيود الجلسة مع الطلبات (الفصل 23). لا يستطيع التطبيق التمييز بين هذا الوضع ووضع لا يُحوّل شيئًا.

للمطعم

الطوابق والطاولات وطابعات الطلبات وفئات المطبخ ومنتج الإكرامية وأنواع الخدمة تُضبط كلها في أودو، من نقطة البيع ثم الإعدادات ثم مخططات الصالة. مستخدم نقطة البيع يقرأ الطاولات فقط. عدّل المخطط في أودو ثم اضغط تنزيل البيانات الآن في شاشة المزامنة (الفصل 15).

ربط الجهاز بأودو

ببساطة: شاشة اربط هذا الجهاز بأودو تظهر مرة واحدة على كل جهاز. تكتب عنوان الخادم وقاعدة البيانات واسم الدخول ومفتاح API، وتضغط اختبار الاتصال لترى تقريرًا بما يعمل وما ينقص، ثم تحفظ.

في أعلى الشاشة شريحتان لاختيار اللغة (العربية وEnglish) والمظهر (فاتح وداكن ومحيط وغابة وغروب). يمكنك تغييرهما قبل الاتصال وبعده.

شاشة اربط هذا الجهاز بأودو قبل تعبئة الحقول: اللغة والمظهر في الأعلى، ثم عنوان الخادم وقاعدة البيانات (مع زر البحث عن قواعد البيانات) واسم الدخول وكلمة المرور أ
شاشة اربط هذا الجهاز بأودو قبل تعبئة الحقول: اللغة والمظهر في الأعلى، ثم عنوان الخادم وقاعدة البيانات (مع زر البحث عن قواعد البيانات) واسم الدخول وكلمة المرور أو مفتاح API، وقسم إعدادات متقدمة. زر حفظ ومتابعة معطّل حتى تكتمل الحقول، وبجانبه اختبار الاتصال.
الحقلماذا تكتب
عنوان الخادمالعنوان الذي تفتح به أودو، مثل https://erp.example.com، دون مسار صفحة. إذا لم تكتب البروتوكول جرّب التطبيق https أولًا، ثم http فقط لـ localhost والعناوين الخاصة والأسماء المحلية (.local و.lan والأسماء المؤلفة من كلمة واحدة)، ويقول التقرير عندها إنه استعمل HTTP. العنوان المكتوب بـ https:// لا يُخفَّض إلى HTTP أبدًا.
قاعدة البياناتاسم قاعدة البيانات. الزر البحث عن قواعد البيانات يسأل الخادم عن القائمة ويحوّل الحقل إلى قائمة اختيار. بعض الخوادم لا تنشر القائمة: عندها اكتب الاسم.
اسم الدخولاسم دخول مستخدم أودو الذي جهّزته في الفصل 5.
كلمة المرور أو مفتاح APIيُنصح بمفتاح API لمستخدم له صلاحية نقطة البيع فقط. إذا لصقت المفتاح ومعه مسافة أو سطر جديد في آخره يقصّه التطبيق (مفتاح أودو 40 خانة سداسية عشرية). كلمة المرور تُرسل كما كُتبت. زر العين يُظهر النص أو يخفيه.

إعدادات متقدمة

الإعدادالمعنى
طريقة الاتصالعبر هذا التطبيق (وسيط) هو الخيار الموصى به ويعمل مع أي خادم أودو دون تعديله: المتصفح يكلّم هذا التطبيق وهو يكلّم أودو. مباشرة إلى أودو فقط إذا كان الوسيط العكسي لأودو يسمح لهذا التطبيق بالاتصال (CORS): المثال deploy/odoo-cors.nginx.example والمتغير POS_CONNECT_SRC.
البروتوكولتلقائي يستخدم JSON-2 إذا كان الخادم يدعمه، وإلا JSON-RPC. يمكنك اختيار JSON-2 أو JSON-RPC صراحة. JSON-2 يحتاج إلى مفتاح API؛ مع كلمة المرور يستخدم الجهاز JSON-RPC، وأودو سيزيله في الإصدار 20.
مهلة الطلب (بالثواني)مدة انتظار أودو قبل أن يعمل الجهاز دون اتصال. القيمة الافتراضية 30، ومن 5 إلى 120.
القفل برمز PINيشفّر المفتاح المحفوظ على الجهاز، ويُطلب الرمز عند تشغيل الجهاز. من 6 إلى 12 رقمًا، وتكتبه مرتين (الفصل 25).

اختبار الاتصال

الزر اختبار الاتصال يتحقق بالترتيب من أن العنوان خادم أودو، ومن قاعدة البيانات، ومن الدخول، ثم من صلاحية نقطة البيع. ويعرض تقريرًا:

تقرير اختبار الاتصال: «تم الاتصال بأودو» في 96 ملّي ثانية، الخادم Odoo 19.0، المستخدم Tom Becker، صلاحية نقطة البيع «نعم»، البروتوكول المستخدم JSON-2، نقطتا بيع
تقرير اختبار الاتصال: «تم الاتصال بأودو» في 96 ملّي ثانية، الخادم Odoo 19.0، المستخدم Tom Becker، صلاحية نقطة البيع «نعم»، البروتوكول المستخدم JSON-2، نقطتا بيع، والوحدات المكتشفة: نقطة البيع والمطعم والولاء والخصم والمخزون. تحتها أربع ملاحظات: لا يستطيع هذا المستخدم إنشاء عملاء، ولا حفظ خيارات المنتجات المخصصة، ولا تسجيل إيداع النقد وسحبه، ولا طباعة تقرير Z. تحت الثلاث الأولى اسم الصلاحية التي يطلبها المسؤول.
في التقريرمعناه
الخادمإصدار أودو. إن كان أقدم من 19 تظهر الملاحظة «هذا الخادم ليس أودو 19.» وهي تحذير لا يمنع الحفظ.
قاعدة البيانات والمستخدمما اتصل به الجهاز فعلًا.
صلاحية نقطة البيع«نعم» إذا كان المستخدم يستطيع استعمال نقطة البيع.
البروتوكول المستخدمJSON-2 أو JSON-RPC.
نقاط البيععدد نقاط البيع التي يستطيع المستخدم فتحها. إن كان صفرًا فلن يكتمل الاتصال.
الوحدات المكتشفةنقطة البيع، والمطعم، والولاء، والخصم، والمخزون. الوحدة غير المثبتة تُخفي ميزاتها من الجهاز.
الملاحظاتما ينقص المستخدم من صلاحيات اختيارية (الفصل 5) مع الحل، وتنبيهات عن البروتوكول والعنوان.

الزر حفظ ومتابعة يعمل بعد أن تكتمل الحقول الأربعة ولا يكون في التقرير خطأ. إن لم تختبر الاتصال قبل ذلك فإنه يختبره أولًا، ثم يحفظ الاتصال على هذا الجهاز وينقلك إلى اختيار نقطة البيع.

أشهر المشكلات

الرسالةالحل
«الخادم لا يستجيب.»تحقّق من العنوان ومن أن الخادم يعمل.
«هذا العنوان لا يبدو خادم أودو.»يجب أن يكون العنوان عنوان خادم أودو نفسه.
«قاعدة البيانات هذه غير موجودة على الخادم.»استخدم البحث عن قواعد البيانات أو اطلب الاسم الدقيق من المسؤول.
«اسم الدخول أو كلمة المرور / مفتاح API غير مقبول.»تحقّق من اسم الدخول والصق مفتاح API من جديد (التفضيلات ثم أمان الحساب في أودو).
«لا يستطيع هذا المستخدم استخدام نقطة البيع.»في أودو امنح المستخدم صلاحية «نقطة البيع / مستخدم».
«رفض هذا التطبيق تمرير الطلبات إلى ذلك الخادم.»أضف الخادم إلى POS_ALLOWED_ORIGINS في بيئة هذا التطبيق (الفصل 4).

بقية الرسائل وحلولها في الفصل 28.

اختيار نقطة البيع وفتح الجلسة

ببساطة: بعد الاتصال يعرض الجهاز نقاط البيع التي يستطيع المستخدم فتحها. تختار واحدة، وإن لم تكن جلستها مفتوحة تعدّ النقد الافتتاحي وتفتحها.
شاشة اختر نقطة البيع: بطاقتان، «المتجر الرئيسي» (تجزئة، مراقبة النقد، مغلقة) و«مطعم هاربر» (مطعم، مراقبة النقد، مغلقة)، وتحت كل منهما زر فتح. في الأعلى Tom Beck
شاشة اختر نقطة البيع: بطاقتان، «المتجر الرئيسي» (تجزئة، مراقبة النقد، مغلقة) و«مطعم هاربر» (مطعم، مراقبة النقد، مغلقة)، وتحت كل منهما زر فتح. في الأعلى Tom Becker على عنوان الخادم، واختيار اللغة، وزر تغيير الخادم.

تعرض كل بطاقة اسم نقطة البيع ونوعها (تجزئة أو مطعم)، وشارة مراقبة النقد إذا كانت نقطة البيع تعدّ النقد، وحالة الجلسة:

الحالة على البطاقةالزرالمعنى
مغلقةفتحلا توجد جلسة. سيطلب منك النقد الافتتاحي.
الجلسة مفتوحة (أو «الجلسة مفتوحة بواسطة» اسم مستخدم)متابعةتوجد جلسة مفتوحة فتتابعها دون عدّ جديد.
الجلسة بانتظار النقد الافتتاحيفتحفُتحت الجلسة في أودو ولم يُعدّ النقد بعد.
الجلسة قيد الإغلاق: اطلب مساعدة المديرمعطّلأودو لا يقبل طلبات في هذه الجلسة. يُنهي المدير إغلاقها في أودو (الفصل 20).

الزر تغيير الخادم في الأعلى يعيدك إلى شاشة الإعداد. إذا كانت على الجهاز طلبات لم تُرسل إلى الخادم السابق يرفض الجهاز الانتقال إلى خادم آخر ويقول «طلبات الخادم السابق لم تُرسل بعد. أرسلها قبل تغيير الخادم.»

النقد الافتتاحي

تفتح النافذة النقد الافتتاحي عندما تختار نقطة بيع لا جلسة مفتوحة لها. اختر طريقة الإدخال:

  • عدّ الأوراق والعملات: فئات الأوراق والعملات تأتي من أودو، ولكل فئة عدّاد. الإجمالي يُحسب لك.
  • إدخال المبلغ: تكتب مبلغ الدرج الإجمالي في الحقل النقد في الدرج.

اكتب عند الحاجة ملاحظة الافتتاح ثم اضغط فتح الجلسة. إن لم تكن نقطة البيع تعدّ النقد عند الافتتاح تظهر العبارة «نقطة البيع هذه لا تعدّ النقد عند الافتتاح.»

نافذة النقد الافتتاحي للمتجر الرئيسي بوضع عدّ الأوراق والعملات: عدّاد لكل فئة من 0.05 إلى 200.00 دولار، والإجمالي 154.70 دولار، وحقل ملاحظة الافتتاح، وزر فتح ال
نافذة النقد الافتتاحي للمتجر الرئيسي بوضع عدّ الأوراق والعملات: عدّاد لكل فئة من 0.05 إلى 200.00 دولار، والإجمالي 154.70 دولار، وحقل ملاحظة الافتتاح، وزر فتح الجلسة.
موضوعالتفاصيل
معرّف الجهازأودو يعطي كل جهاز معرّفًا خاصًا به عند فتح الجلسة أول مرة. لذلك افتح الجلسة مرة واحدة على الأقل والجهاز متصل؛ وإلا تظهر الرسالة «افتح الجلسة مرة واحدة أثناء الاتصال لتسجيل هذا الجهاز.»
البدء دون اتصالإذا كانت بيانات الجهاز موجودة وجلسته مفتوحة فإنه يتابع الجلسة المحفوظة دون هذه النافذة ويعرض الحالة «غير متصل» (الفصل 12).
إغلاق الجلسة من المكتبيفحص الجهاز حالة الجلسة نحو مرة كل دقيقة أثناء الاتصال. إذا أُغلقت من أودو يظهر شريط أحمر في أعلى الشاشة: «أُغلقت هذه الجلسة على جهاز آخر. افتح جلسة جديدة.» مع الزر افتح جلسة جديدة. وإذا أُلغي مفتاح API يظهر الزر أدخل بيانات دخول جديدة. ويستمر البيع، والطلبات المنتظرة تذهب إلى الجلسة الجديدة.

شاشة البيع

ببساطة: شاشة البيع ثلاثة أجزاء: الشريط الجانبي للتنقل بين الشاشات، والمنتجات في الوسط، ولوحة الطلب الحالي على الجانب. المس منتجًا لإضافته، ثم اضغط الدفع.
شاشة البيع قبل أول منتج في المتجر الرئيسي. الشريط الجانبي: البيع والطلبات والعملاء ولوحة المعلومات والمخزون والمزامنة والإعدادات. الشريط العلوي: الجلسة «المتجر
شاشة البيع قبل أول منتج في المتجر الرئيسي. الشريط الجانبي: البيع والطلبات والعملاء ولوحة المعلومات والمخزون والمزامنة والإعدادات. الشريط العلوي: الجلسة «المتجر الرئيسي/00007 · مفتوحة منذ 02:50 م» وحالة «متصل» واسم Tom Becker. في الوسط حقل البحث والفئات وبطاقات المنتجات بأسعارها. على الجانب لوحة الطلب الفارغة برسالة «لا توجد منتجات بعد» ولوحة الأرقام وزر الدفع 0.00 دولار.

المنتجات

  • ابحث بالاسم أو المرجع أو الباركود: البحث يبدأ بعد توقف الكتابة لحظة قصيرة، ويغطي الاسم والمرجع الداخلي والباركود. الضغط على Enter يضيف المنتج إذا كان الباركود أو المرجع مطابقًا تمامًا أو إذا بقيت نتيجة واحدة.
  • الفئات: شرائح بألوان نقطة البيع في الصف الأول، وبعضها يحوي فئات فرعية. الكل يعرض كل المنتجات، والمفضلة ما علّمته مفضلًا في أودو.
  • بطاقة المنتج: صورة (أو حرفان من الاسم) والاسم والسعر. المنتج الذي له خيارات تظهر عليه الشارة خيارات، والكومبو الشارة كومبو.
  • لمسة واحدة تضيف المنتج إلى الطلب. المنتج نفسه بالخيارات نفسها والسعر نفسه يُدمج في بند واحد وتزيد كميته، كما تفعل نقطة بيع أودو.
  • الزر «...» على البطاقة، أو الضغط المطوّل عليها نحو نصف ثانية، يفتح نافذة الخيارات (الكمية والملاحظة وخيارات المنتج، الفصل 9).
  • إذا كان الكتالوج كبيرًا جدًا تتوقف الشبكة عند 1,200 بطاقة وتقول «ابحث أو اختر فئة لعرض بقية المنتجات.»

لوحة الطلب

الطلب 262-1-000001 بأربعة بنود: لاتيه (وسط، شوفان، شراب الفانيليا) 5.60، وتيشيرت هاربر (M، كحلي) 20.70، ووجبة الغداء (كومبو) 15.40، وكرواسون بالزبدة × 2 بـ 5.60
الطلب 262-1-000001 بأربعة بنود: لاتيه (وسط، شوفان، شراب الفانيليا) 5.60، وتيشيرت هاربر (M، كحلي) 20.70، ووجبة الغداء (كومبو) 15.40، وكرواسون بالزبدة × 2 بـ 5.60. الإجمالي الفرعي 42.68، وضريبة القيمة المضافة 15% بمقدار 3.72 و5% بمقدار 0.90، والإجمالي 47.30 دولار. العميل أحمد الحسن، ورقم 459.53 بجانبه هو نقاط ولائه بعد هذا الطلب، وقائمة الأسعار «السعر العام». البند الأخير محدد ولوحة الأرقام في وضع الكمية.

يظهر في أعلى اللوحة رقم الطلب وعدد البنود وزر العميل (الفصل 10)، ثم شرائح اختيارية: نقاط الولاء (الفصل 19) وقائمة الأسعار (تظهر إذا كان في نقطة البيع أكثر من قائمة أسعار). كل بند يعرض كميته واسمه مع خياراته وسعر الوحدة وإجماليه، وخصمه إن وُجد. تحت البنود الإجمالي الفرعي ثم سطر لكل ضريبة ثم الإجمالي.

الزرما يفعله
الخصمنافذة بنسب سريعة 5 و10 و15 و20 % ولوحة أرقام. إذا كانت الوحدة pos_discount مثبتة وعُيّن منتج الخصم فتختار بين الطلب كاملًا والبند المحدد؛ وإلا فالخصم على البند المحدد.
ملاحظةحقلان: ملاحظة للعميل (تُطبع على الإيصال) وملاحظة داخلية (للموظفين فقط، لا تُطبع للعميل).
قائمة الأسعارتغيير قائمة أسعار الطلب. يظهر الزر إذا كان هناك أكثر من قائمة.
لوحة الأرقامإظهار لوحة الأرقام أو إخفاؤها. الوضع تلقائي في الإعدادات يظهرها عندما يبلغ ارتفاع النافذة 900 بكسل أو أكثر.
المزيدتعليق الطلب (يحفظه ويفتح طلبًا جديدًا)، وطلب جديد، واسترداد (ينقلك إلى الطلبات)، وإلغاء الطلب (يبقى في السجل بحالة ملغى ولا يُرسل إلى أودو)، وقائمة الطلبات المعلّقة لاستئنافها. وتضيف الميزات المفعّلة أزرارها هنا: الحجوزات (الفصل 18) والمكافآت وكود الخصم (الفصل 19) وأزرار المطعم (الفصل 15).

لوحة الأرقام لها ثلاثة أوضاع لتعديل البند المحدد: الكمية وخصم % والسعر. اضغط الوضع ثم اكتب الرقم. لا يمكن تغيير سعر عنصر داخل كومبو.

الطلب نفسه على جهاز لوحي أفقي (1024×768): الشريط الجانبي بأيقونات وأسماء، ولوحة طلب أضيق، وتبقى أزرار الخصم وملاحظة وقائمة الأسعار ولوحة الأرقام والمزيد وزر الد
الطلب نفسه على جهاز لوحي أفقي (1024×768): الشريط الجانبي بأيقونات وأسماء، ولوحة طلب أضيق، وتبقى أزرار الخصم وملاحظة وقائمة الأسعار ولوحة الأرقام والمزيد وزر الدفع 47.30 دولار ظاهرة. لوحة الأرقام مخفية في هذا الحجم.

على الجهاز اللوحي الرأسي (768×1024) تنطوي لوحة الطلب في شريط سفلي فيه الزر مراجعة الطلب مع عدد البنود والإجمالي والزر الدفع.

الجهاز اللوحي في الوضع الرأسي (768×1024): شبكة المنتجات بأربعة أعمدة، وفي أسفل الشاشة شريط «مراجعة الطلب» (4 بنود) والإجمالي 47.30 دولار وزر الدفع.
الجهاز اللوحي في الوضع الرأسي (768×1024): شبكة المنتجات بأربعة أعمدة، وفي أسفل الشاشة شريط «مراجعة الطلب» (4 بنود) والإجمالي 47.30 دولار وزر الدفع.

ماسح الباركود

يعمل الماسح كلوحة مفاتيح: يكتب الرمز بسرعة كبيرة ثم Enter. يتعرّف الجهاز على المسح من سرعة الأحرف (أقل من 35 ملّي ثانية بين حرف وآخر افتراضيًا، وثلاثة أحرف على الأقل). تُضبط المهلة وأقصر باركود في الإعدادات ثم الجهاز. ويقرأ الجهاز الأنواع حسب قواعد أودو الافتراضية للباركود:

النوعالصيغةالنتيجة
منتجأي رمز مطابق لباركود المنتج أو للمرجع الداخلييُضاف المنتج.
وزنEAN-13 يبدأ بـ 21يُضاف المنتج بالوزن المكتوب في الرمز (كيلوغرام بثلاث منازل عشرية).
سعرEAN-13 يبدأ بـ 23يُضاف المنتج بالسعر المكتوب في الرمز.
خصميبدأ بـ 22 ثم رقمانيُطبَّق الخصم بالنسبة المئوية على البند المحدد.
عميليبدأ بـ 042يُحدَّد العميل الذي له هذا الباركود.
بطاقة أمين صندوقيبدأ بـ 041غير مستعملة: «بطاقات أمناء الصندوق غير مستخدمة على هذا الجهاز.»

الرمز غير المعروف يعطي «باركود غير معروف» مع الرمز. أثناء الكتابة داخل حقل نص عادي (مثل حقل ملاحظة) لا يُعدّ ما تكتب مسحًا.

اختصارات لوحة المفاتيح

تعمل في شاشة البيع. زر اختصارات لوحة المفاتيح في الشريط العلوي، أو المفتاح ?، يعرض القائمة.

المفتاحالأثر
F2 أو /البحث عن المنتجات
F4اختيار عميل
F8 أو Ctrl+Enterالانتقال إلى الدفع
F9طلب جديد
Q وD وPلوحة الأرقام: الكمية، والخصم، والسعر
↑ و↓تحديد البند السابق أو التالي
Delإزالة البند المحدد
Enterتصديق الدفع (في شاشة الدفع)
Escإغلاق نافذة، أو العودة من شاشة الدفع إلى الطلب
نصيحة: الطلب يُحفظ على الجهاز عند كل تغيير (بعد جزء من الثانية). إذا أُعيد تحميل الصفحة أو انقطعت الكهرباء يعود الجهاز إلى الطلب المفتوح كما كان.
مهم: في الإعدادات ثم الأمان يمكنك طلب «رمز المدير» قبل الخصم وتغيير الأسعار وحذف بند وإلغاء الطلب والاسترداد. عندها تظهر نافذة رمز المدير عند هذه الإجراءات (الفصل 25).

المتغيرات والكومبو

ببساطة: منتج له خيارات (حجم، لون، حليب، إضافات) أو منتج كومبو يفتح نافذة اختيار قبل الإضافة. لا يضيف الجهاز المنتج إلا بعد اكتمال الاختيار، ويعرض السعر الفعلي وأنت تختار.

خيارات المنتج

تظهر لكل خاصية مجموعة أزرار. تأتي المجموعات من أودو بأحد أشكال العرض الثلاثة: شرائح للاختيار الواحد، وعيّنات ألوان للألوان، ومربعات متعددة الاختيار للإضافات. الزيادة في السعر تظهر بجانب كل خيار (مثل «+ 0.50»). الخيارات التي لا يسمح بها أودو معًا (الاستثناءات) تُعطَّل، والتركيبة غير المتاحة تعرض «هذه التركيبة غير متاحة.»

نافذة اللاتيه: حجم الكوب (صغير، وسط +0.50، كبير +1.00)، والحليب (حليب كامل الدسم، خالي الدسم، شوفان +0.50، لوز +0.60، أخرى (حدد))، والإضافات (جرعة إضافية +0.80،
نافذة اللاتيه: حجم الكوب (صغير، وسط +0.50، كبير +1.00)، والحليب (حليب كامل الدسم، خالي الدسم، شوفان +0.50، لوز +0.60، أخرى (حدد))، والإضافات (جرعة إضافية +0.80، شراب الفانيليا +0.40، شراب الكراميل +0.40، منزوع الكافيين). المحدد: وسط، شوفان، شراب الفانيليا. حقل الملاحظة، وعدّاد الكمية، والسعر الحالي 5.60 دولار، وزر إضافة إلى الطلب.
  • أخرى (حدد) قيمة نصية حرة: يظهر حقل نص تكتب فيه ما تريد، ولا يُضاف المنتج قبل كتابته. حفظ هذه القيمة في أودو يحتاج صلاحية «المنتجات / الإنشاء» (الفصل 5)؛ بدونها يرفض أودو الطلب وتبقى المشكلة في شاشة المزامنة.
  • ملاحظة: نص حر يبقى على البند، مثل «بدون بصل».
  • العدّاد يحدد الكمية، والسعر الظاهر يتغير مع كل اختيار.
  • الزر إضافة إلى الطلب يضيف البند. يظهر في الطلب اسم المنتج مع خياراته بين قوسين.

الكومبو

يعرض الكومبو بطاقة لكل مجموعة. عنوان المجموعة يبيّن ما اخترته وما هو مطلوب (مثل «1 من 1»)، والشارة «عنصر واحد مشمول» تعني أن عنصرًا واحدًا من المجموعة داخل سعر الكومبو. العناصر الإضافية لها سعر يظهر بجانبها، والعنصر المشمول يحمل الكلمة «مشمول». يكون الزر إضافة إلى الطلب معطّلًا إلى أن تكتمل كل المجموعات، ويعرض الإجمالي الجاري. إذا كان لعنصر خيارات (حجم مثلًا) فتُسأل عنها أيضًا.

كومبو «وجبة الغداء»: ثلاث مجموعات، ساندويتش وشراب وحلوى، لكل منها عنصر واحد مشمول. المحدد: كلوب ساندويتش (+1.00) وعصير برتقال طازج (+0.50) وتشيز كيك نيويورك (+1
كومبو «وجبة الغداء»: ثلاث مجموعات، ساندويتش وشراب وحلوى، لكل منها عنصر واحد مشمول. المحدد: كلوب ساندويتش (+1.00) وعصير برتقال طازج (+0.50) وتشيز كيك نيويورك (+1.00)، والإجمالي 15.40 دولار. أسماء المجموعات مأخوذة من بيانات أودو.

في الطلب يظهر الكومبو كبند واحد تحته عناصره (كما في صورة الطلب في الفصل 8)، وعلى الإيصال تظهر العناصر تحت اسم الكومبو. حذف الكومبو أو تغيير كميته يشمل عناصره كلها، ويوزّع الجهاز سعر الكومبو على العناصر بالقاعدة التي تستعملها نقطة بيع أودو.

العملاء

ببساطة: تبحث عن العميل من شاشة البيع، أو تدير قائمة العملاء من شاشة العملاء. اختيار العميل يطبّق قائمة أسعاره ووضعه المالي على الطلب. ويمكنك إنشاء عميل جديد حتى دون اتصال.

اختيار عميل للطلب

اضغط العميل في لوحة الطلب أو المفتاح F4. تنزلق لوحة فيها حقل بحث عن العملاء بالاسم أو الهاتف أو البريد أو الباركود (يُقبل الهاتف بأي صيغة، مثل +1 313 555 0111 أو 3135550111)، وزر جديد. اضغط النتيجة لتختارها. بعد الاختيار تظهر بطاقة العميل مع قائمة أسعاره ووضعه المالي، وفيها الزر إزالة لفصل العميل عن الطلب.

لوحة اختيار العميل فوق شاشة البيع: حقل البحث (فيه «أحمد»)، وزر جديد، والنتيجة أحمد الحسن مع بريده ومدينته Dearborn ورقم هاتفه.
لوحة اختيار العميل فوق شاشة البيع: حقل البحث (فيه «أحمد»)، وزر جديد، والنتيجة أحمد الحسن مع بريده ومدينته Dearborn ورقم هاتفه.

عند اختيار العميل ينتقل إلى الطلب ما يلي: قائمة أسعاره، ووضعه المالي (الذي يحوّل الضرائب). يعيد الجهاز حساب الإجماليات فورًا.

شاشة العملاء

في أعلاها العملاء وعدد العملاء الموجودين على هذا الجهاز، وزر عميل جديد. القائمة مرتبة أبجديًا مع فهرس للحروف. اضغط عميلًا لترى بطاقته: الهاتف والبريد والعنوان والرقم الضريبي والباركود، وقائمة الأسعار والوضع المالي، والطلبات الأخيرة على هذا الجهاز.

شاشة العملاء: «34 عميلًا على هذا الجهاز» مرتبون أبجديًا مع فهرس للحروف، وبطاقة أحمد الحسن: الهاتف والبريد والعنوان والباركود وقائمة الأسعار «السعر العام (USD)»
شاشة العملاء: «34 عميلًا على هذا الجهاز» مرتبون أبجديًا مع فهرس للحروف، وبطاقة أحمد الحسن: الهاتف والبريد والعنوان والباركود وقائمة الأسعار «السعر العام (USD)» والوضع المالي «محلي» وطلبه الأخير 262-1-000001 بمبلغ 47.30 دولار. زر «استخدامه للطلب الحالي» فعّال، وزر «تعديل» معطّل ومعه السبب: مستخدم أودو لهذا الجهاز لا يملك صلاحية تعديل العملاء.
الزرما يفعله
استخدامه للطلب الحالييضع العميل على الطلب المفتوح وينقلك إلى شاشة البيع.
تعديلتعديل بيانات العميل. يحتاج إلى اتصال بأودو وإلى صلاحية «جهات الاتصال / الإنشاء». لا يُعدَّل عميل ما زال بانتظار الإنشاء في أودو.
البحث في أودويظهر مع الرسالة «جزء فقط من العملاء موجود على هذا الجهاز.» ويبحث في أودو نفسه ويحفظ النتائج على الجهاز. للكتالوجات الكبيرة.

عميل جديد

الحقول: الاسم (مطلوب) وهذه شركة والهاتف والبريد الإلكتروني والشارع والمدينة والرمز البريدي والدولة والولاية / المنطقة والرقم الضريبي والباركود. اضغط إنشاء العميل. يُحفظ العميل على الجهاز فورًا ويمكن استعماله في الطلبات، ويظهر بالشارة «ستتم مزامنته». يُرسل إلى أودو عند الاتصال (أو فورًا إن كان متصلًا)، ثم يأخذ رقمه في أودو، ويتبعه ما كان ينتظره من طلبات.

نموذج عميل جديد (نادية كريم). في الأعلى تنبيه أن هذا المستخدم لا يستطيع إنشاء عملاء في أودو، وأن أودو 19 يسمح بذلك لمن يملك صلاحية «جهات الاتصال / الإنشاء» فقط،
نموذج عميل جديد (نادية كريم). في الأعلى تنبيه أن هذا المستخدم لا يستطيع إنشاء عملاء في أودو، وأن أودو 19 يسمح بذلك لمن يملك صلاحية «جهات الاتصال / الإنشاء» فقط، وأن المسؤول يمنحها من الإعدادات ثم المستخدمون. ثم الحقول (الاسم وهذه شركة والهاتف والبريد والشارع والمدينة والرمز البريدي والدولة والولاية والرقم الضريبي والباركود) وزرّا إنشاء العميل وإلغاء.
مهم: أودو 19 لا يسمح بإنشاء العملاء إلا لمن يملك صلاحية «جهات الاتصال / الإنشاء». المستخدم العادي لنقطة البيع لا يملكها، فيحفظ النموذج العميل على الجهاز ثم يرفضه أودو عند الإرسال، وتبقى الطلبات التي تنتظره في قائمة الانتظار. اطلب من المسؤول منح الصلاحية ثم اضغط إعادة المحاولة (الفصل 14). النموذج يقول لك ذلك قبل أن تحفظ.

الدفع والإيصال والطباعة

ببساطة: اضغط الدفع فتنتقل إلى شاشة الدفع: تختار طريقة الدفع، وتكتب المبلغ، وتضغط تصديق. يحفظ الجهاز الطلب على نفسه أولًا، ثم يعرض الإيصال، ثم يرسل الطلب إلى أودو.
شاشة الدفع على سطح المكتب: طرق الدفع (نقداً وبطاقة وحساب العميل وقسيمة هدية) فوق لوحة الأرقام وأزرار +10 و+20 و+50 وزر المبلغ المطلوب تمامًا، وعلى الجانب الملخص
شاشة الدفع على سطح المكتب: طرق الدفع (نقداً وبطاقة وحساب العميل وقسيمة هدية) فوق لوحة الأرقام وأزرار +10 و+20 و+50 وزر المبلغ المطلوب تمامًا، وعلى الجانب الملخص: بطاقة 20.00 ونقداً 30.00 لإجمالي 47.30 دولار، فالباقي 2.70 دولار، ثم مفتاح فاتورة (العميل أحمد الحسن)، وزر تصديق الأخضر.
  1. اضغط طريقة دفع: يُضاف سطر دفع بالمبلغ المتبقي كله.
  2. عدّل المبلغ بلوحة الأرقام، أو اضغط المبلغ المطلوب تمامًا ليأخذ السطر ما بقي، أو +10 و+20 و+50 لإضافة هذه المبالغ إلى السطر المحدد.
  3. للدفع بأكثر من طريقة أضف سطرًا آخر بطريقة أخرى. اضغط أيقونة سلة المهملات على السطر لحذفه.
  4. راقب المربع الرمادي: المتبقي بالبرتقالي إلى أن يُدفع الطلب، ثم الباقي بالأخضر إن زاد المدفوع.
  5. اضغط تصديق (أو Enter). للعودة إلى الطلب اضغط السهم أو Esc.
الشاشة نفسها على جهاز لوحي (1024×768): طرق الدفع ولوحة الأرقام في جهة، وملخص الدفع في الجهة الأخرى: الباقي 2.70 دولار، بطاقة 20.00 ونقداً 30.00، والإجمالي 47.30
الشاشة نفسها على جهاز لوحي (1024×768): طرق الدفع ولوحة الأرقام في جهة، وملخص الدفع في الجهة الأخرى: الباقي 2.70 دولار، بطاقة 20.00 ونقداً 30.00، والإجمالي 47.30 دولار.
القاعدةالتفاصيل
الباقيلا يُعاد الباقي إلا نقدًا. إذا زاد المدفوع ولا توجد دفعة نقدية يقول الجهاز «لا يُعاد الباقي إلا نقدًا. خفّض المبلغ أو أضف دفعة نقدية.»
تقريب النقدإذا كانت نقطة البيع تقرّب النقد (المتجر الرئيسي: 0.05 على النقد) يظهر سطر «تقريب النقد» في الملخص، ويجب أن يكون المبلغ النقدي مضاعفًا للتقريب.
حساب العميلالدفع على حساب العميل (الآجل) يحتاج إلى عميل. وإلا يقول الجهاز «اختر عميلًا للدفع على حساب العميل.» ويفتح لوحة العملاء.
فاتورةالمفتاح يطلب فاتورة للعميل. يحتاج إلى عميل. ينشئ أودو الفاتورة عند وصول الطلب إليه، ودون اتصال تُنشأ بعد الإرسال.
الاستردادفي طلب الاسترداد تكون المبالغ سالبة، ويظهر «المبلغ المسترد للعميل» بدل المتبقي.
الدفعات المحجوزةالدفعة التي استلمها أودو (عربون) مقفلة بقفل صغير ولا تُعدَّل ولا تُحذف (الفصل 18).

المنتجات المتتبَّعة بالدفعة أو الرقم التسلسلي

عند إضافة منتج متتبَّع يفتح الجهاز نافذة لإدخال الأرقام: الأرقام التسلسلية (رقم واحد لكل وحدة، تكتبه أو تمسحه ثم تضيفه، ولا يُباع الرقم نفسه مرتين) أو الدفعة (اسم الدفعة والكمية المأخوذة منها، ودفعة أخرى تصبح بندًا جديدًا). يقبل أودو هذه الأرقام فقط من مستخدم له صلاحية «المخزون / مستخدم». بدونها يبقى الطلب في شاشة المزامنة مع الرسالة «صلاحية ناقصة» واسم المجموعة حتى تُمنح الصلاحية وتعيد المحاولة.

الإيصال

بعد تصديق تظهر بطاقة تم استلام الدفع مع الباقي وحالة الإرسال: على هذا الجهاز ثم بانتظار المزامنة أو جارٍ الإرسال إلى أودو… ثم في أودو (أو خطأ في المزامنة). تحتها اختيار عرض الورق 80 مم أو 58 مم، وزر طباعة، وزر طلب جديد.

شاشة الإيصال: البطاقة «تم استلام الدفع» والباقي 2.70 دولار والحالة «في أودو»، واختيار 80 مم أو 58 مم، وزرّا طباعة وطلب جديد. الإيصال: بيانات الشركة، ورقم الإيصا
شاشة الإيصال: البطاقة «تم استلام الدفع» والباقي 2.70 دولار والحالة «في أودو»، واختيار 80 مم أو 58 مم، وزرّا طباعة وطلب جديد. الإيصال: بيانات الشركة، ورقم الإيصال 262-1-000001، والتاريخ، و«خدمك Tom»، ورقم الطلب 2001، والعميل، والبنود برموز الضريبة (A وC) مع عناصر الكومبو، والإجمالي الفرعي 42.68، وضريبة 15% (A) 3.72 على أساس 24.79 وضريبة 5% (C) 0.90 على أساس 17.89، والإجمالي 47.30، وبطاقة 20.00 ونقداً 30.00 والباقي 2.70، ونص التذييل، وباركود رقم الإيصال، ورمز QR للحصول على الفاتورة.

يتألف الإيصال من: كتلة الشركة (الاسم والعنوان والرقم الضريبي والهاتف والبريد)، ورقم الإيصال والتاريخ واسم من خدمك ورقم الطلب، والعميل، والبنود وعلى كل بند حرف ضريبته (A وC...) ومعها خياراته وعناصر الكومبو، والإجمالي الفرعي، والضرائب لكل مجموعة ضريبية مع أساسها، والإجمالي، وطرق الدفع والباقي، وملاحظة العميل، ونص التذييل. في آخره باركود Code-128 لرقم الإيصال، ورمز QR فيه رابط بوابة أودو مع رمز الطلب: يمسحه العميل ليحصل على فاتورته.

الطباعة

  • طباعة تفتح نافذة طباعة المتصفح وتطبع الإيصال وحده.
  • الإعدادات ثم الجهاز: عرض ورق الإيصال (58 أو 80 مم) وطباعة الإيصال تلقائيًا (تفتح النافذة فور التصديق).
  • الطباعة عبر المتصفح فقط. يعرض Chrome نافذة الطباعة في كل مرة إلا إذا شُغِّل بالخيار --kiosk-printing: عندها يطبع صامتًا على الطابعة الافتراضية للنظام.
  • لا يتحدث الجهاز مع الطابعات بأوامر ESC/POS مباشرة، ولا يقود صندوق IoT. طابعات الإيصالات والمطبخ يجب أن يستطيع نظام التشغيل الطباعة عليها (الفصلان 21 و27).

العمل دون اتصال

ببساطة: الجهاز يبيع بما عنده. إذا انقطعت الشبكة أو توقف أودو يستمر البيع، وتُحفظ الطلبات على الجهاز، وتُرسل إلى أودو بالترتيب فور عودة الاتصال.

ما يحفظه الجهاز

في IndexedDB داخل المتصفح: المنتجات ومتغيراتها والكومبو والعملاء والضرائب والأوضاع المالية وقوائم الأسعار وبرامج الولاء وإعدادات نقطة البيع، والطلبات المفتوحة والمدفوعة التي لم تُرسل. يبدأ الجهاز دون شبكة منذ أول زيارة ناجحة لأن ملفات التطبيق نفسها محفوظة عند الجهاز بواسطة الـ service worker (الفصل 4).

البيع دون اتصال: الشريط العلوي يعرض «غير متصل · طلبان بانتظار الإرسال» بالأحمر، والطلب 262-1-000007 (كابتشينو 3.80 وخبز بالشوكولاتة 3.10) بإجمالي 6.90 دولار يُب
البيع دون اتصال: الشريط العلوي يعرض «غير متصل · طلبان بانتظار الإرسال» بالأحمر، والطلب 262-1-000007 (كابتشينو 3.80 وخبز بالشوكولاتة 3.10) بإجمالي 6.90 دولار يُبنى كالمعتاد: الأسعار والضرائب والخصومات تُحسب على الجهاز.

الشريط العلوي يوضح الحالة: متصل، أو غير متصل، أو «غير متصل · طلبان بانتظار الإرسال» (يتغير الرقم). الضغط عليه يفتح شاشة المزامنة. عند التصديق دون اتصال يقول الإيصال: «حُفظ على هذا الجهاز. سيُرسل إلى أودو تلقائيًا.»

إيصال طلب دفع نقدًا (7.40 دولار) دون اتصال: الحالة «بانتظار المزامنة»، والتنبيه «حُفظ على هذا الجهاز. سيُرسل إلى أودو تلقائيًا.»، والشريط العلوي «غير متصل · طلب
إيصال طلب دفع نقدًا (7.40 دولار) دون اتصال: الحالة «بانتظار المزامنة»، والتنبيه «حُفظ على هذا الجهاز. سيُرسل إلى أودو تلقائيًا.»، والشريط العلوي «غير متصل · طلب واحد بانتظار الإرسال». الإيصال 262-1-000005 بباركوده ورمز QR كالمعتاد.

قائمة الانتظار

  • تُرسل الطلبات واحدًا واحدًا، الأقدم أولًا. لا يُرسل طلب قبل أن يكتمل السابق.
  • كل طلب يُرسل مرة واحدة: لكل طلب معرّف فريد، وإذا ضاع رد أودو ثم أعاد الجهاز الإرسال فإن أودو يتعرّف على الطلب بمعرّفه ولا ينشئ نسخة ثانية.
  • العملاء الذين أُنشئوا دون اتصال يُرسلون قبل الطلبات التي تنتظرهم، وتأخذ الطلبات رقم العميل في أودو بعد إنشائه.
  • متى يحاول الجهاز؟ عند عودة الاتصال، وعند العودة إلى نافذة التطبيق، ومرة كل 30 ثانية ما دام في الانتظار شيء، وعند الضغط على مزامنة الآن. وإذا بقي المتصفح «متصلًا» بينما أودو أو التطبيق متوقف، يفحص الجهاز أودو بطلب خفيف ويرسل حالما يجيب.
نوع الخطأماذا يفعل الجهاز
خطأ شبكة (لا اتصال، انتهاء المهلة، أودو مشغول أو غير متاح)يعيد المحاولة تلقائيًا بمهل متزايدة: 5 ثوانٍ، ثم 15 ثانية، ثم 45 ثانية، ثم دقيقتين، ثم 5 دقائق، وبعدها كل 15 دقيقة. عودة الاتصال تُنهي الانتظار فورًا.
خطأ عمل (صلاحية ناقصة، رفض أودو للبيانات، جلسة غير موجودة...)لا فائدة من التكرار. يبقى الطلب على الجهاز في تبويب الأخطاء مع السبب وطريقة الإصلاح. بعد الإصلاح اضغط إعادة المزامنة.

التنزيل من أودو

بعد التنزيل الكامل الأول يطلب الجهاز التغييرات فقط (المنتجات والأسعار والعملاء...) كل 5 دقائق أثناء الاتصال (من الإعدادات ثم البيانات)، وعند الضغط على تنزيل البيانات الآن. إذا تغيّرت ضريبة بعد أن بِعتَ طلبًا فإن الجهاز يسجّل ذلك في سجل الأحداث ويرسل الطلب كما سُجّل وقت البيع، لأن العميل دفع هذا المبلغ. إذا فتحت التطبيق في تبويبين من المتصفح نفسه فإنهما يتشاركان البيانات، ويرسل واحد منهما فقط في كل مرة.

ما الذي قد يسوء

الحالةالنتيجة والحل
مسح بيانات المتصفح أو الموقعتضيع الطلبات التي لم تُرسل. لذلك تحذّر بطاقة التخزين في شاشة المزامنة عندما لا يضمن المتصفح الاحتفاظ بالبيانات، وفيها زر الاحتفاظ بالبيانات على هذا الجهاز. أرسل كل الطلبات قبل أن تمسح شيئًا.
أُغلقت الجلسة في أودو أثناء البيع دون اتصاليضع أودو الطلبات في الجلسة المفتوحة لنقطة البيع نفسها. إن لم توجد جلسة مفتوحة تنتظر الطلبات حتى تفتح واحدة (يظهر شريط أحمر بالزر افتح جلسة جديدة).
مستخدم أودو ينقصه صلاحيةيبقى الطلب في الأخطاء مع «صلاحية ناقصة: ...». امنح الصلاحية ثم إعادة المحاولة.
مفتاح API أُلغي أو تغيّرت كلمة المروريظهر شريط أحمر بالزر أدخل بيانات دخول جديدة. الطلبات غير المرسلة تبقى على الجهاز.

الطلبات

ببساطة: شاشة الطلبات تعرض كل طلبات هذا الجهاز، حتى التي لم تصل إلى أودو بعد. منها تعيد طباعة إيصال، وتسترد طلبًا، وتعيد إرسال طلب رفضه أودو.

في الأعلى التبويبات: اليوم وهذه الجلسة وبانتظار الإرسال (طلبات حُفظت دون اتصال) والأخطاء (طلبات رفضها أودو أو نبّه عليها) والمسودات (الطلبات المعلّقة وطلبات الطاولات المفتوحة) والحجز بعربون. تحت التبويبات حقل بحث (الإيصال أو العميل أو المبلغ) وترتيب (الأحدث والأقدم والأكبر والأصغر).

شاشة الطلبات (اليوم): سبعة طلبات للجلسة المتجر الرئيسي/00007، كلها «تمت المزامنة» عدا الطلب 262-1-000007 وهو مسودة «على هذا الجهاز» بقيمة 6.90. على الجانب تفاصي
شاشة الطلبات (اليوم): سبعة طلبات للجلسة المتجر الرئيسي/00007، كلها «تمت المزامنة» عدا الطلب 262-1-000007 وهو مسودة «على هذا الجهاز» بقيمة 6.90. على الجانب تفاصيل الطلب 262-1-000001 (47.30 دولار، مدفوع، تمت المزامنة): العميل ورقم الإيصال ورقم التتبع 2001 والبنود الأربعة والإجماليات، وفوقها الأزرار إعادة الطباعة واسترداد وتصدير JSON.

في تفاصيل الطلب: حالته (مدفوع أو مُرحّل أو ملغى أو مسودة أو حجز بعربون أو استرداد) وحالة إرساله (تمت المزامنة أو بانتظار الإرسال أو إعادة المحاولة أو خطأ في المزامنة...)، والعميل، ورقم الإيصال ورقم التتبع والفاتورة، والبنود، والإجماليات، والمدفوعات، وسجل المزامنة (متى أُنشئ الطلب على الجهاز ومتى أكّده أودو وبأي اسم).

الزرمتى وماذا
استئنافللطلب المسودة الذي لم يُرسل (معلّق أو طاولة): يفتحه في شاشة البيع لتتابعه.
إعادة الطباعةيعيد بناء إيصال سبق تسليمه ويفتح الطباعة. إذا نقصت بيانات منتج على الجهاز نزّل البيانات من شاشة المزامنة.
استردادللطلبات التي أكّدها أودو فقط. أما الطلب الذي لم يصل إلى أودو فتقول الشاشة «لم يصل هذا الطلب إلى أودو بعد» ويصبح الاسترداد متاحًا بعد مزامنته؛ والطلب الذي رفضه أودو لا يُسترد (لا شيء في أودو ليُسترد).
إعادة المزامنةيعيد الطلب إلى قائمة الانتظار بعد أن تصلح سبب الرفض.
تصدير JSONينزّل الطلب كاملًا بصيغة JSON، لإرساله إلى الدعم أو لإدخاله في أودو يدويًا.
حذفللطلبات التي رفضها أودو فقط. يُنزَّل ملف JSON الخاص بالطلب أولًا، ثم تكتب كلمة «حذف» وتذكر السبب. الحذف نهائي من هذا الجهاز، والطلب المحذوف لا يُحتسب في الجلسة: إن كان العميل قد دفع فسوِّ المبلغ خارج الجهاز.

الاسترداد

اضغط استرداد على طلب أكّده أودو. تفتح نافذة فيها كل بند مع عدّاد، وتحت كل بند «المُباع» و«المُسترد». اضغط استرداد الكل أو اختر البنود والكميات، ويظهر «المبلغ المُعاد». يحسب الجهاز ما سُبق استرداده من هذا الجهاز فلا تتجاوز الكمية ما بقي. ثم متابعة الاسترداد: تفتح شاشة الدفع بمبالغ سالبة لتردّ المبلغ للعميل بطريقة الدفع المناسبة (الفصل 11). في الإعدادات يمكنك طلب رمز المدير قبل الاسترداد.

نافذة استرداد المتجر الرئيسي - 000001: زر استرداد الكل، وعدّاد لكل بند مع المُباع والمُسترد، وقد اختير بند واحد هو تيشيرت هاربر (M، كحلي) بكمية 1، والمبلغ المُع
نافذة استرداد المتجر الرئيسي - 000001: زر استرداد الكل، وعدّاد لكل بند مع المُباع والمُسترد، وقد اختير بند واحد هو تيشيرت هاربر (M، كحلي) بكمية 1، والمبلغ المُعاد -20.70 دولار، وزرّا متابعة الاسترداد وإلغاء.
نصيحة: لا يسترد الجهاز طلبًا لم يؤكده أودو، ولا يلغيه محليًا. إذا أخطأ أمين الصندوق في طلب لم يُرسل بعد فانتظر وصوله إلى أودو ثم استرده.

شاشة المزامنة

ببساطة: شاشة المزامنة تقول لك إن كان كل شيء وصل إلى أودو، وما الذي ينتظر، ولماذا تعثّر. هي أول ما تفتحه عندما يعرض الشريط العلوي طلبات بانتظار الإرسال.

الأزرار في الأعلى: مزامنة الآن (إرسال ما ينتظر)، وتنزيل البيانات الآن (جلب تغييرات أودو)، وإغلاق الجلسة (الفصل 20)، وتصدير التشخيص (ملف للدعم، بلا كلمات مرور ولا مفاتيح: لا يحوي من الطلبات إلا هويتها وحالة مزامنتها، ولا بنودها ولا عملاءها). الزران الأولان يعملان أثناء الاتصال فقط.

شاشة المزامنة دون اتصال: «غير متصل · عنصران بالانتظار» ولافتة حمراء تقول إن البيع مستمر وإن الطلبات ستُرسل تلقائيًا. بطاقة قائمة الانتظار فيها الطلبان 262-1-000
شاشة المزامنة دون اتصال: «غير متصل · عنصران بالانتظار» ولافتة حمراء تقول إن البيع مستمر وإن الطلبات ستُرسل تلقائيًا. بطاقة قائمة الانتظار فيها الطلبان 262-1-000005 (7.40) و262-1-000006 (12.90) بحالة «بانتظار الإرسال». بطاقة الاتصال: الخادم وعبر هذا التطبيق (وسيط)، والمستخدم، وإصدار أودو 19.0، وطريقة الاتصال JSON-2، وآخر طلب مُرسل، وآخر تنزيل للبيانات. بطاقة البيانات على هذا الجهاز: «2,560 سجلًا في 43 جدولًا». أسفلها سجل الأحداث بمرشحات الكل والتحذيرات والأخطاء.

قائمة الانتظار

تعرض الطلبات والتغييرات الأخرى في طريقها إلى أودو (عميل جديد وتعديل عميل ونقاط الولاء وإلغاء طلب الطاولة في أودو وإيداع / سحب نقدي وإغلاق الجلسة)، المشكلات أولًا ثم الأقدم. لكل عنصر حالته وعدد محاولاته وموعد المحاولة التالية («المحاولة التالية خلال ...») وآخر خطأ مع طريقة إصلاحه. إعادة المحاولة الآن أو إعادة محاولة الكل ترسل في الحال. إذا كانت الرسالة تقول «لن يُرسل مجددًا» فالطلب لن يُرسل ثانية فراجعه في أودو (مثل طلب حفظه أودو دون أن يتحقق من دفعه).

سجل الأحداث

آخر الأحداث بمرشحات الكل والتحذيرات والأخطاء. يحتفظ الجهاز بآخر 500 حدث. أسطر السجل تُحفظ بالإنجليزية.

الاتصال والبيانات والتخزين

البطاقةما فيها
الاتصالحالة متصل أو غير متصل، والخادم وطريقة الاتصال، وقاعدة البيانات والمستخدم وإصدار أودو وطريقة الاتصال (JSON-2 أو JSON-RPC)، وآخر طلب مُرسل وآخر تنزيل للبيانات، وزمن الاستجابة مع زر قياس يطلب من الخادم ويقيس المدة.
البيانات على هذا الجهازنسخة بيانات أودو التي يبيع بها الجهاز: آخر تنزيل كامل وآخر تحديث وجدول بعدد السجلات لكل نموذج أودو. إذا لم يكتمل تنزيل المنتجات تظهر عبارة تقول إنه يُستكمل مع التنزيل التالي. الزر إعادة تنزيل كل شيء ينزّل المنتجات والعملاء والضرائب والأسعار من جديد، ويبقى على الجهاز دون تغيير: الطلبات غير المرسلة، والتغييرات المنتظرة، والمسودات، والاتصال ورمز PIN، وإعدادات الجهاز. يستمر البيع أثناء التنزيل.
التخزينالمساحة المستعملة من حصة المتصفح، وهل يضمن المتصفح الاحتفاظ بالبيانات. إذا لم يضمن تظهر الجملة «قد يحذف المتصفح بيانات الجهاز (ومعها الطلبات غير المرسلة) عند امتلاء مساحة الجهاز.» وزر الاحتفاظ بالبيانات. وتنبّه البطاقة عندما تقترب المساحة من الامتلاء.
الشاشة نفسها بعد عودة الاتصال: «كل شيء موجود في أودو»، وقائمة الانتظار فارغة («تمت مزامنة كل شيء»)، وحالة «متصل»، وزر قياس لزمن الاستجابة، وسجل الأحداث بثمانية
الشاشة نفسها بعد عودة الاتصال: «كل شيء موجود في أودو»، وقائمة الانتظار فارغة («تمت مزامنة كل شيء»)، وحالة «متصل»، وزر قياس لزمن الاستجابة، وسجل الأحداث بثمانية أحداث بلا تحذيرات ولا أخطاء.

المطعم: الطاولات والمطبخ والتقسيم والإكرامية

ببساطة: شاشات المطعم تظهر فقط عندما تكون وحدة المطعم (pos_restaurant) مثبتة في أودو ونقطة البيع المختارة نقطة بيع مطعم. «المتجر الرئيسي» في المتجر التجريبي نقطة تجزئة: لا طاولات فيه ولا ضيوف ولا مطبخ، ولا يُحمَّل شيء من شيفرة المطعم. الأمثلة في هذا الفصل من «مطعم هاربر».

مخطط الصالة

افتح الطاولات من الشريط الجانبي. في الأعلى تبويب لكل طابق (الطابق الأرضي والتراس) وعليه عدد الطاولات المفتوحة، وشرائح بعدد الطاولات في كل حالة: شاغرة ومشغولة وبانتظار الدفع، وزر دمج. الطاولات تظهر في مواضعها وأشكالها وأحجامها من أودو (مربعة أو دائرية)، والمخطط يتكيّف مع الشاشة. في الواجهة العربية لا ينعكس المخطط: المواضع مواضع فعلية في القاعة، والباقي هو الذي ينعكس.

مخطط الصالة في مطعم هاربر: تبويبا «الطابق الأرضي» (5 طاولات مفتوحة) و«التراس»، وشرائح «شاغرة 5» و«مشغولة 4» و«بانتظار الدفع 1»، وزر دمج. عشر طاولات بأشكالها ومو
مخطط الصالة في مطعم هاربر: تبويبا «الطابق الأرضي» (5 طاولات مفتوحة) و«التراس»، وشرائح «شاغرة 5» و«مشغولة 4» و«بانتظار الدفع 1»، وزر دمج. عشر طاولات بأشكالها ومواضعها كما في أودو. الطاولة 3 بانتظار الدفع (24.33 دولار)، والطاولات 1 و5 و7 و9 مشغولة، ويظهر على كل طاولة مشغولة إجماليها وعدد ضيوفها والدقائق منذ فتحها. على الطاولتين 5 و9 شارة حمراء بعدد البنود التي لم تُرسل بعد إلى المطبخ. في العمود الجانبي «الطاولات المفتوحة (5)» بكل طاولة وحالتها وإجماليها.

تعرض كل طاولة رقمها ونقطة بلون الطاولة في أودو، وإذا كانت مشغولة إجمالي طلبها وعدد الضيوف والدقائق منذ الفتح. الحالة بانتظار الدفع تعني أن الفاتورة طُبعت ولم يتغير الطلب بعدها: إذا أضفت صنفًا بعد الطباعة عادت الطاولة مشغولة. الشارة الحمراء (قبعة الطباخ) تعدّ البنود التي لم تُرسل بعد إلى المطبخ. العمود الجانبي الطاولات المفتوحة (على الشاشات العريضة) يسرد الطاولات المفتوحة مع الضيوف والمدة وعدد الأصناف التي لم تُرسل.

المخطط نفسه على جهاز لوحي أفقي (1024×768): الطاولات في مواضعها نفسها بحجم يناسب الشاشة، وتبقى شرائح الحالات وزر دمج.
المخطط نفسه على جهاز لوحي أفقي (1024×768): الطاولات في مواضعها نفسها بحجم يناسب الشاشة، وتبقى شرائح الحالات وزر دمج.
المخطط على جهاز لوحي رأسي (768×1024): يُصغَّر المخطط ليتسع في عرض الشاشة مع بقاء أشكال الطاولات ومواضعها النسبية.
المخطط على جهاز لوحي رأسي (768×1024): يُصغَّر المخطط ليتسع في عرض الشاشة مع بقاء أشكال الطاولات ومواضعها النسبية.

طلب الطاولة

اضغط طاولة: تفتح شاشة البيع وطلب هذه الطاولة (طلب جديد إن كانت شاغرة). تضاف إلى لوحة الطلب شريحة الطاولة بعدد الضيوف، وزر اطلب، وعلى كل بند علامة: في المطبخ (وصل إلى المطبخ) أو لم يُرسل (جديد) أو «+1 للإرسال» أو «1 للإلغاء» عند تغيير الكمية بعد الإرسال.

طلب الطاولة 5 (4 ضيوف): ستة بنود، بعضها «في المطبخ» (ليموناضة بالنعناع 3.30 وتشيز كيك نيويورك 5.24...) وبعضها «لم يُرسل» (سلطة سيزر 9.50 وإسبريسو 2.17). شريحة ا
طلب الطاولة 5 (4 ضيوف): ستة بنود، بعضها «في المطبخ» (ليموناضة بالنعناع 3.30 وتشيز كيك نيويورك 5.24...) وبعضها «لم يُرسل» (سلطة سيزر 9.50 وإسبريسو 2.17). شريحة الطاولة (5) وبجانبها عدد الضيوف (4)، وعلى الزر «اطلب» الرقم 3 وهو عدد التغييرات التي لم تُرسل. الإجمالي الفرعي 48.25 دولار وثلاث ضرائب ورسوم خدمة 0.48، والإجمالي 52.43 دولار (الأسعار هنا تُعرض دون ضريبة).

الضغط على شريحة الطاولة يفتح لوحة فيها:

  • الضيوف: عدّاد عدد الضيوف.
  • نوع الخدمة: أنواع الخدمة المعرّفة في أودو (مثل تناول الطعام في المطعم أو السفري أو التوصيل). تغييره يغيّر قائمة أسعار الطلب ووضعه المالي كما في أودو.
  • تقسيم الفاتورة والفاتورة ونقل وفك الدمج ومخطط الصالة (للعودة إلى المخطط).
  • المطبخ: ما سيُرسل الآن، وزر اطلب، ومعاينة التذكرة، وإعادة الطباعة، وسجل عدد التذاكر المطبوعة.

إرسال الطلب إلى المطبخ

الزر اطلب يرسل ما تغيّر فقط منذ آخر إرسال. الرقم على الزر هو عدد التغييرات (إرسال 3 تغييرات إلى المطبخ). يطبع الجهاز تذكرة لكل طابعة مطبخ، فيذهب كل صنف إلى الطابعة التي تحوي فئته في أودو. الأصناف التي لا تأخذها أي طابعة تُطبع على محطة افتراضية اسمها أصناف أخرى، وإذا لم تُضبط أي طابعة طلبات تُطبع كلها هناك. التذكرة مقسّمة إلى أقسام: جديد وتعديل (يُكتب +1 أو -1 مع «الكمية الآن») وملغى. وفي رأسها الطاولة والطابق ونوع الخدمة ومرجع الطلب وعدد الضيوف والنادل (النادل) والوقت، ومعها ملاحظات الأصناف والملاحظة الداخلية وملاحظة العميل وخيارات الصنف، وعناصر الكومبو تحت اسم الكومبو. لا تُرسل إلى المطبخ الإكراميات ولا الخصومات ولا المكافآت.

نافذة «معاينة التذكرة» قبل الإرسال: تذكرة «المطبخ» (طاولة 5، الطابق الأرضي، تناول الطعام في المطعم، الطلب 261-2-000006، الضيوف 4، النادل Tom Becker) فيها «جديد:
نافذة «معاينة التذكرة» قبل الإرسال: تذكرة «المطبخ» (طاولة 5، الطابق الأرضي، تناول الطعام في المطعم، الطلب 261-2-000006، الضيوف 4، النادل Tom Becker) فيها «جديد: 1 سلطة سيزر» و«تعديل: +1 كلوب ساندويتش، الكمية الآن 3»، وتذكرة «البار» فيها «جديد: 1 إسبريسو». زر اطلب في أسفل النافذة.

معاينة التذكرة تعرض التذاكر قبل الإرسال، وإعادة الطباعة تعيد طباعة آخر تذكرة وتحمل الشارة نسخة مكررة. كل تذكرة مهمة طباعة مستقلة من المتصفح (الفصل 11)؛ يعرض Chrome نافذة الطباعة لكل تذكرة إلا إذا شُغِّل بالخيار --kiosk-printing. لا يقود التطبيق صندوق IoT ولا طابعات Epson ePOS الشبكية المضبوطة في أودو: كل محطة مطبخ تحتاج إلى طابعة يستطيع نظام التشغيل الطباعة عليها، أو إلى متصفح ثانٍ عند المحطة (الفصل 27).

تقسيم الفاتورة

اضغط تقسيم الفاتورة (من لوحة الطاولة أو من المزيد). لكل بند عدّاد بالكمية التي ستنتقل إلى الفاتورة الجديدة، وزر الكل. الأداة حصة متساوية: اكتب عدد الضيوف ثم اضغط «تحديد حصة من 4 حصص» فيحدد الجهاز جزءًا من كل بند (وحدات كاملة)، وتعدّل بعده ما تشاء، ومسح يمسح الاختيار. تعرض النافذة الفاتورة الجديدة وما يبقى على الطاولة. ثم اختر إبقاؤها مفتوحة أو دفع هذه الفاتورة.

نافذة «تقسيم الفاتورة» للطاولة 5: حصة متساوية لأربعة ضيوف («تحديد حصة من 4 حصص») وزر مسح، وبنود الطلب كلٌّ بعدّاد وزر «الكل». المنقول إلى الفاتورة الجديدة: كلوب
نافذة «تقسيم الفاتورة» للطاولة 5: حصة متساوية لأربعة ضيوف («تحديد حصة من 4 حصص») وزر مسح، وبنود الطلب كلٌّ بعدّاد وزر «الكل». المنقول إلى الفاتورة الجديدة: كلوب ساندويتش وسلطة سيزر وإسبريسو، وقيمتها 22.33 دولار، ويبقى على الطاولة 30.10 دولار. زرّا إبقاؤها مفتوحة ودفع هذه الفاتورة.
نقطةالتفاصيل
الفاتورة الجديدةطلب مستقل يسمّى «5B» ثم «5C»... يُرسل إلى أودو وحده ويُدفع وحده. لا يُربط في أودو بالطاولة (لأن أودو يدمج كل مسودة تحمل رقم طاولة مع مسودة الطاولة)؛ الربط بالطاولة محلي على الجهاز، وتظهر الفاتورة على طاولتها في المخطط.
عناصر الكومبوتنتقل مع الكومبو الذي تتبعه.
ما لا يُقسَّمطلب مدفوع، أو طلب عليه دفعات.
الكميات والمبالغمجموع الكميات لكل منتج قبل التقسيم وبعده واحد. إذا قُسِّم بند واحد بين فاتورتين فقد ينتقل سنت واحد بين الفاتورتين بسبب تقريب الضريبة لكل سطر، كما يفعل أودو.
سجل المطبخما أُرسل إلى المطبخ ينتقل مع الكميات، فلا يُطبع صنف مرتين.

الفاتورة والإكرامية

الفاتورة تفتح معاينة الفاتورة: فاتورة مبدئية عنوانها «فاتورة - ليست إيصال دفع». لإضافة الإكرامية اختر بلا إكرامية أو 5% أو 10% أو 15% أو 20% من قيمة الفاتورة، أو اكتب مبلغ آخر واضغط تطبيق. تصبح الإكرامية بندًا بمنتج الإكرامية المضبوط في أودو، وتُستبدل إذا غيّرتها وتُحذف إذا اخترت بلا إكرامية. طباعة الفاتورة تطبع الفاتورة المبدئية وتصبح الطاولة «بانتظار الدفع»، والدفع ينقلك إلى شاشة الدفع (الفصل 11).

نافذة «معاينة الفاتورة» للطاولة 5: اختيار الإكرامية (بلا إكرامية، 5%، 10% محدد، 15%، 20%، ومبلغ آخر مع تطبيق)، والسطر «الإكرامية على الفاتورة: 5.24 دولار». على
نافذة «معاينة الفاتورة» للطاولة 5: اختيار الإكرامية (بلا إكرامية، 5%، 10% محدد، 15%، 20%، ومبلغ آخر مع تطبيق)، والسطر «الإكرامية على الفاتورة: 5.24 دولار». على الجانب الفاتورة المبدئية «هاربر كافيه آند ماركت · فاتورة - ليست إيصال دفع · طاولة 5» بالبنود والإكرامية: قبل الضريبة 53.49 والضرائب ورسوم الخدمة 0.48 والإجمالي 57.67 دولار. زرّا الدفع وطباعة الفاتورة.

النقل والدمج

نقل في لوحة الطاولة ينقلك إلى المخطط مع الرسالة «نقل {الطلب}: اضغط على الطاولة الجديدة». إذا كانت الطاولة الجديدة شاغرة تتغير الطاولة فقط. وإذا كانت مشغولة تنضم الأصناف إلى طلبها (الأصناف المتطابقة تجتمع) ثم يُلغى طلب الطاولة القديمة. وللدمج اضغط دمج على المخطط: اختر الطاولة التي تريد نقلها («دمج الطاولات: اضغط على الطاولة المراد نقلها») ثم الطاولة الهدف. وللتراجع اضغط فك الدمج داخل الطلب: تعود الأصناف القادمة من طاولة أخرى إلى طلب جديد على تلك الطاولة، بشرط أن تكون شاغرة. حفظ الوجهة يسبق إلغاء المصدر، فلو انقطع التطبيق في اللحظة بينهما بقيت الأصناف في الطلبين ولا تضيع.

المخطط في وضع النقل: الشريط الأخضر في الأعلى «نقل 5: اضغط على الطاولة الجديدة» مع زر إلغاء، والطاولات كلها محاطة بحدود الاختيار. الطاولة 3 بانتظار الدفع (24.33)
المخطط في وضع النقل: الشريط الأخضر في الأعلى «نقل 5: اضغط على الطاولة الجديدة» مع زر إلغاء، والطاولات كلها محاطة بحدود الاختيار. الطاولة 3 بانتظار الدفع (24.33) والطاولتان 5 و9 عليهما الشارة الحمراء (بنود لم تُرسل بعد).
ما يختلف عن أودو عمدًاالتفاصيل
عناصر الكومبوتذهب إلى طابعة منتجها هو. أودو يرسلها إلى كل الطابعات.
تتبع الأصنافيتتبع الجهاز كل البنود، لأن الأصناف التي لا تأخذها طابعة تُطبع على المحطة الافتراضية. أودو يتتبع فئات الطابعات فقط.
مهم: غير متاح: «دورات» الطعام (إطلاق الدورة)، وتعديل المخطط (إضافة الطاولات والطوابق) وهو من أودو، والإكرامية بعد دفع البطاقة، وإلغاء الحجز مع رد العربون (الفصل 27).

لوحة المؤشرات

ببساطة: لوحة تلخّص مبيعاتك: كم بعت، وكم طلبًا، ومتوسط الفاتورة، وبأي طرق دفع، وما أكثر المنتجات مبيعًا. تفتحها من لوحة المعلومات في الشريط الجانبي، وعنوان الشاشة لوحة المؤشرات.
لوحة المؤشرات للمتجر الرئيسي بفترة «30 يومًا» حتى 02:51 م: المبيعات 3,569.72 دولار، والطلبات 133، ومتوسط الفاتورة 26.84، والضريبة 363.94، وخصومات البنود 18.04.
لوحة المؤشرات للمتجر الرئيسي بفترة «30 يومًا» حتى 02:51 م: المبيعات 3,569.72 دولار، والطلبات 133، ومتوسط الفاتورة 26.84، والضريبة 363.94، وخصومات البنود 18.04. مخطط «المبيعات باليوم»، ودائرة «طرق الدفع»: نقداً 51% (1,819.40) وبطاقة 40% (1,440.79) وقسيمة هدية 7% (253.30) وحساب العميل 2% (56.25)، وتحتها ملاحظة فرق التقريب 0.02 دولار. وجدول «الأكثر مبيعًا» بالمنتج والكمية والمبلغ. (أرقام المتجر التجريبي.)
العنصرما يعرضه
الفترةالجلسة واليوم و7 أيام و30 يومًا. زر تحديث يعيد الحساب.
البطاقاتالمبيعات والطلبات ومتوسط الفاتورة والضريبة والخصومات (خصومات البنود فقط، لا يدخل فيها خصم الطلب كله).
المخططالمبيعات بالساعة للجلسة أو اليوم، والمبيعات باليوم للفترات الأطول.
طرق الدفعدائرة بنسبة كل طريقة ومبلغها. وإذا اختلف مجموع المدفوعات عن المبيعات بفعل تقريب النقد تظهر ملاحظة بالفرق (يُقرَّب النقد المستلم إلى أصغر عملة بينما تبقى المبيعات بإجمالي الطلبات الدقيق).
الأكثر مبيعًاالمنتجات مرتبة بالمبلغ مع الكمية والمبلغ.

مصدر الأرقام: أرقام أودو للفترة المختارة، مضافًا إليها طلبات هذا الجهاز التي لم تُرسل بعد (فلا يضيع منها شيء ولا يُحسب شيء مرتين). تحت العنوان وقت الحساب «حتى 02:51 م» وعدد الطلبات المنتظرة المشمولة. دون اتصال تعرض اللوحة آخر إجابة محفوظة للفترة نفسها مع طلبات الجهاز، وتكتب «نتيجة محفوظة من ... (دون اتصال)» أو «هذا الجهاز فقط (دون اتصال)».

نصيحة: اللوحة ميزة احترافية داخل السعر: تُشغَّل وتُوقَّف من الإعدادات ثم الميزات (الفصل 21).

الاستعلام عن المخزون

ببساطة: تبحث عن منتج فترى كم منه في كل مستودع، دون أن تترك شاشة البيع. هذه الشاشة تقرأ المخزون من أودو، فتحتاج إلى اتصال.
شاشة المخزون بعد البحث عن «علبة شوكولاتة» (HB-071): جدول بأعمدة المستودع والمتوفر والمحجوز والمتاح والوارد. «هاربر الرئيسي» (WH، وعليه الشارة «هذا المتجر») 0 في
شاشة المخزون بعد البحث عن «علبة شوكولاتة» (HB-071): جدول بأعمدة المستودع والمتوفر والمحجوز والمتاح والوارد. «هاربر الرئيسي» (WH، وعليه الشارة «هذا المتجر») 0 في كل الأعمدة والمتاح 0 مظلل بالأحمر، و«وسط المدينة» (WH2) متوفر 20 ومتاح 20. تحته «حسب الموقع (موقعان)». في الأعلى زر تحديث ووقت القراءة.

اكتب في حقل ابحث عن منتج الاسم أو المرجع أو الباركود، واختر النتيجة. تظهر لكل مستودع الأعمدة: المتوفر والمحجوز والمتاح والوارد. مستودع نقطة البيع الحالية يأتي أولًا بالشارة هذا المتجر. الكمية المنخفضة (أقل من 5) تُظهر الشارة «مخزون منخفض»، والكمية 0 أو أقل «نفد من المخزون»، وكلاهما مظلل. حسب الموقع يفتح الكميات لكل موقع داخل المستودع. المنتج الذي له متغيرات يظهر بعدد متغيراته.

دون اتصال يعرض الجهاز آخر نتيجة سبق أن استعلمت عنها لهذا المنتج مع وقتها، ويقول «دون اتصال: هذه آخر نتيجة من أودو وليست المخزون الحالي.» ومن لم يُستعلم عنه من قبل يقول «دون اتصال ولم يُستعلم عنه على هذا الجهاز من قبل.» لا تظهر الكميات على بطاقات المنتجات في شاشة البيع.

الحجز بعربون

ببساطة: العميل يدفع جزءًا الآن ويأخذ الباقي لاحقًا. يبقى الطلب مفتوحًا في أودو مع العربون، وتحصّل الباقي من قائمة الحجوزات حين يعود العميل.

شروط الحجز، وإلا يرفضه الجهاز برسالة:

الشرطالرسالة عند عدم تحققه
للطلب عميل«اختر عميلًا أولًا: الحجز يحتاج إلى من يدين بالباقي.»
أُدخل عربون كدفعة«أدخل العربون كدفعة أولًا.»
المدفوع أقل من الإجمالي«الطلب مدفوع بالكامل: صدّقه بدلًا من ذلك.»
لا باقٍ«لا يمكن إعادة باقٍ من العربون.»
لا عربون على حساب العميل«الدفع على حساب العميل ليس عربونًا.»
ليس طلب طاولة«لا يمكن أن يكون طلب الطاولة حجزًا.»
شاشة الدفع لطلب العميلة ليلى منصور: الإجمالي 110.40 دولار (96.00 وضريبة 15% بمقدار 14.40)، ودُفعت بطاقة 30.00، فالمتبقي 80.40. تحت مفتاح فاتورة لوحة «الحجز بعرب
شاشة الدفع لطلب العميلة ليلى منصور: الإجمالي 110.40 دولار (96.00 وضريبة 15% بمقدار 14.40)، ودُفعت بطاقة 30.00، فالمتبقي 80.40. تحت مفتاح فاتورة لوحة «الحجز بعربون» («أبقِ الطلب مفتوحًا بالمبلغ المدفوع، ويدفع العميل الباقي لاحقًا») بالمدفوع 30.00 والمبلغ المتبقي 80.40، وزر إبقاء الطلب مفتوحًا بعربون.
  1. حدّد العميل وأضف المنتجات، ثم اضغط الدفع.
  2. أضف دفعة العربون بطريقة الدفع (دون باقٍ).
  3. في لوحة الحجز بعربون ترى المدفوع والمبلغ المتبقي. اضغط إبقاء الطلب مفتوحًا بعربون.
  4. يظهر إيصال إيصال العربون (عنوانه «حجز - عربون»، وفي ذيله «احتفظ بهذا الإيصال لاستلام طلبك.») فسلّمه للعميل.

يُرسل الطلب إلى أودو مسودةً مع دفعات العربون. الدفعة التي أُخذت لا تُعدَّل ولا تُحذف من شاشة الدفع، ولا يمكن إلغاء الطلب من الجهاز («سبق استلام عربون على هذا الطلب: حصّل المبلغ المتبقي أو أعد العربون في أودو بدلًا من إلغائه.»).

تحصيل الباقي

افتح المزيد ثم الحجوزات (أو تبويب الحجز بعربون في الطلبات). تعرض القائمة لكل حجز العميل والرقم والتاريخ والإجمالي والمدفوع والمبلغ المتبقي، وفي رأسها إجمالي المستحق. اضغط تحصيل الدفعة: يعود الطلب إلى شاشة الدفع وتضيف الدفعة الأخيرة وتصدّق. الطلب نفسه يكتمل في أودو ويحتفظ بالدفعتين.

قائمة «الحجوزات»: إجمالي المستحق 116.75 دولار، وتنبيه «لا يغلق أودو جلسة فيها حجوزات مفتوحة (طلبات مسودة): حصّلها أو ألغها في أودو قبل الإغلاق.» حجزان: مريم سعي
قائمة «الحجوزات»: إجمالي المستحق 116.75 دولار، وتنبيه «لا يغلق أودو جلسة فيها حجوزات مفتوحة (طلبات مسودة): حصّلها أو ألغها في أودو قبل الإغلاق.» حجزان: مريم سعيد (262-1-000009: الإجمالي 56.35 والمدفوع 20.00 والمتبقي 36.35) وليلى منصور (262-1-000008: الإجمالي 110.40 والمدفوع 30.00 والمتبقي 80.40)، ولكل منهما زر تحصيل الدفعة.
مهم: لا يغلق أودو جلسة فيها حجوزات مفتوحة. حصّل الباقي أولًا. وإلغاء حجز مع رد العربون يتم في أودو لا في هذا التطبيق. وإذا أُنشئ الحجز على جهاز آخر فنزّل البيانات من شاشة المزامنة قبل تحصيله هنا («أُنشئ هذا الحجز على جهاز آخر: حمّل البيانات (شاشة المزامنة) لتحصيله هنا.»).

الولاء وأكواد الخصم

ببساطة: يقرأ الجهاز برامج الولاء من أودو: يحسب النقاط التي يكسبها العميل، ويعرض المكافآت التي يستطيع استعمالها، ويقبل أكواد الخصم مثل SUMMER10. الميزة تحتاج إلى وحدة الولاء في أودو (pos_loyalty).

اختر عميلًا ثم افتح المزيد وبعدها المكافآت وكود الخصم. وتظهر شريحة النقاط في لوحة الطلب برصيد العميل بعد هذا الطلب. إذا لم يكن للعميل بطاقة تقول اللوحة إن بطاقة جديدة ستُنشأ مع الطلب. دون عميل تقول «اختر عميلًا لكسب النقاط واستخدامها.»

لوحة «الولاء» بجانب شاشة البيع: «بطاقة الولاء» لبرنامج «مكافآت هاربر» (الرصيد من أودو 02:50 م): الرصيد 412.23، وهذا الطلب +15.3، وبعده 427.53. «المكافآت»: «خصم
لوحة «الولاء» بجانب شاشة البيع: «بطاقة الولاء» لبرنامج «مكافآت هاربر» (الرصيد من أودو 02:50 م): الرصيد 412.23، وهذا الطلب +15.3، وبعده 427.53. «المكافآت»: «خصم 10% على طلبك» (100 نقطة) و«منتج مجاني - إسبريسو» (50 نقطة) ولكل منهما زر تطبيق. «كود الخصم»: حقل مكتوب فيه مثال «مثل SUMMER10» وزر تطبيق. وفي الأسفل تنبيه بما لا يعالجه هذا الجهاز.
العنصرالتفاصيل
بطاقة الولاءالرصيد كما قرأه الجهاز من أودو ووقت قراءته، ثم هذا الطلب (النقاط التي سيكسبها) وبعده. دون اتصال يعرض آخر رصيد معروف.
المكافآتالمكافآت التي يكفيها رصيد العميل، لكل منها تطبيق وعدد النقاط. التي لا يكفيها الرصيد تقول «تحتاج إلى ... نقطة».
كود الخصماكتب الكود واضغط تطبيق. يعمل دون اتصال لأن الجهاز يعرف قواعد الأكواد. الرسائل: «قُبل كود الخصم» أو «هذا ليس كود خصم لنقطة البيع هذه.» أو «انتهت صلاحية كود الخصم هذا.» أو «كود الخصم هذا لم يبدأ بعد.» أو «كود الخصم هذا يحتاج إلى قائمة أسعار أخرى.»

ما يدعمه الجهاز وما لا يدعمه

مدعومغير مدعوم
برامج من نوع بطاقة الولاء (loyalty) وكود الخصم (promo_code)؛ القواعد التلقائية والقواعد بكود؛ نقاط لكل طلب أو لكل مبلغ أو لكل وحدة؛ حد أدنى للمبلغ (بالضريبة أو دونها) أو للكمية؛ تصفية المنتجات؛ تواريخ البرنامج؛ قوائم الأسعار؛ حد الاستعمال؛ البرامج الاسمية.
المكافآت: خصم (نسبة أو مبلغ للطلب أو مبلغ لكل نقطة) على الطلب أو على أرخص بند أو على منتجات محددة، مع حد أقصى للخصم وتصفير المحفظة؛ ومنتج مجاني من المنتجات الموجودة أصلًا في الطلب.
بطاقات الهدايا والمحفظة الإلكترونية، والقسائم، وقسائم الطلب التالي، وعروض اشترِ X واحصل على Y، والعروض التلقائية، وأكواد البطاقات، وتقسيم النقاط، والمكافآت متعددة المنتجات. لا يعرضها الجهاز ولا يتظاهر بتنفيذها.
  • المنتجان «Gift Card» و«Top-up eWallet» في أودو يختفيان من الكتالوج ومن البحث بالباركود إذا كانا مرتبطين ببرنامج بطاقة هدايا أو محفظة مفعّل، لأن الجهاز لا يستطيع إنشاء البطاقة أو شحنها. إن لم يكن المنتج مرتبطًا ببرنامج مفعّل فهو منتج عادي كما في أودو.
  • استعمال نقاط البطاقة يحتاج إلى اتصال: يتحقق الجهاز من أودو أولًا. دون اتصال تظهر «استخدام النقاط يحتاج إلى اتصال». إذا رفض أودو تظهر «رفض أودو: النقاط غير كافية.»
  • تُؤكَّد النقاط في أودو بعد إرسال الطلب (عنصر نقاط الولاء في قائمة انتظار المزامنة). والنقاط التي أنفقتها طلبات لم يؤكدها أودو بعد تُخصم من رصيد البطاقة قبل عرض أي مكافأة.
  • المكافآت المطبَّقة تتبع الطلب: تُعاد حساباتها بعد كل تغيير، وما لم يعد صالحًا يُزال مع رسالة. إذا أوقفت الميزة والطلب مفتوح تُزال بيانات الولاء منه فورًا.

إغلاق الجلسة

ببساطة: في نهاية اليوم تعدّ النقد وتغلق الجلسة، فيرحّل أودو قيودها المحاسبية. الإغلاق يحتاج إلى اتصال بأودو، ولا يقبل الجلسة بعده أي طلب.

افتح إغلاق الجلسة من قائمة الجلسة في الشريط العلوي، أو من زر إغلاق الجلسة في شاشة المزامنة، أو من الإعدادات ثم هوية الجهاز.

شاشة إغلاق الجلسة (المتجر الرئيسي/00007). «قبل الإغلاق»: أربع علامات خضراء (متصل بأودو، أُرسل كل شيء إلى أودو، لا توجد طلبات مسودة مفتوحة، مبيعات حساب العميل له
شاشة إغلاق الجلسة (المتجر الرئيسي/00007). «قبل الإغلاق»: أربع علامات خضراء (متصل بأودو، أُرسل كل شيء إلى أودو، لا توجد طلبات مسودة مفتوحة، مبيعات حساب العميل لها عميل) وبند «عدّ النقد وأكّد» لم يكتمل بعد. «النقد في الدرج» بوضع إدخال الإجمالي: النقد المعدود 254.40 والمتوقع 254.90 والفرق -0.50 دولار، وهو أقل من حد التأكيد 5.00. «طرق الدفع الأخرى»: بطاقة (المتوقع 186.65) وحساب العميل وقسيمة هدية 0.00. بطاقة الجلسة: فُتحت 2:50 م، 10 طلبات، مبيعات 286.85. زر إغلاق الجلسة الأحمر وتحته «بعد هذه الخطوة لا تقبل الجلسة أي طلبات أخرى.»

قبل الإغلاق

تعرض الشاشة قائمة فحوص. لا يتقدم الإغلاق إلا إذا تحققت:

الفحصماذا تفعل إذا لم يتحقق
متصل بأودوالإغلاق يتطلب اتصالًا. استمر في البيع وأغلق عند عودته؛ لا يضيع شيء في الأثناء.
أُرسل كل شيء إلى أودواضغط مزامنة الآن أو فتح شاشة المزامنة. يجب أن تصل كل الطلبات والتغييرات المنتظرة.
لا توجد طلبات مسودة مفتوحةيرفض أودو إغلاق جلسة فيها مسودات. الطلبات المسودة على هذا الجهاز لكل منها استئناف أو إلغاء. والمسودات المفتوحة في أودو (من أجهزة أخرى أو طاولات) لكل منها خياران: إلغاؤها مع الإغلاق أو الإبقاء عليها. ما كان عليه عربون (حجز) لا يُلغى بهذه الطريقة لأن إلغاءه يحذف دفعاته: حصّل المتبقي أو أعد العربون في أودو أولًا.
مبيعات حساب العميل لها عميليرفض أودو الإغلاق إذا كان هناك طلب مدفوع على «حساب العميل» دون عميل. حدّد العميل في أودو (نقطة البيع ثم الطلبات)، ثم اضغط التحقق مجددًا.
عدّ النقد وأكّدالخطوة التالية في هذه الشاشة.

عدّ النقد

في النقد في الدرج اختر عدّ الأوراق والعملات أو إدخال الإجمالي. تظهر النقد المعدود والمتوقع والمعدود والفرق بحالته: «لا يوجد فرق» أو «أكثر من المتوقع» أو «أقل من المتوقع». في طرق الدفع الأخرى اكتب إجمالي جهاز البطاقات إذا اختلف عن أودو؛ يُرحَّل الفرق عند الإغلاق. وتحتها ملخص الجلسة: الطلبات والمبيعات والنقد والمدفوعات من أودو، والضرائب وأكثر المنتجات مبيعًا من طلبات هذا الجهاز. وملاحظة الإغلاق ملاحظة للمدير تُحفظ على الجلسة في أودو.

إذا كان الفرق أكبر من الحد المضبوط في الإعدادات ثم الأمان (فرق النقد الذي يتطلب تأكيدًا، والقيمة الافتراضية 5) فتظهر عبارة تنبّهك، وعند الإغلاق يُطلب منك كتابة اسم الجلسة للتأكيد.

الإغلاق

  1. اضغط إغلاق الجلسة (الزر الأحمر).
  2. اقرأ نافذة التأكيد «إغلاق ...؟»: يتوقف أودو عن قبول الطلبات ويرحّل القيود، ولا يمكن التراجع من الجهاز.
  3. إذا كان الفرق فوق الحد اكتب اسم الجلسة.
  4. تظهر نافذة أُغلقت الجلسة و«أغلق أودو الجلسة.» وفيها تقرير الإغلاق.
نافذة «أُغلقت الجلسة»: «أُغلقت المتجر الرئيسي/00007 ورُحّلت في أودو» و«أغلق أودو الجلسة». تقرير الإغلاق: الطلبات 10 والمبيعات 286.85، والنقد (الافتتاحي 154.70 و
نافذة «أُغلقت الجلسة»: «أُغلقت المتجر الرئيسي/00007 ورُحّلت في أودو» و«أغلق أودو الجلسة». تقرير الإغلاق: الطلبات 10 والمبيعات 286.85، والنقد (الافتتاحي 154.70 والمدفوعات النقدية 100.20 والمتوقع 254.90 والمعدود 254.40)، وطرق الدفع (بطاقة 6 بمبلغ 186.65)، وضرائب طلبات هذا الجهاز (15%: 30.02 على أساس 199.94، و5%: 2.71 على أساس 54.18)، والفرق -0.50، وسطر التوقيع. في أسفلها فتح جلسة جديدة وطباعة تقرير الإغلاق وتسجيل الخروج.

طباعة تقرير الإغلاق يطبع التقرير ليوقّعه المسؤول. فتح جلسة جديدة يعيدك إلى اختيار نقطة البيع، وتسجيل الخروج يخرج من هذا الجهاز.

مهم: إذا رفض أودو الإغلاق بعد أن بدأه (مثل فرق محاسبي لا يستطيع ترحيله وحده) تبقى الجلسة «قيد الإغلاق»: لا تقبل طلبات ولا تُفتح جلسة جديدة لنقطة البيع هذه. الطلبات المرسلة قبلها آمنة. يفتح مستخدم بصلاحية «مسؤول نقطة البيع» في أودو: نقطة البيع ثم الجلسات، فيختار الجلسة ثم «إغلاق الجلسة وترحيل القيود» ويراجع الفرق ويؤكد. بعدها افتح جلسة جديدة من اختيار نقطة البيع. وإذا لم يصل آخر رد من أودو يعيد الجهاز المحاولة وحده فلا تبع على الجلسة في الأثناء.

تقرير Z الكامل في أودو («تفاصيل المبيعات»، من نقطة البيع ثم التقارير) يحتاج إلى صلاحيات محاسبية لا يملكها أمين الصندوق العادي: يطبعه المدير في أودو. أما ملخص الجلسة في هذه الشاشة فيعرض ما يستطيع الجهاز قراءته من أودو ومن طلباته.

الإعدادات

ببساطة: كل إعداد في شاشة الإعدادات يُحفظ على هذا الجهاز فور تغييره، ولا يؤثر في الأجهزة الأخرى. لنسخ الإعدادات إلى جهاز آخر استعمل ملف الإعدادات.

القائمة الجانبية فيها الأقسام: المظهر والجهاز والطباعة والبيانات والأمان والميزات وملف الإعدادات وهوية الجهاز وحول.

قسما المظهر والجهاز: خمسة مظاهر (فاتح محدد، وداكن، ومحيط، وغابة، وغروب)، ولون العلامة التجارية #2457d6 مع فحص التباين (النص على الأزرار 6.16:1 AA واللون على الب
قسما المظهر والجهاز: خمسة مظاهر (فاتح محدد، وداكن، ومحيط، وغابة، وغروب)، ولون العلامة التجارية #2457d6 مع فحص التباين (النص على الأزرار 6.16:1 AA واللون على البطاقات 6.16:1 AA)، والكثافة (مضغوط، عادي محدد، مريح)، وحجم النص (90% و100% محدد و110% و125%)، واللغة (English والعربية محددة)، والأرقام (123 محدد و١٢٣). ثم قسم الجهاز: عرض ورق الإيصال 80 مم، ولوحة الأرقام في لوحة الطلب بوضع تلقائي، وطباعة الإيصال تلقائيًا، وعرض صور المنتجات، والأصوات.

المظهر

الإعدادالمعنى
المظهرخمسة مظاهر جاهزة: فاتح وداكن ومحيط وغابة وغروب (الفصل 22).
لون العلامة التجاريةمنتقي ألوان وحقل بصيغة #1a2b3c. يعرض الجهاز نسبة التباين لنص الأزرار ولون البطاقات بالمستوى (AAA أو AA أو «للنص الكبير فقط» أو «منخفض جدًا»). إذا كان اللون باهتًا أو داكنًا جدًا على المظهر المختار استعمل الجهاز لونًا قريبًا يبقي الأزرار واضحة وأخبرك. «استخدام لون السمة» يعيد لون المظهر.
الكثافةمضغوط أو عادي أو مريح: تباعد العناصر وأحجامها.
حجم النص90% أو 100% أو 110% أو 125%.
اللغةEnglish أو العربية. الاتجاه (يمين لليسار) يتبع اللغة.
الأرقام123 (الأرقام الغربية، وهي الافتراضية) أو ١٢٣ (الأرقام العربية الهندية).

الجهاز

الإعدادالمعنى
عرض ورق الإيصال58 أو 80 مم.
لوحة الأرقام في لوحة الطلبتلقائي ودائمًا ومخفية.
طباعة الإيصال تلقائيًايفتح نافذة الطباعة فور تصديق البيع.
عرض صور المنتجاتعند الإيقاف تُعرض الأسماء فقط على البطاقات، وهو أسرع على الأجهزة اللوحية القديمة.
الأصواتتنبيه قصير عند المسح وعند الأخطاء.
ماسح الباركودتشغيل قراءة الماسح، مع أقصى زمن بين الأحرف (20 إلى 120 ملّي ثانية) وأقصر باركود (من 3 إلى 12 حرفًا). الإدخال الأسرع يُعدّ مسحًا والأبطأ كتابة.

الطباعة

تُطبع الإيصالات عبر المتصفح على الطابعة التي تختارها. يفتح الجهاز نافذة الطباعة في النظام: اختر طابعة الإيصالات مرة واحدة ويتذكرها المتصفح؛ واضبط الهوامش على «بلا» وحجم الورق على عرض اللفافة؛ والتطبيق المثبّت يطبع دون ترويسة شريط العنوان. الزر طباعة صفحة اختبار يطبع صفحة فيها عرض الورق ونصًا عربيًا للتجربة. طابعات المطبخ والبار قائمة للقراءة فقط تأتي من أودو، وإن لم تُضبط طابعة تقول «لا توجد طابعة طلبات مضبوطة لنقطة البيع هذه.» التطبيق يطبع تذاكره عبر المتصفح، وطباعة IoT Box وEpson ePOS لا يقودها هذا الجهاز (الفصل 27).

قسما البيانات والأمان: «التحقق من تغييرات أودو كل 5 دقائق» و«عدد المنتجات في كل صفحة تنزيل 200 منتج» و«الاحتفاظ بالطلبات المرسلة لمدة 14 يومًا» ومفتاح «تنزيل صو
قسما البيانات والأمان: «التحقق من تغييرات أودو كل 5 دقائق» و«عدد المنتجات في كل صفحة تنزيل 200 منتج» و«الاحتفاظ بالطلبات المرسلة لمدة 14 يومًا» ومفتاح «تنزيل صور المنتجات». تحتها قسم الأمان قبل ضبط أي رمز: رمز PIN للقفل غير معيَّن (زر تعيين رمز)، والقفل التلقائي «أبدًا»، ورمز المدير غير معيَّن أيضًا، وخيارات «طلب رمز المدير قبل» معطلة إلى أن يُعيَّن الرمز.

البيانات

الإعدادالمعنى
التحقق من تغييرات أودو كلكل كم دقيقة يطلب الجهاز تغييرات المنتجات والأسعار والعملاء أثناء الاتصال: 1 أو 2 أو 5 (الافتراضي) أو 10 أو 15 أو 30 أو 60 دقيقة. يعرض الإعداد وقت آخر تنزيل.
عدد المنتجات في كل صفحة تنزيل50 أو 100 أو 200 أو 500 أو 1000 منتج. الصفحات الأصغر تناسب الاتصال البطيء.
الاحتفاظ بالطلبات المرسلة لمدةمن 3 أيام إلى 365 يومًا (الافتراضي 14). بعدها تُحذف الطلبات التي أكّدها أودو من الجهاز. الطلبات التي لم يؤكدها أودو لا تُحذف أبدًا.
تنزيل صور المنتجاتينزّل الصور للعمل دون اتصال، ويستهلك مساحة أكبر.

قسم الأمان في الفصل 25.

الميزات

قسم الميزات في المتجر الرئيسي: الشاشات الأساسية (البيع والطاولات والطلبات والعملاء والمزامنة والإعدادات) «مفعّلة دائمًا». ولكل ميزة احترافية مفتاح وعليها شارة ا
قسم الميزات في المتجر الرئيسي: الشاشات الأساسية (البيع والطاولات والطلبات والعملاء والمزامنة والإعدادات) «مفعّلة دائمًا». ولكل ميزة احترافية مفتاح وعليها شارة احترافي: لوحة المعلومات والمخزون والحجز بعربون والولاء. وتحتها بطاقة ملف الإعدادات: «استيراد الإعدادات» و«تصدير الإعدادات» وجملة أن الملف لا يحتوي أبدًا على اتصال أودو أو المفاتيح أو كلمات المرور أو الرموز.

تشغّل المفاتيح الميزات الاختيارية لهذا الجهاز أو توقفها. الميزة التي تحتاج وحدة غير مثبتة في أودو تظهر بالعبارة «تتطلب ... في أودو» ولا يُحمَّل شيء منها. المطعم يظهر هنا لنقطة بيع المطعم. اللوحة والمخزون يعملان أثناء الاتصال وتبقى آخر نتيجة مقروءة دونه.

ملف الإعدادات

تصدير الإعدادات ينزّل ملف JSON بإعدادات هذا الجهاز. استيراد الإعدادات يقرأ ملفًا ويعرض جدولًا بما سيتغير (الإعداد والآن وبعد الاستيراد) قبل أن تضغط تطبيق. لا يحتوي الملف على اتصال أودو ولا المفاتيح ولا كلمات المرور ولا الرموز. الملف من إصدار أحدث من الجهاز يُرفض: حدّث الجهاز أولًا. إذا كان الاستيراد يوقف حماية برمز المدير فيُطلب رمز المدير.

هوية الجهاز

تعرض كيف يعرف أودو هذا الجهاز: معرّف الجهاز وخادم أودو وقاعدة البيانات واسم الدخول ومستخدم أودو والاتصال ونقطة البيع والجلسة، وزر إغلاق الجلسة.

حول

قسم «حول»: الإصدار 1.0.0 والبناء وخادم أودو Odoo 19.0 وبروتوكول الاتصال JSON-2، وشرائح «الوحدات المثبّتة» (point_of_sale وpos_restaurant وpos_loyalty وpos_disco
قسم «حول»: الإصدار 1.0.0 والبناء وخادم أودو Odoo 19.0 وبروتوكول الاتصال JSON-2، وشرائح «الوحدات المثبّتة» (point_of_sale وpos_restaurant وpos_loyalty وpos_discount وstock...)، والحالة «يعمل في المتصفح» وزر «التحقق من وجود تحديث»، ونص «التراخيص». في أسفله مربع «مسح البيانات المحلية» بزرّي «مسح مع الاحتفاظ بالطلبات غير المرسلة» و«مسح كل شيء». وفي أعلاه بطاقة هوية الجهاز: نقطة البيع «المتجر الرئيسي (#1)» والجلسة وزر إغلاق الجلسة.
العنصرالمعنى
الإصدار والبناءرقم إصدار التطبيق ومعرّف البناء. أعطهما للدعم عند السؤال.
الوحدات المثبّتةوحدات أودو المكتشفة، وعليها علامة عند وجودها.
تثبيت التطبيق«مثبّت كتطبيق» أو «يعمل في المتصفح».
التحقق من وجود تحديث«محدّث»، أو «إصدار جديد جاهز: اضغط تحديث في الشريط» (الفصل 29).
التراخيصنص تراخيص الأجزاء المضمَّنة. يُحمَّل من التطبيق مرة واحدة.
مسح البيانات المحليةللحالة التي يعرض فيها الجهاز بيانات خاطئة. مسح مع الاحتفاظ بالطلبات غير المرسلة يحذف المنتجات والعملاء والطلبات المرسلة والصور ثم ينزّلها من جديد، ويُبقي الطلبات والعمليات التي لم يؤكدها أودو والاتصال والإعدادات. مسح كل شيء يحذف أيضًا الطلبات غير المرسلة (لن تصل إلى أودو أبدًا: تضيع المبيعات والمدفوعات)، ويطلب منك أن تكتب عدد الطلبات التي ستضيع للتأكيد الأخير.

المظاهر ولون العلامة واللغات (للمطورين)

ببساطة: مظاهر التطبيق الخمسة متغيرات CSS، فتعدّل لون الواجهة كلها دون لمس أي مكوّن. وتضيف مظهرًا بكتلة متغيرات جديدة، وتضيف لغة بمجلد ترجمة. هذا الفصل لمن يعدّل الشيفرة المصدرية.

كيف تعمل المظاهر

كل لون ونصف قطر وحجم في الواجهة متغير CSS اسمه يبدأ بـ --pos- على العنصر :root[data-theme=...] في الملف src/app/globals.css. أهمها: --pos-bg و--pos-surface و--pos-surface-2 و--pos-border و--pos-fg و--pos-muted و--pos-primary و--pos-primary-fg و--pos-accent و--pos-success و--pos-warning و--pos-danger. تربط الكتلة @theme inline فئات Tailwind بهذه المتغيرات (مثل bg-surface وtext-fg وbg-primary)، فتغيير المظهر يغيّر المتغيرات فقط. الألوان التي لا يحددها مظهر تأتي من :root (المظهر الفاتح).

إضافة مظهر

هذه خمسة مواضع، والمثال هو المظهر «محيط» الحقيقي:

/* 1. src/app/globals.css: one block of variables per theme (the tokens a theme does not set come from :root) */
:root[data-theme="ocean"] {
  --pos-bg: #eaf3f9;
  --pos-surface: #ffffff;
  --pos-surface-2: #dcebf4;
  --pos-border: #c4dbe9;
  --pos-fg: #0e2433;
  --pos-muted: #516c7e;
  --pos-primary: #0a6595;
  --pos-primary-fg: #ffffff;
  --pos-accent: #06687f;
}

/* 2. src/lib/theme/prefs.ts: the list of names */
export const THEMES = ['light', 'dark', 'ocean', 'forest', 'sunset'] as const

/* 3. src/lib/theme/themes.ts: the colours of the small theme chips (a test keeps them equal to the stylesheet) */
ocean: { bg: '#eaf3f9', surface: '#ffffff', primary: '#0a6595', accent: '#06687f' },

/* 4. src/app/layout.tsx: the boot script, so there is no flash of the wrong theme */
var T=['light','dark','ocean','forest','sunset'];

/* 5. src/lib/i18n/en/core.ts and ar/core.ts: the name shown on the chip */
'theme.ocean': 'Ocean',

الاختبار src/lib/theme/contrast-themes.test.ts يقيس تباين كل زوج ألوان يستعمله النص في كل مظهر ويفشل إن نزل عن 4.5:1، ويتأكد من أن ألوان الشرائح الصغيرة تطابق الملف globals.css. شغّله بعد إضافة المظهر: npx vitest run src/lib/theme.

لون العلامة التجارية (الإعدادات ثم المظهر) يغيّر --pos-primary وحده، ويختار الجهاز لون النص فوقه تلقائيًا بالتباين الأفضل. لا يحتاج إلى مظهر جديد.

شاشة البيع بالمظهر «داكن»: الطلب 262-1-000007 بثلاثة بنود (كابتشينو 3.80 وخبز بالشوكولاتة 3.10 وعصير برتقال طازج 4.50) والإجمالي 11.40 دولار، والعميل أحمد الحسن
شاشة البيع بالمظهر «داكن»: الطلب 262-1-000007 بثلاثة بنود (كابتشينو 3.80 وخبز بالشوكولاتة 3.10 وعصير برتقال طازج 4.50) والإجمالي 11.40 دولار، والعميل أحمد الحسن ونقاطه 423.63.
الطلب نفسه بالمظهر «محيط»: ألوان زرقاء مخضرّة للأزرار والبند المحدد.
الطلب نفسه بالمظهر «محيط»: ألوان زرقاء مخضرّة للأزرار والبند المحدد.
الطلب نفسه بالمظهر «غابة»: ألوان خضراء.
الطلب نفسه بالمظهر «غابة»: ألوان خضراء.
الطلب نفسه بالمظهر «غروب»: ألوان برتقالية محمرّة.
الطلب نفسه بالمظهر «غروب»: ألوان برتقالية محمرّة.

اتجاه الصفحة (RTL)

الاتجاه يتبع اللغة: يكتب التطبيق dir على العنصر html (rtl للعربية). الأنماط تستعمل خصائص منطقية (مثل ms-* وps-* وtext-start) بدل اليمين واليسار، فتنقلب الواجهة وحدها. المبالغ تُعزل لتبقى بالاتجاه من اليسار إلى اليمين. مخطط صالة المطعم لا ينقلب لأن مواضع الطاولات مواضع فعلية.

إضافة لغة

لكل لغة مجلد src/lib/i18n/<lang>/ فيه الملفات نفسها التي في src/lib/i18n/en/ (close وcore وcustomers وlock وorders وpayment وpro وrestaurant وscreens وsell وsettings وsetup وsync)، وبالمفاتيح نفسها. الاختبار في src/lib/i18n/ يفشل إن نقص مفتاح أو متغير نصي في الترجمة. الرسائل التي فيها عدد تحتاج أشكال الجمع التي تتطلبها اللغة: في الإنجليزية شكلان، وفي العربية ستة (zero وone وtwo وfew وmany وother). المصطلحات المعتمدة في src/lib/i18n/GLOSSARY.md.

اللغتان الحاليتان مكتوبتان صراحة في الشيفرة، فلإضافة لغة ثالثة عدّل أيضًا:

  • src/lib/theme/prefs.ts: النوع Lang والقائمة LANGS والتحقق من القيمة المحفوظة.
  • src/lib/i18n/index.ts (دالة dirOf للاتجاه) وformat.ts (رمز اللغة للأرقام والتواريخ) وplural.ts (قواعد الجمع).
  • src/app/layout.tsx: سكربت الإقلاع الذي يضبط اللغة والاتجاه قبل الرسم.
  • src/components/setup/prefs-chips.tsx: شرائح اختيار اللغة.
  • تسجيل الرسائل بـ registerMessages في src/lib/i18n/messages.ts وsrc/lib/screens/messages.ts وملف تسجيل الميزات في src/components/extensions/.

كيف تُحسب الإجماليات

ببساطة: الجهاز يحسب الأسعار والضرائب والإجماليات بنفسه، حتى دون اتصال، بنفس قواعد نقطة بيع أودو 19. ولأن أودو يثق بالإجماليات التي ترسلها نقطة البيع ولا يعيد حسابها، فُحص هذا الحساب مقابل أودو نفسه.

المحرك مكتوب بـ TypeScript ومنقول من شيفرة أودو 19: ملف الضرائب account_tax.js وقواعد نقطة البيع (قوائم الأسعار والأوضاع المالية والكومبو والمتغيرات وتقريب النقد والخصم العام). يدعم تقريب الضريبة لكل بند ولكل الطلب (round_per_line وround_globally). ملفات المحرك في src/lib/engine/ ومذكورة في الملف NOTICE وتبقى تحت رخصة LGPL-3.0 (نصها في LICENSE-LGPL-3.0.txt)، والمسموح لك تعديلها وإعادة توزيعها بتلك الرخصة.

كيف فُحص

الفحصالنتيجة
667 سيناريو أُنشئت في أودو 19 بأدوات بايثون الخاصة به: 399 طلبًا و216 سعر وحدة و36 كومبو و16 خصمًا عامًا، على ضرائب (نسبة ومبلغ ثابت وقسمة ومجموعة، مشمولة وغير مشمولة، وسالبة...) وأوضاع مالية وتقريبات نقد وقوائم أسعار وعملات بخانات عشرية مختلفة.الجهاز = بايثون في 667 من 667 سيناريو. و447 من الطلبات أُرسلت إلى أودو بـ sync_from_ui وقُرئت ثانيةً.
الجافاسكربت الخاص بنقطة بيع أودو نفسه، مشغَّلًا على السيناريوهات نفسها.الجهاز = جافاسكربت أودو في 664 من 667 (ثلاثة استثناءات موثّقة).
إعادة إنتاج مستقلة: 1,149 طلبًا بُنيت بمسار البيع الحقيقي في الجهاز (بيع واسترداد، تقريب نقد، خصم عام، قوائم أسعار، كومبو، متغيرات) وأُرسلت إلى أودو 19 بـ sync_from_ui بصفة أمين صندوق.حُفظ منها 1,085 ورفض أودو 64 بخطأ صلاحيات على منتجات الدفعة / الرقم التسلسلي لمستخدم نقطة بيع فقط. كل طلب أُعيد حسابه ببايثون وجافاسكربت أودو: الجهاز = بايثون على كل الطلبات.
اختبارات خصائص (property tests): مجموع إجماليات البنود = إجمالي الطلب، والإجمالي = قبل الضريبة + الضريبة، والاسترداد = سالب الأصل، وترتيب البنود لا يغيّر إجماليات التقريب الشامل.ناجحة (ضمن 3,336 اختبارًا، الفصل 26).

أين يختلف أودو عن نفسه

في الحالات التالية يختلف عميل أودو (جافاسكربت نقطة البيع) عن خادمه (بايثون). الجهاز يحسب كما تحسب نقطة بيع أودو، لأن هذا ما يُرسَل ويُحفظ:

الحالةماذا يحدث
تقريب النقد على الطلب كلهتُرسل نقطة البيع الإجمالي قبل التقريب وتدفع المبلغ المقرّب، والخادم يحسب إجماليًا مقرّبًا. المحفوظ هو ما أرسله العميل، إلا إذا أُعطي باقٍ: فيضيف الخادم دفعة سالبة ويعيد الحساب فيصير الإجمالي المحفوظ مقرّبًا والمدفوع صافيًا بعد الباقي.
حساب الخادم لبنود الطلب في الواجهة الخلفيةيقرّب إجمالي البند مرة واحدة ويتجاهل بيانات الضريبة الإضافية، بينما تقرّب نقطة البيع لكل ضريبة. الفرق 0.01 في بعض البنود، وإجماليات الطلب تتفق.
وضع مالي بلا أي ربط ضريبينقطة بيع أودو (والجهاز) تُبقي الضرائب، والخادم يحذفها كلها. مع الباقي يعيد الخادم الحساب دون ضريبة ويحتفظ بالطلب باسم «/» (غير مُصدَّق)، وعند الإغلاق يُرحَّل الفرق إلى حساب فروق تقريب النقد إن كانت نقطة البيع تقرّب النقد، وإلا يمنع الإغلاق. الحل: اربط كل ضريبة صراحة بضريبة أخرى، ولو كانت 0 % (الفصل 5). الجهاز لا يستطيع التمييز بين هذا الوضع ووضع لا يربط شيئًا.
التسعيرالخادم لا يعيد تسعير بنود نقطة البيع. الكمية السالبة لا تطابق أي قاعدة في قائمة الأسعار داخل نقطة البيع بينما تطبّق الواجهة الخلفية قواعد الحد الأدنى صفر. وقاعدة مبنية على قائمة أسعار أخرى تُسقط السعر الإضافي للقيم التي لا تنشئ متغيرًا. والبنود خارج نافذة التواريخ وقت التحميل لا تصل إلى نقطة البيع.
تقريب كامل للطلب مع دفعة غير نقدية وباقٍ نقديحالة نادرة: تقرّب نقطة البيع المتبقي النقدي، وعند وجود باقٍ يعيد الخادم الإجمالي مقرّبًا ويرفض الدفع (الاسم «/»).
round_globally مع بند سعره سالب يشارك بنودًا موجبة في الضريبة نفسهاتقرّب نقطة البيع البند السالب في مجموعته والفاتورة تقرّبه مع الباقي: فرق 0.01 في ضريبة الفاتورة. والبيع الذي إجماليه سالب يعيد الخادم حسابه بكميات معكوسة (0.01).

وللجهاز اختلافان مقصودان عن عميل أودو: يصفّي عناصر قائمة الأسعار بتواريخها وقت البيع أيضًا (نقطة البيع تصفّيها عند التحميل فقط، فجهاز يعمل أيامًا يُبقي عروضًا منتهية)، ويقرّب إجماليات البنود إلى العملة.

ما لا يدعمه المحرك

  • الضرائب المحسوبة بشيفرة بايثون (النوع code): يقول الجهاز «لا يمكن حساب إحدى ضرائب هذا المنتج دون اتصال. اطلب من المدير مراجعة إعداد الضرائب.»
  • قوائم الأسعار بعملة غير عملة نقطة البيع، وتحويل وحدات القياس في قوائم الأسعار: تُتجاهل، كما تفعل نقطة بيع أودو.
  • الخصم العام في نقطة بيع عملتها غير عملة الشركة: تُترك مبالغ عملة الشركة في بيانات الضريبة الإضافية ويحسبها الخادم.
  • الدولة المالية البرتغالية (PT) فُحصت بأدوات بايثون فقط.
  • الضريبة المجهولة على بند (من شركة أخرى أو محذوفة) تُسقط ويرفض الخادم مزامنة هذا البند.
  • نقاط الولاء لا يحسبها المحرك: تعاملها طبقة الولاء (الفصل 19).

البنية البرمجية (للمطورين)

ببساطة: التطبيق صفحة واحدة تُرسم في المتصفح، ووسيط خادم صغير يمرّر الطلبات إلى أودو، وملف manifest وservice worker. كل ما يبيع به الجهاز يعيش في IndexedDB، والواجهة لا تصل إلى البيانات إلا عبر طبقة واحدة اسمها terminal.

الأجزاء

الجزءالدور
صفحة واحدة /الشاشات تُبدَّل بقيمة في حالة الواجهة (Zustand) لا بمسارات Next.js. هكذا تعمل إعادة تحميل كاملة من ملف HTML واحد محفوظ دون اتصال.
/api/odooالوسيط: يمرّر طلبات المتصفح إلى أودو بعد فحصها (الفصل 25).
/manifest.webmanifest و/sw.jsبيان التثبيت (PWA) وملف service worker الذي يولّده scripts/make-sw.mjs بعد البناء.
المجلد في src/ما فيه
lib/odooالاتصال بأودو: عميل واحد بطريقتين (/json/2/<model>/<method> بمفتاح API في ترويسة Authorization: bearer مع X-Odoo-Database، و/jsonrpc)، وفحص الاتصال، والأخطاء، والوسيط.
lib/dbقاعدة Dexie (IndexedDB)، والاستعلامات، وتشفير المفتاح برمز PIN.
lib/syncالتنزيل (كامل وتراكمي)، والإرسال، والمجدول، وتحويل الطلب إلى ما يفهمه أودو، والعمليات (عملاء، نقد، إغلاق).
lib/engineمحرك الأسعار والضرائب (TypeScript صرف: لا DOM ولا شبكة).
lib/posمخزن الطلب الحالي ودورة حياته، والإيصال، والباركود، والماسح.
lib/restaurant وlib/proمنطق المطعم، والميزات الاحترافية (لوحة المؤشرات والمخزون والحجز والولاء).
lib/i18n وlib/themeالترجمة والمظاهر.
lib/terminalالواجهة الوحيدة من الشاشات إلى البيانات: useTerminal والدوال التي تفتح الجلسة وتحفظ الطلبات وتغلق الجلسة.
lib/featuresسجل الميزات.
components/...الشاشات والمكوّنات: shell وsell وpayment وreceipt وsetup وsettings وorders وcustomers وsync وclose وlock وrestaurant وpro وui.

خارج src/: المجلد deploy/ (أمثلة nginx، وdeploy/webapp/ وفيه ملف التشغيل وREADME للتطبيق الجاهز للتشغيل) والمجلد scripts/ (مولّدا service worker وملف التراخيص، وscripts/pack-webapp.mjs الذي يجمّع المجلد الجاهز للتشغيل من نسخة البناء المستقلة بالأمر npm run pack:webapp).

البيانات المحلية

في IndexedDB جدول لكل نموذج أودو، باسم النموذج مع استبدال النقطة بـ «_» (مثل product_product وres_partner وaccount_tax وloyalty_program وrestaurant_table)، ومفتاحه id. وجداول الجهاز: orders (مفتاحها uuid)، وops (قائمة العمليات غير الطلبات: عميل جديد، حركة نقد، إغلاق جلسة، نقاط ولاء، إلغاء طلب طاولة)، وimages (صور المنتجات)، وlog (سجل الأحداث، 500 حدث)، وmeta (الاتصال والهوية والجلسة والوحدات المثبتة وعلامة آخر تنزيل...).

من أودو وإليه

  • التنزيل بمحمّل أودو نفسه pos.session.load_data لكل شيء عدا المنتجات، وهي تُنزَّل صفحات بـ product.template.load_product_from_pos بحقول أودو وقواعده. التنزيل التراكمي يعتمد علامة وقت الخادم، ويراجع الحذف بـ pos.session.filter_local_data.
  • الطلبات: pos.order.sync_from_ui طلبًا واحدًا في كل استدعاء، وفريد بمعرّف الطلب. المسودات (الطاولات والحجز) تُرسل بحالة draft.
  • الخطأ يُصنَّف: خطأ شبكة (يُعاد) أو خطأ عمل (يتوقف ويبقى للمراجعة).

سجل الميزات وإضافة ميزة احترافية

كل شاشة اختيارية ميزة تسجّل نفسها بالدالة registerFeature: معرّف، وفئة، وما تحتاجه من وحدات أودو أو اتصال، وموضعها في الشريط الجانبي، ودالة تحمّل شاشتها. الميزة التي تنقصها وحدة لا تُحمَّل شيفرتها ولا تظهر. خطوات إضافة ميزة اسمها «giftcards» مثلًا:

  1. المنطق في src/lib/pro/giftcards/: دوال صرفة مع اختباراتها. الشبكة عبر getOdooCaller() فقط (تعيد null دون اتصال) والتحقق من كل جواب بـ Zod.
  2. ما يجب أن يبقى مقروءًا دون اتصال يُخزَّن بـ readCache وwriteCache (مفتاح pro.giftcards.* في meta).
  3. الواجهة في src/components/pro/giftcards/: شاشة بتصدير افتراضي و/أو شريحة داخل شاشة أخرى (تُحمَّل بـ lazy()).
  4. الرسائل: مفاتيح pro.giftcards.* في src/lib/i18n/en/pro.ts وفي ar/pro.ts (الاختبار يفشل إن نقص مفتاح عربي).
  5. التسجيل في ملف الميزات الاحترافية في src/components/extensions/ (المثال أدناه).
  6. أضف المعرّف إلى PRO_FEATURE_IDS في src/lib/pro/features.ts ونصّي pro.feature.giftcards وpro.feature.giftcards_desc: فيكون له مفتاح في الإعدادات ثم الميزات (مفعّل افتراضيًا).
  7. لا تستورد شيفرة الميزة استيرادًا مباشرًا من ملف التسجيل: الميزة المعطّلة أو الوحدة الناقصة يجب ألا تحمّل شيئًا.
// the registration file of the Pro features (src/components/extensions/): one call per feature
registerFeature({
  id: 'giftcards',
  title: 'Gift cards',
  tier: 'pro',
  requires: { modules: ['pos_loyalty'] },
  nav: { icon: 'gift', labelKey: 'pro.giftcards.title', order: 65 },   // place in the left rail (stock is 60, sync is 70)
  screen: () => import('@/components/pro/giftcards/giftcards-screen'), // loaded only when the feature is on
  // optional: cartSlot, paymentSlot, orderActions, settingsPanel
})

الاختبارات

npm test               # Vitest: unit and integration tests (a fake Odoo inside the test process), engine tests
npm run typecheck      # TypeScript
npm run lint           # ESLint

الاختبارات الحيّة (أمام أودو 19 حقيقي) تُتخطّى ما لم تضبط هذه المتغيرات:

POS_TEST_URL=http://localhost:8069 POS_TEST_DB=mydb POS_TEST_LOGIN=cashier POS_TEST_SECRET=<api key> \
POS_TEST_ADMIN_SECRET=<admin api key> npx vitest run tests/live
المجالالاختبارات الناجحة
المحرك: سيناريوهات مقابل أودو (1,783) واختبارات وحدات وخصائص (55) وانحدارات مالية (28)1,866
الاتصال والوسيط وقاعدة الجهاز والمزامنة (أودو مزيف داخل العملية)393
المظاهر وتباين الألوان357
منطق الشاشات (الطلبات والعملاء والمزامنة والإعدادات والإغلاق والقفل والتشخيص)257
مسار الطلب والإيصال والباركود والماسح158
مكوّنات الواجهة89
المطعم (المخطط والمطبخ والتقسيم والدمج والإكرامية)85
الميزات الاحترافية (لوحة المؤشرات والمخزون والحجز والولاء)66
اللغات (مفاتيح الإنجليزية والعربية والجمع والتنسيق)54
سجل الميزات وPWA وأخرى11
المجموع3,336

إضافة إلى ذلك 66 اختبارًا حيًا تحتاج إلى أودو يعمل وتُتخطّى افتراضيًا.

الأمان

ببساطة: الجهاز يحتفظ بمفتاح أودو في متصفحه، فاحمِ الجهاز والمفتاح. القفل برمز PIN يحمي من الفضول لا من سارق القرص، لذلك استعمل مفتاحًا لكل جهاز بأقل الصلاحيات واسحبه من أودو عند ضياع الجهاز.

مفتاح أودو على الجهاز

يحفظ المتصفح مفتاح API (أو كلمة المرور) في IndexedDB. مع رمز PIN للقفل يُشفَّر المفتاح بـ PBKDF2-SHA-256 (310,000 تكرار) وAES-GCM ويُطلب الرمز عند تشغيل الجهاز وبعد القفل التلقائي. الرمز من 6 إلى 12 رقمًا. من يملك نسخة من ملفات المتصفح يستطيع تجربة الرموز القصيرة دون اتصال، وعدّاد المحاولات في الملفات نفسها. لذلك:

  • الرمز يحمي من الوصول العابر، لا من فحص القرص جنائيًا.
  • استعمل مفتاح API واحدًا لكل جهاز، لمستخدم من مجموعة نقطة البيع فقط (الفصل 5).
  • إذا ضاع الجهاز فألغِ مفتاحه في أودو (التفضيلات ثم أمان الحساب).
قسم الأمان بعد ضبط الرموز: رمز PIN للقفل مع شارة حالته وزرّي تغيير وإزالة، والقفل التلقائي بعد 5 دقائق، ورمز المدير بالشارة نفسها، وخيارات «طلب رمز المدير قبل»:
قسم الأمان بعد ضبط الرموز: رمز PIN للقفل مع شارة حالته وزرّي تغيير وإزالة، والقفل التلقائي بعد 5 دقائق، ورمز المدير بالشارة نفسها، وخيارات «طلب رمز المدير قبل»: الخصومات والاستردادات وإلغاء طلب مفعّلة، وتغيير الأسعار وحذف بند غير مفعّلتين. وأخيرًا «فرق النقد الذي يتطلب تأكيدًا» بقيمة 5 (USD).
الإعدادماذا يفعل
رمز PIN للقفلتعيين رمز ثم تغيير أو إزالة (يُطلب الرمز الحالي). الأخطاء المتكررة تُبطئ المحاولات التالية.
القفل التلقائي بعدأبدًا أو 1 أو 2 أو 5 أو 10 أو 15 أو 30 دقيقة دون لمس. لا يُتاح إلا بعد تعيين رمز القفل. وزر القفل في الشريط العلوي (قفل الجهاز) يظهر عندما يكون الجهاز محميًا برمز.
رمز المديرمن 4 إلى 12 رقمًا، يُحفظ على الجهاز مجزّأً ومملّحًا فقط. تتصاعد مهلة الانتظار بعد الرموز الخاطئة.
طلب رمز المدير قبلمفاتيح: الخصومات وتغيير الأسعار والاستردادات وحذف بند وإلغاء طلب. لا تعمل حتى يُعيَّن رمز المدير. تبقى موافقة المدير صالحة نحو 20 ثانية لنفس الإجراء على نفس البند أو الطلب، كي لا يُسأل عند كل ضغطة. وإيقاف أي حماية (من المفتاح أو باستيراد ملف إعدادات) يطلب رمز المدير أيضًا.
فرق النقد الذي يتطلب تأكيدًاحد الفرق الذي يطلب كتابة اسم الجلسة عند الإغلاق (الفصل 20).

عندما يكون الجهاز مقفلًا تظهر الشاشة الجهاز مقفل. يمكنك فتح القفل بالرمز، أو تسجيل الخروج من هذا الجهاز دون رمز: يحذف الجهاز عندها بيانات الدخول إلى أودو والبيانات المنزّلة، وتبقى الطلبات التي لم تُرسل بعد على الجهاز وتُرسل بعد تسجيل الدخول التالي.

شاشة «الجهاز مقفل»: «أدخل رمز PIN لهذا الجهاز للمتابعة» ونقاط تدل على خانات الرمز ولوحة أرقام، وزر فتح القفل، ورابط «تسجيل الخروج من هذا الجهاز» وتحته «لا يتطلب
شاشة «الجهاز مقفل»: «أدخل رمز PIN لهذا الجهاز للمتابعة» ونقاط تدل على خانات الرمز ولوحة أرقام، وزر فتح القفل، ورابط «تسجيل الخروج من هذا الجهاز» وتحته «لا يتطلب تسجيل الخروج رمز PIN: تبقى الطلبات التي لم تُرسل إلى أودو بعد على هذا الجهاز.»

الوسيط /api/odoo

  • يمرّر إلى أودو مسارات مسموحة فقط (/jsonrpc و/json/2/... وإصدار الخادم وصور المنتجات وقائمة القواعد)، ولا يتبع التحويلات، ولا يمرّر ملفات تعريف الارتباط من المتصفح ولا يعيد Set-Cookie.
  • يفحص كل عنوان يُحَلّ إليه اسم خادم أودو. عناوين link-local وبيانات السحابة الوصفية مرفوضة دائمًا. والشبكات الخاصة مرفوضة إلا بـ POS_ALLOW_PRIVATE أو إذا ذُكر العنوان في POS_ALLOWED_ORIGINS.
  • محاولات الدخول الفاشلة: 10 في 10 دقائق ثم الرد 429 مدة 10 دقائق. دون POS_TRUST_PROXY=1 يتشارك كل العملاء هذه الحصة لكل خادم أودو، فعشر محاولات فاشلة من أي جهة توقف الدخول والمزامنة لكل الأجهزة عشر دقائق.
  • فحص المصدر نفسه (أن الطلب من الصفحة نفسها)، وحد 25 ميغابايت و60 ثانية، والسجلات بلا محتوى ولا مفاتيح.
  • ترويسات سياسة الأمان (Content-Security-Policy وغيرها) في next.config.ts، ولا تسمح الصفحة بالاتصال إلا بنفسها (والعناوين المذكورة في POS_CONNECT_SRC).
مهم: الوسيط /api/odoo بلا تسجيل دخول خاص به: من يصل إليه يستطيع تجربة بيانات دخول على أودو الخاص بك. إذا كان الخادم مفتوحًا للإنترنت فضعه خلف TLS وخلف VPN أو SSO / وسيط يعرف هوية المستخدم أو قائمة عناوين مسموحة.
قائمة فحص قبل التشغيلما يلزم
HTTPSشهادة TLS صالحة للعنوان (الفصل 4).
الوجهاتPOS_ALLOWED_ORIGINS بعنوان أودو فقط. لا POS_ALLOW_ANY_ORIGIN على خادم مفتوح للإنترنت.
الوسيط العكسيPOS_TRUST_PROXY=1 مع nginx الذي يكتب ترويسات X-Forwarded-*.
كلمات المرورPOS_DISABLE_JSONRPC=1: مفاتيح API فقط.
الوصولVPN أو SSO أو قائمة عناوين مسموحة أمام /api/odoo.
المفاتيحمفتاح لكل جهاز، بمستخدم نقطة بيع فقط، يُلغى عند الضياع.
الأجهزةرمز PIN للقفل وقفل تلقائي ورمز مدير على الأجهزة المشتركة.
/sw.jsلا يُخزَّن مؤقتًا في nginx ولا في CDN.

ما مدى الدقة

ببساطة: هذا الفصل يقول بصراحة ما فُحص وما لم يُفحص. الإجماليات تتبع قواعد نقطة بيع أودو 19 وقد قُورنت بأودو نفسه، والبيع دون اتصال لا يفقد طلبًا، لكن الطابعات والماسحات وأدراج النقد لم تُجرَّب على أجهزة حقيقية.

الإجماليات

يحسب الجهاز الأسعار والضرائب والتقريب بمحرك منقول من شيفرة نقطة بيع أودو 19 (الفصل 23). فُحص مقابل أدوات بايثون في أودو نفسه على 667 سيناريو (يطابقها الجهاز كلها)، وأُرسل 447 منها إلى أودو بـ sync_from_ui وقُرئت ثانيةً. ومقابل جافاسكربت نقطة بيع أودو يطابق الجهاز 664 سيناريو من 667، والثلاثة الباقية استثناءات موثّقة. وأُعيد إنتاج 1,149 طلبًا بمسار البيع الحقيقي وأُرسلت إلى أودو بصفة أمين صندوق: يطابق الجهاز بايثون في كل طلب (حُفظ 1,085 ورفض أودو 64 بخطأ صلاحيات على منتجات الدفعة / الرقم التسلسلي).

في بضع حالات يختلف عميل أودو عن خادمه (وضع مالي بلا ربط ضريبي، وتقريب النقد على الطلب كله مع باقٍ، وسعر سالب مع التقريب الشامل). الجهاز يتبع عميل أودو. الجدول في الفصل 23، وأهمها: لا تترك وضعًا ماليًا بلا ربط ضريبي صريح.

ضمانات العمل دون اتصال

الضمانكيف
لا يضيع طلب مصدَّقيُكتب الطلب في IndexedDB قبل أن يُعرض الإيصال، ثم يدخل قائمة الانتظار.
يُرسل مرة واحدةلكل طلب معرّف فريد يتعرّف عليه أودو، فإعادة الإرسال بعد ضياع الرد آمنة. الطلبات تُرسل بالترتيب واحدًا واحدًا.
لا يُحذف قبل أن يؤكده أودوالطلبات المؤكدة تُحذف من الجهاز بعد مدة الاحتفاظ (14 يومًا افتراضيًا)، وغير المؤكدة لا تُحذف أبدًا. الحذف اليدوي لا يتم إلا لطلب رفضه أودو وبعد تنزيل ملف JSON وكتابة سبب.
إجمالي البيع كما دفعه العميللو تغيّرت ضريبة بعد البيع أُرسل الطلب بما سُجّل وقت البيع.

ما قيس وأين

مهم: هذه الأرقام قيست على جهاز Mac واحد بمعالج Apple Silicon، وأودو والتطبيق والمتصفح على الجهاز نفسه، بنافذة 1366×768. ليست جهازًا لوحيًا: الجهاز اللوحي سيكون أبطأ. قِس على جهازك قبل أن تعتمد على رقم.
القياسالنتيجة
أول تنزيل كامل لـ 20,000 منتج و20,000 عميل24.5 ثانية، وحجم IndexedDB نحو 21 ميغابايت
إعادة التحميل الدافئة حتى شبكة منتجات قابلة للاستعمالمن 0.78 إلى 0.87 ثانية
البحث عن منتجنحو 80 ملّي ثانية، منها 60 ملّي ثانية مهلة توقف الكتابة
التمرير60 إطارًا في الثانية
إضافة منتج إلى الطلبالوسيط 1.7 ملّي ثانية
1,000 طلب حُفظت دون اتصال ثم أُرسلت169 ثانية، بالترتيب ودون تكرار
حجم جافاسكربت التطبيق1.75 ميغابايت خام و511 كيلوبايت بعد الضغط (gzip) في المجموع
البدء دون اتصال من أول زيارةجرى التأكد منه مع إيقاف الخادم

الاختبارات

الأمر npm test ينجح بـ 3,336 اختبارًا (Vitest)، ويتخطى 66 اختبارًا حيًا تحتاج إلى أودو 19 يعمل. تفصيلها في الفصل 24.

ما لم يُفحص

  • الطابعات (الإيصالات والمطبخ) والماسحات وأدراج النقد وأجهزة الدفع على أجهزة حقيقية.
  • Safari وFirefox. الفحص على Chrome وEdge.
  • أودو Enterprise، وإصدارات أودو غير 19.
  • صورة Docker: الملفات مرفقة والصورة لم تُبنَ ولم تُختبر هنا.
  • أداء الأجهزة اللوحية.
مهم: الجهاز أداة مساعدة في الحسابات: أنت مسؤول عن التأكد من أن الإيصالات والضرائب والتقارير توافق القوانين المعمول بها في نشاطك وبلدك، وعن اختبار الجهاز على أودو الخاص بك قبل استعماله في المتجر.

الحدود

ببساطة: جدول بما لا يفعله الجهاز أو لم يُتحقَّق منه، وما تفعله بدلًا منه.
الحدالتفاصيلماذا تفعل
الطباعة عبر المتصفح فقطلا أوامر ESC/POS مباشرة، ولا صندوق IoT، ولا طباعة Epson ePOS الشبكية يقودها الجهاز. تذاكر المطبخ تطبع كلها عبر المتصفح. يعرض Chrome نافذة الطباعة إلا إذا شُغِّل بالخيار --kiosk-printing.اجعل لكل محطة مطبخ طابعة يطبع عليها نظام التشغيل، أو متصفحًا ثانيًا عندها. شغّل Chrome بخيار الطباعة الصامتة.
الأجهزة غير مجرَّبةالطابعات والماسحات وأدراج النقد وأجهزة الدفع لم تُجرَّب على أجهزة حقيقية.جرّب أجهزتك قبل الافتتاح.
المتصفحاتالفحص على Chrome وEdge. Safari وFirefox لم يُفحصا. المزامنة في الخلفية (Background Sync) ميزة في Chromium، والطلبات تُرسل ما دامت صفحة الجهاز مفتوحة.استعمل Chrome أو Edge، وأبقِ التطبيق مفتوحًا.
صلاحيات أمين الصندوقالمستخدم العادي لنقطة البيع لا يستطيع إنشاء عملاء، ولا حفظ قيم نصية حرة لخصائص المنتج، ولا تسجيل إيداع النقد وسحبه، ولا طباعة تقرير Z الكامل من أودو. والمنتجات المتتبَّعة بالدفعة أو الرقم التسلسلي تحتاج «المخزون / مستخدم».امنح الصلاحيات المناسبة (الفصل 5) أو نفّذ الإجراء في أودو.
لا زر لإيداع النقد وسحبهلا يوجد زر لذلك في التطبيق.سجّل الحركات النقدية في أودو.
إغلاق الجلسةيحتاج إلى اتصال بأودو ويُرفض ما دامت هناك طلبات غير مرسلة أو مسودات.أرسل كل شيء ثم أغلق (الفصل 20).
لغة سجل الأحداثأسطر سجل الأحداث في شاشة المزامنة مكتوبة بالإنجليزية، حتى حين يكون الجهاز بالعربية.اقرأ حالات الطلبات ورسائلها في شاشة الطلبات، وأرسل الأسطر الإنجليزية إلى الدعم عند طلب المساعدة.
المطعم: الدوراتلا يوجد «إطلاق دورة» (دورات الطعام). البنود تحتفظ برقم الدورة من أودو فقط.أرسل الأصناف للمطبخ حين تريدها.
المطعم: تعديل المخططتعديل الطوابق والطاولات ومواضعها يتم في أودو.عدّل في أودو ثم تنزيل البيانات الآن.
المطعم: الإكرامية بعد الدفعالإكرامية بعد دفع البطاقة (capture) غير مدعومة.أضف الإكرامية قبل الدفع من معاينة الفاتورة.
الحجز بعربونإلغاء حجز مع رد العربون لا يتم من الجهاز. ولا يغلق أودو جلسة فيها حجوزات مفتوحة.حصّل الباقي، أو الغِ وأعد العربون في أودو.
الولاءمدعوم: برامج بطاقة الولاء وكود الخصم (الفصل 19). غير مدعوم: بطاقات الهدايا والمحفظة الإلكترونية والقسائم وقسائم الطلب التالي واشترِ X واحصل على Y والعروض التلقائية وأكواد البطاقات. منتجا «Gift Card» و«Top-up eWallet» المرتبطان ببرنامج مفعّل يختفيان من الكتالوج ومن البحث بالباركود.استعمل هذه البرامج من نقطة بيع أودو، أو عطّلها.
الأوضاع الماليةيجب ربط الضرائب صراحة، ولو بضريبة 0 %. الوضع بلا أسطر ضرائب غير متسق في أودو 19 نفسه.عدّل الوضع المالي في أودو (الفصلان 5 و23).
ما لا يدعمه الجهازتعدد الشركات، وقوائم الأسعار بعملات مختلفة (تُتجاهل كما في نقطة بيع أودو)، وتسجيل دخول الموظفين برمز في وحدة pos_hr (أمناء الصندوق هم مستخدمو أودو)، وربط أجهزة الدفع، وطلب الزبون الذاتي (الكشك)، والدفع عبر الإنترنت.استعمل نقطة بيع أودو الأصلية لهذه الحالات.
JSON-RPCمسار كلمات المرور /jsonrpc تعدّه أودو 19 متقادمًا وسيزيله في الإصدار 20.استعمل مفتاح API (JSON-2)، وفعّل POS_DISABLE_JSONRPC=1.
قفل PINقفل راحة: يحمي من الوصول العابر لا من فحص القرص (الفصل 25).مفتاح لكل جهاز بأقل الصلاحيات وإلغاؤه عند الضياع.
Dockerالملفان مرفقان والصورة لم تُبنَ ولم تُختبر هنا.جرّبها على خادم تجريبي.
التطبيق الجاهز للتشغيلشُغّل على ماك مع Node.js 24. وفي Chrome ثُبّتت هذه النسخة وخزّنت كل ملفاتها وبدأت دون اتصال والخادم متوقف واتصلت بأودو؛ أما اختبارات البيع والمزامنة فجرت على النسخة المبنية من الشيفرة المصدرية (الشيفرة نفسها). لم يُجرَّب start.bat على ويندوز ولا لينكس ولا Node.js 20 و22.جرّبه على حاسوبك أولًا؛ وإن لم يبدأ start.bat فشغّل node run.cjs في موجّه الأوامر.
إصدارات أودوأودو Enterprise لم يُختبر. يحذّر الإعداد (ولا يرفض) إذا كان الخادم أقدم من 19، والإصدارات الأخرى لم تُختبر.استعمل أودو 19 Community.
الأداءقيس على جهاز Mac لا على جهاز لوحي (الفصل 26).قِس على أجهزتك.

حل المشكلات

ببساطة: ابحث عن الرسالة التي ظهرت لك في العمود الأول. معظم رسائل التطبيق تقول ما الحل، وهذه الجداول تجمعها مع السبب.

أثناء الاتصال والإعداد

الرسائل الست الأولى في الفصل 6. هذه بقيتها:

الرسالةالسببالحل
«هذا الخادم ليس أودو 19.»إصدار الخادم أقدم من 19 (تحذير لا يمنع الحفظ).حدّث أودو إلى 19.0.
«أجاب أودو بالرمز 404 على ‎/json/2: سيُستخدم JSON-RPC بدلًا منه.»الخادم لا يقدّم JSON-2.حدّث أودو إلى 19.0.
«يحتاج JSON-2 إلى مفتاح API؛ مع كلمة المرور يستخدم الجهاز JSON-RPC.»كُتبت كلمة مرور بدل مفتاح.أنشئ مفتاح API للمستخدم واستعمله.
«يعمل JSON-RPC لكن أودو سيزيله في الإصدار 20.»المسار القديم يعمل.انتقل إلى مفتاح API وفعّل POS_DISABLE_JSONRPC=1.
«مفتاح API هذا يخص مستخدمًا غير اسم الدخول المكتوب.»المفتاح لمستخدم آخر.اكتب اسم دخول صاحب المفتاح.
«محاولات دخول فاشلة كثيرة من هذه الشبكة...» أو «محاولات دخول فاشلة كثيرة. انتظر دقيقة ثم حاول مرة أخرى.»أودو يحدّ المحاولات الفاشلة، والوسيط يحدّها أيضًا: 10 محاولات في 10 دقائق ثم رد 429 عشر دقائق. دون POS_TRUST_PROXY=1 تتشارك كل الأجهزة هذه الحصة.انتظر، وصحّح بيانات الدخول، وفعّل POS_TRUST_PROXY=1 خلف الوسيط العكسي.
«لا توجد نقطة بيع يستطيع هذا المستخدم فتحها.»لا نقطة بيع مرتبطة بالمستخدم.أنشئ نقطة بيع في أودو (نقطة البيع ثم الإعدادات) أو امنحه الوصول.
«هذا المستخدم ليس مستخدمًا داخليًا. قد ترفضه بعض ميزات أودو.»حساب بوابة أو مشاركة.اجعله مستخدمًا داخليًا.
«تعذّرت قراءة الوحدات المثبتة: تبقى ميزات المطعم والولاء مخفية.»لم يستطع الجهاز قراءة قائمة الوحدات.أعد الاختبار؛ تحقّق من صلاحيات المستخدم.
«هذه المحطة تقبل مفاتيح API فقط: تسجيل الدخول بكلمة المرور معطل على هذا الخادم.»فُعّل POS_DISABLE_JSONRPC=1.استعمل مفتاح API.
«تعذّر الاتصال بـ {الخادم}.»الاسم أو المنفذ خطأ أو أودو متوقف.تحقّق من اسم المضيف والمنفذ ومن أن أودو يعمل.
«لا يستطيع هذا الجهاز الوصول إلى خادمه الخاص (التطبيق الذي يمرّر الطلبات إلى أودو). قد يكون أودو نفسه سليمًا.»التطبيق (Node.js) متوقف أو لا يُوصل إليه، وليست المشكلة في أودو.تحقّق من أن تطبيق الجهاز يعمل ويمكن الوصول إليه، ثم أعد الاختبار.
«أجاب الخادم على {العنوان} (HTTP عادي). استخدم HTTPS في بيئة التشغيل.»كتبت العنوان دون بروتوكول وردّ الخادم على HTTP.اكتب عنوان HTTPS في الإنتاج.

أثناء البيع

ما تراهالسببالحل
شريط أحمر: «أُغلقت هذه الجلسة على جهاز آخر. افتح جلسة جديدة.»أُغلقت الجلسة من أودو أو من جهاز آخر.اضغط افتح جلسة جديدة. الطلبات المنتظرة تذهب إلى الجلسة الجديدة.
شريط أحمر: «هذه الجلسة قيد الإغلاق: يجب أن يُكمل المدير إغلاقها في أودو.»بدأ الإغلاق وتعثّر في أودو.يُنهيه المدير في أودو (الفصل 20).
شريط أحمر: «رفض أودو تسجيل الدخول...»أُلغي مفتاح API أو تغيّرت كلمة المرور أو أُرشف المستخدم.اضغط أدخل بيانات دخول جديدة. الطلبات غير المرسلة تبقى.
الجهاز مقفل: «الجهاز مقفل. افتحه برمز PIN أولًا.»القفل اليدوي أو التلقائي.اكتب رمز PIN. إن نسيته فسجّل الخروج وأعد الإعداد؛ الطلبات غير المرسلة تبقى.
«الكتالوج غير جاهز» أو «منتجات نقطة البيع هذه وأسعارها غير موجودة على الجهاز بعد.»لم يكتمل التنزيل الأول.اتصل ثم اضغط تنزيل البيانات الآن (أو إعادة تنزيل البيانات).
«يتطلب هذا اتصالًا بأودو.»ميزة تحتاج إلى اتصال (إغلاق الجلسة، المخزون، استعمال نقاط الولاء).انتظر عودة الاتصال.
«تعذّر الوصول إلى أودو. يواصل الجهاز العمل دون اتصال.»أودو لا يستجيب.تحقّق من الشبكة ومن خادم أودو. الطلبات محفوظة.
«Node.js 20.9 or newer is required …» عند تشغيل التطبيق الجاهزإصدار Node.js أقدم من 20.9 أو غير مثبّت.ثبّت أحدث إصدار LTS من nodejs.org وافتح نافذة أوامر جديدة وتحقق بالأمر node -v.
«Port 3000 is already in use …»التطبيق يعمل أصلًا أو برنامج آخر يستخدم هذا المنفذ.أوقفه أو شغّل بمنفذ آخر: sh start.sh --port 3100.
جهاز آخر لا يستطيع فتح عنوان التطبيق الجاهز للتشغيلالتطبيق يستمع على هذا الحاسوب فقط (127.0.0.1) ما لم تطلب غير ذلك.شغّله بالخيار --host 0.0.0.0 خلف HTTPS (الفصل 4) واسمح بالمنفذ في جدار الحماية للحاسوب.
«لا يستجيب الخادم الخاص بهذا الجهاز. تبقى الطلبات على الجهاز وتُرسل لاحقًا.»تطبيق Node.js الذي يمرّر الطلبات متوقف أو لا يصله الجهاز.تحقّق من تشغيل التطبيق (الفصل 4). أودو قد يكون سليمًا.
«قد يحذف المتصفح بيانات الجهاز (ومعها الطلبات غير المرسلة)...»المتصفح لا يضمن الاحتفاظ بالبيانات.اضغط الاحتفاظ بالبيانات على هذا الجهاز في بطاقة التخزين، وثبّت التطبيق.
«المساحة شبه ممتلئة...»قرب امتلاء مساحة الجهاز.زامن الطلبات المنتظرة ووفّر مساحة على الجهاز.
نافذة الطباعة تظهر في كل مرةهكذا يعمل Chrome.شغّله بالخيار --kiosk-printing ليطبع صامتًا على الطابعة الافتراضية.
لا يظهر زر تثبيت التطبيقالصفحة ليست على HTTPS (ولا على localhost)، أو المتصفح لا يدعم.افتح عنوان HTTPS في Chrome أو Edge (الفصل 4).

طلبات لم تصل إلى أودو

تجدها في الطلبات ثم الأخطاء، وفي شاشة المزامنة. الرسالة تحت الطلب تقول السبب:

الرسالةالسببالحل
«ينقص مستخدم أودو على هذا الجهاز صلاحية (صلاحية ناقصة: ...)»مثل «المخزون / مستخدم» لمنتج متتبَّع بالدفعة أو الرقم التسلسلي، أو «المنتجات / الإنشاء» لقيمة نصية حرة.اطلب من مسؤول أودو منح الصلاحية ثم إعادة المحاولة.
«رفض أودو إنشاء العميل أو تعديله: ... جهات الاتصال / الإنشاء»المستخدم لا يملك صلاحية إنشاء العملاء.امنحه الصلاحية ثم إعادة المحاولة. الطلبات التي تنتظر هذا العميل تبقى على الجهاز.
«ينتظر هذا الطلب حتى يُنشأ العميل الجديد في أودو...»الطلب مرتبط بعميل لم يُنشأ في أودو بعد.لا شيء: يُرسل تلقائيًا بعد إنشائه.
«لا توجد جلسة مفتوحة في أودو لنقطة البيع هذه...»أُغلقت الجلسة أو تعثّر إغلاقها.افتح جلسة جديدة أو اطلب من المدير إكمال الإغلاق؛ يُرسل الطلب فور فتح جلسة.
«كانت هذه الطاولة مفتوحة على جهاز آخر: دمج أودو الطلبين في طلب الطاولة المفتوح...» (تعارض الدمج)جهازان فتحا الطاولة نفسها، فدمج أودو الطلبين.الطلبان محفوظان هنا ولم يُرسل شيء مرتين. افتح طلب الطاولة في أودو وقارنه بهذا الطلب المدفوع ثم احذف الطلب غير الصحيح.
«حفظ أودو الطلب كمدفوع لكنه لم يتمكن من التحقق من دفعه (اسمه '/')...»الإجماليات أو المدفوعات لا تتفق عند أودو (مثل وضع مالي بلا ربط ضريبي).لن يُرسل مجددًا: راجع مدفوعات هذا الطلب في أودو.
«رفض أودو هذا السجل. لن تفيد إعادة المحاولة قبل إصلاح السبب...»رفض بسبب بيانات.صدّر JSON للدعم، وأصلح السبب في أودو، ثم أعد المحاولة.
«لم يجتز الطلب فحص الأمان قبل الإرسال (الإجماليات أو المدفوعات غير متطابقة)...»فحص الجهاز الداخلي رفض الطلب قبل إرساله.يبقى الطلب على الجهاز: صدّر JSON للدعم.
«تعذّر الوصول إلى أودو حاليًا. يحتفظ الجهاز بالطلب ويعيد المحاولة تلقائيًا...»خطأ شبكة.لا شيء: يعيد الجهاز المحاولة بمهل متزايدة (الفصل 12).

التحديث والنسخ الاحتياطي

ببساطة: تحدّث الخادم بملفات الإصدار الجديد، وتأخذ أجهزة البيع الإصدار الجديد عندما تضغط تحديث. لا يعيد الجهاز تحميل نفسه في منتصف بيع.

تحديث الخادم

  1. احتفظ بنسخة من الملف .env ومن أي ملفات عدّلتها.
  2. التطبيق الجاهز للتشغيل: فُكّ ضغط الملف taqnix-pos-terminal-webapp.zip الجديد في مجلد جديد وانسخ ملف .env إليه، ثم أوقف الجهاز القديم وشغّل الجديد.
  3. من الشيفرة المصدرية: استبدل ملفات التطبيق بملفات الإصدار الجديد، ونفّذ الأمرين أدناه ثم أعد تشغيل التطبيق (أو أعد بناء صورة Docker).
npm ci && npm run build

تحديثات الإصدار 1.x مشمولة بالشراء.

على جهاز البيع

عند فتح التطبيق ينزّل الـ service worker الإصدار الجديد في الخلفية. عندما يكتمل تظهر رسالة «إصدار جديد من الجهاز جاهز.» وزرّان: تحديث ولاحقًا. اضغط تحديث في وقت هادئ: يحفظ الجهاز الطلب المفتوح ثم يعيد التحميل. ما دمت لم تضغط فالجهاز يستمر على الإصدار القديم ولا يعيد التحميل وحده. وللسؤال بنفسك: الإعدادات ثم حول ثم التحقق من وجود تحديث.

  • الطلبات التي لم تُرسل بعد تبقى في المتصفح عبر التحديثات.
  • قبل أن تمسح بيانات المتصفح أو تغيّر خادم أودو أرسل كل الطلبات: يرفض الجهاز الانتقال إلى خادم آخر ما دامت عليه طلبات غير مرسلة.
  • ملف الإعدادات (الإعدادات ثم ملف الإعدادات) ينقل إعدادات الجهاز إلى جهاز آخر أو يحفظها قبل مسح البيانات. لا يحوي اتصالًا ولا مفاتيح.

النسخ الاحتياطي

بيانات البيع في أودو: خذ نسخها الاحتياطية كما تفعل مع أودو. ما على الجهاز نسخة من بيانات أودو يمكن تنزيلها من جديد (إعادة تنزيل كل شيء)، فلا يحتاج إلى نسخة احتياطية. الشيء الوحيد الذي لا يوجد إلا على الجهاز هو الطلبات التي لم تصل إلى أودو بعد: شاشة المزامنة تقول لك عددها. أرسلها قبل أي عملية مسح.

الدعم

ببساطة: الدعم لتثبيت التطبيق وإصلاح الأخطاء يأتي عبر صفحة المنتج في السوق أو على support@taqnix.com. تحديثات الإصدار 1.x مشمولة بالشراء.

اكتب في رسالتك: إصدار أودو، والمتصفح ونظام التشغيل، ولقطة للشاشة، وملف تصدير التشخيص من شاشة المزامنة. ملف التشخيص لا يحتوي مفاتيح ولا كلمات مرور، ولا بنود الطلبات ولا العملاء.

الترخيص باختصار

النص الكامل في الملف licensing/license.txt.

البندما يعنيه
الاستعمالشراء واحد لشركة واحدة (الكيان القانوني الذي اشترى، بفروعه وعدد غير محدود من أجهزته). لك أن تثبّت الشيفرة المصدرية وتشغّلها وتعدّلها لعملك، على خادمك أو خادم مزوّد استضافة. المُركِّب ينشر للعميل فقط إن كان لكل شركة عميلة شراؤها.
التحديثاتالإصدار الذي اشتريته وكل تحديثات 1.x.
غير مسموحإعادة البيع، والترخيص من الباطن، ونشر الشيفرة المصدرية، وتقديم التطبيق (معدّلًا أو لا) خدمة مستضافة متعددة المستأجرين أو منتجًا منافسًا أو قالبًا.
أجزاء بتراخيص أخرىملفات محرك الضرائب والأسعار (src/lib/engine/) منقولة من أودو 19 وتبقى تحت LGPL-3.0؛ الخطان Inter وIBM Plex Sans Arabic برخصة SIL OFL 1.1؛ وحزم npm بتراخيصها (MIT وApache-2.0).
بلا ضمانيُقدَّم البرنامج كما هو. أنت مسؤول عن التأكد من أن الإيصالات والضرائب والتقارير توافق القوانين المطبّقة، وعن اختبار الجهاز على أودو الخاص بك قبل استعماله في المتجر.

أودو علامة تجارية لشركة Odoo S.A. وهذا المنتج لم تصنعه Odoo S.A. ولم تعتمده.