# データベース設計書

## 概要

本ドキュメントは、InvenTreeプロジェクトのデータベース設計を記述したものです。InvenTreeは在庫管理システムであり、部品管理、在庫管理、発注管理、製造管理、会社管理などの機能を提供します。本システムはDjango ORMを使用しており、各モデルはDjangoのモデルクラスとして定義されています。

## テーブル一覧

| テーブル名 | 対応エンティティ | 説明 |
| --- | --- | --- |
| part_partcategory | PartCategory | 部品カテゴリの階層構造を管理 |
| part_part | Part | 部品マスタ情報を管理 |
| part_partcategoryparametertemplate | PartCategoryParameterTemplate | カテゴリとパラメータテンプレートの関連 |
| part_bomitem | BomItem | 部品表（BOM）の構成部品 |
| part_parttesttemplate | PartTestTemplate | 部品テストテンプレート |
| stock_stocklocationtype | StockLocationType | 在庫ロケーションの種類 |
| stock_stocklocation | StockLocation | 在庫保管場所の階層構造 |
| stock_stockitem | StockItem | 実際の在庫品目 |
| stock_stockitemtracking | StockItemTracking | 在庫品目の履歴追跡 |
| stock_stockitemtestresult | StockItemTestResult | 在庫品目のテスト結果 |
| company_company | Company | 取引先企業（仕入先、顧客、製造元） |
| company_contact | Contact | 企業の連絡先担当者 |
| company_address | Address | 企業の住所 |
| company_manufacturerpart | ManufacturerPart | 製造元部品 |
| part_supplierpart | SupplierPart | 仕入先部品 |
| part_supplierpricebreak | SupplierPriceBreak | 仕入先価格ブレイク |
| order_purchaseorder | PurchaseOrder | 発注書 |
| order_purchaseorderlineitem | PurchaseOrderLineItem | 発注書明細 |
| order_purchaseorderextraline | PurchaseOrderExtraLine | 発注書追加明細 |
| order_salesorder | SalesOrder | 受注書 |
| order_salesorderlineitem | SalesOrderLineItem | 受注書明細 |
| order_salesordershipment | SalesOrderShipment | 受注出荷 |
| order_salesorderallocation | SalesOrderAllocation | 受注在庫割当 |
| order_salesorderextraline | SalesOrderExtraLine | 受注書追加明細 |
| order_returnorder | ReturnOrder | 返品オーダー |
| order_returnorderlineitem | ReturnOrderLineItem | 返品オーダー明細 |
| order_returnorderextraline | ReturnOrderExtraLine | 返品オーダー追加明細 |
| build_build | Build | 製造指示（ビルドオーダー） |
| build_buildline | BuildLine | 製造指示の構成部品行 |
| build_builditem | BuildItem | 製造指示への在庫割当 |
| users_apitoken | ApiToken | APIトークン |
| users_ruleset | RuleSet | 権限ルールセット |
| users_owner | Owner | オーナー（ユーザーまたはグループ） |
| common_projectcode | ProjectCode | プロジェクトコード |

## 各テーブル定義

### 1. part_partcategory (PartCategory)

部品カテゴリの階層構造を管理するテーブル。MPTT（Modified Preorder Tree Traversal）を使用した階層構造を持ちます。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| name | VARCHAR(200) | NO | カテゴリ名 |
| description | VARCHAR(250) | YES | カテゴリの説明 |
| parent_id | INTEGER | YES | 親カテゴリへの外部キー |
| default_location_id | INTEGER | YES | デフォルト在庫場所への外部キー |
| default_keywords | VARCHAR(250) | YES | デフォルトキーワード |
| structural | BOOLEAN | NO | 構造的カテゴリフラグ（部品直接割当不可） |
| icon | VARCHAR(100) | YES | アイコン |
| lft | INTEGER | NO | MPTT左値 |
| rght | INTEGER | NO | MPTT右値 |
| tree_id | INTEGER | NO | MPTTツリーID |
| level | INTEGER | NO | MPTTレベル |
| pathstring | VARCHAR(250) | YES | パス文字列 |
| metadata | JSONB | YES | メタデータ |

### 2. part_part (Part)

