akira
|
4a1db5ef27
|
#12 対応を入れました。
畔塗記録 API に total_area_tan を追加して、一覧の各記録に「圃場数 / 面積合計」が出るようにしました。あわせて、作成・編集フォームの「対象圃場一覧」にも、選択中の合計面積を表示しています。主な変更は serializers.py、tests.py、page.tsx、index.ts です。
確認できたこと:
docker compose -f docker-compose.develop.yml exec backend python manage.py test apps.levee_work OK
docker exec keinasystem_frontend npm run build OK
まだコミットはしていません。必要ならこのままコミットして push します。
|
2026-04-06 17:23:06 +09:00 |
|
akira
|
c90c6210e1
|
Add fertilization plan merge workflow
|
2026-04-06 16:49:44 +09:00 |
|
akira
|
c675b7b7ae
|
Move all fertilization entries on variety change
|
2026-04-05 18:42:09 +09:00 |
|
akira
|
ae0249be69
|
Add allocation variety change history UI
|
2026-04-05 16:55:44 +09:00 |
|
akira
|
1d5bcc9dd6
|
Move rice transplant entries on variety change
|
2026-04-05 16:49:03 +09:00 |
|
akira
|
98814299cf
|
Move unspread fertilization entries on variety change
|
2026-04-05 16:43:26 +09:00 |
|
akira
|
21fb2323eb
|
Add plan variety change tracking
|
2026-04-05 16:32:57 +09:00 |
|
akira
|
5c2d17fe0a
|
大丈夫ではあるのですが、1本 migration が足りていませんでした。原因はこれです。
0006 で seedling_boxes_per_tan を installed_seedling_boxes にリネーム
その結果、DB 上の field メタ情報には元の表示名が残る
モデル側では今 verbose_name='設置苗箱枚数'
Django がその差分を AlterField として検出
なので、出ていた 0009_alter_ricetransplantentry_installed_seedling_boxes.py は正当です。こちらで 0009_alter_ricetransplantentry_installed_seedling_boxes.py を追加しました。
次はこれで進めれば大丈夫です。
git pull でこの migration を server 側へ反映
docker compose exec backend python manage.py migrate
必要なら docker compose exec backend python manage.py makemigrations plans --dry-run --verbosity 3 で警告が消えたか確認
これで plans の未反映 migration 警告は消えるはずです。
|
2026-04-05 12:17:04 +09:00 |
|
akira
|
491f05eee8
|
その判断で進めました。在庫管理を先に固めるように切り替えて、手元の実装もそちらを優先して直しています。
今回入れたのは、在庫履歴の編集・削除対応と、種子資材を資材マスタ側で品種に直接結び付ける流れです。backend/apps/materials/views.py と backend/apps/materials/serializers.py で stock-transactions の更新を許可しつつ、計画や実績に紐づく履歴はロック扱いにしました。画面側は frontend/src/app/materials/page.tsx、frontend/src/app/materials/_components/StockOverview.tsx、frontend/src/app/materials/_components/StockTransactionForm.tsx を更新して、手動登録の入出庫履歴をあとから編集・削除できるようにしています。
あわせて frontend/src/app/materials/masters/page.tsx と frontend/src/app/materials/_components/MaterialForm.tsx で、種子 タブから品種を直接選んで紐付ける形にしました。重複を避けるため、作付け計画側の品種管理モーダル frontend/src/app/allocation/page.tsx から種子資材の紐付け UI は外しています。Issue #2 にもこの方針でコメント追記済みです。
確認できたのは python3 -m py_compile までで、フロントのビルドは frontend/node_modules が無いためまだ回していません。次はブラウザで在庫管理の操作感を確認してから、田植え計画側の細部を詰めるのがよさそうです。
|
2026-04-05 11:43:03 +09:00 |
|
akira
|
a38472e4a0
|
品種ごとの種子在庫前提まで実装を進めました。
主な変更は、seed 資材種別の追加と Variety.seed_material の導入です。backend/apps/materials/models.py、backend/apps/plans/models.py、backend/apps/plans/serializers.py で、田植え計画が作物在庫ではなく品種に紐づく種子資材の現在庫を参照するように切り替えました。マイグレーションは backend/apps/materials/migrations/0005_material_seed_type.py と backend/apps/plans/migrations/0008_variety_seed_material.py を追加しています。
画面側は、frontend/src/app/materials/page.tsx と frontend/src/app/materials/masters/page.tsx に「種子」タブを追加し、frontend/src/app/allocation/page.tsx の品種管理モーダルで品種ごとに種子在庫資材を設定できるようにしました。田植え計画画面 frontend/src/app/rice-transplant/_components/RiceTransplantEditPage.tsx も、苗箱数 列中心に整理し、種もみkg 列を削除、反当苗箱枚数 の列反映と ≈ / ↩ の四捨五入トグルを施肥計画寄りの操作感に寄せています。仕様書 document/16_マスタードキュメント_田植え計画編.md も更新済みです。
確認できたのは python3 -m py_compile backend/apps/materials/models.py backend/apps/materials/serializers.py backend/apps/plans/models.py backend/apps/plans/serializers.py backend/apps/plans/views.py までです。frontend/node_modules が無いためフロントのビルド確認はまだできていません。Issue #2 にも反映内容をコメント済みです。必要なら次にコミットします。
|
2026-04-05 11:22:07 +09:00 |
|
akira
|
11b36b28a5
|
Issue #2 に最新の理解を記録し、その内容で仕様書と実装を修正しました。
document/16_マスタードキュメント_田植え計画編.md は、「行ごとに保持するのは圃場の苗箱数」「列側に反当苗箱枚数を持つ」「種もみg/箱 は全体共通値」という前提に更新しています。コード側は backend/apps/plans/models.py と backend/apps/plans/serializers.py で計画ヘッダに seedling_boxes_per_tan を追加し、backend/apps/plans/migrations/0007_ricetransplantplan_seedling_boxes_per_tan.py も作成しました。画面は frontend/src/app/rice-transplant/_components/RiceTransplantEditPage.tsx を施肥計画寄りに組み直し、列単位のデフォルト反映と四捨五入、行ごとの苗箱数入力に寄せています。frontend/src/types/index.ts も合わせて更新済みです。
確認できたのはバックエンドの構文チェックまでで、python3 -m py_compile backend/apps/plans/models.py backend/apps/plans/serializers.py backend/apps/plans/views.py は通過しています。フロントのビルド確認まではこの環境では回していません。Issue #2 にも今回の反映内容をコメント済みです。
|
2026-04-05 10:53:24 +09:00 |
|
akira
|
95c90dd699
|
Adjust rice transplant plan to store installed box counts
|
2026-04-05 10:26:14 +09:00 |
|
akira
|
0c57dd7886
|
Add rice transplant planning feature
|
2026-04-04 17:26:55 +09:00 |
|
akira
|
b7b9818855
|
feat: add levee work records
|
2026-04-04 11:32:26 +09:00 |
|
Akira
|
9f96d1f820
|
散布実績レビュー修正: バグ修正・仕様適合・デッドコード削除
- 候補API: 運搬済みフィルタ(date IS NOT NULL)を追加。
delivery_plan_id指定時は全明細表示、年度全体時のみ日付フィルタ適用
- StockTransaction.spreading_item: CASCADE→SET_NULL に修正(仕様7.3準拠)
- perform_destroy: SET_NULL対応でUSEを明示削除してからsession削除
- ConfirmSpreadingModal.tsx: 未使用のため削除
- FertilizerEditPage.tsx: 旧散布確定関連デッドコード全除去
(isConfirmed/confirmedAt state, handleUnconfirm, 確定取消ボタン, 確定済みバナー)
- services.py: 未使用のto_decimal_or_zero削除
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-17 19:56:13 +09:00 |
|
Akira
|
140d5e5a4d
|
施肥散布実績機能を実装し運搬・作業記録・在庫連携を追加
|
2026-03-17 19:28:52 +09:00 |
|
Akira
|
9dbbb48ee0
|
運搬計画PDF: 袋数を整数 or 小数1桁で表示(4桁表示を修正)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-16 17:15:14 +09:00 |
|
Akira
|
1c27a66691
|
分配計画を運搬計画に再設計: 軽トラ1回分を基本単位とする運搬回モデルを導入
実運用のワークフロー(複数施肥計画混在・軽トラ複数回・肥料指定)に合わせ、
旧 DistributionPlan/Group/GroupField を DeliveryPlan/Group/GroupField/Trip/TripItem に置き換え。
施肥計画への直接FK廃止→年度ベースで全施肥計画を横断。
回ごとの日付記録、圃場の回間移動、対象肥料フィルタ、回ごとPDF出力に対応。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-16 16:29:01 +09:00 |
|
Akira
|
72b4d670fe
|
完璧に動作しています。
テスト 結果
確定取消 API ✅ is_confirmed: false, confirmed_at: null
USE トランザクション削除 ✅ current_stock が 27.5→32 に復帰
引当再作成 ✅ reserved_stock = 5.000 に復帰
追加した変更:
stock_service.py:81-93 — unconfirm_spreading(): USE削除→確定フラグリセット→引当再作成
fertilizer/views.py — unconfirm アクション(POST /api/fertilizer/plans/{id}/unconfirm/)
fertilizer/page.tsx — 一覧に「確定取消」ボタン(確定済み計画のみ表示)
FertilizerEditPage.tsx — 編集画面ヘッダーに「確定取消」ボタン + 在庫情報再取得
|
2026-03-15 13:28:02 +09:00 |
|
Akira
|
497bc87c24
|
在庫管理機能 Phase 1 実装(apps/materials + フロントエンド)
Backend:
- apps/materials 新規作成(Material, FertilizerProfile, PesticideProfile, StockTransaction)
- 資材マスタ CRUD API(/api/materials/materials/)
- 入出庫履歴 API(/api/materials/stock-transactions/)
- 在庫集計 API(/api/materials/stock-summary/)
- 既存 Fertilizer に material OneToOneField 追加(0005マイグレーション、データ移行込み)
Frontend:
- /materials: 在庫一覧画面(タブフィルタ、履歴展開、入出庫モーダル)
- /materials/masters: 資材マスタ管理(肥料/農薬/その他タブ、インライン編集)
- Navbar に「在庫管理」メニュー追加
- Material/StockTransaction/StockSummary 型定義追加
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-03-14 15:42:47 +09:00 |
|
Akira
|
422a6781c5
|
mail: distinguish xserver mailboxes in account labels
|
2026-03-05 14:17:25 +09:00 |
|
Akira
|
5145217481
|
施肥計画の計算設定を保存・復元し、未入力圃場のみ計算オプションを追加
- FertilizationPlanにcalc_settings JSONFieldを追加(migration 0004)
- 編集画面を開くと前回の計算方式・パラメータが復元される
- 「未入力圃場のみ」チェックで既存値を保持したまま新規圃場だけ計算可能
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-02 10:50:56 +09:00 |
|
Akira
|
466eef128c
|
分配計画機能を実装
施肥計画の圃場を配置場所単位でグループ化し、グループ×肥料の集計表を
表示・PDF出力できる機能を追加。
- Backend: DistributionPlan/Group/GroupField モデル (migration 0003)
- API: GET/POST/PUT/DELETE/PDF (/api/fertilizer/distribution/)
- Frontend: 一覧・新規作成・編集画面 (/distribution)
- Navbar に分配計画メニューを追加
- 集計プレビューはクライアントサイド計算(API不要)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-02 09:43:20 +09:00 |
|
Akira
|
deb03efaed
|
FertilizationEntry.fertilizer を CASCADE → PROTECT に変更
施肥計画で使用中の肥料を削除すると計画エントリも消えていた問題を修正。
PROTECT にすることで、使用中の肥料は削除不可となり
フロントエンドのエラーバナーで理由が表示される。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-01 17:19:18 +09:00 |
|
Akira
|
f207f5de27
|
施肥計画機能を追加(年度×品種単位のマトリクス管理)
- Backend: apps/fertilizer を新規追加
- Fertilizer(肥料マスタ)、FertilizationPlan、FertilizationEntry モデル
- 肥料マスタ・施肥計画 CRUD API
- 3方式の自動計算API(反当袋数・均等配分・反当チッソ成分量)
- 作付け計画から圃場候補を取得する API
- WeasyPrint による PDF 出力(圃場×肥料=袋数 マトリクス表)
- Frontend: app/fertilizer を新規追加
- 施肥計画一覧(年度セレクタ・PDF出力・編集・削除)
- 肥料マスタ管理(インライン編集)
- 施肥計画編集(品種選択→圃場自動取得→肥料追加→自動計算→マトリクス手動調整)
- Navbar に「施肥計画」メニューを追加(Sprout アイコン)
- Cursor ルールファイル・連携ガイドを削除(Claude Code 単独運用へ)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-03-01 12:14:29 +09:00 |
|
Akira
|
2c515cca6f
|
気象データ基盤を実装
- apps/weather 新規作成(WeatherRecord モデル、5種APIエンドポイント)
- GET /api/weather/records/ 日次データ一覧
- GET /api/weather/summary/ 月別・年間集計
- GET /api/weather/gdd/ 有効積算温度(GDD)計算
- GET /api/weather/similarity/ 類似年分析(開花・収穫予測の基礎)
- POST /api/weather/sync/ Windmill向け日次更新(APIキー認証)
- management command: fetch_weather(初回一括・差分取得)
- Crop.base_temp フィールド追加(GDD基準温度、default=0.0℃)
- docker-compose.yml: MAIL_API_KEY 環境変数を追加(ローカルテスト修正)
- requirements.txt: requests>=2.31 追加
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-02-28 13:23:09 +09:00 |
|
Akira
|
407d915b35
|
パスワード変更機能を追加
- バックエンド: POST /api/auth/change-password/ エンドポイントを追加
- フロントエンド: /settings/password ページを追加(現在のPW確認・8文字バリデーション)
- Navbar: ログアウトボタン横に鍵アイコンでパスワード変更リンクを追加
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-02-25 09:51:03 +09:00 |
|
Akira
|
da2154ddca
|
本番デプロイ用設定ファイルを追加
- backend/Dockerfile.prod: gunicorn で起動する本番用 Dockerfile
- frontend/Dockerfile.prod: マルチステージビルドの本番用 Dockerfile
- docker-compose.prod.yml: Traefik 連携・本番用 compose 設定
- main.keinafarm.net でフロントエンド・バックエンドを公開
- /api/ はバックエンド(priority=10)、それ以外はフロントエンド(priority=5)
- .env.production.example: 本番環境変数のサンプル
- settings.py: ALLOWED_HOSTS・CORS_ALLOWED_ORIGINS を環境変数から設定可能に
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-02-24 14:32:12 +09:00 |
|
Akira
|
b19e08a8dd
|
メール処理履歴画面にフィードバック機能を追加
- 全メール(重要・通常問わず)に対してフィードバックボタンを追加
- PATCH /api/mail/emails/<pk>/feedback/ エンドポイントを追加(JWT認証)
- フィードバックモーダル: 重要/普通/今後通知しない/常に通知 の4択
- never_notify/always_notify 選択時はアドレス/ドメインの適用範囲を選択可能
- gmail_service アカウントのフィルタオプションを追加
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
2026-02-24 13:52:21 +09:00 |
|
Akira
|
36ced412dc
|
2つ目のgmailアカウントを処理
|
2026-02-23 16:52:15 +09:00 |
|
Akira
|
ae4e60f156
|
転送検出の仕組み
転送されたメールは元の「To:」ヘッダーに infoseek.jp が残ります:
To: akiracraftwork@infoseek.jp ← Outlook が転送時に保持
このドメインが forwarding_map に一致したら account_code = "infoseek" に切り替えます。
変更まとめ
ファイル 変更内容
models.py infoseek を ACCOUNT_CHOICES に追加 + migration
mail_filter.flow.json forwarding_map追加、転送検出ロジック、ローカルにデプロイ済み
history/page.tsx ACCOUNT_LABELS と フィルタに infoseek 追加
infoseek.jpにテストメールを送って、次回フロー実行時に「Infoseek (転送)」として表示されるか確認してください。
|
2026-02-23 12:42:03 +09:00 |
|
Akira
|
04b1ca1bb9
|
実装完了
Backend(Django)
backend/apps/mail/serializers.py
MailEmailListSerializer を新規追加(フロントエンド向けメール一覧用)
feedback_token フィールドを含む(フィードバックリンク表示用)
backend/apps/mail/views.py
MailEmailCreateView → MailEmailView に変更(GET+POST を統合)
GET /api/mail/emails/ : JWT認証でメール履歴取得(最新100件、account/verdict フィルター対応)
POST /api/mail/emails/ : APIキー認証でWindmillからのメール記録(既存動作を維持)
get_permissions() でメソッドごとに認証方法を切替
MailStatsView を新規追加
GET /api/mail/stats/ : 今日の処理件数、LINE通知数、フィードバック待ち、ルール数を返す
backend/apps/mail/urls.py
emails/ → MailEmailView(GET+POST)
stats/ → MailStatsView を追加
Frontend(Next.js)
frontend/src/app/mail/history/page.tsx (新規作成)
メール処理履歴の一覧テーブル
アカウント・LLM判定でフィルタリング可能
LLM判定・フィードバック状態をバッジで表示
フィードバックトークンがあれば「回答」リンクを表示
frontend/src/app/dashboard/page.tsx (再設計)
2カラムのモジュールカード形式に変更
作付け計画カード: 年度セレクタ、集計数値、作物別集計、クイックアクセス
メール通知カード: 今日の処理件数、LINE通知数、フィードバック待ち、ルール数、メール履歴・ルール管理ボタン
|
2026-02-22 15:01:50 +09:00 |
|
Akira
|
df16ab1ee0
|
変更内容まとめ
バックエンド
models.py — MailSender.rule に always_notify 追加、MailEmail.feedback にも追加、マイグレーション適用済み
views.py — FeedbackView.post が always_notify を受け取ったら MailSender ルールを作成(never_notify と同じ仕組み)
フロントエンド
feedback/[token]/page.tsx — 4択目「🔔 常に通知してほしい」を追加。スコープ選択(アドレス/ドメイン)もあり。色はteal系で区別
mail/rules/page.tsx — 追加フォームにルール種別セレクタを追加、一覧に「常に通知」バッジ(teal)を表示
Windmill側の使い方(メモ)
GET /api/mail/sender-rule/ のレスポンスに "rule": "always_notify" が返ってきたら、LLMをスキップして llm_verdict: "important" で直接 POST /api/mail/emails/ を呼べばOKです。
|
2026-02-22 09:49:28 +09:00 |
|
Akira
|
7a1aa81f9f
|
実装完了
作成・変更したファイル
バックエンド(新規):
apps/mail/models.py — MailSender, MailEmail, MailNotificationToken
apps/mail/serializers.py
apps/mail/views.py — Windmill用API、フィードバック、ルール管理
apps/mail/urls.py
apps/mail/admin.py
マイグレーション(自動生成・適用済み)
バックエンド(変更):
settings.py — apps.mail 追加、MAIL_API_KEY/FRONTEND_URL 環境変数
urls.py — /api/mail/ 追加
フロントエンド(新規):
mail/feedback/[token]/page.tsx — 認証不要、フィードバック3択+スコープ選択
mail/rules/page.tsx — ルール管理(一覧・追加・削除)
フロントエンド(変更):
Navbar.tsx — 「メールルール」メニュー追加
types/index.ts — MailSender, MailEmailFeedback 型追加
次のステップ(Windmill側)
Keinaシステム側の実装は完了しています。次はWindmillにIMAPポーリングスクリプトを書く必要があります。Windmillのスクリプトが必要になったタイミングでお声がけください。
|
2026-02-22 09:27:27 +09:00 |
|
Akira
|
4afe37968b
|
A-1(ダッシュボード画面)の実装が完了しました。
実装内容:
バックエンド: summary APIに total_fields, assigned_fields, unassigned_fields を追加
フロントエンド: /dashboard に新画面を作成
概要サマリー: 全圃場数 / 作付け済み / 未割当(警告アイコン付き)
作物別集計テーブル(筆数・面積・合計行)
クイックアクセス: 4つのボタン(作付け計画・圃場管理・帳票出力・データ取込)
年度セレクタで切替可能
Navbar: 「ホーム」ボタン追加、KeinaSystemロゴクリックでダッシュボードへ
ルート (/): /allocation → /dashboard にリダイレクト先変更
http://localhost:3000/dashboard で確認できます。
残りタスク: A-7(検索・フィルタ)のみです
|
2026-02-19 13:07:16 +09:00 |
|
Akira
|
cce119b1a8
|
A-2 実装内容まとめ:
バックエンド: POST /api/plans/bulk_update/ API(field_ids, year, crop, variety を受けて一括設定)
フロントエンド: チェックボックス列、全選択/個別選択、一括操作バー(作物・品種セレクタ + 確認ダイアログ)
|
2026-02-19 12:29:54 +09:00 |
|
Akira
|
8b5e0fc66e
|
A-6 完了。 本セッションの進捗まとめ:
タスク 内容 状態
A-3 前年度コピーボタン ✅ 完了
A-4 品種のインライン追加・削除 ✅ 完了
A-5 PDFプレビュー機能 ✅ 完了
A-6 エクスポート機能 ✅ 完了
残りタスク:
A-2: チェックボックス・一括操作
A-1: ダッシュボード画面
A-7: 検索・フィルタ
確認ポイント:
作付け計画 (/allocation): 年度セレクタの横に「前年度コピー」「品種管理」ボタン、品種セレクトに「+ 新しい品種を追加...」
帳票出力 (/reports): 各帳票にプレビュー/ダウンロードの2ボタン
データ取込 (/import): ページ下部に「データエクスポート」(ZIPダウンロード)
|
2026-02-19 12:21:17 +09:00 |
|
Akira
|
64e7701456
|
実装サマリー
バックエンド(3ファイル変更)
ファイル 変更内容
views.py OfficialKyosaiFieldViewSet、OfficialChusankanFieldViewSet(ReadOnly)、紐づけ追加/解除の4つのAPIビューを追加
urls.py 紐づけ管理用の4パス追加
serializers.py linked_field_namesフィールドを追加(紐づけ先の圃場名を返す)
keinasystem/urls.py /api/kyosai-fields/、/api/chusankan-fields/ をルーターに登録
新規API一覧
メソッド エンドポイント 動作確認
GET /api/kyosai-fields/ 31件返却
GET /api/chusankan-fields/ 71件返却
POST /api/fields/{id}/kyosai-links/ {"added":1}
DELETE /api/fields/{id}/kyosai-links/{kyosai_id}/ 204
POST /api/fields/{id}/chusankan-links/ 同上
DELETE /api/fields/{id}/chusankan-links/{chusankan_id}/ 同上
フロントエンド(3ファイル変更)
ファイル 変更内容
types/index.ts linked_field_namesプロパティ追加
fields/[id]/page.tsx 紐づけ管理UI全面実装(+追加ボタン、x解除ボタン、検索付きモーダル、面積参考表示)
fields/page.tsx 「共済」「中山間」紐づけ件数列を追加
http://localhost:3000/fields/4 などで圃場詳細画面を開いて動作確認できます。
|
2026-02-18 14:02:40 +09:00 |
|
Akira
|
d70b5ee551
|
E-1 完了サマリー
実施内容
# 変更内容 ファイル
1 OfficialChusankanField に 11 フィールド追加(17列化) models.py
2 中山間インポート: 17 列すべて読み込み対応 views.py
3 共済インポート: 面積カラム名不一致バグ修正 + a→m2 変換(×100) views.py
4 シリアライザに 11 フィールド追加 serializers.py
5 共済 PDF: A4 縦、表形式、@page 設定、ページ番号、中国語除去 kyosai_template.html
6 中山間 PDF: A4 横、表形式、@page 設定、ページ番号、中国語除去 chusankan_template.html
7 PDF 生成ロジック: フラットテーブル、null 安全、prefetch_related reports/views.py
8 既存データ再インポート(共済面積修正 + 中山間 17 列埋め) —
9 Playwright E2E テスト 11 件全 PASS verify-fixes.spec.ts
追加発見・修正したバグ
共済 ODS の 本地面積 (m2) カラム名にスペースが含まれ、インポート時に面積が全件 0 になっていた
面積の単位がアール(a)であることが判明。m2 への変換 (×100) を追加
PDF は http://localhost:3000/reports からダウンロードして確認できます。
|
2026-02-17 15:27:14 +09:00 |
|
Akira
|
1b02fd6f13
|
今回の変更
C-2: 共済マスタ unique 制約修正
models.py: k_num 単独unique → (k_num, s_num) ペアunique に変更
s_num を null=True → default='' に変更(unique_together で null は扱いにくいため)
views.py: インポート時のルックアップを k_num 単独 → (k_num, s_num) ペアに修正
C-4: 面積フィールド m2 統一
models.py: 共済・中山間両方の area を DecimalField(ha) → IntegerField(m2) に変更
payment_amount も DecimalField → IntegerField に統一
views.py: インポート時の area 値を int() で変換
types/index.ts: TypeScript型を string → number に更新
A-8: 圃場詳細に共済/中山間情報表示
fields/[id]/page.tsx: 編集フォームの下に共済情報テーブル・中山間情報テーブルを追加
壊れていたJSX(重複フラグメント)も修正
追加修正
FieldViewSet の AllowAny → IsAuthenticated に変更(D-4 の漏れ)
マイグレーション 0005 を作成
注意事項
Docker起動後に python manage.py migrate が必要です
既存の共済/中山間データがある場合、area の値は DecimalField → IntegerField に変換されます(既にm2で保存されているはずなので小数点以下が切り捨てられるだけ)
|
2026-02-17 13:57:02 +09:00 |
|
Akira
|
50e23872f3
|
ドキュメント更新(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(圃場詳細に共済/中山間情報表示)です。続けますか?
|
2026-02-17 10:56:09 +09:00 |
|
Akira
|
9c21caa017
|
見直し前の最終
|
2026-02-16 13:45:16 +09:00 |
|
Akira
|
4486722949
|
圃場グループ機能
|
2026-02-15 15:51:51 +09:00 |
|
Akira
|
2cfd528173
|
修正完了
Plan モデルの variety フィールドをNull許容に変更しました:
1. モデル修正: blank=True, null=True を追加
2. マイグレーション作成・適用:
- makemigrations → 0002_alter_plan_variety.py 作成
- migrate → 適用完了
APIテスト成功:
POST /api/plans/ with variety: null → HTTP 201 Created
作付け計画画面で品種なしで作物を保存できるようになりました。
|
2026-02-15 14:50:52 +09:00 |
|
Akira
|
0edfaef71f
|
修正完了
修正内容
1. 実圃場データ (import_yoshida_fields)
- clean_int_str() ヘルパー関数を追加
- .0 サフィックスの除去対応
- 中山間_ID のカンマ区切り対応(配列分割して処理)
- 複数の中山間マスタへの紐付け対応
def clean_int_str(val):
if pd.isna(val):
return None
s = str(val).strip()
if not s:
return None
if s.endswith('.0'):
s = s[:-2]
return s
# "61,62" -> ["61", "62"] をループで処理
2. 中山間マスタ (import_chusankan_master)
- 数字を含まないID((合計外) 等)をスキップ
- 交付金額の安全な数値変換
if not any(char.isdigit() for char in c_id):
continue # スキップ
バックエンドを再起動しました。再度テストしてみてください。
|
2026-02-15 14:27:36 +09:00 |
|
Akira
|
987b7572b7
|
下記の通りお返事きましたので、実データでテストしてください。
|
2026-02-15 14:19:15 +09:00 |
|
Akira
|
58be8c72f8
|
修正完了
backend/apps/fields/views.py を修正しました:
修正内容
1. 共済マスタ取込 (import_kyosai_master)
- k_num → 耕地番号
- s_num → 分筆番号
- address → 地名 地番
- kanji_name → 漢字地名
- area → 本地面積(m2)
2. 実圃場データ取込 (import_yoshida_fields)
- name → 名称
- address → 住所
- area_tan → 面積(反)
- area_m2 → 面積(反) * 1000 (自動計算)
- owner_name → 地主
- raw_kyosai_k_num → 細目_耕地番号
- raw_kyosai_s_num → 細目_分筆番号
- raw_chusankan_id → 中山間_ID
3. 追加した堅牢化
- df.columns = df.columns.str.strip() でカラム名の余白を除去
バックエンドを再起動しました。再度インポートを実行してみてください。
|
2026-02-15 14:12:50 +09:00 |
|
Akira
|
923dd5dece
|
Day 9 完了
実装内容:
1. backend/apps/fields/views.py - FieldViewSetをModelViewSetに変更(書き込み可能)
2. frontend/src/components/Navbar.tsx - 圃場管理リンク追加
3. frontend/src/app/fields/page.tsx - 圃場一覧画面
4. frontend/src/app/fields/new/page.tsx - 新規作成画面
5. frontend/src/app/fields/[id]/page.tsx - 編集画面
API CRUDテスト結果:
- POST /api/fields/ → 201 Created
- GET /api/fields/ → 200 OK
- PATCH /api/fields/{id}/ → 200 OK
- DELETE /api/fields/{id}/ → 204 No Content
ブラウザで http://localhost:3000/fields から圃場のCRUD操作が可能です。
次の工程に移りますか?
|
2026-02-15 13:34:32 +09:00 |
|
Akira
|
afd434cd4c
|
Day 8 完了
実装内容:
1. frontend/src/types/index.ts - 型定義(Field, Crop, Variety, Plan)
2. frontend/src/components/Navbar.tsx - ナビゲーションバー(ログアウトボタン)
3. backend/apps/fields/views.py - FieldViewSet追加
4. backend/apps/fields/serializers.py - 新規作成(Fieldシリアライザー)
5. backend/apps/fields/urls.py - ViewSetルート追加
6. frontend/src/app/allocation/page.tsx - 作付け計画画面(作物・品種選択可能)
7. frontend/src/app/page.tsx - 自動リダイレクト(ログイン状態による)
API動作確認:
- /api/fields/ → HTTP 200(圃場データなし)
- /api/plans/crops/ → HTTP 200(2作物:水稲・大豆)
- /api/plans/?year=2025 → HTTP 200
テスト: http://localhost:3000/ → 自動リダイレクトで /login または /allocation
※ 現在圃場データがないため、画面には「圃場データがありません。インポートを実行してください。」と表示されます。
次の工程に移りますか?
|
2026-02-15 13:23:40 +09:00 |
|
Akira
|
964c34471c
|
Day 7 完了
実装内容:
1. 依存ライブラリ追加: axios, lucide-react, clsx, tailwind-merge
2. APIクライアント作成: frontend/src/lib/api.ts - JWT認証対応
3. ログイン画面作成: frontend/src/app/login/page.tsx - 日本語UI
4. レイアウト更新: frontend/src/app/layout.tsx - Noto Sans JP追加
5. JWTエンドポイント追加: backend/keinasystem/urls.py にJWT URL追加
テスト結果:
- ログインAPI (/api/auth/jwt/create/) → HTTP 200 OK
- テストユーザー: admin / password123
ブラウザで http://localhost:3000/login にアクセスして動作確認できます。
次の工程に移りますか?
|
2026-02-15 13:04:48 +09:00 |
|