Operations Blueprint

店舗スタッフ運用管理システム

シフト作成から配属・勤怠・給与計算までを一貫管理し、効率的な人員配置と法令遵守を同じ基盤で扱う。

管理範囲

Shift → Payroll

勤務枠定義から給与計算まで一気通貫

最適化軸

Skill / Cost / Fairness

希望・スキル・コスト・公平性を同時評価

監査性

Append-Only History

時給・配属・設定変更を追跡可能

01

法令準拠をハード制約に置く

原則 1 日 8 時間・週 40 時間の前提、時間外・深夜・休日の割増、休日付与を設計段階から制約化する。

02

希望と店都合を同じ面で見る

第一希望・可・NG と、必要スキル・重要度・不足人員・インセンティブを単一スコアに統合する。

03

変更を局所化して崩さない

NG や欠員は該当枠だけ再計算し、他の確定割当を不用意に動かさない。

04

時点再現できる給与基盤を持つ

勤務時点で有効だった雇用区分と時給を保持し、後から給与と設定状態を再現できる。

Executive Summary

店側の最適化と従業員の納得感を、同じ運用面で扱う

管理者は勤務枠ごとに日時・人数・役割・重要度・代替可否・インセンティブを定義する。

従業員には個別最適化した候補枠だけを見せ、第一希望・入れるなら可・NG を提出してもらう。

自動割当は優先度の高い勤務枠から埋め、スキル適合・希望度・労働時間不足・過労リスクを同時に評価する。

確定シフトは勤怠と給与計算に接続し、勤務時点の時給履歴と割増ルールを適用する。

Operating Flow

入力を増やすのでなく、変更を局所化する流れにする

01

勤務枠を設計する

管理者が必要人数、役割、最低スキル、代替可否、インセンティブを持つ枠を作る。

  • 重要度 high/mid/low
  • required_count と section を紐付け
  • ピーク枠は保護対象として先に定義
02

候補枠を個別配信する

可用性、希望時間、スキル、足りていない曜日を見て、各スタッフに見せる枠を絞り込む。

  • 候補総時間は希望の 1.5-2 倍を目安
  • 不適合枠は最初から除外
  • 不足しやすい枠は表示優先度を上げる
03

優先度付きで自動割当する

高重要度・代替不可・高スキル枠から順に埋め、希望度と不足時間を加点し、過労リスクを減点する。

  • 第一希望を強く加点
  • 週内不足時間を補う人を優先
  • 上限超過はハード制約で拒否
04

NG と欠員だけ再計算する

拒否が出た枠だけを再マッチングし、それでも不足する場合はインセンティブ付きで再募集する。

  • 他枠は固定して影響を局所化
  • ローテーションで偏り防止
  • 通知チャネルから即時募集
05

勤怠と給与を締める

実績打刻から法定内、時間外、深夜、休日時間を分解し、勤務時点の時給履歴で給与計算する。

  • Attendance と ShiftAssignment を接続
  • PayrollLine に適用時給を保存
  • 監査用ログを追加型で保持

Use Cases

飲食、小売、イベント、24 時間施設まで同じ骨格で展開できる

飲食店 / 小売

ホール、キッチン、レジ、バックヤードなど複数役割をまたいで、ピーク帯の必要人数と技能を守りながら回す。

イベント会場

短期スタッフが多い現場で、スマホ経由の希望提出から仮確定・欠員募集までの時間を圧縮する。

24 時間施設

交替勤務の負荷を監視し、連続勤務や深夜偏重を避けながら突発欠員だけを即時に再計算する。

多店舗運用

拠点ごとの繁閑差やスキル分布を見ながら、店横断で欠員補充候補を広げる基盤として拡張できる。

Assignment Logic

ハード制約で守り、ソフト制約で納得感を上げる

Score Function

Score(i, s) = w1 * SkillMatch + w2 * Preference + w3 * ShortageFactor - w4 * OvertimeRisk - w5 * FairnessPenalty + w6 * IncentiveBoost

Hard constraints

  • 必要人数、勤務時間、最低スキル、必須資格を満たすこと。
  • 法定労働時間、休日付与、連続勤務制限、契約上限を超えないこと。
  • 代替不可枠は、代替条件を満たす人だけを割当対象にすること。

Soft constraints

  • 第一希望を最優先しつつ、可は妥協案として扱い、NG は原則除外する。
  • 希望勤務時間に対して未達のスタッフを優先し、総勤務時間の偏りを抑える。
  • 同じ人への欠員補充偏重を避けるため、補充回数に応じて公平性ペナルティを加える。

Candidate display

  • 表示適合度は可用性一致、スキル一致、未達時間、曜日希少性、不足枠優先度で算出する。
  • 候補総時間の目安は希望勤務時間の 1.5-2 倍。少なすぎると選択肢が足りず、多すぎると迷いが増える。
  • 過労超過やスキル不足が明らかな枠は表示対象から外し、UI では判断不能な候補を最初から減らす。

NG / Incentive handling

全体を崩さず、欠員だけを再起動する

  • NG は週ごとに上限を持たせ、超過時は理由入力や管理者承認を必須にする。
  • 再計算は NG が発生した枠だけを対象にし、他の仮確定結果は固定する。
  • 埋まらない枠は追加時給または固定ボーナスを付け、表示優先度と通知優先度を引き上げる。

