CLAUDE.md・施肥計画マスタードキュメントを最終更新

- FertilizationEntry.fertilizer PROTECT化を反映
- alert/confirm廃止・インラインバナー方針を記録
- 実装状況セクションに施肥計画機能を追加
- マスタードキュメント index に13を追加

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Akira
2026-03-01 17:38:16 +09:00
parent deb03efaed
commit 50d5fdcbb3
2 changed files with 32 additions and 8 deletions

View File

@@ -1,8 +1,9 @@
# マスタードキュメント:施肥計画機能
> **作成**: 2026-03-01
> **最終更新**: 2026-03-01
> **対象機能**: 施肥計画(年度×品種単位のマトリクス管理)
> **実装状況**: 実装完了commit f207f5d
> **実装状況**: 実装完了・本番稼働中(最終 commit deb03ef
---
@@ -56,7 +57,7 @@
| id | int | PK | |
| plan | FK(FertilizationPlan) | CASCADE | |
| field | FK(fields.Field) | CASCADE | |
| fertilizer | FK(Fertilizer) | CASCADE | |
| fertilizer | FK(Fertilizer) | **PROTECT** | 施肥計画で使用中の肥料は削除不可 |
| bags | decimal(8,2) | required | 袋数 |
- `unique_together = ['plan', 'field', 'fertilizer']`
@@ -277,7 +278,8 @@ GET /api/plans/crops/
- 肥料一覧テーブル(名前・メーカー・容量・窒素・リン酸・カリ・備考)
- インライン行編集EditRow コンポーネント)
- 新規追加フォーム
- 削除確認ダイアログ
- 削除ボタン押下で即削除を試みるconfirm ダイアログなし)
- 施肥計画で使用中の場合は PROTECT によりバックエンドが 500 を返し、赤いインラインバナーで理由を表示
### 施肥計画編集(`/fertilizer/new` / `/fertilizer/[id]/edit`
@@ -341,7 +343,8 @@ backend/apps/fertilizer/
├── views.py # FertilizerViewSet, FertilizationPlanViewSet, CandidateFieldsView, CalculateView
├── urls.py # DefaultRouter + candidate_fields/ + calculate/
├── migrations/
── 0001_initial.py
── 0001_initial.py
│ └── 0002_alter_fertilizationentry_fertilizer.py # CASCADE → PROTECT
└── templates/
└── fertilizer/
└── pdf.html # WeasyPrint テンプレートA4横向き
@@ -417,6 +420,16 @@ export interface FertilizationPlan {
## 注意点・既知の問題
### エラー表示方針confirm/alert を使わない)
ブラウザが `alert()` / `confirm()` をブロックすると操作が無音で失敗する問題を受けて、
施肥機能全体で alert/confirm を廃止し、React インラインバナーに統一した。
- **保存失敗**: `saveError` state → ヘッダー直下に赤いバナー(✕で閉じられる)
- **肥料削除失敗**: `deleteError` state → テーブル上部に赤いバナー
- **計画削除失敗**: `deleteError` state → 一覧上部に赤いバナー
- **肥料列の除去**: ローカルstate操作のみ失敗しない
### URL ルーティング競合(解決済み)
plans アプリの `DefaultRouter(r'', PlanViewSet)``plans/get-crops-with-varieties/`