181 lines
28 KiB
JavaScript
181 lines
28 KiB
JavaScript
// Project facts shared by every work product. Edit here, then run `node scripts/sdlc-seed/build.mjs`.
|
||
|
||
export const CODE = '200-WMS-26-001-00';
|
||
export const PROJECT_TH = 'โครงการพัฒนาระบบบริหารจัดการคลังสินค้า (BRN WMS) บริษัท บี.อาร์.เอ็น เอ็นเตอร์ไพรส์ จำกัด';
|
||
export const COMPANY_TH = 'บริษัท บี.อาร์.เอ็น เอ็นเตอร์ไพรส์ จำกัด';
|
||
export const START = '2026-01-05';
|
||
export const END = '2026-08-24';
|
||
export const DEV_START = '2026-02-19';
|
||
export const DEV_BASELINE = '2026-05-29';
|
||
export const TEST_FROM = '2026-08-10';
|
||
export const TEST_TO = '2026-08-14';
|
||
export const ACCEPT_DATE = '2026-08-17';
|
||
export const TRAINING_DATE = '2026-08-22';
|
||
export const OPS_CLOSE_DATE = '2026-08-23';
|
||
export const RELEASE_DATE = '2026-08-17'; // date stamped on the consolidated V1.0 issue
|
||
export const BASELINE_COMMIT = '6c39700'; // delivered software baseline on main
|
||
export const TEST_STATE_COMMIT = 'dd48a8b'; // closest retained repository state at end of test window
|
||
export const TAG = 'sdlc-v1.0-final';
|
||
export const ORIGIN = 'git@188.166.228.62:nok/wms-app.git';
|
||
export const BACKUP = 'git@github.com:thanakorninbox-dev/wms-app.git';
|
||
|
||
export const P = {
|
||
SeV: { id: 'SeV', th: 'คุณเสรี วิริยะสกุลธรณ์', en: 'Seri Viriyasakultorn', role: 'Project Sponsor', pos: 'กรรมการผู้จัดการ (CEO)', email: 'seri.v@brn.co.th' },
|
||
ApS: { id: 'ApS', th: 'คุณอภิรัชช์ สุภัทรประทีป', en: 'Apirach Supattaratpateep', role: 'Project Manager', pos: 'ผู้จัดการโครงการ', email: 'apirach.s@brn.co.th' },
|
||
NoC: { id: 'NoC', th: 'คุณนพพงษ์ เจริญสุข', en: 'Noppong Chareunsook', role: 'System Analyst', pos: 'นักวิเคราะห์ระบบ', email: 'noppong.c@brn.co.th' },
|
||
ThS: { id: 'ThS', th: 'คุณธนกร สถิตวิทยากุล', en: 'Thanakorn Sathitwitayakul', role: 'Developer', pos: 'นักพัฒนาระบบ', email: 'thanakorn.s@brn.co.th' },
|
||
PaNg: { id: 'PaNg', th: 'คุณปริญ งามขำ', en: 'Parin Ngamkham', role: 'QA/Tester', pos: 'ผู้ทดสอบระบบ', email: 'parin.n@brn.co.th' },
|
||
YaB: { id: 'YaB', th: 'คุณเยาวลักษณ์ บางชมภู', en: 'Yaowalak Bangchomphoo', role: 'Document Control', pos: 'เจ้าหน้าที่ควบคุมเอกสาร', email: 'yaowalak.b@brn.co.th' },
|
||
};
|
||
export const TEAM = [P.SeV, P.ApS, P.NoC, P.ThS, P.PaNg, P.YaB];
|
||
export const ORGANIZER = `${P.ApS.th} (Project Manager) , ${P.NoC.th} (System Analyst)`;
|
||
export const ORGANIZER_PM = `${P.ApS.th} (Project Manager)`;
|
||
export const RECORDER = `${P.YaB.th} (Document Control)`;
|
||
|
||
/** Deliverables (Work Products) as listed in the plan, acceptance and configuration records. */
|
||
export const WPS = [
|
||
['WP 1.0', `เอกสาร ${CODE} Software Project Plan (พร้อม Work Schedule)`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
['WP 2.0', `เอกสาร ${CODE} Customer Requirements`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
['WP 3.0', `เอกสาร ${CODE} Software Requirements Specification`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
['WP 4.0', `เอกสาร ${CODE} Software Design`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
['WP 5.0', `เอกสาร ${CODE} Change Report`, 'ส่งเอกสารจำนวน 3 ฉบับ (CH-001–CH-003)'],
|
||
['WP 6.0', `เอกสาร ${CODE} Test Case and Test Procedures`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
['WP 7.0', `เอกสาร ${CODE} Validation Results`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
['WP 8.0', `เอกสาร ${CODE} Software User Document`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
['WP 9.0', 'ระบบ BRN WMS ที่ผ่านการทดสอบพร้อมนำไปใช้งานจริง', `ส่ง Source Code (Git baseline ${BASELINE_COMMIT}) และติดตั้ง`],
|
||
['WP 10.0', `เอกสาร ${CODE} Product Operation Guide`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
['WP 11.0', `เอกสาร ${CODE} Maintenance Document`, 'ส่งเอกสารจำนวน 1 ชุด'],
|
||
];
|
||
|
||
/** Systems / sub-systems in scope (SOW table in the plan and charter). */
|
||
export const SCOPE = [
|
||
['ระบบบริหารจัดการผู้ใช้งานและสิทธิ์', ['ลงทะเบียนเจ้าของบริษัทและเชิญผู้ใช้งาน (Onboarding)', 'เข้าสู่ระบบและควบคุมสิทธิ์ตามบทบาท Owner / Admin / Staff / Viewer', 'กู้คืนรหัสผ่าน, OTP และควบคุม Session', 'ตั้งค่าบริษัท, SMTP, ผู้ใช้งาน และสิทธิ์การเข้าถึงแอปพลิเคชัน']],
|
||
['ระบบข้อมูลหลัก (Master Data)', ['คลังสินค้า, พื้นที่จัดเก็บ, ช่องจัดเก็บ (Bin)', 'หมวดสินค้าและสินค้า', 'ประเภทผู้ติดต่อและผู้ติดต่อ (ลูกค้า/ผู้ขาย)', 'รองรับโครงสร้างคลังแบบชั้นเดียวและแบบหลายชั้น']],
|
||
['ระบบควบคุมสินค้าคงคลัง (Inventory Control)', ['รับสินค้าเข้า (Stock-in)', 'จ่ายสินค้าออก (Stock-out) พร้อมตรวจสอบยอดคงเหลือ', 'โอนย้ายสินค้าระหว่างคลัง/ตำแหน่ง', 'ติดตาม Lot, Serial Number และวันหมดอายุ', 'พิมพ์บาร์โค้ดสินค้า/ตำแหน่ง และรองรับการสแกน', 'แนบไฟล์ประกอบรายการ']],
|
||
['ระบบขาย (Sales)', ['ใบเสนอราคา (Quotation)', 'ใบสั่งขาย (Sales Order)', 'ใบแจ้งหนี้ (Invoice)', 'ใบรับคืน / ใบลดหนี้ (Return / Credit Note)']],
|
||
['ระบบจัดซื้อ (Purchasing)', ['ใบขอซื้อ (Purchase Request)', 'ใบสั่งซื้อ (Purchase Order)', 'ใบแจ้งหนี้ซื้อ (Purchase Invoice)', 'ใบคืนสินค้าผู้ขาย (Supplier Return)']],
|
||
['ระบบการเงิน (Finance)', ['ใบวางบิลรับ / ใบเสร็จรับเงิน', 'ใบวางบิลจ่าย / ใบสำคัญจ่าย']],
|
||
['ระบบบัญชี (Accounting)', ['ผังบัญชี, แผนก, สูตรบัญชี', 'สมุดรายวันและบัญชีแยกประเภท (Journal / GL)', 'รายงานงบทดลอง, งบกำไรขาดทุน, งบดุล, ภาษีมูลค่าเพิ่ม']],
|
||
['ระบบรายงานและแดชบอร์ด', ['แดชบอร์ดคลังสินค้าและบัญชี', 'รายงานสต๊อก, ความเคลื่อนไหว, ความจุคลัง, สินค้าใกล้หมด, สินค้าหมดอายุ, Lot', 'กรอง ดู พิมพ์ และส่งออกรายงาน']],
|
||
['ระบบควบคุมเอกสาร', ['ออกเลขที่เอกสารอัตโนมัติตามลำดับที่กำหนด', 'ควบคุมสถานะและวงจรชีวิตของเอกสาร', 'บันทึกผู้สร้าง/ผู้แก้ไข/ประวัติรายการ']],
|
||
['ระบบแจ้งเตือนและงานตามกำหนดเวลา', ['แจ้งเตือนแบบ Real-time ผ่าน Node.js / Socket.IO', 'งานสรุปยอดสต๊อก/GL และแจ้งเตือนสินค้าใกล้หมด, ใบแจ้งหนี้ค้างชำระ ตามกำหนดเวลา']],
|
||
['ระบบติดตั้งและตั้งค่า', ['ติดตั้งแบบ Manual ผ่าน setup.php', 'ติดตั้งแบบ Container ผ่าน Docker Compose (php-apache, mariadb, node/pm2)', 'สร้างค่าตั้งค่าและความลับของระบบจาก .env โดยไม่เก็บใน Source Control']],
|
||
];
|
||
|
||
/**
|
||
* Customer Requirements (CR01–CR14). Each: [id, text, remark].
|
||
* Remark keeps the original FR-/NFR- identifier that appeared in earlier drafts so cross-references stay valid.
|
||
*/
|
||
export const CR_GROUPS = [
|
||
['CR01', 'Feature & Functional Characteristics', [
|
||
['CR01:001', 'ระบบต้องรองรับการลงทะเบียนเจ้าของบริษัทและการเชิญผู้ใช้งานเข้าร่วมบริษัท (Onboarding)', 'FR-001'],
|
||
['CR01:002', 'ระบบต้องยืนยันตัวตนผู้ใช้และบังคับสิทธิ์ตามบทบาท Owner, Admin, Staff และ Viewer', 'FR-002'],
|
||
['CR01:003', 'ระบบต้องรองรับการกู้คืนรหัสผ่าน การควบคุม Session และการยืนยัน OTP ตามที่กำหนด', 'FR-003'],
|
||
['CR01:004', 'ระบบต้องให้ผู้ดูแลจัดการข้อมูลบริษัท, SMTP, การตั้งค่าระบบ, ผู้ใช้งาน และสิทธิ์การเข้าถึงแอปพลิเคชัน', 'FR-004'],
|
||
['CR01:005', 'ระบบต้องจัดการข้อมูลคลังสินค้า, พื้นที่/ช่องจัดเก็บ, หมวดสินค้า, สินค้า, ประเภทผู้ติดต่อ และผู้ติดต่อ', 'FR-005'],
|
||
['CR01:006', 'ระบบต้องรองรับโครงสร้างตำแหน่งจัดเก็บทั้งแบบคลังเดียวและแบบหลายชั้น (คลัง/พื้นที่/ช่อง)', 'FR-006'],
|
||
['CR01:007', 'ระบบต้องบันทึกการรับสินค้าเข้า (Stock-in) ระบุสินค้า จำนวน ตำแหน่ง เอกสารอ้างอิง และข้อมูลติดตาม', 'FR-007'],
|
||
['CR01:008', 'ระบบต้องบันทึกการจ่ายสินค้าออก (Stock-out) โดยตรวจสอบสิทธิ์และยอดคงเหลือก่อนจ่าย', 'FR-008'],
|
||
['CR01:009', 'ระบบต้องโอนย้ายสินค้าระหว่างตำแหน่งจัดเก็บที่ได้รับอนุญาตโดยยอดต้นทาง/ปลายทางสมดุลกัน', 'FR-009'],
|
||
['CR01:010', 'ระบบต้องติดตาม Lot, Serial Number และวันหมดอายุของสินค้าที่เกี่ยวข้อง', 'FR-010'],
|
||
['CR01:011', 'ระบบต้องแสดงภาพรวมสต๊อก, ประวัติความเคลื่อนไหว, ความจุ/การใช้พื้นที่, สินค้าใกล้หมด, สินค้าหมดอายุ และข้อมูล Lot', 'FR-011'],
|
||
['CR01:012', 'ระบบต้องพิมพ์บาร์โค้ดสินค้า (SKU) และตำแหน่งจัดเก็บ และรองรับการสแกนในหน้าจอที่กำหนด', 'FR-012'],
|
||
['CR01:013', 'ระบบต้องสร้างและจัดการใบเสนอราคา, ใบสั่งขาย, ใบแจ้งหนี้, ใบรับคืน และใบลดหนี้', 'FR-013'],
|
||
['CR01:014', 'ระบบต้องสร้างและจัดการใบขอซื้อ, ใบสั่งซื้อ, ใบแจ้งหนี้ซื้อ และใบคืนสินค้าผู้ขาย', 'FR-014'],
|
||
['CR01:015', 'ระบบต้องสร้างและจัดการใบวางบิลรับ, ใบเสร็จรับเงิน, ใบวางบิลจ่าย และใบสำคัญจ่าย', 'FR-015'],
|
||
['CR01:016', 'ระบบต้องจัดการผังบัญชี, แผนก, สูตรบัญชี, สมุดรายวัน และบัญชีแยกประเภท', 'FR-016'],
|
||
['CR01:017', 'ระบบต้องจัดทำรายงานงบทดลอง, งบกำไรขาดทุน, งบดุล, ภาษีมูลค่าเพิ่ม, สมุดรายวัน และความเคลื่อนไหว GL', 'FR-017'],
|
||
['CR01:018', 'ระบบต้องออกเลขที่เอกสารอัตโนมัติและควบคุมสถานะ/วงจรชีวิตของเอกสาร', 'FR-018'],
|
||
['CR01:019', 'ระบบต้องรองรับการแนบไฟล์ที่อนุญาตกับรายการที่กำหนด', 'FR-019'],
|
||
['CR01:020', 'ระบบต้องให้ผู้ใช้กรอง ดู พิมพ์ และส่งออกรายงานปฏิบัติการและรายงานผู้บริหาร', 'FR-020'],
|
||
['CR01:021', 'ระบบต้องแจ้งเตือนผู้ใช้ที่เกี่ยวข้องเมื่อสถานะเอกสารเปลี่ยนหรือมีเหตุการณ์ปฏิบัติการ', 'FR-021'],
|
||
['CR01:022', 'ระบบต้องสรุปยอดสต๊อก/GL และแจ้งเตือนสินค้าใกล้หมดและใบแจ้งหนี้ค้างชำระตามกำหนดเวลา', 'FR-022'],
|
||
['CR01:023', 'ระบบต้องเก็บผู้สร้าง ผู้แก้ไข สถานะ และประวัติรายการเพื่อการตรวจสอบ', 'FR-023'],
|
||
['CR01:024', 'ระบบต้องจำกัดข้อมูลบริษัทและคลังสินค้าให้เฉพาะผู้ใช้ที่ได้รับอนุญาตในบริบทปัจจุบัน', 'FR-024'],
|
||
]],
|
||
['CR02', 'Performance Considerations', [
|
||
['CR02:001', 'ระบบต้องตอบสนองงานประจำวัน (เปิดหน้าจอ, ค้นหา, สร้างเอกสาร) ภายในเวลาที่ใช้งานได้จริงบนสภาพแวดล้อมที่ตกลง', 'NFR-006'],
|
||
['CR02:002', 'ระบบต้องมีตารางสรุปยอด (Aggregate) เพื่อให้แดชบอร์ดและรายงานแสดงผลได้โดยไม่ต้องคำนวณใหม่ทุกครั้ง', 'NFR-006'],
|
||
['CR02:003', 'ระบบต้องรองรับปริมาณข้อมูลและผู้ใช้พร้อมกันในระดับที่ตกลงสำหรับสภาพแวดล้อมใช้งานจริง', 'NFR-006'],
|
||
]],
|
||
['CR03', 'Interface Considerations', [
|
||
['CR03:001', 'ระบบต้องเชื่อมต่อฐานข้อมูล MySQL/MariaDB 2 ฐาน (wms สำหรับผู้ใช้/บริษัท และ wms2 สำหรับคลัง/บัญชี)', 'Operational context'],
|
||
['CR03:002', 'ระบบต้องใช้งานผ่าน Web Browser มาตรฐาน (Chrome, Edge, Firefox) ได้', 'NFR-008'],
|
||
['CR03:003', 'ระบบต้องส่งเหตุการณ์ไปยังบริการ Node.js ผ่าน Endpoint ภายในที่ป้องกันด้วย Secret', 'NFR-002'],
|
||
['CR03:004', 'Browser ต้องเชื่อมต่อ Socket.IO Endpoint สาธารณะเพื่อรับการแจ้งเตือนแบบ Real-time', 'FR-021'],
|
||
['CR03:005', 'ระบบต้องส่งอีเมล Onboarding, กู้คืนรหัสผ่าน และแจ้งเตือนผ่าน SMTP ที่ตั้งค่าต่อบริษัท', 'FR-004'],
|
||
]],
|
||
['CR04', 'Required System Characteristics', [
|
||
['CR04:001', 'ระบบต้องพัฒนาบนสถาปัตยกรรม Web-based Application', 'Operational context'],
|
||
['CR04:002', 'ระบบต้องเก็บข้อมูลแบบ Relational Database และรักษา Referential Integrity', 'Data requirements'],
|
||
['CR04:003', 'ระบบต้องรองรับการเข้าสู่ระบบด้วย Username/Password และกำหนดบทบาทผู้ใช้', 'FR-002'],
|
||
['CR04:004', 'ระบบต้องทำงานบน PHP 8 ขึ้นไป, MySQL/MariaDB และ Node.js', 'NFR-008'],
|
||
]],
|
||
['CR05', 'Human Engineering Considerations', [
|
||
['CR05:001', 'UI ต้องเป็น Responsive ใช้งานได้ทั้งบน Desktop และอุปกรณ์หน้าคลังสินค้า (Tablet/Mobile)', 'NFR-005'],
|
||
['CR05:002', 'เมนูและปุ่มคำสั่งต้องแสดงตามบทบาทและสิทธิ์การเข้าถึงของผู้ใช้', 'Interface requirements'],
|
||
['CR05:003', 'ระบบต้องแสดงผลการตรวจสอบข้อมูล สถานะ ความสำเร็จ และข้อผิดพลาดอย่างชัดเจน', 'Interface requirements'],
|
||
['CR05:004', 'ระบบต้องมีขั้นตอนยืนยันก่อนลบ ยกเลิก หรือทำรายการที่ย้อนกลับไม่ได้', 'Usability practice'],
|
||
['CR05:005', 'ระบบต้องพิมพ์เอกสารธุรกิจและฉลากบาร์โค้ดในรูปแบบที่ใช้งานได้', 'Interface requirements'],
|
||
]],
|
||
['CR06', 'Security Considerations', [
|
||
['CR06:001', 'การเชื่อมต่อในสภาพแวดล้อมใช้งานจริงต้องเข้ารหัสด้วย HTTPS/TLS', 'NFR-001'],
|
||
['CR06:002', 'ค่าตั้งค่าและความลับของระบบต้องไม่ถูกเก็บใน Source Control และไม่เข้าถึงได้จากเว็บสาธารณะ', 'NFR-001'],
|
||
['CR06:003', 'การทำงานฝั่งเซิร์ฟเวอร์ต้องตรวจสอบข้อมูลนำเข้า ยืนยันตัวตน ตรวจสิทธิ์ และจำกัดขอบเขตบริษัท/คลัง', 'NFR-002'],
|
||
['CR06:004', 'ระบบต้องจำกัดสิทธิ์การเข้าถึงตามบทบาท (Role-based Access Control) ทั้งใน UI และฝั่งเซิร์ฟเวอร์', 'FR-002'],
|
||
['CR06:005', 'ระบบต้องป้องกัน SQL Injection และ Cross-Site Scripting', 'NFR-002'],
|
||
['CR06:006', 'ระบบต้องบล็อกการเข้าสู่ระบบซ้ำซ้อน (Concurrent Login) ของบัญชีเดียวกัน', 'FR-003'],
|
||
]],
|
||
['CR07', 'Environmental Considerations', [
|
||
['CR07:001', 'ระบบต้องทำงานบน Linux Server ในรูปแบบติดตั้งเอง (LAMP) หรือ Docker Compose', 'NFR-004'],
|
||
['CR07:002', 'ระบบต้องใช้เขตเวลา Asia/Bangkok อย่างสม่ำเสมอทั้งแอปพลิเคชันและงานตามกำหนดเวลา', 'NFR-010'],
|
||
['CR07:003', 'ระบบต้องใช้งานได้บนอุปกรณ์ Desktop และอุปกรณ์พกพาผ่าน Web Browser', 'NFR-005'],
|
||
['CR07:004', 'ระบบต้องแยกข้อมูลสาธิต/ทดสอบออกจากข้อมูลใช้งานจริงได้', 'Data requirements'],
|
||
]],
|
||
['CR08', 'Operational Considerations', [
|
||
['CR08:001', 'ระบบต้องมีการสำรองฐานข้อมูลอัตโนมัติรายวัน', 'NFR-004'],
|
||
['CR08:002', 'ระบบต้องกู้คืนข้อมูลจากชุดสำรองได้ตามขั้นตอนที่จัดทำเป็นเอกสาร', 'NFR-004'],
|
||
['CR08:003', 'ระบบต้องมีการเฝ้าระวังสถานะบริการ Web, Database และ Node.js พร้อมแจ้งเตือนเมื่อขัดข้อง', 'NFR-004'],
|
||
['CR08:004', 'ระบบต้องรองรับหลายบริษัท (Multi-company) และหลายคลังสินค้าภายใต้การแยกข้อมูล', 'FR-024'],
|
||
['CR08:005', 'งานตามกำหนดเวลาต้องทำงานสำเร็จโดยไม่สร้างผลลัพธ์ซ้ำหรือเกินสิทธิ์', 'FR-022'],
|
||
]],
|
||
['CR09', 'Maintenance Considerations', [
|
||
['CR09:001', 'ซอฟต์แวร์ต้องมีโครงสร้างแบบโมดูล (Manager Classes / API) เพื่อให้แก้ไขได้โดยไม่กระทบส่วนอื่น', 'NFR-007'],
|
||
['CR09:002', 'ระบบต้องมีแม่แบบค่าตั้งค่า (Configuration Template) และควบคุมเวอร์ชันด้วย Git', 'NFR-007'],
|
||
['CR09:003', 'ระบบต้องมีเอกสารคู่มือการบำรุงรักษาและประวัติข้อบกพร่องที่แก้ไขแล้ว', 'NFR-004'],
|
||
['CR09:004', 'การเปลี่ยนแปลงโครงสร้างฐานข้อมูลต้องสะท้อนใน setup.php และตาราง schema_migrations', 'NFR-007'],
|
||
]],
|
||
['CR10', 'Installation Considerations', [
|
||
['CR10:001', 'ระบบต้องติดตั้งฐานข้อมูลได้ในขั้นตอนเดียวผ่าน setup.php', 'NFR-004'],
|
||
['CR10:002', 'ระบบต้องติดตั้งแบบ Container ได้ด้วยคำสั่ง docker compose up -d --build', 'NFR-004'],
|
||
['CR10:003', 'ระบบต้องมีสคริปต์สร้างไฟล์ .env และค่าความลับอัตโนมัติ (docker/init-env.sh)', 'NFR-001'],
|
||
['CR10:004', 'ระบบต้องมีเอกสารขั้นตอนการติดตั้งและตั้งค่า', 'NFR-004'],
|
||
]],
|
||
['CR11', 'Support Considerations', [
|
||
['CR11:001', 'ต้องมีคู่มือผู้ใช้งาน (Software User Document)', 'Documentation'],
|
||
['CR11:002', 'ต้องมีคู่มือปฏิบัติงานสำหรับผู้ดูแลระบบ (Product Operation Guide)', 'Documentation'],
|
||
['CR11:003', 'ต้องมีการอบรมผู้ใช้งานก่อนเปิดใช้งานจริง', 'Training'],
|
||
['CR11:004', 'ต้องมีช่องทางสนับสนุนและระดับการให้บริการ (SLA) หลังส่งมอบ', 'Maintenance'],
|
||
]],
|
||
['CR12', 'Design Constraints', [
|
||
['CR12:001', 'ระบบต้องพัฒนาด้วย PHP, MariaDB และ Node.js ตามที่องค์กรอนุมัติ', 'NFR-008'],
|
||
['CR12:002', 'ระบบต้องควบคุม Source Code ด้วย Git โดยมี main เป็น Baseline หลัก', 'Configuration'],
|
||
['CR12:003', 'รหัสผ่านผู้ใช้ต้องเข้ารหัสด้วย bcrypt และไม่เก็บหรือบันทึกเป็นข้อความธรรมดา', 'NFR-002'],
|
||
['CR12:004', 'โครงการต้องจัดทำ Work Products ตามมาตรฐาน ISO/IEC 29110 Basic Profile', 'NFR-009'],
|
||
]],
|
||
['CR13', 'Safety and Reliability Considerations', [
|
||
['CR13:001', 'การเปลี่ยนแปลงฐานข้อมูลที่เกี่ยวข้องกัน (เอกสาร + สต๊อก + GL) ต้องเป็น Transaction เดียวกัน', 'NFR-003'],
|
||
['CR13:002', 'ระบบต้องป้องกันยอดสต๊อกติดลบและความเคลื่อนไหวซ้ำซ้อน', 'NFR-003'],
|
||
['CR13:003', 'ระบบต้องรองรับการสำรองและกู้คืน (Backup & Recovery) ทั้ง Source Code และฐานข้อมูล', 'NFR-004'],
|
||
['CR13:004', 'ระบบต้องจัดการข้อผิดพลาดโดยแสดงข้อความที่เข้าใจได้แทน Fatal Error', 'NFR-006'],
|
||
]],
|
||
['CR14', 'Quality Expectations', [
|
||
['CR14:001', 'ระบบต้องผ่านการทดสอบตาม Test Case ที่กำหนดก่อนส่งมอบ', 'Acceptance'],
|
||
['CR14:002', 'ทุกความต้องการต้องสอบกลับได้ถึงการออกแบบ ส่วนประกอบ และหลักฐานการทดสอบ', 'NFR-009'],
|
||
['CR14:003', 'ระบบต้องผ่านการทดสอบการยอมรับ (UAT) โดยตัวแทนลูกค้าบนสภาพแวดล้อมใช้งานจริง', 'Acceptance'],
|
||
['CR14:004', 'ต้องไม่มีข้อบกพร่องระดับวิกฤตค้างอยู่ในด้านความปลอดภัย การแยกข้อมูล และความถูกต้องของสต๊อก/บัญชี', 'Acceptance'],
|
||
]],
|
||
];
|
||
export const CRS = CR_GROUPS.flatMap(([, , rows]) => rows);
|
||
export const crTopic = (id) => CRS.find((r) => r[0] === id)?.[1] ?? '';
|