ภาพรวม 3 เฟส

Carbon Module ของ AgroLink พัฒนาเป็น 3 เฟสต่อเนื่องกัน แต่ละเฟสเพิ่ม "ชั้น" ใหม่บนของเดิมโดยไม่แก้ไขของเดิม:

สิ่งที่ต้องเข้าใจให้ตรงกันตั้งแต่ต้น: ทั้ง 3 เฟสนี้คือเครื่องมือ MRV และประเมินผลภายในแพลตฟอร์มเท่านั้น ไม่ใช่การขึ้นทะเบียนคาร์บอนเครดิตจริงกับหน่วยงานใด การจะได้เครดิตที่ซื้อขายได้จริงต้องยื่นเรื่องแยกต่างหากกับผู้รับรอง (เช่น อบก./TGO ภายใต้โครงการ T-VER) ซึ่งมีขั้นตอน baseline/project boundary/leakage/third-party validation ที่ซับซ้อนกว่านี้ ดูรายละเอียดเพิ่มเติมที่ หน้าแนวคิดคาร์บอนเครดิต
ภาพรวมกระบวนการ

เส้นทางข้อมูลแบบเต็ม (End-to-End)

ไล่ตามลำดับตั้งแต่เกษตรกรบันทึกข้อมูลจริง ไปจนถึงเงินเข้าบัญชี

1

เกษตรกรบันทึกระดับน้ำในนาต่อรอบปลูก

ทุกครั้งที่ไปดูนา บันทึกว่าน้ำ "ท่วม" หรือ "แห้ง" (และระดับน้ำเป็น ซม. ถ้ามีท่อวัด) ผ่านหน้า carbon-credit.html — ข้อมูลนี้เป็น append-only แก้ไขย้อนหลังไม่ได้

เกษตรกร · frontend/carbon-credit.html
2

ระบบคำนวณ "ร่างประเมิน" ใหม่ทุกครั้งที่มีข้อมูลเพิ่ม

ไล่ดูบันทึกทั้งหมดตามลำดับเวลา จัดกลุ่มช่วงที่ "แห้งตามเกณฑ์ AWD" ต่อเนื่องกันเป็น "รอบแห้ง" นับว่ารอบปลูกนี้เข้าเกณฑ์หรือไม่ ตามจำนวนรอบแห้งที่ผ่านเกณฑ์

อัตโนมัติ · backend/src/routes/carbon.js: recomputeAssessment()
3

เกษตรกรส่งร่างประเมินเข้าคิวตรวจสอบ

เมื่อพอใจกับข้อมูลแล้ว กด "ส่งตรวจ" — สถานะเปลี่ยนจาก draft เป็น pending_review และ "ล็อก" ไม่ให้แก้ไขข้อมูลต่อจนกว่าจะมีผลตรวจ

เกษตรกร · POST /farmer/carbon/cycles/:id/submit
4

Platform Ops ตรวจสอบและตัดสิน

ดูบันทึกระดับน้ำทั้งหมด + ข้อมูลดาวเทียมเสริม (ถ้ามี) แล้วกด "รับรอง" (verified — ล็อกถาวร) หรือ "ตีกลับ" (rejected — พร้อมเหตุผล เกษตรกรแก้ไขแล้วส่งใหม่ได้)

Platform Ops · หน้าแอดมิน "คาร์บอนเครดิต (AWD)"
5

องค์กรรวบรวมผลที่รับรองแล้วเข้าโครงการ

สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้าน สร้าง "โครงการคาร์บอน" แล้วเลือกเฉพาะรอบปลูกของสมาชิกที่มีสถานะ verified แล้วเท่านั้นเข้าร่วม — 1 รอบปลูกอยู่ในโครงการที่กำลังใช้งานได้ทีละ 1 โครงการ

สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้าน · widget "Carbon Module"
6

แนบหลักฐาน MRV และส่งออกชุดเอกสาร

แนบภาพถ่าย/ภาพดาวเทียม/ขอบเขตแปลง (GIS)/เอกสารรับรอง เข้าโครงการ แล้วส่งออก manifest รวมทุกอย่างเพื่อนำไปยื่นกับผู้ตรวจสอบ (VVB) หรือ อบก./TGO ด้วยตนเองนอกระบบ

สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้าน · MRV Data Room
7

อัปเดตสถานะโครงการตามความคืบหน้าจริงนอกระบบ

องค์กรปรับสถานะโครงการเอง: draft → mrv_prep → submitted_to_tver → registered → credits_issued ตามความคืบหน้าจริงกับหน่วยงานภายนอก (ระบบไม่เชื่อมต่อกับ อบก./TGO โดยตรง)

สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้าน
8

องค์กรลงขายเครดิต ผู้ซื้อยื่นคำสั่งซื้อ

เมื่อโครงการถึงสถานะ registered/credits_issued แล้วเท่านั้น จึงลงขาย (ระบุจำนวนตันคาร์บอนไดออกไซด์เทียบเท่า + ราคาที่ต้องการ) — ฝั่งผู้ซื้อสร้างคำสั่งซื้อคู่ขนาน (จำนวนที่ต้องการ + ราคาที่เสนอ) โดยยังไม่เห็นรายชื่อผู้ขายรายใดโดยตรง

ผู้ขาย: สหกรณ์ฯ · ผู้ซื้อ: พอร์ทัลผู้รับซื้อผลผลิตการเกษตร (แท็บคาร์บอนเครดิต)
9

Platform Ops จับคู่ด้วยมือ ระบบคำนวณแบ่งรายได้อัตโนมัติ

เลือกคำสั่งซื้อ 1 รายการจับคู่กับประกาศขาย 1 รายการ (ขายเต็มจำนวนเสมอ ไม่รองรับขายบางส่วน) กรอกต้นทุนโครงการ (ถ้ามี) แล้วระบบคำนวณส่วนแบ่งของทุกฝ่ายทันที ไม่ให้เจ้าหน้าที่กรอกตัวเลขเอง

Platform Ops · หน้าแอดมิน "ตลาดคาร์บอนเครดิต"
10

องค์กรจ่ายเงินจริงนอกระบบ แล้วกดยืนยันในระบบ

ระบบยังไม่มีช่องทางโอนเงินจริง — องค์กรโอนเงินให้เกษตรกรแต่ละคนผ่านช่องทางเดิมที่มีอยู่ (พร้อมเพย์/โอนธนาคาร) เอง แล้วกลับมากด "จ่ายแล้ว" เพื่อเป็นหลักฐานตรวจสอบย้อนหลังเท่านั้น

สหกรณ์/วิสาหกิจชุมชน/กองทุนหมู่บ้าน
เฟส 1

การประเมิน AWD ระดับเกษตรกร

เครื่องมือ MRV (Measurement, Reporting, Verification) ระดับรอบปลูกเดียว — จุดเริ่มต้นของทั้งโมดูล

ใช้ได้เฉพาะรอบปลูกที่เป็นข้าว (รหัสสินค้าขึ้นต้นด้วย RICE_) เนื่องจากเทคนิคเปียกสลับแห้งเป็นเทคนิคเฉพาะนาข้าวที่มีการขังน้ำเท่านั้น ค่าคงที่ทั้งหมดที่ใช้คำนวณเก็บไว้ใน carbon.awd_config และ Platform Ops ปรับได้โดยไม่กระทบผลประเมินเก่าที่คำนวณไปแล้ว (เก็บเป็นเวอร์ชัน ไม่ใช่การแก้ไขทับ):

📏 ค่าตั้งต้นของวิธีคำนวณ (ปรับได้)

  • อัตราเครดิตต่อไร่: 0.0800 tCO₂e ต่อไร่ ต่อ 1 รอบปลูกที่ผ่านเกณฑ์
  • จำนวนรอบแห้งขั้นต่ำที่ต้องมี: อย่างน้อย 3 รอบต่อฤดูปลูก
  • ความยาวขั้นต่ำของ 1 รอบแห้ง: อย่างน้อย 7 วันติดต่อกัน
  • ระดับน้ำที่ถือว่า "แห้งตามเกณฑ์": ต่ำกว่าผิวดินอย่างน้อย 15 ซม.

