TIAS حضور و حقوق تیاس
ارتباط با بک‌اند برقرار نیست. {{ toast }}
Release 0.6.5 · Period Closing & Leave Ledger

{{ isEmployee ? 'پنل کارکرد و درخواست‌های من' : 'حضور، کارکرد و گردش تأیید تیاس' }}

{{ isEmployee ? 'ترددها، نتیجه‌ی محاسبه و درخواست‌های خودت را در یک صفحه ببین.' : 'محاسبه‌ی حضور، مرخصی و مجوزها با سابقه‌ی قابل حسابرسی.' }}

هسته آماده است
mdi-calendar-clock{{ tehranDateTimeLabel }}به وقت تهران
دوره
{{ attendancePeriodLabel }}
دوره‌ی کارکرد ماهانه
زمان
{{ toPersianDigits(foundation.schedule_profiles?.length || 0) }}
پروفایل برنامه‌ی کاری
CSV
{{ toPersianDigits(sources.length) }}
فایل ورودی حضور
افراد
{{ toPersianDigits(assignedCurrentEmployeeCount) }}/{{ toPersianDigits(employees.length) }}
انتساب برنامه‌ی کاری
پنل من نمای کلی برنامه‌های کاری مرجع کارکنان انتساب کارکنان منابع داده مانده‌ی مرخصی نهایی‌سازی دوره مرخصی و تأییدها حساب‌های کاربری تاریخچه و حسابرسی دفتر تصمیم‌ها

{{ employeeDisplayName(employeePortal.employee) }}

{{ employeePortal.employee?.employee_id }} · فقط اطلاعات حساب پرسنلی شما نمایش داده می‌شود.

تازه‌سازیدرخواست جدید
هنوز نتیجه‌ی محاسبه‌ای برای حساب شما ذخیره نشده است. منابع انسانی باید محاسبه‌ی دوره را اجرا کند.

مانده‌ی مرخصی من

درخواست‌های در انتظار از مانده‌ی قابل استفاده رزرو می‌شوند؛ مرخصی بدون حقوق فقط سابقه‌ی مصرف دارد.

هنوز دوره‌ای برای محاسبه‌ی مانده‌ی مرخصی وجود ندارد.
سهم باحقوق تا این دوره{{ formatLeaveBalance(personalLeaveBalance.paid_entitlement_millidays + personalLeaveBalance.paid_adjustment_millidays) }}
مصرف باحقوق{{ formatLeaveBalance(personalLeaveBalance.paid_used_millidays) }}
در انتظار باحقوق{{ formatLeaveBalance(personalLeaveBalance.paid_pending_millidays) }}
مانده‌ی باحقوق{{ formatLeaveBalance(personalLeaveBalance.paid_available_millidays) }}
سهم استعلاجی تا این دوره{{ formatLeaveBalance(personalLeaveBalance.sick_entitlement_millidays + personalLeaveBalance.sick_adjustment_millidays) }}
مصرف استعلاجی{{ formatLeaveBalance(personalLeaveBalance.sick_used_millidays) }}
در انتظار استعلاجی{{ formatLeaveBalance(personalLeaveBalance.sick_pending_millidays) }}
مانده‌ی استعلاجی{{ formatLeaveBalance(personalLeaveBalance.sick_available_millidays) }}
مرخصی بدون حقوق مصرف‌شده{{ formatLeaveBalance(personalLeaveBalance.unpaid_used_millidays) }}

کارکرد روزانه‌ی من

این جدول آخرین محاسبه‌ی موفق دوره‌ی انتخاب‌شده را نشان می‌دهد و داده‌ی خام را تغییر نمی‌دهد.