Data Model

給与再現まで見据えた履歴中心のスキーマ

Staff

従業員の基本属性と現行雇用条件を持つ。

idnamestatusemployment_type_currentmax_hours_per_weekpreferred_hours_per_weekavailability_profile_id

Skill / StaffSkill

必要スキルと従業員スキルレベルを分離し、役割ごとの適合度計算に使う。

Skill.idSkill.nameSkill.level_rangeStaffSkill.staff_idStaffSkill.skill_idStaffSkill.level

Section

役割、必要スキル、代替可否、優先度を保持する。

idnamerequired_skill_idmin_skill_levelprioritysubstitutable

AvailabilityProfile

曜日・時間帯・特定日 NG をまとめ、候補枠生成の起点にする。

staff_idavailable_daysavailable_time_rangesweekend_preferenceweekday_preferencehard_unavailable_dates

ShiftRequirement

必要人数つきの勤務枠本体。シフト募集と割当の単位。

iddatestart_timeend_timesection_idrequired_countpriorityincentive_flagincentive_amount

ShiftAssignment

各枠への仮割当・確定・拒否状態とスコアを保持する。

idshift_requirement_idstaff_idstatusassigned_score

WageHistory

雇用区分と時給の履歴を追加型で保持し、勤務時点の賃率を確定する。

idstaff_idemployment_typehourly_rateeffective_fromeffective_toreasonchanged_bycreated_at

Attendance / PayrollLine

実績打刻と給与内訳を紐付け、監査可能な計算結果を残す。

Attendance.clock_inAttendance.clock_outAttendance.break_minutesPayrollLine.applied_hourly_ratePayrollLine.hours_overtimePayrollLine.hours_weekendPayrollLine.total

API Design

フロント、勤怠、給与、外部連携が触れる最小面

GET / POST

/staff

従業員一覧取得と登録。

{ "name": "山田太郎", "max_hours_per_week": 20 }

GET / POST

/skills

スキル定義の登録と一覧取得。

{ "name": "drink_basic", "level_range": [0, 5] }

GET / POST

/shift_requirements

勤務枠の作成と一覧取得。

{ "date": "2026-04-01", "start_time": "18:00", "end_time": "22:00", "section_id": 5, "required_count": 2 }

GET / PUT

/shift_assignments

仮割当の確認と状態更新。

{ "id": 10, "status": "confirmed" }

GET / POST

/availability_profiles

可用性プロフィールの登録と取得。

{ "staff_id": 1, "available_days": ["Mon", "Tue"], "available_time_ranges": ["17:00-22:00"] }

GET / POST

/wage_history

時給履歴と雇用区分履歴の登録。

{ "staff_id": 1, "hourly_rate": 1200, "effective_from": "2026-07-01", "reason": "昇給" }

POST

/attendance

実績打刻の登録。

{ "staff_id": 2, "shift_assignment_id": 15, "clock_in": "18:05", "clock_out": "22:10", "break_minutes": 15 }

POST

/payroll

期間指定で給与計算を実行。

{ "period_start": "2026-04-01", "period_end": "2026-04-30" }

Payroll & Audit

勤務時点の条件で計算し、後から説明できる形で残す

Payroll logic

  • 勤務日ごとに WageHistory を検索し、その時点で有効な hourly_rate と employment_type を PayrollLine に焼き込む。
  • Attendance から法定内、時間外、休日、深夜の時間帯を分解し、各時間数を別カラムで保存する。
  • 基本式: total = normal * rate + overtime * rate * 1.25 + holiday * rate * 1.35 + midnight * rate * 1.25 + bonus。
  • 月 60 時間超の時間外や深夜との重複は、制度差分を切り替えられる計算モジュールとして実装する。

Audit design

  • 時給変更、雇用区分変更、シフト設定変更、給与再計算はすべて追加型履歴として残す。
  • 誰がいつ何を変えたかをアプリケーションログと監査ログの両方に残す。
  • PayrollLine には適用時給、雇用区分、対象打刻 ID、計算実行時刻を保存し、後追い検証を可能にする。

Roadmap

MVP で現場に入り、需要予測と多店舗最適化へ拡張する

MVP

現場投入できる最小構成

  • 従業員・スキル・セクション登録
  • 勤務枠定義と候補提示
  • 重要度順の自動割当
  • 勤怠入力と基本的な割増計算
  • 未回答枠と欠員のダッシュボード

Short term

運用の詰まりを減らす拡張

  • シフト交換と代打依頼
  • インセンティブ付き欠員募集
  • プッシュ通知とモバイル最適化
  • POS・予約・HR システム連携

Mid term

需給予測と多拠点展開

  • 売上予測連動の必要人数調整
  • 多店舗・多国籍対応
  • 退職リスクや満足度分析
  • 法改正追従のルール更新基盤

Closing View

価値はシフト表そのものではなく、変更に耐える運用を作ること

このシステムは、人員配置の最適化、法令遵守、従業員満足、監査可能な給与計算を一つの運用面にまとめる。現場の価値は、シフト表を作ることではなく、変更に強い運用をつくることにある。

トップへ戻る