diff --git a/OLLAMA.md b/OLLAMA.md index 864f6ef..289e1d7 100644 --- a/OLLAMA.md +++ b/OLLAMA.md @@ -7,3 +7,147 @@ - 商品データは手入力しsqliteで管理します - 値引きも商品データとしてsqliteで管理します +## プロジェクト計画(スマートフォン用 見積納品請求領収書発行システム) + +--- + +### 1. 目的・概要 +- Flutterで構築するモバイルアプリ +- 現時点では請求書(領収書)発行機能のみ +- 将来的に Odoo とオンライン同期を実装 +- データはローカル SQLite に保存 +- 顧客情報は電話帳からインポート/手入力 +- 商品・値引き情報は手入力で SQLite に保存 + +--- + +### 2. 主要機能一覧 +| 機能 | 説明 | 優先度 | +|------|------|--------| +| **請求書作成** | 顧客選択 → 商品・数量入力 → 合計・税・値引き計算 → PDF/画像生成 | ★★★★★ | +| **顧客管理** | 連絡先インポート、手入力、編集、削除 | ★★★★☆ | +| **商品管理** | 商品名・単価・値引き設定、編集、削除 | ★★★★☆ | +| **データ永続化** | SQLite(sqflite)で顧客・商品・請求書履歴保存 | ★★★★★ | +| **PDF/画像出力** | `printing` / `pdf` パッケージで請求書を生成 | ★★★★☆ | +| **将来の同期** | Odoo REST API 連携(認証・CRUD) | ★★☆☆☆ | +| **UI/UX** | Material Design、レスポンシブ、アクセシビリティ | ★★★★★ | + +--- + +### 3. 技術スタック +- **フロントエンド**: Flutter 3.x, Dart +- **データベース**: `sqflite` + `path_provider` +- **PDF生成**: `pdf`, `printing` +- **状態管理**: `provider`(または Riverpod) +- **テスト**: `flutter_test`, `mockito` +- **CI/CD**: GitHub Actions(ビルド・テスト) + +--- + +### 4. データモデル(SQLite) +| テーブル | カラム | 型 | 備考 | +|----------|--------|----|------| +| `customers` | id | INTEGER PRIMARY KEY AUTOINCREMENT | | +| | name | TEXT | | +| | phone | TEXT | | +| | address | TEXT | | +| | email | TEXT | | +| `products` | id | INTEGER PRIMARY KEY AUTOINCREMENT | | +| | name | TEXT | | +| | unit_price | REAL | | +| | discount | REAL | 0〜1 の割合 | +| `invoices` | id | INTEGER PRIMARY KEY AUTOINCREMENT | | +| | customer_id | INTEGER | FK | +| | date | TEXT | ISO8601 | +| | total | REAL | | +| | tax | REAL | | +| | discount_total | REAL | | +| `invoice_items` | id | INTEGER PRIMARY KEY AUTOINCREMENT | | +| | invoice_id | INTEGER | FK | +| | product_id | INTEGER | FK | +| | quantity | INTEGER | | +| | unit_price | REAL | | +| | discount | REAL | | + +--- + +### 5. 画面設計(ワイヤーフレーム) +1. **ホーム** + - 「請求書作成」ボタン + - 「顧客一覧」ボタン + - 「商品一覧」ボタン +2. **顧客一覧** + - 検索バー + - 顧客カード(名前・電話) + - 追加ボタン(連絡先インポート/手入力) +3. **商品一覧** + - 検索バー + - 商品カード(名前・単価・値引き) + - 追加ボタン +4. **請求書作成** + - 顧客選択ドロップダウン + - 商品追加リスト(+ボタン) + - 数量入力フィールド + - 合計・税・値引き表示 + - 「PDF生成」ボタン +5. **請求書プレビュー** + - PDF/画像表示 + - 共有/保存ボタン + +--- + +### 6. 開発フロー +1. **環境構築** + - Flutter SDK 3.x インストール + - `pubspec.yaml` に必要パッケージ追加 +2. **データベース設計** + - `db_helper.dart` でテーブル作成・CRUD実装 +3. **モデルクラス** + - `Customer`, `Product`, `Invoice`, `InvoiceItem` を作成 +4. **状態管理** + - `CustomerProvider`, `ProductProvider`, `InvoiceProvider` を実装 +5. **UI実装** + - 画面ごとに `StatelessWidget` / `StatefulWidget` を作成 + - `ListView.builder` でデータ表示 +6. **PDF生成** + - `pdf` パッケージでレイアウト設計 + - `printing` でプレビュー・保存・共有 +7. **テスト** + - 単体テスト(モデル・DB) + - widget テスト(画面遷移・入力) +8. **ビルド・デプロイ** + - Android/iOS 向けビルド + - GitHub Actions で自動テスト・ビルド + +--- + +### 7. 将来の Odoo 同期設計(ロードマップ) +- **認証**: OAuth2 / API キー +- **エンドポイント**: `/api/invoices`, `/api/customers`, `/api/products` +- **同期戦略**: + - **プッシュ**: ローカルで作成した請求書を Odoo に POST + - **プル**: Odoo から顧客・商品データを取得しローカルにマージ +- **エラーハンドリング**: ネットワーク失敗時はローカルにキュー保存 +- **UI**: 「同期」ボタン、同期ステータス表示 + +--- + +### 8. 重要ポイント & リスク +- **データ整合性**: SQLite の外部キー制約を有効化 +- **パフォーマンス**: 大量データ時はページング実装 +- **セキュリティ**: データ暗号化(`sqflite_sqlcipher`)検討 +- **ユーザー体験**: 入力補完、バリデーション、エラーメッセージ + +--- + +### 9. 次のステップ +1. `pubspec.yaml` に必要パッケージを追加 +2. `db_helper.dart` を作成しテーブルを生成 +3. モデルクラスを実装 +4. 画面構成を決め、最小限の UI を作成 +5. PDF 生成を試作し、レイアウトを確定 + +--- + +**以上が、現在の要件に基づくプロジェクト計画です。** +次に進める際は、上記の順序でタスクを分割し、GitHub Issues で管理するとスムーズです。