Install any skill in seconds. Free to start, no credit card required.
Get Started Free →This skill should be used when the user wants to record bookkeeping entries (仕訳), import transaction data from CSV files, receipts, or invoices, or manage their general ledger. Trigger phrases include: "仕訳を入力", "仕訳登録", "CSVを取り込む", "レシートを読み込む", "請求書を取り込む", "帳簿を付ける", "経費を記録", "売上を記録", "仕訳を修正", "仕訳を検索", "仕訳を削除", "取引を登録", "帳簿の初期化".
.claude/skills/kazukinagata-journal/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 125% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 126% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 204% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 197% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 304% | 0% |
CSV・レシート・請求書からデータを取り込み、ユーザー確認のうえ仕訳を登録するスキル。 帳簿の初期化、仕訳の検索・修正・削除も本スキルで対応する。
本スキルでは以下の CLI スクリプトを使用する:
shinkoku ledger <subcommand> [args]shinkoku import <subcommand> [args]すべてのコマンドは JSON を stdout に出力する。入力はコマンドライン引数または --input <json_file> で渡す。
shinkoku.config.yaml を Read ツールで読み込む/setup スキルの実行を案内して終了するdb_path: CLI スクリプトの --db-path 引数に使用output_dir: 進捗ファイル等の出力先ベースディレクトリconfig の db_path が ./shinkoku.db で CWD が /home/user/tax-2025/ の場合、CLI スクリプトには絶対パス /home/user/tax-2025/shinkoku.db を --db-path で渡す。init, journal-add, journal-batch-add, search, journal-update, journal-delete すべてに同じ絶対パスを使用する。
設定の読み込み後、引継書ファイルを読み込んで前ステップの結果を把握する。
.shinkoku/progress/progress-summary.md を Read ツールで読み込む(存在する場合).shinkoku/progress/01-setup.md仕訳入力を開始する前に以下を確認する:
init コマンドで初期化を案内する初回利用時、または新しい会計年度を開始する際に帳簿を初期化する。
init コマンドbashshinkoku ledger init \ --db-path /path/to/shinkoku.db \ --fiscal-year 2025
ユーザーが持つ取引データの形式に応じて適切なインポートツールを選択する。
csv コマンド)クレジットカード明細・銀行取引明細・会計ソフトのエクスポートデータ等を読み込む。
bashshinkoku import csv \ --file-path /path/to/transactions.csv
戻り値(JSON):
headers: 検出されたカラムヘッダ一覧rows: パースされた各行のデータencoding: 自動検出されたエンコーディングrow_count: 行数取り込み後の処理手順:
勘定科目の推定ルール:
receipt コマンド)紙のレシート・領収書の画像ファイルからOCRでデータを抽出する。
bashshinkoku import receipt \ --file-path /path/to/receipt.jpg
重要: 画像の読み取りは対応する reading- スキルに委任する。
receipt コマンドでファイルの存在を確認する/reading-receipt スキルを使用する。スキルの指示に従い、デュアル検証(2つの独立した読み取り結果の照合)を行って結果を取得する。
結果照合: 両方の読み取り結果から total_amount, date, vendor を比較する
一致の場合: そのまま採用。「2つの独立した読み取りで結果が一致しました」と報告
不一致の場合: ユーザーに元画像パスと両方の結果を提示し、正しい方を選択してもらう:
---RECEIPT_DATA--- ブロックの内容を解析するreceipts/*.jpg, receipts/*.png)receipt コマンドで各ファイルの存在を確認する/reading-receipt スキルを使用する。スキルの指示に従い、デュアル検証(2つの独立した読み取り結果の照合)を行って結果を取得する。
結果照合: ファイル単位で両方の読み取り結果の total_amount, date, vendor を比較する
一致の場合: そのまま採用。「2つの独立した読み取りで結果が一致しました」と報告
不一致の場合: 不一致のファイルについてユーザーに元画像パスと両方の結果を提示し、正しい方を選択してもらう:
journal-batch-add コマンドで一括登録するinvoice コマンド)PDFの請求書からテキストを抽出する。
bashshinkoku import invoice \ --file-path /path/to/invoice.pdf
戻り値(JSON):
vendor: 請求元date: 請求日due_date: 支払期日amount: 請求金額tax_amount: 消費税額items: 明細行raw_text: 抽出生テキストextracted_text が空の場合(画像ファイルまたはスキャン PDF)、画像の読み取りは /reading-invoice スキルを使用する。 スキルの指示に従い、デュアル検証(2つの独立した読み取り結果の照合)を行って結果を取得する。
結果照合: 両方の読み取り結果から total_amount, tax_amount, date, vendor を比較する
一致の場合: そのまま採用。「2つの独立した読み取りで結果が一致しました」と報告
不一致の場合: ユーザーに元画像パスと両方の結果を提示し、正しい方を選択してもらう:
取り込み後の処理手順:
CSVインポートのフローに重複チェックを組み込む:
check-imported コマンドでファイルのハッシュを確認bash shinkoku import check-imported \ --db-path DB --file-path /path/to/file.csv
journal-batch-add が自動的に重複を検出--force を付けて再実行record-source コマンドでインポート履歴を記録するbash shinkoku import record-source \ --db-path DB --file-path /path/to/file.csv --source-type csv
決算処理の前に check-duplicates コマンドを実行し、重複の疑いのある仕訳ペアを一覧表示する。
bashshinkoku ledger check-duplicates \ --db-path DB --fiscal-year 2025
ユーザーに確認の上、不要な重複は journal-delete コマンドで削除する。
ユーザーが確認したデータを帳簿に登録する。
journal-add)bash# journal.json に JournalEntry を JSON で記述 shinkoku ledger journal-add \ --db-path DB --fiscal-year 2025 --input journal.json
journal.json の形式:
json{ "date": "2025-01-15", "description": "摘要テキスト", "lines": [ {"side": "debit", "account_code": "5200", "amount": 1000}, {"side": "credit", "account_code": "1100", "amount": 1000} ] }
journal-batch-add)CSV取り込み等で複数の仕訳を一度に登録する場合に使用する。
bash# entries.json に JournalEntry の配列を記述 shinkoku ledger journal-batch-add \ --db-path DB --fiscal-year 2025 --input entries.json [--force]
登録前の確認事項:
journal-batch-add を実行する以下を検証し、不備があれば登録前に警告する:
登録済みの仕訳を検索する。
search コマンドbash# search_params.json に JournalSearchParams を記述 shinkoku ledger search \ --db-path DB --input search_params.json
search_params.json の形式:
json{ "fiscal_year": 2025, "date_from": "2025-01-01", "date_to": "2025-03-31", "account_code": "5200", "description_contains": "Amazon" }
検索結果の表示:
journal-update)bashshinkoku ledger journal-update \ --db-path DB --fiscal-year 2025 --journal-id 42 --input updated.json
journal-delete)bashshinkoku ledger journal-delete \ --db-path DB --journal-id 42
借方: 売掛金(1010) / 貸方: 売上(4001) 金額: 110,000円 税率: 10%
摘要: ○○社 Webサイト制作費 請求書No.2025-001借方: 消耗品費(5190) / 貸方: 普通預金(1002) 金額: 5,500円 税率: 10%
摘要: Amazon ワイヤレスキーボード借方: 旅費交通費(5130) / 貸方: 事業主借(3010) 金額: 1,200円 税率: 10%
摘要: JR 新宿→渋谷 打ち合わせ往復借方: 事業主貸(1200) / 貸方: 普通預金(1002) 金額: 50,000円
摘要: 生活費引き出し仕訳入力が完了したら、以下を案内する:
settlement スキルで決算整理・決算書作成を行うtrial-balance コマンドで残高試算表を確認して仕訳漏れがないか検証する:bash shinkoku ledger trial-balance \ --db-path DB --fiscal-year 2025
サマリー提示後、以下のファイルを Write ツールで出力する。 これにより、セッションの中断や Compact が発生しても次のステップで結果を引き継げる。
.shinkoku/progress/04-journal.md に以下の形式で出力する:
---
step: 4
skill: journal
status: completed
completed_at: "{当日日付 YYYY-MM-DD}"
fiscal_year: {tax_year}
---
# 仕訳入力・帳簿管理の結果
## インポート済みソース
| ソース名 | 件数 | インポート日 |
|---------|------|------------|
| {CSV名やレシート等} | {件数} | {日付} |
## 登録済み仕訳
- 総仕訳件数: {件数}件
## 主要勘定科目の残高(試算表スナップショット)
| 勘定科目 | コード | 残高 |
|---------|--------|------|
| {科目名} | {コード} | {残高}円 |
(売上、主要経費、現預金、売掛金、買掛金など主要科目を記載)
## 重複チェック結果
- チェック実施: {済み/未実施}
- 重複の疑い: {なし/あり(件数)}
## 未処理の項目
- {あれば記載、なければ「なし」}
## 次のステップ
/settlement で決算整理・決算書作成を行う.shinkoku/progress/progress-summary.md を更新する(存在しない場合は新規作成):
ファイルを出力したらユーザーに以下を伝える:
.shinkoku/progress/ に保存しました。セッションが中断しても次のスキルで結果を引き継げます。」| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 11,823 | 5,841 | -51% | 1 | 1 | 0% | 2,032 | 4,936 | +143% | 0 | 0 | — |
case-02 | fail→fail | 17,017 | 4,181 | -75% | 1 | 1 | 0% | 2,137 | 5,120 | +140% | 0 | 0 | — |
case-03 | fail→fail | 13,114 | 3,973 | -70% | 1 | 1 | 0% | 1,559 | 4,960 | +218% | 0 | 0 | — |
case-09 | fail→fail | 17,245 | 6,843 | -60% | 1 | 1 | 0% | 3,091 | 4,894 | +58% | 0 | 0 | — |
case-20 | pass→fail | 12,253 | 9,991 | -18% | 1 | 1 | 0% | 1,924 | 4,729 | +146% | 0 | 0 | — |
case-04 | fail→fail | 16,311 | 5,568 | -66% | 1 | 1 | 0% | 3,349 | 5,396 | +61% | 0 | 0 | — |
case-05 | fail→pass | 14,024 | 8,460 | -40% | 1 | 1 | 0% | 2,369 | 5,340 | +125% | 0 | 0 | — |
case-06 | fail→pass | 12,701 | 4,868 | -62% | 1 | 1 | 0% | 2,364 | 5,338 | +126% | 0 | 0 | — |
case-07 | fail→pass | 9,806 | 5,916 | -40% | 1 | 1 | 0% | 1,838 | 5,596 | +204% | 0 | 0 | — |
case-08 | fail→fail | 14,453 | 7,508 | -48% | 1 | 1 | 0% | 2,518 | 5,737 | +128% | 0 | 0 | — |
case-10 | fail→pass | 10,894 | 4,869 | -55% | 1 | 1 | 0% | 1,799 | 5,343 | +197% | 0 | 0 | — |
case-11 | fail→fail | 11,581 | 6,612 | -43% | 1 | 1 | 0% | 2,077 | 4,728 | +128% | 0 | 0 | — |
case-12 | fail→fail | 12,333 | 7,058 | -43% | 1 | 1 | 0% | 2,087 | 5,185 | +148% | 0 | 0 | — |
case-13 | fail→pass | 8,371 | 20,476 | +145% | 1 | 1 | 0% | 1,493 | 6,039 | +304% | 0 | 0 | — |
case-14 | fail→pass | 7,851 | 4,549 | -42% | 1 | 1 | 0% | 1,357 | 5,166 | +281% | 0 | 0 | — |
case-21 | fail→fail | 8,146 | 3,795 | -53% | 1 | 1 | 0% | 1,399 | 4,928 | +252% | 0 | 0 | — |
case-15 | fail→pass | 9,335 | 6,983 | -25% | 1 | 1 | 0% | 1,819 | 5,690 | +213% | 0 | 0 | — |
case-16 | pass→pass | 16,567 | 5,503 | -67% | 1 | 1 | 0% | 2,864 | 5,654 | +97% | 0 | 0 | — |
case-17 | fail→fail | 14,492 | 4,976 | -66% | 1 | 1 | 0% | 2,338 | 5,303 | +127% | 0 | 0 | — |
case-18 | pass→pass | 18,277 | 7,857 | -57% | 1 | 1 | 0% | 2,939 | 5,790 | +97% | 0 | 0 | — |
case-19 | fail→fail | 9,782 | 2,757 | -72% | 1 | 1 | 0% | 1,709 | 4,734 | +177% | 0 | 0 | — |
case-22 | fail→pass | 10,808 | 4,438 | -59% | 1 | 1 | 0% | 2,149 | 5,328 | +148% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.