# 帳票設計書 5-Return Order Report

## 概要

本ドキュメントは、InvenTreeシステムにおける返品オーダーレポートの設計仕様を記載する。このレポートは顧客からの返品処理に使用され、返品品目一覧をPDF形式で出力する帳票である。

### 本帳票の処理概要

本帳票は、顧客からの返品処理を管理するための返品オーダー（Return Order）の詳細レポートを生成する。返品品目、シリアル番号、参照番号などの情報を一覧形式で出力する。

**業務上の目的・背景**：販売後のアフターサービスにおいて、返品処理は顧客満足度と在庫管理の両面で重要な業務である。本帳票は、返品内容を明確に記録し、返品品の受入検査や在庫への再入庫処理の基準となる。また、品質改善のための分析資料としても活用される。

**帳票の利用シーン**：顧客からの返品受付時の確認書、返品品の受入検査時の照合資料、在庫への再入庫処理の根拠資料、品質管理部門での返品原因分析として利用される。

**主要な出力内容**：
1. 返品オーダーの基本情報（参照番号、顧客名）
2. 返品明細（部品、シリアル番号、参照番号、備考）
3. 追加ライン項目

**帳票の出力タイミング**：返品オーダー詳細画面から、返品受付時または処理完了時に出力される。

**帳票の利用者**：カスタマーサポート担当者、品質管理担当者、在庫管理担当者

## 帳票種別

返品受付書

## 利用画面

| 画面No | 画面名 | URL/ルーティング | 出力操作 |
|--------|--------|-----------------|---------|
| - | 返品オーダー詳細画面 | /sales/return-order/{ro_id}/ | レポート出力ボタン |
| - | レポート印刷API | /api/report/print/ | POSTリクエスト |

## 出力形式

### 基本仕様

| 項目 | 内容 |
|-----|------|
| ファイル形式 | PDF |
| 用紙サイズ | A4（設定により変更可能） |
| 向き | 縦 |
| ファイル名 | output.pdf（テンプレート設定により変更可能） |
| 出力方法 | ダウンロード |
| 文字コード | UTF-8 |

### PDF固有設定

| 項目 | 内容 |
|-----|------|
| パスワード保護 | 無 |
| 印刷制限 | 無 |
| 電子署名 | 無 |

## 帳票レイアウト

### レイアウト概要

```
┌─────────────────────────────────────┐
│  [Customer Logo]   Return Order     │
│                    {prefix}{ref}    │
│                    {customer_name}  │
├─────────────────────────────────────┤
│  Line Items                         │
│  ┌─────────────────────────────┐   │
│  │Part   |Serial|Ref  |Note    │   │
│  │-------|------|-----|--------|   │
│  │...    |...   |...  |...     │   │
│  ├─────────────────────────────┤   │
│  │Extra Line Items             │   │
│  │...    |...   |...  |...     │   │
│  └─────────────────────────────┘   │
├─────────────────────────────────────┤
│  {date}                            │
└─────────────────────────────────────┘
```

### ヘッダー部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | 顧客ロゴ | 顧客企業ロゴ | company_image customer | 画像（幅150px） |
| 2 | タイトル | "Return Order" | 固定値 | テキスト（h3） |
| 3 | 参照番号 | プレフィックス + 参照番号 | prefix, reference | テキスト |
| 4 | 顧客名 | 顧客企業名 | customer.name | テキスト |

### 明細部

| No | 項目名 | 説明 | データ取得元 | 表示形式 | 列幅 |
|----|-------|------|-------------|---------|-----|
| 1 | Part | 部品名 + サムネイル | line.item.part.full_name | テキスト+画像 | 自動 |
| 2 | Serial Number | シリアル番号 | line.item.serial | テキスト | 自動 |
| 3 | Reference | 参照番号 | line.reference | テキスト | 自動 |
| 4 | Note | 備考 | line.notes | テキスト | 自動 |

### フッター部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | 日付 | 出力日 | date | 日付形式 |

## 出力条件

### 抽出条件

| 条件名 | 説明 | 必須 |
|-------|------|-----|
| ro_id | 対象返品オーダーのID | Yes |
| lines | 返品ライン項目 | - |
| extra_lines | 追加ライン項目 | - |

### ソート順

