1197 lines
104 KiB
Plaintext
1197 lines
104 KiB
Plaintext
From: <Saved by Blink>
|
||
Snapshot-Content-Location: https://docs.google.com/document/u/0/d/1LMjIhp2TCy9QpzTUzL55cP0dx61WM4epmr8qy9N9Rgc/mobilebasic?hl=th-TH&pli=1
|
||
Subject: LCBP3-DMS Requirements Specification (v2.0)
|
||
Date: Thu, 16 Oct 2025 22:57:30 +0700
|
||
MIME-Version: 1.0
|
||
Content-Type: multipart/related;
|
||
type="text/html";
|
||
boundary="----MultipartBoundary--zmGvipyjWUpT0gAfLJbw3hmbaeNqVxyLAosKXVU9r0----"
|
||
|
||
|
||
------MultipartBoundary--zmGvipyjWUpT0gAfLJbw3hmbaeNqVxyLAosKXVU9r0----
|
||
Content-Type: text/html
|
||
Content-ID: <frame-7BAEF33BE4BD3D5B83D4637309DE737B@mhtml.blink>
|
||
Content-Transfer-Encoding: binary
|
||
Content-Location: https://docs.google.com/document/u/0/d/1LMjIhp2TCy9QpzTUzL55cP0dx61WM4epmr8qy9N9Rgc/mobilebasic?hl=th-TH&pli=1
|
||
|
||
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css" href="cid:css-76c0a50f-d092-48aa-9377-7e013611e5a0@mhtml.blink" /><link rel="stylesheet" type="text/css" href="cid:css-4baa57de-b40a-46ea-b008-eea5f6a84227@mhtml.blink" /><link rel="stylesheet" type="text/css" href="cid:css-941c3c4b-eff7-4021-b2a8-f5f59715b21d@mhtml.blink" /><title>LCBP3-DMS Requirements Specification (v2.0)</title><link rel="shortcut icon" href="https://ssl.gstatic.com/docs/documents/images/kix-favicon-2023q4.ico"><meta property="og:title" content="LCBP3-DMS Requirements Specification (v2.0)"><meta property="og:type" content="article"><meta property="og:site_name" content="Google Docs"><meta property="og:url" content="https://docs.google.com/document/u/0/d/1LMjIhp2TCy9QpzTUzL55cP0dx61WM4epmr8qy9N9Rgc/mobilebasic?hl=th-TH&pli=1&usp=embed_facebook"><meta property="og:description" content="LCBP3-DMS: Requirements Specification (v2.0) เอกสารนี้สรุปข้อกำหนดทางธุรกิจ, สถาปัตยกรรมทางเทคนิค, และรายละเอียดการ υλοποίηση (Implementation) สำหรับระบบบริหารจัดการเอกสารโครงการ (Document Management System) 1. สถาปัตยกรรมและเทคโนโลยี (System Architecture & Technology Stack) ระบบใช้สถาปัตยกรรมแบบ..."><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,user-scalable=0"><meta name="referrer" content="strict-origin-when-cross-origin"></head><body><div><div class="docs-ml-promotion docs-ml-promotion-off-screen" role="alertdialog" aria-labelledby="docs-ml-promotion-aria-label" aria-hidden="true"><div id="docs-ml-promotion-aria-label" style="display:none;">Alert message displayed.</div><div class="docs-ml-promotion-content"><div class="docs-ml-promotion-header"><span class="docs-ml-promotion-app-icon-container" aria-hidden="true"><div class="docs-ml-icon docs-ml-promotion-app-icon"><svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 36 36"><path fill="none" d="M0 0h36v36H0z"></path><path fill="#fff" d="M10.9 18.4h14.2V21H10.9zM10.9 22.9h10.5v2.6H10.9z"></path><path fill="#1967d2" d="M21.8 9.8l4.5.8 3.7-.8-8.2-8.3-1.2 3.9z"></path><path fill="#fff" d="M10.9 13.9h14.2v2.6H10.9z"></path><path d="M21.8 9.8V1.5H8.2C7 1.5 6 2.5 6 3.8v28.5c0 1.2 1 2.2 2.2 2.2h19.5c1.2 0 2.2-1 2.2-2.2V9.8h-8.1zM21 25.1h-9.8v-1.9H21v1.9zm3.8-4.5H11.2v-1.9h13.5v1.9zm0-4.5H11.2v-1.9h13.5v1.9z" fill="#4285f4"></path></svg></div></span><span class="docs-ml-promotion-text"><div class="docs-ml-promotion-text-heading">Edit with the Docs app</div><div class="docs-ml-promotion-text-body">Make tweaks, leave comments, and share with others to edit at the same time.</div></span></div><div class="docs-ml-promotion-action-row"><span class="docs-ml-promotion-action-container"><span class="docs-ml-promotion-action-button-wrapper docs-ml-promotion-no-button-wrapper" role="button" tabindex="0"><span class="docs-ml-promotion-action-button docs-ml-promotion-no-button">NO THANKS</span></span></span><span class="docs-ml-promotion-action-container"><span class="docs-ml-promotion-action-button-wrapper docs-ml-promotion-yes-button-wrapper" role="button" tabindex="0"><span class="docs-ml-promotion-action-button docs-ml-promotion-yes-button">USE THE APP</span></span></span></div></div></div></div><div id="docs-ml-header-id" class="docs-ml-header"><span class="docs-ml-header-item docs-ml-header-drive-link"><div id="docs-ml-header-drive-link-aria-label" style="display:none;">Go to Drive</div><a href="https://drive.google.com/u/0?usp=docs_web" aria-labelledby="docs-ml-header-drive-link-aria-label" role="button"><div class="docs-ml-header-icon-container"><div class="docs-ml-icon docs-ml-header-icon docs-ml-arrow-back-dir"><div class="docs-ml-img-container docs-ml-img docs-ml-arrow-back-icon"></div></div></div></a></span><span class="docs-ml-header-item docs-ml-header-document-title"><div class="docs-ml-header-document-title-text">LCBP3-DMS Requirements Specification (v2.0)</div></span><div id="docs-ml-header-edit-button-aria-label" style="display:none;">Edit</div><span class="docs-ml-header-item docs-ml-header-edit-button" aria-labelledby="docs-ml-header-edit-button-aria-label" role="button" tabindex="0"><div class="docs-ml-header-icon-container"><div class="docs-ml-icon docs-ml-header-icon"><div class="docs-ml-img-container docs-ml-img docs-ml-edit-icon"></div></div></div></span></div><div class="app-container"><div class="doc-container"><div class="doc"><div class="doc-content" style="background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt"><h1 style="padding-top:12pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:24pt;padding-bottom:12pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:24pt;font-family:"Arial";font-style:normal">LCBP3-DMS: Requirements Specification (v2.0)</span></h1><p style="padding-top:0pt;margin:0;color:#000000;padding-left:0;font-size:11pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">เอกสารนี้สรุปข้อกำหนดทางธุรกิจ, สถาปัตยกรรมทางเทคนิค, และรายละเอียดการ υλοποίηση (Implementation) สำหรับระบบบริหารจัดการเอกสารโครงการ (Document Management System)</span></p><h2 style="padding-top:0pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:"Arial";font-style:normal">1. สถาปัตยกรรมและเทคโนโลยี (System Architecture & Technology Stack)</span></h2><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;text-align:left"><span>ระบบใช้สถาปัตยกรรมแบบ </span><span style="font-weight:700">Headless/API-First</span><span> ที่ทันสมัย ทำงานทั้งหมดบน QNAP Server ผ่าน </span><span style="font-weight:700">Container Station</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เพื่อความสะดวกในการจัดการและบำรุงรักษา</span></p><ul class="lst-kix_list_1-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">1.1 Infrastructure & Environment:</span></li></ul><ul class="lst-kix_list_2-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Server:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> QNAP (Model: TS-473A, RAM: 32GB, CPU: AMD Ryzen V1500B)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Containerization:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> Docker & Docker Compose</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Development Environment:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> VS Code on Windows 11</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Domain:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> np-dms.work (มี Fixed IP)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Docker Network:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ทุก Service จะเชื่อมต่อผ่านเครือข่ายกลางชื่อ lcbp3 เพื่อให้สามารถสื่อสารกันได้</span></li></ul><ul class="lst-kix_list_1-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">1.2 Code Hosting:</span></li></ul><ul class="lst-kix_list_3-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Service:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> Gitea (Self-hosted on QNAP)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Domain:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> git.np-dms.work</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">หน้าที่:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เป็นศูนย์กลางในการเก็บและจัดการเวอร์ชันของโค้ด (Source Code) สำหรับทุกส่วน</span></li></ul><ul class="lst-kix_list_1-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">1.3 Backend / Data Platform:</span></li></ul><ul class="lst-kix_list_4-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Framework:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> NestJS (Node.js, TypeScript, ESM)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Domain:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> backend.np-dms.work</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">หน้าที่:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> จัดการโครงสร้างข้อมูล (Data Models), สร้าง API, จัดการสิทธิ์ผู้ใช้ (Roles & Permissions), และสร้าง Workflow ทั้งหมดของระบบ</span></li></ul><ul class="lst-kix_list_1-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">1.4 Database:</span></li></ul><ul class="lst-kix_list_5-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Service:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> MariaDB</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">หน้าที่:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ฐานข้อมูลหลักสำหรับเก็บข้อมูลทั้งหมด</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Tooling:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> DBeaver (Community Edition) สำหรับการออกแบบและจัดการฐานข้อมูล</span></li></ul><ul class="lst-kix_list_1-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">1.5 Frontend:</span></li></ul><ul class="lst-kix_list_6-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Framework:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> Next.js (App Router, React, TypeScript, ESM)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Styling:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> Tailwind CSS + PostCSS</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Component Library:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> shadcn/ui</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Domain:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> lcbp3.np-dms.work</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">หน้าที่:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> สร้างหน้าตาเว็บแอปพลิเคชันสำหรับให้ผู้ใช้งานเข้ามาดู Dashboard, จัดการเอกสาร, และติดตามงาน โดยจะสื่อสารกับ Backend ผ่าน API</span></li></ul><ul class="lst-kix_list_1-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">1.6 Reverse Proxy:</span></li></ul><ul class="lst-kix_list_7-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Service:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> Nginx Proxy Manager</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">หน้าที่:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เป็นด่านหน้าในการรับ-ส่งข้อมูล จัดการโดเมนทั้งหมด, ทำหน้าที่เป็น Proxy ชี้ไปยัง Service ที่ถูกต้อง, และจัดการ SSL Certificate (HTTPS) ให้อัตโนมัติ</span></li></ul><h2 style="padding-top:11.2pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:12pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:"Arial";font-style:normal">2. ข้อกำหนดด้านฟังก์ชันการทำงาน (Functional Requirements)</span></h2><h3 style="padding-top:0pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:14pt;padding-bottom:12pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:14pt;font-family:"Arial";font-style:normal">2.1 การจัดการโครงสร้างโครงการและองค์กร</span></h3><ul class="lst-kix_list_8-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">2.1.1 โครงการ (Projects):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ระบบต้องสามารถจัดการเอกสารภายในหลายโครงการได้ (ปัจจุบันมี 4 โครงการ และจะเพิ่มขึ้นในอนาคต)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">2.1.2 สัญญา (Contracts):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ในแต่ละโครงการ มีได้หลายสัญญา หรืออย่างน้อย 1 สัญญา</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">2.1.3 องค์กร (Organizations):</span></li></ul><ul class="lst-kix_list_9-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">มีหลายองค์กรในโครงการ บางองค์กรเช่น Owner, Designer และ Consultant สามารถอยู่ในหลายโครงการและหลายสัญญาได้</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Contractor จะถือ 1 สัญญา และอยู่ใน 1 โครงการเท่านั้น</span></li></ul><h3 style="padding-top:12pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:14pt;padding-bottom:12pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:14pt;font-family:"Arial";font-style:normal">2.2 การจัดการเอกสาร (Correspondence Management)</span></h3><ul class="lst-kix_list_a-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">2.2.1 ประเภทเอกสาร:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ระบบต้องรองรับเอกสารหลายประเภท (Types) เช่น จดหมาย (Letter), อีเมล์ (Email), Request for Information (RFI), และสามารถเพิ่มประเภทใหม่ได้ในภายหลัง</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">2.2.2 การสร้างเอกสาร:</span></li></ul><ul class="lst-kix_list_b-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ผู้ใช้ที่มีสิทธิ์ (เช่น Document Control) สามารถสร้างเอกสารรอไว้ในสถานะ "ฉบับร่าง" (Draft) ได้ ซึ่งผู้ใช้งานต่างองค์กรจะมองไม่เห็น</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">เมื่อกด "Submitted" แล้ว การแก้ไข, ถอนเอกสารกลับไปสถานะ Draft, หรือยกเลิก (Cancel) จะต้องทำโดยผู้ใช้ระดับ Admin ขึ้นไป พร้อมระบุเหตุผล</span></li></ul><ul class="lst-kix_list_a-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">2.2.3 การอ้างอิงและจัดกลุ่ม:</span></li></ul><ul class="lst-kix_list_c-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">เอกสารสามารถอ้างถึง (Reference) เอกสารฉบับก่อนหน้าได้หลายฉบับ</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">สามารถกำหนด Tag ได้หลาย Tag เพื่อจัดกลุ่มและใช้ในการค้นหาขั้นสูง</span></li></ul><ul class="lst-kix_list_a-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">2.2.4 ประวัติการแก้ไข (Revisions):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เอกสารสามารถมีได้หลาย Revision โดยระบบจะเก็บประวัติการแก้ไขทั้งหมด</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">2.2.5 การจัดเก็บ:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เอกสารและไฟล์แนบจะถูกจัดเก็บในโฟลเดอร์บน Server โดยมีการอ้างอิงข้อมูล (Metadata) ในฐานข้อมูล และสามารถจัดเรียงตามวันที่ออกเอกสาร (Issue Date) ได้</span></li></ul><h3 style="padding-top:12pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:14pt;padding-bottom:12pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:14pt;font-family:"Arial";font-style:normal">2.3 การจัดการเอกสารทางเทคนิค (Technical Documents & Workflow)</span></h3><ul class="lst-kix_list_d-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">2.3.1 ประเภท:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เป็นชนิดหนึ่งของ Correspondence ที่มีลักษณะเฉพาะคือต้องได้รับการอนุมัติ และมีประเภทดังนี้:</span></li></ul><ul class="lst-kix_list_e-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Request for Material Approval (RFA_Mat)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Request for Method statement Approval (RFA_MST)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Request for Document Approval (RFA_DOC)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Request for Drawing Approval (RFA_DWG)</span></li></ul><ul class="lst-kix_list_d-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">2.3.2 Workflow การอนุมัติ:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ต้องรองรับกระบวนการอนุมัติที่ซับซ้อนและเป็นลำดับ เช่น ส่งจาก Originator -> Org1 -> Org2 -> Org3 แล้วส่งผลกลับตามลำดับเดิม</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">2.3.3 การจัดการ Drawing (RFA_DWG):</span></li></ul><ul class="lst-kix_list_f-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">เอกสาร RFA_DWG จะประกอบไปด้วย Shop Drawing (Shp_DWG) หลายแผ่น ซึ่งแต่ละแผ่นมี Revision ของตัวเอง</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Shop Drawing สามารถอ้างอิงถึง Contract Drawing (Con_DWG) หลายแผ่น หรือไม่อ้างถึงก็ได้</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ระบบต้องมีส่วนสำหรับจัดการข้อมูล Master Data ของทั้ง Shop Drawing และ Contract Drawing แยกจากกัน</span></li></ul><h3 style="padding-top:12pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:14pt;padding-bottom:12pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:14pt;font-family:"Arial";font-style:normal">2.4 ใบเวียนเอกสารภายใน (Internal Circulation Sheet)</span></h3><ul class="lst-kix_list_10-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">2.4.1 วัตถุประสงค์:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> การสื่อสาร (Correspondence) ทุกฉบับ จะมีใบเวียนเอกสารเพื่อควบคุมและมอบหมายงานภายในองค์กร (สามารถดูและแก้ไขได้เฉพาะคนในองค์กร)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">2.4.2 การระบุผู้รับผิดชอบ:</span></li></ul><ul class="lst-kix_list_11-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ผู้รับผิดชอบหลัก (Main): มีได้หลายคน</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ผู้ร่วมปฏิบัติงาน (Action): มีได้หลายคน</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">ผู้ที่ต้องรับทราบ (Information): มีได้หลายคน</span></li></ul><ul class="lst-kix_list_10-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">2.4.3 การติดตามงาน:</span></li></ul><ul class="lst-kix_list_12-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">สามารถกำหนดวันแล้วเสร็จ (Deadline) สำหรับผู้รับผิดชอบประเภท Main และ Action ได้</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">มีระบบแจ้งเตือนเมื่อมี Circulation ใหม่ และแจ้งเตือนล่วงหน้าก่อนถึงวันแล้วเสร็จ</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">สามารถปิด Circulation ได้เมื่อดำเนินการตอบกลับไปยังองค์กรผู้ส่ง (Originator) แล้ว</span></li></ul><h2 style="padding-top:11.2pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:"Arial";font-style:normal">3. ข้อกำหนดด้านสิทธิ์และการเข้าถึง (Access Control Requirements)</span></h2><ul class="lst-kix_list_13-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">3.1 ภาพรวม:</span><span> ผู้ใช้และองค์กรสามารถดูและแก้ไขเอกสารได้ตามสิทธิ์ที่ได้รับ โดยระบบสิทธิ์จะเป็นแบบ </span><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">Role-Based Access Control (RBAC)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">3.2 ระดับของสิทธิ์:</span></li></ul><ul class="lst-kix_list_14-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Global Roles:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> สิทธิ์ในภาพรวมของระบบ</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Project-Specific Roles:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> สิทธิ์ที่ถูกกำหนดให้ผู้ใช้สำหรับโครงการนั้นๆ โดยเฉพาะ (เช่น เป็น Editor ในโครงการ A แต่เป็น Viewer ในโครงการ B)</span></li></ul><ul class="lst-kix_list_13-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">3.3 บทบาท (Roles) พื้นฐาน:</span></li></ul><ul class="lst-kix_list_15-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Superadmin:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ไม่มีข้อจำกัดใดๆ สามารถจัดการได้ทุกอย่างข้ามองค์กร</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Admin:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> มีสิทธิ์เต็มที่ แต่จำกัดเฉพาะในองค์กรที่ตัวเองสังกัด สามารถจัดการผู้ใช้ในองค์กรได้</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Document Control / Editor:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> สามารถ เพิ่ม/แก้ไข เอกสาร เฉพาะในองค์กรที่ตัวเองสังกัด ไม่สามารถจัดการผู้ใช้ได้</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">สามารถสร้าง Role ใหม่และกำหนดสิทธิ์ (Permissions) เพิ่มเติมได้ในภายหลังผ่านหน้า Admin Panel</span></li></ul><ul class="lst-kix_list_13-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">3.4 การบังคับใช้สิทธิ์:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> สิทธิ์ขององค์กรจะครอบคลุมสิทธิ์ของผู้ใช้ และการเข้าถึงข้อมูลที่เกี่ยวข้องกับโครงการ (เช่น การแก้ไขเอกสาร) จะถูกตรวจสอบเทียบกับสิทธิ์ที่ผู้ใช้มีในโครงการนั้นๆ โดยเฉพาะ</span></li></ul><h2 style="padding-top:11.2pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:"Arial";font-style:normal">4. ข้อกำหนดด้านผู้ใช้งาน (User Interface & Experience)</span></h2><ul class="lst-kix_list_16-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">4.1 Layout หลัก:</span><span> หน้าเว็บใช้รูปแบบ </span><span style="font-weight:700">App Shell</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ที่ประกอบด้วย:</span></li></ul><ul class="lst-kix_list_17-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Navbar (ส่วนบน):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> แสดงชื่อระบบ, เมนูผู้ใช้ (Profile), เมนูสำหรับ Admin/Superadmin (จัดการผู้ใช้, จัดการสิทธิ์), และปุ่ม Login/Logout</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Sidebar (ด้านข้าง):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เป็นเมนูหลักสำหรับเข้าถึงส่วนที่เกี่ยวกับเอกสารทั้งหมด เช่น Dashboard, Correspondences, RFA, Drawings</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">Main Content Area:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> พื้นที่สำหรับแสดงเนื้อหาหลักของหน้าที่เลือก</span></li></ul><ul class="lst-kix_list_16-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">4.2 หน้า Landing Page:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เป็นหน้าแรกที่แสดงข้อมูลบางส่วนของโครงการสำหรับผู้ใช้ที่ยังไม่ได้ล็อกอิน</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">4.3 หน้า Dashboard:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> เป็นหน้าแรกหลังจากล็อกอิน ประกอบด้วย:</span></li></ul><ul class="lst-kix_list_18-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">การ์ดสรุปภาพรวม (KPI Cards):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> แสดงข้อมูลสรุปที่สำคัญขององค์กร เช่น จำนวนเอกสาร, งานที่เกินกำหนด</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">ตาราง "งานของฉัน" (My Tasks Table):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> แสดงรายการงานทั้งหมดจาก Circulation ที่ผู้ใช้ต้องดำเนินการ</span></li></ul><ul class="lst-kix_list_16-0" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">4.4 การติดตามสถานะ:</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> องค์กรสามารถติดตามสถานะเอกสารทั้งของตนเอง (Originator) และสถานะเอกสารที่ส่งมาถึงตนเอง (Recipient)</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">4.5 การจัดการข้อมูลส่วนตัว (Profile Page):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ผู้ใช้สามารถจัดการข้อมูลส่วนตัวและเปลี่ยนรหัสผ่านของตนเองได้</span></li></ul><h2 style="padding-top:11.2pt;margin:0;color:#000000;font-weight:700;padding-left:0;font-size:18pt;padding-bottom:11.2pt;font-family:"Arial";line-height:1.0;text-align:left;padding-right:0"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:18pt;font-family:"Arial";font-style:normal">5. ข้อกำหนดที่ไม่ใช่ฟังก์ชันการทำงาน (Non-Functional Requirements)</span></h2><ul class="lst-kix_list_19-0 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">5.1 การบันทึกการกระทำ (Audit Log):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ทุกการกระทำที่สำคัญของผู้ใช้ (สร้าง, แก้ไข, ลบ, ส่ง) จะถูกบันทึกไว้ใน audit_logs เพื่อการตรวจสอบย้อนหลัง</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">5.2 การค้นหา (Search):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> ระบบต้องมีฟังก์ชันการค้นหาขั้นสูง ที่สามารถค้นหาเอกสารจากหลายเงื่อนไขพร้อมกันได้ เช่น ค้นหาจากชื่อเรื่อง, ประเภท, วันที่, และ Tag</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">5.3 การทำรายงาน (Reporting):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> สามารถจัดทำรายงานสรุปแยกประเภทของ Correspondence ประจำวัน, สัปดาห์, เดือน, และปีได้</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="font-weight:700">5.4 ประสิทธิภาพ (Performance):</span><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"> มีการใช้ Caching กับข้อมูลที่เรียกใช้บ่อย และใช้ Pagination ในตารางข้อมูลเพื่อจัดการข้อมูลจำนวนมาก</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:30pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:700;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">5.5 ความปลอดภัย (Security):</span></li></ul><ul class="lst-kix_list_1a-1 start" style="padding:0;margin:0"><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">มีระบบ Rate Limiting เพื่อป้องกันการโจมตีแบบ Brute-force</span></li><li style="padding:0;color:#000000;font-size:11pt;line-height:1.0;margin-right:0;margin-left:60pt;font-family:"Arial";margin-top:0;margin-bottom:0;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal">การจัดการ Secret (เช่น รหัสผ่าน DB, JWT Secret) จะต้องทำผ่าน Environment Variable ของ Docker เพื่อความปลอดภัยสูงสุด</span></li></ul><p style="padding:0;margin:0;color:#000000;font-size:11pt;font-family:"Arial";line-height:1.0;height:11pt;text-align:left"><span style="color:#000000;font-weight:400;text-decoration:none;vertical-align:baseline;font-size:11pt;font-family:"Arial";font-style:normal"></span></p></div></div></div></div></body></html>
|
||
------MultipartBoundary--zmGvipyjWUpT0gAfLJbw3hmbaeNqVxyLAosKXVU9r0----
|
||
Content-Type: text/css
|
||
Content-Transfer-Encoding: binary
|
||
Content-Location: cid:css-941c3c4b-eff7-4021-b2a8-f5f59715b21d@mhtml.blink
|
||
|
||
@charset "utf-8";
|
||
|
||
.lst-kix_list_14-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_14-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_14-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_14-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_14-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_14-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_14-6 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_9-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_9-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_9-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_9-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_9-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_9-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_9-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_9-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_9-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_14-2 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_17-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_17-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_17-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_17-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_17-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_17-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_17-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_17-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_14-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_17-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_5-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_5-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_5-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_8-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_5-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_8-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-7 { list-style-type: none; }
|
||
|
||
.lst-kix_list_5-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_5-5 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_8-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_8-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_6-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_6-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_6-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_6-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_16-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_16-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_16-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_6-2 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_16-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_16-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_16-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_16-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_16-4 { list-style-type: none; }
|
||
|
||
.lst-kix_list_6-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_16-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_6-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_6-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_6-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_13-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_15-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_15-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_19-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_19-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_4-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-5 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_19-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_19-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_19-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_19-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_19-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_19-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_15-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_15-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_19-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_12-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_12-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_13-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_18-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_13-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_12-5 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_18-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_18-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_18-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_18-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_12-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_18-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_18-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_18-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_18-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_13-1 > li::before { content: "○ "; }
|
||
|
||
ul.lst-kix_list_f-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_f-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_f-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_f-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_f-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_f-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_f-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_f-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_f-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_5-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_5-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_5-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_8-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_5-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_8-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_3-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_f-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_a-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_f-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_8-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_13-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_13-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_13-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_13-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_13-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_3-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_13-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_8-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_a-2 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_13-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_a-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_11-1 > li::before { content: "○ "; }
|
||
|
||
ul.lst-kix_list_13-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_13-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_f-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_a-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_f-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_11-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_8-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_e-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_16-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_e-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_e-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_16-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_e-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_e-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_e-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_e-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_e-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_e-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_4-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_17-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_e-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_e-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_e-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_e-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_16-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_4-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_16-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_4-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_16-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_4-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_4-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_12-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_12-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_17-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_12-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_12-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_12-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_12-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_17-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_12-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_17-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_17-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_12-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_12-7 { list-style-type: none; }
|
||
|
||
.lst-kix_list_7-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_2-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_7-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_10-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_7-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-4 { list-style-type: none; }
|
||
|
||
.lst-kix_list_13-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_b-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_b-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_18-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_18-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_7-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_7-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_7-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_15-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_10-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_10-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_15-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_15-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_15-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_15-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_15-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_15-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_4-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_15-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_15-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_15-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_9-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_15-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_15-4 { list-style-type: none; }
|
||
|
||
.lst-kix_list_9-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_11-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_12-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_6-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_1a-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_6-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_11-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_6-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_6-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_12-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_6-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_13-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_14-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_14-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_14-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_13-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_14-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_14-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_14-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_14-7 { list-style-type: none; }
|
||
|
||
.lst-kix_list_2-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_14-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_14-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_12-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_c-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_19-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_19-1 > li::before { content: "○ "; }
|
||
|
||
ul.lst-kix_list_b-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_c-1 > li::before { content: "○ "; }
|
||
|
||
ul.lst-kix_list_b-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_b-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_c-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_c-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_19-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_b-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_b-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_b-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_b-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_c-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_19-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_19-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_b-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_b-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1a-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1a-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1a-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_19-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1a-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_19-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_19-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_19-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_a-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_a-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_a-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_a-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_a-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_a-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_a-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_a-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_d-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_d-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_d-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_d-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_18-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_d-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_d-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_18-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_18-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_d-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_d-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_c-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_a-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_c-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_c-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_d-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_c-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_d-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_d-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_d-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_2-5 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_d-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_d-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_b-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_d-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_d-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_d-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_d-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1a-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1a-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_b-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_18-6 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_3-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1a-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1a-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1a-4 { list-style-type: none; }
|
||
|
||
.lst-kix_list_10-1 > li::before { content: "○ "; }
|
||
|
||
ul.lst-kix_list_1a-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_18-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_18-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_1a-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1a-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_b-6 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_3-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_3-4 { list-style-type: none; }
|
||
|
||
.lst-kix_list_10-7 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_10-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_10-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_11-7 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_11-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_b-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_11-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_11-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_11-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_11-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_b-2 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_11-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_11-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_9-2 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_11-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_9-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_c-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_c-7 { list-style-type: none; }
|
||
|
||
.lst-kix_list_9-6 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_c-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_c-1 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_c-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_9-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_c-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_a-0 > li::before { content: "● "; }
|
||
|
||
ul.lst-kix_list_c-5 { list-style-type: none; }
|
||
|
||
.lst-kix_list_11-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_c-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_c-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-8 { list-style-type: none; }
|
||
|
||
.lst-kix_list_11-5 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_2-2 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1a-4 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_2-3 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-0 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_9-8 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_2-6 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1a-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1-1 > li::before { content: "○ "; }
|
||
|
||
ul.lst-kix_list_2-7 { list-style-type: none; }
|
||
|
||
.lst-kix_list_11-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_2-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_2-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_10-0 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1a-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_1-3 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_10-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_1a-8 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_10-7 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1-7 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_10-6 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_10-5 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_10-4 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_10-3 { list-style-type: none; }
|
||
|
||
.lst-kix_list_1-5 > li::before { content: "■ "; }
|
||
|
||
ul.lst-kix_list_10-2 { list-style-type: none; }
|
||
|
||
ul.lst-kix_list_10-1 { list-style-type: none; }
|
||
|
||
.lst-kix_list_2-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_2-3 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_3-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_3-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_8-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_8-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_3-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_f-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_8-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_8-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_3-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_f-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_a-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_f-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_11-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_a-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_f-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_a-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_a-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_f-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_e-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_16-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_17-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_e-4 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_16-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_16-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_e-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_16-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_e-0 > li::before { content: "● "; }
|
||
|
||
.lst-kix_list_17-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_17-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_17-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_7-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_7-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_b-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_18-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_13-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_15-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_b-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_10-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_4-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_15-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_10-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_9-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_e-8 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_9-5 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_12-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_11-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_1a-1 > li::before { content: "○ "; }
|
||
|
||
.lst-kix_list_1-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_12-6 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_2-2 > li::before { content: "■ "; }
|
||
|
||
.lst-kix_list_13-2 > li::before { content: "■ "; }
|
||
------MultipartBoundary--zmGvipyjWUpT0gAfLJbw3hmbaeNqVxyLAosKXVU9r0----
|
||
Content-Type: image/png
|
||
Content-Transfer-Encoding: binary
|
||
Content-Location: https://ssl.gstatic.com/docs/common/mobileweb_sprite1.png
|
||
|
||
<EFBFBD>PNG
|
||
|
||
|