Skip to content

مواصفات المتطلبات البرمجية (SRS) — نظام إدارة المغسلة

معلومات الوثيقة

الحقل القيمة
المشروع نظام إدارة المغسلة
الإصدار 1.0
اللغة العربية
مجموعة التقنيات ASP.NET Core (الخلفية) + Angular + PrimeNG (الواجهة) + PostgreSQL (قاعدة البيانات)
نوع الوثيقة مواصفات المتطلبات الرئيسية

جدول المحتويات

  1. مقدمة ونطاق النظام
  2. مسرد المصطلحات
  3. معمارية النظام والتقنيات المستخدمة
  4. إدارة المستخدمين والصلاحيات
  5. إدارة الفروع (متصل وغير متصل)
  6. إدارة الزبائن
  7. تصنيفات الزبائن
  8. أنواع القطع والخدمات
  9. إدارة الأسعار
  10. دورة حياة فاتورة الغسيل
  11. إدارة الدفع
  12. الخصومات وتجاوزات الأسعار
  13. الضريبة
  14. تعدد العملات
  15. وحدة غسيل السجاد
  16. إدارة شركات غسيل السجاد
  17. وحدة الخياطة
  18. المخزون وبيع البضائع
  19. تتبع القطع بالباركود
  20. المرتجعات والاسترداد والتالف
  21. الفواتير الشهرية المجمعة للشركات
  22. إدارة ورديات الكاشير
  23. الإشعارات
  24. التقارير والتحليلات
  25. سجل التدقيق
  26. المتطلبات غير الوظيفية

1. مقدمة ونطاق النظام

1.1 الغرض

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

1.2 الوحدات المشمولة

الوحدة الوصف
إدارة المستخدمين والصلاحيات تحكم في الوصول حسب الدور (مدير، استقبال، محاسب)
إدارة الفروع معمارية متعددة الفروع مع وضعي الاتصال وغير المتصل
إدارة الزبائن زبائن مسجلون وعابرون مع تصنيفات
أنواع القطع والخدمات أنواع قابلة للتكوين من القطع والخدمات
التسعير قوائم أسعار مرنة لكل تصنيف وخدمة وقطعة
فواتير الغسيل دورة حياة كاملة من المسودة حتى التسليم مع تتبع القطع
الدفع طرق متعددة، جزئي، آجل، ومقدم
السجاد إيصال بدون سعر ← فاتورة نهائية بعد القياس
شركات السجاد إدارة الشركات الخارجية والمستحقات وكشوف الحساب
الخياطة إدارة الطلبات وتعيين العمال ومستحقاتهم
المخزون والمبيعات إدارة المخزون والمبيعات داخل أو خارج فاتورة الغسيل
التقارير والتحليلات تقارير تُحسب في الخلفية وتُعرض في الواجهة
الأستاذ العام والمحاسبة محاسبة على أساس الاستحقاق بقيد مزدوج
سجل التدقيق تسجيل كل عملية إنشاء وتعديل وحذف
الإشعارات طباعة الإيصالات وإشعارات SMS/WhatsApp
الضريبة إعداد قابل للتشغيل والتعطيل
تعدد العملات عملة واحدة حالياً، معماري قابل للتوسع

2. مسرد المصطلحات

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

3. معمارية النظام والتقنيات المستخدمة

3.1 ملخص التقنيات

