勘定科目「期首商品(棚卸高)」「期末商品(棚卸高)」の扱いについて

「期首商品(棚卸高)」「期末商品(棚卸高)」という2つの勘定科目のtypeを、asset(資産)からexpense(損益側に載せるtype)に変更した。地味な1行の変更に見えるが、簿記の理解が1年越しでひっくり返った、割と根深い勘違いの話。

そもそもの発端:2025年6月の設計

2025年6月にAccountのデフォルト科目一覧を決めた時(モデル設計 – Accountの記事)、税務署の「令和xx年分所得税青色申告決算書(一般用)」をベースに科目を並べた。様式の貸借対照表・資産の部に並んでいるのは、

現金
当座預金
定期預金
その他の預金
受取手形
売掛金
有価証券
棚卸資産
前払金
貸付金
建物
建物附属設備
機械装置
車両運搬具
工具器具備品
土地

まで。そこに、会計ソフトで使っていた

期首商品(棚卸高)
期末商品(棚卸高)

を「棚卸」と付くんだから資産の仲間だろうと混ぜて、深く考えずに全部assetとして登録した。念のため書いておくと、実際の様式の資産の部にこの2科目は存在しない。勝手に資産に分類したのは自分である。

「期首商品(製品)棚卸高」が出てくるのはここ

「期首商品(製品)棚卸高」が実際に登場するのは、青色申告決算書のP/L側、「売上原価」の計算欄だけ。

① 売上(収入)金額(雑収入を含む)
② 期首商品(製品)棚卸高
③ 仕入金額(製品製造原価)
④ 小計(②+③)
⑤ 期末商品(製品)棚卸高
⑥ 差引原価(④-⑤)

本来の役割:売上原価の調整弁

この2科目が本来担っているのは、次の計算式の中の調整項。

売上原価 = 期首商品棚卸高 + 仕入金額 - 期末商品棚卸高

在庫を持つ商売では、「今期に仕入れた金額」がそのまま「今期の費用」になるわけではない。期首時点で残っていた在庫(前期からの持ち越し分)は今期の販売に使われたはずなので今期の原価に足し、逆に期末に残っている在庫(今期は売れずに来期に持ち越す分)は今期の原価から引く。この足し引きのための科目が「期首商品」「期末商品」で、実体としては「棚卸資産(実際の在庫)」という1つの資産の増減を、損益計算のタイミングで表現しなおしているだけ。

資産として実際に残高を持ち続けるのは「棚卸資産」だけ。期首商品・期末商品は、決算時に2本の振替仕訳を通すためだけに存在する、いわば使い捨ての通過点だった。

仕訳で追ってみる

具体的に仕訳を追うと、この構造がはっきり見える。

期首分の振替(期首時点の棚卸資産残高を、決算時に売上原価へ振り替える)

借方: 期首商品(棚卸高) 1,000
貸方: 棚卸資産         1,000

期末分の振替(期末の実地棚卸高を、同じく決算時に計上する)

借方: 棚卸資産         400
貸方: 期末商品(棚卸高) 400

この2本を通した後の状態を見ると、

  • 棚卸資産への仕訳影響: -1,000 + 400 = -600
  • 期首商品(棚卸高): 借方1,000
  • 期末商品(棚卸高): 貸方400

ここでの -600 は「棚卸資産」勘定の期末残高そのものではなく、決算整理仕訳が棚卸資産に与える差額である。もともと期首残高 1,000 がある前提なので、決算整理後の 棚卸資産 残高は 1,000 - 1,000 + 400 = 400 で、これは期末実地棚卸高と一致する。

一方、期首商品と期末商品の2科目をアプリ上で両方 expense type として損益計算に含めると、「借方1,000 – 貸方400 = 600」がそのまま今期の売上原価調整になる。これは「もともと期首に在庫1,000円分があった上で、期の途中で売れたり在庫を追加したりした結果、期末に400円分が残っていた」という状況を表している。