| 優先度 | 項目 | 昇順/降順 |
|-------|------|---------|
| 1 | ライン項目のデフォルト順序 | - |

### 改ページ条件

明細項目が多い場合、ページ下端で自動改ページ

## データベース参照仕様

### 参照テーブル一覧

| テーブル名 | 用途 | 結合条件 |
|-----------|------|---------|
| order_returnorder | 返品オーダー情報 | 直接参照 |
| company_company | 顧客情報 | returnorder.customer_id |
| order_returnorderlineitem | 返品明細 | returnorderlineitem.order_id |
| order_returnorderextraline | 追加明細 | returnorderextraline.order_id |
| stock_stockitem | 在庫品目 | lineitem.item_id |
| part_part | 部品情報 | stockitem.part_id |

### テーブル別参照項目詳細

#### order_returnorderlineitem

| 参照項目（カラム名） | 帳票項目との対応 | 取得条件 | 備考 |
|-------------------|----------------|---------|------|
| item | 在庫品目 | - | ForeignKey to StockItem |
| reference | 参照番号 | - | - |
| notes | 備考 | - | - |

## 計算仕様

### 計算項目一覧

| 項目名 | 計算式 | 端数処理 | 備考 |
|-------|-------|---------|------|
| - | - | - | 本帳票に計算項目なし（金額なし） |

## 処理フロー

### 出力フロー

```mermaid
flowchart TD
    A[出力要求] --> B[パラメータ検証]
    B --> C[ReturnOrder取得]
    C --> D[LineItems取得]
    D --> E[ExtraLines取得]
    E --> F[コンテキスト生成]
    F --> G[HTMLレンダリング]
    G --> H[WeasyPrintでPDF変換]
    H --> I[DataOutput保存]
    I --> J[ファイル返却]
```

## エラー処理

### エラーケース一覧

| エラー種別 | 発生条件 | 表示メッセージ | 対処方法 |
|----------|---------|--------------|---------|
| データなし | 指定された返品オーダーが存在しない | No valid items provided to template | 有効な返品オーダーIDを指定 |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定データ件数 | 1返品オーダーあたり最大20明細 |
| 目標出力時間 | 3秒以内 |
| 同時出力数上限 | システム設定による |

## セキュリティ考慮事項

- 認証済みユーザーのみがレポートを出力可能
- 返品オーダーデータへのアクセス権限は既存の権限モデルに従う
- 出力ログはDataOutputモデルに記録

## 備考

- テンプレートファイル: `src/backend/InvenTree/report/templates/report/inventree_return_order_report.html`
- 基底テンプレート: `inventree_order_report_base.html`を継承
- 金額情報は含まれない（PO/SOとは異なる）
- i18n対応済み（多言語対応）

---

## コードリーディングガイド

本帳票を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | models.py | `src/backend/InvenTree/order/models.py` | ReturnOrderReportContext（246-266行目）でコンテキスト構造を確認 |

#### Step 2: テンプレートを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | inventree_return_order_report.html | `src/backend/InvenTree/report/templates/report/` | 帳票全体構造 |

**主要処理フロー**:
- **9-16行目**: ヘッダー部
- **18-60行目**: 明細テーブル（通常ライン、追加ライン）
- **35行目**: line.item.part.full_nameで部品名取得
- **41行目**: line.item.serialでシリアル番号取得

### プログラム呼び出し階層図

```
ReportPrint.post() [api.py:253]
    │
    └─ ReportTemplate.print() [report/models.py:465]
           │
           ├─ get_context()
           │      │
           │      └─ returnorder.report_context()
           │             │
           │             ├─ lines (ReturnOrderLineItem QuerySet)
           │             ├─ extra_lines (ReturnOrderExtraLine QuerySet)
           │             └─ customer (Company)
           │
           └─ render() → HTML → PDF
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| inventree_return_order_report.html | `src/backend/InvenTree/report/templates/report/` | テンプレート | 返品オーダーレポートのHTMLテンプレート |
| inventree_order_report_base.html | `src/backend/InvenTree/report/templates/report/` | テンプレート | オーダー系共通基底テンプレート |
| models.py | `src/backend/InvenTree/order/` | ソース | ReturnOrder, ReturnOrderLineItemモデル定義 |
| models.py | `src/backend/InvenTree/stock/` | ソース | StockItemモデル定義 |