الطبقة التقنية
الخلفية (Backend) ASP.NET Core 10 (C#)
الواجهة (Frontend) Angular 18+ مع مكتبة PrimeNG
قاعدة البيانات PostgreSQL 16+ (المركزي)، SQLite (الفروع غير المتصلة)
ORM Entity Framework Core مع موفر Npgsql
التقارير واجهات برمجية JSON من الخلفية (للحسابات) → عرض في الواجهة (طباعة، Excel، PDF)
المصادقة JWT Bearer Tokens
المهام الخلفية Quartz.NET
التسجيل Serilog
Excel في الواجهة SheetJS (xlsx)
PDF في الواجهة html2canvas + jspdf
الباركود jsbarcode / ngx-barcode (جهة العميل)
الترجمة @ngx-translate/core

3.2 مبادئ المعمارية

  1. محاسبة القيد المزدوج: كل حدث مالي يولّد مديناً ودائناً واحداً على الأقل في الأستاذ العام. لا تحديث مباشر للأرصدة.
  2. مفاتيح UUID رئيسية: جميع الجداول تستخدم UUID مولّدة من الخادم. هذا يمكن الدمج الآمن للفروع غير المتصلة.
  3. الخلفية تحسب والواجهة تعرض: جميع المجاميع المالية والأرصدة الجارية والضرائب تُحسب في الخلفية عبر SQL. الواجهة تستلم JSON نهائياً وتتولى العرض والطباعة والتصدير.
  4. فصل البيانات التشغيلية عن المحاسبية: جداول الأعمال (فواتير، إيصالات) منفصلة عن الجداول المالية (قيود اليومية، الأستاذ العام). قيود الأستاذ تولد من الأحداث التجارية عبر محرك القواعد.
  5. المعاملات الذرية: كل عملية تجارية تنفذ جميع الإدراجات المرتبطة ضمن معاملة قاعدة بيانات واحدة.

3.3 أنماط النشر

النمط الوصف
الخادم المركزي المتصل خادم سحابي أو محلي مع PostgreSQL. جميع الفروع المتصلة تتصل عبر REST API.
فرع متصل متصفح ويب يتصل بالخادم المركزي. بيانات لحظية.
فرع غير متصل خادم محلي (ASP.NET Core + SQLite) على جهاز الفرع. يعمل باستقلالية. يصدر حزمة بيانات للنسخ اليدوي إلى المركزي.
فرع هجين متصل أساساً، يخزن بيانات حديثة محلياً عبر Service Worker لحالات الانقطاع المؤقت.

4. إدارة المستخدمين والصلاحيات

4.1 أدوار النظام

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

4.2 قواعد الصلاحيات

  • كل نقطة API تتحقق من دور المستخدم قبل التنفيذ.
  • يمنع النظام أي مستخدم من تنفيذ عملية خارج صلاحياته.
  • الصلاحيات معرفة في وثيقة مصفوفة الصلاحيات المنفصلة.
  • يمكن لمدير النظام إنشاء أدوار مخصصة بصلاحيات دقيقة في المستقبل.

4.3 المصادقة

  • تسجيل الدخول باسم المستخدم وكلمة المرور.
  • رموز JWT مع مدة صلاحية قابلة للتكوين.
  • تشفير كلمات المرور باستخدام BCrypt.
  • جلسة عمل تنتهي تلقائياً بعد فترة خمول قابلة للتكوين.

5. إدارة الفروع (متصل وغير متصل)

5.1 تعريف الفرع

الحقل الوصف
معرف الفرع UUID، فريد عالمياً
كود الفرع رمز قصير فريد (مثلاً: "CAIRO-01")
اسم الفرع اسم العرض
الوضع متصل أو غير متصل
العملة العملة الافتراضية للفرع
السنة المالية ترث من الإعداد المركزي
الحالة نشط / غير نشط

5.2 سلوك الفرع المتصل

  • يتصل مباشرة بقاعدة البيانات المركزية PostgreSQL عبر REST API.
  • جميع البيانات لحظية.
  • يمكن للمدير رؤية بيانات مجمعة من جميع الفروع عبر النظام المركزي.

5.3 سلوك الفرع غير المتصل

  • يشغل خادم ASP.NET Core محلي مع قاعدة بيانات SQLite.
  • هيكل قاعدة البيانات مطابق هيكلياً للمركزي.
  • جميع المفاتيح الرئيسية هي UUID تُولد محلياً.
  • يعمل باستقلالية كاملة — ينشئ زبائن وفواتير ومدفوعات وإيصالات إلخ.
  • لا حاجة لاتصال إنترنت للعمليات اليومية.

5.4 عملية المزامنة للفروع غير المتصلة

  1. تصدير: مستخدم مفوض (مدير) في الفرع غير المتصل يضغط "تصدير حزمة بيانات". يصدر النظام جميع الصفوف بحالة sync_status = 'pending' إلى ملف JSON مضغوط.
  2. نقل: ينقل الملف يدوياً (USB، بريد إلكتروني) إلى الخادم المركزي.
  3. استيراد: المدير المركزي يضغط "استيراد بيانات فرع". النظام:
  4. يتحقق أن branch_id في الملف يطابق الفرع المصدر المتوقع.
  5. يتحقق أن SUM(debit) == SUM(credit) داخل حزمة المزامنة.
  6. يتحقق أن جميع قيم account_code موجودة في دليل الحسابات المركزي.
  7. يُدرج جميع الصفوف باستخدام UUID للتحديث أو الإدراج.
  8. يسجل الحزمة كـ synced.
  9. حل التعارضات: بما أن جميع المفاتيح UUID مولدة محلياً، لا يوجد تضارب في المعرفات. إذا وُجد زبون بنفس رقم الهاتف مركزياً، يُطلب من المدير إما ربطهما أو إبقاؤهما منفصلين.

5.5 عرض المدير المجمع

  • الفروع المتصلة: يسجل المدير دخوله للنظام المركزي ويرى بيانات حية من جميع الفروع.
  • الفروع غير المتصلة: بعد استيراد حزمة البيانات، يرى المدير بيانات مدمجة في جميع التقارير. كل صف موسوم بـ branch_id الأصلي.
  • كل تقرير يعرض بوضوح مصدر البيانات من أي فرع.

6. إدارة الزبائن

6.1 أنواع الزبائن

النوع الوصف الدفع الآجل مسموح
فرد زبون مسجل عادي حسب تقدير المدير
فرد مميز (VIP) زبون مميز نعم
شركة عميل شركات نعم
فندق عميل فنادق نعم
عابر زبون غير مسجل لا — يجب الدفع كاملاً

6.2 بيانات الزبون

الحقل مطلوب ملاحظات
معرف الزبون تلقائي UUID
الاسم الكامل نعم
رقم الهاتف نعم فريد للزبائن المسجلين
التصنيف نعم مرتبط بتصنيف
ملاحظات لا نص حر
تاريخ التسجيل تلقائي
معرف الفرع تلقائي الفرع الذي أنشأ الزبون
حد الائتمان لا للمدفوعات الآجلة
الحالة تلقائي نشط / غير نشط

6.3 قواعد الزبون العابر

  • يدعم النظام إنشاء فواتير لزبائن غير مسجلين.
  • الزبون العابر يحتاج كحد أدنى اسماً (يمكن أن يكون "---") واختيارياً رقم هاتف.
  • لا يمكن للزبون العابر استخدام الدفع الآجل.
  • يجب دفع فواتير الزبون العابر كاملة (نقداً أو بطاقة) قبل أو عند التسليم.

6.4 رصيد الزبون الدائن

  • يتتبع النظام رصيداً دائناً لكل زبون.
  • ينشأ الرصيد الدائن من:
  • عربون سجاد يزيد عن قيمة الفاتورة النهائية.
  • استرداد مبالغ لقطع مرتجعة أو تالفة كرصيد.
  • تعديلات يدوية (مدير النظام فقط).
  • يمكن استخدام الرصيد الدائن في فواتير مستقبلية.
  • يمكن استرداد الرصيد الدائن نقداً (مدير النظام فقط).

6.5 تعديل بيانات الزبون

  • يسمح بتعديل الاسم ورقم الهاتف والتصنيف والملاحظات.
  • تغيير تصنيف الزبون لا يؤثر بأثر رجعي على الفواتير السابقة (الفواتير مجمدة).

7. تصنيفات الزبائن

7.1 تعريف التصنيف

الحقل الوصف
معرف التصنيف UUID
الاسم مثلاً: "VIP"، "فندق"، "شركة"، "عادي"
قائمة الأسعار الافتراضية قائمة الأسعار المطبقة على زبائن هذا التصنيف
نسبة الخصم الافتراضية نسبة خصم تلقائية (اختياري)
السماح بالدفع الآجل نعم / لا
التصنيف الافتراضي إشارة لتحديد التصنيف الافتراضي للزبائن الجدد

7.2 قواعد التصنيف

  • يدعم النظام تعريف تصنيفات متعددة.
  • كل زبون مرتبط بتصنيف واحد فقط.
  • يحدد التصنيف:
  • قائمة الأسعار المطبقة.
  • إمكانية الدفع الآجل.
  • نسبة الخصم الافتراضية.

8. أنواع القطع والخدمات

8.1 أنواع القطع

الحقل الوصف
معرف القطعة UUID
الكود رمز قصير (مثلاً: "SHIRT"، "TROUS")
الاسم (EN) مثلاً: "Shirt"
الاسم (AR) مثلاً: "قميص"
الفئة ملابس / سجاد / أخرى
الحالة نشط / غير نشط

أمثلة: قميص، بنطال، جاكيت، فستان، بطانية، ستارة، مفرش طاولة.

8.2 أنواع الخدمات

الحقل الوصف
معرف الخدمة UUID
الكود رمز قصير (مثلاً: "WASH"، "IRON")
الاسم (EN) مثلاً: "Wash"
الاسم (AR) مثلاً: "غسيل"
الحالة نشط / غير نشط

أمثلة: غسيل، كي، غسيل وكي، تنظيف جاف، إزالة بقع.

8.3 قواعد الربط

  • كل نوع قطعة يمكن ربطه بنوع خدمة واحد أو أكثر.
  • داخل الفاتورة، كل سطر يحدد: نوع القطعة + نوع الخدمة + الكمية + سعر الوحدة.
  • يمكن ظهور نفس نوع القطعة عدة مرات في الفاتورة مع خدمات مختلفة (مثلاً: 2 قميص غسيل، 1 قميص كي).

9. إدارة الأسعار

9.1 هيكل قائمة الأسعار

الحقل الوصف
معرف قائمة الأسعار UUID
نوع القطعة مرجع لنوع القطعة
نوع الخدمة مرجع لنوع الخدمة
السعر الأساسي سعر البيع الافتراضي
تاريخ السريان تاريخ تفعيل السعر
تاريخ الانتهاء تاريخ انتهاء اختياري
العملة مرجع للعملة

9.2 قواعد الأسعار المرنة

  • يدعم النظام عدة قوائم أسعار نشطة في وقت واحد.
  • كل تصنيف زبون يُسند إليه قائمة أسعار افتراضية واحدة.
  • عند إنشاء فاتورة، يختار النظام السعر تلقائياً من: تصنيف الزبون ← قائمة الأسعار ← القطعة + الخدمة.
  • يمكن لموظف الاستقبال تجاوز السعر على أي سطر فاتورة، بشرط إدخال سبب إجباري.
  • بمجرد تأكيد الفاتورة، تُجمد أسعارها — تغيير قائمة الأسعار لاحقاً لا يؤثر على الفواتير التاريخية.

9.3 تعديل الأسعار

  • يمكن للمدير إنشاء قوائم أسعار جديدة أو تعديل القائم منها.
  • تغييرات قائمة الأسعار تسري على الفواتير الجديدة فقط.
  • يحتفظ النظام بسجل تاريخي لتغييرات الأسعار.

10. دورة حياة فاتورة الغسيل

10.1 حالات الفاتورة

يستخدم النظام حقلين مستقلين للحالة في كل فاتورة:

الحالة التشغيلية (الحالة الفعلية):

الحالة الوصف
مسودة فاتورة قيد التجهيز. غير مؤكدة بعد. يمكن إضافة/إزالة قطع.
مؤكدة فاتورة مثبتة. القطع موسومة بالباركود. جاهزة للمعالجة.
قيد التنفيذ القطع قيد الغسيل/المعالجة.
جاهزة جميع القطع جاهزة لاستلام الزبون. يُرسل إشعار.
مُسلّمة استلم الزبون جميع القطع. يُعترف بالإيراد.

الحالة المالية (حالة الدفع):

الحالة الوصف
غير مدفوع لم يُسجل أي دفع.
مدفوع جزئياً سُجل دفع جزئي، وليس كامل المبلغ.
مدفوع استُلم كامل المبلغ.
آجل الدفع مجدول لتاريخ لاحق (للزبائن المسجلين فقط).

10.2 حقول الفاتورة

الحقل الوصف
معرف الفاتورة UUID
رقم الفاتورة رقم تسلسلي تلقائي، فريد لكل فرع
معرف الزبون مرجع للزبون (أو null للعابر)
معرف الفرع الفرع الذي أنشأ الفاتورة
التاريخ تاريخ الإنشاء
تاريخ الاستحقاق للمدفوعات الآجلة
البنود قائمة أسطر الفاتورة
المجموع الفرعي مجموع الأسطر قبل الخصومات
قيمة الخصم إجمالي الخصم المطبق
قيمة الضريبة ضريبة القيمة المضافة (إن فعلت)
الإجمالي الكلي المبلغ النهائي المستحق
المبلغ المدفوع مجموع كل المدفوعات على الفاتورة
المبلغ المتبقي الإجمالي الكلي - المدفوع
الحالة التشغيلية انظر للحالات أعلاه
الحالة المالية انظر للحالات أعلاه
ملاحظات نص حر
أنشئت بواسطة المستخدم الذي أنشأ الفاتورة

10.3 حقول سطر الفاتورة

الحقل الوصف
معرف السطر UUID
معرف الفاتورة الفاتورة الأم
نوع القطعة مرجع
نوع الخدمة مرجع
الكمية عدد القطع
سعر الوحدة السعر للقطعة للخدمة
إجمالي السطر الكمية × سعر الوحدة
الخياط المعين فقط لخدمات الخياطة
تكلفة الخياط تكلفة عامل الخياطة
البطاقات قائمة معرفات بطاقات الباركود المرفقة

10.4 ترقيم الفواتير

  • يجب أن يكون رقم الفاتورة فريداً لكل فرع.
  • الترقيم تسلسلي داخل كل فرع.
  • الصيغة: INV-{كود_الفرع}-{السنة}-{رقم_تسلسلي}.
  • لا يمكن إعادة استخدام رقم الفاتورة بعد تخصيصه.

10.5 البحث عن الفواتير

يدعم النظام البحث عن الفواتير حسب: - اسم الزبون - رقم هاتف الزبون - رقم الفاتورة - الفترة الزمنية - الحالة التشغيلية - الحالة المالية - الفرع


11. إدارة الدفع

11.1 توقيت الدفع

التوقيت الوصف
عند الاستلام يدفع الزبون عند تسليم الملابس للمغسلة
عند التسليم يدفع الزبون عند استلام الملابس
آجل الدفع مجدول لتاريخ لاحق (للزبائن المسجلين المصرح لهم فقط)

11.2 طرق الدفع

الطريقة الوصف
نقداً عملة ورقية
بطاقة بطاقة ائتمان/خصم
حوالة بنكية إيداع مباشر
رصيد الزبون يطبق من الرصيد الدائن الموجود
أخرى طرق إضافية قابلة للتكوين

11.3 الدفع المتعدد

  • يمكن دفع الفاتورة الواحدة باستخدام أكثر من طريقة دفع.
  • مثال: 200 جنيه نقداً + 150 جنيه بطاقة لفاتورة بقيمة 350.

11.4 الدفع الجزئي

  • يدعم النظام الدفع الجزئي.
  • بعد كل دفعة، يُحدث النظام: المبلغ المدفوع والمبلغ المتبقي والحالة المالية.

12. الخصومات وتجاوزات الأسعار

12.1 أنواع الخصومات

النوع الوصف تلقائي/يدوي
خصم التصنيف يطبق تلقائياً حسب تصنيف الزبون (مثلاً VIP = 10%) تلقائي
خصم الدفع المقدم خصم يُمنح عند الدفع المسبق اختياري
خصم يدوي يطبقه موظف الاستقبال على الفاتورة يدوي، مع سبب
خصم سطر خصم على سطر فاتورة محدد يدوي، مع سبب

12.2 صيغ الخصم

  • يمكن تطبيق الخصم كنسبة مئوية أو كمبلغ ثابت.
  • يُحتسب الخصم ضمن إجمالي الفاتورة.

12.3 قواعد تجاوز السعر

  • يمكن تجاوز سعر الوحدة على أي سطر فاتورة.
  • كل خصم يدوي وتجاوز سعر يجب أن يتضمن نص سبب.
  • يُخزن السبب في سجل التدقيق.
  • يمكن للمدير مراجعة جميع التجاوزات في تقرير مخصص.

13. الضريبة

13.1 التكوين

  • الضريبة إعداد اختياري يمكن تشغيله وتعطيله.
  • يمكن للمدير تشغيل أو تعطيل الضريبة من إعدادات النظام.
  • عند التعطيل، تُخفى حقول الضريبة من الواجهة ولا تُحسب.

13.2 إعدادات الضريبة (عند التفعيل)

الإعداد الوصف
اسم الضريبة مثلاً: "ضريبة القيمة المضافة"
نسبة الضريبة مثلاً: 15%
الضريبة شاملة هل الأسعار تشمل الضريبة أم تضاف فوقها
حساب الضريبة كود حساب الأستاذ العام للضريبة

14. تعدد العملات

14.1 الوضع الحالي

  • يعمل النظام حالياً بعملة واحدة.
  • لكن نموذج البيانات يُصمم لدعم التوسع المستقبلي لتعدد العملات.

14.2 معمارية تعدد العملات

قاعدة التصميم التنفيذ
جدول العملات تعريف جدول currencies بالكود والاسم والرمز والمنازل العشرية
كل عمود نقدي جميع الأعمدة المالية تخزن المبلغ + currency_id
أسعار الصرف جدول currency_rates يخزن الأسعار عبر الزمن
العملة الافتراضية لكل فرع عملة افتراضية. يمكن عرض أي عملة.
معاملات بعملة أجنبية يسجل النظام المبلغ الأجنبي والمبلغ المحول للعملة الأساسية

15. وحدة غسيل السجاد

15.1 إيصال استلام السجاد (بدون سعر أو مساحة)

الحقل الوصف
معرف الإيصال UUID
رقم الإيصال تسلسلي تلقائي
الزبون مرجع للزبون
معرف الفرع الفرع
التاريخ تاريخ الاستلام
البنود قائمة قطع السجاد
مبلغ العربون اختياري
طريقة دفع العربون
ملاحظات نص حر
الحالة مستلم ← مع الشركة ← مرتجع ← جاهز ← مسلّم

حقول قطعة السجاد:

الحقل الوصف
نوع السجاد مثلاً: "سجاد إيراني"، "موكيت"، "سجاد صوف"
الكمية عدد القطع
الحجم التقديري تقدير تقريبي (اختياري)
ملاحظات / تلفيات وصف التلفيات الموجودة

15.2 استراتيجيات تسعير السجاد

الاستراتيجية الحساب متى تستخدم
للمتر المربع السعر النهائي = المساحة الفعلية (م²) × سعر البيع للمتر السجاد الكبير
للقطعة (سعر ثابت) السعر النهائي = عدد القطع × سعر ثابت للقطعة السجاد الصغير
هامش ربح على التكلفة السعر النهائي = تكلفة الشركة × (1 + نسبة هامش الربح) ضمان الربح

15.3 معالجة العربون

  • يُخصم العربون تلقائياً من الفاتورة النهائية.
  • إذا كان العربون > قيمة الفاتورة: الفائض يصبح رصيداً دائناً للزبون.
  • إذا كان العربون < قيمة الفاتورة: يدفع الزبون المبلغ المتبقي.

16. إدارة شركات غسيل السجاد

16.1 نماذج التسوية (قابلة للتكوين لكل شركة)

النموذج السلوك المحاسبي
مستحقات (Accrual) عند ارتجاع السجاد من الشركة: مدين مصروف غسيل سجاد، دائن ذمم دائنة - شركة س. عند الدفع: مدين ذمم دائنة، دائن نقدية.
نقدي (Cash) يسجل المصروف فقط عند الدفع.
مقدم (Prepayment) عند دفع العربون للشركة: مدين مصروف مدفوع مقدماً، دائن نقدية. عند الارتجاع: مدين مصروف غسيل سجاد، دائن مصروف مدفوع مقدماً.

16.2 متابعة الشركات

  • تتبع الأعمال المسندة لكل شركة.
  • تتبع المستحقات المالية لكل شركة.
  • تسجيل الدفعات للشركات.
  • توفير كشف حساب لكل شركة.

17. وحدة الخياطة

17.1 نماذج دفع الخياطين (قابلة للتكوين لكل عامل)

النموذج السلوك المحاسبي
دوري (Periodic) عند اكتمال المهمة: مدين تكلفة خياطة، دائن مستحقات خياط - العامل س. يُسدد أسبوعياً/شهرياً.
بالقطعة (Per-Item) عند اكتمال المهمة: مدين تكلفة خياطة، دائن مستحقات خياط - العامل س. يمكن التسديد فوراً أو لاحقاً.
راتب + عمولة راتب شهري ثابت (مدين رواتب، دائن مستحقات خياط). المهام فوق الحصة تولد عمولة: مدين مكافأة خياطة، دائن مستحقات خياط.

17.2 متابعة الخياطين

  • تتبع المبلغ المكتسب لكل عامل.
  • تتبع المبلغ المدفوع لكل عامل.
  • عرض الرصيد المتبقي لكل عامل.
  • تسجيل دفعات الخياطين.
  • توفير كشف حساب لكل عامل.

18. المخزون وبيع البضائع

18.1 تعريف الصنف

الحقل الوصف
معرف الصنف UUID
الكود رمز قصير
الاسم (EN/AR) مثلاً: "معطر أقمشة"
الفئة معطرات، منظفات، إكسسوارات
وحدة القياس قطعة، علبة، لتر، زجاجة
سعر البيع
سعر التكلفة
الكمية الحالية تُدار تلقائياً
حد إعادة الطلب تنبيه عند النزول دونه

18.2 إدارة المخزون

  • الخصم التلقائي من المخزون عند البيع.
  • الإرجاع التلقائي للمخزون عند إلغاء فاتورة.
  • تسجيل استلام بضاعة لزيادة المخزون.

18.3 قنوات البيع

  • بيع الأصناف ضمن فاتورة الغسيل.
  • بيع الأصناف عبر فاتورة بيع مستقلة.

19. تتبع القطع بالباركود

  • كل قطعة ملابس تُستلم تُمنح بطاقة باركود فريدة يولدها النظام.
  • يولد الباركود عند تأكيد الفاتورة.
  • يُطبع الباركود ويُلصق بالقطعة.
  • يُمسح الباركود عند الجاهزية للتأكد من اكتمال العدد وعند التسليم.
  • يدعم المسح عبر ماسح ضوئي USB أو كاميرا (QR).

20. المرتجعات والاسترداد والتالف

20.1 إلغاء الفاتورة

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

20.2 الاسترداد (Refund)

  • للفواتير المدفوعة، يُنشأ "مستند استرداد" بدلاً من الإلغاء.
  • يحدد: البنود المستردة، المبلغ، طريقة الاسترداد، السبب.

20.3 التالف والمفقود

  • يمكن وضع علامة "تالف" أو "مفقود" على أي سطر فاتورة.
  • تُسجل قيمة تعويض.
  • يُنشئ قيد محاسبي: مدين مصروف تالف/مفقود، دائن رصيد الزبون أو نقدية.
  • يُنشأ تقرير تالف للمراجعة الإدارية.

21. الفواتير الشهرية المجمعة للشركات

  • لزبائن الشركات والفنادق: دعم كشف حساب شهري مجمع.
  • يجمع جميع الفواتير المسلمة وغير المدفوعة في الشهر.
  • يمكن تسجيل دفعة على الكشف وتوزيعها على الفواتير الفردية.

22. إدارة ورديات الكاشير

  • فتح وردية: تسجيل رصيد افتتاحي.
  • أثناء الوردية: جميع التعاملات النقدية تُسجل على الوردية.
  • إغلاق وردية: إدخال النقدية الفعلية، مقارنتها بالمتوقعة، تسجيل الفروقات.
  • تقرير وردية يشمل جميع فواتير ومبيعات ومردودات الوردية.

23. الإشعارات

  • طباعة الإيصالات عبر المتصفح (window.print()).
  • إشعار SMS/WhatsApp عند تغير الحالة إلى "جاهز للتسليم" (اختياري، قابل للتكوين).

24. التقارير والتحليلات

24.1 معمارية التقارير

  • الخلفية: الحسابات والتجميعات والأرصدة الجارية عبر SQL. تُرجع JSON عبر APIs.
  • الواجهة: تستلم JSON وتعرض الجداول والرسوم البيانية وتدير الطباعة (المتصفح) والتصدير لـ Excel (SheetJS) وPDF (html2canvas + jspdf).
  • قاعدة ذهبية: الواجهة لا تحسب أي مبالغ مالية. الأرصدة والمجاميع تأتي محسوبة من الخلفية.

24.2 التقارير الإلزامية

التقرير الوصف
ملخص المبيعات اليومي إجمالي الإيرادات، نقدي، بطاقة، آجل، خصومات
تقرير إغلاق الوردية رصيد افتتاحي، مبيعات، مردودات، فروقات
كشف حساب زبون رصيد جارٍ لزبون مع كل الفواتير والمدفوعات
الأستاذ العام كامل الأستاذ مع رصيد افتتاحي ومدين ودائن ورصيد ختامي
ميزان المراجعة ملخص أرصدة جميع الحسابات للتحقق من توازن المدين والدائن
قائمة الدخل (أرباح وخسائر) الإيرادات - المصروفات = صافي الربح
الميزانية العمومية الأصول = الخصوم + حقوق الملكية
تقرير أعمال ومستحقات الخياطين القطع المنجزة، المكتسب، المدفوع، المتبقي
مستحقات شركات السجاد المبالغ المستحقة لكل شركة خارجية
كشف حساب شركة سجل تعاملات ورصيد حالي لكل شركة
مستويات المخزون الكميات الحالية، تنبيهات إعادة الطلب
أكثر الخدمات مبيعاً ترتيب الخدمات حسب الإيراد أو الكمية
التقرير الشهري للشركات كشف مجمع للفنادق والشركات
تقرير التالف والمفقود جميع القطع المعلمة تالف/مفقود مع التعويضات
تقرير الخصومات وتجاوزات الأسعار جميع التجاوزات اليدوية مع الأسباب
مقارنة أداء الفروع إيرادات وتكاليف وأرباح كل فرع جنباً لجنب
سجل التدقيق سجل العمليات: إنشاء، تعديل، حذف

25. سجل التدقيق

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

26. المتطلبات غير الوظيفية

المتطلب التفصيل
قاعدة البيانات PostgreSQL للمركزي. SQLite للفروع غير المتصلة.
ACID جميع المعاملات المالية متوافقة مع ACID.
مفاتيح UUID جميع المفاتيح الرئيسية UUID.
دقة عشرية جميع القيم المالية تستخدم NUMERIC(18,4). ممنوع استخدام الفاصلة العائمة.
الأداء إنشاء فاتورة أقل من ثانيتين. تقارير سنة كاملة أقل من 5 ثوانٍ (مع ترقيم صفحات).
المستخدمون المتزامنون دعم 5 مستخدمين متزامنين على الأقل لكل فرع متصل.
الأمان كلمات مرور مشفرة بـ BCrypt. رموز JWT. الصلاحيات تفحص عند كل API.
موثوقية الفروع غير المتصلة العمل بدون إنترنت حتى 30 يوماً. بقاء البيانات سليمة بعد الدمج.
التعريب والترجمة واجهة عربية وإنجليزية. تبديل اللغة وقت التشغيل.
المتصفحات أحدث إصدارات Chrome وFirefox.
النسخ الاحتياطي يومي للمركزي. قبل وبعد المزامنة للفروع غير المتصلة.
الاحتفاظ بالبيانات الفواتير وقيود الأستاذ تحفظ للأبد (أو سياسة أرشفة قابلة للتكوين).
معالجة الأخطاء جميع أخطاء API تُرجع JSON منظم مع كود خطأ ورسالة.
التسجيل جميع الأخطاء وعمليات الأستاذ والمدفوعات والمزامنة تسجل عبر Serilog.

سجل المراجعة

التاريخ الإصدار المعد التغييرات
2026-05-10 1.0 محلل النظم الإصدار الأولي لمواصفات المتطلبات الرئيسية