ローカル更新済み:

13_マスタードキュメント_施肥計画編.md — 散布実績セクション整備、在庫連携・集計ルール・WorkRecord自動生成・前年度コピーのセクション追加、旧「散布確定モーダル」記述削除、型定義・ファイル構成・将来の拡張を更新
14_マスタードキュメント_分配計画編.md — 散布実績との連携・WorkRecord自動生成のセクション追加
CLAUDE.md — データモデル(SpreadingSession/Item, WorkRecord, actual_bags)追加、プロジェクト構造にfertilizer/workrecordsアプリ追加、実装状況に散布実績・作業記録索引を追記、更新履歴に2026-03-17エントリ追加
This commit is contained in:
Akira
2026-03-17 20:31:22 +09:00
parent daae1a42e5
commit 13c21ed7de
5 changed files with 366 additions and 57 deletions

View File

@@ -83,9 +83,16 @@ keinasystem_t02/
│ │ ├── views.py # sync(APIキー), records, summary, gdd, similarity
│ │ ├── urls.py
│ │ └── management/commands/fetch_weather.py # 初回一括取得・差分取得
── reports/ # 申請書生成アプリ
├── views.py # PDF生成API
└── templates/ # PDF用HTMLテンプレート
── reports/ # 申請書生成アプリ
├── views.py # PDF生成API
└── templates/ # PDF用HTMLテンプレート
│ ├── fertilizer/ # 施肥計画・散布実績アプリ
│ │ ├── models.py # Fertilizer, FertilizationPlan, FertilizationEntry, SpreadingSession, SpreadingSessionItem
│ │ ├── services.py # actual_bags再集計、在庫USE連携
│ │ └── views.py # 施肥計画/散布実績/候補API
│ └── workrecords/ # 作業記録索引アプリ
│ ├── models.py # WorkRecord
│ └── services.py # sync_delivery_work_record, sync_spreading_work_record
└── frontend/
└── src/app/
├── allocation/ # 作付け計画編集画面(メイン)
@@ -96,6 +103,9 @@ keinasystem_t02/
│ ├── feedback/[token]/ # フィードバックページ(認証不要)
│ ├── history/ # メール処理履歴
│ └── rules/ # 送信者ルール管理
├── fertilizer/ # 施肥計画(一覧・編集・肥料マスタ)
│ └── spreading/ # 散布実績画面
├── distribution/ # 運搬計画(一覧・編集)
├── weather/ # 気象データ画面(年別集計・期間指定・グラフ)
└── settings/
└── password/ # パスワード変更
@@ -188,9 +198,34 @@ FertilizationEntry (施肥エントリ・中間テーブル)
├── plan (FK to FertilizationPlan, CASCADE)
├── field (FK to fields.Field, CASCADE)
├── fertilizer (FK to Fertilizer, PROTECT) ← 使用中の肥料は削除不可
├── bags袋数、Decimal
├── bags袋数、Decimal・計画値
├── actual_bags散布実績集計値、Decimal(10,4)、nullable
└── unique_together = ['plan', 'field', 'fertilizer']
SpreadingSession (散布実績セッション) ← 2026-03-17 追加
├── year年度
├── date散布日
├── nameセッション名、必須
├── notes備考
└── year+date の一意制約なし(同日複数記録可能)
SpreadingSessionItem (散布実績明細)
├── session (FK to SpreadingSession, CASCADE)
├── field (FK to fields.Field, PROTECT)
├── fertilizer (FK to Fertilizer, PROTECT)
├── actual_bags実散布袋数、Decimal(10,4)
├── planned_bags_snapshot / delivered_bags_snapshot表示時点のスナップショット
└── unique_together = ['session', 'field', 'fertilizer']
WorkRecord (作業記録索引) ← apps/workrecords/ 別アプリ、2026-03-17 追加
├── work_date作業日
├── work_typefertilizer_delivery / fertilizer_spreading
├── title一覧表示名
├── year年度
├── delivery_trip (OneToOne FK to DeliveryTrip, nullable)
├── spreading_session (OneToOne FK to SpreadingSession, nullable)
└── 詳細は各業務テーブル側に持つ(索引として機能)
DeliveryPlan (運搬計画) ← 旧 DistributionPlan を置き換え2026-03-16 再設計)
├── year年度← 施肥計画へのFK廃止、年度ベースで全施肥計画を横断
├── name計画名
@@ -343,21 +378,29 @@ DeliveryTripItem (運搬明細)
- **将来計画**: 開花・収穫予測品種ごとの目標GDD設定 → 到達日予測)
- マスタードキュメント: `document/12_マスタードキュメント_気象データ編.md`
10. **施肥計画機能**(本番稼働中):
- Django `apps/fertilizer` アプリFertilizer, FertilizationPlan, FertilizationEntry
- Django `apps/fertilizer` アプリFertilizer, FertilizationPlan, FertilizationEntry, SpreadingSession, SpreadingSessionItem
- API: `/api/fertilizer/fertilizers/`, `/api/fertilizer/plans/`, `/api/fertilizer/calculate/`, `/api/fertilizer/candidate_fields/`
- PDF出力: `/api/fertilizer/plans/{id}/pdf/`WeasyPrint、A4横向き
- FertilizationEntry.fertilizer は PROTECT使用中の肥料は削除不可・migration 0002
- FertilizationEntry.fertilizer は PROTECT使用中の肥料は削除不可
- 自動計算3方式: per_tan反当袋数/ even均等配分/ nitrogen反当チッソ
- 四捨五入トグル: `≈`(丸め)/ `↩`(元の計算値に戻す)
- フロントエンド: `/fertilizer`(一覧)、`/fertilizer/masters`(肥料マスタ)、`/fertilizer/new``/fertilizer/[id]/edit`(編集)
- 施肥機能全体で alert/confirm を廃止し、React インラインバナーでエラー表示
- マスタードキュメント: `document/13_マスタードキュメント_施肥計画編.md`
10. **施肥計画機能**:
- Django `apps/fertilizer` アプリFertilizer, FertilizationPlan, FertilizationEntry
- APIJWT認証: `GET/POST /api/fertilizer/fertilizers/`, `GET/POST /api/fertilizer/plans/?year=`, `GET /api/fertilizer/plans/{id}/pdf/`, `GET /api/fertilizer/candidate_fields/?year=&variety_id=`, `POST /api/fertilizer/calculate/`
- 自動計算3方式: 反当袋数(per_tan)、均等配分(even)、反当チッソ(nitrogen)
- フロントエンド: `/fertilizer/`(一覧), `/fertilizer/new``/fertilizer/[id]/edit`(編集・マトリクス表), `/fertilizer/masters/`(肥料マスタ)
- スコープ外(将来): 購入管理
- **散布実績機能**2026-03-17 追加):
- 散布実績API: `/api/fertilizer/spreading/`CRUD + candidates
- 散布日単位の記録(同日複数セッション可能)
- 運搬済み肥料ベースで候補を表示、圃場×肥料単位で実績袋数を記録
- 保存時に在庫USE連携・FertilizationEntry.actual_bags再集計・WorkRecord自動生成
- 施肥計画一覧に進捗表示(未散布/一部散布/完了/計画超過)
- 旧「散布確定」ボタン廃止is_confirmed/confirmed_at はDB残留、UI未使用
- フロントエンド: `/fertilizer/spreading`
12. **作業記録索引**2026-03-17 追加):
- Django `apps/workrecords` アプリWorkRecord モデル)
- 運搬・散布の作業を日付順に一覧する索引テーブル
- 明細は各業務テーブル側DeliveryTrip / SpreadingSessionに持つ
- API: `/api/workrecords/?year=`
- WorkRecord自動生成: 運搬回の日付保存時・散布実績保存時にupsert
11. **運搬計画機能**(旧・分配計画、本番稼働中):
- 旧 DistributionPlan/Group/GroupField → 新 DeliveryPlan/Group/GroupField/Trip/TripItem に移行
- 施肥計画への直接FK廃止 → 年度ベースで全施肥計画を横断
@@ -522,6 +565,8 @@ docker-compose exec backend python manage.py migrate
## 📝 更新履歴
- 2026-03-17: 施肥散布実績連携を実装・本番稼働。旧「散布確定」ボタン廃止→日付単位の散布実績記録SpreadingSession/Itemへ移行。FertilizationEntry.actual_bags追加、散布保存時に在庫USE連携・WorkRecord自動生成。apps/workrecords新設。StockTransaction.spreading_itemをCASCADE→SET_NULLに変更。マスタードキュメント13/14を更新
- 2026-03-16: 分配計画を「運搬計画」に再設計・本番稼働。実運用のワークフロー軽トラ複数回・複数施肥計画混在・肥料指定に合わせ、DeliveryPlan/Trip/TripItem モデルへ移行。施肥計画へのFK廃止→年度ベース。グループ一括割り当て・グループ単位の回間移動機能を追加。マスタードキュメント14を全面改訂
- 2026-03-05: メール通知機能を更新。MailEmail.account を xserver1〜xserver6 で識別可能に変更。Windmill mail_filter に To ヘッダー宛先補正を追加し、Gmail先行取り込みでも Xserver 宛先ラベルが崩れないよう修正。マスタードキュメント/仕様書を同期。