# Approval Requests — ব্যবহারকারী গাইড

এই গাইড তাদের জন্য যারা **চলমান অনুমোদন কেস** দেখেন, Inbox থেকে Approve/Reject করেন, বা নিজের সাবমিট করা request ট্র্যাক করেন।

সম্পর্কিত: [Approval Workflows](./APPROVAL_WORKFLOW_USER_GUIDE_BN.md) · [Approval Settings](./APPROVAL_SETTINGS_USER_GUIDE_BN.md) · [Attendance](../attendance/ATTENDANCE_USER_GUIDE_BN.md) · [Payroll](../payroll/PAYROLL_USER_GUIDE_BN.md)

শর্টকাট:

> **Settings ON + Workflow → ইউজার কাজ করে → Request pending → My inbox / মডিউল Approvals পেজ → Approve বা Reject → Executor কাজ শেষ করে (executed)।**

---

## ১. এটা কী?

**Approval Request** = একটা নির্দিষ্ট কেসের রানটাইম রেকর্ড (যেমন “Payroll run #2 — 08/2026”)।

স্ট্যাটাস (সাধারণ):

| Status | মানে |
|--------|------|
| `pending` | অপেক্ষমাণ |
| `approved` | সব স্টেপ পাস |
| `executed` | ব্যবসায়িক কাজ শেষ (DB আপডেট) |
| `rejected` | প্রত্যাখ্যান |
| `cancelled` | বাতিল (প্রায়ই requester) |
| `failed` | এক্সিকিউশন ফেল |

```text
Submit (Gateway)
  → pending request + steps + approvers copy
  → Step N: approvers act (any/all)
  → সব স্টেপ OK → approved → Executor → executed
  → Reject যেকোনো স্টেপে → rejected (কাজ হয় না)
```

---

## ২. UI ম্যাপ ও লোকেশন

### ২.১ লিস্ট পেজ

পথ: **সাইডবার → Admin → Approval Requests**  
URL: `/admin/approval-requests`  
দেখতে: `platform.view`।

| জায়গা | কী |
|--------|-----|
| **উপরের ডান** | **Workflows** লিংক |
| ফিল্টার কার্ড **বাম** | ট্যাব: **My inbox** \| **All requests** |
| ফিল্টার কার্ড **ডান** | Status ড্রপডাউন |
| টেবিল | Title · Requester · Status · Submitted |
| Title ক্লিক বা সারির **ডান Eye** | **ডানদিকে Drawer** খোলে (`?request=uuid`) |

**My inbox** = আপনি যেসব pending step-এ **active approver**।  
**All requests** = কোম্পানির বিস্তৃত তালিকা (অ্যাডমিন ভিউ)।

### ২.২ Request Drawer (ডিটেইল)

| জায়গা | কী |
|--------|-----|
| Drawer **উপর** | Title + Status ব্যাজ |
| উপরের ফ্যাক্ট গ্রিড | Module · permission_key · Requester · Submitted · Executed |
| **Approval steps** সেকশন | Step 1, 2… · mode/completion · প্রতি স্টেপের approver লিস্ট + তাদের status |
| Payload / comments | নিচের দিকে (থাকলে) |
| অ্যাকশন এলাকা (আপনি act করতে পারলে) | Comment বক্স · **Approve** · **Reject** · Delegate · Cancel (requester) |
| Drawer **ফুটার** | Close |

Approve তখনই দেখা যায় যখন: request `pending` **এবং** কোনো pending step-এ আপনার ইউজার `pending` approver।

### ২.৩ মডিউল পেজ vs Inbox (দুই রাস্তা)

| কেস | মডিউল UI | Inbox |
|-----|----------|-------|
| Leave | `/attendance/leave/approvals/:id` | একই request |
| Correction | `/attendance/corrections/approvals/:id` | একই |
| Monthly | `/attendance/monthly-approval/:id` | সেটিং অনুযায়ী |
| Payroll run | `/payroll/payroll-runs/:id/approval` — **ডান** Approval Decision কার্ড | একই |
| Salary advance | Advances ডিটেইল/ড্রয়ার | একই |

যেকোনো এক জায়গা থেকে সিদ্ধান্ত দিলে স্ট্যাটাস দুই জায়গায়ই আপডেট হওয়ার কথা।

---

## ৩. ধাপে ধাপে — Approver ফ্লো

1. লগইন — সঠিক **কোম্পানি**।  
2. **Approval Requests → My inbox** (অথবা মডিউল Approvals মেনু)।  
3. Title / Eye → Drawer।  
4. Steps ও payload পড়ুন।  
5. (ঐচ্ছিক) Comment।  
6. **Approve** বা **Reject**।  
7. Reject-এ কারণ রাখা ভালো।  
8. সাকসেস → লিস্ট রিফ্রেশ; ব্যবসায়িক রেকর্ড আপডেট (executed)।

Delegate: অন্য ইউজারকে পাঠানো (UI Delegate সেকশন) — পারমিশন/নিয়ম অনুযায়ী।

---

## ৪. ধাপে ধাপে — Requester ফ্লো

1. মডিউলে কাজ করুন (Leave apply, Generate payslips, ইত্যাদি)।  
2. Settings ON থাকলে সাথে execute না হয়ে **pending** request।  
3. **All requests** বা নিজের সাবমিট ট্র্যাক।  
4. নিয়মমতো **Cancel** (আপনি requester + এখনো pending)।  
5. Approve হলে রেকর্ড Done/Approved দেখাবে।

---

## ৫. Permission টেবিল — বিস্তারিত

### প্ল্যাটফর্ম লিস্ট/ড্রয়ার

| কাজ | Permission / শর্ত |
|-----|-------------------|
| Requests পেজ খোলা | `platform.view` |
| Inbox-এ কেস দেখা | আপনি সেই request-এর pending approver |
| Drawer-এ Approve/Reject | একই + সংশ্লিষ্ট মডিউল `*-approve` (ব্যবসায়িক API) |
| Cancel | সাধারণত requester |
| Delegate | ফিচার + পারমিশন নিয়ম |

### কোন request ≈ কোন মডিউল পারমিশন

| Request উদাহরণ (title/action) | Approver permission | Requester (উদাহরণ) |
|------------------------------|---------------------|---------------------|
| Leave approve | `attendance.leave-approve` | `attendance.leave-apply` |
| Correction approve | `attendance.correction-approve` (+ লকে `correction-override-lock`) | `attendance.correction-create` |
| Monthly approve | `attendance.monthly-approve` | Monthly build/view পারমিশন |
| Payroll run #N | `payroll.run-approve` | `payroll.run-create` (+ generate) |
| Salary advance | `payroll.advance-approve` | `payroll.advance-manage` |
| Employee create/update/delete | `employee.create` / `update` / `delete` (অ্যাক্টর রোল অনুযায়ী) | একই CRUD পারমিশন |

### কেন বাটন দেখা যায় না (চেকলিস্ট)

| চেক | |
|-----|--|
| ১ | Settings-এ action **Enabled**? |
| ২ | Workflow বাঁধা + step-এ আপনার **role/user**? |
| ৩ | আপনার অ্যাকাউন্টে `*-approve` পারমিশন? |
| ৪ | Request স্ট্যাটাস `pending`? |
| ৫ | সঠিক কোম্পানি / সঠিক ইমেইল লগইন? |
| ৬ | Payroll: generation complete + open request? ([Payroll FAQ](../payroll/PAYROLL_USER_GUIDE_BN.md)) |

---

## ৬. পূর্ণ এন্ড-টু-এন্ড উদাহরণ (Payroll Run)

```text
1) Admin: Workflow "Payroll Run Approve" + role Pippa Admin
2) Admin: Settings → payroll run-approve → workflow → Enable
3) Ops: Freeze → Create Run → Snapshots → Generate Payslips
4) System: correlation payroll_run:{id} দিয়ে Request pending
5) Approver: Inbox বা Run → Approval → ডান Approve
6) Executor: run approved, payslips finalized
7) Finance: Disbursement…
```

Leave/Correction একই প্যাটার্ন — শুধু মডিউল UI আলাদা।

---

## ৭. FAQ

**প্রশ্ন: Inbox খালি কিন্তু অন্যজন দেখছে।**  
→ আপনি approver লিস্টে নেই; ভুল ইউজার; অথবা All requests-এ আছে Inbox-এ নয়।

**প্রশ্ন: Approve চাপলে ফেল।**  
→ পারমিশন; অন্য কেউ আগে act করেছে; step completion_rule; নেটওয়ার্ক এরর।

**প্রশ্ন: Approved কিন্তু ব্যবসায়িক স্ট্যাটাস বদলায়নি।**  
→ `failed` / execution_failed — Activity/audit দেখুন; সাপোর্ট।

**প্রশ্ন: মডিউল পেজে Approve আছে, Inbox-এ নেই (বা উল্টো)।**  
→ দুটোই এক request; পারমিশন রাউট আলাদা (`platform.view` vs মডিউল approve)। দুটোই কাজ করতে পারে যদি canAct শর্ত মিলে।

**প্রশ্ন: “No open approval request” (Payroll)।**  
→ Settings OFF ছিল generate-এর সময়; বা requester/actor ০; বা correlation মিলেনি — [Settings](./APPROVAL_SETTINGS_USER_GUIDE_BN.md) + আবার submit/generate ফ্লো।

**প্রশ্ন: Comment কি বাধ্যতামূলক?**  
→ Approve প্রায়ই ঐচ্ছিক; Reject-এ UI/নিয়ম অনুযায়ী কারণ রাখুন।

**প্রশ্ন: Version কী?**  
→ Request শুরুতে workflow version লক — পরে workflow এডিট করলে পুরনো কেস পুরনো স্টেপ ধরে।

---

## ৮. এক লাইন

> **Inbox = আপনার অপেক্ষমাণ সিদ্ধান্ত · Approve শুধু তখনই যখন আপনি সেই step-এর pending approver · Settings OFF হলে Request-ই খোলে না।**
