সিস্টেমের আর্কিটেকচার:
আমরা এখানে একটি HRM বা Attendance সফটওয়্যার কিভাবে Holiday মডেল এবং Attendance মডেল একত্রে কাজ করে তা দেখবো। এই সিস্টেমের প্রধান লক্ষ্য হলো ছুটির দিনগুলো সঠিকভাবে চিহ্নিত করা এবং ছুটির দিনে কাজ করলে সেটাকে সঠিকভাবে ট্র্যাক করা।
আমরা পুরো সিস্টেমকে কয়েকটি ধাপে ভাগ করবো, প্রতিটি ধাপে আমরা বুঝবো কীভাবে Holiday, Attendance এবং অন্যান্য মডেল একে অপরের সাথে সম্পর্কিত এবং কীভাবে process_attendance মেথডটি কাজ করবে।
ধাপ ১: মডেল ডিফাইন করা
১. Holiday মডেল:
Holiday মডেল মূলত কোম্পানির ছুটির দিনগুলো সংরক্ষণ করবে। এর মূল ফিল্ডগুলো হবে:
- name: ছুটির নাম (যেমন, Eid, Christmas, Independence Day, etc.)
- date: ছুটির তারিখ
- holiday_type: ছুটির ধরণ (যেমন, Public, Company Specific)
- allow_attendance: Boolean ফিল্ড, যা চেক করবে ছুটির দিন কাজ করার অনুমতি আছে কি না।
- overtime_multiplier: যদি ছুটির দিনে কাজ করলে ওভারটাইম প্রযোজ্য হয়, তবে সেটার হার (যেমন, ২.০ মানে দ্বিগুণ ওভারটাইম বোনাস)।
২. Attendance মডেল:
Attendance মডেল কর্মচারীর প্রতিদিনের উপস্থিতি সংরক্ষণ করবে। এর প্রধান ফিল্ডগুলো হবে:
- employee: কর্মচারীর foreign key
- timestump : উপস্থিতির তারিখ
- is_holiday_attendance: Boolean ফিল্ড, যা নির্দেশ করবে ছুটির দিনে কাজ করেছেন কিনা।
ধাপ ২: লজিক ডিফাইন করা
সিস্টেমের কাঠামো:
আপনার Holiday মডেল এবং Attendance মডেল কিভাবে একে অপরের সাথে কাজ করবে তা সহজভাবে বোঝার জন্য আমরা একটা ধারা অনুযায়ী এগোবো।
ধাপ ১: ছুটির দিন সনাক্ত করা (Checking Holidays)
প্রতিদিন যখন অ্যাটেনডেন্স ডেটা প্রসেস করা হবে, তখন সিস্টেম প্রথমে চেক করবে ঐ দিনের জন্য Holiday মডেলে কোনো ছুটির ডেটা সেট করা আছে কিনা। অর্থাৎ, সিস্টেম প্রথমে যাচাই করবে আজকের দিনটি কি ছুটির দিন নাকি না।
যদি ছুটির দিন হয়:
- যদি Holiday মডেলে সেট করা থাকে যে ছুটির দিনে কাজ করার অনুমতি আছে, সেক্ষেত্রে সিস্টেম চিহ্নিত করবে যে কর্মচারী ছুটির দিনে কাজ করেছে। এই উপস্থিতিকে Holiday Attendance বা Overtime Attendance হিসেবে ধরা হবে।
- যদি কাজের অনুমতি না থাকে, তাহলে সিস্টেম কোনো অ্যাটেনডেন্স ডেটা রেকর্ড করবে না এবং রিপোর্টে দেখাবে যে এটি ছিল একটি ছুটির দিন।
যদি ছুটির দিন না হয়:
- সিস্টেম সেই দিনকে সাধারণ দিন (Normal Working Day) হিসেবে ধরে নিবে এবং কর্মচারীর উপস্থিতি রেকর্ড করবে।
ধাপ ২: কর্মচারীর ছুটির দিনে উপস্থিতি (Holiday Attendance Identification)
যদি কর্মচারী ছুটির দিন অফিসে এসে কাজ করেন, তাহলে:
- সিস্টেম চিহ্নিত করবে এবং এই উপস্থিতিকে Holiday Attendance হিসেবে সংরক্ষণ করবে।
- যদি ছুটির দিনে কাজ করলে ওভারটাইম (Overtime) গণনা করার নিয়ম থাকে, সেক্ষেত্রে কর্মচারীর কাজের সময়ের উপর ভিত্তি করে ওভারটাইম গণনা করা হবে।
ধাপ ৩: ডেটা সংরক্ষণ এবং ওভারটাইম গণনা (Storing Data and Overtime Calculation)
- ছুটির দিনে উপস্থিতির ক্ষেত্রে, সিস্টেম Holiday Attendance হিসেবে রেকর্ড সংরক্ষণ করবে। এখানে Holiday মডেলে সংরক্ষিত ছুটির ধরণ এবং ওভারটাইমের নিয়মের উপর ভিত্তি করে উপস্থিতি রেকর্ড করা হবে।
- সিস্টেম চেক করবে কর্মচারী কত ঘণ্টা কাজ করেছেন এবং সেটার উপর ভিত্তি করে ওভারটাইম গণনা করবে।
ধাপ ৪: অ্যাটেনডেন্স মেশিনের ডেটা প্রসেসিং (Attendance Machine Data Processing)
সিস্টেম প্রতিদিন Attendance Machine (যেমন ZKTeco) থেকে ডেটা গ্রহণ করে:
- প্রত্যেক কর্মচারীর উপস্থিতি এবং ছুটির দিন চেক করবে।
- যদি কর্মচারী ছুটির দিনে উপস্থিত থাকেন, তবে সেই উপস্থিতি Holiday Attendance হিসেবে সংরক্ষণ করা হবে এবং কর্মচারীর ওভারটাইম, কাজের ঘন্টা ইত্যাদি হিসাব করা হবে।
- যদি সাধারণ দিন হয়, সেক্ষেত্রে সাধারণ উপস্থিতি হিসেবে রেকর্ড করা হবে।
ধাপ ৫: রিপোর্ট তৈরি করা (Report Generation)
সিস্টেমের মূল কাজগুলো হল:
- প্রতিদিনের কাজের ঘন্টা এবং উপস্থিতি তথ্য থেকে মাসিক/সাপ্তাহিক/বার্ষিক রিপোর্ট তৈরি করা।
- Holiday Attendance এবং Regular Attendance আলাদা আলাদা ভাবে রিপোর্টে দেখানো।
ব্যবহারিক উদাহরণ (Real-Life Scenario):
ধরুন, ১৫ই আগস্ট আপনার প্রতিষ্ঠানে ছুটি। তবে, কিছু কর্মচারী যদি এই দিন কাজে উপস্থিত থাকেন, তবে:
- সিস্টেম চেক করবে ১৫ই আগস্ট কি ছুটির দিন।
- সিস্টেম দেখবে যে ১৫ই আগস্ট ছুটি এবং কর্মচারীকে কাজের অনুমতি দেওয়া হয়েছে।
- এরপর সিস্টেম সেই দিনের উপস্থিতিকে Holiday Attendance হিসেবে সংরক্ষণ করবে এবং চেক করবে কর্মচারী অতিরিক্ত কত ঘণ্টা কাজ করেছেন।
- যদি ১৫ই আগস্ট ওভারটাইমের নিয়ম প্রযোজ্য হয়, তাহলে সিস্টেম সেই অতিরিক্ত কাজকে Overtime হিসেবে রেকর্ড করবে।
এভাবে পুরো সিস্টেম একটি প্রক্রিয়া (Process) অনুসরণ করে ছুটির দিন এবং সাধারণ দিনের মধ্যে উপস্থিতি আলাদা করে এবং প্রতিদিনের Attendance এবং Holiday এর রেকর্ড সঠিকভাবে মেইনটেইন করে।