# কমিশন মডিউল — ব্যবহারকারী গাইড

এই গাইড তাদের জন্য যারা প্রতিদিন প্রজেক্ট/কন্ট্রাক্ট/কমিশন নিয়ে কাজ করেন, কিন্তু কোড বা সিস্টেম আর্কিটেকচার জানার দরকার নেই।

পড়ার পর আপনি বুঝতে পারবেন:

- প্রজেক্ট, কন্ট্রাক্ট আর কমিশন একে অপরের সাথে কীভাবে জড়িত  
- স্ক্রিনে কোথায় গিয়ে কী করতে হবে  
- **কোন কাজের পর কোন কাজ** — পুরো ফ্লো শুরু থেকে শেষ পর্যন্ত  
- সাধারণ এরর দেখলে কী বোঝায়, কী করতে হয়  

শর্টকাট মনে রাখুন:

> **আগে টিম ও শেয়ার ঠিক → তারপর পেমেন্ট ক্লিয়ার → তারপর Calculate → Approve → Post → শেষে বেতনের সাথে বা আলাদা করে পেমেন্ট।**

---

## ১. গল্পটা এক নজরে

ক্লায়েন্টের কাজ একটা **Project**-এর নিচে থাকে। সেই কাজের চুক্তি হলো **Contract** — এখানেই চুক্তির মূল্য, কারেন্সি, টিম, আর কমিশনের নিয়ম থাকে।

ক্লায়েন্ট টাকা দিলে (ক্লিয়ার হলে) সিস্টেম হিসাব করে: এই কিস্তির টাকার কতটা টিমের পুলে যাবে, তারপর কোন মেম্বার কত % পাবে। এটাই **Commission**।

তাই কমিশন আলাদা জাদু নয় — এটা কন্ট্রাক্টের সেটিং + পেমেন্ট ক্লিয়ারের উপর দাঁড়ায়।

```text
Project  (কাজের ছাতা)
   └── Contract  (চুক্তি — মূল্য, টিম, পলিসি, পেমেন্ট)
          ├── Team Assignment   → কে আছে, কত %, টিম শেয়ার কত
          ├── Payments          → কত টাকা ক্লিয়ার হলো
          └── Commission Run    → হিসাব → অনুমোদন → পোস্ট → পেআউট
```

**মনে রাখবেন:** কমিশনের আসল “বাড়ি” হলো **Contract**। Project শুধু সেই কন্ট্রাক্টকে ধরে রাখে।

---

## ২. সম্পর্কগুলো সহজ ভাষায়

### Project আর Contract
এক প্রজেক্টের নিচে একাধিক কন্ট্রাক্ট থাকতে পারে।  
কমিশন সেটআপ, টিম, পেমেন্ট ক্লিয়ার — সব **কন্ট্রাক্ট খুলে** করতে হয়।

### Team Assignment — দুই আলাদা জিনিস
এখানে অনেকে গুলিয়ে ফেলেন। দুটো আলাদা:

| জিনিস | মানে | না থাকলে কী হয় |
|--------|------|------------------|
| **মেম্বার + তার Commission %** | কে টিমে, টিম পুলের কত ভাগ পাবে | Calculate-এ কেউ নাও থাকতে পারে / skip |
| **টিম শেয়ার (Commission share)** | চুক্তির/ক্লিয়ার টাকার কত % টিম পুলে যাবে | Calculate-এ এরর: *Commission share not found…* |

শুধু মেম্বার যোগ করলেই শেয়ার সেভ হয় না। **Team Assignment ট্যাবে শেয়ার/ডিস্ট্রিবিউশনও সেভ করতে হবে।**

মেম্বারের **Duration**:

- `one_time` — সাধারণত একবারের মতো উইন্ডো (এক ক্লিয়ারে পেতে পারে, পরে স্কিপ হতে পারে)  
- `lifetime` — চুক্তি চলাকালীন প্রাসঙ্গিক ক্লিয়ারগুলোতে থাকতে পারে  

এখানেই **কমিশন পলিসি**ও সেট হয় — যেমন ডিফল্টভাবে বেতনের সাথে নাকি আলাদা পেমেন্ট (`with_salary` / `separate`)।

### Payment Clear
ক্লায়েন্ট থেকে টাকা এলে **Payments** ট্যাবে “payment cleared” রেকর্ড করেন।  
প্রতিটি ক্লিয়ার = একটি **Commission Run** (প্রথমে Draft)।

