プロジェクトルールの更新、.gitignoreにSample-dataを追加、業務用Webアプリケーションの仕様書を新規作成
This commit is contained in:
130
仕様書.md
Normal file
130
仕様書.md
Normal file
@@ -0,0 +1,130 @@
|
||||
あなたは業務用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処理
|
||||
|
||||
1. CSVファイルをDrag & Dropでアップロード
|
||||
2. 文字コードを自動判定
|
||||
3. CSV内容からブランド種別を判定
|
||||
4. ブランド別パーサで明細を抽出
|
||||
5. 正規化したデータを共通expensesテーブルへ投入
|
||||
6. 行単位でハッシュを生成し、二重登録を防止する
|
||||
|
||||
---
|
||||
|
||||
## データベース設計
|
||||
|
||||
### expenses(経費明細)
|
||||
|
||||
* id
|
||||
* use_date(日付)
|
||||
* description(利用先・摘要)
|
||||
* amount(金額)
|
||||
* store_id(店舗区分、NULL可)
|
||||
* expense_category_id(経費区分、NULL可)
|
||||
* is_business(会社経費 / 家計フラグ、NULL可)
|
||||
* note(備考)
|
||||
* source(CSV種別:idemitsu 等)
|
||||
* source_hash(行ハッシュ)
|
||||
* ai_score(将来用、NULL可)
|
||||
* human_confirmed(人間確定フラグ)
|
||||
* 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装飾やフロントフレームワークは不要。
|
||||
業務実装として堅牢・拡張可能なコードを優先する。
|
||||
Reference in New Issue
Block a user