1.2 · องค์กรและโครงสร้างฝ่าย HR
บทนี้อธิบายว่า VTRC เห็นองค์กรสภากาชาดเป็นอย่างไร และรหัสหน่วยงาน (orgCode) ที่จะเจอทั่ว codebase มีความหมายอะไร
เนื้อหาส่วนใหญ่ไม่ได้เก็บใน VTRC — HRMI คือ source of truth ทางธุรกิจ
องค์กรในสายตา VTRC
VTRC ไม่ได้เก็บ org chart ของสภากาชาด แต่ดึง live จาก HRMI ทุกครั้งที่ต้องใช้
สิ่งที่ VTRC เก็บเองใน MariaDB มี 2 อย่าง
| Entity | หน้าที่ | ใครเขียน |
|---|---|---|
Organization | content เล็กๆ — banner, link, division summary สำหรับแสดงในหน้าเว็บ | SUPER_ADMIN/ADMIN/STAFF |
OrganizationGroup | group ของ organization (เช่นรวมสาขาภาคอีสาน) | SUPER_ADMIN/ADMIN/STAFF |
MasterApprover | ผู้อนุมัติสวัสดิการตาม orgCode (เฉพาะ type: "MEDICAL") | SUPER_ADMIN/ADMIN |
ส่วน HR org hierarchy จริง (ฝ่าย → แผนก → สาขา → ตำแหน่ง) อยู่ใน HRMI — VTRC แค่ proxy ผ่าน cu-central-api GraphQL (END_POINT_CENTRALIZE) ไม่ใช่ NestJS centralize-api
orgCode — รหัสหน่วยงาน
orgCode เป็น string ที่ identify หน่วยงานแต่ละแห่งของสภากาชาด รูปแบบเป็นตัวเลข 4-6 หลัก
ใน codebase จะเจอ orgCode ในจุดต่อไปนี้
| Context | File:line | หน้าที่ |
|---|---|---|
| ตัดสินใจ validation การลา | lib/controllers/hrmi/hrmi.js:1302 | 0734 = HR HQ → bypass max/min/advance check |
| กำหนดประเภทพนักงาน | lib/controllers/withdraw/hospital.js:1388 | 88 = ผู้รับบำนาญ → empType = "บำนาญ" |
| หาผู้อนุมัติ WDHospital | lib/controllers/withdraw/hospital.js:1441-1462 | query MasterApprover ตาม orgCode |
| Salary certificate gating | lib/controllers/slip/slip.js:159-310 | check prefix + emplGrupCode เพื่อเลือกประเภทหนังสือรับรอง |
รหัสพิเศษที่ต้องจำ
| orgCode/prefix | หมายถึง | เหตุผลที่ต้องรู้ |
|---|---|---|
0734* | สำนักงานบริหารทรัพยากรบุคคล (HR HQ) | bypass validation การลา + เป็น admin ทั่วระบบ |
88 | กลุ่มผู้รับบำนาญ | flow การเบิกสวัสดิการต่างจากพนักงานปกติ |
0734 เป็น prefix ใช้ substring(0,4) === '0734' ตรวจ — แปลว่า HR HQ และทุกหน่วยงานย่อยใต้สำนัก HR จะ match ทั้งหมด
คีย์ UUID พิเศษใน config.js
นอกจาก orgCode ยังมี UUID พิเศษ 3 ตัวที่ใช้ระบุกลุ่มคน/ระบบเฉพาะ
| ชื่อ | ค่า | ใช้ทำอะไร | ที่มา |
|---|---|---|---|
KEY_CU_H | 'CU-RE-STRUCTURE-ID-02' | ระบุกลุ่มพนักงานที่เกี่ยวข้องกับ Chula restructure | config.js:152 |
KEY_PLASMA | '47837e2d-7788-4a1a-8e24-a90abf6742f4' | ระบุกลุ่ม plasma (ธนาคารเลือด) | config.js:153 |
KEY_HR | ['305A814A-...', '5A764C0F-...'] | ระบุ HR staff (array 2 UUID) | config.js:154 |
Profile typeDef expose flag isHr, isKCMH, isPlasma ให้ frontend ใช้ gate UI (profile.js:43-87)
ถ้าเจอ condition isPlasma == true หรือ empCode ตรง KEY_PLASMA ในโค้ด — หมายถึง flow เฉพาะของธนาคารเลือด ซึ่งมี policy ต่างจากพนักงานทั่วไป
Profile Key — เมื่อพนักงานสังกัดหลายที่
พนักงานบางคนมี record ในหลาย HRMI replica (เช่นเป็นพนักงานสภากาชาดและ affiliated กับจุฬาในเวลาเดียวกัน)
VTRC จัดการด้วย profileKey ที่ encode source database — ตัวอย่างที่พบใน slip controller (lib/controllers/slip/slip.js:175, 255)
| profileKey | sourceDB | หมายถึง |
|---|---|---|
dbHRMI_RC_B_rep | HRMI สภากาชาด สาขา B | พนักงานกาชาดกลุ่ม B |
dbHRMI_CU_SC_rep | HRMI จุฬา SC | พนักงานจุฬา กลุ่ม SC |
changeCurrentProfile(profileKey) ใน user.js:77-79 ให้พนักงานสลับ context ระหว่าง profile ทั้งสอง — slip, tax, time attendance จะใช้ source ที่เลือก
กลุ่มพนักงาน (emplGrupCode)
นอกจาก orgCode ยังมี emplGrupCode ที่ระบุ "ประเภทพนักงาน" ในเชิงสวัสดิการ เช่น พนักงานประจำ ลูกจ้างชั่วคราว ผู้รับบำนาญ
ตัวอย่างที่เจอในโค้ด
| emplGrupCode | ความหมาย (interpret) | file:line |
|---|---|---|
04 | ผู้รับบำนาญ (บน dbHRMI_RC_B_rep) | lib/controllers/slip/slip.js:255-294 — เปลี่ยน label "เงินเดือน" → "แสดงเฉพาะเงินบำนาญ" |
emplGrupCode มาจาก HRMI ทั้งหมด — VTRC ไม่ได้ validate หรือจำกัด
orgCode vs orgUnitCode
มี 2 ฟิลด์ที่มักสับสน
orgCode— รหัสหน่วยงาน ปัจจุบัน ของพนักงานorgUnitCode— รหัสหน่วยงานใน org tree (อาจลึกกว่า)
0734 check ใน hrmi.js:1302 ใช้ orgUnitCode.substring(0, 4) ไม่ใช่ orgCode โดยตรง
สาขากาชาด vs สำนักงานกลาง
ในเชิง business สภากาชาดมีโครงสร้าง 2 ชั้น
- สำนักงานกลาง (สนง.) — กรมการคลัง, กรมการแพทย์, สนง. บริหารทรัพยากรบุคคล (
0734), ฯลฯ - สาขา — สภากาชาดจังหวัด 77 จังหวัด + กิ่งอำเภอ
พนักงานในสาขาใช้ flow เดียวกับสำนักงานกลาง แต่ผู้อนุมัติต่างกัน — HRMI กำหนด chain ของแต่ละหน่วยงานเอง
ข้อจำกัดของข้อมูล org ใน VTRC
VTRC ไม่เก็บข้อมูลนี้เอง
- โครงสร้าง hierarchy ของหน่วยงาน (ฝ่าย → แผนก → สาขา)
- รายชื่อหน่วยงานทั้งหมด
- ผู้บังคับบัญชาของพนักงานแต่ละคน
- ประวัติการย้ายตำแหน่ง
ทุกอย่างดึง live จาก HRMI ผ่าน cu-central-api (END_POINT_CENTRALIZE) — ถ้า HRMI ล่ม พนักงานจะ login ไม่ได้เพราะ VTRC ไม่รู้จักใครอีก
เมื่อไรต้องแก้ข้อมูล org
| เหตุการณ์ | แก้ที่ไหน |
|---|---|
| เพิ่มหน่วยงานใหม่ | HRMI (ทีม HR ทำเอง) |
| ย้ายพนักงานไปหน่วยงานอื่น | HRMI |
| เพิ่มผู้อนุมัติสวัสดิการ | backoffice MasterApprovers menu (เก็บใน VTRC) |
| เปลี่ยน chain การอนุมัติการลา | HRMI (ทีม HR ทำเอง) |
| เพิ่ม content banner org | backoffice Organization menu |