🌾 กติกาการนับ "รอบแห้ง" ที่ผ่านเกณฑ์

  • ไล่บันทึกระดับน้ำตามลำดับเวลา นับว่า "แห้งตามเกณฑ์" เมื่อสถานะเป็น "แห้ง" และ (ระดับน้ำลดลงถึงเกณฑ์ หรือไม่ได้กรอกระดับน้ำเป็น ซม. ก็เชื่อตามสถานะที่รายงาน)
  • รวมบันทึกที่ต่อเนื่องกันเป็น "รอบ" หนึ่งรอบ นับว่าผ่านเกณฑ์ก็ต่อเมื่อช่วงเวลาของรอบนั้นยาวไม่น้อยกว่าเกณฑ์ขั้นต่ำ
  • เข้าเกณฑ์ทั้งรอบปลูกก็ต่อเมื่อมีรอบแห้งที่ผ่านเกณฑ์สะสมครบตามจำนวนขั้นต่ำ — ได้หรือไม่ได้เต็มจำนวนเท่านั้น ไม่มีเครดิตบางส่วน

สูตรคำนวณเครดิตประมาณการ

// คำนวณใหม่ทุกครั้งที่มีการบันทึกระดับน้ำเพิ่ม จนกว่าจะถูกส่งตรวจ
is_eligible = (จำนวนรอบแห้งที่ผ่านเกณฑ์ >= min_dry_events_required)
estimated_credit_tco2e = is_eligible
? พื้นที่แปลง (ไร่) × อัตราเครดิตต่อไร่
: 0

สถานะของ 1 รอบปลูก (carbon.awd_cycle_assessment)

draft
→
pending_review
→
verified
/
rejected
→
draft (แก้ไขใหม่)
ข้อมูลดาวเทียมเป็นข้อมูลเสริม ไม่ใช่แหล่งหลัก: เพราะระบบยังไม่มีบัญชี/API ผู้ให้บริการภาพถ่ายดาวเทียมจริง (Sentinel Hub / Google Earth Engine / GISTDA ฯลฯ) วันนี้ Platform Ops จึงป้อนข้อมูลดาวเทียมเข้าเองด้วยมือ (source_provider = 'manual') เพื่อใช้ประกอบการพิจารณาตอนตรวจสอบเท่านั้น ไม่ได้ใช้ในสูตรคำนวณเครดิตโดยตรง
เฟส 2

การรวมกลุ่มระดับองค์กร + ห้องเก็บเอกสาร MRV

เปลี่ยนจาก "เครดิตของเกษตรกรรายเดียว" ให้กลายเป็น "โครงการคาร์บอน" ระดับองค์กรที่ยื่นขอรับรอง/ขายได้จริง

carbon.carbon_project

โครงการคาร์บอน 1 โครงการ = 1 องค์กร

สร้างได้โดย 3 ประเภทองค์กรเท่านั้น: สหกรณ์ (Cooperative), วิสาหกิจชุมชนด้านการเกษตร (AgriCommunityEnterprise), กองทุนหมู่บ้าน (VillageFund)

  • กำหนด "สัดส่วนแบ่งให้กลุ่มเกษตรกร" (farmer_pool_pct) และ "ค่าธรรมเนียมแพลตฟอร์ม" (platform_fee_pct) ได้เองต่อโครงการ ไม่ใช่ค่าคงที่ 80/20 ทั้งระบบ
  • มีสถานะไล่ระดับ: draft → mrv_prep → submitted_to_tver → registered → credits_issued (องค์กรปรับเองตามความคืบหน้าจริงนอกระบบ)
carbon.project_cycle_member

สมาชิกของโครงการ = รอบปลูกที่ verified แล้ว

ดึงได้เฉพาะรอบปลูกของสมาชิกในองค์กรที่มีสถานะ AWD assessment เป็น verified แล้วเท่านั้น (ดู "รายชื่อที่มีสิทธิ์เข้าร่วม" — eligible-assessments)

  • 1 รอบปลูก (assessment) เข้าร่วมโครงการที่ "กำลังใช้งาน" ได้ทีละ 1 โครงการเท่านั้นในแต่ละช่วงเวลา
  • ถอดสมาชิกออกได้ (ไม่ลบทิ้ง แค่เปลี่ยนสถานะเป็น removed) แล้วนำไปเพิ่มในโครงการอื่นทีหลังได้ — ประวัติยังอยู่ครบเพื่อการตรวจสอบ
  • สัดส่วนเครดิตของแต่ละคน (allocated_credit_tco2e) คือฐานที่ใช้แบ่งรายได้ในเฟส 3 ทีหลัง

