新機能実装準備
This commit is contained in:
1034
document/圃場管理/00_Gemini向け統合指示書.md
Normal file
1034
document/圃場管理/00_Gemini向け統合指示書.md
Normal file
File diff suppressed because it is too large
Load Diff
156
document/圃場管理/01_プロダクトビジョン.md
Normal file
156
document/圃場管理/01_プロダクトビジョン.md
Normal file
@@ -0,0 +1,156 @@
|
||||
# プロダクトビジョン
|
||||
|
||||
## 🎯 システムの目的
|
||||
|
||||
**「作付け計画を起点とした農業経営データの一元管理」**
|
||||
|
||||
このシステムは、年間の作付け計画を中心に、以下の3つの課題を解決する:
|
||||
|
||||
1. **申請書類の作成負担を減らす**
|
||||
- 水稲共済細目書(年2回: 2月・5月)
|
||||
- 中山間地域等直接支払交付金(年1回: 5月)
|
||||
- これらの申請に必要なデータを、作付け計画から自動生成
|
||||
|
||||
2. **実圃場と申請区画のずれを管理する**
|
||||
- 実際に作業する圃場(39筆)と、申請書上の区画(共済31区画、中山間71区画)が異なる
|
||||
- 実圃場と申請区画の紐づき関係(M:N)を明示的に管理
|
||||
- 紐付けは半自動化するが、手動修正も可能にする
|
||||
|
||||
3. **将来の拡張を見据えた設計**
|
||||
- Phase 2: 栽培履歴(播種日、農薬・肥料の散布記録)
|
||||
- Phase 3: 資材計画(種苗・肥料・農薬の必要量計算)
|
||||
- Phase 4: 収穫管理・販売管理との連携
|
||||
|
||||
---
|
||||
|
||||
## 👤 ユーザー像
|
||||
|
||||
**主要ユーザー(Sole User):**
|
||||
- 65歳の農家(元プログラマー、50歳まで従事)
|
||||
- ITリテラシー: 高い(自分でシステムを設計・実装できるレベル)
|
||||
- 経営規模: 39筆の圃場を管理
|
||||
|
||||
**利用デバイス:**
|
||||
- 🖥️ **PC**: 作付け計画の登録・編集、申請書のダウンロード(メイン操作)
|
||||
- 📱 **スマホ/タブレット**: 圃場での参照(品種確認、面積確認、将来的には栽培履歴)
|
||||
|
||||
**利用シーズン:**
|
||||
- **11月~3月**: 作付け計画の策定・修正(前年度コピー→微調整)
|
||||
- **2月**: 水稲共済細目書の提出(1回目)
|
||||
- **5月**: 水稲共済細目書(2回目)+中山間交付金の申請
|
||||
- **通年**: スマホでの現場参照
|
||||
|
||||
---
|
||||
|
||||
## 📊 現状の課題とシステムによる解決
|
||||
|
||||
| 課題 | 現状(Before) | システム導入後(After) |
|
||||
|------|---------------|----------------------|
|
||||
| 申請書作成 | 紙の台帳から手作業で転記・集計 | ボタン1つでPDFダウンロード→印刷 |
|
||||
| 圃場と申請区画の対応 | Excelで手動管理、照合が大変 | 自動紐付け+UI上で視覚的に確認・修正 |
|
||||
| 前年度データの再利用 | 前年のExcelをコピー→手作業で修正 | 年度コピー機能で一括複製 |
|
||||
| 作物の変更履歴 | 紙のメモ、記憶頼み | 過去年度の作付け計画を参照可能 |
|
||||
| 現場での情報確認 | 家に戻って紙の台帳を確認 | スマホでその場で品種・面積を確認 |
|
||||
|
||||
---
|
||||
|
||||
## ✅ 成功の定義(KPI)
|
||||
|
||||
**Phase 1(MVP)の成功指標:**
|
||||
|
||||
1. **申請書作成時間の短縮**
|
||||
- 水稲共済: 手作業2時間 → システム5分(96%削減)
|
||||
- 中山間: 手作業1時間 → システム3分(95%削減)
|
||||
|
||||
2. **データの正確性向上**
|
||||
- 転記ミスゼロ(自動集計のため)
|
||||
- 圃場と申請区画の対応ミスゼロ(UIで視覚的に確認)
|
||||
|
||||
3. **使いやすさ**
|
||||
- 作付け計画の登録・修正が、PCで10分以内に完了
|
||||
- スマホでの圃場情報参照が、3タップ以内で完了
|
||||
- PDFを印刷してそのまま提出できる品質(レイアウト調整不要)
|
||||
|
||||
**Phase 2以降の展望:**
|
||||
- 栽培履歴の記録により、GAP認証の取得が可能に
|
||||
- 資材計画の自動化により、発注漏れ・過剰在庫を削減
|
||||
- 収穫実績と計画の比較により、翌年の計画精度が向上
|
||||
|
||||
---
|
||||
|
||||
## 🔐 非機能要件
|
||||
|
||||
**シンプルさ最優先:**
|
||||
- シングルユーザー(マルチテナント不要)
|
||||
- 認証は最小限(メール+パスワード)
|
||||
- 複雑な権限管理は不要
|
||||
|
||||
**レスポンシブ対応:**
|
||||
- PC: 作付け計画の編集、申請書ダウンロード
|
||||
- スマホ/タブレット: 参照メイン(将来的には簡易な記録入力も)
|
||||
|
||||
**データの永続性:**
|
||||
- 最低5年分のデータを保持(補助金の監査対応)
|
||||
- バックアップ機能(CSV/Excelでのエクスポート)
|
||||
|
||||
**パフォーマンス:**
|
||||
- 圃場一覧の表示: 1秒以内
|
||||
- 申請書PDFの生成: 3秒以内
|
||||
- スマホでの圃場詳細表示: 2秒以内
|
||||
|
||||
---
|
||||
|
||||
## 🚫 やらないこと(Non-Goals)
|
||||
|
||||
**Phase 1では以下は含めない:**
|
||||
- マルチユーザー対応(将来的にも不要の可能性高)
|
||||
- 地図上での圃場描画・編集(GeoJSON等は後回し)
|
||||
- 自動ジオコーディング(住所→座標変換は手動でOK)
|
||||
- リアルタイム同期(オフライン対応は不要)
|
||||
- モバイルアプリ(PWAで十分)
|
||||
|
||||
---
|
||||
|
||||
## 🎨 デザイン原則
|
||||
|
||||
1. **シンプル・イズ・ベスト**
|
||||
- 1画面1機能を徹底
|
||||
- 複雑なUIコンポーネントは避ける(ドラッグ&ドロップ、カレンダーなど)
|
||||
|
||||
2. **情報の優先順位を明確に**
|
||||
- 最もよく使う情報を最も目立つ位置に
|
||||
- 圃場一覧では「名称」「作付け作物」「面積」を最優先表示
|
||||
|
||||
3. **エラーを起こしにくい設計**
|
||||
- 入力必須項目は最小限に
|
||||
- 選択式(ドロップダウン)を優先、自由入力は最小限
|
||||
|
||||
4. **スマホファースト(参照時)**
|
||||
- 文字サイズ: 最低16px
|
||||
- タップ領域: 最低44px×44px
|
||||
- 横スクロールは避ける
|
||||
|
||||
5. **既存データを尊重**
|
||||
- 役場データ(共済・中山間)の面積不整合は「そういうもの」として扱う
|
||||
- ユーザーの運用を変えさせない(紙の台帳と同じ感覚で使える)
|
||||
|
||||
---
|
||||
|
||||
## 📅 開発フェーズ
|
||||
|
||||
**Phase 1(MVP): 2025年2月まで**
|
||||
- 作付け計画の登録・編集
|
||||
- 申請書(水稲共済・中山間)のPDF出力
|
||||
- 圃場一覧の参照(PC/スマホ)
|
||||
|
||||
**Phase 2: 2025年3月~**
|
||||
- 栽培履歴の記録(播種日、農薬散布など)
|
||||
- 作業予定のカレンダー表示
|
||||
|
||||
**Phase 3: 2025年度中**
|
||||
- 資材計画(種苗・肥料・農薬の必要量計算)
|
||||
- 収穫記録
|
||||
|
||||
**Phase 4: 将来**
|
||||
- お米販売システムとの連携(API経由)
|
||||
- スマート農業機器との連携(センサーデータ取込)
|
||||
312
document/圃場管理/02_ユーザーストーリー.md
Normal file
312
document/圃場管理/02_ユーザーストーリー.md
Normal file
@@ -0,0 +1,312 @@
|
||||
# ユーザーストーリー
|
||||
|
||||
## 📖 ストーリー記法
|
||||
|
||||
```
|
||||
【優先度】タイトル
|
||||
As a ユーザー(役割)
|
||||
I want ◯◯したい
|
||||
So that △△できる(目的・価値)
|
||||
|
||||
【受け入れ基準】
|
||||
- [ ] 条件1
|
||||
- [ ] 条件2
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔴 Phase 1(MVP)- 必須機能
|
||||
|
||||
### P1-1: 作付け計画の一覧表示
|
||||
|
||||
**As a** 農家(システムの唯一のユーザー)
|
||||
**I want** 全ての圃場と、それぞれに何を作付けしたかを一覧で見たい
|
||||
**So that** 今年の作付け状況を俯瞰でき、未割当の圃場を見つけられる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 全39筆の圃場が一覧表示される
|
||||
- [ ] 各圃場に「名称」「面積」「今年の作付け作物」が表示される
|
||||
- [ ] 作付け未設定の圃場は警告色(赤/黄)でハイライトされる
|
||||
- [ ] 年度を切り替えられる(2024年度、2025年度など)
|
||||
- [ ] PC・スマホ両方で見やすいレイアウト
|
||||
|
||||
**【UIイメージ】**
|
||||
```
|
||||
┌────────────────────────────────┐
|
||||
│ 📅 2025年度 作付け計画 │
|
||||
├────────────────────────────────┤
|
||||
│ 🔍 検索: [___________] 🔽絞込 │
|
||||
├────────────────────────────────┤
|
||||
│┌────┬──────┬────┬──────────┐│
|
||||
││名称 │面積 │作付 │操作 ││
|
||||
│├────┼──────┼────┼──────────┤│
|
||||
││田A │1.2反 │米 │ [編集] ││
|
||||
││田B │0.5反 │❗未設定│ [割当] ││
|
||||
│└────┴──────┴────┴──────────┘│
|
||||
└────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### P1-2: 圃場への作物割当
|
||||
|
||||
**As a** 農家
|
||||
**I want** 各圃場に作物を割り当てたい
|
||||
**So that** 今年の作付け計画を記録できる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 圃場を選択して「作物」を設定できる
|
||||
- [ ] 作物は以下から選択:
|
||||
- 作付けしない: 休耕、緑肥、景観作物、その他野菜
|
||||
- 作付けする: 米(品種選択)、トウモロコシ、エンドウ、野菜
|
||||
- [ ] 品種も選択できる(例: 米 → にこまる、たちはるか、たちはるか特栽)
|
||||
- [ ] 複数の圃場を一括選択して、同じ作物を割り当てられる
|
||||
- [ ] 割当後、一覧画面に即座に反映される
|
||||
|
||||
**【作物マスタ】**
|
||||
```
|
||||
作物リスト:
|
||||
- 米
|
||||
- トウモロコシ
|
||||
- エンドウ
|
||||
- 野菜
|
||||
- その他(休耕・緑肥・景観作物など)
|
||||
|
||||
品種の登録方法:
|
||||
- すべての作物で統一
|
||||
- プリセット品種 + その場で追加
|
||||
- 例:
|
||||
┌─────────────────────────┐
|
||||
│ 品種: [にこまる ▼] │
|
||||
│ - にこまる │
|
||||
│ - たちはるか │
|
||||
│ - たちはるか(特栽)│
|
||||
│ │
|
||||
│ [+ 新しい品種を追加] │
|
||||
└─────────────────────────┘
|
||||
|
||||
作物「その他」の品種例:
|
||||
- 完全休耕
|
||||
- 緑肥(ヘアリーベッチ)
|
||||
- 緑肥(レンゲ)
|
||||
- 景観作物(コスモス)
|
||||
- 景観作物(ヒマワリ)
|
||||
|
||||
※「作付けしない」系も特別扱いせず、「その他」として統一
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### P1-3: 水稲共済細目書のPDF出力
|
||||
|
||||
**As a** 農家
|
||||
**I want** 水稲共済細目書に必要なデータをPDFでダウンロードしたい
|
||||
**So that** 2月と5月の申請時に、印刷してそのまま役場に提出できる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 年度を指定してPDFをダウンロードできる
|
||||
- [ ] PDFは表形式で、以下の列を含む:
|
||||
```
|
||||
耕地番号 | 分筆番号 | 地名地番 | 漢字地名 | 本地面積(m2) | 作付品目 | 品種 | 備考
|
||||
```
|
||||
- [ ] A4サイズ、縦向き、見やすいフォントサイズ(10pt以上)
|
||||
- [ ] ヘッダーに「水稲共済細目書(2025年度)」などのタイトル
|
||||
- [ ] ページ番号(複数ページになる場合)
|
||||
- [ ] 共済マスタ(31区画)をベースに、紐づく実圃場の作付け情報を集約
|
||||
- [ ] 複数の実圃場が1つの共済区画に紐づく場合、作物をカンマ区切りで列挙(例: "米,野菜")
|
||||
- [ ] 作付け未設定の共済区画も出力(空欄または「未設定」)
|
||||
- [ ] ダウンロード前にプレビュー表示できる
|
||||
|
||||
**【集計ロジック】**
|
||||
1. 共済マスタ(`水稲共済細目用.ods`の31区画)をループ
|
||||
2. 各共済区画に紐づく実圃場を取得(`吉田農地台帳`の`細目_耕地番号`/`細目_分筆番号`で結合)
|
||||
3. 紐づく実圃場の作付け情報を集約(作物名をユニーク化してカンマ区切り)
|
||||
4. HTMLテンプレートで表を生成 → PDF変換
|
||||
|
||||
---
|
||||
|
||||
### P1-4: 中山間交付金申請のPDF出力
|
||||
|
||||
**As a** 農家
|
||||
**I want** 中山間地域等直接支払交付金の申請に必要なデータをPDFでダウンロードしたい
|
||||
**So that** 5月の申請時に、印刷してそのまま役場に提出できる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 年度を指定してPDFをダウンロードできる
|
||||
- [ ] PDFは表形式で、以下の列を含む:
|
||||
```
|
||||
ID | 大字 | 字 | 地番 | 農地面積(m2) | 作付品目 | 品種 | 備考
|
||||
```
|
||||
- [ ] A4サイズ、縦向き、見やすいフォントサイズ(10pt以上)
|
||||
- [ ] ヘッダーに「中山間地域等直接支払交付金(2025年度)」などのタイトル
|
||||
- [ ] 中山間マスタ(71区画)をベースに、紐づく実圃場の作付け情報を集約
|
||||
- [ ] 作付け未設定の区画も出力(空欄または「未設定」)
|
||||
- [ ] ダウンロード前にプレビュー表示できる
|
||||
|
||||
**【集計ロジック】**
|
||||
- 水稲共済と同様、中山間マスタをループして実圃場を集約 → PDF生成
|
||||
|
||||
---
|
||||
|
||||
### P1-5: 前年度作付け計画のコピー
|
||||
|
||||
**As a** 農家
|
||||
**I want** 前年度の作付け計画を丸ごと新年度にコピーしたい
|
||||
**So that** 毎年ゼロから入力せずに、微調整だけで済む
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 「前年度をコピー」ボタンを押すと、前年度の作付け情報が新年度に複製される
|
||||
- [ ] 圃場マスタはコピーしない(マスタは共通)
|
||||
- [ ] コピー後、作物の種類を個別に変更できる
|
||||
- [ ] コピー前に確認ダイアログを表示(上書き防止)
|
||||
|
||||
---
|
||||
|
||||
### P1-6: スマホでの圃場情報参照
|
||||
|
||||
**As a** 農家
|
||||
**I want** 田んぼにいるときに、スマホでその圃場の情報を見たい
|
||||
**So that** 「この田んぼに植えた品種は何だっけ?」「面積はいくつだっけ?」をその場で確認できる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] スマホで圃場一覧を見られる
|
||||
- [ ] 検索・絞り込み機能で目的の圃場を素早く見つけられる
|
||||
- [ ] 圃場詳細画面で以下を確認:
|
||||
- 名称
|
||||
- 住所
|
||||
- 面積
|
||||
- 今年の作付け作物・品種
|
||||
- (将来)過去の作付け履歴
|
||||
- [ ] 文字サイズ: 16px以上
|
||||
- [ ] タップ領域: 44px×44px以上
|
||||
|
||||
---
|
||||
|
||||
## 🟡 Phase 2 - 栽培履歴機能
|
||||
|
||||
### P2-1: 播種日・定植日の記録
|
||||
|
||||
**As a** 農家
|
||||
**I want** 各圃場の播種日(種まき日)や定植日を記録したい
|
||||
**So that** スマホで「いつ植えたか」を確認でき、次の作業(追肥など)のタイミングを判断できる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 圃場ごとに「播種日」「定植日」を入力できる
|
||||
- [ ] カレンダーUIで日付を選択
|
||||
- [ ] スマホで過去の記録を閲覧できる
|
||||
|
||||
---
|
||||
|
||||
### P2-2: 農薬・肥料散布の記録
|
||||
|
||||
**As a** 農家
|
||||
**I want** 除草剤や肥料をまいた日を記録したい
|
||||
**So that** スマホで「いつ除草剤まいたか」を確認でき、次回の散布タイミングを判断できる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 圃場ごとに「作業日」「作業内容」「使用資材」を入力
|
||||
- [ ] 作業内容は選択式(播種、定植、除草剤散布、追肥、収穫など)
|
||||
- [ ] スマホで作業履歴を時系列で閲覧
|
||||
|
||||
---
|
||||
|
||||
### P2-3: 作業予定のカレンダー表示
|
||||
|
||||
**As a** 農家
|
||||
**I want** 今後の作業予定をカレンダーで見たい
|
||||
**So that** 「来週は何をする予定だっけ?」を俯瞰できる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 月間カレンダーで作業予定を表示
|
||||
- [ ] 各圃場の作業予定を色分け
|
||||
- [ ] 日付をクリックすると、その日の作業一覧を表示
|
||||
|
||||
---
|
||||
|
||||
## 🟢 Phase 3 - 資材計画機能
|
||||
|
||||
### P3-1: 種苗必要量の自動計算
|
||||
|
||||
**As a** 農家
|
||||
**I want** 今年の作付け計画から、必要な種苗の量を自動計算してほしい
|
||||
**So that** 種の発注漏れや過剰発注を防げる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 作物ごとに「面積あたり必要量」をマスタ登録
|
||||
- [ ] 作付け計画から、作物別の合計面積を算出
|
||||
- [ ] 必要量を一覧表示(例: にこまる 30kg、トウモロコシ 5袋)
|
||||
|
||||
---
|
||||
|
||||
### P3-2: 肥料・農薬の必要量計算
|
||||
|
||||
**As a** 農家
|
||||
**I want** 施肥計画や農薬散布計画を立てたい
|
||||
**So that** 資材の購入計画を立てられる
|
||||
|
||||
**【受け入れ基準】**
|
||||
- [ ] 作物ごとの施肥基準をマスタ登録
|
||||
- [ ] 作付け面積から必要な肥料量を計算
|
||||
- [ ] 農薬も同様に計算
|
||||
|
||||
---
|
||||
|
||||
## 🔵 Phase 4 - 収穫・販売管理
|
||||
|
||||
### P4-1: 収穫記録
|
||||
|
||||
**As a** 農家
|
||||
**I want** 収穫量を記録したい
|
||||
**So that** 計画と実績を比較し、来年の計画精度を上げられる
|
||||
|
||||
---
|
||||
|
||||
### P4-2: お米販売システムとの連携
|
||||
|
||||
**As a** 農家
|
||||
**I want** 作付け計画と収穫実績を、お米販売システムに自動連携したい
|
||||
**So that** 在庫管理や販売計画を効率化できる
|
||||
|
||||
---
|
||||
|
||||
## 📊 優先度マトリクス
|
||||
|
||||
| ストーリー | 優先度 | Phase | 工数(想定) |
|
||||
|-----------|--------|-------|------------|
|
||||
| P1-1: 作付け計画一覧 | 🔴 高 | 1 | 2日 |
|
||||
| P1-2: 作物割当 | 🔴 高 | 1 | 3日 |
|
||||
| P1-3: 水稲共済PDF出力 | 🔴 高 | 1 | 3日 |
|
||||
| P1-4: 中山間PDF出力 | 🔴 高 | 1 | 2日 |
|
||||
| P1-5: 前年度コピー | 🔴 高 | 1 | 1日 |
|
||||
| P1-6: スマホ参照 | 🔴 高 | 1 | 1日 |
|
||||
| P2-1: 播種日記録 | 🟡 中 | 2 | 2日 |
|
||||
| P2-2: 作業履歴 | 🟡 中 | 2 | 3日 |
|
||||
| P2-3: カレンダー | 🟡 中 | 2 | 3日 |
|
||||
| P3-1: 種苗計算 | 🟢 低 | 3 | 2日 |
|
||||
| P3-2: 資材計算 | 🟢 低 | 3 | 2日 |
|
||||
| P4-1: 収穫記録 | 🔵 将来 | 4 | TBD |
|
||||
| P4-2: 販売連携 | 🔵 将来 | 4 | TBD |
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Phase 1 完成の定義
|
||||
|
||||
以下が全て完了したら、Phase 1(MVP)は完成とする:
|
||||
|
||||
1. **機能要件**
|
||||
- [ ] 作付け計画を登録・編集できる
|
||||
- [ ] 水稲共済細目書のPDFを出力できる
|
||||
- [ ] 中山間交付金申請のPDFを出力できる
|
||||
- [ ] 前年度の作付けをコピーできる
|
||||
- [ ] スマホで圃場情報を参照できる
|
||||
|
||||
2. **品質要件**
|
||||
- [ ] PCで快適に操作できる(レスポンス1秒以内)
|
||||
- [ ] スマホで見やすい(文字サイズ16px以上)
|
||||
- [ ] 出力されるPDFが正確で見やすい(手動検証でOK)
|
||||
- [ ] PDFをA4用紙に印刷してそのまま提出できる
|
||||
|
||||
3. **ユーザビリティ**
|
||||
- [ ] 作付け計画の登録が10分以内で完了する
|
||||
- [ ] 申請書のダウンロードが3クリック以内で完了する
|
||||
- [ ] スマホでの圃場検索が3タップ以内で完了する
|
||||
453
document/圃場管理/03_データ仕様書.md
Normal file
453
document/圃場管理/03_データ仕様書.md
Normal file
@@ -0,0 +1,453 @@
|
||||
# データ仕様書
|
||||
|
||||
> **最終更新**: 2026-02-16
|
||||
> **変更履歴**: M:N関係に更新、中山間モデル全17列対応、面積単位統一、帳票仕様追加
|
||||
|
||||
## 📊 データ構造の全体像
|
||||
|
||||
このシステムで扱うデータは3種類:
|
||||
|
||||
1. **実圃場データ**(吉田農地台帳.ods)- 実際に作業する農地
|
||||
2. **共済マスタ**(水稲共済細目用.ods)- 申請書用の区画
|
||||
3. **中山間マスタ**(中山間.ods)- 申請書用の区画
|
||||
|
||||
**紐付けの関係:**
|
||||
- 実圃場 ↔ 共済区画: **M対N**(複数の実圃場が1つの共済区画に対応、また1つの実圃場が複数の共済区画に対応するケースもある)
|
||||
- 実圃場 ↔ 中山間区画: **M対N**(同上)
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
実圃場 }o--o{ 共済区画 : "紐づく(M:N)"
|
||||
実圃場 }o--o{ 中山間区画 : "紐づく(M:N)"
|
||||
実圃場 ||--o{ 作付け計画 : "持つ(1:N)"
|
||||
作付け計画 }o--|| 作物 : "参照"
|
||||
作付け計画 }o--o| 品種 : "参照(任意)"
|
||||
作物 ||--o{ 品種 : "持つ"
|
||||
|
||||
実圃場 {
|
||||
int id PK
|
||||
string 名称
|
||||
string 住所
|
||||
decimal 面積_反
|
||||
int 面積_m2
|
||||
string 地主
|
||||
string グループ名
|
||||
int 表示順
|
||||
string 細目_耕地番号 "共済紐付けキー(raw)"
|
||||
string 細目_分筆番号 "共済紐付けキー(raw)"
|
||||
string 中山間_ID "中山間紐付けキー(raw)"
|
||||
}
|
||||
|
||||
共済区画 {
|
||||
int id PK
|
||||
string 地名_地番
|
||||
int 耕地番号
|
||||
int 分筆番号
|
||||
decimal 本地面積_m2
|
||||
string 漢字地名
|
||||
}
|
||||
|
||||
中山間区画 {
|
||||
int id PK
|
||||
string 中山間ID
|
||||
string 中山間フラグ
|
||||
string 大字
|
||||
string 字
|
||||
string 地番
|
||||
string 枝番
|
||||
string 地目
|
||||
int 農地面積_m2
|
||||
int 植栽面積_m2
|
||||
string 作付け品目_元
|
||||
string 協定管理者
|
||||
string 所有者
|
||||
string 傾斜度
|
||||
int 基本金額
|
||||
decimal 超急傾斜加算額
|
||||
decimal スマート農業加算額
|
||||
int 交付金額
|
||||
}
|
||||
|
||||
作付け計画 {
|
||||
int id PK
|
||||
int 実圃場_id FK
|
||||
int 年度
|
||||
int 作物_id FK
|
||||
int 品種_id FK_nullable
|
||||
text 備考
|
||||
}
|
||||
|
||||
作物 {
|
||||
int id PK
|
||||
string 作物名
|
||||
}
|
||||
|
||||
品種 {
|
||||
int id PK
|
||||
int 作物_id FK
|
||||
string 品種名
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 1. 実圃場データ(吉田農地台帳.ods)
|
||||
|
||||
### ファイル情報
|
||||
- **行数:** 39行(39筆の圃場)
|
||||
- **列数:** 7列
|
||||
|
||||
### カラム定義
|
||||
|
||||
| カラム名 | データ型 | 必須 | 説明 | 例 |
|
||||
|---------|---------|-----|------|---|
|
||||
| 名称 | string | ○ | 圃場の名称(自由記述) | "口神 1反2畝" |
|
||||
| 住所 | string | ○ | 圃場の住所 | "口神ノ川198(笹ヶ谷374-1)" |
|
||||
| 面積(反) | float | ○ | 面積(単位: 反)※1反=1000m2=10a | 1.20 |
|
||||
| 地主 | string | ○ | 地主の氏名 | "山崎 出祥" |
|
||||
| 細目_耕地番号 | int | ○ | 共済マスタとの紐付けキー(1/2) | 2 |
|
||||
| 細目_分筆番号 | int | ○ | 共済マスタとの紐付けキー(2/2) | 1 |
|
||||
| 中山間_ID | int | △ | 中山間マスタとの紐付けキー | 50 |
|
||||
|
||||
### DBモデル(Field)
|
||||
|
||||
| フィールド名 | データ型 | 説明 |
|
||||
|-------------|---------|------|
|
||||
| name | CharField(100) | 圃場名 |
|
||||
| address | CharField(255) | 住所 |
|
||||
| area_tan | DecimalField(6,4) | 面積(反) |
|
||||
| area_m2 | IntegerField | 面積(m2)= area_tan × 1000 |
|
||||
| owner_name | CharField(100) | 所有者名 |
|
||||
| group_name | CharField(50), nullable | グループ名(エリアや用途による分類) |
|
||||
| display_order | IntegerField, default=0 | リスト表示時の順序 |
|
||||
| raw_kyosai_k_num | CharField(20), nullable | 細目_耕地番号(インポート元の値) |
|
||||
| raw_kyosai_s_num | CharField(20), nullable | 細目_分筆番号(インポート元の値) |
|
||||
| raw_chusankan_id | CharField(20), nullable | 中山間_ID(インポート元の値) |
|
||||
| kyosai_fields | ManyToManyField → OfficialKyosaiField | 関連共済マスタ(M:N) |
|
||||
| chusankan_fields | ManyToManyField → OfficialChusankanField | 関連中山間マスタ(M:N) |
|
||||
| location | PointField, nullable | 位置情報(Phase 1では未使用) |
|
||||
|
||||
### データサンプル
|
||||
```
|
||||
名称 住所 面積(反) 細目_耕地番号 細目_分筆番号 中山間_ID
|
||||
口神 1反2畝 口神ノ川198(笹ヶ谷374-1) 1.20 2 1 50
|
||||
口神 北東 口神ノ川198(笹ヶ谷374-1) 0.40 2 2 50
|
||||
口神 北中 口神ノ川198(笹ヶ谷374-1) 0.43 2 2 50
|
||||
```
|
||||
|
||||
### 特記事項
|
||||
- **中山間_IDは一部NULL**: 39筆中2筆が中山間の対象外(`NaN`)
|
||||
- **同じ共済区画に複数の実圃場**: 例えば共済キー「2-2」には3つの実圃場が紐づく
|
||||
- **1つの実圃場が複数の申請区画に紐づくケースもある**: M:N関係で対応
|
||||
- **面積単位**: DB内部では「反(DecimalField)」と「m2(IntegerField)」の両方を保持する(変換: 1反=1000m2)
|
||||
- **グループ機能**: group_name でエリア分け、display_order で表示順を制御
|
||||
|
||||
---
|
||||
|
||||
## 2. 共済マスタ(水稲共済細目用.ods)
|
||||
|
||||
### ファイル情報
|
||||
- **行数:** 31行(31区画)
|
||||
- **列数:** 5列
|
||||
|
||||
### カラム定義
|
||||
|
||||
| カラム名 | データ型 | 必須 | 説明 | 例 |
|
||||
|---------|---------|-----|------|---|
|
||||
| 地名 地番 | string | ○ | 地名と地番(スペース区切り) | "四万十町 ササガタニ 374-1" |
|
||||
| 耕地番号 | int | ○ | 共済区画の識別子(1/2) | 2 |
|
||||
| 分筆番号 | int | ○ | 共済区画の識別子(2/2) | 1 |
|
||||
| 本地面積 (m2) | float | ○ | 申請上の面積(単位: m2) | 25.4 |
|
||||
| 漢字地名 | string | ○ | 漢字表記の地名 | "四万十町 笹ヶ谷 374-1" |
|
||||
|
||||
### DBモデル(OfficialKyosaiField)
|
||||
|
||||
| フィールド名 | データ型 | 説明 |
|
||||
|-------------|---------|------|
|
||||
| k_num | IntegerField | 耕地番号 |
|
||||
| s_num | IntegerField | 分筆番号 |
|
||||
| address | CharField(200) | 地名地番 |
|
||||
| kanji_name | CharField(200) | 漢字地名 |
|
||||
| area | IntegerField | 本地面積(m2) |
|
||||
|
||||
**制約:** (k_num, s_num) のペアで一意(unique_together)
|
||||
|
||||
### データサンプル
|
||||
```
|
||||
地名 地番 耕地番号 分筆番号 本地面積(m2) 漢字地名
|
||||
四万十町 ササガタニ 374-1 2 1 25.4 四万十町 笹ヶ谷 374-1
|
||||
四万十町 ササガタニ 374-1 2 2 12.0 四万十町 笹ヶ谷 374-1
|
||||
```
|
||||
|
||||
### 特記事項
|
||||
- **面積の不整合は許容**: 役場データが古いため、実圃場の合計面積と一致しないことがある
|
||||
- 例: 共済キー「2-2」の面積は12.0m2だが、実圃場の合計は1.33反=1330m2
|
||||
- これは「そういうもの」として扱い、システム側で修正しない
|
||||
- **重複キーなし**: (耕地番号, 分筆番号)の組み合わせは一意
|
||||
|
||||
---
|
||||
|
||||
## 3. 中山間マスタ(中山間.ods)
|
||||
|
||||
### ファイル情報
|
||||
- **行数:** 71行(71区画)
|
||||
- **列数:** 17列(全列をDBに保存)
|
||||
|
||||
### カラム定義(全17列)
|
||||
|
||||
| カラム名 | データ型 | 必須 | 説明 | 例 |
|
||||
|---------|---------|-----|------|---|
|
||||
| ID | int | ○ | 中山間区画の識別子 | 1 |
|
||||
| 中山間 | string | ○ | 中山間フラグ | "〇" |
|
||||
| 大字 | string | ○ | 大字名 | "口神ノ川" |
|
||||
| 字 | string | ○ | 字名 | "壱町切" |
|
||||
| 地番 | string | ○ | 地番(数値でないケースあり:イ、ロ等) | "1694" |
|
||||
| 枝番 | string | △ | 枝番(-, 1, イ, ロ等) | "-" |
|
||||
| 地目 | string | ○ | 地目 | "田" |
|
||||
| 農地面積 | int | ○ | 農地面積(m2) | 2900 |
|
||||
| 植栽面積 | int | ○ | 植栽面積(m2) | 2748 |
|
||||
| 作付け品目 | string | △ | 役場が記入した作付け品目 | "ニラ" |
|
||||
| 協定管理者 | string | ○ | 協定管理者名 | "神山倫子" |
|
||||
| 所有者 | string | △ | 所有者名(NULLあり) | "谷脇史男" |
|
||||
| 傾斜度 | string | ○ | 傾斜度 | "1/29" |
|
||||
| 基本金額 | int | ○ | 基本金額(円) | 23200 |
|
||||
| 超急傾斜加算額 | decimal | △ | 超急傾斜加算額(円) | 0.0 |
|
||||
| スマート農業加算額 | decimal | △ | スマート農業加算額(円) | 14500 |
|
||||
| 交付金額 | int | ○ | 交付金額合計(円) | 37700 |
|
||||
|
||||
### DBモデル(OfficialChusankanField)
|
||||
|
||||
| フィールド名 | データ型 | 説明 |
|
||||
|-------------|---------|------|
|
||||
| c_id | CharField(20), unique | 中山間ID |
|
||||
| chusankan_flag | CharField(10), nullable | 中山間フラグ(〇等) |
|
||||
| oaza | CharField(100) | 大字 |
|
||||
| aza | CharField(100) | 字 |
|
||||
| chiban | CharField(50) | 地番(文字列:イ、ロ等があるため) |
|
||||
| branch_num | CharField(20), nullable | 枝番(-, 1, イ, ロ等) |
|
||||
| land_type | CharField(20), nullable | 地目(田, 畑等) |
|
||||
| area | IntegerField | 農地面積(m2) |
|
||||
| planting_area | IntegerField, nullable | 植栽面積(m2) |
|
||||
| original_crop | CharField(100), nullable | 作付け品目(役場記入の元データ) |
|
||||
| manager | CharField(100), nullable | 協定管理者 |
|
||||
| owner | CharField(100), nullable | 所有者 |
|
||||
| slope | CharField(20), nullable | 傾斜度 |
|
||||
| base_amount | IntegerField, nullable | 基本金額(円) |
|
||||
| steep_slope_addition | DecimalField, nullable | 超急傾斜加算額(円) |
|
||||
| smart_agri_addition | DecimalField, nullable | スマート農業加算額(円) |
|
||||
| payment_amount | IntegerField, nullable | 交付金額(円) |
|
||||
|
||||
### データサンプル
|
||||
```
|
||||
ID 中山間 大字 字 地番 枝番 地目 農地面積 植栽面積 作付け品目 協定管理者 所有者 傾斜度 基本金額 交付金額
|
||||
1 〇 口神ノ川 壱町切 1694 - 田 2900 2748 ニラ 神山倫子 1/29 23200 37700
|
||||
2 〇 口神ノ川 大窪 490 1 田 652 490 野菜 谷脇誠一 谷脇史男 1/20 15204 18824
|
||||
```
|
||||
|
||||
### 特記事項
|
||||
- **全17列をDBに保存**: 将来どの列が必要になるかわからないため全保存
|
||||
- **地番・枝番は文字列型**: 「イ」「ロ」などの非数値データが入る
|
||||
- **作付け品目は参考情報**: 役場が記入した値。システムの作付け計画(Plan)とは別
|
||||
- **面積の不整合は許容**: 共済マスタと同様、実圃場との差異は受け入れる
|
||||
|
||||
---
|
||||
|
||||
## 4. 作付け計画データ(システム内部)
|
||||
|
||||
### DBモデル(Plan)
|
||||
|
||||
| フィールド名 | データ型 | 必須 | 説明 |
|
||||
|-------------|---------|-----|------|
|
||||
| id | int (自動) | ○ | 主キー |
|
||||
| field | FK → Field | ○ | 実圃場(外部キー) |
|
||||
| year | IntegerField | ○ | 年度(2025など) |
|
||||
| crop | FK → Crop, nullable | △ | 作物(外部キー) |
|
||||
| variety | FK → Variety, nullable | △ | 品種(外部キー、NULLあり) |
|
||||
| notes | TextField, nullable | △ | 備考 |
|
||||
|
||||
### 制約
|
||||
- **ユニーク制約**: (field, year) - 1つの圃場に対して1年度につき1つの作付け計画のみ
|
||||
- Phase 2で二毛作対応する場合は、この制約を見直す
|
||||
|
||||
### 備考
|
||||
- planting_date(播種日)、harvest_date(収穫日)は Phase 2 で追加予定
|
||||
- crop, variety は外部キー(文字列ではなくリレーション)
|
||||
|
||||
---
|
||||
|
||||
## 5. 作物マスタ
|
||||
|
||||
### DBモデル(Crop)
|
||||
|
||||
| フィールド名 | データ型 | 説明 |
|
||||
|-------------|---------|------|
|
||||
| id | int (自動) | 主キー |
|
||||
| name | CharField(50), unique | 作物名 |
|
||||
|
||||
### DBモデル(Variety)
|
||||
|
||||
| フィールド名 | データ型 | 説明 |
|
||||
|-------------|---------|------|
|
||||
| id | int (自動) | 主キー |
|
||||
| crop | FK → Crop | 所属する作物 |
|
||||
| name | CharField(100) | 品種名 |
|
||||
|
||||
**制約:** (crop, name) のペアで一意
|
||||
|
||||
### 作物・品種の管理方針
|
||||
- 初期データは投入しない(管理画面またはUIから登録)
|
||||
- すべての作物で品種選択UIは統一
|
||||
- 「作付けしない」系も特別扱いしない(「その他」作物の品種として扱う)
|
||||
- 品種の追加・削除は作付け計画画面から可能
|
||||
|
||||
---
|
||||
|
||||
## 6. データインポート仕様
|
||||
|
||||
### 初期セットアップ時
|
||||
|
||||
1. **共済マスタのインポート**
|
||||
- `水稲共済細目用.ods` を読み込み
|
||||
- `OfficialKyosaiField` テーブルに保存
|
||||
|
||||
2. **中山間マスタのインポート**
|
||||
- `中山間.ods` を読み込み
|
||||
- `OfficialChusankanField` テーブルに全17列を保存
|
||||
|
||||
3. **実圃場データのインポート**
|
||||
- `吉田農地台帳.ods` を読み込み
|
||||
- `Field` テーブルに保存
|
||||
- 同時に共済・中山間マスタとの紐付けを確立(ManyToMany):
|
||||
- `細目_耕地番号` + `細目_分筆番号` → `OfficialKyosaiField` を検索して M:N 関連に追加
|
||||
- `中山間_ID` → `OfficialChusankanField` を検索して M:N 関連に追加
|
||||
|
||||
### 紐付けロジック
|
||||
|
||||
```python
|
||||
# 共済マスタとの紐付け(M:N)
|
||||
kyosai_record = OfficialKyosaiField.objects.get(
|
||||
k_num=row['細目_耕地番号'],
|
||||
s_num=row['細目_分筆番号']
|
||||
)
|
||||
field.kyosai_fields.add(kyosai_record)
|
||||
|
||||
# 中山間マスタとの紐付け(M:N)
|
||||
if pd.notna(row['中山間_ID']):
|
||||
chusankan_record = OfficialChusankanField.objects.get(
|
||||
c_id=str(int(row['中山間_ID']))
|
||||
)
|
||||
field.chusankan_fields.add(chusankan_record)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 申請書PDF出力ロジック
|
||||
|
||||
### 水稲共済細目書
|
||||
|
||||
**出力形式:**
|
||||
- A4サイズ、縦向き
|
||||
- ヘッダー: 「水稲共済細目書(YYYY年度)」
|
||||
- 表形式(罫線あり)、1行1区画(31行)
|
||||
- フォントサイズ: 10pt
|
||||
- ページ番号あり
|
||||
|
||||
**表の列:**
|
||||
|
||||
| 列名 | データ元 | 備考 |
|
||||
|------|---------|------|
|
||||
| 漢字地名 | OfficialKyosaiField.kanji_name | 例: 四万十町 笹ヶ谷 374-1 |
|
||||
| 耕地-分筆 | k_num + "-" + s_num | 例: 2-1 |
|
||||
| 本地面積 (m2) | OfficialKyosaiField.area | |
|
||||
| 作付品目 | Plan.crop.name | システムの作付け計画から |
|
||||
| 品種 | Plan.variety.name | 〃 |
|
||||
| 圃場名称 | Field.name | 吉田農地台帳の名称 |
|
||||
|
||||
**集計ロジック:**
|
||||
1. 共済マスタ(31区画)をループ
|
||||
2. 各共済区画に紐づく実圃場を取得(M:N関係)
|
||||
3. 紐づく実圃場の作付け情報を集約(作物名・品種名・圃場名をカンマ区切り)
|
||||
4. HTMLテンプレートで表を生成 → WeasyPrint で PDF変換
|
||||
5. 複数の実圃場が紐づく場合 → 作物・品種・圃場名をカンマ区切りで列挙
|
||||
6. 作付け未設定の場合 → 「未設定」と表示
|
||||
|
||||
### 中山間交付金申請
|
||||
|
||||
**出力形式:**
|
||||
- A4サイズ、横向き(列が多いため)
|
||||
- ヘッダー: 「中山間地域等直接支払交付金(YYYY年度)」
|
||||
- 表形式(罫線あり)、1行1区画(71行)
|
||||
- ページ番号あり
|
||||
|
||||
**表の列:**
|
||||
|
||||
| 列名 | データ元 | 備考 |
|
||||
|------|---------|------|
|
||||
| 所在地 | 大字+字+地番+枝番 連結 | 例: 口神ノ川 壱町切 1694 |
|
||||
| 植栽面積 | OfficialChusankanField.planting_area | m2 |
|
||||
| 作付け品目(元) | OfficialChusankanField.original_crop | 役場記入の値 |
|
||||
| 協定管理者 | OfficialChusankanField.manager | |
|
||||
| 所有者 | OfficialChusankanField.owner | |
|
||||
| 作物 | Plan.crop.name | システムの作付け計画から |
|
||||
| 品種 | Plan.variety.name | 〃 |
|
||||
| 圃場名称 | Field.name | 吉田農地台帳の名称 |
|
||||
|
||||
**集計ロジック:**
|
||||
- 水稲共済と同様、中山間マスタをループして実圃場を集約 → HTMLテンプレート → PDF
|
||||
|
||||
---
|
||||
|
||||
## 8. データ移行・メンテナンス
|
||||
|
||||
### 年度更新
|
||||
- **圃場マスタ**: 年度をまたいで共通(更新不要)
|
||||
- **作付け計画**: 年度ごとに独立(前年度コピー機能で複製)
|
||||
|
||||
### マスタデータの更新
|
||||
- **共済・中山間マスタ**: 役場から新しいファイルをもらった場合、再インポート
|
||||
- 既存データは上書きせず、差分を確認してマージ
|
||||
- または、全削除→再インポートの2段階処理
|
||||
|
||||
### バックアップ
|
||||
- 全テーブルをCSV/Excelでエクスポート可能にする(サーバー移行時にも利用)
|
||||
- 最低5年分のデータを保持(補助金監査対応)
|
||||
|
||||
---
|
||||
|
||||
## 9. 面積単位の扱い
|
||||
|
||||
システム内部では以下のように統一:
|
||||
|
||||
| 用途 | 単位 | DB型 | 変換式 |
|
||||
|-----|------|------|--------|
|
||||
| 実圃場の面積(DB保存) | 反 + m2 | DecimalField + IntegerField | 1反 = 1000m2 |
|
||||
| 共済マスタの面積(DB保存) | m2 | IntegerField | - |
|
||||
| 中山間マスタの面積(DB保存) | m2 | IntegerField | - |
|
||||
| 画面表示 | 反 | - | area_m2 / 1000 |
|
||||
|
||||
**実装方針:**
|
||||
- 実圃場: `area_tan`(DecimalField)と `area_m2`(IntegerField)の両方を保持
|
||||
- 共済・中山間マスタ: `area` は m2(IntegerField)で保存
|
||||
- 表示時は「反」に統一(1反 = 10a = 1000m2)
|
||||
- 入力時は「反」で受け付け、内部で `m2` に変換
|
||||
|
||||
---
|
||||
|
||||
## 10. データ整合性チェック
|
||||
|
||||
### チェック項目
|
||||
|
||||
1. **紐付けの存在確認**
|
||||
- 実圃場の `細目_耕地番号`/`細目_分筆番号` が共済マスタに存在するか
|
||||
- 実圃場の `中山間_ID` が中山間マスタに存在するか
|
||||
|
||||
2. **面積の整合性(参考情報)**
|
||||
- 1つの共済区画に紐づく実圃場の合計面積と、共済マスタの面積を比較
|
||||
- ⚠️ 不整合があっても警告のみ(修正はしない)
|
||||
|
||||
3. **作付け未設定の検出**
|
||||
- 指定年度で作付け計画が未設定の圃場をリストアップ
|
||||
|
||||
### 実装
|
||||
- インポート時にバリデーションを実行
|
||||
- 管理画面で「データ整合性レポート」を表示
|
||||
815
document/圃場管理/04_画面設計書.md
Normal file
815
document/圃場管理/04_画面設計書.md
Normal file
@@ -0,0 +1,815 @@
|
||||
# 画面設計書
|
||||
|
||||
> **最終更新**: 2026-02-16
|
||||
> **変更履歴**: 実装済み機能との差異を解消(B-1〜B-5, C-6, E-1 反映)
|
||||
|
||||
## 🎨 デザイン原則(再掲)
|
||||
|
||||
1. **シンプル・イズ・ベスト**: 1画面1機能
|
||||
2. **情報の優先順位**: 最重要情報を最も目立つ位置に
|
||||
3. **エラーを起こしにくい**: 選択式優先、自由入力最小限
|
||||
4. **スマホファースト(参照時)**: 文字16px以上、タップ領域44px以上
|
||||
5. **既存データを尊重**: 紙の台帳と同じ感覚で使える
|
||||
|
||||
---
|
||||
|
||||
## 🧭 共通ナビゲーション(Navbar)
|
||||
|
||||
### PC レイアウト
|
||||
|
||||
上部に水平ナビゲーションバーを常時表示。ブランド名「KeinaSystem」と主要画面へのリンクを配置。
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────┐
|
||||
│ 🌾 KeinaSystem [作付け計画] [圃場管理] [帳票出力] [データ取込] [ログアウト] │
|
||||
└──────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### ナビゲーション項目
|
||||
|
||||
| アイコン | ラベル | パス | 説明 |
|
||||
|---------|--------|------|------|
|
||||
| 🌾 (Wheat) | 作付け計画 | `/allocation` | 作付け計画編集画面(メイン) |
|
||||
| 📍 (MapPin) | 圃場管理 | `/fields` | 圃場一覧・編集 |
|
||||
| 📄 (FileText) | 帳票出力 | `/reports` | 申請書PDFダウンロード |
|
||||
| ⬆️ (Upload) | データ取込 | `/import` | マスタインポート |
|
||||
|
||||
### 仕様
|
||||
- アクティブなページのリンクは緑背景でハイライト
|
||||
- ログアウトボタンは右端に配置
|
||||
- スマホではレスポンシブにタブバーまたはハンバーガーメニューに切り替え
|
||||
|
||||
---
|
||||
|
||||
## 📱 画面一覧
|
||||
|
||||
### Phase 1(MVP)
|
||||
1. **ログイン画面** (`/login`)
|
||||
2. **ダッシュボード** (`/`) — 将来拡張用、Phase 1では簡易版
|
||||
3. **作付け計画一覧・編集** (`/allocation`) — メイン画面、インライン編集方式
|
||||
4. **圃場管理一覧** (`/fields`) — 圃場の一覧表示・グループ管理・表示順管理
|
||||
5. **圃場詳細・編集** (`/fields/[id]`) — 個別圃場の情報編集
|
||||
6. **圃場新規作成** (`/fields/new`) — 手動での圃場登録
|
||||
7. **申請書ダウンロード** (`/reports`) — PDFダウンロード
|
||||
8. **データ取込** (`/import`) — インポート
|
||||
|
||||
### Phase 2以降
|
||||
9. 栽培履歴入力
|
||||
10. 作業カレンダー
|
||||
11. 資材計画
|
||||
|
||||
---
|
||||
|
||||
## 画面1: ログイン画面
|
||||
|
||||
### 目的
|
||||
シンプルな認証(ユーザー名+パスワード)
|
||||
|
||||
### レイアウト(PC/スマホ共通)
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────┐
|
||||
│ │
|
||||
│ 🌾 Keina System │
|
||||
│ 作付け計画管理システム │
|
||||
│ │
|
||||
│ ┌───────────────────────┐ │
|
||||
│ │ ユーザー名 │ │
|
||||
│ │ [___________________] │ │
|
||||
│ └───────────────────────┘ │
|
||||
│ │
|
||||
│ ┌───────────────────────┐ │
|
||||
│ │ パスワード │ │
|
||||
│ │ [___________________] │ │
|
||||
│ └───────────────────────┘ │
|
||||
│ │
|
||||
│ [ ログイン ] │
|
||||
│ │
|
||||
└─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 機能要件
|
||||
- [x] ユーザー名とパスワードで認証(JWT)
|
||||
- [x] ログイン成功 → 作付け計画画面へ遷移
|
||||
- [x] ログイン失敗 → エラーメッセージ表示
|
||||
- [ ] 「パスワードを忘れた」リンク(Phase 2)
|
||||
|
||||
---
|
||||
|
||||
## 画面2: ダッシュボード
|
||||
|
||||
### 目的
|
||||
システムの入り口(Phase 1では簡易版、将来拡張)
|
||||
|
||||
### 現在の実装
|
||||
- `/` アクセス時、トークンの有無で `/allocation`(ログイン済み)か `/login`(未ログイン)にリダイレクト
|
||||
- ダッシュボード画面自体は未実装
|
||||
|
||||
### レイアウト(将来実装予定、PC)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────┐
|
||||
│ 🌾 KeinaSystem [作付け計画] [圃場管理] ... │
|
||||
├────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📊 概要 │
|
||||
│ ┌────────────────┬────────────────┬─────────────┐│
|
||||
│ │ 全圃場数 │ 作付け済み │ 未割当 ││
|
||||
│ │ 39筆 │ 35筆 │ 4筆 ❗ ││
|
||||
│ └────────────────┴────────────────┴─────────────┘│
|
||||
│ │
|
||||
│ 🔗 クイックアクセス │
|
||||
│ ┌──────────────────────────────────────────────┐│
|
||||
│ │ [📝 作付け計画を編集] [📄 申請書ダウンロード] ││
|
||||
│ └──────────────────────────────────────────────┘│
|
||||
│ │
|
||||
│ 📌 最近の変更 │
|
||||
│ • 2025/02/10: 田A に「米(にこまる)」を割当 │
|
||||
│ • 2025/02/09: 田B を「休耕」に変更 │
|
||||
│ │
|
||||
└────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 機能要件(将来実装予定)
|
||||
- [ ] 年度選択(ドロップダウン)
|
||||
- [ ] 作付け状況のサマリー表示
|
||||
- [ ] 「作付け計画を編集」→ 画面3へ
|
||||
- [ ] 「申請書ダウンロード」→ 画面7へ
|
||||
- [ ] 将来の機能追加時にボタンを追加していく想定
|
||||
|
||||
---
|
||||
|
||||
## 画面3: 作付け計画一覧・編集(メイン画面)
|
||||
|
||||
### 目的
|
||||
全圃場の作付け状況を一覧で確認し、**インライン**で直接編集
|
||||
|
||||
### 編集方式
|
||||
**インライン編集**を採用(モーダルではない)。テーブル行内のドロップダウンで作物・品種を選択し、変更は即座にAPIに保存される。
|
||||
|
||||
### レイアウト(PC)
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ 🌾 KeinaSystem [作付け計画] [圃場管理] [帳票出力] [データ取込] │
|
||||
├──────┬───────────────────────────────────────────────────────────┤
|
||||
│ │ │
|
||||
│ 📊 │ 年度: [2025 ▼] 並び順: [カスタム順 ▼] │
|
||||
│ 集計 │ │
|
||||
│ │ ──────────────────────────────────────────────────────── │
|
||||
│ ──── │ グループ 圃場名 面積 作物 品種 備考 順序│
|
||||
│ 合計 │ ──────────────────────────────────────────────────────── │
|
||||
│20.0反│ [口神_▼] おまけ 0.2反 [米 ▼] [にこまる▼] [___] ↑↓│
|
||||
│ │ [口神_▼] 口神1反 1.2反 [米 ▼] [にこまる▼] [___] ↑↓│
|
||||
│ 米 │ [口神_▼] 口神北東 0.4反 [野菜 ▼] [トマト▼] [___] ↑↓│
|
||||
│15.3反│ [南__▼] 口神北中 0.4反 [-- ▼] [---------] [___] ↑↓│
|
||||
│┣にこ │ [南__▼] 口神北西 0.5反 [その他 ▼] [完全休耕▼] [___] ↑↓│
|
||||
││10.2反│ │
|
||||
│┗たち │ ... (39行) │
|
||||
││5.1反│ │
|
||||
│ │ │
|
||||
│未設定│ │
|
||||
│2.0反❗ │
|
||||
└──────┴───────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**サイドバー(集計パネル、開閉可能):**
|
||||
```
|
||||
┌──────────────┐
|
||||
│ 集計 [×] │← 閉じるボタン
|
||||
├──────────────┤
|
||||
│ 合計 20.0反 │
|
||||
│ │
|
||||
│ 米 │
|
||||
│ 15.3反 │
|
||||
│ ├にこまる │
|
||||
│ │ 10.2反 │
|
||||
│ └たちはるか │
|
||||
│ 5.1反 │
|
||||
│ │
|
||||
│ 野菜 │
|
||||
│ 3.2反 │
|
||||
│ │
|
||||
│ その他 │
|
||||
│ 1.5反 │
|
||||
│ │
|
||||
│ ❗未設定 │
|
||||
│ 2.0反 │
|
||||
└──────────────┘
|
||||
```
|
||||
|
||||
### レイアウト(スマホ)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────┐
|
||||
│ 🌾 作付け計画 [2025▼] [集計] ☰ │
|
||||
├────────────────────────────────────┤
|
||||
│ 並び順: [カスタム順 ▼] │
|
||||
├────────────────────────────────────┤
|
||||
│ ┌────────────────────────────────┐│
|
||||
│ │ おまけ 0.2反 ││
|
||||
│ │ グループ: [口神___▼] ││
|
||||
│ │ 作物: [米 ▼] 品種: [にこまる▼]││
|
||||
│ │ 備考: [___________________] ││
|
||||
│ └────────────────────────────────┘│
|
||||
│ │
|
||||
│ ┌────────────────────────────────┐│
|
||||
│ │ 口神 北中 0.4反 ││
|
||||
│ │ グループ: [南___▼] ││
|
||||
│ │ 作物: [-- ▼] 品種: [------] ││
|
||||
│ │ 備考: [___________________] ││
|
||||
│ └────────────────────────────────┘│
|
||||
│ │
|
||||
│ ... (39圃場) │
|
||||
└────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**スマホ: 集計モーダル**([集計]ボタンで表示)
|
||||
```
|
||||
┌────────────────────────────────┐
|
||||
│ 集計 [×] │
|
||||
├────────────────────────────────┤
|
||||
│ 合計面積: 20.0反 │
|
||||
│ │
|
||||
│ 米: 15.3反 │
|
||||
│ ├ にこまる: 10.2反 │
|
||||
│ └ たちはるか: 5.1反 │
|
||||
│ │
|
||||
│ 野菜: 3.2反 │
|
||||
│ │
|
||||
│ その他: 1.5反 │
|
||||
│ │
|
||||
│ ❗未設定: 2.0反 │
|
||||
│ │
|
||||
│ [閉じる] │
|
||||
└────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 機能要件
|
||||
- [x] 全圃場を一覧表示(39行)
|
||||
- [x] 各行に以下を表示:
|
||||
- グループ名(インライン編集可能、datalist補完付き)
|
||||
- 圃場名
|
||||
- 面積(反)
|
||||
- 作物(ドロップダウン、インライン選択)
|
||||
- 品種(ドロップダウン、作物選択後に有効化)
|
||||
- 備考(テキスト入力)
|
||||
- 表示順変更ボタン(↑↓、カスタム順モード時のみ)
|
||||
- [x] 年度切り替え(ドロップダウン)
|
||||
- [x] 並び替え機能:
|
||||
- カスタム順(display_order)
|
||||
- グループ順(group_name)
|
||||
- 作付け順(crop別)
|
||||
- [x] **インライン即時保存**: 作物・品種・備考を変更すると即座にAPIに保存(画面遷移なし、スクロール位置維持)
|
||||
- [x] **集計サイドバー(PC)**:
|
||||
- 閉じるボタンで非表示可能
|
||||
- 作物別の合計面積
|
||||
- 品種別の内訳(ツリー表示、展開可能)
|
||||
- 未設定の面積を警告表示
|
||||
- 作付け変更時にリアルタイム更新
|
||||
- [x] **集計モーダル(スマホ)**:
|
||||
- [集計]ボタンでサイドパネル表示
|
||||
- PC版と同じ内容
|
||||
- [ ] 検索機能(圃場名・住所で部分一致検索)— **未実装**
|
||||
- [ ] フィルタ機能(作物で絞り込み、未割当のみトグル)— **未実装**
|
||||
- [ ] チェックボックスによる一括操作 — **未実装**
|
||||
- [ ] [前年度をコピー]ボタン — **Backend APIあり、Frontendボタン未実装**
|
||||
|
||||
### デザインノート
|
||||
- **未割当の強調**: 作物未設定の行は目立つ表示
|
||||
- **即時保存**: ユーザーが選択を変更するたびにバックグラウンドで保存(ローディングスピナーなし)
|
||||
- **スクロール維持**: 保存時に画面がリセットされない
|
||||
- **サイドバーの幅**: 約200px(固定)
|
||||
|
||||
---
|
||||
|
||||
## 画面4: 圃場管理一覧
|
||||
|
||||
### 目的
|
||||
圃場マスタの管理(一覧表示、グループ編集、表示順変更、削除)。
|
||||
**対応表モード**で共済・中山間マスタとの紐づけを一覧確認・直接編集。
|
||||
|
||||
### レイアウト(PC)— 通常モード
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────┐
|
||||
│ 🌾 KeinaSystem [作付け計画] [圃場管理] [帳票出力] [データ取込] │
|
||||
├──────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 並び順: [表示順 ▼] 表示: [通常] [対応表] [+ 新規作成] │
|
||||
│ │
|
||||
│ ───────────────────────────────────────────────────────────── │
|
||||
│ 順序 圃場名 グループ 住所 面積 所有者 共済 中山間 操作│
|
||||
│ ───────────────────────────────────────────────────────────── │
|
||||
│ 1 おまけ [口神__▼] 口神ノ川... 0.2反 吉田 1件 - ✏️🗑│
|
||||
│ 2 口神1反 [口神__▼] 口神ノ川... 1.2反 吉田 1件 1件 ✏️🗑│
|
||||
│ │
|
||||
│ ... (39行) │
|
||||
└──────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### レイアウト(PC)— 対応表モード
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────────────────────────────────┐
|
||||
│ 🌾 KeinaSystem [作付け計画] [圃場管理] [帳票出力] [データ取込] │
|
||||
├──────────────────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 並び順: [表示順 ▼] 表示: [通常] [対応表] [+ 新規作成] │
|
||||
│ │
|
||||
│ ───────────────────────────────────────────────────────────────────── │
|
||||
│ 圃場名 面積 共済(漢字地名) 中山間(所在地) │
|
||||
│ ───────────────────────────────────────────────────────────────────── │
|
||||
│ おまけ 0.2反 1-1 四万十町 足川 351 [×] - │
|
||||
│ [+] [+]│
|
||||
│ 口神 1反2畝 1.2反 2-2 四万十町 笹ヶ谷 374-1 [×] ID50 笹ヶ谷374 [×]│
|
||||
│ [+] [+]│
|
||||
│ ソーラーの上 0.8反 21-1 四万十町 大窪 592-1 [×] ID62 大窪592 [×]│
|
||||
│ ID61 大窪592 [×]│
|
||||
│ [+] [+]│
|
||||
│ ───────────────────────────────────────────────────────────────────── │
|
||||
│ ... (39行) │
|
||||
└──────────────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**対応表モードの特徴:**
|
||||
- 各行に圃場名・面積・共済の漢字地名・中山間の所在地を横並び表示
|
||||
- 複数紐づけがある場合は同一セル内で改行表示
|
||||
- 各紐づけレコードの横に [×] ボタンで紐づけ解除
|
||||
- 各セルの末尾に [+] ボタンで紐づけ追加(モーダル表示)
|
||||
- 通常モードの順序・グループ・削除操作は非表示(対応表モードは紐づけ管理に集中)
|
||||
|
||||
### 機能要件
|
||||
- [x] 全圃場を一覧表示(テーブル形式)
|
||||
- [x] 表示列: 順序番号、圃場名、グループ名、住所、面積(反)、面積(m2)、所有者、操作
|
||||
- [x] **グループ名のインライン編集**: datalist による候補表示付きテキスト入力
|
||||
- [x] **表示順変更**: ↑↓ ボタンで順序入れ替え(表示順モード時)
|
||||
- [x] 並び順の切り替え(グループ順、表示順、登録順)
|
||||
- [x] [新規作成]ボタン → 画面6へ遷移
|
||||
- [x] [✏️ 編集]ボタン → 画面5(圃場詳細)へ遷移
|
||||
- [x] [🗑 削除]ボタン → 確認ダイアログ後に削除
|
||||
- [x] **紐づけ状況列(E-2)** — 通常モードに「共済」「中山間」件数列を表示
|
||||
- [ ] **対応表モード(E-2)** — **未実装**
|
||||
- [ ] 表示切替トグル: [通常] [対応表] ボタン
|
||||
- [ ] 対応表モードの表示列: 圃場名、面積(反)、共済(漢字地名)、中山間(所在地)
|
||||
- [ ] 共済列: 耕地-分筆 + 漢字地名を表示。複数あれば改行
|
||||
- [ ] 中山間列: ID + 大字+字+地番を表示。複数あれば改行
|
||||
- [ ] 各紐づけレコードに [×] ボタン(確認ダイアログ付き紐づけ解除)
|
||||
- [ ] 各セルに [+] ボタン(追加モーダル表示 → 画面5と同じLinkModal)
|
||||
- [ ] 紐づけなしの場合は「-」をグレー表示
|
||||
|
||||
---
|
||||
|
||||
## 画面5: 圃場詳細・編集
|
||||
|
||||
### 目的
|
||||
個別の圃場情報を確認・編集。共済/中山間マスタとの紐づけ管理。田んぼにいるときにスマホで確認する用途も想定。
|
||||
|
||||
### レイアウト(PC)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────┐
|
||||
│ ← 一覧に戻る │
|
||||
├────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 圃場名 住所 │
|
||||
│ [口神 北中___________] [口神ノ川198(笹ヶ谷374-1)___] │
|
||||
│ │
|
||||
│ 面積(反) 面積(m2) 所有者 グループ名 │
|
||||
│ [0.4___] [400___] [吉田___] [口神___] │
|
||||
│ │
|
||||
│ [保存] │
|
||||
│ │
|
||||
├────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📋 共済情報 (2件 / 計800m2) [+追加] │
|
||||
│ ─────────────────────────────────────────────────────── │
|
||||
│ 耕地-分筆 漢字地名 住所 面積(m2) 操作│
|
||||
│ ─────────────────────────────────────────────────────── │
|
||||
│ 2-1 四万十町 笹ヶ谷 374-1 笹ヶ谷... 400 [×]│
|
||||
│ 2-2 四万十町 笹ヶ谷 374-2 笹ヶ谷... 400 [×]│
|
||||
│ │
|
||||
├────────────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📋 中山間情報 (1件 / 計400m2) [+追加] │
|
||||
│ ─────────────────────────────────────────────────────── │
|
||||
│ ID 所在地 面積(m2) 支払金額 操作 │
|
||||
│ ─────────────────────────────────────────────────────── │
|
||||
│ 50 口神ノ川 壱町切 1694 400 ¥8,000 [×] │
|
||||
│ │
|
||||
└────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**[+追加]ボタン押下時 — 紐づけ追加モーダル:**
|
||||
```
|
||||
┌────────────────────────────────────────────┐
|
||||
│ 共済区画を追加 [×] │
|
||||
├────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 🔍 [検索: 地番・漢字地名で絞り込み____] │
|
||||
│ │
|
||||
│ ─────────────────────────────────────── │
|
||||
│ □ 3-1 四万十町 笹ヶ谷 375 300m2 │
|
||||
│ □ 4-1 四万十町 笹ヶ谷 376 250m2 │
|
||||
│ □ 5-1 四万十町 口神ノ川 198 500m2 │
|
||||
│ ─────────────────────────────────────── │
|
||||
│ ※ 既に他の圃場に紐づいている区画は │
|
||||
│ (🔗 圃場名) で表示 │
|
||||
│ │
|
||||
│ [選択した区画を追加] │
|
||||
│ │
|
||||
└────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### レイアウト(スマホ)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────┐
|
||||
│ ← 一覧に戻る │
|
||||
├────────────────────────────────────┤
|
||||
│ │
|
||||
│ 圃場名 │
|
||||
│ [口神 北中________________] │
|
||||
│ 住所 │
|
||||
│ [口神ノ川198(笹ヶ谷374-1)__] │
|
||||
│ 面積(反) 面積(m2) │
|
||||
│ [0.4___] [400___] │
|
||||
│ 所有者 グループ名 │
|
||||
│ [吉田___] [口神___] │
|
||||
│ │
|
||||
│ [保存] │
|
||||
│ │
|
||||
├────────────────────────────────────┤
|
||||
│ 📋 共済情報 (2件/計800m2) [+追加] │
|
||||
│ ┌──────────────────────────────┐│
|
||||
│ │ 2-1 四万十町笹ヶ谷374-1 ││
|
||||
│ │ 400m2 [×] ││
|
||||
│ └──────────────────────────────┘│
|
||||
│ ┌──────────────────────────────┐│
|
||||
│ │ 2-2 四万十町笹ヶ谷374-2 ││
|
||||
│ │ 400m2 [×] ││
|
||||
│ └──────────────────────────────┘│
|
||||
│ │
|
||||
├────────────────────────────────────┤
|
||||
│ 📋 中山間情報 (1件/計400m2)[+追加]│
|
||||
│ ┌──────────────────────────────┐│
|
||||
│ │ ID50 口神ノ川壱町切1694 ││
|
||||
│ │ 400m2 ¥8,000 [×] ││
|
||||
│ └──────────────────────────────┘│
|
||||
│ │
|
||||
└────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 機能要件
|
||||
- [x] 圃場の基本情報を編集フォームで表示
|
||||
- [x] 編集可能フィールド: 圃場名、住所、面積(反)、面積(m2)、所有者、グループ名
|
||||
- [x] [保存]ボタン → PATCH API で更新
|
||||
- [x] [← 一覧に戻る] → `/fields` へ遷移
|
||||
- [x] エラーメッセージ表示
|
||||
- [x] 共済情報の読み取り専用テーブル表示(A-8 完了)
|
||||
- [x] 中山間情報の読み取り専用テーブル表示(A-8 完了)
|
||||
- [ ] **紐づけ管理機能(E-2: 対応付け可視化・編集)** — **未実装**
|
||||
- [ ] 共済/中山間セクションに [+追加] ボタン
|
||||
- [ ] 追加モーダル: 未紐づけの区画一覧から選択して追加
|
||||
- [ ] 検索フィルタ(地番、漢字地名、IDで絞り込み)
|
||||
- [ ] 既に他の圃場に紐づいている区画は紐づけ先を表示(M:N のため追加は可能)
|
||||
- [ ] 各行に [×] ボタンで紐づけ解除(区画自体は削除しない)
|
||||
- [ ] 確認ダイアログ: 「この紐づけを解除しますか?」
|
||||
- [ ] **面積参考表示(E-2)** — **未実装**
|
||||
- [ ] セクション見出しに紐づけ区画の合計面積を小さく併記(例: 「共済情報 (2件 / 計800m2)」)
|
||||
- [ ] ※ M:N関係の特性上、圃場面積と一致しないのが通常。警告アイコンやハイライトは表示しない
|
||||
- [ ] 面積はあくまで参考情報として、件数と合計面積を淡いグレー文字で表示するのみ
|
||||
- [ ] 将来的に栽培履歴も表示(Phase 2)
|
||||
|
||||
### 必要なAPI(E-2 用)
|
||||
|
||||
| メソッド | エンドポイント | 説明 |
|
||||
|---------|---------------|------|
|
||||
| GET | `/api/kyosai-fields/` | 共済マスタ全件取得(紐づけ追加モーダル用) |
|
||||
| GET | `/api/chusankan-fields/` | 中山間マスタ全件取得(紐づけ追加モーダル用) |
|
||||
| POST | `/api/fields/{id}/kyosai-links/` | 共済紐づけ追加 `{ kyosai_field_ids: [1,2,3] }` |
|
||||
| DELETE | `/api/fields/{id}/kyosai-links/{kyosai_id}/` | 共済紐づけ解除 |
|
||||
| POST | `/api/fields/{id}/chusankan-links/` | 中山間紐づけ追加 `{ chusankan_field_ids: [1,2,3] }` |
|
||||
| DELETE | `/api/fields/{id}/chusankan-links/{chusankan_id}/` | 中山間紐づけ解除 |
|
||||
|
||||
### デザインノート
|
||||
- [+追加] ボタンはセクション見出しの右端に配置
|
||||
- [×] ボタンは各行の右端、テキストリンクスタイル(赤系)
|
||||
- **面積表示は控えめに**: 件数と合計面積をセクション見出しにグレー小文字で表示するのみ。M:N関係の特性上、圃場面積と合計面積は基本的に一致しないため、警告アイコンやハイライト色は一切使わない
|
||||
- モーダルの区画一覧はチェックボックス選択式(複数同時追加可能)
|
||||
|
||||
---
|
||||
|
||||
## 画面6: 圃場新規作成
|
||||
|
||||
### 目的
|
||||
手動で圃場を1件ずつ新規登録(インポート以外の方法)
|
||||
|
||||
### レイアウト
|
||||
|
||||
```
|
||||
┌────────────────────────────────────┐
|
||||
│ ← 一覧に戻る │
|
||||
├────────────────────────────────────┤
|
||||
│ │
|
||||
│ 圃場名 │
|
||||
│ [____________________________] │
|
||||
│ │
|
||||
│ 住所 │
|
||||
│ [____________________________] │
|
||||
│ │
|
||||
│ 面積(反) │
|
||||
│ [________] │
|
||||
│ │
|
||||
│ 面積(m2) │
|
||||
│ [________] │
|
||||
│ │
|
||||
│ 所有者 │
|
||||
│ [____________________________] │
|
||||
│ │
|
||||
│ [作成] │
|
||||
│ │
|
||||
└────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 機能要件
|
||||
- [x] 各フィールドを入力して圃場を新規作成
|
||||
- [x] [作成]ボタン → POST API で作成
|
||||
- [x] 作成成功 → 圃場一覧へ遷移
|
||||
- [x] バリデーションエラー → エラーメッセージ表示
|
||||
|
||||
### 補足
|
||||
- インポート(ODS/Excel)との使い分け: 大量登録はインポート、1件追加は手動作成
|
||||
- グループ名は新規作成時には設定不可(作成後に圃場一覧から設定)
|
||||
|
||||
---
|
||||
|
||||
## 画面7: 申請書ダウンロード
|
||||
|
||||
### 目的
|
||||
水稲共済細目書・中山間交付金のPDFをダウンロード
|
||||
|
||||
### レイアウト(PC)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────┐
|
||||
│ 🌾 KeinaSystem [作付け計画] [圃場管理] ... │
|
||||
├────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 年度: [2025年度 ▼] │
|
||||
│ │
|
||||
│ ┌────────────────────────────────────────────────┐│
|
||||
│ │ 📄 水稲共済細目書 ││
|
||||
│ │ ││
|
||||
│ │ 区画数: 31区画 ││
|
||||
│ │ ││
|
||||
│ │ ⚠️ 未割当の圃場: 4筆 ││
|
||||
│ │ → 作付け計画を完成させてください ││
|
||||
│ │ ││
|
||||
│ │ [プレビュー] [PDFダウンロード] ││
|
||||
│ └────────────────────────────────────────────────┘│
|
||||
│ │
|
||||
│ ┌────────────────────────────────────────────────┐│
|
||||
│ │ 📄 中山間地域等直接支払交付金 ││
|
||||
│ │ ││
|
||||
│ │ 区画数: 71区画 ││
|
||||
│ │ ││
|
||||
│ │ ✅ 全て割当済み ││
|
||||
│ │ ││
|
||||
│ │ [プレビュー] [PDFダウンロード] ││
|
||||
│ └────────────────────────────────────────────────┘│
|
||||
│ │
|
||||
└────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 機能要件
|
||||
- [x] 年度を選択
|
||||
- [x] 各申請書について:
|
||||
- [x] [PDFダウンロード]ボタン → ファイルダウンロード
|
||||
- [ ] 区画数の表示 — **未実装**
|
||||
- [ ] 未割当の警告表示 — **未実装**
|
||||
- [ ] [プレビュー]ボタン → 新しいタブでPDF表示 — **未実装(A-5)**
|
||||
- [ ] ダウンロードされるPDFのファイル名:
|
||||
- 水稲共済: `水稲共済細目書_2025年度.pdf`
|
||||
- 中山間: `中山間交付金_2025年度.pdf`
|
||||
- [ ] PDFはA4サイズ、印刷してそのまま提出可能
|
||||
|
||||
---
|
||||
|
||||
## 画面7-A: PDF帳票フォーマット仕様
|
||||
|
||||
### 7-A-1: 水稲共済細目書 PDF
|
||||
|
||||
**基本仕様:**
|
||||
- 用紙: A4 縦
|
||||
- 表形式(1行1区画、全31行)
|
||||
- ヘッダー: 「水稲共済細目書(YYYY年度)」
|
||||
- ページ番号あり
|
||||
- 印刷してそのまま提出可能
|
||||
|
||||
**列定義:**
|
||||
|
||||
| # | 列名 | データ元 | 備考 |
|
||||
|---|------|---------|------|
|
||||
| 1 | 漢字地名 | OfficialKyosaiField.kanji_name | 例: 四万十町 笹ヶ谷 374-1 |
|
||||
| 2 | 耕地-分筆 | k_num + "-" + s_num | 例: 2-1 |
|
||||
| 3 | 本地面積 (m2) | OfficialKyosaiField.area | 内部 m2 で保存 |
|
||||
| 4 | 作付品目 | Plan.crop.name | 作付け計画から取得 |
|
||||
| 5 | 品種 | Plan.variety.name | 〃(nullの場合は空欄) |
|
||||
| 6 | 圃場名称 | Field.name | 吉田農地台帳の名称 |
|
||||
|
||||
**複数圃場紐づき時の扱い:**
|
||||
- 1つの共済区画に複数の実圃場(Field)が紐づく場合 → 作物・品種・圃場名をカンマ区切りで列挙
|
||||
- 例: 「米, 野菜」「にこまる, トマト」「口神北東, 口神北中」
|
||||
|
||||
**未設定時の扱い:**
|
||||
- 作付け未設定の場合 → 作付品目列に「未設定」と表示
|
||||
|
||||
---
|
||||
|
||||
### 7-A-2: 中山間地域等直接支払交付金 PDF
|
||||
|
||||
**基本仕様:**
|
||||
- 用紙: A4 横(列が多いため)
|
||||
- 表形式(1行1区画、全71行)
|
||||
- ヘッダー: 「中山間地域等直接支払交付金(YYYY年度)」
|
||||
- ページ番号あり
|
||||
- 印刷してそのまま提出可能
|
||||
|
||||
**列定義:**
|
||||
|
||||
| # | 列名 | データ元 | 備考 |
|
||||
|---|------|---------|------|
|
||||
| 1 | 所在地 | 大字+字+地番+枝番 連結 | 例: 口神ノ川 壱町切 1694 |
|
||||
| 2 | 植栽面積 | OfficialChusankanField.planting_area | m2 |
|
||||
| 3 | 作付け品目(元) | OfficialChusankanField.original_crop | ODS「作付け品目」列(役場記入の値) |
|
||||
| 4 | 協定管理者 | OfficialChusankanField.manager | |
|
||||
| 5 | 所有者 | OfficialChusankanField.owner | |
|
||||
| 6 | 作物 | Plan.crop.name | 作付け計画から取得 |
|
||||
| 7 | 品種 | Plan.variety.name | 〃(nullの場合は空欄) |
|
||||
| 8 | 圃場名称 | Field.name | 吉田農地台帳の名称 |
|
||||
|
||||
**複数圃場紐づき時の扱い:**
|
||||
- 共済と同様、カンマ区切りで列挙
|
||||
|
||||
---
|
||||
|
||||
## 画面8: データ取込
|
||||
|
||||
### 目的
|
||||
圃場マスタや申請マスタのインポート
|
||||
|
||||
### レイアウト(PC)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────┐
|
||||
│ 🌾 KeinaSystem [作付け計画] [圃場管理] ... │
|
||||
├────────────────────────────────────────────────────┤
|
||||
│ │
|
||||
│ 📥 データインポート │
|
||||
│ │
|
||||
│ ┌────────────────────────────────────────────────┐│
|
||||
│ │ 吉田農地台帳(圃場マスタ) ││
|
||||
│ │ ││
|
||||
│ │ ファイルを選択: [ファイルを選択] 📎 ││
|
||||
│ │ ││
|
||||
│ │ ⚠️ 既存データは上書きされます ││
|
||||
│ │ ││
|
||||
│ │ [インポート実行] ││
|
||||
│ └────────────────────────────────────────────────┘│
|
||||
│ │
|
||||
│ ┌────────────────────────────────────────────────┐│
|
||||
│ │ 共済マスタ ││
|
||||
│ │ ││
|
||||
│ │ ファイルを選択: [ファイルを選択] 📎 ││
|
||||
│ │ [インポート実行] ││
|
||||
│ └────────────────────────────────────────────────┘│
|
||||
│ │
|
||||
│ ┌────────────────────────────────────────────────┐│
|
||||
│ │ 中山間マスタ ││
|
||||
│ │ ││
|
||||
│ │ ファイルを選択: [ファイルを選択] 📎 ││
|
||||
│ │ [インポート実行] ││
|
||||
│ └────────────────────────────────────────────────┘│
|
||||
│ │
|
||||
│ 📤 データエクスポート │
|
||||
│ • [全圃場データ (CSV)] ※バックアップ用 │
|
||||
│ • [作付け計画 (CSV)] ※バックアップ用 │
|
||||
│ │
|
||||
└────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
### 機能要件
|
||||
- [x] 3種類のマスタを縦並びで表示(タブではなく各セクション形式)
|
||||
- [x] ファイルアップロード(ODS/Excel対応)
|
||||
- [x] インポート実行(結果メッセージ表示)
|
||||
- [ ] プレビュー機能(インポート前に確認)— **未実装**
|
||||
- [ ] エクスポート機能(CSV)— **未実装(A-6)**
|
||||
|
||||
---
|
||||
|
||||
## 🎨 UI共通仕様
|
||||
|
||||
### カラーパレット
|
||||
|
||||
```
|
||||
プライマリカラー(緑系):
|
||||
#2E7D32 濃い緑(ヘッダー、ボタン)
|
||||
#4CAF50 緑(アクセント、アクティブなナビ項目)
|
||||
#81C784 淡い緑(ホバー)
|
||||
|
||||
セカンダリカラー(土系):
|
||||
#8D6E63 茶色(サブヘッダー)
|
||||
#BCAAA4 淡い茶(背景)
|
||||
|
||||
警告・状態色:
|
||||
#F44336 赤(エラー、未設定)
|
||||
#FF9800 オレンジ(警告)
|
||||
#4CAF50 緑(成功)
|
||||
#2196F3 青(情報)
|
||||
|
||||
グレースケール:
|
||||
#212121 ダークグレー(テキスト)
|
||||
#757575 グレー(サブテキスト)
|
||||
#E0E0E0 ライトグレー(ボーダー)
|
||||
#FAFAFA ホワイト(背景)
|
||||
```
|
||||
|
||||
### タイポグラフィ
|
||||
|
||||
```
|
||||
フォント:
|
||||
- システムフォント優先
|
||||
- 日本語: "Noto Sans JP", "Hiragino Sans", "Yu Gothic", sans-serif
|
||||
- 英数字: Inter, "Roboto", "Helvetica", sans-serif
|
||||
|
||||
サイズ:
|
||||
- 見出し(h1): 28px / 太字
|
||||
- 見出し(h2): 22px / 太字
|
||||
- 本文: 16px / 通常
|
||||
- 小文字: 14px / 通常
|
||||
|
||||
行間:
|
||||
- 本文: 1.6
|
||||
- 見出し: 1.3
|
||||
```
|
||||
|
||||
### スペーシング
|
||||
|
||||
```
|
||||
余白の基本単位: 8px
|
||||
|
||||
8px: 最小余白
|
||||
16px: 標準余白(要素間)
|
||||
24px: セクション間
|
||||
32px: 画面の上下余白
|
||||
```
|
||||
|
||||
### レスポンシブブレークポイント
|
||||
|
||||
```
|
||||
スマートフォン: 〜767px
|
||||
タブレット: 768px〜1023px
|
||||
PC: 1024px〜
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🖱️ インタラクション
|
||||
|
||||
### ボタン
|
||||
- **プライマリボタン**: 緑背景、白文字、影付き
|
||||
- **セカンダリボタン**: 白背景、緑文字、ボーダー付き
|
||||
- **ホバー**: 10%明るく、カーソルpointer
|
||||
- **押下**: 5%暗く、影を小さく
|
||||
|
||||
### インライン編集(作付け計画)
|
||||
- **ドロップダウン**: 選択変更と同時にバックグラウンド保存
|
||||
- **テキスト入力**: blur(フォーカスアウト)時に保存
|
||||
- **保存中**: ローディングスピナーは表示しない(スクロールリセット防止のため)
|
||||
- **エラー時**: トースト通知でエラー表示
|
||||
|
||||
### トースト通知
|
||||
- **位置**: 画面右上
|
||||
- **表示時間**: 3秒(自動消去)
|
||||
- **種類**: 成功(緑)、エラー(赤)、警告(オレンジ)、情報(青)
|
||||
|
||||
---
|
||||
|
||||
## 📱 スマホ特有の配慮
|
||||
|
||||
### タップ領域
|
||||
- **最小サイズ**: 44px × 44px
|
||||
- **余白**: ボタン間は最低8px
|
||||
|
||||
### スクロール
|
||||
- **慣性スクロール**: `-webkit-overflow-scrolling: touch`
|
||||
- **無限スクロール**: 不要(全39筆なので一覧でOK)
|
||||
|
||||
### 入力
|
||||
- **キーボードタイプ**: 適切に指定(email, number, textなど)
|
||||
- **オートコンプリート**: 有効化
|
||||
|
||||
### ナビゲーション
|
||||
- **Navbar**: PC版と同じ項目をレスポンシブに配置
|
||||
- **戻るボタン**: 画面左上に配置(詳細画面など)
|
||||
321
document/圃場管理/05_実装優先順位.md
Normal file
321
document/圃場管理/05_実装優先順位.md
Normal file
@@ -0,0 +1,321 @@
|
||||
# 実装優先順位とマイルストーン
|
||||
|
||||
## 🎯 MVP(Phase 1)の完成定義
|
||||
|
||||
以下の全てが完了したら、Phase 1は完成とする:
|
||||
|
||||
### 機能完成基準
|
||||
- [ ] ログイン・認証機能
|
||||
- [ ] 作付け計画の一覧表示(PC/スマホ)
|
||||
- [ ] 作付け計画の編集(個別・一括)
|
||||
- [ ] 水稲共済細目書のPDF出力
|
||||
- [ ] 中山間交付金のPDF出力
|
||||
- [ ] 前年度作付けのコピー機能
|
||||
- [ ] 3種類のマスタデータインポート
|
||||
|
||||
### 品質基準
|
||||
- [ ] PCで快適に操作できる(レスポンス1秒以内)
|
||||
- [ ] スマホで見やすい(文字16px以上)
|
||||
- [ ] 出力されるPDFが正確(手動検証でOK)
|
||||
|
||||
### ユーザビリティ基準
|
||||
- [ ] 作付け計画の登録が10分以内で完了
|
||||
- [ ] 申請書のダウンロードが3クリック以内
|
||||
- [ ] スマホでの圃場検索が3タップ以内
|
||||
|
||||
**目標完成日: 2025年2月末(水稲共済の1回目申請に間に合わせる)**
|
||||
|
||||
---
|
||||
|
||||
## 📅 実装スケジュール(10日間想定)
|
||||
|
||||
### Day 1-2: 環境構築 & 基盤実装
|
||||
|
||||
**Day 1: プロジェクトセットアップ**
|
||||
- [ ] Dockerコンテナの構築
|
||||
- PostgreSQL (PostGIS拡張)
|
||||
- Django (バックエンド)
|
||||
- Next.js (フロントエンド)
|
||||
- [ ] Djangoプロジェクト初期化
|
||||
- `django-admin startproject`
|
||||
- GIS設定 (`GDAL`, `GEOS`)
|
||||
- 環境変数管理 (`.env`)
|
||||
- [ ] Next.jsプロジェクト初期化
|
||||
- `create-next-app`
|
||||
- Tailwind CSS設定
|
||||
- 環境変数管理
|
||||
|
||||
**Day 2: 認証機能**
|
||||
- [ ] Django: ユーザーモデル (メール認証)
|
||||
- [ ] Django: JWT認証設定 (`djoser`, `djangorestframework-simplejwt`)
|
||||
- [ ] Next.js: ログイン画面
|
||||
- [ ] Next.js: 認証コンテキスト (`AuthContext`)
|
||||
- [ ] 動作確認: ログイン→ダッシュボード遷移
|
||||
|
||||
---
|
||||
|
||||
### Day 3-4: データモデル & インポート機能
|
||||
|
||||
**Day 3: データベース設計**
|
||||
- [ ] Django: モデル定義
|
||||
- `Field` (実圃場)
|
||||
- `OfficialKyosaiField` (共済マスタ)
|
||||
- `OfficialChusankanField` (中山間マスタ)
|
||||
- `Plan` (作付け計画)
|
||||
- `Crop` (作物マスタ)
|
||||
- `Variety` (品種マスタ)
|
||||
- [ ] マイグレーション実行
|
||||
- [ ] 管理画面での動作確認
|
||||
|
||||
**Day 4: インポート機能**
|
||||
- [ ] Django: インポートAPI実装
|
||||
- `pandas` + `odfpy` でODS読み込み
|
||||
- 共済マスタインポート
|
||||
- 中山間マスタインポート
|
||||
- 吉田農地台帳インポート(紐付け処理含む)
|
||||
- [ ] Next.js: データ管理画面
|
||||
- ファイルアップロードUI
|
||||
- プレビュー表示
|
||||
- インポート実行ボタン
|
||||
- [ ] 動作確認: 実際のODSファイルをインポート
|
||||
|
||||
---
|
||||
|
||||
### Day 5-6: 作付け計画機能(コア機能)
|
||||
|
||||
**Day 5: 作付け計画API**
|
||||
- [ ] Django: 作付け計画API(作物・品種はUIまたは管理画面から登録)
|
||||
- 一覧取得 (`GET /api/plans/?year=2025`)
|
||||
- 作成・更新 (`POST /api/plans/`, `PATCH /api/plans/{id}/`)
|
||||
- 一括更新 (`POST /api/plans/bulk/`)
|
||||
- 前年度コピー (`POST /api/plans/copy_from_previous_year/`)
|
||||
- **品種追加API** (`POST /api/varieties/`) - その場で品種を追加
|
||||
- **集計API** (`GET /api/plans/summary/?year=2025`) - サイドバー用
|
||||
- [ ] API動作確認 (Postman or curl)
|
||||
|
||||
**Day 6: 作付け計画UI**
|
||||
- [ ] Next.js: 作付け計画一覧画面
|
||||
- テーブル表示
|
||||
- 検索・フィルタ機能
|
||||
- 未割当のハイライト
|
||||
- **集計サイドバー(開閉可能)**
|
||||
- 作物別・品種別の合計面積
|
||||
- リアルタイム更新
|
||||
- **スマホ: 集計モーダル表示**
|
||||
- [ ] Next.js: 作付け計画インライン編集
|
||||
- 作物選択(テーブル内ドロップダウン)
|
||||
- 品種選択(テーブル内ドロップダウン、作物選択後に有効化)
|
||||
- 備考入力(テーブル内テキスト)
|
||||
- 変更即時保存(バックグラウンド、スクロール維持)
|
||||
- [ ] Next.js: 前年度コピーボタン
|
||||
- [ ] 動作確認: 作付け計画を実際に入力
|
||||
|
||||
---
|
||||
|
||||
### Day 7-8: 申請書出力機能
|
||||
|
||||
**Day 7: 申請書ロジック実装**
|
||||
- [ ] Django: 水稲共済細目書PDF生成
|
||||
- 共済マスタをベースに集約
|
||||
- 紐づく実圃場の作付けを名寄せ
|
||||
- HTMLテンプレート作成
|
||||
- WeasyPrintでPDF変換
|
||||
- [ ] Django: 中山間交付金PDF生成
|
||||
- 中山間マスタをベースに集約
|
||||
- HTMLテンプレート作成
|
||||
- [ ] 動作確認: PDFの内容と見た目を手動チェック
|
||||
|
||||
**Day 8: 申請書ダウンロードUI**
|
||||
- [ ] Next.js: 申請書ダウンロード画面
|
||||
- 年度選択
|
||||
- プレビュー表示(新しいタブでPDF)
|
||||
- PDFダウンロードボタン
|
||||
- [ ] 動作確認: PDFをダウンロードして印刷してみる
|
||||
|
||||
---
|
||||
|
||||
### Day 9: スマホ対応 & UI調整
|
||||
|
||||
**Day 9: レスポンシブ対応**
|
||||
- [ ] Next.js: スマホ用レイアウト調整
|
||||
- 作付け計画一覧(カード型)
|
||||
- 圃場詳細画面
|
||||
- タップ領域の調整
|
||||
- [ ] 文字サイズ・余白の調整
|
||||
- [ ] 動作確認: 実機またはChrome DevToolsのモバイルビュー
|
||||
|
||||
---
|
||||
|
||||
### Day 10: テスト & 微調整
|
||||
|
||||
**Day 10: 総合テスト**
|
||||
- [ ] 全機能の動作確認
|
||||
- ログイン→作付け計画編集→申請書ダウンロードの一連の流れ
|
||||
- 前年度コピー→編集→保存
|
||||
- スマホでの参照
|
||||
- [ ] バグ修正
|
||||
- [ ] ドキュメント整備(README.md、使い方ガイド)
|
||||
- [ ] 本番デプロイ準備(Dockerイメージのビルド)
|
||||
|
||||
---
|
||||
|
||||
## 🔧 技術スタックの詳細
|
||||
|
||||
### バックエンド (Django)
|
||||
|
||||
| 項目 | 採用技術 | 理由 |
|
||||
|------|---------|------|
|
||||
| フレームワーク | Django 5.2 | 安定性、豊富なエコシステム |
|
||||
| REST API | Django REST Framework | 標準的なAPI構築ツール |
|
||||
| 認証 | djoser + SimpleJWT | JWT認証の簡単な実装 |
|
||||
| GIS | GeoDjango (PostGIS) | 地理情報の扱いに最適 |
|
||||
| ファイル解析 | pandas + odfpy | ODS/Excelの読み込みに対応 |
|
||||
| PDF生成 | WeasyPrint | HTML→PDF変換、日本語対応 |
|
||||
| データベース | PostgreSQL 16 + PostGIS 3.4 | 空間データの保存・検索 |
|
||||
|
||||
### フロントエンド (Next.js)
|
||||
|
||||
| 項目 | 採用技術 | 理由 |
|
||||
|------|---------|------|
|
||||
| フレームワーク | Next.js 14 (App Router) | SSR/SSG対応、モダンな開発体験 |
|
||||
| スタイリング | Tailwind CSS | 高速なUI開発 |
|
||||
| 状態管理 | React Context API | シンプルな認証状態管理 |
|
||||
| HTTPクライアント | fetch API (native) | 軽量、標準API |
|
||||
| テーブル | react-table (TanStack Table) | 高機能なテーブルコンポーネント |
|
||||
|
||||
### インフラ (Docker)
|
||||
|
||||
| 項目 | 採用技術 | 理由 |
|
||||
|------|---------|------|
|
||||
| コンテナ化 | Docker Compose | 開発・本番環境の統一 |
|
||||
| データベース | postgis/postgis:16-3.4 | PostGIS公式イメージ |
|
||||
| リバースプロキシ | Nginx (開発環境) | 静的ファイル配信 |
|
||||
|
||||
---
|
||||
|
||||
## 📦 実装の粒度(コードレベル)
|
||||
|
||||
### 最小限の実装で済むもの
|
||||
- ログイン画面: メール+パスワードのみ(パスワードリセットは後回し)
|
||||
- ダッシュボード: サマリー表示のみ(グラフは不要)
|
||||
- 地図機能: Phase 1では不要(住所テキストのみ)
|
||||
|
||||
### しっかり作り込むもの
|
||||
- 作付け計画一覧: 検索・フィルタ・ソート機能
|
||||
- インライン編集: 即時保存、スクロール維持
|
||||
- 申請書PDF: 正確なデータ集計ロジック、A4印刷対応
|
||||
|
||||
### Phase 2以降に回すもの
|
||||
- 栽培履歴(播種日、作業記録)
|
||||
- カレンダー表示
|
||||
- 資材計画
|
||||
- 過去年度の比較
|
||||
|
||||
---
|
||||
|
||||
## 🚀 デプロイ計画
|
||||
|
||||
### 開発環境
|
||||
- ローカルマシン: Docker Compose
|
||||
- URL: `http://localhost:3000`
|
||||
|
||||
### 本番環境(Phase 1後)
|
||||
- サーバー: VPS or クラウド(AWS/GCP/さくらVPS)
|
||||
- ドメイン: `keina.example.com` (仮)
|
||||
- HTTPS: Let's Encrypt
|
||||
- リバースプロキシ: Traefik or Nginx
|
||||
|
||||
### バックアップ戦略
|
||||
- データベース: 毎日自動バックアップ(`pg_dump`)
|
||||
- ファイル: CSVエクスポートでユーザー自身がバックアップ
|
||||
|
||||
---
|
||||
|
||||
## 🧪 テスト戦略
|
||||
|
||||
### Phase 1では自動テスト不要
|
||||
- **理由**: シングルユーザー、手動検証で十分
|
||||
- **代わりに**: 手動チェックリストで品質保証
|
||||
|
||||
### 手動チェックリスト
|
||||
|
||||
#### 機能テスト
|
||||
- [ ] ログインできる
|
||||
- [ ] 作付け計画を登録できる
|
||||
- [ ] 作付け計画を編集できる
|
||||
- [ ] 一括割当ができる
|
||||
- [ ] 前年度コピーができる
|
||||
- [ ] 水稲共済PDFをダウンロードできる
|
||||
- [ ] 中山間PDFをダウンロードできる
|
||||
- [ ] PDFをプレビュー表示できる
|
||||
- [ ] スマホで圃場詳細を見られる
|
||||
|
||||
#### データ整合性テスト
|
||||
- [ ] 共済PDFの耕地番号が正しい
|
||||
- [ ] 中山間PDFのIDが正しい
|
||||
- [ ] 作物の名寄せが正しい(重複排除)
|
||||
- [ ] 未割当の圃場が適切に扱われる
|
||||
- [ ] PDFの表レイアウトが整っている
|
||||
- [ ] PDFをA4用紙に印刷して見やすい
|
||||
|
||||
#### UI/UXテスト
|
||||
- [ ] PCで見やすい(文字サイズ、余白)
|
||||
- [ ] スマホで見やすい(タップ領域、スクロール)
|
||||
- [ ] エラーメッセージがわかりやすい
|
||||
- [ ] ローディング中の表示
|
||||
|
||||
---
|
||||
|
||||
## 🔍 潜在的な技術的課題と対策
|
||||
|
||||
### 課題1: PostGISの設定
|
||||
**問題**: Dockerコンテナ内でGDAL/GEOSのパスが通らない
|
||||
**対策**: 公式PostGISイメージを使用、Djangoの`GDAL_LIBRARY_PATH`を明示的に設定
|
||||
|
||||
### 課題2: ODSファイルの文字コード
|
||||
**問題**: 日本語の文字化け
|
||||
**対策**: `pd.read_excel(..., engine='odf')` でUTF-8として読み込み
|
||||
|
||||
### 課題3: 作物の名寄せロジック
|
||||
**問題**: 複数の実圃場が1つの共済区画に紐づく場合の集約
|
||||
**対策**: Pythonのセットで重複排除 → カンマ区切りで結合
|
||||
|
||||
### 課題4: スマホでのテーブル表示
|
||||
**問題**: 横スクロールが発生
|
||||
**対策**: カード型レイアウトに変更(Tailwindの`@media`クエリ)
|
||||
|
||||
### 課題5: 大量データのパフォーマンス
|
||||
**問題**: Phase 2以降、栽培履歴が増えると遅くなる
|
||||
**対策**: ページネーション、インデックス最適化(Phase 2で対応)
|
||||
|
||||
---
|
||||
|
||||
## 📝 開発時の注意点
|
||||
|
||||
### コーディング規約
|
||||
- **Python**: PEP 8準拠、型ヒント推奨
|
||||
- **JavaScript**: ESLint + Prettier、関数コンポーネント優先
|
||||
- **命名**: 英語(camelCase or snake_case)、略語は避ける
|
||||
|
||||
### コミットメッセージ
|
||||
```
|
||||
feat: 作付け計画一覧APIを実装
|
||||
fix: 共済PDFの面積計算バグを修正
|
||||
docs: READMEにセットアップ手順を追加
|
||||
style: Tailwindクラスを整理
|
||||
```
|
||||
|
||||
### ブランチ戦略
|
||||
- `main`: 本番環境
|
||||
- `develop`: 開発環境
|
||||
- `feature/*`: 機能開発
|
||||
|
||||
---
|
||||
|
||||
## 🎉 Phase 1完成後の振り返り
|
||||
|
||||
完成したら、以下を実施:
|
||||
1. **使用感チェック**: 実際に作付け計画を入力してみる
|
||||
2. **申請書検証**: 出力されたPDFを役場の書式と照合
|
||||
3. **改善点の洗い出し**: 「ここがもっとこうだったら...」を記録
|
||||
4. **Phase 2の要件整理**: 栽培履歴機能の詳細を詰める
|
||||
243
document/圃場管理/06_ドキュメントvs実装_差異レポート.md
Normal file
243
document/圃場管理/06_ドキュメントvs実装_差異レポート.md
Normal file
@@ -0,0 +1,243 @@
|
||||
# ドキュメント vs 実装 差異レポート
|
||||
|
||||
> **作成日**: 2026-02-16
|
||||
> **最終更新**: 2026-02-17
|
||||
> **目的**: ドキュメントと実装の差異を洗い出し、対応方針を決定する
|
||||
|
||||
---
|
||||
|
||||
## A. ドキュメントに書かれているが実装されていないもの
|
||||
|
||||
### ~~A-1: ダッシュボード画面~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**:
|
||||
- `/dashboard` にダッシュボード画面を新設。`/` はログイン済みなら `/dashboard` にリダイレクト
|
||||
- 概要サマリー: 全圃場数、作付け済み筆数、未割当筆数(警告アイコン付き)
|
||||
- 作物別集計テーブル: 作物名、筆数、面積(反)、合計行
|
||||
- クイックアクセス: 作付け計画・圃場管理・帳票出力・データ取込への4ボタン
|
||||
- 年度セレクタで年度切替可能
|
||||
- Navbarに「ホーム」ボタン追加、KeinaSystemロゴクリックでダッシュボードに遷移
|
||||
- バックエンド: summary APIに `total_fields`, `assigned_fields`, `unassigned_fields` を追加
|
||||
- **対応日**: 2026-02-19
|
||||
|
||||
---
|
||||
|
||||
### ~~A-2: チェックボックスによる一括操作~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**:
|
||||
- バックエンド: `POST /api/plans/bulk_update/` API追加(field_ids, year, crop, variety を受けて一括 update_or_create)
|
||||
- フロントエンド: 作付け計画画面(/allocation)にチェックボックス列追加、全選択/個別選択
|
||||
- 一括操作バー: 選択件数表示、作物・品種セレクタ、「一括設定」ボタン、確認ダイアログ付き
|
||||
- **対応日**: 2026-02-19
|
||||
|
||||
---
|
||||
|
||||
### ~~A-3: 前年度コピー機能(フロントエンド)~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**: 作付け計画画面(/allocation)の年度セレクタ横に[前年度コピー]ボタンを追加。確認ダイアログ付き、既存プランはスキップ(ignore_conflicts)
|
||||
- **対応日**: 2026-02-18
|
||||
|
||||
---
|
||||
|
||||
### ~~A-4: 品種のインライン追加・削除~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**:
|
||||
- 品種セレクトに「+ 新しい品種を追加...」オプション追加。選択するとインライン入力に切り替わり、Enter/追加ボタンでAPI経由で即登録&自動選択
|
||||
- ヘッダーに「品種管理」ボタン追加。モーダルで作物別の品種一覧表示、追加・削除が可能
|
||||
- Plan.variety の on_delete を CASCADE → SET_NULL に変更(品種削除時に計画が消えない安全策、マイグレーション0003)
|
||||
- **対応日**: 2026-02-19
|
||||
|
||||
---
|
||||
|
||||
### ~~A-5: PDFプレビュー機能~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**: 帳票出力画面(/reports)をカード形式にリニューアル。各帳票にプレビュー(新タブでPDF表示)とダウンロードのボタンを配置。プレビューからブラウザの印刷機能で直接印刷可能
|
||||
- **対応日**: 2026-02-19
|
||||
|
||||
---
|
||||
|
||||
### ~~A-6: エクスポート機能(CSV/ZIP)~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**: データ取込画面(/import)下部に「データエクスポート」セクション追加。全データ(圃場・共済・中山間・作付け計画・品種・M:N紐づけ)を6つのCSVファイルとしてZIPアーカイブでダウンロード。バックエンドAPI `GET /api/fields/export/zip/`
|
||||
- **対応日**: 2026-02-19
|
||||
|
||||
---
|
||||
|
||||
### ~~A-7: 作付け計画画面の検索・フィルタ~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**:
|
||||
- テキスト検索: 圃場名・住所で部分一致検索(リアルタイムフィルタリング)
|
||||
- 作物フィルタ: ドロップダウンで特定の作物に絞り込み
|
||||
- 未割当トグル: チェックボックスで未割当の圃場のみ表示
|
||||
- フィルタ結果件数表示(例: 5/39件)
|
||||
- クライアントサイドフィルタ(39筆のためAPI不要)
|
||||
- **対応日**: 2026-02-19
|
||||
|
||||
---
|
||||
|
||||
### ~~A-8: 圃場詳細画面の共済/中山間情報表示~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**: 圃場詳細画面 (`/fields/[id]`) に共済情報テーブルと中山間情報テーブルを追加
|
||||
- **対応日**: 2026-02-17
|
||||
- **確認**: Playwright E2E テストで検証済み
|
||||
|
||||
---
|
||||
|
||||
## B. 実装されているがドキュメントに記載がないもの
|
||||
|
||||
### B-1〜B-5: ドキュメント追記対応 ✅ 対応済み
|
||||
|
||||
以下の項目は 2026-02-17 のドキュメント一斉更新で対応済み:
|
||||
- **B-1**: グループ機能 → データ仕様書・CLAUDE.md に記載済み
|
||||
- **B-2**: 圃場管理画面(/fields) → 画面設計書に追記済み
|
||||
- **B-3**: 圃場新規作成画面(/fields/new) → 画面設計書に追記済み
|
||||
- **B-4**: インライン編集方式(作付け計画) → 画面設計書をモーダル→インラインに更新済み
|
||||
- **B-5**: Navbar → 画面設計書に追記済み
|
||||
|
||||
---
|
||||
|
||||
## C. ドキュメントと実装で食い違っているもの
|
||||
|
||||
### C-1: Field と共済/中山間の関係(M:1 vs M:N) ✅ 対応済み
|
||||
|
||||
- **対応内容**: データ仕様書を M:N に更新
|
||||
- **対応日**: 2026-02-17
|
||||
|
||||
---
|
||||
|
||||
### ~~C-2: 共済マスタのフィールド型~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**: `k_num` = CharField, `s_num` = CharField に統一。`unique_together = [['k_num', 's_num']]` を設定(マイグレーション0005)
|
||||
- **対応日**: 2026-02-17
|
||||
- **確認**: Playwright E2E テストで重複拒否を検証済み
|
||||
|
||||
---
|
||||
|
||||
### C-3: 中山間マスタのフィールド型 ✅ 対応済み
|
||||
|
||||
- **対応内容**: `c_id` = CharField, `chiban` = CharField で実装。データ仕様書も CharField に更新済み
|
||||
- **理由**: 地番に「イ」「ロ」等の非数値データが入るため
|
||||
|
||||
---
|
||||
|
||||
### ~~C-4: 面積フィールドの単位~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**:
|
||||
- 共済マスタ・中山間マスタの `area` は IntegerField(m2)に統一
|
||||
- 共済インポート時に ODS のアール値を m2 に変換 (×100)
|
||||
- PDF テンプレートの面積表示を m2 に修正
|
||||
- **対応日**: 2026-02-17
|
||||
- **発見したバグ**: ODS カラム名 `本地面積 (m2)` のスペース有無でインポートが失敗し全件 area=0 になっていた → 修正済み
|
||||
|
||||
---
|
||||
|
||||
### C-5: 作物マスタの初期データ ✅ 対応済み
|
||||
|
||||
- **対応内容**: `init_crops.py` を削除。作物・品種は管理画面やUIから登録する運用
|
||||
- **対応日**: 2026-02-17(D-2 と同時対応)
|
||||
|
||||
---
|
||||
|
||||
### C-6: 申請書の出力形式(CSV vs PDF) ✅ 対応済み
|
||||
|
||||
- **対応内容**: 全ドキュメントを PDF に統一
|
||||
- **対応日**: 2026-02-17
|
||||
|
||||
---
|
||||
|
||||
### C-7: Django バージョン ✅ 対応済み
|
||||
|
||||
- **対応内容**: ドキュメントを Django 5.2 に更新
|
||||
- **対応日**: 2026-02-17
|
||||
|
||||
---
|
||||
|
||||
### ~~C-8: DEFAULT_PERMISSION_CLASSES~~ ✅ 対応済み
|
||||
|
||||
- **対応内容**: `AllowAny` → `IsAuthenticated` に変更
|
||||
- **対応日**: 2026-02-17(D-4 と同時対応)
|
||||
- **確認**: Playwright E2E テストで未認証時 401 を検証済み
|
||||
|
||||
---
|
||||
|
||||
## D. 潜在的な不具合
|
||||
|
||||
### ~~D-1: PDF生成時の variety/crop が null でクラッシュ~~ ✅ 修正済み
|
||||
|
||||
- **修正内容**: `plan.crop.name if plan.crop else '未設定'` / `plan.variety.name if plan.variety else ''` の null チェック追加
|
||||
- **修正日**: 2026-02-17
|
||||
- **確認**: Playwright E2E テストで PDF 生成(200 応答)を検証済み
|
||||
|
||||
---
|
||||
|
||||
### ~~D-2: init_crops.py の不正データ~~ ✅ 修正済み
|
||||
|
||||
- **修正内容**: `init_crops.py` 自体を削除
|
||||
- **修正日**: 2026-02-17
|
||||
|
||||
---
|
||||
|
||||
### ~~D-3: settings.py の二重定義~~ ✅ 修正済み
|
||||
|
||||
- **修正内容**: 前の `LANGUAGE_CODE = 'en-us'` / `TIME_ZONE = 'UTC'` を削除。`LANGUAGE_CODE = 'ja'` / `TIME_ZONE = 'Asia/Tokyo'` のみ残す
|
||||
- **修正日**: 2026-02-17
|
||||
|
||||
---
|
||||
|
||||
### ~~D-4: AllowAny で全API公開~~ ✅ 修正済み
|
||||
|
||||
- **修正内容**: `DEFAULT_PERMISSION_CLASSES` を `IsAuthenticated` に変更
|
||||
- **修正日**: 2026-02-17
|
||||
- **確認**: Playwright E2E テストで検証済み
|
||||
|
||||
---
|
||||
|
||||
## E. 追加で修正の要望
|
||||
|
||||
### ~~E-1: PDF帳票フォーマットの再設計~~ ✅ 対応済み
|
||||
|
||||
**対応日**: 2026-02-17
|
||||
|
||||
**対応内容:**
|
||||
- E-1a: 水稲共済細目書 PDF — A4 縦、表形式(1行1区画)、@page 設定、ページ番号、日本語タイトルに修正
|
||||
- E-1b: 中山間交付金 PDF — A4 横、表形式(1行1区画)、@page 設定、ページ番号、日本語タイトルに修正
|
||||
- E-1c: OfficialChusankanField モデル拡張 — 6→17 フィールドに拡張(マイグレーション0006)
|
||||
- 中山間インポート修正 — ODS 17 列すべて読み込み対応
|
||||
- 共済インポートバグ修正 — 面積カラム名スペース不一致 + アール→m2 変換(×100)
|
||||
- reports/views.py — ロジック全面書き直し(フラットテーブル、null 安全、prefetch_related)
|
||||
- シリアライザ — OfficialChusankanFieldSerializer に 11 フィールド追加
|
||||
|
||||
**確認**: Playwright E2E テスト(PDF 200 応答、中山間 17 フィールド返却、共済面積 > 0)で検証済み
|
||||
|
||||
---
|
||||
|
||||
### ~~E-2: 対応付け可視化・紐づけ管理機能~~ ✅ 対応済み
|
||||
|
||||
**対応日**: 2026-02-18
|
||||
|
||||
**対応内容:**
|
||||
- バックエンドAPI 6本(共済/中山間マスタ一覧、紐づけ追加・解除)
|
||||
- 圃場詳細画面(/fields/[id]): +追加ボタン、×解除ボタン、検索付きモーダル、面積参考表示
|
||||
- 圃場一覧 通常モード: 「共済」「中山間」件数列
|
||||
- 圃場一覧「対応表」モード: [通常]/[対応表]トグルで切替、圃場名・住所・面積・共済漢字地名・中山間所在地を一覧表示、直接紐づけ追加・解除可能
|
||||
- 共通コンポーネント: LinkModal(検索付き複数選択モーダル)を抽出
|
||||
|
||||
---
|
||||
|
||||
## 対応状況サマリー
|
||||
|
||||
| カテゴリ | 項目 | 状態 |
|
||||
|---------|------|------|
|
||||
| A-1 | ダッシュボード画面 | ✅ 完了 |
|
||||
| A-2 | チェックボックス一括操作 | ✅ 完了 |
|
||||
| A-3 | 前年度コピーボタン | ✅ 完了 |
|
||||
| A-4 | 品種インライン追加・削除 | ✅ 完了 |
|
||||
| A-5 | PDFプレビュー | ✅ 完了 |
|
||||
| A-6 | エクスポート機能 | ✅ 完了 |
|
||||
| A-7 | 検索・フィルタ | ✅ 完了 |
|
||||
| A-8 | 圃場詳細 共済/中山間表示 | ✅ 完了 |
|
||||
| B-1〜B-5 | ドキュメント追記 | ✅ 完了 |
|
||||
| C-1〜C-8 | ドキュメント/実装の食い違い修正 | ✅ 全件完了 |
|
||||
| D-1〜D-4 | 不具合修正 | ✅ 全件完了 |
|
||||
| E-1 | PDF帳票再設計 | ✅ 完了 |
|
||||
| E-2 | 対応付け可視化・紐づけ管理 | ✅ 完了 |
|
||||
Reference in New Issue
Block a user