@geekbeer/minion 4.1.1 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geekbeer/minion",
3
- "version": "4.1.1",
3
+ "version": "4.1.3",
4
4
  "description": "AI Agent runtime for Minion - manages status and skill deployment on VPS",
5
5
  "main": "linux/server.js",
6
6
  "bin": {
@@ -48,6 +48,32 @@ Response 201: { "reimbursement": { "id", "expense_journal_entry_id" } }
48
48
  422 missing_default_payable_account — 立替者の default_payable_account_id が未設定
49
49
  ```
50
50
 
51
+ ### PATCH /api/accounting/expense-reimbursements/[id]
52
+
53
+ 未精算の立替経費を編集する。仕訳ヘッダ・明細・reimbursement ヘッダを整合させた状態で更新する。
54
+ 精算済みの立替は編集できない (先に精算を取り消す必要がある)。
55
+ **counterparty (立替者) の変更はサポートしない** — 変更する場合は削除して再作成すること。
56
+
57
+ ```
58
+ Body (すべて optional、最低1つは渡す):
59
+ {
60
+ "occurred_on": "YYYY-MM-DD",
61
+ "amount": 1200,
62
+ "expense_account_id": "<費用科目 uuid>",
63
+ "description": "新幹線代 東京→大阪 (金額訂正)",
64
+ "category_dimensions": { "net_asset_restriction": "general" }
65
+ }
66
+
67
+ Response 200: { "reimbursement": { "id", "expense_journal_entry_id" } }
68
+
69
+ 主要エラー:
70
+ 400 invalid_amount / invalid_date / expense_account_not_found / invalid_expense_account_type
71
+ 404 reimbursement_not_found
72
+ 409 already_settled — 精算済み (next_action: 精算を先に取り消す)
73
+ 409 period_closed — 変更前後の日付が締め済期間内
74
+ 422 missing_default_payable_account
75
+ ```
76
+
51
77
  ### POST /api/accounting/expense-reimbursements/[id]/settle
52
78
 
53
79
  立替を全額精算する。**部分精算は非対応**。
@@ -71,6 +97,40 @@ Response: { "reimbursement": { "id", "expense_journal_entry_id" } }
71
97
  422 missing_default_payable_account — 立替者の貸方科目が後から消去された場合
72
98
  ```
73
99
 
100
+ ### POST /api/accounting/expense-reimbursements/bulk-settle
101
+
102
+ 複数の立替を1本の精算仕訳でまとめて精算する。実運用で「役員Aの今月分3件を1回の振込で精算」する典型ケース向け。
103
+
104
+ ```
105
+ Body:
106
+ {
107
+ "reimbursement_ids": ["<uuid>", "<uuid>", ...], // 未精算の立替IDを1件以上
108
+ "settled_on": "YYYY-MM-DD",
109
+ "wallet_account_id": "<is_wallet=true の account uuid>"
110
+ }
111
+
112
+ 仕訳 (合計1本):
113
+ (借) counterparty.default_payable_account sum(amounts) [counterparty_id=<立替者>]
114
+ (貸) wallet_account sum(amounts) [counterparty_id=<立替者>]
115
+
116
+ Response: { "settlement_entry_id": "<uuid>", "reimbursement_ids": ["<uuid>", ...] }
117
+
118
+ 制約:
119
+ - すべての reimbursement が同一 counterparty に属すこと (混在不可)
120
+ - 全額精算のみ (部分精算は非対応)
121
+
122
+ 主要エラー:
123
+ 400 missing_required_fields — reimbursement_ids が空 / 必須項目欠落
124
+ 400 multiple_counterparties — 異なる立替者が混在 (context.counterparty_ids)
125
+ 400 not_a_wallet_account — 支払口座が is_wallet=false
126
+ 404 reimbursement_not_found — 一部のIDが見つからない (context.missing_ids)
127
+ 409 already_settled — 一部が既に精算済み (context.settled_ids)
128
+ 409 period_closed — settled_on が締め済期間内
129
+ 422 missing_default_payable_account — 立替者の貸方科目が未設定
130
+ ```
131
+
132
+ データモデル: 精算仕訳と立替の関係は `accounting_reimbursement_settlements` (junction) で多対多管理される。単発 `/settle` 経由でも junction に行が書かれるため、補助元帳の集計クエリは junction を起点に書くと統一感が出る。`accounting_expense_reimbursements.settlement_journal_entry_id` は最後に紐付いた精算仕訳のポインタとして残る (後方互換用)。
133
+
74
134
  ### GET /api/accounting/expense-reimbursements
75
135
 
76
136
  ```
@@ -41,23 +41,27 @@
41
41
  }
42
42
  ```
43
43
 
44
- **手動仕訳 (manual) - 複合仕訳が必要なときのみ:**
44
+ **手動仕訳 (manual) - 複合仕訳 (N行)。HQ UIでは新規取引フォームの「複合仕訳」タブから入力される:**
45
45
  ```
46
46
  {
47
47
  "entry_type": "manual",
48
48
  "entry_date": "2026-05-25",
49
- "description": "...",
49
+ "description": "給与支払 (5月分)",
50
50
  "lines": [
51
- { "account_id": "...", "debit": 1000, "credit": 0, "memo": "...", "counterparty_id": "..." },
52
- { "account_id": "...", "debit": 0, "credit": 1000, "counterparty_id": "..." }
51
+ { "account_id": "<給料手当>", "debit": 300000, "credit": 0, "memo": "基本給", "counterparty_id": "..." },
52
+ { "account_id": "<法定福利費>", "debit": 45000, "credit": 0, "memo": "社会保険料" },
53
+ { "account_id": "<預り金>", "debit": 0, "credit": 25000, "memo": "源泉所得税" },
54
+ { "account_id": "<普通預金>", "debit": 0, "credit": 320000, "memo": "振込" }
53
55
  ]
54
56
  }
55
57
  ```
56
58
 
57
59
  **注意点:**
58
- - `lines` は **必ず2行以上** で **借方合計=貸方合計** であること(DB triggerで強制される)
60
+ - `lines` は **必ず2行以上** で **借方合計=貸方合計** であること (DB triggerで強制される)
61
+ - 各行は **`debit` または `credit` のいずれか一方のみが正の数** であること (両ゼロ・両正は400)
59
62
  - `counterparty_id` は任意。付与すると補助元帳でその取引先の明細として集計される
60
- - 一般社団法人プロファイルでは収益/費用行に `dimensions.net_asset_restriction` が必須
63
+ - 一般社団法人プロファイルで収益/費用行の `dimensions.net_asset_restriction` を省略するとデフォルト値で埋められる (`general`)。明示指定したい場合は `dimensions` フィールドを付ける
64
+ - 「1枚のレシートに会議費と接待交際費が混在」「給与計算」「未払金の振替計上」など、income/expense/transfer の2行構造に収まらないケースで使う
61
65
 
62
66
  ```
63
67
  Response: { "entry": {...} }
@@ -65,6 +69,9 @@ Response: { "entry": {...} }
65
69
  400 entry_date and entry_type are required
66
70
  400 at least 2 lines required
67
71
  400 debit/credit must balance
72
+ 400 manual entry requires at least 2 lines — lines 配列が短い
73
+ 400 line[N]: exactly one of debit/credit must be positive — 行レベル不整合
74
+ 400 指定された勘定科目がこの帳簿に存在しません — account_id が別 book / 削除済
68
75
  409 period_closed
69
76
  ```
70
77
 
@@ -98,3 +105,4 @@ Response: { "entries": [{ ..., lines: [...] }] }
98
105
  - **通常の経費は manual で複合仕訳を組まず、`expense` ですませる。** シンプルな分、間違いが少ない
99
106
  - **立替経費は仕訳APIで組み立てず、必ず /expense-reimbursements を使う。** 自前で組むと「立替者」軸の集計ができない
100
107
  - **dimensions の `net_asset_restriction`** は一般社団法人プロファイル時のみ意味あり。株式会社(corporation-jp)では空でOK
108
+ - **manual を使う判断基準**: 1取引イベントで3科目以上を同時に動かす必要があるとき (給与/源泉/振込のセット、1レシートを複数費用科目に按分 等)。2科目で済むなら income/expense/transfer のいずれかに当てはまる