{
  "steps": [
    {
      "id": "inputs",
      "actor": "user",
      "title": { "en": "Receive the customer's drawing and brief", "ja": "顧客の図面と要望を受け取る" },
      "detail": {
        "en": "A PDF of the warehouse (A3, 1:250, dimensions in mm), the peak throughput and the zone shares, plus the integrator's own robot datasheet.",
        "ja": "倉庫のPDF図面（A3、1:250、寸法はmm）、ピーク時の処理量とゾーン別の割合、それに自社ロボットの仕様書。"
      },
      "tools": [],
      "output": { "en": "Drawing, brief and datasheet in one folder", "ja": "図面・要望・仕様書を1つのフォルダに" }
    },
    {
      "id": "underlay",
      "actor": "agent",
      "title": { "en": "Lay the drawing under the floor and scale it", "ja": "図面を床の下に敷き、縮尺を合わせる" },
      "detail": {
        "en": "The PDF goes to Laydyne as it is; the 60 000 dimension sets the scale and the 40 000 one checks it.",
        "ja": "PDFをそのままLaydyneへ渡し、60 000の寸法線で縮尺を合わせ、40 000の寸法線で確かめます。"
      },
      "tools": ["create_space", "set_underlay"],
      "output": { "en": "A scaled underlay", "ja": "縮尺の合った下絵" }
    },
    {
      "id": "trace",
      "actor": "laydyne",
      "title": { "en": "Read the drawing", "ja": "図面を読み取る" },
      "detail": {
        "en": "Image processing, no AI: walls, door gaps, rectangles and dashed zones in floor metres, with where the words are.",
        "ja": "AIを使わない画像処理で、壁・扉の切れ目・矩形・破線のゾーンを床のメートルで返し、文字の位置も示します。"
      },
      "tools": ["trace_underlay"],
      "output": { "en": "Measured candidates", "ja": "測った候補" }
    },
    {
      "id": "build",
      "actor": "agent",
      "title": { "en": "Build the warehouse and check it against the drawing", "ja": "倉庫をつくり、図面と照合する" },
      "detail": {
        "en": "Walls, columns, docks, shelving, pallet racks, P&D stands, packing benches and zones in one edit, then the fit to the drawing and the layout checks.",
        "ja": "壁・柱・搬入口・棚・パレットラック・受け渡し台・梱包台・ゾーンを1回の編集で置き、図面とのずれと配置を検査します。"
      },
      "tools": ["edit_space", "measure_underlay_fit", "check_space", "get_view_image"],
      "output": { "en": "A model within centimetres of the drawing", "ja": "図面と数cmで一致するモデル" }
    },
    {
      "id": "process",
      "actor": "agent",
      "title": { "en": "Describe the tote transport and charging", "ja": "トートの搬送と充電を記述する" },
      "detail": {
        "en": "Totes appear on the three P&D stands at the brief's rates; the nearest free robot takes each to a free packing bench; chargers in the customer's area.",
        "ja": "3つの受け渡し台に要望どおりの頻度でトートが出て、空いている最寄りのロボットが空いた梱包台へ運びます。充電器は顧客の示した場所に置きます。"
      },
      "tools": ["get_process_catalog", "put_process_scenario", "edit_space"],
      "output": { "en": "A saved scenario", "ja": "保存した工程の定義" }
    },
    {
      "id": "run",
      "actor": "laydyne",
      "title": { "en": "Simulate the peak", "ja": "ピークを計算する" },
      "detail": {
        "en": "20 runs of three hours with a 30-minute warm-up, on the model's routes: throughput, waits at the stands, robot use and distance.",
        "ja": "モデル上の経路で、30分のウォームアップ付きの3時間を20回。処理量、受け渡し台での待ち、ロボットの稼働と走行距離。"
      },
      "tools": ["run_process_scenario"],
      "output": { "en": "Peak results with intervals", "ja": "区間付きのピーク時の結果" }
    },
    {
      "id": "fleet",
      "actor": "laydyne",
      "title": { "en": "Compare 2, 3 and 4 robots", "ja": "2台・3台・4台を比べる" },
      "detail": {
        "en": "The same arrivals and seeds at each fleet size, with the paired difference from the baseline.",
        "ja": "台数ごとに同じ到着と乱数で計算し、基準との対応のある差を出します。"
      },
      "tools": ["sweep_process_parameters", "save_process_option"],
      "output": { "en": "The fleet size per layout", "ja": "配置ごとの必要台数" }
    },
    {
      "id": "layout",
      "actor": "agent",
      "title": { "en": "Try the customer's layout change", "ja": "顧客の示した配置変更を試す" },
      "detail": {
        "en": "Move the four packing benches next to the pick zones, check the layout, and find the smallest fleet that keeps up there.",
        "ja": "梱包台4台をピッキングゾーンのそばへ移し、配置を検査して、そこで足りる最小の台数を探します。"
      },
      "tools": ["edit_space", "check_space", "sweep_process_parameters"],
      "output": { "en": "Option B", "ja": "案B" }
    },
    {
      "id": "compare",
      "actor": "laydyne",
      "title": { "en": "Compare option A with option B", "ja": "案Aと案Bを比べる" },
      "detail": {
        "en": "Two frozen layouts with their own scenarios, under the same arrivals, window, seed and runs; which differences are beyond the noise.",
        "ja": "固定した2つの配置をそれぞれの定義で、同じ到着・観測時間・乱数・回数で計算し、誤差を超える差を示します。"
      },
      "tools": ["compare_process_options"],
      "output": { "en": "A saved comparison", "ja": "保存した比較" }
    },
    {
      "id": "pack",
      "actor": "agent",
      "title": { "en": "Make the proposal pack", "ja": "提案資料をまとめる" },
      "detail": {
        "en": "The dimensioned plan and the robots' routes as PDFs, the fleet table as CSV, the comparison as JSON, the project file and a summary.",
        "ja": "寸法入りの平面図とロボットの経路をPDFで、台数の比較をCSVで、比較をJSONで、案件ファイルと要約も添えます。"
      },
      "tools": ["get_view_image", "get_process_drawing", "get_process_comparison", "export_project"],
      "output": { "en": "Files to send", "ja": "送るファイル一式" }
    },
    {
      "id": "decide",
      "actor": "user",
      "title": { "en": "Check the assumptions and send", "ja": "仮定を確かめて送る" },
      "detail": {
        "en": "Confirm with the customer what the model assumed (how many totes a bench holds, outbound handling) before quoting.",
        "ja": "見積もりの前に、モデルが仮定したこと（梱包台に置けるトートの数、梱包後の出荷の運び方）を顧客に確かめます。"
      },
      "tools": [],
      "output": { "en": "A proposal with its evidence", "ja": "根拠つきの提案" }
    }
  ]
}
