# Software Design | Document No | Software Design | Release, Version, By: | 25690306 V1.0 NoC | | Project Name | โครงการพัฒนาระบบบริหารจัดการคลังสินค้า (BRN WMS) บริษัท บี.อาร์.เอ็น เอ็นเตอร์ไพรส์ จำกัด | | Project Code | 200-WMS-26-001-00 | | Title | เอกสารการออกแบบระบบ (System Design Document) | | Project Period | 5 มกราคม 2569 – 24 สิงหาคม 2569 | | Organizer | คุณอภิรัชช์ สุภัทรประทีป (Project Manager) , คุณนพพงษ์ เจริญสุข (System Analyst) | | Recorder | คุณเยาวลักษณ์ บางชมภู (Document Control) | ## HIGH LEVEL DESIGN ### High Level Architecture Diagram ภาพรวมสถาปัตยกรรมของระบบ แบ่งเป็นผู้ใช้งาน ชั้น Client, Web, Data, Service และบริการภายนอก พร้อมช่องทางการเชื่อมต่อระหว่างกัน ทุกคำขอจากหน้าจอผ่านการตรวจสอบของ db_auth ก่อนถึงตรรกะธุรกิจ ![รูปที่ 1 High Level Architecture Diagram — โครงสร้างระบบแบ่งตามชั้นการทำงาน](figures/hld-architecture.png) ### Use Case Diagram ผู้ใช้งานของระบบและกลุ่มการใช้งานหลัก บทบาทที่สูงกว่าได้รับสิทธิ์การใช้งานของบทบาทที่ต่ำกว่าทั้งหมด (Viewer → Staff → Admin → Owner) ![รูปที่ 2 Use Case Diagram — ผู้ใช้งานและกลุ่มการใช้งานหลัก](figures/hld-use-case.png) | Actor | คำอธิบาย | การใช้งานหลัก | | --- | --- | --- | | Owner | เจ้าของบริษัท สิทธิ์สูงสุดภายในบริษัท | ตั้งค่าบริษัท จัดการผู้ใช้ และใช้งานทุกโมดูล | | Admin | ผู้ดูแลระบบภายในบริษัท | จัดการข้อมูลหลัก ผู้ใช้ สิทธิ์ และใช้งานทุกโมดูลปฏิบัติการ | | Staff | ผู้ปฏิบัติงาน | บันทึกรายการคลังสินค้า ขาย จัดซื้อ และการเงินตามสิทธิ์ | | Viewer | ผู้ใช้แบบอ่านอย่างเดียว | ดูหน้าจอและรายงานที่ได้รับสิทธิ์ | | System Scheduler | ผู้กระทำอัตโนมัติ (Node.js) | สรุปยอดสต๊อก/GL และแจ้งเตือนตามกำหนดเวลา | | SMTP Service | ผู้กระทำภายนอก | ส่งอีเมล Onboarding กู้คืนรหัสผ่าน และแจ้งเตือน | ### Component Diagram โมดูลของระบบ (Software Unit กลุ่ม UN01–UN13) และความสัมพันธ์การเรียกใช้ระหว่างโมดูล ![รูปที่ 3 Component Diagram — โมดูลของระบบและความสัมพันธ์](figures/hld-component.png) โครงสร้างส่วนประกอบของระบบแบ่งตามชั้นการทำงาน | ชั้น (Layer) | ส่วนประกอบ | อ้างอิง SR | | --- | --- | --- | | Presentation | หน้าจอ PHP ในแต่ละโมดูล (`app//`), JavaScript และ CSS ที่รองรับ Responsive | SR02:002, SR06:002, SR06:003 | | Business Logic | Manager/Service Classes ใน `app/assets/utils/classes/` เรียกใช้จาก Page Controller | SR02:003, SR03:001–SR03:011 | | Data Access | Manager Classes เข้าถึงฐานข้อมูล MariaDB โดยตรง พร้อม Trait รวมตรรกะที่ใช้ร่วมกัน | SR02:004, SR06:001, SR08:001–SR08:005 | | Real-time / Scheduler | บริการ Node.js (`server.js`, `scheduler.js`) ควบคุมด้วย pm2 | SR03:011, SR06:004, SR06:005 | | External | บริการ SMTP สำหรับส่งอีเมล และ Socket.IO Client บน Browser | SR06:004, SR06:005 | ### Deployment Diagram การติดตั้งบนสภาพแวดล้อมใช้งานจริงด้วย Docker Compose และทางเลือกการติดตั้งแบบ Manual ![รูปที่ 4 Deployment Diagram — การติดตั้งบนสภาพแวดล้อมใช้งานจริง](figures/hld-deployment.png) การติดตั้งระบบแบ่งเป็น 4 ชั้นบริการ | ชั้นการติดตั้ง (Tier) | ส่วนประกอบ | อ้างอิง SR | | --- | --- | --- | | Client | Web Browser (Chrome/Edge/Firefox) บน Desktop, Tablet และ Mobile พร้อม Socket.IO Client | SR06:002, SR06:003, SR06:005 | | Web Tier | PHP 8 บน Apache ติดตั้งแบบ Manual หรือ Container `docker/php` | SR01:003, SR02:005 | | Data Tier | MariaDB ฐานข้อมูล `wms` (ผู้ใช้/บริษัท) และ `wms2` (คลัง/บัญชี) | SR06:001, SR08:001–SR08:004 | | Service Tier | Node.js `server.js` และ `scheduler.js` ควบคุมด้วย pm2 | SR03:011, SR06:004 | ### User Interface Design ผังหน้าจอหลักของระบบแบ่งตามโมดูลการใช้งาน ทุกหน้าจอใช้โครงร่างเดียวกัน ได้แก่ เมนูด้านซ้ายที่แสดงตามสิทธิ์ของผู้ใช้ แถบด้านบนสำหรับเลือกบริษัทและบัญชีผู้ใช้ และพื้นที่ทำงานด้านขวา | กลุ่มหน้าจอ | หน้าจอ | | --- | --- | | Login & Onboarding | เข้าสู่ระบบ / ลงทะเบียนบริษัท / รับคำเชิญเข้าร่วมบริษัท / ลืมรหัสผ่าน / ยืนยัน OTP | | Dashboard | แดชบอร์ดคลังสินค้า / แดชบอร์ดบัญชีและการเงิน | | Master Data | คลังสินค้า / พื้นที่จัดเก็บ / ช่องจัดเก็บ / หมวดสินค้า / สินค้า / ประเภทผู้ติดต่อ / ผู้ติดต่อ | | Inventory Control | รับสินค้าเข้า / จ่ายสินค้าออก / โอนย้ายสินค้า / ยอดคงเหลือ / Lot & Serial / พิมพ์บาร์โค้ด | | Sales | ใบเสนอราคา / ใบสั่งขาย / ใบแจ้งหนี้ / ใบรับคืนและใบลดหนี้ | | Purchasing | ใบขอซื้อ / ใบสั่งซื้อ / ใบแจ้งหนี้ซื้อ / ใบคืนสินค้าผู้ขาย | | Finance | ใบวางบิลรับ / ใบเสร็จรับเงิน / ใบวางบิลจ่าย / ใบสำคัญจ่าย | | Accounting | ผังบัญชี / แผนก / สูตรบัญชี / สมุดรายวัน / บัญชีแยกประเภท | | Reports | รายงานสต๊อก / ความเคลื่อนไหว / ความจุคลัง / สินค้าใกล้หมด / สินค้าหมดอายุ / รายงานการเงิน | | Settings | ข้อมูลบริษัท / SMTP / ผู้ใช้งานและสิทธิ์ / การตั้งค่าระบบ | ### Mockup Wireframe Wireframe แสดงโครงร่างหน้าจอหลักที่ใช้เป็นแม่แบบในการพัฒนา หน้าจอเอกสารขาย จัดซื้อ และการเงินใช้รูปแบบหน้ารายการ (รูปที่ 7) และหน้าบันทึก (รูปที่ 8) เดียวกัน ![รูปที่ 5 Wireframe หน้าจอเข้าสู่ระบบ](figures/wf-login.png) ![รูปที่ 6 Wireframe หน้าจอแดชบอร์ด](figures/wf-dashboard.png) ![รูปที่ 7 Wireframe หน้ารายการเอกสาร (ตัวอย่างใบสั่งขาย) — ใช้รูปแบบเดียวกันทุกเอกสาร](figures/wf-list.png) ![รูปที่ 8 Wireframe หน้าบันทึกเอกสาร (ตัวอย่างใบสั่งขาย) — ใช้กับเอกสารขาย จัดซื้อ และการเงิน](figures/wf-document.png) ![รูปที่ 9 Wireframe หน้าจอรับสินค้าเข้า](figures/wf-stock-in.png) ![รูปที่ 10 Wireframe หน้าจอรายงาน](figures/wf-report.png) ## Software Baseline หัวข้อนี้ระบุสิ่งที่ถูกกำหนดเป็น Baseline ของซอฟต์แวร์ วันที่กำหนด และผู้อนุมัติ เพื่อให้ตรวจสอบเส้นทาง Baseline → Configuration → Change ได้ในเอกสารชุดเดียวกัน | รายการที่กำหนดเป็น Baseline | ค่าที่ควบคุม | ที่จัดเก็บ | | --- | --- | --- | | Source Code ของแอปพลิเคชัน | Git commit `6c39700` บน branch `main` | Repository หลัก `git@188.166.228.62:nok/wms-app.git` | | โครงสร้างฐานข้อมูล | Schema ที่สร้างโดย `setup.php` และ `docker/mariadb/init-wms2.sql` | ควบคุมใน Repository เดียวกัน | | ค่าตั้งค่าและชุดติดตั้ง | `docker-compose.yml`, `docker/`, `.env.example` (ไม่รวมค่าความลับ) | ควบคุมใน Repository เดียวกัน | | เอกสาร Work Products | Branch `sdlc` และ Tag `sdlc-v1.0-final` | Repository หลักและ Remote สำรอง `git@github.com:thanakorninbox-dev/wms-app.git` | | หัวข้อ | รายละเอียด | | --- | --- | | วันที่กำหนด Baseline | 17 สิงหาคม 2569 (Baseline ของระบบที่ส่งมอบ) | | ผู้จัดทำ Baseline | คุณธนกร สถิตวิทยากุล (Developer) | | ผู้ตรวจสอบ | คุณนพพงษ์ เจริญสุข (System Analyst) และ คุณปริญ งามขำ (QA/Tester) | | ผู้อนุมัติ | คุณเสรี วิริยะสกุลธรณ์ (Project Sponsor) พร้อมการตรวจรับเมื่อ 17 สิงหาคม 2569 | | เอกสารควบคุมที่เกี่ยวข้อง | Software Configuration (WP 8) ระบุรายการ Configuration Item และการควบคุมเวอร์ชัน | | การสอบกลับ | Traceability Record (WP 13) เชื่อมโยงความต้องการกับ Software Unit และ Test Case บน Baseline นี้ | | การเปลี่ยนแปลง Baseline | ต้องพิจารณาตามเกณฑ์ใน Change Report และบันทึกผลใน Correction Register เมื่อเป็นการแก้ไขข้อบกพร่อง | ## Software Unit | ID | Description | Functional Interfaces Detail | References | Files | | --- | --- | --- | --- | --- | | UN01 — ผู้ใช้งานและสิทธิ์ (Identity & Access) | | | | | | UN01.001 | Identity – Register & Onboarding | ลงทะเบียนเจ้าของบริษัท, ยืนยันอีเมล, เชิญผู้ใช้และรับคำเชิญเข้าบริษัทที่ถูกต้อง | SR03:001, SR08:001 | app/login/, UserManager.php | | UN01.002 | Identity – Login & Role Guard | เข้าสู่ระบบด้วย Username/Password, ตรวจบทบาทและสิทธิ์แอปพลิเคชันฝั่งเซิร์ฟเวอร์ก่อนเข้าทุกหน้า | SR03:001, SR04:001, SR07:005 | app/login/, UserManager.php, app/assets/utils/ | | UN01.003 | Identity – Password Recovery / OTP / Session | ลืมรหัสผ่านผ่านอีเมล, OTP, Hash รหัสผ่าน bcrypt, บล็อก Concurrent Login | SR03:001, SR01:004, SR07:003 | PasswordManager.php, PasswordResetManager.php | | UN01.004 | Identity – User & App-Access Administration | เพิ่ม/แก้ไข/ปิดใช้ผู้ใช้, กำหนดบทบาทและสิทธิ์การเข้าถึงแอปพลิเคชัน | SR03:001, SR08:001 | app/setting/, UserManager.php | | UN02 — ตั้งค่าบริษัท (Company Settings) | | | | | | UN02.001 | Company – Profile & System Settings | แก้ไขข้อมูลบริษัท, โลโก้, ค่าตั้งค่าระบบต่อบริษัท | SR03:002 | CompanyProfileManager.php, CompanySettingManager.php | | UN02.002 | Company – SMTP & Mail Dispatch | ตั้งค่า SMTP ต่อบริษัท และส่งอีเมล Onboarding/กู้คืนรหัสผ่าน/แจ้งเตือน | SR03:002, SR06:004 | SmtpManager.php | | UN03 — ข้อมูลหลัก (Master Data) | | | | | | UN03.001 | Master – Warehouse / Storage / Bin | จัดการคลังสินค้า พื้นที่ และช่องจัดเก็บ พร้อมความจุ | SR03:003, SR08:002 | app/inventory/, WarehouseManager.php | | UN03.002 | Master – Product & Category | จัดการหมวดสินค้า สินค้า หน่วยนับ และรูปสินค้า | SR03:003, SR08:002 | ProductManager.php | | UN03.003 | Master – Contact | จัดการประเภทผู้ติดต่อ ลูกค้า และผู้ขาย | SR03:003, SR08:002 | app/contact/, ContactManager.php | | UN03.004 | Master – Warehouse Layer Configuration | สลับโครงสร้างคลังแบบชั้นเดียว/หลายชั้นต่อบริษัท | SR03:003 | CompanySettingManager.php, WarehouseManager.php | | UN04 — ควบคุมสินค้าคงคลัง (Inventory Control) | | | | | | UN04.001 | ICS – Stock-in | รับสินค้าเข้าตามสินค้า จำนวน ตำแหน่ง เอกสารอ้างอิง สร้างความเคลื่อนไหวและยอดคงเหลือ | SR03:004, SR08:003 | app/ics/, StockManager.php, StockTablesTrait.php | | UN04.002 | ICS – Stock-out | จ่ายสินค้าออกโดยตรวจสิทธิ์และยอดคงเหลือ ปฏิเสธจำนวนเกิน | SR03:004, SR09:003 | StockManager.php | | UN04.003 | ICS – Stock Transfer | โอนย้ายระหว่างตำแหน่ง ต้นทาง/ปลายทางผูกเป็นรายการเดียว | SR03:004 | StockManager.php | | UN04.004 | ICS – Lot / Serial / Expiry | บันทึกและสอบกลับ Lot, Serial Number, วันหมดอายุ | SR03:004, SR08:002 | StockSourceManager.php, md_lot | | UN04.005 | ICS – Barcode Label & Scan | พิมพ์ฉลากบาร์โค้ด SKU/ตำแหน่ง และรับค่าจากเครื่องสแกน | SR03:004 | BarcodeManager.php, location_barcode_label.php | | UN04.006 | ICS – File Attachment | แนบและเรียกดูไฟล์ที่อนุญาตในรายการที่รองรับ | SR03:004 | FileUploader.php | | UN05 — ขาย (Sales) | | | | | | UN05.001 | Sales – Quotation | สร้าง/แก้ไข/อนุมัติใบเสนอราคา และแปลงเป็นใบสั่งขาย | SR03:005, SR04:002 | app/order/, QuotationManager.php | | UN05.002 | Sales – Sales Order | สร้างใบสั่งขาย ยืนยัน และตัดสต๊อกตามสถานะ | SR03:005, SR04:002 | OrderManager.php | | UN05.003 | Sales – Invoice | ออกใบแจ้งหนี้จากใบสั่งขาย และบันทึก GL | SR03:005, SR04:002 | app/revenue/, InvoiceManager.php | | UN05.004 | Sales – Return / Credit Note | รับคืนสินค้าและออกใบลดหนี้ พร้อมปรับสต๊อก/บัญชี | SR03:005, SR04:002 | ReturnManager.php | | UN06 — จัดซื้อ (Purchasing) | | | | | | UN06.001 | Purchasing – Purchase Request | สร้างและอนุมัติใบขอซื้อ | SR03:006 | app/po/, PurchaseRequestManager.php | | UN06.002 | Purchasing – Purchase Order | แปลงใบขอซื้อเป็นใบสั่งซื้อ และติดตามสถานะ | SR03:006, SR04:002 | PurchaseOrderManager.php | | UN06.003 | Purchasing – Purchase Invoice | บันทึกใบแจ้งหนี้ซื้อ รับสินค้าเข้า และบันทึก GL | SR03:006, SR04:002 | PurchaseOrderManager.php, StockManager.php | | UN06.004 | Purchasing – Supplier Return | คืนสินค้าผู้ขาย พร้อมปรับสต๊อก/บัญชี | SR03:006, SR04:002 | SupplierReturnManager.php | | UN07 — การเงิน (Finance) | | | | | | UN07.001 | Finance – Receipt Billing & Receipt | วางบิลรับและบันทึกใบเสรจรับเงินผูกกับใบแจ้งหนี้ | SR03:007, SR04:002 | app/finance/, ReceiptBillingManager.php, ReceiptManager.php | | UN07.002 | Finance – Payment Billing & Payment | วางบิลจ่ายและบันทึกใบสำคัญจ่ายผูกกับใบแจ้งหนี้ซื้อ | SR03:007, SR04:002 | PaymentBillingManager.php, PaymentManager.php | | UN08 — บัญชี (Accounting) | | | | | | UN08.001 | Accounting – Chart of Accounts / Departments / Formulas | จัดการผังบัญชี แผนก และสูตรบัญชีอัตโนมัติ | SR03:008, SR08:002 | app/accounting/, PostingManager.php | | UN08.002 | Accounting – Journal & GL Posting | บันทึกสมุดรายวันและผ่านรายการ GL แบบสมดุลภายใน Transaction | SR03:008, SR09:003 | app/journal/, PostingManager.php | | UN09 — รายงานและแดชบอร์ด (Reports & Dashboard) | | | | | | UN09.001 | Reports – Dashboard & Aggregates | แดชบอร์ดคลังสินค้าและบัญชีจากตารางสรุปยอด | SR03:009, SR05:001, SR05:002 | app/dashboard/, app/ac_dashboard/, EtlStockManager.php | | UN09.002 | Reports – Stock Reports | ภาพรวมสต๊อก, ความเคลื่อนไหว, ความจุ, สินค้าใกล้หมด, หมดอายุ, Lot | SR03:009 | app/reports/, ReportManager.php | | UN09.003 | Reports – Financial Reports | งบทดลอง, งบกำไรขาดทุน, งบดุล, VAT, สมุดรายวัน, ความเคลื่อนไหว GL | SR03:009 | ReportManager.php | | UN09.004 | Reports – Filter / Print / Export | กรอง ดู พิมพ์ และส่งออกรายงานตามขอบเขตสิทธิ์ | SR03:009, SR04:003 | app/reports/ | | UN10 — ควบคุมเอกสาร (Document Control) | | | | | | UN10.001 | Document – Numbering | ออกเลขที่เอกสารตามลำดับที่กำหนด (document_number_sequences) | SR03:010, SR04:005, SR08:004 | DocumentNumberManager.php | | UN10.002 | Document – Lifecycle & Status | ควบคุมสถานะเอกสาร ปฏิเสธการเปลี่ยนสถานะที่ไม่ถูกต้อง พร้อม Confirm Dialog และข้อความข้อผิดพลาด | SR03:010, SR09:001, SR09:002 | BatchActionManager.php, Manager classes | | UN10.003 | Document – Audit Fields & History | บันทึกผู้สร้าง ผู้แก้ไข วันที่ และประวัติรายการ | SR03:010, SR09:001 | td_* tables, td_bin_log | | UN11 — แจ้งเตือนและงานตามกำหนดเวลา (Notification & Scheduler) | | | | | | UN11.001 | Node – Socket.IO Notification Server | รับเหตุการณ์จาก PHP ผ่าน Endpoint ที่ป้องกันด้วย Secret และส่งต่อไปยัง Browser ของผู้ใช้ที่เกี่ยวข้อง | SR03:011, SR04:004, SR06:004, SR06:005 | nodejs/server.js | | UN11.002 | Node – Scheduler (ETL & Alerts) | สรุปยอดสต๊อก/GL, แจ้งเตือนสินค้าใกล้หมดและใบแจ้งหนี้ค้างชำระ ตามกำหนดเวลา Asia/Bangkok | SR03:011, SR05:002, SR01:006 | nodejs/scheduler.js, app/cron/ | | UN12 — ความปลอดภัยและการแยกข้อมูล (Security & Tenant Scope) | | | | | | UN12.001 | Security – Tenant Scope Guard | จำกัดทุก Query และ Action ให้อยู่ในบริษัท/คลังที่ผู้ใช้ได้รับอนุญาต | SR04:001, SR04:003, SR07:002 | StockTablesTrait.php, Manager classes | | UN12.002 | Security – Server-side Validation | ตรวจสอบข้อมูลนำเข้า, Prepared Statements, Escape Output ป้องกัน SQLi/XSS | SR07:002, SR07:004 | Manager classes, app/assets/utils/ | | UN12.003 | Security – Operation Lock & Usage Guard | ล็อกช่วงเวลาผ่านรายการ และจำกัดโควตารายการต่อบริษัท | SR07:002, SR09:003 | OperationLockManager.php, UsageGuard.php | | UN12.004 | Security – TLS & Secret Configuration | ค่าตั้งค่า TLS, NODE_EMIT_SECRET และ Secrets ที่สร้างตอนติดตั้ง | SR07:001, SR01:005 | docker/php/config.php.template, .env | | UN13 — ติดตั้งและสำรองข้อมูล (Deployment & Backup) | | | | | | UN13.001 | Deploy – setup.php Schema Installer | สร้างฐานข้อมูล wms/wms2 และตารางทั้งหมดในขั้นตอนเดียว | SR01:003, SR08:005, SR06:001 | setup.php, docker/mariadb/init-wms2.sql | | UN13.002 | Deploy – Docker Compose Stack | Container php-apache, mariadb, node/pm2 พร้อม Entrypoint สร้าง config.php | SR02:005, SR01:003 | docker-compose.yml, docker/ | | UN13.003 | Deploy – .env Generator | สร้าง .env และความลับอัตโนมัติ ไม่เก็บใน Git | SR01:005 | docker/init-env.sh, .env.example | | UN13.004 | Deploy – Backup & Restore | สำรอง Git 2 Remote, mysqldump รายวัน, ขั้นตอนกู้คืน | SR01:003 | Product Operation Guide, backup remote | ## ผู้จัดทำเอกสาร (Secretary) | ชื่อ | ตำแหน่ง | ลายเซ็น | วันที่ | | --- | --- | --- | --- | | คุณนพพงษ์ เจริญสุข | System Analyst | | | ## ผู้ตรวจสอบเอกสาร (Reviewer) | ชื่อ | ตำแหน่ง | ลายเซ็น | วันที่ | | --- | --- | --- | --- | | คุณเยาวลักษณ์ บางชมภู | Document Control | | | ## ผู้อนุมัติ (Approval) | ชื่อ | ตำแหน่ง | ลายเซ็น | วันที่ | | --- | --- | --- | --- | | คุณเสรี วิริยะสกุลธรณ์ | Project Sponsor | | |