Skip to content

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)

ConfigBackend
apollo.jsvtrc-api (main)
apollo-workforce.jsworkforce subsystem (GraphQL backend อื่น)

apollo.js เลือก endpoint ตาม checkLinkURL() (apollo.js:14-36)

OriginGraphQL endpoint
vtrcbackoffice.redcross.or.thhttps://vtrcapi.redcross.or.th/api/graphql
uat-vtrcbackoffice.redcross.or.thhttps://uat-vtrcapi.redcross.or.th/api-uat/graphql
localhost:3000UAT (default)

REST (axios — backend แยก)

ConfigBackendSubsystem
axios-vtrc.jsvtrc-api (REST)ใช้ตอนเรียก PDF/Excel endpoints
axios-bo.js + axiosAll.jsBO backendbackoffice-only service
axios-workforce.js / axios-workforce-upload.jsWorkforceบริหารบุคคล
axios-recruitment.js / axios-recruitment-upload.jsRecruitmentรับสมัครงาน
axios-pms.jsPMSPerformance Management
axios-payments.js + routes_payments_axios.js + routes_gql_payments.jsPaymentsการชำระเงิน
axios-meeting.jsMeetingจองห้องประชุม
axios-i3.jsI3 platformintegration กับแพลตฟอร์ม i3
axios-common.jssharedAPI ใช้ร่วม
axios-benefit.js / axios-benefit-i3.jsBenefitสวัสดิการเสริม
axios-ai.jsAI(TBD — ยังไม่ชัดเจน)

ไฟล์ legacy

ไฟล์หมายเหตุ
routes.jsregistry ปัจจุบัน
routes_bk-prd.js, routes_bk-uat_100423.js, routes_bk_up_prd_100423.js, routes_bk-mapgroup.js, routes_bak.jslegacy backup — ห้ามแก้ ตามกฎ _bk*

Datasets

ไฟล์หน้าที่
datasets.jsgeneral datasets
datasetsProfile.jsform fields ของ profile
datasetsEmployeeRegistration.jsform fields ของการลงทะเบียนพนักงาน

Auth

ไฟล์หน้าที่
refreshToken.jsrefresh token logic สำหรับ backoffice session

โครงสร้างหน้าใน backoffice (pages/)

แต่ละ subsystem มี folder ย่อยของตัวเอง

Welfare/Ops (หลัก)

Folderหน้าที่
HospitalHrอนุมัติ WDHospital ฝั่ง HR
HospitalPaidจ่ายเงิน / export KBANK
HospitalFailedรายการ FAILED
HospitalNamemaster data โรงพยาบาล
Leaveอนุมัติการลา
LeaveHRประวัติการลา
LeaveStudies, LeaveStudiesAdmin, LeaveStudiesPayments, LeaveStudiesPaymentsAdmin, LeaveStudiesScholar, LeaveStudiesScholarAdminทุนการศึกษา (หลายมุม)
TuitionFeesReport, ApproveWelfareReport, ReportWelfareรายงาน
WelfareSetting, OtherWelfare, Benefitsetting และสวัสดิการอื่น
Fund, DocFoundกองทุนสงเคราะห์
BookBankVTRC, BankBranches, BankExportCode, AccountNameข้อมูลธนาคาร
SicknessNamemaster data โรค
Paymentการจ่ายเงินทั่วไป

HR admin

Folderหน้าที่
ManageUser, ManageHRจัดการผู้ใช้และ HR
MasterApprovers, MasterDatamaster data
Organizationข้อมูลองค์กร
WorkHistoryประวัติการทำงาน
WorkForce(ใหญ่สุด — ดูด้านล่าง)
Delegateมอบฉันทะ
Regulations, RegulationsHR, Rule, StrategyHR, Actกฎระเบียบ
BudgetManagementงบประมาณ
Recruitmentรับสมัครงาน
PMSPerformance Management
Attendanceเวลาทำงาน

Content

Folderหน้าที่
News, Course, Policy, ContactUScontent
AboutUS, Guideline, Orientationหน้าข้อมูลทั่วไป
Careerสายอาชีพ
Notification, NotificationMainระบบแจ้งเตือน

Meetings / misc

Folderหน้าที่
Meetingระบบจองห้องประชุม

Infrastructure

Folderหน้าที่
Dashboardหน้าแรกหลัง login
Login, PathLoginauth pages
SearchMenuglobal search
NotFound404
TheamCsstheme

WorkForce subsystem — ใหญ่ที่สุด

pages/WorkForce/ มี subfolders ~80+ — เป็น "HR core" ที่จัดการทุกอย่างเกี่ยวกับพนักงาน

Sub-modules

Subfolderหน้าที่
OrganizationChartโครงสร้างองค์กร
Position, PositionManage, PositionTechnical, PositionCareerตำแหน่งต่างๆ
PerfessionalLicense, PerfessionalDepartmentใบประกอบวิชาชีพ
Prefix, Title, Relationshipmaster data พื้นฐาน
Restructureปรับโครงสร้าง
SourceBudgetแหล่งงบประมาณ
TrainingLocationสถานที่อบรม
UamUser 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_bkbackup เก่า — ห้ามแก้ ตามกฎ 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หน้าที่
fetchUrlConicleMyPolicyURL ไปหน้า "นโยบายของฉัน"
fetchUrlConicleRequestPolicyURL ไปหน้า "คำขอ"
fetchUrlConicleAllPolicyURL ไปหน้ารวม
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 (สังเกต typo CONINCLE_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

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

ไป บท 1.14 รายงานและ KPI →