{
  "display_name": "汎用発注データ",
  "description": "様々な仕入先からの発注データを統合インポート",
  "processor_class": "App\\Services\\Logic\\User\\CsvImport\\Processors\\PurchaseOrderProcessor",
  "business_key_field": "purchase_order_number",
  "header_table": "purchase_order_headers",
  "detail_table": "purchase_order_details",
  "header_fields": {
    "purchase_order_number": {
      "label": "発注番号",
      "type": "string",
      "required": true,
      "max_length": 12,
      "validation_rules": [
        "required",
        "string",
        "max:12"
      ],
      "description": "発注伝票を一意に識別する番号"
    },
    "slip_type": {
      "label": "伝票区分",
      "type": "integer",
      "required": true,
      "validation_rules": [
        "required",
        "integer",
        "in:1,2,3,9"
      ],
      "description": "伝票区分（1:仕入, 2:返品, 3:その他, 9:赤伝）"
    },
    "purchase_order_date": {
      "label": "発注日",
      "type": "date",
      "required": true,
      "format": "Y-m-d",
      "validation_rules": [
        "required",
        "date"
      ],
      "description": "発注が発生した日付"
    },
    "supplier_code": {
      "label": "仕入先コード",
      "type": "string",
      "required": true,
      "max_length": 20,
      "validation_rules": [
        "required",
        "string",
        "max:20"
      ],
      "description": "仕入先を識別するコード"
    },
    "warehouse_code": {
      "label": "倉庫コード",
      "type": "string",
      "required": false,
      "max_length": 20,
      "validation_rules": [
        "string",
        "max:20"
      ],
      "description": "入荷倉庫コード"
    },
    "note": {
      "label": "備考",
      "type": "string",
      "required": false,
      "max_length": 500,
      "validation_rules": [
        "string",
        "max:500"
      ],
      "description": "ヘッダー備考欄"
    }
  },
  "detail_fields": {
    "product_code": {
      "label": "商品コード",
      "type": "string",
      "required": true,
      "max_length": 40,
      "validation_rules": [
        "required",
        "string",
        "max:40"
      ],
      "description": "商品を識別するコード"
    },
    "product_name": {
      "label": "商品名",
      "type": "string",
      "required": false,
      "max_length": 500,
      "validation_rules": [
        "string",
        "max:500"
      ],
      "description": "商品名称"
    },
    "purchase_order_qty": {
      "label": "発注数量",
      "type": "decimal",
      "required": true,
      "min_value": 0.001,
      "validation_rules": [
        "required",
        "numeric",
        "min:0.001"
      ],
      "description": "発注数量"
    },
    "unit_price": {
      "label": "発注単価（他通貨）",
      "type": "decimal",
      "required": true,
      "min_value": 0,
      "validation_rules": [
        "required",
        "numeric",
        "min:0"
      ],
      "description": "仕入単価"
    },
    "job_number": {
      "label": "JOBNO",
      "type": "string",
      "required": false,
      "max_length": 40,
      "validation_rules": [
        "string",
        "max:40"
      ],
      "description": "案件番号"
    },
    "tax_rate_code": {
      "label": "税率コード",
      "type": "string",
      "required": false,
      "max_length": 20,
      "validation_rules": [
        "string",
        "max:20"
      ],
      "description": "税率マスタのコード"
    },
    "supplier_shipment_date": {
      "label": "出荷予定日",
      "type": "date",
      "required": false,
      "format": "Y-m-d",
      "validation_rules": [
        "date"
      ],
      "description": "仕入先からの出荷予定日"
    },
    "expected_receipt_date": {
      "label": "受領予定日",
      "type": "date",
      "required": false,
      "format": "Y-m-d",
      "validation_rules": [
        "date"
      ],
      "description": "実入荷予定日"
    },
    "note": {
      "label": "明細備考",
      "type": "string",
      "required": false,
      "max_length": 500,
      "validation_rules": [
        "string",
        "max:500"
      ],
      "description": "明細備考欄"
    }
  },
  "foreign_key_mappings": {
    "supplier_code": {
      "reference_table": "suppliers",
      "reference_key_column": "supplier_code",
      "reference_value_column": "id",
      "required": true,
      "error_message": "指定された仕入先コードが存在しません"
    },
    "product_code": {
      "reference_table": "products",
      "reference_key_column": "product_code",
      "reference_value_column": "id",
      "required": true,
      "error_message": "指定された商品コードが存在しません"
    },
    "warehouse_code": {
      "reference_table": "warehouses",
      "reference_key_column": "warehouse_code",
      "reference_value_column": "id",
      "required": false,
      "error_message": "指定された倉庫コードが存在しません"
    },
    "tax_rate_code": {
      "reference_table": "tax_rates",
      "reference_key_column": "tax_rate_code",
      "reference_value_column": "id",
      "required": false,
      "error_message": "指定された税率コードが存在しません"
    }
  },
  "code_padding": {
    "supplier_code": 3,
    "product_code": 8,
    "warehouse_code": 3
  },
  "business_rules": {
    "slip_type_validation": {
      "rule": "slip_type IN (1,2,3,9)",
      "error_message": "伝票区分は1(仕入)、2(返品)、3(その他)、9(赤伝)のいずれかである必要があります"
    },
    "purchase_order_date_validation": {
      "rule": "purchase_order_date IS NOT NULL",
      "error_message": "発注日が指定されていません"
    },
    "quantity_validation": {
      "rule": "purchase_order_qty > 0",
      "error_message": "発注数量は0より大きい値である必要があります"
    },
    "unit_price_validation": {
      "rule": "unit_price >= 0",
      "error_message": "発注単価は0以上である必要があります"
    },
    "shipment_date_validation": {
      "rule": "supplier_shipment_date IS NULL OR supplier_shipment_date >= purchase_order_date",
      "error_message": "出荷予定日は発注日以降である必要があります"
    },
    "receipt_date_validation": {
      "rule": "expected_receipt_date IS NULL OR expected_receipt_date >= purchase_order_date",
      "error_message": "受領予定日は発注日以降である必要があります"
    }
  },
  "csv_format_example": {
    "description": "発注番号をキーとして、様々な形式のCSVに対応。NetSuite形式（コード_名称）にも対応。",
    "headers": [
      "発注番号",
      "伝票区分",
      "発注日",
      "仕入先コード",
      "倉庫コード",
      "備考",
      "商品コード",
      "商品名",
      "発注数量",
      "発注単価",
      "JOBNO",
      "税率コード",
      "出荷予定日",
      "受領予定日",
      "明細備考"
    ],
    "sample_data": [
      ["#", "※この行と次の行は削除してからインポートしてください。【必須】: 発注番号, 伝票区分, 発注日, 仕入先コード, 商品コード, 発注数量, 発注単価", "", "", "", "", "", "", "", "", "", "", "", "", ""],
      ["#", "伝票区分: 1=仕入, 2=返品, 3=その他, 9=赤伝 / 日付形式: YYYY/MM/DD または YYYY-MM-DD / NetSuite形式(コード_名称)対応", "", "", "", "", "", "", "", "", "", "", "", "", ""],
      ["PO20250106-001", "1", "2025/01/06", "000123", "01", "", "00004811", "ジェントス LEDライト", "100", "1500", "JOB001", "01", "2025/01/10", "2025/01/15", "急ぎ対応"],
      ["PO20250106-001", "1", "2025/01/06", "000123", "01", "", "00005822", "ジェントス 充電池", "50", "800", "JOB001", "01", "2025/01/10", "2025/01/15", ""],
      ["PO20250106-002", "1", "2025/01/06", "000123_株式会社サンプル商社", "01_東日本物流", "通常発注", "00004811_SNM-H132D", "", "50", "2000", "", "01_標準税率10%", "2025/01/12", "2025/01/18", ""]
    ]
  }
}
