# 📝 Documents Management Sytem Version 1.1.0: Application Requirements Specification ## 📌 1. āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ āļŠāļĢāđ‰āļēāļ‡āđ€āļ§āđ‡āļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāđˆāļ™āļŠāļģāļŦāļĢāļąāļšāļĢāļ°āļšāļšāļšāļĢāļīāļŦāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāđ‚āļ„āļĢāļ‡āļāļēāļĢ (Document Management System) āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāđāļĨāļ°āļ„āļ§āļšāļ„āļļāļĄ āļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢāļ”āđ‰āļ§āļĒāđ€āļ­āļāļŠāļēāļĢāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™ āļ­āļĒāđˆāļēāļ‡āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž * āļĄāļĩāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļŦāļĨāļąāļāđƒāļ™āļāļēāļĢāļ­āļąāļ›āđ‚āļŦāļĨāļ” āļˆāļąāļ”āđ€āļāđ‡āļš āļ„āđ‰āļ™āļŦāļē āđāļŠāļĢāđŒ āđāļĨāļ°āļ„āļ§āļšāļ„āļļāļĄāļŠāļīāļ—āļ˜āļīāđŒāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ€āļ­āļāļŠāļēāļĢ * āļŠāđˆāļ§āļĒāļĨāļ”āļāļēāļĢāđƒāļŠāđ‰āđ€āļ­āļāļŠāļēāļĢāļāļĢāļ°āļ”āļēāļĐ āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđƒāļ™āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ * āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļĢāđˆāļ§āļĄāļāļąāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļ‡āļāļĢāļ“āđŒ ## 🛠ïļ 2. āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļĨāļ°āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ (System Architecture & Technology Stack) āđƒāļŠāđ‰āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Headless/API-First āļ—āļĩāđˆāļ—āļąāļ™āļŠāļĄāļąāļĒ āļ—āļģāļ‡āļēāļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļšāļ™ QNAP Server āļœāđˆāļēāļ™ Container Station āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđāļĨāļ°āļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļē, Domain: np-dms.work, āļĄāļĩ fix ip, āļĢāļąāļ™ docker command āđƒāļ™ application āļ‚āļ­āļ‡ Container Station āđ„āļ”āđ‰āđ‚āļ”āļĒāļ•āļĢāļ‡, āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ * 2.1. Infrastructure & Environment: - Server: QNAP (Model: TS-473A, RAM: 32GB, CPU: AMD Ryzen V1500B) - Containerization: Container Station (Docker & Docker Compose) āđƒāļŠāđ‰ UI āļ‚āļ­āļ‡ Container Station āđ€āļ›āđ‡āļ™āļŦāļĨāļąāļ āđƒāļ™āļāļēāļĢ configuration āđāļĨāļ°āļāļēāļĢāļĢāļąāļ™ docker command - Development Environment: VS Code on Windows 11 - Domain: np-dms.work, www.np-dms.work - ip: 159.192.126.103 - Docker Network: āļ—āļļāļ Service āļˆāļ°āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļœāđˆāļēāļ™āđ€āļ„āļĢāļ·āļ­āļ‚āđˆāļēāļĒāļāļĨāļēāļ‡āļŠāļ·āđˆāļ­ lcbp3 āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļŠāļ·āđˆāļ­āļŠāļēāļĢāļāļąāļ™āđ„āļ”āđ‰ - Data Storage: /share/dms-data āļšāļ™ QNAP - āļ‚āđ‰āļ­āļˆāļģāļāļąāļ”: āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ .env āđƒāļ™āļāļēāļĢāļāļģāļŦāļ™āļ”āļ•āļąāļ§āđāļ›āļĢāļ āļēāļĒāļ™āļ­āļāđ„āļ”āđ‰ āļ•āđ‰āļ­āļ‡āļāļģāļŦāļ™āļ”āđƒāļ™ docker-compose.yml āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ * 2.2. Code Hosting: - Application name: git - Service: Gitea (Self-hosted on QNAP) - Service name: gitea - Domain: git.np-dms.work - āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āđ€āļ›āđ‡āļ™āļĻāļđāļ™āļĒāđŒāļāļĨāļēāļ‡āđƒāļ™āļāļēāļĢāđ€āļāđ‡āļšāđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡āđ‚āļ„āđ‰āļ” (Source Code) āļŠāļģāļŦāļĢāļąāļšāļ—āļļāļāļŠāđˆāļ§āļ™ * 2.3. Backend / Data Platform: - Application name: lcbp3-backend - Service: NestJS - Service name: backend - Domain: backend.np-dms.work - Framework: NestJS (Node.js, TypeScript, ESM) - āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļˆāļąāļ”āļāļēāļĢāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ (Data Models), āļŠāļĢāđ‰āļēāļ‡ API, āļˆāļąāļ”āļāļēāļĢāļŠāļīāļ—āļ˜āļīāđŒāļœāļđāđ‰āđƒāļŠāđ‰ (Roles & Permissions), āđāļĨāļ°āļŠāļĢāđ‰āļēāļ‡ Workflow āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ‚āļ­āļ‡āļĢāļ°āļšāļš * 2.4. Database: - Application name: lcbp3-db - Service: mariadb:10.11 - Service name: mariadb - Domain: db.np-dms.work - āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļāļŠāļģāļŦāļĢāļąāļšāđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļąāđ‰āļ‡āļŦāļĄāļ” - Tooling: DBeaver (Community Edition), phpmyadmin āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ * 2.5. Database management: - Application name: lcbp3-db - Service: phpmyadmin:5-apache - Service name: pma - Domain: pma.np-dms.work - āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļˆāļąāļ”āļāļēāļĢāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ mariadb āļœāđˆāļēāļ™ Web UI * 2.6. Frontend: - Application name: lcbp3-frontend - Service: next.js - Service name: frontend - Domain: lcbp3.np-dms.work - Framework: Next.js (App Router, React, TypeScript, ESM) - Styling: Tailwind CSS + PostCSS - Component Library: shadcn/ui - āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļŠāļĢāđ‰āļēāļ‡āļŦāļ™āđ‰āļēāļ•āļēāđ€āļ§āđ‡āļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļŠāļģāļŦāļĢāļąāļšāđƒāļŦāđ‰āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™āđ€āļ‚āđ‰āļēāļĄāļēāļ”āļđ Dashboard, āļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢ, āđāļĨāļ°āļ•āļīāļ”āļ•āļēāļĄāļ‡āļēāļ™ āđ‚āļ”āļĒāļˆāļ°āļŠāļ·āđˆāļ­āļŠāļēāļĢāļāļąāļš Backend āļœāđˆāļēāļ™ API * 2.7. Workflow automation: - Application name: lcbp3-n8n - Service: n8nio/n8n:latest - Service name: n8n - Domain: n8n.np-dms.work - āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļˆāļąāļ”āļāļēāļĢ workflow āļĢāļ°āļŦāļ§āđˆāļēāļ‡ Backend āđāļĨāļ° Line * 2.8. Reverse Proxy: - Application name: lcbp3-npm - Service: Nginx Proxy Manager (nginx-proxy-manage: latest) - Service name: npm - Domain: npm.np-dms.work - āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āđ€āļ›āđ‡āļ™āļ”āđˆāļēāļ™āļŦāļ™āđ‰āļēāđƒāļ™āļāļēāļĢāļĢāļąāļš-āļŠāđˆāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ āļˆāļąāļ”āļāļēāļĢāđ‚āļ”āđ€āļĄāļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ”, āļ—āļģāļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļ›āđ‡āļ™ Proxy āļŠāļĩāđ‰āđ„āļ›āļĒāļąāļ‡ Service āļ—āļĩāđˆāļ–āļđāļāļ•āđ‰āļ­āļ‡, āđāļĨāļ°āļˆāļąāļ”āļāļēāļĢ SSL Certificate (HTTPS) āđƒāļŦāđ‰āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī ## ðŸ“Ķ 3. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™ (Functional Requirements) * 3.1. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āđ‚āļ„āļĢāļ‡āļāļēāļĢāđāļĨāļ°āļ­āļ‡āļ„āđŒāļāļĢ - 3.1.1. āđ‚āļ„āļĢāļ‡āļāļēāļĢ (Projects): āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāļ āļēāļĒāđƒāļ™āļŦāļĨāļēāļĒāđ‚āļ„āļĢāļ‡āļāļēāļĢāđ„āļ”āđ‰ (āļ›āļąāļˆāļˆāļļāļšāļąāļ™āļĄāļĩ 4 āđ‚āļ„āļĢāļ‡āļāļēāļĢ āđāļĨāļ°āļˆāļ°āđ€āļžāļīāđˆāļĄāļ‚āļķāđ‰āļ™āđƒāļ™āļ­āļ™āļēāļ„āļ•) - 3.1.2. āļŠāļąāļāļāļē (Contracts): āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāļ āļēāļĒāđƒāļ™āđāļ•āđˆāļĨāļ°āļŠāļąāļāļāļēāđ„āļ”āđ‰ āđƒāļ™āđāļ•āđˆāļĨāļ°āđ‚āļ„āļĢāļ‡āļāļēāļĢ āļĄāļĩāđ„āļ”āđ‰āļŦāļĨāļēāļĒāļŠāļąāļāļāļē āļŦāļĢāļ·āļ­āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒ 1 āļŠāļąāļāļāļē - 3.1.3. āļ­āļ‡āļ„āđŒāļāļĢ (Organizations): - āļĄāļĩāļŦāļĨāļēāļĒāļ­āļ‡āļ„āđŒāļāļĢāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ āļ­āļ‡āļ„āđŒāļāļĢāļ“āđŒāļ—āļĩāđˆāđ€āļ›āđ‡āļ™ Owner, Designer āđāļĨāļ° Consultant āļŠāļēāļĄāļēāļĢāļ–āļ­āļĒāļđāđˆāđƒāļ™āļŦāļĨāļēāļĒāđ‚āļ„āļĢāļ‡āļāļēāļĢāđāļĨāļ°āļŦāļĨāļēāļĒāļŠāļąāļāļāļēāđ„āļ”āđ‰ - Contractor āļˆāļ°āļ–āļ·āļ­ 1 āļŠāļąāļāļāļē āđāļĨāļ°āļ­āļĒāļđāđˆāđƒāļ™ 1 āđ‚āļ„āļĢāļ‡āļāļēāļĢāđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ * 3.2. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāđ‚āļ•āđ‰āļ•āļ­āļš (Correspondence Management) - 3.2.1. āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ: āđ€āļ­āļāļŠāļēāļĢāđ‚āļ•āđ‰āļ•āļ­āļš (correspondences) āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļ‡āļāļĢāļ“āļ·-āļ­āļ‡āļāļĢāļ“āđŒ āļ āļēāļĒāđƒāļ™ āđ‚āļ„āļĢāļ‡āļāļēāļĢ (Projects) āđāļĨāļ°āļĢāļ°āļŦāļ§āđˆāļēāļ‡ āļ­āļ‡āļ„āđŒāļāļĢ-āļ­āļ‡āļ„āđŒāļāļĢ āļ āļēāļĒāļ™āļ­āļ āđ‚āļ„āļĢāļ‡āļāļēāļĢ (Projects) - 3.2.2. āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ: āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļšāđ€āļ­āļāļŠāļēāļĢāļĢāļđāļ›āđāļšāļš āđ„āļŸāļĨāđŒ PDF āļŦāļĨāļēāļĒāļ›āļĢāļ°āđ€āļ āļ— (Types) āđ€āļŠāđˆāļ™ āļˆāļ”āļŦāļĄāļēāļĒ (Letter), āļ­āļĩāđ€āļĄāļĨāđŒ (Email), Request for Information (RFI), āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āđ€āļ āļ—āđƒāļŦāļĄāđˆāđ„āļ”āđ‰āđƒāļ™āļ āļēāļĒāļŦāļĨāļąāļ‡ - 3.2.3. āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢ (Correspondence): - āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒ (āđ€āļŠāđˆāļ™ Document Control) āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢāļĢāļ­āđ„āļ§āđ‰āđƒāļ™āļŠāļ–āļēāļ™āļ° āļ‰āļšāļąāļšāļĢāđˆāļēāļ‡" (Draft) āđ„āļ”āđ‰ āļ‹āļķāđˆāļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™āļ•āđˆāļēāļ‡āļ­āļ‡āļ„āđŒāļāļĢāļˆāļ°āļĄāļ­āļ‡āđ„āļĄāđˆāđ€āļŦāđ‡āļ™ - āđ€āļĄāļ·āđˆāļ­āļāļ” "Submitted" āđāļĨāđ‰āļ§ āļāļēāļĢāđāļāđ‰āđ„āļ‚, āļ–āļ­āļ™āđ€āļ­āļāļŠāļēāļĢāļāļĨāļąāļšāđ„āļ›āļŠāļ–āļēāļ™āļ° Draft, āļŦāļĢāļ·āļ­āļĒāļāđ€āļĨāļīāļ (Cancel) āļˆāļ°āļ•āđ‰āļ­āļ‡āļ—āļģāđ‚āļ”āļĒāļœāļđāđ‰āđƒāļŠāđ‰āļĢāļ°āļ”āļąāļš Admin āļ‚āļķāđ‰āļ™āđ„āļ› āļžāļĢāđ‰āļ­āļĄāļĢāļ°āļšāļļāđ€āļŦāļ•āļļāļœāļĨ - 3.2.4. āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡āđāļĨāļ°āļˆāļąāļ”āļāļĨāļļāđˆāļĄ: - āđ€āļ­āļāļŠāļēāļĢāļŠāļēāļĄāļēāļĢāļ–āļ­āđ‰āļēāļ‡āļ–āļķāļ‡ (Reference) āđ€āļ­āļāļŠāļēāļĢāļ‰āļšāļąāļšāļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāđ„āļ”āđ‰āļŦāļĨāļēāļĒāļ‰āļšāļąāļš - āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ” Tag āđ„āļ”āđ‰āļŦāļĨāļēāļĒ Tag āđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļāļĨāļļāđˆāļĄāđāļĨāļ°āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ - 3.2.5. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ: āļĄāļĩāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļ”āļąāļ‡āļ™āļĩāđ‰ - āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ§āļąāļ™āđāļĨāđ‰āļ§āđ€āļŠāļĢāđ‡āļˆ (Deadline) āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ‚āļ­āļ‡ āļ­āļ‡āļāļĢāļ“āđŒ āļ—āļĩāđˆāļ­āđ€āļ›āđ‡āļ™āļœāļđāđ‰āļĢāļąāļš āđ„āļ”āđ‰ - āļĄāļĩāļĢāļ°āļšāļšāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™ āđƒāļŦāđ‰āļœāļđāđ‰āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ‚āļ­āļ‡āļ­āļ‡āļāļĢāļ“āđŒāļ—āļĩāđˆāđ€āļ›āđ‡āļ™ āļœāļđāđ‰āļĢāļąāļš/āļœāļđāđ‰āļŠāđˆāļ‡ āļ—āļĢāļēāļš āđ€āļĄāļ·āđˆāļ­āļĄāļĩāđ€āļ­āļāļŠāļēāļĢāđƒāļŦāļĄāđˆ āļŦāļĢāļ·āļ­āļĄāļĩāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ–āļēāļ™āļ° * 3.3. āļāļēāļĢāļˆāļąāļ”āļāļēāđāļšāļšāļ„āļđāđˆāļŠāļąāļāļāļē (Contract Drawing) - 3.3.1. āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ: āđāļšāļšāļ„āļđāđˆāļŠāļąāļāļāļē (Contract Drawing) āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āļ­āđ‰āļēāļ‡āļ­āļīāļ‡āđāļĨāļ°āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļš - 3.3.2. āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ: āđ„āļŸāļĨāđŒ PDF - 3.3.3. āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢ: āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒ āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āđāļāđ‰āđ„āļ‚āđ„āļ”āđ‰ - 3.3.4. āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡āđāļĨāļ°āļˆāļąāļ”āļāļĨāļļāđˆāļĄ: āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļ­āđ‰āļēāļ‡āļ­āļīāļ‡ āđƒāļ™ Shop Drawings, āļĄāļĩāļāļēāļĢāļˆāļąāļ”āļŦāļĄāļ§āļ”āļŦāļĄāļđāđˆāļ‚āļ­āļ‡ Contract Drawing * 3.4. āļāļēāļĢāļˆāļąāļ”āļāļēāđāļšāļšāļāđˆāļ­āļŠāļĢāđ‰āļēāļ‡ (Shop Drawing) - 3.4.1. āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ: āđāļšāļšāļāđˆāļ­āļŠāļĢāđ‰āļēāļ‡ (Shop Drawing) āđƒāļŠāđ‰āđ€āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļš āđ‚āļ”āļĒāļˆāļąāļ”āļŠāđˆāļ‡āļ”āđ‰āļ§āļĒ Request for Approval (RFA) - 3.4.2. āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ: āđ„āļŸāļĨāđŒ PDF - 3.4.3. āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢ: āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒ āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āđāļāđ‰āđ„āļ‚āđ„āļ”āđ‰ - 3.4.4. āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡āđāļĨāļ°āļˆāļąāļ”āļāļĨāļļāđˆāļĄ: āļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļ­āđ‰āļēāļ‡āļ­āļīāļ‡ āđƒāļ™ Shop Drawings, āļĄāļĩāļāļēāļĢāļˆāļąāļ”āļŦāļĄāļ§āļ”āļŦāļĄāļđāđˆāļ‚āļ­āļ‡ Shop Drawings * 3.5. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāļ‚āļ­āļ­āļ™āļļāļĄāļąāļ•āļī (Request for Approval & Workflow) - 3.5.1. āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ: āđ€āļ­āļāļŠāļēāļĢāļ‚āļ­āļ­āļ™āļļāļĄāļąāļ•āļī (Request for Approval) āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļŠāđˆāļ‡āđ€āļ­āļāļŠāļēāļĢāđ€āļžāļīāļ­āļ‚āļ­āļ­āļ™āļļāļĄāļąāļ•āļī - 3.5.2. āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ: Request for Approval (RFA) āđ€āļ›āđ‡āļ™āļŠāļ™āļīāļ”āļŦāļ™āļķāđˆāļ‡āļ‚āļ­āļ‡ Correspondence āļ—āļĩāđˆāļĄāļĩāļĨāļąāļāļĐāļ“āļ°āđ€āļ‰āļžāļēāļ°āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđ„āļ”āđ‰āļĢāļąāļšāļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļī āļĄāļĩāļ›āļĢāļ°āđ€āļ āļ—āļ”āļąāļ‡āļ™āļĩāđ‰: - Request for Drawing Approval (RFA\_DWG) - Request for Document Approval (RFA\_DOC) - Request for Method statement Approval (RFA\_MES) - Request for Material Approval (RFA\_MAT) - 3.5.2. āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢ: āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒ āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āđāļāđ‰āđ„āļ‚āđ„āļ”āđ‰ - 3.5.4. āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡āđāļĨāļ°āļˆāļąāļ”āļāļĨāļļāđˆāļĄ: āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Drawing (RFA\_DWG): - āđ€āļ­āļāļŠāļēāļĢ RFA\_DWG āļˆāļ°āļ›āļĢāļ°āļāļ­āļšāđ„āļ›āļ”āđ‰āļ§āļĒ Shop Drawing (shop\_drawings) āļŦāļĨāļēāļĒāđāļœāđˆāļ™ āļ‹āļķāđˆāļ‡āđāļ•āđˆāļĨāļ°āđāļœāđˆāļ™āļĄāļĩ Revision āļ‚āļ­āļ‡āļ•āļąāļ§āđ€āļ­āļ‡ - Shop Drawing āđāļ•āđˆāļĨāļ° Revision āļŠāļēāļĄāļēāļĢāļ–āļ­āđ‰āļēāļ‡āļ­āļīāļ‡āļ–āļķāļ‡ Contract Drawing (Ccontract\_drawings) āļŦāļĨāļēāļĒāđāļœāđˆāļ™ āļŦāļĢāļ·āļ­āđ„āļĄāđˆāļ­āđ‰āļēāļ‡āļ–āļķāļ‡āļāđ‡āđ„āļ”āđ‰ - āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļĄāļĩāļŠāđˆāļ§āļ™āļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨ Master Data āļ‚āļ­āļ‡āļ—āļąāđ‰āļ‡ Shop Drawing āđāļĨāļ° Contract Drawing āđāļĒāļāļˆāļēāļāļāļąāļ™ - 3.6.5. Workflow āļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļī: āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļšāļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļīāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđāļĨāļ°āđ€āļ›āđ‡āļ™āļĨāļģāļ”āļąāļš āđ€āļŠāđˆāļ™ - āļŠāđˆāļ‡āļˆāļēāļ Originator -\> Organization 1 -\> Organization 2 -\> Organization 3 āđāļĨāđ‰āļ§āļŠāđˆāļ‡āļœāļĨāļāļĨāļąāļšāļ•āļēāļĄāļĨāļģāļ”āļąāļšāđ€āļ”āļīāļĄ (āđ‚āļ”āļĒāļ–āđ‰āļē āļ­āļ‡āļāļĢāļ“āđŒāđƒāļ”āđƒāļ™ Workflow āđƒāļŦāđ‰āļŠāđˆāļ‡āļāļĨāļąāļš āļāđ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļœāļĨāļāļĨāļąāļšāļ•āļēāļĄāļĨāļģāļ”āļąāļšāđ€āļ”āļīāļĄāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļ­āđƒāļŦāđ‰āļ–āļķāļ‡ āļ­āļ‡āļāļĢāļ“āļ·āđƒāļ™āļĨāļģāļ”āļąāļšāļ–āļąāļ”āđ„āļ›) - 3.6.6. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ: āļĄāļĩāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļ”āļąāļ‡āļ™āļĩāđ‰ - āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ§āļąāļ™āđāļĨāđ‰āļ§āđ€āļŠāļĢāđ‡āļˆ (Deadline) āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ‚āļ­āļ‡ āļ­āļ‡āļāļĢāļ“āđŒ āļ—āļĩāđˆāļ­āļĒāļđāđˆāđƒāļ™ Workflow āđ„āļ”āđ‰ - āļĄāļĩāļĢāļ°āļšāļšāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™ āđƒāļŦāđ‰āļœāļđāđ‰āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ‚āļ­āļ‡ āļ­āļ‡āļāļĢāļ“āđŒ āļ—āļĩāđˆāļ­āļĒāļđāđˆāđƒāļ™ Workflow āļ—āļĢāļēāļš āđ€āļĄāļ·āđˆāļ­āļĄāļĩ RFA āđƒāļŦāļĄāđˆ āļŦāļĢāļ·āļ­āļĄāļĩāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ–āļēāļ™āļ° * 3.6.āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāļ™āļģāļŠāđˆāļ‡ (Transmittals) - 3.6.1. āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ: āđ€āļ­āļāļŠāļēāļĢāļ™āļģāļŠāđˆāļ‡ āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļš āļ™āļģāļŠāđˆāļ‡ Request for Approval (RFAS) āļŦāļĨāļēāļĒāļ‰āļšāļąāļš āđ„āļ›āļĒāļąāļ‡āļ­āļ‡āļ„āđŒāļāļĢāļ­āļ·āđˆāļ™ - 3.6.2. āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ: āđ„āļŸāļĨāđŒ PDF - 3.6.3. āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢ: āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒ āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āđāļāđ‰āđ„āļ‚āđ„āļ”āđ‰ - 3.6.4. āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡āđāļĨāļ°āļˆāļąāļ”āļāļĨāļļāđˆāļĄ: āđ€āļ­āļāļŠāļēāļĢāļ™āļģāļŠāđˆāļ‡ āđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™ Correspondence * 3.7. āđƒāļšāđ€āļ§āļĩāļĒāļ™āđ€āļ­āļāļŠāļēāļĢāļ āļēāļĒāđƒāļ™ (Internal Circulation Sheet) - 3.7.1. āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ: āļāļēāļĢāļŠāļ·āđˆāļ­āļŠāļēāļĢ āđ€āļ­āļāļŠāļēāļĢ (Correspondence) āļ—āļļāļāļ‰āļšāļąāļš āļˆāļ°āļĄāļĩāđƒāļšāđ€āļ§āļĩāļĒāļ™āđ€āļ­āļāļŠāļēāļĢāđ€āļžāļ·āđˆāļ­āļ„āļ§āļšāļ„āļļāļĄāđāļĨāļ°āļĄāļ­āļšāļŦāļĄāļēāļĒāļ‡āļēāļ™āļ āļēāļĒāđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢ (āļŠāļēāļĄāļēāļĢāļ–āļ”āļđāđāļĨāļ°āđāļāđ‰āđ„āļ‚āđ„āļ”āđ‰āđ€āļ‰āļžāļēāļ°āļ„āļ™āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢ) - 3.7.2. āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ: āđ„āļŸāļĨāđŒ PDF - 3.7.3. āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢ: āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ™āļąāđ‰āļ™ āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āđāļāđ‰āđ„āļ‚āđ„āļ”āđ‰ - 3.7.4. āļāļēāļĢāļ­āđ‰āļēāļ‡āļ­āļīāļ‡āđāļĨāļ°āļˆāļąāļ”āļāļĨāļļāđˆāļĄ: āļāļēāļĢāļĢāļ°āļšāļļāļœāļđāđ‰āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļš: - āļœāļđāđ‰āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļŦāļĨāļąāļ (Main): āļĄāļĩāđ„āļ”āđ‰āļŦāļĨāļēāļĒāļ„āļ™ - āļœāļđāđ‰āļĢāđˆāļ§āļĄāļ›āļāļīāļšāļąāļ•āļīāļ‡āļēāļ™ (Action): āļĄāļĩāđ„āļ”āđ‰āļŦāļĨāļēāļĒāļ„āļ™ - āļœāļđāđ‰āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļĢāļąāļšāļ—āļĢāļēāļš (Information): āļĄāļĩāđ„āļ”āđ‰āļŦāļĨāļēāļĒāļ„āļ™ - 3.7.5. āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ‡āļēāļ™: - āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ§āļąāļ™āđāļĨāđ‰āļ§āđ€āļŠāļĢāđ‡āļˆ (Deadline) āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āļĢāļąāļšāļœāļīāļ”āļŠāļ­āļšāļ›āļĢāļ°āđ€āļ āļ— Main āđāļĨāļ° Action āđ„āļ”āđ‰ - āļĄāļĩāļĢāļ°āļšāļšāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āđ€āļĄāļ·āđˆāļ­āļĄāļĩ Circulation āđƒāļŦāļĄāđˆ āđāļĨāļ°āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļĨāđˆāļ§āļ‡āļŦāļ™āđ‰āļēāļāđˆāļ­āļ™āļ–āļķāļ‡āļ§āļąāļ™āđāļĨāđ‰āļ§āđ€āļŠāļĢāđ‡āļˆ - āļŠāļēāļĄāļēāļĢāļ–āļ›āļīāļ” Circulation āđ„āļ”āđ‰āđ€āļĄāļ·āđˆāļ­āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāļ•āļ­āļšāļāļĨāļąāļšāđ„āļ›āļĒāļąāļ‡āļ­āļ‡āļ„āđŒāļāļĢāļœāļđāđ‰āļŠāđˆāļ‡ (Originator) āđāļĨāđ‰āļ§ āļŦāļĢāļ·āļ­ āļĢāļąāļšāļ—āļĢāļēāļšāđāļĨāđ‰āļ§ (For Information) * 3.8. āļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāđāļāđ‰āđ„āļ‚ (Revisions): āļĢāļ°āļšāļšāļˆāļ°āđ€āļāđ‡āļšāļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđāļĨāļ°āđāļāđ‰āđ„āļ‚ āđ€āļ­āļāļŠāļēāļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ” * **3.9. āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļš: (āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ•āļēāļĄāļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđƒāļŦāļĄāđˆ)** - āđ€āļ­āļāļŠāļēāļĢāđāļĨāļ°āđ„āļŸāļĨāđŒāđāļ™āļšāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļˆāļ°āļ–āļđāļāļˆāļąāļ”āđ€āļāđ‡āļšāđƒāļ™āđ‚āļŸāļĨāđ€āļ”āļ­āļĢāđŒāļšāļ™ Server (`/share/dms-data/`) - āļ‚āđ‰āļ­āļĄāļđāļĨ Metadata āļ‚āļ­āļ‡āđ„āļŸāļĨāđŒ (āđ€āļŠāđˆāļ™ āļŠāļ·āđˆāļ­āđ„āļŸāļĨāđŒ, āļ‚āļ™āļēāļ”, path) āļˆāļ°āļ–āļđāļāđ€āļāđ‡āļšāđƒāļ™āļ•āļēāļĢāļēāļ‡ `attachments` (āļ•āļēāļĢāļēāļ‡āļāļĨāļēāļ‡) - āđ„āļŸāļĨāđŒāļˆāļ°āļ–āļđāļāđ€āļŠāļ·āđˆāļ­āļĄāđ‚āļĒāļ‡āļāļąāļšāđ€āļ­āļāļŠāļēāļĢāļ›āļĢāļ°āđ€āļ āļ—āļ•āđˆāļēāļ‡āđ† āļœāđˆāļēāļ™āļ•āļēāļĢāļēāļ‡āđ€āļŠāļ·āđˆāļ­āļĄ (Junction tables) āđ€āļŠāđˆāļ™ `correspondence_attachments`, `circulation_attachments`, āđāļĨāļ° `shop_drawing_revision_attachments` - āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļšāļšāļĢāļ§āļĄāļĻāļđāļ™āļĒāđŒāļ™āļĩāđ‰ *āđāļ—āļ™āļ—āļĩāđˆ* āđāļ™āļ§āļ„āļīāļ”āđ€āļ”āļīāļĄāļ—āļĩāđˆāļˆāļ°āđāļĒāļāđ‚āļŸāļĨāđ€āļ”āļ­āļĢāđŒāļ•āļēāļĄāļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ āđ€āļžāļ·āđˆāļ­āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ‚āļĒāļēāļĒāļĢāļ°āļšāļšāļ—āļĩāđˆāļ”āļĩāļāļ§āđˆāļē ## 🔐 4. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļŠāļīāļ—āļ˜āļīāđŒāđāļĨāļ°āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡ (Access Control Requirements) * 4.1. āļ āļēāļžāļĢāļ§āļĄ: āļœāļđāđ‰āđƒāļŠāđ‰āđāļĨāļ°āļ­āļ‡āļ„āđŒāļāļĢāļŠāļēāļĄāļēāļĢāļ–āļ”āļđāđāļĨāļ°āđāļāđ‰āđ„āļ‚āđ€āļ­āļāļŠāļēāļĢāđ„āļ”āđ‰āļ•āļēāļĄāļŠāļīāļ—āļ˜āļīāđŒāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļš āđ‚āļ”āļĒāļĢāļ°āļšāļšāļŠāļīāļ—āļ˜āļīāđŒāļˆāļ°āđ€āļ›āđ‡āļ™āđāļšāļš Role-Based Access Control (RBAC) * 4.2. āļĢāļ°āļ”āļąāļšāļ‚āļ­āļ‡āļŠāļīāļ—āļ˜āļīāđŒ: - Global Roles: āļŠāļīāļ—āļ˜āļīāđŒāđƒāļ™āļ āļēāļžāļĢāļ§āļĄāļ‚āļ­āļ‡āļĢāļ°āļšāļš - Project-Specific Roles: āļŠāļīāļ—āļ˜āļīāđŒāļ—āļĩāđˆāļ–āļđāļāļāļģāļŦāļ™āļ”āđƒāļŦāđ‰āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāđ‚āļ„āļĢāļ‡āļāļēāļĢāļ™āļąāđ‰āļ™āđ† āđ‚āļ”āļĒāđ€āļ‰āļžāļēāļ° (āđ€āļŠāđˆāļ™ āđ€āļ›āđ‡āļ™ Editor āđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ A āđāļ•āđˆāđ€āļ›āđ‡āļ™ Viewer āđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ B) - Contract-Specific Roles: āļŠāļīāļ—āļ˜āļīāđŒāļ—āļĩāđˆāļ–āļđāļāļāļģāļŦāļ™āļ”āđƒāļŦāđ‰āđ‚āļ„āļĢāļ‡āļāļēāļĢāļŠāļģāļŦāļĢāļąāļšāļŠāļąāļāļāļēāļ™āļąāđ‰āļ™āđ† (āđ€āļŠāđˆāļ™ āđ€āļ›āđ‡āļ™ Admin āđƒāļ™āļŠāļąāļāļāļē 1 āļˆāļ°āđ€āļ›āđ‡āļ™ Admin āđƒāļ™ āđ‚āļ„āļĢāļ‡āļāļēāļĢ A āđāļĨāļ° āļšB āļ—āļĩāđˆāļ­āļĒāļđāđˆāđƒāļ™āļŠāļąāļāļāļē 1) * 4.3. āļšāļ—āļšāļēāļ— (Roles) āļžāļ·āđ‰āļ™āļāļēāļ™: - Superadmin: āđ„āļĄāđˆāļĄāļĩāļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āđƒāļ”āđ† āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāđ„āļ”āđ‰āļ—āļļāļāļ­āļĒāđˆāļēāļ‡āļ‚āđ‰āļēāļĄāļ­āļ‡āļ„āđŒāļāļĢ - Admin: āļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāđ€āļ•āđ‡āļĄāļ—āļĩāđˆ āđāļ•āđˆāļˆāļģāļāļąāļ”āđ€āļ‰āļžāļēāļ°āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ—āļĩāđˆāļ•āļąāļ§āđ€āļ­āļ‡āļŠāļąāļ‡āļāļąāļ” āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļœāļđāđ‰āđƒāļŠāđ‰āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāđ„āļ”āđ‰ āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡ Role āđƒāļŦāļĄāđˆāđāļĨāļ°āļāļģāļŦāļ™āļ”āļŠāļīāļ—āļ˜āļīāđŒ (Permissions) āđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄāđ„āļ”āđ‰āđƒāļ™āļ āļēāļĒāļŦāļĨāļąāļ‡āļœāđˆāļēāļ™āļŦāļ™āđ‰āļē Admin - Document Control āļŠāļēāļĄāļēāļĢāļ– āđ€āļžāļīāđˆāļĄ/āđāļāđ‰āđ„āļ‚/āļĨāļš āđ€āļ­āļāļŠāļēāļĢ āđ€āļ‰āļžāļēāļ°āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ—āļĩāđˆāļ•āļąāļ§āđ€āļ­āļ‡āļŠāļąāļ‡āļāļąāļ” āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļœāļđāđ‰āđƒāļŠāđ‰āđ„āļ”āđ‰ - Editor: āļŠāļēāļĄāļēāļĢāļ– āđ€āļžāļīāđˆāļĄ/āđāļāđ‰āđ„āļ‚ āđ€āļ­āļāļŠāļēāļĢāļ—āļĩāđˆāļāļģāļŦāļ™āļ”āđ„āļ§āđ‰ āđ€āļ‰āļžāļēāļ°āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ—āļĩāđˆāļ•āļąāļ§āđ€āļ­āļ‡āļŠāļąāļ‡āļāļąāļ” - Viewer: āļŠāļēāļĄāļēāļĢāļ–āļ”āļđ āđ€āļ­āļāļŠāļēāļĢ āđ€āļ‰āļžāļēāļ°āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ—āļĩāđˆāļ•āļąāļ§āđ€āļ­āļ‡āļŠāļąāļ‡āļāļąāļ” * 4.4. āļāļēāļĢāļšāļąāļ‡āļ„āļąāļšāđƒāļŠāđ‰āļŠāļīāļ—āļ˜āļīāđŒ: āļŠāļīāļ—āļ˜āļīāđŒāļ‚āļ­āļ‡āļ­āļ‡āļ„āđŒāļāļĢāļˆāļ°āļ„āļĢāļ­āļšāļ„āļĨāļļāļĄāļŠāļīāļ—āļ˜āļīāđŒāļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰ āđāļĨāļ°āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āļāļąāļšāđ‚āļ„āļĢāļ‡āļāļēāļĢ (āđ€āļŠāđˆāļ™ āļāļēāļĢāđāļāđ‰āđ„āļ‚āđ€āļ­āļāļŠāļēāļĢ) āļˆāļ°āļ–āļđāļāļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļ—āļĩāļĒāļšāļāļąāļšāļŠāļīāļ—āļ˜āļīāđŒāļ—āļĩāđˆāļœāļđāđ‰āđƒāļŠāđ‰āļĄāļĩāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢāļ™āļąāđ‰āļ™āđ† āđ‚āļ”āļĒāđ€āļ‰āļžāļēāļ° ## ðŸ‘Ĩ 5. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ (User Interface & Experience) * 5.1. Layout āļŦāļĨāļąāļ: āļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļšāđƒāļŠāđ‰āļĢāļđāļ›āđāļšāļš App Shell āļ—āļĩāđˆāļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ: - Navbar (āļŠāđˆāļ§āļ™āļšāļ™): āđāļŠāļ”āļ‡āļŠāļ·āđˆāļ­āļĢāļ°āļšāļš, āđ€āļĄāļ™āļđāļœāļđāđ‰āđƒāļŠāđ‰ (Profile), āđ€āļĄāļ™āļđāļŠāļģāļŦāļĢāļąāļš Admin/Superadmin (āļˆāļąāļ”āļāļēāļĢāļœāļđāđ‰āđƒāļŠāđ‰, āļˆāļąāļ”āļāļēāļĢāļŠāļīāļ—āļ˜āļīāđŒ), āđāļĨāļ°āļ›āļļāđˆāļĄ Login/Logout - Sidebar (āļ”āđ‰āļēāļ™āļ‚āđ‰āļēāļ‡): āđ€āļ›āđ‡āļ™āđ€āļĄāļ™āļđāļŦāļĨāļąāļāļŠāļģāļŦāļĢāļąāļšāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļŠāđˆāļ§āļ™āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļāļąāļšāđ€āļ­āļāļŠāļēāļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ” āđ€āļŠāđˆāļ™ Dashboard, Correspondences, RFA, Drawings - Main Content Area: āļžāļ·āđ‰āļ™āļ—āļĩāđˆāļŠāļģāļŦāļĢāļąāļšāđāļŠāļ”āļ‡āđ€āļ™āļ·āđ‰āļ­āļŦāļēāļŦāļĨāļąāļāļ‚āļ­āļ‡āļŦāļ™āđ‰āļēāļ—āļĩāđˆāđ€āļĨāļ·āļ­āļ * 5.2. āļŦāļ™āđ‰āļē Landing Page: āđ€āļ›āđ‡āļ™āļŦāļ™āđ‰āļēāđāļĢāļāļ—āļĩāđˆāđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļēāļ‡āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡āđ‚āļ„āļĢāļ‡āļāļēāļĢāļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļĒāļąāļ‡āđ„āļĄāđˆāđ„āļ”āđ‰āļĨāđ‡āļ­āļāļ­āļīāļ™ * 5.3. āļŦāļ™āđ‰āļē Dashboard: āđ€āļ›āđ‡āļ™āļŦāļ™āđ‰āļēāđāļĢāļāļŦāļĨāļąāļ‡āļˆāļēāļāļĨāđ‡āļ­āļāļ­āļīāļ™ āļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ: - āļāļēāļĢāđŒāļ”āļŠāļĢāļļāļ›āļ āļēāļžāļĢāļ§āļĄ (KPI Cards): āđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļĢāļļāļ›āļ—āļĩāđˆāļŠāļģāļ„āļąāļāļ‚āļ­āļ‡āļ­āļ‡āļ„āđŒāļāļĢ āđ€āļŠāđˆāļ™ āļˆāļģāļ™āļ§āļ™āđ€āļ­āļāļŠāļēāļĢ, āļ‡āļēāļ™āļ—āļĩāđˆāđ€āļāļīāļ™āļāļģāļŦāļ™āļ” - āļ•āļēāļĢāļēāļ‡ "āļ‡āļēāļ™āļ‚āļ­āļ‡āļ‰āļąāļ™" (My Tasks Table): āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļ‡āļēāļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļˆāļēāļ Circulation āļ—āļĩāđˆāļœāļđāđ‰āđƒāļŠāđ‰āļ•āđ‰āļ­āļ‡āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ * 5.4. āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļŠāļ–āļēāļ™āļ°: āļ­āļ‡āļ„āđŒāļāļĢāļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļēāļĄāļŠāļ–āļēāļ™āļ°āđ€āļ­āļāļŠāļēāļĢāļ—āļąāđ‰āļ‡āļ‚āļ­āļ‡āļ•āļ™āđ€āļ­āļ‡ (Originator) āđāļĨāļ°āļŠāļ–āļēāļ™āļ°āđ€āļ­āļāļŠāļēāļĢāļ—āļĩāđˆāļŠāđˆāļ‡āļĄāļēāļ–āļķāļ‡āļ•āļ™āđ€āļ­āļ‡ (Recipient) * 5.5. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ•āļąāļ§ (Profile Page): āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ•āļąāļ§āđāļĨāļ°āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļĢāļŦāļąāļŠāļœāđˆāļēāļ™āļ‚āļ­āļ‡āļ•āļ™āđ€āļ­āļ‡āđ„āļ”āđ‰ * 5.6. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„ (Technical Documents & Workflow): āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ”āļđ Technical Document āđƒāļ™āļĢāļđāļ›āđāļšāļš Workflow āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āđ‰āđƒāļ™āļŦāļ™āđ‰āļēāđ€āļ”āļĩāļĒāļ§, āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāļĒāļąāļ‡āđ„āļĄāđˆāļ–āļķāļ‡āļŦāļĢāļ·āļ­āļœāđˆāļēāļ™āđ„āļ›āđāļĨāđ‰āļ§āļˆāļ°āđ€āļ›āđ‡āļ™āļĢāļđāļ›āđāļšāļš diable, āļŠāļēāļĄāļēāļĢāļ–āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđ„āļ”āđ‰āđ€āļ‰āļžāļēāļ°āđƒāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĄāļ­āļšāļŦāļĄāļēāļĒāļ‡āļēāļ™ (active) āđ€āļŠāđˆāļ™ āļ•āļĢāļ§āļˆāļŠāļ­āļšāđāļĨāđ‰āļ§ āđ€āļžāļ·āđˆāļ­āđ„āļ›āļĒāļąāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ›, āļŠāļīāļ—āļ˜āļīāđŒ admin āļ‚āļķāđ‰āļ™āđ„āļ› āļŠāļēāļĄāļĢāļ–āļāļ” āđ„āļ›āļĒāļąāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ› āđ„āļ”āđ‰āļ—āļļāļāļ‚āļąāđ‰āļ™āļ•āļ­āļ™, āļāļēāļĢāļĒāđ‰āļ­āļ™āļāļĨāļąāļš āđ„āļ›āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāđˆāļ­āļ™āļŦāļ™āđ‰āļē āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāđ„āļ”āđ‰āđ‚āļ”āļĒ āļŠāļīāļ—āļ˜āļīāđŒ admin āļ‚āļķāđ‰āļ™āđ„āļ› ## 6\. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ—āļĩāđˆāđ„āļĄāđˆāđƒāļŠāđˆāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™ (Non-Functional Requirements) * 6.1. āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļāļēāļĢāļāļĢāļ°āļ—āļģ (Audit Log): āļ—āļļāļāļāļēāļĢāļāļĢāļ°āļ—āļģāļ—āļĩāđˆāļŠāļģāļ„āļąāļāļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰ (āļŠāļĢāđ‰āļēāļ‡, āđāļāđ‰āđ„āļ‚, āļĨāļš, āļŠāđˆāļ‡) āļˆāļ°āļ–āļđāļāļšāļąāļ™āļ—āļķāļāđ„āļ§āđ‰āđƒāļ™ `audit_logs` āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļĒāđ‰āļ­āļ™āļŦāļĨāļąāļ‡ * 6.2. āļāļēāļĢāļ„āđ‰āļ™āļŦāļē (Search): āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļĄāļĩāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļ„āđ‰āļ™āļŦāļēāđ€āļ­āļāļŠāļēāļĢāļˆāļēāļāļŦāļĨāļēāļĒāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļ„āđ‰āļ™āļŦāļēāļˆāļēāļāļŠāļ·āđˆāļ­āđ€āļĢāļ·āđˆāļ­āļ‡, āļ›āļĢāļ°āđ€āļ āļ—, āļ§āļąāļ™āļ—āļĩāđˆ, āđāļĨāļ° Tag * 6.3. āļāļēāļĢāļ—āļģāļĢāļēāļĒāļ‡āļēāļ™ (Reporting): āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļ—āļģāļĢāļēāļĒāļ‡āļēāļ™āļŠāļĢāļļāļ›āđāļĒāļāļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡ Correspondence āļ›āļĢāļ°āļˆāļģāļ§āļąāļ™, āļŠāļąāļ›āļ”āļēāļŦāđŒ, āđ€āļ”āļ·āļ­āļ™, āđāļĨāļ°āļ›āļĩāđ„āļ”āđ‰ * 6.4. āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž (Performance): āļĄāļĩāļāļēāļĢāđƒāļŠāđ‰ Caching āļāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļšāđˆāļ­āļĒ āđāļĨāļ°āđƒāļŠāđ‰ Pagination āđƒāļ™āļ•āļēāļĢāļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļģāļ™āļ§āļ™āļĄāļēāļ * 6.5. āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ (Security): - āļĄāļĩāļĢāļ°āļšāļš Rate Limiting āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩāđāļšāļš Brute-force - āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Secret (āđ€āļŠāđˆāļ™ āļĢāļŦāļąāļŠāļœāđˆāļēāļ™ DB, JWT Secret) āļˆāļ°āļ•āđ‰āļ­āļ‡āļ—āļģāļœāđˆāļēāļ™ Environment Variable āļ‚āļ­āļ‡ Docker āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļđāļ‡āļŠāļļāļ”