部品マスタ情報を管理するテーブル。在庫管理の中心となるエンティティです。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| name | VARCHAR(100) | NO | 部品名 |
| description | VARCHAR(250) | YES | 部品の説明 |
| keywords | VARCHAR(250) | YES | 検索用キーワード |
| IPN | VARCHAR(100) | YES | 内部部品番号 |
| revision | VARCHAR(100) | YES | リビジョン番号 |
| revision_of_id | INTEGER | YES | リビジョン元部品への外部キー |
| category_id | INTEGER | YES | カテゴリへの外部キー |
| variant_of_id | INTEGER | YES | バリアント元部品への外部キー |
| default_location_id | INTEGER | YES | デフォルト在庫場所への外部キー |
| default_supplier_id | INTEGER | YES | デフォルト仕入先部品への外部キー |
| default_expiry | INTEGER | NO | デフォルト有効期限（日数） |
| minimum_stock | DECIMAL(19,6) | NO | 最小在庫数量 |
| units | VARCHAR(20) | YES | 計量単位 |
| is_template | BOOLEAN | NO | テンプレート部品フラグ |
| assembly | BOOLEAN | NO | 組立品フラグ |
| component | BOOLEAN | NO | 構成部品フラグ |
| trackable | BOOLEAN | NO | 追跡可能フラグ |
| testable | BOOLEAN | NO | テスト可能フラグ |
| purchaseable | BOOLEAN | NO | 購入可能フラグ |
| salable | BOOLEAN | NO | 販売可能フラグ |
| active | BOOLEAN | NO | アクティブフラグ |
| locked | BOOLEAN | NO | ロックフラグ |
| virtual | BOOLEAN | NO | バーチャル部品フラグ |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| image | VARCHAR | YES | 部品画像パス |
| bom_validated | BOOLEAN | NO | BOM検証済みフラグ |
| bom_checksum | VARCHAR(128) | YES | BOMチェックサム |
| bom_checked_by_id | INTEGER | YES | BOM確認者への外部キー |
| bom_checked_date | DATE | YES | BOM確認日 |
| creation_date | DATE | YES | 作成日 |
| creation_user_id | INTEGER | YES | 作成者への外部キー |
| responsible_owner_id | INTEGER | YES | 責任者への外部キー |
| lft | INTEGER | NO | MPTT左値 |
| rght | INTEGER | NO | MPTT右値 |
| tree_id | INTEGER | NO | MPTTツリーID |
| level | INTEGER | NO | MPTTレベル |
| metadata | JSONB | YES | メタデータ |

### 3. part_bomitem (BomItem)

部品表（BOM）の構成部品を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| part_id | INTEGER | NO | 親部品への外部キー |
| sub_part_id | INTEGER | NO | 構成部品への外部キー |
| quantity | DECIMAL(15,5) | NO | 数量 |
| reference | VARCHAR(500) | YES | 参照情報 |
| note | VARCHAR(500) | YES | 備考 |
| optional | BOOLEAN | NO | オプション品フラグ |
| consumable | BOOLEAN | NO | 消耗品フラグ |
| allow_variants | BOOLEAN | NO | バリアント許可フラグ |
| inherited | BOOLEAN | NO | 継承フラグ |
| validated | BOOLEAN | NO | 検証済みフラグ |
| metadata | JSONB | YES | メタデータ |

### 4. stock_stocklocationtype (StockLocationType)

在庫ロケーションの種類を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| name | VARCHAR(100) | NO | 種類名 |
| description | VARCHAR(250) | YES | 説明 |
| icon | VARCHAR(100) | YES | アイコン |
| metadata | JSONB | YES | メタデータ |

### 5. stock_stocklocation (StockLocation)

在庫保管場所の階層構造を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| name | VARCHAR(200) | NO | ロケーション名 |
| description | VARCHAR(250) | YES | 説明 |
| parent_id | INTEGER | YES | 親ロケーションへの外部キー |
| location_type_id | INTEGER | YES | ロケーション種類への外部キー |
| owner_id | INTEGER | YES | オーナーへの外部キー |
| structural | BOOLEAN | NO | 構造的ロケーションフラグ |
| external | BOOLEAN | NO | 外部ロケーションフラグ |
| icon | VARCHAR(100) | YES | アイコン |
| lft | INTEGER | NO | MPTT左値 |
| rght | INTEGER | NO | MPTT右値 |
| tree_id | INTEGER | NO | MPTTツリーID |
| level | INTEGER | NO | MPTTレベル |
| pathstring | VARCHAR(250) | YES | パス文字列 |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| metadata | JSONB | YES | メタデータ |

### 6. stock_stockitem (StockItem)