دریافت CSV این دوره
داده‌ی روزانه‌ای برای نمایش وجود ندارد.
ردیفتاریخروزوضعیتدرخواستورودخروجحضور عادیکسرکار اولیهکسرکار نهاییاضافه‌کار عادیاضافه‌کار تعطیلیاضافه‌کار قابل پرداخت
{{ index + 1 }}{{ day.work_date }}{{ day.weekday }}{{ day.source_status || '—' }} اصلاح‌شده{{ day.entry || '—' }}{{ day.exit || '—' }}{{ formatMinutes(day.normal_presence_minutes) }}{{ formatMinutes(day.gross_underwork_minutes) }}{{ formatMinutes(day.underwork_minutes) }}{{ formatMinutes(day.ordinary_overtime_minutes) }}{{ formatMinutes(day.holiday_overtime_minutes) }}{{ formatMinutes(day.payable_overtime_minutes) }}
{{ issue.severity === 'error' ? 'خطا' : 'هشدار' }}
{{ issue.code }}

{{ issue.message }}

تاریخ {{ issue.context?.work_date || issue.context?.from_date || '—' }}

درخواست‌های من

تا پیش از تصمیم مدیر می‌توانی درخواست ثبت‌شده‌ی خودت را ویرایش یا پس بگیری.

هنوز درخواستی ثبت نکرده‌ای.
ردیفتاریخنوعمقداروضعیتشرحعملیات
{{ index + 1 }}{{ item.work_date }}{{ requestTypeLabel(item.request_type) }}{{ requestAmountLabel(item) }}{{ requestStatusLabel(item.status) }}{{ item.reason }}تاریخچهویرایشپس‌گرفتن
{{ employeePortal.request_pagination.total }} رکورد
قواعد تثبیت‌شده‌ی نسخه
ناهار و استراحتجزو کارکرد
اضافه‌کار قابل پرداختفقط تأییدشده
ورود زودهنگامنیازمند مجوز
تشخیص تعطیل رسمیوضعیت CSV
مرز Release 0.6
  • حساب پرسنلی با دسترسی محدود به داده‌ی خود
  • مشاهده‌ی کارکرد روزانه و خلاصه‌ی آخرین محاسبه
  • ثبت، ویرایش و پس‌گرفتن درخواست پیش از تصمیم مدیر
  • درخواست اصلاح تردد با سابقه‌ی حسابرسی
  • اعمال اصلاح تردد تأییدشده بر نسخه‌ی عملیاتی محاسبه، بدون تغییر CSV خام

پروفایل‌های برنامه‌ی کاری

نمایش فشرده است؛ افزودن و ویرایش در پنجره‌ی مستقل انجام می‌شود.

افزودن برنامه
ردیف شناسه عنوان ورود
قابل محاسبه
ورود
بدون کسر
موظفی عادی
شنبه تا سه‌شنبه
اضافه‌کار
اجباری
موظفی عادی
چهارشنبه
اضافه‌کار
اجباری
پنج‌شنبه وضعیت عملیات
{{ index + 1 }} {{ profile.id }} {{ profile.name }} {{ profile.ordinary_earliest_counted_entry }} {{ profile.ordinary_latest_entry }} {{ formatMinutes(profile.sat_tue_regular_minutes) }} {{ formatMinutes(profile.sat_tue_mandatory_overtime_minutes) }} {{ formatMinutes(profile.wednesday_regular_minutes) }} {{ formatMinutes(profile.wednesday_mandatory_overtime_minutes) }} {{ formatMinutes(profile.thursday_mandatory_overtime_minutes) }} {{ profile.active ? 'فعال' : 'غیرفعال' }}

مرجع مستقل کارکنان

کارکنان مستقل از CSV ماهانه ثبت می‌شوند. نام و نام خانوادگی عمداً جدا هستند و رکوردها به‌جای حذف، غیرفعال می‌شوند.

افزودن کارمند
ردیفوضعیتعملیات
{{ index + 1 }}{{ employee.employee_id }}{{ employeeDisplayName(employee) }} نیازمند تفکیک نام{{ employee.source_employee_id || '—' }}{{ employee.attendance_mode === 'exempt' ? 'معاف از ثبت تردد' : 'مشمول ثبت تردد' }}{{ employee.active ? 'فعال' : 'غیرفعال' }}ویرایش