একই রেফারেন্স দিলে পুরনো ক্লিয়ার আপডেট হয়; নতুন কিস্তি হলে **নতুন রেফারেন্স** দিন।

### Commission Run → Payout
রানকে ফাইনাল করতে হয়:

**Calculate → Approve → Post**

Post-এর পর দুই রাস্তা:

| মোড | সহজ অর্থ | পরের কাজ |
|------|----------|----------|
| **With salary** | বেতনের সাথে কমিশন | Payroll payslip-এ Commission লাইন |
| **Separate** | বেতন ছাড়া আলাদা পেমেন্ট | Payments-এ **Mark paid** → ব্যাংক পেআউট ডকুমেন্ট |

---

## ৩. স্ক্রিনে কোথায় যাবেন

### মূল জায়গা — Contracts
1. মেনু থেকে **Projects → Contracts**  
2. কন্ট্রাক্ট সিলেক্ট করুন — ডানদিকে/drawer খুলবে  
3. ট্যাব:
   - **Overview** — মূল্য, কারেন্সি, স্ট্যাটাস দেখুন  
   - **Team Assignment** — টিম, %, শেয়ার, পলিসি — **এখান থেকেই শুরু**  
   - **Payments** — ক্লিয়ার রেকর্ড + Calculate / Approve / Post / Mark paid  

দৈনন্দিন কমিশনের বেশিরভাগ কাজ **এই Payments ট্যাবেই** শেষ করা যায়।

### অতিরিক্ত (দরকার হলে)
- **Commissioning → Runs** — সব রানের তালিকা / বিস্তারিত  
- **Payroll** — `with_salary` হলে payslip দেখতে  
- Separate payout কিউ (মেনুতে থাকলে) — অথবা সরাসরি Payments থেকে Mark paid  

বাটন না দেখলে সাধারণত পারমিশনের বিষয় — অ্যাডমিনকে বলুন।

---

## ৪. পুরো ফ্লো — কোনটার পর কোনটা

নিচের অর্ডার ভাঙবেন না। আগে সেটআপ না করে Calculate চাপলেই এরর বা ভুল হিসাব আসতে পারে।

### ধাপ ০ — একবার সেটআপ (প্রতি নতুন কন্ট্রাক্ট)

1. কন্ট্রাক্ট তৈরি বা খুলুন; Overview-এ মূল্য ও কারেন্সি ঠিক আছে কিনা দেখুন।  
2. **Team Assignment** ট্যাবে যান।  
3. টিম মেম্বার যোগ করুন — প্রত্যেকের:
   - Commission %  
   - Duration (`one_time` / `lifetime`)  
4. **টিম শেয়ার / Commission distribution সেভ করুন** (টিম পুল কত % — এটা বাধ্যতামূলক)।  
5. কমিশন পলিসি সেভ করুন (ডিফল্ট payout: with salary নাকি separate)।  
6. একবার চেক: মেম্বার % ও শেয়ার লজিক্যাল লাগে কিনা।

> **জরুরি:** শুধু নাম যোগ করে Save করলেই হবে না। শেয়ার না থাকলে পরে Calculate-এ সিস্টেম বলবে — *Commission share not found…* ইউজার-ফ্রেন্ডলি না, কিন্তু মানে হলো: “এই কন্ট্রাক্টে এখনও টিম শেয়ার সেট নেই / এই তারিখের জন্য নেই।”  
> সমাধান: Team Assignment-এ শেয়ার সেভ করে আবার Calculate।

### ধাপ ১ — পেমেন্ট ক্লিয়ার (প্রতি কিস্তি)

1. একই কন্ট্রাক্ট → **Payments**  
2. **Record payment cleared**  
3. ফর্ম:
   - **Amount** — এই কিস্তিতে ক্লিয়ার হওয়া টাকা  
   - **Date**  
   - **Reference** — সাজেস্টেড রেফারেন্স ভালো; নতুন কিস্তি = নতুন রেফারেন্স  
   - **Payout override** (ঐচ্ছিক) — এই ক্লিয়ারটা with salary নাকি separate; খালি রাখলে পলিসির ডিফল্ট  
4. Save → একটি **Draft** কমিশন রান তৈরি হয়। তালিকায় রান লিঙ্ক/স্ট্যাটাস দেখতে পাবেন।

এখনও টাকা “পেইড” হয়নি — শুধু হিসাবের দরজা খুলেছে।