もしこの2科目をassetのままにしていたら、貸借対照表の残高集計にこの2つの科目がそのまま資産として登場してしまう。しかも「期首商品(棚卸高)」は借方だけが動いて残高がプラスのまま固定され、「期末商品(棚卸高)」は貸方だけが動いて残高がマイナスのまま固定される、という実体のない資産科目が2つ、貸借対照表に載り続けることになる。さらに、貸借対照表科目の期末残高は翌期の期首仕訳へ繰り越すものなので、assetのままだとこの2科目の残高は繰越のたびに毎年積み上がっていく。expenseにしておけば損益科目として繰越対象から自然に外れる。

「期首」という名前だが、起票するのは決算時

ここでもう1つ紛らわしいのが、「期首商品(棚卸高)」という名前がついていても、この仕訳を実際に起票するタイミングは期首(1/1)ではなく、期末分とあわせて決算時だということ。「期首」は、金額が期首時点の在庫額を表しているという意味であって、いつ仕訳を切るかを指す名前ではない。

理由は売上原価の計算構造にある。売上原価は「期首の在庫」と「期末に残った在庫」の両方が揃って初めて確定する。もし期首分を額面通り1/1付けで登録してしまうと、その年まだ何も売っていないのに、1月時点の損益集計が前年の在庫額ぶんだけ費用のマイナスから始まってしまう。だから期首分・期末分は2本セットの決算整理仕訳として、期末日付で登録する。

期中はずっと、期首商品・期末商品の残高はゼロのまま。動くのは決算のタイミングだけで、翌期首の棚卸資産残高は、元入金を相手科目とする「棚卸資産」自体の期首仕訳が運ぶ。期首商品という科目そのものが翌期に繰り越されるわけではない。

気づいたきっかけ:期末処理の実装を考えていて

この勘違いに気づいたのは、期末処理(決算整理・締め処理)の実装を考えていた時。棚卸の振替をどう仕訳として組むかを具体的に検討していて、期首分・期末分の2本を実際に書き出してみた。

そこで初めて、「期首商品」「期末商品」は棚卸資産という1つの資産の増減を売上原価計算のために表現しなおしているだけの科目で、それ自体が資産として残高を持ち続けるものではないと気づいた。科目名の字面だけで「資産科目のどれかに対応するはず」と判断していたのが、実際に仕訳の流れを追ってみて初めて崩れた。

typeを変えるだけで済んだ理由

これまでの一連の設計(貸借対照表の残高集計・損益集計の分離)で、一貫して「勘定科目の名前による特別扱いをしない、typeだけで判定する」という方針を通してきた。

  • FiscalYearBalanceCalculatorは、asset/liability/equityのtypeだけを見て残高の正方向を決める。科目名で分岐しない。
  • FiscalYearSummaryCalculatorは、expense/revenueのtypeだけを見て損益に含める。

この方針を徹底していたおかげで、「期首商品」「期末商品」のtypeをasset→expenseに変えるだけで、貸借対照表側からはこの2科目が自然に消えるようになった。さらに今回は別コミットで、FiscalYearSummaryCalculator を「expense は借方 – 貸方、revenue は貸方 – 借方」の純額集計へ直していたので、損益側でもこの2科目が自然に売上原価の増減として計算されるようになった。もし過去に「棚卸資産だけは科目名で特別扱いする」みたいな実装をしていたら、ここでもっと苦労していたはず。

マイグレーションも、DBの既存レコードのtypeをasset→expenseに一括UPDATEするだけで済んだ。

なお、実装上は期末棚卸高を 棚卸資産 配下の全SubAccountについて、0を含めて明示入力させるようにしている。未入力を「売り切り」とはみなさず、0 を渡した時だけ「期末残高なし」と解釈する。棚卸は手作業なので、入力漏れと実際のゼロ残高を同一視しないためである。

得た教訓

決算書は「提出用の書式」であって、「複式簿記の構造」をそのまま表しているわけではない。書式の見た目だけで科目のtype(資産か費用か)を決めると、今回のように取り違えることがある。

科目を設計する時は、「この科目は年間を通じて残高を持ち続ける実体のあるものか、それとも決算のタイミングでしか動かない調整用の科目か」を、実際に仕訳を書いて動きを追ってから決めた方がいい。今回は棚卸高だったが、同じような「決算書の様式には出てくるが、実体としては損益の調整弁でしかない」科目が他にも隠れていないか、一度棚卸し(この言葉を使うと紛らわしいが)した方が良さそうだと思っている。