実際の在庫品目を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| part_id | INTEGER | NO | 部品への外部キー |
| supplier_part_id | INTEGER | YES | 仕入先部品への外部キー |
| location_id | INTEGER | YES | 在庫場所への外部キー |
| parent_id | INTEGER | YES | 親在庫品目への外部キー |
| belongs_to_id | INTEGER | YES | 所属先在庫品目への外部キー |
| customer_id | INTEGER | YES | 顧客企業への外部キー |
| quantity | DECIMAL(15,5) | NO | 数量 |
| serial | VARCHAR(100) | YES | シリアル番号 |
| serial_int | INTEGER | YES | シリアル番号（整数変換） |
| batch | VARCHAR(100) | YES | バッチコード |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| packaging | VARCHAR(50) | YES | 梱包形態 |
| status | INTEGER | NO | ステータスコード |
| status_custom_key | VARCHAR | YES | カスタムステータスキー |
| expiry_date | DATE | YES | 有効期限 |
| stocktake_date | DATE | YES | 棚卸日 |
| stocktake_user_id | INTEGER | YES | 棚卸担当者への外部キー |
| review_needed | BOOLEAN | NO | レビュー必要フラグ |
| delete_on_deplete | BOOLEAN | NO | 在庫切れ時削除フラグ |
| build_id | INTEGER | YES | 製造指示への外部キー |
| is_building | BOOLEAN | NO | 製造中フラグ |
| purchase_order_id | INTEGER | YES | 発注書への外部キー |
| sales_order_id | INTEGER | YES | 受注書への外部キー |
| consumed_by_id | INTEGER | YES | 消費した製造指示への外部キー |
| purchase_price | DECIMAL | YES | 購入単価 |
| purchase_price_currency | VARCHAR(3) | YES | 購入単価通貨 |
| lft | INTEGER | NO | MPTT左値 |
| rght | INTEGER | NO | MPTT右値 |
| tree_id | INTEGER | NO | MPTTツリーID |
| level | INTEGER | NO | MPTTレベル |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| updated | DATETIME | YES | 更新日時 |
| metadata | JSONB | YES | メタデータ |

### 7. company_company (Company)

取引先企業を管理するテーブル。仕入先、顧客、製造元の区別はフラグで管理されます。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| name | VARCHAR(100) | NO | 会社名 |
| description | VARCHAR(500) | YES | 会社の説明 |
| website | VARCHAR(2000) | YES | ウェブサイトURL |
| phone | VARCHAR(50) | YES | 電話番号 |
| email | VARCHAR(254) | YES | メールアドレス |
| contact | VARCHAR(100) | YES | 担当者名 |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| image | VARCHAR | YES | 会社ロゴ画像パス |
| active | BOOLEAN | NO | アクティブフラグ |
| is_customer | BOOLEAN | NO | 顧客フラグ |
| is_supplier | BOOLEAN | NO | 仕入先フラグ |
| is_manufacturer | BOOLEAN | NO | 製造元フラグ |
| currency | VARCHAR(3) | YES | デフォルト通貨 |
| tax_id | VARCHAR(50) | YES | 税務ID |
| metadata | JSONB | YES | メタデータ |

### 8. company_contact (Contact)

企業の連絡先担当者を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| company_id | INTEGER | NO | 企業への外部キー |
| name | VARCHAR(100) | NO | 担当者名 |
| phone | VARCHAR(100) | YES | 電話番号 |
| email | VARCHAR(254) | YES | メールアドレス |
| role | VARCHAR(100) | YES | 役職 |
| metadata | JSONB | YES | メタデータ |

### 9. company_address (Address)

企業の住所を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| company_id | INTEGER | NO | 企業への外部キー |
| title | VARCHAR(100) | NO | 住所タイトル |
| primary | BOOLEAN | NO | 主要住所フラグ |
| line1 | VARCHAR(50) | YES | 住所1行目 |
| line2 | VARCHAR(50) | YES | 住所2行目 |
| postal_code | VARCHAR(10) | YES | 郵便番号 |
| postal_city | VARCHAR(50) | YES | 市区町村 |
| province | VARCHAR(50) | YES | 都道府県 |
| country | VARCHAR(50) | YES | 国 |
| shipping_notes | VARCHAR(100) | YES | 配送メモ |
| internal_shipping_notes | VARCHAR(100) | YES | 内部配送メモ |
| link | VARCHAR(2000) | YES | 外部リンクURL |

### 10. company_manufacturerpart (ManufacturerPart)

