1. Home
  2. Attendance Management Sys...
  3. Backend
  4. Leave Management

Leave Management

একটি গল্পের মাধ্যমে একটি কমপ্লেক্স লিভ ম্যানেজমেন্ট সিস্টেমের ধারণা দিতে চেষ্টা করি।

গল্প: “টেকসফট সলিউশনস” কোম্পানি

টেকসফট সলিউশনস একটি মাঝারি আকারের সফটওয়্যার ডেভেলপমেন্ট কোম্পানি, যেখানে ২০০ জন কর্মী কাজ করে। কোম্পানিটি বিভিন্ন বিভাগে বিভক্ত, যেমন ডেভেলপমেন্ট, মার্কেটিং, এইচআর, এবং সাপোর্ট। কোম্পানির একটি জটিল লিভ ম্যানেজমেন্ট সিস্টেমের প্রয়োজন, যা কর্মীদের বিভিন্ন ধরনের ছুটি এবং অনুমোদন প্রক্রিয়া সহজ করবে।

প্রয়োজনীয়তা:

  1. বিভিন্ন ধরনের ছুটি: কর্মীরা বিভিন্ন ধরনের ছুটির জন্য আবেদন করতে পারেন, যেমন বার্ষিক ছুটি, অসুস্থতার ছুটি, মাতৃত্ব/পিতৃত্ব ছুটি, শিক্ষাগত ছুটি, এবং বিনা বেতনে ছুটি।
  2. ছুটির নীতি ও নিয়মাবলী: প্রতিটি ছুটির ধরন অনুযায়ী বিভিন্ন নীতি প্রযোজ্য। যেমন:
    • বার্ষিক ছুটি: প্রতি বছর নির্দিষ্ট সংখ্যক দিন।
    • অসুস্থতার ছুটি: মেডিকেল সনদ প্রয়োজন হতে পারে।
    • মাতৃত্ব ছুটি: আইনগতভাবে নির্ধারিত সময়সীমা।
    • শিক্ষাগত ছুটি: ব্যবস্থাপনার অনুমোদন প্রয়োজন।
  3. ছুটি জমা হওয়া: অব্যবহৃত বার্ষিক ছুটি পরবর্তী বছরে জমা হতে পারে কি না, এবং কতদিন পর্যন্ত।
  4. ছুটির ব্যালেন্স ট্র্যাকিং: প্রতিটি কর্মীর ছুটির ব্যালেন্স সিস্টেমে দেখা যাবে, যা স্বয়ংক্রিয়ভাবে আপডেট হবে।
  5. অ্যাপ্লিকেশন ও অনুমোদন প্রক্রিয়া:
    • প্রথম ধাপ: কর্মী অনলাইনে ছুটির আবেদন করবেন, যেখানে ছুটির ধরন, তারিখ, কারণ উল্লেখ করবেন।
    • দ্বিতীয় ধাপ: তার সরাসরি সুপারভাইজার আবেদনটি পর্যালোচনা করবেন। সুপারভাইজার নিম্নলিখিত কাজ করতে পারেন:
      • আবেদন অনুমোদন বা প্রত্যাখ্যান করা।
      • ছুটির তারিখ পরিবর্তন করার সুপারিশ।
      • বিকল্প কর্মীর ব্যবস্থা করা।
    • তৃতীয় ধাপ: সুপারভাইজারের অনুমোদনের পরে, আবেদনটি এইচআর বিভাগের কাছে যাবে। এইচআর বিভাগ:
      • নীতি অনুযায়ী আবেদন যাচাই করবেন।
      • প্রয়োজনীয় ডকুমেন্ট চেক করবেন (যদি থাকে)।
      • ফাইনাল অনুমোদন বা প্রত্যাখ্যান করবেন।
  6. বিজ্ঞপ্তি ও নোটিফিকেশন:
    • প্রতিটি ধাপে ইমেইল ও সিস্টেম নোটিফিকেশন পাঠানো হবে।
    • ছুটি অনুমোদিত বা প্রত্যাখ্যাত হলে কর্মীকে জানানো হবে।
  7. ক্যালেন্ডার ইন্টিগ্রেশন:
    • অনুমোদিত ছুটি স্বয়ংক্রিয়ভাবে টিম ক্যালেন্ডারে যুক্ত হবে।
    • টিমের অন্য সদস্যরা জানতে পারবেন কে কখন ছুটিতে আছে।
  8. রিপোর্টিং ও অ্যানালিটিক্স:
    • বিভিন্ন সময়সীমায় ছুটির রিপোর্ট জেনারেট করা যাবে।
    • বিভাগ অনুযায়ী ছুটির প্রবণতা বিশ্লেষণ করা যাবে।
    • আইনগত ও কোম্পানির নীতির সাথে সামঞ্জস্য রাখার জন্য অডিট লগ থাকবে।
  9. ছুটি পরিবর্তন ও বাতিলকরণ:
    • কর্মী বা সুপারভাইজার বিশেষ পরিস্থিতিতে ছুটি পরিবর্তন বা বাতিল করতে পারবেন।
    • এর জন্য আলাদা অনুমোদন প্রক্রিয়া থাকবে।
  10. মাল্টি-লেভেল অনুমোদন:
    • কিছু ছুটির জন্য একাধিক পর্যায়ে অনুমোদন দরকার হতে পারে। যেমন, দীর্ঘ মেয়াদের ছুটি বা বিনা বেতনে ছুটি ব্যবস্থাপনা পরিচালকের অনুমোদন প্রয়োজন হতে পারে।
  11. নীতি লঙ্ঘনের সতর্কতা:
    • সিস্টেম স্বয়ংক্রিয়ভাবে সতর্কতা দেবে যদি কোন আবেদন নীতির সাথে সামঞ্জস্যপূর্ণ না হয়।
    • যেমন, বার্ষিক ছুটির সীমা অতিক্রম করলে বা পরপর অনেকদিন ছুটি নিলে।
  12. প্রতি বছর ছুটি রিসেট:
    • প্রতি বছরের শুরুতে ছুটির ব্যালেন্স রিসেট হবে কিনা, এবং অব্যবহৃত ছুটি কি পরবর্তী বছরে যোগ হবে, সেই নিয়ম সিস্টেমে সেট করা থাকবে।
  13. প্রতিস্থাপন কর্মী নির্ধারণ:
    • ছুটিতে থাকা কর্মীর কাজ কে করবেন, সেটি নির্ধারণের ব্যবস্থা।
    • আবেদন করার সময় কর্মী বিকল্প ব্যক্তির নাম প্রস্তাব করতে পারেন।
  14. নির্ধারিত সময়ে আবেদন:
    • ছুটি নেয়ার আগে ন্যূনতম কতদিন আগে আবেদন করতে হবে, সেটি নিয়ম হিসাবে থাকবে।
    • জরুরি ছুটির ক্ষেত্রে বিশেষ অনুমোদন প্রয়োজন হতে পারে।
  15. ডকুমেন্ট আপলোড:
    • কিছু ছুটির জন্য ডকুমেন্ট আপলোডের প্রয়োজন হতে পারে, যেমন মেডিকেল সার্টিফিকেট।