انتساب برنامه‌ی کاری کارکنان

این فهرست مستقل از CSV ماهانه ذخیره می‌شود. موتور بدون انتساب معتبر هیچ برنامه‌ای را حدس نمی‌زند.

همه غیرخدماتی همه خدماتی ذخیره‌ی انتساب‌ها
ابتدا یک CSV حضور اضافه کن تا کارکنان شناسایی شوند.
ردیف برنامه‌ی کاری تاریخ
شروع اثر
{{ index + 1 }} {{ row.employee_id }} {{ employeeDisplayName(row) }} {{ row.source_employee_id }}

ورودی‌های حضور

CSV را بازرسی یا استخراج کن؛ پس از ذخیره‌ی انتساب برنامه‌های کاری، محاسبه‌ی آزمایشی دوره در دسترس است.

افزودن CSVقالب CSVتازه‌سازی
هنوز فایل CSV اضافه نشده است.
CSV
{{ item.name }}{{ formatBytes(item.size_bytes) }}
بازرسیاستخراجمحاسبه

دفتر مانده‌ی مرخصی

سهم هر دوره: ۲٫۵ روز باحقوق و ۱ روز استعلاجی. درخواست‌های در انتظار از مانده‌ی قابل استفاده رزرو می‌شوند.

تازه‌سازیثبت تعدیل
مانده‌ی باحقوق مثبت یا منفی از آخرین دوره‌ی نهایی‌شده خودکار منتقل می‌شود؛ مانده‌ی استعلاجی در پایان هر دوره منقضی می‌شود. اطلاعاتی برای نمایش وجود ندارد.
ردیفمانده‌ی انتقالیسهم دورهتعدیلمصرفدر انتظارماندهسهم استعلاجیمصرفدر انتظارماندهبدون حقوقعملیات
{{ index + 1 }}{{ item.employee_id }}{{ employeeDisplayName(item) }}{{ formatLeaveBalance(item.paid_opening_millidays) }}{{ formatLeaveBalance(item.paid_entitlement_millidays) }}{{ formatLeaveBalance(item.paid_adjustment_millidays) }}{{ formatLeaveBalance(item.paid_used_millidays) }}{{ formatLeaveBalance(item.paid_pending_millidays) }}{{ formatLeaveBalance(item.paid_available_millidays) }}{{ formatLeaveBalance(item.sick_entitlement_millidays) }}{{ formatLeaveBalance(item.sick_used_millidays) }}{{ formatLeaveBalance(item.sick_pending_millidays) }}{{ formatLeaveBalance(item.sick_available_millidays) }}{{ formatLeaveBalance(item.unpaid_used_millidays) }}تعدیل

نهایی‌سازی و قفل دوره

فقط دوره‌ای که محاسبه‌ی معتبر و هیچ درخواست در انتظاری ندارد قابل نهایی‌سازی است.

تازه‌سازی
ردیفدورهوضعیتآخرین محاسبهکنترل آمادگیعملیات
{{ index + 1 }}{{ periodLabel(period) }}{{ periodStatusLabel(period.status) }}{{ period.latest_calculated_at ? formatDateTime(period.latest_calculated_at) : '—' }}بررسیشروع بررسینهایی‌سازیبازگشاییخروجی نهایی
برای مشاهده یا مدیریت درخواست‌ها ابتدا وارد سامانه شوید.

حساب‌های کاربری

حساب اشتباه حذف فیزیکی نمی‌شود؛ آن را ویرایش یا غیرفعال کن تا سابقه‌ی حسابرسی محفوظ بماند.

حساب جدید
ردیفوضعیتعملیات
{{ index + 1 }}{{ user.username }}{{ accountDisplayName(user) }}{{ (user.roles || [user.role]).map(roleLabel).join('، ') }}{{ user.employee_id || '—' }}{{ user.active ? 'فعال' : 'غیرفعال' }}ویرایشبازنشانی رمز{{ user.active ? 'غیرفعال‌سازی' : 'فعال‌سازی' }}

