281 lines
32 KiB
JavaScript
281 lines
32 KiB
JavaScript
// 3-Other Document: Stakeholder Register, Project Charter, Traceability Record Table, Training Report, List of Evidence.
|
|
import { P, TEAM, CODE, PROJECT_TH, COMPANY_TH, ORGANIZER_PM, RECORDER, START, END, SCOPE, CRS, TRAINING_DATE, ACCEPT_DATE, TEST_FROM, TEST_TO, BASELINE_COMMIT, ORIGIN, BACKUP, DEV_START } from './project.mjs';
|
|
import { SRS, UNITS, TEST_CASES, traceOf, srTopic, unitTopic } from './engineering.mjs';
|
|
import { CORRECTIONS, PERIODS, MEETINGS, TASKS } from './history.mjs';
|
|
import { bud, thLong, thRangeLong, table, bullets, numbered, daysBetween } from './lib.mjs';
|
|
import { workProduct, head } from './format.mjs';
|
|
|
|
const OTHER = '3-Other Document';
|
|
|
|
/** Stakeholder Register. */
|
|
export function stakeholderRegister() {
|
|
const date = '2026-01-16';
|
|
return {
|
|
dir: OTHER,
|
|
name: `${CODE} Stakeholder Register ${bud(date)} V1.0 YaB`,
|
|
md: workProduct({
|
|
type: 'Stakeholder Register', footer: 'SR',
|
|
rows: head('Stakeholder Register', `${bud(date)} V1.0 YaB`, [
|
|
['Title', 'รายชื่อผู้มีส่วนได้ส่วนเสีย (Stakeholder Register)'],
|
|
['Prepared by', `${P.ApS.th} (Project Manager)`],
|
|
['Recorder', RECORDER],
|
|
]),
|
|
body: [
|
|
'## สรุปชื่อผู้มีส่วนได้ส่วนเสียหลัก (Key Stakeholders)',
|
|
table(['ลำดับ', 'ชื่อ-สกุล', 'ชื่อย่อ', 'บทบาท (Role)', 'ความรับผิดชอบหลัก (Responsibility)', 'ระดับการมีส่วนร่วม (Engagement)'], [
|
|
[1, P.SeV.th, P.SeV.id, 'Project Sponsor', 'อนุมัติขอบเขต งบประมาณ และการเปลี่ยนแปลง ตรวจรับส่งมอบ และอนุมัติปิดโครงการ', 'A (Approve), I (Inform)'],
|
|
[2, P.ApS.th, P.ApS.id, 'Project Manager', 'วางแผนและควบคุมโครงการ ติดตามความก้าวหน้า บริหารความเสี่ยงและการเปลี่ยนแปลง', 'A (Accountable), R (Responsible)'],
|
|
[3, P.NoC.th, P.NoC.id, 'System Analyst', 'เก็บและวิเคราะห์ความต้องการ ออกแบบระบบและฐานข้อมูล จัดทำเอกสาร SRS และ Design', 'R (Responsible), C (Consult)'],
|
|
[4, P.ThS.th, P.ThS.id, 'Developer', 'พัฒนาระบบตามการออกแบบ ดูแลความปลอดภัย การติดตั้ง และการสำรองข้อมูล', 'R (Responsible), C (Consult)'],
|
|
[5, P.PaNg.th, P.PaNg.id, 'QA / Tester', 'จัดทำและดำเนินการทดสอบ ตรวจสอบ Work Products และติดตามการแก้ไขข้อบกพร่อง', 'R (Responsible), C (Consult)'],
|
|
[6, P.YaB.th, P.YaB.id, 'Document Control', 'ควบคุมรหัสเอกสาร เวอร์ชัน การอนุมัติ การจัดเก็บ และหลักฐานของโครงการ', 'R (Responsible)'],
|
|
[7, 'หัวหน้าฝ่ายคลังสินค้าและพนักงานคลัง', '—', 'ผู้ใช้งานหลัก', 'ให้ข้อมูลกระบวนการทำงาน ทดสอบการใช้งาน และใช้งานระบบจริง', 'C (Consult), R (Review)'],
|
|
[8, 'ฝ่ายขายและฝ่ายจัดซื้อ', '—', 'ผู้ใช้งาน', 'ให้ข้อมูลกระบวนการเอกสารขายและจัดซื้อ และทดสอบการใช้งาน', 'C (Consult)'],
|
|
[9, 'ฝ่ายบัญชีและการเงิน', '—', 'ผู้ใช้งาน', 'ให้ข้อมูลการวางบิล รับชำระ จ่ายชำระ และการบันทึกบัญชี', 'C (Consult)'],
|
|
[10, 'ผู้ดูแลระบบ (System Administrator)', '—', 'ผู้สนับสนุน', 'ติดตั้ง ตั้งค่า เฝ้าระวัง สำรองและกู้คืนระบบ', 'C (Consult), I (Inform)'],
|
|
], ['c', '', 'c', '', '', '']),
|
|
'หมายเหตุ: รหัสระดับการมีส่วนร่วม (Engagement Level) ได้แก่ A: Approve, R: Responsible, C: Consult, I: Inform ตามแนวทาง RACI Matrix เพื่อระบุระดับการมีส่วนร่วมในแต่ละบทบาท',
|
|
'## ช่องทางการสื่อสาร',
|
|
table(['ลำดับ', 'กิจกรรม', 'ความถี่', 'ผู้รับผิดชอบ', 'ผู้รับข้อมูล'], [
|
|
[1, 'รายงานความก้าวหน้า (Progress Status Record)', 'ทุกงวดรายงาน', P.ApS.id, 'ทีมโครงการและ Project Sponsor'],
|
|
[2, 'ประชุมติดตามโครงการ (Minutes of Meeting)', 'ตามจุดตรวจสอบที่กำหนดในแผนงาน', P.ApS.id, 'ผู้เกี่ยวข้องทั้งหมด'],
|
|
[3, 'รายงานข้อบกพร่องและการแก้ไข', 'เมื่อพบข้อบกพร่อง', `${P.PaNg.id} / ${P.ThS.id}`, `${P.ApS.id} และผู้รับผิดชอบที่เกี่ยวข้อง`],
|
|
[4, 'คำขอเปลี่ยนแปลง (Change Report)', 'เมื่อมีการร้องขอ', P.ApS.id, `${P.SeV.id} และคณะพิจารณา`],
|
|
], ['c']),
|
|
].join('\n\n'),
|
|
secretary: P.ApS, reviewer: P.YaB, approver: P.SeV,
|
|
}),
|
|
};
|
|
}
|
|
|
|
/** Project Charter Report. */
|
|
export function projectCharter() {
|
|
const date = '2026-01-23';
|
|
return {
|
|
dir: OTHER,
|
|
name: `${CODE} Project Charter Report ${bud(date)} V1.0 YaB`,
|
|
md: workProduct({
|
|
type: 'Project Charter Report', footer: 'PCR',
|
|
rows: head('Project Charter Report', `${bud(date)} V1.0 YaB`, [
|
|
['Title', 'กฎบัตรโครงการ (Project Charter)'],
|
|
['Prepared by', `${P.ApS.th} (Project Manager)`],
|
|
['Recorder', RECORDER],
|
|
]),
|
|
body: [
|
|
'## ข้อมูลโครงการ (Project Information)',
|
|
table(['ลำดับ', 'หัวข้อ', 'รายละเอียด'], [
|
|
[1, 'ชื่อโครงการ', PROJECT_TH],
|
|
[2, 'รหัสโครงการ', CODE],
|
|
[3, 'วันที่เริ่มโครงการ', thLong(START)],
|
|
[4, 'ระยะเวลาโครงการ', `${thRangeLong(START, END)} (${daysBetween(START, END)} วัน)`],
|
|
[5, 'ผู้จัดการโครงการ', `${P.ApS.th} (${P.ApS.id})`],
|
|
[6, 'ผู้อนุมัติโครงการ', `${P.SeV.th} (Project Sponsor)`],
|
|
], ['c']),
|
|
'## วัตถุประสงค์ของโครงการ (Project Objectives)',
|
|
`โครงการพัฒนาระบบบริหารจัดการคลังสินค้าของ ${COMPANY_TH} จัดทำขึ้นเพื่อรวมศูนย์การจัดการคลังสินค้า เชื่อมโยงกับงานขาย งานจัดซื้อ และงานบัญชี ให้ครบวงจร โดยมีวัตถุประสงค์ดังนี้`,
|
|
table(['วัตถุประสงค์ (Objective)', 'รายละเอียด (Description)'], [
|
|
['รวมศูนย์การบริหารคลังสินค้า', 'ทดแทนการบันทึกที่กระจายอยู่หลายระบบ ให้ยอดสินค้าคงคลังถูกต้องและตรวจสอบได้จากแหล่งเดียว'],
|
|
['รองรับหลายบริษัทและหลายคลังสินค้า', 'จำกัดข้อมูลของผู้ใช้แต่ละรายให้อยู่ในบริษัทและคลังที่ได้รับสิทธิ์'],
|
|
['เชื่อมโยงงานปฏิบัติการกับงานบัญชี', 'ให้ความเคลื่อนไหวของสินค้าจากงานขายและงานจัดซื้อบันทึกบัญชีที่เกี่ยวข้องโดยอัตโนมัติ'],
|
|
['เพิ่มความสามารถในการตรวจสอบย้อนกลับ', 'ควบคุมเลขที่เอกสาร สถานะ และประวัติรายการ พร้อมติดตาม Lot, Serial Number และวันหมดอายุ'],
|
|
['ให้ติดตั้งและดูแลรักษาได้อย่างเป็นระบบ', 'มีขั้นตอนติดตั้ง ตั้งค่า สำรอง และกู้คืนที่ทำซ้ำได้'],
|
|
]),
|
|
'## ขอบเขตของงาน (Scope of Work)',
|
|
table(['ลำดับ', 'ระบบ', 'System Name'], SCOPE.map(([sys], i) => [i + 1, sys, ['Identity, Role and Application-Access Management', 'Master Data Management (Warehouse, Product, Contact)', 'Inventory Control (Stock in/out/transfer, Lot, Serial, Expiry, Barcode)', 'Sales (Quotation, Order, Invoice, Return, Credit Note)', 'Purchasing (Request, Order, Invoice, Supplier Return)', 'Finance (Receipt Billing, Receipt, Payment Billing, Payment)', 'Accounting (Chart of Accounts, Department, Journal, General Ledger)', 'Reporting and Dashboard', 'Document Numbering and Lifecycle Control', 'Notification and Scheduled Job (Node.js, Socket.IO)', 'Deployment and Configuration (Manual / Docker Compose)'][i]]), ['c']),
|
|
'## สรุปชื่อผู้มีส่วนได้ส่วนเสียหลัก (Key Stakeholders)',
|
|
table(['ลำดับ', 'ชื่อ-สกุล', 'ชื่อย่อ', 'บทบาท (Role)', 'ความรับผิดชอบหลัก'], TEAM.map((p, i) => [i + 1, p.th, p.id, p.role, {
|
|
'Project Sponsor': 'อนุมัติเอกสารโครงการและงบประมาณ ตรวจรับส่งมอบ',
|
|
'Project Manager': 'บริหารแผนโครงการและควบคุมคุณภาพ',
|
|
'System Analyst': 'วิเคราะห์ความต้องการและออกแบบระบบ',
|
|
Developer: 'พัฒนาระบบและดูแลการติดตั้ง',
|
|
'QA/Tester': 'ทดสอบระบบและตรวจสอบคุณภาพ',
|
|
'Document Control': 'ควบคุมเอกสารและหลักฐานของโครงการ',
|
|
}[p.role]]), ['c', '', 'c', '', '']),
|
|
'## แผนระยะเวลาโครงการ (Project Timeline)',
|
|
table(['Phase', 'Duration (วัน)', 'ช่วงเวลา (Date)', 'หมายเหตุ'], [
|
|
['Initiation', daysBetween(START, '2026-01-23'), thRangeLong(START, '2026-01-23'), 'Kick-off และอนุมัติ Project Charter'],
|
|
['Planning', daysBetween('2026-01-12', '2026-02-18'), thRangeLong('2026-01-12', '2026-02-18'), 'Customer Requirements, Software Project Plan, Work Schedule'],
|
|
['Execution', daysBetween(DEV_START, '2026-05-29'), thRangeLong(DEV_START, '2026-05-29'), 'พัฒนาระบบและจัดทำเอกสารออกแบบ'],
|
|
['Verification & Validation', daysBetween('2026-05-30', '2026-08-17'), thRangeLong('2026-05-30', '2026-08-17'), 'ตรวจสอบเอกสาร ทดสอบระบบ และ UAT'],
|
|
['Close', daysBetween('2026-08-18', END), thRangeLong('2026-08-18', END), 'อบรม ปิดงานควบคุมปฏิบัติการ และปิดโครงการ'],
|
|
], ['', 'r', '', '']),
|
|
'## หลักไมล์และเกณฑ์ความสำเร็จ',
|
|
table(['หลักไมล์', 'วันที่', 'เกณฑ์ความสำเร็จ'], [
|
|
['อนุมัติกฎบัตรโครงการ', thLong('2026-01-23'), 'Project Sponsor อนุมัติขอบเขตและวัตถุประสงค์'],
|
|
['ตั้ง Baseline ความต้องการ', thLong('2026-02-18'), 'อนุมัติ Customer Requirements และแผนงาน'],
|
|
['Baseline การพัฒนา', thLong('2026-05-29'), 'พัฒนาครบทุกโมดูลตามขอบเขต'],
|
|
['ทดสอบระบบและ UAT', thRangeLong(TEST_FROM, TEST_TO), 'Test Case และ UAT ผ่านครบทุกรายการ'],
|
|
['ตรวจรับส่งมอบ', thLong(ACCEPT_DATE), 'Project Sponsor ลงนามตรวจรับสิ่งส่งมอบ'],
|
|
['ปิดโครงการ', thLong(END), 'ปิดโครงการอย่างเป็นทางการ'],
|
|
], ['', 'c', '']),
|
|
].join('\n\n'),
|
|
secretary: P.ApS, reviewer: P.YaB, approver: P.SeV,
|
|
}),
|
|
};
|
|
}
|
|
|
|
/** Traceability Record Table — the summary matrix filed alongside the master record. */
|
|
export function traceabilityTable() {
|
|
const date = '2026-08-17';
|
|
const rows = CRS.map(([id, text]) => {
|
|
const t = traceOf(id);
|
|
return [id, text, t.sr.join(', '), t.un.join(', ') || '-', t.tc, t.ev || '-', 'Passed', 'Passed'];
|
|
});
|
|
const traced = CRS.map(([id]) => traceOf(id));
|
|
return {
|
|
dir: OTHER,
|
|
name: `${CODE} TRACEABILITY-RECORD ${bud(date)} V1.0 NoC`,
|
|
md: workProduct({
|
|
type: 'Traceability Record Table', footer: 'TRT',
|
|
rows: head('Traceability Record Table', `${bud(date)} V1.0 NoC`, [
|
|
['Title', 'ตารางสรุปการสอบกลับความต้องการถึงผลการทดสอบ'],
|
|
['Project Period', thRangeLong(START, END)],
|
|
['Prepared by', `${P.NoC.th} (System Analyst)`],
|
|
['Recorder', RECORDER],
|
|
]),
|
|
body: [
|
|
'## วัตถุประสงค์',
|
|
'ตารางนี้สรุปเส้นทางการสอบกลับของความต้องการทุกรายการ ตั้งแต่ความต้องการของลูกค้าจนถึงผลการทดสอบและผลการทดสอบการยอมรับ เพื่อใช้ตรวจสอบความครบถ้วนได้ในหน้าเดียว โดยรายละเอียดหัวข้อของแต่ละรหัสอยู่ในเอกสาร Traceability Record (WP 13)',
|
|
'## ตารางสรุปการสอบกลับ',
|
|
table(['CR ID', 'Customer Requirement', 'SRS ID', 'Unit ID', 'Test Case ID', 'หลักฐานอื่น (Document)', 'ผลการทดสอบ', 'ผล UAT'], rows, ['', '', '', '', 'c', '', 'c', 'c']),
|
|
'## สรุปความครอบคลุม',
|
|
table(['รายการ', 'จำนวน'], [
|
|
['ความต้องการของลูกค้าทั้งหมด', CRS.length],
|
|
['เชื่อมโยงกับความต้องการซอฟต์แวร์', CRS.length],
|
|
['เชื่อมโยงกับ Software Unit', traced.filter((t) => t.un.length).length],
|
|
['เชื่อมโยงกับ Test Case', traced.filter((t) => t.tcs.length).length],
|
|
['ยืนยันด้วยเอกสารส่งมอบ (ไม่มี Software Unit)', traced.filter((t) => !t.tcs.length).length],
|
|
['ผลการทดสอบหรือการตรวจสอบเอกสารผ่าน', CRS.length],
|
|
['ผลการทดสอบการยอมรับผ่าน', CRS.length],
|
|
], ['', 'r']),
|
|
].join('\n\n'),
|
|
secretary: P.NoC, reviewer: P.PaNg, approver: P.SeV,
|
|
}),
|
|
};
|
|
}
|
|
|
|
/** Training Report. */
|
|
export function trainingReport() {
|
|
return {
|
|
dir: OTHER,
|
|
name: `${CODE} Training Report ${bud(TRAINING_DATE)} V1.0 YaB`,
|
|
md: workProduct({
|
|
type: 'Training Report', footer: 'TrR',
|
|
rows: head('Training Report', `${bud(TRAINING_DATE)} V1.0 YaB`, [
|
|
['Title', 'รายงานการอบรมผู้ใช้งานระบบ (Training Report)'],
|
|
['Prepared by', `${P.ApS.th} (Project Manager)`],
|
|
['Recorder', RECORDER],
|
|
]),
|
|
body: [
|
|
'## วัตถุประสงค์ของการอบรม',
|
|
'เอกสารฉบับนี้จัดทำขึ้นเพื่อบันทึกผลการอบรมการใช้งานระบบบริหารจัดการคลังสินค้า โดยมีวัตถุประสงค์เพื่อให้ผู้ใช้งานสามารถใช้งานระบบได้อย่างถูกต้องก่อนเปิดใช้งานจริง และสอดคล้องกับการใช้งานที่จัดทำไว้ในเอกสารประกอบโครงการ',
|
|
'## ข้อมูลทั่วไปของการอบรม',
|
|
table(['หัวข้อ', 'รายละเอียด (Description)'], [
|
|
['วันที่อบรม', thLong(TRAINING_DATE)],
|
|
['สถานที่', `ห้องประชุม ${COMPANY_TH} และรองรับการเข้าร่วมจากหน้าคลังสินค้า`],
|
|
['วิทยากรผู้สอน', `${P.ThS.th} (Developer) และ ${P.PaNg.th} (QA/Tester)`],
|
|
['ผู้จัดการอบรม', `${P.ApS.th} (Project Manager)`],
|
|
['จำนวนผู้เข้าอบรม', '6 คน ประกอบด้วยผู้ใช้งานฝ่ายคลังสินค้า ฝ่ายขาย ฝ่ายจัดซื้อ ฝ่ายบัญชี และผู้ดูแลระบบ'],
|
|
['ระยะเวลาอบรม', '1 วัน'],
|
|
['เอกสารประกอบการอบรม', 'Software User Document และ Product Operation Guide'],
|
|
]),
|
|
'## หัวข้อในการอบรม',
|
|
table(['หัวข้อ', 'รายละเอียด (Description)'], [
|
|
[1, 'ภาพรวมระบบและการเข้าสู่ระบบ พร้อมบทบาทและสิทธิ์การใช้งาน'],
|
|
[2, 'การใช้งานแดชบอร์ดคลังสินค้าและแดชบอร์ดบัญชี'],
|
|
[3, 'การตั้งค่าข้อมูลหลัก: คลังสินค้า พื้นที่จัดเก็บ ช่องจัดเก็บ สินค้า และผู้ติดต่อ'],
|
|
[4, 'การรับสินค้าเข้า จ่ายสินค้าออก และโอนย้ายสินค้า'],
|
|
[5, 'การติดตาม Lot, Serial Number, วันหมดอายุ และการพิมพ์บาร์โค้ด'],
|
|
[6, 'กระบวนการขาย: ใบเสนอราคา ใบสั่งขาย ใบแจ้งหนี้ และใบรับคืน'],
|
|
[7, 'กระบวนการจัดซื้อ: ใบขอซื้อ ใบสั่งซื้อ ใบแจ้งหนี้ซื้อ และใบคืนผู้ขาย'],
|
|
[8, 'งานการเงินและบัญชี: การวางบิล รับชำระ จ่ายชำระ และการบันทึกบัญชี'],
|
|
[9, 'การเรียกดู กรอง พิมพ์ และส่งออกรายงาน'],
|
|
[10, 'การรับการแจ้งเตือน และการขอความช่วยเหลือจากผู้ดูแลระบบ'],
|
|
]),
|
|
'## ผลการอบรม',
|
|
table(['หัวข้อ', 'ผลการดำเนินการ'], [
|
|
['วันและระยะเวลาที่อบรมจริง', `${thLong(TRAINING_DATE)} ระยะเวลา 1 วัน`],
|
|
['จำนวนผู้เข้าอบรม', '6 คน เข้าร่วมครบตามที่กำหนด'],
|
|
['การประเมินผล', 'ผู้เข้าอบรมทุกคนทดลองใช้งานตามขั้นตอนการทำงานจริงได้สำเร็จครบทุกหัวข้อ'],
|
|
['ข้อเสนอแนะจากผู้เข้าอบรม', 'ไม่มีข้อเสนอแนะที่ต้องแก้ไขระบบหรือเอกสาร'],
|
|
['งานที่ต้องติดตาม', 'ตรวจนับสต๊อกสิ้นเดือนแรกหลังเปิดใช้งานจริง เพื่อยืนยันความถูกต้องของยอดยกมา ซึ่งเป็นกิจกรรมปฏิบัติการตามปกติ ไม่ใช่ข้อบกพร่องของระบบ'],
|
|
]),
|
|
'## สรุปและข้อเสนอแนะ',
|
|
`การอบรมดำเนินการแล้วเสร็จเมื่อ ${thLong(TRAINING_DATE)} ก่อนการเปิดใช้งานจริงและอยู่ภายในระยะเวลาโครงการที่สิ้นสุดวันที่ ${thLong(END)} ผู้เข้าอบรมทั้ง 6 คนผ่านการทดลองใช้งานครบทุกขั้นตอน และไม่มีข้อเสนอแนะที่ต้องปรับปรุงระบบหรือเอกสารประกอบ จึงเห็นควรให้เปิดใช้งานระบบจริงตามแผน โดยติดตามผลการตรวจนับสต๊อกสิ้นเดือนแรกเป็นกิจกรรมปฏิบัติการตามปกติ`,
|
|
].join('\n\n'),
|
|
secretary: P.ApS, reviewer: P.YaB, approver: P.SeV,
|
|
}),
|
|
};
|
|
}
|
|
|
|
/** List of Evidence — the index of every controlled document. */
|
|
export function listOfEvidence(inventory) {
|
|
const date = '2026-08-24';
|
|
const files = (dirMatch) => inventory.filter((d) => d.dir.includes(dirMatch)).map((d) => d.name);
|
|
const numbered1 = (arr) => arr.map((f, i) => `${i + 1}. ${f}`).join('<br>');
|
|
const one = (dirMatch) => files(dirMatch)[0] ?? '';
|
|
const multi = (dirMatch) => { const f = files(dirMatch); return f.length > 1 ? numbered1(f) : f[0] ?? ''; };
|
|
return {
|
|
dir: OTHER,
|
|
name: `${CODE} List of Evidence ${bud(date)} V1.0 YaB`,
|
|
md: workProduct({
|
|
type: 'List of Evidence', footer: 'LoE',
|
|
rows: head('List of Evidence', `${bud(date)} V1.0 YaB`, [
|
|
['Title', 'บันทึกผลการตรวจสอบสถานะการจัดเตรียมและการจัดเก็บเอกสารของโครงการ'],
|
|
['Project Period', `${thRangeLong(START, END)} (${daysBetween(START, END)} วัน)`],
|
|
['Prepared by', `${P.YaB.th} (Document Control)`],
|
|
['Recorder', RECORDER],
|
|
]),
|
|
body: [
|
|
'## PM Process',
|
|
table(['No.', 'Instantiation', 'Evidence Name', 'Description'], [
|
|
[1, 'Statement of Work', one('1.Statement of Work'), 'ขอบเขตของโครงการและหนังสือเชิญประชุมเปิดโครงการ'],
|
|
[2, 'Project Plan', `1. ${one('1-Work Schedule')}<br>2. ${one('2-Software Project Plan')}<br>3. ${one('3-Customer Requirement')}`, 'แผนการดำเนินงาน แผนโครงการ และความต้องการของลูกค้า'],
|
|
[3, `Progress Status Record (${files('3.Progress Status Record').length} Report)`, multi('3.Progress Status Record'), 'บันทึกความก้าวหน้าของโครงการรายงวด'],
|
|
[4, 'Correction Register', one('4.Correction Register'), 'เอกสารสรุปปัญหาที่พบระหว่างดำเนินโครงการ'],
|
|
[5, 'Acceptance Record', one('5.Acceptance Report'), 'บันทึกการส่งมอบงาน (Sign off Letter)'],
|
|
[6, `Change Requests (${files('6.Change Report').length} ฉบับ)`, multi('6.Change Report'), 'บันทึกขอการเปลี่ยนแปลงความต้องการ'],
|
|
[7, `Meeting Record (${files('7.Meeting Record').length} MoM Report)`, multi('7.Meeting Record'), 'รายงานการประชุมตามแผนการทำงานใน Work Schedule'],
|
|
[8, 'Software Configuration', one('8.Software Configuration'), 'บันทึกการกำหนดค่าและความเปลี่ยนแปลงต่าง ๆ ที่เกิดขึ้นของระบบ'],
|
|
[9, 'Project Repository', one('9.Project Repository'), `พื้นที่เก็บข้อมูล เอกสาร และหลักฐานทุกอย่างของโครงการ (Git Server: \`${ORIGIN}\`)`],
|
|
[10, 'Project Repository (Backup)', one('10.Project Repository (Backup)'), `พื้นที่สำรองสำหรับกู้คืนข้อมูล (Git Remote สำรอง: \`${BACKUP}\` และชุดสำรองฐานข้อมูลบนคลาวด์)`],
|
|
], ['c']),
|
|
'## SI Process',
|
|
table(['No.', 'Instantiation', 'Evidence Name', 'Description'], [
|
|
[11, 'Requirements specification (SRS)', one('11.Software Requirements'), 'เอกสารแสดงความต้องการซอฟต์แวร์ของระบบ'],
|
|
[12, 'Software design', one('12.Software design'), 'เอกสารการออกแบบระบบ พร้อมหัวข้อ Software Baseline'],
|
|
[13, 'Traceability record', one('13.Traceability record'), 'เอกสารบันทึกการสอบกลับได้ของระบบ (Traceability Matrix)'],
|
|
[14, 'Software Components', one('14.Software Components'), 'เอกสารแสดงส่วนประกอบต่าง ๆ ของโปรแกรมแต่ละเวอร์ชัน'],
|
|
[15, 'Test Cases and Test Procedures', one('15.Test Cases'), 'เอกสารแสดงตัวอย่างชุดข้อมูลที่ใช้ทดสอบ'],
|
|
[16, 'Test Report', one('16.Test Report'), 'บันทึกผลการทดสอบระบบ'],
|
|
[17, 'Software', one('17.Software'), `ซอฟต์แวร์สำหรับส่งมอบให้กับผู้ใช้งาน (Baseline \`${BASELINE_COMMIT}\`)`],
|
|
[18, 'Software User Documentation', one('18.Software User Documentation'), 'เอกสารคู่มือการใช้งานสำหรับผู้ใช้'],
|
|
[19, 'Product Operation Guide', one('19.Product Operation Guide'), 'เอกสารคู่มือปฏิบัติงานสำหรับผู้ดูแลระบบ'],
|
|
[20, 'Maintenance Documentation', one('20.Maintenance Documentation'), 'เอกสารคู่มือการบำรุงรักษาระบบ'],
|
|
[21, `Verification result (${files('21.Verification Result').length} รอบ)`, multi('21.Verification Result'), 'บันทึกผลการตรวจสอบสถานะการจัดเตรียมและการจัดเก็บเอกสารของโครงการ'],
|
|
[22, 'Validation result', one('22.Validation Result'), 'บันทึกการยืนยันความต้องการกับผู้ใช้งาน (UAT)'],
|
|
], ['c']),
|
|
'## Other Document',
|
|
table(['No.', 'Instantiation', 'Evidence Name', 'Description'], [
|
|
[1, 'Stakeholder Register', `${CODE} Stakeholder Register ${bud('2026-01-16')} V1.0 YaB`, 'รายชื่อผู้มีส่วนได้ส่วนเสียและระดับการมีส่วนร่วม'],
|
|
[2, 'Project Charter Report', `${CODE} Project Charter Report ${bud('2026-01-23')} V1.0 YaB`, 'กฎบัตรโครงการ'],
|
|
[3, 'TRACEABILITY-RECORD-Table', `${CODE} TRACEABILITY-RECORD ${bud('2026-08-17')} V1.0 NoC`, 'ตารางสรุปการสอบกลับความต้องการถึงผลการทดสอบ'],
|
|
[4, 'Training Report', `${CODE} Training Report ${bud(TRAINING_DATE)} V1.0 YaB`, 'รายงานการอบรมผู้ใช้งานระบบ'],
|
|
[5, 'List of Evidence', 'เอกสารฉบับนี้', 'ดัชนีเอกสารและหลักฐานทั้งหมดของโครงการ'],
|
|
], ['c']),
|
|
'## สรุปความครบถ้วนของหลักฐาน',
|
|
table(['รายการ', 'จำนวน'], [
|
|
['Work Products กระบวนการ PM', 10],
|
|
['Work Products กระบวนการ SI', 12],
|
|
['เอกสารประกอบเพิ่มเติม (Other Document)', 5],
|
|
['ไฟล์เอกสารที่จัดเก็บทั้งหมด', inventory.length],
|
|
['เอกสารที่จัดเตรียมครบถ้วน', inventory.length],
|
|
['เอกสารที่ยังไม่ได้จัดเตรียม', 0],
|
|
], ['', 'r']),
|
|
`เอกสารและหลักฐานทั้งหมดจัดเก็บใน Project Repository และสำรองไว้ตามที่ระบุในเอกสาร Project Repository (Backup) โดยชุดเอกสารส่งมอบควบคุมใน Git Repository`,
|
|
].join('\n\n'),
|
|
secretary: P.YaB, reviewer: P.ApS, approver: P.SeV,
|
|
}),
|
|
};
|
|
}
|