Formulaにより定義されたレート

FastFormulaに基づいてレートを定義できます。

従業員が通常のジョブよりも高い等級のジョブに勤務できる例を考えてみます。その従業員に支払われるレートは様々な基準に基づいており、ルールも含まれています(最小レートは少なくとも1.00とするなど)。Formulaを使用して等級を次のレベルに設定し、その上位の等級に割り当てられたレートを返すことができます。

「レート定義」ページの「計算Formula」フィールドで、「HCMレートの値の計算」Formulaタイプを選択します。Formulaタイプでは、アサイメント、給与関係、ジョブなどのコンテキストがサポートされます。すべての標準データベース・アイテムからレート定義の正しいFormulaを選択および作成できます。

Formulaの記述

Formulaタイプが「HCMレートの値の計算」の場合、独自のFormulaを記述できます。

Formulaには特定の入力値と戻り値がありますが、レートは常に次の値を返します。

  • 金額

  • 通貨

  • 周期性

ノート: FormulaレートはGlobal Payrollでのみサポートされます。

このFormulaでは、戻り値は65.23に設定されていますが、レート戻り値の計算に必要なロジックを追加できます。

Default for value_name is EMPTY_TEXT_NUMBER
default for value_value is EMPTY_TEXT_NUMBER 
default for value_datatype is EMPTY_TEXT_NUMBER 

inputs are 

          value_name (text_number), 
           value_value (text_number), 
           value_datatype (text_number), 

AMOUNT = 65.23 
CURRENCY = 'USD'
PERIODICITY = 'YEAR' 
 return AMOUNT, CURRENCY, PERIODICITY 

Formulaがジョブに基づいてレートを返す別の例を考えてみましょう。このFormulaを使用して、従業員が通常のジョブよりも高い等級のジョブで勤務する際のレート値を計算できます。

default for value_name is EMPTY_TEXT_NUMBER
default for value_value is EMPTY_TEXT_NUMBER
default for value_datatype is EMPTY_TEXT_NUMBER

default for PER_ASG_ELIG_JOBS_CURRENCY is 'UNKNOW'
default for PER_ASG_ELIG_JOBS_END_DATE is '0001/01/01 00:00:00' (date)
default for PER_ASG_ELIG_JOBS_FREQUECY is 'YEARLY'
default for PER_ASG_ELIG_JOBS_FROM_DATE is '0001/01/01 00:00:00' (date)
default for PER_ASG_ELIG_JOBS_JOB_CODE is 'UNKNOW'
default for PER_ASG_ELIG_JOBS_JOB_ID is 0
default for PER_ASG_ELIG_JOBS_JOB_NAME is 'UNKNOWN'
default for PER_ASG_ELIG_JOBS_MANUAL_RATE is 0
default for PER_ASG_JOB_ID is 0

inputs are
           value_name (text_number),
           value_value (text_number),
           value_datatype (text_number)

    AMOUNT = 0
    PERIODICITY = 'YEARLY'
    CURRENCY = 'USD'

    l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - count is                  : ' || to_char(value_name.count))
    l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - count2 is                 : ' || to_char(value_value.count))
    l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - count3 is                 : ' || to_char(value_datatype.count))

    l_job_id = PER_ASG_JOB_ID
    l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_job_id is                  : ' || to_char(l_job_id))

    i = 0
    while (i < value_name.count) loop
    (
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - name is                  : ' || value_name[i])
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - value is                 : ' || value_value[i])
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - datatype is              : ' || value_datatype[i])

        if(value_name[i] = 'PER_ASG_JOB_ID') then
        (
            l_job_id = to_num(value_value[i])
            l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_job_id has been set with          : ' || to_char(l_job_id))
        )

        i = i + 1
    )

    CHANGE_CONTEXTS(JOB_ID = l_job_id)
    (
        l_t_dummy = PER_ASG_ELIG_JOBS_CURRENCY
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_t_dummy is                  : ' || l_t_dummy)
        if(l_t_dummy != 'UNKNOW') then
        (
            CURRENCY = l_t_dummy
        )

        l_dt_dummy = PER_ASG_ELIG_JOBS_END_DATE
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_dt_dummy is                  : ' || to_char(l_dt_dummy))

        l_t_dummy = PER_ASG_ELIG_JOBS_FREQUECY
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_t_dummy is                  : ' || l_t_dummy)
        if(l_t_dummy != 'UNKNOW') then
        (
            PERIODICITY = l_t_dummy
        )

        l_dt_dummy = PER_ASG_ELIG_JOBS_FROM_DATE
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_dt_dummy is                  : ' || to_char(l_dt_dummy))

        l_t_dummy = PER_ASG_ELIG_JOBS_JOB_CODE
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_t_dummy is                  : ' || l_t_dummy)

        l_n_dummy = PER_ASG_ELIG_JOBS_JOB_ID
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_n_dummy is                  : '||to_char(l_n_dummy))

        l_t_dummy = PER_ASG_ELIG_JOBS_JOB_NAME
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_t_dummy is                  : ' || l_t_dummy)

        l_n_dummy = PER_ASG_ELIG_JOBS_MANUAL_RATE
        l_log = PAY_INTERNAL_LOG_WRITE('[RATE_FML] - l_n_dummy is                  : '||to_char(l_n_dummy))
        if(l_n_dummy > 0) then
        (
            AMOUNT = l_n_dummy
        )
    )

return AMOUNT, PERIODICITY, CURRENCY