Water CAD Studio

WATER CAD STUDIO · INTEGRATIONS

เชื่อมข้อมูลพื้นที่
สู่ชุดแบบที่ตรวจสอบได้

ให้ระบบสำรวจและวิเคราะห์บริบทส่งข้อมูลพร้อมที่มาเข้าสู่ WCS แล้วรับแบบ รายการคำนวณ ปริมาณ และ BOQ กลับตามฉบับที่ผ่านการตรวจ

REST APIPython SDK / CLIWebhook + HMAC
SDK RELEASE20261103-173453

คู่มือ · Client · Callback / SQL
ตัวอย่างข้อมูล · SHA-256 manifest

ขนาดชุดดาวน์โหลด120.6 KB
ตรวจรุ่นและความครบของไฟล์ ↗
เปิดอ่านและดาวน์โหลดได้โดยไม่ต้องเข้าสู่ระบบการเรียก API จริงต้องใช้ service token ของ connector ที่ผู้ดูแล WCS กำหนดสิทธิ์ให้ เอกสารนี้ไม่มี credential จริงแนบไว้
01 / QUICKSTART

เริ่มต้นใน 4 ขั้นตอน

1

ขอ connector

แจ้งผู้ดูแล WCS ถึงชื่อระบบ ผู้รับผิดชอบ และขอบเขตการใช้งาน รับ token ผ่าน secret store ขององค์กร

2

อ่านข้อกำหนด

เลือกแม่แบบ อ่าน fields, หน่วย, investigations, HOLD และ requirements SHA จาก API ล่าสุด

3

ส่งข้อมูลและหลักฐาน

ใช้รหัส record/revision ที่คงเดิม พร้อมที่มาของค่าทุกช่อง ส่งไฟล์ที่ประกาศให้ครบก่อนขอสร้างแบบ

4

ตรวจและรับชุดงาน

เปิดฉบับส่งตรวจให้ผู้รับผิดชอบดำเนินการ รับ callback เมื่ออนุมัติ แล้วดาวน์โหลดตาม fingerprint และ SHA

ติดตั้งและอ่านข้อกำหนดด้วย SDK

แตก ZIP แล้วตั้ง WCS_EXCHANGE_TOKEN จาก secret store ใน environment ของ service ก่อนเรียกคำสั่ง ตัวอย่างนี้ไม่มี token ให้คัดลอก

python -m pip install -r requirements-sdk.txt
python sdk/wcs_exchange_client.py --output templates.json templates
python sdk/wcs_exchange_client.py --output RH-15_requirements.json requirements RH-15

SDK ใช้ HTTPS ของ https://cad-studio.entawisdom.com เป็นค่าเริ่มต้น ไฟล์ output ต้องเป็นชื่อใหม่เพื่อไม่เขียนทับหลักฐานเดิม

02 / AUTHENTICATION

Service token และขอบเขตสิทธิ์

ส่ง Authorization: Bearer <service-token> ใน header ผู้ดูแลสร้าง connector จากบัญชี admin และ CSRF ของเว็บ ไม่ใช้บัญชีวิศวกร บัญชีฐานข้อมูล หรือ worker token เป็น credential ของระบบต้นทาง

Scopeใช้สำหรับ
requirements:readอ่านทะเบียนแม่แบบและข้อกำหนดรายชนิด
submissions:writeส่งข้อมูลและไฟล์หลักฐานของ connector นี้
submissions:readอ่านสถานะและรับไฟล์ฉบับอนุมัติที่เป็นเจ้าของ
drafts:generateขอสร้างแบบและเตรียมฉบับส่งตรวจ

กำหนดเฉพาะสิทธิ์ที่ต้องใช้จริง Token ไม่ทำให้ service อนุมัติแบบหรือปิด HOLD ได้ เมื่อเพิกถอน connector ให้หยุดใช้ token เดิมและตรวจสถานะคำขอที่ค้างกับผู้ดูแล

03 / DATA CONTRACT

อ่านข้อกำหนดก่อนส่งข้อมูลพื้นที่