تاریخچه و حسابرسی

نسخه‌های محاسبه و تغییرات مهم بدون بازنویسی سوابق قبلی نگهداری می‌شوند.

تازه‌سازی
{{ persistenceStatus.backend }}موتور پایگاه داده
{{ persistenceStatus.schema_version }}نسخه‌ی ساختار
{{ persistenceStatus.calculation_run_count || 0 }}اجرای ذخیره‌شده
{{ persistenceStatus.employee_reference_count || 0 }}مرجع کارکنان
{{ persistenceStatus.audit_event_count || 0 }}رویداد حسابرسی
{{ persistenceStatus.workflow_request_count || 0 }}درخواست ثبت‌شده
{{ persistenceStatus.user_account_count || 0 }}حساب کاربری

اجرای محاسبات

هنوز اجرای محاسباتی در پایگاه داده ثبت نشده است.
ردیفشناسه‌ی اجرازمان ثبتفایل مبدأدورهوضعیتکارکنانخروجی خلاصه
{{ index + 1 }} {{ shortId(run.id) }} {{ formatDateTime(run.generated_at) }} {{ run.source_file }} {{ run.report_period?.from }} – {{ run.report_period?.to }} {{ statusLabel(run.status) }} {{ run.summary?.employee_count || 0 }} دریافت

رویدادهای حسابرسی

ردیفزمانعملیاتنوع موجودیتشناسهعاملدلیل
{{ index + 1 }} {{ formatDateTime(event.occurred_at) }} {{ actionLabel(event.action) }} {{ event.entity_type }} {{ shortId(event.entity_id) }} {{ event.actor }} {{ event.reason || '—' }}
دفتر تصمیم‌های معماری
{{ decision.id }}

{{ decision.title }}

{{ decision.summary }}

ورود به سامانهانصرافورود {{ requestEditorMode === 'edit' ? 'ویرایش درخواست' : 'ثبت درخواست جدید' }}
{{ requestSuggestion }} این درخواست قبلاً تصمیم‌گیری شده است. با ذخیره‌ی هر نوع ویرایش، تصمیم قبلی کنار گذاشته می‌شود و درخواست برای تأیید مجدد به وضعیت «در انتظار» برمی‌گردد.
انتخاب تاریخ از دوره{{ attendanceCalendar.report_period.from }} – {{ attendanceCalendar.report_period.to }}
ابتدا کارمند را انتخاب کن.
{{ weekday }}
تردد همان روزوضعیت: {{ selectedAttendanceDay.status }}ورود: {{ selectedAttendanceDay.entry || '—' }}خروج: {{ selectedAttendanceDay.exit || '—' }}کسرکار اولیه: {{ formatMinutes(selectedAttendanceDay.gross_underwork_minutes) }}برای نمایش سقف کسرکار، ابتدا محاسبه‌ی آزمایشی را اجرا کن.
انصراف{{ requestEditorMode === 'edit' ? 'ذخیره‌ی ویرایش' : 'ثبت و ارسال' }}
{{ decisionForm.decision === 'approve' ? 'تأیید درخواست' : 'رد درخواست' }}

{{ requestTypeLabel(decisionForm.request.request_type) }} برای {{ decisionForm.request.employee_id }} در تاریخ {{ decisionForm.request.work_date }}

{{ decisionForm.request.start_time }} – {{ decisionForm.request.end_time || '—' }}

تردد همان روزوضعیت: {{ decisionAttendanceDay.status }}ورود: {{ decisionAttendanceDay.entry || '—' }}خروج: {{ decisionAttendanceDay.exit || '—' }}کسرکار اولیه: {{ formatMinutes(decisionAttendanceDay.gross_underwork_minutes) }}
انصرافثبت تصمیم
{{ employeeEditorMode === 'add' ? 'افزودن کارمند' : 'ویرایش کارمند' }}
نام خانوادگی چندبخشی را کامل وارد کن. شناسه‌ی منبع باید یکتا باشد؛ خالی‌کردن آن، اتصال فعلی CSV را غیرفعال می‌کند.
انصرافذخیره
{{ userEditorMode === 'add' ? 'ساخت حساب کاربری' : 'ویرایش حساب کاربری' }}
انصرافذخیره
تغییر رمز عبور

