المطلوب: القيود تترحّل (Post) أوتوماتيك من غير محاسب، ويبقى ده إعداد. ده تحليل للوضع الحالي في الكود، الحل المقترح، المخاطر، والقرارات المطلوبة قبل ما نكتب أي سطر.
دورة حياة أي قيد محاسبي عندنا:
| الحقيقة | التفصيل (من الكود) |
|---|---|
| القيود بتتعمل Draft | CreateJournalEntry بيعمل القيد بـ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. |
كل عملية (فاتورة، دفعة، COGS، مصروف…) بتولّد قيد Draft. وبما إن مفيش محاسب يعمل Approve+Post، القيود بتتكدّس كمسودات، والميزانية والأستاذ وكل التقارير المالية بتفضل فاضية رغم إن العمليات حصلت فعلاً. النظام مصمّم لفصل المهام (محاسب يراجع ويرحّل) — وده مش مناسب لمعمل بدون محاسب.
نرجّع تفعيل إعداد accounting.auto_post_entries (لكل شركة). لما يبقى مفعّل: بعد ما القيد يتعمل، النظام يعمل Approve + Post تلقائياً فوراً.
كل القيود التلقائية بتعدّي من نقطة واحدة (CreateJournalEntry). فنضيف فحص الإعداد هناك مرة واحدة → كل العمليات (LIS، مبيعات، مشتريات، مدفوعات…) تترحّل تلقائياً. مفيش تكرار، ونقطة تحكّم واحدة.
| النقطة | القرار/التفصيل |
|---|---|
| المكان | في 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 (نحافظ على السلوك الحالي). |
accounting.auto_post_entries في CreateJournalEntry → Approve + Post تلقائي مع معالجة آمنة للفترة المقفولة (يفضل Draft + لوج).بعد التنفيذ: أي عملية (فاتورة/دفعة) بتترحّل لوحدها وتظهر في كل التقارير المالية فوراً — من غير محاسب. الإعداد قابل للإطفاء في أي وقت لو جبتوا محاسب وعايزين ترجعوا للمراجعة اليدوية.