เรียก GET /api/exchange/v1/requirements/{template} และตรวจ requirements_sha256 SDK ตรวจ hash ของคำตอบให้แล้ว แม่แบบแต่ละรายการมี generation inputs กับข้อกำหนดสำรวจ/ทดสอบแยกกัน การมีรายการในทะเบียนไม่ได้แปลว่าสร้าง CAD ได้ ให้ตรวจ generation_supported เสมอ

  • values ใช้ key และหน่วยตาม fields ที่ประกาศ ไม่แปลง UTM, datum หรือหน่วยให้เอง
  • แยก user_supplied, measured, standard, designer_selected และ assumed ให้ตรงข้อเท็จจริง
  • ค่า measured ต้องมี observed_on, method และ evidence_ids ที่มีไฟล์จริงให้ผู้ตรวจอ่าน
  • example_defaults เป็นตัวอย่างสมมติ ไม่เติมเป็นค่าพื้นที่จริงอัตโนมัติ
ตัวอย่างโครงสร้างค่าเดี่ยว — เป็นข้อสมมติ ไม่ใช่ผลสำรวจจริง
{
  "value": 2.5,
  "unit": "m",
  "classification": "assumed",
  "source_reference": "ตัวอย่างรูปแบบข้อมูลเท่านั้น"
}

submission ประกอบด้วย schema_version, template, source_reference, requirements_sha256, values และข้อมูล paper/title/location/evidence ตามที่ใช้ กระดาษรองรับ A3 และ A1 โดยเริ่มต้น A3 พิกัดรองรับ EPSG:4326 พร้อมที่มาและ classification ที่กำหนด

↓ โครงสร้าง JSON envelope

Schema envelope ตรวจโครงสร้างทั่วไป ไม่ยืนยันว่าข้อมูลครบทุกช่องหรือถูกต้องทางวิศวกรรม ต้องอ่าน requirements ของแม่แบบนั้นร่วมด้วย

04 / SOURCE EVIDENCE

ส่งหลักฐานเป็นไฟล์จริงพร้อม SHA-256

ประกาศ evidence ใน submission ด้วย id, title, source_reference และ SHA-256 แล้วอัปโหลดผ่าน POST /api/exchange/v1/submissions/{id}/evidence เฉพาะ connector เจ้าของรายการ

8 MBต่อไฟล์
32 MBรวมต่อ submission
PDF / PNG / JPEG / XLSXชนิดไฟล์ที่รับ
python sdk/wcs_exchange_client.py upload-evidence SUBMISSION_UUID survey-report-R1 actual_report.pdf --media-type application/pdf --expected-sha256 ACTUAL_SHA256

ส่งไฟล์ที่ประกาศให้ครบก่อน generate หรือ prepare-review ข้อมูล/ไฟล์เปลี่ยนต้องออก source revision ใหม่ ไฟล์เดิม ชื่อเดิม ชนิดเดิมส่งซ้ำได้และคืน UUID เดิม หลังเริ่มสร้างงานห้ามเพิ่มหรือแทนไฟล์ต้นทางในรายการเดิม

RECEIVED_NOT_VERIFIED

การรับไฟล์และตรวจ hash ไม่ใช่การยืนยันเนื้อหารายงาน ผลทดสอบ หรือการรับรองทางวิศวกรรม ข้อ HOLD ยังเปิดจนผู้ตรวจที่มีอำนาจตรวจหลักฐานจริง

05 / GENERATE & REVIEW

ติดตามคำขอเดิม และแก้ไขเป็นฉบับ

รับข้อมูล→ไฟล์หลักฐานครบ→สร้างร่าง→ผู้ตรวจพิจารณา→อนุมัติตามขอบเขต
python sdk/wcs_exchange_client.py submit provided_submission_R1.json --idempotency-key SOURCE-RECORD-001:R1
python sdk/wcs_exchange_client.py status SUBMISSION_UUID
python sdk/wcs_exchange_client.py generate SUBMISSION_UUID
python sdk/wcs_exchange_client.py status SUBMISSION_UUID
python sdk/wcs_exchange_client.py prepare-review SUBMISSION_UUID

