S4 — eMediation — ER Diagram (Target DELTA)¶
TARGET DESIGN — เฉพาะตาราง NEW + จุดเชื่อมกับตารางเดิม
แสดงเฉพาะ 23 ตาราง NEW + เส้นเชื่อมไปตาราง REUSE (กล่อง R) ที่เกี่ยวข้อง · โครงเต็ม 95 ตารางเดิมดูที่ live ERD ../../s4_mediation/er_diagram.md · FK ภายในกลุ่ม NEW ประกาศจริงใน schema.sql §C (เส้นทึบ) · FK ที่ชี้ตาราง legacy = logical (verify PK ก่อน enable — เส้นประในใจ) · audit septet ละไว้เพื่อความชัด
Legend: (R) reuse ของเดิม · (M) modify เพิ่มคอลัมน์ · ตารางไม่ติด tag = NEW
Workflow Engine [REQ-MED-007]¶
erDiagram
cms_wf_request_type ||--o{ cms_wf_definition : "wf_request_type_id"
cms_wf_definition ||--o{ cms_wf_step : "wf_definition_id"
cms_wf_definition ||--o{ cms_wf_instance : "wf_definition_id"
cms_wf_request_type ||--o{ cms_wf_instance : "wf_request_type_id"
cms_wf_instance ||--o{ cms_wf_instance_step : "wf_instance_id"
cms_wf_instance ||--o{ cms_wf_task : "wf_instance_id"
cms_wf_instance ||--o{ cms_wf_audit : "wf_instance_id"
cms_geo_province ||--o{ cms_wf_instance : "province_id (R)"
cms_users ||--o{ cms_wf_instance : "submitted_by (R)"
cms_users ||--o{ cms_wf_delegation : "from/acts_for (R)"
cms_wf_instance.subject_table/subject_id = polymorphic ชี้ต้นเรื่องได้ทุกตาราง (cms_people_center/cms_compensation_main/cms_mediation/cms_center_process_cost ...) — ไม่มี FK จึงผูกด้วย app · cms_wf_approval_level = master 7 ระดับ (อ้างด้วย approver_value/level ไม่ผูก FK) · cms_wf_audit append-only
Assessment Committee [REQ-MED-004]¶
erDiagram
cms_people_center ||--o{ cms_assessment_committee : "people_center_id (R)"
cms_assessment_committee ||--o{ cms_assessment_committee_member : "assessment_committee_id"
cms_assessment_committee_role||--o{ cms_assessment_committee_member : "role_key"
cms_wf_instance ||--o| cms_assessment_committee : "wf_instance_id (สายแต่งตั้ง)"
cms_people_center ||--o{ cms_people_center_assessment : "people_center_id (R)"
cms_master_assessment_category ||--o{ cms_people_center_assessment_detail : "(R, +weight M)"
คณะกรรมการ = เฉพาะกิจรายศูนย์ × ปี · ผลคะแนนยังเก็บที่ cms_people_center_assessment(_detail) เดิม (R) — committee เป็นชั้น "ใครให้คะแนน" ที่เพิ่มเข้ามา
Exam / Question Bank + Trainer Eval [REQ-MED-001]¶
erDiagram
cms_training_topic ||--o{ cms_exam : "training_topic_id (R)"
cms_exam ||--o{ cms_exam_attempt : "exam_id"
cms_training_register ||--o{ cms_exam_attempt : "training_register_id (R)"
cms_exam_question }o--o{ cms_exam : "สุ่มตาม category/count (app)"
cms_trainer_eval_category ||--o{ cms_trainer_eval_subject : "trainer_eval_category_id"
cms_training_topic ||--o{ cms_training_management_rate : "(R) เก็บคะแนนวิทยากร"
cms_exam_question ↔ cms_exam = many-to-many เชิงตรรกะ (สุ่มข้อตาม category + question_count ตอนสร้างชุดสอบ — ไม่ทำ junction, ใช้ app) · cms_trainer_eval_subject = 11 วิชาใน 5 หมวด ; คะแนนจริงไปที่ cms_training_management_rate (R)
Document Template · Process Cost · Award · Integration [REQ-MED-011/015/016/008]¶
erDiagram
cms_master_document_type ||--o{ cms_document_template : "master_document_type_id (R)"
cms_people_center ||--o{ cms_center_process_cost : "people_center_id (R)"
cms_mediation ||--o{ cms_center_process_cost : "mediation_id (R)"
cms_center_process_cost ||--o{ cms_center_process_cost_item: "center_process_cost_id"
cms_wf_instance ||--o| cms_center_process_cost : "wf_instance_id"
cms_people_center ||--o{ cms_center_award : "people_center_id (R)"
cms_award_criteria }o--o{ cms_center_award : "fiscal_year (เกณฑ์รายปี)"
cms_integration_setting = ตารางเดี่ยว (ไม่มี FK) — toggle ราย integration · cms_document_template ผูกประเภทเอกสารเดิม + เก็บ variables_json สำหรับ placeholder
Online Mediation / Webex + eKYC + eSign [REQ-MED-005] (migrate จาก V2 MySQL)¶
erDiagram
cms_mediation ||--o{ cms_online_meeting : "mediation_id (R)"
cms_online_meeting ||--o{ cms_meeting_attendance : "online_meeting_id"
cms_online_meeting ||--o{ cms_meeting_signature : "online_meeting_id"
cms_meeting_attendance ||--o{ cms_meeting_signature : "meeting_attendance_id"
cms_online_meeting ||--o{ cms_meeting_report : "online_meeting_id"
cms_webex_auth = token เดี่ยว (ไม่มี FK) · subsystem นี้ค้นพบจาก source V2 (meetings/meetingAttendances/signatures/webex_auths/meetingReports — MySQL Sequelize) → ย้ายเข้า MEDIATE ตอนรวมฐานเดียว · ตรวจ overlap กับ cms_mediation_booking_online (R) เดิมก่อน
สรุป FK ตาราง NEW (เส้นที่ประกาศจริงใน schema.sql §C)¶
| ตาราง NEW | FK → ปลายทาง |
|---|---|
cms_wf_definition |
→ cms_wf_request_type |
cms_wf_step |
→ cms_wf_definition |
cms_wf_instance |
→ cms_wf_definition, cms_wf_request_type |
cms_wf_instance_step |
→ cms_wf_instance |
cms_wf_task |
→ cms_wf_instance |
cms_wf_audit |
→ cms_wf_instance |
cms_assessment_committee |
→ cms_wf_instance · (→ cms_people_center legacy: verify) |
cms_assessment_committee_member |
→ cms_assessment_committee |
cms_exam_attempt |
→ cms_exam · (→ cms_training_register legacy: verify) |
cms_trainer_eval_subject |
→ cms_trainer_eval_category |
cms_center_process_cost |
→ cms_wf_instance · (→ cms_people_center/cms_mediation legacy: verify) |
cms_center_process_cost_item |
→ cms_center_process_cost |
cms_center_award |
(→ cms_people_center legacy: verify) |
cms_meeting_attendance |
→ cms_online_meeting |
cms_meeting_signature |
→ cms_online_meeting, cms_meeting_attendance |
cms_meeting_report |
→ cms_online_meeting |
ของเดิม MEDIATE มี 0 FK — ตาราง NEW = จุดเริ่มใส่ referential integrity
FK ภายในกลุ่ม NEW เปิดได้ทันที (ปลายทางเป็นตาราง NEW มี PK ครบ) · FK ที่ชี้ legacy ต้องตรวจว่า
ตารางปลายทางมี PRIMARY KEY constraint จริงก่อน (cms_people_center/cms_training_register/cms_mediation
/cms_geo_province/cms_users) — ถ้าไม่มี ให้เพิ่ม PK ปลายทาง หรือคง FK เป็น logical (ตรวจที่ app)