6.1 KiB
6.1 KiB
เอกสารวิเคราะห์ระบบและ ER Diagram (System Analysis & ER Diagram)
1. ภาพรวมของระบบ (System Overview)
ระบบขออนุมัติเดินทางประชุม-อบรม เป็นระบบที่ช่วยให้บุคลากรสามารถสร้างคำขออนุมัติเดินทางไปราชการ ประชุม หรืออบรม ผ่านทางออนไลน์ โดยมีการอนุมัติผ่านสายงาน (Workflow) บันทึกประวัติการทำรายการ (Audit Log) สามารถสร้างแบบฟอร์ม PDF อัตโนมัติตามเทมเพลต และดึงข้อมูล/เชื่อมโยงกับ Google Sheets
2. โครงสร้างฐานข้อมูล (Database Design)
ระบบแบ่งออกเป็น 2 ฐานข้อมูล (หรืออาจเป็น 2 Schema ในเซิร์ฟเวอร์เดียวกัน)
- HR Database (
hosoffice_2566): ใช้เป็นข้อมูลอ้างอิงและตรวจสอบสิทธิ์เข้าใช้งาน - System Database (
system): เก็บข้อมูลการขออนุมัติและการตั้งค่าระบบ
ตารางใน System Database
system_roles: เก็บชื่อบทบาท (เช่น Admin, User, Approver_L1, Approver_L2)system_user_roles: แมปผู้ใช้งาน (จากhr_person.id) กับบทบาทtrip_requests: ข้อมูลคำขอเดินทาง (ชื่อเรื่อง, วันที่, สถานที่, งบประมาณ, สถานะ)trip_approvals: ประวัติและสถานะการอนุมัติตามลำดับขั้น (Workflow)pdf_templates: เก็บไฟล์แบบฟอร์มตั้งต้นที่ใช้วางตัวแปรpdf_template_fields: พิกัด (X, Y) และข้อมูลของแต่ละช่องตัวแปรบน PDFgoogle_sheet_settings: ตั้งค่าการเชื่อมต่อและ Mapping Google Sheetsaudit_logs: เก็บประวัติการใช้งานระบบ (ใคร ทำอะไร เมื่อไหร่)
3. ER Diagram
erDiagram
%% HR Database Reference
HR_PERSON {
int id PK
string username
string password_hash
string firstname
string lastname
string position
int department_id
}
%% System Database
SYSTEM_ROLES {
int id PK
string name "e.g. Admin, User, Manager"
string description
}
SYSTEM_USER_ROLES {
int user_id PK, FK "Refers to HR_PERSON.id"
int role_id PK, FK "Refers to SYSTEM_ROLES.id"
}
TRIP_REQUESTS {
int id PK
int user_id FK "Refers to HR_PERSON.id"
string doc_number "เลขที่หนังสือ"
string title "ชื่อเรื่อง"
text objective "วัตถุประสงค์"
date start_date
date end_date
string location
decimal budget
string status "Draft, Pending, Approved, Rejected"
datetime created_at
datetime updated_at
}
TRIP_APPROVALS {
int id PK
int request_id FK
int approver_id FK "Refers to HR_PERSON.id"
int step "ลำดับการอนุมัติ"
string status "Pending, Approved, Rejected"
text comments
datetime created_at
}
PDF_TEMPLATES {
int id PK
string name
string file_path
int version
datetime created_at
datetime updated_at
}
PDF_TEMPLATE_FIELDS {
int id PK
int template_id FK
string field_name "e.g. {firstname}"
string field_type "Text, Image, QR, Signature"
decimal x_pos
decimal y_pos
int page_num
decimal width
decimal height
int font_size
}
GOOGLE_SHEET_SETTINGS {
int id PK
string spreadsheet_id
string sheet_name
string sync_range
json column_mapping
datetime last_synced_at
string status
}
AUDIT_LOGS {
int id PK
int user_id FK "Refers to HR_PERSON.id"
string action "CREATE, UPDATE, DELETE, LOGIN"
string entity_type "TableName"
int entity_id
text details
string ip_address
datetime created_at
}
%% Relationships
HR_PERSON ||--o{ SYSTEM_USER_ROLES : "has"
SYSTEM_ROLES ||--o{ SYSTEM_USER_ROLES : "assigned_to"
HR_PERSON ||--o{ TRIP_REQUESTS : "creates"
TRIP_REQUESTS ||--o{ TRIP_APPROVALS : "has_workflow_steps"
HR_PERSON ||--o{ TRIP_APPROVALS : "approves"
PDF_TEMPLATES ||--o{ PDF_TEMPLATE_FIELDS : "contains"
HR_PERSON ||--o{ AUDIT_LOGS : "performs"
4. ข้อสังเกตเพิ่มเติม (Notes)
- การอนุมัติ (Trip Approvals) จะตรวจสอบแบบลำดับขั้น (Step-by-Step)
- PDF Template Fields เก็บพิกัดเพื่อใช้ในการ Render ด้วย TCPDF/FPDI
- การเก็บรหัสผ่าน (Password Hash) ฝั่ง HR จะถูกเรียกใช้โดย PDO ตัวแรก ส่วนเนื้อหาอื่นๆ จะเรียกใช้โดย PDO ตัวที่สอง
- โครงสร้างนี้สามารถรองรับได้ถึง OWASP Top 10 โดยการบังคับใช้ Prepared Statements (PDO) ตลอดทั้งแอปพลิเคชัน