Idempotency-Key ยาว 8–128 ตัวอักษร ใช้รหัส record/revision ที่คงเดิมสำหรับข้อมูลเดิม key เดิมกับข้อมูลเปลี่ยนจะได้409 เมื่อข้อมูลเปลี่ยนให้ออก revision ใหม่ ไม่ใช้ key สุ่มเพื่อหลบผล validation

  • validated คือผ่านรูปแบบข้อมูล ไม่ใช่ผลสำรวจผ่านตรวจ
  • generating / generated คือสถานะสร้างไฟล์ ไม่ใช่สถานะอนุมัติ
  • dispatch_uncertain ต้องตรวจคำขอเดิมและให้ผู้ดูแลกระทบยอด ไม่สร้าง CAD ซ้ำแทนการตรวจ
  • ผู้ตรวจขอแก้ → เปิดฉบับใหม่ → ส่งตรวจใหม่ ผลอนุมัติเดิมไม่ยกไปใช้กับไฟล์ที่เปลี่ยน

CAD รายการคำนวณ QTO และ BOQ อ้างฉบับและรหัสรายการเดียวกัน รายการราคาไม่มีหลักฐานคงว่าง ไม่สร้างผลสำรวจ ราคา ลายมือชื่อ หรือการรับรองเพื่อให้ชุดเอกสารดูครบ

06 / WEBHOOK

รับ package.approved อย่างตรวจสอบได้

ทีมต้นทางเตรียม HTTPS endpoint พอร์ต443 บน public host ขององค์กรและให้ผู้ดูแลกำหนดใน connector WCS ไม่ส่งไป private/reserved host และไม่ตาม redirect รับ signing key ผ่าน secret store แยกจาก service token

  1. อ่าน raw body bytes และ headers เดิม: X-WCS-Event-ID, X-WCS-Timestamp, X-WCS-Signature
  2. ใช้ verify_callback() ตรวจ HMAC-SHA256 ของ timestamp + จุด + raw body ก่อน parse/บันทึก ไม่ stringify JSON ใหม่ก่อนตรวจ
  3. บันทึก event และคิวต้นทางใน transaction เดียวกัน ใช้ UNIQUE(connector_id,event_id) และ commit ก่อนตอบ2xx
  4. event เดิม/payload เดิมตอบ2xxซ้ำได้ event เดิมแต่ payload ต่างตอบ409และตรวจเหตุการณ์ Database error ต้องไม่ตอบ200
  5. แยก worker ดาวน์โหลดออกจาก HTTP request และตั้ง lease/retry ตามระบบต้นทาง

ตัวอย่างใน SDK มี callback_receiver_example.py และ SQL อ้างอิงสำหรับฐานข้อมูลต้นทาง ใช้ connection เฉพาะที่ autocommit=False ไม่มีการติดตั้งตารางในฐานข้อมูล WCS ให้อัตโนมัติ

↓ SQL อ้างอิง callback inbox
07 / APPROVED RELEASE

รับ CAD / ราคา / หลักฐานตามฉบับที่อนุมัติ

ใช้ project_id, version_id และ artifact_fingerprint จาก event ที่ตรวจแล้ว SDK ดาวน์โหลดแยกไฟล์ CAD ราคากลาง และหลักฐานที่ผูกฉบับ ตรวจ SHA ทุกไฟล์ก่อนสร้าง RELEASE_COMPLETE.json

python sdk/wcs_exchange_client.py download PROJECT_UUID VERSION_UUID --directory received --expected-fingerprint HASH_FROM_CALLBACK

ดาวน์โหลดซ้ำใช้ไฟล์ hash เดิมได้ ไม่เขียนทับไฟล์ต่าง hash จำกัดช่องทางนี้ 64MBต่อไฟล์ การรับ callback/ดาวน์โหลดสำเร็จไม่ใช่การลงนามรับรองเพิ่มหรืออนุมัติในระบบราชการอื่น การส่งอีเมลสำเร็จเป็นสถานะขนส่ง ไม่ใช่ผลตรวจแบบ

