ترحيل القيود المحاسبية تلقائياً — دراسة كاملة وخطة قبل البدء

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

الموديول: Accounting  •  مبني على فحص فعلي للكود (CreateJournalEntry / PostJournalEntry / التقارير)  •  دراسة — لا تنفيذ بعد

1 الوضع الحالي (من فحص الكود)

دورة حياة أي قيد محاسبي عندنا:

Draftمسودة (بتتعمل هنا)
Approvedاعتماد (يدوي)
Postedمُرحّل (يدوي)
التقاريربتقرا Posted فقط
الحقيقةالتفصيل (من الكود)
القيود بتتعمل DraftCreateJournalEntry بيعمل القيد بـstatus = Draft دايماً.
الترحيل يدويلازم حد يعمل Approve ثم Post. مفيش أتمتة.
الأوتو-بوست مقفول بقصدفيه إعداد قديم accounting.auto_post_entries بس متعمد إنه مش بيُستخدم — السبب المكتوب: «auto-posting bypasses separation of duties» (فصل المهام، تدقيق C7/C12/C14).
التقارير = Posted فقطالميزانية، الأستاذ، AR/AP، التدفقات، الموازنات — كلها بتفلتر status = Posted. أي قيد Draft مش بيظهر في أي تقرير.
فواتير LIS مثلاًPostLabInvoice بيعمل القيد عبر CreateJournalEntry بس مش بيرحّله → يفضل Draft.

2 المشكلة عندكم

مفيش محاسب يرحّل → التقارير فاضية/غلط

كل عملية (فاتورة، دفعة، COGS، مصروف…) بتولّد قيد Draft. وبما إن مفيش محاسب يعمل Approve+Post، القيود بتتكدّس كمسودات، والميزانية والأستاذ وكل التقارير المالية بتفضل فاضية رغم إن العمليات حصلت فعلاً. النظام مصمّم لفصل المهام (محاسب يراجع ويرحّل) — وده مش مناسب لمعمل بدون محاسب.

3 الحل المقترح — الأوتو-بوست كإعداد

نرجّع تفعيل إعداد accounting.auto_post_entries (لكل شركة). لما يبقى مفعّل: بعد ما القيد يتعمل، النظام يعمل Approve + Post تلقائياً فوراً.

عملية (فاتورة/دفعة)
CreateJournalEntryقيد Draft
لو الإعداد ONApprove + Post تلقائي
Postedيظهر في التقارير فوراً

ليه ده الحل الصح تقنياً

كل القيود التلقائية بتعدّي من نقطة واحدة (CreateJournalEntry). فنضيف فحص الإعداد هناك مرة واحدة → كل العمليات (LIS، مبيعات، مشتريات، مدفوعات…) تترحّل تلقائياً. مفيش تكرار، ونقطة تحكّم واحدة.

4 تفاصيل التنفيذ (المكان والمنطق)

النقطةالقرار/التفصيل
المكانفي CreateJournalEntry — بعد إنشاء القيد، لو auto_post_entries = true للشركة → نستدعي ApproveJournalEntry ثم PostJournalEntry.
شروط الترحيلالـPost بيتطلّب: (1) القيد Approved، (2) الفترة المالية مفتوحة. فلازم نعمل Approve الأول، ونتعامل مع الفترة المقفولة.
posted_by (مين رحّل)المستخدم الحالي (auth()->id()) لو موجود، وإلا مستخدم نظام/منشئ العملية — عشان الـaudit trail يفضل سليم.
الفترة مقفولة؟لو مفيش فترة مفتوحة، الترحيل بيرمي خطأ. الحل الآمن: نمسك الخطأ، نسيب القيد Draft (مايتلغيش)، ونسجّل تنبيه — العملية الأساسية (الفاتورة) متفشلش.
النطاق (Scope)يطبّق على القيود التلقائية (فواتير/مدفوعات/COGS…). القيود اليدوية من شاشة القيود: نقرر تطبّق عليها برضه ولا تفضل بأزرار Approve/Post اليدوية (قرار — القسم 6).
الإعداد في الواجهةتوجل (on/off) في صفحة إعدادات المحاسبة، متخزّن عبر SettingsService لكل شركة، الافتراضي OFF (نحافظ على السلوك الحالي).

5 المخاطر والاعتبارات (مهم تفهموها قبل ما نبدأ)

6 قرارات محتاجينها منك قبل التنفيذ

  1. الافتراضي: الإعداد يبقى OFF افتراضياً (وتفعّله إنت)، ولا ON من الأول لشركتك؟
  2. النطاق: الأوتو-بوست يطبّق على كل القيود (تلقائية + يدوية)، ولا على التلقائية بس (والقيد اليدوي يفضل بأزرار Approve/Post)؟
  3. الفترة المقفولة: لو الفترة مقفولة والقيد ماقدرش يترحّل — يفضل Draft بهدوء (الأنسب)، ولا نمنع العملية؟
  4. المسودات القديمة: تحب أعمل زرار/أمر «رحّل كل المسودات المعلّقة» لترحيل المتراكم مرة واحدة؟
  5. مين posted_by: المستخدم اللي عمل العملية، ولا مستخدم «نظام» مخصّص؟

7 خطة التنفيذ (مراحل)

  1. 1الإعداد + المنطق الأساسي. إضافة فحص accounting.auto_post_entries في CreateJournalEntry → Approve + Post تلقائي مع معالجة آمنة للفترة المقفولة (يفضل Draft + لوج).
  2. 2الواجهة. توجل «ترحيل تلقائي للقيود» في إعدادات المحاسبة + شرح تحذيري (بيلغي مراجعة المحاسب).
  3. 3المسودات المتراكمة. إجراء «رحّل كل المسودات المعلّقة» (مرة واحدة) لترحيل القيود القديمة لتظهر في التقارير.
  4. 4اختبار وتحقّق. فاتورة LIS → قيد يترحّل تلقائي → يظهر في الأستاذ والميزانية فوراً. واختبار فترة مقفولة + التراجع (reversal).

المكسب

بعد التنفيذ: أي عملية (فاتورة/دفعة) بتترحّل لوحدها وتظهر في كل التقارير المالية فوراً — من غير محاسب. الإعداد قابل للإطفاء في أي وقت لو جبتوا محاسب وعايزين ترجعوا للمراجعة اليدوية.