{
    "table_name": "sales_budget_targets",
    "display_name": "営業予算マスタ",
    "description": "営業担当者別・商品中分類別・年月別の売上目標と粗利目標管理",
    "type": "relational_table",
    "supported_modes": [
        "insert",
        "update",
        "delete"
    ],
    "import_behavior": "all_or_nothing",
    "key_fields": [
        "id"
    ],
    "required_fields": [
        "target_ym",
        "sales_user_id",
        "category_lv2_id"
    ],
    "unique_fields": {
        "composite_unique": {
            "message": "年月「{target_ym}」、営業担当「{sales_user_code}」、商品中分類「{category_lv2_name}」の組み合わせは既に登録されています",
            "fields": [
                "target_ym",
                "sales_user_id",
                "category_lv2_id"
            ],
            "allow_null": false
        }
    },
    "foreign_key_mappings": {
        "sales_user_code": {
            "target_field": "sales_user_id",
            "reference_table": "users",
            "reference_key_column": "user_code",
            "reference_value_column": "id",
            "reference_condition": "is_sales_user = 1 AND is_active = 1",
            "required": true,
            "error_message": "指定された営業担当者コード「{value}」が営業担当者マスタに存在しないか、無効な状態です。正しい営業担当者コードを確認してください。"
        },
        "category_lv2_name": {
            "target_field": "category_lv2_id",
            "reference_table": "categories",
            "reference_key_column": "category_name",
            "reference_value_column": "id",
            "reference_condition": "level = 2 AND is_active = 1",
            "required": true,
            "error_message": "指定された商品中分類名「{value}」が商品分類マスタ（レベル2）に存在しないか、無効な状態です。正しい中分類名を確認してください。"
        }
    },
    "composite_key_handling": {
        "update_mode": "composite_unique_key",
        "delete_mode": "composite_unique_key",
        "composite_key_fields": [
            "target_ym",
            "sales_user_id",
            "category_lv2_id"
        ],
        "primary_key_field": "id"
    },
    "field_labels": {
        "id": "ID",
        "target_ym": "年月",
        "sales_user_id": "営業担当ID",
        "sales_user_code": "営業担当者コード",
        "category_lv2_id": "商品中分類ID",
        "category_lv2_name": "商品中分類名",
        "sales_budget_amount": "売上目標",
        "gross_profit_budget_amount": "粗利目標",
        "note": "備考",
        "created_by": "登録者ID",
        "updated_by": "更新者ID",
        "created_at": "登録日",
        "updated_at": "更新日",
        "deleted_at": "削除日"
    },
    "field_types": {
        "id": "bigint",
        "target_ym": "varchar",
        "sales_user_id": "bigint",
        "sales_user_code": "varchar",
        "category_lv2_id": "bigint",
        "category_lv2_name": "varchar",
        "sales_budget_amount": "decimal",
        "gross_profit_budget_amount": "decimal",
        "note": "varchar",
        "created_by": "bigint",
        "updated_by": "bigint",
        "created_at": "timestamp",
        "updated_at": "timestamp",
        "deleted_at": "timestamp"
    },
    "enum_values": {},
    "validation_rules": {
        "target_ym": {
            "required": true,
            "max_length": 6,
            "pattern": "^\\d{6}$",
            "message": "年月は6桁の数字（YYYYMM形式）で入力してください。入力値：「{value}」"
        },
        "sales_user_id": {
            "required": true,
            "exists": {
                "table": "users",
                "column": "id",
                "where": {
                    "is_sales_user": 1,
                    "is_active": 1
                }
            }
        },
        "category_lv2_id": {
            "required": true,
            "exists": {
                "table": "categories",
                "column": "id",
                "where": {
                    "level": 2,
                    "is_active": 1
                }
            }
        },
        "sales_budget_amount": {
            "numeric": true,
            "min": 0,
            "decimal_places": 4,
            "message": "売上目標は0以上の数値で入力してください。小数点以下4桁まで入力可能です。入力値：「{value}」"
        },
        "gross_profit_budget_amount": {
            "numeric": true,
            "min": 0,
            "decimal_places": 4,
            "message": "粗利目標は0以上の数値で入力してください。小数点以下4桁まで入力可能です。入力値：「{value}」"
        },
        "note": {
            "max_length": 500
        }
    },
    "business_rules": {
        "unique_constraint": {
            "description": "年月・営業担当者・商品中分類の組み合わせは一意である必要があります",
            "validation": "required",
            "fields": [
                "target_ym",
                "sales_user_id",
                "category_lv2_id"
            ]
        },
        "target_ym_format": {
            "description": "年月はYYYYMM形式（例：202501）で入力してください",
            "validation": "required"
        },
        "sales_user_validation": {
            "description": "営業担当者は有効かつ営業フラグが立っているユーザーのみ指定可能です",
            "validation": "required"
        },
        "category_validation": {
            "description": "商品中分類は有効なレベル2の分類のみ指定可能です",
            "validation": "required"
        }
    },
    "import_notes": {
        "target_ym": "年月は6桁の数字（YYYYMM）で入力してください（例：202501）",
        "sales_user": "営業担当者コードは有効な営業担当者のコードを入力してください",
        "category_lv2": "商品中分類名は有効なレベル2の分類名を入力してください",
        "amounts": "売上目標・粗利目標は数値で入力してください。空白の場合はNULLとして登録されます",
        "unique_key": "年月・営業担当者・商品中分類の組み合わせが重複する場合は更新処理となります",
        "update_mode": "更新時は年月・営業担当者・商品中分類の組み合わせで既存データを特定します"
    },
    "sample_data": {
        "headers": [
            "年月",
            "営業担当者コード",
            "商品中分類名",
            "売上目標",
            "粗利目標",
            "備考"
        ],
        "rows": [
            [
                "202501",
                "U001",
                "食品・飲料",
                "1000000.0000",
                "300000.0000",
                "1月度目標"
            ],
            [
                "202501",
                "U002",
                "食品・飲料",
                "800000.0000",
                "240000.0000",
                ""
            ],
            [
                "202502",
                "U001",
                "日用品",
                "1100000.0000",
                "330000.0000",
                "2月度目標"
            ]
        ]
    },
    "csv_format_example": {
        "description": "営業予算インポート用CSVフォーマット",
        "headers": [
            "年月",
            "営業担当者コード",
            "商品中分類名",
            "売上目標",
            "粗利目標",
            "備考"
        ],
        "sample_data": [
            ["# 年月はYYYYMM形式（例：202501）で入力してください", "", "", "", "", ""],
            ["# 営業担当者コードは有効な営業担当者のコードを入力してください", "", "", "", "", ""],
            ["# 商品中分類名は有効なレベル2の分類名を入力してください", "", "", "", "", ""],
            ["202501", "U001", "食品・飲料", "1000000", "300000", "1月度目標"],
            ["202501", "U002", "食品・飲料", "800000", "240000", ""],
            ["202502", "U001", "日用品", "1100000", "330000", "2月度目標"]
        ]
    }
}