08 / ENDPOINTS

รายการ API สำหรับระบบต้นทาง

MethodPathการใช้งาน
GET/api/exchange/v1/templatesอ่านทะเบียนและสถานะสร้างได้
GET/api/exchange/v1/requirements/{template}อ่านข้อกำหนดและ SHA
POST/api/exchange/v1/submissionsรับข้อมูลด้วย Idempotency-Key
POST/api/exchange/v1/submissions/{id}/evidenceรับไฟล์หลักฐานจริง
GET/api/exchange/v1/submissions/{id}สถานะคำขอเดิม
POST/api/exchange/v1/submissions/{id}/generateขอสร้างร่าง
POST/api/exchange/v1/submissions/{id}/prepare-reviewเตรียมฉบับส่งตรวจ
GET/api/exchange/v1/projects/{project}/versions/{version}/manifestmanifest ฉบับอนุมัติ
GET…/artifacts/{filename}ไฟล์ CAD ตาม manifest
GET…/pricing-artifacts/{filename}Excel/PDF/ไฟล์ชุดราคา
GET…/evidence/{evidence_id}เฉพาะหลักฐานที่ผูกฉบับ

เครื่องหมาย … หมายถึง prefix /api/exchange/v1/projects/{project}/versions/{version} ชื่อ parameter ใน route inventory อาจใช้ชื่อสั้นกว่า แต่ลำดับ path เดียวกัน

↓ Route inventory จากชุดส่งมอบ
09 / ERRORS & RETRIES

เมื่อคำขอไม่สำเร็จ

HTTPสิ่งที่ต้องทำ
401 / 403ตรวจ token, scope, connector enabled และความเป็นเจ้าของ ห้ามสลับใช้ worker token หรือบัญชี admin แทน
409ตรวจ revision, idempotency, requirements hash, สถานะเดิมและ HOLD ก่อนดำเนินการต่อ
413ใช้ช่องทางไฟล์ใหญ่ที่องค์กรจัดสิทธิ์และตรวจ hash อย่าตัดรายงานแล้วอ้างว่าหลักฐานครบ
422 / rejectedแก้ข้อมูลและที่มาตามข้อกำหนด ไม่เติมผลสำรวจหรือราคาให้ดูครบ
503 / การเชื่อมต่อขาดติดตาม request เดิมก่อน ไม่ถือว่า job สิ้นสุดจาก observation timeout และไม่ส่ง POST สร้างซ้ำโดยเดา

SDK ไม่ retry คำสั่งเขียนเอง เมื่อได้500พร้อม incident_id ให้ส่งรหัสนั้นให้ผู้ดูแล โดยไม่ส่ง credential หรือเนื้อหารายงานผ่าน log

10 / SDK DOWNLOAD

ดาวน์โหลดชุดส่งมอบและตรวจความครบ

VERSION 20261103-173453

WCS API / SDK

Python SDK/CLI · คู่มือ · callback/SQL
ตัวอย่างข้อมูล INCOMPLETE · JSON schema · ใบอนุญาตฟอนต์

↓ ดาวน์โหลดชุดส่งมอบ ZIP

SHA-256 ของ ZIP

e32f9c9aa97a7ae855bd58d36f8506cee9f053ecd2785d2f58cf9aab25edae76

ชุดดาวน์โหลดตรวจ SDK7กรณีและ callback กับ PostgreSQL8กรณี โดยใช้ข้อมูล TEST การติดตั้ง endpoint ขององค์กรและการรับส่งจริงต้องทดสอบร่วมกันเมื่อทีมพร้อม

ต้องเตรียมอะไรบ้างก่อนเปิดบริการจริง?

กำหนดผู้รับผิดชอบและ connector/scopes, secret store, HTTPS callback, การเทียบ record/revision กับ submission/project/version, durable inbox/worker/retry, สิทธิ์และสำรองไฟล์ รวมถึงผู้รับและผู้ตรวจที่มีอำนาจจริง ผู้ดูแล WCS ต้องตรวจคิวก่อนเปิด dispatcher