ذمم الموردين

إصدار المنتج: 1.0.0+1
آخر تحديث: 2026-11-02
الجمهور المستهدف: مالكو المؤسسات ومشغلو المخزون والمالية وموفرو التكامل


تصف هذه الصفحة سلوك ذمم الموردين الموجود حاليا في مساحة العمل. إنها سير عمل محدود لذمم الموردين مع انتقالات محاسبية وإسقاط استحقاق إيصالات ونموذج قراءة؛ وليست ادعاء باكتمال تسوية الذمم أو المصالحة.

إيصالات الشراء

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

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

تقبل المالية لقطة غير متكررة لسطر الإيصال باعتبارها إسقاط استحقاق معلق بلا قيد. تحمل اللقطة الكمية المستلمة والمرتجعة والمبلغ التجاري وإصدار/تسلسل المصدر والمورد والعملة. يرفض التعارض في بيانات المصدر غير القابلة للتغيير. الاستحقاق المعلق إسقاط وليس التزاما مرحلا أو قيدا محاسبيا. تعرض المالية مسار قراءة tenant-scoped لحالة استحقاق الإيصال، بما في ذلك حالة كل سطر: معلق أو مرحل أو فاشل أو معكوس، ومؤشر محدود لإمكانية إعادة المحاولة. تسليم الإيصال إلى المالية ليس معاملة موزعة؛ فمطالبة الـ inbox وسجل الفشل دائمين. ويشغل Finance عاملا محدودا يطالب دوريا بصفوف إسقاط الإيصالات الفاشلة أو المتوقفة ويعيد تشغيل حدث الإيصال المخزن من Inventory فقط؛ ولا ينشئ دفعة ولا تحويلا ماليا. وتوفر المالية تغذية مصالحة داخلية محمية برمز خدمة تقارن watermark حركات المخزون الملتزم بها مع inbox المالية، وتعرض الحالة جاهزة أو معلقة أو متأخرة أو فاشلة دون كشف payload أو تعديل محاسبي.

مسودات فاتورة المورد والدفع

استخدام صفحة مستحقات الموردين

افتح المالية ← مستحقات الموردين (/finance/payables) لمراجعة فواتير الموردين والدفعات وحالتها الحالية. - الإنشاء والترحيل التلقائي لفاتورة المورد من طلب التوريد: عند إكمال/قبول طلب توريد في المخزون (RequisitionAcceptedEvent)، تقوم خدمة المالية (handle_requisition_accepted ← EnsureRequisitionPayableUseCase) تلقائيا بإنشاء واعتماد وترحيل فاتورة المورد المقابلة (status="posted") برقم فاتورة يطابق رقم طلب التوريد (REQ-...) ومرتبطة عبر requisition_id وrequisition_number. كما تزامن واجهة الاستخدام طلبات التوريد المقبولة بشكل آمن ضد التكرار عبر POST /api/finance/v1/tenants/{tenant_id}/payables/sync-requisition. - مسودات فواتير الموردين اليدوية: استخدم إنشاء مسودة فاتورة مورد (/finance/payables/bills/new، المسار POST /api/finance/v1/tenants/{tenant_id}/supplier-bills/drafts) فقط لفواتير الموردين اليدوية/المستقلة التي لا تنشأ من طلب توريد مخزني (لا يوجد محدد لطلب التوريد في نموذج الفاتورة اليدوية). - الدفع وجدولة الأقساط الموحدة في خطوة واحدة: من صفحة تفاصيل مستحق المورد (/finance/payables/:id)، يمكن للمستخدمين سداد فاتورة المورد أو جدولتها في خطوة واحدة عبر بطاقة الدفع أو تجزئة الدفعة (أقساط) الموحدة (POST /api/finance/v1/tenants/{tenant_id}/payables/{document_id}/pay، عبر PayOrScheduleSupplierBillUseCase): - دفع كامل المبلغ: يعتمد ويرحل الفاتورة تلقائيا عند الحاجة، ويسجل الدفعة الخارجية على حساب النقد/البنك المختار (1000/1010)، ويخصص كامل المبلغ للفاتورة. - تجزئة الدفعة (أقساط): يتيح دفع مبلغ فوري اختياري الآن (0 أو دفعة جزئية) وجدولة الرصيد المتبقي على دفعات وأقساط مخصصة بمبالغ وتواريخ استحقاق محددة (تحفظ installments داخل supplier_snapshot على الفاتورة وتعرض في جدول جدول الأقساط داخل صفحة التفاصيل). - إزالة شاشة مسودة دفعة المورد المستقلة من الواجهة: أزيلت شاشة «إنشاء مسودة دفعة مورد» المستقلة (/finance/payables/payments/new) من واجهة الاستخدام لمنع الالتباس؛ وتدار جميع مدفوعات فواتير الموردين وجداول الأقساط مباشرة من صفحة تفاصيل مستحق المورد (/finance/payables/:id). (يبقى المسار الخلفي /supplier-payments/drafts متاحا للتوافق البرمجي الداخلي.)

