Files
lcbp3/Documnets/Project/0_Requirements_V1_4_2.md
2025-11-19 11:57:46 +07:00

764 lines
68 KiB
Markdown

# 📝 **Documents Management System Version 1.4.2: Application Requirements Specification**
**āļŠāļ–āļēāļ™āļ°:** FINAL
**āļ§āļąāļ™āļ—āļĩāđˆ:** 2025-11-19
**āļ­āđ‰āļēāļ‡āļ­āļīāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™:** v1.4.2
**Classification:** Internal Technical Documentation
## 📌 **1. āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ**
āļŠāļĢāđ‰āļēāļ‡āđ€āļ§āđ‡āļšāđāļ­āļ›āļžāļĨāļīāđ€āļ„āļŠāļąāļ™āļŠāļģāļŦāļĢāļąāļšāļĢāļ°āļšāļšāļšāļĢāļīāļŦāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāđ‚āļ„āļĢāļ‡āļāļēāļĢ (Document Management System - DMS) āđāļšāļšāļ„āļĢāļšāļ§āļ‡āļˆāļĢ āļ—āļĩāđˆāđ€āļ™āđ‰āļ™āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļđāļ‡āļŠāļļāļ” āļ„āļ§āļēāļĄāļ–āļđāļāļ•āđ‰āļ­āļ‡āļ‚āļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ (Data Integrity) āđāļĨāļ°āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ‚āļĒāļēāļĒāļ•āļąāļ§āđƒāļ™āļ­āļ™āļēāļ„āļ• (Scalability) āđ‚āļ”āļĒāđāļāđ‰āđ„āļ‚āļ›āļąāļāļŦāļē Race Condition āđāļĨāļ°āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāđ€āļŠāļ–āļĩāļĒāļĢāđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ„āļŸāļĨāđŒāđāļĨāļ° Workflow
- āļĄāļĩāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļŦāļĨāļąāļāđƒāļ™āļāļēāļĢāļ­āļąāļ›āđ‚āļŦāļĨāļ” āļˆāļąāļ”āđ€āļāđ‡āļš āļ„āđ‰āļ™āļŦāļē āđāļŠāļĢāđŒ āđāļĨāļ°āļ„āļ§āļšāļ„āļļāļĄāļŠāļīāļ—āļ˜āļīāđŒāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ€āļ­āļāļŠāļēāļĢ
- āļŠāđˆāļ§āļĒāļĨāļ”āļāļēāļĢāđƒāļŠāđ‰āđ€āļ­āļāļŠāļēāļĢāļāļĢāļ°āļ”āļēāļĐ āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāđƒāļ™āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨ
- āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļĢāđˆāļ§āļĄāļāļąāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļ­āļ‡āļāļĢāļ“āđŒ
- **āđ€āļŠāļĢāļīāļĄ:** āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡āļĢāļ°āļšāļšāļ”āđ‰āļ§āļĒāļĄāļēāļ•āļĢāļāļēāļĢāļ›āđ‰āļ­āļ‡āļāļąāļ™āļ—āļĩāđˆāļ—āļąāļ™āļŠāļĄāļąāļĒ
- **āđ€āļŠāļĢāļīāļĄ:** āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļ—āļ™āļ—āļēāļ™āļ‚āļ­āļ‡āļĢāļ°āļšāļšāļ”āđ‰āļ§āļĒāļāļĨāđ„āļ resilience patterns
- **āđ€āļŠāļĢāļīāļĄ:** āļŠāļĢāđ‰āļēāļ‡āļĢāļ°āļšāļš monitoring āđāļĨāļ° observability āļ—āļĩāđˆāļ„āļĢāļ­āļšāļ„āļĨāļļāļĄ
## 🛠ïļ **2. āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļĨāļ°āđ€āļ—āļ„āđ‚āļ™āđ‚āļĨāļĒāļĩ (System Architecture & Technology Stack)**
āđƒāļŠāđ‰āļŠāļ–āļēāļ›āļąāļ•āļĒāļāļĢāļĢāļĄāđāļšāļš Headless/API-First āļ—āļĩāđˆāļ—āļąāļ™āļŠāļĄāļąāļĒ āļ—āļģāļ‡āļēāļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļšāļ™ QNAP Server āļœāđˆāļēāļ™ Container Station āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļŠāļ°āļ”āļ§āļāđƒāļ™āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđāļĨāļ°āļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļē
**Domain:** `np-dms.work`, `www.np-dms.work`
**IP:** 159.192.126.103
**Docker Network:** āļ—āļļāļ Service āļˆāļ°āđ€āļŠāļ·āđˆāļ­āļĄāļ•āđˆāļ­āļœāđˆāļēāļ™āđ€āļ„āļĢāļ·āļ­āļ‚āđˆāļēāļĒāļāļĨāļēāļ‡āļŠāļ·āđˆāļ­ `lcbp3` āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļŠāļ·āđˆāļ­āļŠāļēāļĢāļāļąāļ™āđ„āļ”āđ‰
### **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/Cursor on Windows 11
- **Data Storage:** `/share/dms-data` āļšāļ™ QNAP
- **āļ‚āđ‰āļ­āļˆāļģāļāļąāļ”:** āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ .env āđƒāļ™āļāļēāļĢāļāļģāļŦāļ™āļ”āļ•āļąāļ§āđāļ›āļĢāļ āļēāļĒāļ™āļ­āļāđ„āļ”āđ‰ āļ•āđ‰āļ­āļ‡āļāļģāļŦāļ™āļ”āđƒāļ™ docker-compose.yml āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
### **2.2 āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Configuration (āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡):**
- āđƒāļŠāđ‰ `docker-compose.yml` āļŠāļģāļŦāļĢāļąāļš environment variables āļ•āļēāļĄāļ‚āđ‰āļ­āļˆāļģāļāļąāļ”āļ‚āļ­āļ‡ QNAP
- **Secrets Management (āđƒāļŦāļĄāđˆ):**
- āļŦāđ‰āļēāļĄāļĢāļ°āļšāļļ Sensitive Secrets (Password, Keys) āđƒāļ™ `docker-compose.yml` āļŦāļĨāļąāļ
- āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āđ„āļŸāļĨāđŒ `docker-compose.override.yml` (āļ—āļĩāđˆāļ–āļđāļ gitignore) āļŠāļģāļŦāļĢāļąāļš Inject Environment Variables āļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ„āļ§āļēāļĄāļĨāļąāļšāđƒāļ™āđāļ•āđˆāļĨāļ° Environment (Dev/Prod)
- āđ„āļŸāļĨāđŒ `docker-compose.yml` āļŦāļĨāļąāļāđƒāļŦāđ‰āđƒāļŠāđˆāļ„āđˆāļē Dummy āļŦāļĢāļ·āļ­āļ§āđˆāļēāļ‡āđ„āļ§āđ‰
- **āđāļ•āđˆāļ•āđ‰āļ­āļ‡āļĄāļĩ mechanism āļŠāļģāļŦāļĢāļąāļšāļˆāļąāļ”āļāļēāļĢ sensitive secrets āļ­āļĒāđˆāļēāļ‡āļ›āļĨāļ­āļ”āļ āļąāļĒ** āđ‚āļ”āļĒāđƒāļŠāđ‰:
- Docker secrets (āļ–āđ‰āļēāļĢāļ­āļ‡āļĢāļąāļš)
- External secret management (Hashicorp Vault) āļŦāļĢāļ·āļ­
- Encrypted environment variables
- Development environment āļĒāļąāļ‡āđƒāļŠāđ‰ .env āđ„āļ”āđ‰ āđāļ•āđˆāļ•āđ‰āļ­āļ‡āđ„āļĄāđˆ commit āđ€āļ‚āđ‰āļē version control
- āļ•āđ‰āļ­āļ‡āļĄāļĩ configuration validation during application startup
- āļ•āđ‰āļ­āļ‡āđāļĒāļ configuration āļ•āļēāļĄ environment (development, staging, production)
### **2.3 Core Services:**
- **Code Hosting:** Gitea (Self-hosted on QNAP)
- Application name: git
- Service name: gitea
- Domain: `git.np-dms.work`
- āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āđ€āļ›āđ‡āļ™āļĻāļđāļ™āļĒāđŒāļāļĨāļēāļ‡āđƒāļ™āļāļēāļĢāđ€āļāđ‡āļšāđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļ‚āļ­āļ‡āđ‚āļ„āđ‰āļ” (Source Code) āļŠāļģāļŦāļĢāļąāļšāļ—āļļāļāļŠāđˆāļ§āļ™
- **Backend / Data Platform:** NestJS
- Application name: lcbp3-backend
- Service name: backend
- Domain: `backend.np-dms.work`
- Framework: NestJS (Node.js, TypeScript, ESM)
- āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļˆāļąāļ”āļāļēāļĢāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ (Data Models), āļŠāļĢāđ‰āļēāļ‡ API, āļˆāļąāļ”āļāļēāļĢāļŠāļīāļ—āļ˜āļīāđŒāļœāļđāđ‰āđƒāļŠāđ‰ (Roles & Permissions), āđāļĨāļ°āļŠāļĢāđ‰āļēāļ‡ Workflow āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ‚āļ­āļ‡āļĢāļ°āļšāļš
- **Database:** MariaDB 10.11
- Application name: lcbp3-db
- Service name: mariadb
- Domain: `db.np-dms.work`
- āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļāļŠāļģāļŦāļĢāļąāļšāđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļąāđ‰āļ‡āļŦāļĄāļ”
- Tooling: DBeaver (Community Edition), phpmyadmin āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļĨāļ°āļˆāļąāļ”āļāļēāļĢāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ
- **Database Management:** phpMyAdmin
- Application name: lcbp3-db
- Service: phpmyadmin:5-apache
- Service name: pma
- Domain: `pma.np-dms.work`
- āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļˆāļąāļ”āļāļēāļĢāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ mariadb āļœāđˆāļēāļ™ Web UI
- **Frontend:** Next.js
- Application name: lcbp3-frontend
- 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
- **Workflow Automation:** n8n
- Application name: lcbp3-n8n
- Service: n8nio/n8n:latest
- Service name: n8n
- Domain: `n8n.np-dms.work`
- āļŦāļ™āđ‰āļēāļ—āļĩāđˆ: āļˆāļąāļ”āļāļēāļĢ workflow āļĢāļ°āļŦāļ§āđˆāļēāļ‡ Backend āđāļĨāļ° Line
- **Reverse Proxy:** Nginx Proxy Manager
- 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) āđƒāļŦāđ‰āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī
- **Search Engine:** Elasticsearch
- **Cache:** Redis
### **2.4 Business Logic & Consistency (āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡):**
- **2.4.1 āļ•āļĢāļĢāļāļ°āļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ”** (āđ€āļŠāđˆāļ™ āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ–āļēāļ™āļ° Workflow [cite: 3.5.4, 3.6.5], āļāļēāļĢāļšāļąāļ‡āļ„āļąāļšāđƒāļŠāđ‰āļŠāļīāļ—āļ˜āļīāđŒ [cite: 4.4], āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļš Deadline [cite: 3.2.5]) **āļˆāļ°āļ–āļđāļāļˆāļąāļ”āļāļēāļĢāđƒāļ™āļāļąāđˆāļ‡ Backend (NestJS)** [cite: 2.3] āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļēāđāļĨāļ°āļ—āļ”āļŠāļ­āļšāđ„āļ”āđ‰āļ‡āđˆāļēāļĒ (Testability)
- **2.4.2 Unified Workflow Engine (āđƒāļŦāļĄāđˆ):** āļĢāļ§āļĄ Logic āļāļēāļĢāđ€āļ”āļīāļ™āđ€āļ­āļāļŠāļēāļĢāļ‚āļ­āļ‡ `CorrespondenceRouting` āđāļĨāļ° `RfaWorkflow` āđƒāļŦāđ‰āđƒāļŠāđ‰ Core Engine āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āđ€āļžāļ·āđˆāļ­āļĨāļ”āļ„āļ§āļēāļĄāļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™āđāļĨāļ°āļ‡āđˆāļēāļĒāļ•āđˆāļ­āļāļēāļĢāļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļē
- **2.4.3 Idempotency Keys (āđƒāļŦāļĄāđˆ):** API āļ—āļĩāđˆāļŠāļģāļ„āļąāļ (āđ€āļŠāđˆāļ™ Submit Document, Approve) āļ•āđ‰āļ­āļ‡āļšāļąāļ‡āļ„āļąāļšāļŠāđˆāļ‡ Header `Idempotency-Key` āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāļ—āļģāļĢāļēāļĒāļāļēāļĢāļ‹āđ‰āļģāļˆāļēāļāļāļēāļĢāļāļ”āļ›āļļāđˆāļĄāļĢāļąāļ§āđ† āļŦāļĢāļ·āļ­ Network Retry
- **2.4.4 Optimistic Locking (āđƒāļŦāļĄāđˆ):** āđƒāļŠāđ‰ Version Column āđƒāļ™ Database āļ„āļ§āļšāļ„āļđāđˆāļāļąāļš Redis Lock āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āđ€āļĨāļ‚āļ—āļĩāđˆāđ€āļ­āļāļŠāļēāļĢ āđ€āļžāļ·āđˆāļ­āđ€āļ›āđ‡āļ™ Safety Net āļŠāļąāđ‰āļ™āļŠāļļāļ”āļ—āđ‰āļēāļĒ
- **2.4.5** **āļˆāļ°āđ„āļĄāđˆāļĄāļĩāļāļēāļĢāđƒāļŠāđ‰ SQL Triggers** āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļ•āļĢāļĢāļāļ°āļ‹āđˆāļ­āļ™āđ€āļĢāđ‰āļ™ (Hidden Logic) āđāļĨāļ°āļ„āļ§āļēāļĄāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđƒāļ™āļāļēāļĢāļ”āļĩāļšāļąāļ
### **2.5 Data Migration āđāļĨāļ° Schema Versioning:**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ database migration scripts āļŠāļģāļŦāļĢāļąāļšāļ—āļļāļ schema change āđ‚āļ”āļĒāđƒāļŠāđ‰ TypeORM migrations
- āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļš rollback āļ‚āļ­āļ‡ migration āđ„āļ”āđ‰
- āļ•āđ‰āļ­āļ‡āļĄāļĩ data seeding strategy āļŠāļģāļŦāļĢāļąāļš environment āļ•āđˆāļēāļ‡āđ† (development, staging, production)
- āļ•āđ‰āļ­āļ‡āļĄāļĩ version compatibility between schema versions
- Migration scripts āļ•āđ‰āļ­āļ‡āļœāđˆāļēāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđƒāļ™ staging environment āļāđˆāļ­āļ™ production
- āļ•āđ‰āļ­āļ‡āļĄāļĩ database backup āļāđˆāļ­āļ™āļ—āļģ migration āđƒāļ™ production
### **2.6 āļāļĨāļĒāļļāļ—āļ˜āđŒāļ„āļ§āļēāļĄāļ—āļ™āļ—āļēāļ™āđāļĨāļ°āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ” (Resilience & Error Handling Strategy)**
- 2.6.1 Circuit Breaker Pattern: āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļš external service calls (Email, LINE, Elasticsearch)
- 2.6.2 Retry Mechanism: āļ”āđ‰āļ§āļĒ exponential backoff āļŠāļģāļŦāļĢāļąāļš transient failures
- 2.6.3 Fallback Strategies: Graceful degradation āđ€āļĄāļ·āđˆāļ­āļšāļĢāļīāļāļēāļĢāļ āļēāļĒāļ™āļ­āļāļĨāđ‰āļĄāđ€āļŦāļĨāļ§
- 2.6.4 Error Handling: Error messages āļ•āđ‰āļ­āļ‡āđ„āļĄāđˆāđ€āļ›āļīāļ”āđ€āļœāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ sensitive
- 2.6.5 Monitoring: Centralized error monitoring āđāļĨāļ° alerting system
## **ðŸ“Ķ 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), āļĢāļ­āļ‡āļĢāļąāļš To (āļœāļđāđ‰āļĢāļąāļšāļŦāļĨāļąāļ) āđāļĨāļ° CC (āļœāļđāđ‰āļĢāļąāļšāļŠāļģāđ€āļ™āļē) āļŦāļĨāļēāļĒāļ­āļ‡āļ„āđŒāļāļĢ
- 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. Correspondence Routing & Workflow
- 3.2.5.1 Routing Templates (āđāļĄāđˆāđāļšāļšāļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­)
- āļœāļđāđ‰āļ”āļđāđāļĨāļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđāļĄāđˆāđāļšāļšāļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­āđ„āļ”āđ‰
- āđāļĄāđˆāđāļšāļšāļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āđ‡āļ™āđāļšāļšāļ—āļąāđˆāļ§āđ„āļ› (āđƒāļŠāđ‰āđ„āļ”āđ‰āļ—āļļāļāđ‚āļ„āļĢāļ‡āļāļēāļĢ) āļŦāļĢāļ·āļ­āđ€āļ‰āļžāļēāļ°āđ‚āļ„āļĢāļ‡āļāļēāļĢ
- āđāļ•āđˆāļĨāļ°āđāļĄāđˆāđāļšāļšāļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒāļĨāļģāļ”āļąāļšāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­
- āļāļēāļĢāļŠāđˆāļ‡āļˆāļēāļ Originator -> Organization 1 -> Organization 2 -> Organization 3 āđāļĨāđ‰āļ§āļŠāđˆāļ‡āļœāļĨāļāļĨāļąāļšāļ•āļēāļĄāļĨāļģāļ”āļąāļšāđ€āļ”āļīāļĄ (āđ‚āļ”āļĒāļ–āđ‰āļē āļ­āļ‡āļāļĢāļ“āđŒāđƒāļ”āđƒāļ™ Wouting āđƒāļŦāđ‰āļŠāđˆāļ‡āļāļĨāļąāļš āļāđ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļœāļĨāļāļĨāļąāļšāļ•āļēāļĄāļĨāļģāļ”āļąāļšāđ€āļ”āļīāļĄāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļ­āđƒāļŦāđ‰āļ–āļķāļ‡ āļ­āļ‡āļāļĢāļ“āļ·āđƒāļ™āļĨāļģāļ”āļąāļšāļ–āļąāļ”āđ„āļ›)
- 3.2.5.2 Routing Steps (āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­) āđāļ•āđˆāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļ™āđāļĄāđˆāđāļšāļšāļ•āđ‰āļ­āļ‡āļāļģāļŦāļ™āļ”:
- **āļĨāļģāļ”āļąāļšāļ‚āļąāđ‰āļ™āļ•āļ­āļ™** (Sequence)
- **āļ­āļ‡āļ„āđŒāļāļĢāļœāļđāđ‰āļĢāļąāļš** (To Organization)
- **āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ** (Purpose): āđ€āļžāļ·āđˆāļ­āļ­āļ™āļļāļĄāļąāļ•āļī (FOR_APPROVAL), āđ€āļžāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļš (FOR_REVIEW), āđ€āļžāļ·āđˆāļ­āļ—āļĢāļēāļš (FOR_INFORMATION), āđ€āļžāļ·āđˆāļ­āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ (FOR_ACTION)
- **āļĢāļ°āļĒāļ°āđ€āļ§āļĨāļēāļ—āļĩāđˆāļ„āļēāļ”āļŦāļ§āļąāļ‡** (Expected Duration)
- 3.2.5.3 Actual Routing Execution (āļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­āļˆāļĢāļīāļ‡) āđ€āļĄāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āđ€āļ­āļāļŠāļēāļĢāđāļĨāļ°āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āđāļĄāđˆāđāļšāļš āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡:
- āļŠāļĢāđ‰āļēāļ‡āļĨāļģāļ”āļąāļšāļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­āļ•āļēāļĄāđāļĄāđˆāđāļšāļš
- āļ•āļīāļ”āļ•āļēāļĄāļŠāļ–āļēāļ™āļ°āļ‚āļ­āļ‡āđāļ•āđˆāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™: āļŠāđˆāļ‡āđāļĨāđ‰āļ§ (SENT), āļāļģāļĨāļąāļ‡āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ (IN_PROGRESS), āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđāļĨāđ‰āļ§ (ACTIONED), āļŠāđˆāļ‡āļ•āđˆāļ­āđāļĨāđ‰āļ§ (FORWARDED), āļ•āļ­āļšāļāļĨāļąāļšāđāļĨāđ‰āļ§ (REPLIED)
- āļĢāļ°āļšāļļāļ§āļąāļ™āļ„āļĢāļšāļāļģāļŦāļ™āļ” (Due Date) āļŠāļģāļŦāļĢāļąāļšāđāļ•āđˆāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™
- āļšāļąāļ™āļ—āļķāļāļœāļđāđ‰āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđāļĨāļ°āđ€āļ§āļĨāļēāļ—āļĩāđˆāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ
- 3.2.5.4 Routing Flexibility (āļ„āļ§āļēāļĄāļĒāļ·āļ”āļŦāļĒāļļāđˆāļ™)
- āļŠāļēāļĄāļēāļĢāļ–āļ‚āđ‰āļēāļĄāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđ„āļ”āđ‰āđƒāļ™āļāļĢāļ“āļĩāļžāļīāđ€āļĻāļĐ (āđ‚āļ”āļĒāļœāļđāđ‰āļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒ)
- āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļāļĨāļąāļšāļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāđˆāļ­āļ™āļŦāļ™āđ‰āļēāđ„āļ”āđ‰
- āļŠāļēāļĄāļēāļĢāļ–āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™āđƒāļ™āđāļ•āđˆāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™
- āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāđ€āļĄāļ·āđˆāļ­āļ–āļķāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āđƒāļŦāļĄāđˆāļŦāļĢāļ·āļ­āđƒāļāļĨāđ‰āļ„āļĢāļšāļāļģāļŦāļ™āļ”
- 3.2.6. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ: āļĄāļĩāļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļ”āļąāļ‡āļ™āļĩāđ‰
- āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āļ§āļąāļ™āđāļĨāđ‰āļ§āđ€āļŠāļĢāđ‡āļˆ (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.5.5. Workflow āļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļī: āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļšāļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāļ­āļ™āļļāļĄāļąāļ•āļīāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™āđāļĨāļ°āđ€āļ›āđ‡āļ™āļĨāļģāļ”āļąāļš āđ€āļŠāđˆāļ™
- āļŠāđˆāļ‡āļˆāļēāļ Originator -> Organization 1 -> Organization 2 -> Organization 3 āđāļĨāđ‰āļ§āļŠāđˆāļ‡āļœāļĨāļāļĨāļąāļšāļ•āļēāļĄāļĨāļģāļ”āļąāļšāđ€āļ”āļīāļĄ (āđ‚āļ”āļĒāļ–āđ‰āļē āļ­āļ‡āļāļĢāļ“āđŒāđƒāļ”āđƒāļ™ Workflow āđƒāļŦāđ‰āļŠāđˆāļ‡āļāļĨāļąāļš āļāđ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāđˆāļ‡āļœāļĨāļāļĨāļąāļšāļ•āļēāļĄāļĨāļģāļ”āļąāļšāđ€āļ”āļīāļĄāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āļĢāļ­āđƒāļŦāđ‰āļ–āļķāļ‡ āļ­āļ‡āļāļĢāļ“āļ·āđƒāļ™āļĨāļģāļ”āļąāļšāļ–āļąāļ”āđ„āļ›)
- 3.5.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. āđƒāļšāđ€āļ§āļĩāļĒāļ™āđ€āļ­āļāļŠāļēāļĢ (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. āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāđ„āļŸāļĨāđŒ (File Handling - āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āđƒāļŦāļāđˆ)**
- **3.9.1 Two-Phase Storage Strategy:**
1. **Phase 1 (Upload):** āđ„āļŸāļĨāđŒāļ–āļđāļāļ­āļąāļ›āđ‚āļŦāļĨāļ”āđ€āļ‚āđ‰āļēāđ‚āļŸāļĨāđ€āļ”āļ­āļĢāđŒ `temp/` āđāļĨāļ°āđ„āļ”āđ‰āļĢāļąāļš `temp_id`
2. **Phase 2 (Commit):** āđ€āļĄāļ·āđˆāļ­ User āļāļ” Submit āļŸāļ­āļĢāđŒāļĄāļŠāļģāđ€āļĢāđ‡āļˆ āļĢāļ°āļšāļšāļˆāļ°āļĒāđ‰āļēāļĒāđ„āļŸāļĨāđŒāļˆāļēāļ `temp/` āđ„āļ›āļĒāļąāļ‡ `permanent/{YYYY}/{MM}/` āđāļĨāļ°āļšāļąāļ™āļ—āļķāļāļĨāļ‡ Database āļ āļēāļĒāđƒāļ™ Transaction āđ€āļ”āļĩāļĒāļ§āļāļąāļ™
3. **Cleanup:** āļĄāļĩ Cron Job āļĨāļšāđ„āļŸāļĨāđŒāđƒāļ™ `temp/` āļ—āļĩāđˆāļ„āđ‰āļēāļ‡āđ€āļāļīāļ™ 24 āļŠāļĄ. (Orphan Files)
- **3.9.2 Security:**
- Virus Scan (ClamAV) āļāđˆāļ­āļ™āļĒāđ‰āļēāļĒāđ€āļ‚āđ‰āļē Permanent
- Whitelist File Types: PDF, DWG, DOCX, XLSX, ZIP
- Max Size: 50MB
- Access Control: āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļīāļ—āļ˜āļīāđŒāļœāđˆāļēāļ™ Junction Table āļāđˆāļ­āļ™āđƒāļŦāđ‰ Download Link
- **3.9.3 āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļ‚āļ­āļ‡āļāļēāļĢāļˆāļąāļ”āđ€āļāđ‡āļšāđ„āļŸāļĨāđŒ:**
- āļ•āđ‰āļ­āļ‡āļĄāļĩāļāļēāļĢ scan virus āļŠāļģāļŦāļĢāļąāļšāđ„āļŸāļĨāđŒāļ—āļĩāđˆāļ­āļąāļ›āđ‚āļŦāļĨāļ”āļ—āļąāđ‰āļ‡āļŦāļĄāļ” āđ‚āļ”āļĒāđƒāļŠāđ‰ ClamAV āļŦāļĢāļ·āļ­āļšāļĢāļīāļāļēāļĢ third-party
- āļˆāļģāļāļąāļ”āļ›āļĢāļ°āđ€āļ āļ—āđ„āļŸāļĨāđŒāļ—āļĩāđˆāļ­āļ™āļļāļāļēāļ•: PDF, DWG, DOCX, XLSX, ZIP (āļ•āđ‰āļ­āļ‡āļĢāļ°āļšāļļāļĢāļēāļĒāļāļēāļĢāļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™)
- āļ‚āļ™āļēāļ”āđ„āļŸāļĨāđŒāļŠāļđāļ‡āļŠāļļāļ”: 50MB āļ•āđˆāļ­āđ„āļŸāļĨāđŒ
- āđ„āļŸāļĨāđŒāļ•āđ‰āļ­āļ‡āļ–āļđāļāđ€āļāđ‡āļšāļ™āļ­āļ web root āđāļĨāļ°āđ€āļ‚āđ‰āļēāļ–āļķāļ‡āđ„āļ”āđ‰āļœāđˆāļēāļ™ authenticated endpoint āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
- āļ•āđ‰āļ­āļ‡āļĄāļĩ file integrity check (checksum) āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđāļāđ‰āđ„āļ‚āđ„āļŸāļĨāđŒ
- Download links āļ•āđ‰āļ­āļ‡āļĄāļĩ expiration time (default: 24 āļŠāļąāđˆāļ§āđ‚āļĄāļ‡)
- āļ•āđ‰āļ­āļ‡āļšāļąāļ™āļ—āļķāļ audit log āļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļĄāļĩāļāļēāļĢāļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāļŠāļģāļ„āļąāļ
### **3.10. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļĨāļ‚āļ—āļĩāđˆāđ€āļ­āļāļŠāļēāļĢ (Document Numbering - āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡)**
- 3.10.1. āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļŠāļĢāđ‰āļēāļ‡āđ€āļĨāļ‚āļ—āļĩāđˆāđ€āļ­āļāļŠāļēāļĢ (āđ€āļŠāđˆāļ™ correspondence_number) āđ„āļ”āđ‰āđ‚āļ”āļĒāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī
- 3.10.2. āļāļēāļĢāļ™āļąāļšāđ€āļĨāļ‚ Running Number (SEQ) āļˆāļ°āļ•āđ‰āļ­āļ‡āļ™āļąāļšāđāļĒāļāļ•āļēāļĄ Key āļ”āļąāļ‡āļ™āļĩāđ‰: **āđ‚āļ„āļĢāļ‡āļāļēāļĢ (Project)**, **āļ­āļ‡āļ„āđŒāļāļĢāļœāļđāđ‰āļŠāđˆāļ‡ (Originator Organization)**, **āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ (Document Type)** āđāļĨāļ° **āļ›āļĩāļ›āļąāļˆāļˆāļļāļšāļąāļ™ (Year)**
- 3.10.3. āļœāļđāđ‰āļ”āļđāđāļĨāļĢāļ°āļšāļš (Admin) āļ•āđ‰āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ” "āļĢāļđāļ›āđāļšāļš" (Format Template) āļ‚āļ­āļ‡āđ€āļĨāļ‚āļ—āļĩāđˆāđ€āļ­āļāļŠāļēāļĢāđ„āļ”āđ‰ (āđ€āļŠāđˆāļ™ {ORG_CODE}-{TYPE_CODE}-{YEAR_SHORT}-{SEQ:4}) āđ‚āļ”āļĒāļāļģāļŦāļ™āļ”āđāļĒāļāļ•āļēāļĄāđ‚āļ„āļĢāļ‡āļāļēāļĢāđāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ
- 3.10.4. **āļāļĨāđ„āļ:** āđƒāļŠāđ‰ **Redis Distributed Lock** āđ€āļ›āđ‡āļ™āļ”āđˆāļēāļ™āđāļĢāļ
- 3.10.5. **Safety Net:** āđ€āļžāļīāđˆāļĄ **Optimistic Locking** (āļ•āļĢāļ§āļˆāļŠāļ­āļš Version/Last Number āđƒāļ™ DB āļ‚āļ“āļ° Update) āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļĢāļ“āļĩ Redis āļĨāđˆāļĄ āļŦāļĢāļ·āļ­ Race Condition āļŦāļĨāļļāļ”āļĢāļ­āļ”
- 3.10.6. āļ•āđ‰āļ­āļ‡āļĄāļĩ retry mechanism āđāļĨāļ° fallback strategy āđ€āļĄāļ·āđˆāļ­āļāļēāļĢ generate āđ€āļĨāļ‚āļ—āļĩāđˆāđ€āļ­āļāļŠāļēāļĢāļĨāđ‰āļĄāđ€āļŦāļĨāļ§
### **3.11 āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ JSON Details (JSON & Performance - āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡)**
- **3.11.1 āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒ**
- āļˆāļąāļ”āđ€āļāđ‡āļšāļ‚āđ‰āļ­āļĄāļđāļĨāđāļšāļšāđ„āļ”āļ™āļēāļĄāļīāļāļ—āļĩāđˆāđ€āļ‰āļžāļēāļ°āđ€āļˆāļēāļ°āļˆāļ‡āļāļąāļšāđāļ•āđˆāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡āđ€āļ­āļāļŠāļēāļĢ
- āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ‚āļĒāļēāļĒāļ•āļąāļ§āļ‚āļ­āļ‡āļĢāļ°āļšāļšāđ‚āļ”āļĒāđ„āļĄāđˆāļ•āđ‰āļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ database schema
- āļˆāļąāļ”āļāļēāļĢ metadata āđāļĨāļ°āļ‚āđ‰āļ­āļĄāļđāļĨāļ›āļĢāļ°āļāļ­āļšāļŠāļģāļŦāļĢāļąāļš correspondence, routing, āđāļĨāļ° workflows
- **3.11.2 āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡ JSON Schema**
āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļĄāļĩ predefined JSON schemas āļŠāļģāļŦāļĢāļąāļšāļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢāļ•āđˆāļēāļ‡āđ†:
- **3.11.2.1 Correspondence Types**
- **GENERIC**: āļ‚āđ‰āļ­āļĄāļđāļĨāļžāļ·āđ‰āļ™āļāļēāļ™āļŠāļģāļŦāļĢāļąāļšāđ€āļ­āļāļŠāļēāļĢāļ—āļąāđˆāļ§āđ„āļ›
- **RFI**: āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļ„āļģāļ–āļēāļĄāđāļĨāļ°āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„
- **RFA**: āļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļ‚āļ­āļ­āļ™āļļāļĄāļąāļ•āļīāđāļšāļšāđāļĨāļ°āļ§āļąāļŠāļ”āļļ
- **TRANSMITTAL**: āļĢāļēāļĒāļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāļ—āļĩāđˆāļŠāđˆāļ‡āļ•āđˆāļ­
- **LETTER**: āļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļ”āļŦāļĄāļēāļĒāļ—āļēāļ‡āļāļēāļĢ
- **EMAIL**: āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļĩāđ€āļĄāļĨ
- **3.11.2.2 Routing Types**
- **ROUTING_TEMPLATE**: āļāļŽāđāļĨāļ°āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­
- **ROUTING_INSTANCE**: āļŠāļ–āļēāļ™āļ°āđāļĨāļ°āļ›āļĢāļ°āļ§āļąāļ•āļīāļāļēāļĢāļŠāđˆāļ‡āļ•āđˆāļ­
- **ROUTING_ACTION**: āļāļēāļĢāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđƒāļ™āđāļ•āđˆāļĨāļ°āļ‚āļąāđ‰āļ™āļ•āļ­āļ™
- **3.11.2.3 Audit Types**
- **AUDIT_LOG**: āļ‚āđ‰āļ­āļĄāļđāļĨāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļš
- **SECURITY_SCAN**: āļœāļĨāļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ
- **3.11.3 Virtual Columns (āđƒāļŦāļĄāđˆ):** āļŠāļģāļŦāļĢāļąāļš Field āđƒāļ™ JSON āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ„āđ‰āļ™āļŦāļē (Search) āļŦāļĢāļ·āļ­āļˆāļąāļ”āđ€āļĢāļĩāļĒāļ‡ (Sort) āļšāđˆāļ­āļĒāđ† **āļ•āđ‰āļ­āļ‡āļŠāļĢāđ‰āļēāļ‡ Generated Column (Virtual Column)** āđƒāļ™ Database āđāļĨāļ°āļ—āļģ Index āđ„āļ§āđ‰ āđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡āļŠāļļāļ”
- **3.11.4 Validation Rules**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ JSON schema validation āļŠāļģāļŦāļĢāļąāļšāđāļ•āđˆāļĨāļ°āļ›āļĢāļ°āđ€āļ āļ—
- āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļš versioning āļ‚āļ­āļ‡ schema
- āļ•āđ‰āļ­āļ‡āļĄāļĩ default values āļŠāļģāļŦāļĢāļąāļš field āļ—āļĩāđˆāđ„āļĄāđˆāļšāļąāļ‡āļ„āļąāļš
- āļ•āđ‰āļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļš data types āđāļĨāļ° format āđƒāļŦāđ‰āļ–āļđāļāļ•āđ‰āļ­āļ‡
- **3.11.5 Performance Requirements**
- JSON field āļ•āđ‰āļ­āļ‡āļĄāļĩāļ‚āļ™āļēāļ”āđ„āļĄāđˆāđ€āļāļīāļ™ 50KB
- āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļš indexing āļŠāļģāļŦāļĢāļąāļš field āļ—āļĩāđˆāđƒāļŠāđ‰āļ„āđ‰āļ™āļŦāļēāļšāđˆāļ­āļĒ
- āļ•āđ‰āļ­āļ‡āļĄāļĩ compression āļŠāļģāļŦāļĢāļąāļš JSON āļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ
- **3.11.6 Security Requirements**
- āļ•āđ‰āļ­āļ‡ sanitize JSON input āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™ injection attacks
- āļ•āđ‰āļ­āļ‡ validate JSON structure āļāđˆāļ­āļ™āļšāļąāļ™āļ—āļķāļ
- āļ•āđ‰āļ­āļ‡ encrypt sensitive data āđƒāļ™ JSON fields
## **🔐 4. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļŠāļīāļ—āļ˜āļīāđŒāđāļĨāļ°āļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡ (Access Control Requirements)**
### **4.1. āļ āļēāļžāļĢāļ§āļĄ:** āļœāļđāđ‰āđƒāļŠāđ‰āđāļĨāļ°āļ­āļ‡āļ„āđŒāļāļĢāļŠāļēāļĄāļēāļĢāļ–āļ”āļđāđāļĨāļ°āđāļāđ‰āđ„āļ‚āđ€āļ­āļāļŠāļēāļĢāđ„āļ”āđ‰āļ•āļēāļĄāļŠāļīāļ—āļ˜āļīāđŒāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļš āđ‚āļ”āļĒāļĢāļ°āļšāļšāļŠāļīāļ—āļ˜āļīāđŒāļˆāļ°āđ€āļ›āđ‡āļ™āđāļšāļš Role-Based Access Control (RBAC)
### **4.2. āļĨāļģāļ”āļąāļšāļŠāļąāđ‰āļ™āļ‚āļ­āļ‡āļŠāļīāļ—āļ˜āļīāđŒ (Permission Hierarchy)**
- Global: āļŠāļīāļ—āļ˜āļīāđŒāļŠāļđāļ‡āļŠāļļāļ”āļ‚āļ­āļ‡āļĢāļ°āļšāļš
- Organization: āļŠāļīāļ—āļ˜āļīāđŒāļ āļēāļĒāđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢ āđ€āļ›āđ‡āļ™āļŠāļīāļ—āļ˜āļīāđŒāļžāļ·āđ‰āļ™āļāļēāļ™āļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰
- Project: āļŠāļīāļ—āļ˜āļīāđŒāđ€āļ‰āļžāļēāļ°āđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ āļˆāļ°āļ–āļđāļāļžāļīāļˆāļēāļĢāļ“āļēāđ€āļĄāļ·āđˆāļ­āļœāļđāđ‰āđƒāļŠāđ‰āļ­āļĒāļđāđˆāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢāļ™āļąāđ‰āļ™
- Contract: āļŠāļīāļ—āļ˜āļīāđŒāđ€āļ‰āļžāļēāļ°āđƒāļ™āļŠāļąāļāļāļē āļˆāļ°āļ–āļđāļāļžāļīāļˆāļēāļĢāļ“āļēāđ€āļĄāļ·āđˆāļ­āļœāļđāđ‰āđƒāļŠāđ‰āļ­āļĒāļđāđˆāđƒāļ™āļŠāļąāļāļāļēāļ™āļąāđ‰āļ™ (āļŠāļąāļāļāļēāđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļŦāļ™āļķāđˆāļ‡āļ‚āļ­āļ‡āđ‚āļ„āļĢāļ‡āļāļēāļĢ)
āļāļŽāļāļēāļĢāļšāļąāļ‡āļ„āļąāļšāđƒāļŠāđ‰: āđ€āļĄāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļŠāļīāļ—āļ˜āļīāđŒ āļĢāļ°āļšāļšāļˆāļ°āļžāļīāļˆāļēāļĢāļ“āļēāļŠāļīāļ—āļ˜āļīāđŒāļˆāļēāļāļ—āļļāļāļĢāļ°āļ”āļąāļšāļ—āļĩāđˆāļœāļđāđ‰āđƒāļŠāđ‰āļĄāļĩ āđāļĨāļ°āđƒāļŠāđ‰ āļŠāļīāļ—āļ˜āļīāđŒāļ—āļĩāđˆāļĄāļēāļāļ—āļĩāđˆāļŠāļļāļ” (Most Permissive) āđ€āļ›āđ‡āļ™āļ•āļąāļ§āļ•āļąāļ”āļŠāļīāļ™
āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡: āļœāļđāđ‰āđƒāļŠāđ‰ A āđ€āļ›āđ‡āļ™ Viewer āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢ āđāļ•āđˆāļ–āļđāļāļĄāļ­āļšāļŦāļĄāļēāļĒāđ€āļ›āđ‡āļ™ Editor āđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ X āđ€āļĄāļ·āđˆāļ­āļ­āļĒāļđāđˆāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ X āļœāļđāđ‰āđƒāļŠāđ‰ A āļˆāļ°āļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāđāļāđ‰āđ„āļ‚āđ„āļ”āđ‰
### **4.3. āļāļēāļĢāļāļģāļŦāļ™āļ”āļšāļ—āļšāļēāļ— (Roles) āđāļĨāļ°āļ‚āļ­āļšāđ€āļ‚āļ• (Scope)**
| āļšāļ—āļšāļēāļ— (Role) | āļ‚āļ­āļšāđ€āļ‚āļ• (Scope) | āļ„āļģāļ­āļ˜āļīāļšāļēāļĒ | āļŠāļīāļ—āļ˜āļīāđŒāļŦāļĨāļąāļ (Key Permissions) |
| :------------------- | :------------- | :---------------------- | :------------------------------------------------------------------------------------- |
| **Superadmin** | Global | āļœāļđāđ‰āļ”āļđāđāļĨāļĢāļ°āļšāļšāļŠāļđāļ‡āļŠāļļāļ” | āļ—āļģāļ—āļļāļāļ­āļĒāđˆāļēāļ‡āđƒāļ™āļĢāļ°āļšāļš, āļˆāļąāļ”āļāļēāļĢāļ­āļ‡āļ„āđŒāļāļĢ, āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļāļĢāļ°āļ”āļąāļš Global |
| **Org Admin** | Organization | āļœāļđāđ‰āļ”āļđāđāļĨāļ­āļ‡āļ„āđŒāļāļĢ | āļˆāļąāļ”āļāļēāļĢāļœāļđāđ‰āđƒāļŠāđ‰āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢ, āļˆāļąāļ”āļāļēāļĢāļšāļ—āļšāļēāļ—/āļŠāļīāļ—āļ˜āļīāđŒāļ āļēāļĒāđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢ, āļ”āļđāļĢāļēāļĒāļ‡āļēāļ™āļ‚āļ­āļ‡āļ­āļ‡āļ„āđŒāļāļĢ |
| **Document Control** | Organization | āļ„āļ§āļšāļ„āļļāļĄāđ€āļ­āļāļŠāļēāļĢāļ‚āļ­āļ‡āļ­āļ‡āļ„āđŒāļāļĢ | āđ€āļžāļīāđˆāļĄ/āđāļāđ‰āđ„āļ‚/āļĨāļšāđ€āļ­āļāļŠāļēāļĢ, āļāļģāļŦāļ™āļ”āļŠāļīāļ—āļ˜āļīāđŒāđ€āļ­āļāļŠāļēāļĢāļ āļēāļĒāđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢ |
| **Editor** | Organization | āļœāļđāđ‰āđāļāđ‰āđ„āļ‚āđ€āļ­āļāļŠāļēāļĢāļ‚āļ­āļ‡āļ­āļ‡āļ„āđŒāļāļĢ | āđ€āļžāļīāđˆāļĄ/āđāļāđ‰āđ„āļ‚āđ€āļ­āļāļŠāļēāļĢāļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĄāļ­āļšāļŦāļĄāļēāļĒ |
| **Viewer** | Organization | āļœāļđāđ‰āļ”āļđāđ€āļ­āļāļŠāļēāļĢāļ‚āļ­āļ‡āļ­āļ‡āļ„āđŒāļāļĢ | āļ”āļđāđ€āļ­āļāļŠāļēāļĢāļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāđ€āļ‚āđ‰āļēāļ–āļķāļ‡ |
| **Project Manager** | Project | āļœāļđāđ‰āļˆāļąāļ”āļāļēāļĢāđ‚āļ„āļĢāļ‡āļāļēāļĢ | āļˆāļąāļ”āļāļēāļĢāļŠāļĄāļēāļŠāļīāļāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ (āđ€āļžāļīāđˆāļĄ/āļĨāļš/āļĄāļ­āļšāļšāļ—āļšāļēāļ—), āļŠāļĢāđ‰āļēāļ‡/āļˆāļąāļ”āļāļēāļĢāļŠāļąāļāļāļēāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ, āļ”āļđāļĢāļēāļĒāļ‡āļēāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ |
| **Contract Admin** | Contract | āļœāļđāđ‰āļ”āļđāđāļĨāļŠāļąāļāļāļē | āļˆāļąāļ”āļāļēāļĢāļŠāļĄāļēāļŠāļīāļāđƒāļ™āļŠāļąāļāļāļē, āļŠāļĢāđ‰āļēāļ‡/āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļāđ€āļ‰āļžāļēāļ°āļŠāļąāļāļāļē (āļ–āđ‰āļēāļĄāļĩ), āļ­āļ™āļļāļĄāļąāļ•āļīāđ€āļ­āļāļŠāļēāļĢāđƒāļ™āļŠāļąāļāļāļē |
### **4.4. Token Management (āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡)**
- **Payload Optimization:** āđƒāļ™ JWT Access Token āđƒāļŦāđ‰āđ€āļāđ‡āļšāđ€āļ‰āļžāļēāļ° `userId` āđāļĨāļ° `scope` āļ›āļąāļˆāļˆāļļāļšāļąāļ™āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
- **Permission Caching:** āļŠāļīāļ—āļ˜āļīāđŒāļĨāļ°āđ€āļ­āļĩāļĒāļ” (Permissions List) āđƒāļŦāđ‰āđ€āļāđ‡āļšāđƒāļ™ **Redis** āđāļĨāļ°āļ”āļķāļ‡āļĄāļēāļ•āļĢāļ§āļˆāļŠāļ­āļšāđ€āļĄāļ·āđˆāļ­ Request āđ€āļ‚āđ‰āļēāļĄāļē āđ€āļžāļ·āđˆāļ­āļĨāļ”āļ‚āļ™āļēāļ” Token āđāļĨāļ°āđ€āļžāļīāđˆāļĄāļ„āļ§āļēāļĄāđ€āļĢāđ‡āļ§
### **4.5. āļāļĢāļ°āļšāļ§āļ™āļāļēāļĢāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āđƒāļŠāđ‰āļ‡āļēāļ™ (Onboarding Workflow) āļ—āļĩāđˆāļŠāļĄāļšāļđāļĢāļ“āđŒ**
- **4.5.1. āļŠāļĢāđ‰āļēāļ‡āļ­āļ‡āļ„āđŒāļāļĢ (Organization)**
- **Superadmin** āļŠāļĢāđ‰āļēāļ‡āļ­āļ‡āļ„āđŒāļāļĢāđƒāļŦāļĄāđˆ (āđ€āļŠāđˆāļ™ āļšāļĢāļīāļĐāļąāļ— A)
- **Superadmin** āđāļ•āđˆāļ‡āļ•āļąāđ‰āļ‡āļœāļđāđ‰āđƒāļŠāđ‰āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒ 1 āļ„āļ™āđƒāļŦāđ‰āđ€āļ›āđ‡āļ™ **Org Admin** āļŦāļĢāļ·āļ­ **Document Control** āļ‚āļ­āļ‡āļšāļĢāļīāļĐāļąāļ— A
- **4.5.2. āđ€āļžāļīāđˆāļĄāļœāļđāđ‰āđƒāļŠāđ‰āđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢ**
- **Org Admin** āļ‚āļ­āļ‡āļšāļĢāļīāļĐāļąāļ— A āđ€āļžāļīāđˆāļĄāļœāļđāđ‰āđƒāļŠāđ‰āļ­āļ·āđˆāļ™āđ† (Editor, Viewer) āđ€āļ‚āđ‰āļēāļĄāļēāđƒāļ™āļ­āļ‡āļ„āđŒāļāļĢāļ‚āļ­āļ‡āļ•āļ™
- **4.5.3. āļĄāļ­āļšāļŦāļĄāļēāļĒāļœāļđāđ‰āđƒāļŠāđ‰āđƒāļŦāđ‰āļāļąāļšāđ‚āļ„āļĢāļ‡āļāļēāļĢ (Project)**
- **Project Manager** āļ‚āļ­āļ‡āđ‚āļ„āļĢāļ‡āļāļēāļĢ X (āļ‹āļķāđˆāļ‡āļ­āļēāļˆāļĄāļēāļˆāļēāļāļšāļĢāļīāļĐāļąāļ— A āļŦāļĢāļ·āļ­āļšāļĢāļīāļĐāļąāļ—āļ­āļ·āđˆāļ™) āļ—āļģāļāļēāļĢ "āđ€āļŠāļīāļ" āļŦāļĢāļ·āļ­ "āļĄāļ­āļšāļŦāļĄāļēāļĒ" āļœāļđāđ‰āđƒāļŠāđ‰āļˆāļēāļāļ­āļ‡āļ„āđŒāļāļĢāļ•āđˆāļēāļ‡āđ† āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡āđ€āļ‚āđ‰āļēāļĄāļēāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ X
- āđƒāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰ **Project Manager** āļˆāļ°āļāļģāļŦāļ™āļ” **āļšāļ—āļšāļēāļ—āļĢāļ°āļ”āļąāļšāđ‚āļ„āļĢāļ‡āļāļēāļĢ** (āđ€āļŠāđˆāļ™ Project Member, āļŦāļĢāļ·āļ­āļ­āļēāļˆāđ„āļĄāđˆāļĄāļĩāļšāļ—āļšāļēāļ—āļžāļīāđ€āļĻāļĐ āđƒāļŦāđ‰āđƒāļŠāđ‰āļŠāļīāļ—āļ˜āļīāđŒāļˆāļēāļāļĢāļ°āļ”āļąāļšāļ­āļ‡āļ„āđŒāļāļĢāđ„āļ›āļāđˆāļ­āļ™)
- **4.5.4. āđ€āļĄāļ­āļšāļŦāļĄāļēāļĒāļœāļđāđ‰āđƒāļŠāđ‰āđƒāļŦāđ‰āļāļąāļšāļŠāļąāļāļāļē (Contract)**
- **Contract Admin** āļ‚āļ­āļ‡āļŠāļąāļāļāļē Y (āļ‹āļķāđˆāļ‡āđ€āļ›āđ‡āļ™āļŠāđˆāļ§āļ™āļŦāļ™āļķāđˆāļ‡āļ‚āļ­āļ‡āđ‚āļ„āļĢāļ‡āļāļēāļĢ X) āļ—āļģāļāļēāļĢāđ€āļĨāļ·āļ­āļāļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļ­āļĒāļđāđˆāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ X āđāļĨāđ‰āļ§ āļĄāļ­āļšāļŦāļĄāļēāļĒāđƒāļŦāđ‰āđ€āļ‚āđ‰āļēāļĄāļēāđƒāļ™āļŠāļąāļāļāļē Y
- āđƒāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ™āļĩāđ‰ **Contract Admin** āļˆāļ°āļāļģāļŦāļ™āļ” **āļšāļ—āļšāļēāļ—āļĢāļ°āļ”āļąāļšāļŠāļąāļāļāļē** (āđ€āļŠāđˆāļ™ Contract Member) āđāļĨāļ°āļŠāļīāļ—āļ˜āļīāđŒāđ€āļ‰āļžāļēāļ°āļ—āļĩāđˆāļˆāļģāđ€āļ›āđ‡āļ™
- **4.5.5 Security Onboarding:**
- āļ•āđ‰āļ­āļ‡āļšāļąāļ‡āļ„āļąāļšāđ€āļ›āļĨāļĩāđˆāļĒāļ™ password āļ„āļĢāļąāđ‰āļ‡āđāļĢāļāļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āđƒāļŦāļĄāđˆ
- āļ•āđ‰āļ­āļ‡āļĄāļĩ security awareness training āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļ—āļĩāđˆāļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāļŠāļđāļ‡
- āļ•āđ‰āļ­āļ‡āļĄāļĩ process āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļĢāļĩāđ€āļ‹āđ‡āļ• password āļ—āļĩāđˆāļ›āļĨāļ­āļ”āļ āļąāļĒ
- āļ•āđ‰āļ­āļ‡āļšāļąāļ™āļ—āļķāļ audit log āļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļĄāļĩāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ permissions
### **4.6. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļ (Master Data Management) āļ—āļĩāđˆāđāļšāđˆāļ‡āļ•āļēāļĄāļĢāļ°āļ”āļąāļš**
| āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļ | āļœāļđāđ‰āļĄāļĩāļŠāļīāļ—āļ˜āļīāđŒāļˆāļąāļ”āļāļēāļĢ | āļĢāļ°āļ”āļąāļš |
| :---------------------------------- | :------------------------------ | :--------------------------------- |
| āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ­āļāļŠāļēāļĢ (Correspondence, RFA) | **Superadmin** | Global |
| āļŠāļ–āļēāļ™āļ°āđ€āļ­āļāļŠāļēāļĢ (Draft, Approved, etc.) | **Superadmin** | Global |
| āļŦāļĄāļ§āļ”āļŦāļĄāļđāđˆāđāļšāļš (Shop Drawing) | **Project Manager** | Project (āļŠāļĢāđ‰āļēāļ‡āđƒāļŦāļĄāđˆāđ„āļ”āđ‰āļ āļēāļĒāđƒāļ™āđ‚āļ„āļĢāļ‡āļāļēāļĢ) |
| Tags | **Org Admin / Project Manager** | Organization / Project |
| āļšāļ—āļšāļēāļ—āđāļĨāļ°āļŠāļīāļ—āļ˜āļīāđŒ (Custom Roles) | **Superadmin / Org Admin** | Global / Organization |
| Document Numbering Formats | **Superadmin / Admin** | Global / Organization |
## **ðŸ‘Ĩ 5. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ (User Interface & Experience)**
### **5.1. Layout āļŦāļĨāļąāļ:** āļŦāļ™āđ‰āļēāđ€āļ§āđ‡āļšāđƒāļŠāđ‰āļĢāļđāļ›āđāļšāļš App Shell āļ—āļĩāđˆāļ›āļĢāļ°āļāļ­āļšāļ”āđ‰āļ§āļĒ
- Navbar (āļŠāđˆāļ§āļ™āļšāļ™): āđāļŠāļ”āļ‡āļŠāļ·āđˆāļ­āļĢāļ°āļšāļš, āđ€āļĄāļ™āļđāļœāļđāđ‰āđƒāļŠāđ‰ (Profile), āđ€āļĄāļ™āļđāļŠāļģāļŦāļĢāļąāļš Document Control/āđ€āļĄāļ™āļđāļŠāļģāļŦāļĢāļąāļš 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 āļ—āļĩāđˆāļœāļđāđ‰āđƒāļŠāđ‰āļ•āđ‰āļ­āļ‡āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ
- Security Metrics: āđāļŠāļ”āļ‡āļˆāļģāļ™āļ§āļ™ files scanned, security incidents, failed login attempts
### **5.4. āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļŠāļ–āļēāļ™āļ°:** āļ­āļ‡āļ„āđŒāļāļĢāļŠāļēāļĄāļēāļĢāļ–āļ•āļīāļ”āļ•āļēāļĄāļŠāļ–āļēāļ™āļ°āđ€āļ­āļāļŠāļēāļĢāļ—āļąāđ‰āļ‡āļ‚āļ­āļ‡āļ•āļ™āđ€āļ­āļ‡ (Originator) āđāļĨāļ°āļŠāļ–āļēāļ™āļ°āđ€āļ­āļāļŠāļēāļĢāļ—āļĩāđˆāļŠāđˆāļ‡āļĄāļēāļ–āļķāļ‡āļ•āļ™āđ€āļ­āļ‡ (Recipient)
### **5.5. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ•āļąāļ§ (Profile Page):** āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļ•āļąāļ§āđāļĨāļ°āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļĢāļŦāļąāļŠāļœāđˆāļēāļ™āļ‚āļ­āļ‡āļ•āļ™āđ€āļ­āļ‡āđ„āļ”āđ‰
### **5.6. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāļ—āļēāļ‡āđ€āļ—āļ„āļ™āļīāļ„ (RFA & Workflow):** āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ”āļđ RFA āđƒāļ™āļĢāļđāļ›āđāļšāļš Workflow āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āđ‰āđƒāļ™āļŦāļ™āđ‰āļēāđ€āļ”āļĩāļĒāļ§, āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāļĒāļąāļ‡āđ„āļĄāđˆāļ–āļķāļ‡āļŦāļĢāļ·āļ­āļœāđˆāļēāļ™āđ„āļ›āđāļĨāđ‰āļ§āļˆāļ°āđ€āļ›āđ‡āļ™āļĢāļđāļ›āđāļšāļš diable, āļŠāļēāļĄāļēāļĢāļ–āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđ„āļ”āđ‰āđ€āļ‰āļžāļēāļ°āđƒāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĄāļ­āļšāļŦāļĄāļēāļĒāļ‡āļēāļ™ (active) āđ€āļŠāđˆāļ™ āļ•āļĢāļ§āļˆāļŠāļ­āļšāđāļĨāđ‰āļ§ āđ€āļžāļ·āđˆāļ­āđ„āļ›āļĒāļąāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ›, āļŠāļīāļ—āļ˜āļīāđŒ Document Control āļ‚āļķāđ‰āļ™āđ„āļ› āļŠāļēāļĄāļĢāļ–āļāļ” āđ„āļ›āļĒāļąāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ› āđ„āļ”āđ‰āļ—āļļāļāļ‚āļąāđ‰āļ™āļ•āļ­āļ™, āļāļēāļĢāļĒāđ‰āļ­āļ™āļāļĨāļąāļš āđ„āļ›āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāđˆāļ­āļ™āļŦāļ™āđ‰āļē āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāđ„āļ”āđ‰āđ‚āļ”āļĒ āļŠāļīāļ—āļ˜āļīāđŒ Document Control āļ‚āļķāđ‰āļ™āđ„āļ›
### **5.7. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđƒāļšāđ€āļ§āļĩāļĒāļ™āđ€āļ­āļāļŠāļēāļĢ (Circulation):** āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ”āļđ Circulation āđƒāļ™āļĢāļđāļ›āđāļšāļš Workflow āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āđ‰āđƒāļ™āļŦāļ™āđ‰āļēāđ€āļ”āļĩāļĒāļ§,āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāļĒāļąāļ‡āđ„āļĄāđˆāļ–āļķāļ‡āļŦāļĢāļ·āļ­āļœāđˆāļēāļ™āđ„āļ›āđāļĨāđ‰āļ§āļˆāļ°āđ€āļ›āđ‡āļ™āļĢāļđāļ›āđāļšāļš diable, āļŠāļēāļĄāļēāļĢāļ–āļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢāđ„āļ”āđ‰āđ€āļ‰āļžāļēāļ°āđƒāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ—āļĩāđˆāđ„āļ”āđ‰āļĢāļąāļšāļĄāļ­āļšāļŦāļĄāļēāļĒāļ‡āļēāļ™ (active) āđ€āļŠāđˆāļ™ āļ•āļĢāļ§āļˆāļŠāļ­āļšāđāļĨāđ‰āļ§ āđ€āļžāļ·āđˆāļ­āđ„āļ›āļĒāļąāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ›, āļŠāļīāļ—āļ˜āļīāđŒ Document Control āļ‚āļķāđ‰āļ™āđ„āļ› āļŠāļēāļĄāļĢāļ–āļāļ” āđ„āļ›āļĒāļąāļ‡āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļ•āđˆāļ­āđ„āļ› āđ„āļ”āđ‰āļ—āļļāļāļ‚āļąāđ‰āļ™āļ•āļ­āļ™, āļāļēāļĢāļĒāđ‰āļ­āļ™āļāļĨāļąāļš āđ„āļ›āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāđˆāļ­āļ™āļŦāļ™āđ‰āļē āļŠāļēāļĄāļēāļĢāļ–āļ—āļģāđ„āļ”āđ‰āđ‚āļ”āļĒ āļŠāļīāļ—āļ˜āļīāđŒ Document Control āļ‚āļķāđ‰āļ™āđ„āļ›
### **5.8. āļāļēāļĢāļˆāļąāļ”āļāļēāļĢāđ€āļ­āļāļŠāļēāļĢāļ™āļģāļŠāđˆāļ‡ (Transmittals):** āļœāļđāđ‰āđƒāļŠāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ”āļđ Transmittals āđƒāļ™āļĢāļđāļ›āđāļšāļšāļĢāļēāļĒāļāļēāļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđ„āļ”āđ‰āđƒāļ™āļŦāļ™āđ‰āļēāđ€āļ”āļĩāļĒāļ§
### **5.9. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ” UI/UX āļāļēāļĢāđāļ™āļšāđ„āļŸāļĨāđŒ (File Attachment UX):**
- āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāļ­āļąāļ›āđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāļŦāļĨāļēāļĒāđ„āļŸāļĨāđŒāļžāļĢāđ‰āļ­āļĄāļāļąāļ™ (Multi-file upload) āđ€āļŠāđˆāļ™ āļāļēāļĢāļĨāļēāļāđāļĨāļ°āļ§āļēāļ‡ (Drag-and-Drop)
- āđƒāļ™āļŦāļ™āđ‰āļēāļ­āļąāļ›āđ‚āļŦāļĨāļ” (āđ€āļŠāđˆāļ™ āļŠāļĢāđ‰āļēāļ‡ RFA āļŦāļĢāļ·āļ­ Correspondence) āļœāļđāđ‰āđƒāļŠāđ‰āļ•āđ‰āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ”āđ„āļ”āđ‰āļ§āđˆāļēāđ„āļŸāļĨāđŒāđƒāļ”āđ€āļ›āđ‡āļ™ "āđ€āļ­āļāļŠāļēāļĢāļŦāļĨāļąāļ" (Main Document āđ€āļŠāđˆāļ™ PDF) āđāļĨāļ°āđ„āļŸāļĨāđŒāđƒāļ”āđ€āļ›āđ‡āļ™ "āđ€āļ­āļāļŠāļēāļĢāđāļ™āļšāļ›āļĢāļ°āļāļ­āļš" (Supporting Attachments āđ€āļŠāđˆāļ™ .dwg, .docx, .zip)
- **Security Feedback:** āđāļŠāļ”āļ‡ security warnings āļŠāļģāļŦāļĢāļąāļš file types āļ—āļĩāđˆāđ€āļŠāļĩāđˆāļĒāļ‡āļŦāļĢāļ·āļ­ files āļ—āļĩāđˆ fail virus scan
- **File Type Indicators:** āđāļŠāļ”āļ‡ file type icons āđāļĨāļ° security status
### **5.10 Form & Interaction (āđƒāļŦāļĄāđˆ)**
- **Dynamic Form Generator:** āđƒāļŠāđ‰ Component āļāļĨāļēāļ‡āļ—āļĩāđˆāļĢāļąāļš JSON Schema āđāļĨāđ‰āļ§ Render Form āļ­āļ­āļāļĄāļēāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđ€āļžāļ·āđˆāļ­āļĨāļ”āļ„āļ§āļēāļĄāļ‹āđ‰āļģāļ‹āđ‰āļ­āļ™āļ‚āļ­āļ‡āđ‚āļ„āđ‰āļ”āļŦāļ™āđ‰āļēāļšāđ‰āļēāļ™ āđāļĨāļ°āļĢāļ­āļ‡āļĢāļąāļšāđ€āļ­āļāļŠāļēāļĢāļ›āļĢāļ°āđ€āļ āļ—āđƒāļŦāļĄāđˆāđ† āđ„āļ”āđ‰āļ—āļąāļ™āļ—āļĩ
- **Optimistic Updates:** āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ–āļēāļ™āļ° (āđ€āļŠāđˆāļ™ āļāļ” Approve, āļāļ” Read) āđƒāļŦāđ‰ UI āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ–āļēāļ™āļ°āļ—āļąāļ™āļ—āļĩāđƒāļŦāđ‰āļœāļđāđ‰āđƒāļŠāđ‰āđ€āļŦāđ‡āļ™āļāđˆāļ­āļ™āļĢāļ­ API Response (Rollback āļ–āđ‰āļē Failed)
### **5.11 Mobile Responsiveness (āđƒāļŦāļĄāđˆ)**
- **Table Visualization:** āļšāļ™āļŦāļ™āđ‰āļēāļˆāļ­āļĄāļ·āļ­āļ–āļ·āļ­ āļ•āļēāļĢāļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļĄāļĩāļŦāļĨāļēāļĒ Column (āđ€āļŠāđˆāļ™ Correspondence List) āļ•āđ‰āļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āđ‡āļ™āđāļšāļš **Card View** āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī
- **Navigation:** Sidebar āļ•āđ‰āļ­āļ‡āđ€āļ›āđ‡āļ™āđāļšāļš Collapsible Drawer
### **5.12 Resilience & Offline Support (āđƒāļŦāļĄāđˆ)**
- **Auto-Save Draft:** āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļšāļąāļ™āļ—āļķāļāļ‚āđ‰āļ­āļĄāļđāļĨāļŸāļ­āļĢāđŒāļĄāļ—āļĩāđˆāļāļģāļĨāļąāļ‡āļāļĢāļ­āļāļĨāļ‡ **LocalStorage** āļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļēāļĒāļāļĢāļ“āļĩāđ€āļ™āđ‡āļ•āļŦāļĨāļļāļ”āļŦāļĢāļ·āļ­āļ›āļīāļ” Browser āđ‚āļ”āļĒāđ„āļĄāđˆāđ„āļ”āđ‰āļ•āļąāđ‰āļ‡āđƒāļˆ
- **Graceful Degradation:** āļŦāļēāļ Service āļĢāļ­āļ‡ (āđ€āļŠāđˆāļ™ Search, Notification) āļĨāđˆāļĄ āļĢāļ°āļšāļšāļŦāļĨāļąāļ (CRUD) āļ•āđ‰āļ­āļ‡āļĒāļąāļ‡āļ—āļģāļ‡āļēāļ™āļ•āđˆāļ­āđ„āļ”āđ‰
## **ðŸ›Ąïļ 6. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ—āļĩāđˆāđ„āļĄāđˆāđƒāļŠāđˆāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™ (Non-Functional Requirements)**
### **6.1. āļāļēāļĢāļšāļąāļ™āļ—āļķāļāļāļēāļĢāļāļĢāļ°āļ—āļģ (Audit Log):** āļ—āļļāļāļāļēāļĢāļāļĢāļ°āļ—āļģāļ—āļĩāđˆāļŠāļģāļ„āļąāļāļ‚āļ­āļ‡āļœāļđāđ‰āđƒāļŠāđ‰ (āļŠāļĢāđ‰āļēāļ‡, āđāļāđ‰āđ„āļ‚, āļĨāļš, āļŠāđˆāļ‡) āļˆāļ°āļ–āļđāļāļšāļąāļ™āļ—āļķāļāđ„āļ§āđ‰āđƒāļ™ audit_logs āđ€āļžāļ·āđˆāļ­āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļĒāđ‰āļ­āļ™āļŦāļĨāļąāļ‡
- **6.1.1 āļ‚āļ­āļšāđ€āļ‚āļ•āļāļēāļĢāļšāļąāļ™āļ—āļķāļ Audit Log:**
- āļ—āļļāļāļāļēāļĢāļŠāļĢāđ‰āļēāļ‡/āđāļāđ‰āđ„āļ‚/āļĨāļš āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļģāļ„āļąāļ (correspondences, RFAs, drawings, users, permissions)
- āļ—āļļāļāļāļēāļĢāđ€āļ‚āđ‰āļēāļ–āļķāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ sensitive (user data, financial information)
- āļ—āļļāļāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ–āļēāļ™āļ° workflow (status transitions)
- āļ—āļļāļāļāļēāļĢāļ”āļēāļ§āļ™āđŒāđ‚āļŦāļĨāļ”āđ„āļŸāļĨāđŒāļŠāļģāļ„āļąāļ (contract documents, financial reports)
- āļ—āļļāļāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ permission āđāļĨāļ° role assignment
- āļ—āļļāļāļāļēāļĢāļĨāđ‡āļ­āļāļ­āļīāļ™āļ—āļĩāđˆāļŠāļģāđ€āļĢāđ‡āļˆāđāļĨāļ°āļĨāđ‰āļĄāđ€āļŦāļĨāļ§
- āļ—āļļāļāļāļēāļĢāļŠāđˆāļ‡āļ„āļģāļ‚āļ­ API āļ—āļĩāđˆāļŠāļģāļ„āļąāļ
- **6.1.2 āļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļšāļąāļ™āļ—āļķāļāđƒāļ™ Audit Log:**
- āļœāļđāđ‰āđƒāļŠāđ‰āļ‡āļēāļ™ (user_id)
- āļāļēāļĢāļāļĢāļ°āļ—āļģ (action)
- āļŠāļ™āļīāļ”āļ‚āļ­āļ‡ entity (entity_type)
- ID āļ‚āļ­āļ‡ entity (entity_id)
- āļ‚āđ‰āļ­āļĄāļđāļĨāļāđˆāļ­āļ™āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ (old_values) - āļŠāļģāļŦāļĢāļąāļš update operations
- āļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļąāļ‡āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ (new_values) - āļŠāļģāļŦāļĢāļąāļš update operations
- IP address
- User agent
- Timestamp
- Request ID āļŠāļģāļŦāļĢāļąāļš tracing
### **6.2. Data Archiving & Partitioning (āđƒāļŦāļĄāđˆ)**
- āļŠāļģāļŦāļĢāļąāļšāļ•āļēāļĢāļēāļ‡āļ—āļĩāđˆāļĄāļĩāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāđāļĨāļ°āđ‚āļ•āđ€āļĢāđ‡āļ§ (āđ€āļŠāđˆāļ™ `audit_logs`, `notifications`, `correspondence_revisions`) āļ•āđ‰āļ­āļ‡āļ­āļ­āļāđāļšāļšāđ‚āļ”āļĒāļĢāļ­āļ‡āļĢāļąāļš **Table Partitioning** (āđāļšāđˆāļ‡āļ•āļēāļĄ Range āļ§āļąāļ™āļ—āļĩāđˆ āļŦāļĢāļ·āļ­ List) āđ€āļžāļ·āđˆāļ­āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđƒāļ™āļĢāļ°āļĒāļ°āļĒāļēāļ§
### **6.3. āļāļēāļĢāļ„āđ‰āļ™āļŦāļē (Search):** āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļĄāļĩāļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļāļēāļĢāļ„āđ‰āļ™āļŦāļēāļ‚āļąāđ‰āļ™āļŠāļđāļ‡ āļ—āļĩāđˆāļŠāļēāļĄāļēāļĢāļ–āļ„āđ‰āļ™āļŦāļēāđ€āļ­āļāļŠāļēāļĢ **correspondence**, **rfa**, **shop_drawing**, **contract-drawing**, **transmittal** āđāļĨāļ° **āđƒāļšāđ€āļ§āļĩāļĒāļ™ (Circulations)** āļˆāļēāļāļŦāļĨāļēāļĒāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ„āļ”āđ‰ āđ€āļŠāđˆāļ™ āļ„āđ‰āļ™āļŦāļēāļˆāļēāļāļŠāļ·āđˆāļ­āđ€āļĢāļ·āđˆāļ­āļ‡, āļ›āļĢāļ°āđ€āļ āļ—, āļ§āļąāļ™āļ—āļĩāđˆ, āđāļĨāļ° Tag
### **6.4. āļāļēāļĢāļ—āļģāļĢāļēāļĒāļ‡āļēāļ™ (Reporting):** āļŠāļēāļĄāļēāļĢāļ–āļˆāļąāļ”āļ—āļģāļĢāļēāļĒāļ‡āļēāļ™āļŠāļĢāļļāļ›āđāļĒāļāļ›āļĢāļ°āđ€āļ āļ—āļ‚āļ­āļ‡ Correspondence āļ›āļĢāļ°āļˆāļģāļ§āļąāļ™, āļŠāļąāļ›āļ”āļēāļŦāđŒ, āđ€āļ”āļ·āļ­āļ™, āđāļĨāļ°āļ›āļĩāđ„āļ”āđ‰
### **6.5. āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž (Performance):** āļĄāļĩāļāļēāļĢāđƒāļŠāđ‰ Caching āļāļąāļšāļ‚āđ‰āļ­āļĄāļđāļĨāļ—āļĩāđˆāđ€āļĢāļĩāļĒāļāđƒāļŠāđ‰āļšāđˆāļ­āļĒ āđāļĨāļ°āđƒāļŠāđ‰ Pagination āđƒāļ™āļ•āļēāļĢāļēāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļžāļ·āđˆāļ­āļˆāļąāļ”āļāļēāļĢāļ‚āđ‰āļ­āļĄāļđāļĨāļˆāļģāļ™āļ§āļ™āļĄāļēāļ
- **6.5.1 āļ•āļąāļ§āļŠāļĩāđ‰āļ§āļąāļ”āļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž:**
- **API Response Time:** < 200ms (90th percentile) āļŠāļģāļŦāļĢāļąāļš operation āļ—āļąāđˆāļ§āđ„āļ›
- **Search Query Performance:** < 500ms āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ„āđ‰āļ™āļŦāļēāļ‚āļąāđ‰āļ™āļŠāļđāļ‡
- **File Upload Performance:** < 30 seconds āļŠāļģāļŦāļĢāļąāļšāđ„āļŸāļĨāđŒāļ‚āļ™āļēāļ” 50MB
- **Concurrent Users:** āļĢāļ­āļ‡āļĢāļąāļšāļœāļđāđ‰āđƒāļŠāđ‰āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒ 100 āļ„āļ™
- **Database Connection Pool:** āļ‚āļ™āļēāļ”āđ€āļŦāļĄāļēāļ°āļŠāļĄāļāļąāļš workload (default: min 5, max 20 connections)
- **Cache Hit Ratio:** > 80% āļŠāļģāļŦāļĢāļąāļš cached data
- **Application Startup Time:** < 30 seconds
- **6.5.2 Caching Strategy:**
- **Master Data Cache:** Roles, Permissions, Organizations, Project metadata (TTL: 1 hour)
- **User Session Cache:** User permissions āđāļĨāļ° profile data (TTL: 30 minutes)
- **Search Result Cache:** Frequently searched queries (TTL: 15 minutes)
- **File Metadata Cache:** Attachment metadata (TTL: 1 hour)
- **Document Cache:** Frequently accessed document metadata (TTL: 30 minutes)
- **āļ•āđ‰āļ­āļ‡āļĄāļĩ cache invalidation strategy āļ—āļĩāđˆāļŠāļąāļ”āđ€āļˆāļ™:**
- Invalidate on update/delete operations
- Time-based expiration
- Manual cache clearance āļŠāļģāļŦāļĢāļąāļš admin operations
- āđƒāļŠāđ‰ Redis āđ€āļ›āđ‡āļ™ distributed cache backend
- āļ•āđ‰āļ­āļ‡āļĄāļĩ cache monitoring (hit/miss ratios)
### **6.6. āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ (Security):**
- āļĄāļĩāļĢāļ°āļšāļš Rate Limiting āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđ‚āļˆāļĄāļ•āļĩāđāļšāļš Brute-force
- āļāļēāļĢāļˆāļąāļ”āļāļēāļĢ Secret (āđ€āļŠāđˆāļ™ āļĢāļŦāļąāļŠāļœāđˆāļēāļ™ DB, JWT Secret) āļˆāļ°āļ•āđ‰āļ­āļ‡āļ—āļģāļœāđˆāļēāļ™ Environment Variable āļ‚āļ­āļ‡ Docker āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒāļŠāļđāļ‡āļŠāļļāļ”
- **6.6.1 Rate Limiting Strategy:**
- **Anonymous Endpoints:** 100 requests/hour āļ•āđˆāļ­ IP address
- **Authenticated Endpoints:**
- Viewer: 500 requests/hour
- Editor: 1000 requests/hour
- Document Control: 2000 requests/hour
- Admin/Superadmin: 5000 requests/hour
- **File Upload Endpoints:** 50 requests/hour āļ•āđˆāļ­ user
- **Search Endpoints:** 500 requests/hour āļ•āđˆāļ­ user
- **Authentication Endpoints:** 10 requests/minute āļ•āđˆāļ­ IP address
- **āļ•āđ‰āļ­āļ‡āļĄāļĩ mechanism āļŠāļģāļŦāļĢāļąāļšāļĒāļāđ€āļ§āđ‰āļ™ rate limiting āļŠāļģāļŦāļĢāļąāļš trusted services**
- āļ•āđ‰āļ­āļ‡āļšāļąāļ™āļ—āļķāļ log āđ€āļĄāļ·āđˆāļ­āļĄāļĩāļāļēāļĢ trigger rate limiting
- **6.6.2 Error Handling āđāļĨāļ° Resilience:**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ circuit breaker pattern āļŠāļģāļŦāļĢāļąāļš external service calls
- āļ•āđ‰āļ­āļ‡āļĄāļĩ retry mechanism āļ”āđ‰āļ§āļĒ exponential backoff
- āļ•āđ‰āļ­āļ‡āļĄāļĩ graceful degradation āđ€āļĄāļ·āđˆāļ­āļšāļĢāļīāļāļēāļĢāļ āļēāļĒāļ™āļ­āļāļĨāđ‰āļĄāđ€āļŦāļĨāļ§
- Error messages āļ•āđ‰āļ­āļ‡āđ„āļĄāđˆāđ€āļ›āļīāļ”āđ€āļœāļĒāļ‚āđ‰āļ­āļĄāļđāļĨ sensitive
- **6.6.3 Input Validation:**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ input validation āļ—āļąāđ‰āļ‡āļāļąāđˆāļ‡ client āđāļĨāļ° server (defense in depth)
- āļ•āđ‰āļ­āļ‡āļ›āđ‰āļ­āļ‡āļāļąāļ™ OWASP Top 10 vulnerabilities:
- SQL Injection (āđƒāļŠāđ‰ parameterized queries āļœāđˆāļēāļ™ ORM)
- XSS (input sanitization āđāļĨāļ° output encoding)
- CSRF (CSRF tokens āļŠāļģāļŦāļĢāļąāļš state-changing operations)
- āļ•āđ‰āļ­āļ‡ validate file uploads:
- File type (white-list approach)
- File size
- File content (magic number verification)
- āļ•āđ‰āļ­āļ‡ sanitize user inputs āļāđˆāļ­āļ™āđāļŠāļ”āļ‡āļœāļĨāđƒāļ™ UI
- āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ content security policy (CSP) headers
- āļ•āđ‰āļ­āļ‡āļĄāļĩ request size limits āđ€āļžāļ·āđˆāļ­āļ›āđ‰āļ­āļ‡āļāļąāļ™ DoS attacks
- **6.6.4 Session āđāļĨāļ° Token Management:**
- **JWT token expiration:** 8 hours āļŠāļģāļŦāļĢāļąāļš access token
- **Refresh token expiration:** 7 days
- **Refresh token mechanism:** āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļš token rotation āđāļĨāļ° revocation
- **Token revocation on logout:** āļ•āđ‰āļ­āļ‡āļšāļąāļ™āļ—āļķāļ revoked tokens āļˆāļ™āļāļ§āđˆāļēāļˆāļ° expire
- **Concurrent session management:**
- āļˆāļģāļāļąāļ”āļˆāļģāļ™āļ§āļ™ session āļžāļĢāđ‰āļ­āļĄāļāļąāļ™āđ„āļ”āđ‰ (default: 5 devices)
- āļ•āđ‰āļ­āļ‡āđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āđ€āļĄāļ·āđˆāļ­āļĄāļĩ login āļˆāļēāļ device/location āđƒāļŦāļĄāđˆ
- **Device fingerprinting:** āļŠāļģāļŦāļĢāļąāļš security āđāļĨāļ° audit purposes
- **Password policy:**
- āļ„āļ§āļēāļĄāļĒāļēāļ§āļ‚āļąāđ‰āļ™āļ•āđˆāļģ: 8 characters
- āļ•āđ‰āļ­āļ‡āļĄāļĩ uppercase, lowercase, number, special character
- āļ•āđ‰āļ­āļ‡āđ€āļ›āļĨāļĩāđˆāļĒāļ™ password āļ—āļļāļ 90 āļ§āļąāļ™
- āļ•āđ‰āļ­āļ‡āļ›āđ‰āļ­āļ‡āļāļąāļ™āļāļēāļĢāđƒāļŠāđ‰ password āļ—āļĩāđˆāđ€āļ„āļĒāđƒāļŠāđ‰āļĄāļēāđāļĨāđ‰āļ§ 5 āļ„āļĢāļąāđ‰āļ‡āļĨāđˆāļēāļŠāļļāļ”
### **6.7. āļāļēāļĢāļŠāļģāļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđāļĨāļ°āļāļēāļĢāļāļđāđ‰āļ„āļ·āļ™ (Backup & Recovery):**
- āļĢāļ°āļšāļšāļˆāļ°āļ•āđ‰āļ­āļ‡āļĄāļĩāļāļĨāđ„āļāļāļēāļĢāļŠāļģāļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāļŠāļģāļŦāļĢāļąāļšāļāļēāļ™āļ‚āđ‰āļ­āļĄāļđāļĨ MariaDB [cite: 2.4] āđāļĨāļ°āđ„āļŸāļĨāđŒāđ€āļ­āļāļŠāļēāļĢāļ—āļąāđ‰āļ‡āļŦāļĄāļ”āđƒāļ™ /share/dms-data [cite: 2.1] (āđ€āļŠāđˆāļ™ āđƒāļŠāđ‰ HBS 3 āļ‚āļ­āļ‡ QNAP āļŦāļĢāļ·āļ­āļŠāļ„āļĢāļīāļ›āļ•āđŒāļŠāļģāļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ) āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒāļ§āļąāļ™āļĨāļ° 1 āļ„āļĢāļąāđ‰āļ‡
- āļ•āđ‰āļ­āļ‡āļĄāļĩāđāļœāļ™āļāļēāļĢāļāļđāđ‰āļ„āļ·āļ™āļĢāļ°āļšāļš (Disaster Recovery Plan) āđƒāļ™āļāļĢāļ“āļĩāļ—āļĩāđˆ Server āļŦāļĨāļąāļ (QNAP) āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļĄāđˆāđ„āļ”āđ‰
- **6.7.1 āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļāļđāđ‰āļ„āļ·āļ™:**
- **Database Restoration Procedure:**
- āļŠāļĢāđ‰āļēāļ‡āļˆāļēāļ full backup āļĨāđˆāļēāļŠāļļāļ”
- Apply transaction logs āļ–āļķāļ‡ point-in-time āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢ
- Verify data integrity post-restoration
- **File Storage Restoration Procedure:**
- Restore āļˆāļēāļ QNAP snapshot āļŦāļĢāļ·āļ­ backup
- Verify file integrity āđāļĨāļ° permissions
- **Application Redeployment Procedure:**
- Deploy āļˆāļēāļ version āļĨāđˆāļēāļŠāļļāļ”āļ—āļĩāđˆāļĢāļđāđ‰āļ§āđˆāļēāļ—āļģāļ‡āļēāļ™āđ„āļ”āđ‰
- Verify application health
- **Data Integrity Verification Post-Recovery:**
- Run data consistency checks
- Verify critical business data
- **Recovery Time Objective (RTO):** < 4 āļŠāļąāđˆāļ§āđ‚āļĄāļ‡
- **Recovery Point Objective (RPO):** < 1 āļŠāļąāđˆāļ§āđ‚āļĄāļ‡
### **6.8. āļāļĨāļĒāļļāļ—āļ˜āđŒāļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™ (Notification Strategy - āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡):**
- **6.8.1 āļĢāļ°āļšāļšāļˆāļ°āļŠāđˆāļ‡āļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™ (āļœāđˆāļēāļ™ Email āļŦāļĢāļ·āļ­ Line [cite: 2.7]) āđ€āļĄāļ·āđˆāļ­āļĄāļĩāļāļēāļĢāļāļĢāļ°āļ—āļģāļ—āļĩāđˆāļŠāļģāļ„āļąāļ** āļ”āļąāļ‡āļ™āļĩāđ‰:
1. āđ€āļĄāļ·āđˆāļ­āļĄāļĩāđ€āļ­āļāļŠāļēāļĢāđƒāļŦāļĄāđˆ (Correspondence, RFA) āļ–āļđāļāļŠāđˆāļ‡āļĄāļēāļ–āļķāļ‡āļ­āļ‡āļ„āđŒāļāļĢāļ“āđŒāļ‚āļ­āļ‡āđ€āļĢāļē
2. āđ€āļĄāļ·āđˆāļ­āļĄāļĩāđƒāļšāđ€āļ§āļĩāļĒāļ™ (Circulation) āđƒāļŦāļĄāđˆ āļĄāļ­āļšāļŦāļĄāļēāļĒāļ‡āļēāļ™āļĄāļēāļ—āļĩāđˆāđ€āļĢāļē
3. (āļ—āļēāļ‡āđ€āļĨāļ·āļ­āļ) āđ€āļĄāļ·āđˆāļ­āđ€āļ­āļāļŠāļēāļĢāļ—āļĩāđˆāđ€āļĢāļēāļŠāđˆāļ‡āđ„āļ› āļ–āļđāļāļ”āļģāđ€āļ™āļīāļ™āļāļēāļĢ (āđ€āļŠāđˆāļ™ āļ­āļ™āļļāļĄāļąāļ•āļī/āļ›āļāļīāđ€āļŠāļ˜)
4. (āļ—āļēāļ‡āđ€āļĨāļ·āļ­āļ) āđ€āļĄāļ·āđˆāļ­āđƒāļāļĨāđ‰āļ–āļķāļ‡āļ§āļąāļ™āļ„āļĢāļšāļāļģāļŦāļ™āļ” (Deadline) [cite: 3.2.5, 3.6.6, 3.7.5]
- **6.8.2 Grouping/Digest (āđƒāļŦāļĄāđˆ):** āļāļĢāļ“āļĩāļĄāļĩāļāļēāļĢāđāļˆāđ‰āļ‡āđ€āļ•āļ·āļ­āļ™āļ›āļĢāļ°āđ€āļ āļ—āđ€āļ”āļĩāļĒāļ§āļāļąāļ™āļˆāļģāļ™āļ§āļ™āļĄāļēāļāđƒāļ™āļŠāđˆāļ§āļ‡āđ€āļ§āļĨāļēāļŠāļąāđ‰āļ™āđ† (āđ€āļŠāđˆāļ™ Approve āđ€āļ­āļāļŠāļēāļĢ 10 āļ‰āļšāļąāļšāļĢāļ§āļ”) āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡ **āļĢāļ§āļĄ (Batch)** āđ€āļ›āđ‡āļ™ 1 Email/Line Notification āđ€āļžāļ·āđˆāļ­āđ„āļĄāđˆāđƒāļŦāđ‰āļĢāļšāļāļ§āļ™āļœāļđāđ‰āđƒāļŠāđ‰ (Spamming)
- **6.8.3 Notification Delivery Guarantees:**
- **At-least-once delivery:** āļŠāļģāļŦāļĢāļąāļš important notifications
- **Retry mechanism:** āļ”āđ‰āļ§āļĒ exponential backoff (max 3 reties)
- **Dead letter queue:** āļŠāļģāļŦāļĢāļąāļš notifications āļ—āļĩāđˆāļŠāđˆāļ‡āđ„āļĄāđˆāļŠāļģāđ€āļĢāđ‡āļˆāļŦāļĨāļąāļ‡āļˆāļēāļ retries
- **Delivery status tracking:** āļ•āđ‰āļ­āļ‡āļšāļąāļ™āļ—āļķāļāļŠāļ–āļēāļ™āļ°āļāļēāļĢāļŠāđˆāļ‡ notifications
- **Fallback channels:** āļ–āđ‰āļē Email āļĨāđ‰āļĄāđ€āļŦāļĨāļ§ āđƒāļŦāđ‰āļŠāđˆāļ‡āļœāđˆāļēāļ™ SYSTEM notification
- **Notification preferences:** āļœāļđāđ‰āđƒāļŠāđ‰āļ•āđ‰āļ­āļ‡āļŠāļēāļĄāļēāļĢāļ–āļāļģāļŦāļ™āļ” channel preferences āđ„āļ”āđ‰
### **6.9. Maintenance Mode (āđƒāļŦāļĄāđˆ)**
- āļĢāļ°āļšāļšāļ•āđ‰āļ­āļ‡āļĄāļĩāļāļĨāđ„āļ **Maintenance Mode** āļ—āļĩāđˆ Admin āļŠāļēāļĄāļēāļĢāļ–āđ€āļ›āļīāļ”āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰
- āđ€āļĄāļ·āđˆāļ­āđ€āļ›āļīāļ”: āļœāļđāđ‰āđƒāļŠāđ‰āļ—āļąāđˆāļ§āđ„āļ›āļˆāļ°āđ€āļŦāđ‡āļ™āļŦāļ™āđ‰āļē "āļ›āļīāļ”āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡" āđāļĨāļ°āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĩāļĒāļ API āđ„āļ”āđ‰ (āļĒāļāđ€āļ§āđ‰āļ™ Admin)
- āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļŠāđˆāļ§āļ‡ Deploy Version āđƒāļŦāļĄāđˆ āļŦāļĢāļ·āļ­ Database Migration
### **6.10. Monitoring āđāļĨāļ° Observability**
- **6.10.1 Application Monitoring:**
- **Health checks:** /health endpoint āļŠāļģāļŦāļĢāļąāļš load balancer
- **Metrics collection:** Response times, error rates, throughput
- **Distributed tracing:** āļŠāļģāļŦāļĢāļąāļš request tracing across services
- **Log aggregation:** Structured logging āļ”āđ‰āļ§āļĒ JSON format
- **Alerting:** āļŠāļģāļŦāļĢāļąāļš critical errors āđāļĨāļ° performance degradation
- **6.10.2 Business Metrics:**
- āļˆāļģāļ™āļ§āļ™ documents created āļ•āđˆāļ­āļ§āļąāļ™
- Workflow completion rates
- User activity metrics
- System utilization rates
- Search query performance
- **6.10.3 Security Monitoring:**
- Failed login attempts
- Rate limiting triggers
- Virus scan results
- File download activities
- Permission changes
### **6.11 JSON Processing & Validation**
- **6.11.1 JSON Schema Management**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ centralized JSON schema registry
- āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļš schema versioning āđāļĨāļ° migration
- āļ•āđ‰āļ­āļ‡āļĄāļĩ schema validation during runtime
- **6.11.2 Performance Optimization**
- **Caching:** Cache parsed JSON structures
- **Compression:** āđƒāļŠāđ‰ compression āļŠāļģāļŦāļĢāļąāļš JSON āļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ
- **Indexing:** Support JSON path indexing āļŠāļģāļŦāļĢāļąāļš query
- **6.11.3 Error Handling**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ graceful degradation āđ€āļĄāļ·āđˆāļ­ JSON validation āļĨāđ‰āļĄāđ€āļŦāļĨāļ§
- āļ•āđ‰āļ­āļ‡āļĄāļĩ default fallback values
- āļ•āđ‰āļ­āļ‡āļšāļąāļ™āļ—āļķāļ error logs āļŠāļģāļŦāļĢāļąāļš validation failures
## **🧊 7. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļš (Testing Requirements)**
### **7.1. Unit Testing:**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ unit tests āļŠāļģāļŦāļĢāļąāļš business logic āļ—āļąāđ‰āļ‡āļŦāļĄāļ”
- Code coverage āļ­āļĒāđˆāļēāļ‡āļ™āđ‰āļ­āļĒ 70% āļŠāļģāļŦāļĢāļąāļš backend services
- āļ•āđ‰āļ­āļ‡āļ—āļ”āļŠāļ­āļš RBAC permission logic āļ—āļļāļāļĢāļ°āļ”āļąāļš
### **7.2. Integration Testing:**
- āļ—āļ”āļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļĢāđˆāļ§āļĄāļāļąāļ™āļ‚āļ­āļ‡ modules
- āļ—āļ”āļŠāļ­āļš database migrations āđāļĨāļ° data integrity
- āļ—āļ”āļŠāļ­āļš API endpoints āļ”āđ‰āļ§āļĒ realistic data
### **7.3. End-to-End Testing:**
- āļ—āļ”āļŠāļ­āļš complete user workflows
- āļ—āļ”āļŠāļ­āļš document lifecycle āļˆāļēāļ creation āļ–āļķāļ‡ archival
- āļ—āļ”āļŠāļ­āļš cross-module integrations
### **7.4. Security Testing:**
- **Penetration Testing:** āļ—āļ”āļŠāļ­āļš OWASP Top 10 vulnerabilities
- **Security Audit:** Review code āļŠāļģāļŦāļĢāļąāļš security flaws
- **Virus Scanning Test:** āļ—āļ”āļŠāļ­āļš file upload security
- **Rate Limiting Test:** āļ—āļ”āļŠāļ­āļš rate limiting functionality
### **7.5. Performance Testing:**
- **Load Testing:** āļ—āļ”āļŠāļ­āļšāļ”āđ‰āļ§āļĒ realistic workloads
- **Stress Testing:** āļŦāļē breaking points āļ‚āļ­āļ‡āļĢāļ°āļšāļš
- **Endurance Testing:** āļ—āļ”āļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡āđ€āļ›āđ‡āļ™āđ€āļ§āļĨāļēāļ™āļēāļ™
### **7.6. Disaster Recovery Testing:**
- āļ—āļ”āļŠāļ­āļš backup āđāļĨāļ° restoration procedures
- āļ—āļ”āļŠāļ­āļš failover mechanisms
- āļ—āļ”āļŠāļ­āļš data integrity āļŦāļĨāļąāļ‡āļāļēāļĢ recovery
### **7.7 Specific Scenario Testing (āđ€āļžāļīāđˆāļĄ)**
- **Race Condition Test:** āļ—āļ”āļŠāļ­āļšāļĒāļīāļ‡ Request āļ‚āļ­āđ€āļĨāļ‚āļ—āļĩāđˆāđ€āļ­āļāļŠāļēāļĢāļžāļĢāđ‰āļ­āļĄāļāļąāļ™ 100 Request
- **Transaction Test:** āļ—āļ”āļŠāļ­āļšāļ›āļīāļ”āđ€āļ™āđ‡āļ•āļĢāļ°āļŦāļ§āđˆāļēāļ‡ Upload āđ„āļŸāļĨāđŒ (āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āđˆāļēāđ„āļĄāđˆāļĄāļĩ Orphan File āļŦāļĢāļ·āļ­ Broken Link)
- **Permission Test:** āļ—āļ”āļŠāļ­āļš CASL Integration āļ—āļąāđ‰āļ‡āļāļąāđˆāļ‡ Backend āđāļĨāļ° Frontend āđƒāļŦāđ‰āļ•āļĢāļ‡āļāļąāļ™
## **8. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļāļēāļĢāļšāļģāļĢāļļāļ‡āļĢāļąāļāļĐāļē (Maintenance Requirements)**
### **8.1. Log Retention:**
- Audit logs: 7 āļ›āļĩ
- Application logs: 1 āļ›āļĩ
- Performance metrics: 2 āļ›āļĩ
### **8.2. Monitoring āđāļĨāļ° Alerting:**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ proactive monitoring āļŠāļģāļŦāļĢāļąāļš critical systems
- āļ•āđ‰āļ­āļ‡āļĄāļĩ alerting āļŠāļģāļŦāļĢāļąāļš security incidents
- āļ•āđ‰āļ­āļ‡āļĄāļĩ performance degradation alerts
### **8.3. Patch Management:**
- āļ•āđ‰āļ­āļ‡āļĄāļĩ process āļŠāļģāļŦāļĢāļąāļš security patches
- āļ•āđ‰āļ­āļ‡āļ—āļ”āļŠāļ­āļš patches āđƒāļ™ staging environment
- āļ•āđ‰āļ­āļ‡āļĄāļĩ rollback plan āļŠāļģāļŦāļĢāļąāļš failed updates
### **8.4. Capacity Planning:**
- āļ•āđ‰āļ­āļ‡ monitor resource utilization
- āļ•āđ‰āļ­āļ‡āļĄāļĩ scaling strategy āļŠāļģāļŦāļĢāļąāļš growth
- āļ•āđ‰āļ­āļ‡āļĄāļĩ performance baselines āđāļĨāļ° trending
## **9. āļ‚āđ‰āļ­āļāļģāļŦāļ™āļ”āļ”āđ‰āļēāļ™āļāļēāļĢāļ›āļāļīāļšāļąāļ•āļīāļ•āļēāļĄāļāļŽāļĢāļ°āđ€āļšāļĩāļĒāļš (Compliance Requirements)**
### **9.1. Data Privacy:**
- āļ•āđ‰āļ­āļ‡āļ›āļāļīāļšāļąāļ•āļīāļ•āļēāļĄāļāļŽāļŦāļĄāļēāļĒāļ„āļļāđ‰āļĄāļ„āļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāđˆāļ§āļ™āļšāļļāļ„āļ„āļĨ
- āļ•āđ‰āļ­āļ‡āļĄāļĩ data retention policies
- āļ•āđ‰āļ­āļ‡āļĄāļĩ data deletion procedures
### **9.2. Audit Compliance:**
- āļ•āđ‰āļ­āļ‡āļĢāļ­āļ‡āļĢāļąāļš internal āđāļĨāļ° external audits
- āļ•āđ‰āļ­āļ‡āļĄāļĩ comprehensive audit trails
- āļ•āđ‰āļ­āļ‡āļĄāļĩ reporting capabilities āļŠāļģāļŦāļĢāļąāļš compliance
### **9.3. Security Standards:**
- āļ•āđ‰āļ­āļ‡āļ›āļāļīāļšāļąāļ•āļīāļ•āļēāļĄ organizational security policies
- āļ•āđ‰āļ­āļ‡āļĄāļĩ security incident response plan
- āļ•āđ‰āļ­āļ‡āļĄāļĩ regular security assessments
## **📋 āļŠāļĢāļļāļ›āļāļēāļĢāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āļˆāļēāļāđ€āļ§āļ­āļĢāđŒāļŠāļąāļ™āļāđˆāļ­āļ™āļŦāļ™āđ‰āļē**
### **Security Enhancements:**
1. **File Upload Security** - Virus scanning, file type validation, access controls
2. **Input Validation** - OWASP Top 10 protection, XSS/CSRF prevention
3. **Rate Limiting** - Comprehensive rate limiting strategy
4. **Secrets Management** - Secure handling of sensitive configuration
### **Architecture Improvements:**
1. **Document Numbering** - Changed from Stored Procedure to Application-level Locking with Optimistic Locking safety net
2. **Resilience Patterns** - Circuit breaker, retry mechanisms, fallback strategies
3. **Monitoring & Observability** - Health checks, metrics, distributed tracing
4. **Caching Strategy** - Comprehensive caching with proper invalidation
5. **Two-Phase File Storage** - Temp -> Permanent storage with transaction safety
6. **Unified Workflow Engine** - Consolidated routing logic for better maintainability
### **Performance Targets:**
1. **API Response Time** - < 200ms (90th percentile)
2. **Search Performance** - < 500ms
3. **File Upload** - < 30 seconds for 50MB files
4. **Cache Hit Ratio** - > 80%
### **Operational Excellence:**
1. **Disaster Recovery** - RTO < 4 hours, RPO < 1 hour
2. **Backup Procedures** - Comprehensive backup and restoration
3. **Security Testing** - Penetration testing and security audits
4. **Performance Testing** - Load testing with realistic workloads
5. **Maintenance Mode** - Graceful system maintenance capabilities
### **User Experience Improvements:**
1. **Dynamic Form Generator** - Reduced code duplication and better schema support
2. **Mobile Responsiveness** - Card view for tables on mobile devices
3. **Auto-Save Draft** - LocalStorage integration for form resilience
4. **Notification Digest** - Reduced notification spam
### **Data Management:**
1. **Virtual Columns** - Improved JSON field search performance
2. **Table Partitioning** - Support for large-scale data growth
3. **Idempotency Keys** - Prevention of duplicate transactions
āđ€āļ­āļāļŠāļēāļĢāļ™āļĩāđ‰āļŠāļ°āļ—āđ‰āļ­āļ™āļ–āļķāļ‡āļ„āļ§āļēāļĄāļĄāļļāđˆāļ‡āļĄāļąāđˆāļ™āđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļĢāļ°āļšāļšāļ—āļĩāđˆāļĄāļĩāļ„āļ§āļēāļĄāļ›āļĨāļ­āļ”āļ āļąāļĒ, āļĄāļĩāļ„āļ§āļēāļĄāļ—āļ™āļ—āļēāļ™, āđāļĨāļ°āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡ āļžāļĢāđ‰āļ­āļĄāļĢāļ­āļ‡āļĢāļąāļšāļāļēāļĢāđ€āļ•āļīāļšāđ‚āļ•āđƒāļ™āļ­āļ™āļēāļ„āļ•āđāļĨāļ°āļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆāļ—āļĩāđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›
**āļŦāļĄāļēāļĒāđ€āļŦāļ•āļļ:** Requirements āļ™āļĩāđ‰āļˆāļ°āļ–āļđāļāļ—āļšāļ—āļ§āļ™āđāļĨāļ°āļ›āļĢāļąāļšāļ›āļĢāļļāļ‡āđ€āļ›āđ‡āļ™āļĢāļ°āļĒāļ°āļ•āļēāļĄ feedback āļˆāļēāļāļ—āļĩāļĄāļžāļąāļ’āļ™āļēāđāļĨāļ°āļ„āļ§āļēāļĄāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ—āļēāļ‡āļ˜āļļāļĢāļāļīāļˆāļ—āļĩāđˆāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āđ„āļ›
## **Document Control:**
- **Document:** Application Requirements Specification v1.4.2
- **Version:** 1.4
- **Date:** 2025-11-19
- **Author:** NAP LCBP3-DMS & Gemini
- **Status:** FINAL
- **Classification:** Internal Technical Documentation
- **Approved By:** Nattanin
---
`End of Requirements Specification v1.4.2`