メインコンテンツまでスキップ

支給額マスタを更新する際の注意点

給与計算トリガーで支給額マスタを更新する際には、以下の点に注意してください。

支払マスタに複数の計算パターンに紐づく従業員が存在している場合

Combositeの給与計算は支払マスタ単位で実行されます。
同じ支払マスタに所属していても、従業員ごとに計算パターンが異なる場合があります。
計算パターンによって利用できる給与項目が違うため、支給額マスタを更新する前に、対象従業員の計算パターンにその給与項目が存在するかを必ず確認してください。

具体例

以下のようなケースで問題が発生する可能性があります:

支払マスタ「25日払い」に所属する従業員

  • 田中太郎(正社員計算パターン)
  • 佐藤花子(正社員計算パターン)
  • 山田次郎(役員計算パターン)

給与項目の設定

  • 正社員計算パターン:基本給、残業代、通勤手当、住宅手当
  • 役員計算パターン:基本給、役員報酬

この状況で「住宅手当」の支給額マスタを更新しようとした場合:

正常なケース

  • 田中太郎、佐藤花子:正社員計算パターンに「住宅手当」が存在するため更新可能

エラーになるケース

  • 山田次郎:役員計算パターンに「住宅手当」が存在しないため更新時にエラーが発生

対策

支給額マスタを更新する前に、以下を確認してください:

  1. 対象従業員の計算パターンを確認
  2. その計算パターンに更新対象の給与項目が存在するかを確認
  3. 存在しない場合は、その従業員を更新対象から除外するか、適切な給与項目を使用する
計算パターンに給与項目が含まれているか確認する方法

カスタムファンクションでは以下のように計算パターンに給与項目が含まれているかを確認することができます。
詳細は給与項目がふくまれているか確認するAPIを参照してください。

const { keisanPatternData } = combositeDataService
const employeeIdList = ['FM001275', 'FM001276']
const kyuyoKomokuName = '住宅手当'
const term = {
start: '2025/01/01',
end: '2025/01/31',
}

// `住宅手当`が計算パターンに存在している従業員IDのリストを取得
const targetEmployeeIdList = (
await Promise.all(
employeeIdList.map(async (employeeId) => {
const kyuyoKomokuFirstDate =
await keisanPatternData.getFirstDateByTermAndKyuyoKomokuName(
employeeId,
kyuyoKomokuName,
term
)

// 期間内で給与項目が有効となる最初の日付が存在する場合は、その従業員IDを返す
return kyuyoKomokuFirstDate ? employeeId : null
})
)
).filter((e) => e !== null) // null以外の値のみを残す

計算パターンが切り替わった場合

計算パターンによって紐づいている給与項目が異なる場合があります。
給与計算期間中に従業員の計算パターンが切り替わる場合、支給額マスタの適用日(支給を開始・変更する日)を切り替える必要があります。

具体例

支払マスタ「25日払い」に所属する従業員

  • 田中太郎(正社員計算パターン → 役員計算パターンに切り替え)

給与項目の設定

  • 正社員計算パターン:基本給、残業代、通勤手当、住宅手当
  • 役員計算パターン:基本給、役員報酬

ケース:田中太郎が1月15日付で役員計算パターンに切り替わった場合

  • 1/1~1/14:役員計算パターン(住宅手当なし)
  • 1/15~:正社員計算パターン(住宅手当あり)

この場合、「住宅手当」の支給額マスタは1/15以降のみ更新対象となります。

正常なケース

  • 適用日(baseDate)を1/15以降に設定する

エラーになるケース

  • 適用日(baseDate)を1/14以前に設定する
カスタムファンクションでの実装例
備考

APIの詳細についてはこちらを参照してください。

const { keisanPatternData, shikyukojoData } = combositeDataService
const employeeId = 'FM001275'
const kyuyoKomokuName = '住宅手当'
const term = {
start: '2025/01/01',
end: '2025/01/31',
}

// 期間内で「住宅手当」が有効となる最初の日付を取得
const firstDate = await keisanPatternData.getFirstDateByTermAndKyuyoKomokuName(
employeeId,
kyuyoKomokuName,
term
)

if (firstDate) {
// firstDate以降の期間のみ支給額マスタを更新
// 例: 支給開始日をfirstDateに設定
await shikyukojoData.saveAmount({
employeeId,
kyuyoKomokuName,
baseDate: firstDate, // 例: '2025/01/15'
// ...その他の更新内容
})
} else {
// 期間内に対象項目が存在しない場合の処理
}

ベストプラクティス

  • 従業員ごと・期間ごとに有効な計算パターンを必ず確認する
  • 計算パターンが切り替わる場合は、切り替え前後で更新対象の給与項目が計算パターンに存在しているか確認する