يوفر شريط أدوات مساحة العمل مرشحات لنوع المستند وحالته، واختصارا لصفحة الإعدادات (/finance/payables/settings)، وضوابط المحاسبة المتقدمة (/finance/payables/control)، وقائمة التقارير التي تجمع: - أعمار ذمم الموردين (/finance/payables/aging) - كشف حساب المورد (/finance/payables/statement) - حالة محاسبة الاستلامات (GRNI) (/finance/payables/grni) - سجل دفعات الموردين (/finance/payables/payments)

تستخدم جميع حقول التاريخ في تقارير مستحقات الموردين (الأعمار، كشف حساب المورد، GRNI، سجل الدفعات) وشاشات التحكم منتقيات تاريخ تفاعلية (AppDateField) مع اختصارات سريعة (30 يوما، هذا الشهر، هذه السنة). وتوفر شاشة ضوابط المحاسبة المتقدمة (/finance/payables/control) قوائم منسدلة قابلة للبحث للحسابات، وقوائم منسدلة للعملات، ومنتقيات تاريخ ووقت لقطع التحويل، ورقائق تصفية متعددة الاختيار لعلامات جاهزية المخزون والمالية. وسع أي بطاقة سجل في القائمة أو افتح شاشة تفاصيل المستند الكاملة (/finance/payables/:id) لمراجعة البيانات المحاسبية وجدول الأقساط والتخصيصات المؤهلة وتنفيذ الإجراءات المتاحة حسب الصلاحية. تأتي المبالغ من البيانات المحاسبية، وتظهر رسالة واضحة عند عدم توفر المعلومات المطلوبة.

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

يلتقط عقد فاتورة المورد مسودة تتضمن مرجع فاتورة مطبعا، ولقطة المورد، ولقطات الصنف/التكلفة، وكميات وقيم البنود، ومعالجة الضريبة، والإجماليات، والعملة، وتاريخ الفاتورة، وتاريخ الاستحقاق الاختياري، وسبب تعليق اختياري. تبقى الفاتورة المعلقة معلقة حتى يقرر سير عمل لاحق خلاف ذلك. لا ينشئ الالتقاط مطابقة إيصال ولا يرحل قيد فاتورة.

يلتقط عقد دفع المورد مسودة غير قابلة للتغيير تتضمن لقطتي المورد والمستلم، وطريقة الدفع، ومرجع دفتر النقد، والعملة، والمبلغ، وتاريخ الدفع. الطرق المدعومة هي cash وcard وtransfer وother. سير العمل هو draft → submitted → approved → recorded؛ وكل انتقال محكوم بصلاحية ومقيد بالإصدار ومفتاح idempotency، ولا تتقدم الدفعة المعلقة. لا يغير إنشاء المسودة أو تقديمها أو اعتمادها النقد ولا يرحل قيدا؛ التسجيل انتقال صريح منفصل.

توفر المالية قراءة قائمة وقراءة مفردة مرتبطتين بالمستأجر. تعيدان حقول المستند المحفوظة، وتعيدان allocated_amount وoutstanding_amount المحسوبين من حقائق التخصيص المرتبطة بالمستأجر فقط عندما تتوفر كل الحقائق المطلوبة. تتضمن صفوف التخصيص الحالية معرفات الإجراءات فقط عندما تكون حقائق المصدر والهدف والمورد والعملة والمبلغ موثوقة كاملة؛ وعلى العميل إخفاء إجراءات الإزالة أو إعادة التخصيص عندما تكون field_availability.allocations بقيمة false. يحدد الحقل field_availability الحقول الموثوقة؛ ولا يجوز للعميل حساب الرصيد من gross_amount عندما تكون قيمة الحقل غير متاحة.

