# 帳票設計書 7-Stock Location Report

## 概要

本ドキュメントは、InvenTreeシステムにおける在庫ロケーションレポートの設計仕様を記載する。このレポートは指定ロケーションの在庫品目一覧をPDF形式で出力する帳票である。

### 本帳票の処理概要

本帳票は、特定の在庫ロケーション（倉庫、棚、保管場所等）に存在する在庫品目の一覧レポートを生成する。棚卸作業や在庫確認に使用される。

**業務上の目的・背景**：在庫管理において、特定ロケーションの在庫状況を把握することは、棚卸作業、在庫移動、ピッキング作業の効率化に不可欠である。本帳票は、ロケーション単位での在庫確認を可能にし、物理在庫と帳簿在庫の照合作業を支援する。

**帳票の利用シーン**：定期棚卸時のカウントシート、在庫移動作業時の確認リスト、ロケーション再編成時の現状把握資料、監査対応時の在庫証跡として利用される。

**主要な出力内容**：
1. ロケーション情報（ロケーション名）
2. 在庫品目一覧（部品名、IPN、数量、備考）

**帳票の出力タイミング**：在庫ロケーション詳細画面から、棚卸前や在庫確認時に出力される。

**帳票の利用者**：倉庫管理者、棚卸担当者、在庫管理担当者

## 帳票種別

一覧表（在庫リスト）

## 利用画面

| 画面No | 画面名 | URL/ルーティング | 出力操作 |
|--------|--------|-----------------|---------|
| - | 在庫ロケーション詳細画面 | /stock/location/{location_id}/ | レポート出力ボタン |
| - | レポート印刷API | /api/report/print/ | POSTリクエスト |

## 出力形式

### 基本仕様

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

### PDF固有設定

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

## 帳票レイアウト

### レイアウト概要

```
┌─────────────────────────────────────┐
│  Stock location items               │
│  {location_name}                    │
├─────────────────────────────────────┤
│  ┌─────────────────────────────┐   │
│  │Part     |IPN  |Qty  |Note   │   │
│  │---------|-----|-----|-------|   │
│  │part_1   |ipn1 |100  |note1  │   │
│  │part_2   |ipn2 |50   |note2  │   │
│  │...      |...  |...  |...    │   │
│  └─────────────────────────────┘   │
├─────────────────────────────────────┤
│  v{rev} - {date}    {version}      │
└─────────────────────────────────────┘
```

### ヘッダー部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | タイトル | "Stock location items" | 固定値 | テキスト（h3） |
| 2 | ロケーション名 | 対象ロケーション名 | stock_location.name | テキスト（h3） |

### 明細部

| No | 項目名 | 説明 | データ取得元 | 表示形式 | 列幅 |
|----|-------|------|-------------|---------|-----|
| 1 | Part | 部品名 | line.part.full_name | テキスト | 自動 |
| 2 | IPN | 内部部品番号 | line.part.IPN | テキスト | 自動 |
| 3 | Quantity | 数量 | line.quantity | 数値（小数） | 自動 |
| 4 | Note | 備考 | line.notes | テキスト | 自動 |

### フッター部

| No | 項目名 | 説明 | データ取得元 | 表示形式 |
|----|-------|------|-------------|---------|
| 1 | リビジョン | テンプレートリビジョン | report_revision | v{number} |
| 2 | 日付 | 出力日 | date | 日付形式 |
| 3 | バージョン | InvenTreeバージョン | inventree_version | テキスト |

## 出力条件

### 抽出条件

| 条件名 | 説明 | 必須 |
|-------|------|-----|
| location_id | 対象ロケーションのID | Yes |
| stock_items | ロケーション内の在庫品目 | - |

### ソート順

| 優先度 | 項目 | 昇順/降順 |
|-------|------|---------|
| 1 | 在庫品目のデフォルト順序 | - |

### 改ページ条件

在庫品目が多い場合、ページ下端で自動改ページ

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

