Khi thực hiện công tác tính lương cho 1 giai đoạn thời gian, ta cần sử dụng danh mục các hợp đồng lao động Employee Labor Contract đang còn hiệu lực trong khoảng thời gian tính lương. Ngoài ra còn cần phải tính số ngày hiệu lực của mỗi hợp đồng trong giai đoạn tính lương và tính đến cả việc hợp đồng mới thay thế hợp đồng cũ.
Đó là ý nghĩa của user table ActiveELC này.
Nếu cảm thấy khó hiểu kết quả trích xuất, hãy chạy lệnh này ở chế độ Debug Mode, chi tiết thuật toán sẽ được ghi vào file log.
user table(pbs.BO.Data.ActiveELC?Period=<<2013005..2013006&.....other filters)
Các tham số
Các điều kiện lọc khác bao gồm: StartDate, EndDate, $top, $bottom Nếu StartDate và EndDate được khai báo, user table ActiveELC sẽ ưu tiên dùng giá trị này thay cho Period
No | Name | Example value | Description |
---|---|---|---|
1 | Period | 2017004 |
Kỳ lấy dữ liệu |
2 | StartDate | Ngày bắt đầu | |
3 | EndDate | Ngày kết thúc | |
4 | $top | 2 |
Chỉ lấy 2 hợp đồng cũ nhất |
5 | $bottom | 1 |
Chỉ lấy 1 hợp đồng mới nhất - ta dùng tùy chọn này để tính lại dựa theo hợp đồng cuối cùng mà thôi. |
💡 Ghi chú
Nguyên tắc hoạt động của cú pháp trên như sau:
Bước 1: Xác định ngày đầu - cuối của khoảng thời gian cho trước.
Bước 2: Liệt kê toàn bộ hợp đồng trong khoảng thời gian hiệu lực bước 1.
Bước 3: Sắp xếp theo giảm dần theo thứ tự: IssuedDate (Ngày quyết định) > EffectiveDate (Ngày hiệu lực) > CtrNo (Số hợp đồng).
Bước 4: Đối với mỗi nhân viên, lấy những hợp đồng mới nhất ở bước 3 và tính toán ExpiryDate (Ngày hết hạn) theo nguyên tắc lấy ngày liền kề trước EffectiveDate của hợp đồng kế tiếp 1 ngày.
Lưu ý: khi nhập liệu thông tin hợp đồng lao động thì việc nhập ExpiryDate phải chính xác hoặc không nhập (chương trình sẽ tự tính ở bước này).
Bước 5: Lấy các hợp đồng có EffectiveDate và ExpiryDate nằm trong khoảng thời gian cho trước, và đó là kết quả cuối cùng.
Lưu ý:
Trong trường hợp cả Period, StartDate, EndDate đều không được khai báo, user table ActiveELC sẽ dùng tháng hiện tại.
Giả sử ta có 1 danh mục các hợp đồng sau:
Khi tìm các hợp đồng có hiệu lực để tính lương cho 2 tháng 5->6/2013, ta sẽ dùng cú pháp sau:
user table(pbs.BO.Data.ActiveELC?Period=<<2013005..2013006)
Chương trình sẽ chia thời gian thành từng tháng. Trong mỗi tháng, hợp đồng nào có hiệu lực trong tháng thì liệt kê vào.
Hợp đồng có hiệu lực trong tháng khi nó không bị Suspend
và có khoảng thời gian giữa ngày hiệu lực → ngày hết hạn chứa ít nhất 1 ngày của tháng.
Nếu trong 1 tháng 1 người có 2 hợp đồng cùng hiệu lực thì khoảng thời gian trùng lắp sẽ tính 1 lần thôi, tất nhiên là tính theo hợp đồng có ngày quyết định ra sau.
Các công ty nhà nước hay có trường hợp này, họ có thể ra 1 quyết định ở thời điểm hiện tại tăng lương cho nhân viên, nhưng ngày hiệu lực là đầu tháng trước. Nhân viên khi đó có thể lãnh lương bổ sung khoản còn thiếu của tháng trước.
Trước tiên xác định số ngày active của hđ trong tháng, sau đó trừ đi số ngày nghỉ và ngày lễ ra số ngày làm việc trong tháng wkd.
Nếu wkd = tổng số ngày làm việc của tháng thì tỷ lệ này = 1.
Nếu wkd nhỏ hơn số ngày làm việc của tháng, công thức tính là : Round(wkd * 12 / 260, 4)
- làm tròn 4 dấu thập phân
Nếu có nhiều hợp đồng active trong tháng, và wkd của các hđ = tổng số ngày làm việc của tháng thì chương trình sẽ đảm bảo tổng WorkingRatio của các HĐ = 1.
Là tỷ lệ được chương trình tự xác định dựa trên số ngày hiệu lực của mỗi hợp đồng trong tháng 4. Kết quả này thường được dùng tính lương.
Thứ tự ưu tiên khi xác định hợp đồng thay thế: IssueDate → EffectiveDate → ContractNo.
Ông A có 4 hợp đồng lao động có Ngày hiệu lực lần lượt như sau:
01/01/2016
15/04/2016
27/04/2016
01/02/2016
Các hợp đồng có hiệu lực trong tháng 4/2016 là:
1/4
->14/4
15/4
->26/4
27/4
->30/4
HĐ1 có ngày kết thúc là 31/01/2016 (được tính bởi chương trình dựa trên HĐ4 có ngày bắt đầu là 01/02/2016), do đó HĐ1 bị loại ra trong danh sách này.
CtrNo | IssuedDate | EffectiveDate | ExpiryDate | CalculationPeriod | EffectiveStartDateInPeriod | EffectiveEndDateInPeriod | EffectiveDaysInPeriod | DaysRatioInPeriod |
---|---|---|---|---|---|---|---|---|
HĐ4 | 1/2/2016 | Apr-16 | 1/4/2016 | 14/04/2016 | 14 | 0.466666667 | ||
HĐ2 | 15/04/2016 | Apr-16 | 15/04/2016 | 26/04/2016 | 12 | 0.4 | ||
HĐ3 | 27/04/2016 | Apr-16 | 27/04/2016 | 30/04/2016 | 4 | 0.133333333 |
Đây là kết quả chạy bằng cú pháp ActiveELC: pbs.BO.Data.ActiveELC?Period=2016004
chỉ có 3 hợp đồng số HĐ2, HĐ3 & HĐ4 được liệt kê.
Các tên cột được tô đậm là do chương trình tự động tính toán và điền vào khi xuất báo cáo bằng ActiveELC.
Ông B có 3 hợp đồng có Ngày quyết định và Ngày hiệu lực lần lượt như sau:
Stt | Ngày quyết định | Ngày hiệu lực |
---|---|---|
HĐ1- | 01/04/2016 | 27/04/2016 |
HĐ2- | 02/04/2016 | 27/04/2016 |
HĐ3- | 01/02/2016 |
Kết quả pbs.BO.Data.ActiveELC?Period=2016004
:
CtrNo | IssuedDate | EffectiveDate | ExpiryDate | CalculationPeriod | EffectiveStart | EffectiveEndDate | Effective | DaysRatioIn |
---|---|---|---|---|---|---|---|---|
DateInPeriod | InPeriod | DaysInPeriod | Period | |||||
HĐ3 | 1/2/2016 | Apr-16 | 1/4/2016 | 26/04/2016 | 26 | 0.866666667 | ||
HĐ2 | 2/4/2016 | 27/04/2016 | Apr-16 | 27/04/2016 | 30/04/2016 | 4 | 0.133333333 | |
Chỉ có 2 hợp đồng số HĐ2
& HĐ3
được liệt kê. HĐ1
có Ngày quyết định trước ngày quyết định của HĐ2
, do đó bị loại ra khỏi danh sách này.
Updated on : 2023-09-29 05:06:06. by : . at X1-EXTREME.
Topic : usertables/pbs.bo.data.activeelc