সমাধান:

এখন দেখা যাক কিভাবে এই প্রয়োজনীয়তাগুলো একটি লিভ ম্যানেজমেন্ট সিস্টেমে অন্তর্ভুক্ত করা যায়।

  1. মডেল ডিজাইন:
    • LeaveType মডেল: ছুটির বিভিন্ন ধরন এবং তাদের নীতি সংরক্ষণ করবে।
    • LeaveApplication মডেল: কর্মীর আবেদন সংরক্ষণ করবে, যেখানে আবেদন স্টেটাস, তারিখ, কারণ ইত্যাদি থাকবে।
    • ApprovalFlow মডেল: বিভিন্ন ছুটির জন্য অনুমোদনের ধাপ এবং কর্তৃপক্ষ নির্ধারণ করবে।
  2. পারমিশন ও রোলস:
    • সুপারভাইজার: তার অধীনস্থ কর্মীদের ছুটির আবেদন পর্যালোচনা ও প্রাথমিক অনুমোদন।
    • এইচআর: নীতি অনুযায়ী যাচাই ও ফাইনাল অনুমোদন।
    • ম্যানেজমেন্ট: বিশেষ ক্ষেত্রে অতিরিক্ত অনুমোদন।
  3. ব্যবহারকারীর ইন্টারফেস:
    • ড্যাশবোর্ড: কর্মীরা তাদের ছুটির ব্যালেন্স, পেন্ডিং আবেদন, এবং অনুমোদনের স্ট্যাটাস দেখতে পারবেন।
    • আবেদন ফর্ম: ছুটির ধরন নির্বাচন, তারিখ বাছাই, কারণ লেখা, এবং প্রয়োজনীয় ডকুমেন্ট আপলোড।
    • নোটিফিকেশন সিস্টেম: ইমেইল ও ইন-অ্যাপ নোটিফিকেশন।
  4. বিজনেস লজিক:
    • নীতির সাথে সামঞ্জস্য যাচাই: আবেদন করার সময় সিস্টেম স্বয়ংক্রিয়ভাবে যাচাই করবে।
    • অ্যাপ্রুভাল ওয়ার্কফ্লো: প্রতিটি আবেদন সঠিক ক্রমে অনুমোদনের জন্য ফরোয়ার্ড হবে।
    • ছুটির ব্যালেন্স আপডেট: অনুমোদিত ছুটির পরে স্বয়ংক্রিয়ভাবে ব্যালেন্স কমবে।
  5. রিপোর্টিং ও অ্যানালিটিক্স:
    • রিপোর্ট জেনারেশন: বিভিন্ন ফিল্টারের মাধ্যমে রিপোর্ট তৈরি করা।
    • ড্যাশবোর্ড অ্যানালিটিক্স: গ্রাফ ও চার্টের মাধ্যমে ডেটা উপস্থাপন।
  6. সিকিউরিটি ও অডিটিং:
    • অ্যাক্সেস কন্ট্রোল: প্রতিটি ব্যবহারকারীর রোল অনুযায়ী অ্যাক্সেস নির্ধারণ।
    • অডিট লগ: কে কখন কি পরিবর্তন করেছে, তার রেকর্ড রাখা।
  7. ইন্টিগ্রেশন:
    • ক্যালেন্ডার ইন্টিগ্রেশন: ছুটির তথ্য টিম ক্যালেন্ডারে যুক্ত হবে।
    • এইচআর এমএস সিস্টেমের সাথে ইন্টিগ্রেশন: বেতন ও উপস্থিতির সাথে ছুটির তথ্য যুক্ত করা।