### 参照テーブル一覧

| テーブル名 | 用途 | 結合条件 |
|-----------|------|---------|
| stock_stocklocation | ロケーション情報 | 直接参照 |
| stock_stockitem | 在庫品目 | stockitem.location_id |
| part_part | 部品情報 | stockitem.part_id |

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

#### stock_stocklocation

| 参照項目（カラム名） | 帳票項目との対応 | 取得条件 | 備考 |
|-------------------|----------------|---------|------|
| name | ロケーション名 | - | - |

#### stock_stockitem

| 参照項目（カラム名） | 帳票項目との対応 | 取得条件 | 備考 |
|-------------------|----------------|---------|------|
| part | 部品 | - | ForeignKey |
| quantity | 数量 | - | - |
| notes | 備考 | - | - |

#### part_part

| 参照項目（カラム名） | 帳票項目との対応 | 取得条件 | 備考 |
|-------------------|----------------|---------|------|
| full_name | 部品名 | - | name + variant |
| IPN | 内部部品番号 | - | NULL許容 |

## 計算仕様

### 計算項目一覧

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

## 処理フロー

### 出力フロー

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

## エラー処理

### エラーケース一覧

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

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定データ件数 | 1ロケーションあたり最大500在庫品目 |
| 目標出力時間 | 10秒以内 |
| 同時出力数上限 | システム設定による |

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

- 認証済みユーザーのみがレポートを出力可能
- ロケーションデータへのアクセス権限は既存の権限モデルに従う
- 在庫情報は機密扱いの可能性があるため取扱注意
- 出力ログはDataOutputモデルに記録

## 備考

- テンプレートファイル: `src/backend/InvenTree/report/templates/report/inventree_stock_location_report.html`
- 基底テンプレート: `inventree_report_base.html`を継承
- 棚卸用途を想定したシンプルなレイアウト
- i18n対応済み（多言語対応）

---

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

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

### 推奨読解順序

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

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | models.py | `src/backend/InvenTree/stock/models.py` | StockLocationReportContext（103-118行目）でコンテキスト構造を確認 |
| 1-2 | models.py | `src/backend/InvenTree/stock/models.py` | report_context()（170-178行目）でデータ取得処理確認 |

**読解のコツ**: stock_location, stock_itemsが主要なデータ項目。get_stock_items()メソッドでロケーション内の在庫を取得。

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

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

**主要処理フロー**:
- **97-98行目**: ヘッダー部（タイトル、ロケーション名）
- **99-122行目**: 在庫品目テーブル
- **109-119行目**: {% for line in stock_items.all %}ループ

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

```
ReportPrint.post() [api.py:253]
    │
    └─ ReportTemplate.print() [report/models.py:465]
           │
           ├─ get_context()
           │      │
           │      └─ stocklocation.report_context() [stock/models.py:170]
           │             │
           │             ├─ location (StockLocation)
           │             ├─ stock_location (StockLocation)
           │             └─ stock_items (StockItem QuerySet)
           │
           └─ render() → HTML → PDF
```

### データフロー図

```
[入力]                    [処理]                         [出力]

Location ID ──────▶ StockLocation.objects.get() ────▶ Location インスタンス
                           │
                           ▼
                    location.report_context()
                           │
                           ├─▶ stock_location (StockLocation)
                           └─▶ stock_items (get_stock_items())
                           │
                           ▼
                    render_to_string()
                           │
                           ▼
                    HTML → PDF (WeasyPrint) ─────────▶ PDF ファイル
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| inventree_stock_location_report.html | `src/backend/InvenTree/report/templates/report/` | テンプレート | 在庫ロケーションレポートのHTMLテンプレート |
| inventree_report_base.html | `src/backend/InvenTree/report/templates/report/` | テンプレート | レポート共通基底テンプレート |
| models.py | `src/backend/InvenTree/stock/` | ソース | StockLocation, StockItemモデル定義 |