وتوفر المالية أيضا المسار GET /api/finance/v1/tenants/{tenant_id}/suppliers/{supplier_id}/statement مع معاملات الاستعلام currency وfrom_date وto_date وas_of الاختياري. يعيد المسار كشف نشاط موقعا ومكتملا ضمن نطاق المؤسسة، مبنيا من مستندات AP المحفوظة: تزيد فواتير الموردين المرحلة الرصيد الموقع، بينما تنقصه المدفوعات الخارجية المسجلة والأرصدة الدائنة والسلف والاستردادات. لا تعرض المسودة أو المقدم أو المعتمد أو الملغى أو المعكوس أو المختلف العملة كنشاط موثوق، ويغلق المسار بأمان عند اقتطاع المصدر. المسار للقراءة فقط ولا يحسب دفعة ولا يغير النقد ولا يستدعي مزودا ولا يحول أموالا.

وتوفر المالية أيضا المسار GET /api/finance/v1/tenants/{tenant_id}/payables/aging مع currency وdate_from وdate_to وas_of الاختياري. يعيد فقط فواتير الموردين المرحلة ذات الرصيد الموجب المحسوب من حقائق التخصيص، مع شرائح التأخر المحسوبة من الخادم. المصدر محدود وكامل؛ ويعيد المسار تعارضا عند اقتطاع المستندات أو غياب حقيقة تخصيص، ولا يخمن الإجمالي. المسار للقراءة فقط ولا ينشئ دفعا ولا يمثل تحويلا للمورد.

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

يوفر المسار للقراءة فقط GET /api/finance/v1/tenants/{tenant_id}/payables/payments سجلا لمستندات الدفع ذات الحالة recorded فقط ضمن العملة والفترة المحددتين. يعرض طريقة الدفع التي أدخلها المستخدم (cash أو card أو transfer أو other)، ومعرف دفتر النقد/البنك الذي استخدم في القيد الداخلي، ومرجع الدفع المدخل من المستخدم، والتخصيص مقابل السلفة، والرسم، ومعرف القيد. هذا سجل محاسبي وليس سجل تنفيذ تحويل: تبقى external_payment_confirmed صريحة، وتبقى provider_transfer وsupplier_transfer بقيمة not_supported. عند غياب subtype الدفع أو حقائق التخصيص يفشل المسار بأمان.

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