উপসংহার:

এই গল্পে আমরা দেখেছি কিভাবে টেকসফট সলিউশনসের মতো একটি কোম্পানি একটি কমপ্লেক্স লিভ ম্যানেজমেন্ট সিস্টেমের মাধ্যমে তাদের ছুটির প্রক্রিয়া অটোমেট করতে পারে। এখানে বিভিন্ন স্তরের অনুমোদন, নীতির সাথে সামঞ্জস্য, অ্যানালিটিক্স, এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করার উপর জোর দেওয়া হয়েছে।

আপনি আপনার সিস্টেম ডিজাইন করার সময় এই উপাদানগুলো বিবেচনা করতে পারেন। প্রতিটি কোম্পানির নিজস্ব নীতি ও প্রয়োজনীয়তা থাকে, তাই সিস্টেমকে ফ্লেক্সিবল ও কনফিগারেবল রাখা উচিত।

এখানে LeaveRequest, LeaveBalance, এবং LeaveType মডেলগুলো তৈরি করা হয়েছে এবং কিভাবে প্রতিটি মডেল কাজ করবে তা ব্যাখ্যা করা হয়েছে।

১. LeaveType মডেল

LeaveType মডেলটি বিভিন্ন প্রকারের ছুটির ধরন সংরক্ষণ করবে, যেমন: বার্ষিক ছুটি, অসুস্থ ছুটি ইত্যাদি।

