$npx -y skills add kazukinagata/shinkoku --skill reading-payment-statement支払調書の画像を読み取り構造化データを返す。 他のスキルから呼び出されるほか、直接ユーザーが呼び出すことも可能。
| 1 | # 支払調書 画像読み取り |
| 2 | |
| 3 | 支払調書(報酬、料金、契約金及び賞金の支払調書)の画像を読み取り、構造化データとして返すスキル。 |
| 4 | |
| 5 | ## PDF ファイルの場合 |
| 6 | |
| 7 | ファイルが PDF(`.pdf`)の場合、画像 OCR の前にテキスト抽出を試みる。 |
| 8 | |
| 9 | 1. `shinkoku pdf extract-text --file-path <path>` を実行する |
| 10 | 2. 抽出テキストに必要な情報(支払金額・源泉徴収税額等)が含まれていれば、テキストから構造化データを生成する |
| 11 | 3. テキストが不十分(スキャン PDF 等)の場合は `shinkoku pdf to-image --file-path <path> --output-dir <dir>` で PNG に変換し、以下の画像読み取りフローに進む |
| 12 | |
| 13 | ## 画像読み取り方法 |
| 14 | |
| 15 | ### 推奨: デュアル検証(並列2コンテキスト) |
| 16 | |
| 17 | 精度を高めるため、同じ画像を2つの独立したコンテキストで並列に読み取り、結果を照合する。 |
| 18 | |
| 19 | 1. **2つの独立した読み取りを実行する:** |
| 20 | サブエージェントが使える環境では、2つのサブエージェントを並列で起動し、それぞれ独立に画像を読み取る。 |
| 21 | 各サブエージェントには以下の「基本ルール」と「出力フォーマット」をプロンプトとして渡し、画像ファイルパスを指定する。 |
| 22 | |
| 23 | 2. **結果照合:** 両方の読み取り結果から主要フィールド(金額等)を比較する。 |
| 24 | |
| 25 | 3. **一致の場合:** そのまま採用。「2つの独立した読み取りで結果が一致しました」と報告する。 |
| 26 | |
| 27 | 4. **不一致の場合:** ユーザーに元画像パスと両方の結果を提示し、正しい方を選択してもらう: |
| 28 | - 差異のあるフィールドを明示する |
| 29 | - A を採用 / B を採用 / 手動入力 の3択を提示する |
| 30 | |
| 31 | ### フォールバック(サブエージェント非対応の場合) |
| 32 | |
| 33 | サブエージェントが利用できない環境では、以下の手順で読み取る: |
| 34 | |
| 35 | 1. 画像ファイルを直接 Read ツールで読み取る |
| 36 | 2. 以下の「基本ルール」と「出力フォーマット」に従ってデータを抽出する |
| 37 | 3. 抽出結果をユーザーに提示し、**必ず目視確認を依頼する** |
| 38 | |
| 39 | ⚠ デュアル検証が利用できないため、必ずユーザーに目視確認を依頼してください。 |
| 40 | |
| 41 | ## 基本ルール |
| 42 | |
| 43 | - 画像ファイルは Read ツールで読み取る(Claude Vision が自動的に画像を認識する) |
| 44 | - 金額は必ず int(円単位の整数)で返す。カンマや「円」は除去する |
| 45 | - 日付は YYYY-MM-DD 形式で返す |
| 46 | - 和暦は西暦に変換する(令和7年 → 2025、令和6年 → 2024、平成31年 → 2019) |
| 47 | - 読み取れないフィールドは UNKNOWN(文字列)または 0(金額)とする |
| 48 | - 複数ファイルを渡された場合は全て順に処理してまとめて返す |
| 49 | |
| 50 | ## 出力フォーマット |
| 51 | |
| 52 | 画像を読み取り、以下の形式で返す: |
| 53 | |
| 54 | ``` |
| 55 | ---PAYMENT_STATEMENT_DATA--- |
| 56 | payer_name: 支払者名 |
| 57 | category: 区分(報酬/料金/契約金/賞金) |
| 58 | gross_amount: 支払金額(int) |
| 59 | withholding_tax: 源泉徴収税額(int) |
| 60 | ---END--- |
| 61 | ``` |
| 62 | |
| 63 | ## 抽出のポイント |
| 64 | |
| 65 | - 「支払金額」欄を最優先で抽出する |
| 66 | - 「源泉徴収税額」欄を正確に読み取る |
| 67 | - 支払者の名称を抽出する |
| 68 | - 区分(報酬、料金、契約金、賞金のいずれか)を確認する |
| 69 | - 「報酬、料金、契約金及び賞金の支払調書」というタイトルを確認する |
| 70 | - 支払を受ける者の情報(住所・氏名)も読み取れれば確認用に含める |
| 71 | |
| 72 | ## 複数ファイルの処理 |
| 73 | |
| 74 | 複数のファイルパスが指示された場合: |
| 75 | |
| 76 | 1. Glob ツールでファイル一覧を取得する(パターンが指示された場合) |
| 77 | 2. 各ファイルを Read ツールで順に読み取る |
| 78 | 3. 全ファイルの結果をまとめて返す(各結果の前にファイル名を記載する) |
| 79 | |
| 80 | ``` |
| 81 | ## file1.jpg |
| 82 | ---PAYMENT_STATEMENT_DATA--- |
| 83 | ... |
| 84 | ---END--- |
| 85 | |
| 86 | ## file2.jpg |
| 87 | ---PAYMENT_STATEMENT_DATA--- |
| 88 | ... |
| 89 | ---END--- |
| 90 | ``` |