{
  "display_name": "ランク別商品単価マスタ",
  "description": "ランク別商品単価（product_prices）を横持ち形式でインポート。キー（商品コード＋適用開始日）が未登録なら新規登録、登録済みなら単価・備考のみ修正。適用終了日はシステムが自動決定する。",
  "type": "single_table",
  "processor_class": "App\\Services\\Logic\\User\\CsvImport\\SingleTable\\ProductPriceProcessor",
  "call_process_row": false,
  "import_behavior": "all_or_nothing",
  "supported_modes": ["insert"],
  "fields": {
    "product_code": {
      "label": "商品コード",
      "type": "string",
      "required": true,
      "max_length": 40,
      "validation_rules": [
        "required",
        "string",
        "max:40"
      ],
      "description": "商品マスタのコード"
    },
    "valid_from": {
      "label": "適用開始日",
      "type": "date",
      "required": true,
      "format": "Y-m-d",
      "validation_rules": [
        "required",
        "date"
      ],
      "description": "適用開始日（YYYY-MM-DD形式）。適用終了日はシステムが自動決定する"
    },
    "unit_price_rank1": {
      "label": "ランク1単価",
      "type": "decimal",
      "required": true,
      "min_value": 0,
      "validation_rules": [
        "numeric",
        "min:0"
      ],
      "description": "ランク1（rank_code=00001）の単価"
    },
    "unit_price_rank2": {
      "label": "ランク2単価",
      "type": "decimal",
      "required": true,
      "min_value": 0,
      "validation_rules": [
        "numeric",
        "min:0"
      ],
      "description": "ランク2（rank_code=00002）の単価"
    },
    "unit_price_rank3": {
      "label": "ランク3単価",
      "type": "decimal",
      "required": true,
      "min_value": 0,
      "validation_rules": [
        "numeric",
        "min:0"
      ],
      "description": "ランク3（rank_code=00003）の単価"
    },
    "unit_price_rank4": {
      "label": "ランク4単価",
      "type": "decimal",
      "required": true,
      "min_value": 0,
      "validation_rules": [
        "numeric",
        "min:0"
      ],
      "description": "ランク4（rank_code=00004）の単価"
    },
    "unit_price_rank5": {
      "label": "ランク5単価",
      "type": "decimal",
      "required": true,
      "min_value": 0,
      "validation_rules": [
        "numeric",
        "min:0"
      ],
      "description": "ランク5（rank_code=00005）の単価"
    },
    "unit_price_rank6": {
      "label": "ランク6単価",
      "type": "decimal",
      "required": true,
      "min_value": 0,
      "validation_rules": [
        "numeric",
        "min:0"
      ],
      "description": "ランク6（rank_code=00006）の単価"
    },
    "note": {
      "label": "備考",
      "type": "string",
      "required": false,
      "max_length": 500,
      "validation_rules": [
        "string",
        "max:500"
      ],
      "description": "備考（任意）。6ランク共通で登録される"
    }
  },
  "rank_columns": {
    "unit_price_rank1": "00001",
    "unit_price_rank2": "00002",
    "unit_price_rank3": "00003",
    "unit_price_rank4": "00004",
    "unit_price_rank5": "00005",
    "unit_price_rank6": "00006"
  },
  "code_padding": {
    "product_code": 8
  },
  "foreign_key_mappings": {
    "product_code": {
      "target_field": "product_id",
      "reference_table": "products",
      "reference_key_column": "product_code",
      "reference_value_column": "id",
      "required": true,
      "error_message": "商品コード「{value}」が見つかりません"
    }
  },
  "error_codes": {
    "E001": {
      "type": "required",
      "message": "商品コードは必須です"
    },
    "E002": {
      "type": "master",
      "message": "商品コード「{code}」が見つかりません"
    },
    "E003": {
      "type": "consistency",
      "message": "適用開始日は必須で、日付形式である必要があります"
    },
    "E004": {
      "type": "value",
      "message": "備考は500文字以内で入力してください"
    },
    "E010": {
      "type": "value",
      "message": "単価は0以上の数値を指定してください"
    },
    "E011": {
      "type": "duplicate",
      "message": "同一CSV内でキー（商品コード＋適用開始日）が重複しています"
    }
  },
  "csv_format_example": {
    "description": "ランク別商品単価インポート用CSVフォーマット（横持ち・1行＝1適用開始日グループ＝6ランク）",
    "headers": [
      "商品コード",
      "適用開始日",
      "ランク1単価",
      "ランク2単価",
      "ランク3単価",
      "ランク4単価",
      "ランク5単価",
      "ランク6単価",
      "備考"
    ],
    "sample_data": [
      ["00001001", "2026/08/01", "3810", "3990", "4170", "4360", "4720", "5080", "2026年価格改定"],
      ["00001002", "2026/08/01", "2400", "2520", "2640", "2760", "2980", "3200", ""]
    ]
  }
}
