1.13 · Subsystems ฝั่ง backoffice
บทนี้อธิบาย subsystems ที่ "ติดมากับ" backoffice — คือ PMS, Recruitment, WorkForce, Meeting, Benefit, Payments
ทุก subsystem เป็น ระบบแยก ไม่ได้อยู่ใน vtrc-api — backoffice ทำหน้าที่เป็น "federated portal" ที่รวมหลายระบบไว้ใน bundle เดียว
ทำไมถึงเป็นแบบนี้
backoffice ไม่ใช่แค่ HR หลัก — แต่เป็น portal ที่รวมทุกระบบ HR-adjacent ของสภากาชาดไว้ด้วยกัน
แต่ละ subsystem
- มี backend แยก (บางตัวอยู่ใน
cu-central-api, บางตัว backend อื่น) - มี authentication flow แยก (อาจใช้ SSO กับ vtrc-api หรือ token ของตัวเอง)
- มี schema/database ของตัวเอง
วิธีที่ backoffice เชื่อม — ใช้ axios instance แยกคนละตัวใน vtrc-rc-backoffice/src/config/
รายการ axios configs (15 ไฟล์ axios*.js)
vtrc-rc-backoffice/src/config/ — cluster การ integrate
GraphQL (ไป vtrc-api)
| Config | Backend |
|---|---|
apollo.js | vtrc-api (main) |
apollo-workforce.js | workforce subsystem (GraphQL backend อื่น) |
apollo.js เลือก endpoint ตาม checkLinkURL() (apollo.js:14-36)
| Origin | GraphQL endpoint |
|---|---|
vtrcbackoffice.redcross.or.th | https://vtrcapi.redcross.or.th/api/graphql |
uat-vtrcbackoffice.redcross.or.th | https://uat-vtrcapi.redcross.or.th/api-uat/graphql |
localhost:3000 | UAT (default) |
REST (axios — backend แยก)
| Config | Backend | Subsystem |
|---|---|---|
axios-vtrc.js | vtrc-api (REST) | ใช้ตอนเรียก PDF/Excel endpoints |
axios-bo.js + axiosAll.js | BO backend | backoffice-only service |
axios-workforce.js / axios-workforce-upload.js | Workforce | บริหารบุคคล |
axios-recruitment.js / axios-recruitment-upload.js | Recruitment | รับสมัครงาน |
axios-pms.js | PMS | Performance Management |
axios-payments.js + routes_payments_axios.js + routes_gql_payments.js | Payments | การชำระเงิน |
axios-meeting.js | Meeting | จองห้องประชุม |
axios-i3.js | I3 platform | integration กับแพลตฟอร์ม i3 |
axios-common.js | shared | API ใช้ร่วม |
axios-benefit.js / axios-benefit-i3.js | Benefit | สวัสดิการเสริม |
axios-ai.js | AI | (TBD — ยังไม่ชัดเจน) |
ไฟล์ legacy
| ไฟล์ | หมายเหตุ |
|---|---|
routes.js | registry ปัจจุบัน |
routes_bk-prd.js, routes_bk-uat_100423.js, routes_bk_up_prd_100423.js, routes_bk-mapgroup.js, routes_bak.js | legacy backup — ห้ามแก้ ตามกฎ _bk* |
Datasets
| ไฟล์ | หน้าที่ |
|---|---|
datasets.js | general datasets |
datasetsProfile.js | form fields ของ profile |
datasetsEmployeeRegistration.js | form fields ของการลงทะเบียนพนักงาน |
Auth
| ไฟล์ | หน้าที่ |
|---|---|
refreshToken.js | refresh token logic สำหรับ backoffice session |
โครงสร้างหน้าใน backoffice (pages/)
แต่ละ subsystem มี folder ย่อยของตัวเอง
Welfare/Ops (หลัก)
| Folder | หน้าที่ |
|---|---|
HospitalHr | อนุมัติ WDHospital ฝั่ง HR |
HospitalPaid | จ่ายเงิน / export KBANK |
HospitalFailed | รายการ FAILED |
HospitalName | master data โรงพยาบาล |
Leave | อนุมัติการลา |
LeaveHR | ประวัติการลา |
LeaveStudies, LeaveStudiesAdmin, LeaveStudiesPayments, LeaveStudiesPaymentsAdmin, LeaveStudiesScholar, LeaveStudiesScholarAdmin | ทุนการศึกษา (หลายมุม) |
TuitionFeesReport, ApproveWelfareReport, ReportWelfare | รายงาน |
WelfareSetting, OtherWelfare, Benefit | setting และสวัสดิการอื่น |
Fund, DocFound | กองทุนสงเคราะห์ |
BookBankVTRC, BankBranches, BankExportCode, AccountName | ข้อมูลธนาคาร |
SicknessName | master data โรค |
Payment | การจ่ายเงินทั่วไป |
HR admin
| Folder | หน้าที่ |
|---|---|
ManageUser, ManageHR | จัดการผู้ใช้และ HR |
MasterApprovers, MasterData | master data |
Organization | ข้อมูลองค์กร |
WorkHistory | ประวัติการทำงาน |
WorkForce | (ใหญ่สุด — ดูด้านล่าง) |
Delegate | มอบฉันทะ |
Regulations, RegulationsHR, Rule, StrategyHR, Act | กฎระเบียบ |
BudgetManagement | งบประมาณ |
Recruitment | รับสมัครงาน |
PMS | Performance Management |
Attendance | เวลาทำงาน |
Content
| Folder | หน้าที่ |
|---|---|
News, Course, Policy, ContactUS | content |
AboutUS, Guideline, Orientation | หน้าข้อมูลทั่วไป |
Career | สายอาชีพ |
Notification, NotificationMain | ระบบแจ้งเตือน |
Meetings / misc
| Folder | หน้าที่ |
|---|---|
Meeting | ระบบจองห้องประชุม |
Infrastructure
| Folder | หน้าที่ |
|---|---|
Dashboard | หน้าแรกหลัง login |
Login, PathLogin | auth pages |
SearchMenu | global search |
NotFound | 404 |
TheamCss | theme |
WorkForce subsystem — ใหญ่ที่สุด
pages/WorkForce/ มี subfolders ~80+ — เป็น "HR core" ที่จัดการทุกอย่างเกี่ยวกับพนักงาน
Sub-modules
| Subfolder | หน้าที่ |
|---|---|
OrganizationChart | โครงสร้างองค์กร |
Position, PositionManage, PositionTechnical, PositionCareer | ตำแหน่งต่างๆ |
PerfessionalLicense, PerfessionalDepartment | ใบประกอบวิชาชีพ |
Prefix, Title, Relationship | master data พื้นฐาน |
Restructure | ปรับโครงสร้าง |
SourceBudget | แหล่งงบประมาณ |
TrainingLocation | สถานที่อบรม |
Uam | User Access Management |
Report/ | รายงานย่อย — Workforce, StudyLeave, PersonnelDetail, Personnel, Leave, Learning |
Workforce report sub-modules
| Report | มุมมอง |
|---|---|
Workforce | ภาพรวมพนักงาน |
StudyLeave | ลาศึกษา |
PersonnelDetail | รายบุคคล (ลึก) |
Personnel | รายบุคคล (สรุป) |
Leave | การลา |
Learning | การเรียน/อบรม |
Legacy backup folders — อย่าแก้
| Folder | สถานะ |
|---|---|
Leave_bk, LeaveHR_bk, LeaveStudies_bk | backup เก่า — ห้ามแก้ ตามกฎ workspace |
ถ้าเจอไฟล์/folder ที่มี suffix _bk — ถือว่าเป็น dead code และไม่ใช้ใน flow ปัจจุบัน
Conicle — Integration แบบเฉพาะ
vtrc-api/api/src/typeDefs/conicle.js:1-32
Conicle เป็นระบบ training/learning ภายนอก — VTRC ทำหน้าที่เป็น SSO bridge
| Query | หน้าที่ |
|---|---|
fetchUrlConicleMyPolicy | URL ไปหน้า "นโยบายของฉัน" |
fetchUrlConicleRequestPolicy | URL ไปหน้า "คำขอ" |
fetchUrlConicleAllPolicy | URL ไปหน้ารวม |
fetchContentQrCode(code) | preview class info จาก QR scan |
fetchUrlConicleRedirectPath(redirectPath) | generic redirect builder |
checkInCheckOutFormQrCode(code) | check-in/out ผ่าน QR |
VTRC session pool
lib/controllers/conicle/conicle.js — VTRC ดูแล session pool ของ Conicle เอง
- เก็บในตาราง
Conicle - authenticate ผ่าน
${END_POINT_CONICLE}/api/integrate/account/login/ - env:
CONINCLE_USERNAME/CONINCLE_PASSWORD(สังเกต typoCONINCLE_—config.js:34-35) - whitelist page:
CONICLE_PAGE = ['MyLibrary', 'LearningRequest', 'Home'](config.js:155)
Meeting subsystem
APP_TYPE: 'MEETING' (config.js:79-84) — backoffice มี folder pages/Meeting/ + axios config axios-meeting.js
meetingMenu URL — config.js:319-324
flow การจองห้องประชุมอยู่นอก VTRC core — ใช้ backend ของ Meeting subsystem เอง
TWOWAY — sync 2 ทิศ
APP_TYPE: 'TWOWAY' (config.js:73-78)
ใช้สำหรับ sync ข้อมูล 2 ทิศกับ HRMI — backend อยู่ใน cu-central-api/main-api/src/lib/twoWay/
loginBypass(asid, ...) ใน authentication.js:43-50 — login แบบ bypass สำหรับ subsystem นี้โดยเฉพาะ (ห้ามเรียกจาก WEB/MOBILE)
ข้อควรระวังเวลา debug subsystems
- ถ้า HR บอกว่า "PMS ใช้ไม่ได้" → ตรวจ
axios-pms.jsก่อน ไม่ใช่vtrc-api - แต่ละ subsystem อาจมี backend ที่แยก deploy — ถ้า backend นั้นล่ม vtrc-api ยังใช้ได้ แต่ subsystem ใช้ไม่ได้
- ไม่มี centralized logging — ต้องดู log ของแต่ละ backend แยก
- token refresh — บาง subsystem ใช้ token ของตัวเอง ไม่ใช่ JWT ของ vtrc-api