作成: 2026-09-29
最終更新: 2026-09-30
対象機能: 籾摺り計画、籾摺り実績、籾摺り品種(混合定義)、機械利用料金(俵課金)
実装状況: 実装済み(2026-09-30時点)
対象 Issue:akira/keinasystem#88(#87の要件再検討、関連:#81)
籾摺り計画は「籾米袋数を予定する機能」ではなく、これから籾摺りする稲刈り計画・実績を集約する受け皿である。籾米袋数・二番袋数は籾摺り後にしか判明しないため、計画には持たせず実績にのみ入力する。乾燥機は従来どおり稲刈り実績側(HarvestSession / MachineUsage)で扱い、本機能では変更しない。
中心となる考え方は次のとおり。
Variety)そのものではなく、籾摺り単位でまとめた「籾摺り品種」で扱う。単独品種は登録不要で自動成立し、複数品種を一緒に籾摺りする場合のみ「混合」をマスター登録するA. 計画を先に作る通常運用
B. 計画なしで実績だけ登録する運用
#87 で作成した現行実装(apps/rice_hulling)は、籾摺り計画・実績の両方に rough_rice_bag_count / second_bag_count(籾米袋数・二番袋数)を直接持たせたシンプルな構造になっている。本Issueでは以下を変更する。
MachineCategory.code='rice_huller')WorkRecord / MachineUsage / 所有者別精算との連携| 項目 | #87(現行実装) | #88(新仕様) |
|---|---|---|
| 計画の袋数 | RiceHullingPlan.rough_rice_bag_count / second_bag_count を保持 |
廃止。計画には袋数を持たせない |
| 稲刈りとの関係 | なし(RiceHullingPlan/RiceHullingSession は稲刈りを参照しない) |
複数の稲刈りを論理リンクし、各リンクの計画/実績段階を追跡する |
| 品種 | フィールドなし | リンク由来 or 手動指定の「籾摺り品種」を持つ |
| 実績→計画の関係 | RiceHullingSession.plan は単一機械を伴う通常のFK |
同様にFKだが、計画側の状態(計画中/籾集約中/完了/中止)に連動する |
| 一覧表示 | 袋数中心 | 品種・リンク件数を追加表示 |
| 項目 | 必須 | 内容 |
|---|---|---|
| 計画名 | 必須 | 一覧で識別する名称 |
| およその予定日 | 必須 | 後から変更可能 |
| 借りる籾摺り機 | 任意 | 計画時点で未定なら空欄可 |
| 稲刈りリンク | 任意・複数 | 既存の稲刈り計画または実績を選択。同じ稲刈りは一つのリンクとして扱う |
| 籾摺り品種 | 条件付き必須 | リンクが1件もない場合に、単独の元品種または登録済み混合定義を指定 |
| 備考 | 任意 | 自由記入 |
籾米袋数と二番袋数は計画へ入力しない。
この振る舞いは RiceHullingHarvestLink で実装する。一つの稲刈り計画から複数実績が作られた場合は、同じ稲刈り計画を参照する実績単位のリンクへ展開する。
| 状態 | 条件 |
|---|---|
| 計画中 | 計画作成済みで、実績段階へ進んだ稲刈りリンクがない |
| 籾集約中 | 実績段階の稲刈りリンクが1件以上ある |
| 完了 | 籾摺り実績を登録済み |
| 中止 | ユーザーが計画一覧から中止 |
中止は自動進捗計算より優先し、稲刈り計画から実績へのリンク同期が行われても中止状態を保持する。中止した計画から籾摺り実績は登録できない。再開時は現在のリンク状況から「計画中」または「籾集約中」を再計算し、リンク済み稲刈り実績が別の有効な籾摺り計画へ割り当てられている場合は再開を止める。籾摺り実績が登録済みの完了計画は中止できない。
「籾摺り待ち」などの追加状態は設けず、実施判断は予定日と割り当て済み実績を見て行う。
| 項目 | 必須 | 内容 |
|---|---|---|
| 実施日 | 必須 | 実際に籾摺りした日 |
| 籾摺り計画 | 任意 | 計画から登録した場合は自動設定 |
| 借りた籾摺り機 | 必須 | 計画値を初期表示し、実績で変更可能 |
| 稲刈りリンク | 任意・複数 | 計画から論理リンクを引き継ぐ。計画なしでも既存の稲刈りを指定可能 |
| 籾摺り品種 | 条件付き必須 | リンクなしの場合に、単独の元品種または登録済み混合定義を指定 |
| 籾米袋数 | 必須 | 籾摺り後に確定した袋数 |
| 二番袋数 | 必須 | 籾摺り後に確定した袋数。0可 |
| 備考 | 任意 | 自由記入 |
籾米袋数と二番袋数は引き継がず、空欄から入力する。
籾摺り実績の保存前に、すべての稲刈りリンクを現在状態へ再解決する。対応する稲刈り実績が存在するリンクは自動的に実績段階へ進め、計画と実績を二重に保存・表示しない。
再解決後も計画段階のリンクが残る場合は、対象を明示したエラーとして保存を止める。ユーザーは稲刈り実績を登録するか、その稲刈りを籾摺り対象から外してから再度保存する。
コメント #6878 の初期案(1品種を複数の籾摺り品種へ所属させ、単独品種もマスター登録を要求する案)は誤りとして コメント #6879 で訂正済み。以下が現時点の正とする仕様。
Variety)から自動的に成立する設定例:
| 種別 | 例 |
|---|---|
| 明示登録が必要(混合) | 籾摺り品種「たちはるか混合」= たちはるか + たちはるか(特栽) |
| 登録不要(単独・自動成立) | 籾摺り品種「たちはるか」= たちはるか単独 |
| 登録不要(単独・自動成立) | 籾摺り品種「たちはるか(特栽)」= たちはるか(特栽)単独 |
これにより、「たちはるか(特栽)」を特栽として単独で扱う場合と、通常の「たちはるか」へまとめる場合の両方を、元データを失わずに表現できる(例: 特栽分の一部を注文数だけ出荷し、残りを通常品種と混ぜて籾摺りする運用)。
リンクから抽出した元品種を重複除去して判定する。
RiceHullingVarietyMix # 複数品種の組み合わせ定義(=マスター登録対象)
- name 例:「たちはるか混合」
- crop
- is_active
- display_order
RiceHullingVarietyMixMember
- rice_hulling_variety_mix
- variety
- unique(rice_hulling_variety_mix, variety)
同じ元品種が複数の混合定義へ所属することは許可する(判定は実際のリンク品種集合との完全一致で行うため矛盾しない)。単独品種側には対応するマスターテーブルを持たない(Variety から都度導出する)。
品種マスター内に「籾摺り品種」タブを設け、各混合定義へ所属させる元品種を複数選択できるようにする。
MachineUsage へコピーするMachineUsage 側の数量・単価・金額を正本とする例:
| 籾米袋数 | 料金数量 |
|---|---|
| 4袋 | 2俵 |
| 5袋 | 2.5俵 |
| 11袋 | 5.5俵 |
採用した物理構造は次のとおり。
year / title / scheduled_date / machine(nullable)/ manual_variety(nullable)/ manual_variety_mix(nullable)/ notes / task_status / created_at / updated_at
legacy_rough_rice_bag_count / legacy_second_bag_count へ改名して既存データを保持する。API・画面からは公開しないmanual_variety、混合を指定する場合は manual_variety_mix を使用するtask_status='canceled' はユーザー操作でのみ設定・解除し、自動進捗計算では上書きしないrice_hulling_planharvest_plan(nullable)harvest_session(nullable)follow_harvest_plandisplay_order稲刈り計画を追従するリンクは follow_harvest_plan=True とする。対応する稲刈り実績が一件なら同じ行を実績段階へ進め、複数なら実績単位の行へ展開する。稲刈り実績を直接追加したリンクは follow_harvest_plan=False とする。APIではこれらを一つの harvest_links として返し、phase で計画/実績を区別する。
year / date / title / plan(nullable)/ rough_rice_bag_count / second_bag_count / variety_selection_type / variety(nullable)/ variety_mix(nullable)/ rice_hulling_variety_name_snapshot / notes / created_at / updated_at
機械利用は WorkRecord / MachineUsage で保持する。
実績登録時の稲刈りリンクをスナップショット保存する。稲刈り計画・実績への参照に加え、計画名、実績名、実施日を保存するため、元の籾摺り計画を後から編集しても登録済み実績の対象表示は変わらない。
構成元品種ごとに variety、variety_name_snapshot、display_order を保存する。籾摺り品種全体の名称と選択種別は RiceHullingSession 本体へ保存する。
RiceHullingVarietyMix / RiceHullingVarietyMixMember(単独品種はマスター不要)
RiceHullingVarietyMix が0件の場合は保存を止める(5. 自動判定ルール)RiceHullingHarvestLink を実績単位へ展開し、すべてを籾摺り対象に含める#81 稲刈り計画・実績機能を追加する(28_マスタードキュメント_稲刈り・機械利用精算編)#87 籾摺り計画・実績機能を追加する(初期実装。#88 で要件を改修)