INSERT INTO hrm_attendance (emp_id, work_date, check_in_time, status)
VALUES (#{empId}, #{workDate}, #{checkInTime}, 'PRESENT')
ON CONFLICT (emp_id, work_date) DO UPDATE SET check_in_time=#{checkInTime}
UPDATE hrm_attendance SET
check_out_time=#{checkOutTime},
work_minutes=EXTRACT(EPOCH FROM (#{checkOutTime}::timestamp - check_in_time))/60
WHERE emp_id=#{empId} AND work_date=#{workDate}
INSERT INTO hrm_leaves (emp_id, leave_type_id, start_date, end_date, days, reason, status, created_by)
VALUES (#{empId}, #{leaveTypeId}, #{startDate}, #{endDate}, #{days}, #{reason}, #{status}, #{createdBy})
UPDATE hrm_leaves SET status=#{status}, approved_by=#{approvedBy}, updated_at=NOW()
WHERE id=#{id}
INSERT INTO hrm_leave_types (type_code, type_name, is_paid, max_days)
VALUES (#{typeCode}, #{typeName}, #{isPaid}, #{maxDays})
INSERT INTO hrm_overtime (emp_id, ot_date, start_time, end_time, ot_minutes, reason, created_by)
VALUES (#{empId}, #{otDate}, #{startTime}, #{endTime}, #{otMinutes}, #{reason}, #{createdBy})