ข้ามไปที่เนื้อหา

S4 — สิ่งที่ต่างจากระบบเดิม (Changes vs Current)

เทียบอะไรกับอะไร

ปัจจุบัน = V2 dual-DB: (1) MSSQL MEDIATE @ PSDBPRDDB (.149) — 95 ตาราง cms_* (live docs) · (2) MySQL mediation @ .8721 ตาราง (online mediation/Webex/eSign, online_mysql.md) → เป้าหมาย V3 = single DB MEDIATE เดียว: ขยายต่อ (+28 ตาราง / ALTER 7 / ย้าย MySQL เข้าให้หมด) · S4 เป็น extension + merge (เหมือน S9 ไม่ใช่ redesign แบบ S8) → ตารางเดิมส่วนใหญ่ ใช้ต่อไม่แก้ · ดู: schema.sql · Data Dictionary · ERD · Implementation · index

ภาพรวม

  • เพิ่ม 29 ตารางใหม่, แก้ 7 ตาราง (ALTER), ตารางเดิม 95 ตาราง reuse ไม่แก้
  • รวม V1 (PHP/.41) + V2 (Node/.87) → V3 ตาม mockup emediation/fe + SRS v4.0.0 (ดู s4_combine_summary)
  • ยุบ dual-DB → single DB: ย้าย MySQL 21 ตาราง เข้า MEDIATE ให้หมด (ดู § รวม MySQL)
  • จุดเริ่มของ FK + CHECK (ของเดิม MEDIATE = 0 FK / 0 SP) — เพิ่มในตาราง NEW

🆕 เพิ่มใหม่ (29 ตาราง — ไม่มีใน MSSQL เดิม)

กลุ่ม ตาราง ทำไม REQ
Workflow Engine (9) cms_wf_approval_level, cms_wf_request_type, cms_wf_definition, cms_wf_step, cms_wf_instance, cms_wf_instance_step, cms_wf_task, cms_wf_delegation, cms_wf_audit ของเดิมไม่มี workflow เลย (อนุมัติ hardcode) → engine สาย 7 ระดับ + skip มีเหตุผล + มอบอำนาจ + audit 007
Assessment Committee (3) cms_assessment_committee, cms_assessment_committee_member, cms_assessment_committee_role คณะกรรมการประเมินศูนย์เฉพาะกิจ (ราย ศูนย์×ปี) 004
Exam / Question Bank (3) cms_exam, cms_exam_question, cms_exam_attempt คลังข้อสอบ + สุ่ม + auto-grade (ปลายทาง migrate exams/questions ของ V2 ที่เป็น stub) 001
Trainer Eval master (2) cms_trainer_eval_category, cms_trainer_eval_subject 5 หมวด 11 วิชา (แก้ไขได้) 001
Document Template (1) cms_document_template Template เอกสาร dynamic + ตัวแปร { } 011
Center Process Cost (2) cms_center_process_cost, cms_center_process_cost_item เบิกค่าจัดกระบวนการศูนย์ + รายการ + ใบเสร็จ 015
Award / Model Org (2) cms_award_criteria, cms_center_award เกณฑ์รายปีงบ (รวม 100%) + รางวัล QR cert 016
Integration (1) cms_integration_setting เปิด/ปิดราย integration (ThaID/eSign/K-COP/ศาล) 008
Online Mediation/Webex (5) cms_online_meeting, cms_meeting_attendance (+eKYC), cms_meeting_signature (eSign), cms_meeting_report, cms_webex_auth ยกจาก MySQL V2 (ใช้งานจริง — eSign เขียนทุกวัน) เข้า single DB 005
System Audit (1) cms_system_audit จอ system_audit (module/target/result) — cms_user_logs เดิมบางเกินไป + NFR audit 007

✏️ เปลี่ยน / ปรับ (ALTER — 7 ตารางเดิม)

ตารางเดิม (reuse) คอลัมน์ที่เพิ่ม ความต่าง REQ
cms_training_register stage, pre_member_no, selection_result สมัครอบรม 2 รอบ + บัญชีชั่วคราว + ผลคัดเลือก 013
cms_user_role kind, base_role_id, note role เฉพาะกิจ (ระบบ/เฉพาะกิจ) + clone permission 007
cms_people_center consecutive_fails, is_model_org, model_org_year นับประเมินไม่ผ่าน (≥2→ยุติ) + องค์กรต้นแบบ 010/016
cms_master_assessment_category weight, indicators ถ่วงน้ำหนัก 4 ด้าน (20/20/25/35) 004
cms_news publish_state, scheduled_at, attachment_ext, category draft→publish authoring 008
cms_people_center_announcement publish_state, scheduled_at, announcement_type draft→publish 008
cms_mediation all_parties_replied_date วันที่ทุกฝ่ายตอบกลับครบ (บังคับ) 005
cms_mediation_books signed_by_all, sign_method, esign_at, manual_sign_json ข้อตกลง eSign (thaid/manual) 005
cms_users (เลิกใช้ password/LDAP) ผู้ใช้ทุกคน Login ผ่าน SSO (Keycloak+ThaiD) → cms_users = thin mirror, อ่าน role จาก JWT, ไม่เก็บ password/lockout 007/Auth

