## 07_02_journal_spec.md
# 仕訳帳(journal.html)詳細仕様書
版:v2.0 実装の状況は `work_order_db_migration.md`(作業書)を見る
## 1. 画面概要
### 1.1 目的
- 日々の取引(収入・経費)を仕訳形式で入力・管理する
- 未申告データの一括操作・修正機能を提供する
### 1.2 基本フロー
1. 会社・期間を選択
2. 新規仕訳入力(またはCSV取込)
3. 一覧で確認・修正
4. 必要に応じて一括操作(移動・入れ替えなど)
5. 申告時にデータをロック
## 2. 入力フォーム仕様
### 2.1 フィールド一覧
| 項目 | 必須 | デフォルト | 説明 |
|------|------|------------|------|
| 日付 | ✅ | 当日 | 3/15のように入力。年は入力時の年が自動設定(年変更機能で対応) |
| 借方科目 | ✅ | 前回選択 | 勘定科目一覧から選択 |
| 貸方科目 | ✅ | 前回選択 | 勘定科目一覧から選択 |
| 金額 | ✅ | - | 税込金額を1つだけ入力 |
| 税区分 | ✅ | **10%** | 10% / 8% / 非課税 |
| 適用(摘要) | ✅ | - | 取引内容 |
| 案件番号 | - | - | 案件連動時に任意入力 |
※ 借方金額・貸方金額を別々に入力する方式は採用しない
### 2.2 案件IDと摘要の表示ルール
- 入力フォームでは案件IDと摘要を横並びで配置
- 仕訳帳一覧では以下の形式で表示:
- 案件IDがある場合:[案件ID] 摘要
- 案件IDがない場合:摘要のみ左詰めで表示
- 案件IDは案件管理画面から連携時、自動入力される
### 2.3 日付入力について
- 3/15のように月/日形式で入力可能
- 年は入力時の西暦が自動設定される
- 年度跨ぎの修正は年変更機能で一括対応
### 2.4 税区分の優先順位
- デフォルト:10%(ほとんど全ての取引)
- たまに使う:非課税(郵便切手、印紙、預金など)
- まれに使う:8%(飲食料品・パーティー用食材)
### 2.5 消費税処理(自動分解)
- 入力は総額(税込)
- システムが自動で本体価格と消費税に分解
- 税区分に応じて分解ロジックを変更
- 仕訳は複数行で保存(例:借方:現金、貸方:売上高+仮受消費税)
例:10,000円(税込)を売上高に入力
- 借方:現金 10,000円
- 貸方:売上高 9,091円(本体)
- 貸方:仮受消費税 909円
### 2.6 入力チェック
- 借方科目と貸方科目は必須
- 金額は必須(0円不可)
- 摘要は必須
- 案件IDは任意
- 借方合計と貸方合計が一致すること(自動分解後の合計で確認する)
### 2.7 会社・期間選択の表示形式
- 個人事業(SPS):和暦年表示(例:令和6年、令和7年、令和8年…)
- 期間:1月1日〜12月31日
- 選択肢は現在の年まで自動生成(今年が令和7年なら令和7年まで表示、以降も同様)
- 法人(SCSPS):期表示(例:第3期、第4期、第5期…)
- 期間:7月1日〜翌年6月30日
- 選択肢は現在の期まで自動生成
### 2.8 仕訳データの修正機能
- 一覧の各行をクリックすると、入力フォームに該当データがセットされる
- 「登録」ボタンが「更新」に変わる
- 修正後、元のデータを上書き保存する
- 修正時も借方合計と貸方合計の一致チェックを行う
## 3. 一覧表示仕様
### 3.1 表示形式
```
日付 | 借方科目 | 借方金額 | 貸方科目 | 貸方金額 | 摘要
```
### 3.2 表示項目
- チェックボックス(一括操作用)
- 日付
- 借方科目(複数ある場合は改行表示)
- 借方金額(複数ある場合は合計表示)
- 貸方科目(複数ある場合は改行表示)
- 貸方金額(複数ある場合は合計表示)
- 税区分
- 摘要(案件番号を含む)
- 削除ボタン
### 3.3 案件ID表示例
| 案件ID | 摘要 | 一覧表示 |
|-------|------|---------|
| あり | 事務用品購入 | [PJ123] 事務用品購入 |
| なし | 事務用品購入 | 事務用品購入 |
### 3.4 複合仕訳対応
- 借方:現金(税込金額)
- 貸方:売上高(本体)+仮受消費税(消費税額)
→ 貸方科目欄に売上高 + 仮受消費税と表示
→ ツールチップで内訳金額を確認可能
### 3.5 税込金額表示
- 金額欄には税込金額を表示
- 内訳はツールチップまたは下部に小さく表示
### 3.6 並べ替え
- 各項目をクリックで昇順/降順切り替え
- 初期表示は日付の新しい順
### 3.7 絞り込み
- 会社別(SPS / SCSPS)
- 年別
- 科目別
- 税区分別
- 申告済/未申告
#### 3.8 科目マスタ連携
仕訳入力画面(journal.html)の借方科目・貸方科目プルダウンは、科目マスタ(`accounts`。API経由で取得)から動的に生成する。
- 表示対象:`active: true` の科目のみ
- 会社(SPS/SCSPS)によるフィルタリング:`available_for` に該当会社が含まれる科目のみ表示
- ソート順:`name` の五十音順
また、損益計算書や確定申告画面での集計ロジックも科目マスタの `type` に依存するため、科目マスタのメンテナンスが全ての画面に影響することを明記する。
## 4. 一括操作機能
### 4.1 基本ルール
- チェックボックスで複数選択
- 選択件数を表示
- 申告済みデータは選択できない(グレー表示)
### 4.2 操作内容
| 操作 | 説明 |
|------|------|
| 削除 | 選択したデータを完全に削除(確認は画面内に表示する。`confirm()` は使わない) |
| 借方/貸方入れ替え | 借方と貸方を入れ替え(確認は画面内に表示する。`confirm()` は使わない) |
| 会社変更 | プルダウンで選択後、実行ボタンで適用(確認は画面内に表示する。`confirm()` は使わない) |
| 年変更 | プルダウンで選択後、実行ボタンで適用(確認は画面内に表示する。`confirm()` は使わない) |
| 期間移動 | 選択データを指定した期間に移動(コピーではなく移動) |
| 科目変更 | 勘定科目を一括で変更 |
※ 各ボタンはアイコンなし、テキストのみで表示
※ 年変更プルダウンは和暦(西暦)形式で表示し、選択肢は現在の年まで自動生成する
※ 実行ボタンは会社変更・年変更のプルダウン選択後に有効になる
### 4.3 会社間転送
- コピーではなく「移動」(転送元からデータ削除)
- 確認モーダルで「移動元から削除されます」と明示
- 転送先の期間は同じ(年は維持)
## 5. CSV取込機能
### 5.1 取込ファイル形式
- CSVファイル(カンマ区切り)
- 1行目は項目名(ヘッダー)
- 2行目以降がデータ
- 文字コード:UTF-8(BOM付き推奨)
**必要な項目(固定):**
| 列番 | 項目名 | 例 | 備考 |
|------|--------|-----|------|
| 1 | 日付 | 2024-01-31 | YYYY-MM-DD形式 |
| 2 | 借方勘定科目 | その他の預金 | - |
| 3 | 金 額(借方) | 10000 | 数値(カンマ不可) |
| 4 | 貸方勘定科目 | 売上(収入) | - |
| 5 | 金 額(貸方) | 10000 | 数値(カンマ不可) |
| 6 | 摘要 | UcarPAC㈱ 12月分 | - |
※ 列名の空白(「金 額」など)は許容する
### 5.2 取込データの構造
R06.csvのように、以下の特徴を持つデータに対応する:
1. **1取引=2行構成(本体+消費税)**
- 1行目:本体(借方:預金/現金、貸方:売上/経費科目)
- 2行目:消費税(借方:預金/現金、貸方:仮受消費税等 / 借方:仮払消費税等、貸方:事業主借)
2. **非課税データの扱い**
- 摘要に「非課税」を含む行は税区分0%として扱う
- 税額計算を行わず、本体のみの仕訳とする
### 5.3 取込ロジック(自動統合ルール)
同一取引の判定基準:
- 同じ日付
- 同じ借方勘定科目
- 同じ摘要(完全一致)
上記が一致する行を**同一取引**とみなし、以下のルールで統合する:
| パターン | 統合方法 |
|---------|---------|
| 売上系(貸方:売上/収入 + 仮受消費税等) | 貸方科目を「売上(収入) + 仮受消費税等」と表示。税込金額は借方金額を保持 |
| 経費系(借方:経費科目 + 仮払消費税等、貸方:事業主借/現金) | 借方科目を「経費科目 + 仮払消費税等」と表示。税込金額は借方の合計(経費+消費税) |
| 非課税(摘要に「非課税」) | 単独行として取込、税区分0%を設定 |
### 5.4 取込手順
1. ファイル選択
2. プレビュー表示(内容確認)- オプション
3. 取込実行
4. 結果表示(取込件数/エラー件数)
### 5.5 エラー処理
| エラー種別 | 対応 |
|-----------|------|
| 日付が不正(空欄/形式違い) | 該当行をスキップ |
| 金額が数字でない | 該当行をスキップ |
| 借方/貸方科目が空欄 | 該当行をスキップ |
| 税区分の自動判定不能 | 10%をデフォルト設定(警告表示) |
エラー行は無視して続行可能。取込完了時にエラー件数を表示する。
### 5.6 取込後のデータ構造
取込後は、`journals`(仕訳)と `journal_entries`(明細)に保存する(`00_07_database.md` 5.4節)。APIの入出力の形:
```json
{
"id": "ランダムID",
"date": "2024-01-31",
"tax_included": 11000,
"entries": [
{ "account": "その他の預金", "debit": 11000, "credit": 0, "tax_type": "10%" },
{ "account": "売上(収入)", "debit": 0, "credit": 10000, "tax_type": "10%" },
{ "account": "仮受消費税等", "debit": 0, "credit": 1000, "tax_type": "10%" }
],
"description": "UcarPAC㈱ 12月分",
"project_id": "",
"locked": false
}
```
### 5.7 案件IDの扱い
- CSVに案件ID列は存在しない
- 取り込み時は案件IDは空欄で登録
- 後日、一括操作または個別編集で案件IDを付与可能
## 6. 申告済みデータの扱い
### 6.1 ロック機能
- 確定申告(private/accounting/tax.html)または法人税申告(corporate/accounting/corporate.html)で「申告済」にしたデータは自動ロック
- ロックされたデータは:
- 編集できない
- 削除できない
- 一括操作の対象外
### 6.2 修正申告
- 修正申告ボタンでパスワード入力
- 認証後、ロックを一時解除
- 修正後、再度「申告済」に設定
## 7. UIデザイン要件
### 7.1 基本カラー
- ヘッダー背景: #000080(ネイビー)
- ボタン背景: #000080(ネイビー)
- ボタンテキスト: 白
### 7.2 ボタンホバー
| ボタン種別 | ホバー色 | 備考 |
|-----------|---------|------|
| 通常ボタン | #0000a0 | 明るいネイビー |
| 警告ボタン(移動) | #ffaa00 | オレンジ |
| 削除ボタン | #ff4444 | 赤 |
※ すべてのボタンは通常時ネイビー、ホバー時のみ上記色に変化
### 7.3 ボタンサイズ
| ボタン | サイズ | 備考 |
|--------|-------|------|
| 削除ボタン(一括操作) | 横幅120px、高さ38px | 「選択を削除」表示 |
| 入替えボタン(一括操作) | 横幅140px、高さ38px | 「借方⇔貸方入替え」表示 |
| 会社変更プルダウン | 横幅130px、高さ38px | 「→個人事業」表示 |
| 年変更プルダウン | 横幅160px、高さ38px | 「→令和7年(2025)」表示 |
| 標準ボタン(登録・取込実行など) | 横幅120px、高さ38px | |
| 実行ボタン(一括操作用) | 横幅80px、高さ38px | 「実行」表示 |
| テーブル内削除ボタン | 横幅100px、高さ38px | |
### 7.4 入力フィールド
- 日付・借方科目・貸方科目・金額の各フィールドは全て同じ幅とする
- 税区分は狭くする(80px)
- 案件IDと摘要は横並びで、案件IDは150px(11桁対応)、摘要は残りの幅を全て使用(全角20文字以上確保)
- 入力フィールドの高さは38px(padding: 0.5rem)
### 7.5 ファイル選択ボタン
- 周囲の入力フィールドと高さを揃え、上下中央に配置する
- テキストのみ表示(アイコン不使用)
## 8. 案件管理連携仕様(経費自動振り分け)
### 8.1 経過書入力からの連携フロー
案件管理メニューの経過書入力欄で以下の情報を入力すると、仕訳帳に自動転記される:
| 入力項目 | 転記先 | 補足 |
|---------|--------|------|
| 日付 | 仕訳帳の日付 | 入力された日付をそのまま使用 |
| 名目(ETC、面談時喫茶料金、駐車料金など) | 摘要 | 案件IDと共に表示 |
| 金額 | 仕訳帳の金額 | 税込金額として転記 |
| 案件ID | 仕訳帳の案件ID | 自動入力(連携キーとして使用) |
### 8.2 勘定科目自動振り分けルール
経費の名目に応じて、勘定科目を自動判定する:
| 名目(キーワード) | 借方科目 | 貸方科目 | 備考 |
|------------------|---------|---------|------|
| ETC、高速道路、有料道路 | 旅費交通費 | 現金/普通預金 | - |
| 駐車場、パーキング | 旅費交通費 | 現金/普通預金 | - |
| 喫茶、喫茶代、飲食(面談) | 会議費 | 現金/普通預金 | 面談時は会議費扱い |
| タクシー、電車賃 | 旅費交通費 | 現金/普通預金 | - |
| 消耗品、文房具 | 消耗品費 | 現金/普通預金 | - |
| ガソリン、燃料 | 車両費 | 現金/普通預金 | - |
| 該当なし(デフォルト) | 旅費交通費 | 現金/普通預金 | 経費の基本 |
### 8.3 自動振り分けの優先順位
1. 名目に含まれるキーワードで判定
2. 複数キーワード該当時は最初にマッチしたものを採用
3. キーワード未該当の場合はデフォルト科目(旅費交通費)を適用
### 8.4 税区分の自動設定
- 原則として10%(課税)を適用
- 非課税対象(郵便切手等)は別途対応(将来的な拡張)
### 8.5 実装イメージ
案件管理画面での入力:
- 日付: 2026-03-16
- 名目: ETC(東京〜大阪間)
- 金額: 8,500円
- 案件ID: PJ123
→ 仕訳帳に自動転記:
- 日付: 2026-03-16
- 借方科目: 旅費交通費
- 貸方科目: 現金
- 金額: 8,500円
- 案件ID: PJ123
- 摘要: [PJ123] ETC(東京〜大阪間)
### 8.6 非案件経費(業務管理)からの転記仕様
業務管理機能(`04_05_01_business_management.md`)で入力・承認された「非案件経費」は、以下の仕様で仕訳帳へ自動転記される。
- **トリガー**:業務管理の非案件経費(`04_05_01_business_management.md`)が管理者に承認された時点。
- **転記マッピング**:
- 日付 → `journal.date`
- 勘定科目(`account_code`) → `journal.entries[].account`
- 金額 → `journal.entries[].debit` および `journal.tax_included`
- 摘要 → `journal.description`
- 領収書画像パス → `journal.receipt_path`
- 案件ID → `journal.project_id`(空欄)
- **ステータス**:`pending`(会計担当の確認待ち)。
- **重複防止**:`expense_id` をキーとして、同一経費データが二重に転記されないようチェックする。
## 9. データ保存場所
### 9.1 保存先
DB の `journals`(仕訳)と `journal_entries`(明細)(`00_07_database.md` 5.4節)。個人事業・法人とも同じテーブルで、会社区分は列 `company` で持つ。年・期は、日付で区別する(年ごとにデータを分けない)。
### 9.2 保存内容
- 日付
- 会社
- 借方科目・金額
- 貸方科目・金額
- 税区分
- 案件ID(任意)
- 摘要
- 作成者
- ロック状態
- 作成日時・更新日時
### 9.3 申告時のデータ保存
- 申告処理(tax.html / corporate.html)実行時に、該当年/期の仕訳の `locked` を真にする。
- 保存は、トランザクションで行う(`00_07` 8.2節)。
## 10. 今後の拡張予定
- よく使う仕訳のテンプレート登録
- 銀行口座の明細CSV自動取込
- レシート写真からのOCR入力
- 案件管理との完全連携(案件ID自動反映)
## 11. 出力仕様(後日追加予定)
### 11.1 仕訳帳(元帳)出力
- PDF/A4横書きを標準とする
- 摘要欄は全角20文字まで表示。超える場合は20文字で改行または「…」で省略
- 省略方式は別途検討
## 改訂履歴
| 日付 | 版 | 内容 |
|------|----|------|
| 2026-03-12 | 1.0 | 初版作成 |
| 2026-03-15 | 1.1 | 保存先パスを private/ / corporate/ に修正 |
| 2026-03-16 | 1.2 | 総額入力方式、複合仕訳表示、会社間転送、申告済ロック、UI要件追記 |
| 2026-03-16 | 1.3 | 案件IDフィールド追加、摘要表示ルール明記、アイコン不使用を追記、日付入力仕様修正、ファイル選択ボタン配置修正 |
| 2026-03-16 | 1.4 | 案件管理連携による経費自動振り分け機能を追加(8節) |
| 2026-03-16 | 1.5 | CSV取込機能の詳細仕様を追記(R06.csv形式に対応する自動統合ルール、非課税処理、エラー処理を明記) |
| 2026-03-16 | 1.6 | 会社・期間選択の和暦表示と自動生成を明記(2.7節新設)、年変更プルダウンの和暦表示と自動生成を追記(4.2節)、フィールド幅の原則を明確化(03_01_design_guideline.md 8.2節)
| 2026-03-16 1.3 標準ボタンのサイズを明記(横幅120px、高さ38px)、一括操作UI変更に伴うボタンサイズ調整|
|------|----|------|
| 2026-03-16 | 1.7 | 一括操作ボタンの文字表記とサイズを調整(削除120px、入替え140px、会社変更130px、年変更160px、実行80px) |
| 2026-03-16 1.8 仕訳データ修正機能の仕様を追記(2.8節新設) |
| 2026-03-16 1.9 9.3節「申告時のデータ保存」を追記 |
| 2026-03-17 | 1.10 | 3.8節「科目マスタ連携」を新設 |
| 2026-10-08 | 1.11 | ファイル名規則を「フォルダ番号+ファイル番号」形式に変更したことに伴い、参照名と保存先表記を機械的に置換(内容の変更なし) |
| 2026-10-25 | 1.12 | 8.6節「非案件経費(業務管理)からの転記仕様」を新設。業務管理機能の非案件経費承認時の会計仕訳への転記マッピング、ステータス、重複防止仕様を追加 |
| 2026-10-29 | 2.0 | DB前提に書き直し。保存先を `journals`・`journal_entries` に(5.6節、9節)。科目マスタの参照を `accounts`(API経由)に(3.8節)。確認の表示を、`confirm()` を使わない記述に(4.2節)。今後の拡張から実装済みの項目を削除 |