# 適格請求書を考慮した利益計算実装完了

## 実装概要

受注書のコスト項目において、協力会社の適格請求書番号の有無により利益計算を行う機能を実装しました。

## 実装内容

### 1. バックエンド（PHP）

#### 協力会社の適格請求書番号取得機能
- **メソッド追加**: `KTPWP_Supplier_Data::get_qualified_invoice_number_by_supplier_id()` メソッドを追加
- **データベース**: `ktp_supplier`テーブルの`qualified_invoice_number`カラムを使用
- **AJAXハンドラー**: `ktp_get_supplier_qualified_invoice_number` アクションを実装

#### 適格請求書番号取得のロジック
```php
// 協力会社の適格請求書番号を取得
$qualified_invoice_number = $supplier_data->get_qualified_invoice_number_by_supplier_id($supplier_id);
// 空文字の場合は適格請求書なしとして扱う
$has_qualified_invoice = !empty($qualified_invoice_number);
```

### 2. フロントエンド（JavaScript）

#### 適格請求書番号取得機能
- **関数追加**: `getSupplierQualifiedInvoiceNumber()` 関数を追加
- **AJAX通信**: 協力会社IDから適格請求書番号を取得
- **エラーハンドリング**: 適切なフォールバック機能

#### 利益計算ロジックの改善
- **関数更新**: `calculateProfitWithQualifiedInvoice()` 関数を改善
- **税区分考慮**: 協力会社の税区分（内税・外税）を考慮した計算
- **適格請求書判定**: 適格請求書番号の有無による計算方法の分岐

#### 利益計算の詳細
```javascript
// 適格請求書ありの場合：税抜金額をコストとする（仕入税額控除可能）
if (hasQualifiedInvoice) {
    if (taxCategory === '外税') {
        taxAmount = amount * (taxRate / 100);
        costAmount = amount - taxAmount;
    } else {
        taxAmount = amount * (taxRate / 100) / (1 + taxRate / 100);
        costAmount = amount - taxAmount;
    }
    qualifiedInvoiceCost += costAmount;
} else {
    // 適格請求書なしの場合：税込金額をコストとする（仕入税額控除不可）
    nonQualifiedInvoiceCost += amount;
}
```

### 3. 表示機能

#### 利益表示の改善
- **関数更新**: `updateProfitDisplayWithQualifiedInvoice()` 関数を改善
- **詳細表示**: 適格請求書コストと非適格請求書コストを分けて表示
- **デバッグ機能**: デバッグモード時の詳細ログ出力

#### 表示例
```
利益 : 23,456円 (適格請求書コスト: 3,224円, 非適格請求書コスト: 500円)
```

### 4. データベース構造

#### 既存の構造を活用
- **協力会社テーブル**: `ktp_supplier`テーブルの`qualified_invoice_number`カラム
- **マイグレーション**: 既存のマイグレーションファイルを活用
- **データ整合性**: 既存データとの互換性を保持

## 技術的特徴

### 1. 計算精度
- **税額計算**: 内税・外税に応じた正確な税額計算
- **切り上げ処理**: 統一された切り上げ処理
- **小数点処理**: 適切な小数点以下の処理

### 2. パフォーマンス
- **非同期処理**: AJAX通信による非同期処理
- **キャッシュ機能**: 効率的なデータ取得
- **エラーハンドリング**: 適切なフォールバック機能

### 3. ユーザビリティ
- **リアルタイム計算**: 入力変更時の即座な計算更新
- **視覚的フィードバック**: 利益の増減を色分けで表示
- **詳細情報**: 適格請求書の有無による違いを明確に表示

## 使用方法

### 1. 協力会社の適格請求書番号設定
- 管理画面で協力会社を編集
- 「適格請求書番号」フィールドに番号を入力
- 空欄の場合は適格請求書なしとして扱われる

### 2. コスト項目での自動計算
- 協力会社を選択すると自動的に適格請求書番号が取得される
- 適格請求書の有無に応じて利益が自動計算される
- 利益表示に詳細な内訳が表示される

### 3. デバッグ機能
- 画面右上のデバッグボタンでデバッグモードを切り替え
- ブラウザの開発者ツールで詳細ログを確認
- 計算過程の詳細を確認可能

## テスト機能

### テストファイル
- **ファイル名**: `test_qualified_invoice_profit_calculation.php`
- **使用方法**: `?test_qualified_invoice=1` パラメータでアクセス
- **テスト内容**: 適格請求書あり・なしの両方のケースをテスト

### テストケース
1. **適格請求書ありの協力会社**: 税抜金額をコストとして計算
2. **適格請求書なしの協力会社**: 税込金額をコストとして計算
3. **利益計算例**: 実際の利益計算を検証

## 今後の拡張予定

### 1. 発注メールの最適化
- 適格請求書番号の記載
- 税額明細の詳細表示
- 計算根拠の明記

### 2. レポート機能
- 適格請求書別の利益分析
- 税額控除効果の可視化
- 月次・年次レポート

### 3. 設定機能
- 適格請求書の一括設定
- 税区分の一括変更
- 計算方法のカスタマイズ

## 実装完了日

2024年12月19日

## 実装者

AI Assistant (Claude Sonnet 4)

## 備考

- 既存のUI/UXを維持
- 操作カラムのデザインは変更なし
- 後方互換性を保持
- エラーハンドリングを強化 