Tính ngày nghỉ hưu

Liên hệ QC

khieukienag

Thành viên thường trực
Tham gia
29/4/08
Bài viết
276
Được thích
177
Nghề nghiệp
Ngành Giáo dục
Kể từ năm 2021, tuổi nghỉ hưu của người lao động trong điều kiện lao động bình thường là đủ 60 tuổi 03 tháng đối với lao động nam và đủ 55 tuổi 04 tháng đối với lao động nữ; sau đó cứ mỗi năm tăng thêm 03 tháng đối với lao động nam cho đến đủ 62 tuổi và 04 tháng đối với lao động nữ cho đến đủ 60 tuổi.
Xin gia đình GPE giúp hàm tính ngày nghỉ hưu vào cột E. Xin cảm ơn.
Hoi_GPE.gif

Xin kèm file.
 

File đính kèm

  • Hoi_GPE.xlsx
    10.9 KB · Đọc: 81
Theo đề bài của bạn có phải như bảng kê này không:

NamNữ
NămNămThángNămTháng
2020603554
2021606558
202260956
202361564
2024613568
202461657
2025619574
202662578
202758
2028584
2029588
203059
2031594
2032598
203360
 
Cám ơn bác SA_DQ. Lộ trình các báo đăng như thế nầy.
LoTrinh.gif
 
File giả lập của bạn cho toàn ngày sinh <13 là không tốt dùng để kiểm chứng số liệu
Bạn kiểm theo hình này xem sao:

STTTênNgày sinhNữNgày nghỉ hưu
1Xuânx
2Hạ
3/21/1966​
9/21/2027​
=TuoiHuu(C3,IF(D3="X",FALSE,TRUE))
3Thu
12/6/1965​
x
4Đông
10/30/1966​
4/30/2028​
5Tây
10/24/1964​
10/24/2025​
6Nam
10/18/1963​
7/18/2024​
7Bắc
8/7/1974​
x

PHP:
Function TuoiHuu(Dat As Date, Optional Nam As Boolean = True) As Date
 Dim ThemThang As Integer, NamH As Integer
 
 If Nam Then
    TuoiHuu = DateSerial(Year(Dat) + 60, Month(Dat), Day(Dat))
    MsgBox TuoiHuu
    NamH = Year(TuoiHuu)
    If NamH >= 2028 Then
        ThemThang = 24
    ElseIf NamH <= 2020 Then
    ElseIf NamH < 2028 And NamH > 2020 Then
        ThemThang = 3 * (NamH - 2020)
'        ThemThang = Choose(Year(TuoiHuu) - 2020, 3, 6, 9, 12, 15, 18, 21, 24)'
    End If
    TuoiHuu = DateSerial(Year(Dat) + 60, ThemThang + Month(Dat), Day(Dat))
 Else
    TuoiHuu = DateSerial(Year(Dat) + 55, Month(Dat), Day(Dat))
    ' . . . . . . .         '
 End If 
End Function
 
Cháu chưa bàn tới việc tính thêm tháng thêm năm, nhưng ngày nghỉ hưu phải là ngày 01/mm/yyyy cho 1 người nào đó.
Ừa, cứ cho là vậy đi! Nhưng nếu ngày sinh là 15/2/1960 & đủ năm công tác thì theo bạn tháng nghỉ hưu sẽ là tháng nào, 2 hay 3?
 
Dùng hàm Edate cộng 720 (60*12) tháng vào ngày sinh -> ngày sinh nhật 60 (SN60). Dùng hàm Year lấy NĂM của ngày ấy. Làm con tính NĂM - 2020
Ngày nghỉ hưu = Edate( SN60, 3 * MIN((Year(SN60)-2020), 2))
= Edate( Edate(NgaySinh, 720), 3 * MIN((Year(Edate(NgaySinh, 720))-2020), 2))
Nữ tương tự vậy
Tôi biết đến vậy thôi, làm cách nào cho gọn thì tôi chưa biết.
Đương nhiên là con toán sẽ đưa đến bất công là người sinh 01/01 sẽ bị xa 3 tháng đối với 31/12. Nhưng nếu không có chỉ dẫn cách tính theo tỷ lệ thì phải ráng chịu.

Chú: Thớt cho cái thí dụ ngày nghỉ hưu là đầu tháng cho nên khá khó hiểu

