4.5 KiB
4.5 KiB
あなたは業務用Webアプリケーションを実装するPython/Djangoエンジニアです。 以下の仕様を満たすDjangoアプリケーションの設計および実装を行ってください。
目的
クレジットカード明細CSVを取り込み、 「会社経費」と「家計」を人間が確認・編集しながら分離管理できるWebアプリを構築する。
将来的なCSVブランド追加・軽量機械学習導入を前提とするが、 現時点ではルール+人間確定を主軸とする。
技術スタック
- Python 3.x
- Django
- PostgreSQL
- フロントエンドはHTML + 最小限のJavaScript(Drag & Drop)
- PDF生成は HTML → PDF(WeasyPrint想定)
CSV仕様(現状)
-
出光クレジットカードCSVを第一対応とする
-
CSV内には以下2種類の行が混在する
- ヘッダ行(カード名称・支払日・請求額など)
- 明細行(利用日・利用先・金額)
-
行ごとに列数が異なる
-
ブランド判定はヘッダ文言で行う
-
今後ブランド追加を想定し、CSVパーサは分離設計とする
アーキテクチャ要件
CSV処理
- CSVファイルをDrag & Dropでアップロード
- 文字コードを自動判定
- CSV内容からブランド種別を判定
- ブランド別パーサで明細を抽出
- 正規化したデータを共通expensesテーブルへ投入
- 行単位でハッシュを生成し、二重登録を防止する
データベース設計
expenses(経費明細)
- id
- use_date(日付)
- description(利用先・摘要)
- amount(金額)
- store_id(店舗区分、NULL可)
- expense_category_id(経費区分、NULL可)
- owner_type(company/personal/pending)
- note(備考)
- source(CSV種別:idemitsu 等)
- source_hash(行ハッシュ)
- ai_score(将来用、NULL可)
- human_confirmed(人間確定フラグ)
- is_canceled(取り消しフラグ)
- created_at / updated_at
UNIQUE(source, source_hash)
マスタ
- stores(本店・支店)
- expense_categories(材料費・消耗品費など)
画面仕様
1. CSV取込画面
- Drag & Drop対応
- 取込件数・重複件数を表示
2. 明細編集画面(最重要)
-
明細一覧テーブル表示
-
編集可能項目:
- 店舗区分(select)
- 経費区分(select)
- 家計 / 経費フラグ
- 備考
-
金額・日付は原則readonly
-
1行単位でAJAX保存
3. 月次レポート画面
- 年月指定
- 店舗別合計
- 経費区分別合計
- 未分類件数の警告表示
4. PDF出力
- 月次レポートと同一HTMLをPDF化
- A4縦、印刷可能レイアウト
設計思想・制約
- CSV取り込み時点では自動判断しない
- 人間が一度確定したデータを教師データとして将来活用可能にする
- Pythonの軽量機械学習(scikit-learn想定)を後から追加できる構成にする
- ロジックはViewに書かず、service層に分離する
成果物
- Djangoプロジェクト構成案
- models.py
- CSVパーサ構成
- views.py / services.py の役割分離
- 主要HTMLテンプレート(骨格で可)
- 集計クエリ例
- PDF生成コード例
過剰なUI装飾やフロントフレームワークは不要。 業務実装として堅牢・拡張可能なコードを優先する。
サブスク判定ルール案(暫定)
候補リスト(利用先文字列 + 金額)
- APPLE COM BILL 480 -> 事務用品費、ウェザーニュース
- APPLE COM BILL 150 -> 事務用品費、iCloud 追加Disk
- APPLE COM BILL 1200 -> 未設定、アップルニュージック
- ABEMAプレミアム 1080 -> 未設定、個人の娯楽
- OPENAI *CHATGPT SUBSCR 3305 -> 事務用品費、GPT
- エックスサ−バ−/M 2200 -> 通信費 //文字の揺らぎ 下と同じ
- エックスサ-バ-/M 2200 -> 通信費、Nextcloud運営VPS
- お名前.com ドメインサービス 268/270 -> 通信費、ドメインサービス
- お名前.comレンタルサ−バ− 2153 -> 通信費、レンタルサーバー(価格変動あり/表記揺れあり)
- お名前.comレンタルサ-バ- 2612 -> 通信費、レンタルサーバー(価格変動あり/表記揺れあり)
- アット・ニフティ 5361 -> (要確認)