claude-skills/narrative-extractor/SKILL.md
母親・支援者の語り(ナラティブ)や添付ファイルから、支援に必要な構造化データを抽出し Neo4j に登録するスキル。抽出は Claude 自身が行い、外部 LLM API は不要。「テキストから抽出」「情報を抽出して」「ナラティブから登録」「この文章を構造化して」「データベースに登録して」「面談記録を入力」「聞き取り内容を登録」などの発言時、および .docx/.xlsx/.pdf/.txt ファイル添付時に必ずこのスキルを使用すること。
npx skillsauth add kazumasakawahara/nest-support narrative-extractorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
母親・支援者の語り(ナラティブ)やファイルから、支援に必要な構造化データをJSON形式で抽出し、Neo4jデータベースに登録するためのスキル。
構造化抽出は Claude 自身がこの SKILL.md の指示に従って直接行う(外部 LLM API は不要)。Claude が抽出した JSON を、neo4j MCP の execute_query(書き込みクエリ)で本スキルの Cypher テンプレートを使って登録する。
ユーザーがテキストを直接入力するか、ファイルを添付する。
以下のルールに従って、テキストからJSON形式のデータを抽出する。
絶対に入力テキストにない情報を創作・推測しない
暗黙知の抽出を優先する
禁忌事項(NgAction)は最優先
日付の変換
Entity Resolution(同一対象の統合)
{
"client": {
"name": "氏名(必須)",
"dob": "生年月日(YYYY-MM-DD形式、不明なら null)",
"bloodType": "血液型(不明なら null)",
"kana": "ふりがな(不明なら null)",
"aliases": ["通称やニックネーム"]
},
"conditions": [
{ "name": "特性・診断名", "status": "Active" }
],
"ngActions": [
{
"action": "絶対にしてはいけないこと",
"reason": "その理由(なぜ危険か)",
"riskLevel": "LifeThreatening | Panic | Discomfort",
"relatedCondition": "関連する特性名(あれば)"
}
],
"carePreferences": [
{
"category": "食事/入浴/パニック時/移動/睡眠/服薬/コミュニケーション/その他",
"instruction": "具体的な手順・方法",
"priority": "High | Medium | Low",
"relatedCondition": "関連する特性名(あれば)"
}
],
"supportLogs": [
{
"date": "記録日(YYYY-MM-DD形式)",
"supporter": "記録者・支援者名",
"situation": "状況",
"action": "実施した対応の具体的内容",
"effectiveness": "Effective | Neutral | Ineffective",
"note": "詳細メモ・気づき"
}
],
"certificates": [
{
"type": "療育手帳/精神障害者保健福祉手帳/身体障害者手帳/障害福祉サービス受給者証/自立支援医療受給者証",
"grade": "等級",
"nextRenewalDate": "更新日(YYYY-MM-DD形式)"
}
],
"keyPersons": [
{
"name": "氏名",
"relationship": "続柄(母, 叔父, 姉 など)",
"phone": "電話番号",
"role": "役割(緊急連絡先, 医療同意, 金銭管理 など)",
"rank": 1
}
],
"guardians": [
{
"name": "氏名または法人名",
"type": "成年後見/保佐/補助/任意後見",
"phone": "連絡先",
"organization": "所属(法人の場合)"
}
],
"hospitals": [
{
"name": "病院名",
"specialty": "診療科",
"phone": "電話番号",
"doctor": "担当医名"
}
],
"lifeHistories": [
{
"era": "時期(幼少期/学齢期/青年期/成人後)",
"episode": "エピソード内容",
"emotion": "その時の感情・反応"
}
],
"wishes": [
{
"content": "願いの内容",
"date": "記録日(YYYY-MM-DD形式)"
}
]
}
抽出したJSONをユーザーに提示し、修正点がないか確認する。
確認後、neo4j MCP の execute_query を使って以下のCypherテンプレートで登録する(書き込みクエリも同じ execute_query ツールを使う)。
クライアント基本情報:
MERGE (c:Client {name: $name})
SET c.dob = CASE WHEN $dob IS NOT NULL THEN date($dob) ELSE c.dob END,
c.bloodType = COALESCE($blood, c.bloodType),
c.kana = COALESCE($kana, c.kana),
c.aliases = $aliases
特性・診断:
MATCH (c:Client {name: $client})
MERGE (con:Condition {name: $name})
SET con.status = $status
MERGE (c)-[:HAS_CONDITION]->(con)
禁忌事項(NgAction)- 最重要:
MATCH (c:Client {name: $client})
CREATE (ng:NgAction {action: $action, reason: $reason, riskLevel: $risk})
CREATE (c)-[:MUST_AVOID]->(ng)
推奨ケア(CarePreference):
MATCH (c:Client {name: $client})
CREATE (cp:CarePreference {category: $cat, instruction: $inst, priority: $pri})
CREATE (c)-[:REQUIRES]->(cp)
手帳・受給者証(Certificate):
MATCH (c:Client {name: $client})
CREATE (cert:Certificate {
type: $type,
grade: $grade,
nextRenewalDate: CASE WHEN $renewal IS NOT NULL THEN date($renewal) ELSE NULL END
})
CREATE (c)-[:HAS_CERTIFICATE]->(cert)
キーパーソン(KeyPerson):
MATCH (c:Client {name: $client})
MERGE (kp:KeyPerson {name: $name, phone: $phone})
SET kp.relationship = $rel, kp.role = $role
MERGE (c)-[r:HAS_KEY_PERSON]->(kp)
SET r.rank = $rank
後見人(Guardian):
MATCH (c:Client {name: $client})
CREATE (g:Guardian {name: $name, type: $type, phone: $phone, organization: $org})
CREATE (c)-[:HAS_LEGAL_REP]->(g)
医療機関(Hospital):
MATCH (c:Client {name: $client})
MERGE (h:Hospital {name: $name})
SET h.specialty = $spec, h.phone = $phone, h.doctor = $doc
MERGE (c)-[:TREATED_AT]->(h)
生育歴(LifeHistory):
MATCH (c:Client {name: $client})
CREATE (h:LifeHistory {era: $era, episode: $episode, emotion: $emotion})
CREATE (c)-[:HAS_HISTORY]->(h)
願い(Wish):
MATCH (c:Client {name: $client})
CREATE (w:Wish {content: $content, status: 'Active', date: date($date)})
CREATE (c)-[:HAS_WISH]->(w)
支援記録(SupportLog):
MERGE (s:Supporter {name: $supporter})
WITH s
MATCH (c:Client {name: $client})
CREATE (log:SupportLog {
date: date($date),
situation: $situation,
action: $action,
effectiveness: $effectiveness,
note: $note
})
CREATE (s)-[:LOGGED]->(log)-[:ABOUT]->(c)
すべての書き込み操作の後、AuditLog ノードを作成して監査証跡を残すこと。
監査ログ(AuditLog):
CREATE (al:AuditLog {
timestamp: datetime(),
user: $user,
action: $action,
targetType: $targetType,
targetName: $targetName,
details: $details,
clientName: $clientName
})
RETURN al.timestamp AS 記録日時
パラメータ:
$user: 操作者名(不明なら "narrative-extractor")$action: "CREATE" または "UPDATE"$targetType: ノード種別(例: "Client", "NgAction", "SupportLog")$targetName: 内容の要約$details: 登録した主要フィールドの概要$clientName: 対象クライアント名運用ルール: 1回の抽出・登録操作で複数ノードを作成した場合、クライアント単位で1件の AuditLog にまとめてよい(details に登録内容の一覧を記載)。
Client, NgAction)MUST_AVOID, HAS_KEY_PERSON)riskLevel, nextRenewalDate)PROHIBITED, PREFERS, EMERGENCY_CONTACT, RELATES_TO, HAS_GUARDIAN, HOLDS) は書き込み禁止ユーザー: 以下の文章からクライアント情報を抽出してデータベースに登録してください。
健太は1995年3月15日生まれです。血液型はA型。
自閉スペクトラム症と診断されています。
後ろから急に声をかけないでください。パニックになります。
ユーザー: [ファイル添付] この面談記録から情報を抽出して登録してください。
ユーザー: 山田健太さんの情報に以下を追加してください。
かかりつけは産業医科大学病院の中村先生(精神科)です。
tools
⚠️【非運用 / DECOMMISSIONED 2026-05】この生活困窮者自立支援スキルは廃止され、運用していません。決して使用・発火しないでください。対応する Neo4j(port 7688)・MCP サーバー(livelihood-support-db)も撤去済みで、クエリは通りません。ユーザーが生活困窮支援を明示的に要求した場合は、本機能が非運用である旨を伝えてください。
tools
WAM NET(障害福祉サービス等情報公表システム)からオープンデータを取得し、Neo4j親なき後支援データベースのServiceProviderノードを同期するスキル。差分更新、廃止事業所検出、更新レポート生成機能を提供。
tools
訪問・同行支援の前に、クライアントの禁忌事項・推奨ケア・直近の支援記録・更新期限を自動収集し、簡潔なブリーフィングシートを生成するスキル。「訪問準備」「訪問前に確認」「明日〇〇さんのところに行く」「同行支援の注意点」「ブリーフィング」などの発言時に必ずこのスキルを使用すること。訪問や面談の予定がある場合にも積極的に使用する。
testing
「もし親が倒れたら」をシミュレーションし、親が担っている機能(CareRole)の代替手段カバー率を診断するスキル。マニフェスト第5の柱「親の機能移行(Parental Transition)」を中核とし、未カバーのタスクに対する福祉サービス候補の検索も行う。「レジリエンス」「親なき後」「もしもの時」「親が倒れたら」「カバー率」「バックアップ体制」「機能移行」「親の入院」「親が認知症」などの話題で必ずこのスキルを使用すること。parent_downプロトコル発動時にも使用する。