HC(人件費)自動起票 — 22_bud_headcount
1. 基本情報
焦点質問: HCマスタからどのような給与・社保・源泉の仕訳INVを自動生成するか?
| 項目 | 内容 |
|---|---|
| 関数名 | generateHcInvoices |
| ファイル | 401_bat_rpa.js |
| 入力 | 22_bud_headcount |
| 出力 | 32_wrk_invoice + 31_wrk_order |
| メニュー | 「⚙️ 定期RPA起票 > 👤 HC(人件費)」 |
2. 前提条件・依存関係
| 項目 | 内容 |
|---|---|
| SSOT | 32_wrk_invoice(生成されたINVの正) |
| マスタ依存 | 11_mst_account(科目名は完全一致で登録済であること。キーワード推測禁止) |
| 辞書依存 | 15_mst_dictionary(雇用形態プルダウンの選択肢を管理) |
| 前提: 有効フラグ | 有効フラグ=TRUE の行のみ処理対象。FALSE および空セルはスキップ |
| 前提: 22タブ入力済 | 氏名・ポジション、雇用形態、開始年月、月額給与・報酬が最低限入力されていること |
| 前提: 最終起票年月日 | 手入力。「ここまで作成済み」の意味。RPAは書き戻さない。決済ラグ(月)を減算して利用月ベースに変換し、開始年月からその月まで一括起票する |
| ORD依存 | 31_wrk_order(管理ID+開始年月をキーにORD検索/自動作成。spec_ord.md 参照) |
| 定数依存 | 002_constants.js の RPA_DEFAULTS(税務署・年金事務所・市区町村の名称) |
3. 入力スキーマ
22_bud_headcount カラム定義(V2)
| # | 列名 | 型 | 入力/自動 | 説明 | 制約 |
|---|---|---|---|---|---|
| 1 | 有効フラグ | checkbox | 入力 | FALSE→SKIP | — |
| 2 | 管理ID | string | 入力 | EMP_NNNN | ORDキーの一部 |
| 3 | 氏名・ポジション | string | 入力 | 表示名・摘要に使用 | 必須 |
| 4 | 雇用形態 | string(pulldown) | 入力 | 役員/正社員/アルバイト/業務委託/顧問 | デフォルト科目名の決定に使用 |
| 5 | 科目名 | string(pulldown) | 入力 | 空なら雇用形態からデフォルト決定 | 11_mst_account登録必須 |
| 6 | 取引先名 | string(pulldown) | 入力 | 空なら氏名を使用 | — |
| 7 | 適用年度 | string | 入力 | FY表記 | ORD終了年月の推定に使用 |
| 8 | 入社年月 | date | 入力 | 参考情報 | — |
| 9 | 退職年月 | date | 入力 | 参考情報 | — |
| 10 | 開始年月 | date | 入力 | RPA対象期間の開始 | 必須。月ループの起点 |
| 11 | 終了年月 | date | 入力 | RPA対象期間の終了。空=無期限 | — |
| 12 | 月額給与・報酬 | number | 入力 | 内税(消費税込み総額) | — |
| 13 | 決済手段 | string(pulldown) | 入力 | 銀行振込/口座振替 等 | — |
| 14 | 決済ラグ(月) | number | 入力 | 0=当月、1=翌月 | 支払日・rowTargetYm算出に使用 |
| 15 | 支払基準日 | number | 入力 | 日(1-31)。月末日で上限キャップ | — |
| 16 | 休日調整 | string | 入力 | 前/後/なし | — |
| 17 | CF計上 | string | 入力 | 予算/実績 | — |
| 18 | 免税フラグ | checkbox | 入力 | TRUE=免税事業者→益税Row生成 | — |
| 19 | 源泉所得税額 | number | 入力 | 月額 | — |
| 20 | 源泉消費税額 | number | 入力 | 内税の内訳。免税→益税(Row 1b)、課税→仮払消費税等(Row 2b) | — |
| 21 | 住民税額 | number | 入力 | 月額 | — |
| 22 | 健保料率 | % | 入力 | — | — |
| 23 | 健保額 | number | 数式(=L×V) | — | — |
| 24 | 介護保険料率 | % | 入力 | — | — |
| 25 | 介護保険額 | number | 数式(=L×X) | — | — |
| 26 | 厚年料率 | % | 入力 | — | — |
| 27 | 厚年額 | number | 数式(=L×Z) | — | — |
| 28 | 雇用保険料率 | % | 入力 | — | — |
| 29 | 雇用保険額 | number | 数式(=L×AB) | — | — |
| 30 | 子ども・子育て拠出金率 | % | 入力 | — | — |
| 31 | 子ども拠出金額 | number | 数式(=L×AD) | — | — |
| 32 | 法定福利費合計 | number | 数式 | 会社負担合計(RPA Row 5で使用) | — |
| 33 | 社保預り金合計 | number | 数式 | 従業員負担合計(RPA Row 4で使用) | — |
| 34 | 社保控除後支給額 | number | 数式(=L−AG) | — | — |
| 35 | 差引支給額 | number | 数式 | =L−源泉所得税−源泉消費税−住民税−AG | — |
| 36 | 採用エージェント費 | number | 入力 | 入社月に1回(将来拡張用) | — |
| 37 | PC等初期費用 | number | 入力 | 入社月に1回(将来拡張用) | — |
| 38 | 組織名 | string(pulldown) | 入力 | ORD・全INV Rowに転記 | — |
| 39 | 最終起票年月日 | date | 手入力 | 「ここまで作成済み」の意味。支払予定日ベースで記入。RPAは書き戻さない | — |
| 40 | 備考 | string | 入力 | 自由記述 | — |
設計方針
- 左→右の入力フロー — 誰が(👤) → いつから(📅) → いくら(💰) → どう払う(💳) → 税金(🧾) → 社保(🏥) → 集計(📊)
- 頻繁に見る列を左に — 氏名・科目名・月額が画面内に収まる
- 自動計算列は右に — 社保額・集計は数式で自動算出、普段触らない
- 管理列は両端 — 有効フラグ/管理IDは先頭、最終起票/備考は末尾
雇用形態の選択肢(15_mst_dictionary に登録)
| カテゴリ | 表示名 |
|---|---|
| 雇用形態 | 役員 |
| 雇用形態 | 正社員 |
| 雇用形態 | アルバイト |
| 雇用形態 | 業務委託 |
| 雇用形態 | 顧問 |
4. 処理ロジック(マトリクス)
共通INVフィールド(
buildInvRow_が自動設定): 有効フラグ=true, 請求ID=INV_YYYYMMDD_NNNN(自動発番), 起票日時=now, 起票者="RPA自動起票", 請求ステータス="未処理", 通貨="JPY", 税区分="対象外", PJ名="指定なし_共通費など"(未指定時)全Rowに対して
isDuplicate_()による摘要ベースの重複チェックあり。存在すればSKIP。1行だけ手動削除して再実行した場合、削除された行のみ再生成される。
S1: 初期化
| STEP | 処理 | 入力列 | ソース | 出力/変数 | 条件 |
|---|---|---|---|---|---|
| S1.1 | 対象年月算出 | 最終起票年月日 | 22_bud_headcount 全行 | targetYm | 全有効行の最終起票年月日の最大値を取得。全行空の場合は現在年月。翌月加算はしない(手入力=「ここまで作成」の意味) |
| S1.2 | ORD/ID準備 | — | 31_wrk_order 全体 | ordMap, IDキャッシュ | buildOrdMap_() で既存ORDを管理ID+開始年月でインデックス化 |
S2: 行ループ(FOR EACH 22タブ行)
| STEP | 処理 | 入力列 | ソース | 出力/変数 | 条件 |
|---|---|---|---|---|---|
| S2.1 | スキップ判定: 有効フラグ | 有効フラグ | 22_bud_headcount.A列 | — | !== TRUE → SKIP(空セルもFALSE扱い) |
| S2.2 | 行別対象年月算出 | 最終起票年月日, 決済ラグ(月) | 22_bud_headcount | rowTargetYm | rowTargetYmRaw = parseDateToYm(最終起票年月日) or targetYm。rowTargetYm = rowTargetYmRaw − 決済ラグ(月)(利用月ベースに変換) |
| S2.3 | スキップ判定: 開始年月 | 開始年月 | 22_bud_headcount.J列 | — | 空 OR rowTargetYm < 開始年月 → SKIP |
| S2.4 | ORD検索/作成 | 管理ID, 開始年月 | 22_bud_headcount.B,J列 | ordId | `ordKey = 管理ID + " |
S3: 月ループ(curHcYm: 開始年月 → rowTargetYm)
行ごとに開始年月から rowTargetYm まで月単位でループ。終了年月を超えた場合はbreak。
| STEP | 処理 | 入力列 | ソース | 出力/変数 | 条件 |
|---|---|---|---|---|---|
| S3.1 | 終了年月チェック | 終了年月 | 22_bud_headcount.K列 | — | 値あり AND curHcYm > 終了年月 → break(空=無期限で常に継続) |
| S3.2 | 変数: 支払日計算 | 決済ラグ(月), 支払基準日 | 22_bud_headcount.N,O列 | salaryPayDate | payYm = addMonths(curHcYm, lag)。salaryPayDate = payYm の 支払基準日。支払基準日>月末→月末日にキャップ |
| S3.3 | 変数: 納期の特例 | curHcYm | — | tokureiDeadline | 1〜6月→同年7/10、7〜12月→翌年1/10 |
| S3.4 | 変数: 翌月末日 | curHcYm | — | nextMonthEnd | curHcYm + 2ヶ月の0日 = 翌月末日(社保納付日) |
| S3.5 | 変数: 金額系 | 月額給与, 源泉所得税, 住民税, 社保預り金合計, 法定福利費合計, 免税フラグ, 源泉消費税額 | 22_bud_headcount | 各金額変数 | salaryExTax = monthlySalary − srcConsumptionTax(内税控除) |
| S3.6 | 変数: 科目名決定 | 科目名, 雇用形態 | 22_bud_headcount.E,D列 | accountName | ①科目名列に値あり→そのまま ②空→雇用形態デフォルト(→ 付録B参照) |
Row 1: 月額給与・報酬(P/L費用 — メインINV)
| STEP | 処理 | 入力 | 出力 | 条件 |
|---|---|---|---|---|
| R1.1 | INV行生成 | salaryExTax, srcConsumptionTax, monthlySalary | 32_wrk_invoice | 常に生成 |
- 申請種別=
"月額給与・報酬支払", 科目名=accountName, 収支区分="支出" - 税抜金額_計画=
salaryExTax, 消費税額_計画=srcConsumptionTax, 税込金額_計画=monthlySalary - 発生日=
targetMonthEnd(対象月末日), 決済日_計画=salaryPayDate, 決済手段=payMethod - 取引先名=
vendorName(取引先名列。空なら氏名)
内税ルール:
月額給与・報酬は消費税込みの総額。源泉消費税額はその内訳であり、外税として加算しない。 STL税込金額_決済: Action A時にjeFxAmtMapで同一ORD+対象月の仕訳振替INV(Row 1b/2b/2a/3a/4a)の金額を集計し、Row 1の税込金額_計画から差し引いた「差引支給額」がSTLの決済金額になる。
Row 1b/2b: 消費税関連(免税=益税 or 課税=仮払 — 排他)
| STEP | 処理 | 入力 | 出力 | 条件 |
|---|---|---|---|---|
| R1b.1 | Row 1b: 益税(雑収入) | srcConsumptionTax | 32_wrk_invoice | isExempt=TRUE AND srcConsumptionTax>0 |
| R2b.1 | Row 2b: 仮払消費税等(B/S) | srcConsumptionTax | 32_wrk_invoice | isExempt=FALSE AND srcConsumptionTax>0 |
Row 1b 詳細: 申請種別="財務仕訳(振替等)", 科目名="雑収入", 収支区分="収入", 決済手段="仕訳振替", 発生日=決済日_計画=salaryPayDate
Row 2b 詳細: 申請種別="財務仕訳(振替等)", 科目名="仮払消費税等", 収支区分="支出", 決済手段="仕訳振替", 発生日=決済日_計画=salaryPayDate
Row 2a/2: 源泉所得税(預り金+/取崩し — ペア)
| STEP | 処理 | 入力 | 出力 | 条件 |
|---|---|---|---|---|
| R2a.1 | Row 2a: 預り金+(B/S負債) | withholdingTax | 32_wrk_invoice | withholdingTax > 0 |
| R2.1 | Row 2: 預り金取崩し(納付) | withholdingTax | 32_wrk_invoice | withholdingTax > 0 |
Row 2a 詳細: 申請種別="財務仕訳(振替等)", 科目名="預り金", 税抜金額_計画=+withholdingTax, 決済手段="仕訳振替", 発生日=決済日_計画=salaryPayDate
Row 2 詳細: 申請種別="財務仕訳(振替等)", 科目名="預り金", 税抜金額_計画=−withholdingTax, 取引先=RPA_DEFAULTS.税務署, 決済手段=RPA_DEFAULTS.口座振込, 発生日=決済日_計画=tokureiDeadline
Row 3a/3: 住民税(預り金+/取崩し — ペア)
| STEP | 処理 | 入力 | 出力 | 条件 |
|---|---|---|---|---|
| R3a.1 | Row 3a: 預り金+(B/S負債) | residentTax | 32_wrk_invoice | residentTax > 0 |
| R3.1 | Row 3: 預り金取崩し(納付) | residentTax | 32_wrk_invoice | residentTax > 0 |
Row 3a 詳細: 申請種別="財務仕訳(振替等)", 科目名="預り金", 税抜金額_計画=+residentTax, 決済手段="仕訳振替", 発生日=決済日_計画=salaryPayDate
Row 3 詳細: 申請種別="財務仕訳(振替等)", 科目名="預り金", 税抜金額_計画=−residentTax, 取引先=RPA_DEFAULTS.市区町村, 決済手段=RPA_DEFAULTS.口座振込, 発生日=決済日_計画=tokureiDeadline
Row 4a/4: 社会保険(預り金+/控除 — ペア)
| STEP | 処理 | 入力 | 出力 | 条件 |
|---|---|---|---|---|
| R4a.1 | Row 4a: 預り金+(B/S負債) | siDeduction | 32_wrk_invoice | siDeduction > 0 |
| R4.1 | Row 4: 預り金取崩し(控除) | siDeduction | 32_wrk_invoice | siDeduction > 0 |
Row 4a 詳細: 申請種別="財務仕訳(振替等)", 科目名="預り金", 税抜金額_計画=+siDeduction, 決済手段="仕訳振替", 発生日=決済日_計画=salaryPayDate
Row 4 詳細: 申請種別="請求書受領(AP)", 科目名="預り金", 税抜金額_計画=−siDeduction, 取引先=RPA_DEFAULTS.年金事務所, 決済手段=RPA_DEFAULTS.口座振替, 発生日=targetMonthEnd, 決済日_計画=nextMonthEnd
Row 5: 法定福利費(P/L費用 — 会社負担分)
| STEP | 処理 | 入力 | 出力 | 条件 |
|---|---|---|---|---|
| R5.1 | Row 5: 法定福利費 | legalWelfare | 32_wrk_invoice | legalWelfare > 0 |
詳細: 申請種別="請求書受領(AP)", 科目名="法定福利費", 取引先=RPA_DEFAULTS.年金事務所, 決済手段=RPA_DEFAULTS.口座振替, 発生日=targetMonthEnd, 決済日_計画=nextMonthEnd
W: 書き出し
| STEP | 処理 | 入力 | 出力 | 条件 |
|---|---|---|---|---|
| W1.1 | 一括書き込み: ORD | newOrdRows | 31_wrk_order | writeOrdRows_() で末尾に追記 |
| W1.2 | 一括書き込み: INV | drafts | 32_wrk_invoice | writeInvRows_() で末尾に追記。諸表区分・大分類を科目マスタから自動付与 |
書き込み位置: 列B(発注ID/請求ID)の最終データ行の直下に追記。列A(有効フラグ)はチェックボックスが空行にも存在するため最終行判定には使用しない。
最終起票年月日: RPAは書き戻さない(手入力管理)。
5. 出力サマリー
1人・1ヶ月あたりのINV一覧(最大10行)
| # | 科目名 | 金額 | P/L or B/S | 発生日 | 支払期限 | 決済手段 | 取引先 | 条件 |
|---|---|---|---|---|---|---|---|---|
| Row 1 | 給料手当 / 役員報酬 等 | +月額(税抜) | P/L | 月末 | salaryPayDate | payMethod | 本人/取引先 | 常に |
| Row 1b | 雑収入 (益税) | +消費税額 | P/L | salaryPayDate | salaryPayDate | 仕訳振替 | 本人/取引先 | 免税のみ |
| Row 2b | 仮払消費税等 (源泉消費税) | +消費税額 | B/S | salaryPayDate | salaryPayDate | 仕訳振替 | 本人/取引先 | 課税+消費税>0 |
| Row 2a | 預り金 (源泉所得税 計上) | +所得税額 | B/S | salaryPayDate | salaryPayDate | 仕訳振替 | 本人/取引先 | 所得税>0 |
| Row 2 | 預り金 (源泉所得税 納付) | −所得税額 | B/S | 納期特例日 | 納期特例日 | 口座振込 | 税務署 | 所得税>0 |
| Row 3a | 預り金 (住民税 計上) | +住民税額 | B/S | salaryPayDate | salaryPayDate | 仕訳振替 | 本人/取引先 | 住民税>0 |
| Row 3 | 預り金 (住民税 納付) | −住民税額 | B/S | 納期特例日 | 納期特例日 | 口座振込 | 市区町村 | 住民税>0 |
| Row 4a | 預り金 (社保 計上) | +社保預り | B/S | salaryPayDate | salaryPayDate | 仕訳振替 | 本人/取引先 | 社保>0 |
| Row 4 | 預り金 (社保 納付) | −社保預り | B/S | 月末 | 翌月末 | 口座振替 | 年金事務所 | 社保>0 |
| Row 5 | 法定福利費 | +会社負担 | P/L | 月末 | 翌月末 | 口座振替 | 年金事務所 | 法福>0 |
STL税込金額_決済の仕組み: Row 1b, 2b, 2a, 3a, 4a は全て仕訳振替。Action AのjeFxAmtMapに集計され、Row 1のSTL税込金額_決済から差し引かれる。結果としてSTL税込金額_決済 = 差引支給額となる。
6. 業務ルール
- 内税ルール —
月額給与・報酬は消費税込みの総額。源泉消費税額はその内訳であり、外税として加算しない。税抜 = 月額 − 消費税額 - 納期の特例 — 従業員10人未満の事業所は源泉所得税・住民税を年2回まとめて納付。1〜6月分→同年7/10、7〜12月分→翌年1/10。RPAはINVの発生日を納付期限日に設定し、Action A→Datamart経由で正しいB/S月に反映
- 預り金の計上/取崩しペア — Row 2a/3a/4a で支払基準日に預り金+(仕訳振替)、Row 2/3/4 で納付日に預り金-(現金支出)。計上Rowは仕訳振替のためjeFxAmtMapに集計され、Row 1のSTL税込金額_決済から差し引かれる(= 差引支給額になる)
- 仮払消費税等 — 課税事業者への支払時の消費税は仮払消費税等(B/S資産)として正の値で計上。仕訳振替(現金移動なし)で、決算時に仮受消費税等と相殺する
- 業務委託・顧問は社保なし — Row 4a, 4, 5 は社保預り金=0 かつ 法定福利費=0 のためスキップ
- RPA_DEFAULTS — 税務署・年金事務所・市区町村の名称は
002_constants.jsのRPA_DEFAULTSで管理(武生税務署, 武生年金事務所, 越前市 等) - 全有効行一括処理 — RPAは全有効HC行を処理する。特定のEMPだけテストする場合は他の有効フラグを一時的にFALSEにする
- 月ループによる一括起票 — 開始年月からrowTargetYmまで月単位でループし、未起票の月を一括で起票する。最終起票年月日を更新すれば次回実行時にその月まで起票される
7. 冪等性(二重起票防止)
各Rowが個別の摘要テンプレートで重複チェックされる。isDuplicate_() が32_wrk_invoice内に同一摘要を検索し、存在すればSKIPする。
摘要テンプレート一覧:
| Row | 摘要パターン |
|---|---|
| Row 1 | 【RPA:HC】{curHcYm} {氏名} 月額給与・報酬 |
| Row 1b | 【RPA:HC】{curHcYm} {氏名} 源泉消費税益税 |
| Row 2b | 【RPA:HC】{curHcYm} {氏名} 源泉消費税 |
| Row 2a | 【RPA:HC】{curHcYm} {氏名} 源泉所得税預り |
| Row 2 | 【RPA:HC】{curHcYm} {氏名} 源泉所得税 |
| Row 3a | 【RPA:HC】{curHcYm} {氏名} 住民税預り |
| Row 3 | 【RPA:HC】{curHcYm} {氏名} 住民税 |
| Row 4a | 【RPA:HC】{curHcYm} {氏名} 社保預り |
| Row 4 | 【RPA:HC】{curHcYm} {氏名} 社保控除 |
| Row 5 | 【RPA:HC】{curHcYm} {氏名} 法定福利費 |
動作:
- 32_wrk_invoice 内に同一摘要が存在する行のみSKIP
- 一部の行を手動削除して再実行すると、削除された行だけ再生成される
- 同じ月を2回実行しても二重起票されない
8. エラーハンドリング
| エラー条件 | 処理 | ユーザー通知 |
|---|---|---|
| 22_bud_headcount タブが見つからない | 処理中断 | ui.alert("22_bud_headcount が見つかりません。") |
| HCデータが0件(ヘッダーのみ) | 処理中断 | ui.alert("HCデータがありません。") |
| 起票対象なし(全行スキップ or 全行重複) | 正常終了 | ui.alert("{targetYm} の期間で新たに起票すべきHCはありませんでした。") |
| 処理中の例外 | try-catch でキャッチ | ui.alert("generateHcInvoices でエラーが発生しました: {エラーメッセージ}") |
| 有効フラグ=FALSE/空セル | 行スキップ | 通知なし |
| 開始年月が空 | 行スキップ | 通知なし |
| rowTargetYm < 開始年月 | 行スキップ | 通知なし |
| 取引先名が空 | 氏名でフォールバック | 通知なし |
| 支払基準日 > 月末日 | 月末日にキャップ | 通知なし |
9. テスト仕様
単体テスト観点
| テストID | テスト名 | 前提条件 | 期待結果 |
|---|---|---|---|
| T1 | 業務委託・基本 | EMP_0002: 月額22,000(内税), 消費税2,000, 源泉42, target=2025-11 | Row1: 開発外注費 税抜20,000+税2,000=総額22,000, Row2: 預り金-42 発生日=2026-01-10 |
| T2 | 役員・基本 | EMP_0001: 役員, 月額500,000, 源泉21,220, 社保74,575, 法福76,375, target=2025-11 | Row1〜5+2a/4a 全て生成、Row1科目=役員報酬、STL税込金額_決済=404,205(差引支給額) |
| T3 | 納期の特例(7-12月) | target=2025-11 | tokureiDeadline=2026-01-10 |
| T4 | 納期の特例(1-6月) | target=2026-03 | tokureiDeadline=2026-07-10 |
| T5 | 内税計算 | 月額22,000, 消費税2,000, 免税=TRUE | 税抜=20,000, 消費税=2,000, 税込=22,000 |
| T6 | 課税事業者・源泉消費税あり | 免税=FALSE, 月額22,000, 消費税2,000, target=2025-11 | srcConsumptionTax=2,000, 税抜=20,000, Row1b=未生成, Row2b: 仮払消費税等+2,000 仕訳振替 |
| T7 | 重複チェック | 同月を2回実行 | 2回目は0件起票 |
| T8 | 支払ラグ | ラグ=1, 支払日=25, target=2025-11 | salaryPayDate=2025-12-25 |
| T9 | 期間外SKIP | 開始=2026-01, target=2025-11 | スキップ |
| T10 | 住民税あり | 住民税=10,000 | Row3a: 預り金+10,000 仕訳振替, Row3: 預り金-10,000 発生日=納期特例日 |
| T11 | 科目名オーバーライド | 雇用形態=業務委託, 科目名="支払手数料" | Row1科目=支払手数料(デフォルトの開発外注費ではなく) |
| T12 | 顧問・基本 | 雇用形態=顧問, 科目名=空 | Row1科目=支払手数料, 社保Row=スキップ |
| T13 | 課税事業者・源泉消費税なし | 免税=FALSE, 消費税=0 | Row1b=未生成, Row2b=未生成 |
| T14 | 免税事業者・Row2b不生成 | 免税=TRUE, 消費税=2,000 | Row1b=生成(益税), Row2b=未生成 |
| T15 | 課税・仮払消費税等の発生日 | 免税=FALSE, 消費税=2,000, ラグ=1, target=2026-03 | Row2b: 仮払消費税等+2,000 発生日=salaryPayDate(2026-04-25等) |
| T16 | STL税込金額_決済=差引支給額 | 役員, 月額500,000, 源泉21,220, 社保74,575 | Row1のSTL=500,000-21,220-74,575=404,205 (jeFxAmtMapでRow2a+4a分を差引) |
| T17 | 社保預り金計上 | 社保74,575 | Row4a: 預り金+74,575 仕訳振替 salaryPayDate, Row4: 預り金-74,575 翌月末 |
テストデータ・期待結果
ケース A: 顧問・免税事業者 (EMP_0002 角会計事務所 2025-11月分)
22タブ入力:
| 項目 | 値 |
|---|---|
| 管理ID | EMP_0002 |
| 氏名・ポジション | 角会計事務所 |
| 雇用形態 | 顧問 |
| 科目名 | 支払手数料 |
| 月額給与・報酬 | 22,000 |
| 免税フラグ | TRUE |
| 源泉所得税額 | 42 |
| 源泉消費税額 | 2,000 |
| 住民税額 | 0 |
| 社保預り金合計 | 0 |
| 法定福利費合計 | 0 |
| 決済ラグ(月) | 0 |
| 支払基準日 | 25 |
| 決済手段 | 口座振込 |
| 差引支給額 | 19,958 |
算出変数:
| 変数 | 値 |
|---|---|
| isExempt | TRUE |
| srcConsumptionTax | 2,000 |
| salaryExTax | 22,000 - 2,000 = 20,000 |
| salaryPayDate | 2025-11-25 |
| tokureiDeadline | 2026-01-10 (11月 → 7-12月 → 翌年1月10日) |
32タブ期待結果 (INV 4行):
| Row | 申請種別 | 科目名 | 税抜 | 消費税 | 税込 | 発生日 | 支払期限 | 決済手段 | 取引先 |
|---|---|---|---|---|---|---|---|---|---|
| Row 1 | 月額給与・報酬支払 | 支払手数料 | 20,000 | 2,000 | 22,000 | 2025-11-30 | 2025-11-25 | 口座振込 | 角会計事務所 |
| Row 1b | 財務仕訳(振替等) | 雑収入 | 2,000 | 0 | 2,000 | 2025-11-25 | 2025-11-25 | 仕訳振替 | 角会計事務所 |
| Row 2a | 財務仕訳(振替等) | 預り金 | +42 | 0 | 42 | 2025-11-25 | 2025-11-25 | 仕訳振替 | 角会計事務所 |
| Row 2 | 財務仕訳(振替等) | 預り金 | -42 | 0 | -42 | 2026-01-10 | 2026-01-10 | 口座振込 | 武生税務署 |
未生成: Row 2b(免税→SKIP), Row 3a/3(住民税=0), Row 4a/4(社保=0), Row 5(法福=0)
33タブ期待結果 (STL 2行 — Action A実行後):
| STL | 消込対象INV | 入出金 | 決済口座 | 取引先 | 税込金額_決済 | 算出根拠 |
|---|---|---|---|---|---|---|
| STL 1 | Row 1 (支払手数料) | 出金 | 口座振込 | 角会計事務所 | 19,958 | 22,000 - jeFxAmt(2,000+42) = 19,958 |
| STL 2 | Row 2 (預り金納付) | 出金 | 口座振込 | 武生税務署 | 42 | abs(-42) |
期待値サマリー (全テスト完了後):
| 財務諸表 | 科目 | 金額 | タイミング |
|---|---|---|---|
| P/L | 支払手数料 | -22,000 | 2025-11 (発生月) |
| P/L | 雑収入 | +2,000 | 2025-11 (給与支払月) |
| B/S | 未払金 | 0 | 期ずれで計上→STL消込で解消 |
| B/S | 預り金 | +42 → 0 | 計上(Row2a)→納付(Row2)で解消 |
| B/S | 現預金 | -19,958 - 42 = -20,000 | STL消込後 |
| CF | 出金(給与) | 19,958 | STL1消込時 |
| CF | 出金(源泉) | 42 | STL2消込時 |
ケース B: 役員 (EMP_0001 2025-11月分)
22タブ入力:
| 項目 | 値 |
|---|---|
| 管理ID | EMP_0001 |
| 氏名・ポジション | (役員名) |
| 雇用形態 | 役員 |
| 科目名 | (空 → デフォルト "役員報酬") |
| 月額給与・報酬 | 500,000 |
| 免税フラグ | FALSE |
| 源泉所得税額 | 21,220 |
| 源泉消費税額 | 0 |
| 住民税額 | 0 |
| 社保預り金合計 | 74,575 |
| 法定福利費合計 | 76,375 |
| 決済ラグ(月) | 0 |
| 支払基準日 | 25 |
| 決済手段 | 口座振込 |
| 差引支給額 | 404,205 |
算出変数:
| 変数 | 値 |
|---|---|
| isExempt | FALSE |
| srcConsumptionTax | 0 |
| salaryExTax | 500,000 - 0 = 500,000 |
| salaryPayDate | 2025-11-25 |
| tokureiDeadline | 2026-01-10 |
| nextMonthEnd | 2025-12-31 |
| accountName | "役員報酬" |
32タブ期待結果 (INV 7行):
| Row | 申請種別 | 科目名 | 税抜 | 消費税 | 税込 | 発生日 | 支払期限 | 決済手段 | 取引先 |
|---|---|---|---|---|---|---|---|---|---|
| Row 1 | 月額給与・報酬支払 | 役員報酬 | 500,000 | 0 | 500,000 | 2025-11-30 | 2025-11-25 | 口座振込 | 本人 |
| Row 2a | 財務仕訳(振替等) | 預り金 | +21,220 | 0 | 21,220 | 2025-11-25 | 2025-11-25 | 仕訳振替 | 本人 |
| Row 2 | 財務仕訳(振替等) | 預り金 | -21,220 | 0 | -21,220 | 2026-01-10 | 2026-01-10 | 口座振込 | 武生税務署 |
| Row 4a | 財務仕訳(振替等) | 預り金 | +74,575 | 0 | 74,575 | 2025-11-25 | 2025-11-25 | 仕訳振替 | 本人 |
| Row 4 | 請求書受領(AP) | 預り金 | -74,575 | 0 | -74,575 | 2025-11-30 | 2025-12-31 | 口座振替 | 武生年金事務所 |
| Row 5 | 請求書受領(AP) | 法定福利費 | 76,375 | 0 | 76,375 | 2025-11-30 | 2025-12-31 | 口座振替 | 武生年金事務所 |
未生成: Row 1b(免税=FALSE), Row 2b(消費税=0), Row 3a/3(住民税=0)
33タブ期待結果 (STL 4行 — Action A実行後):
| STL | 消込対象INV | 入出金 | 決済口座 | 取引先 | 税込金額_決済 | 算出根拠 |
|---|---|---|---|---|---|---|
| STL 1 | Row 1 (役員報酬) | 出金 | 口座振込 | 本人 | 404,205 | 500,000 - jeFxAmt(21,220+74,575) = 404,205 |
| STL 2 | Row 2 (源泉納付) | 出金 | 口座振込 | 武生税務署 | 21,220 | abs(-21,220) |
| STL 3 | Row 4 (社保控除) | 出金 | 口座振替 | 武生年金事務所 | 74,575 | abs(-74,575) |
| STL 4 | Row 5 (法定福利費) | 出金 | 口座振替 | 武生年金事務所 | 76,375 | abs(76,375) |
期待値サマリー (全テスト完了後):
| 財務諸表 | 科目 | 金額 | タイミング |
|---|---|---|---|
| P/L | 役員報酬 | -500,000 | 2025-11 |
| P/L | 法定福利費 | -76,375 | 2025-11 |
| B/S | 未払金 | 0 | 期ずれで計上→STL消込で解消 |
| B/S | 預り金(源泉) | +21,220 → 0 | 計上(Row2a)→納付(Row2)で解消 |
| B/S | 預り金(社保) | +74,575 → 0 | 計上(Row4a)→納付(Row4)で解消 |
| B/S | 現預金 | -576,375 | STL全消込後 |
| CF | 出金(給与) | 404,205 | STL1消込時 |
| CF | 出金(源泉) | 21,220 | STL2消込時(2026-01-10) |
| CF | 出金(社保) | 74,575 | STL3消込時(翌月) |
| CF | 出金(法福) | 76,375 | STL4消込時(翌月) |
CF合計: 404,205 + 21,220 + 74,575 + 76,375 = 576,375 = 役員報酬500,000 + 法定福利費76,375
付録
付録A: V1→V2 の変更点
| 観点 | V1 (仮想イベント方式) | V2 (物理サブ元帳方式) |
|---|---|---|
| 生成先 | Datamart内の仮想イベント配列 | 32_wrk_invoice (物理シート) |
| 仕訳台帳 | Datamartが毎回再計算 | Action Aで42_trn_journalへ永続化 |
| 預り金 計上(+) | 仕訳振替で明示的に生成 | Row 2a/3a/4aで明示生成(仕訳振替、支払基準日) |
| 預り金 納付(−) | pYm=納付月で仮想仕訳 | 発生日=納期特例日のINV |
| 免税益税(雑収入) | EVENT 3で明示生成 | Row 1bで明示生成(仕訳振替) |
| 消費税 | 外税(月額に加算) | 内税(月額に含まれる) |
| 納期の特例 | journalSettleMap参照(V1で廃止済み) | 対象月ベースで固定計算 |
| 重複防止 | 不要(毎回再生成) | 摘要ベースの重複チェック |
付録B: 雇用形態→デフォルト科目名マッピング
コード内のマッピング(generateHcInvoices 内で定義):
| 雇用形態 | デフォルト科目名 | 用途例 |
|---|---|---|
| 役員 | 役員報酬 | 取締役・監査役 |
| 正社員 | 給料手当 | 正規雇用の従業員(フォールバックも同じ) |
| アルバイト | 雑給 | パートタイム・日雇い |
| 業務委託 | 開発外注費 | 外部委託先(エンジニア等) |
| 顧問 | 支払手数料 | 税理士・会計士・弁護士等の顧問契約 |
| その他 | 給料手当 | 上記に該当しない雇用形態のフォールバック |
※ 22タブの「科目名」列(E列)に値がある場合はデフォルトより優先される。
付録C: 旧→新カラム位置の変更
| 変更内容 | 旧 | 新 |
|---|---|---|
| 氏名・ポジション | H列(8番目) | C列(3番目) — 最も参照頻度が高い |
| 取引先名 | O列(15番目) | F列(6番目) — 人物グループに統合 |
| 科目名 | なし | E列(5番目) — 新規追加。雇用形態の隣 |
| 月額給与・報酬 | P列(16番目) | L列(12番目) — スクロールなしで見える |
| 免税フラグ | AF列(32番目) | R列(18番目) — 税金グループの先頭 |
| 最終起票年月日 | headersに未定義 | AM列(39番目) — 明示的に定義 |