製造元部品を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| part_id | INTEGER | NO | 部品への外部キー |
| manufacturer_id | INTEGER | YES | 製造元企業への外部キー |
| MPN | VARCHAR(100) | YES | 製造元部品番号 |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| description | VARCHAR(250) | YES | 説明 |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| metadata | JSONB | YES | メタデータ |

### 11. part_supplierpart (SupplierPart)

仕入先部品を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| part_id | INTEGER | NO | 部品への外部キー |
| supplier_id | INTEGER | NO | 仕入先企業への外部キー |
| manufacturer_part_id | INTEGER | YES | 製造元部品への外部キー |
| SKU | VARCHAR(100) | NO | 仕入先部品番号（SKU） |
| active | BOOLEAN | NO | アクティブフラグ |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| description | VARCHAR(250) | YES | 説明 |
| note | VARCHAR(100) | YES | 備考 |
| base_cost | DECIMAL(10,3) | NO | 基本費用 |
| packaging | VARCHAR(50) | YES | 梱包形態 |
| pack_quantity | VARCHAR(25) | YES | パック数量 |
| pack_quantity_native | DECIMAL(20,10) | YES | パック数量（ネイティブ単位） |
| multiple | INTEGER | NO | 注文倍数 |
| available | DECIMAL(10,3) | NO | 利用可能数量 |
| availability_updated | DATETIME | YES | 利用可能数量更新日時 |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| updated | DATETIME | YES | 更新日時 |
| metadata | JSONB | YES | メタデータ |

### 12. part_supplierpricebreak (SupplierPriceBreak)

仕入先価格ブレイク（数量割引）を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| part_id | INTEGER | NO | 仕入先部品への外部キー |
| quantity | DECIMAL(15,5) | NO | 数量 |
| price | DECIMAL(19,6) | YES | 単価 |
| price_currency | VARCHAR(3) | YES | 通貨 |
| updated | DATETIME | YES | 更新日時 |

### 13. order_purchaseorder (PurchaseOrder)

発注書を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| reference | VARCHAR(64) | NO | 発注書番号（ユニーク） |
| supplier_id | INTEGER | YES | 仕入先企業への外部キー |
| supplier_reference | VARCHAR(64) | YES | 仕入先参照番号 |
| description | VARCHAR(250) | YES | 説明 |
| status | INTEGER | NO | ステータス |
| status_custom_key | VARCHAR | YES | カスタムステータスキー |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| project_code_id | INTEGER | YES | プロジェクトコードへの外部キー |
| creation_date | DATE | YES | 作成日 |
| created_by_id | INTEGER | YES | 作成者への外部キー |
| issue_date | DATE | YES | 発行日 |
| start_date | DATE | YES | 開始予定日 |
| target_date | DATE | YES | 納期 |
| complete_date | DATE | YES | 完了日 |
| received_by_id | INTEGER | YES | 受領者への外部キー |
| responsible_id | INTEGER | YES | 責任者への外部キー |
| contact_id | INTEGER | YES | 連絡先への外部キー |
| address_id | INTEGER | YES | 住所への外部キー |
| destination_id | INTEGER | YES | 受入先ロケーションへの外部キー |
| total_price | DECIMAL | YES | 合計金額 |
| total_price_currency | VARCHAR(3) | YES | 合計金額通貨 |
| order_currency | VARCHAR(3) | YES | 注文通貨 |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| metadata | JSONB | YES | メタデータ |

### 14. order_purchaseorderlineitem (PurchaseOrderLineItem)

発注書明細を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| order_id | INTEGER | NO | 発注書への外部キー |
| part_id | INTEGER | YES | 仕入先部品への外部キー |
| quantity | DECIMAL(15,5) | NO | 数量 |
| received | DECIMAL(15,5) | NO | 受領数量 |
| reference | VARCHAR(100) | YES | 参照情報 |
| notes | VARCHAR(500) | YES | 備考 |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| target_date | DATE | YES | 納期 |
| project_code_id | INTEGER | YES | プロジェクトコードへの外部キー |
| purchase_price | DECIMAL(19,6) | YES | 購入単価 |
| purchase_price_currency | VARCHAR(3) | YES | 購入単価通貨 |
| destination_id | INTEGER | YES | 受入先ロケーションへの外部キー |
| build_order_id | INTEGER | YES | 外部製造指示への外部キー |
| metadata | JSONB | YES | メタデータ |

### 15. order_salesorder (SalesOrder)