### ধাপ ২ — হিসাব ও ফাইনাল (প্রতি ক্লিয়ার / রান)

Payments রোতে (বা Runs পেজে) ধারাবাহিকভাবে:

```text
Calculate  →  Approve  →  Post
```

| ধাপ | আপনি কী করছেন | সিস্টেম কী করে |
|------|----------------|----------------|
| **Calculate** | হিসাব চালান | মেম্বার ভাগ বের করে **ফ্রিজ** করে |
| **Approve** | ম্যানেজার ঠিক আছে বলেন | স্ট্যাটাস Approved |
| **Post** | ফাইনাল লক | পেআউট কিউ তৈরি; রান আর বদলানো যায় না |

Calculate-এর পর রো এক্সপ্যান্ড করে মেম্বার নাম, %, অ্যামাউন্ট দেখে নিন। ভুল থাকলে **Post-এর আগেই** টিম/শেয়ার ঠিক করে আবার Calculate।

**Post-এর পর** Calculate / Approve / Post আবার চলবে না। ইচ্ছে করেও পুরনো রান এডিট করা যাবে না — ইতিহাস অপরিবর্তনীয় রাখার জন্য।

### ধাপ ৩ক — যদি payout = With salary

1. Post হয়ে গেলে সিস্টেম Payroll-এর জন্য কমিশন কিউ করে।  
2. সংশ্লিষ্ট মাসের **Payroll run** চালিয়ে payslip জেনারেট করুন।  
3. Payslip-এ দেখবেন অনেকটা এমন:

```text
Salary         ……
Commission     ……
─────────────────
Gross          ……
```

একই কমিশন দুইবার payslip-এ যাবে না। Draft payslip আবার জেনারেট করলেও ডুপ্লিকেট হবে না।

Payslip-এ কমিশন না দেখলে চেক করুন: রান কি Post হয়েছে? মোড কি সত্যি `with_salary`? সঠিক মাসের payroll run কি?

### ধাপ ৩খ — যদি payout = Separate

1. Post-এর পর Payments-এ সেই রো **এক্সপ্যান্ড** করুন।  
2. **Separate payout** সেকশনে দেখবেন Unpaid / pending।  
3. **Mark paid** চাপুন (শুধু Post-এর পরেই বাটন কাজ করে)।  
4. সিস্টেম একটি **Bank payout document** রেকর্ড করে (অডিট/রেফারেন্সের জন্য)।  
5. একই লাইন আবার Mark paid করা যাবে না।

Post না করে Mark paid চাইলে — আলাদা পেআউট লাইনই দেখাবে না বা কাজ করবে না। আগে Approve → Post।

---

## ৫. টাকা কীভাবে ভাগ হয় (উদাহরণসহ)

প্রতিটি **পেমেন্ট ক্লিয়ার** আলাদা হিসাব — পুরো কন্ট্রাক্টের টাকা একবারে আবার গুনে না।

```text
এই ক্লিয়ারের টাকা
    × টিম শেয়ার %
    = এই ক্লিয়ারের টিম পুল

টিম পুল
    × মেম্বারের Commission %
    = সেই মেম্বারের কমিশন
```

উদাহরণ:

- ক্লিয়ার = ৪০  
- টিম শেয়ার = ৩০% → পুল = ১২  
- একজন মেম্বার ১০০% → তার কমিশন = ১২  

পরে আরেকটা ক্লিয়ার ৬০ হলে আলাদা রান — আগের ১২ মুছে যায় না, নতুন হিসাব আলাদা।

তাই **শেয়ার %** না থাকলে সিস্টেম পুলই বের করতে পারে না — সেখান থেকেই “share not found” এরর।

---

## ৬. Payout override — কখন ব্যবহার করবেন

ক্লিয়ার রেকর্ড করার সময় চাইলে এই ক্লিয়ারের জন্য পলিসি ওভাররাইড করতে পারেন:

- **With salary** — এই কিস্তি বেতনের সাথে  
- **Separate** — এই কিস্তি আলাদা পেমেন্ট  
- খালি — কন্ট্রাক্টের ডিফল্ট পলিসি  

Override **Calculate**-এর সময় রানে লক হয়ে যায়। পরে Team Assignment-এ পলিসি বদলালেও **পুরনো রান বদলায় না** — ইতিহাস ঠিক রাখতে।

---

## ৭. দৈনন্দিন চেকলিস্ট

