{
  "factory_id": "F03",
  "design_revision": 2,
  "design_story": "커드 배수조가 있는 배럴 지붕 동에서 남쪽 숙성 테이블로 내려온 뒤 동쪽 연신·냉각·포장동으로 꺾이는 작은 치즈 사업장이다. 북동쪽 유청 회수실은 치즈 냉장실과 벽을 사이에 두되 출하 문을 반대로 낸다. 큰 빈홀 대신 실제 커드 테이블과 열수 작업 여유를 확보하고, 포장 파우치는 작은 공급실에서만 꺼낸다.",
  "site": {
    "width": 129,
    "depth": 105
  },
  "buildings": [
    {
      "id": "curd",
      "name": "원유·커드 배수동",
      "role": "production",
      "polygon": [
        [
          27,
          55
        ],
        [
          75,
          55
        ],
        [
          75,
          85
        ],
        [
          27,
          85
        ]
      ],
      "height": 10,
      "roof": {
        "type": "barrel",
        "axis": "y",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.81,
          0.84,
          0.77
        ],
        "accent": [
          0.2,
          0.45,
          0.38
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    },
    {
      "id": "stretchhall",
      "name": "커드 숙성·연신동",
      "role": "production",
      "polygon": [
        [
          27,
          37
        ],
        [
          75,
          37
        ],
        [
          75,
          55
        ],
        [
          27,
          55
        ]
      ],
      "height": 9,
      "roof": {
        "type": "gable",
        "axis": "x",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.83,
          0.87,
          0.81
        ],
        "accent": [
          0.2,
          0.45,
          0.38
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    },
    {
      "id": "finish",
      "name": "냉각·치즈 포장동",
      "role": "production",
      "polygon": [
        [
          75,
          37
        ],
        [
          109,
          37
        ],
        [
          109,
          87
        ],
        [
          75,
          87
        ]
      ],
      "height": 9,
      "roof": {
        "type": "shed",
        "axis": "x",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.81,
          0.87,
          0.83
        ],
        "accent": [
          0.2,
          0.45,
          0.38
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    },
    {
      "id": "support",
      "name": "치즈 검사·금형·관리",
      "role": "office",
      "polygon": [
        [
          9,
          36
        ],
        [
          21,
          36
        ],
        [
          21,
          85
        ],
        [
          9,
          85
        ]
      ],
      "height": 6,
      "roof": {
        "type": "flat",
        "axis": "x",
        "pitch": 0.12
      },
      "facade": {
        "color": [
          0.73,
          0.7,
          0.59
        ],
        "accent": [
          0.1,
          0.28,
          0.36
        ],
        "material": "metal",
        "window_band_height": 3.7
      }
    }
  ],
  "zones": [
    {
      "id": "milk",
      "name": "원유 열처리",
      "role": "process",
      "building_id": "curd",
      "x": 27,
      "y": 73,
      "width": 22,
      "depth": 12,
      "stage_ids": [
        "S01"
      ],
      "fixtures": []
    },
    {
      "id": "milk-buffer",
      "name": "원유 버퍼·CIP",
      "role": "utility",
      "building_id": "curd",
      "x": 49,
      "y": 73,
      "width": 26,
      "depth": 12,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "milk-tanks",
          "type": "tank_bank",
          "x": 61,
          "y": 79,
          "width": 19,
          "depth": 7,
          "height": 4,
          "count": 3,
          "rows": 1,
          "columns": 3,
          "angle": 0,
          "label": "치즈 원유 버퍼"
        }
      ]
    },
    {
      "id": "vat",
      "name": "응고·유청 배출",
      "role": "process",
      "building_id": "curd",
      "x": 27,
      "y": 55,
      "width": 48,
      "depth": 18,
      "stage_ids": [
        "S02",
        "S03"
      ],
      "fixtures": []
    },
    {
      "id": "ripening",
      "name": "커드 숙성 테이블",
      "role": "process",
      "building_id": "stretchhall",
      "x": 27,
      "y": 37,
      "width": 24,
      "depth": 18,
      "stage_ids": [
        "S04"
      ],
      "fixtures": []
    },
    {
      "id": "stretch",
      "name": "열수 연신·블록 성형",
      "role": "process",
      "building_id": "stretchhall",
      "x": 51,
      "y": 37,
      "width": 24,
      "depth": 18,
      "stage_ids": [
        "S05",
        "S06"
      ],
      "fixtures": [
        {
          "id": "F03-robot-0-0-tray-0",
          "type": "worktable",
          "x": 56.25,
          "y": 46,
          "width": 1.2,
          "depth": 1,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "성형 트레이 인계",
          "model_profile": "food_tray_handoff"
        },
        {
          "id": "F03-robot-0-0-tray-1",
          "type": "worktable",
          "x": 57.75,
          "y": 46,
          "width": 1.2,
          "depth": 1,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "성형 트레이 인계",
          "model_profile": "food_tray_handoff"
        },
        {
          "id": "F03-robot-0-1-tray-0",
          "type": "worktable",
          "x": 68.25,
          "y": 46,
          "width": 1.2,
          "depth": 1,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "성형 트레이 인계",
          "model_profile": "food_tray_handoff"
        },
        {
          "id": "F03-robot-0-1-tray-1",
          "type": "worktable",
          "x": 69.75,
          "y": 46,
          "width": 1.2,
          "depth": 1,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "성형 트레이 인계",
          "model_profile": "food_tray_handoff"
        }
      ]
    },
    {
      "id": "bath",
      "name": "블록 냉각 수조",
      "role": "process",
      "building_id": "finish",
      "x": 75,
      "y": 37,
      "width": 18,
      "depth": 30,
      "stage_ids": [
        "S07"
      ],
      "fixtures": []
    },
    {
      "id": "whey",
      "name": "유청 회수·냉열",
      "role": "utility",
      "building_id": "finish",
      "x": 75,
      "y": 67,
      "width": 18,
      "depth": 20,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "whey-tanks",
          "type": "tank_bank",
          "x": 84,
          "y": 77,
          "width": 12,
          "depth": 14,
          "height": 5,
          "count": 4,
          "rows": 2,
          "columns": 2,
          "angle": 0,
          "label": "유청 회수 탱크"
        }
      ]
    },
    {
      "id": "packing",
      "name": "블록·슈레드 포장",
      "role": "packaging",
      "building_id": "finish",
      "x": 93,
      "y": 37,
      "width": 16,
      "depth": 22,
      "stage_ids": [
        "S08"
      ],
      "fixtures": []
    },
    {
      "id": "cold",
      "name": "치즈 냉장 출하",
      "role": "cold_store",
      "building_id": "finish",
      "x": 93,
      "y": 59,
      "width": 16,
      "depth": 28,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "cheese-racks",
          "type": "cold_rack",
          "x": 101,
          "y": 76,
          "width": 10,
          "depth": 14,
          "height": 5,
          "count": 20,
          "rows": 5,
          "columns": 4,
          "angle": 0,
          "label": "치즈 20팔레트"
        },
        {
          "id": "F03-robot-case-1",
          "type": "worktable",
          "x": 95.8,
          "y": 62,
          "width": 2,
          "depth": 1.5,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "식품 외포장 인계대",
          "model_profile": "food_case_handoff"
        },
        {
          "id": "F03-robot-pallet-1",
          "type": "floor_pallets",
          "x": 100.1,
          "y": 63.5,
          "width": 1.4,
          "depth": 1.2,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "출하 팔레트 인계"
        },
        {
          "id": "F03-robot-case-2",
          "type": "worktable",
          "x": 95.8,
          "y": 66,
          "width": 2,
          "depth": 1.5,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "식품 외포장 인계대",
          "model_profile": "food_case_handoff"
        },
        {
          "id": "F03-robot-pallet-2",
          "type": "floor_pallets",
          "x": 100.1,
          "y": 67.5,
          "width": 1.4,
          "depth": 1.2,
          "height": 1.3,
          "count": 1,
          "rows": 1,
          "columns": 1,
          "angle": 0,
          "label": "출하 팔레트 인계"
        }
      ]
    },
    {
      "id": "quality",
      "name": "치즈 검사",
      "role": "laboratory",
      "building_id": "support",
      "x": 9,
      "y": 68,
      "width": 12,
      "depth": 17,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "quality-furniture",
          "type": "lab_bench",
          "x": 15.0,
          "y": 76.5,
          "width": 9,
          "depth": 7,
          "height": 1.4,
          "count": 3,
          "rows": 1,
          "columns": 3,
          "angle": 0,
          "label": "수분·염도·관능검사"
        }
      ]
    },
    {
      "id": "moulds",
      "name": "금형 세척·정비",
      "role": "maintenance",
      "building_id": "support",
      "x": 9,
      "y": 52,
      "width": 12,
      "depth": 16,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "moulds-furniture",
          "type": "workbench",
          "x": 15.0,
          "y": 60.0,
          "width": 9,
          "depth": 7,
          "height": 1.4,
          "count": 2,
          "rows": 1,
          "columns": 2,
          "angle": 0,
          "label": "금형·트레이 수리"
        }
      ]
    },
    {
      "id": "office",
      "name": "관리·작업복",
      "role": "office",
      "building_id": "support",
      "x": 9,
      "y": 36,
      "width": 12,
      "depth": 16,
      "stage_ids": [],
      "fixtures": [
        {
          "id": "office-furniture",
          "type": "office_desks",
          "x": 15.0,
          "y": 44.0,
          "width": 9,
          "depth": 7,
          "height": 1.4,
          "count": 4,
          "rows": 1,
          "columns": 4,
          "angle": 0,
          "label": "관리 및 생산 기록"
        }
      ]
    }
  ],
  "equipment": [
    {
      "stage_id": "S01",
      "index": 0,
      "x": 33,
      "y": 79,
      "angle": 0
    },
    {
      "stage_id": "S01",
      "index": 1,
      "x": 43,
      "y": 79,
      "angle": 0
    },
    {
      "stage_id": "S02",
      "index": 0,
      "x": 34,
      "y": 67,
      "angle": 0
    },
    {
      "stage_id": "S02",
      "index": 1,
      "x": 50,
      "y": 67,
      "angle": 0
    },
    {
      "stage_id": "S02",
      "index": 2,
      "x": 66,
      "y": 67,
      "angle": 0
    },
    {
      "stage_id": "S03",
      "index": 0,
      "x": 40,
      "y": 59,
      "angle": 0
    },
    {
      "stage_id": "S03",
      "index": 1,
      "x": 61,
      "y": 59,
      "angle": 0
    },
    {
      "stage_id": "S04",
      "index": 0,
      "x": 31,
      "y": 46,
      "angle": 1.5707963267948966
    },
    {
      "stage_id": "S04",
      "index": 1,
      "x": 39,
      "y": 46,
      "angle": 1.5707963267948966
    },
    {
      "stage_id": "S04",
      "index": 2,
      "x": 47,
      "y": 46,
      "angle": 1.5707963267948966
    },
    {
      "stage_id": "S05",
      "index": 0,
      "x": 57,
      "y": 42,
      "angle": 0
    },
    {
      "stage_id": "S05",
      "index": 1,
      "x": 69,
      "y": 42,
      "angle": 0
    },
    {
      "stage_id": "S06",
      "index": 0,
      "x": 57,
      "y": 50,
      "angle": 0
    },
    {
      "stage_id": "S06",
      "index": 1,
      "x": 69,
      "y": 50,
      "angle": 0
    },
    {
      "stage_id": "S07",
      "index": 0,
      "x": 84,
      "y": 44,
      "angle": 0
    },
    {
      "stage_id": "S07",
      "index": 1,
      "x": 84,
      "y": 59,
      "angle": 0
    },
    {
      "stage_id": "S08",
      "index": 0,
      "x": 97,
      "y": 44,
      "angle": 1.5707963267948966
    },
    {
      "stage_id": "S08",
      "index": 1,
      "x": 105,
      "y": 44,
      "angle": 1.5707963267948966
    }
  ],
  "robots": [
    {
      "definition_index": 0,
      "instance_index": 0,
      "stage_id": "S06",
      "x": 57,
      "y": 46,
      "angle": 0,
      "task_station": "F03-robot-0-0-tray-1",
      "task_point": [
        56.25,
        46,
        1.21
      ],
      "task_points": [
        [
          56.25,
          46,
          1.21
        ],
        [
          57.75,
          46,
          1.21
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F03-robot-0-0-tray-0",
          "F03-robot-0-0-tray-1"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          57,
          47,
          0
        ],
        "reason": "공정 사이 실제 트레이 두 작업대를 덮는 포털로 배치하고 기둥을 설비 footprint 밖에 둔다. 반입 트레이에서 대기 트레이로 수직 상승 후 이송한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도",
      "gantry_span": [
        5.5,
        2.4,
        3.4
      ],
      "tool_span": [
        0.6,
        0.29
      ]
    },
    {
      "definition_index": 0,
      "instance_index": 1,
      "stage_id": "S06",
      "x": 69,
      "y": 46,
      "angle": 0,
      "task_station": "F03-robot-0-1-tray-1",
      "task_point": [
        68.25,
        46,
        1.21
      ],
      "task_points": [
        [
          68.25,
          46,
          1.21
        ],
        [
          69.75,
          46,
          1.21
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F03-robot-0-1-tray-0",
          "F03-robot-0-1-tray-1"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          69,
          47,
          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": 0,
      "stage_id": "S08",
      "x": 94.39999999999999,
      "y": 62,
      "angle": 0,
      "task_station": "F03-robot-case-1",
      "task_point": [
        95.39999999999999,
        62,
        1.18
      ],
      "task_points": [
        [
          95.39999999999999,
          62,
          1.18
        ],
        [
          96.0,
          62,
          1.35
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F03-robot-case-1"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          98,
          53,
          0
        ],
        "reason": "최종 포장 제품을 밀폐 카트로 받아 실제 트레이 상면에서 외포장 상자로 인계한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도"
    },
    {
      "definition_index": 1,
      "instance_index": 1,
      "stage_id": "S08",
      "x": 94.39999999999999,
      "y": 66,
      "angle": 0,
      "task_station": "F03-robot-case-2",
      "task_point": [
        95.39999999999999,
        66,
        1.18
      ],
      "task_points": [
        [
          95.39999999999999,
          66,
          1.18
        ],
        [
          96.0,
          66,
          1.35
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F03-robot-case-2"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          105,
          53,
          0
        ],
        "reason": "최종 포장 제품을 밀폐 카트로 받아 실제 트레이 상면에서 외포장 상자로 인계한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도"
    },
    {
      "definition_index": 2,
      "instance_index": 0,
      "stage_id": "S08",
      "x": 98.6,
      "y": 62,
      "angle": 0,
      "task_station": "F03-robot-pallet-1",
      "task_point": [
        96.0,
        62,
        1.35
      ],
      "task_points": [
        [
          96.0,
          62,
          1.35
        ],
        [
          99.84436,
          63.5,
          1.4
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F03-robot-case-1",
          "F03-robot-pallet-1"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          98,
          63,
          0
        ],
        "reason": "박스 인계대의 실제 상자 윗면에서 집어 인접 출하 팔레트의 실제 상자 위치로 적층한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도"
    },
    {
      "definition_index": 2,
      "instance_index": 1,
      "stage_id": "S08",
      "x": 98.6,
      "y": 66,
      "angle": 0,
      "task_station": "F03-robot-pallet-2",
      "task_point": [
        96.0,
        66,
        1.35
      ],
      "task_points": [
        [
          96.0,
          66,
          1.35
        ],
        [
          99.84436,
          67.5,
          1.4
        ]
      ],
      "task_fixture": {
        "fixture_ids": [
          "F03-robot-case-2",
          "F03-robot-pallet-2"
        ],
        "target_basis": "actual generated mesh contact surfaces"
      },
      "controller_offset": [
        0,
        -1.25,
        0
      ],
      "station_correction": {
        "revision": 1,
        "previous_position": [
          105,
          63,
          0
        ],
        "reason": "박스 인계대의 실제 상자 윗면에서 집어 인접 출하 팔레트의 실제 상자 위치로 적층한다."
      },
      "motion_scope": "실제 접촉 TCP의 대표 이송 동작이며 전체 동작 충돌·위생·안전 검수는 별도"
    }
  ],
  "logistics": [
    {
      "id": "F03-liquid-F03-S01-S02-0",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          30.5,
          79.66,
          2.16
        ],
        [
          29.85,
          79.66,
          2.16
        ],
        [
          29.85,
          79.66,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S01-S02-1",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          40.5,
          79.66,
          2.16
        ],
        [
          39.85,
          79.66,
          2.16
        ],
        [
          39.85,
          79.66,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S01-S02-2",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          34.0,
          69.1,
          3.33
        ],
        [
          34.0,
          70.15,
          3.33
        ],
        [
          34.0,
          70.15,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S01-S02-3",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          50.0,
          69.1,
          3.33
        ],
        [
          50.0,
          70.15,
          3.33
        ],
        [
          50.0,
          70.15,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S01-S02-4",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          66.0,
          69.1,
          3.33
        ],
        [
          66.0,
          70.15,
          3.33
        ],
        [
          66.0,
          70.15,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S01-S02-5",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          29.85,
          79.66,
          5.45
        ],
        [
          34.0,
          79.66,
          5.45
        ],
        [
          34.0,
          70.15,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F03-liquid-F03-S01-S02-6",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          39.85,
          79.66,
          5.45
        ],
        [
          29.85,
          79.66,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F03-liquid-F03-S01-S02-7",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          34.0,
          70.15,
          5.45
        ],
        [
          50.0,
          70.15,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F03-liquid-F03-S01-S02-8",
      "kind": "pipe",
      "from": "S01",
      "to": "S02",
      "points": [
        [
          34.0,
          70.15,
          5.45
        ],
        [
          66.0,
          70.15,
          5.45
        ]
      ],
      "width": 0.11,
      "transfer_method": "milk",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F03-liquid-F03-S02-S03-0",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          37.2,
          64.6,
          1.14
        ],
        [
          37.2,
          63.85,
          1.14
        ],
        [
          37.2,
          63.85,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S02-S03-1",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          53.2,
          64.6,
          1.14
        ],
        [
          53.2,
          63.85,
          1.14
        ],
        [
          53.2,
          63.85,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S02-S03-2",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          69.2,
          64.6,
          1.14
        ],
        [
          69.2,
          63.85,
          1.14
        ],
        [
          69.2,
          63.85,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S02-S03-3",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          36.3,
          57.6,
          2.22
        ],
        [
          34.35,
          57.6,
          2.22
        ],
        [
          34.35,
          57.6,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S02-S03-4",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          57.3,
          57.6,
          2.22
        ],
        [
          55.35,
          57.6,
          2.22
        ],
        [
          55.35,
          57.6,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review",
      "equipment_base_z_m": 0.28,
      "port_height_correction_m": 0.08
    },
    {
      "id": "F03-liquid-F03-S02-S03-5",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          37.2,
          63.85,
          5.735
        ],
        [
          34.35,
          63.85,
          5.735
        ],
        [
          34.35,
          57.6,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F03-liquid-F03-S02-S03-6",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          53.2,
          63.85,
          5.735
        ],
        [
          37.2,
          63.85,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F03-liquid-F03-S02-S03-7",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          69.2,
          63.85,
          5.735
        ],
        [
          37.2,
          63.85,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F03-liquid-F03-S02-S03-8",
      "kind": "pipe",
      "from": "S02",
      "to": "S03",
      "points": [
        [
          34.35,
          57.6,
          5.735
        ],
        [
          55.35,
          57.6,
          5.735
        ]
      ],
      "width": 0.22,
      "transfer_method": "curd_whey_slurry",
      "review_status": "synthetic_ports_require_equipment_review"
    },
    {
      "id": "F03-solid-S03-S04-0",
      "kind": "pedestrian",
      "from": "S03",
      "to": "S04",
      "points": [
        [
          45.9,
          59.0,
          0.2
        ],
        [
          45.73,
          59.0,
          0.2
        ],
        [
          45.73,
          56.27,
          0.2
        ],
        [
          34.23,
          56.27,
          0.2
        ],
        [
          34.23,
          39.1,
          0.2
        ],
        [
          31.0,
          39.1,
          0.2
        ]
      ],
      "width": 1.2,
      "transfer_method": "closed_food_trolley_material_lane",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review",
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "공정 배치별로 구분한 뚜껑 있는 위생 이동 용기",
      "design_note": " 밀폐 카트의 제품 인계 경로이며 직원 출퇴근 보행망에 포함하지 않는다."
    },
    {
      "id": "F03-solid-S03-S04-1",
      "kind": "pedestrian",
      "from": "S03",
      "to": "S04",
      "points": [
        [
          66.9,
          59.0,
          0.2
        ],
        [
          66.9,
          54.4,
          0.2
        ],
        [
          66.73,
          54.4,
          0.2
        ],
        [
          66.73,
          52.73,
          0.2
        ],
        [
          64.77,
          52.73,
          0.2
        ],
        [
          64.77,
          47.23,
          0.2
        ],
        [
          64.27,
          47.23,
          0.2
        ],
        [
          64.27,
          39.27,
          0.2
        ],
        [
          61.23,
          39.27,
          0.2
        ],
        [
          61.23,
          39.1,
          0.2
        ],
        [
          39.0,
          39.1,
          0.2
        ]
      ],
      "width": 1.2,
      "transfer_method": "closed_food_trolley_material_lane",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review",
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "공정 배치별로 구분한 뚜껑 있는 위생 이동 용기",
      "design_note": " 밀폐 카트의 제품 인계 경로이며 직원 출퇴근 보행망에 포함하지 않는다."
    },
    {
      "id": "F03-solid-S03-S04-2",
      "kind": "pedestrian",
      "from": "S03",
      "to": "S04",
      "points": [
        [
          66.9,
          59.0,
          0.2
        ],
        [
          66.9,
          54.4,
          0.2
        ],
        [
          66.73,
          54.4,
          0.2
        ],
        [
          66.73,
          52.73,
          0.2
        ],
        [
          64.77,
          52.73,
          0.2
        ],
        [
          64.77,
          47.23,
          0.2
        ],
        [
          64.27,
          47.23,
          0.2
        ],
        [
          64.27,
          39.27,
          0.2
        ],
        [
          61.23,
          39.27,
          0.2
        ],
        [
          61.23,
          39.1,
          0.2
        ],
        [
          47.0,
          39.1,
          0.2
        ]
      ],
      "width": 1.2,
      "transfer_method": "closed_food_trolley_material_lane",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review",
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "공정 배치별로 구분한 뚜껑 있는 위생 이동 용기",
      "design_note": " 밀폐 카트의 제품 인계 경로이며 직원 출퇴근 보행망에 포함하지 않는다."
    },
    {
      "id": "F03-solid-S04-S05-0",
      "kind": "pedestrian",
      "from": "S04",
      "to": "S05",
      "points": [
        [
          31.0,
          52.9,
          0.2
        ],
        [
          52.1,
          52.9,
          0.2
        ],
        [
          52.1,
          42.0,
          0.2
        ]
      ],
      "width": 1.2,
      "transfer_method": "closed_food_trolley_material_lane",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review",
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "공정 배치별로 구분한 뚜껑 있는 위생 이동 용기",
      "design_note": " 밀폐 카트의 제품 인계 경로이며 직원 출퇴근 보행망에 포함하지 않는다."
    },
    {
      "id": "F03-solid-S04-S05-1",
      "kind": "pedestrian",
      "from": "S04",
      "to": "S05",
      "points": [
        [
          39.0,
          52.9,
          0.2
        ],
        [
          64.1,
          52.9,
          0.2
        ],
        [
          64.1,
          42.0,
          0.2
        ]
      ],
      "width": 1.2,
      "transfer_method": "closed_food_trolley_material_lane",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review",
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "공정 배치별로 구분한 뚜껑 있는 위생 이동 용기",
      "design_note": " 밀폐 카트의 제품 인계 경로이며 직원 출퇴근 보행망에 포함하지 않는다."
    },
    {
      "id": "F03-solid-S04-S05-2",
      "kind": "pedestrian",
      "from": "S04",
      "to": "S05",
      "points": [
        [
          47.0,
          52.9,
          0.2
        ],
        [
          64.1,
          52.9,
          0.2
        ],
        [
          64.1,
          42.0,
          0.2
        ]
      ],
      "width": 1.2,
      "transfer_method": "closed_food_trolley_material_lane",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review",
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "공정 배치별로 구분한 뚜껑 있는 위생 이동 용기",
      "design_note": " 밀폐 카트의 제품 인계 경로이며 직원 출퇴근 보행망에 포함하지 않는다."
    },
    {
      "id": "F03-solid-S05-S06-0",
      "kind": "conveyor",
      "from": "S05",
      "to": "S06",
      "points": [
        [
          61.0,
          42.0,
          1.12
        ],
        [
          61.6,
          42.0,
          1.12
        ],
        [
          61.56,
          42.0,
          1.12
        ],
        [
          61.56,
          44.56,
          1.12
        ],
        [
          52.9,
          44.56,
          1.12
        ],
        [
          52.9,
          50.0,
          1.12
        ],
        [
          53.5,
          50.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F03-solid-S05-S06-1",
      "kind": "conveyor",
      "from": "S05",
      "to": "S06",
      "points": [
        [
          73.0,
          42.0,
          1.12
        ],
        [
          73.6,
          42.0,
          1.12
        ],
        [
          73.56,
          42.0,
          1.12
        ],
        [
          73.56,
          44.56,
          1.12
        ],
        [
          64.9,
          44.56,
          1.12
        ],
        [
          64.9,
          50.0,
          1.12
        ],
        [
          65.5,
          50.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F03-solid-S06-S07-0",
      "kind": "conveyor",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          60.5,
          50.0,
          1.12
        ],
        [
          61.1,
          50.0,
          1.12
        ],
        [
          61.56,
          50.0,
          1.12
        ],
        [
          61.56,
          48.06,
          1.12
        ],
        [
          64.94,
          48.06,
          1.12
        ],
        [
          64.94,
          47.44,
          1.12
        ],
        [
          75.55,
          47.44,
          1.12
        ],
        [
          75.55,
          44.0,
          1.12
        ],
        [
          77.4,
          44.0,
          1.12
        ],
        [
          78.0,
          44.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F03-solid-S06-S07-1",
      "kind": "conveyor",
      "from": "S06",
      "to": "S07",
      "points": [
        [
          72.5,
          50.0,
          1.12
        ],
        [
          73.1,
          50.0,
          1.12
        ],
        [
          77.4,
          50.0,
          1.12
        ],
        [
          77.4,
          59.0,
          1.12
        ],
        [
          78.0,
          59.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F03-solid-S07-S08-0",
      "kind": "conveyor",
      "from": "S07",
      "to": "S08",
      "points": [
        [
          90.0,
          44.0,
          1.12
        ],
        [
          90.6,
          44.0,
          1.12
        ],
        [
          90.6,
          39.4,
          1.12
        ],
        [
          97.0,
          39.4,
          1.12
        ],
        [
          97.0,
          40.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F03-solid-S07-S08-1",
      "kind": "conveyor",
      "from": "S07",
      "to": "S08",
      "points": [
        [
          90.0,
          59.0,
          1.12
        ],
        [
          90.6,
          59.0,
          1.12
        ],
        [
          90.6,
          39.4,
          1.12
        ],
        [
          105.0,
          39.4,
          1.12
        ],
        [
          105.0,
          40.0,
          1.12
        ]
      ],
      "width": 0.7,
      "transfer_method": "product_belt_with_transfer_plates",
      "review_status": "synthetic_transfer_requires_hygiene_and_controls_review"
    },
    {
      "id": "F03-staff-quality",
      "kind": "pedestrian",
      "from": "gate",
      "to": "quality",
      "points": [
        [
          58,
          3,
          0.2
        ],
        [
          58,
          12,
          0.2
        ],
        [
          7,
          12,
          0.2
        ],
        [
          7,
          38,
          0.2
        ],
        [
          7,
          70,
          0.2
        ],
        [
          10,
          70,
          0.2
        ]
      ],
      "width": 1.2,
      "design_note": "정문 보행 연결망에서 지원동 각 부서의 남측 비품 없는 접근 통로로 진입한다. 생산물 운반과 구별되는 직원 이동선이다."
    },
    {
      "id": "F03-staff-moulds",
      "kind": "pedestrian",
      "from": "gate",
      "to": "moulds",
      "points": [
        [
          58,
          3,
          0.2
        ],
        [
          58,
          12,
          0.2
        ],
        [
          7,
          12,
          0.2
        ],
        [
          7,
          38,
          0.2
        ],
        [
          7,
          54,
          0.2
        ],
        [
          10,
          54,
          0.2
        ]
      ],
      "width": 1.2,
      "design_note": "정문 보행 연결망에서 지원동 각 부서의 남측 비품 없는 접근 통로로 진입한다. 생산물 운반과 구별되는 직원 이동선이다."
    },
    {
      "id": "F03-staff-office",
      "kind": "pedestrian",
      "from": "gate",
      "to": "office",
      "points": [
        [
          58,
          3,
          0.2
        ],
        [
          58,
          12,
          0.2
        ],
        [
          7,
          12,
          0.2
        ],
        [
          7,
          38,
          0.2
        ],
        [
          10,
          38,
          0.2
        ]
      ],
      "width": 1.2,
      "design_note": "정문 보행 연결망에서 지원동 각 부서의 남측 비품 없는 접근 통로로 진입한다. 생산물 운반과 구별되는 직원 이동선이다."
    },
    {
      "id": "F03-dock-1-inbound",
      "kind": "pipe",
      "from": "raw-dock",
      "to": "S01",
      "points": [
        [
          34,
          85,
          1.2
        ],
        [
          34,
          84.2,
          1.2
        ],
        [
          30,
          84.2,
          1.2
        ],
        [
          30,
          78.34,
          1.2
        ],
        [
          30.5,
          78.34,
          1.2
        ],
        [
          30.5,
          78.34,
          1.4
        ]
      ],
      "width": 0.12,
      "cargo_containment": "원유 도크 위생 커플링과 S01 판형 열처리 스키드 사이의 폐쇄 수유 배관",
      "design_note": "원유는 북측 도크에서 생산실 서측 서비스 공간을 따라 S01 첫 판형 열교환기의 서측 제품 입구에 인계한다. 실제 스키드 기준 높이 .28m를 반영했다.",
      "transfer_method": "milk"
    },
    {
      "id": "F03-dock-3-outbound",
      "kind": "pedestrian",
      "from": "S08",
      "to": "shipping-dock",
      "points": [
        [
          97,
          48.9,
          0.2
        ],
        [
          108,
          48.9,
          0.2
        ],
        [
          108,
          70,
          0.2
        ],
        [
          109,
          70,
          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": "F03-robot-access-F03-robot-0-0-tray-0",
      "kind": "pedestrian",
      "from": "route:F03-solid-S05-S06-0",
      "to": "fixture:F03-robot-0-0-tray-0",
      "points": [
        [
          56.25,
          44.56,
          0.2
        ],
        [
          56.25,
          44.949999999999996,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F03-solid-S05-S06-0",
      "source_handoff": {
        "existing_route_id": "F03-solid-S05-S06-0",
        "world_xy": [
          56.25,
          44.56
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F03-solid-S05-S06-0",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            56.25,
            44.56,
            0.2
          ],
          "route_point_world_xyz": [
            56.25,
            44.56,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F03-robot-access-F03-robot-0-0-tray-1",
      "kind": "pedestrian",
      "from": "route:F03-solid-S05-S06-0",
      "to": "fixture:F03-robot-0-0-tray-1",
      "points": [
        [
          57.75,
          44.56,
          0.2
        ],
        [
          57.75,
          44.949999999999996,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F03-solid-S05-S06-0",
      "source_handoff": {
        "existing_route_id": "F03-solid-S05-S06-0",
        "world_xy": [
          57.75,
          44.56
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F03-solid-S05-S06-0",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            57.75,
            44.56,
            0.2
          ],
          "route_point_world_xyz": [
            57.75,
            44.56,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F03-robot-access-F03-robot-0-1-tray-0",
      "kind": "pedestrian",
      "from": "route:F03-solid-S05-S06-1",
      "to": "fixture:F03-robot-0-1-tray-0",
      "points": [
        [
          68.25,
          44.56,
          0.2
        ],
        [
          68.25,
          44.949999999999996,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F03-solid-S05-S06-1",
      "source_handoff": {
        "existing_route_id": "F03-solid-S05-S06-1",
        "world_xy": [
          68.25,
          44.56
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F03-solid-S05-S06-1",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            68.25,
            44.56,
            0.2
          ],
          "route_point_world_xyz": [
            68.25,
            44.56,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F03-robot-access-F03-robot-0-1-tray-1",
      "kind": "pedestrian",
      "from": "route:F03-solid-S05-S06-1",
      "to": "fixture:F03-robot-0-1-tray-1",
      "points": [
        [
          69.75,
          44.56,
          0.2
        ],
        [
          69.75,
          44.949999999999996,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F03-solid-S05-S06-1",
      "source_handoff": {
        "existing_route_id": "F03-solid-S05-S06-1",
        "world_xy": [
          69.75,
          44.56
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F03-solid-S05-S06-1",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            69.75,
            44.56,
            0.2
          ],
          "route_point_world_xyz": [
            69.75,
            44.56,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F03-robot-access-F03-robot-case-1",
      "kind": "pedestrian",
      "from": "route:F03-solid-S07-S08-1",
      "to": "fixture:F03-robot-case-1",
      "points": [
        [
          90.6,
          59.0,
          0.2
        ],
        [
          90.6,
          60.699999999999996,
          0.2
        ],
        [
          95.8,
          60.699999999999996,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F03-solid-S07-S08-1",
      "source_handoff": {
        "existing_route_id": "F03-solid-S07-S08-1",
        "world_xy": [
          90.6,
          59.0
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F03-solid-S07-S08-1",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            90.6,
            59.0,
            0.2
          ],
          "route_point_world_xyz": [
            90.6,
            59.0,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F03-robot-access-F03-robot-pallet-1",
      "kind": "pedestrian",
      "from": "fixture:F03-robot-pallet-1",
      "to": "route:F03-dock-3-outbound",
      "points": [
        [
          101.35,
          63.5,
          0.2
        ],
        [
          108.0,
          63.5,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F03-dock-3-outbound",
      "source_handoff": {
        "existing_route_id": "F03-dock-3-outbound",
        "world_xy": [
          108.0,
          63.5
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "to": {
          "reference": "route:F03-dock-3-outbound",
          "method": "direct_polyline_join",
          "access_point_world_xyz": [
            108.0,
            63.5,
            0.2
          ],
          "route_point_world_xyz": [
            108.0,
            63.5,
            0.2
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F03-robot-access-F03-robot-case-2",
      "kind": "pedestrian",
      "from": "route:F03-solid-S07-S08-1",
      "to": "fixture:F03-robot-case-2",
      "points": [
        [
          90.6,
          59.0,
          0.2
        ],
        [
          90.6,
          64.7,
          0.2
        ],
        [
          95.8,
          64.7,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F03-solid-S07-S08-1",
      "source_handoff": {
        "existing_route_id": "F03-solid-S07-S08-1",
        "world_xy": [
          90.6,
          59.0
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "from": {
          "reference": "route:F03-solid-S07-S08-1",
          "method": "manual_vertical_handoff",
          "access_point_world_xyz": [
            90.6,
            59.0,
            0.2
          ],
          "route_point_world_xyz": [
            90.6,
            59.0,
            1.12
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    },
    {
      "id": "F03-robot-access-F03-robot-pallet-2",
      "kind": "pedestrian",
      "from": "fixture:F03-robot-pallet-2",
      "to": "route:F03-dock-3-outbound",
      "points": [
        [
          101.35,
          67.5,
          0.2
        ],
        [
          108.0,
          67.5,
          0.2
        ]
      ],
      "width": 0.9,
      "transport_method": "manual_closed_cart",
      "carries_product": true,
      "cargo_containment": "위생 밀폐 제품 카트",
      "design_note": "기존 제품 이송 동선에서 실제 로봇 인계대 또는 팔레트의 작업자 접근면으로 연결한다.",
      "feeds_from_route_id": "F03-dock-3-outbound",
      "source_handoff": {
        "existing_route_id": "F03-dock-3-outbound",
        "world_xy": [
          108.0,
          67.5
        ],
        "mode": "manual lift at existing product-transfer lane"
      },
      "endpoint_handoffs": {
        "to": {
          "reference": "route:F03-dock-3-outbound",
          "method": "direct_polyline_join",
          "access_point_world_xyz": [
            108.0,
            67.5,
            0.2
          ],
          "route_point_world_xyz": [
            108.0,
            67.5,
            0.2
          ],
          "basis": "Named existing route polyline; manual lift only for the declared cart-to-belt height change."
        }
      }
    }
  ],
  "yard": {
    "roads": [
      {
        "points": [
          [
            4,
            9
          ],
          [
            121,
            9
          ],
          [
            121,
            98
          ],
          [
            4,
            98
          ],
          [
            4,
            9
          ]
        ],
        "width": 5
      }
    ],
    "docks": [
      {
        "x": 34,
        "y": 85,
        "angle": 3.141592653589793,
        "building_id": "curd",
        "role": "원유 입고"
      },
      {
        "x": 84,
        "y": 87,
        "angle": 3.141592653589793,
        "building_id": "finish",
        "role": "유청 반출"
      },
      {
        "x": 109,
        "y": 70,
        "angle": 1.5707963267948966,
        "building_id": "finish",
        "role": "치즈 출하"
      }
    ],
    "parking": [
      {
        "x": 32,
        "y": 23,
        "angle": 0,
        "count": 24
      }
    ],
    "gate": {
      "x": 58,
      "y": 3
    },
    "fence": true
  },
  "landmarks": [
    "배럴 커드동과 직각 연신동",
    "유청 전용 북쪽 캐노피",
    "초록 파사드 치즈 냉장문",
    "남쪽 열수 연신 관찰창",
    "별동 금형 세척 문"
  ],
  "density": {
    "intent": "공정별 생산 셀, 원료·제품·포장재 재고, 현장 유틸리티와 작업자 공간을 서로 다른 면적으로 직접 설계하였다. 남는 공간을 무작위 상자로 채우지 않고 명시된 용도와 정비 통로를 유지한다.",
    "production_area_m2": 2884,
    "storage_area_m2": 448,
    "support_area_m2": 1260,
    "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-milk",
      "building_id": "curd",
      "zone_id": "milk",
      "x": 38.0,
      "y": 73,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "milk",
        "service_access"
      ]
    },
    {
      "id": "door-milk-buffer",
      "building_id": "curd",
      "zone_id": "milk-buffer",
      "x": 62.0,
      "y": 73,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "milk-buffer",
        "service_access"
      ]
    },
    {
      "id": "door-vat",
      "building_id": "curd",
      "zone_id": "vat",
      "x": 51.0,
      "y": 55,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "vat",
        "service_access"
      ]
    },
    {
      "id": "door-ripening",
      "building_id": "stretchhall",
      "zone_id": "ripening",
      "x": 39.0,
      "y": 37,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "ripening",
        "service_access"
      ]
    },
    {
      "id": "door-stretch",
      "building_id": "stretchhall",
      "zone_id": "stretch",
      "x": 63.0,
      "y": 37,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "stretch",
        "service_access"
      ]
    },
    {
      "id": "door-bath",
      "building_id": "finish",
      "zone_id": "bath",
      "x": 84.0,
      "y": 37,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "bath",
        "service_access"
      ]
    },
    {
      "id": "door-whey",
      "building_id": "finish",
      "zone_id": "whey",
      "x": 84.0,
      "y": 67,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "whey",
        "service_access"
      ]
    },
    {
      "id": "door-packing",
      "building_id": "finish",
      "zone_id": "packing",
      "x": 101.0,
      "y": 37,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "packing",
        "service_access"
      ]
    },
    {
      "id": "door-cold",
      "building_id": "finish",
      "zone_id": "cold",
      "x": 101.0,
      "y": 59,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "cold",
        "service_access"
      ]
    },
    {
      "id": "door-quality",
      "building_id": "support",
      "zone_id": "quality",
      "x": 15.0,
      "y": 68,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "quality",
        "service_access"
      ]
    },
    {
      "id": "door-moulds",
      "building_id": "support",
      "zone_id": "moulds",
      "x": 15.0,
      "y": 52,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "moulds",
        "service_access"
      ]
    },
    {
      "id": "door-office",
      "building_id": "support",
      "zone_id": "office",
      "x": 15.0,
      "y": 36,
      "width": 3.0,
      "height": 2.7,
      "axis": "x",
      "connects": [
        "office",
        "service_access"
      ]
    },
    {
      "id": "transfer-F03-solid-S03-S04-0-0",
      "building_id": "curd",
      "zone_id": "vat",
      "x": 34.23,
      "y": 55.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "x",
      "connects": [
        "S03",
        "S04"
      ]
    },
    {
      "id": "transfer-F03-solid-S03-S04-1-0",
      "building_id": "curd",
      "zone_id": "vat",
      "x": 66.9,
      "y": 55.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "x",
      "connects": [
        "S03",
        "S04"
      ]
    },
    {
      "id": "transfer-F03-solid-S03-S04-1-1",
      "building_id": "stretchhall",
      "zone_id": "ripening",
      "x": 51.0,
      "y": 39.1,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S03",
        "S04"
      ]
    },
    {
      "id": "transfer-F03-solid-S04-S05-0-0",
      "building_id": "stretchhall",
      "zone_id": "ripening",
      "x": 51.0,
      "y": 52.9,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S04",
        "S05"
      ]
    },
    {
      "id": "transfer-F03-solid-S06-S07-0-0",
      "building_id": "stretchhall",
      "zone_id": "stretch",
      "x": 75.0,
      "y": 47.44,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S06",
        "S07"
      ]
    },
    {
      "id": "transfer-F03-solid-S06-S07-1-0",
      "building_id": "stretchhall",
      "zone_id": "stretch",
      "x": 75.0,
      "y": 50.0,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S06",
        "S07"
      ]
    },
    {
      "id": "transfer-F03-solid-S07-S08-0-0",
      "building_id": "finish",
      "zone_id": "bath",
      "x": 93.0,
      "y": 39.4,
      "width": 1.6,
      "height": 2.5,
      "axis": "y",
      "connects": [
        "S07",
        "S08"
      ]
    },
    {
      "id": "route-r1-building-curd-20",
      "building_id": "curd",
      "x": 34.23,
      "y": 55.0,
      "axis": "x",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F03-solid-S03-S04-0"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-building-stretchhall-21",
      "building_id": "stretchhall",
      "x": 34.23,
      "y": 55.0,
      "axis": "x",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F03-solid-S03-S04-0"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-ripening-22",
      "building_id": "stretchhall",
      "x": 34.23,
      "y": 55.0,
      "axis": "x",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F03-solid-S03-S04-0"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "ripening"
    },
    {
      "id": "route-r1-building-curd-23",
      "building_id": "curd",
      "x": 66.9,
      "y": 55.0,
      "axis": "x",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F03-solid-S03-S04-1"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-building-stretchhall-24",
      "building_id": "stretchhall",
      "x": 66.9,
      "y": 55.0,
      "axis": "x",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F03-solid-S03-S04-1"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-stretch-25",
      "building_id": "stretchhall",
      "x": 66.9,
      "y": 55.0,
      "axis": "x",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F03-solid-S03-S04-1"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "stretch"
    },
    {
      "id": "route-r1-zone-stretch-26",
      "building_id": "stretchhall",
      "x": 51.0,
      "y": 39.1,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S03",
        "S04"
      ],
      "route_ids": [
        "F03-solid-S03-S04-1"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "stretch"
    },
    {
      "id": "route-r1-zone-stretch-27",
      "building_id": "stretchhall",
      "x": 51.0,
      "y": 52.9,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S04",
        "S05"
      ],
      "route_ids": [
        "F03-solid-S04-S05-0"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "stretch"
    },
    {
      "id": "route-r1-building-stretchhall-28",
      "building_id": "stretchhall",
      "x": 75.0,
      "y": 47.44,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F03-solid-S06-S07-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-building-finish-29",
      "building_id": "finish",
      "x": 75.0,
      "y": 47.44,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F03-solid-S06-S07-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-bath-30",
      "building_id": "finish",
      "x": 75.0,
      "y": 47.44,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F03-solid-S06-S07-0"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "bath"
    },
    {
      "id": "route-r1-building-stretchhall-31",
      "building_id": "stretchhall",
      "x": 75.0,
      "y": 50.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F03-solid-S06-S07-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-building-finish-32",
      "building_id": "finish",
      "x": 75.0,
      "y": 50.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F03-solid-S06-S07-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-bath-33",
      "building_id": "finish",
      "x": 75.0,
      "y": 50.0,
      "axis": "y",
      "width": 1.2,
      "height": 1.6,
      "connects": [
        "S06",
        "S07"
      ],
      "route_ids": [
        "F03-solid-S06-S07-1"
      ],
      "kind": "conveyor_transfer",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "bath"
    },
    {
      "id": "route-r1-building-support-34",
      "building_id": "support",
      "x": 9.0,
      "y": 70.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "quality"
      ],
      "route_ids": [
        "F03-staff-quality"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-quality-35",
      "building_id": "support",
      "x": 9.0,
      "y": 70.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "quality"
      ],
      "route_ids": [
        "F03-staff-quality"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "quality"
    },
    {
      "id": "route-r1-building-support-36",
      "building_id": "support",
      "x": 9.0,
      "y": 54.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "moulds"
      ],
      "route_ids": [
        "F03-staff-moulds"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-moulds-37",
      "building_id": "support",
      "x": 9.0,
      "y": 54.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "moulds"
      ],
      "route_ids": [
        "F03-staff-moulds"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "moulds"
    },
    {
      "id": "route-r1-building-support-38",
      "building_id": "support",
      "x": 9.0,
      "y": 38.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "office"
      ],
      "route_ids": [
        "F03-staff-office"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-office-39",
      "building_id": "support",
      "x": 9.0,
      "y": 38.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "gate",
        "office"
      ],
      "route_ids": [
        "F03-staff-office"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "office"
    },
    {
      "id": "route-r1-building-curd-40",
      "building_id": "curd",
      "x": 34.0,
      "y": 85.0,
      "axis": "x",
      "width": 0.5,
      "height": 0.5,
      "connects": [
        "raw-dock",
        "S01"
      ],
      "route_ids": [
        "F03-dock-1-inbound"
      ],
      "kind": "pipe_sleeve",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "sill_height": 0.95
    },
    {
      "id": "route-r1-zone-milk-41",
      "building_id": "curd",
      "x": 34.0,
      "y": 85.0,
      "axis": "x",
      "width": 0.5,
      "height": 0.5,
      "connects": [
        "raw-dock",
        "S01"
      ],
      "route_ids": [
        "F03-dock-1-inbound"
      ],
      "kind": "pipe_sleeve",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "milk",
      "sill_height": 0.95
    },
    {
      "id": "route-r1-building-finish-42",
      "building_id": "finish",
      "x": 109.0,
      "y": 70.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "shipping-dock"
      ],
      "route_ids": [
        "F03-dock-3-outbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다."
    },
    {
      "id": "route-r1-zone-cold-43",
      "building_id": "finish",
      "x": 108.0,
      "y": 59.0,
      "axis": "x",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "shipping-dock"
      ],
      "route_ids": [
        "F03-dock-3-outbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "cold"
    },
    {
      "id": "route-r1-zone-cold-44",
      "building_id": "finish",
      "x": 109.0,
      "y": 70.0,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "shipping-dock"
      ],
      "route_ids": [
        "F03-dock-3-outbound"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "cold"
    },
    {
      "id": "route-r1-zone-bath-45",
      "building_id": "finish",
      "x": 93.0,
      "y": 60.7,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "fixture:F03-robot-case-1"
      ],
      "route_ids": [
        "F03-robot-access-F03-robot-case-1"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "bath"
    },
    {
      "id": "route-r1-zone-cold-46",
      "building_id": "finish",
      "x": 93.0,
      "y": 60.7,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "fixture:F03-robot-case-1"
      ],
      "route_ids": [
        "F03-robot-access-F03-robot-case-1"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "cold"
    },
    {
      "id": "route-r1-zone-bath-47",
      "building_id": "finish",
      "x": 93.0,
      "y": 64.7,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "fixture:F03-robot-case-2"
      ],
      "route_ids": [
        "F03-robot-access-F03-robot-case-2"
      ],
      "kind": "personnel_door",
      "design_note": "해당 경로가 통과하는 소유벽의 국부 개구부. 인접 소유벽은 별도로 기록한다.",
      "zone_id": "bath"
    },
    {
      "id": "route-r1-zone-cold-48",
      "building_id": "finish",
      "x": 93.0,
      "y": 64.7,
      "axis": "y",
      "width": 1.6,
      "height": 2.5,
      "connects": [
        "S08",
        "fixture:F03-robot-case-2"
      ],
      "route_ids": [
        "F03-robot-access-F03-robot-case-2"
      ],
      "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": "S03",
        "target": "S04",
        "index": 0,
        "method": "cart"
      },
      {
        "source": "S03",
        "target": "S04",
        "index": 1,
        "method": "cart"
      },
      {
        "source": "S03",
        "target": "S04",
        "index": 2,
        "method": "cart"
      },
      {
        "source": "S04",
        "target": "S05",
        "index": 0,
        "method": "cart"
      },
      {
        "source": "S04",
        "target": "S05",
        "index": 1,
        "method": "cart"
      },
      {
        "source": "S04",
        "target": "S05",
        "index": 2,
        "method": "cart"
      },
      {
        "source": "S05",
        "target": "S06",
        "index": 0,
        "method": "conveyor"
      },
      {
        "source": "S05",
        "target": "S06",
        "index": 1,
        "method": "conveyor"
      },
      {
        "source": "S06",
        "target": "S07",
        "index": 0,
        "method": "conveyor"
      },
      {
        "source": "S06",
        "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": "공정·입출하 제품 카트 7개 경로, 직원 보행 3개 경로를 구별한다. 직원 경로는 실제 정문에서 지원동 각 부서의 남측 접근 공간까지 이어진다. 외벽과 부서벽은 동일 좌표에서도 소유벽별 개구부를 가진다. 관통구는 통과 물체에 필요한 국부 폭으로만 만들며, 고소 배관 2개 관통구에는 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": "S06",
        "position": [
          57,
          46,
          0.28
        ],
        "task_points": [
          [
            56.25,
            46,
            1.21
          ],
          [
            57.75,
            46,
            1.21
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F03-robot-0-0-tray-0",
            "F03-robot-0-0-tray-1"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          57,
          47,
          0
        ]
      },
      {
        "robot": "0/1",
        "stage_id": "S06",
        "position": [
          69,
          46,
          0.28
        ],
        "task_points": [
          [
            68.25,
            46,
            1.21
          ],
          [
            69.75,
            46,
            1.21
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F03-robot-0-1-tray-0",
            "F03-robot-0-1-tray-1"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          69,
          47,
          0
        ]
      },
      {
        "robot": "1/0",
        "stage_id": "S08",
        "position": [
          94.39999999999999,
          62,
          0.28
        ],
        "task_points": [
          [
            95.39999999999999,
            62,
            1.18
          ],
          [
            96.0,
            62,
            1.35
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F03-robot-case-1"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          98,
          53,
          0
        ]
      },
      {
        "robot": "1/1",
        "stage_id": "S08",
        "position": [
          94.39999999999999,
          66,
          0.28
        ],
        "task_points": [
          [
            95.39999999999999,
            66,
            1.18
          ],
          [
            96.0,
            66,
            1.35
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F03-robot-case-2"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          105,
          53,
          0
        ]
      },
      {
        "robot": "2/0",
        "stage_id": "S08",
        "position": [
          98.6,
          62,
          0.28
        ],
        "task_points": [
          [
            96.0,
            62,
            1.35
          ],
          [
            99.84436,
            63.5,
            1.4
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F03-robot-case-1",
            "F03-robot-pallet-1"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          98,
          63,
          0
        ]
      },
      {
        "robot": "2/1",
        "stage_id": "S08",
        "position": [
          98.6,
          66,
          0.28
        ],
        "task_points": [
          [
            96.0,
            66,
            1.35
          ],
          [
            99.84436,
            67.5,
            1.4
          ]
        ],
        "task_fixture": {
          "fixture_ids": [
            "F03-robot-case-2",
            "F03-robot-pallet-2"
          ],
          "target_basis": "actual generated mesh contact surfaces"
        },
        "previous_position": [
          105,
          63,
          0
        ]
      }
    ]
  }
}