受注書を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| reference | VARCHAR(64) | NO | 受注書番号（ユニーク） |
| customer_id | INTEGER | YES | 顧客企業への外部キー |
| customer_reference | VARCHAR(64) | YES | 顧客参照番号 |
| description | VARCHAR(250) | YES | 説明 |
| status | INTEGER | NO | ステータス |
| status_custom_key | VARCHAR | YES | カスタムステータスキー |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| project_code_id | INTEGER | YES | プロジェクトコードへの外部キー |
| creation_date | DATE | YES | 作成日 |
| created_by_id | INTEGER | YES | 作成者への外部キー |
| issue_date | DATE | YES | 発行日 |
| start_date | DATE | YES | 開始予定日 |
| target_date | DATE | YES | 納期 |
| shipment_date | DATE | YES | 出荷日 |
| shipped_by_id | INTEGER | YES | 出荷担当者への外部キー |
| responsible_id | INTEGER | YES | 責任者への外部キー |
| contact_id | INTEGER | YES | 連絡先への外部キー |
| address_id | INTEGER | YES | 住所への外部キー |
| total_price | DECIMAL | YES | 合計金額 |
| total_price_currency | VARCHAR(3) | YES | 合計金額通貨 |
| order_currency | VARCHAR(3) | YES | 注文通貨 |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| metadata | JSONB | YES | メタデータ |

### 16. order_salesorderlineitem (SalesOrderLineItem)

受注書明細を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| order_id | INTEGER | NO | 受注書への外部キー |
| part_id | INTEGER | YES | 部品への外部キー |
| quantity | DECIMAL(15,5) | NO | 数量 |
| shipped | DECIMAL(15,5) | NO | 出荷済み数量 |
| reference | VARCHAR(100) | YES | 参照情報 |
| notes | VARCHAR(500) | YES | 備考 |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| target_date | DATE | YES | 納期 |
| project_code_id | INTEGER | YES | プロジェクトコードへの外部キー |
| sale_price | DECIMAL(19,6) | YES | 販売単価 |
| sale_price_currency | VARCHAR(3) | YES | 販売単価通貨 |
| metadata | JSONB | YES | メタデータ |

### 17. order_salesordershipment (SalesOrderShipment)

受注出荷を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| order_id | INTEGER | NO | 受注書への外部キー |
| reference | VARCHAR(100) | NO | 出荷参照番号 |
| shipment_date | DATE | YES | 出荷日 |
| delivery_date | DATE | YES | 配達日 |
| tracking_number | VARCHAR(100) | YES | 追跡番号 |
| shipment_address_id | INTEGER | YES | 出荷先住所への外部キー |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| metadata | JSONB | YES | メタデータ |

### 18. order_salesorderallocation (SalesOrderAllocation)

受注在庫割当を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| line_id | INTEGER | NO | 受注書明細への外部キー |
| item_id | INTEGER | NO | 在庫品目への外部キー |
| quantity | DECIMAL(15,5) | NO | 割当数量 |
| shipment_id | INTEGER | YES | 出荷への外部キー |

### 19. build_build (Build)

製造指示（ビルドオーダー）を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| reference | VARCHAR(64) | NO | 製造指示番号（ユニーク） |
| title | VARCHAR(100) | YES | タイトル |
| part_id | INTEGER | NO | 組立部品への外部キー |
| quantity | INTEGER | NO | 製造数量 |
| completed | INTEGER | NO | 完了数量 |
| status | INTEGER | NO | ステータス |
| status_custom_key | VARCHAR | YES | カスタムステータスキー |
| batch | VARCHAR(100) | YES | バッチコード |
| external | BOOLEAN | NO | 外部製造フラグ |
| parent_id | INTEGER | YES | 親製造指示への外部キー |
| sales_order_id | INTEGER | YES | 受注書への外部キー |
| take_from_id | INTEGER | YES | 取得元ロケーションへの外部キー |
| destination_id | INTEGER | YES | 出力先ロケーションへの外部キー |
| project_code_id | INTEGER | YES | プロジェクトコードへの外部キー |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| creation_date | DATE | NO | 作成日 |
| start_date | DATE | YES | 開始予定日 |
| target_date | DATE | YES | 完了予定日 |
| completion_date | DATE | YES | 完了日 |
| completed_by_id | INTEGER | YES | 完了担当者への外部キー |
| issued_by_id | INTEGER | YES | 発行者への外部キー |
| responsible_id | INTEGER | YES | 責任者への外部キー |
| priority | INTEGER | NO | 優先度 |
| lft | INTEGER | NO | MPTT左値 |
| rght | INTEGER | NO | MPTT右値 |
| tree_id | INTEGER | NO | MPTTツリーID |
| level | INTEGER | NO | MPTTレベル |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| metadata | JSONB | YES | メタデータ |

