Commit e4076074 authored by Mahmoud Aglan's avatar Mahmoud Aglan

docs(accounting): full Egyptian-Arabic guide with diagrams

One document covering the whole revenue posting system end to end: how a
payment becomes a journal entry, the 97 streams across 14 categories, the
six stages and which apply to which category, direction, the five scopes,
the wizard step by step, the allocation waterfall, line types, VAT,
deferred revenue, rule resolution by specificity, versioning, every
validation the system enforces, and worked scenarios.

Includes the three accounting defects found in the live data — revenue
recognised on collection rather than accrual (36 of 42 rules), nothing
deferred at all, and 3,032,258 EGP of customer advances sitting in revenue
accounts — with the correct treatment for each.

18 mermaid diagrams, all verified to render with mermaid-cli 11.
Co-Authored-By: 's avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
parent c95a8dd4
# الدليل الكامل — نظام توزيع الإيرادات والقيود المحاسبية
> دليل بالعربي المصري، من الأول للآخر. اللي إحنا عملناه، وإزاي يشتغل، وإزاي تستخدمه،
> وإيه اللي لسه ناقص.
>
> **آخر تحديث:** ٥ سبتمبر ٢٠٢٦ · **الإصدار المنشور:** build 363
---
## المحتويات
1. [الفكرة في صفحة واحدة](#١--الفكرة-في-صفحة-واحدة)
2. [الصورة الكبيرة — القيد بيتولد إزاي](#٢--الصورة-الكبيرة--القيد-بيتولد-إزاي)
3. [المصطلحات](#٣--المصطلحات)
4. [مصادر الإيراد والفئات](#٤--مصادر-الإيراد-والفئات)
5. [المراحل — امتى بيتعمل القيد](#٥--المراحل--امتى-بيتعمل-القيد)
6. [اتجاه الحركة](#٦--اتجاه-الحركة--تحصيل-ولا-صرف)
7. [النطاق — أهم فكرة جديدة](#٧--النطاق-scope--أهم-فكرة-جديدة)
8. [الويزارد خطوة بخطوة](#٨--الويزارد-خطوة-بخطوة)
9. [حسابات التوزيع — الأرقام بتتحسب إزاي](#٩--حسابات-التوزيع--الأرقام-بتتحسب-إزاي)
10. [أنواع البنود](#١٠--أنواع-البنود)
11. [الضريبة](#١١--الضريبة)
12. [الإيراد المؤجل](#١٢--الإيراد-المؤجل)
13. [القاعدة بتتحدد إزاي وقت الدفع](#١٣--القاعدة-بتتحدد-إزاي-وقت-الدفع)
14. [الإصدارات — ليه القيود القديمة ما بتتغيّرش](#١٤--الإصدارات--ليه-القيود-القديمة-ما-بتتغيّرش)
15. [كل الحالات اللي السيستم بيرفضها](#١٥--كل-الحالات-اللي-السيستم-بيرفضها)
16. [سيناريوهات كاملة](#١٦--سيناريوهات-كاملة)
17. [اللي لقيناه غلط في الداتا](#١٧--اللي-لقيناه-غلط-في-الداتا)
18. [خريطة الشاشات](#١٨--خريطة-الشاشات)
---
## ١ — الفكرة في صفحة واحدة
قبل كده: أي فلوس بتدخل النادي كانت بتروح لحساب واحد ثابت، والتغيير محتاج مبرمج.
دلوقتي: إنت بتكتب **التقسيمة** مرة واحدة من شاشة، وبتقول هي تحكم إيه — مصدر واحد،
ولا فئة كاملة، ولا السيستم كله — والسيستم بيولّد القيد المحاسبي لوحده كل مرة حد يدفع.
```mermaid
flowchart RL
A["العضو بيدفع<br/>١٥٠٬٠٠٠ جنيه"] --> B["السيستم بيدوّر<br/>على القاعدة المناسبة"]
B --> C["يفصل الضريبة"]
C --> D["يقسّم الصافي<br/>حسب التقسيمة"]
D --> E["يكتب القيد<br/>في الأستاذ العام"]
style A fill:#DBEAFE,stroke:#2563EB
style E fill:#D1FAE5,stroke:#059669
```
**اللي إنت بتتحكم فيه:** الخطوة ٢ (مين القاعدة) و٣ (الضريبة) و٤ (التقسيمة).
كله من شاشة. من غير كود خالص.
---
## ٢ — الصورة الكبيرة — القيد بيتولد إزاي
```mermaid
flowchart TD
subgraph SRC["مصدر الحركة"]
P1["دفعة في الكاشير"]
P2["فاتورة إيجار محل"]
P3["اشتراك أكاديمية"]
P4["مسيّر رواتب"]
end
SRC --> EV["EventBus<br/>الحدث بيتبعت"]
EV --> ENG["RevenuePostingEngine<br/>محرك القيود"]
ENG --> R1{"فيه قاعدة<br/>للمصدر ده؟"}
R1 -->|لأ| STOP["ما يتعملش قيد<br/>ويظهر في شاشة التشخيص"]
R1 -->|أيوه| RES["يختار الإصدار الساري<br/>حسب التاريخ والنطاق"]
RES --> TAX["RevenueAllocator<br/>يفصل الضريبة"]
TAX --> ALLOC["يوزّع الصافي على البنود"]
ALLOC --> BAL{"القيد متوازن؟"}
BAL -->|لأ| ERR["يرفض ويسجّل الخطأ"]
BAL -->|أيوه| JE["JournalService<br/>يكتب القيد"]
JE --> GL["الأستاذ العام<br/>ميزان المراجعة<br/>القوائم المالية"]
style STOP fill:#FEE2E2,stroke:#DC2626
style ERR fill:#FEE2E2,stroke:#DC2626
style GL fill:#D1FAE5,stroke:#059669
style ENG fill:#DBEAFE,stroke:#2563EB
```
**الملفات اللي بتعمل ده (لو حد سأل):**
| الملف | بيعمل إيه |
|---|---|
| `RevenuePostingEngine.php` | يختار القاعدة ويولّد القيد |
| `RevenueAllocator.php` | حسابات التوزيع والضريبة (رياضة بحتة، من غير قاعدة بيانات) |
| `AllocationPlanService.php` | تطبيق تقسيمة على مجموعة مصادر + كل التحققات |
| `PostingRouter.php` | يوجّه الحساب المقابل (خزينة / بنك / أوراق قبض) |
| `JournalService.php` | يكتب القيد ويتأكد إنه متوازن |
---
## ٣ — المصطلحات
| المصطلح | يعني إيه بالبلدي |
|---|---|
| **مصدر الإيراد** (Stream) | نوع الفلوس. "قيمة العضوية"، "حجز ملعب"، "مصروف الأجور". عندنا **٩٧ مصدر**. |
| **فئة الإيراد** (Category) | مجموعة مصادر من نفس النوع. عندنا **١٤ فئة**. |
| **النطاق** (Scope) | التقسيمة هتحكم إيه: مصدر واحد / فئة / مختارين / كل حاجة. |
| **المرحلة** (Stage) | امتى بيتعمل القيد: استحقاق، تحصيل، صرف، ارتجاع، إعدام، تحويل. |
| **الاتجاه** (Direction) | **تحصيل** = البنود دائنة. **صرف** = البنود مدينة. |
| **القاعدة** (Rule) | ورقة التعليمات: "المبلغ ده يتوزّع كذا". ليها إصدارات وتاريخ سريان. |
| **البند** (Line) | سطر واحد من التوزيع: "٢٠٪ لحساب كذا". |
| **الباقي** (Remainder) | البند الأخير — بياخد اللي فضل + كسور القرش. **إجباري**. |
| **الصافي** (Net) | المبلغ بعد فصل الضريبة. التوزيع بيتم عليه هو. |
| **حساب رئيسي** (Header) | حساب بيتجمّع تحته حسابات. **القيد ما بينزلش عليه**. |
| **حساب فرعي** (Detail/Leaf) | الحساب اللي القيد بينزل عليه فعلًا. |
| **إصدار** (Version) | نسخة من القاعدة. الجديد بيوقف القديم، والقديم بيفضل للأرشيف. |
---
## ٤ — مصادر الإيراد والفئات
عندنا **٩٧ مصدر إيراد** موزّعين على **١٤ فئة**:
```mermaid
flowchart TD
R["٩٧ مصدر إيراد<br/>١٤ فئة"]
R --> IN["داخل — تحصيل<br/>٨٠ مصدر"]
R --> OUT["خارج — صرف<br/>١٧ مصدر"]
IN --> I1["الخزينة والبنوك · ١٣"]
IN --> I2["العضويات · ١١"]
IN --> I3["الانتقالات · ٩"]
IN --> I4["الأكاديميات · ٩"]
IN --> I5["المنشآت والملاعب · ٩"]
IN --> I6["الإيجارات والمحلات · ٨"]
IN --> I7["الأنشطة · ٦"]
IN --> I8["الغرامات · ٤"]
IN --> I9["المبيعات · ٤"]
IN --> I10["الاشتراكات · ٣"]
IN --> I11["أخرى · ٢"]
OUT --> O1["الأجور والرواتب · ١٠"]
OUT --> O2["المشتريات · ٨"]
OUT --> O3["الإعدام والإسقاط · ١"]
style R fill:#DBEAFE,stroke:#2563EB
style IN fill:#ECFDF5,stroke:#059669
style OUT fill:#F5F3FF,stroke:#7C3AED
```
**حالة التوصيل دلوقتي:** ٧٠ مصدر موصّل، **٢٧ مصدر لسه مش موصّل**.
تقدر تشوفهم كلهم في لقطة واحدة من نطاق **"كل اللي لسه مش موصّل"** في الويزارد.
---
## ٥ — المراحل — امتى بيتعمل القيد
فيه ٦ مراحل. مش كل مرحلة بتنطبق على كل فئة.
```mermaid
flowchart RL
A["استحقاق<br/>Accrual"] -->|"طالبنا العضو<br/>ولسه ما قبضناش"| B["تحصيل<br/>Collection"]
B -->|"قبضنا"| C["الفلوس دخلت"]
C -.->|"رجّعنا"| D["ارتجاع<br/>Refund"]
A -.->|"ما قبضناش<br/>وسامحناه"| E["إعدام<br/>Writeoff"]
F["صرف<br/>Payment"] -->|"دفعنا لمورد<br/>أو موظف"| G["الفلوس خرجت"]
H["تحويل داخلي<br/>Transfer"] -->|"من خزينة لخزينة"| I["الفلوس اتنقلت"]
style A fill:#EDE9FE,stroke:#7C3AED
style B fill:#D1FAE5,stroke:#059669
style D fill:#FEE2E2,stroke:#DC2626
style E fill:#F3F4F6,stroke:#6B7280
style F fill:#FEF3C7,stroke:#B45309
style H fill:#DBEAFE,stroke:#2563EB
```
### أي مرحلة تنطبق على أي فئة
| الفئة | المراحل المسموحة |
|---|---|
| العضويات · الاشتراكات · الأكاديميات · الإيجارات | استحقاق، تحصيل، ارتجاع، إعدام |
| الأنشطة · المنشآت · المبيعات | استحقاق، تحصيل، ارتجاع |
| الغرامات | استحقاق، تحصيل، إعدام |
| الانتقالات | استحقاق، تحصيل، تحويل |
| الخزينة | تحصيل، صرف، تحويل |
| المشتريات | استحقاق، صرف، ارتجاع |
| الأجور | استحقاق، صرف |
| الإعدام | إعدام |
| أخرى | كلهم |
> **مهم:** لو اخترت مرحلة ما تنطبقش على فئة، السيستم **بيتخطّى** المصادر دي
> ويقول لك ليه — ما بيكتبش قيد غلط. مثال: لو اخترت "تحصيل" على فئة الأجور،
> هيقول لك *"اتخطّى ١٠ مصادر — المرحلة دي ما تنطبقش"*.
---
## ٦ — اتجاه الحركة — تحصيل ولا صرف
الاتجاه بيحدد **البنود بتاعتك مدينة ولا دائنة**، وبالتالي أنواع البنود المتاحة.
```mermaid
flowchart TD
subgraph IN["تحصيل — فلوس داخلة"]
I1["النقدية / البنك"] -->|مدين| I2["١٥٠٬٠٠٠"]
I3["بنود التقسيمة"] -->|دائن| I4["الإيرادات والالتزامات"]
end
subgraph OUT["صرف — فلوس خارجة"]
O1["بنود التقسيمة"] -->|مدين| O2["المصروفات والأصول"]
O3["النقدية / البنك / الدائنون"] -->|دائن| O4["١٥٠٬٠٠٠"]
end
style IN fill:#ECFDF5,stroke:#059669
style OUT fill:#F5F3FF,stroke:#7C3AED
```
**تقدر تغيّر اتجاه أي مصدر من الويزارد نفسه** — في الشريط الملوّن، لما النطاق يكون
"المصدر ده بس"، هتلاقي *"اتجاه الحركة لـ… : تحصيل"* وجنبه **غيّره لـ صرف**.
> تغيير الاتجاه **ما بيمسّش** القواعد القديمة ولا القيود المرحّلة. بيغيّر الافتراضي
> للقواعد الجديدة بس.
> **قاعدة صارمة:** مينفعش تحط تقسيمة واحدة على نطاق فيه مصادر تحصيل ومصادر صرف مع
> بعض. السيستم هيرفض ويقول لك *"قسّمهم على دفعتين"*.
---
## ٧ — النطاق (Scope) — أهم فكرة جديدة
دي الحاجة اللي خلّت الموضوع عملي. مش هتعيد نفس التقسيمة ٩٧ مرة.
```mermaid
flowchart TD
W["تقسيمة واحدة<br/>٢٠٪ + ٣٠٪ + الباقي"] --> S{"النطاق؟"}
S -->|"المصدر ده بس"| A["قاعدة واحدة"]
S -->|"كل فئة إيراد"| B["١١ قاعدة<br/>كل العضويات"]
S -->|"مصادر أختارها"| C["اللي علّمت عليهم"]
S -->|"كل اللي مش موصّل"| D["٢٧ قاعدة"]
S -->|"كل مصادر الإيراد"| E["٩٩ قاعدة"]
A --> V["التحقق على كل الأهداف"]
B --> V
C --> V
D --> V
E --> V
V --> OK{"كلهم عدّوا؟"}
OK -->|أيوه| WR["يكتب كلهم<br/>في معاملة واحدة"]
OK -->|"واحد بس فشل"| RB["يرفض الدفعة كلها<br/>وما يكتبش ولا صف"]
style W fill:#DBEAFE,stroke:#2563EB
style WR fill:#D1FAE5,stroke:#059669
style RB fill:#FEE2E2,stroke:#DC2626
```
### الخمس نطاقات
| النطاق | يعني إيه | امتى تستخدمه |
|---|---|---|
| **المصدر ده بس** | مصدر واحد | تقسيمة خاصة بحاجة واحدة |
| **كل فئة إيراد** | كل المصادر من نفس النوع | **الأكتر استخدامًا** — سياسة لفئة كاملة |
| **مصادر أختارها** | تعلّم بإيدك من قايمة الـ٩٧ | مجموعة مش متجانسة |
| **كل اللي لسه مش موصّل** | أي مصدر ما لوش قاعدة | تلمّ الناقص كله دفعة واحدة |
| **كل مصادر الإيراد** | كل حاجة | سياسة عامة للنادي |
> **الحفظ كله أو ولا حاجة.** لو مصدر واحد في النطاق فيه مشكلة، السيستم بيرفض الدفعة
> كلها — عشان الشجرة ما تفضلش نص موصّلة.
---
## ٨ — الويزارد خطوة بخطوة
**المسار:** المحاسبة ← محرك القيود ← زرار **وزّع على مجموعة**
```mermaid
flowchart TD
S1["١ — التقسيمة دي هتحكم إيه<br/>النطاق + المرحلة + فئة العضو"]
S2["٢ — المبلغ اللي هنوزّعه<br/>مبلغ مرجعي + الضريبة + مركز التكلفة + الفرع"]
S3["٣ — اقتطع الأجزاء<br/>نسبة أو مبلغ ثابت → حساب"]
S4["٤ — الباقي يروح لـ<br/>إجباري"]
S5["راجع القيد الناتج<br/>على الشمال"]
S6{"متوازن؟"}
S7["احفظ وفعّل"]
S1 --> S2 --> S3 --> S4 --> S5 --> S6
S6 -->|"✓ أيوه"| S7
S6 -->|"✗ لأ"| S3
style S1 fill:#EFF6FF,stroke:#2563EB
style S4 fill:#ECFDF5,stroke:#059669
style S7 fill:#D1FAE5,stroke:#059669
```
### الخطوة ١ — النطاق
- اختار كارت النطاق (الخمسة اللي فوق).
- لو اخترت **فئة**، هتشوف كل الفئات وجنب كل واحدة عدد المصادر وكام غير موصّل.
- لو اخترت **مصادر أختارها**، فيه فلتر بالاسم و**اختار الفئة كلها** و**مسح الكل**.
- اختار **المرحلة** (تحصيل غالبًا). العلامة ✓ معناها فيه قاعدة شغالة عليها.
- اختار **فئة العضو**: كل الأعضاء، ولا عضو عامل بس، ولا أجنبي… إلخ.
الشريط الأزرق تحت بيقول: **"هتتطبّق على ١١ قاعدة قيد — حركة تحصيل"**.
اضغط **اعرض القايمة** تشوف كل مصدر ومرحلته، والمتخطّى ليه اتخطّى.
### الخطوة ٢ — المبلغ
- **مبلغ مرجعي**: للتوضيح بس. السيستم بيملاه بمتوسط اللي المصدر ده حصّله فعلًا.
النسب بتتطبّق على أي مبلغ فعلي، مش على الرقم ده.
- **المعالجة الضريبية**: لو عليها ض.ق.م اختار البروفايل.
- **مركز التكلفة** و**الفرع**: اختياريين.
### الخطوة ٣ — الأجزاء
اضغط **+ اقتطع جزء**. فوق خالص:
```
الباقي غير الموزَّع 150,000.00
[████████████████████████████████████████████]
```
الرقم بيتحدّث **مع كل حرف بتكتبه**. وتحت كل كارت سطر بيقول:
> ٢٠% من ١٥٠٬٠٠٠٫٠٠ · قبله **١٥٠٬٠٠٠٫٠٠** · بياخد **٣٠٬٠٠٠٫٠٠** · يفضل **١٢٠٬٠٠٠٫٠٠**
### الخطوة ٤ — الباقي
سطر إجباري أخضر. اختار الحساب اللي هياخد اللي فضل.
**ليه إجباري؟** عشان القيد يفضل متوازن مهما حصل. لو المبلغ اتغيّر أو كسور القرش ما
اتقسمتش بالظبط، البند ده بيبلع الفرق.
### الحفظ
- **ساري اعتبارًا من**: التاريخ اللي التوزيع يبدأ منه.
- **سبب التغيير**: رقم قرار مجلس الإدارة.
- الزرار بيقول **حفظ وتفعيل على ١١ قاعدة**، ولو أكتر من واحدة هيسألك تأكيد.
---
## ٩ — حسابات التوزيع — الأرقام بتتحسب إزاي
الترتيب ده مهم جدًا، وده اللي السيستم بيعمله بالظبط:
```mermaid
flowchart TD
G["المحصَّل<br/>١٥٠٬٠٠٠٫٠٠"] --> T{"فيه ضريبة؟"}
T -->|"أيوه ١٤٪ شامل"| T1["الضريبة = ١٨٬٤٢١٫٠٥<br/>الصافي = ١٣١٬٥٧٨٫٩٥"]
T -->|لأ| T2["الصافي = ١٥٠٬٠٠٠٫٠٠"]
T1 --> F["١ — المبالغ الثابتة<br/>بتتخصم الأول"]
T2 --> F
F --> NAF["الصافي بعد الثابت<br/>= أساس النسب"]
NAF --> P["٢ — النسب<br/>كل نسبة × الأساس ده"]
P --> R["٣ — الباقي<br/>بياخد اللي فضل + الكسور"]
R --> CHK{"المجموع = الصافي؟"}
CHK -->|أيوه| DONE["✓ القيد متوازن"]
CHK -->|لأ| FAIL["✗ يرفض"]
style DONE fill:#D1FAE5,stroke:#059669
style FAIL fill:#FEE2E2,stroke:#DC2626
style NAF fill:#FEF3C7,stroke:#B45309
```
### القاعدة الذهبية
> **النسبة دايمًا من صافي المبلغ، مش من الباقي.**
>
> ٢٠٪ بعدين ٣٠٪ = **٥٠٪ من المبلغ**، مش ٢٠٪ وبعدين ٣٠٪ من الـ٨٠٪ اللي فضلت.
> ده اللي أي محاسب بيقصده لما يقول "٢٠٪ منه لكذا و٣٠٪ منه لكذا".
### أرقام حقيقية متأكَّد منها
| المبلغ | ٢٠٪ | ٣٠٪ | الباقي | متوازن؟ |
|---:|---:|---:|---:|:---:|
| ١٥٠٬٠٠٠٫٠٠ | ٣٠٬٠٠٠٫٠٠ | ٤٥٬٠٠٠٫٠٠ | ٧٥٬٠٠٠٫٠٠ | ✓ |
| ٢٠٠٬٠٠٠٫٠٠ | ٤٠٬٠٠٠٫٠٠ | ٦٠٬٠٠٠٫٠٠ | ١٠٠٬٠٠٠٫٠٠ | ✓ |
| ١٫٠٠ | ٠٫٢٠ | ٠٫٣٠ | ٠٫٥٠ | ✓ |
| **٠٫٠٣** | ٠٫٠١ | ٠٫٠١ | ٠٫٠١ | ✓ |
| ٩٩٩٬٩٩٩٫٩٩ | ٢٠٠٬٠٠٠٫٠٠ | ٣٠٠٬٠٠٠٫٠٠ | ٤٩٩٬٩٩٩٫٩٩ | ✓ |
| ١٥٠٬٠٠٠ + ض١٤٪ | ٢٦٬٣١٥٫٧٩ | ٣٩٬٤٧٣٫٦٩ | ٦٥٬٧٨٩٫٤٧ | ✓ |
> لاحظ الـ **٠٫٠٣ جنيه**: ٢٠٪ منها = ٠٫٠٠٦، والسيستم قرّبها لـ ٠٫٠١، وبند الباقي
> بلع الفرق فالقيد فضل متوازن. ده بالظبط سبب وجود بند "الباقي".
---
## ١٠ — أنواع البنود
### على حركة **تحصيل**
| النوع | استخدمه لما | نوع الحساب المطلوب |
|---|---|---|
| **إيراد** | الفلوس بتاعة النادي وكسبناها دلوقتي | إيراد |
| **تحصيل لحساب الغير** | الفلوس مش بتاعتنا (دمغة، اتحاد، تأمين) | التزام |
| **إيراد مؤجل** | قبضنا دلوقتي والخدمة على مدار السنة | التزام |
| **خصم من الإيراد** | خصومات ومردودات | إيراد أو مصروف |
| **تسوية ذمم مدينة** | تسوية مديونية عضو | أصل |
### على حركة **صرف**
| النوع | استخدمه لما | نوع الحساب المطلوب |
|---|---|---|
| **مصروف** | تكلفة اتحمّلناها دلوقتي | مصروف |
| **مصروف مقدَّم** | دفعنا مقدّم لخدمة جاية | أصل |
| **أصل ثابت** | شراء أصل | أصل |
| **مخزون** | استلام بضاعة | أصل |
| **تسوية ذمم دائنة** | سداد لمورد | التزام |
| **إعدام / إسقاط** | إسقاط مديونية | مصروف |
### الغلطة الشائعة
```mermaid
flowchart RL
A["رسوم اتحاد ٥٠ جنيه<br/>بنجمّعها للاتحاد"] --> B{"نسجّلها إزاي؟"}
B -->|"❌ غلط"| C["إيراد<br/>الأرباح تظهر أعلى<br/>والضريبة تتحسب غلط"]
B -->|"✅ صح"| D["تحصيل لحساب الغير<br/>التزام في الميزانية<br/>لحد ما ندفعه"]
style C fill:#FEE2E2,stroke:#DC2626
style D fill:#D1FAE5,stroke:#059669
```
> **السيستم بيتأكد من ده بنفسه.** لو اخترت بند "إيراد" ووديته على حساب التزام،
> هيرفض ويقول: *"الحساب ٢١٠١٠١ نوعه liability ومش مناسب لبند إيراد"*.
---
## ١١ — الضريبة
ضريبة القيمة المضافة **مش إيراد**. دي فلوس بتتحصّل لحساب مصلحة الضرائب، فبتروح
لحساب التزام.
```mermaid
flowchart TD
A["المحصَّل ١٥٠٬٠٠٠"] --> B{"شامل الضريبة<br/>ولا مضافة عليه؟"}
B -->|"شامل (الأغلب)"| C["الصافي = ١٥٠٬٠٠٠ ÷ ١٫١٤<br/>= ١٣١٬٥٧٨٫٩٥"]
C --> D["الضريبة = ١٥٠٬٠٠٠ − ١٣١٬٥٧٨٫٩٥<br/>= ١٨٬٤٢١٫٠٥"]
B -->|"مضافة عليه"| E["الضريبة = ١٥٠٬٠٠٠ × ٠٫١٤<br/>= ٢١٬٠٠٠<br/>والعميل يدفع ١٧١٬٠٠٠"]
D --> F["التوزيع بيتم على<br/>١٣١٬٥٧٨٫٩٥"]
style F fill:#FEF3C7,stroke:#B45309
```
> **غلطة مشهورة:** ناس بتحسب ضريبة ١١٤٠ على إنها ١١٤٠ × ١٤٪ = ١٥٩٫٦٠.
> ده **غلط** لو السعر شامل. الصح: ١١٤٠ ÷ ١٫١٤ = ١٠٠٠ إيراد + ١٤٠ ضريبة.
المعالجات المتاحة: **عادية ١٤٪** · **جدول** · **صفرية** · **معفاة** · **خارج النطاق**.
> المعفاة بتمنع خصم ضريبة المدخلات — فرق مهم عن الصفرية.
---
## ١٢ — الإيراد المؤجل
لو قبضت اشتراك سنة كاملة في يوليو، ما ينفعش تسجّله كله إيراد في يوليو.
```mermaid
flowchart TD
A["قبضنا ١٢٬٠٠٠<br/>اشتراك سنة"] --> B["مدين: النقدية ١٢٬٠٠٠<br/>دائن: إيراد مؤجل ١٢٬٠٠٠<br/>(التزام)"]
B --> C["كل شهر"]
C --> D["مدين: إيراد مؤجل ١٬٠٠٠<br/>دائن: إيراد اشتراكات ١٬٠٠٠"]
D --> E["بعد ١٢ شهر<br/>الالتزام = صفر<br/>الإيراد = ١٢٬٠٠٠"]
style B fill:#FEF3C7,stroke:#B45309
style E fill:#D1FAE5,stroke:#059669
```
في الويزارد: اختار نوع البند **إيراد مؤجل** → بيفتح مربع أصفر فيه:
- **يترحّل على كام شهر** (١٢ للاشتراك السنوي)
- **حساب الإيراد اللي يترحّل له** (البحث بيفلتر حسابات الإيراد بس)
> لو اخترت مؤجل ونسيت حساب الترحيل، السيستم يرفض الحفظ.
---
## ١٣ — القاعدة بتتحدد إزاي وقت الدفع
لما عضو يدفع، السيستم بيدوّر على أنسب قاعدة. الأخص بيغلب العام:
```mermaid
flowchart TD
A["عضو عامل من فرع القاهرة<br/>دفع كاش ١٥٠٬٠٠٠"] --> B["يجيب كل القواعد الشغالة<br/>للمصدر ده في مرحلة التحصيل"]
B --> C["يستبعد اللي تاريخها<br/>مش شامل النهاردة"]
C --> D["يحسب درجة التخصيص"]
D --> E["فئة العضو = ٤ نقاط"]
D --> F["الفرع = ٢ نقطة"]
D --> G["طريقة الدفع = ١ نقطة"]
E --> H["الأعلى نقاط يكسب"]
F --> H
G --> H
H --> I["لو اتساووا<br/>الأحدث إصدارًا يكسب"]
style H fill:#DBEAFE,stroke:#2563EB
style I fill:#D1FAE5,stroke:#059669
```
**يعني إيه عمليًا؟**
| عندك | عضو عامل يدفع | عضو رياضي يدفع |
|---|---|---|
| قاعدة عامة بس | القاعدة العامة | القاعدة العامة |
| قاعدة عامة + قاعدة للعضو العامل | **قاعدة العضو العامل** | القاعدة العامة |
| قاعدة عامة + قاعدة لفرع القاهرة | قاعدة الفرع (لو من القاهرة) | قاعدة الفرع (لو من القاهرة) |
| قاعدة للعضو العامل + قاعدة لفرع القاهرة | **قاعدة العضو العامل** (٤ > ٢) | قاعدة الفرع |
> مش محتاج تعمل أي حاجة عشان ده يشتغل. اعمل القاعدة الخاصة وخلاص.
---
## ١٤ — الإصدارات — ليه القيود القديمة ما بتتغيّرش
دي أهم حاجة محاسبيًا في السيستم كله.
```mermaid
timeline
title تاريخ قاعدة قيمة العضوية — مرحلة التحصيل
يناير ٢٠٢٦ : إصدار ١ — ١٠٠٪ إيرادات عضويات
مارس ٢٠٢٦ : قيود مرحّلة بإصدار ١
مايو ٢٠٢٦ : إصدار ٢ — ٢٠٪ نشاط + ٨٠٪ عضويات : إصدار ١ بقى موقوف
يوليو ٢٠٢٦ : قيود مرحّلة بإصدار ٢
سبتمبر ٢٠٢٦ : إصدار ٣ — ٢٠٪ + ٣٠٪ + الباقي : إصدار ٢ بقى موقوف
```
- **قيود مارس** لسه مربوطة بإصدار ١، بأرقامها الأصلية.
- **قيود يوليو** لسه مربوطة بإصدار ٢.
- التعديل **ما بيمسحش** القديم — بيعمل إصدار جديد ويحط للقديم `effective_to`.
> سؤال المراجع: *"القيد ده اتعمل بأي تقسيمة؟"* → الإجابة موجودة ومحفوظة.
---
## ١٥ — كل الحالات اللي السيستم بيرفضها
كلها مجرّبة على نسخة من قاعدة البيانات الحقيقية، وكلها بترفض **قبل** ما يتكتب أي صف:
```mermaid
flowchart TD
A["اضغط حفظ"] --> B["١ — شكل التقسيمة"]
B --> C["٢ — الحسابات"]
C --> D["٣ — التاريخ"]
D --> E["٤ — كل هدف في النطاق"]
E --> F{"عدّى كله؟"}
F -->|أيوه| G["معاملة واحدة<br/>يكتب كل القواعد"]
F -->|لأ| H["يرفض الدفعة كلها<br/>ولا صف اتكتب"]
style G fill:#D1FAE5,stroke:#059669
style H fill:#FEE2E2,stroke:#DC2626
```
| الحالة | الرسالة اللي هتشوفها |
|---|---|
| من غير بند باقي | لازم بند واحد اسمه "الباقي" |
| بندين باقي | مش ممكن أكتر من بند "باقي" واحد |
| مجموع النسب > ١٠٠٪ | مجموع النسب ١٢٠٪ — أكبر من ١٠٠٪ |
| نسبة صفر أو سالبة | النسبة لازم تكون أكبر من صفر |
| مبلغ ثابت صفر | المبلغ الثابت لازم يكون أكبر من صفر |
| **حساب رئيسي** | حساب رئيسي، والقيد ما بينزلش عليه |
| حساب مش موجود | الحساب رقم … مش موجود |
| حساب موقوف أو مؤرشف | … موقوف أو مؤرشف |
| بند من غير حساب | البند ١: ما اخترتش حساب |
| نوع حساب مش مناسب للبند | الحساب … نوعه liability ومش مناسب لبند "إيراد" |
| بند صرف على حركة تحصيل | نوع البند مش مناسب لحركة تحصيل |
| **خلط تحصيل مع صرف** | قسّمهم على دفعتين |
| تقسيمة فاضية | أضف بندًا واحدًا على الأقل |
| نطاق مفيهوش مصادر | ما فيش أي مصدر مطابق للنطاق |
| تاريخ سريان غلط | تاريخ السريان غير صحيح |
| **تاريخ في فترة مقفولة** | واقع في فترة مقفولة (٢٠٢٦-٠٩) |
| مؤجل من غير حساب ترحيل | حدد حساب الإيراد اللي المؤجل هيترحّل له |
| مرحلة ما تنطبقش على الفئة | اتخطّى — المرحلة دي ما تنطبقش على الأجور |
---
## ١٦ — سيناريوهات كاملة
### أ — عضوية العضو العامل تتقسّم ٢٠/٣٠/الباقي
```mermaid
flowchart TD
A["وزّع على مجموعة"] --> B["النطاق: كل فئة إيراد<br/>← العضويات ١١ مصدر"]
B --> C["المرحلة: تحصيل<br/>فئة العضو: عضو عامل ١٢٠"]
C --> D["المبلغ المرجعي: ١٥٠٬٠٠٠"]
D --> E["جزء ١: ٢٠٪ → صندوق النشاط<br/>الباقي ١٢٠٬٠٠٠"]
E --> F["جزء ٢: ٣٠٪ → إيرادات عضويات<br/>الباقي ٧٥٬٠٠٠"]
F --> G["الباقي → صندوق دعم المنشآت<br/>٧٥٬٠٠٠"]
G --> H["✓ متوازن → حفظ على ١١ قاعدة"]
style H fill:#D1FAE5,stroke:#059669
```
القيد الناتج:
| الحساب | مدين | دائن |
|---|---:|---:|
| النقدية | ١٥٠٬٠٠٠٫٠٠ | |
| صندوق النشاط الرياضي | | ٣٠٬٠٠٠٫٠٠ |
| إيرادات عضويات | | ٤٥٬٠٠٠٫٠٠ |
| صندوق دعم المنشآت *(الباقي)* | | ٧٥٬٠٠٠٫٠٠ |
| **الإجمالي** | **١٥٠٬٠٠٠٫٠٠** | **١٥٠٬٠٠٠٫٠٠** |
### ب — إيجار محل عليه ضريبة ١٤٪
- النطاق: **كل فئة إيراد** ← الإيجارات والمحلات (٨ مصادر)
- المعالجة الضريبية: **عادية ١٤٪ شامل**
- بند واحد: **الباقي** → إيرادات إيجار المحلات
| الحساب | مدين | دائن |
|---|---:|---:|
| النقدية | ١٠٠٬٠٠٠٫٠٠ | |
| ض.ق.م مستحقة *(التزام)* | | ١٢٬٢٨٠٫٧٠ |
| إيرادات إيجار المحلات | | ٨٧٬٧١٩٫٣٠ |
### ج — رسوم فيها حصة اتحاد
- جزء ١: **مبلغ ثابت ٥٠** → حساب "مستحقات الاتحاد" → نوع البند **تحصيل لحساب الغير**
- الباقي → إيرادات الأنشطة → **إيراد**
الـ٥٠ جنيه بتقعد **التزام** لحد ما تتدفع للاتحاد. ما بتدخلش الأرباح ولا الضريبة.
### د — مسيّر رواتب (حركة صرف)
- النطاق: **كل فئة إيراد** ← الأجور والرواتب
- المرحلة: **صرف** · الاتجاه: **صرف** (اتظبط تلقائيًا في تحديث ٥ سبتمبر)
- البنود دلوقتي **مدينة**: مصروف الأجور، حصة التأمينات، …
- والنقدية **دائنة**
---
## ١٧ — اللي لقيناه غلط في الداتا
الفحص على الداتا الحقيقية طلّع ٣ مشاكل محاسبية. **دي مش مشاكل في السيستم — دي في
الأرقام والإعداد**، ومحتاجة قرار منك:
```mermaid
flowchart TD
subgraph P1["١ — إيراد على أساس نقدي"]
A1["٣٦ قاعدة بتسجّل الإيراد<br/>وقت التحصيل"]
A2["٦ قواعد بس وقت الاستحقاق"]
A1 --> A3["الذمم المدينة ناقصة<br/>وفصل الفترات غلط"]
end
subgraph P2["٢ — مفيش تأجيل خالص"]
B1["كل الـ٧٢ بند = immediate"]
B2["اشتراك سنوي بيتسجّل<br/>إيراد كامل يوم التحصيل"]
B1 --> B3["الإيراد مضخّم"]
B2 --> B3
end
subgraph P3["٣ — مقدمات مسجّلة إيراد"]
C1["٤١٠٥٠٣ مقدم عضويه<br/>٢٬٧٧٤٬٤٩٥"]
C2["٤١٠٥٠٥ باقى مقدم<br/>١٨٠٬٢٦٣"]
C3["٤١٠٥٠٤ جزء من مقدم<br/>٧٧٬٥٠٠"]
C1 --> C4["٣٬٠٣٢٬٢٥٨ جنيه<br/>المفروض التزام مش إيراد"]
C2 --> C4
C3 --> C4
end
style A3 fill:#FEE2E2,stroke:#DC2626
style B3 fill:#FEE2E2,stroke:#DC2626
style C4 fill:#FEE2E2,stroke:#DC2626
```
### تفصيل
**١ — الإيراد بيتسجّل وقت التحصيل مش وقت الاستحقاق.**
٣٦ قاعدة من ٤٢ بتسجّل الإيراد لما الفلوس تدخل. للحجز اللحظي ده مظبوط (الاستحقاق
والتحصيل نفس اللحظة). لكن لأي حاجة بتتفوتر الأول — اشتراكات، عضويات، إيجارات —
ده معناه إن الذمم المدينة ناقصة وفصل الفترات غلط.
**الصح:** الاستحقاق: مدين ذمم / دائن إيراد. التحصيل: مدين نقدية / دائن ذمم — **من غير** بند إيراد.
**٢ — مفيش أي بند مؤجل.**
كل الـ٧٢ بند `immediate`. "اشتراك سنوي" بيروح إيراد على طول.
كمان: بيروح على حساب **٤١٠٢٠١ اللي اسمه "اكاديمية البادل"** — إيراد الاشتراك
السنوي بينزل على حساب أكاديمية البادل.
**٣ — ٣٬٠٣٢٬٢٥٨ جنيه مقدمات عملاء مسجّلة كإيراد.**
| الكود | الاسم | النوع الحالي | الرصيد |
|---|---|---|---:|
| ٤١٠٥٠٣ | مقدم عضويه | **إيراد** | ٢٬٧٧٤٬٤٩٥٫٠٠ |
| ٤١٠٥٠٥ | باقى مقدم عضويه | **إيراد** | ١٨٠٬٢٦٣٫٠٠ |
| ٤١٠٥٠٤ | جزء من مقدم | **إيراد** | ٧٧٬٥٠٠٫٠٠ |
المقدم = فلوس مدينها خدمة لسه ما اتقدّمتش = **التزام**. وفيه أصلًا حساب صح موجود:
**٢٣٠٨١١١٥ ايرادات مدفوعة مقدما** (التزام، رصيده ٢٬١٣١٬٢٧٢). يعني نفس الحركة
بتتعامل بطريقتين مختلفتين.
### فرق مهم — التقسيمة نوعها إيه؟
```mermaid
flowchart TD
A["٢٠٪ تروح لصندوق كذا"] --> B{"الـ٢٠٪ دي إيه؟"}
B -->|"بتشتري خدمة مختلفة<br/>(جيم / حمام سباحة / لوكر)"| C["توزيع إيراد<br/>حسب معيار ٤٨<br/>✅ قسّم عادي"]
B -->|"تخصيص فلوس لصندوق"| D["تخصيص أرباح<br/>مش تصنيف إيراد"]
D --> E["❌ لو عملتها التزام<br/>الإيراد يقلّ"]
D --> F["✅ الصح: سجّل الإيراد كامل<br/>وبعدين قيد تخصيص منفصل<br/>مدين أرباح مرحّلة / دائن احتياطي"]
style C fill:#D1FAE5,stroke:#059669
style E fill:#FEE2E2,stroke:#DC2626
style F fill:#D1FAE5,stroke:#059669
```
---
## ١٨ — خريطة الشاشات
| الشاشة | المسار | بتعمل إيه |
|---|---|---|
| **محرك القيود** | `/accounting/revenue-mapping` | كل مصادر الإيراد وحالتها |
| **معالج التوزيع** | `…/{id}/wizard` | الويزارد — التقسيمة بالنطاق |
| **الوضع المتقدّم** | `…/{id}/edit` | كل الخيارات، أعقد |
| **مركز التوصيل** | `…/connections` | الموصّل والمش موصّل |
| **التشخيص** | `…/diagnostics` | المشاكل: header، بند باقي ناقص… |
| **الملفات الضريبية** | `…/tax-profiles` | معالجات الضريبة |
| **الإيراد المؤجل** | `…/recognition` | تشغيل الترحيل الشهري |
| **المطالبات** | `/accounting/billing` | تحصيل المستحقات |
| **السندات** | `/accounting/vouchers` | سندات صرف وقبض |
| **دليل الحسابات** | `/accounting/chart-of-accounts` | الشجرة، نقل، دمج، أرشفة |
---
## ملخص سريع للطباعة
```mermaid
flowchart RL
A["افتح<br/>وزّع على مجموعة"] --> B["اختار النطاق<br/>فئة / مصدر / الكل"]
B --> C["اختار المرحلة<br/>وفئة العضو"]
C --> D["حط المبلغ المرجعي<br/>والضريبة"]
D --> E["اقتطع الأجزاء<br/>وشوف الباقي"]
E --> F["حدد حساب الباقي<br/>إجباري"]
F --> G["راجع القيد<br/>لازم متوازن"]
G --> H["احفظ"]
style A fill:#DBEAFE,stroke:#2563EB
style H fill:#D1FAE5,stroke:#059669
```
**٣ حاجات لو افتكرتهم مش هتغلط:**
1. **النسبة من الصافي، مش من الباقي.** ٢٠٪ + ٣٠٪ = ٥٠٪ من المبلغ.
2. **بند "الباقي" إجباري** — هو اللي بيخلّي القيد متوازن دايمًا.
3. **فلوس مش بتاعتنا = تحصيل لحساب الغير**، مش إيراد.
---
*ملفات ذات صلة:*
- `docs/معالج-توزيع-المبالغ.md` — تفاصيل الويزارد
- `docs/كيف-أوصّل-أي-إيراد.md` — سيناريوهات لكل نوع إيراد
- `docs/دليل-المحاسبة-للاجتماع.md` — الدورة المحاسبية الكاملة
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment