# Payroll – PF ও VAT Chart of Accounts ও Journal Entry প্ল্যান

## ১. ব্যবহার করা অ্যাকাউন্ট (Chart of Accounts)

নিচের অ্যাকাউন্টগুলো `getOrCreateAccount` দিয়ে থাকলে ব্যবহার করব, না থাকলে ক্রিয়েট করব।

| Account Name        | Type     | Code Prefix | ব্যবহার |
|---------------------|----------|-------------|---------|
| Salary Expense      | Expense  | 4000        | কোম্পানির স্যালারি খরচ (নেট যে টাকা এমপ্লয়ি পায়) |
| Salary Payable      | Liability| 2000        | এমপ্লয়িকে দেয়ার বাকি (নেট স্যালারি + লোন রিকভারি) |
| PF Payable (Employee) | Liability | 2010     | **নতুন** – এমপ্লয়ির কাটা PF জমা (প্রদানের আগ পর্যন্ত) |
| PF Payable (Company)  | Liability | 2011     | **নতুন** – কোম্পানির PF জমা (প্রদানের আগ পর্যন্ত) |
| PF Expense          | Expense  | 4010        | **নতুন** – কোম্পানির PF খরচ |
| Tax / VAT Payable   | Liability| 2020        | **নতুন** – ট্যাক্স/ভ্যাট দায় (যদি থাকে) |
| Employee Advance    | Asset    | 1100        | লোন/অ্যাডভান্স (ইতিমধ্যে আছে) |

---

## ২. পে-রোলের সংখ্যা (পরিভাষা)

- **Gross (টোটাল খরচ):**  
  নেট স্যালারি + এমপ্লয়ি PF + কোম্পানি PF + লোন রিকভারি (+ ট্যাক্স যদি কোম্পানি ব bears করে)।  
  অথবা সহজে: **নেট স্যালারি + লোন রিকভারি** = যে টাকা “স্যালারি পেবল” হিসেবে দেখা যায় (এমপ্লয়িকে নেট পে + লোন কাটা)।
- **Net Salary:** এমপ্লয়ির হাতে যাওয়া (ইতিমধ্যে হিসাব আছে)।
- **PF Employee:** এমপ্লয়ির অংশ (স্যালারি থেকে কাটা) → PF Payable (Employee)।
- **PF Company:** কোম্পানির অংশ → PF Expense + PF Payable (Company)।
- **Tax/VAT:** ট্যাক্স অ্যামাউন্ট (পে-রোল থেকে) → Tax/VAT Payable।

---

## ৩. কখন কী এন্ট্রি (Process vs Pay)

### ৩.১ প্রসেস করার সময় (Draft → Processed)

একটা পে-রোল প্রসেস করলে নিচের এন্ট্রিগুলো অটো তৈরি হবে।

| # | Description | Debit Account | Credit Account | Amount |
|---|-------------|---------------|----------------|--------|
| 1 | স্যালারি খরচ (নেট যে এমপ্লয়ি পাবে) | Salary Expense | Salary Payable | net_salary + loan_deduction |
| 2 | এমপ্লয়ির PF জমা | Salary Expense (অথবা আলাদা PF Expense যদি চান) | PF Payable (Employee) | pf_employee_contribution |
| 3 | কোম্পানির PF খরচ ও দায় | PF Expense | PF Payable (Company) | pf_company_contribution |
| 4 | ট্যাক্স/ভ্যাট (যদি থাকে) | Salary Expense (অথবা Tax Expense) | Tax/VAT Payable | tax_amount |
| 5 | লোন রিকভারি (ইতিমধ্যে আছে) | Salary Payable | Employee Advance | loan_deduction |

**বিকল্প (সিম্পল):**  
শুধু “নেট পে + লোন” দিয়ে আগের মতো এক এন্ট্রি রাখতে চাইলে:  
- **একটা এন্ট্রি:** Dr. Salary Expense, Cr. Salary Payable = (net_salary + loan_deduction)।  
তার উপরে আলাদা আলাদা:  
- Dr. Salary Expense, Cr. PF Payable (Employee) = pf_employee  
- Dr. PF Expense, Cr. PF Payable (Company) = pf_company  
- Dr. Salary/Tax Expense, Cr. Tax Payable = tax_amount  

এভাবে টোটাল এক্সপেন্স = নেট স্যালারি + এমপ্লয়ি PF + কোম্পানি PF + ট্যাক্স; লায়াবিলিটি ভাগ ভাগ দেখাবে।

### ৩.২ পে করার সময় (Processed → Paid)

এমপ্লয়িকে নেট পে করলে:

| # | Description | Debit Account | Credit Account | Amount |
|---|-------------|---------------|----------------|--------|
| 1 | স্যালারি পে (নেট) | Salary Payable | Bank/Cash (payment_account_id) | paid_amount |

PF/Tax আলাদা পে করলে (পরে):

| # | Description | Debit Account | Credit Account | Amount |
|---|-------------|---------------|----------------|--------|
| 1 | PF জমা ব্যাংকে পাঠানো | PF Payable (Employee) | Bank/Cash | amount |
| 2 | PF জমা ব্যাংকে পাঠানো | PF Payable (Company) | Bank/Cash | amount |
| 3 | ট্যাক্স পে | Tax/VAT Payable | Bank/Cash | amount |

এগুলো পে-রোল “পে” স্ট্যাটাসের সময় অটো না করে, আলাদা “PF Payment” / “Tax Payment” ফ্লোতে করলেও হয়; প্ল্যান শুধু চার্ট অফ অ্যাকাউন্টস ও এন্ট্রি লজিক।

---

## ৪. ইমপ্লিমেন্টেশন স্টেপ (সংক্ষেপে)

1. **অ্যাকাউন্ট:**  
   `PayrollController` এ `getOrCreateAccount` দিয়ে নিশ্চিত করা:
   - PF Payable (Employee) – 2010  
   - PF Payable (Company) – 2011  
   - PF Expense – 4010  
   - Tax/VAT Payable – 2020 (যদি VAT/ট্যাক্স ইউজ করেন)

2. **প্রসেস (Accrual) এ:**  
   শুধু একটা Salary Expense vs Salary Payable এর বদলে/পাশাপাশি:
   - net_salary + loan_deduction দিয়ে আগের এন্ট্রি (অথবা ভাগ করে নেট অংশ শুধু Salary এ)।
   - pf_employee_contribution > 0 হলে: Dr. Salary Expense (অথবা PF Expense), Cr. PF Payable (Employee)।
   - pf_company_contribution > 0 হলে: Dr. PF Expense, Cr. PF Payable (Company)।
   - tax_amount > 0 হলে: Dr. Salary/Tax Expense, Cr. Tax/VAT Payable।
   - লোন রিকভারি এন্ট্রি আগের মতো।

3. **পে (Disbursement) এ:**  
   শুধু স্যালারি পে: Dr. Salary Payable, Cr. Bank/Cash = paid_amount।  
   PF/Tax পে আলাদা মডিউল বা লATER স্টেপে।

4. **VAT:**  
   পে-রোল জেনারেশনে যদি VAT অ্যামাউন্ট থাকে (যেমন ট্যাক্স ফিল্ড), তাহলে উপরের Tax/VAT Payable এন্ট্রি দিয়েই chart of account এ hit হবে। আলাদা “VAT” ফিল্ড থাকলে সেই অ্যামাউন্ট একই Tax/VAT Payable অ্যাকাউন্টে ক্রেডিট করলেই হবে।

---

## ৫. সংক্ষেপ

- **PF:** User টেবিল থেকে নেওয়া ঠিক আছে; প্রসেস করার সময় PF Payable (Employee), PF Payable (Company), PF Expense – এই অ্যাকাউন্টে জার্নাল এন্ট্রি অটো তৈরি করলেই chart of account এ perfectly hit হবে।
- **VAT/Tax:** Tax/VAT Payable অ্যাকাউন্ট নিয়ে, প্রসেসের সময় tax_amount (ও প্রয়োজন হলে VAT) এর জন্য Dr. Expense, Cr. Tax/VAT Payable এন্ট্রি অটো করলেই chart of account এ hit হবে।
- **পে:** স্যালারি পে = শুধু Salary Payable vs Bank; PF/Tax পে = PF Payable / Tax Payable vs Bank (আলাদা ট্রানজ্যাকশন বা পরের স্টেপে)।

এই প্ল্যান অনুযায়ী `PayrollController` এ getOrCreateAccount ও Transaction::create গুলো যোগ/আপডেট করলেই হবে।
