生活保護受給者尊厳支援データベース。7本柱モデルに基づき、二次被害防止と経済的安全を最優先とした支援情報を管理する。汎用neo4j MCPツールでCypherクエリを実行。
このスキルは、生活保護受給者の尊厳を守るための支援情報を、7本柱モデルに基づき包括的に管理するNeo4jグラフデータベースに、汎用neo4j MCPツールを通じてアクセスします。
対象ユーザー: 生活保護ケースワーカー、福祉事務所職員、相談支援専門員
設計思想: 受給者を「ケース番号」ではなく「尊厳ある個人」として支援する
最重要原則(Safety First):
| ツール | 用途 |
|---|---|
neo4j:read_neo4j_cypher | すべての読み取りクエリ |
neo4j:write_neo4j_cypher | データの登録・更新 |
neo4j:get_neo4j_schema | スキーマ確認(必要時のみ) |
| ノード | 用途 | 主要プロパティ |
|---|---|---|
:Recipient | 受給者(中心ノード) | name, caseNumber, dob, gender, address, protectionStartDate |
:CaseRecord | ケース記録 | date, category, content, caseworker, recipientResponse |
:HomeVisit | 家庭訪問記録 | date, observations, recipientCondition, livingEnvironment |
:Observation | 観察記録 | date, content, reliability |
| ノード | 用途 | 主要プロパティ |
|---|---|---|
:Strength | 強み | description, discoveredDate, context, sourceRecord |
:Challenge | 課題 | description, severity, currentStatus, supportNeeded |
:MentalHealthStatus | 精神疾患 | diagnosis, currentStatus, symptoms, treatmentStatus |
:Pattern | 行動パターン | description, frequency, triggers |
| ノード | 用途 | 主要プロパティ |
|---|---|---|
:EffectiveApproach | 効果的だった関わり方 | description, context, frequency |
:NgApproach | 避けるべき関わり方 ★最重要★ | description, reason, riskLevel, consequence |
:TriggerSituation | 注意が必要な状況 | description, signs, recommendedResponse |
| ノード | 用途 | 主要プロパティ |
|---|---|---|
:DeclaredHistory | 申告された生活歴 | era, content, reliability, declaredDate |
:PathwayToProtection | 保護に至った経緯 | declaredTrigger, declaredTimeline, reliability |
:Wish | 本人の願い | content, priority, declaredDate, status |
| ノード | 用途 | 主要プロパティ |
|---|---|---|
:KeyPerson | キーパーソン | name, relationship, contactInfo, role, lastContact |
:FamilyMember | 家族 | name, relationship, contactStatus, supportCapacity, riskFlag |
:SupportOrganization | 支援機関 | name, type, contactPerson, phone, services, utilizationStatus |
:MedicalInstitution | 医療機関 | name, department, doctor, role, visitFrequency |
| ノード | 用途 | 主要プロパティ |
|---|---|---|
:ProtectionDecision | 保護決定 | decisionDate, type, protectionCategory, monthlyAmount |
:Certificate | 手帳・証明書 | type, grade, expiryDate |
:SupportGoal | 支援目標 | description, targetDate, status, paceConsideration |
| ノード | 用途 | 主要プロパティ |
|---|---|---|
:EconomicRisk | 経済的リスク ★最重要★ | type, perpetrator, perpetratorRelationship, severity, status |
:MoneyManagementStatus | 金銭管理状況 | capability, pattern, riskLevel, observations |
:DailyLifeSupportService | 日常生活自立支援事業 | socialWelfareCouncil, services, status, specialist |
:CollaborationRecord | 多機関連携記録 | date, type, participants, decisions, nextActions |
:CasePattern | 類似案件パターン | patternName, indicators, recommendedInterventions |
| ノード | 用途 | 主要プロパティ |
|---|---|---|
:AuditLog | 監査ログ(ハッシュチェーン) | timestamp, username, action, resourceType, resourceId, clientId, entryHash, previousHash, sequenceNumber |
| リレーション | 方向 | プロパティ |
|---|---|---|
MUST_AVOID | Recipient → NgApproach | — |
RESPONDS_WELL_TO | Recipient → EffectiveApproach | — |
HAS_CONDITION | Recipient → MentalHealthStatus | — |
HAS_MONEY_STATUS | Recipient → MoneyManagementStatus | — |
FACES_RISK | Recipient → EconomicRisk | — |
USES_SERVICE | Recipient → DailyLifeSupportService | — |
HAS_RECORD | Recipient → CaseRecord | — |
HAS_STRENGTH | Recipient → Strength | — |
FACES | Recipient → Challenge | — |
HAS_TRIGGER | Recipient → TriggerSituation | — |
DECLARED_HISTORY | Recipient → DeclaredHistory | — |
DECLARED_PATHWAY | Recipient → PathwayToProtection | — |
WISHES | Recipient → Wish | — |
HAS_KEY_PERSON | Recipient → KeyPerson | rank(優先順位) |
HAS_FAMILY | Recipient → FamilyMember | — |
RECEIVES_SUPPORT_FROM | Recipient → SupportOrganization | — |
TREATED_AT | Recipient → MedicalInstitution | — |
HAS_DECISION | Recipient → ProtectionDecision | — |
HOLDS | Recipient → Certificate | — |
HAS_GOAL | Recipient → SupportGoal | — |
SHOWS_PATTERN | Recipient → Pattern | — |
VISITED_ON | Recipient → HomeVisit | — |
ABOUT | CollaborationRecord → Recipient | — |
INVOLVED | CollaborationRecord → SupportOrganization | — |
OBSERVED | CaseRecord → Observation | — |
PROVIDED_BY | DailyLifeSupportService → SupportOrganization | — |
POSES_RISK | FamilyMember → EconomicRisk | — |
MATCHES_PATTERN | Recipient → CasePattern | — |
MATCH (r:Recipient)
OPTIONAL MATCH (r)-[:MUST_AVOID]->(ng:NgApproach)
OPTIONAL MATCH (r)-[:FACES_RISK]->(er:EconomicRisk)
WHERE er IS NULL OR er.status = 'Active'
OPTIONAL MATCH (r)-[:HAS_CONDITION]->(mh:MentalHealthStatus)
OPTIONAL MATCH (r)-[:HAS_KEY_PERSON]->(kp:KeyPerson)
RETURN
r.name AS 氏名,
r.dob AS 生年月日,
r.caseNumber AS ケース番号,
count(DISTINCT ng) AS 禁忌登録数,
count(DISTINCT er) AS 経済的リスク数,
count(DISTINCT mh) AS 精神疾患登録数,
count(DISTINCT kp) AS キーパーソン数
ORDER BY r.name
出力加工: 生年月日から年齢を計算して併記。
7本柱すべての情報を取得するため、複数クエリに分割して実行する。
MATCH (r:Recipient)
WHERE r.name CONTAINS $recipientName
OPTIONAL MATCH (r)-[:MUST_AVOID]->(ng:NgApproach)
OPTIONAL MATCH (r)-[:RESPONDS_WELL_TO]->(ea:EffectiveApproach)
OPTIONAL MATCH (r)-[:HAS_TRIGGER]->(ts:TriggerSituation)
RETURN
r.name AS 氏名,
r.dob AS 生年月日,
r.caseNumber AS ケース番号,
r.gender AS 性別,
r.address AS 住所,
r.protectionStartDate AS 保護開始日,
collect(DISTINCT {
description: ng.description,
reason: ng.reason,
riskLevel: ng.riskLevel,
consequence: ng.consequence
}) AS 避けるべき関わり方,
collect(DISTINCT {
description: ea.description,
context: ea.context
}) AS 効果的な関わり方,
collect(DISTINCT {
description: ts.description,
signs: ts.signs,
response: ts.recommendedResponse
}) AS 注意が必要な状況
MATCH (r:Recipient)
WHERE r.name CONTAINS $recipientName
OPTIONAL MATCH (r)-[:FACES_RISK]->(er:EconomicRisk)
WHERE er.status = 'Active'
OPTIONAL MATCH (r)-[:HAS_MONEY_STATUS]->(mms:MoneyManagementStatus)
OPTIONAL MATCH (r)-[:USES_SERVICE]->(dlss:DailyLifeSupportService)
RETURN
collect(DISTINCT {
type: er.type,
perpetrator: er.perpetrator,
relationship: er.perpetratorRelationship,
severity: er.severity,
description: er.description
}) AS 経済的リスク,
mms.capability AS 金銭管理能力,
mms.pattern AS 金銭管理パターン,
mms.riskLevel AS 金銭管理リスク,
mms.observations AS 金銭管理所見,
dlss.socialWelfareCouncil AS 社協名,
dlss.services AS 日自支援サービス,
dlss.status AS 日自支援状態,
dlss.specialist AS 日自支援担当者
MATCH (r:Recipient)
WHERE r.name CONTAINS $recipientName
OPTIONAL MATCH (r)-[:HAS_CONDITION]->(mh:MentalHealthStatus)
OPTIONAL MATCH (r)-[:HAS_STRENGTH]->(s:Strength)
OPTIONAL MATCH (r)-[:HAS_RECORD]->(cr:CaseRecord)
WITH r, mh,
collect(DISTINCT {description: s.description, context: s.context}) AS 強み,
cr ORDER BY cr.date DESC
WITH r, mh, 強み,
collect(DISTINCT {
date: cr.date,
category: cr.category,
content: cr.content,
response: cr.recipientResponse
})[..5] AS 最近のケース記録
RETURN
mh.diagnosis AS 精神疾患_診断,
mh.currentStatus AS 精神疾患_状態,
mh.symptoms AS 精神疾患_症状,
mh.treatmentStatus AS 治療状況,
強み,
最近のケース記録
MATCH (r:Recipient)
WHERE r.name CONTAINS $recipientName
OPTIONAL MATCH (r)-[kpRel:HAS_KEY_PERSON]->(kp:KeyPerson)
OPTIONAL MATCH (r)-[:RECEIVES_SUPPORT_FROM]->(so:SupportOrganization)
OPTIONAL MATCH (r)-[:TREATED_AT]->(mi:MedicalInstitution)
RETURN
collect(DISTINCT {
rank: kpRel.rank,
name: kp.name,
relationship: kp.relationship,
contactInfo: kp.contactInfo,
role: kp.role
}) AS キーパーソン,
collect(DISTINCT {
name: so.name,
type: so.type,
contact: so.contactPerson
}) AS 支援機関,
collect(DISTINCT {
name: mi.name,
department: mi.department,
doctor: mi.doctor
}) AS 医療機関
パラメータ: $recipientName
出力加工:
nullのエントリを除外rank昇順でソート⚠️【避けるべき関わり方】(最優先)
⚠️【経済的リスク】(第2優先)
🏥【精神疾患の状況】
💰【金銭管理と支援サービス】
✅【効果的だった関わり方】
💪【強み】
📋【最近のケース記録】
🤝【社会的ネットワーク】
MATCH (n)
WHERE n:Recipient OR n:NgApproach OR n:EffectiveApproach OR n:EconomicRisk
OR n:MoneyManagementStatus OR n:MentalHealthStatus OR n:CaseRecord
OR n:KeyPerson OR n:FamilyMember OR n:SupportOrganization
OR n:Certificate OR n:CollaborationRecord OR n:AuditLog
OR n:Strength OR n:DailyLifeSupportService
WITH labels(n)[0] AS label
RETURN label AS ノード種別, count(*) AS 登録数
ORDER BY 登録数 DESC
MATCH (r:Recipient)-[:HOLDS]->(cert:Certificate)
WHERE cert.expiryDate IS NOT NULL
AND ($recipientName = '' OR r.name CONTAINS $recipientName)
WITH r, cert,
duration.inDays(date(), cert.expiryDate).days AS daysUntilExpiry
WHERE daysUntilExpiry <= $days AND daysUntilExpiry >= 0
RETURN
r.name AS 受給者,
cert.type AS 証明書種類,
cert.grade AS 等級,
cert.expiryDate AS 有効期限,
daysUntilExpiry AS 残り日数
ORDER BY daysUntilExpiry ASC
パラメータ: $recipientName(空文字で全員), $days(デフォルト90)
出力加工: 残り日数で緊急度をグループ化
MATCH (r:Recipient)-[:HAS_RECORD]->(cr:CaseRecord)
WHERE r.name CONTAINS $recipientName
RETURN cr.date AS 日付,
cr.category AS 区分,
cr.content AS 内容,
cr.caseworker AS 記録者,
cr.recipientResponse AS 本人の反応
ORDER BY cr.date DESC
LIMIT $limit
パラメータ: $recipientName, $limit(デフォルト10、最大50)
MATCH (r:Recipient)-[:RESPONDS_WELL_TO]->(ea:EffectiveApproach)
WHERE r.name CONTAINS $recipientName
RETURN ea.description AS 効果的な関わり方,
ea.context AS 状況,
ea.frequency AS 頻度
パラメータ: $recipientName
MATCH (al:AuditLog)
WHERE ($recipientName = '' OR al.clientId CONTAINS $recipientName)
AND ($userName = '' OR al.username CONTAINS $userName)
RETURN al.timestamp AS 日時,
al.username AS 操作者,
al.action AS 操作,
al.resourceType AS 対象種別,
al.resourceId AS 対象名,
al.details AS 詳細,
al.clientId AS 受給者,
al.sequenceNumber AS 連番,
al.entryHash AS ハッシュ
ORDER BY al.timestamp DESC
LIMIT $limit
パラメータ: $recipientName(空文字OK), $userName(空文字OK), $limit(デフォルト30)
MATCH (al:AuditLog)
WHERE al.clientId CONTAINS $recipientName
RETURN al.timestamp AS 日時,
al.username AS 操作者,
al.action AS 操作,
al.resourceType AS 対象種別,
al.resourceId AS 内容,
al.details AS 詳細
ORDER BY al.timestamp DESC
LIMIT $limit
パラメータ: $recipientName, $limit(デフォルト20)
訪問前に必ず確認すべき情報を Safety First 順で取得。
MATCH (r:Recipient)
WHERE r.name CONTAINS $recipientName
OPTIONAL MATCH (r)-[:MUST_AVOID]->(ng:NgApproach)
OPTIONAL MATCH (r)-[:FACES_RISK]->(er:EconomicRisk)
WHERE er.status = 'Active'
OPTIONAL MATCH (r)-[:HAS_CONDITION]->(mh:MentalHealthStatus)
OPTIONAL MATCH (r)-[:HAS_MONEY_STATUS]->(mms:MoneyManagementStatus)
OPTIONAL MATCH (r)-[:USES_SERVICE]->(dlss:DailyLifeSupportService)
OPTIONAL MATCH (r)-[:RESPONDS_WELL_TO]->(ea:EffectiveApproach)
RETURN r.name AS 受給者名,
collect(DISTINCT {
description: ng.description,
reason: ng.reason,
risk: ng.riskLevel
}) AS 避けるべき関わり方,
collect(DISTINCT {
type: er.type,
perpetrator: er.perpetrator,
severity: er.severity
}) AS 経済的リスク,
mh.diagnosis AS 精神疾患,
mh.currentStatus AS 疾患の状態,
mms.capability AS 金銭管理能力,
mms.pattern AS 金銭管理パターン,
dlss.services AS 自立支援サービス,
collect(DISTINCT {
description: ea.description,
context: ea.context
}) AS 効果的な関わり方
パラメータ: $recipientName
出力加工:
⚠️ 避けるべき関わり方(最初に必ず確認)
⚠️ 経済的リスク(搾取の有無)
🏥 精神疾患の状況
💰 金銭管理状況と支援サービス
✅ 効果的だった関わり方
担当者交代時に新担当者へ渡す情報を取得。テンプレート2(プロフィール一括)の結果を以下の順序で整形する。
出力構造:
# {受給者名}さん 引き継ぎサマリー
## ⚠️ 避けるべき関わり方(最初に警告)
## ⚠️ 経済的リスク
## 🏥 精神疾患の状況
## ✅ 効果的だった関わり方
## 💪 発見された強み
## 💰 金銭管理と支援サービス
## 🤝 連携機関
テンプレート2のクエリ群を実行し、上記順序で整形すること。
MATCH (target:Recipient)
WHERE target.name CONTAINS $recipientName
MATCH (target)-[:FACES_RISK]->(er:EconomicRisk)
WITH target, collect(er.type) AS targetRiskTypes
MATCH (other:Recipient)-[:FACES_RISK]->(otherRisk:EconomicRisk)
WHERE other.name <> target.name
AND otherRisk.type IN targetRiskTypes
OPTIONAL MATCH (other)-[:USES_SERVICE]->(dlss:DailyLifeSupportService)
RETURN DISTINCT
other.name AS 類似ケース,
collect(DISTINCT otherRisk.type) AS 共通リスク,
dlss.services AS 利用サービス,
otherRisk.status AS リスク状態
パラメータ: $recipientName
MATCH (cr:CollaborationRecord)-[:ABOUT]->(r:Recipient)
WHERE r.name CONTAINS $recipientName
OPTIONAL MATCH (cr)-[:INVOLVED]->(so:SupportOrganization)
RETURN cr.date AS 日付,
cr.type AS 種別,
cr.participants AS 参加者,
cr.decisions AS 決定事項,
cr.nextActions AS 次回アクション,
collect(so.name) AS 関係機関
ORDER BY cr.date DESC
LIMIT $limit
パラメータ: $recipientName, $limit(デフォルト10)
旧システムでは Gemini API でケース記録テキストを構造化していたが、スキルベースの新システムでは Claude自身がテキストを構造化 してからCypherで登録する。
category: 相談/訪問/電話/来所/同行/会議/その他content: 記録内容caseworker: 記録者名recipientResponse: 本人の反応observations: 観察された事実のリストMATCH (r:Recipient {name: $recipientName})
CREATE (cr:CaseRecord {
date: date($date),
category: $category,
content: $content,
caseworker: $caseworker,
recipientResponse: $response,
createdAt: datetime()
})
CREATE (r)-[:HAS_RECORD]->(cr)
RETURN cr.date AS 日付, cr.category AS 区分
パラメータ: $recipientName, $date, $category, $content, $caseworker, $response
MATCH (r:Recipient {name: $recipientName})
CREATE (ng:NgApproach {
description: $description,
reason: $reason,
riskLevel: $riskLevel,
consequence: $consequence,
createdAt: datetime()
})
CREATE (r)-[:MUST_AVOID]->(ng)
RETURN ng.description AS 内容, ng.riskLevel AS リスク
パラメータ: $recipientName, $description, $reason, $riskLevel (High/Medium/Low), $consequence
MATCH (r:Recipient {name: $recipientName})
CREATE (er:EconomicRisk {
type: $type,
perpetrator: $perpetrator,
perpetratorRelationship: $relationship,
severity: $severity,
description: $description,
discoveredDate: date($discoveredDate),
status: $status,
createdAt: datetime()
})
CREATE (r)-[:FACES_RISK]->(er)
WITH r, er
OPTIONAL MATCH (fm:FamilyMember {recipientName: $recipientName})
WHERE fm.relationship = $relationship OR fm.name = $perpetrator
FOREACH (_ IN CASE WHEN fm IS NOT NULL THEN [1] ELSE [] END |
MERGE (fm)-[:POSES_RISK]->(er)
SET fm.riskFlag = true
)
RETURN er.type AS 種類, er.severity AS 深刻度
パラメータ: $recipientName, $type, $perpetrator, $relationship, $severity (High/Medium/Low), $description, $discoveredDate, $status (Active/Monitoring/Resolved)
MATCH (r:Recipient {name: $recipientName})
MERGE (mms:MoneyManagementStatus {recipientName: $recipientName})
SET mms.capability = $capability,
mms.pattern = $pattern,
mms.riskLevel = $riskLevel,
mms.observations = $observations,
mms.assessmentDate = date($assessmentDate),
mms.updatedAt = datetime()
MERGE (r)-[:HAS_MONEY_STATUS]->(mms)
RETURN mms.capability AS 能力, mms.riskLevel AS リスク
パラメータ: $recipientName, $capability (自己管理可能/支援があれば可能/支援が必要/困難/不明), $pattern, $riskLevel, $observations, $assessmentDate
MATCH (r:Recipient {name: $recipientName})
CREATE (ea:EffectiveApproach {
description: $description,
context: $context,
frequency: $frequency,
createdAt: datetime()
})
CREATE (r)-[:RESPONDS_WELL_TO]->(ea)
RETURN ea.description AS 内容
パラメータ: $recipientName, $description, $context, $frequency
MATCH (r:Recipient {name: $recipientName})
MERGE (so:SupportOrganization {name: $orgName})
SET so.type = $orgType,
so.contactPerson = $contactPerson,
so.phone = $phone,
so.services = $services,
so.utilizationStatus = $status,
so.updatedAt = datetime()
MERGE (r)-[:RECEIVES_SUPPORT_FROM]->(so)
RETURN so.name AS 機関名
パラメータ: $recipientName, $orgName, $orgType, $contactPerson, $phone, $services, $status (利用中/利用終了/調整中)
MATCH (r:Recipient {name: $recipientName})
CREATE (cr:CollaborationRecord {
date: date($date),
type: $type,
participants: $participants,
agenda: $agenda,
discussion: $discussion,
decisions: $decisions,
nextActions: $nextActions,
createdBy: $createdBy,
createdAt: datetime()
})
CREATE (cr)-[:ABOUT]->(r)
RETURN cr.date AS 日付, cr.type AS 種別
パラメータ: $recipientName, $date, $type (ケース会議/情報共有/緊急対応/定期連絡), $participants (配列), $agenda, $discussion, $decisions (配列), $nextActions (配列), $createdBy
データ変更時には必ず監査ログを残す。
CREATE (al:AuditLog {
timestamp: datetime(),
username: $userName,
action: $action,
resourceType: $resourceType,
resourceId: $resourceId,
details: $details,
clientId: $recipientName,
result: 'SUCCESS'
})
RETURN al.timestamp AS 記録日時
パラメータ: $userName, $action (CREATE/UPDATE/DELETE), $resourceType, $resourceId, $details, $recipientName
ケース記録テキストに以下の表現があった場合、登録前に適切に変換する。
| 入力表現 | 変換後 |
|---|---|
| 「怠惰」「怠けている」 | 「症状により活動が制限されている」 |
| 「指導した」 | 「情報提供した(本人の反応を確認)」 |
| 「改善しない」 | 「現時点では変化が見られない」 |
| 「嘘をついている」 | 「申告内容と記録に相違がある」 |
| 「問題ケース」 | 「複合的な支援ニーズがある」 |
| 「言うことを聞かない」 | 「本人の意向と支援方針に相違がある」 |
| 「何度言っても」 | 「別のアプローチを検討する必要がある」 |
| 「金遣いが荒い」 | 「金銭管理に支援が必要」 |
| 「家族に甘い」 | 「家族との関係性に課題がある」 |
重要: 変換が必要な表現を検出した場合、ユーザーに検出結果を報告してから変換して登録する。
ケース記録テキストから以下のパターンを検出し、EconomicRiskの登録を提案する。
| テキストパターン | リスクサイン | 想定原因 |
|---|---|---|
| 「お金がない」「足りない」(受給日直後) | 金銭不足 | 金銭搾取, 浪費, 金銭管理困難 |
| 「息子/娘/家族」+「渡した/持っていかれた/取られた」 | 親族への金銭流出 | 金銭搾取 |
| 「息子/娘/家族」+「来て/来ると」+「お金/金」 | 親族の訪問と金銭の関連 | 金銭搾取, 無心・たかり |
| 「断ると/断れない」+「怒/怖」 | 金銭要求への恐怖 | 無心・たかり, 金銭搾取 |
| 「通帳」+「預けている/渡している/管理されている」 | 通帳の他者管理 | 通帳管理強要 |
| 「受給日」+「数日/すぐ」+「ない/なくなる」 | 受給日直後の金銭枯渇 | 金銭搾取, 浪費 |
| 「パチンコ」「競馬」「ギャンブル」 | ギャンブルへの言及 | 浪費 |
| 「借金/ローン」+「代わりに/肩代わり」 | 借金の肩代わり | 借金の肩代わり強要 |
| 「電話/メール」+「送金/振込」 | 遠隔での送金 | 詐欺被害リスク |
重要: リスクサインを検出した場合、必ずユーザーに報告し、EconomicRisk登録の確認を求める。
| テキストパターン | 連携種別 |
|---|---|
| 「ケース会議」「カンファレンス」 | ケース会議 |
| 「社協」「社会福祉協議会」 | 社会福祉協議会との連携 |
| 「地域包括」「包括支援」 | 地域包括支援センターとの連携 |
| 「日常生活自立支援」「日自」「金銭管理サービス」 | 日常生活自立支援事業 |
| 「主治医/病院/クリニック」+「連絡/相談/報告」 | 医療機関との連携 |
連携サインを検出した場合、CollaborationRecordの登録を提案する。
受給者情報を表示する際は、常に以下の順序を守る:
「パニック」「事故」「急病」「緊急」「搾取」「暴力」などのワードを検知したら、emergency-protocol スキルの利用を検討すること。
データの新規登録・更新前に、登録内容をユーザーに確認すること。特に:
すべてのクエリで $param 形式のパラメータを使用。文字列連結によるCypher構築は禁止。
すべてのデータ変更操作後に、監査ログを記録すること。
生年月日(dob)が取得できた場合、必ず現在の年齢を計算して併記する。
プロフィール表示時に以下を自動チェック:
ユーザー: 「田中太郎さんの訪問前ブリーフィング」
手順:
1. テンプレート9(訪問前ブリーフィング)を実行
2. Safety First順で表示
3. 前回の訪問記録があればテンプレート5で確認
ユーザー: 「田中太郎さんの記録: 今日訪問したら『お金がない』と訴えた。
受給日から3日しか経っていない。息子が来てお金を持っていったとのこと。」
手順:
1. テキストを構造化(CaseRecord)
2. 経済的リスクサインを検出:
- 「お金がない」(受給日直後)→ 金銭不足
- 「息子が来てお金を持っていった」→ 親族による金銭搾取
3. 検出結果をユーザーに報告
4. ケース記録の登録(確認後)
5. EconomicRisk登録を提案(確認後)
6. 監査ログ記録
ユーザー: 「田中太郎さんの引き継ぎサマリーを作って」
手順:
1. テンプレート2のクエリ群を実行
2. テンプレート10の構造で整形
3. Safety First順で表示
ユーザー: 「記録: 田中さんは怠惰で、何度指導しても改善しない。
金遣いが荒く、受給日にすぐ使い果たす。」
手順:
1. 批判的表現を検出:
- 「怠惰」→「症状により活動が制限されている」
- 「指導しても」→「情報提供したが」
- 「改善しない」→「現時点では変化が見られない」
- 「金遣いが荒く」→「金銭管理に支援が必要で」
2. 変換結果をユーザーに報告
3. 変換後のテキストでケース記録を登録
4. 金銭管理リスクサインも検出・報告
| スキル | 連携タイミング |
|---|---|
emergency-protocol | 緊急ワード検知時に即座に切り替え |
neo4j-support-db | 障害福祉サービス利用者の情報参照(別スキーマ注意) |
ecomap-generator | 支援ネットワーク図の生成 |
provider-search | 事業所検索(該当する場合) |
pdf / xlsx | レポート出力時 |
| 項目 | neo4j-support-db | livelihood-support |
|---|---|---|
| 中心ノード | :Client | :Recipient |
| モデル | 4本柱 | 7本柱 |
| 禁忌ノード | :NgAction | :NgApproach |
| 禁忌リレーション | MUST_AVOID | MUST_AVOID |
| 経済的リスク | なし | :EconomicRisk |
| 金銭管理 | なし | :MoneyManagementStatus |
| 効果的ケア | :CarePreference | :EffectiveApproach |
| 支援記録 | :SupportLog | :CaseRecord |
| 監査ログ | 単純記録 | ハッシュチェーン |
| Neo4jポート | bolt://localhost:7687 | bolt://localhost:7688 |
重要: 2つのスキーマは別のNeo4jインスタンスで稼働している。neo4j MCPツールの接続先を正しく設定すること。
bolt://localhost:7687(HTTP: 7474)bolt://localhost:7688(HTTP: 7475)