支給額マスタを更新する際の注意点
給与計算トリガーで支給額マスタを更新する際には、以下の点に注意してください。
支払マスタに複数の計算パターンに紐づく従業員が存在している場合
Combositeの給与計算は支払マスタ単位で実行されます。
同じ支払マスタに所属していても、従業員ごとに計算パターンが異なる場合があります。
計算パターンによって利用できる給与項目が違うため、支給額マスタを更新する前に、対象従業員の計算パターンにその給与項目が存在するかを必ず確認してください。
具体例
以下のようなケースで問題が発生する可能性があります:
支払マスタ「25日払い」に所属する従業員
- 田中太郎(正社員計算パターン)
- 佐藤花子(正社員計算パターン)
- 山田次郎(役員計算パターン)
給与項目の設定
- 正社員計算パターン:基本給、残業代、通勤手当、住宅手当
- 役員計算パターン:基本給、役員報酬
この状況で「住宅手当」の支給額マスタを更新しようとした場合:
✅ 正常なケース
- 田中太郎、佐藤花子:正社員計算パターンに「住宅手当」が存在するため更新可能
❌ エラーになるケース
- 山田次郎:役員計算パターンに「住宅手当」が存在しないため更新時にエラーが発生
対策
支給額マスタを更新する前に、以下を確認してください:
- 対象従業員の計算パターンを確認
- その計算パターンに更新対象の給与項目が存在するかを確認
- 存在しない場合は、その従業員を更新対象から除外するか、適切な給与項目を使用する
計算パターンに給与項目が含まれているか確認する方法
カスタムファンクションでは以下のように計算パターンに給与項目が含まれているかを確認することができます。
詳細は給与項目がふくまれているか確認する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 {
// 期間内に対象項目が存在しない場合の処理
}
ベストプラクティス
- 従業員ごと・期間ごとに有効な計算パターンを必ず確認する
- 計算パターンが切り替わる場合は、切り替え前後で更新対象の給与項目が計算パターンに存在しているか確認する