ห้องเก็บเอกสาร MRV (MRV Data Room)

แต่ละโครงการมีที่เก็บ "หลักฐาน" 4 ประเภท ได้แก่ ภาพถ่ายดาวเทียม, ขอบเขตแปลง (GIS/GeoJSON), เอกสารรับรอง และอื่นๆ — ไฟล์จริง (ภาพ/PDF) ใช้ระบบอัปโหลดไฟล์กลางที่มีอยู่แล้วของแพลตฟอร์ม (ไม่ได้สร้างระบบเก็บไฟล์ใหม่) ส่วนขอบเขตแปลง (GIS) เก็บเป็นข้อความ/พิกัดตรงๆ เพราะไฟล์ประเภท .geojson/.kml/.shp ไม่อยู่ใน allowlist ของระบบอัปโหลดไฟล์ปัจจุบัน ลบออกได้เฉพาะตอนโครงการยังอยู่สถานะ draft/mrv_prep เท่านั้น (กันไม่ให้แก้ไขหลักฐานหลังยื่นไปแล้ว)

เมื่อพร้อมแล้ว องค์กรกด "ส่งออกชุดเอกสาร" — ระบบรวมข้อมูลโครงการ + รายชื่อสมาชิก + หลักฐานทั้งหมดเป็นชุดเดียว (manifest) ให้เจ้าหน้าที่นำไปยื่นกับผู้ตรวจสอบ (VVB) หรือ อบก./TGO ด้วยตนเอง — ไม่มีการเชื่อมต่อ/ส่งข้อมูลอัตโนมัติไปยังหน่วยงานภายนอกใดๆ ทั้งสิ้น

3 องค์กรใช้หน้าจอเดียวกัน: พอร์ทัลของสหกรณ์ วิสาหกิจชุมชนด้านการเกษตร และกองทุนหมู่บ้าน ทั้ง 3 แบบใช้ widget เดียวกัน (js/carbon-module-widget.js) ฝังในหน้า dashboard ของแต่ละพอร์ทัล — โค้ดหลังบ้านแยกเป็นคนละไฟล์ต่อประเภทองค์กร (coopcarbon.js, communityenterprisecarbon.js, villagefundcarbon.js) แต่ตรรกะเหมือนกันทุกประการ องค์กรเห็นและจัดการได้เฉพาะโครงการของตนเองเท่านั้น
เฟส 3

ตลาดกลางและกลไกแบ่งรายได้

จับคู่ผู้ซื้อกับผู้ขาย คำนวณและแบ่งรายได้อัตโนมัติ — ระบบเดียวที่ทำให้ "คาร์บอนเครดิต" กลายเป็นเงินจริง

carbon.marketplace_listing

🏷️ ประกาศขาย (ฝั่งองค์กร)

ลงขายได้เฉพาะโครงการที่สถานะ registered หรือ credits_issued เท่านั้น — ระบุจำนวนเครดิต (tCO₂e) และราคาที่ต้องการต่อหน่วย

carbon.marketplace_order

🛒 คำสั่งซื้อ (ฝั่งผู้ซื้อ)

ผู้ซื้อ (Buyer) ระบุจำนวนที่ต้องการซื้อและราคาที่เสนอ — ยังไม่เห็นรายชื่อผู้ขายหรือประกาศขายใดๆ โดยตรง เป็นเพียง "คำขอ" เข้าคิว

carbon.revenue_distribution

💰 ผลการแบ่งรายได้

หนึ่งแถวต่อผู้รับเงินหนึ่งราย (องค์กร 1 แถว + เกษตรกรที่ยัง active ในโครงการอีกคนละ 1 แถว) ต่อการจับคู่หนึ่งครั้ง

การจับคู่: ทำโดย Platform Ops เท่านั้น ไม่ใช่ระบบอัตโนมัติ