### 20. users_apitoken (ApiToken)

APIトークンを管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| key | VARCHAR(100) | NO | トークンキー（主キー） |
| user_id | INTEGER | NO | ユーザーへの外部キー |
| name | VARCHAR(100) | YES | トークン名 |
| created | DATETIME | NO | 作成日時 |
| expiry | DATE | YES | 有効期限 |
| last_seen | DATE | YES | 最終使用日 |
| revoked | BOOLEAN | NO | 失効フラグ |
| metadata | JSONB | YES | メタデータ |

### 21. users_owner (Owner)

オーナー（ユーザーまたはグループ）を管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| content_type_id | INTEGER | NO | コンテンツタイプへの外部キー |
| object_id | INTEGER | NO | オブジェクトID |

### 22. common_projectcode (ProjectCode)

プロジェクトコードを管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| code | VARCHAR(50) | NO | プロジェクトコード（ユニーク） |
| description | VARCHAR(200) | YES | 説明 |
| responsible_id | INTEGER | YES | 責任者への外部キー |
| metadata | JSONB | YES | メタデータ |

### 23. order_returnorder (ReturnOrder)

返品オーダーを管理するテーブル。

| カラム名 | データ型 | NULL | 説明 |
| --- | --- | --- | --- |
| id | INTEGER | NO | 主キー |
| reference | VARCHAR(64) | NO | 返品オーダー番号（ユニーク） |
| customer_id | INTEGER | YES | 顧客企業への外部キー |
| customer_reference | VARCHAR(64) | YES | 顧客参照番号 |
| description | VARCHAR(250) | YES | 説明 |
| status | INTEGER | NO | ステータス |
| status_custom_key | VARCHAR | YES | カスタムステータスキー |
| link | VARCHAR(2000) | YES | 外部リンクURL |
| project_code_id | INTEGER | YES | プロジェクトコードへの外部キー |
| creation_date | DATE | YES | 作成日 |
| created_by_id | INTEGER | YES | 作成者への外部キー |
| issue_date | DATE | YES | 発行日 |
| start_date | DATE | YES | 開始予定日 |
| target_date | DATE | YES | 完了予定日 |
| complete_date | DATE | YES | 完了日 |
| responsible_id | INTEGER | YES | 責任者への外部キー |
| contact_id | INTEGER | YES | 連絡先への外部キー |
| address_id | INTEGER | YES | 住所への外部キー |
| total_price | DECIMAL | YES | 合計金額 |
| total_price_currency | VARCHAR(3) | YES | 合計金額通貨 |
| order_currency | VARCHAR(3) | YES | 注文通貨 |
| barcode_data | VARCHAR | YES | バーコードデータ |
| barcode_hash | VARCHAR | YES | バーコードハッシュ |
| metadata | JSONB | YES | メタデータ |

## 備考

### 1. データベースエンジン

InvenTreeは、デフォルトでPostgreSQLまたはSQLiteをサポートしています。本番環境ではPostgreSQLが推奨されます。

### 2. MPTT（Modified Preorder Tree Traversal）

階層構造を持つテーブル（PartCategory、Part、StockLocation、StockItem、Build）では、MPTT（django-mptt）を使用して効率的なツリー操作を実現しています。以下のカラムがMPTTに関連します：

- `lft`（左値）
- `rght`（右値）
- `tree_id`（ツリーID）
- `level`（階層レベル）

### 3. メタデータとJSON型

多くのテーブルには `metadata` カラム（JSONB型）が含まれており、柔軟な拡張データを格納できます。

### 4. 外部キー命名規則

外部キーカラムは `{関連テーブル名}_id` の命名規則に従っています（例：`part_id`、`supplier_id`）。

### 5. 通貨フィールド

金額を扱うフィールドには、対応する通貨フィールド（`*_currency`）が存在します。これはdjango-moneyライブラリによるものです。

### 6. バーコードサポート

多くのエンティティがバーコードをサポートしており、`barcode_data` と `barcode_hash` フィールドを持っています。

### 7. カスタムステータス

ステータスフィールドには、標準のステータス値に加えて、`status_custom_key` によるカスタムステータスの定義が可能です。
