{
    "table_name": "sales_rep_change_schedules",
    "display_name": "営業担当変更予約（個別）",
    "description": "営業担当の個別変更予約をインポートします。得意先別・大分類別に営業担当者を予約登録できます。適用開始日を迎えると日次バッチで自動的にマスタへ反映されます。",
    "type": "relational_table",
    "supported_modes": ["insert"],
    "import_behavior": "all_or_nothing",
    "key_fields": ["id"],
    "required_fields": ["customer_id", "new_sales_rep_id", "effective_date"],
    "default_values": {
        "change_type": 2,
        "priority": 100,
        "status": 1
    },
    "code_padding": {
        "customer_code": 6
    },
    "foreign_key_mappings": {
        "customer_code": {
            "target_field": "customer_id",
            "reference_table": "customers",
            "reference_key_column": "customer_code",
            "reference_value_column": "id",
            "reference_condition": "is_active = 1 AND deleted_at IS NULL",
            "required": true,
            "error_message": "指定された得意先コード「{value}」が得意先マスタに存在しないか、無効な状態です。"
        },
        "category_name": {
            "target_field": "category_id",
            "reference_table": "categories",
            "reference_key_column": "category_name",
            "reference_value_column": "id",
            "reference_condition": "level = 1 AND is_active = 1 AND deleted_at IS NULL",
            "required": false,
            "error_message": "指定された大分類名「{value}」が商品分類マスタ（大分類）に存在しないか、無効な状態です。"
        },
        "new_sales_rep_code": {
            "target_field": "new_sales_rep_id",
            "reference_table": "users",
            "reference_key_column": "user_code",
            "reference_value_column": "id",
            "reference_condition": "is_sales_user = 1 AND is_active = 1 AND deleted_at IS NULL",
            "required": true,
            "error_message": "指定された営業担当者コード「{value}」が営業担当者マスタに存在しないか、無効な状態です。営業担当者フラグが有効な社員を指定してください。"
        }
    },
    "field_labels": {
        "id": "ID",
        "change_type": "変更タイプ",
        "old_sales_rep_id": "旧担当者ID",
        "new_sales_rep_id": "新担当者ID",
        "new_sales_rep_code": "新営業担当者コード",
        "customer_id": "得意先ID",
        "customer_code": "得意先コード",
        "category_id": "大分類ID",
        "category_name": "大分類名",
        "effective_date": "適用開始日",
        "priority": "優先度",
        "status": "ステータス",
        "applied_at": "適用日時",
        "note": "備考",
        "created_by": "登録者ID",
        "updated_by": "更新者ID",
        "created_at": "登録日",
        "updated_at": "更新日",
        "deleted_at": "削除日"
    },
    "field_types": {
        "id": "bigint",
        "change_type": "integer",
        "old_sales_rep_id": "bigint",
        "new_sales_rep_id": "bigint",
        "new_sales_rep_code": "varchar",
        "customer_id": "bigint",
        "customer_code": "varchar",
        "category_id": "bigint",
        "category_name": "varchar",
        "effective_date": "date",
        "priority": "integer",
        "status": "integer",
        "applied_at": "timestamp",
        "note": "varchar",
        "created_by": "bigint",
        "updated_by": "bigint",
        "created_at": "timestamp",
        "updated_at": "timestamp",
        "deleted_at": "timestamp"
    },
    "enum_values": {
        "change_type": {
            "1": "一括変更",
            "2": "個別変更"
        },
        "status": {
            "1": "待機中",
            "2": "適用済み",
            "9": "キャンセル"
        }
    },
    "validation_rules": {
        "customer_code": {
            "required": true,
            "message": "得意先コードは必須です。"
        },
        "new_sales_rep_code": {
            "required": true,
            "message": "新営業担当者コードは必須です。"
        },
        "effective_date": {
            "required": true,
            "date_format": ["Y-m-d", "Y/m/d"],
            "after": "today",
            "after_message": "適用開始日は翌日以降の日付を指定してください。",
            "message": "適用開始日は必須です。翌日以降の日付をYYYY-MM-DDまたはYYYY/MM/DD形式で入力してください。"
        },
        "note": {
            "max_length": 500,
            "message": "備考は500文字以内で入力してください。"
        }
    },
    "business_rules": {
        "individual_change_only": {
            "description": "このインポートは個別変更（change_type=2）のみ対応しています",
            "validation": "required"
        },
        "future_date_required": {
            "description": "適用開始日は翌日以降のみ指定可能（当日不可）。バッチは 00:20 に effective_date <= 当日 を処理するため、当日指定は1日遅れて適用される。当日変更が必要な場合は得意先マスタを直接編集する",
            "validation": "required"
        },
        "sales_user_required": {
            "description": "新営業担当者は営業担当者フラグが有効なユーザーのみ指定可能です",
            "validation": "required"
        },
        "category_optional": {
            "description": "大分類名が空欄の場合は全分類が対象となります",
            "validation": "optional"
        }
    },
    "import_notes": {
        "customer_code": "得意先コードは有効な得意先のコードを入力してください",
        "category_name": "大分類名は商品分類マスタの大分類（レベル1）の名称を入力してください。空欄の場合は全分類が対象となります",
        "new_sales_rep_code": "新営業担当者コードは有効な営業担当者（is_sales_user=1）の社員コードを入力してください",
        "effective_date": "適用開始日は翌日以降の日付をYYYY-MM-DDまたはYYYY/MM/DD形式で入力してください",
        "auto_apply": "登録された予約は日次バッチ（毎日0時頃）で自動的にマスタへ反映されます"
    },
    "sample_data": {
        "headers": [
            "得意先コード",
            "大分類名",
            "新営業担当者コード",
            "適用開始日",
            "備考"
        ],
        "rows": [
            [
                "C001",
                "",
                "U101",
                "2027-04-01",
                "4月からの担当変更（全分類）"
            ],
            [
                "C002",
                "食品",
                "U102",
                "2027-04-01",
                "食品分野のみ担当変更"
            ],
            [
                "C003",
                "飲料",
                "U103",
                "2027-05-01",
                "5月からの担当変更"
            ]
        ]
    },
    "csv_format_example": {
        "description": "営業担当変更予約（個別）インポート用CSVフォーマット",
        "headers": [
            "得意先コード",
            "大分類名",
            "新営業担当者コード",
            "適用開始日",
            "備考"
        ],
        "sample_data": [
            ["# 得意先コードは有効な得意先のコードを入力してください", "", "", "", ""],
            ["# 大分類名は空欄の場合、全分類が対象となります", "", "", "", ""],
            ["# 新営業担当者コードは営業担当者（is_sales_user=1）の社員コードを入力", "", "", "", ""],
            ["# 適用開始日は翌日以降の日付を入力してください", "", "", "", ""],
            ["C001", "", "U101", "2027-04-01", "4月からの担当変更（全分類）"],
            ["C002", "食品", "U102", "2027-04-01", "食品分野のみ担当変更"],
            ["C003", "飲料", "U103", "2027-05-01", "5月からの担当変更"]
        ]
    }
}
