ドキュメント更新(6ファイル)
03_データ仕様書.md — 全面書き直し(M:N関係、中山間17列モデル、面積単位、PDF出力仕様) 04_画面設計書.md — 全面書き直し(Navbar追加、圃場管理/新規作成画面追加、インライン編集方式、PDF帳票フォーマット仕様 E-1) 01_プロダクトビジョン.md — CSV→PDF、M:1→M:N 05_実装優先順位.md — CSV→PDF、Django 5.0→5.2、モーダル→インライン、init_crops削除 00_Gemini向け統合指示書.md — CSV→PDF、Django 5.2、M:N関係、中山間17列モデル、init_crops削除、IsAuthenticated CLAUDE.md — 既知の課題一覧、次タスク優先順追加、中山間モデル拡張、差異レポートリンク コード修正(4件) D-1: reports/views.py — plan.crop / plan.variety の null チェック追加 D-2: init_crops.py を削除 D-3: settings.py — LANGUAGE_CODE/TIME_ZONE の二重定義を解消 D-4: settings.py — AllowAny → IsAuthenticated に変更 次のタスクは CLAUDE.md の優先順リストに従うと A-8(圃場詳細に共済/中山間情報表示)です。続けますか?
This commit is contained in:
@@ -1,5 +1,8 @@
|
||||
# データ仕様書
|
||||
|
||||
> **最終更新**: 2026-02-16
|
||||
> **変更履歴**: M:N関係に更新、中山間モデル全17列対応、面積単位統一、帳票仕様追加
|
||||
|
||||
## 📊 データ構造の全体像
|
||||
|
||||
このシステムで扱うデータは3種類:
|
||||
@@ -9,53 +12,80 @@
|
||||
3. **中山間マスタ**(中山間.ods)- 申請書用の区画
|
||||
|
||||
**紐付けの関係:**
|
||||
- 実圃場 → 共済区画: **M対1**(複数の実圃場が1つの共済区画に対応)
|
||||
- 実圃場 → 中山間区画: **M対1**(複数の実圃場が1つの中山間区画に対応)
|
||||
- 実圃場 ↔ 共済区画: **M対N**(複数の実圃場が1つの共済区画に対応、また1つの実圃場が複数の共済区画に対応するケースもある)
|
||||
- 実圃場 ↔ 中山間区画: **M対N**(同上)
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
実圃場 }o--|| 共済区画 : "紐づく(M:1)"
|
||||
実圃場 }o--|| 中山間区画 : "紐づく(M:1)"
|
||||
実圃場 }o--o{ 共済区画 : "紐づく(M:N)"
|
||||
実圃場 }o--o{ 中山間区画 : "紐づく(M:N)"
|
||||
実圃場 ||--o{ 作付け計画 : "持つ(1:N)"
|
||||
|
||||
作付け計画 }o--|| 作物 : "参照"
|
||||
作付け計画 }o--o| 品種 : "参照(任意)"
|
||||
作物 ||--o{ 品種 : "持つ"
|
||||
|
||||
実圃場 {
|
||||
int id PK
|
||||
string 名称
|
||||
string 住所
|
||||
float 面積_反
|
||||
decimal 面積_反
|
||||
int 面積_m2
|
||||
string 地主
|
||||
int 細目_耕地番号 "共済紐付けキー"
|
||||
int 細目_分筆番号 "共済紐付けキー"
|
||||
int 中山間_ID "中山間紐付けキー"
|
||||
string グループ名
|
||||
int 表示順
|
||||
string 細目_耕地番号 "共済紐付けキー(raw)"
|
||||
string 細目_分筆番号 "共済紐付けキー(raw)"
|
||||
string 中山間_ID "中山間紐付けキー(raw)"
|
||||
}
|
||||
|
||||
|
||||
共済区画 {
|
||||
int id PK
|
||||
string 地名_地番
|
||||
int 耕地番号
|
||||
int 分筆番号
|
||||
float 本地面積_m2
|
||||
decimal 本地面積_m2
|
||||
string 漢字地名
|
||||
}
|
||||
|
||||
|
||||
中山間区画 {
|
||||
int id PK
|
||||
int ID
|
||||
string 中山間ID
|
||||
string 中山間フラグ
|
||||
string 大字
|
||||
string 字
|
||||
int 地番
|
||||
string 地番
|
||||
string 枝番
|
||||
string 地目
|
||||
int 農地面積_m2
|
||||
int 植栽面積_m2
|
||||
string 作付け品目_元
|
||||
string 協定管理者
|
||||
string 所有者
|
||||
string 傾斜度
|
||||
int 基本金額
|
||||
decimal 超急傾斜加算額
|
||||
decimal スマート農業加算額
|
||||
int 交付金額
|
||||
}
|
||||
|
||||
|
||||
作付け計画 {
|
||||
int id PK
|
||||
int 実圃場_id FK
|
||||
int 年度
|
||||
string 作物
|
||||
string 品種
|
||||
date 播種日
|
||||
date 収穫日
|
||||
int 作物_id FK
|
||||
int 品種_id FK_nullable
|
||||
text 備考
|
||||
}
|
||||
|
||||
作物 {
|
||||
int id PK
|
||||
string 作物名
|
||||
}
|
||||
|
||||
品種 {
|
||||
int id PK
|
||||
int 作物_id FK
|
||||
string 品種名
|
||||
}
|
||||
```
|
||||
|
||||
@@ -79,6 +109,24 @@ erDiagram
|
||||
| 細目_分筆番号 | 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
|
||||
@@ -90,7 +138,9 @@ erDiagram
|
||||
### 特記事項
|
||||
- **中山間_IDは一部NULL**: 39筆中2筆が中山間の対象外(`NaN`)
|
||||
- **同じ共済区画に複数の実圃場**: 例えば共済キー「2-2」には3つの実圃場が紐づく
|
||||
- **面積単位**: DB内部では「反」と「m2」の両方を保持する(変換: 1反=1000m2)
|
||||
- **1つの実圃場が複数の申請区画に紐づくケースもある**: M:N関係で対応
|
||||
- **面積単位**: DB内部では「反(DecimalField)」と「m2(IntegerField)」の両方を保持する(変換: 1反=1000m2)
|
||||
- **グループ機能**: group_name でエリア分け、display_order で表示順を制御
|
||||
|
||||
---
|
||||
|
||||
@@ -110,6 +160,18 @@ erDiagram
|
||||
| 本地面積 (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) 漢字地名
|
||||
@@ -129,97 +191,114 @@ erDiagram
|
||||
|
||||
### ファイル情報
|
||||
- **行数:** 71行(71区画)
|
||||
- **列数:** 17列(うち使用するのは一部)
|
||||
- **列数:** 17列(全列をDBに保存)
|
||||
|
||||
### カラム定義(主要なもの)
|
||||
### カラム定義(全17列)
|
||||
|
||||
| カラム名 | データ型 | 必須 | 説明 | 例 |
|
||||
|---------|---------|-----|------|---|
|
||||
| ID | int | ○ | 中山間区画の識別子 | 50 |
|
||||
| ID | int | ○ | 中山間区画の識別子 | 1 |
|
||||
| 中山間 | string | ○ | 中山間フラグ | "〇" |
|
||||
| 大字 | string | ○ | 大字名 | "口神ノ川" |
|
||||
| 字 | string | ○ | 字名 | "壱町切" |
|
||||
| 地番 | int | ○ | 地番 | 1694 |
|
||||
| 農地面積 | int | ○ | 面積(単位: m2) | 2900 |
|
||||
| 作付け品目 | string | △ | (役場が記入、システムでは上書き) | "ニラ" |
|
||||
| 交付金額 | int | △ | 交付金額 | 37700 |
|
||||
| 地番 | 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 大字 字 地番 農地面積 作付け品目 交付金額
|
||||
50 口神ノ川 笹ヶ谷 374 2698 米 xxxxxx
|
||||
ID 中山間 大字 字 地番 枝番 地目 農地面積 植栽面積 作付け品目 協定管理者 所有者 傾斜度 基本金額 交付金額
|
||||
1 〇 口神ノ川 壱町切 1694 - 田 2900 2748 ニラ 神山倫子 1/29 23200 37700
|
||||
2 〇 口神ノ川 大窪 490 1 田 652 490 野菜 谷脇誠一 谷脇史男 1/20 15204 18824
|
||||
```
|
||||
|
||||
### 特記事項
|
||||
- **使用する列は限定的**: システムでは主に「ID」「大字」「字」「地番」「農地面積」を使用
|
||||
- **作付け品目は上書き**: 役場が記入した「作付け品目」は参考情報で、システムで上書きする
|
||||
- **全17列をDBに保存**: 将来どの列が必要になるかわからないため全保存
|
||||
- **地番・枝番は文字列型**: 「イ」「ロ」などの非数値データが入る
|
||||
- **作付け品目は参考情報**: 役場が記入した値。システムの作付け計画(Plan)とは別
|
||||
- **面積の不整合は許容**: 共済マスタと同様、実圃場との差異は受け入れる
|
||||
|
||||
---
|
||||
|
||||
## 4. 作付け計画データ(システム内部)
|
||||
|
||||
### テーブル定義
|
||||
### DBモデル(Plan)
|
||||
|
||||
| カラム名 | データ型 | 必須 | 説明 |
|
||||
|---------|---------|-----|------|
|
||||
| id | int | ○ | 主キー(自動採番) |
|
||||
| field_id | int | ○ | 実圃場ID(外部キー) |
|
||||
| year | int | ○ | 年度(2025など) |
|
||||
| crop | string | ○ | 作物(「米」「トウモロコシ」など) |
|
||||
| variety | string | △ | 品種(「にこまる」など) |
|
||||
| planting_date | date | △ | 播種日/定植日(Phase 2) |
|
||||
| harvest_date | date | △ | 収穫日(Phase 2) |
|
||||
| notes | text | △ | 備考 |
|
||||
| フィールド名 | データ型 | 必須 | 説明 |
|
||||
|-------------|---------|-----|------|
|
||||
| id | int (自動) | ○ | 主キー |
|
||||
| field | FK → Field | ○ | 実圃場(外部キー) |
|
||||
| year | IntegerField | ○ | 年度(2025など) |
|
||||
| crop | FK → Crop, nullable | △ | 作物(外部キー) |
|
||||
| variety | FK → Variety, nullable | △ | 品種(外部キー、NULLあり) |
|
||||
| notes | TextField, nullable | △ | 備考 |
|
||||
|
||||
### 制約
|
||||
- **ユニーク制約**: (field_id, year) - 1つの圃場に対して1年度につき1つの作付け計画のみ
|
||||
- **ユニーク制約**: (field, year) - 1つの圃場に対して1年度につき1つの作付け計画のみ
|
||||
- Phase 2で二毛作対応する場合は、この制約を見直す
|
||||
|
||||
### 備考
|
||||
- planting_date(播種日)、harvest_date(収穫日)は Phase 2 で追加予定
|
||||
- crop, variety は外部キー(文字列ではなくリレーション)
|
||||
|
||||
---
|
||||
|
||||
## 5. 作物マスタ
|
||||
|
||||
### 作物リスト
|
||||
- 米
|
||||
- トウモロコシ
|
||||
- エンドウ
|
||||
- 野菜
|
||||
- その他
|
||||
### DBモデル(Crop)
|
||||
|
||||
### 品種の登録方法
|
||||
| フィールド名 | データ型 | 説明 |
|
||||
|-------------|---------|------|
|
||||
| id | int (自動) | 主キー |
|
||||
| name | CharField(50), unique | 作物名 |
|
||||
|
||||
**すべての作物で統一されたUI:**
|
||||
- プリセット品種から選択
|
||||
- その場で新しい品種を追加可能
|
||||
- 作物による操作の違いなし
|
||||
### DBモデル(Variety)
|
||||
|
||||
### プリセット品種の例
|
||||
| フィールド名 | データ型 | 説明 |
|
||||
|-------------|---------|------|
|
||||
| id | int (自動) | 主キー |
|
||||
| crop | FK → Crop | 所属する作物 |
|
||||
| name | CharField(100) | 品種名 |
|
||||
|
||||
#### 米
|
||||
- にこまる
|
||||
- たちはるか
|
||||
- たちはるか(特栽)
|
||||
**制約:** (crop, name) のペアで一意
|
||||
|
||||
#### トウモロコシ
|
||||
- (ユーザーが追加)
|
||||
|
||||
#### エンドウ
|
||||
- 久留米豊
|
||||
|
||||
#### 野菜
|
||||
- (ユーザーが追加)
|
||||
|
||||
#### その他
|
||||
- 完全休耕
|
||||
- 緑肥(ヘアリーベッチ)
|
||||
- 緑肥(レンゲ)
|
||||
- 景観作物(コスモス)
|
||||
- 景観作物(ヒマワリ)
|
||||
|
||||
### 実装上の注意
|
||||
- すべての作物で `Variety` テーブルに品種を登録
|
||||
- 「作付けしない」系を特別扱いしない
|
||||
- UIは完全に統一
|
||||
### 作物・品種の管理方針
|
||||
- 初期データは投入しない(管理画面またはUIから登録)
|
||||
- すべての作物で品種選択UIは統一
|
||||
- 「作付けしない」系も特別扱いしない(「その他」作物の品種として扱う)
|
||||
- 品種の追加・削除は作付け計画画面から可能
|
||||
|
||||
---
|
||||
|
||||
@@ -233,31 +312,31 @@ ID 大字 字 地番 農地面積 作付け品目 交付金額
|
||||
|
||||
2. **中山間マスタのインポート**
|
||||
- `中山間.ods` を読み込み
|
||||
- `OfficialChusankanField` テーブルに保存
|
||||
- `OfficialChusankanField` テーブルに全17列を保存
|
||||
|
||||
3. **実圃場データのインポート**
|
||||
- `吉田農地台帳.ods` を読み込み
|
||||
- `Field` テーブルに保存
|
||||
- 同時に共済・中山間マスタとの紐付けを確立:
|
||||
- `細目_耕地番号` + `細目_分筆番号` → `OfficialKyosaiField.id` を外部キーとして保存
|
||||
- `中山間_ID` → `OfficialChusankanField.id` を外部キーとして保存
|
||||
- 同時に共済・中山間マスタとの紐付けを確立(ManyToMany):
|
||||
- `細目_耕地番号` + `細目_分筆番号` → `OfficialKyosaiField` を検索して M:N 関連に追加
|
||||
- `中山間_ID` → `OfficialChusankanField` を検索して M:N 関連に追加
|
||||
|
||||
### 紐付けロジック
|
||||
|
||||
```python
|
||||
# 共済マスタとの紐付け
|
||||
# 共済マスタとの紐付け(M:N)
|
||||
kyosai_record = OfficialKyosaiField.objects.get(
|
||||
k_num=row['細目_耕地番号'],
|
||||
s_num=row['細目_分筆番号']
|
||||
)
|
||||
field.kyosai_field_ref = kyosai_record.id
|
||||
field.kyosai_fields.add(kyosai_record)
|
||||
|
||||
# 中山間マスタとの紐付け
|
||||
# 中山間マスタとの紐付け(M:N)
|
||||
if pd.notna(row['中山間_ID']):
|
||||
chusankan_record = OfficialChusankanField.objects.get(
|
||||
c_id=int(row['中山間_ID'])
|
||||
c_id=str(int(row['中山間_ID']))
|
||||
)
|
||||
field.chusankan_field_ref = chusankan_record.id
|
||||
field.chusankan_fields.add(chusankan_record)
|
||||
```
|
||||
|
||||
---
|
||||
@@ -268,115 +347,50 @@ if pd.notna(row['中山間_ID']):
|
||||
|
||||
**出力形式:**
|
||||
- A4サイズ、縦向き
|
||||
- ヘッダー: 「水稲共済細目書(◯◯年度)」
|
||||
- 表形式(罫線あり)
|
||||
- ヘッダー: 「水稲共済細目書(YYYY年度)」
|
||||
- 表形式(罫線あり)、1行1区画(31行)
|
||||
- フォントサイズ: 10pt
|
||||
- ページ番号(複数ページの場合)
|
||||
- ページ番号あり
|
||||
|
||||
**表の列:**
|
||||
```
|
||||
耕地番号 | 分筆番号 | 地名地番 | 漢字地名 | 本地面積(m2) | 作付品目 | 品種 | 備考
|
||||
1 | 1 | 四万十町... | 四万十町... | 2.2 | 米 |にこまる|
|
||||
2 | 1 | 四万十町... | 四万十町... | 25.4 | 米 |にこまる|
|
||||
2 | 2 | 四万十町... | 四万十町... | 12.0 |米,野菜|にこまる,トマト|複数圃場
|
||||
```
|
||||
|
||||
| 列名 | データ元 | 備考 |
|
||||
|------|---------|------|
|
||||
| 漢字地名 | OfficialKyosaiField.kanji_name | 例: 四万十町 笹ヶ谷 374-1 |
|
||||
| 耕地-分筆 | k_num + "-" + s_num | 例: 2-1 |
|
||||
| 本地面積 (m2) | OfficialKyosaiField.area | |
|
||||
| 作付品目 | Plan.crop.name | システムの作付け計画から |
|
||||
| 品種 | Plan.variety.name | 〃 |
|
||||
| 圃場名称 | Field.name | 吉田農地台帳の名称 |
|
||||
|
||||
**集計ロジック:**
|
||||
```python
|
||||
def generate_kyosai_pdf(year):
|
||||
# 1. データ集約(CSVと同じロジック)
|
||||
output_rows = []
|
||||
for kyosai in OfficialKyosaiField.objects.all().order_by('k_num', 's_num'):
|
||||
fields = Field.objects.filter(kyosai_field_ref=kyosai.id)
|
||||
plans = Plan.objects.filter(field__in=fields, year=year)
|
||||
|
||||
crops = list(set([p.crop.name for p in plans if p.crop]))
|
||||
varieties = list(set([p.variety.name for p in plans if p.variety]))
|
||||
|
||||
row = {
|
||||
'耕地番号': kyosai.k_num,
|
||||
'分筆番号': kyosai.s_num,
|
||||
'地名地番': kyosai.address,
|
||||
'漢字地名': kyosai.kanji_name,
|
||||
'本地面積(m2)': kyosai.area,
|
||||
'作付品目': ','.join(crops) if crops else '未設定',
|
||||
'品種': ','.join(varieties) if varieties else '',
|
||||
'備考': f'{len(fields)}筆合算' if len(fields) > 1 else ''
|
||||
}
|
||||
output_rows.append(row)
|
||||
|
||||
# 2. HTMLテンプレートで表を生成
|
||||
html = render_to_string('reports/kyosai_template.html', {
|
||||
'year': year,
|
||||
'rows': output_rows
|
||||
})
|
||||
|
||||
# 3. HTML → PDF変換
|
||||
pdf = HTML(string=html).write_pdf()
|
||||
return pdf
|
||||
```
|
||||
|
||||
**HTMLテンプレート例(reports/kyosai_template.html):**
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<style>
|
||||
@page { size: A4; margin: 2cm; }
|
||||
body { font-family: "MS Gothic", monospace; font-size: 10pt; }
|
||||
h1 { text-align: center; font-size: 14pt; margin-bottom: 20px; }
|
||||
table { width: 100%; border-collapse: collapse; }
|
||||
th, td { border: 1px solid black; padding: 5px; text-align: center; }
|
||||
th { background-color: #f0f0f0; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>水稲共済細目書({{ year }}年度)</h1>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>耕地番号</th>
|
||||
<th>分筆番号</th>
|
||||
<th>地名地番</th>
|
||||
<th>漢字地名</th>
|
||||
<th>本地面積(m2)</th>
|
||||
<th>作付品目</th>
|
||||
<th>品種</th>
|
||||
<th>備考</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in rows %}
|
||||
<tr>
|
||||
<td>{{ row.耕地番号 }}</td>
|
||||
<td>{{ row.分筆番号 }}</td>
|
||||
<td>{{ row.地名地番 }}</td>
|
||||
<td>{{ row.漢字地名 }}</td>
|
||||
<td>{{ row.本地面積(m2) }}</td>
|
||||
<td>{{ row.作付品目 }}</td>
|
||||
<td>{{ row.品種 }}</td>
|
||||
<td>{{ row.備考 }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
1. 共済マスタ(31区画)をループ
|
||||
2. 各共済区画に紐づく実圃場を取得(M:N関係)
|
||||
3. 紐づく実圃場の作付け情報を集約(作物名・品種名・圃場名をカンマ区切り)
|
||||
4. HTMLテンプレートで表を生成 → WeasyPrint で PDF変換
|
||||
5. 複数の実圃場が紐づく場合 → 作物・品種・圃場名をカンマ区切りで列挙
|
||||
6. 作付け未設定の場合 → 「未設定」と表示
|
||||
|
||||
### 中山間交付金申請
|
||||
|
||||
**出力形式:**
|
||||
- A4サイズ、縦向き
|
||||
- ヘッダー: 「中山間地域等直接支払交付金(◯◯年度)」
|
||||
- 表形式(罫線あり)
|
||||
- A4サイズ、横向き(列が多いため)
|
||||
- ヘッダー: 「中山間地域等直接支払交付金(YYYY年度)」
|
||||
- 表形式(罫線あり)、1行1区画(71行)
|
||||
- ページ番号あり
|
||||
|
||||
**表の列:**
|
||||
```
|
||||
ID | 大字 | 字 | 地番 | 農地面積(m2) | 作付品目 | 品種 | 備考
|
||||
50 | 口神ノ川 | 笹ヶ谷 | 374 | 2698 | 米,野菜 | にこまる,トマト | 7筆合算
|
||||
```
|
||||
|
||||
| 列名 | データ元 | 備考 |
|
||||
|------|---------|------|
|
||||
| 所在地 | 大字+字+地番+枝番 連結 | 例: 口神ノ川 壱町切 1694 |
|
||||
| 植栽面積 | OfficialChusankanField.planting_area | m2 |
|
||||
| 作付け品目(元) | OfficialChusankanField.original_crop | 役場記入の値 |
|
||||
| 協定管理者 | OfficialChusankanField.manager | |
|
||||
| 所有者 | OfficialChusankanField.owner | |
|
||||
| 作物 | Plan.crop.name | システムの作付け計画から |
|
||||
| 品種 | Plan.variety.name | 〃 |
|
||||
| 圃場名称 | Field.name | 吉田農地台帳の名称 |
|
||||
|
||||
**集計ロジック:**
|
||||
- 水稲共済と同様、中山間マスタをループして実圃場を集約 → HTMLテンプレート → PDF
|
||||
@@ -395,7 +409,7 @@ ID | 大字 | 字 | 地番 | 農地面積(m2) | 作付品目 | 品種 | 備考
|
||||
- または、全削除→再インポートの2段階処理
|
||||
|
||||
### バックアップ
|
||||
- 全テーブルをCSV/Excelでエクスポート可能にする
|
||||
- 全テーブルをCSV/Excelでエクスポート可能にする(サーバー移行時にも利用)
|
||||
- 最低5年分のデータを保持(補助金監査対応)
|
||||
|
||||
---
|
||||
@@ -404,15 +418,17 @@ ID | 大字 | 字 | 地番 | 農地面積(m2) | 作付品目 | 品種 | 備考
|
||||
|
||||
システム内部では以下のように統一:
|
||||
|
||||
| 表示単位 | DB保存 | 変換式 |
|
||||
|---------|--------|--------|
|
||||
| 反(たん) | m2 | 1反 = 1000m2 |
|
||||
| アール(a) | m2 | 1a = 100m2 |
|
||||
| ヘクタール(ha) | m2 | 1ha = 10000m2 |
|
||||
| 用途 | 単位 | DB型 | 変換式 |
|
||||
|-----|------|------|--------|
|
||||
| 実圃場の面積(DB保存) | 反 + m2 | DecimalField + IntegerField | 1反 = 1000m2 |
|
||||
| 共済マスタの面積(DB保存) | m2 | IntegerField | - |
|
||||
| 中山間マスタの面積(DB保存) | m2 | IntegerField | - |
|
||||
| 画面表示 | 反 | - | area_m2 / 1000 |
|
||||
|
||||
**実装方針:**
|
||||
- DB内部は全て `m2` で保存(整数型)
|
||||
- 表示時にユーザー設定に応じて変換(デフォルトは「反」)
|
||||
- 実圃場: `area_tan`(DecimalField)と `area_m2`(IntegerField)の両方を保持
|
||||
- 共済・中山間マスタ: `area` は m2(IntegerField)で保存
|
||||
- 表示時は「反」に統一(1反 = 10a = 1000m2)
|
||||
- 入力時は「反」で受け付け、内部で `m2` に変換
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user