سیستم هوشمند مدیریت بودجهی رفاهی کارکنان در Jira با ScriptRunner
واحد منابع انسانی و مالی یک سازمان فناوری
چالش
ثبت و بررسی هزینههای رفاهی کارکنان (رواندرمانی، ورزش و آموزش) دستی انجام میشد: ورود دوبارهی شماره شبا در هر درخواست، محاسبهی دستی سهم سازمان و سقف بودجهی هر فصل توسط منابع انسانی، و ساخت دستی فهرست پرداخت برای واحد مالی.
راهکار
یک فرایند کامل در جیرا با ScriptRunner و Groovy: اعتبارسنجی فصل و مهلت فاکتور با تقویم شمسی، استعلام خودکار اطلاعات پرسنلی، محاسبهی لحظهای سهم ۵۰٪ با کنترل سقف، و Post-Functionهایی برای کسر یا بازگرداندن بودجه و ساخت فایل CSV.
نتیجه
ورود دستی اطلاعات بانکی و خطاهای واریزی حذف شد، کارکنان ماندهی بودجه و مبلغ قابل پرداخت را به حروف میبینند و فایل پرداخت بدون دخالت دستی منابع انسانی برای واحد مالی آماده میشود.
یکی از کاربردیترین سناریوهای توسعهی جیرا در سازمانها، تبدیل آن به یک سامانهی خودکار و هوشمند برای مدیریت تسهیلات و بودجههای رفاهی کارکنان است؛ هزینههایی مثل رواندرمانی، ورزش و آموزشهای غیرتخصصی.
با قابلیتهای ScriptRunner for Jira و اسکریپتنویسی به زبان Groovy، کل فرایند دریافت درخواست، اعتبارسنجی، محاسبهی سهم سازمان و ساخت گزارش مالی بدون دخالت دستی تیم منابع انسانی انجام میشود. در این تجربه، همهی اطلاعات حساس و زیرساختی امنسازی شدهاند.
معماری و جریان کاری فرایند
فرایند ثبت و پردازش هزینههای رفاهی از پنج گام اصلی تشکیل شده است:
ثبت درخواست توسط کاربر
اعتبارسنجی فصل و مهلت ارسال بر اساس تقویم شمسی
استعلام خودکار اطلاعات پرسنلی (شبا، مرکز هزینه و...) از پایگاه داده
محاسبهی سهم ۵۰٪، کنترل سقف بودجه و تبدیل مبلغ به حروف
تایید مالی، کسر خودکار از ماندهی بودجهی فصل و ساخت فایل CSV مالی
اگر تیکت لغو یا رد شود، اعتبار بهصورت خودکار به حساب کاربر برمیگردد.
مسیر کامل یک درخواست رفاهی؛ از ثبت در فرم جیرا تا ضمیمه شدن فایل CSV به تیکت پرداخت.
بخشهای اصلی و منطق فنی اسکریپتها
۱. اعتبارسنجی فصل و مهلت استفاده
یکی از چالشهای اصلی در پردازش هزینههای رفاهی، کنترل بازهی زمانی مجاز برای ثبت فاکتورها بر اساس تقویم شمسی است. اسکریپت بررسی میکند که کاربر فاکتور را در فصل جاری یا در مهلت ارفاقی (مثلاً دو ماه اول فصل بعد) ثبت کرده باشد.
منطق کلیدی:
تشخیص فصل بر اساس تاریخهای تقویم شمسی (بهار، تابستان، پاییز، زمستان)
محاسبهی مهلت ارفاقی (Grace Period) برای فاکتورهای فصل قبل
نمایش پیغام خطای مناسب در فرم ثبت درخواست، اگر مهلت تمام شده باشد
برای جلوگیری از ورود دستی اطلاعات و کاهش خطای انسانی، هنگام ساخت تیکت، اطلاعات بانکی و سازمانی کاربر (شماره شبا، مرکز هزینه و کد ملی) بهصورت خودکار از پایگاه دادهی پرسنلی استعلام میشود و روی Custom Fieldهای تیکت مینشیند.
مزیت: کاربر لازم نیست در هر درخواست دوباره شماره شبا وارد کند.
امنیت: متغیرهای حساس در کدهای عمومی ذخیره نمیشوند و اتصال SQL امن است.
ترتیب تعامل کاربر، فرم جیرا، اسکریپت ScriptRunner و پایگاه دادهی پرسنلی در یک درخواست.
۳. محاسبات مالی، کنترل سقف و تبدیل مبلغ به حروف
پرداخت معمولاً بر مبنای درصد مشخصی از هزینه (مثلاً ۵۰٪ مبلغ فاکتور) و تا سقف مجاز هر فصل انجام میشود. اسکریپت محاسبهگر این کارها را انجام میدهد:
محاسبهی نصف مبلغ فاکتور ورودی
مقایسهی مبلغ محاسبهشده با «ماندهی بودجهی خدمات» و «سقف بودجهی کل فصل»
اعمال سقف مجاز، اگر مبلغ درخواست از بودجهی باقیمانده بیشتر باشد
تبدیل مبلغ ریالی به تومان و نمایش آن به حروف (مثلاً «یک میلیون و پانصد هزار تومان») در متن راهنمای فیلد، برای خوانایی بیشتر
منطق تصمیمگیری اسکریپت برای محاسبهی سهم ۵۰٪ و اعمال سقف بودجهی فصل.
PersianWords.groovy
// تبدیل مبلغ عددی به حروف فارسی برای نمایش شفاف به کاربر
String convertToPersianWords(Long amountInToman) {
if (amountInToman == null || amountInToman == 0) return "صفر تومان"
// منطق تبدیل اعداد به حروف...
return formattedPersianText + " تومان"
}
۴. بهروزرسانی خودکار ماندهی بودجه در Post-Function
بعد از تایید نهایی تیکت، ماندهی بودجهی کاربر در پروژهی مدیریت کاربران بهروزرسانی میشود. اگر تیکتی مرجوع یا لغو شود، اسکریپت بازگشت بودجه مبلغ پرداختی را دوباره به اعتبار کاربر اضافه میکند.
سناریوی تایید: ماندهی جدید = ماندهی قبلی − مبلغ قابل پرداخت
سناریوی برگشت یا انصراف: ماندهی جدید = ماندهی قبلی + مبلغ مرجوعی
۵. خروجی خودکار CSV برای واحد مالی
در پایان دورهی پرداخت، تیکتهای در انتظار پرداخت با یک Post-Function جمعآوری میشوند و فایل .csv شامل شمارهی تیکت، عنوان، نام متقاضی، شماره شبا و مبلغ قابل پرداخت ساخته و به تیکت اصلی حسابداری ضمیمه میشود.
CsvExport.groovy
import java.nio.charset.StandardCharsets
// ساخت فایل CSV با پشتیبانی کامل از حروف فارسی
File tempFile = File.createTempFile("wellbeing_report", ".csv")
tempFile.withWriter(StandardCharsets.UTF_8.toString()) { writer ->
writer.write("\uFEFF") // UTF-8 BOM برای نمایش درست فارسی در اکسل
writer.write(csvContent.toString())
}
دستاوردها و مزایای عملیاتی
قبل از اتوماسیون
بعد از پیادهسازی با ScriptRunner
ورود دستی شماره شبا و احتمال خطای واریزی
استعلام خودکار شماره شبا و کد ملی از پایگاه داده
محاسبهی دستی سقف بودجه و بررسی فصلها توسط منابع انسانی
محاسبهی لحظهای سهم ۵۰٪ و کنترل سقف با اسکریپت
سردرگمی کاربر دربارهی ماندهی بودجهی رفاهی
نمایش شفاف ماندهی بودجه و مبلغ قابل پرداخت به حروف
ساخت دستی فهرستهای پرداخت مالی
ساخت خودکار فایل CSV شبا و مبالغ آمادهی پرداخت
نکات کلیدی در پیادهسازی
امنیت: شناسهی مستقیم فیلدها (Hardcoded CustomField IDs) و مشخصات پایگاه داده را در کدهای قابل اشتراکگذاری ننویسید.
تجربهی کاربری: پیغامهای راهنمای فارسی و نمایش مبلغ به حروف، خطای کاربران در ثبت درخواست را بهشدت کم میکند.
مدیریت استثناها: حالتهای خالی بودن داده یا پیدا نشدن کاربر در پایگاه داده را همیشه پیشبینی کنید تا فرم جیرا متوقف نشود یا خطای غیرمنتظره ندهد.
پروژهای مشابه در سازمان خودتان دارید؟ خوشحال میشویم دربارهی آن صحبت کنیم.