مهم: يتطلب التسجيل جسم طلب صريحا يتضمن external_payment_confirmed: true. تعني حالة recorded أن مستأجر النظام أكد أن المبلغ دفع خارج SanadiqCloud. التطبيق لا يرسل الأموال، ولا يتصل بالبنك أو مزود البطاقة، ولا ينفذ تحويلا بين المورد ومالك المؤسسة، ولا يعرض فشل تحويل فعلي. مرجع التحويل/الدفع الذي يدخله المستخدم دليل مقدم من المستخدم وليس نتيجة تنفيذ من النظام. بعد نجاح التحقق، تسجل المالية الدفعة وتجهز قيد ذمم-إلى-نقد/بنك متوازنا من نوع supplier_payment_recorded، مع رسم منفصل عند وجوده؛ لكنها لا تنفذ الدفع الخارجي.

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

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

  • تتطلب مطابقة الإيصال المؤسسة والمورد والعملة نفسها؛ ويجب أن يكون الاستحقاق مرحلا ومؤهلا؛ وتبقى الكمية والقيمة ضمن سعة سطر الفاتورة والإيصال.
  • تحفظ مطابقة الإيصال أولا بحالة reserved. يستطيع مراجع مخول إنهاءها عبر POST /supplier-bills/{document_id}/receipt-matches/{match_id}/finalize لترقية التخصيص فقط إلى posted؛ ويبقى ترحيل الفاتورة هو المالك لقيد GRNI إلى AP، كما أن الإنهاء idempotent.
  • يتطلب تخصيص الدفع دفعة مسجلة وغير معلقة وفواتير مرحلة وغير معلقة ضمن نطاق المؤسسة/المورد/العملة نفسه. ترفض الروابط المكررة والتخصيص الزائد والترتيب غير الحتمي. المسار الحالي يحجز وقائع التخصيص فقط؛ ولا يغير النقد ولا يرحل قيدا.
  • يعرف عقد المجال السلفة بأنها تتطلب دفعة مسجلة واختيار المستخدم الصريح سلفة. تعرض واجهة HTTP ضمن نطاق المستأجر إنشاء السلفة وتطبيقها/إزالتها وإعادة تخصيص الدفع ضمن النطاق نفسه، مع الصلاحيات وidempotency. ينشئ إنشاء السلفة إعادة تصنيف غير نقدية DR Supplier Advances / CR AP؛ ويرحل تطبيق السلفة DR AP / CR Supplier Advances، بينما تضيف إزالتها إعادة التصنيف المعاكسة وتعيد سعة الفاتورة. أما إعادة تخصيص الدفع فتغير روابط AP ضمن النطاق نفسه دون حركة نقدية؛ ويستطيع مسار عكس الدفع المنفذ تفكيك تبعيات التخصيص/السلفة المحفوظة.
  • مصادر مرتجعات المورد/الأرصدة الدائنة هي سعة تجارية مرتبطة بالمصدر. يتطلب الإشعار الدائن مصادر مرحلة، ونطاق مؤسسة/مورد/عملة واحدا، ومعرفات مصدر معروفة وغير قابلة للتغيير، وسعة مصدر متبقية. الإشعار الدائن المصادق عليه تصحيح تجاري فقط؛ لا يرد النقد ولا يرحل قيدا.
  • يمكن تسجيل استرداد المورد فقط بعد الاعتماد وتأكيد صريح external_refund_confirmed: true ودفتر نقد/بنك نشط بعملة المؤسسة ومصدر إشعار دائن مرحل أو سلفة مسجلة ذي سعة متبقية. يحفظ التسجيل الاسترداد المستلم خارجيا وتخصيص مصدره؛ ولا يستدعي مزودا ولا يغير النقد ولا يرحل قيدا. ويعيد مسار عكس الاسترداد، بالحجز والاعتماد والتنفيذ، تخصيص المصدر ويضع الاسترداد في حالة معكوس، لكنه لا يعكس المقبوض الخارجي ولا يغير النقد ولا يستدعي مزودا ولا يرحل قيدا.
  • يمكن عكس تخصيص إشعار دائن مورد مرحل عبر مسار مستقل للحجز ثم الاعتماد ثم التنفيذ. يضيف التنفيذ تخصيصا سالبا وقيدا تعويضيا وقيود دفتر الأستاذ الخاصة بـ AP في معاملة Finance واحدة؛ ولا يحول أموالا ولا يستدعي مزودا ولا ينشئ دفعا بين المورد ومالك المستأجر.

مراجع المرفقات

تجيز المالية مرجع المرفق النشط فقط عندما ينتمي المرفق إلى المؤسسة والمستند المطلوبين معا. ترجع المراجع المفقودة أو التابعة لمؤسسة/مستند آخر أو المحذوفة كغير متاحة حتى لا يكشف اختبار المعرفات سبب الغياب. تتضمن النتيجة بيانات المرجع مثل media_id والبصمة واسم الملف ونوع الوسائط. يوفر Media الآن مسارا داخليا منفصلا ومصادقا عليه لـ finance-service لإصدار رابط قصير العمر بنطاق supplier_payable بعد فحص المؤسسة والوسائط الخاصة؛ ولا تصدر Finance الروابط ولا تقدم محتوى الملف ولا توفر أمر حذف، كما يجب التحقق من ارتباط المرجع والبصمة والمستند قبل استخدام المسار.

نموذج قراءة لوحة التحكم

في لوحة تحكم التاجر (/dashboard)، يظهر قسم انتباه (Attention) أولا في أعلى الصفحة، يليه مباشرة قسم ذمم الموردين (Supplier Payables) (الذي يعرض outstanding_ap وoverdue_ap وdue_today_ap وdue_soon_ap وcash_paid وaccounting_pending).

ترسل المالية حقائق مخصصة لإعادة بناء نموذج لوحة المعلومات فقط عند تسجيل استرداد خارجي أو تخصيص رصيد دائن للمورد أو تطبيق/إزالة سلفة أو إعادة تخصيص دفعة. هذه الأحداث تحدث نموذج القراءة فقط؛ ولا تنفذ حركة نقدية أو تحويلا عبر مزود أو تحويلا بين المورد والمؤسسة.

الفرق بين الموافقة والدفع

الموافقة على فاتورة المورد أو على مسودة الدفع هي حقيقة داخلية مرتبطة بإصدار المستند. إن الحدثين SupplierBillApprovedEvent وSupplierPaymentApprovedEvent مخصصان للتدقيق وقراءات النماذج فقط. تعني موافقة الدفع أن موظفا مخولا يستطيع لاحقا تسجيل أن المورد استلم المبلغ خارجيا؛ ولا تعني إرسال أموال أو استدعاء بنك/مزود أو إنشاء تحويل بين المورد ومالك المؤسسة. لا ينشئ القيد المحاسبي الداخلي إلا التسجيل اللاحق الذي يؤكده الموظف، ويبقى موسوما صراحة بأن provider_transfer=not_supported وsupplier_transfer=not_supported.

تبنى لوحة ذمم الموردين من لقطة مطلقة واحدة تملكها المالية وبالعملة الوظيفية للمؤسسة. تتضمن as_of وتاريخ العمل والمنطقة الزمنية ورقم تسلسل القطع والتعريفات التالية:

المؤشر التعريف
outstanding_ap الأرصدة الموجبة لفواتير الموردين المرحلة بعد المدفوعات والأرصدة الدائنة والسلف والعكوس الفعالة؛ تستبعد المسودات والملغاة.
overdue_ap رصيد الفواتير المرحلة ذي تاريخ الاستحقاق قبل تاريخ عمل المؤسسة.
due_today_ap رصيد الفواتير المرحلة ذي تاريخ الاستحقاق في تاريخ عمل المؤسسة.
due_soon_ap الرصيد المستحق من تاريخ العمل حتى تاريخ العمل + 7 أيام، شاملا الطرفين.
held_ap إجمالي قيمة فواتير الموردين المعلقة بسبب عدم تطابق أو مراجعة؛ تستبعد المسودات المعلقة والملغاة من الالتزامات المرحلة.
grni_pending استحقاق الاستلام غير المفوتر التجاري، صافيا من المرتجعات والمطابقة؛ منفصل عن الاستلام المعلق محاسبيا.
cash_paid التدفقات الخارجة من مدفوعات الموردين المرحلة في الفترة المحددة، مع احتساب السلفة مرة واحدة وخفض العكوس للإجمالي.
cash_refunds التدفقات الداخلة من استردادات الموردين المرحلة في الفترة المحددة؛ تخفضها العكوس ولا تحتسب كمدفوعات موردين.
accounting_pending عدد وأقدم عمر لترحيلات الاستلام أو الفاتورة أو الدفع المعلقة أو الفاشلة؛ لا تمثل التزامات مرحلة.

بدون صلاحية القراءة أو لقطة متاحة، يعيد العقد مؤشرات مقيدة/غير متاحة ولا يعيد عناصر انتباه. وقد يعلم تدفق مصدر جزئي مؤشرات منفردة كغير متاحة؛ وتبقى قيمتها وعملتها null ولا تستنتج. ولا يستنتج العقد قيما مالية من بيانات جزئية. واجهة Flutter الحالية للقراءة فقط ولا تنشئ إجماليات عند غياب اللقطة.

القيود الصريحة

لا تدعي هذه الشريحة تنفيذ دفع المورد أو تكاملا مع بنك/مزود أو حالات فشل للتحويل أو سير تسوية كامل أو حذف كائنات Media أو الإطلاق في الإنتاج. استرداد إسقاط الإيصال محدود بعامل Finance ومسار إعادة المحاولة الموجود في الوسيط؛ أما الذرية بين الخدمات ودليل القطع في البيئة المستضافة فتبقى بوابات مستقلة. ينشئ ترحيل فاتورة المورد وتسجيل الدفع المؤكد خارجيا أثرا محاسبيا. ويمكن الآن لعكس إيصال ذي استحقاق مرحل أن يضيف قيدا تعويضيا idempotent عندما يتوفر القيد الأصلي والفترة المفتوحة، بينما تبقى تبعيات العكس والتناسق الذري بين الخدمات مرفوضة بأمان حتى تفحص. كما يضيف عكس فاتورة المورد المرحلة وقائع عكس المطابقات والتخصيصات وقيدا تعويضيا وقيود دفتر الأستاذ وحدث SupplierBillReversedEvent ضمن معاملة مالية واحدة. يضيف عكس الدفعة المسجلة قيودا محاسبية تعويضية ويفك تبعيات التخصيص/السلفة المحفوظة، بما في ذلك إزالة تطبيقات السلف الحالية عبر مسار الإزالة غير النقدي القابل للإضافة، لكنه لا يحول النقد ولا يستدعي مزودا. تبقى استحقاقات الإيصال المعلقة بلا قيد، وتسجيل/عكس استرداد المورد غير نقدي وبلا قيد، وإعادة تخصيص الدفع غير نقدية وبلا قيد. أما تطبيق/إزالة السلفة فأصبح له أثر إعادة التصنيف غير النقدي القابل للعكس كما سبق، بينما اعتماد تاريخ فترة مغلقة بشكل منفصل ما زال مقيدا. وتظل المخزونات مصدر الحقيقة للمخزون، ولا تعرض المالية واجهة عامة للمرفقات/الكائنات.

الصلاحيات وتهيئة المؤسسة

يتطلب مسار القراءة finance:payable:read. وتستخدم عمليات التعديل صلاحيات المورد المحددة للفواتير ومطابقة الإيصالات والمدفوعات، إضافة إلى finance:payable:reconcile؛ وترفض كتابات ذمم الموردين لهويات دعم المنصة ولرموز الخدمات. لا تحصل الأدوار المبدئية أو المؤسسات القديمة تلقائيا على كل صلاحيات الذمم الجديدة؛ يجب على المالك أو المسؤول منح المفاتيح المطلوبة من الفريق ← الأدوار. ترفض استثناءات اعتماد المالك عند غياب هوية مالك المؤسسة الموثوقة.

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

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

يمكن للمالك الفعلي الذي يملك صلاحية finance:payable:configure استدعاء المسار الصريح POST /api/finance/v1/tenants/{tenant_id}/configuration/provision مع العملة الوظيفية والمنطقة الزمنية المحاسبية. يتحقق المسار من حسابات AP النظامية ويربط معرفاتها بالإعدادات، ثم يترك الحالة preparing؛ ولا يفعل الشراء بين الخدمات، ولا يرحل قيدا، ولا يحول أموالا. يجب إكمال مصافحة التفعيل بين الخدمات قبل السماح بكتابات ذمم الموردين، ويرفض إعادة تهيئة إعداد نشط.

أما طرف Inventory من هذه المصافحة فهو داخلي بين الخدمات فقط. ولا تكون الجاهزية صحيحة إلا عندما يملك تيارا supplier وvaluation الإصدار 2 ونفس جيل التفعيل غير الفارغ؛ وتبقى الحالة غير متاحة عند غياب أحد التيارين أو اختلافهما.

بعد التهيئة، يستطيع المالك الفعلي للمؤسسة استدعاء POST /api/finance/v1/tenants/{tenant_id}/configuration/activate مع معرف reconciliation_batch_id معتمد ورقم revision الحالي وإصدار العقد. تطلب المالية من Inventory تأكيد جيل التفعيل نفسه، ولا تنقل الحالة إلى active إلا بعد تأكيد الجاهزية. وتبقى الحالة preparing عند فشل التأكيد أو عدم توفره.

يستطيع المالك قراءة GET /purchasing-settings ضمن نطاق المؤسسة وتعديل PATCH /purchasing-settings مع رقم النسخة الحالي. تستخدم التعديلات تحققا من رقم النسخة وتشترط بقاء تأكيد المنطقة الزمنية مفعلا أثناء الحالة النشطة، وتتحقق من أن كل حساب مشار إليه هو حساب نشط وقابل للترحيل ضمن المؤسسة وبنوع الحساب المطلوب. ويتطلب POST /payables/suspend رقم النسخة الحالي وسببا مسجلا. الإيقاف يغير حالة التحكم فقط ولا يعكس قيدا ولا يستدعي مزود دفع ولا يحول أموالا.

دفعات المصالحة للقطع