class LeaveType(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    description = models.TextField(blank=True, null=True)
    
    def __str__(self):
        return self.name

    class Meta:
        unique_together = ('company', 'name')  # একই কোম্পানিতে একই নামের লিভ টাইপ থাকতে পারবে না।

২. LeaveBalance মডেল

LeaveBalance মডেলটি প্রতিটি ইউজারের জন্য তাদের লিভ ব্যালেন্স সংরক্ষণ করবে। এটি ইউজারের কাছে কতগুলো ছুটি আছে তা ট্র্যাক করবে।

class LeaveBalance(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    leave_type = models.ForeignKey(LeaveType, on_delete=models.CASCADE)
    total_leaves = models.PositiveIntegerField(default=0)  # মোট ছুটির সংখ্যা
    used_leaves = models.PositiveIntegerField(default=0)  # ব্যবহৃত ছুটির সংখ্যা
    remaining_leaves = models.PositiveIntegerField(default=0)  # বাকি ছুটির সংখ্যা

    def save(self, *args, **kwargs):
        self.remaining_leaves = self.total_leaves - self.used_leaves  # বাকি ছুটি হিসাব করা
        super().save(*args, **kwargs)

    def __str__(self):
        return f"{self.user.username} - {self.leave_type.name}"

    class Meta:
        unique_together = ('user', 'leave_type')  # একই ইউজারের জন্য একই টাইপের ছুটি থাকতে পারবে না।

৩. LeaveRequest মডেল

LeaveRequest মডেলটি ইউজারদের ছুটির জন্য আবেদন সংরক্ষণ করবে। এটি লিভ অ্যাপ্রুভাল প্রক্রিয়াও পরিচালনা করবে।

class LeaveRequest(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    leave_type = models.ForeignKey(LeaveType, on_delete=models.CASCADE)
    start_date = models.DateField()
    end_date = models.DateField()

    # লিভের স্ট্যাটাস দুই ধাপে থাকবে
    status = models.CharField(
        max_length=20,
        choices=[('pending', 'Pending'), ('department_approved', 'Department Approved'), 
                 ('hr_approved', 'HR Approved'), ('rejected', 'Rejected')],
        default='pending'
    )

    department_approved_by = models.ForeignKey(
        User, on_delete=models.SET_NULL, null=True, blank=True, related_name='department_approved_requests'
    )
    department_approval_date = models.DateTimeField(null=True, blank=True)

    hr_approved_by = models.ForeignKey(
        User, on_delete=models.SET_NULL, null=True, blank=True, related_name='hr_approved_requests'
    )
    hr_approval_date = models.DateTimeField(null=True, blank=True)

    comments = models.TextField(blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.user.username} - {self.leave_type.name} ({self.status})"

    def approve_department(self, approver):
        if approver.has_perm('can_approve_department_leave'):
            self.status = 'department_approved'
            self.department_approved_by = approver
            self.department_approval_date = timezone.now()
            self.save()
        else:
            raise PermissionError("You do not have permission to approve this leave at the department level.")

    def approve_hr(self, approver):
        if approver.has_perm('can_approve_hr_leave'):
            if self.status == 'department_approved':
                self.status = 'hr_approved'
                self.hr_approved_by = approver
                self.hr_approval_date = timezone.now()
                self.save()
            else:
                raise ValueError("Leave must be approved by the department before HR approval.")
        else:
            raise PermissionError("You do not have permission to approve this leave at the HR level.")

    def reject(self, approver, comments=""):
        if approver.has_perm('can_approve_department_leave') or approver.has_perm('can_approve_hr_leave'):
            self.status = 'rejected'
            self.comments = comments
            self.save()
        else:
            raise PermissionError("You do not have permission to reject this leave.")

    class Meta:
        permissions = [
            ('can_approve_department_leave', 'Can approve department leave'),
            ('can_approve_hr_leave', 'Can approve HR leave'),
        ]

মডেলগুলোর কাজ:

  1. LeaveType:
    • বিভিন্ন প্রকারের ছুটির ধরন তৈরি ও সংরক্ষণ করবে।
    • কোম্পানি অনুযায়ী ইউনিক থাকবে।
  2. LeaveBalance:
    • প্রতিটি ইউজারের জন্য ছুটির ব্যালেন্স ট্র্যাক করবে।
    • মোট ছুটি, ব্যবহৃত ছুটি, এবং বাকি ছুটির সংখ্যা হিসাব করবে।
  3. LeaveRequest:
    • ইউজারের ছুটির আবেদন সংরক্ষণ করবে এবং প্রক্রিয়াকরণের জন্য স্ট্যাটাস আপডেট করবে।
    • দুই স্তরের অনুমোদন (ডিপার্টমেন্ট এবং HR) পরিচালনা করবে।

প্রক্রিয়া:

  • ইউজার যখন একটি ছুটির জন্য আবেদন করে, LeaveRequest মডেলটিতে একটি নতুন রেকর্ড তৈরি হবে।
  • LeaveBalance মডেলটি ইউজারের ছুটির হিসাব রাখতে সাহায্য করবে।
  • LeaveType মডেলটি প্রকারভেদ করে ছুটির তথ্য সংরক্ষণ করবে।
  • ছুটির আবেদনকে প্রথমে ডিপার্টমেন্ট থেকে এবং পরে HR দ্বারা অনুমোদন করা হবে, এবং অনুমোদনের উপর ভিত্তি করে LeaveRequest মডেলের স্ট্যাটাস আপডেট হবে।

এইভাবে, আপনি মাল্টিকোম্পানি ভিত্তিক লিভ ম্যানেজমেন্ট সিস্টেম তৈরি করতে পারবেন!

How can we help?