{{ passwordForm.user?.display_name }}

انصرافثبت رمز
تغییر رمز عبور منانصرافثبت رمز تاریخچه‌ی درخواستبستن
{{ workflowActionLabel(action.action) }} · {{ requestStatusLabel(action.to_status) }}{{ action.actor?.display_name || '—' }} · {{ formatDateTime(action.occurred_at) }}

{{ action.note || 'بدون توضیح' }}

{{ scheduleEditorMode === 'add' ? 'افزودن برنامه‌ی کاری' : 'ویرایش برنامه‌ی کاری' }}
انصرافذخیره‌ی برنامه
حذف برنامه‌ی کاری

برای حذف «{{ scheduleToDelete.name }}» عنوان برنامه را وارد کن. برنامه‌ی منتسب‌شده قابل حذف نیست.

انصرافحذف
نتیجه‌ی بازرسیبستن {{ inspection.recognized_as_attendance_csv ? 'هر هشت ستون الزامی CSV شناسایی شدند.' : 'ساختار CSV کامل نیست؛ فهرست ستون‌های مفقود را بررسی کن.' }}
نام فایل
{{ inspection.name }}
تعداد ردیف داده
{{ inspection.row_count }}
تعداد ستون
{{ inspection.column_count }}
Encoding
{{ inspection.encoding }}
SHA-256
{{ inspection.sha256 }}

ستون‌های فایل

{{ header }}
ستون‌های مفقود: {{ inspection.missing_fields.join(', ') }}
نتیجه‌ی محاسبه‌ی آزمایشی {{ calculationResult.source.file_name }} · Engine {{ calculationResult.engine_version }} · Run {{ shortId(calculationResult.persistence?.run_id) }}
بستن
{{ calculationResult.summary.status === 'invalid' ? 'محاسبه کامل نیست؛ خطاهای مانع‌دار را اصلاح کن.' : calculationResult.summary.status === 'ready_with_warnings' ? 'محاسبه انجام شد و موارد نیازمند بررسی نیز گزارش شده‌اند.' : 'محاسبه بدون خطا یا هشدار انجام شد.' }}
{{ calculationResult.summary.employee_count }} پرسنل
{{ calculationResult.summary.valid_day_count }} روز معتبر
{{ formatMinutes(calculationResult.summary.required_minutes) }} موظفی عادی
{{ formatMinutes(calculationResult.summary.eligible_presence_minutes) }} حضور مؤثر
{{ formatMinutes(calculationResult.summary.normal_presence_minutes) }} حضور عادی
{{ formatMinutes(calculationResult.summary.gross_underwork_minutes) }} کسرکار اولیه
{{ formatMinutes(calculationResult.summary.underwork_minutes) }} کسرکار نهایی
{{ formatMinutes(calculationResult.summary.ordinary_overtime_minutes) }} اضافه‌کار عادی
{{ formatMinutes(calculationResult.summary.holiday_overtime_minutes) }} اضافه‌کار تعطیلی
{{ formatMinutes(calculationResult.summary.mandatory_overtime_shortfall_minutes) }} کسری تعهد اضافه‌کار
{{ formatMinutes(calculationResult.summary.paid_leave_minutes) }}مرخصی باحقوق
{{ formatMinutes(calculationResult.summary.sick_leave_minutes) }}مرخصی استعلاجی
{{ formatMinutes(calculationResult.summary.unpaid_leave_minutes) }}مرخصی بدون حقوق
{{ formatMinutes(calculationResult.summary.payable_overtime_minutes) }}اضافه‌کار قابل پرداخت
دریافت JSON جزئیات روزانه خلاصه‌ی کارکنان ضرایب ریالی: عادی ۱٫۴ · تعطیلی ۱٫۸