قبل تفعيل قطع تاريخي، تستطيع المالية تسجيل مجموعة أدلة بحالة مسودة عبر POST /api/finance/v1/tenants/{tenant_id}/payables/reconciliation-batches. يحتوي الطلب على cutover_at مع منطقة زمنية، والعملة، وآخر رقم ملتزم به في Inventory وFinance، وبيانات أدلة غير فارغة. تعيد الاستجابة مسودة ضمن نطاق المؤسسة مع revision للتفاؤل في التزامن. هذا يسجل الأدلة فقط؛ ولا يستورد أرصدة ولا يرحل قيودا ولا يحرك أموالا.

يعتمد المالك الفعلي للمؤسسة المسودة عبر POST .../payables/reconciliation-batches/{batch_id}/approve مع رقم النسخة الحالي وسبب الاعتماد. إذا تعذر التحقق من المالك تفشل العملية بأمان. يمنع التحقق من النسخة اعتماد نسخة قديمة، ولا يفعل الاعتماد ذمم الموردين وحده؛ إذ تبقى مصافحة التفعيل اللاحقة مطلوبة. لا تستخدم هذا المسار لتمثيل تحويل إلى المورد أو البنك أو مزود الدفع أو مالك المؤسسة.

مستلمو تنبيهات الذمم حسب الصلاحية

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

لقطة إعادة بناء لوحة المعلومات

مسار POST /api/finance/v1/internal/dashboard-supplier-payables/{tenant_id} مخصص للخدمات الموثقة فقط، وتستخدمه خدمة لوحة المعلومات لإعادة البناء. يقفل stream مستحقات المورد للمستأجر ويعيد لقطة مطلقة واحدة من الفواتير المنشورة وGRNI والدفعات/المبالغ المستردة المسجلة والتخصيصات وحالات المعالجة المعلقة. إذا كان الـwatermark غير موجود أو تجاوز تخصيص قيمة الفاتورة يفشل الطلب بأمان. هذا المسار لا ينفذ ولا يمثل أي تحويل إلى المورد أو مزود دفع.

يمكن للعمليات ولوحة المعلومات قراءة المسار الداخلي المحمي برمز خدمة: GET /api/finance/v1/internal/supplier-payables-reconciliation/{tenant_id}. يعيد المسار العلامات المائية وأعداد inbox المحدودة ومؤشر قابلية إعادة المحاولة للمراقبة ودليل القطع، ولا يعيد payloads الخام ولا يغير المالية أو المخزون.

قائمة الموردين

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

تذكيرات المواعيد

تعيد لوحة المعلومات تقييم تنبيهات ذمم الموردين عند انتقال تاريخ العمل الخاص بالمستأجر، حتى إذا لم يصل حدث جديد من المالية. لا يصدر التنبيه إلا عند انتقال الحالة إلى فئة جديدة: raised أو due-soon أو due-today أو overdue-1 أو overdue-7 أو overdue-30. تعيد خدمة الإشعارات التحقق من جمهور الصلاحية وتحفظ مطالبة تسليم دائمة لكل شرط ونسخة ومستلم وقناة وفئة تذكير. لذلك فإن إعادة البناء المتكررة آمنة ولا ترسل تنبيها كل يوم. هذه التذكيرات إشارات للمراجعة فقط؛ ولا توافق أو تسجل أو تحول أي دفعة.

فحوص التشغيل

من جذر المستودع، الأوامر المعتمدة المعزولة للخدمات هي:

Push-Location apps/backend/services/finance_service
python -m pytest -q --disable-warnings
Pop-Location

Push-Location apps/backend/services/documentation_service
python -m pytest -q --disable-warnings
Pop-Location

في النشر الحي، تحقق من البوابة والخدمات قبل تشخيص سجل ذمم مفقود:

curl -sf https://api.sanadiqcloud.com/health
kubectl get deployments,pods,services -n sanadiq
kubectl logs deployment/finance-service -n sanadiq --since=30m
kubectl logs deployment/inventory-service -n sanadiq --since=30m
kubectl rollout status deployment/finance-service -n sanadiq --timeout=300s

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


ذات صلة: نظرة عامة على المالية · حدود الملكية · دورة الترحيل · التقارير المالية · صلاحيات المالية · أحداث المالية · مرجع مؤشرات لوحة التحكم