作成: 2026-09-29
最終更新: 2026-09-29
対象機能: 稲刈り計画、稲刈り実績、機械マスター、機械利用料金、所有者別精算、印刷
実装状況: Phase 1〜7 実装・総合検証済み
対象 Issue:akira/keinasystem#81(関連:#82〜#86)
料金仕様の正本: Issue #81 comment #6825
稲刈りの任意計画と実績を記録し、実際に使用したコンバイン・乾燥機の利用料金を所有者別に精算する機能である。
中心となる考え方は次のとおり。
機械所有者・機械・標準料金を登録
↓
稲刈り計画を作成(任意)
↓
稲刈り実績を登録
├─ 圃場ごとの今回割合・作業面積
├─ 投入後目盛り
├─ コンバイン利用料金
└─ 乾燥機利用料金
↓
所有者・期間を指定して下書き精算書を作成
↓
内容確認・必要なら実績料金を修正
↓
支払済みにして確定
↓
印刷またはPDF保存
Issue #81本文の初期案には「期間付き料金体系」「1機械に複数料金明細」「確定済み・未払い状態」が残っているが、現行実装では使用しない。
| 項目 | 現行仕様 |
|---|---|
| 料金 | 1機械につき標準課金単位1つ+標準単価1つ |
| 料金の適用 | 実績新規登録時に機械マスターからコピー |
| 実績登録後 | 実績側の課金単位・数量・単価・金額が正本 |
| マスター料金変更 | 登録済み実績へ影響しない |
| 精算状態 | 下書き → 支払済み の2段階 |
| 支払い | 精算書合計を一括払い。分割払いは扱わない |
| CSV | 対象外 |
画面: /machines/masters
初回運用前に、次の順で登録する。
「所有者」タブで、機械を所有する組織・個人を登録する。
例:
使用しなくなった所有者は削除せず「使用中」を解除する。機械が紐づく所有者は削除できない。
初期データとして以下が登録される。
稲刈り実績で選べるのは、機械種別が「コンバイン」または「乾燥機」の有効な機械である。
「機械」タブで次を登録する。
| 項目 | 説明 |
|---|---|
| 所有者 | 精算先となる所有者 |
| 機械種別 | コンバイン、乾燥機など |
| 表示名 | 画面・精算書に表示する名称 |
| メーカー・型式 | 任意 |
| デフォルト | その機械種別で新規実績時に初期選択する機械 |
| 使用中 | 選択候補へ表示するか |
| 精算対象 | 所有者への支払い対象とするか |
デフォルト機械は機械種別ごとに1台だけ設定できる。無効な機械をデフォルトにはできない。
稲刈り実績画面からコンバイン・乾燥機を簡易追加することもできる。料金や詳細項目は必要に応じて機械マスターで補完する。
「料金体系」タブで、機械ごとに次を設定する。
| 課金単位 | 初期数量 |
|---|---|
| 面積(反) | 選択圃場の今回作業面積合計 |
| 回数 | 1 |
| 時間 | 実績画面で入力した利用時間 |
標準単価は新しい実績へコピーする初期値である。後から標準単価を変更しても、登録済み実績の料金は変わらない。
「精算対象」を有効にした機械には、標準課金単位と標準単価を必ず設定する。未設定の場合、その機械を使う実績は保存できない。
画面:
/harvest/plans/harvest/plans/new/harvest/plans/{id}/edit画面:
/harvest/records/harvest/records/new/harvest/records/{id}/edit| 項目 | ルール |
|---|---|
| 実施日 | 年度は実施日の年から決まる |
| タイトル | 一覧・作業記録に表示 |
| 投入後目盛り | 0.0〜10.0、小数1桁 |
| コンバイン | 有効なコンバインから1台選択 |
| 乾燥機 | 有効な乾燥機から1台選択 |
| 利用時間 | 時間課金の機械では必須 |
| 対象圃場 | 指定年度の水稲作付け圃場 |
| 今回割合 | 0より大きく100以下 |
| 備考 | 任意 |
1件の実績は1回の乾燥機投入に対応する。同じ日に複数回投入した場合は、投入ごとに実績を分けて登録する。同日・同一圃場の複数実績も可能だが、年度内累計が100%を超える登録はできない。
今回作業面積 = 圃場面積スナップショット × 今回割合 ÷ 100
作業後累計割合 = 過去の今回割合合計 + 今回割合
残り割合 = 100 - 作業後累計割合
実績保存時に、対応するWorkRecordと次のMachineUsageを作成・同期する。
primarydryer金額は数量×単価を円単位で四捨五入する。
未精算の実績では、実績編集画面から課金単位・数量・単価を直接修正できる。機械を変更した場合は、変更先機械の標準料金を新しい初期値としてコピーする。
ただし、下書き精算書へ含めた後は機械の差し替えと利用削除はできない。単価・数量は支払確定前まで修正でき、下書き精算書の表示金額にも反映される。
画面: /machine-settlements
候補になるのは、指定した所有者・期間に一致し、料金が揃っていて、他の精算書へ含まれていない精算対象利用だけである。
同じ機械利用はMachineSettlementLineの一意関係により複数の精算書へ重複計上できない。
確定時に、最新の利用日・機械名・課金単位・数量・単価・金額を精算明細へ固定する。同時に所有者、対象期間、精算対象、料金の完全性を再検証する。
支払済み後は以下を変更できない。
取消・差戻し状態は現行仕様にない。誤りに気づいた場合は、支払済みにする前に修正する。
精算書は下書き・支払済みのどちらでもプレビューできる。
印刷時はナビゲーション、一覧、操作ボタンを非表示にし、精算書本文だけを出力する。
| モデル | 役割 |
|---|---|
HarvestPlan |
任意の稲刈り計画 |
HarvestPlanEntry |
計画対象圃場と作物・品種スナップショット |
HarvestSession |
1回の乾燥機投入に対応する実績本体 |
HarvestSessionItem |
圃場、今回割合、今回面積、作物・品種スナップショット |
WorkRecord |
横断作業記録の索引 |
TaskExecutionLink |
計画と実績の多対1/1対多リンク |
| モデル | 役割 |
|---|---|
MachineOwner |
所有者マスター |
MachineCategory |
機械種別マスター |
Machine |
機械と標準料金 |
MachineUsage |
実績ごとの機械利用・料金の正本 |
MachineSettlement |
所有者・期間単位の精算書 |
MachineSettlementLine |
利用との一意関係と支払確定時スナップショット |
すべて認証が必要。
| メソッド | URL | 説明 |
|---|---|---|
| GET/POST | /api/plans/harvest-plans/ |
一覧・作成 |
| GET/PATCH/DELETE | /api/plans/harvest-plans/{id}/ |
詳細・更新・削除 |
| GET | /api/plans/harvest-plans/candidate_fields/?year={year} |
水稲圃場候補 |
| メソッド | URL | 説明 |
|---|---|---|
| GET/POST | /api/harvest-records/sessions/ |
一覧・作成 |
| GET/PATCH/DELETE | /api/harvest-records/sessions/{id}/ |
詳細・更新・削除 |
| GET | /api/harvest-records/candidates/?year={year} |
圃場候補と進捗 |
一覧はyear、date_from、date_to、plan、fieldで絞り込める。候補APIはinclude_completed=trueで完了圃場も返し、exclude_session={id}で編集対象を累計から除外する。
| メソッド | URL | 説明 |
|---|---|---|
| CRUD | /api/machines/owners/ |
所有者 |
| CRUD | /api/machines/categories/ |
機械種別 |
| CRUD | /api/machines/machines/ |
機械・標準料金 |
| CRUD | /api/machines/usages/ |
機械利用・実績固有料金 |
| メソッド | URL | 説明 |
|---|---|---|
| GET/POST | /api/machines/settlements/ |
一覧・下書き作成 |
| GET/PATCH/DELETE | /api/machines/settlements/{id}/ |
詳細・下書き更新・削除 |
| GET | /api/machines/settlements/candidates/ |
所有者・期間別の未精算候補 |
| POST | /api/machines/settlements/{id}/mark-paid/ |
支払済みにして確定 |
| シナリオ | 期待結果 |
|---|---|
| 計画なし実績 | 保存でき、計画リンクを作らない |
| 計画起点実績 | 計画リンクを作り、計画を一部完了にする |
| 部分収穫 | 今回割合から面積・残りを計算する |
| 累計100% | 完了扱いになる |
| 累計100%超過 | 保存を拒否する |
| 同日複数投入 | 別実績・別WorkRecordとして保存する |
| 過去日の後日入力 | 時系列累計を再計算する |
| 面積・回数・時間料金 | 単位別に数量と金額を計算する |
| 標準料金改定 | 登録済み利用の金額を変えない |
| 二重精算 | 同じ利用の再計上を拒否する |
| 支払確定 | 最新料金を固定し、以後の変更を拒否する |
| 印刷 | 操作部を除いた精算書本文を出力する |
| TODO・WorkRecord | 作成・更新・削除に追従する |