{"id":"5cdba361-f283-4082-9fb6-139f67b1491b","shortId":"tXGuEm","kind":"skill","title":"reading-withholding","tagline":"源泉徴収票の画像を読み取り構造化データを返す。 他のスキルから呼び出されるほか、直接ユーザーが呼び出すことも可能。","description":"# 源泉徴収票 画像読み取り\n\n源泉徴収票の画像を読み取り、構造化データとして返すスキル。\n\n## PDF ファイルの場合\n\nファイルが PDF（`.pdf`）の場合、画像 OCR の前にテキスト抽出を試みる。\n\n1. `shinkoku pdf extract-text --file-path <path>` を実行する\n2. 抽出テキストに必要な情報（支払金額・源泉徴収税額等）が含まれていれば、テキストから構造化データを生成する\n3. テキストが不十分（スキャン PDF 等）の場合は `shinkoku pdf to-image --file-path <path> --output-dir <dir>` で PNG に変換し、以下の画像読み取りフローに進む\n\n## 画像読み取り方法\n\n### 推奨: デュアル検証（並列2コンテキスト）\n\n精度を高めるため、同じ画像を2つの独立したコンテキストで並列に読み取り、結果を照合する。\n\n1. **2つの独立した読み取りを実行する:**\n   サブエージェントが使える環境では、2つのサブエージェントを並列で起動し、それぞれ独立に画像を読み取る。\n   各サブエージェントには以下の「基本ルール」と「出力フォーマット」をプロンプトとして渡し、画像ファイルパスを指定する。\n\n2. **結果照合:** 両方の読み取り結果から主要フィールド（金額等）を比較する。\n\n3. **一致の場合:** そのまま採用。「2つの独立した読み取りで結果が一致しました」と報告する。\n\n4. **不一致の場合:** ユーザーに元画像パスと両方の結果を提示し、正しい方を選択してもらう:\n   - 差異のあるフィールドを明示する\n   - A を採用 / B を採用 / 手動入力 の3択を提示する\n\n### フォールバック（サブエージェント非対応の場合）\n\nサブエージェントが利用できない環境では、以下の手順で読み取る:\n\n1. 画像ファイルを直接 Read ツールで読み取る\n2. 以下の「基本ルール」と「出力フォーマット」に従ってデータを抽出する\n3. 抽出結果をユーザーに提示し、**必ず目視確認を依頼する**\n\n⚠ デュアル検証が利用できないため、必ずユーザーに目視確認を依頼してください。\n\n## 基本ルール\n\n- 画像ファイルは Read ツールで読み取る（Claude Vision が自動的に画像を認識する）\n- 金額は必ず int（円単位の整数）で返す。カンマや「円」は除去する\n- 日付は YYYY-MM-DD 形式で返す\n- 和暦は西暦に変換する（令和7年 → 2025、令和6年 → 2024、平成31年 → 2019）\n- 読み取れないフィールドは UNKNOWN（文字列）または 0（金額）とする\n- 複数ファイルを渡された場合は全て順に処理してまとめて返す\n\n## 出力フォーマット\n\n画像を読み取り、以下の形式で返す:\n\n```\n---WITHHOLDING_DATA---\npayer_name: 支払者名\npayment_amount: 支払金額（int）\nwithheld_tax: 源泉徴収税額（int）\nsocial_insurance: 社会保険料等の金額（int）\nlife_insurance_deduction: 生命保険料の控除額（int）\nearthquake_insurance_deduction: 地震保険料の控除額（int）\nhousing_loan_deduction: 住宅借入金等特別控除の額（int）\nlife_insurance_detail:\n  general_new: 一般の新保険料（int）\n  general_old: 一般の旧保険料（int）\n  medical_care: 介護医療保険料（int）\n  annuity_new: 個人年金の新保険料（int）\n  annuity_old: 個人年金の旧保険料（int）\n---END---\n```\n\n## 抽出のポイント\n\n- 「支払金額」欄（給与収入の総額）を最優先で抽出する\n- 「源泉徴収税額」欄を正確に読み取る\n- 「社会保険料等の金額」欄を読み取る\n- 生命保険料控除は新旧制度・3区分（一般/介護医療/個人年金）の内訳を確認する\n- 地震保険料控除・住宅ローン控除は記載がある場合のみ抽出する\n- 支払者の名称（会社名）を抽出する\n- 記載がない項目は 0 とする\n\n## 複数ファイルの処理\n\n複数のファイルパスが指示された場合:\n\n1. Glob ツールでファイル一覧を取得する（パターンが指示された場合）\n2. 各ファイルを Read ツールで順に読み取る\n3. 全ファイルの結果をまとめて返す（各結果の前にファイル名を記載する）\n\n```\n## file1.jpg\n---WITHHOLDING_DATA---\n...\n---END---\n\n## file2.jpg\n---WITHHOLDING_DATA---\n...\n---END---\n```","tags":["reading","withholding","shinkoku","kazukinagata","agent-skills","bookkeeping","claude-code-plugin","claude-code-skills","japan","python","tax-filing"],"capabilities":["skill","source-kazukinagata","skill-reading-withholding","topic-agent-skills","topic-bookkeeping","topic-claude-code-plugin","topic-claude-code-skills","topic-japan","topic-python","topic-tax-filing"],"categories":["shinkoku"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/kazukinagata/shinkoku/reading-withholding","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add kazukinagata/shinkoku","source_repo":"https://github.com/kazukinagata/shinkoku","install_from":"skills.sh"}},"qualityScore":"0.619","qualityRationale":"deterministic score 0.62 from registry signals: · indexed on github topic:agent-skills · 339 github stars · SKILL.md body (2,122 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T18:53:49.967Z","embedding":null,"createdAt":"2026-04-18T22:02:50.747Z","updatedAt":"2026-05-02T18:53:49.967Z","lastSeenAt":"2026-05-02T18:53:49.967Z","tsv":"'0':146,230 '1':20,64,100,234 '2':30,75,104,238 '2019':141 '2024':139 '2025':137 '2つのサブエージェントを並列で起動し':67 '2つの独立した読み取りで結果が一致しました':83 '2つの独立した読み取りを実行する':65 '3':36,80,110,242 '3区分':219 '4':85 'amount':159 'annuiti':200,204 'b':92 'care':197 'claud':119 'data':154,247,251 'dd':133 'deduct':172,177,182 'detail':187 'dir':52 'earthquak':175 'end':208,248,252 'extract':24 'extract-text':23 'file':27,48 'file-path':26,47 'file1.jpg':245 'file2.jpg':249 'general':188,192 'glob':235 'hous':180 'imag':46 'insur':167,171,176,186 'int':123,161,165,169,174,179,184,191,195,199,203,207 'life':170,185 'loan':181 'medic':196 'mm':132 'name':156 'new':189,201 'ocr':18 'old':193,205 'output':51 'output-dir':50 'path':28,49 'payer':155 'payment':158 'pdf':11,14,15,22,39,43 'png':54 'read':2,102,117,240 'reading-withhold':1 'shinkoku':21,42 'skill' 'skill-reading-withholding' 'social':166 'source-kazukinagata' 'tax':163 'text':25 'to-imag':44 'topic-agent-skills' 'topic-bookkeeping' 'topic-claude-code-plugin' 'topic-claude-code-skills' 'topic-japan' 'topic-python' 'topic-tax-filing' 'unknown':143 'vision':120 'withheld':162 'withhold':3,153,246,250 'yyyi':131 'yyyy-mm-dd':130 'が含まれていれば':34 'が自動的に画像を認識する':121 'そのまま採用':82 'それぞれ独立に画像を読み取る':68 'で':53 'で返す':125 'と':71,107 'とする':148,231 'と報告する':84 'に変換し':55 'に従ってデータを抽出する':109 'の3択を提示する':95 'の内訳を確認する':223 'の前にテキスト抽出を試みる':19 'の場合':16 'の場合は':41 'は除去する':128 'または':145 'をプロンプトとして渡し':73 'を実行する':29 'を抽出する':228 'を採用':91,93 'を最優先で抽出する':213 'を比較する':79 'カンマや':126 'サブエージェントが使える環境では':66 'サブエージェントが利用できない環境では':98 'サブエージェント非対応の場合':97 'スキャン':38 'ツールでファイル一覧を取得する':236 'ツールで読み取る':103,118 'ツールで順に読み取る':241 'テキストから構造化データを生成する':35 'テキストが不十分':37 'デュアル検証':59 'デュアル検証が利用できないため':113 'パターンが指示された場合':237 'ファイルが':13 'ファイルの場合':12 'フォールバック':96 'ユーザーに元画像パスと両方の結果を提示し':87 '一致の場合':81 '一般':220 '一般の新保険料':190 '一般の旧保険料':194 '不一致の場合':86 '両方の読み取り結果から主要フィールド':77 '並列2コンテキスト':60 '介護医療':221 '介護医療保険料':198 '他のスキルから呼び出されるほか':5 '令和6年':138 '令和7年':136 '以下の':105 '以下の形式で返す':152 '以下の手順で読み取る':99 '以下の画像読み取りフローに進む':56 '会社名':227 '住宅ローン控除は記載がある場合のみ抽出する':225 '住宅借入金等特別控除の額':183 '個人年金':222 '個人年金の新保険料':202 '個人年金の旧保険料':206 '全ファイルの結果をまとめて返す':243 '円':127 '円単位の整数':124 '出力フォーマット':72,108,150 '各サブエージェントには以下の':69 '各ファイルを':239 '各結果の前にファイル名を記載する':244 '同じ画像を2つの独立したコンテキストで並列に読み取り':62 '和暦は西暦に変換する':135 '地震保険料の控除額':178 '地震保険料控除':224 '基本ルール':70,106,115 '差異のあるフィールドを明示する':89 '平成31年':140 '形式で返す':134 '必ずユーザーに目視確認を依頼してください':114 '必ず目視確認を依頼する':112 '手動入力':94 '抽出のポイント':209 '抽出テキストに必要な情報':31 '抽出結果をユーザーに提示し':111 '推奨':58 '支払者の名称':226 '支払者名':157 '支払金額':32,160,210 '文字列':144 '日付は':129 '構造化データとして返すスキル':10 '欄':211 '欄を正確に読み取る':215 '欄を読み取る':217 '正しい方を選択してもらう':88 '源泉徴収票':7 '源泉徴収票の画像を読み取り':9 '源泉徴収票の画像を読み取り構造化データを返す':4 '源泉徴収税額':164,214 '源泉徴収税額等':33 '生命保険料の控除額':173 '生命保険料控除は新旧制度':218 '画像':17 '画像を読み取り':151 '画像ファイルは':116 '画像ファイルを直接':101 '画像ファイルパスを指定する':74 '画像読み取り':8 '画像読み取り方法':57 '直接ユーザーが呼び出すことも可能':6 '社会保険料等の金額':168,216 '等':40 '精度を高めるため':61 '結果を照合する':63 '結果照合':76 '給与収入の総額':212 '複数のファイルパスが指示された場合':233 '複数ファイルの処理':232 '複数ファイルを渡された場合は全て順に処理してまとめて返す':149 '記載がない項目は':229 '読み取れないフィールドは':142 '金額':147 '金額は必ず':122 '金額等':78","prices":[{"id":"81e0d6c2-ebf1-41ba-b595-1e4f64eef046","listingId":"5cdba361-f283-4082-9fb6-139f67b1491b","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"kazukinagata","category":"shinkoku","install_from":"skills.sh"},"createdAt":"2026-04-18T22:02:50.747Z"}],"sources":[{"listingId":"5cdba361-f283-4082-9fb6-139f67b1491b","source":"github","sourceId":"kazukinagata/shinkoku/reading-withholding","sourceUrl":"https://github.com/kazukinagata/shinkoku/tree/main/skills/reading-withholding","isPrimary":false,"firstSeenAt":"2026-04-18T22:02:50.747Z","lastSeenAt":"2026-05-02T18:53:49.967Z"}],"details":{"listingId":"5cdba361-f283-4082-9fb6-139f67b1491b","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"kazukinagata","slug":"reading-withholding","github":{"repo":"kazukinagata/shinkoku","stars":339,"topics":["agent-skills","bookkeeping","claude-code-plugin","claude-code-skills","japan","python","tax-filing"],"license":"mit","html_url":"https://github.com/kazukinagata/shinkoku","pushed_at":"2026-03-21T04:08:44Z","description":"確定申告自動化 AI エージェントプラグイン — 帳簿管理から e-Tax 入力代行まで","skill_md_sha":"082c764cd9be634237812b3b517894607fc9a6ab","skill_md_path":"skills/reading-withholding/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/kazukinagata/shinkoku/tree/main/skills/reading-withholding"},"layout":"multi","source":"github","category":"shinkoku","frontmatter":{"name":"reading-withholding","description":"源泉徴収票の画像を読み取り構造化データを返す。 他のスキルから呼び出されるほか、直接ユーザーが呼び出すことも可能。"},"skills_sh_url":"https://skills.sh/kazukinagata/shinkoku/reading-withholding"},"updatedAt":"2026-05-02T18:53:49.967Z"}}