Convention ร่วมทุกตาราง (ละไว้ในตารางย่อยเพื่อความกระชับ):
status varchar(30) · highlight bit · orderid int · audit septet created_at datetime2 · created_by int · created_ip varchar(50) · updated_at datetime2 · updated_by int · updated_ip varchar(50)
Append-only logs (cms_wf_audit) ไม่มี updated_* · PII (🔒): idcard (เลขบัตร 13 หลัก), ชื่อ-นามสกุล, bank, signature, ไฟล์แนบ → เข้ารหัส at-rest AES-256 [NFR]
🔑 = PK · FK ระบุปลายทาง · ตาราง NEW ทุกตัวเป็น MEDIATE.cms_*
A1 — Workflow Engine [REQ-MED-007]
cms_wf_approval_level — สาย 7 ระดับอนุมัติ
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_approval_level_id 🔑 |
int IDENTITY |
PK |
| lvl |
tinyint UNIQUE, CHECK 1–7 |
ระดับ (1=ต่ำสุด..7=อธิบดี) |
| role_code |
varchar(30) |
map role (บางระดับ null เช่น หน้าห้อง) |
| label |
nvarchar(100) |
ป้ายไทย |
cms_wf_request_type — ประเภทคำขอเข้า workflow (7 ชนิด)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_request_type_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(40) UNIQUE |
'center-registration','compensation-claim',... |
| label |
nvarchar(200) |
ชื่อไทย |
| req_ref |
varchar(20) |
'REQ-MED-003' |
| subject_entity |
varchar(40) |
ตารางต้นเรื่อง |
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_definition_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(40) UNIQUE |
'wf-center-reg' |
| wf_request_type_id |
int FK→cms_wf_request_type |
ประเภทคำขอ |
| title |
nvarchar(200) |
ชื่อ workflow |
| req_ref |
varchar(20) |
REQ ref |
| is_active / version |
bit / int |
เปิดใช้ / เวอร์ชัน |
cms_wf_step — ขั้นตอนใน workflow
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_step_id 🔑 |
int IDENTITY |
PK |
| wf_definition_id |
int FK→cms_wf_definition |
นิยามแม่ |
| seq |
int (UNIQUE กับ def) |
ลำดับขั้น |
| name |
nvarchar(200) |
ชื่อขั้น |
| approver_kind / approver_value |
varchar(20) / varchar(30) |
'role' / role_code |
| is_skippable |
bit |
ข้ามได้ (ต้องมีเหตุผล) |
| is_terminal |
bit |
จบที่ขั้นนี้ ไม่ escalate |
| sla_hours |
int |
SLA ชั่วโมง (0=ทันที) |
cms_wf_instance — คำขอจริง 1 ใบ = 1 instance
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_instance_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(30) UNIQUE |
'WF-2569-0001' |
| wf_definition_id |
int FK→cms_wf_definition |
นิยามที่ใช้ |
| wf_request_type_id |
int FK→cms_wf_request_type |
ประเภท (denorm filter) |
| subject_table / subject_id |
varchar(40) / int |
ต้นเรื่อง (polymorphic ไม่มี FK) |
| subject_title 🔒 |
nvarchar(300) |
ข้อความอ่านง่าย |
| province_id |
int FK→cms_geo_province |
scope จังหวัด |
| submitted_by / submitted_name |
int FK→cms_users / nvarchar(200) |
ผู้ยื่น |
| current_step_seq |
int |
ขั้นที่ active (null=จบ) |
| status |
varchar(20) CHECK |
in_progress/approved/returned/rejected/cancelled |
| started_at / closed_at |
datetime2 |
เริ่ม/ปิด |
cms_wf_instance_step — สถานะ+ผลรายขั้น
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_instance_step_id 🔑 |
int IDENTITY |
PK |
| wf_instance_id |
int FK→cms_wf_instance |
instance แม่ |
| seq |
int (UNIQUE กับ instance) |
ตรงกับ cms_wf_step.seq |
| status |
varchar(20) CHECK |
pending/current/done/skipped/returned |
| actor_user_id / actor_name |
int FK→cms_users / nvarchar(200) |
ผู้กระทำ |
| acted_at |
datetime2 |
เวลา |
| comment |
nvarchar(max) |
ความเห็น |
| skip_reason |
nvarchar(500) |
บังคับเมื่อ skipped |
cms_wf_task — กล่องงานรออนุมัติ (inbox)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_task_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(20) UNIQUE |
'T-001' |
| wf_instance_id |
int FK→cms_wf_instance |
instance |
| step_seq |
int |
ขั้นที่อ้างถึง |
| assignee_kind / assignee_value |
varchar(20) / varchar(30) |
'role' |
| subject_title / province_id |
nvarchar(300) / int |
denorm |
| priority |
varchar(20) CHECK |
normal/high/urgent |
| due_at |
datetime2 |
กำหนดเสร็จ |
| status |
varchar(20) CHECK |
pending/done/reassigned/cancelled |
cms_wf_delegation — มอบอำนาจ (รักษาการแทน)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_delegation_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(20) UNIQUE |
'DG-1' |
| from_user_id / from_name / from_role / from_level |
int FK / nvarchar / varchar / tinyint |
ผู้มอบ |
| acts_for_user_id / acts_for_name / acts_for_role / acts_for_level |
int FK / nvarchar / varchar / tinyint |
ผู้ถูกแทน |
| scope_request_type |
varchar(40) |
จำกัดเฉพาะประเภท (null=ทุก) |
| date_start / date_end |
datetime2 |
ช่วงเวลา |
| reason |
nvarchar(500) |
เหตุผล |
| status |
varchar(20) CHECK |
active/expired/revoked |
| approved_by / approved_at |
int FK→cms_users / datetime2 |
admin อนุมัติ |
cms_wf_audit — audit trail workflow (append-only)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| wf_audit_id 🔑 |
bigint IDENTITY |
PK |
| code |
varchar(20) |
'A-001' |
| wf_instance_id |
int FK→cms_wf_instance |
null=system/config |
| ts |
datetime2 |
เวลา |
| actor_user_id / actor_name / actor_role |
int / nvarchar / varchar |
ผู้กระทำ |
| action |
varchar(20) CHECK |
create/approve/return/skip/delegate/config/reject/cancel |
| detail |
nvarchar(max) |
รายละเอียด |
| created_ip |
varchar(50) |
IP (ไม่มี updated_)* |
A2 — Assessment Committee [REQ-MED-004]
cms_assessment_committee_role — บทบาทกรรมการ (master)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| assessment_committee_role_id 🔑 |
int IDENTITY |
PK |
| role_key |
varchar(20) UNIQUE |
chair/secretary/member/asst_secy |
| title / short_title |
nvarchar(150) / nvarchar(50) |
ชื่อบทบาท |
| min_count / max_count |
int / int |
จำนวนขั้นต่ำ/สูงสุด |
cms_assessment_committee — คณะกรรมการ 1 ชุด (ศูนย์×ปี)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| assessment_committee_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(30) UNIQUE |
'CMT-{centerId}-{year}' |
| people_center_id |
int FK→cms_people_center |
ศูนย์ |
| assessment_year |
int (UNIQUE กับ center) |
ปี พ.ศ. |
| wf_instance_id |
int FK→cms_wf_instance |
สายแต่งตั้ง |
| order_no |
varchar(50) |
เลขคำสั่ง (null=ยังไม่แต่งตั้ง) |
| appointed_date |
datetime2 |
วันแต่งตั้ง |
| status |
varchar(30) CHECK |
รอแต่งตั้งกรรมการ/แต่งตั้งกรรมการแล้ว/ยกเลิก |
cms_assessment_committee_member — สมาชิกกรรมการ
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| assessment_committee_member_id 🔑 |
int IDENTITY |
PK |
| assessment_committee_id |
int FK→cms_assessment_committee |
คณะแม่ |
| role_key |
varchar(20) FK→cms_assessment_committee_role |
บทบาท |
| prefix_name / firstname / lastname 🔒 |
nvarchar |
ชื่อ |
| idcard 🔒 |
varchar(20) |
เลขบัตร |
| org / position |
nvarchar(200) |
สังกัด/ตำแหน่ง |
| is_external |
bit |
กรรมการภายนอก |
| photo_ext |
varchar(20) |
รูป |
A3 — Exam / Question Bank [REQ-MED-001]
cms_exam_question — คลังข้อสอบ
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| exam_question_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(20) |
'Q01' |
| category |
nvarchar(100) |
กฎหมายไกล่เกลี่ย/จรรยาบรรณ/กระบวนการ/ทักษะสื่อสาร/กรณีศึกษา |
| question |
nvarchar(max) |
โจทย์ |
| choice1–4 |
nvarchar(500) |
ตัวเลือก (3,4 nullable) |
| answer_index |
tinyint CHECK 0–3 |
คำตอบถูก (0-based) |
cms_exam — นิยามชุดข้อสอบ/รอบสอบ
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| exam_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(30) |
'PRE-CRS001' |
| title |
nvarchar(200) |
ชื่อชุดสอบ |
| training_topic_id |
int FK→cms_training_topic |
หลักสูตร |
| exam_type |
varchar(10) CHECK |
pre/post |
| pass_pct |
int |
เกณฑ์ผ่าน % (60/70) |
| question_count |
int |
จำนวนข้อสุ่ม |
| duration_min |
int |
เวลา (นาที) |
| max_attempts |
int |
retake ≤ 3 |
| status |
varchar(30) CHECK |
เปิดสอบ/ปิดสอบ |
cms_exam_attempt — บันทึกการนั่งสอบ
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| exam_attempt_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(20) |
'ATT-001' |
| exam_id |
int FK→cms_exam |
ชุดสอบ |
| training_register_id |
int FK→cms_training_register |
ผู้สอบ |
| sitting_name 🔒 |
nvarchar(200) |
snapshot ชื่อ |
| attempt_no |
int (UNIQUE exam+reg+no) |
ครั้งที่ 1..max |
| score / total |
int |
คะแนน/เต็ม |
| pass |
bit |
derived ≥ pass_pct |
| answers_json |
nvarchar(max) |
คำตอบรายข้อ |
| sat_at |
datetime2 |
เวลาสอบ |
A4 — Trainer Evaluation master [REQ-MED-001]
cms_trainer_eval_category — หมวดประเมินวิทยากร (5 หมวด)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| trainer_eval_category_id 🔑 |
int IDENTITY |
PK |
| code / title |
varchar(10) / nvarchar(200) |
'C1' / ชื่อหมวด |
cms_trainer_eval_subject — หัวข้อย่อย (11 วิชา)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| trainer_eval_subject_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(10) |
'S01' |
| trainer_eval_category_id |
int FK→cms_trainer_eval_category |
หมวดแม่ |
| title |
nvarchar(300) |
ชื่อวิชา |
A5 — Document Template [REQ-MED-011]
cms_document_template — Template เอกสาร Dynamic
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| document_template_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(30) |
รหัส |
| master_document_type_id |
int FK→cms_master_document_type |
ประเภทเอกสาร |
| title |
nvarchar(200) |
ชื่อ template |
| body |
nvarchar(max) |
HTML + placeholder |
| variables_json |
nvarchar(max) |
นิยามตัวแปร (JSON) |
| version / is_active |
int / bit |
เวอร์ชัน/เปิดใช้ |
| status |
varchar(30) |
ฉบับร่าง/เผยแพร่ |
A6 — Center Process Cost [REQ-MED-015]
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| center_process_cost_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(30) UNIQUE |
เลขคำร้อง |
| people_center_id |
int FK→cms_people_center |
ศูนย์ |
| mediation_id |
int FK→cms_mediation |
เคสอ้างอิง |
| fiscal_year |
int |
ปีงบ (ต.ค.–ก.ย.) |
| total_amount / budget_ceiling |
decimal(12,2) |
ยอดรวม/เพดาน |
| wf_instance_id |
int FK→cms_wf_instance |
สาย 7 ระดับ |
| status |
varchar(30) |
คำร้องใหม่/... |
cms_center_process_cost_item — รายการค่าใช้จ่าย
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| center_process_cost_item_id 🔑 |
int IDENTITY |
PK |
| center_process_cost_id |
int FK→cms_center_process_cost |
header |
| item_type |
nvarchar(100) |
สถานที่/อาหารว่าง/วัสดุ/จัดทำเอกสาร |
| detail / amount |
nvarchar(300) / decimal(12,2) |
รายละเอียด/จำนวน |
| receipt_ext |
varchar(20) |
ใบเสร็จ (PDF/JPG ≤10MB) |
A7 — Award / Model Org [REQ-MED-016]
cms_award_criteria — เกณฑ์รางวัล (รายปีงบ น้ำหนักรวม 100%)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| award_criteria_id 🔑 |
int IDENTITY |
PK |
| fiscal_year |
int |
ปีงบ |
| title |
nvarchar(300) |
ชื่อเกณฑ์ |
| weight |
int |
น้ำหนัก % (รวมทั้งปี=100) |
| detail |
nvarchar(max) |
รายละเอียด |
cms_center_award — ผลรางวัล/องค์กรต้นแบบ
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| center_award_id 🔑 |
int IDENTITY |
PK |
| people_center_id |
int FK→cms_people_center |
ศูนย์ (UNIQUE กับ year) |
| fiscal_year |
int |
ปีงบ |
| total_score |
decimal(6,2) |
คะแนนรวม |
| award_level |
nvarchar(100) |
ดีเด่น/ต้นแบบ/ชมเชย |
| cert_no / cert_ext |
varchar(30) / varchar(20) |
เลข/ไฟล์ใบประกาศ (PDF) |
| qr_token |
varchar(100) |
token QR verify |
| issued_date |
datetime2 |
วันออก |
A8 — Integration Settings [REQ-MED-008]
cms_integration_setting — เปิด/ปิดเชื่อมต่อระบบภายนอก
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| integration_setting_id 🔑 |
int IDENTITY |
PK |
| system_name |
nvarchar(200) |
ThaID/K-COP/ETDA/... |
| category |
nvarchar(100) |
ยืนยันตัวตน/เบิกจ่าย/ลงนาม/... |
| protocol / endpoint |
varchar(50) / varchar(300) |
OAuth/REST · URL |
| owner |
nvarchar(200) |
หน่วยงานเจ้าของ |
| enabled |
bit |
เปิด/ปิด |
| last_sync |
datetime2 |
sync ล่าสุด |
| config_json 🔒 |
nvarchar(max) |
client_id ฯลฯ (secret → vault) |
ค้นพบจาก source V2 จริง (mediation-backend2025/models/*, Sequelize/MySQL) — subsystem ไกล่เกลี่ยออนไลน์ Phase-1 ที่ไม่อยู่ใน cms_* MSSQL · ตารางเหล่านี้คือปลายทาง migrate เข้า MEDIATE
cms_online_meeting — ห้องไกล่เกลี่ยออนไลน์ (V2 meetings)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| online_meeting_id 🔑 |
int IDENTITY |
PK |
| code |
varchar(40) |
meeting_id (V2) |
| mediation_id |
int FK→cms_mediation |
เคส (V2 request_id) |
| category / subject |
nvarchar |
หมวด/หัวข้อ |
| link_url |
varchar(500) |
ลิงก์ห้อง |
| start_date/end_date/start_time/end_time |
date/time |
ช่วงเวลา |
| webex_meeting_id/number/host_id/host_email/type |
varchar |
Webex meta |
| webex_meeting_password 🔒 |
varchar(100) |
แนะนำย้าย vault |
| mediation_final_status |
varchar(30) |
ผลไกล่เกลี่ย |
| result |
nvarchar(max) |
สรุปผล |
| meeting_status |
varchar(30) |
นัดหมาย/... |
cms_meeting_attendance — ผู้เข้าร่วม + eKYC (V2 meetingAttendances)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| meeting_attendance_id 🔑 |
int IDENTITY |
PK |
| online_meeting_id |
int FK→cms_online_meeting |
ห้อง |
| mediation_id |
int FK→cms_mediation |
เคส |
| attendee_prefix/firstname/lastname 🔒 |
nvarchar |
ชื่อผู้เข้าร่วม |
| attendee_phone / attendee_type |
varchar(20) / varchar(30) |
เบอร์/ประเภท (คู่กรณี/ผู้ไกล่เกลี่ย/พยาน) |
| attendance_date/time |
date/time |
เวลาเข้าร่วม |
| verify_status / ekyc_id 🔒 |
varchar |
สถานะ/รหัส eKYC (ThaID) |
| attendee_address/sub_district/district/province/zipcode |
nvarchar |
ที่อยู่ |
cms_meeting_signature — ลายเซ็น eSign (V2 signatures+signs)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| meeting_signature_id 🔑 |
int IDENTITY |
PK |
| online_meeting_id |
int FK→cms_online_meeting |
ห้อง |
| mediation_id |
int FK→cms_mediation |
เคส |
| meeting_attendance_id |
int FK→cms_meeting_attendance |
ผู้ลงนาม |
| idcard 🔒 |
varchar(20) |
เลขบัตร |
| attendee_type |
varchar(30) |
ประเภทผู้ลงนาม |
| signature_ext |
varchar(20) |
ไฟล์ลายเซ็น (BLOB เดิม→ไฟล์) |
| sign_status / signed_at |
varchar(30) / datetime2 |
ลงนามแล้ว/รอ |
cms_webex_auth — Webex OAuth token (V2 webex_auths)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| webex_auth_id 🔑 |
int IDENTITY |
PK |
| access_token / refresh_token 🔒 |
nvarchar(max) |
token (แนะนำ vault) |
| expires_at |
datetime2 |
หมดอายุ |
cms_meeting_report — รายงาน/บันทึกข้อตกลงออนไลน์ (V2 meetingReports+meeting_memos)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| meeting_report_id 🔑 |
int IDENTITY |
PK |
| online_meeting_id |
int FK→cms_online_meeting |
ห้อง |
| mediation_id |
int FK→cms_mediation |
เคส |
| report_type |
varchar(30) |
report/memo |
| mediation_center_name / mediation_date |
nvarchar / date |
ศูนย์/วันที่ |
| requester_fullname / respondant_fullname 🔒 |
nvarchar(200) |
คู่กรณี |
| subject / content / result |
nvarchar(max) |
หัวข้อ/เนื้อหา/ผล |
| mediation_final_status / report_status |
varchar(30) |
สถานะ |
A10 — System Audit Trail [REQ-MED-007 / NFR]
cms_system_audit — ตรวจสอบระบบ (append-only — backing จอ system_audit)
| คอลัมน์ |
ชนิด |
คำอธิบาย |
| system_audit_id 🔑 |
bigint IDENTITY |
PK |
| ts |
datetime2 |
เวลา |
| user_id / actor_name / actor_role |
int FK→cms_users / nvarchar / varchar |
ผู้กระทำ |
| action |
varchar(50) |
create/update/delete/login/export/... |
| module |
nvarchar(100) |
โมดูล/เมนู |
| target_table / target_id |
varchar(60) / varchar(40) |
ตาราง+PK เป้าหมาย |
| detail |
nvarchar(max) |
before/after (JSON) ตาม NFR |
| ip |
varchar(50) |
IP |
| result |
varchar(20) CHECK |
success/fail (ไม่มี updated_)* |
B — MODIFY (คอลัมน์เพิ่มในตารางเดิม)
| ตาราง (REUSE) |
คอลัมน์เพิ่ม |
ชนิด |
REQ |
คำอธิบาย |
cms_training_register |
stage |
varchar(20) |
013 |
'สมัครอบรม'(รอบ1)/'ขึ้นทะเบียน'(รอบ2) |
|
pre_member_no |
varchar(20) |
013 |
'PRE-YYYY-NNNN' บัญชีชั่วคราว |
|
selection_result |
varchar(30) |
013 |
ผ่าน/ไม่ผ่าน/รอประกาศผล (derived) |
cms_user_role |
kind |
varchar(20) CHECK |
007 |
'ระบบ'/'เฉพาะกิจ' |
|
base_role_id |
int |
007 |
clone permission |
|
note |
nvarchar(500) |
007 |
เหตุผล role เฉพาะกิจ |
cms_people_center |
consecutive_fails |
int |
010 |
ประเมินไม่ผ่านติดกัน (≥2→ยุติ) |
|
is_model_org / model_org_year |
bit / int |
016 |
องค์กรต้นแบบ |
cms_master_assessment_category |
weight |
int |
004 |
น้ำหนัก % (20/20/25/35) |
|
indicators |
int |
004 |
จำนวนตัวชี้วัด |
cms_news |
publish_state / scheduled_at |
varchar(20) / datetime2 |
008 |
ฉบับร่าง/เผยแพร่ + กำหนดเผยแพร่ |
|
attachment_ext / category |
varchar(50) / nvarchar(100) |
008 |
ไฟล์แนบ/หมวด |
cms_people_center_announcement |
publish_state / scheduled_at / announcement_type |
varchar / datetime2 / nvarchar |
008 |
draft→publish |
cms_mediation |
all_parties_replied_date |
datetime2 |
005 |
วันที่ทุกฝ่ายตอบกลับครบ (บังคับ) |
cms_mediation_books |
signed_by_all / sign_method |
bit / varchar(20) CHECK |
005 |
thaid/manual |
|
esign_at / manual_sign_json |
datetime2 / nvarchar(max) |
005 |
eSign / รายละเอียดลงนามมือ |