# Data and method

ข้อมูลและวิธีของ CityMETER · Pharmacy รุ่น 0.1.1 (23 ตุลาคม 2569; ข้อมูลและวิธีเหมือนรุ่น 0.1.0; ชีตวิจัยตรวจแหล่ง 22 ต.ค. 2569) ป้ายหลักฐานตาม Landometer Master Brand Brief v0.5.3 §3.7: **Observed fact** · **Inference** · **Hypothesis** · **Owner-stated** · **Project evidence** ตัวเลขทุกตัวในเอกสารนี้มาจากไฟล์ใน repository และอ้าง field path ได้

## 1. แหล่งข้อมูลและวันที่

| ชั้น | แหล่ง | วันที่ | ไฟล์ในเดโม |
|---|---|---|---|
| ร้านที่มีใบอนุญาต | ทะเบียนผู้รับอนุญาตขายยาแผนปัจจุบัน (ขย1) สำนักงานคณะกรรมการอาหารและยา — [catalog.fda.moph.go.th dataset `036fc96e…`](https://catalog.fda.moph.go.th/dataset/036fc96e-d1be-4ec6-bf79-bfe685e32f51) ไฟล์ดิบ 18,183 แถว | catalogue ระบุข้อมูล ณ 28 พ.ค. 2569 · resource สร้าง/แก้ไข 4 ส.ค. 2569 · ดึง 22 ต.ค. 2569 | `data/pharmacies.json → sources[FDA_KHY1]` |
| ร้านยาในระบบของสภาเภสัชกรรม | [acc-pharm.com/DrugStore](https://www.acc-pharm.com/DrugStore) ไฟล์ดิบ 11,139 แถว — รายชื่อทั้งหมดในระบบ ไม่ใช่การรับรองทุกแห่ง | ดึง 22 ต.ค. 2569 (แหล่งไม่ระบุวันที่ข้อมูล) | `sources[ACC_PHARM_DRUGSTORE]` |
| ร้านยาคุณภาพ | [acc-pharm.com/Pharmacy](https://www.acc-pharm.com/Pharmacy) 3,110 แถว — ชั้นข้อมูลการอยู่ในรายชื่อร้านยาคุณภาพ ไม่ระบุวันเริ่มหรือหมดอายุการรับรอง | ดึง 22 ต.ค. 2569 | `sources[ACC_PHARM_QUALITY]`, แถว `cols.quality` |
| เครือร้าน | หน้าค้นหาสาขาและหน้าทางการของ 32 เครือที่ชีตวิจัยยืนยันขอบเขตแล้ว (`01_BRANDS`) | ตรวจ 22 ต.ค. 2569 | `brands[]`, `sources[CHAIN_SOURCES]` |
| ชีตที่รวมทั้งหมด | “CityMETER Pharmacy Thailand — Research Master 2026-10-22” แท็บ `02_STORES` (ไฟล์ภายใน ไม่อยู่ใน repository; SHA-256 ของไฟล์ที่ใช้สร้างอยู่ใน `meta.sheetSha256`) | 22 ต.ค. 2569 | `data/pharmacies.json` |
| ขอบเขตแขวง/ตำบล เขต/อำเภอ จังหวัด | CityMETER production public API (`/base/info/lv0`, `/base/info/lv1/{province uuid}`, `/base/info/geom/{uuid}/SUBDISTRICT`) | 23 ต.ค. 2569 | `data/area-index.json`, `data/frames/{CODE}.json`, `data/provinces.geojson`, `data/boundary-receipts.json` |
| แผนที่ฐานและมวลอาคารเมือง | OpenFreeMap (OpenMapTiles schema, © OpenStreetMap contributors) | โหลดตอนเปิดหน้า | ไม่มีไฟล์ใน repository |

**สถานะของชีต (Observed fact, `meta.sheetStatus = research_only`):** ชีตเป็น research master ที่ทีมวิจัยระบุว่ายังต้องตรวจตัวตน สถานะ พิกัด ความซ้ำ และสิทธิ์ข้อมูลตามการใช้งาน เดโมนี้เผยแพร่ตามคำขอของเจ้าของเพื่อทดลองผลิตภัณฑ์ ไม่ใช่การรับรองว่าข้อมูลพร้อมใช้เชิงพาณิชย์ — การตรวจสิทธิ์การใช้ข้อมูลของแต่ละแหล่งอยู่ใน backlog (N02)

## 2. หน่วยข้อมูลและหน่วยนับ

หนึ่งแถว = หนึ่งแถวของ `02_STORES` คือ **outlet candidate ที่ผ่านกติการวมหลักฐานของชีต** (`meta.unit.row`) ร้านเดียวกันยังอาจมีหลายแถวเมื่อหลักฐานยืนยันตัวตนไม่พอ เดโมไม่รวม แยก หรือย้ายแถวใด

| หลักฐานของแถว (`vocab.evidence`) | แถว | ความหมาย |
|---|---:|---|
| `licensed` | 18,136 | มีเลขใบอนุญาต ขย1 จากทะเบียน อย. (อาจรวมหลักฐานจากสภาเภสัชกรรมหรือหน้าสาขาไว้ในแถวเดียวกัน) |
| `directory` | 3,384 | มาจากรายชื่อของสภาเภสัชกรรม ยังจับคู่กับใบอนุญาตไม่ได้ |
| `chain_source` | 1,726 | มาจากหน้าสาขาของเครือ ยังจับคู่กับใบอนุญาตไม่ได้ |

**หน่วยนับ (สัญญาของผลิตภัณฑ์, `meta.unit`):**

- **ค่าเริ่มต้น — ร้านที่มีใบอนุญาต ขย1 (“ร้าน”):** นับเฉพาะแถว `licensed` หนึ่งใบอนุญาต = หนึ่งร้าน เลขใบอนุญาตไม่ซ้ำกันเลยใน 18,136 แถว (ตรวจใน `tests/data.test.js`) จึงไม่นับร้านเดียวกันซ้ำจากหลายแหล่ง
- **ทุกรายการ (“รายการ”, `?count=all`):** นับทุกแถว 23,246 แถว ร้านเดียวกันอาจมีมากกว่าหนึ่งรายการ (ชีตแยก 1,221 คู่ไว้รอตรวจตัวตนข้ามแหล่ง, `meta.reviewQueue.cross_source_identity_review`) คำบนจอเปลี่ยนเป็น “รายการ” ทุกที่ (`js/model.js#unitWords`)
- ในแผงร้าน “รายการอื่นของเครือนี้ในพื้นที่ — อาจเป็นร้านเดียวกัน” แสดงแถวจากทุกหน่วยของเครือเดียวกันในแขวง/ตำบลเดียวกัน เพื่อให้เห็นว่าอาจซ้ำ ไม่ได้บอกว่าซ้ำ

**สิ่งที่ไม่อยู่ในชุดนี้ (Observed fact จากชีต):** ร้านที่มีใบอนุญาต ขย2 1,215 รายการ ชีตแยกไว้ “รอยืนยันรูปแบบร้าน” (`meta.reviewQueue.license_type_scope_review`) · 29 รายการที่ชื่อตรงกับเครือที่รอยืนยัน · 3 รายการที่แหล่งระบุว่าไม่จำหน่ายยา (`09_NOT_PHARMACY`) · เครือที่ยืนยันขอบเขตแล้วแต่ยังเก็บสาขาไม่ได้ 1 เครือ (Ya Nueng) ไม่อยู่ในตัวกรองเครือร้าน

**สถานะการเปิด:** ทุกแถวคือ `not_field_verified` ยกเว้นที่หน้าสาขาของเครือระบุว่าปิดชั่วคราวหรือกำลังจะเปิด (`vocab.status`) สถานะ “คงอยู่” ในทะเบียนเป็นสถานะตาม snapshot ไม่ใช่การตรวจใบอนุญาตสดหรือการยืนยันว่าร้านเปิดวันนี้ ใบอนุญาตทั้งหมดในไฟล์ระบุปีหมดอายุ พ.ศ. 2569 (แหล่งให้เฉพาะปี, `meta.licence.expiryYearBE`)

## 3. การเป็นสมาชิกของพื้นที่

ทะเบียนและรายชื่อให้ **ชื่อ** จังหวัด อำเภอ ตำบล ไม่ให้รหัส เดโมจับคู่ชื่อของแถวกับรหัสของ CityMETER production ตอน build (`scripts/build-data.py`) ตามลำดับ วิธีที่ใช้บันทึกในทุกแถว (`cols.admin`, แผงร้านบอกเป็นภาษาไทย):

| วิธี (`vocab.admin`) | แถว | กติกา |
|---|---:|---|
| `names` | 19,299 | ชื่อจังหวัด + อำเภอ + ตำบลของแถวตรงกับชื่อใน production หลัง normalize (ตัดคำนำหน้า อำเภอ/ตำบล/เขต/แขวง/อ./ต./จ., ตัดช่องว่างและอักขระไม่แสดงผล, ํา → ำ; อำเภอที่เขียนไม่มี “เมือง” รับได้เมื่อจังหวัดนั้นมีเพียง “เมือง…”) |
| `unique` | 29 | ชื่ออำเภอไม่พบ แต่ชื่อตำบลมีเพียงแห่งเดียวในจังหวัด |
| `point` | 528 | แถวไม่มีชื่อพื้นที่ที่ใช้ได้ แต่มีจุดที่แหล่งเผยแพร่: ตำบลของ production (เรขาคณิตความละเอียดเต็ม) ที่จุดนั้นตก และต้องอยู่ในจังหวัด (และอำเภอ ถ้ามี) ที่แถวระบุ |
| `district` | 107 | จับคู่ได้ถึงอำเภอ ชื่อตำบลไม่พบ (เช่น ชื่อก่อนแยกตำบล) — นับในอำเภอ ไม่อยู่ในสีของตำบลใด |
| `province` | 3,172 | ระบุได้ถึงจังหวัด (ส่วนใหญ่เป็นรายการจากรายชื่อสภาเภสัชกรรมที่ไม่มีชื่ออำเภอ/ตำบล) |
| `none` | 111 | ไม่ระบุจังหวัด — คงไว้ในรายชื่อ ไม่อยู่ในพื้นที่ใด |

- ร้านที่มีใบอนุญาต: 18,053 จาก 18,136 (99.5%) จับคู่ถึงแขวง/ตำบล · 74 ถึงอำเภอ · 9 ถึงจังหวัด
- เขต/อำเภอ และจังหวัดของแถว มาจากแขวง/ตำบลนั้น ตรวจแล้วว่าทุกแถวที่จับคู่ถึงตำบลอยู่ในอำเภอและจังหวัดของตัวเอง (`tests/data.test.js`)
- ตรวจกับแท็บความครอบคลุมรายจังหวัดของชีต (`07_PROVINCE_COVERAGE`): จำนวนแถวที่ระบุจังหวัดตรงกันทั้ง 77 จังหวัด (`meta.coverageCheck`) และ 7 แถวที่ไม่ระบุจังหวัดถูกวางในจังหวัดด้วยจุดของแหล่ง (`meta.provinceFromPoint`)
- ไม่มีการย้ายแถวด้วยจุดบนแผนที่ตอนแสดงผล ไม่เดาด้วยชื่อร้าน การจับจุดกับอาคาร (§7) ไม่เปลี่ยนสมาชิกของพื้นที่

## 4. พิกัด

- ทะเบียน ขย1 ไม่มีพิกัด พิกัดมาจากรายชื่อร้านยาคุณภาพของสภาเภสัชกรรมและหน้าสาขาของเครือ: **3,974 แถว (17%)** มีจุด (ร้านที่มีใบอนุญาต 2,573 แถว) (`meta.counts.points`)
- บทบาทของจุดคงตามแหล่ง (`vocab.pointRoles`): จุดจากรายชื่อร้านยาคุณภาพ (ยังไม่ตรวจ) · จุดสาขาจากหน้าทางการของเครือ · จุดจากระบบค้นหาสาขา · หมุดบนแผนที่สาขาของเครือ — ไม่ใช่ทางเข้าร้าน ไม่ใช่ผลสำรวจ
- เก็บเฉพาะค่าที่อยู่ในกรอบประเทศไทย (ละติจูด 5–21, ลองจิจูด 97–106) ปัด 6 ตำแหน่ง ไม่มี (0, 0) แทนค่าว่าง
- ร้านที่ไม่มีพิกัดไม่มีหมุด แต่ยังนับในสีของพื้นที่ ในโปรไฟล์ และในรายชื่อ (แผงบอก “มีพิกัดจากแหล่ง x/y”)

## 5. ขอบเขตพื้นที่

- **แขวง/ตำบล 7,436 กรอบ เขต/อำเภอ 928 จังหวัด 77** ทั้งประเทศจาก production — ใบรับ 7,514 ใบ (URL, ขนาด, SHA-256, เวลา) ใน `data/boundary-receipts.json` ผูกชุดใบรับด้วย `metadata.receiptsSha256`
- ทำให้เบาสำหรับเว็บด้วย mapshaper `-simplify interval=30 keep-shapes -clean` ครั้งเดียวทั้งประเทศ (คง topology) แล้วแยกเป็นไฟล์ละจังหวัด `data/frames/{CODE}.json` (`areas` + `districts` ที่ dissolve จากแขวง/ตำบล) จังหวัด dissolve แล้วทำให้เบาที่ 250 ม. สำหรับมุมมองประเทศ (`scripts/build-boundaries.py`)
- **ดัชนีพื้นที่** `data/area-index.json` เก็บชื่อ รหัส พื้นที่ จุดป้าย และกรอบของทุกพื้นที่โดยไม่มีเรขาคณิต อันดับ แผง กราฟ และการตั้งกล้องจึงทำงานได้ทันที ขอบเขตโหลดทีละจังหวัดเมื่อจำเป็น (`js/frames.js`)
- **พื้นที่ (ตร.กม.)** มาจาก `areaSqm` ของ production — ไม่คำนวณใหม่จากเส้นที่ทำให้เบา
- กรอบเป็น navigation และตัวหารของความหนาแน่น ไม่ใช่การยืนยันเขตปกครองทางกฎหมาย

## 6. ตัวชี้วัด

| ตัวชี้วัด | สูตร | หมายเหตุ |
|---|---|---|
| ร้าน (หรือ รายการ) | จำนวนแถวในตัวกรองและหน่วยนับ | ค่าเริ่มต้นนับใบอนุญาต ขย1 |
| ร้าน/ตร.กม. (แขวง/ตำบล, เขต/อำเภอ) | ร้านในพื้นที่ ÷ `areaSqm`/10⁶ | LDS family `density.area`; ตัวหาร = พื้นที่ production |
| ร้าน/ตร.กม. ของหลายพื้นที่ | Σร้าน ÷ Σตร.กม. | ไม่เฉลี่ยอัตราส่วนรายพื้นที่ |
| ฐานเทียบของข้อค้นพบแรก | ร้านทั้งจังหวัดที่นำ ÷ ตร.กม. ของจังหวัดนั้น | กรุงเทพฯ 3,232 ร้าน ÷ 1,571.4 ตร.กม. = 2.06 |
| ร้าน/ตร.กม. ทั้งประเทศ / ทั้งจังหวัด | ร้านในตัวกรอง ÷ พื้นที่ประเทศหรือจังหวัด | รวมร้านที่ระบุได้ถึงอำเภอหรือจังหวัด |
| ร้านต่อจังหวัด | จำนวนแถว | LDS family `count` — ยอดรวมในมุมมองประเทศ ไม่ใช่ความหนาแน่น |
| ร้านยาคุณภาพ | แถวที่ `quality_accreditation_status = listed_validity_dates_unknown` | 3,103 แถว (ร้านที่มีใบอนุญาต 2,610 = 14.4%) ไม่ระบุวันหมดอายุการรับรอง |
| ประเภทร้าน | segment ของชีต → 5 กลุ่ม (§6.1) | การจัดกลุ่มเพื่ออ่านง่าย |

### 6.1 กลุ่มประเภทร้าน

กลุ่มเป็นการจัดเพื่ออ่านง่าย (Inference ของผู้จัดทำ) จาก segment ของชีต (`scripts/build-data.py#GROUPS`, `groups[]`) ผูกกับ LDS series ด้วย id กลุ่มคงที่ (`js/cues.js#GROUP_SERIES`)

| กลุ่ม | segment ที่รวม | ร้านที่มีใบอนุญาต | ทุกรายการ | series · รูปทรง |
|---|---|---:|---:|---|
| เครือร้านยา | chain, franchise_banner | 893 | 2,264 | 7 · หกเหลี่ยม |
| ร้านสุขภาพและความงาม | health_beauty_drugstore | 519 | 1,583 | 1 · วงกลม |
| เครือภูมิภาค/ท้องถิ่น | regional_chain, local_chain, local_retailer, retail_wholesale_operator | 5 | 120 | 3 · สามเหลี่ยม |
| ร้านยาของรัฐและสถาบัน | public_pharmacy, institutional_pharmacy, university_pharmacy | 25 | 36 | 4 · ข้าวหลามตัด |
| ร้านยาท้องถิ่น/ยังไม่ยืนยันเครือ | local_or_chain_unresolved | 16,694 | 19,243 | 8 · วงแหวน |

ร้านยาคุณภาพใช้ series 10 (บวก) เป็นคุณลักษณะ ไม่ใช่กลุ่ม ไม่ใช้ series 6 (ดาว) เพราะจะอ่านเป็นคะแนน

## 7. เครือร้าน และจุดของร้าน × อาคารบนแผนที่

- **เครือร้าน** 32 เครือ (`brands[]`, `01_BRANDS` สถานะ approved) แถวที่ผูกเครือมาจากรายชื่อสาขาของเครือเอง (`official_source_banner`) หรือชื่อร้านในแหล่งที่ระบุชื่อเครือเฉพาะ (`distinctive_banner_in_source_name`) — ร้านที่มีใบอนุญาต 1,442 ร้าน, ทุกรายการ 4,003 รายการ
- แถวที่ชื่อคล้ายเครือแต่หลักฐานไม่พอ (`cols.candidate`) แสดง “ยังไม่ยืนยัน” และไม่นับรวมกับเครือ
- เครือหลายเครือไม่มีชื่อเครือในทะเบียน ขย1 (ใบอนุญาตออกในชื่อนิติบุคคลหรือชื่อร้าน) จึงมี 0 ร้านในหน่วยใบอนุญาต แต่มีรายการจากหน้าสาขา — ตัวกรองเครือแสดงจำนวนตามหน่วยนับ และ empty state เสนอ “นับทุกรายการ”
- ไม่มีโลโก้เครือ (รอบวิจัยนี้ไม่ได้รวบรวม, `meta.logos`) และไม่มีสถานที่/อาคารเจ้าบ้าน (`meta.venues`)
- **จุด × อาคาร (ตอนแสดงผล, `js/building-join.js`):** จุดที่แหล่งเผยแพร่จับกับขอบอาคาร OpenStreetMap ที่แผนที่วาดในส่วนโฟกัส (ขอบเดิมก่อนทำมุมโค้ง) จุดที่ตกในหลายขอบไปที่ขอบเล็กสุด คำที่ใช้คือ “จุดตกในอาคาร” ไม่ใช่ “ตั้งอยู่ใน” — ไม่บอกชั้นหรือห้อง ไม่เปลี่ยนจำนวนของพื้นที่ใด กดอาคาร: มีจุดเดียว → ร้าน · หลายจุด → รายการ “ร้านยาที่จุดตกในอาคารนี้” · ไม่มีจุด → เลือกแขวง/ตำบลตรงนั้นตามปกติ อาคารที่เปิดอยู่ (หรืออาคารที่จุดของร้านที่เลือกตก) ใช้สีข้อมูล `--map-active-layer`

## 8. สถานะค่า (EVID-05) และการแสดงผล

| สถานะ | ความหมายในเดโม | บนแผนที่ |
|---|---|---|
| measured | แขวง/ตำบลที่มีร้านตามตัวกรอง | สีระดับของ `density.area` (5 ระดับเรขาคณิต) |
| measured_zero | ทะเบียน (หรือทุกแหล่งในหน่วย “ทุกรายการ”) ไม่มีร้านที่ระบุพื้นที่นี้ตามตัวกรอง — 0 ตามแหล่งข้อมูล ไม่ใช่การสำรวจภาคสนาม | สีระดับต่ำสุด + เส้นขอบศูนย์ 2 px |
| no_data | ไม่ใช้ในรุ่นนี้: ทะเบียน ขย1 ครอบคลุมทั้ง 77 จังหวัด (การรักษา no_data ยังอยู่ในโค้ดสำหรับแหล่งที่ไม่ครอบคลุม) | ลายเส้นทแยง 135° |
| out_of_scope | ไม่เกิดขึ้น (ทุกจังหวัดเป็นกรอบ) | ไม่วาด |

แถวที่ระบุได้เพียงอำเภอหรือจังหวัดไม่อยู่ในสีของแขวง/ตำบลใด แผงอำเภอและตำบลบอกจำนวนแถวเหล่านี้ไว้ สีข้อมูลทั้งหมดเป็นค่า HEX เดียวกันทั้งสองธีมตาม LDS 0.9.7 (`js/scales.js`, `assets/theme.css`) ดูการเลือกสเกลใน [docs/AREA_METHOD.md](docs/AREA_METHOD.md) และ [docs/CHART_SELECTION.md](docs/CHART_SELECTION.md)

## 9. ข้อมูลที่ไม่คัดลอก

ไม่คัดลอกเบอร์โทร ที่อยู่ ลิงก์แผนที่ หมายเหตุของนักวิจัย รหัส observation และระเบียนดิบของแหล่ง (`meta.excludedFields`) ลิงก์แหล่งของแถวจากหน้าสาขาคือหน้าสาธารณะของเครือ (ลิงก์ API หรือไฟล์ถูกแทนด้วยหน้าอ้างอิงของเครือ) ไม่มีลิงก์ไปเอกสารหรือไฟล์ส่วนตัว เลขใบอนุญาตเป็นตัวระบุสาธารณะของทะเบียนและเก็บไว้เป็นหลักฐาน

## 10. การสร้างไฟล์ข้อมูล

```sh
# ขอบเขต (อินพุต: base info + geometry responses + .meta.json receipts ที่ดึงจาก API สาธารณะ)
python3 -I scripts/build-boundaries.py --api <api-dir> --geom <geom-dir> --out . --mapshaper <path-to-mapshaper>
# ร้าน (อินพุตภายใน: xlsx ของชีตวิจัย)
python3 -I scripts/build-data.py --sheet <sheet.xlsx> --api <api-dir> --geom <geom-dir> --index data/area-index.json --out .
```

ต้องใช้ Python 3.11+ พร้อม `openpyxl` และ Node (mapshaper 0.6) อินพุตเป็นไฟล์ภายในจึงไม่อยู่ใน repository สคริปต์ตรวจตอน build: id ไม่ซ้ำ, segment/brand/source type/สถานะ/บทบาทจุดอยู่ในคำศัพท์ที่รู้จัก, รหัสพื้นที่มีอยู่ในดัชนี, ใบรับเรขาคณิตตรง SHA-256, จำนวนรายจังหวัดตรงแท็บความครอบคลุมของชีต

## 11. ข้อจำกัดที่ทราบ

1. ไม่ใช่สำมะโนร้านยา: ทะเบียนเป็น snapshot ข้อมูล ณ 28 พ.ค. 2569 และยังไม่ได้ตรวจภาคสนาม
2. สถานะใบอนุญาตตามทะเบียนไม่ใช่การยืนยันว่าร้านเปิดวันนี้; ปีหมดอายุมีเพียงปี พ.ศ.
3. หน่วยเริ่มต้นไม่รวม 5,110 รายการจากแหล่งอื่นที่ยังจับคู่ใบอนุญาตไม่ได้ — บางรายการอาจเป็นร้านที่มีใบอนุญาตในชื่ออื่น; หน่วย “ทุกรายการ” อาจนับร้านเดียวกันซ้ำ
4. ร้านที่มีใบอนุญาต ขย2 (1,215 รายการ) ไม่อยู่ในชุดนี้
5. พิกัดมีเพียง 17% ของแถว และเป็นจุดที่แหล่งเผยแพร่ ไม่ใช่ทางเข้าร้าน; การจับจุดกับอาคารเป็นผลแสดงผล ไม่ใช่ที่อยู่หรือชั้น
6. ความหนาแน่นใช้ตัวหารเป็นพื้นที่ทั้งตำบล รวมพื้นที่ที่ไม่ได้อยู่อาศัย (นา ป่า แหล่งน้ำ) และไม่ใช่ต่อประชากร
7. รายชื่อร้านยาคุณภาพไม่ระบุวันเริ่มหรือหมดอายุการรับรอง
8. เครือร้านนับเฉพาะชื่อที่ชีตยืนยัน; ไม่มีโลโก้เครือในรอบนี้
9. สิทธิ์การใช้ข้อมูลของแต่ละแหล่งเพื่อการเผยแพร่หรือเชิงพาณิชย์ยังไม่ได้ตรวจ (ชีตระบุให้ตรวจก่อนเผยแพร่)
