Skip to content

1.2 · องค์กรและโครงสร้างฝ่าย HR

บทนี้อธิบายว่า VTRC เห็นองค์กรสภากาชาดเป็นอย่างไร และรหัสหน่วยงาน (orgCode) ที่จะเจอทั่ว codebase มีความหมายอะไร

เนื้อหาส่วนใหญ่ไม่ได้เก็บใน VTRC — HRMI คือ source of truth ทางธุรกิจ


องค์กรในสายตา VTRC

VTRC ไม่ได้เก็บ org chart ของสภากาชาด แต่ดึง live จาก HRMI ทุกครั้งที่ต้องใช้

สิ่งที่ VTRC เก็บเองใน MariaDB มี 2 อย่าง

Entityหน้าที่ใครเขียน
Organizationcontent เล็กๆ — banner, link, division summary สำหรับแสดงในหน้าเว็บSUPER_ADMIN/ADMIN/STAFF
OrganizationGroupgroup ของ 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 ในจุดต่อไปนี้

ContextFile:lineหน้าที่
ตัดสินใจ validation การลาlib/controllers/hrmi/hrmi.js:13020734 = HR HQ → bypass max/min/advance check
กำหนดประเภทพนักงานlib/controllers/withdraw/hospital.js:138888 = ผู้รับบำนาญ → empType = "บำนาญ"
หาผู้อนุมัติ WDHospitallib/controllers/withdraw/hospital.js:1441-1462query MasterApprover ตาม orgCode
Salary certificate gatinglib/controllers/slip/slip.js:159-310check 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 restructureconfig.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)

profileKeysourceDBหมายถึง
dbHRMI_RC_B_repHRMI สภากาชาด สาขา Bพนักงานกาชาดกลุ่ม B
dbHRMI_CU_SC_repHRMI จุฬา 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 ชั้น

  1. สำนักงานกลาง (สนง.) — กรมการคลัง, กรมการแพทย์, สนง. บริหารทรัพยากรบุคคล (0734), ฯลฯ
  2. สาขา — สภากาชาดจังหวัด 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 orgbackoffice Organization menu

ขั้นตอนถัดไป

ไป บท 1.3 วงจรชีวิตพนักงาน →