Bổ sung:
Công thức trên không hoàn toàn đúng.
Sau khi đọc bài #16 thì tôi nhận ra công thức đã chủ quan ở chỗ giới hạn số năm là 2. Vì mõi mức tăng là 3 tháng nên phải tính rằng 2 năm là 8 lượt tăng.
Công thức trên phải sửa là:
Ngày nghỉ hưu = Edate( SN60, 3 * MIN((Year(SN60)-2020), 8))
= Edate( Edate(NgaySinh, 720), 3 * MIN((Year(Edate(NgaySinh, 720))-2020), 8))
(xem bài #17)
 
Lần chỉnh sửa cuối:
Theo vậy thì người đó sẽ nghỉ hưu vào tháng 3.
Tinh thần của Bộ Luật LĐ mà nói là phải giải quyết ưu tiên theo quyền lợi của người LĐ
Nhưng khổ nổi ở đây không ít người muốn nghỉ sớm & cũng không ít người muốn nghỉ trễ dù là nữa tháng!
 
Tinh thần của Bộ Luật LĐ mà nói là phải giải quyết ưu tiên theo quyền lợi của người LĐ
Nhưng khổ nổi ở đây không ít người muốn nghỉ sớm & cũng không ít người muốn nghỉ trễ dù là nữa tháng!
Trước đây cháu từng làm công tác BHXH, thì tháng mà người nghỉ hưu bắt đầu từ tháng kế tiếp so với tháng sinh của người đó. Không cần biết người đó sinh đầu tháng hay cuối tháng. Còn nay cháu không làm nữa, không cập nhật thông tin.
 
Trước đây cháu từng làm công tác BHXH, thì tháng mà người nghỉ hưu bắt đầu từ tháng kế tiếp so với tháng sinh của người đó. Không cần biết người đó sinh đầu tháng hay cuối tháng. Còn nay cháu không làm nữa, không cập nhật thông tin.
Vì vậy, lúc tính "ngày hưu" thì người ta chỉ tính đúng vào ngày sinh. Lúc thực sự làm giấy tờ thì người tính chỉ việc nhìn vào "ngày hưu" và tự hiểu là đầu tháng nào.
 
Còn CQ mình thì cho nghỉ trước 3 tháng nguyên lương ( Không sản phẩm), nên CQ tính sao cũng phải chấp nhận,
Như sinh vào tháng 7 thì bắt đầu tháng 5 thì cho nghỉ (chờ hưu); Chuyên còn lại giao cho P. TCHC & BHXH quận huyện lo
 
Dùng hàm Edate cộng 720 (60*12) tháng vào ngày sinh -> ngày sinh nhật 60 (SN60). Dùng hàm Year lấy NĂM của ngày ấy. Làm con tính NĂM - 2020
Ngày nghỉ hưu = Edate( SN60, 3 * MIN((Year(SN60)-2020), 2))
= Edate( Edate(NgaySinh, 720), 3 * MIN((Year(Edate(NgaySinh, 720))-2020), 2))
Cũng không quá đơn giản thư thế đâu bạc ạ. Có chút lắt léo trong tính toán.

Với ngày sinh = 1966-03-02 (giá trị của tác giả) thì hàm của bác trả về 2026-09-02.

Muốn nghỉ hưu vào năm 2026 thì phải có đủ 61 tuổi và 6 tháng. Mà vào ngày 2026-09-02 thì anh A mới chỉ có 60 tuổi và 6 tháng.

nghihuu.JPG

Nếu tôi hiểu lộ trình thì kết quả nhập tay của chủ thớt cũng sai. Theo tôi anh A nghỉ hưu ngày 2027-12-02. Vào ngày này anh A đã có 61 tuổi và 9 tháng. Mà theo lộ trình thì muốn nghỉ hưu vào năm 2027 thì phải đủ 61 tuổi và 9 tháng. Vậy anh A có thể nghỉ hưu vào ngày 2027-12-02.
 
Cũng không quá đơn giản thư thế đâu bạc ạ. Có chút lắt léo trong tính toán.

Với ngày sinh = 1966-03-02 (giá trị của tác giả) thì hàm của bác trả về 2026-09-02.

Muốn nghỉ hưu vào năm 2026 thì phải có đủ 61 tuổi và 6 tháng. Mà vào ngày 2026-09-02 thì anh A mới chỉ có 60 tuổi và 6 tháng.
...
Quả là tôi có tính sai cái hàm MIN. Hàm này đặt như thế thì tối đa là 6 tháng.

Đúng ra số tháng phải là: 3 * MIN((Year(Edate(NgaySinh, 720))-2020), 8)
Hoặc là: MIN(3*(Year(Edate(NgaySinh, 720))-2020), 24)
Tối đa là 3*8 = 24 tháng = 2 năm.

Với cách sửa này thì người sinh 1966-03-02 phải cộng tất cả là 720 + 18 tháng để ra ngày nghỉ hưu.

Chú thêm: lại chủ quan lần nữa, nếu còn người 60 mà chưa hưu thì phải cộng thêm hàm MAX để đề phòng trường hợp hưu trước năm 2020.
 
Lần chỉnh sửa cuối:
Quả là tôi có tính sai cái hàm MIN. Hàm này đặt như thế thì tối đa là 6 tháng.

Đúng ra số tháng phải là: 3 * MIN((Year(Edate(NgaySinh, 720))-2020), 8)
Hoặc là: MIN(3*(Year(Edate(NgaySinh, 720))-2020), 24)
Tối đa là 3*8 = 24 tháng = 2 năm.
Vẫn chưa đúng bác ơi.

nghihuu1.JPG

Muốn nghỉ hưu vào năm 2027 thì phải có đủ 61 năm và 9 tháng. Mà vào ngày 2027-09-02 thì anh A mới có 61 năm và 6 tháng.

Mà nhìn vào công thức của bác thì tôi thấy bác vẫn chưa tính đến cái "lắt léo" mà tôi nói. :D
 
Vẫn chưa đúng bác ơi.
...

Muốn nghỉ hưu vào năm 2027 thì phải có đủ 61 năm và 9 tháng. Mà vào ngày 2027-09-02 thì anh A mới có 61 năm và 6 tháng.

Mà nhìn vào công thức của bác thì tôi thấy bác vẫn chưa tính đến cái "lắt léo" mà tôi nói. :D
Toi sơ xuất lần nữa là vì tôi nghĩ đơn giản theo kiểu "sinh nhật 60, 61, 62, ... vào năm 202X thì cộng thêm N quý". Đây là kiểu đơn giản thường dùng.
Nhưng có lẽ nhà nước lại khoái tính theo kiểu "lắc léo".

Vậy thì chắc phải thêm một điều kiện bị chạy quá năm.

Tôi đang nghiên cứu lô gic dùng phương pháp tính ngược.
Cộng 744 tháng vào ngày sinh và trừ ngược lại.

Bổ sung:
Hiện tại thì tôi nghĩ cách dễ nhất có lẽ là dựng một bảng tra ngày sinh và số tháng áp dụng. VlookUp là xong.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom