From 5a9b6a053bc6d7f4cddb96fbb22fa9153b20b401 Mon Sep 17 00:00:00 2001 From: akira Date: Sun, 5 Apr 2026 14:09:48 +0900 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=96=84=E6=A1=88/issue=5F3=5F?= =?UTF-8?q?=E8=A8=88=E7=94=BB=E5=A7=8B=E5=8B=95=E5=BE=8C=E3=81=AE=E4=BD=9C?= =?UTF-8?q?=E4=BB=98=E3=81=91=E5=A4=89=E6=9B=B4=5F=E8=AA=BF=E6=9F=BB.md#L4?= =?UTF-8?q?28=20(line=20428)=20=E7=94=B0=E6=A4=8D=E3=81=88=E8=A8=88?= =?UTF-8?q?=E7=94=BB=20|=20=E6=96=BD=E8=82=A5=E3=81=A8=E5=90=8C=E6=A7=98?= =?UTF-8?q?=E3=81=AB=E5=AF=BE=E5=BF=9C=20=E3=81=A8=E3=81=84=E3=81=86?= =?UTF-8?q?=E6=B1=BA=E5=AE=9A=E8=A1=A8=E7=8F=BE=E3=81=8C=E3=80=81=E4=B8=8B?= =?UTF-8?q?=E3=81=AE=E8=A9=B3=E7=B4=B0=E4=BB=95=E6=A7=98=E3=81=A8=E5=B0=91?= =?UTF-8?q?=E3=81=97=E3=82=BA=E3=83=AC=E3=81=A6=E3=81=84=E3=81=BE=E3=81=99?= =?UTF-8?q?=E3=80=82=E8=A9=B3=E7=B4=B0=E3=81=A7=E3=81=AF=20#L463=20(line?= =?UTF-8?q?=20463)=20=E4=BB=A5=E9=99=8D=E3=81=A7=E3=80=8C=E7=8F=BE?= =?UTF-8?q?=E6=99=82=E7=82=B9=E3=81=A7=E3=81=AF=E5=85=A8=E4=BB=B6=E7=A7=BB?= =?UTF-8?q?=E5=8B=95=E3=80=8D=E3=81=A8=E6=98=8E=E8=A8=98=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=A6=E3=81=84=E3=82=8B=E3=81=AE=E3=81=A7=E3=80=81=E8=A1=A8?= =?UTF-8?q?=E3=82=82=E3=80=8C=E7=8F=BE=E6=99=82=E7=82=B9=E3=81=A7=E3=81=AF?= =?UTF-8?q?=E5=85=A8=E4=BB=B6=E7=A7=BB=E5=8B=95=E3=80=81=E5=B0=86=E6=9D=A5?= =?UTF-8?q?=E5=AE=9F=E7=B8=BE=E9=80=A3=E6=90=BA=E5=BE=8C=E3=81=AB=E5=86=8D?= =?UTF-8?q?=E8=A8=AD=E8=A8=88=E3=80=8D=E3=81=8F=E3=82=89=E3=81=84=E3=81=AB?= =?UTF-8?q?=E5=90=88=E3=82=8F=E3=81=9B=E3=81=9F=E6=96=B9=E3=81=8C=E8=AA=A4?= =?UTF-8?q?=E8=AA=AD=E3=81=95=E3=82=8C=E3=81=BE=E3=81=9B=E3=82=93=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 改善案/issue_3_計画始動後の作付け変更_調査.md#L444 (line 444) actual_bags = 0 は現行 services.py では null に丸められる は少し断定が強いです。現行の再集計ロジックでは未該当なら NULL になりやすい、という理解は良いのですが、将来だけでなくデータ補正や手動更新でも 0 が入り得ます。仕様書上は「未散布判定は NULL または 0 を未散布扱いとするかどうか」を明示した方が安全です。 --- 改善案/issue_3_計画始動後の作付け変更_調査.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/改善案/issue_3_計画始動後の作付け変更_調査.md b/改善案/issue_3_計画始動後の作付け変更_調査.md index 6656f33..b704301 100644 --- a/改善案/issue_3_計画始動後の作付け変更_調査.md +++ b/改善案/issue_3_計画始動後の作付け変更_調査.md @@ -425,7 +425,7 @@ RESERVE 付け替えもこの方針と整合する。 | 移動先計画の命名 | `{year}年度 {品種名} 施肥計画(品種変更移動)` | | 変更履歴 | **PlanVarietyChange モデルを新設** | | 圃場グループ | **対応不要**(現在値扱いのまま) | -| 田植え計画 | **施肥と同様に対応**(実装は施肥の後) | +| 田植え計画 | **現時点では全件移動**(実績概念なし)。将来の実績連携実装後に再設計(実装は施肥の後) | ### 9-2. 品種変更時の自動処理フロー @@ -441,8 +441,11 @@ RESERVE 付け替えもこの方針と整合する。 - actual_bags IS NULL → 未散布(移動対象) - actual_bags IS NOT NULL かつ actual_bags < bags → 一部散布済み(移動不可・旧計画に残す) - actual_bags >= bags → 散布完了(移動不可・旧計画に残す) - ※ actual_bags = 0 は現行 services.py では null に丸められるため実運用上は出ないが、 - 将来のロジック変更に備えて「is NULL」単独ではなく上記3区分で判定する + ※ actual_bags = 0 の扱いは明示的に決定しておく必要がある。 + 現行 services.py では SUM = 0 のとき NULL に丸めるが、 + データ補正や手動更新で 0 が直接セットされる可能性は排除できない。 + 本仕様では actual_bags IS NULL を未散布と判定し、0 は一部散布済みと同様に扱う + (移動不可・旧計画に残す)とする。 対象: FertilizationPlan.variety=A かつ year=変更年度 かつ FertilizationEntry.field=変更圃場 かつ actual_bags IS NULL(未散布)