อธิบายว่าโมดูลคาร์บอนเครดิตของ AgroLink ทำงานจริงอย่างไร ตั้งแต่เกษตรกรบันทึกระดับน้ำในนา ไปจนถึงเงินที่ได้จากการขายคาร์บอนเครดิตถูกแบ่งกลับไปหาสมาชิกแต่ละคน — ครอบคลุมทั้ง 3 เฟสที่พัฒนาไว้แล้วในระบบจริง (ไม่ใช่แนวคิดการตลาด แต่เป็นกลไกจริงในโค้ด)
Carbon Module ของ AgroLink พัฒนาเป็น 3 เฟสต่อเนื่องกัน แต่ละเฟสเพิ่ม "ชั้น" ใหม่บนของเดิมโดยไม่แก้ไขของเดิม:
ไล่ตามลำดับตั้งแต่เกษตรกรบันทึกข้อมูลจริง ไปจนถึงเงินเข้าบัญชี
ทุกครั้งที่ไปดูนา บันทึกว่าน้ำ "ท่วม" หรือ "แห้ง" (และระดับน้ำเป็น ซม. ถ้ามีท่อวัด) ผ่านหน้า carbon-credit.html — ข้อมูลนี้เป็น append-only แก้ไขย้อนหลังไม่ได้
เกษตรกร · frontend/carbon-credit.htmlไล่ดูบันทึกทั้งหมดตามลำดับเวลา จัดกลุ่มช่วงที่ "แห้งตามเกณฑ์ AWD" ต่อเนื่องกันเป็น "รอบแห้ง" นับว่ารอบปลูกนี้เข้าเกณฑ์หรือไม่ ตามจำนวนรอบแห้งที่ผ่านเกณฑ์
อัตโนมัติ · backend/src/routes/carbon.js: recomputeAssessment()เมื่อพอใจกับข้อมูลแล้ว กด "ส่งตรวจ" — สถานะเปลี่ยนจาก draft เป็น pending_review และ "ล็อก" ไม่ให้แก้ไขข้อมูลต่อจนกว่าจะมีผลตรวจ
เกษตรกร · POST /farmer/carbon/cycles/:id/submitดูบันทึกระดับน้ำทั้งหมด + ข้อมูลดาวเทียมเสริม (ถ้ามี) แล้วกด "รับรอง" (verified — ล็อกถาวร) หรือ "ตีกลับ" (rejected — พร้อมเหตุผล เกษตรกรแก้ไขแล้วส่งใหม่ได้)
Platform Ops · หน้าแอดมิน "คาร์บอนเครดิต (AWD)"สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้าน สร้าง "โครงการคาร์บอน" แล้วเลือกเฉพาะรอบปลูกของสมาชิกที่มีสถานะ verified แล้วเท่านั้นเข้าร่วม — 1 รอบปลูกอยู่ในโครงการที่กำลังใช้งานได้ทีละ 1 โครงการ
สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้าน · widget "Carbon Module"แนบภาพถ่าย/ภาพดาวเทียม/ขอบเขตแปลง (GIS)/เอกสารรับรอง เข้าโครงการ แล้วส่งออก manifest รวมทุกอย่างเพื่อนำไปยื่นกับผู้ตรวจสอบ (VVB) หรือ อบก./TGO ด้วยตนเองนอกระบบ
สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้าน · MRV Data Roomองค์กรปรับสถานะโครงการเอง: draft → mrv_prep → submitted_to_tver → registered → credits_issued ตามความคืบหน้าจริงกับหน่วยงานภายนอก (ระบบไม่เชื่อมต่อกับ อบก./TGO โดยตรง)
สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้านเมื่อโครงการถึงสถานะ registered/credits_issued แล้วเท่านั้น จึงลงขาย (ระบุจำนวนตันคาร์บอนไดออกไซด์เทียบเท่า + ราคาที่ต้องการ) — ฝั่งผู้ซื้อสร้างคำสั่งซื้อคู่ขนาน (จำนวนที่ต้องการ + ราคาที่เสนอ) โดยยังไม่เห็นรายชื่อผู้ขายรายใดโดยตรง
ผู้ขาย: สหกรณ์ฯ · ผู้ซื้อ: พอร์ทัลผู้รับซื้อผลผลิตการเกษตร (แท็บคาร์บอนเครดิต)เลือกคำสั่งซื้อ 1 รายการจับคู่กับประกาศขาย 1 รายการ (ขายเต็มจำนวนเสมอ ไม่รองรับขายบางส่วน) กรอกต้นทุนโครงการ (ถ้ามี) แล้วระบบคำนวณส่วนแบ่งของทุกฝ่ายทันที ไม่ให้เจ้าหน้าที่กรอกตัวเลขเอง
Platform Ops · หน้าแอดมิน "ตลาดคาร์บอนเครดิต"ระบบยังไม่มีช่องทางโอนเงินจริง — องค์กรโอนเงินให้เกษตรกรแต่ละคนผ่านช่องทางเดิมที่มีอยู่ (พร้อมเพย์/โอนธนาคาร) เอง แล้วกลับมากด "จ่ายแล้ว" เพื่อเป็นหลักฐานตรวจสอบย้อนหลังเท่านั้น
สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้านเครื่องมือ MRV (Measurement, Reporting, Verification) ระดับรอบปลูกเดียว — จุดเริ่มต้นของทั้งโมดูล
ใช้ได้เฉพาะรอบปลูกที่เป็นข้าว (รหัสสินค้าขึ้นต้นด้วย RICE_) เนื่องจากเทคนิคเปียกสลับแห้งเป็นเทคนิคเฉพาะนาข้าวที่มีการขังน้ำเท่านั้น ค่าคงที่ทั้งหมดที่ใช้คำนวณเก็บไว้ใน carbon.awd_config และ Platform Ops ปรับได้โดยไม่กระทบผลประเมินเก่าที่คำนวณไปแล้ว (เก็บเป็นเวอร์ชัน ไม่ใช่การแก้ไขทับ):
source_provider = 'manual') เพื่อใช้ประกอบการพิจารณาตอนตรวจสอบเท่านั้น ไม่ได้ใช้ในสูตรคำนวณเครดิตโดยตรง
เปลี่ยนจาก "เครดิตของเกษตรกรรายเดียว" ให้กลายเป็น "โครงการคาร์บอน" ระดับองค์กรที่ยื่นขอรับรอง/ขายได้จริง
สร้างได้โดย 3 ประเภทองค์กรเท่านั้น: สหกรณ์ (Cooperative), วิสาหกิจชุมชนด้านการเกษตร (AgriCommunityEnterprise), กองทุนหมู่บ้าน (VillageFund)
ดึงได้เฉพาะรอบปลูกของสมาชิกในองค์กรที่มีสถานะ AWD assessment เป็น verified แล้วเท่านั้น (ดู "รายชื่อที่มีสิทธิ์เข้าร่วม" — eligible-assessments)
แต่ละโครงการมีที่เก็บ "หลักฐาน" 4 ประเภท ได้แก่ ภาพถ่ายดาวเทียม, ขอบเขตแปลง (GIS/GeoJSON), เอกสารรับรอง และอื่นๆ — ไฟล์จริง (ภาพ/PDF) ใช้ระบบอัปโหลดไฟล์กลางที่มีอยู่แล้วของแพลตฟอร์ม (ไม่ได้สร้างระบบเก็บไฟล์ใหม่) ส่วนขอบเขตแปลง (GIS) เก็บเป็นข้อความ/พิกัดตรงๆ เพราะไฟล์ประเภท .geojson/.kml/.shp ไม่อยู่ใน allowlist ของระบบอัปโหลดไฟล์ปัจจุบัน ลบออกได้เฉพาะตอนโครงการยังอยู่สถานะ draft/mrv_prep เท่านั้น (กันไม่ให้แก้ไขหลักฐานหลังยื่นไปแล้ว)
เมื่อพร้อมแล้ว องค์กรกด "ส่งออกชุดเอกสาร" — ระบบรวมข้อมูลโครงการ + รายชื่อสมาชิก + หลักฐานทั้งหมดเป็นชุดเดียว (manifest) ให้เจ้าหน้าที่นำไปยื่นกับผู้ตรวจสอบ (VVB) หรือ อบก./TGO ด้วยตนเอง — ไม่มีการเชื่อมต่อ/ส่งข้อมูลอัตโนมัติไปยังหน่วยงานภายนอกใดๆ ทั้งสิ้น
js/carbon-module-widget.js) ฝังในหน้า dashboard ของแต่ละพอร์ทัล — โค้ดหลังบ้านแยกเป็นคนละไฟล์ต่อประเภทองค์กร (coopcarbon.js, communityenterprisecarbon.js, villagefundcarbon.js) แต่ตรรกะเหมือนกันทุกประการ องค์กรเห็นและจัดการได้เฉพาะโครงการของตนเองเท่านั้น
จับคู่ผู้ซื้อกับผู้ขาย คำนวณและแบ่งรายได้อัตโนมัติ — ระบบเดียวที่ทำให้ "คาร์บอนเครดิต" กลายเป็นเงินจริง
ลงขายได้เฉพาะโครงการที่สถานะ registered หรือ credits_issued เท่านั้น — ระบุจำนวนเครดิต (tCO₂e) และราคาที่ต้องการต่อหน่วย
ผู้ซื้อ (Buyer) ระบุจำนวนที่ต้องการซื้อและราคาที่เสนอ — ยังไม่เห็นรายชื่อผู้ขายหรือประกาศขายใดๆ โดยตรง เป็นเพียง "คำขอ" เข้าคิว
หนึ่งแถวต่อผู้รับเงินหนึ่งราย (องค์กร 1 แถว + เกษตรกรที่ยัง active ในโครงการอีกคนละ 1 แถว) ต่อการจับคู่หนึ่งครั้ง
เมื่อมีประกาศขายและคำสั่งซื้อพร้อมกัน Platform Ops เป็นผู้เลือกจับคู่เองผ่านหน้าแอดมิน "ตลาดคาร์บอนเครดิต" (ไม่ใช่ตลาดแบบเปิดให้ผู้ซื้อเลือกผู้ขายเอง) กติกาสำคัญ:
ตัวอย่างจากเอกสารออกแบบ: รายได้รวม 30,000 บาท − ต้นทุนโครงการ 2,000 − ค่าธรรมเนียม 10% ของรายได้รวม (3,000) = รายได้สุทธิ 25,000 บาท → แบ่งกลุ่มเกษตรกร 80% (20,000 บาท ตามสัดส่วนเครดิตของแต่ละคน) และเข้าองค์กร 20% (5,000 บาท) การปัดเศษทำละเอียดถึงสตางค์ โดยให้สมาชิกคนสุดท้ายรับผลต่างจากการปัดเศษ เพื่อให้ผลรวมของทุกคนตรงกับยอดที่ปัดแล้วเป๊ะ ไม่คลาดเคลื่อนสะสม
carbon.revenue_distribution เก็บ "ยอดที่ต้องจ่าย" และสถานะ pending/paid ไว้เป็นหลักฐานตรวจสอบเท่านั้น — เงินจริงต้องโอนกันเองนอกระบบ (องค์กร → เกษตรกร) ผ่านช่องทางที่มีอยู่แล้ว แล้วผู้มีสิทธิ์ (ฝั่งองค์กร) กลับมากด "จ่ายแล้ว" ในระบบเพื่อบันทึกไว้เท่านั้น
| บทบาท | ทำอะไร | หน้า/พอร์ทัล |
|---|---|---|
| เกษตรกร | บันทึกระดับน้ำ AWD ต่อรอบปลูก, ส่งตรวจ, ดูสถานะและรายได้ที่ได้รับ | frontend/carbon-credit.html |
| Platform Ops (แอดมิน) | ตรวจสอบ/รับรอง/ตีกลับผลประเมิน AWD, ปรับค่าคงที่วิธีคำนวณ, ป้อนข้อมูลดาวเทียมเสริม, จับคู่คำสั่งซื้อ-ขายในตลาดกลาง | พอร์ทัลแอดมิน แท็บ "คาร์บอนเครดิต (AWD)" |
| สหกรณ์ / วิสาหกิจชุมชนด้านการเกษตร / กองทุนหมู่บ้าน | สร้าง/จัดการโครงการคาร์บอน, เพิ่ม-ถอดสมาชิก, แนบหลักฐาน MRV, ส่งออกเอกสาร, ลงขายเครดิต, ยืนยันจ่ายเงินให้สมาชิก | widget "Carbon Module" ในหน้า dashboard ของแต่ละพอร์ทัล |
| ผู้รับซื้อผลผลิตการเกษตร (Buyer) | สร้าง/ยกเลิกคำสั่งซื้อเครดิต ดูผลการจับคู่หลังมีการจับคู่แล้ว (ดูได้อย่างเดียว แก้ไขไม่ได้) | พอร์ทัลผู้รับซื้อผลผลิตการเกษตร แท็บ "ตลาดคาร์บอนเครดิต" |
ทุกตารางอยู่ใน schema carbon — ไม่มี Row Level Security บนตารางเหล่านี้เลย ขอบเขตความปลอดภัยทั้งหมดคือเงื่อนไข WHERE ที่ backend เขียนไว้ชัดเจน (ดูคอมเมนต์ท้ายไฟล์ grant_carbon_awd.sql)
| ตาราง | เฟส | หน้าที่ |
|---|---|---|
carbon.awd_config | 1 | ค่าคงที่วิธีคำนวณ เก็บเป็นเวอร์ชัน (แถวใหม่ + ปิด active แถวเก่า) |
carbon.awd_water_log | 1 | บันทึกระดับน้ำที่เกษตรกรรายงานเอง — append-only |
carbon.satellite_observation | 1 | ข้อมูลดาวเทียมเสริม ป้อนด้วยมือโดย Platform Ops วันนี้ |
carbon.awd_cycle_assessment | 1 | ผลประเมิน 1 แถวต่อ 1 รอบปลูก (draft/pending_review/verified/rejected) |
carbon.carbon_project | 2 | โครงการคาร์บอนของ 1 องค์กร พร้อมสัดส่วนแบ่งรายได้ที่ตั้งเองได้ |
carbon.project_cycle_member | 2 | เชื่อมรอบปลูกที่ verified แล้วเข้ากับโครงการ |
carbon.vvb_evidence | 2 | หลักฐาน MRV ของโครงการ (ไฟล์/GIS/เอกสารรับรอง) |
carbon.marketplace_listing | 3 | ประกาศขายเครดิตของโครงการที่ registered แล้ว |
carbon.marketplace_order | 3 | คำสั่งซื้อของผู้ซื้อ + ผลการจับคู่ |
carbon.revenue_distribution | 3 | ยอดเงินที่ต้องจ่ายต่อผู้รับหนึ่งราย + สถานะจ่ายแล้ว/รอจ่าย |
หน้านี้อธิบาย "กลไกภายในระบบ" ส่วนหน้าแนวคิดคาร์บอนเครดิตอธิบายภาพรวมตลาดคาร์บอนไทยและเทคนิค AWD ในเชิงหลักการทั่วไป