| SR01: Standards of Software |
|
|
|
| SR01:001 |
ระบบต้องพัฒนาและจัดทำเอกสารให้สอดคล้องกับมาตรฐาน ISO/IEC 29110 Basic Profile และแนวปฏิบัติ Secure Coding |
A |
CR12:004, CR14:001–CR14:003, CR09:003, CR10:004, CR11:001–CR11:004 |
| SR01:002 |
ระบบต้องใช้เทคโนโลยี PHP 8 ขึ้นไป, MySQL/MariaDB และ Node.js (Socket.IO, pm2) |
A |
CR04:004, CR12:001 |
| SR01:003 |
ระบบต้องติดตั้งบน Linux Server ได้ทั้งแบบ Manual (setup.php) และ Docker Compose (php-apache, mariadb, node/pm2) |
A |
CR07:001, CR10:001, CR10:002, CR08:001, CR08:002, CR13:003 |
| SR01:004 |
รหัสผ่านผู้ใช้ต้องเข้ารหัสด้วย bcrypt (PASSWORD_BCRYPT) และไม่เก็บหรือบันทึกเป็นข้อความธรรมดา |
A |
CR12:003 |
| SR01:005 |
ค่าตั้งค่าและความลับ (app/config.php, .env) ต้องถูกยกเว้นจาก Source Control และสร้างขึ้นตอนติดตั้ง |
A |
CR06:002, CR09:002, CR10:003 |
| SR01:006 |
แอปพลิเคชันและงานตามกำหนดเวลาต้องใช้เขตเวลา Asia/Bangkok |
A |
CR07:002 |
| SR02: Software Structure Considerations |
|
|
|
| SR02:001 |
ระบบต้องเป็น Web-based Application แบบหลายหน้า (Multi-page PHP) |
A |
CR04:001 |
| SR02:002 |
ส่วนติดต่อผู้ใช้ต้องเป็น Responsive Design รองรับ Desktop / Tablet / Mobile |
A |
CR05:001, CR07:003 |
| SR02:003 |
ตรรกะทางธุรกิจต้องจัดเป็น Manager/Service Classes ที่เรียกใช้จาก Page Controller แยกจากส่วนแสดงผล |
A |
CR09:001 |
| SR02:004 |
การเข้าถึงข้อมูลต้องผ่าน Manager Classes ไม่กระจาย SQL ในหน้าเพจ |
A |
CR09:001 |
| SR02:005 |
ระบบต้องติดตั้งเป็น Container Stack ผ่าน Docker Compose ได้ นอกเหนือจากการติดตั้งแบบ Manual |
A |
CR10:002 |
| SR03: Software Elements |
|
|
|
| SR03:001 |
โมดูลผู้ใช้งานและสิทธิ์: ลงทะเบียน, Onboarding, เข้าสู่ระบบ, บทบาท Owner/Admin/Staff/Viewer, สิทธิ์แอปพลิเคชัน (app/login/, UserManager, PasswordManager, PasswordResetManager) |
A |
CR01:001–CR01:004 |
| SR03:002 |
โมดูลตั้งค่าบริษัท: ข้อมูลบริษัท, SMTP, การตั้งค่าระบบ (app/setting/, CompanyProfileManager, CompanySettingManager, SmtpManager) |
A |
CR01:004, CR03:005 |
| SR03:003 |
โมดูลข้อมูลหลัก: คลังสินค้า, พื้นที่/ช่องจัดเก็บ, หมวดสินค้า, สินค้า, ผู้ติดต่อ (app/inventory/, app/contact/, WarehouseManager, ProductManager, ContactManager) |
A |
CR01:005, CR01:006 |
| SR03:004 |
โมดูลควบคุมสินค้าคงคลัง: รับเข้า, จ่ายออก, โอนย้าย, Lot/Serial/Expiry, บาร์โค้ด, แนบไฟล์ (app/ics/, StockManager, StockSourceManager, BarcodeManager, FileUploader) |
A |
CR01:007–CR01:012, CR01:019, CR05:005 |
| SR03:005 |
โมดูลขาย: ใบเสนอราคา, ใบสั่งขาย, ใบแจ้งหนี้, ใบรับคืน/ใบลดหนี้ (app/order/, app/revenue/, QuotationManager, OrderManager, InvoiceManager, ReturnManager) |
A |
CR01:013 |
| SR03:006 |
โมดูลจัดซื้อ: ใบขอซื้อ, ใบสั่งซื้อ, ใบแจ้งหนี้ซื้อ, ใบคืนสินค้าผู้ขาย (app/po/, PurchaseRequestManager, PurchaseOrderManager, SupplierReturnManager) |
A |
CR01:014 |
| SR03:007 |
โมดูลการเงิน: ใบวางบิลรับ, ใบเสร็จ, ใบวางบิลจ่าย, ใบสำคัญจ่าย (app/finance/, ReceiptBillingManager, ReceiptManager, PaymentBillingManager, PaymentManager) |
A |
CR01:015 |
| SR03:008 |
โมดูลบัญชี: ผังบัญชี, แผนก, สูตรบัญชี, สมุดรายวัน, บัญชีแยกประเภท (app/accounting/, app/journal/, PostingManager) |
A |
CR01:016 |
| SR03:009 |
โมดูลรายงานและแดชบอร์ด: รายงานสต๊อก, รายงานการเงิน, แดชบอร์ด (app/reports/, app/dashboard/, app/ac_dashboard/, ReportManager, EtlStockManager) |
A |
CR01:011, CR01:017, CR01:020 |
| SR03:010 |
โมดูลควบคุมเอกสาร: ออกเลขที่เอกสาร, วงจรชีวิต/สถานะ, ประวัติรายการ (DocumentNumberManager, BatchActionManager) |
A |
CR01:018, CR01:023 |
| SR03:011 |
บริการแจ้งเตือนและงานตามกำหนดเวลา: Socket.IO และ Scheduler (nodejs/server.js, nodejs/scheduler.js, app/cron/) |
A |
CR01:021, CR01:022 |
| SR04: Software Elements Relationship |
|
|
|
| SR04:001 |
ทุกโมดูลปฏิบัติการต้องเข้าถึงได้ผ่านการยืนยันตัวตนและการตรวจสิทธิ์ของโมดูลผู้ใช้งานเท่านั้น |
A |
CR01:002, CR01:024, CR04:003, CR05:002 |
| SR04:002 |
โมดูลขาย จัดซื้อ และการเงิน ต้องบันทึกผลกระทบต่อสต๊อกและ GL ผ่านโมดูลคลังสินค้าและบัญชี ไม่ทำซ้ำตรรกะ |
A |
CR01:013–CR01:016 |
| SR04:003 |
โมดูลรายงานต้องอ่านข้อมูลภายใต้ขอบเขตบริษัท/คลังที่โมดูลข้อมูลหลักและคลังสินค้าบังคับใช้ |
A |
CR01:024, CR08:004 |
| SR04:004 |
บริการ Node.js ต้องรับเหตุการณ์จากแอปพลิเคชัน PHP ผ่าน Endpoint ภายในที่ป้องกันด้วย Secret เท่านั้น |
A |
CR01:021, CR03:003 |
| SR04:005 |
ทุกโมดูลที่สร้างเอกสารธุรกิจต้องเรียกใช้โมดูลควบคุมเอกสารเพื่อออกเลขที่เอกสาร |
A |
CR01:018 |
| SR05: Performance Characteristics |
|
|
|
| SR05:001 |
งานประจำวัน (เปิดหน้าจอ, ค้นหา, สร้างเอกสาร) ต้องเสร็จภายในเวลาที่ใช้งานได้จริงบนสภาพแวดล้อมที่ตกลง |
A |
CR02:001 |
| SR05:002 |
ยอดสรุปสต๊อก/GL/แดชบอร์ดต้องคำนวณล่วงหน้าตามกำหนดเวลา (etl_stock_summary, etl_gl_summary) |
A |
CR02:002, CR01:022, CR08:005 |
| SR05:003 |
ระบบต้องรองรับปริมาณข้อมูลและผู้ใช้พร้อมกันตามที่ตกลงสำหรับสภาพแวดล้อมใช้งานจริง |
A |
CR02:003 |
| SR05:004 |
ระบบต้องมี Health Check ทุก 5 นาที และแจ้งเตือนผู้ดูแลเมื่อล้มเหลวติดต่อกัน 2 ครั้ง |
A |
CR08:003 |
| SR06: Software Interfaces |
|
|
|
| SR06:001 |
แอปพลิเคชัน PHP ต้องเชื่อมต่อฐานข้อมูล MariaDB 2 ฐาน: wms (ผู้ใช้/บริษัท) และ wms2 (คลัง/บัญชี) |
A |
CR03:001 |
| SR06:002 |
ระบบต้องใช้งานได้บน Chrome, Edge และ Firefox รุ่นปัจจุบัน |
A |
CR03:002 |
| SR06:003 |
ระบบต้องรองรับ Mobile/Tablet Browser ผ่าน Responsive UI |
A |
CR07:003 |
| SR06:004 |
แอปพลิเคชัน PHP ต้องส่งเหตุการณ์ไป Node.js ผ่าน HTTP Endpoint ภายใน (NODE_EMIT_URL + NODE_EMIT_SECRET) และส่งอีเมลผ่าน SMTP ต่อบริษัท |
A |
CR03:003, CR03:005 |
| SR06:005 |
Browser ต้องเชื่อมต่อ Socket.IO Endpoint (NODE_PUBLIC_URL) เพื่อรับการแจ้งเตือน |
A |
CR03:004 |
| SR07: Security Characteristics |
|
|
|
| SR07:001 |
การเชื่อมต่อในสภาพแวดล้อมใช้งานจริงต้องผ่าน HTTPS/TLS |
A |
CR06:001 |
| SR07:002 |
การทำงานฝั่งเซิร์ฟเวอร์ต้องตรวจสอบข้อมูลนำเข้า ยืนยันตัวตน ตรวจสิทธิ์ และจำกัดขอบเขตบริษัท/คลัง |
A |
CR06:003, CR14:004 |
| SR07:003 |
ระบบต้องอนุญาต Session ที่ใช้งานอยู่เพียงหนึ่งต่อบัญชี (บล็อก Concurrent Login) |
A |
CR06:006 |
| SR07:004 |
ระบบต้องป้องกัน SQL Injection และ Cross-Site Scripting ทั้งด้านรับข้อมูลและแสดงผล |
A |
CR06:005 |
| SR07:005 |
RBAC (Owner/Admin/Staff/Viewer) ต้องบังคับใช้ที่ฝั่งเซิร์ฟเวอร์ ไม่ใช่เพียงการซ่อนเมนู |
A |
CR06:004 |
| SR08: Database Design Requirements |
|
|
|
| SR08:001 |
ฐานข้อมูล wms: user, company_list, company_map_user, company_setting, company_smtp, company_usage, whitelist |
A |
CR01:001–CR01:004, CR04:002 |
| SR08:002 |
ตารางข้อมูลหลัก (wms2): md_warehouse, md_storage, md_bin, md_product, md_product_category, md_contact, md_contact_type, md_account, md_account_formula, md_account_formula_item, md_department, md_barcode, md_sku_barcode_label, md_lot, md_lock_operation |
A |
CR01:005, CR01:010, CR01:016 |
| SR08:003 |
ตารางรายการ (td_*): td_stock, td_order/_item, td_quotation/_item, td_invoice/_item, td_return/_item, td_purchase_request/_item, td_purchase_order/_item, td_supplier_return/_item, td_receipt/_item, td_receipt_billing/_item, td_payment/_item, td_payment_billing/_item, td_gl/td_gl_item, td_batch_action, td_bin_log |
A |
CR01:007–CR01:018 |
| SR08:004 |
ตารางสรุปยอดและควบคุมเอกสาร: etl_stock_summary, etl_gl_summary, document_number_sequences, document_types, schema_migrations |
A |
CR01:018, CR01:022, CR09:004 |
| SR08:005 |
ตารางทั้งหมดต้องสร้างซ้ำได้ในสภาพแวดล้อมใหม่ผ่าน setup.php โดยไม่ต้องแก้ Schema ด้วยมือ |
A |
CR10:001, CR09:004 |
| SR09: Error Handling and Recovery Attributes |
|
|
|
| SR09:001 |
การลบ ยกเลิก หรือ Void เอกสารควบคุมต้องมี Confirm Dialog |
A |
CR05:004, CR01:023 |
| SR09:002 |
ข้อผิดพลาดต้องแสดงข้อความที่ผู้ใช้เข้าใจได้แทน Fatal Error |
A |
CR05:003, CR13:004 |
| SR09:003 |
การเปลี่ยนแปลงที่เกี่ยวข้องกัน (เอกสาร + สต๊อก + GL) ต้องเป็น Transaction และป้องกันยอดติดลบ/ซ้ำ |
A |
CR13:001, CR13:002, CR01:008 |