🔀 รวม MySQL → single DB (21 ตาราง)

นโยบาย single DB ให้หมด — MySQL mediation@.87 ทุกตารางมีปลายทางใน MEDIATE:

  • migrate data จริง (🟢): meetingscms_online_meeting · meetingAttendancescms_meeting_attendance · signatures+signscms_meeting_signature · loginLogscms_user_logs · images→ไฟล์+*_ext · usersreconcile cms_users/cms_member (ระวัง idcard ซ้ำ vs 3,185 รายเดิม) — identity ย้ายไป SSO (เลิก password/dn LDAP)
  • migrate น้อย/lookup (🟡): meeting_memos/memo_userscms_meeting_report · webex_authscms_webex_auth · meetingCategories/mediationSettingscms_setting
  • stub/ว่าง — สร้าง schema ใหม่ตาม SRS ไม่ต้องยกข้อมูล (⚪): exams/questionscms_exam* · courses/trainings/registers/trainingAttendancescms_training_* (R) · meetingReports/meetingReportContents/internalMeetingscms_meeting_report/cms_online_meeting

ตารางเต็ม + วิธี: implementation §5.1 · เสร็จแล้วปิด MySQL → backend ชี้ MEDIATE อย่างเดียว

🔁 ใช้ต่อ (reuse — ไม่แก้, 95 ตาราง MSSQL เดิม)

โดเมนหลักทั้งหมดใช้ต่อ: cms_mediation(+booking/docs/books/witness/mediator/pdf/compensation), cms_mediator_*(applicant/registra/appointment/cert/ending/request_edit/portfolio), cms_member, cms_people_center*(participant/assessment/result/report/highlight/meeting/...), cms_training_*, cms_compensation_*, cms_profile_ktbcorp*, cms_master_*, cms_institute_*, cms_complaint, cms_notify, cms_setting, cms_users/cms_user_permission/cms_menu(_group)/cms_user_logs, cms_geo_* — RBAC matrix (cms_user_permission × cms_menu) มีอยู่แล้ว (REQ-007 = แค่ ALTER cms_user_role)

❌ เอาออก / รอตัดสินใจ

  • cms_mediation_copy1, cms_mediator_applicant_copy1 — สำเนา/ขยะจาก migration → แนะนำ drop หลังยืนยันไม่มี dependency (REQ-014 cleanup)
  • cms_master_expertise / expertises — SRS v4 ระบุ "ตัด" ความเชี่ยวชาญ แต่ mockup ยังมี → คงตารางไว้ (ไม่ลบ) กันข้อมูลเดิมหาย, เลิก map ใน flow ใหม่ — รอลูกค้ายืนยัน (OPEN-EXPERTISE)
  • MySQL mediation (ทั้งฐาน) — ย้ายเข้า MEDIATE แล้ว decommission (เป้าหมาย single DB)
  • LDAP (legacy) + local passwordldapController→AD .15 (last login มิ.ย. 2025, users.dn แค่ 17/121 — แทบตาย) + local login (comment ออกแล้ว) → ตัดทิ้ง · V2 มี ssoController (SSO) active อยู่แล้ว → V3 = SSO ล้วน (Keycloak federate AD + ThaiD) (AUTH-SSO)

หมายเหตุการ rollout

  • เป็น create ตารางใหม่ + ALTER (DEFAULT ปลอดภัย, idempotent ด้วย IF COL_LENGTH) — ไม่กระทบ 95 ตารางเดิม
  • เพิ่ม PK ปลายทางก่อนเปิด FK ที่ชี้ legacy (cms_people_center/cms_training_register/cms_mediation/cms_users/cms_geo_province) — ของเดิมอาจไม่มี PK constraint (OPEN-FK-LEGACY)
  • Seed: cms_wf_approval_level (7 ระดับ), cms_wf_request_type (7), cms_wf_definition+cms_wf_step, cms_assessment_committee_role (4), cms_trainer_eval_category/subject (5/11)
  • งาน migration V1+V2 + data reconcile = Scope Change (นอก TOR 7.14) → แนะนำ Phased (ดู s4_combine_summary)
  • ตรวจ collation string ให้ตรง PSDBPRDDB ; ของเดิม varchar+Thai collation, ตาราง NEW ใช้ nvarchar