804 lines
69 KiB
Markdown
804 lines
69 KiB
Markdown
# ð **Documents Management System Version 1.4.4: Application Requirements Specification**
|
|
|
|
**āļŠāļāļēāļāļ°:** FINAL-Rev.05
|
|
**āļ§āļąāļāļāļĩāđ:** 2025-11-26
|
|
**āļāđāļēāļāļāļīāļāļāļ·āđāļāļāļēāļ:** v1.4.4
|
|
**Classification:** Internal Technical Documentation
|
|
|
|
## ð **1. āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđ**
|
|
|
|
āļŠāļĢāđāļēāļāđāļ§āđāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļŠāļģāļŦāļĢāļąāļāļĢāļ°āļāļāļāļĢāļīāļŦāļēāļĢāļāļąāļāļāļēāļĢāđāļāļāļŠāļēāļĢāđāļāļĢāļāļāļēāļĢ (Document Management System - DMS) āđāļāļāļāļĢāļāļ§āļāļāļĢ āļāļĩāđāđāļāđāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāļŠāļđāļāļŠāļļāļ āļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļāļāđāļāļĄāļđāļĨ (Data Integrity) āđāļĨāļ°āļĢāļāļāļĢāļąāļāļāļēāļĢāļāļĒāļēāļĒāļāļąāļ§āđāļāļāļāļēāļāļ (Scalability) āđāļāļĒāđāļāđāđāļāļāļąāļāļŦāļē Race Condition āđāļĨāļ°āđāļāļīāđāļĄāļāļ§āļēāļĄāđāļŠāļāļĩāļĒāļĢāđāļāļāļēāļĢāļāļąāļāļāļēāļĢāđāļāļĨāđ āđāļĨāļ°āđāļāđ Unified Workflow Engine āđāļāļāļēāļĢāļāļąāļāļāļēāļĢāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļāļļāļĄāļąāļāļīāļāļąāđāļāļŦāļĄāļāđāļāļ·āđāļāļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļ
|
|
|
|
- āļĄāļĩāļāļąāļāļāđāļāļąāļāļŦāļĨāļąāļāđāļāļāļēāļĢāļāļąāļāđāļŦāļĨāļ āļāļąāļāđāļāđāļ āļāđāļāļŦāļē āđāļāļĢāđ āđāļĨāļ°āļāļ§āļāļāļļāļĄāļŠāļīāļāļāļīāđāļāļēāļĢāđāļāđāļēāļāļķāļāđāļāļāļŠāļēāļĢ
|
|
- āļāđāļ§āļĒāļĨāļāļāļēāļĢāđāļāđāđāļāļāļŠāļēāļĢāļāļĢāļ°āļāļēāļĐ āđāļāļīāđāļĄāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāđāļāļāļēāļĢāļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨ
|
|
- āđāļāļīāđāļĄāļāļ§āļēāļĄāļŠāļ°āļāļ§āļāđāļāļāļēāļĢāļāļģāļāļēāļāļĢāđāļ§āļĄāļāļąāļāļĢāļ°āļŦāļ§āđāļēāļāļāļāļāļĢāļāđ
|
|
- **āđāļŠāļĢāļīāļĄ:** āļāļĢāļąāļāļāļĢāļļāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒāļāļāļāļĢāļ°āļāļāļāđāļ§āļĒāļĄāļēāļāļĢāļāļēāļĢāļāđāļāļāļāļąāļāļāļĩāđāļāļąāļāļŠāļĄāļąāļĒ
|
|
- **āđāļŠāļĢāļīāļĄ:** āđāļāļīāđāļĄāļāļ§āļēāļĄāļāļāļāļēāļāļāļāļāļĢāļ°āļāļāļāđāļ§āļĒāļāļĨāđāļ 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 Unified Workflow Engine (āļŦāļĨāļąāļ):** āļĢāļ°āļāļāļāļēāļĢāđāļāļīāļāđāļāļāļŠāļēāļĢāļāļąāđāļāļŦāļĄāļ (Correspondence, RFA, Circulation) āļāđāļāļ āđāļāđ Engine āļāļĨāļēāļāđāļāļĩāļĒāļ§āļāļąāļ āđāļāļĒāļāļģāļŦāļāļ Logic āļāđāļēāļ Workflow DSL (JSON Configuration) āđāļāļāļāļēāļĢāđāļāļĩāļĒāļ Hard-coded āļĨāļāđāļāļāļēāļĢāļēāļ
|
|
|
|
- **2.4.2 Separation of Concerns:** Module āļāđāļēāļāđ (RFA, Correspondence) āļāļ°āđāļāđāļāđāļāļāļēāļ°āļāđāļāļĄāļđāļĨāļāļāļāđāļāļāļŠāļēāļĢ (Data) āļŠāđāļ§āļāļŠāļāļēāļāļ°āđāļĨāļ°āļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ° (State Transition) āļāļ°āļāļđāļāļāļąāļāļāļēāļĢāđāļāļĒ Workflow Engine
|
|
|
|
- **2.4.3 Idempotency & Locking:** āđāļāđāļāļĨāđāļāđāļāļīāļĄāđāļāļāļēāļĢāļāđāļāļāļāļąāļāļāļēāļĢāļāļģāļĢāļēāļĒāļāļēāļĢāļāđāļģ
|
|
|
|
- **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. āļāļēāļĢāļāļąāļāļāļēāļĢ Workflow (Unified Workflow)**
|
|
|
|
- 3.5.1 Workflow Definition:
|
|
|
|
- Admin āļāđāļāļāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļ/āđāļāđāđāļ Workflow Rule āđāļāđāļāđāļēāļāļŦāļāđāļēāļāļ UI (DSL Editor) āļĢ
|
|
- āļāļāļĢāļąāļāļāļēāļĢāļāļģāļŦāļāļ State, Transition, Required Role, Condition (JS Expression)
|
|
|
|
- 3.5.2 Workflow Execution:
|
|
|
|
- āļĢāļ°āļāļāļāđāļāļāļĢāļāļāļĢāļąāļāļāļēāļĢāļŠāļĢāđāļēāļ Instance āļāļāļ Workflow āļāļđāļāļāļąāļāđāļāļāļŠāļēāļĢ (Polymorphic)
|
|
- āļĢāļāļāļĢāļąāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ° (Action) āđāļāđāļ Approve, Reject, Comment, Return
|
|
- Auto-Action: āļĢāļāļāļĢāļąāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ°āļāļąāļāđāļāļĄāļąāļāļīāđāļĄāļ·āđāļāļāļĢāļāđāļāļ·āđāļāļāđāļ (āđāļāđāļ Review āļāļĢāļāļāļļāļāļāļ)
|
|
|
|
- 3.5.3 Flexibility:
|
|
|
|
- āļĢāļāļāļĢāļąāļ Parallel Review (āļŠāđāļāđāļŦāđāļŦāļĨāļēāļĒāļāļāļāļĢāļ§āļāļāļĢāđāļāļĄāļāļąāļ)
|
|
- āļĢāļāļāļĢāļąāļ Conditional Flow (āđāļāđāļ āļāđāļēāļĒāļāļāđāļāļīāļ > X āđāļŦāđāđāļāļīāđāļĄāļāļđāđāļāļāļļāļĄāļąāļāļī)
|
|
|
|
- 3.5.4 Workflow āļāļēāļĢāļāļāļļāļĄāļąāļāļī:
|
|
- āļāđāļāļāļĢāļāļāļĢāļąāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļāļļāļĄāļąāļāļīāļāļĩāđāļāļąāļāļāđāļāļāđāļĨāļ°āđāļāđāļāļĨāļģāļāļąāļ āđāļāđāļ āļŠāđāļāļāļēāļ Originator -> Organization 1 -> Organization 2 -> Organization 3 āđāļĨāđāļ§āļŠāđāļāļāļĨāļāļĨāļąāļāļāļēāļĄāļĨāļģāļāļąāļāđāļāļīāļĄ (āđāļāļĒāļāđāļē āļāļāļāļĢāļāđāđāļāđāļ Workflow āđāļŦāđāļŠāđāļāļāļĨāļąāļ āļāđāļŠāļēāļĄāļēāļĢāļāļŠāđāļāļāļĨāļāļĨāļąāļāļāļēāļĄāļĨāļģāļāļąāļāđāļāļīāļĄāđāļāļĒāđāļĄāđāļāđāļāļāļĢāļāđāļŦāđāļāļķāļ āļāļāļāļĢāļāļ·āđāļāļĨāļģāļāļąāļāļāļąāļāđāļ)
|
|
|
|
- 3.5.5 āļāļēāļĢāļāļąāļāļāļēāļĢ:
|
|
- āļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļāļ§āļąāļāđāļĨāđāļ§āđāļŠāļĢāđāļ (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. āļĢāļ°āļāļāļāđāļāļāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļĨāļāļāļĩāđāđāļāļāļŠāļēāļĢ (Running Number) āđāļāđāđāļāļĒāļāļąāļāđāļāļĄāļąāļāļīāđāļĨāļ°āļĒāļ·āļāļŦāļĒāļļāđāļāļŠāļđāļ
|
|
- 3.10.2. **Logic āļāļēāļĢāļāļąāļāđāļĨāļ (Counter Logic):** āļāļēāļĢāļāļąāļāđāļĨāļāļāļ°āļāđāļāļāļĢāļāļāļĢāļąāļāļāļēāļĢāđāļĒāļāļāļēāļĄ Key āļāļĩāđāļāļąāļāļāđāļāļāļāļķāđāļ:
|
|
- **Project** + **Originator** + **Type** + **Discipline** (āļāđāļēāļĄāļĩ) + **Sub-Type** (āļāđāļēāļĄāļĩ) + **Year**
|
|
- 3.10.3. **Format Template:** āļĢāļāļāļĢāļąāļāļāļēāļĢāļāļģāļŦāļāļāļĢāļđāļāđāļāļāļāđāļ§āļĒ **Token Replacement** āđāļāđāļ:
|
|
- `{ORG}-{TYPE}-{DISCIPLINE}-{SEQ:4}-{REV}` -> `TEAM-RFA-STR-0001-A`
|
|
- āļĢāļāļāļĢāļąāļ Token: `{PROJECT}`, `{ORG}`, `{TYPE}`, `{DISCIPLINE}`, `{SUBTYPE}`, `{SUBTYPE_NUM}`, `{YEAR}`, `{YEAR_SHORT}`, `{SEQ:n}`
|
|
- 3.10.4. **Transmittal Logic:** āļĢāļāļāļĢāļąāļāđāļāļ·āđāļāļāđāļāļāļīāđāļĻāļĐāļŠāļģāļŦāļĢāļąāļ Transmittal āļāļĩāđāđāļĨāļāļāļēāļāđāļāļĨāļĩāđāļĒāļāļāļēāļĄāļāļđāđāļĢāļąāļ (To Owner vs To Contractor)
|
|
- 3.10.5. **āļāļĨāđāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ:** āļĒāļąāļāļāļāđāļāđ Redis Distributed Lock āđāļĨāļ° Optimistic Locking āđāļāļ·āđāļāļāđāļāļāļāļąāļāđāļĨāļāļāđāļģāļŦāļĢāļ·āļāļāđāļēāļĄ
|
|
- 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 Rworkflow Types**
|
|
- **workflow_definitions**: āļāļāđāļĨāļ°āđāļāļ·āđāļāļāđāļāļāļēāļĢāļŠāđāļāļāđāļ
|
|
- **workflow_histories**: āļŠāļāļēāļāļ°āđāļĨāļ°āļāļĢāļ°āļ§āļąāļāļīāļāļēāļĢāļŠāđāļāļāđāļ
|
|
- **workflow_instances**: āļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāđāļāđāļāđāļĨāļ°āļāļąāđāļāļāļāļ
|
|
- **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
|
|
|
|
### **3.12 āļāđāļāļāļģāļŦāļāļāļāļīāđāļĻāļĐ**
|
|
|
|
- **āļāļđāđāđāļāđāļāļēāļāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđāļĢāļ°āļāļąāļāļŠāļđāļ (Global) āļŦāļĢāļ·āļāļāļđāđāđāļāđāļĢāļąāļāļāļāļļāļāļēāļāđāļāđāļāļāļĢāļāļĩāļāļīāđāļĻāļĐ**
|
|
- āļŠāļēāļĄāļēāļĢāļāđāļĨāļ·āļāļ **āļŠāļĢāđāļēāļāđāļāļāļēāļĄāļāļāļāđāļāļĢ (Create on behalf of)** āđāļāđ āđāļāļ·āđāļāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļāļāļāđāļĨāļāļāļĩāđāđāļāļāļŠāļēāļĢ (Running Number) āļāļāļāļāļāļāđāļāļĢāļāļ·āđāļāđāļāđāđāļāļĒāđāļĄāđāļāđāļāļāļĨāđāļāļāļāļīāļāđāļŦāļĄāđ
|
|
- āļŠāļēāļĄāļēāļĢāļāļāļģāļāļēāļāđāļāļāļāļđāđāđāļāđāļāļēāļāļāļ·āđāļāđāļāđ Routing & Workflow āļāļāļ Correspondence, RFA, Circulation Sheet
|
|
|
|
### 3.13. āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāļŦāļĨāļąāļāļāļąāđāļāļŠāļđāļ (Admin Panel for Master Data)
|
|
|
|
- 3.13.1. **Disciplines Management:** Admin āļāđāļāļāļŠāļēāļĄāļēāļĢāļ āđāļāļīāđāļĄ/āļĨāļ/āđāļāđāđāļ āļŠāļēāļāļēāļāļēāļ (Disciplines) āđāļĒāļāļāļēāļĄāļŠāļąāļāļāļē (Contract) āđāļāđ
|
|
- 3.13.2. **Sub-Type Mapping:** Admin āļāđāļāļāļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļ Correspondence Sub-types āđāļĨāļ° Mapping āļĢāļŦāļąāļŠāļāļąāļ§āđāļĨāļ (āđāļāđāļ MAT = 11) āđāļāđ
|
|
- 3.13.3. **Numbering Format Configuration:** Admin āļāđāļāļāļĄāļĩ UI āļŠāļģāļŦāļĢāļąāļāļāļąāđāļāļāđāļē Format Template āļāļāļāđāļāđāļĨāļ° Project/Type āđāļāđāđāļāļĒāđāļĄāđāļāđāļāļāđāļāđāđāļāđāļ
|
|
|
|
## **ð 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.4
|
|
- **Version:** 1.4
|
|
- **Date:** 2025-11-26
|
|
- **Author:** NAP LCBP3-DMS & Gemini
|
|
- **Status:** FINAL-Rev.04
|
|
- **Classification:** Internal Technical Documentation
|
|
- **Approved By:** Nattanin
|
|
|
|
---
|
|
|
|
`End of Requirements Specification v1.4.4`
|