### নতুন কন্ট্রাক্ট শুরু করার সময়
- [ ] Overview — মূল্য, কারেন্সি ঠিক  
- [ ] Team Assignment — মেম্বার + % + duration  
- [ ] **টিম শেয়ার / commission share সেভ হয়েছে**  
- [ ] কমিশন পলিসি / ডিফল্ট payout ঠিক  

### প্রতি কিস্তি টাকা এলে
- [ ] Payments → Record payment cleared  
- [ ] নতুন কিস্তি হলে নতুন Reference  
- [ ] Calculate → মেম্বার ভাগ চোখে দেখে নিন  
- [ ] Approve → Post  

### Post-এর পর শেষ কাজ
- [ ] **With salary:** Payroll payslip-এ Commission আছে  
- [ ] **Separate:** Mark paid হয়েছে; payout document আছে  

---

## ৮. সাধারণ সমস্যা — কী বোঝায়, কী করবেন

| আপনি যা দেখছেন | আসলে কী | কী করবেন |
|----------------|---------|----------|
| *Commission share not found for contract…* | এই কন্ট্রাক্টে (ওই তারিখ পর্যন্ত) টিম শেয়ার সেভ নেই | Team Assignment → শেয়ার সেভ → আবার Calculate |
| Calculate-এ কেউ নেই / সবাই skip | মেম্বার নেই, % নেই, বা duration/eligibility বাইরে | Team Assignment ঠিক করে Calculate |
| একই রেফারেন্সে নতুন ক্লিয়ার হচ্ছে না | একই reference = আপডেট, নতুন কিস্তি নয় | নতুন কিস্তিতে নতুন reference |
| Mark paid বাটন নেই / লাইন খালি | রান এখনও Post হয়নি | Approve → Post, তারপর Mark paid |
| Mark paid দুইবার চায় / এরর | ইতিমধ্যে Paid | Paid স্ট্যাটাস দেখুন — আবার লাগবে না |
| Payslip-এ Commission নেই | separate মোড, বা Post হয়নি, বা ভুল মাসের payroll | মোড + Post + সঠিক মাস চেক |
| Post-এর পর টাকা বদলাতে চাই | Posted রান লক | পুরনো রান এডিট নয়; নতুন প্রসেস/ক্লিয়ার ভাবুন |

টেকনিক্যাল বার্তায় `company [1]`, `contract [2]`, তারিখ — ইউজারের দরকার নেই। গুরুত্বপূর্ণ অংশ: **কোন কন্ট্রাক্ট**, আর **শেয়ার সেট আছে কি না**।

---

## ৯. কে সাধারণত কী করেন

| কাজ | সাধারণত কে |
|-----|------------|
| Team Assignment / শেয়ার / পলিসি | Project / Ops |
| Payment cleared রেকর্ড | Project বা Finance ops |
| Calculate | Ops / Commission |
| Approve | Manager |
| Post | অনুমোদিত ইউজার |
| Mark paid (separate) | Finance / Ops |
| Payslip (with salary) | Payroll |

কোম্পানিভেদে বাটন আলাদা দেখা যেতে পারে। বাটন মিসিং হলে অ্যাডমিনকে পারমিশন চেক করতে বলুন।

---

## ১০. শেষ কথা — এক লাইনের সূত্র

> **টিম + শেয়ার সেভ → পেমেন্ট ক্লিয়ার → Calculate → Approve → Post → with salary হলে payslip, separate হলে Mark paid।**

এই অর্ডার ধরলে মডিউল মসৃণ চলবে। আটকে গেলে প্রথমে দেখুন: **Team Assignment-এ শেয়ার সেভ আছে তো?** — বেশিরভাগ Calculate এরর এখান থেকেই আসে।

---

## অতিরিক্ত পড়া (ঐচ্ছিক)

যারা বিজনেস রুল বা ইঞ্জিন স্ট্যাটাস আরও গভীরে দেখতে চান:

- `COMMISSIONING_STATUS_AND_GAPS.md`  
- `PMS_Commission_Business_Logic_BN.md` / `_EN.md`  

সম্পর্কিত ইউজার গাইড:

- [Project Management](../PROJECT_USER_GUIDE_BN.md) · [Payroll](../../payroll/PAYROLL_USER_GUIDE_BN.md)  

দৈনন্দিন ব্যবহারের জন্য **এই গাইডই যথেষ্ট**।