خلاصه‌ی کارکنان

ردیف شناسه نام روز
نامعتبر
موظفی
عادی
حضور
خام
حضور
مؤثر
حضور
عادی
کسرکار
اولیه
مرخصی
باحقوق
مرخصی
استعلاجی
مرخصی
بدون حقوق
کارکرد عادی
قابل پرداخت
مصرف باحقوق
(روز)
مانده باحقوق
(روز)
مصرف استعلاجی
(روز)
مانده استعلاجی
(روز)
کسرکار
نهایی
اضافه‌کار
عادی
اضافه‌کار
تعطیلی
کسری تعهد
اضافه‌کار
اضافه‌کار
قابل پرداخت
تأخیر
{{ index + 1 }} {{ employee.employee_id }} {{ employeeName(employee.employee_id) }} {{ employee.summary.invalid_day_count }} {{ formatMinutes(employee.summary.required_minutes) }} {{ formatMinutes(employee.summary.raw_presence_minutes) }} {{ formatMinutes(employee.summary.eligible_presence_minutes) }} {{ formatMinutes(employee.summary.normal_presence_minutes) }} {{ formatMinutes(employee.summary.gross_underwork_minutes) }} {{ formatMinutes(employee.summary.paid_leave_minutes) }} {{ formatMinutes(employee.summary.sick_leave_minutes) }} {{ formatMinutes(employee.summary.unpaid_leave_minutes) }} {{ formatMinutes(employee.summary.payable_regular_minutes) }} {{ formatLeaveDays(employee.summary.paid_leave_consumed_millidays) }} {{ formatLeaveDays(employee.summary.paid_leave_remaining_millidays) }} {{ formatLeaveDays(employee.summary.sick_leave_consumed_millidays) }} {{ formatLeaveDays(employee.summary.sick_leave_remaining_millidays) }} {{ formatMinutes(employee.summary.underwork_minutes) }} {{ formatMinutes(employee.summary.ordinary_overtime_minutes) }} {{ formatMinutes(employee.summary.holiday_overtime_minutes) }} {{ formatMinutes(employee.summary.mandatory_overtime_shortfall_minutes) }} {{ formatMinutes(employee.summary.payable_overtime_minutes) }} {{ formatMinutes(employee.summary.late_minutes) }}
نتیجه‌ی استخراج {{ importResult.source.file_name }}
بستن
{{ importResult.summary.status === 'invalid' ? 'خطاهای مانع‌دار وجود دارد؛ پیش از محاسبه باید اصلاح شوند.' : importResult.summary.status === 'ready_with_warnings' ? 'داده‌ها آماده‌اند، اما موارد نیازمند بررسی انسانی وجود دارد.' : 'داده‌ها بدون خطا یا هشدار آماده‌اند.' }}
{{ importResult.summary.employee_count }} پرسنل
{{ importResult.summary.day_count }} روز
{{ importResult.summary.interval_count }} بازه‌ی تردد
{{ importResult.summary.warning_count }} هشدار
{{ importResult.summary.error_count }} خطا
دریافت JSON دریافت CSV دوره‌ی شناسایی‌شده: {{ importResult.report_period.from || '—' }} تا {{ importResult.report_period.to || '—' }}

پیش‌نمایش پرسنل

شناسه‌ی
تیاس
شناسه‌ی
زمان‌پرداز
نام ردیف‌های
منبع
روزها بازه‌های
تردد
{{ employee.employee_id || '—' }}{{ employee.source_employee_id || '—' }}{{ employee.employee_name || '—' }}{{ employee.source_rows.first }}–{{ employee.source_rows.last }}{{ employee.days.length }}{{ employee.days.reduce((sum, day) => sum + day.intervals.length, 0) }}
ثبت تعدیل مانده‌ی مرخصی
انصرافثبت تعدیل