判定ロジック
税抜換算・端数処理・複数商品同時購入・中途入社退職月の日割り。購入時リアルタイム判定の実装要件。
本ページは非課税判定ロジックを、運用・システム実装の観点で整理したものです。数値は法令・通達の記載精度に合わせて記載しています。
3つの重要原則
Section titled “3つの重要原則”-
直接支払いの原則
会社負担額は会社がスマリテに直接支払い、従業員は自己負担分のみ支払う(現物支給性を担保)。
-
本人負担50%以上の厳守=端数処理
端数で本人負担が50%を割らないよう、「会社負担は切り捨て・本人負担は切り上げ」。
-
税抜判定の原則
50%判定・月7,500円上限判定は、すべて税抜価格で行う。
入力パラメータ
Section titled “入力パラメータ”- 商品税抜価格 / 適用税率(8% or 10%)
- 商品の補助対象区分(食事/飲料/対象外)
- 当月累積会社負担額(税抜・従業員ごと・月初0時リセット)
- 月額補助上限(税抜・デフォルト7,500円・按分設定可)
- 会社負担率(最大50%・デフォルト50%)
- 補助対象区分チェック
- 対象外 — 補助不適用で100%本人負担
- 要確認 — 補助不適用、または警告表示(運用方針で選択)
- 会社負担額・本人負担額の仮算定(端数処理)
仮・会社負担(税抜)= floor(税抜価格 × 会社負担率) ← 切り捨て
仮・本人負担(税抜)= 税抜価格 − 仮・会社負担(税抜) ← 差引=切り上げ側
- 本人負担率バリデーション
仮・本人負担(税抜) ÷ 税抜価格 ≥ 0.5 か?
- false — 設定エラー → 購入ブロック
- 月次上限チェック
当月累積会社負担 + 仮・会社負担 ≤ 上限額 か?
- 上限内 — 確定。
is_tax_exempt = true - 上限超過 — 企業設定により分岐(下表)
- 上限内 — 確定。
- 消費税・最終請求額の確定
本人負担(税込)= floor(本人負担税抜 × (1+税率))
会社負担(税込)= floor(会社負担税抜 × (1+税率))
- 決済・ログ記録
確定した金額で決済し、監査用ログを保存します。
税務通信に基づく公式計算手順(月次合算)
Section titled “税務通信に基づく公式計算手順(月次合算)”各食事の(価額−本人負担)を月で合算 → 税率別(弁当8%/社食10%)に税抜化 → 合算 → 10円未満切捨て → 7,500円判定(税務通信3894-Q12)。
上限超過時のパターン
Section titled “上限超過時のパターン”| パターン | 挙動 | 非課税 |
|---|---|---|
| ①超過ブロック(推奨デフォルト) | 解錠せず決済エラー。「上限到達・自己負担100%に切替を」と通知 | — |
| ②残枠のみ会社負担 | 残枠分(上限−累積)だけ会社負担、超過分は全額本人 | true(残枠分のみ) |
| 採用不可 — 超過すると会社負担全額が課税。「超過分だけ課税」という運用は成立しない | — |
端数処理の具体例(税抜825円・会社負担率50%)
Section titled “端数処理の具体例(税抜825円・会社負担率50%)”- 単純計算:825 × 0.5 = 412.5円
- 会社負担(税抜)= 412円(切り捨て)
- 本人負担(税抜)= 413円(差引)
- 本人負担率 = 413 ÷ 825 = 50.06%(50%以上を確実に満たす)
複数商品の同時購入
Section titled “複数商品の同時購入”合計額で50%判定せず、商品ごとに自己負担率と税率(8%/10%)を判定・計算し、その合計を1トランザクションとして記録します(飲料単体の非課税除外や税率誤計算を防ぐため)。
中途入社・退職月の日割り
Section titled “中途入社・退職月の日割り”日割り上限 = 月額補助上限 × (月中の在籍日数 ÷ 当月の日数) 円未満切り捨て
不当な給与課税を避ける合理的按分。雇用形態別の按分ルールは就業規則・福利厚生規程で明文化してください。
設定パターン別のシミュレーション例
Section titled “設定パターン別のシミュレーション例”企業ごとに「月額上限」「雇用形態別の按分」「1日あたりの利用回数上限」を設定できます。同じ計算ルールでも設定次第で結果が変わる例を示します(金額はすべて税抜・会社負担率50%を前提とした説明用の試算です)。
ケース1:標準設定(正社員・月上限7,500円・回数制限なし)
Section titled “ケース1:標準設定(正社員・月上限7,500円・回数制限なし)”1食700円(税抜)の弁当を毎営業日1回利用、月20営業日の場合。
| 項目 | 内容 |
|---|---|
| 1食あたり会社負担 | 700円 × 50% = 350円 |
| 月間累計(20日) | 350円 × 20日 = 7,000円 |
| 判定 | 上限7,500円以内 → 全額非課税 |
上限まで500円分の余裕があるため、月途中で単価の高い商品(例:850円の弁当)を数回購入しても超過しにくい設定です。
ケース2:雇用形態別に上限を分ける設定
Section titled “ケース2:雇用形態別に上限を分ける設定”同じ会社の中で、雇用形態ごとに月額上限を分けて設定する例です(Q&Aの按分目安を前提)。
| 雇用形態 | 月額上限(税抜) | 1食700円を毎日利用した場合の月間会社負担 | 上限到達までの日数目安 |
|---|---|---|---|
| 正社員(フルタイム) | 7,500円 | 350円×20日=7,000円 | 上限内(約21日で到達) |
| パート(週4日以上) | 5,000円 | 350円×16日(週4日×4週)=5,600円 | 約14日で上限到達 |
| パート(週3日以下) | 3,000円 | 350円×12日(週3日×4週)=4,200円 | 約8〜9日で上限到達 |
上限に到達した従業員は、以降その月は上限超過時のパターン(①ブロックまたは②残枠のみ会社負担)に従って自動的に切り替わります。上限が低い雇用形態ほど、月の後半で自己負担100%に切り替わるタイミングが早くなります。
ケース3:1日あたりの利用回数上限を設定する場合
Section titled “ケース3:1日あたりの利用回数上限を設定する場合”「1日1回まで」と「1日2回まで(朝食+昼食など)」を比較した例です。
| 設定 | 1日の利用イメージ | 判定の考え方 |
|---|---|---|
| 1日1回まで | 昼食のみ弁当700円を購入 | 通常どおり商品単位で判定(会社負担350円) |
| 1日2回まで | 朝食(軽食300円)+昼食(弁当700円)を購入 | 商品ごとに判定し合算(会社負担150円+350円=500円)。月次累計にはこの日の合計500円を加算 |
回数制限を緩めるほど月次上限への到達が早まるため、「1日2回まで」を許可する場合は月額上限を高めに設定するか、上限超過時のパターンを②(残枠のみ会社負担)にしておくと運用が安定します。
ケース4:中途入社月の日割り計算
Section titled “ケース4:中途入社月の日割り計算”6月15日入社(6月は30日間)、月額上限7,500円の正社員の場合。
日割り上限 = 7,500円 × (16日 ÷ 30日) = 4,000円(円未満切り捨て)
入社日から月末までの在籍日数16日分(15日〜30日)で按分し、6月の月額上限は4,000円になります。7月以降は通常の7,500円に戻ります。
ケース5:上限到達時の挙動の違い(①ブロック vs ②残枠のみ)
Section titled “ケース5:上限到達時の挙動の違い(①ブロック vs ②残枠のみ)”月額上限3,000円のパート従業員が、当月すでに2,800円まで会社負担を使っている状態で、750円の弁当を購入しようとした場合。
| パターン | 会社負担 | 本人負担 | 結果 |
|---|---|---|---|
| ①超過ブロック | 0円(購入不可) | ― | 決済エラーとなり、自己負担100%での購入に切り替える必要がある |
| ②残枠のみ会社負担 | 残枠200円(3,000−2,800)まで | 750円−200円=550円 | その場で購入でき、残枠分は非課税のまま確定 |
どちらの設定でも、月7,500円(雇用形態別の上限がある場合はその上限)を1円でも超えることはありません。
安全マージン(運用設計)
Section titled “安全マージン(運用設計)”月額上限ギリギリの税込設計は税率の実態次第で超過し得ます。税抜7,500円に対し余裕を持った税込金額(目安:税込8,000円以下)での運用設計を推奨します。8%と10%が混在する場合は特に注意してください。