Files
Card-data-sorting/仕様書.md

150 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
あなたは業務用Webアプリケーションを実装するPython/Djangoエンジニアです。
以下の仕様を満たすDjangoアプリケーションの設計および実装を行ってください。
## 目的
クレジットカード明細CSVを取り込み、
「会社経費」と「家計」を人間が確認・編集しながら分離管理できるWebアプリを構築する。
将来的なCSVブランド追加・軽量機械学習導入を前提とするが、
現時点ではルール+人間確定を主軸とする。
---
## 技術スタック
* Python 3.x
* Django
* PostgreSQL
* フロントエンドはHTML + 最小限のJavaScriptDrag & Drop
* PDF生成は HTML → PDFWeasyPrint想定
---
## 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可
* owner_typecompany/personal/pending
* note備考
* sourceCSV種別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装飾やフロントフレームワークは不要。
業務実装として堅牢・拡張可能なコードを優先する。
---
## サブスク判定ルール案(暫定)
### 候補リスト(利用先文字列 + 金額)
-    480 -> 事務用品費、ウェザーニュース
-    150 -> 事務用品費、iCloud 追加Disk
-    1200 -> 未設定、アップルニュージック
- ABEMAプレミアム 1080 -> 未設定、個人の娯楽
-    3305 -> 事務用品費、GPT
- エックスサ−バ−/M 2200 ->  通信費               //文字の揺らぎ 下と同じ
- エックスサ-バ-/M 2200 -> 通信費、Nextcloud運営VPS
- お名前.com ドメインサービス 268/270 -> 通信費、ドメインサービス
- お名前.comレンタルサ−バ− 2153 -> 通信費、レンタルサーバー(価格変動あり/表記揺れあり)
- お名前.comレンタルサ-バ- 2612 -> 通信費、レンタルサーバー(価格変動あり/表記揺れあり)
- アット・ニフティ 5361 -> (要確認)