เมื่อมีประกาศขายและคำสั่งซื้อพร้อมกัน Platform Ops เป็นผู้เลือกจับคู่เองผ่านหน้าแอดมิน "ตลาดคาร์บอนเครดิต" (ไม่ใช่ตลาดแบบเปิดให้ผู้ซื้อเลือกผู้ขายเอง) กติกาสำคัญ:

  • ขายเต็มจำนวนเท่านั้น: จำนวนที่จับคู่ต้องเท่ากับจำนวนที่ประกาศขายพอดี ไม่รองรับขายบางส่วนหรือทบยอดคงเหลือไปขายต่อ
  • จับคู่ได้ไม่เกินจำนวนที่ขอซื้อ: จำนวนที่จับคู่ต้องไม่เกินจำนวนที่คำสั่งซื้อนั้นระบุไว้
  • ราคา/ต้นทุนกรอกจริงตอนจับคู่: ราคาที่ตกลงกันจริงและต้นทุนโครงการ (ถ้ามี) ให้ Platform Ops กรอกตอนจับคู่ อาจต่างจากราคาที่แต่ละฝ่ายเสนอไว้แต่แรกก็ได้

สูตรแบ่งรายได้ (คำนวณโดยระบบ 100% ไม่ให้เจ้าหน้าที่กรอกเอง)

รายได้รวม (Gross) = จำนวนเครดิตที่จับคู่ × ราคาต่อหน่วยที่ตกลงกัน
ค่าธรรมเนียม AgroLink = รายได้รวม × platform_fee_pct // ของโครงการนี้
รายได้สุทธิ (Net) = รายได้รวม − ต้นทุนโครงการ − ค่าธรรมเนียม
// ถ้ารายได้สุทธิติดลบ ระบบปฏิเสธการจับคู่ทันที
ส่วนแบ่งกลุ่มเกษตรกร = รายได้สุทธิ × farmer_pool_pct // ของโครงการนี้
ส่วนแบ่งองค์กร = รายได้สุทธิ − ส่วนแบ่งกลุ่มเกษตรกร
ส่วนของเกษตรกรแต่ละคน = ส่วนแบ่งกลุ่มเกษตรกร × (เครดิตของตน ÷ เครดิตรวมของสมาชิก active ทั้งหมด)

ตัวอย่างจากเอกสารออกแบบ: รายได้รวม 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_config1ค่าคงที่วิธีคำนวณ เก็บเป็นเวอร์ชัน (แถวใหม่ + ปิด active แถวเก่า)
carbon.awd_water_log1บันทึกระดับน้ำที่เกษตรกรรายงานเอง — append-only
carbon.satellite_observation1ข้อมูลดาวเทียมเสริม ป้อนด้วยมือโดย Platform Ops วันนี้
carbon.awd_cycle_assessment1ผลประเมิน 1 แถวต่อ 1 รอบปลูก (draft/pending_review/verified/rejected)
carbon.carbon_project2โครงการคาร์บอนของ 1 องค์กร พร้อมสัดส่วนแบ่งรายได้ที่ตั้งเองได้
carbon.project_cycle_member2เชื่อมรอบปลูกที่ verified แล้วเข้ากับโครงการ
carbon.vvb_evidence2หลักฐาน MRV ของโครงการ (ไฟล์/GIS/เอกสารรับรอง)
carbon.marketplace_listing3ประกาศขายเครดิตของโครงการที่ registered แล้ว
carbon.marketplace_order3คำสั่งซื้อของผู้ซื้อ + ผลการจับคู่
carbon.revenue_distribution3ยอดเงินที่ต้องจ่ายต่อผู้รับหนึ่งราย + สถานะจ่ายแล้ว/รอจ่าย

ข้อจำกัดและสิ่งที่ต้องระวัง

อยากดูภาพรวมแนวคิดคาร์บอนเครดิตด้วยหรือไม่?

หน้านี้อธิบาย "กลไกภายในระบบ" ส่วนหน้าแนวคิดคาร์บอนเครดิตอธิบายภาพรวมตลาดคาร์บอนไทยและเทคนิค AWD ในเชิงหลักการทั่วไป

อ่านแนวคิดคาร์บอนเครดิต กลับหน้าแรก