diff --git a/CLAUDE.md b/CLAUDE.md index 7633de6..469473e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,6 +1,6 @@ # Keina System - Claude 向けガイド -> **最終更新**: 2026-02-28 +> **最終更新**: 2026-03-05 > **現在のフェーズ**: Phase 1 (MVP) - 気象データ基盤を追加 ## 📌 このファイルの目的 @@ -150,7 +150,7 @@ MailSender (送信者ルール) └── ConstraintCheck: email/domain どちらか一方のみ MailEmail (受信メール記録) -├── account (xserver/gmail/hotmail等) +├── account (gmail / gmail_service / hotmail / xserver1〜xserver6、旧データxserver) ├── message_id (unique) ├── sender_email, sender_domain ├── subject, body_preview @@ -303,8 +303,9 @@ DistributionGroupField (グループ圃場割り当て) - フィードバックページ: `/mail/feedback/[token]`(LINEからタップ一発、認証不要) - ルール管理ページ: `/mail/rules/` - 処理履歴ページ: `/mail/history/` - - 対応アカウント: Gmail × 2、Xserver × 6(本番稼働中) + - 対応アカウント: Gmail × 2、Xserver × 6(本番稼働中、`account` は `xserver1`〜`xserver6` で識別) - Windmill フロー: `f/mail/mail_filter`(本番: windmill.keinafarm.net にデプロイ済み、10分間隔スケジュール) + - To: ヘッダー宛先補正を実装(Gmail先行取り込み時も @keinafarm.com 宛は xserver1〜xserver6 として記録/通知) - マスタードキュメント: `document/11_マスタードキュメント_メール通知関連編.md` 8. **パスワード変更機能**: - Backend: `POST /api/auth/change-password/`(JWT認証、`ChangePasswordView` in `keinasystem/urls.py`) @@ -500,6 +501,8 @@ docker-compose exec backend python manage.py migrate ## 📝 更新履歴 +- 2026-03-05: メール通知機能を更新。MailEmail.account を xserver1〜xserver6 で識別可能に変更。Windmill mail_filter に To ヘッダー宛先補正を追加し、Gmail先行取り込みでも Xserver 宛先ラベルが崩れないよう修正。マスタードキュメント/仕様書を同期。 + - 2026-02-28: Cursor連携を廃止。Claude Code 単独運用に変更。`document/20_Cursor_Claude連携ガイド.md` を削除 - 2026-03-02: 分配計画機能を実装。`apps/fertilizer` に DistributionPlan/DistributionGroup/DistributionGroupField 追加、API `/api/fertilizer/distribution/`、PDF出力(A4横・グループ★行+圃場サブ行)、フロントエンド `/distribution/`。マスタードキュメント `document/14_マスタードキュメント_分配計画編.md` 追加 - 2026-03-01: 施肥計画機能を実装・本番稼働。`apps/fertilizer`(Fertilizer, FertilizationPlan, FertilizationEntry, 自動計算3方式, PDF出力, PROTECT migration 0002)、フロントエンド `/fertilizer/`(一覧・編集・肥料マスタ)。施肥機能全体で alert/confirm 廃止・インラインバナーに統一。マスタードキュメント `document/13_マスタードキュメント_施肥計画編.md` 追加 @@ -510,3 +513,5 @@ docker-compose exec backend python manage.py migrate - 2026-02-18: E-2(対応付け可視化・紐づけ管理)仕様追加。画面設計書・差異レポート・次タスク一覧を更新。完了済みタスク(A-8, D-1〜D-4, E-1)を既知の課題から除外 - 2026-02-17: ドキュメント一斉更新(差異レポートA〜E反映、CSV→PDF統一、M:N関係、中山間モデル17列化、インライン編集方式、Navbar追加、既知の課題・次タスク一覧追加) - 2026-02-16: 初版作成(ハイブリッドアプローチの方針決定) + + diff --git a/document/11_マスタードキュメント_メール通知関連編.md b/document/11_マスタードキュメント_メール通知関連編.md index 63479e0..7113e65 100644 --- a/document/11_マスタードキュメント_メール通知関連編.md +++ b/document/11_マスタードキュメント_メール通知関連編.md @@ -47,16 +47,18 @@ ``` 1. IMAP 接続 → 前回処理済み UID 以降の新着メールを取得 -2. 送信者ルール確認(GET /api/mail/sender-rule/) +2. 宛先補正(To ヘッダー) + └── @keinafarm.com 宛先は xserver1〜xserver6 に正規化(Gmail先行取り込み時の誤表示防止) +3. 送信者ルール確認(GET /api/mail/sender-rule/) ├── never_notify → スキップ(記録しない) ├── always_notify → LLMスキップ、即 LINE 通知 - └── ルールなし → 3へ -3. 過去フィードバック集計取得(GET /api/mail/sender-context/) -4. Gemini API で重要度判定(LLM) -5. KeinaSystem に記録(POST /api/mail/emails/) + └── ルールなし → 4へ +4. 過去フィードバック集計取得(GET /api/mail/sender-context/) +5. Gemini API で重要度判定(LLM) +6. KeinaSystem に記録(POST /api/mail/emails/) ├── not_important → 記録のみ、通知なし └── important → フィードバックURLを発行、LINE 通知 -6. 処理済み最終 UID を Windmill Variable に保存 +7. 処理済み最終 UID を Windmill Variable に保存 ``` ### 10分ごとの定期実行 @@ -370,6 +372,12 @@ Hotmail は定義済みだがコメントアウト(未有効化)。 回答: `1`(重要)/ `2`(重要でない)の1文字。`1` で始まる場合 `important`。 + +### 4.7 宛先補正ロジック + +- 対象: Gmail 側で先に取得された転送メール +- 方法: `To` ヘッダーの宛先アドレスを `recipient_map` で `xserver1`〜`xserver6` に変換 +- 目的: message_id 重複時に Gmail で先着しても、実際の受信メールボックス(Xserver側)を通知文・履歴で保持する ### 4.6 LINE 通知文フォーマット ``` @@ -514,7 +522,7 @@ UUID v4 のランダムトークンのみで認証。有効期限なし。LINE ### 重複メール処理 -同じメールが複数アカウントで受信される場合(転送設定等)、`message_id` の unique 制約で2件目以降を自動スキップ。最初に処理したアカウントの `account_code` でDBに記録される。 +同じメールが複数アカウントで受信される場合(転送設定等)、`message_id` の unique 制約で2件目以降を自動スキップ。先着レコードを採用するが、Gmail先行時でも `To` ヘッダー宛先補正により `xserver1`〜`xserver6` を優先して記録する。 --- @@ -598,3 +606,5 @@ curl -s -H "Authorization: Bearer $TOKEN" \ 本番 Windmill でのパス: `f/mail/mail_filter` スケジュール: `f/mail/mail_filter_schedule` + + diff --git a/document/メールフィルタ/mail_filter_spec.md b/document/メールフィルタ/mail_filter_spec.md index d4c3e4c..56b6c3a 100644 --- a/document/メールフィルタ/mail_filter_spec.md +++ b/document/メールフィルタ/mail_filter_spec.md @@ -66,6 +66,9 @@ ``` 新着メール受信 ↓ +0. 宛先補正(To ヘッダー) + - @keinafarm.com 宛先は xserver1〜xserver6 に正規化(Gmail先行取り込み時の誤ラベル防止) + ↓ 1. mail_senders に一致するアドレスルールがあるか? → never_notify: スキップ(LLM呼ばない、記録もしない) ↓ @@ -129,7 +132,7 @@ | フィールド | 型 | 説明 | |---|---|---| | id | AutoField | | -| account | CharField | 'gmail' / 'hotmail' / 'xserver1'〜'xserver6'(旧データは 'xserver') | +| account | CharField | 'gmail' / 'gmail_service' / 'hotmail' / 'xserver1'〜'xserver6'(旧データは 'xserver') | | message_id | CharField (unique) | メールのMessage-ID(重複防止) | | sender_email | EmailField | | | sender_domain | CharField | | @@ -264,3 +267,5 @@ 7. **LINE通知**(フィードバックURL付き) 8. **残りのメールアカウントを追加** + +