{
  "title": "Chiang Mai Airshow 2027 — 6-week Action Plan",
  "version": "1.1",
  "weeks": 6,
  "start_date": null,
  "assumption": "Relative W1–W6. W6 is readiness/rehearsal week; event date and installation access must be confirmed. This is an action plan, not proof of completed procurement or an implemented check-in app.",
  "tasks": [
    {
      "id": "S1",
      "group": "1 · SPONSOR",
      "title": "จัดแพ็กเกจและรายชื่อ Sponsor",
      "start": 1,
      "end": 1,
      "owner": "ทีม Sponsor / รอมอบหมาย",
      "output": "เอกสารสิทธิประโยชน์ ผังบูธ ราคา และรายชื่อผู้ติดต่อ",
      "dependencies": "",
      "budget": null
    },
    {
      "id": "S2",
      "group": "1 · SPONSOR",
      "title": "โรงเรียน 7 บูธ × 30,000 บาท",
      "start": 1,
      "end": 4,
      "owner": "ทีม Sponsor / รอมอบหมาย",
      "output": "ยืนยัน 7 บูธ เป้ารายได้ 210,000 บาท",
      "dependencies": "S1",
      "budget": null
    },
    {
      "id": "S3",
      "group": "1 · SPONSOR",
      "title": "บูธสถานศึกษา 10,000 บาท / ที่",
      "start": 1,
      "end": 4,
      "owner": "ทีม Sponsor / รอมอบหมาย",
      "output": "ยืนยันจำนวนบูธและผู้จอง; ยังไม่กำหนดเป้าจำนวน",
      "dependencies": "S1",
      "budget": null
    },
    {
      "id": "S4",
      "group": "1 · SPONSOR",
      "title": "Support 5,000 บาท / ราย",
      "start": 1,
      "end": 4,
      "owner": "ทีม Sponsor / รอมอบหมาย",
      "output": "ติดต่อ Dara Cosmetics / Nawarat; ยังไม่ยืนยันผู้สนับสนุน",
      "dependencies": "S1",
      "budget": null
    },
    {
      "id": "S5",
      "group": "1 · SPONSOR",
      "title": "เก็บโลโก้ เอกสาร และยืนยันการชำระ",
      "start": 3,
      "end": 5,
      "owner": "ทีม Sponsor / การเงิน",
      "output": "ทะเบียน Sponsor สิทธิประโยชน์ และหลักฐานรับเงิน",
      "dependencies": "S2, S3, S4",
      "budget": null
    },
    {
      "id": "A1",
      "group": "2 · AIRPARK",
      "title": "นัดราชภัฏ ประสานนักศึกษา",
      "start": 1,
      "end": 1,
      "owner": "โจ้ — ประสาน / นัด",
      "output": "วันนัด ผู้ประสานงาน และขอบเขตงานร่วม",
      "dependencies": "",
      "budget": null
    },
    {
      "id": "A2",
      "group": "2 · AIRPARK",
      "title": "สรุปรายชื่อเครื่องบิน33ลำรวมทั้งงาน",
      "start": 1,
      "end": 2,
      "owner": "โจ้ + ทีม Airpark",
      "output": "Airpark28 + สมาคม5 =33ลำ; สมาคมAllegro/Quicksilver/Gyro/Microlight/Ekolotขาวอย่างละ1 ยืนยันรุ่นและขนาดก่อนจัดวาง",
      "dependencies": "A1",
      "budget": null
    },
    {
      "id": "A3",
      "group": "2 · AIRPARK",
      "title": "ออกแบบ/ขอราคาขาตั้งป้ายเครื่อง33ชุด",
      "start": 2,
      "end": 2,
      "owner": "ทีม Airpark / รอมอบหมาย",
      "output": "Airpark28 + สมาคม5 รวมขาตั้ง33ชุด โครงป้ายอื่นแยก",
      "dependencies": "A2",
      "budget": null
    },
    {
      "id": "A4",
      "group": "2 · AIRPARK",
      "title": "ผลิตขาตั้งป้ายเครื่อง33ชุด",
      "start": 3,
      "end": 4,
      "owner": "ทีม Airpark / รอมอบหมาย",
      "output": "ตรวจรับ33ชุด ไม่รวมโครงป้ายส่วนกลาง/นิทรรศการ",
      "dependencies": "A3",
      "budget": null
    },
    {
      "id": "A5",
      "group": "2 · AIRPARK",
      "title": "ป้ายเครื่อง33 + กลาง6 + S4 3 + S5 3 + Directory1",
      "start": 2,
      "end": 4,
      "owner": "นักศึกษา + ทีม Airpark",
      "output": "รวม46แผ่น/แผง=เครื่อง33+กลาง6+S4สามแผง+S5สามแผง; ต้นแบบW3 ผลิตW4 ตรวจเนื้อหาก่อนพิมพ์; เพิ่ม Welcome / Event Directory ทางเข้าข้าง Grand Tent 1 แผ่น (รวม46) ตรวจแผนที่/รายชื่อS1–S5/ราคาPassport/Sponsorก่อนพิมพ์",
      "dependencies": "A2",
      "budget": null
    },
    {
      "id": "A6",
      "group": "2 · AIRPARK",
      "title": "วัดพื้นที่ / สั่งริ้วริบบิ้นกั้น",
      "start": 1,
      "end": 1,
      "owner": "ทีม Airpark / จัดซื้อ",
      "output": "ยืนยันแนวล้อม ความยาว แบบ และสั่งผลิตทันที",
      "dependencies": "",
      "budget": 20000
    },
    {
      "id": "A7",
      "group": "2 · AIRPARK",
      "title": "ผลิตริ้วริบบิ้น — Lead time 1 เดือน",
      "start": 2,
      "end": 5,
      "owner": "ผู้ผลิต / ทีมจัดซื้อ",
      "output": "ติดตามกำหนดส่ง ตรวจรับภายใน W5",
      "dependencies": "A6",
      "budget": null
    },
    {
      "id": "A8",
      "group": "2 · AIRPARK",
      "title": "ติดตั้งเครื่อง33ลำ/ป้ายรวม46แผ่น",
      "start": 5,
      "end": 6,
      "owner": "ทีม Airpark + Escort",
      "output": "Airpark28 + สมาคม5 =33ลำ ป้ายเครื่อง/ขาตั้ง33ชุด + ป้ายกลาง6 + นิทรรศการ6แผง =46แผ่น; ตรวจทางเดินพื้นที่S5และMerchandiseใกล้ธง08 โซนขายของย้ายออกGrandTent; ตรวจลานจอดP1/P2และทางเชื่อมคนเดิน วัดความจุจริงก่อนประกาศ; เพิ่ม Welcome / Event Directory ทางเข้าข้าง Grand Tent 1 แผ่น (รวม46) ตรวจแผนที่/รายชื่อS1–S5/ราคาPassport/Sponsorก่อนพิมพ์; P2ขยายชิดP1 ขวาของP2เป็นลานชุมชน:เก้าอี้ฟาง/อาหาร/มุมดนตรี แยกทางคนกับรถและประสานMediaControl จำนวนที่นั่งร้านอาหารและงบรอสรุป",
      "dependencies": "A4, A5, A7",
      "budget": null
    },
    {
      "id": "V1",
      "group": "3 · ESCORT / VOLUNTEER",
      "title": "สรุปหน้าที่ เบี้ยเลี้ยง และกะ",
      "start": 1,
      "end": 1,
      "owner": "โจ้ + ทีมงาน",
      "output": "เป้า 20 คน; เสื้อ + เข้างานฟรี + เบี้ยเลี้ยงที่ต้องกำหนด",
      "dependencies": "",
      "budget": null
    },
    {
      "id": "V2",
      "group": "3 · ESCORT / VOLUNTEER",
      "title": "ประกาศ Facebook / ราชภัฏเชียงใหม่",
      "start": 1,
      "end": 3,
      "owner": "โจ้ — ประสาน / นัด",
      "output": "ผู้สมัครพอคัดเลือก 20 คน; รับวัยรุ่นได้ตามความเหมาะสม",
      "dependencies": "V1",
      "budget": null
    },
    {
      "id": "V3",
      "group": "3 · ESCORT / VOLUNTEER",
      "title": "คัดเลือก ยืนยัน 20 คน วัดไซซ์เสื้อ",
      "start": 3,
      "end": 4,
      "owner": "โจ้ + ทีม Volunteer",
      "output": "รายชื่อ ช่องทางติดต่อ กะ ไซซ์เสื้อ และผู้ดูแล",
      "dependencies": "V2",
      "budget": null
    },
    {
      "id": "V4",
      "group": "3 · ESCORT / VOLUNTEER",
      "title": "อบรม Escort / ป้าย / ข้อมูลเครื่อง",
      "start": 5,
      "end": 5,
      "owner": "ทีม Airpark + ทีม Volunteer",
      "output": "พาเครื่องเข้าจุดจอดภายใต้ผู้ควบคุม ติดป้าย และอธิบายเครื่องได้",
      "dependencies": "V3, A2, A5",
      "budget": null
    },
    {
      "id": "V5",
      "group": "3 · ESCORT / VOLUNTEER",
      "title": "ซ้อมหน้างาน แจกเสื้อ และ Brief",
      "start": 6,
      "end": 6,
      "owner": "โจ้ + หัวหน้าทีม Escort",
      "output": "เช็กอินทีม รายชื่อกะ เบี้ยเลี้ยง และช่องทางสื่อสาร",
      "dependencies": "V4, A8",
      "budget": null
    },
    {
      "id": "P1",
      "group": "4 · PASSPORT / CHECK-IN",
      "title": "สรุป Passport / ราคา / ขั้นตอนเข้างาน",
      "start": 1,
      "end": 1,
      "owner": "ทีม Passport + การเงิน",
      "output": "Passport100บาท/คน ใช้ครบ3วันงาน พร้อมสายคล้องคอ พิมพ์ชื่อ/PassID/QR; ยืนยันจำนวนพิมพ์และเงื่อนไขกลับเข้า/ออกใหม่",
      "dependencies": "",
      "budget": null
    },
    {
      "id": "P2",
      "group": "4 · PASSPORT / CHECK-IN",
      "title": "ออกแบบซุ้มและผังแถว",
      "start": 1,
      "end": 2,
      "owner": "ทีมออกแบบ / รอมอบหมาย",
      "output": "WelcomeGrandTent: แยกรับเงิน/พิมพ์ชื่อ,QRเข้าโซน,PhotoSponsorBackdropและทางเดิน; โลโก้Sponsorผ่านอนุมัติก่อนพิมพ์",
      "dependencies": "P1",
      "budget": null
    },
    {
      "id": "P3",
      "group": "4 · PASSPORT / CHECK-IN",
      "title": "ระบบคิดเงินและกระทบยอด",
      "start": 2,
      "end": 4,
      "owner": "การเงิน + ทีมระบบ",
      "output": "ขั้นตอนรับเงิน ออกหลักฐาน ตรวจยอด และทดสอบ",
      "dependencies": "P1",
      "budget": null
    },
    {
      "id": "P4",
      "group": "4 · PASSPORT / CHECK-IN",
      "title": "ระบบ Stamp / Passport / สายคล้อง",
      "start": 2,
      "end": 4,
      "owner": "ทีมออกแบบ + จัดซื้อ",
      "output": "แบบ Stamp สมุด ป้ายห้อยคอ/ซองห้อย Passport และตรวจรับ",
      "dependencies": "P1",
      "budget": null
    },
    {
      "id": "P5",
      "group": "4 · PASSPORT / CHECK-IN",
      "title": "Passport Check-in App บนมือถือ",
      "start": 2,
      "end": 4,
      "owner": "ทีมระบบ / รอมอบหมาย",
      "output": "ระบุ Passport ไม่ซ้ำ บันทึกเข้า ตรวจซ้ำ สิทธิ์เจ้าหน้าที่ และส่งออกยอด; เพิ่มบันทึกรับชุดStation5แยกจากStamp ตรวจรับซ้ำและกระทบยอดสต็อก พร้อมสำรองเมื่อเน็ตล่ม; PassIDไม่ซ้ำ QRรหัสอ้างอิง พิมพ์ชื่อ สิทธิ์3วัน บันทึกเวลา/จุดเข้า/ผู้ตรวจ แยกผู้เข้าชมไม่ซ้ำจากครั้งเข้า",
      "dependencies": "P1",
      "budget": null
    },
    {
      "id": "P6",
      "group": "4 · PASSPORT / CHECK-IN",
      "title": "ทดสอบรวมและสอนเจ้าหน้าที่",
      "start": 5,
      "end": 5,
      "owner": "ทีมระบบ + การเงิน + หน้างาน",
      "output": "ทดสอบชำระเงิน → Passport → Stamp → Check-in รวมกรณีเน็ตล่มและเข้าซ้ำ; ทดลองการไหลของเด็กในStation4ผ่าน3กิจกรรมแล้วรับStamp1จุด; ทดสอบรับชุดStation5 ครั้งแรก/ซ้ำ/สต็อกหมด/ออฟไลน์; ทดสอบ100บาท/3วัน พิมพ์ชื่อ QRผิดงาน/ซ้ำ/กลับเข้าวันถัดไป/ออกใหม่ และQRตัวอย่างไม่ใช้เป็นสิทธิ์จริง",
      "dependencies": "P2, P3, P4, P5",
      "budget": null
    },
    {
      "id": "P7",
      "group": "4 · PASSPORT / CHECK-IN",
      "title": "ซ้อมคิว ตรวจมือถือ และเปิดพร้อมใช้",
      "start": 6,
      "end": 6,
      "owner": "หัวหน้าจุดเข้างาน",
      "output": "มือถือ/เน็ต/ไฟสำรองพร้อม ขั้นตอนสำรองและกระทบยอดผ่าน",
      "dependencies": "P6",
      "budget": null
    },
    {
      "id": "B1",
      "group": "5 · EVENT ATMOSPHERE",
      "title": "ธงชายหาด 30 ชุด — แบบ / วัสดุ",
      "start": 1,
      "end": 2,
      "owner": "ทีมในบ้าน",
      "output": "แบบธง+เสา+ฐาน 30 ชุด ผูกตำแหน่ง 01–30 กับแผนที่07; ขอราคาวัสดุ",
      "dependencies": "",
      "budget": null
    },
    {
      "id": "B2",
      "group": "5 · EVENT ATMOSPHERE",
      "title": "ผลิตธง 30 ชุดในบ้าน",
      "start": 3,
      "end": 4,
      "owner": "ทีมในบ้าน",
      "output": "ตรวจรับธง 30 ผืน + เสา 30 + ฐาน 30 รวม 30 ชุด",
      "dependencies": "B1",
      "budget": null
    },
    {
      "id": "B3",
      "group": "5 · EVENT ATMOSPHERE",
      "title": "เช่าจอ 4 จอ — พี่ Pop / พี่หนุ่ม",
      "start": 1,
      "end": 2,
      "owner": "โจ้ — ประสาน / นัด",
      "output": "ยืนยันคิว รุ่น ราคา ขาตั้ง สาย และการขนส่ง",
      "dependencies": "",
      "budget": null
    },
    {
      "id": "B4",
      "group": "5 · EVENT ATMOSPHERE",
      "title": "ทำคอนเทนต์จอและทดสอบ",
      "start": 3,
      "end": 5,
      "owner": "ทีมสื่อ + ทีมเทคนิค",
      "output": "ไฟล์วนแสดง Sponsor/ข้อมูล ตรวจสัญญาณ ไฟ และจอ 4 จุด",
      "dependencies": "S5, B3",
      "budget": null
    },
    {
      "id": "B5",
      "group": "5 · EVENT ATMOSPHERE",
      "title": "ติดตั้งธง 30 จุด / จอ 4 จอ / ตรวจป้าย",
      "start": 6,
      "end": 6,
      "owner": "ทีมในบ้าน + ทีมเทคนิค",
      "output": "ธงครบหมายเลข 01–30 ตามแผนที่07 จอ 4 จอ; ตรวจป้ายรวม 45 แผ่นร่วมกับ A8 ไม่นับผลิตซ้ำ",
      "dependencies": "B2, B4",
      "budget": null
    },
    {
      "id": "O1",
      "group": "6 · PHOTO OUTSOURCE",
      "title": "ติดต่อคุณอาร์ม / ขอขอบเขตและราคา",
      "start": 1,
      "end": 2,
      "owner": "โจ้ / ทีมประสาน — เสนอ",
      "output": "ยืนยันผู้รับผิดชอบคุยกับคุณอาร์ม; ราคา ทีม อุปกรณ์ วันและส่งมอบ",
      "dependencies": "",
      "budget": null
    },
    {
      "id": "O2",
      "group": "6 · PHOTO OUTSOURCE",
      "title": "ยืนยันงานและวาง Flow ถ่ายรูป",
      "start": 3,
      "end": 4,
      "owner": "ทีมประสาน + คุณอาร์ม",
      "output": "ยืนยันข้อตกลง จุดถ่ายรูป คิว วิธีส่งภาพและเงื่อนไขรายได้; จัดSponsorBackdropที่GrandTent ไม่บังทางคิวPassport",
      "dependencies": "O1",
      "budget": null
    },
    {
      "id": "O3",
      "group": "6 · PHOTO OUTSOURCE",
      "title": "ทดสอบระบบภาพ / ซ้อม / พร้อมงาน",
      "start": 5,
      "end": 6,
      "owner": "คุณอาร์ม + ทีมหน้างาน",
      "output": "ทดสอบรับภาพ ส่งภาพ บุคลากร อุปกรณ์ และจุดติดตั้ง",
      "dependencies": "O2",
      "budget": null
    },
    {
      "id": "M1",
      "group": "7 · MEDIA / SOUND",
      "title": "Playlist / Spot TH–EN–จีน / Cue Sheet",
      "start": 2,
      "end": 5,
      "owner": "ทีมสื่อ + ผู้ควบคุมเสียง / รอมอบหมาย",
      "output": "ไฟล์เพลง Spot3ภาษาและHighlightผ่านอนุมัติ; แบบลำโพงเสนอ4จุด/อุปกรณ์และงบรอยืนยัน",
      "dependencies": "S5, B4",
      "budget": null
    },
    {
      "id": "M2",
      "group": "7 · MEDIA / SOUND",
      "title": "ติดตั้งลำโพง / ทดสอบคิว / Brief Media",
      "start": 6,
      "end": 6,
      "owner": "ทีมเทคนิค + Media + Safety",
      "output": "Media1จุด ลำโพงเสนอSP01–04 ทดสอบเสียง/คิวแทรก/ไฟล์สำรองและเก็บสาย ตรวจตำแหน่งจริงก่อนใช้",
      "dependencies": "M1",
      "budget": null
    },
    {
      "id": "D1",
      "group": "8 · FLIGHT DISCOVERY",
      "title": "ชุดประกอบ / กติกาPassport / ผู้ช่วยStation5",
      "start": 2,
      "end": 5,
      "owner": "ทีมกิจกรรม + จัดซื้อ + ทีมPassport / รอมอบหมาย",
      "output": "เลือกตัวอย่างชุดW2 ลองประกอบW3 ยืนยันจำนวน/ราคา/สิทธิ์และสั่งW4 ตรวจรับ/อบรมW5; ไม่รวมเครื่องร่อนขาย80บาท; ติดตั้งS5ใกล้ธง08ข้างโซนขายของ แยกคิวรับชุดจากคิวซื้อสินค้า",
      "dependencies": "P1",
      "budget": null
    }
  ],
  "milestones": [
    "W1: นัดราชภัฏ / เปิดรับ Volunteer / ส่ง Sponsor / สั่งริบบิ้น",
    "W2: ล็อกจำนวนเครื่องและแบบ / จองจอ / ขอราคาคุณอาร์ม",
    "W3: เดินหน้าผลิต / ทำ App / ติดตาม Sponsor",
    "W4: ยืนยัน Sponsor / Volunteer 20 คน / ผลิตหลักและ App พร้อมทดสอบ",
    "W5: รับริบบิ้น / อบรม / ทดสอบระบบรวม",
    "W6: ติดตั้ง ซ้อม กระทบยอด และตรวจพร้อมทุกทีม"
  ],
  "budget": {
    "school_booths": {
      "unit": 30000,
      "target": 7,
      "target_total": 210000
    },
    "education_booths": {
      "unit": 10000,
      "target": null
    },
    "support_sponsors": {
      "unit": 5000,
      "prospects": [
        "Dara Cosmetics",
        "Nawarat"
      ],
      "confirmed": 0
    },
    "ribbon_estimate": 20000,
    "note": "Revenue targets are not received cash. Costs for stands, information signs, 30 flags, 4 screens, passport/printing/stamps/lanyards, app, shirts/allowances for 20 volunteers and photo outsource remain TBD."
  },
  "inventory_source": "/static/airshow-action-plan/inventory.json"
}