{
  "factory_id": "F11",
  "design_revision": 2,
  "design_story": "따뜻한 배터·베이킹동의 옆에 스펀지 냉각동을 붙이고, 남쪽 장식홀은 더 낮은 분홍 파사드로 구별한다. 크림은 장식홀의 북쪽 짧은 지선에서만 들어온다. 제품은 남서쪽 재료실로 돌아가지 않고 남동쪽 작은 냉장 출하실로 나간다. 팬 대차·케이크 받침·뚜껑은 제한된 공급실과 인계 작업대에 둔다.",
  "site": {
    "width": 149,
    "depth": 107
  },
  "buildings": [
    {
      "id": "baking",
      "name": "배터·팬·스펀지 베이킹동",
      "role": "production",
      "polygon": [
        [
          30,
          58
        ],
        [
          76,
          58
        ],
        [
          76,
          88
        ],
        [
          30,
          88
        ]
      ],
      "height": 10,
      "roof": {
        "type": "gable",
        "axis": "x",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.84,
          0.78,
          0.67
        ],
        "accent": [
          0.68,
          0.32,
          0.37
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    },
    {
      "id": "cooling",
      "name": "스펀지 냉각·탈팬동",
      "role": "production",
      "polygon": [
        [
          76,
          54
        ],
        [
          102,
          54
        ],
        [
          102,
          84
        ],
        [
          76,
          84
        ]
      ],
      "height": 10,
      "roof": {
        "type": "barrel",
        "axis": "x",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.82,
          0.87,
          0.81
        ],
        "accent": [
          0.68,
          0.32,
          0.37
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    },
    {
      "id": "cream-wing",
      "name": "크림 준비 지선",
      "role": "production",
      "polygon": [
        [
          102,
          54
        ],
        [
          126,
          54
        ],
        [
          126,
          64
        ],
        [
          102,
          64
        ]
      ],
      "height": 8,
      "roof": {
        "type": "flat",
        "axis": "x",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.87,
          0.87,
          0.8
        ],
        "accent": [
          0.1,
          0.28,
          0.36
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    },
    {
      "id": "finish",
      "name": "분할·층조립·포장동",
      "role": "production",
      "polygon": [
        [
          76,
          28
        ],
        [
          126,
          28
        ],
        [
          126,
          54
        ],
        [
          76,
          54
        ]
      ],
      "height": 9,
      "roof": {
        "type": "sawtooth",
        "axis": "y",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.89,
          0.86,
          0.83
        ],
        "accent": [
          0.68,
          0.32,
          0.37
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    },
    {
      "id": "materials",
      "name": "밀가루·팬·받침 공급",
      "role": "warehouse",
      "polygon": [
        [
          30,
          28
        ],
        [
          70,
          28
        ],
        [
          70,
          40
        ],
        [
          30,
          40
        ]
      ],
      "height": 7,
      "roof": {
        "type": "shed",
        "axis": "x",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.77,
          0.74,
          0.65
        ],
        "accent": [
          0.1,
          0.28,
          0.36
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    },
    {
      "id": "support",
      "name": "품질·직원·유틸리티 별동",
      "role": "office",
      "polygon": [
        [
          10,
          28
        ],
        [
          24,
          28
        ],
        [
          24,
          72
        ],
        [
          10,
          72
        ]
      ],
      "height": 6,
      "roof": {
        "type": "flat",
        "axis": "x",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.72,
          0.75,
          0.66
        ],
        "accent": [
          0.1,
          0.28,
          0.36
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    }
  ],
  "zones": [
    {
      "id": "batter",
      "name": "배터 계량 혼합",
      "role": "process",
      "building_id": "baking",
      "x": 30,
      "y": 74,
      "width": 23,
      "depth": 14,
      "stage_ids": [
        "S01"
      ],
      "fixtures": []
    },
    {
      "id": "pan",
      "name": "팬 충전",
      "role": "process",
      "building_id": "baking",
      "x": 53,
      "y": 74,
      "width": 23,
      "depth": 14,
      "stage_ids": [
        "S02"
      ],
      "fixtures": []
    },
    {
      "id": "bake",
      "name": "스펀지 굽기",
      "role": "process",
      "building_id": "baking",
      "x": 30,
      "y": 58,
      "width": 46,
      "depth": 16,
      "stage_ids": [
        "S03"
      ],
      "fixtures": []
    },
    {
      "id": "cool",
      "name": "냉각·탈팬",
      "role": "process",
      "building_id": "cooling",
      "x": 76,
      "y": 54,
      "width": 26,
      "depth": 30,
      "stage_ids": [
        "S04"
      ],
      "fixtures": [
        {
          "id": "F11-robot-1-0-tray-0",
          "type": "worktable",
          "x": 82.25,
          "y": 77,
          "width": 1.2,
          "depth": 1,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "성형 트레이 인계",
          "model_profile": "food_tray_handoff"
        },
        {
          "id": "F11-robot-1-0-tray-1",
          "type": "worktable",
          "x": 83.75,
          "y": 77,
          "width": 1.2,
          "depth": 1,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "성형 트레이 인계",
          "model_profile": "food_tray_handoff"
        },
        {
          "id": "F11-robot-1-1-tray-0",
          "type": "worktable",
          "x": 95.25,
          "y": 77,
          "width": 1.2,
          "depth": 1,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "성형 트레이 인계",
          "model_profile": "food_tray_handoff"
        },
        {
          "id": "F11-robot-1-1-tray-1",
          "type": "worktable",
          "x": 96.75,
          "y": 77,
          "width": 1.2,
          "depth": 1,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "성형 트레이 인계",
          "model_profile": "food_tray_handoff"
        }
      ]
    },
    {
      "id": "cream",
      "name": "크림 제조",
      "role": "process",
      "building_id": "cream-wing",
      "x": 102,
      "y": 54,
      "width": 24,
      "depth": 10,
      "stage_ids": [
        "S06"
      ],
      "fixtures": []
    },
    {
      "id": "slice",
      "name": "스펀지 분할·절단",
      "role": "process",
      "building_id": "finish",
      "x": 76,
      "y": 42,
      "width": 20,
      "depth": 12,
      "stage_ids": [
        "S05"
      ],
      "fixtures": []
    },
    {
      "id": "decor",
      "name": "층 조립·장식",
      "role": "process",
      "building_id": "finish",
      "x": 96,
      "y": 42,
      "width": 30,
      "depth": 12,
      "stage_ids": [
        "S07"
      ],
      "fixtures": [
        {
          "id": "F11-robot-topping-0",
          "type": "worktable",
          "x": 104,
          "y": 52,
          "width": 2,
          "depth": 1.5,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "식품 토핑 작업대",
          "model_profile": "food_topping_station"
        },
        {
          "id": "F11-robot-topping-1",
          "type": "worktable",
          "x": 120,
          "y": 52,
          "width": 2,
          "depth": 1.5,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "식품 토핑 작업대",
          "model_profile": "food_topping_station"
        }
      ]
    },
    {
      "id": "pack",
      "name": "뚜껑·라벨 포장",
      "role": "packaging",
      "building_id": "finish",
      "x": 76,
      "y": 28,
      "width": 30,
      "depth": 14,
      "stage_ids": [
        "S08"
      ],
      "fixtures": [
        {
          "id": "F11-robot-2-0-handoff",
          "type": "worktable",
          "x": 85.4,
          "y": 39,
          "width": 2,
          "depth": 1.5,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "식품 외포장 인계대",
          "model_profile": "food_case_handoff"
        },
        {
          "id": "F11-robot-2-1-handoff",
          "type": "worktable",
          "x": 101.4,
          "y": 39,
          "width": 2,
          "depth": 1.5,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "식품 외포장 인계대",
          "model_profile": "food_case_handoff"
        }
      ]
    },
    {
      "id": "cold",
      "name": "디저트 냉장 출하",
      "role": "cold_store",
      "building_id": "finish",
      "x": 106,
      "y": 28,
      "width": 20,
      "depth": 14,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "dessert-stock",
          "type": "cold_rack",
          "x": 116,
          "y": 33,
          "width": 14,
          "depth": 6,
          "height": 4,
          "count": 10,
          "rows": 2,
          "columns": 5,
          "angle": 0,
          "label": "당일 케이크 냉장"
        }
      ]
    },
    {
      "id": "materials-zone",
      "name": "계량 원료·팬·받침",
      "role": "warehouse",
      "building_id": "materials",
      "x": 30,
      "y": 28,
      "width": 40,
      "depth": 12,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "cake-supplies",
          "type": "bin_rack",
          "x": 50,
          "y": 34,
          "width": 30,
          "depth": 7,
          "height": 3,
          "count": 12,
          "rows": 2,
          "columns": 6,
          "angle": 0,
          "label": "팬·받침·원료 토트"
        }
      ]
    },
    {
      "id": "qa",
      "name": "공정 품질·시료",
      "role": "laboratory",
      "building_id": "support",
      "x": 10,
      "y": 58,
      "width": 14,
      "depth": 14,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "qa-furniture",
          "type": "lab_bench",
          "x": 17.0,
          "y": 65.0,
          "width": 11,
          "depth": 7,
          "height": 1.4,
          "count": 3,
          "rows": 1,
          "columns": 3,
          "angle": 0,
          "label": "품질·공정 시료"
        }
      ]
    },
    {
      "id": "staff",
      "name": "작업복·작업기록",
      "role": "staff",
      "building_id": "support",
      "x": 10,
      "y": 42,
      "width": 14,
      "depth": 16,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "staff-furniture",
          "type": "locker_bank",
          "x": 17.0,
          "y": 50.0,
          "width": 11,
          "depth": 7,
          "height": 1.4,
          "count": 8,
          "rows": 1,
          "columns": 8,
          "angle": 0,
          "label": "구역별 작업복"
        }
      ]
    },
    {
      "id": "plant",
      "name": "공장 열원·냉열",
      "role": "utility",
      "building_id": "support",
      "x": 10,
      "y": 28,
      "width": 14,
      "depth": 14,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "plant-furniture",
          "type": "chiller",
          "x": 17.0,
          "y": 35.0,
          "width": 11,
          "depth": 7,
          "height": 3,
          "count": 2,
          "rows": 1,
          "columns": 2,
          "angle": 0,
          "label": "냉열·공기 공급"
        }
      ]
    }
  ],
  "equipment": [
    {
      "stage_id": "S01",
      "index": 0,
      "x": 35,
      "y": 78,
      "angle": 0
    },
    {
      "stage_id": "S01",
      "index": 1,
      "x": 47,
      "y": 78,
      "angle": 0
    },
    {
      "stage_id": "S01",
      "index": 2,
      "x": 35,
      "y": 84,
      "angle": 0
    },
    {
      "stage_id": "S01",
      "index": 3,
      "x": 47,
      "y": 84,
      "angle": 0
    },
    {
      "stage_id": "S02",
      "index": 0,
      "x": 59,
      "y": 81,
      "angle": 0
    },
    {
      "stage_id": "S02",
      "index": 1,
      "x": 70,
      "y": 81,
      "angle": 0
    },
    {
      "stage_id": "S03",
      "index": 0,
      "x": 41.5,
      "y": 66,
      "angle": 0
    },
    {
      "stage_id": "S03",
      "index": 1,
      "x": 64.5,
      "y": 66,
      "angle": 0
    },
    {
      "stage_id": "S04",
      "index": 0,
      "x": 83,
      "y": 69,
      "angle": 0
    },
    {
      "stage_id": "S04",
      "index": 1,
      "x": 96,
      "y": 69,
      "angle": 0
    },
    {
      "stage_id": "S06",
      "index": 0,
      "x": 108,
      "y": 59,
      "angle": 0
    },
    {
      "stage_id": "S06",
      "index": 1,
      "x": 120,
      "y": 59,
      "angle": 0
    },
    {
      "stage_id": "S05",
      "index": 0,
      "x": 81,
      "y": 48,
      "angle": 0
    },
    {
      "stage_id": "S05",
      "index": 1,
      "x": 91,
      "y": 48,
      "angle": 0
    },
    {
      "stage_id": "S07",
      "index": 0,
      "x": 103,
      "y": 48,
      "angle": 0
    },
    {
      "stage_id": "S07",
      "index": 1,
      "x": 119,
      "y": 48,
      "angle": 0
    },
    {
      "stage_id": "S08",
      "index": 0,
      "x": 83,
      "y": 33,
      "angle": 0
    },
    {
      "stage_id": "S08",
      "index": 1,
      "x": 99,
      "y": 33,
      "angle": 0
    }
  ],
  "robots": [
    {
      "definition_index": 0,
      "instance_index": 0,
      "stage_id": "S07",
      "x": 103.7,
      "y": 52,
      "angle": 0,
      "task_station": "F11-robot-topping-0",
      "task_point": [
        104.25,
        51.94,
        1.17
      ],
      "task_points": [
        [
          104.25,
          51.94,
          1.17
        ],
        [
          104.25,
          52.06,
          1.17
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F11-robot-topping-0"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          104,
          52,
          0
        ],
        "reason": "장식공정 후면 인계대 좌측 빈 면에 bench SCARA를 고정하고 오른쪽 케이크 표면 두 위치에 토핑한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도",
      "mounting_height_m": 0.765
    },
    {
      "definition_index": 0,
      "instance_index": 1,
      "stage_id": "S07",
      "x": 119.7,
      "y": 52,
      "angle": 0,
      "task_station": "F11-robot-topping-1",
      "task_point": [
        120.25,
        51.94,
        1.17
      ],
      "task_points": [
        [
          120.25,
          51.94,
          1.17
        ],
        [
          120.25,
          52.06,
          1.17
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F11-robot-topping-1"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          119,
          52,
          0
        ],
        "reason": "장식공정 후면 인계대 좌측 빈 면에 bench SCARA를 고정하고 오른쪽 케이크 표면 두 위치에 토핑한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도",
      "mounting_height_m": 0.765
    },
    {
      "definition_index": 1,
      "instance_index": 0,
      "stage_id": "S04",
      "x": 83,
      "y": 77,
      "angle": 0,
      "task_station": "F11-robot-1-0-tray-1",
      "task_point": [
        82.25,
        77,
        1.21
      ],
      "task_points": [
        [
          82.25,
          77,
          1.21
        ],
        [
          83.75,
          77,
          1.21
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F11-robot-1-0-tray-0",
          "F11-robot-1-0-tray-1"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          82,
          77,
          0
        ],
        "reason": "공정 사이 실제 트레이 두 작업대를 덮는 포털로 배치하고 기둥을 설비 footprint 밖에 둔다. 반입 트레이에서 대기 트레이로 수직 상승 후 이송한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도",
      "gantry_span": [
        5.5,
        2.4,
        3.4
      ],
      "tool_span": [
        0.6,
        0.29
      ]
    },
    {
      "definition_index": 1,
      "instance_index": 1,
      "stage_id": "S04",
      "x": 96,
      "y": 77,
      "angle": 0,
      "task_station": "F11-robot-1-1-tray-1",
      "task_point": [
        95.25,
        77,
        1.21
      ],
      "task_points": [
        [
          95.25,
          77,
          1.21
        ],
        [
          96.75,
          77,
          1.21
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F11-robot-1-1-tray-0",
          "F11-robot-1-1-tray-1"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          96,
          77,
          0
        ],
        "reason": "공정 사이 실제 트레이 두 작업대를 덮는 포털로 배치하고 기둥을 설비 footprint 밖에 둔다. 반입 트레이에서 대기 트레이로 수직 상승 후 이송한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도",
      "gantry_span": [
        5.5,
        2.4,
        3.4
      ],
      "tool_span": [
        0.6,
        0.29
      ]
    },
    {
      "definition_index": 2,
      "instance_index": 0,
      "stage_id": "S08",
      "x": 84.0,
      "y": 39,
      "angle": 0,
      "task_station": "F11-robot-2-0-handoff",
      "task_point": [
        85.0,
        39,
        1.18
      ],
      "task_points": [
        [
          85.0,
          39,
          1.18
        ],
        [
          85.60000000000001,
          39,
          1.35
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F11-robot-2-0-handoff"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          84,
          39,
          0
        ],
        "reason": "해당 공정의 밀폐 제품/트레이 카트가 공급하는 실제 인계면에서 다음 취급 위치로 이동한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도"
    },
    {
      "definition_index": 2,
      "instance_index": 1,
      "stage_id": "S08",
      "x": 100.0,
      "y": 39,
      "angle": 0,
      "task_station": "F11-robot-2-1-handoff",
      "task_point": [
        101.0,
        39,
        1.18
      ],
      "task_points": [
        [
          101.0,
          39,
          1.18
        ],
        [
          101.60000000000001,
          39,
          1.35
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F11-robot-2-1-handoff"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          100,
          39,
          0
        ],
        "reason": "해당 공정의 밀폐 제품/트레이 카트가 공급하는 실제 인계면에서 다음 취급 위치로 이동한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도"
    },
    {
      "definition_index": 3,
      "instance_index": 0,
      "stage_id": "S08",
      "x": 78,
      "y": 40,
      "angle": 0,
      "task_station": "받침·뚜껑·출하 토트"
    },
    {
      "definition_index": 3,
      "instance_index": 1,
      "stage_id": "S08",
      "x": 110,
      "y": 40,
      "angle": 0,
      "task_station": "받침·뚜껑·출하 토트"
    },
    {
      "definition_index": 3,
      "instance_index": 2,
      "stage_id": "S08",
      "x": 122,
      "y": 40,
      "angle": 0,
      "task_station": "받침·뚜껑·출하 토트"
    }
  ],
  "logistics": [
    {
      "id": "F11-liquid-F11-S01-S02-0",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          36.8,
          76.05,
          0.73
        ],
        [
          36.8,
          75.85,
          0.73
        ],
        [
          36.8,
          75.85,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S01-S02-1",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          48.8,
          76.05,
          0.73
        ],
        [
          48.8,
          75.85,
          0.73
        ],
        [
          48.8,
          75.85,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S01-S02-2",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          36.8,
          82.05,
          0.73
        ],
        [
          36.8,
          81.85,
          0.73
        ],
        [
          36.8,
          81.85,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S01-S02-3",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          48.8,
          82.05,
          0.73
        ],
        [
          48.8,
          81.85,
          0.73
        ],
        [
          48.8,
          81.85,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S01-S02-4",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          62.2,
          83.4,
          2.58
        ],
        [
          62.2,
          84.15,
          2.58
        ],
        [
          62.2,
          84.15,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S01-S02-5",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          73.2,
          83.4,
          2.58
        ],
        [
          73.2,
          84.15,
          2.58
        ],
        [
          73.2,
          84.15,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S01-S02-6",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          36.8,
          75.85,
          7.65
        ],
        [
          62.2,
          75.85,
          7.65
        ],
        [
          62.2,
          84.15,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F11-liquid-F11-S01-S02-7",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          48.8,
          75.85,
          7.65
        ],
        [
          36.8,
          75.85,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F11-liquid-F11-S01-S02-8",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          36.8,
          81.85,
          7.65
        ],
        [
          36.8,
          75.85,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F11-liquid-F11-S01-S02-9",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          48.8,
          81.85,
          7.65
        ],
        [
          36.8,
          81.85,
          7.65
        ],
        [
          36.8,
          75.85,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F11-liquid-F11-S01-S02-10",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          62.2,
          84.15,
          7.65
        ],
        [
          73.2,
          84.15,
          7.65
        ]
      ],
      "width": 0.11,
      "transfer_method": "cake_batter",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F11-liquid-F11-S06-S07-0",
      "kind": "pipe",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          109.8,
          57.05,
          0.73
        ],
        [
          109.8,
          56.85,
          0.73
        ],
        [
          109.8,
          56.85,
          7.43
        ]
      ],
      "width": 0.11,
      "transfer_method": "cream",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S06-S07-1",
      "kind": "pipe",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          121.8,
          57.05,
          0.73
        ],
        [
          121.8,
          56.85,
          0.73
        ],
        [
          121.8,
          56.85,
          7.43
        ]
      ],
      "width": 0.11,
      "transfer_method": "cream",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S06-S07-2",
      "kind": "pipe",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          98.0,
          47.0,
          1.98
        ],
        [
          97.35,
          47.0,
          1.98
        ],
        [
          97.35,
          47.0,
          7.43
        ]
      ],
      "width": 0.11,
      "transfer_method": "cream",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S06-S07-3",
      "kind": "pipe",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          114.0,
          47.0,
          1.98
        ],
        [
          113.35,
          47.0,
          1.98
        ],
        [
          113.35,
          47.0,
          7.43
        ]
      ],
      "width": 0.11,
      "transfer_method": "cream",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F11-liquid-F11-S06-S07-4",
      "kind": "pipe",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          109.8,
          56.85,
          7.43
        ],
        [
          97.35,
          56.85,
          7.43
        ],
        [
          97.35,
          47.0,
          7.43
        ]
      ],
      "width": 0.11,
      "transfer_method": "cream",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F11-liquid-F11-S06-S07-5",
      "kind": "pipe",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          121.8,
          56.85,
          7.43
        ],
        [
          109.8,
          56.85,
          7.43
        ]
      ],
      "width": 0.11,
      "transfer_method": "cream",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F11-liquid-F11-S06-S07-6",
      "kind": "pipe",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          97.35,
          47.0,
          7.43
        ],
        [
          113.35,
          47.0,
          7.43
        ]
      ],
      "width": 0.11,
      "transfer_method": "cream",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F11-solid-S02-S03-0",
      "kind": "conveyor",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          63.0,
          81.0,
          1.12
        ],
        [
          63.6,
          81.0,
          1.12
        ],
        [
          63.56,
          81.0,
          1.12
        ],
        [
          63.56,
          77.94,
          1.12
        ],
        [
          49.56,
          77.94,
          1.12
        ],
        [
          49.56,
          75.94,
          1.12
        ],
        [
          30.9,
          75.94,
          1.12
        ],
        [
          30.9,
          66.0,
          1.12
        ],
        [
          31.5,
          66.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-solid-S02-S03-1",
      "kind": "conveyor",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          74.0,
          81.0,
          1.12
        ],
        [
          74.6,
          81.0,
          1.12
        ],
        [
          74.56,
          81.0,
          1.12
        ],
        [
          74.56,
          77.94,
          1.12
        ],
        [
          53.9,
          77.94,
          1.12
        ],
        [
          53.9,
          66.0,
          1.12
        ],
        [
          54.5,
          66.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-solid-S03-S04-0",
      "kind": "conveyor",
      "from": "S03",
      "to": "S04",
      "points": [
        [
          51.5,
          66.0,
          1.12
        ],
        [
          52.1,
          66.0,
          1.12
        ],
        [
          52.1,
          69.0,
          1.12
        ],
        [
          77.4,
          69.0,
          1.12
        ],
        [
          78.0,
          69.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-solid-S03-S04-1",
      "kind": "conveyor",
      "from": "S03",
      "to": "S04",
      "points": [
        [
          74.5,
          66.0,
          1.12
        ],
        [
          75.1,
          66.0,
          1.12
        ],
        [
          77.44,
          66.0,
          1.12
        ],
        [
          77.44,
          64.44,
          1.12
        ],
        [
          90.4,
          64.44,
          1.12
        ],
        [
          90.4,
          69.0,
          1.12
        ],
        [
          91.0,
          69.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-solid-S04-S05-0",
      "kind": "conveyor",
      "from": "S04",
      "to": "S05",
      "points": [
        [
          88.0,
          69.0,
          1.12
        ],
        [
          88.6,
          69.0,
          1.12
        ],
        [
          88.56,
          69.0,
          1.12
        ],
        [
          88.56,
          64.44,
          1.12
        ],
        [
          77.9,
          64.44,
          1.12
        ],
        [
          77.9,
          48.0,
          1.12
        ],
        [
          78.5,
          48.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-solid-S04-S05-1",
      "kind": "conveyor",
      "from": "S04",
      "to": "S05",
      "points": [
        [
          101.0,
          69.0,
          1.12
        ],
        [
          101.5,
          69.0,
          1.12
        ],
        [
          101.5,
          69.0,
          1.12
        ],
        [
          101.5,
          64.44,
          1.12
        ],
        [
          87.9,
          64.44,
          1.12
        ],
        [
          87.9,
          48.0,
          1.12
        ],
        [
          88.5,
          48.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review",
      "design_note": "물류 폭과 벽체 두께를 포함한 이격을 확보하도록 벽을 따라 달리던 구간의 중심선을 조정했다. 설비·기물 설치점은 유지한다."
    },
    {
      "id": "F11-solid-S05-S07-0",
      "kind": "conveyor",
      "from": "S05",
      "to": "S07",
      "points": [
        [
          83.5,
          48.0,
          1.12
        ],
        [
          84.1,
          48.0,
          1.12
        ],
        [
          87.94,
          48.0,
          1.12
        ],
        [
          87.94,
          45.94,
          1.12
        ],
        [
          97.4,
          45.94,
          1.12
        ],
        [
          97.4,
          48.0,
          1.12
        ],
        [
          98.0,
          48.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-solid-S05-S07-1",
      "kind": "conveyor",
      "from": "S05",
      "to": "S07",
      "points": [
        [
          93.5,
          48.0,
          1.12
        ],
        [
          94.1,
          48.0,
          1.12
        ],
        [
          97.44,
          48.0,
          1.12
        ],
        [
          97.44,
          44.94,
          1.12
        ],
        [
          108.56,
          44.94,
          1.12
        ],
        [
          108.56,
          45.94,
          1.12
        ],
        [
          110.56,
          45.94,
          1.12
        ],
        [
          110.56,
          48.0,
          1.12
        ],
        [
          113.4,
          48.0,
          1.12
        ],
        [
          114.0,
          48.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-solid-S07-S08-0",
      "kind": "conveyor",
      "from": "S07",
      "to": "S08",
      "points": [
        [
          108.0,
          48.0,
          1.12
        ],
        [
          108.6,
          48.0,
          1.12
        ],
        [
          108.56,
          48.0,
          1.12
        ],
        [
          108.56,
          44.94,
          1.12
        ],
        [
          78.4,
          44.94,
          1.12
        ],
        [
          78.4,
          33.0,
          1.12
        ],
        [
          79.0,
          33.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-solid-S07-S08-1",
      "kind": "conveyor",
      "from": "S07",
      "to": "S08",
      "points": [
        [
          124.0,
          48.0,
          1.12
        ],
        [
          124.6,
          48.0,
          1.12
        ],
        [
          124.56,
          48.0,
          1.12
        ],
        [
          124.56,
          44.94,
          1.12
        ],
        [
          94.4,
          44.94,
          1.12
        ],
        [
          94.4,
          33.0,
          1.12
        ],
        [
          95.0,
          33.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F11-staff-qa",
      "kind": "pedestrian",
      "from": "gate",
      "to": "qa",
      "points": [
        [
          74.5,
          3,
          0.2
        ],
        [
          74.5,
          12,
          0.2
        ],
        [
          8,
          12,
          0.2
        ],
        [
          8,
          30,
          0.2
        ],
        [
          8,
          60,
          0.2
        ],
        [
          11,
          60,
          0.2
        ]
      ],
      "width": 1.2,
      "design_note": "정문 보행 연결망에서 지원동 각 부서의 남측 비품 없는 접근 통로로 진입한다. 생산물 운반과 구별되는 직원 이동선이다."
    },
    {
      "id": "F11-staff-staff",
      "kind": "pedestrian",
      "from": "gate",
      "to": "staff",
      "points": [
        [
          74.5,
          3,
          0.2
        ],
        [
          74.5,
          12,
          0.2
        ],
        [
          8,
          12,
          0.2
        ],
        [
          8,
          30,
          0.2
        ],
        [
          8,
          44,
          0.2
        ],
        [
          11,
          44,
          0.2
        ]
      ],
      "width": 1.2,
      "design_note": "정문 보행 연결망에서 지원동 각 부서의 남측 비품 없는 접근 통로로 진입한다. 생산물 운반과 구별되는 직원 이동선이다."
    },
    {
      "id": "F11-staff-plant",
      "kind": "pedestrian",
      "from": "gate",
      "to": "plant",
      "points": [
        [
          74.5,
          3,
          0.2
        ],
        [
          74.5,
          12,
          0.2
        ],
        [
          8,
          12,
          0.2
        ],
        [
          8,
          30,
          0.2
        ],
        [
          11,
          30,
          0.2
        ]
      ],
      "width": 1.2,
      "design_note": "정문 보행 연결망에서 지원동 각 부서의 남측 비품 없는 접근 통로로 진입한다. 생산물 운반과 구별되는 직원 이동선이다."
    },
    {
      "id": "F11-dock-1-inbound",
      "kind": "pedestrian",
      "from": "raw-dock",
      "to": "S01",
      "points": [
        [
          30,
          80,
          0.2
        ],
        [
          31,
          80,
          0.2
        ],
        [
          31,
          80.4,
          0.2
        ],
        [
          35,
          80.4,
          0.2
        ]
      ],
      "width": 1.2,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "냉장·냉동품은 단열 밀폐 카트, 건식 원료·제품은 배치별 밀폐 위생 용기",
      "design_note": "계란·원료 도크의 실제 좌표에서 투입 공정으로 연결하는 원료 인계 경로. 선반 예약 면적과 설비를 피한 서비스 통로를 사용한다.",
      "enclosure": {
        "width": 2.0,
        "height": 2.7,
        "type": "sealed_transfer_gallery"
      }
    },
    {
      "id": "F11-dock-3-inbound",
      "kind": "pedestrian",
      "from": "raw-dock",
      "to": "S06",
      "points": [
        [
          126,
          59,
          0.2
        ],
        [
          122.9,
          59,
          0.2
        ]
      ],
      "width": 1.2,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "냉장·냉동품은 단열 밀폐 카트, 건식 원료·제품은 배치별 밀폐 위생 용기",
      "design_note": "크림 원료 도크의 실제 좌표에서 투입 공정으로 연결하는 원료 인계 경로. 선반 예약 면적과 설비를 피한 서비스 통로를 사용한다.",
      "enclosure": {
        "width": 2.0,
        "height": 2.7,
        "type": "sealed_transfer_gallery"
      }
    },
    {
      "id": "F11-dock-2-outbound",
      "kind": "pedestrian",
      "from": "S08",
      "to": "shipping-dock",
      "points": [
        [
          103.9,
          33,
          0.2
        ],
        [
          105,
          33,
          0.2
        ],
        [
          105,
          38,
          0.2
        ],
        [
          125,
          38,
          0.2
        ],
        [
          125,
          35,
          0.2
        ],
        [
          126,
          35,
          0.2
        ]
      ],
      "width": 1.2,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "냉장·냉동품은 단열 밀폐 카트, 건식 원료·제품은 배치별 밀폐 위생 용기",
      "design_note": "냉장 케이크 출하 도크의 실제 좌표에서 최종 공정 출구를 잇는 제품 인계 경로. 선반 예약 면적과 설비를 피한 서비스 통로를 사용한다.",
      "enclosure": {
        "width": 2.0,
        "height": 2.7,
        "type": "sealed_transfer_gallery"
      }
    },
    {
      "id": "F11-robot-access-F11-robot-1-0-tray-0",
      "kind": "pedestrian",
      "from": "route:F11-solid-S03-S04-0",
      "to": "fixture:F11-robot-1-0-tray-0",
      "points": [
        [
          77.4,
          69.0,
          0.2
        ],
        [
          77.4,
          75.95,
          0.2
        ],
        [
          82.25,
          75.95,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F11-solid-S03-S04-0",
      "source_handoff": {
        "existing_route_id": "F11-solid-S03-S04-0",
        "world_xy": [
          77.4,
          69.0
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F11-solid-S03-S04-0",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            77.4,
            69.0,
            0.2
          ],
          "route_point_world_xyz": [
            77.4,
            69.0,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F11-robot-access-F11-robot-1-0-tray-1",
      "kind": "pedestrian",
      "from": "route:F11-solid-S04-S05-0",
      "to": "fixture:F11-robot-1-0-tray-1",
      "points": [
        [
          88.56,
          69.0,
          0.2
        ],
        [
          88.56,
          75.95,
          0.2
        ],
        [
          83.75,
          75.95,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F11-solid-S04-S05-0",
      "source_handoff": {
        "existing_route_id": "F11-solid-S04-S05-0",
        "world_xy": [
          88.56,
          69.0
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F11-solid-S04-S05-0",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            88.56,
            69.0,
            0.2
          ],
          "route_point_world_xyz": [
            88.56,
            69.0,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F11-robot-access-F11-robot-1-1-tray-0",
      "kind": "pedestrian",
      "from": "route:F11-solid-S03-S04-1",
      "to": "fixture:F11-robot-1-1-tray-0",
      "points": [
        [
          90.4,
          69.0,
          0.2
        ],
        [
          90.4,
          75.95,
          0.2
        ],
        [
          95.25,
          75.95,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F11-solid-S03-S04-1",
      "source_handoff": {
        "existing_route_id": "F11-solid-S03-S04-1",
        "world_xy": [
          90.4,
          69.0
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F11-solid-S03-S04-1",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            90.4,
            69.0,
            0.2
          ],
          "route_point_world_xyz": [
            90.4,
            69.0,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F11-robot-access-F11-robot-1-1-tray-1",
      "kind": "pedestrian",
      "from": "route:F11-solid-S04-S05-1",
      "to": "fixture:F11-robot-1-1-tray-1",
      "points": [
        [
          101.5,
          69,
          0.2
        ],
        [
          101.5,
          74.9,
          0.2
        ],
        [
          96.75,
          74.9,
          0.2
        ],
        [
          96.75,
          75.95,
          0.2
        ]
      ],
      "width": 0.6,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "냉각기와 외벽 사이 1m 틈에서 폭0.6m 전용 밀폐 트레이 카트가 북측 갠트리 전면으로 접근한다. 기둥 발판 남측을 돌아 두 번째 인계대에 도달한다.",
      "feeds_from_route_id": "F11-solid-S04-S05-1",
      "source_handoff": {
        "existing_route_id": "F11-solid-S04-S05-1",
        "world_xy": [
          101.5,
          69.0
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F11-solid-S04-S05-1",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            101.5,
            69,
            0.2
          ],
          "route_point_world_xyz": [
            101.5,
            69.0,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F11-robot-access-F11-robot-topping-0",
      "kind": "pedestrian",
      "from": "route:F11-solid-S07-S08-0",
      "to": "fixture:F11-robot-topping-0",
      "points": [
        [
          108.56,
          48.0,
          0.2
        ],
        [
          108.56,
          52,
          0.2
        ],
        [
          105.55,
          52,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F11-solid-S07-S08-0",
      "source_handoff": {
        "existing_route_id": "F11-solid-S07-S08-0",
        "world_xy": [
          108.56,
          48.0
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F11-solid-S07-S08-0",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            108.56,
            48.0,
            0.2
          ],
          "route_point_world_xyz": [
            108.56,
            48.0,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F11-robot-access-F11-robot-topping-1",
      "kind": "pedestrian",
      "from": "route:F11-solid-S07-S08-1",
      "to": "fixture:F11-robot-topping-1",
      "points": [
        [
          124.56,
          48.0,
          0.2
        ],
        [
          124.56,
          52,
          0.2
        ],
        [
          121.55,
          52,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F11-solid-S07-S08-1",
      "source_handoff": {
        "existing_route_id": "F11-solid-S07-S08-1",
        "world_xy": [
          124.56,
          48.0
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F11-solid-S07-S08-1",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            124.56,
            48.0,
            0.2
          ],
          "route_point_world_xyz": [
            124.56,
            48.0,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F11-robot-access-F11-robot-2-0-handoff",
      "kind": "pedestrian",
      "from": "route:F11-solid-S07-S08-0",
      "to": "fixture:F11-robot-2-0-handoff",
      "points": [
        [
          85.4,
          44.94,
          0.2
        ],
        [
          85.4,
          40.300000000000004,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F11-solid-S07-S08-0",
      "source_handoff": {
        "existing_route_id": "F11-solid-S07-S08-0",
        "world_xy": [
          85.4,
          44.94
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F11-solid-S07-S08-0",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            85.4,
            44.94,
            0.2
          ],
          "route_point_world_xyz": [
            85.4,
            44.94,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F11-robot-access-F11-robot-2-1-handoff",
      "kind": "pedestrian",
      "from": "route:F11-dock-2-outbound",
      "to": "fixture:F11-robot-2-1-handoff",
      "points": [
        [
          105,
          38,
          0.2
        ],
        [
          105,
          39,
          0.2
        ],
        [
          102.95,
          39,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F11-dock-2-outbound",
      "source_handoff": {
        "existing_route_id": "F11-dock-2-outbound",
        "world_xy": [
          105,
          38
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F11-dock-2-outbound",
          "method": "direct_polyline_join",
          "access_point_world_xyz": [
            105,
            38,
            0.2
          ],
          "route_point_world_xyz": [
            105,
            38,
            0.2
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    }
  ],
  "yard": {
    "roads": [
      {
        "points": [
          [
            4,
            8
          ],
          [
            141,
            8
          ],
          [
            141,
            99
          ],
          [
            4,
            99
          ],
          [
            4,
            8
          ]
        ],
        "width": 5
      }
    ],
    "docks": [
      {
        "x": 30,
        "y": 80,
        "angle": 4.71238898038469,
        "building_id": "baking",
        "role": "계란·원료"
      },
      {
        "x": 126,
        "y": 35,
        "angle": 1.5707963267948966,
        "building_id": "finish",
        "role": "냉장 케이크 출하"
      },
      {
        "x": 126,
        "y": 59,
        "angle": 1.5707963267948966,
        "building_id": "cream-wing",
        "role": "크림 원료"
      }
    ],
    "parking": [
      {
        "x": 30,
        "y": 17,
        "angle": 0,
        "count": 30
      }
    ],
    "gate": {
      "x": 74.5,
      "y": 3
    },
    "fence": true
  },
  "landmarks": [
    "따뜻한 박공 오븐동",
    "분홍색 낮은 장식홀",
    "배럴 지붕 스펀지 냉각동",
    "북쪽 크림 전용 짧은 지선",
    "남동 냉장 디저트 캐노피"
  ],
  "density": {
    "intent": "공정별 생산 셀, 원료·제품·포장재 재고, 현장 유틸리티와 작업자 공간을 서로 다른 면적으로 직접 설계하였다. 남는 공간을 무작위 상자로 채우지 않고 명시된 용도와 정비 통로를 유지한다.",
    "production_area_m2": 3420,
    "storage_area_m2": 760,
    "support_area_m2": 616,
    "circulation_area_m2": 0
  },
  "compact_campus_revision": 3,
  "production_density_review": [
    {
      "basis": "Explicitly reduced building and room dimensions; no residual space generator.",
      "status": "spatial_preflight_required"
    }
  ],
  "openings": [
    {
      "id": "door-batter",
      "building_id": "baking",
      "zone_id": "batter",
      "x": 41.5,
      "y": 74,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "batter",
        "service_access"
      ]
    },
    {
      "id": "door-pan",
      "building_id": "baking",
      "zone_id": "pan",
      "x": 64.5,
      "y": 74,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "pan",
        "service_access"
      ]
    },
    {
      "id": "door-bake",
      "building_id": "baking",
      "zone_id": "bake",
      "x": 53.0,
      "y": 58,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "bake",
        "service_access"
      ]
    },
    {
      "id": "door-cool",
      "building_id": "cooling",
      "zone_id": "cool",
      "x": 89.0,
      "y": 54,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "cool",
        "service_access"
      ]
    },
    {
      "id": "door-cream",
      "building_id": "cream-wing",
      "zone_id": "cream",
      "x": 114.0,
      "y": 54,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "cream",
        "service_access"
      ]
    },
    {
      "id": "door-slice",
      "building_id": "finish",
      "zone_id": "slice",
      "x": 86.0,
      "y": 42,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "slice",
        "service_access"
      ]
    },
    {
      "id": "door-decor",
      "building_id": "finish",
      "zone_id": "decor",
      "x": 111.0,
      "y": 42,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "decor",
        "service_access"
      ]
    },
    {
      "id": "door-pack",
      "building_id": "finish",
      "zone_id": "pack",
      "x": 91.0,
      "y": 28,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "pack",
        "service_access"
      ]
    },
    {
      "id": "door-cold",
      "building_id": "finish",
      "zone_id": "cold",
      "x": 116.0,
      "y": 28,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "cold",
        "service_access"
      ]
    },
    {
      "id": "door-materials-zone",
      "building_id": "materials",
      "zone_id": "materials-zone",
      "x": 50.0,
      "y": 28,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "materials-zone",
        "service_access"
      ]
    },
    {
      "id": "door-qa",
      "building_id": "support",
      "zone_id": "qa",
      "x": 17.0,
      "y": 58,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "qa",
        "service_access"
      ]
    },
    {
      "id": "door-staff",
      "building_id": "support",
      "zone_id": "staff",
      "x": 17.0,
      "y": 42,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "staff",
        "service_access"
      ]
    },
    {
      "id": "door-plant",
      "building_id": "support",
      "zone_id": "plant",
      "x": 17.0,
      "y": 28,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "plant",
        "service_access"
      ]
    },
    {
      "id": "transfer-F11-solid-S02-S03-0-0",
      "building_id": "baking",
      "zone_id": "batter",
      "x": 53.0,
      "y": 77.94,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S02",
        "S03"
      ]
    },
    {
      "id": "transfer-F11-solid-S02-S03-0-1",
      "building_id": "baking",
      "zone_id": "batter",
      "x": 30.9,
      "y": 74.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "x",
      "connects": [
        "S02",
        "S03"
      ]
    },
    {
      "id": "transfer-F11-solid-S02-S03-1-0",
      "building_id": "baking",
      "zone_id": "pan",
      "x": 53.9,
      "y": 74.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "x",
      "connects": [
        "S02",
        "S03"
      ]
    },
    {
      "id": "transfer-F11-solid-S03-S04-0-0",
      "building_id": "baking",
      "zone_id": "bake",
      "x": 76.0,
      "y": 69.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S03",
        "S04"
      ]
    },
    {
      "id": "transfer-F11-solid-S03-S04-1-0",
      "building_id": "baking",
      "zone_id": "bake",
      "x": 76.0,
      "y": 66.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S03",
        "S04"
      ]
    },
    {
      "id": "transfer-F11-solid-S04-S05-0-0",
      "building_id": "cooling",
      "zone_id": "cool",
      "x": 77.9,
      "y": 54.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "x",
      "connects": [
        "S04",
        "S05"
      ]
    },
    {
      "id": "transfer-F11-solid-S04-S05-1-0",
      "building_id": "cooling",
      "zone_id": "cool",
      "x": 87.9,
      "y": 54.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "x",
      "connects": [
        "S04",
        "S05"
      ]
    },
    {
      "id": "transfer-F11-solid-S05-S07-0-0",
      "building_id": "finish",
      "zone_id": "slice",
      "x": 96.0,
      "y": 45.94,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S05",
        "S07"
      ]
    },
    {
      "id": "transfer-F11-solid-S05-S07-1-0",
      "building_id": "finish",
      "zone_id": "slice",
      "x": 96.0,
      "y": 48.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S05",
        "S07"
      ]
    },
    {
      "id": "transfer-F11-solid-S07-S08-0-0",
      "building_id": "finish",
      "zone_id": "slice",
      "x": 96.0,
      "y": 44.94,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S07",
        "S08"
      ]
    },
    {
      "id": "transfer-F11-solid-S07-S08-0-1",
      "building_id": "finish",
      "zone_id": "slice",
      "x": 78.4,
      "y": 42.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "x",
      "connects": [
        "S07",
        "S08"
      ]
    },
    {
      "id": "transfer-F11-solid-S07-S08-1-1",
      "building_id": "finish",
      "zone_id": "slice",
      "x": 94.4,
      "y": 42.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "x",
      "connects": [
        "S07",
        "S08"
      ]
    },
    {
      "id": "route-r1-building-cooling-26",
      "building_id": "cooling",
      "x": 97.35,
      "y": 54.0,
      "axis": "x",
      "width": 0.5,
      "height": 0.5,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F11-liquid-F11-S06-S07-4"
      ],
      "kind": "pipe_sleeve",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "sill_height": 7.18
    },
    {
      "id": "route-r1-building-cooling-27",
      "building_id": "cooling",
      "x": 102.0,
      "y": 56.85,
      "axis": "y",
      "width": 0.5,
      "height": 0.5,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F11-liquid-F11-S06-S07-4"
      ],
      "kind": "pipe_sleeve",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "sill_height": 7.18
    },
    {
      "id": "route-r1-building-cream-wing-28",
      "building_id": "cream-wing",
      "x": 102.0,
      "y": 56.85,
      "axis": "y",
      "width": 0.5,
      "height": 0.5,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F11-liquid-F11-S06-S07-4"
      ],
      "kind": "pipe_sleeve",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "sill_height": 7.18
    },
    {
      "id": "route-r1-building-finish-29",
      "building_id": "finish",
      "x": 97.35,
      "y": 54.0,
      "axis": "x",
      "width": 0.5,
      "height": 0.5,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F11-liquid-F11-S06-S07-4"
      ],
      "kind": "pipe_sleeve",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "sill_height": 7.18
    },
    {
      "id": "route-r1-zone-pan-30",
      "building_id": "baking",
      "x": 53.0,
      "y": 77.94,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S02",
        "S03"
      ],
      "route_ids": [
        "F11-solid-S02-S03-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "pan"
    },
    {
      "id": "route-r1-zone-bake-31",
      "building_id": "baking",
      "x": 30.9,
      "y": 74.0,
      "axis": "x",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S02",
        "S03"
      ],
      "route_ids": [
        "F11-solid-S02-S03-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "bake"
    },
    {
      "id": "route-r1-zone-bake-32",
      "building_id": "baking",
      "x": 53.9,
      "y": 74.0,
      "axis": "x",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S02",
        "S03"
      ],
      "route_ids": [
        "F11-solid-S02-S03-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "bake"
    },
    {
      "id": "route-r1-building-baking-33",
      "building_id": "baking",
      "x": 76.0,
      "y": 69.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F11-solid-S03-S04-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-building-cooling-34",
      "building_id": "cooling",
      "x": 76.0,
      "y": 69.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F11-solid-S03-S04-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-cool-35",
      "building_id": "cooling",
      "x": 76.0,
      "y": 69.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F11-solid-S03-S04-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "cool"
    },
    {
      "id": "route-r1-building-baking-36",
      "building_id": "baking",
      "x": 76.0,
      "y": 66.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F11-solid-S03-S04-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-building-cooling-37",
      "building_id": "cooling",
      "x": 76.0,
      "y": 66.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F11-solid-S03-S04-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-cool-38",
      "building_id": "cooling",
      "x": 76.0,
      "y": 66.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F11-solid-S03-S04-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "cool"
    },
    {
      "id": "route-r1-building-cooling-39",
      "building_id": "cooling",
      "x": 77.9,
      "y": 54.0,
      "axis": "x",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S04",
        "S05"
      ],
      "route_ids": [
        "F11-solid-S04-S05-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-building-finish-40",
      "building_id": "finish",
      "x": 77.9,
      "y": 54.0,
      "axis": "x",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S04",
        "S05"
      ],
      "route_ids": [
        "F11-solid-S04-S05-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-slice-41",
      "building_id": "finish",
      "x": 77.9,
      "y": 54.0,
      "axis": "x",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S04",
        "S05"
      ],
      "route_ids": [
        "F11-solid-S04-S05-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "slice"
    },
    {
      "id": "route-r1-building-cooling-42",
      "building_id": "cooling",
      "x": 87.9,
      "y": 54.0,
      "axis": "x",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S04",
        "S05"
      ],
      "route_ids": [
        "F11-solid-S04-S05-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-building-finish-43",
      "building_id": "finish",
      "x": 87.9,
      "y": 54.0,
      "axis": "x",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S04",
        "S05"
      ],
      "route_ids": [
        "F11-solid-S04-S05-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-slice-44",
      "building_id": "finish",
      "x": 87.9,
      "y": 54.0,
      "axis": "x",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S04",
        "S05"
      ],
      "route_ids": [
        "F11-solid-S04-S05-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "slice"
    },
    {
      "id": "route-r1-zone-decor-45",
      "building_id": "finish",
      "x": 96.0,
      "y": 45.94,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S05",
        "S07"
      ],
      "route_ids": [
        "F11-solid-S05-S07-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "decor"
    },
    {
      "id": "route-r1-zone-decor-46",
      "building_id": "finish",
      "x": 96.0,
      "y": 48.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S05",
        "S07"
      ],
      "route_ids": [
        "F11-solid-S05-S07-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "decor"
    },
    {
      "id": "route-r1-zone-decor-47",
      "building_id": "finish",
      "x": 96.0,
      "y": 44.94,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S07",
        "S08"
      ],
      "route_ids": [
        "F11-solid-S07-S08-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "decor"
    },
    {
      "id": "route-r1-building-support-48",
      "building_id": "support",
      "x": 10.0,
      "y": 60.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "qa"
      ],
      "route_ids": [
        "F11-staff-qa"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-qa-49",
      "building_id": "support",
      "x": 10.0,
      "y": 60.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "qa"
      ],
      "route_ids": [
        "F11-staff-qa"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "qa"
    },
    {
      "id": "route-r1-building-support-50",
      "building_id": "support",
      "x": 10.0,
      "y": 44.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "staff"
      ],
      "route_ids": [
        "F11-staff-staff"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-staff-51",
      "building_id": "support",
      "x": 10.0,
      "y": 44.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "staff"
      ],
      "route_ids": [
        "F11-staff-staff"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "staff"
    },
    {
      "id": "route-r1-building-support-52",
      "building_id": "support",
      "x": 10.0,
      "y": 30.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "plant"
      ],
      "route_ids": [
        "F11-staff-plant"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-plant-53",
      "building_id": "support",
      "x": 10.0,
      "y": 30.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "plant"
      ],
      "route_ids": [
        "F11-staff-plant"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "plant"
    },
    {
      "id": "route-r1-building-baking-54",
      "building_id": "baking",
      "x": 30.0,
      "y": 80.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "raw-dock",
        "S01"
      ],
      "route_ids": [
        "F11-dock-1-inbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-batter-55",
      "building_id": "baking",
      "x": 30.0,
      "y": 80.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "raw-dock",
        "S01"
      ],
      "route_ids": [
        "F11-dock-1-inbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "batter"
    },
    {
      "id": "route-r1-building-cream-wing-56",
      "building_id": "cream-wing",
      "x": 126.0,
      "y": 59.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "raw-dock",
        "S06"
      ],
      "route_ids": [
        "F11-dock-3-inbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-cream-57",
      "building_id": "cream-wing",
      "x": 126.0,
      "y": 59.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "raw-dock",
        "S06"
      ],
      "route_ids": [
        "F11-dock-3-inbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "cream"
    },
    {
      "id": "route-r1-building-finish-58",
      "building_id": "finish",
      "x": 126.0,
      "y": 35.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "shipping-dock"
      ],
      "route_ids": [
        "F11-dock-2-outbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-cold-59",
      "building_id": "finish",
      "x": 126.0,
      "y": 35.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "shipping-dock"
      ],
      "route_ids": [
        "F11-dock-2-outbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "cold"
    },
    {
      "id": "route-r1-zone-cold-60",
      "building_id": "finish",
      "x": 106.0,
      "y": 38.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "shipping-dock"
      ],
      "route_ids": [
        "F11-dock-2-outbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "cold"
    }
  ],
  "connection_review": {
    "counts": {
      "declared_process_edges": 7,
      "wet_edges_classified": 2,
      "wet_edges_routed": 2,
      "graph_only_edges": 5,
      "unresolved_edges": 0
    },
    "unresolved": [],
    "limitations": [
      "Synthetic product ports require equipment-level visual review.",
      "Pipe pressure drop, cleanability, thermal expansion and pump sizing are not simulated.",
      "Cutaway room crossings are not validated sealed hygiene penetrations.",
      "Dry or unsupported material transfers remain graph-only; no invented floor-centre conveyors."
    ],
    "dry_connections": [
      {
        "source": "S02",
        "target": "S03",
        "index": 0,
        "method": "conveyor"
      },
      {
        "source": "S02",
        "target": "S03",
        "index": 1,
        "method": "conveyor"
      },
      {
        "source": "S03",
        "target": "S04",
        "index": 0,
        "method": "conveyor"
      },
      {
        "source": "S03",
        "target": "S04",
        "index": 1,
        "method": "conveyor"
      },
      {
        "source": "S04",
        "target": "S05",
        "index": 0,
        "method": "conveyor"
      },
      {
        "source": "S04",
        "target": "S05",
        "index": 1,
        "method": "conveyor"
      },
      {
        "source": "S05",
        "target": "S07",
        "index": 0,
        "method": "conveyor"
      },
      {
        "source": "S05",
        "target": "S07",
        "index": 1,
        "method": "conveyor"
      },
      {
        "source": "S07",
        "target": "S08",
        "index": 0,
        "method": "conveyor"
      },
      {
        "source": "S07",
        "target": "S08",
        "index": 1,
        "method": "conveyor"
      }
    ],
    "dry_unresolved": [],
    "world_base_correction": {
      "equipment_base_z_m": 0.28,
      "legacy_planner_base_z_m": 0.2,
      "riser_endpoints_adjusted_m": 0.08,
      "scope": "일부 공정 노즐과 라이저의 낮은 수평 연결부. 고소 주 배관 높이는 유지.",
      "acceptance": "실제 부품 형상 및 노즐 기능 검수는 별도"
    }
  },
  "routing_revision": 1,
  "routing_design_note": "공정·입출하 제품 카트 3개 경로, 직원 보행 3개 경로를 구별한다. 직원 경로는 실제 정문에서 지원동 각 부서의 남측 접근 공간까지 이어진다. 외벽과 부서벽은 동일 좌표에서도 소유벽별 개구부를 가진다. 관통구는 통과 물체에 필요한 국부 폭으로만 만들며, 고소 배관 4개 관통구에는 sill_height와 실제 구멍 높이를 명시해 위아래 벽체를 보존한다. 설비·로봇·기물·건물의 설치 좌표와 기존 ID는 이 수정에서 변경하지 않았다.",
  "robot_station_revision": 1,
  "robot_station_review": {
    "status": "input_authored_pending_render",
    "basis": "actual generated fixture/contact geometry, base/support primitive checks and retained process routes",
    "robots": [
      {
        "robot": "0/0",
        "stage_id": "S07",
        "position": [
          103.7,
          52,
          1.045
        ],
        "task_points": [
          [
            104.25,
            51.94,
            1.17
          ],
          [
            104.25,
            52.06,
            1.17
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F11-robot-topping-0"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          104,
          52,
          0
        ]
      },
      {
        "robot": "0/1",
        "stage_id": "S07",
        "position": [
          119.7,
          52,
          1.045
        ],
        "task_points": [
          [
            120.25,
            51.94,
            1.17
          ],
          [
            120.25,
            52.06,
            1.17
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F11-robot-topping-1"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          119,
          52,
          0
        ]
      },
      {
        "robot": "1/0",
        "stage_id": "S04",
        "position": [
          83,
          77,
          0.28
        ],
        "task_points": [
          [
            82.25,
            77,
            1.21
          ],
          [
            83.75,
            77,
            1.21
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F11-robot-1-0-tray-0",
            "F11-robot-1-0-tray-1"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          82,
          77,
          0
        ]
      },
      {
        "robot": "1/1",
        "stage_id": "S04",
        "position": [
          96,
          77,
          0.28
        ],
        "task_points": [
          [
            95.25,
            77,
            1.21
          ],
          [
            96.75,
            77,
            1.21
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F11-robot-1-1-tray-0",
            "F11-robot-1-1-tray-1"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          96,
          77,
          0
        ]
      },
      {
        "robot": "2/0",
        "stage_id": "S08",
        "position": [
          84.0,
          39,
          0.28
        ],
        "task_points": [
          [
            85.0,
            39,
            1.18
          ],
          [
            85.60000000000001,
            39,
            1.35
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F11-robot-2-0-handoff"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          84,
          39,
          0
        ]
      },
      {
        "robot": "2/1",
        "stage_id": "S08",
        "position": [
          100.0,
          39,
          0.28
        ],
        "task_points": [
          [
            101.0,
            39,
            1.18
          ],
          [
            101.60000000000001,
            39,
            1.35
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F11-robot-2-1-handoff"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          100,
          39,
          0
        ]
      }
    ]
  }
}
