72 KiB
ð Documents Management System Version 1.4.5: Application Requirements Specification
āļŠāļāļēāļāļ°: FINAL-Rev.05 āļ§āļąāļāļāļĩāđ: 2025-11-29 āļāđāļēāļāļāļīāļāļāļ·āđāļāļāļēāļ: 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 āļŦāļĢāļ·āļāļ§āđāļēāļāđāļ§āđ
- āļŦāđāļēāļĄāļĢāļ°āļāļļ Sensitive Secrets (Password, Keys) āđāļ
- āđāļāđāļāđāļāļāļĄāļĩ 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 āļĨāļāđāļāļāļēāļĢāļēāļ
- Workflow Versioning (āđāļāļīāđāļĄ): āļĢāļ°āļāļāļāđāļāļāļĢāļāļāļĢāļąāļāļāļēāļĢāļāļģāļŦāļāļ Version āļāļāļ Workflow Definition āđāļāļĒāđāļāļāļŠāļēāļĢāļāļĩāđāđāļĢāļīāđāļĄāļāļĢāļ°āļāļ§āļāļāļēāļĢāđāļāđāļĨāđāļ§ (In-progress instances) āļāļ°āļāđāļāļāđāļāđ Workflow Version āđāļāļīāļĄ āļāļāļāļ§āđāļēāļāļ°āļŠāļīāđāļāļŠāļļāļāļāļĢāļ°āļāļ§āļāļāļēāļĢ āļŦāļĢāļ·āļāđāļāđāļĢāļąāļāļāļģāļŠāļąāđāļ Migrate āļāļēāļ Admin āđāļāļ·āđāļāļāđāļāļāļāļąāļāļāļ§āļēāļĄāļāļąāļāđāļĒāđāļāļāļāļ State
-
2.4.2 Separation of Concerns:
- Module āļāđāļēāļāđ (Correspondence, RFA, Circulation) āļāļ°āđāļāđāļāđāļāļāļēāļ°āļāđāļāļĄāļđāļĨāļāļāļāđāļāļāļŠāļēāļĢ (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, ZIP
- āđāļāļāļŠāļēāļĢāđāļāđāļāļāļ (Correspondence) āļŠāļēāļĄāļēāļĢāļāļĄāļĩāđāļāđāļŦāļĨāļēāļĒāļāļĢāļ°āđāļ āļ (Types) āđāļāđāļ āļāļāļŦāļĄāļēāļĒ (Letter), āļāļĩāđāļĄāļĨāđ (Email), Request for Information (RFI), āļĢāļ§āļĄāļāļķāļ āđāļāļāļŠāļēāļĢāļāļāļāļāļļāļĄāļąāļāļī (RFA) āđāļāđāļĨāļ° revision āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāđāļāļīāđāļĄāļāļĢāļ°āđāļ āļāđāļŦāļĄāđāđāļāđāđāļāļ āļēāļĒāļŦāļĨāļąāļ
- 3.2.3. āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢ (Correspondence):
- āļāļđāđāđāļāđāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđ (āđāļāđāļ Document Control) āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢāļĢāļāđāļ§āđāđāļāļŠāļāļēāļāļ° āļāļāļąāļāļĢāđāļēāļ" (Draft) āđāļāđ āļāļķāđāļāļāļđāđāđāļāđāļāļēāļāļāđāļēāļāļāļāļāđāļāļĢāļāļ°āļĄāļāļāđāļĄāđāđāļŦāđāļ
- āđāļĄāļ·āđāļāļāļ "Submitted" āđāļĨāđāļ§ āļāļēāļĢāđāļāđāđāļ, āļāļāļāđāļāļāļŠāļēāļĢāļāļĨāļąāļāđāļāļŠāļāļēāļāļ° Draft, āļŦāļĢāļ·āļāļĒāļāđāļĨāļīāļ (Cancel) āļāļ°āļāđāļāļāļāļģāđāļāļĒāļāļđāđāđāļāđāļĢāļ°āļāļąāļ Admin āļāļķāđāļāđāļ āļāļĢāđāļāļĄāļĢāļ°āļāļļāđāļŦāļāļļāļāļĨ
- 3.2.4. āļāļēāļĢāļāđāļēāļāļāļīāļāđāļĨāļ°āļāļąāļāļāļĨāļļāđāļĄ:
- āđāļāļāļŠāļēāļĢāļŠāļēāļĄāļēāļĢāļāļāđāļēāļāļāļķāļ (Reference) āđāļāļāļŠāļēāļĢāļāļāļąāļāļāđāļāļāļŦāļāđāļēāđāļāđāļŦāļĨāļēāļĒāļāļāļąāļ
- āļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļ Tag āđāļāđāļŦāļĨāļēāļĒ Tag āđāļāļ·āđāļāļāļąāļāļāļĨāļļāđāļĄāđāļĨāļ°āđāļāđāđāļāļāļēāļĢāļāđāļāļŦāļēāļāļąāđāļāļŠāļđāļ
- 3.2.5. Workflow (Unified Workflow):
- āļĢāļ°āļāļāļāđāļāļāļĢāļāļāļĢāļąāļ Workflow āļāļĩāđāđāļāđāļāđāļāļ Unified Workflow
3.3. āļāļēāļĢāļāļąāļāļāļēāļĢāđāļāļāļŠāļēāļāļāļāļāļļāļĄāļąāļāļī (Request for Approval / RFA)
- 3.3.1. āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđ:
- āđāļāļāļŠāļēāļĢāļāļāļāļāļļāļĄāļąāļāļī (RFA) āļ āļēāļĒāđāļ āđāļāļĢāļāļāļēāļĢ (Projects)
- 3.3.2. āļāļĢāļ°āđāļ āļāđāļāļāļŠāļēāļĢ:
- āļĢāļ°āļāļāļāđāļāļāļĢāļāļāļĢāļąāļāđāļāļāļŠāļēāļĢāļĢāļđāļāđāļāļ āđāļāļĨāđ PDF
- āđāļāļāļŠāļēāļĢāļāļāļāļāļļāļĄāļąāļāļī (RFA) āļŠāļēāļĄāļēāļĢāļāļĄāļĩāđāļāđāļŦāļĨāļēāļĒ revision
- āļĄāļĩāļāļĢāļ°āļāļāļāļāļāđāļāļāļŠāļēāļĢ āđāļāđāļŦāļĨāļēāļĒāļāļĢāļ°āđāļ āļ (RFA Types) āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļāđāļāļīāđāļĄāļāļĢāļ°āđāļ āļāđāļŦāļĄāđāđāļāđāđāļāļ āļēāļĒāļŦāļĨāļąāļ
- 3.3.3. āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢ:
- āļāļđāđāđāļāđāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđ (āđāļāđāļ Document Control) āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢāļāļāļāļāļļāļĄāļąāļāļī (RFA) āļĢāļāđāļ§āđāđāļāļŠāļāļēāļāļ° āļāļāļąāļāļĢāđāļēāļ" (Draft) āđāļāđ āļāļķāđāļāļāļđāđāđāļāđāļāļēāļāļāđāļēāļāļāļāļāđāļāļĢāļāļ°āļĄāļāļāđāļĄāđāđāļŦāđāļ
- āđāļĄāļ·āđāļāļāļ "Submitted" āđāļĨāđāļ§ āļāļēāļĢāđāļāđāđāļ, āļāļāļāđāļāļāļŠāļēāļĢāļāļĨāļąāļāđāļāļŠāļāļēāļāļ° Draft, āļŦāļĢāļ·āļāļĒāļāđāļĨāļīāļ (Cancel) āļāļ°āļāđāļāļāļāļģāđāļāļĒāļāļđāđāđāļāđāļĢāļ°āļāļąāļ Admin āļāļķāđāļāđāļ āļāļĢāđāļāļĄāļĢāļ°āļāļļāđāļŦāļāļļāļāļĨ
- 3.3.4. āļāļēāļĢāļāđāļēāļāļāļīāļāđāļĨāļ°āļāļąāļāļāļĨāļļāđāļĄ:
- RFA āļŠāļēāļĄāļēāļĢāļāļāđāļēāļāļāļķāļ (Reference) āđāļāļāļāđāļāļŠāļĢāđāļēāļ (Shop Drawing) āđāļāđāļŦāļĨāļēāļĒāļāļāļąāļ
- 3.3.5. Workflow (Unified Workflow):
- āļĢāļ°āļāļāļāđāļāļāļĢāļāļāļĢāļąāļ Workflow āļāļĩāđāđāļāđāļāđāļāļ Unified Workflow āļāļķāđāļāļāļ°āļĄāļĩāļŠāļāļēāļāļ°āđāļĨāļ°āļāļīāļāļāļĢāļĢāļĄāļāļĩāđāđāļĄāđāđāļŦāļĄāļ·āļāļāļāļąāļāļāļąāļāđāļāļāļŠāļēāļĢāđāļāđāļāļāļ (Correspondence)
3.4. āļāļēāļĢāļāļąāļāļāļēāļĢāđāļāļāļāļđāđāļŠāļąāļāļāļē (Contract Drawing)
- 3.4.1. āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđ: āđāļāļāļāļđāđāļŠāļąāļāļāļē (Contract Drawing) āđāļāđāđāļāļ·āđāļāļāđāļēāļāļāļīāļāđāļĨāļ°āđāļāđāđāļāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ
- 3.4.2. āļāļĢāļ°āđāļ āļāđāļāļāļŠāļēāļĢ: āđāļāļĨāđ PDF
- 3.4.3. āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢ: āļāļđāđāđāļāđāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđ āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļĨāļ°āđāļāđāđāļāđāļāđ
- 3.4.4. āļāļēāļĢāļāđāļēāļāļāļīāļāđāļĨāļ°āļāļąāļāļāļĨāļļāđāļĄ: āđāļāđāļŠāļģāļŦāļĢāļąāļāļāđāļēāļāļāļīāļ āđāļ Shop Drawings, āļĄāļĩāļāļēāļĢāļāļąāļāļŦāļĄāļ§āļāļŦāļĄāļđāđāļāļāļ Contract Drawing
3.5. āļāļēāļĢāļāļąāļāļāļēāđāļāļāļāđāļāļŠāļĢāđāļēāļ (Shop Drawing)
- 3.5.1. āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđ: āđāļāļāļāđāļāļŠāļĢāđāļēāļ (Shop Drawing) āđāļāđāđāđāļāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ āđāļāļĒāļāļąāļāļŠāđāļāļāđāļ§āļĒ Request for Approval (RFA)
- 3.5.2. āļāļĢāļ°āđāļ āļāđāļāļāļŠāļēāļĢ: āđāļāļĨāđ PDF, DWG, ZIP
- 3.5.3. āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢ: āļāļđāđāđāļāđāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđ āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļĨāļ°āđāļāđāđāļāđāļāđ āđāļāļĒāļāļđāđāđāļāđāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđ (āđāļāđāļ Document Control) āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢāļĢāļāđāļ§āđāđāļāļŠāļāļēāļāļ° āļāļāļąāļāļĢāđāļēāļ" (Draft) āđāļāđ āļāļķāđāļāļāļđāđāđāļāđāļāļēāļāļāđāļēāļāļāļāļāđāļāļĢāļāļ°āļĄāļāļāđāļĄāđāđāļŦāđāļ
- 3.5.4. āļāļēāļĢāļāđāļēāļāļāļīāļāđāļĨāļ°āļāļąāļāļāļĨāļļāđāļĄ: āđāļāđāļŠāļģāļŦāļĢāļąāļāļāđāļēāļāļāļīāļ āđāļ RFA, āļĄāļĩāļāļēāļĢāļāļąāļāļŦāļĄāļ§āļāļŦāļĄāļđāđāļāļāļ Shop Drawings āđāļāļĒāļāļļāļ āđāļāļāļāđāļāļŠāļĢāđāļēāļ (Shop Drawing) āđāļāđāļĨāļ° revision āļāđāļāļāļĄāļĩ RFA āđāļāđāđāļāļĩāļĒāļ 1 āļāļāļąāļ
3.6. āļāļēāļĢāļāļąāļāļāļēāļĢ Workflow (Unified Workflow)
-
3.6.1 Workflow Definition:
- Admin āļāđāļāļāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļ/āđāļāđāđāļ Workflow Rule āđāļāđāļāđāļēāļāļŦāļāđāļēāļāļ UI (DSL Editor)
- āļĢāļāļāļĢāļąāļāļāļēāļĢāļāļģāļŦāļāļ State, Transition, Required Role, Condition (JS Expression)
-
3.6.2 Workflow Execution:
- āļĢāļ°āļāļāļāđāļāļāļĢāļāļāļĢāļąāļāļāļēāļĢāļŠāļĢāđāļēāļ Instance āļāļāļ Workflow āļāļđāļāļāļąāļāđāļāļāļŠāļēāļĢ (Polymorphic)
- āļĢāļāļāļĢāļąāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ° (Action) āđāļāđāļ Approve, Reject, Comment, Return
- Auto-Action: āļĢāļāļāļĢāļąāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ°āļāļąāļāđāļāļĄāļąāļāļīāđāļĄāļ·āđāļāļāļĢāļāđāļāļ·āđāļāļāđāļ (āđāļāđāļ Review āļāļĢāļāļāļļāļāļāļ)
-
3.6.3 Flexibility:
- āļĢāļāļāļĢāļąāļ Parallel Review (āļŠāđāļāđāļŦāđāļŦāļĨāļēāļĒāļāļāļāļĢāļ§āļāļāļĢāđāļāļĄāļāļąāļ)
- āļĢāļāļāļĢāļąāļ Conditional Flow (āđāļāđāļ āļāđāļēāļĒāļāļāđāļāļīāļ > X āđāļŦāđāđāļāļīāđāļĄāļāļđāđāļāļāļļāļĄāļąāļāļī)
-
3.6.4 Workflow āļāļēāļĢāļāļāļļāļĄāļąāļāļī:
- āļĢāļāļāļĢāļąāļāļāļĢāļ°āļāļ§āļāļāļēāļĢāļāļāļļāļĄāļąāļāļīāļāļĩāđāļāļąāļāļāđāļāļāđāļĨāļ°āđāļāđāļāļĨāļģāļāļąāļ āđāļāđāļ āļŠāđāļāļāļēāļ Originator -> Organization 1 -> Organization 2 -> Organization 3 āđāļĨāđāļ§āļŠāđāļāļāļĨāļāļĨāļąāļāļāļēāļĄāļĨāļģāļāļąāļāđāļāļīāļĄ (āđāļāļĒāļāđāļē āļāļāļāļĢāļāđāđāļāđāļ Workflow āđāļŦāđāļŠāđāļāļāļĨāļąāļ āļāđāļŠāļēāļĄāļēāļĢāļāļŠāđāļāļāļĨāļāļĨāļąāļāļāļēāļĄāļĨāļģāļāļąāļāđāļāļīāļĄāđāļāļĒāđāļĄāđāļāđāļāļāļĢāļāđāļŦāđāļāļķāļ āļāļāļāļĢāļāļ·āđāļāļĨāļģāļāļąāļāļāļąāļāđāļ)
-
3.6.5 āļāļēāļĢāļāļąāļāļāļēāļĢ:
- āļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļāļ§āļąāļāđāļĨāđāļ§āđāļŠāļĢāđāļ (Deadline) āļŠāļģāļŦāļĢāļąāļāļāļđāđāļĢāļąāļāļāļīāļāļāļāļāļāļāļ āļāļāļāļĢāļāđ āļāļĩāđāļāļĒāļđāđāđāļ Workflow āđāļāđ
- āļĄāļĩāļĢāļ°āļāļāđāļāđāļāđāļāļ·āļāļ āđāļŦāđāļāļđāđāļĢāļąāļāļāļīāļāļāļāļāļāļāļ āļāļāļāļĢāļāđ āļāļĩāđāļāļĒāļđāđāđāļ Workflow āļāļĢāļēāļ āđāļĄāļ·āđāļāļĄāļĩ RFA āđāļŦāļĄāđ āļŦāļĢāļ·āļāļĄāļĩāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ°
- āļŠāļēāļĄāļēāļĢāļāļāđāļēāļĄāļāļąāđāļāļāļāļāđāļāđāđāļāļāļĢāļāļĩāļāļīāđāļĻāļĐ (āđāļāļĒāļāļđāđāļĄāļĩāļŠāļīāļāļāļīāđ)
- āļŠāļēāļĄāļēāļĢāļāļŠāđāļāļāļĨāļąāļāļāļąāđāļāļāļāļāļāđāļāļāļŦāļāđāļēāđāļāđ
3.7.āļāļēāļĢāļāļąāļāļāļēāļĢāđāļāļāļŠāļēāļĢāļāļģāļŠāđāļ (Transmittals)
- 3.7.1. āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđ: āđāļāļāļŠāļēāļĢāļāļģāļŠāđāļ āđāļāđāļŠāļģāļŦāļĢāļąāļ āļāļģāļŠāđāļ Request for Approval (RFAS) āļŦāļĨāļēāļĒāļāļāļąāļ āđāļāļĒāļąāļāļāļāļāđāļāļĢāļāļ·āđāļ
- 3.7.2. āļāļĢāļ°āđāļ āļāđāļāļāļŠāļēāļĢ: āđāļāļĨāđ PDF
- 3.7.3. āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢ: āļāļđāđāđāļāđāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđ āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļĨāļ°āđāļāđāđāļāđāļāđ
- 3.7.4. āļāļēāļĢāļāđāļēāļāļāļīāļāđāļĨāļ°āļāļąāļāļāļĨāļļāđāļĄ: āđāļāļāļŠāļēāļĢāļāļģāļŠāđāļ āđāļāđāļāļŠāđāļ§āļāļŦāļāļķāđāļāđāļ Correspondence
3.8.āđāļāđāļ§āļĩāļĒāļāđāļāļāļŠāļēāļĢ (Circulation Sheet)
- 3.8.1. āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđ: āļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢ āđāļāļāļŠāļēāļĢ (Correspondence) āļāļļāļāļāļāļąāļ āļāļ°āļĄāļĩāđāļāđāļ§āļĩāļĒāļāđāļāļāļŠāļēāļĢāđāļāļ·āđāļāļāļ§āļāļāļļāļĄāđāļĨāļ°āļĄāļāļāļŦāļĄāļēāļĒāļāļēāļāļ āļēāļĒāđāļāļāļāļāđāļāļĢ (āļŠāļēāļĄāļēāļĢāļāļāļđāđāļĨāļ°āđāļāđāđāļāđāļāđāđāļāļāļēāļ°āļāļāđāļāļāļāļāđāļāļĢ)
- 3.8.2. āļāļĢāļ°āđāļ āļāđāļāļāļŠāļēāļĢ: āđāļāļĨāđ PDF
- 3.8.3. āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļāļŠāļēāļĢ: āļāļđāđāđāļāđāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđāđāļāļāļāļāđāļāļĢāļāļąāđāļ āļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļĨāļ°āđāļāđāđāļāđāļāđ
- 3.8.4. āļāļēāļĢāļāđāļēāļāļāļīāļāđāļĨāļ°āļāļąāļāļāļĨāļļāđāļĄ: āļāļēāļĢāļĢāļ°āļāļļāļāļđāđāļĢāļąāļāļāļīāļāļāļāļ:
- āļāļđāđāļĢāļąāļāļāļīāļāļāļāļāļŦāļĨāļąāļ (Main): āļĄāļĩāđāļāđāļŦāļĨāļēāļĒāļāļ
- āļāļđāđāļĢāđāļ§āļĄāļāļāļīāļāļąāļāļīāļāļēāļ (Action): āļĄāļĩāđāļāđāļŦāļĨāļēāļĒāļāļ
- āļāļđāđāļāļĩāđāļāđāļāļāļĢāļąāļāļāļĢāļēāļ (Information): āļĄāļĩāđāļāđāļŦāļĨāļēāļĒāļāļ
- 3.8.5. āļāļēāļĢāļāļīāļāļāļēāļĄāļāļēāļ:
- āļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļāļ§āļąāļāđāļĨāđāļ§āđāļŠāļĢāđāļ (Deadline) āļŠāļģāļŦāļĢāļąāļāļāļđāđāļĢāļąāļāļāļīāļāļāļāļāļāļĢāļ°āđāļ āļ Main āđāļĨāļ° Action āđāļāđ
- āļĄāļĩāļĢāļ°āļāļāđāļāđāļāđāļāļ·āļāļāđāļĄāļ·āđāļāļĄāļĩ Circulation āđāļŦāļĄāđ āđāļĨāļ°āđāļāđāļāđāļāļ·āļāļāļĨāđāļ§āļāļŦāļāđāļēāļāđāļāļāļāļķāļāļ§āļąāļāđāļĨāđāļ§āđāļŠāļĢāđāļ
- āļŠāļēāļĄāļēāļĢāļāļāļīāļ Circulation āđāļāđāđāļĄāļ·āđāļāļāļģāđāļāļīāļāļāļēāļĢāļāļāļāļāļĨāļąāļāđāļāļĒāļąāļāļāļāļāđāļāļĢāļāļđāđāļŠāđāļ (Originator) āđāļĨāđāļ§ āļŦāļĢāļ·āļ āļĢāļąāļāļāļĢāļēāļāđāļĨāđāļ§ (For Information)
3.9. āļāļĢāļ°āļ§āļąāļāļīāļāļēāļĢāđāļāđāđāļ (Revisions): āļĢāļ°āļāļāļāļ°āđāļāđāļāļāļĢāļ°āļ§āļąāļāļīāļāļēāļĢāļŠāļĢāđāļēāļāđāļĨāļ°āđāļāđāđāļ āđāļāļāļŠāļēāļĢāļāļąāđāļāļŦāļĄāļ
3.10. āļāļēāļĢāļāļąāļāđāļāđāļāđāļāļĨāđ (File Handling - āļāļĢāļąāļāļāļĢāļļāļāđāļŦāļāđ)
-
3.10.1 Two-Phase Storage Strategy:
- Phase 1 (Upload): āđāļāļĨāđāļāļđāļāļāļąāļāđāļŦāļĨāļāđāļāđāļēāđāļāļĨāđāļāļāļĢāđ
temp/āđāļĨāļ°āđāļāđāļĢāļąāļtemp_id - Phase 2 (Commit): āđāļĄāļ·āđāļ User āļāļ Submit āļāļāļĢāđāļĄāļŠāļģāđāļĢāđāļ āļĢāļ°āļāļāļāļ°āļĒāđāļēāļĒāđāļāļĨāđāļāļēāļ
temp/āđāļāļĒāļąāļpermanent/{YYYY}/{MM}/āđāļĨāļ°āļāļąāļāļāļķāļāļĨāļ Database āļ āļēāļĒāđāļ Transaction āđāļāļĩāļĒāļ§āļāļąāļ - Cleanup: āļĄāļĩ Cron Job āļĨāļāđāļāļĨāđāđāļ
temp/āļāļĩāđāļāđāļēāļāđāļāļīāļ 24 āļāļĄ. (Orphan Files)
- Phase 1 (Upload): āđāļāļĨāđāļāļđāļāļāļąāļāđāļŦāļĨāļāđāļāđāļēāđāļāļĨāđāļāļāļĢāđ
-
3.10.2 Security:
- Virus Scan (ClamAV) āļāđāļāļāļĒāđāļēāļĒāđāļāđāļē Permanent
- Whitelist File Types: PDF, DWG, DOCX, XLSX, ZIP
- Max Size: 50MB
- Access Control: āļāļĢāļ§āļāļŠāļāļāļŠāļīāļāļāļīāđāļāđāļēāļ Junction Table āļāđāļāļāđāļŦāđ Download Link
-
3.10.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.11. āļāļēāļĢāļāļąāļāļāļēāļĢāđāļĨāļāļāļĩāđāđāļāļāļŠāļēāļĢ (Document Numbering - āļāļĢāļąāļāļāļĢāļļāļ)
- 3.11.1. āļĢāļ°āļāļāļāđāļāļāļŠāļēāļĄāļēāļĢāļāļŠāļĢāđāļēāļāđāļĨāļāļāļĩāđāđāļāļāļŠāļēāļĢ (Running Number) āđāļāđāđāļāļĒāļāļąāļāđāļāļĄāļąāļāļīāđāļĨāļ°āļĒāļ·āļāļŦāļĒāļļāđāļāļŠāļđāļ
- 3.11.2. Logic āļāļēāļĢāļāļąāļāđāļĨāļ (Counter Logic): āļāļēāļĢāļāļąāļāđāļĨāļāļāļ°āļāđāļāļāļĢāļāļāļĢāļąāļāļāļēāļĢāđāļĒāļāļāļēāļĄ Key āļāļĩāđāļāļąāļāļāđāļāļāļāļķāđāļ:
- Project + Originator + Type + Discipline (āļāđāļēāļĄāļĩ) + Sub-Type (āļāđāļēāļĄāļĩ) + Year
- 3.11.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}
- āļĢāļāļāļĢāļąāļāļāļēāļĢāļāļģāļŦāļāļāļĢāļđāļāđāļāļāļāđāļ§āļĒ Token Replacement āđāļāđāļ:
- 3.11.4. Transmittal Logic: āļĢāļāļāļĢāļąāļāđāļāļ·āđāļāļāđāļāļāļīāđāļĻāļĐāļŠāļģāļŦāļĢāļąāļ Transmittal āļāļĩāđāđāļĨāļāļāļēāļāđāļāļĨāļĩāđāļĒāļāļāļēāļĄāļāļđāđāļĢāļąāļ (To Owner vs To Contractor)
- 3.11.5. āļāļĨāđāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ: āļĒāļąāļāļāļāđāļāđ Redis Distributed Lock āđāļĨāļ° Optimistic Locking āđāļāļ·āđāļāļāđāļāļāļāļąāļāđāļĨāļāļāđāļģāļŦāļĢāļ·āļāļāđāļēāļĄ
- 3.11.6. āļāđāļāļāļĄāļĩ retry mechanism āđāļĨāļ° fallback strategy āđāļĄāļ·āđāļāļāļēāļĢ generate āđāļĨāļāļāļĩāđāđāļāļāļŠāļēāļĢāļĨāđāļĄāđāļŦāļĨāļ§
- 3.11.7 Fallback Logic (āđāļāļīāđāļĄ):
- āļāļĢāļāļĩāļāļĩāđāđāļāļāļŠāļēāļĢāļāļĢāļ°āđāļ āļāļāļąāđāļāđāļĄāđāļĄāļĩ discipline_id āļŦāļĢāļ·āļ sub_type_id (āđāļāđāļāļāđāļē NULL āļŦāļĢāļ·āļāđāļĄāđāļĢāļ°āļāļļ) āđāļŦāđāļĢāļ°āļāļāđāļāđāļāđāļē Default (āđāļāđāļ 0) āđāļāļāļēāļĢāļāļąāļāļāļĨāļļāđāļĄ Counter āđāļāļ·āđāļāļāđāļāļāļāļąāļ Error āđāļĨāļ°āļĢāļąāļāļāļĢāļ°āļāļąāļāļāļ§āļēāļĄāļāļđāļāļāđāļāļāļāļāļ Running Number (Uniqueness Guarantee)
- Scenario 1: Redis Unavailable
- Fallback āđāļāđāļ database-only locking (pessimistic lock)
- Log warning āđāļĨāļ°āđāļāđāļ ops team
- āļĢāļ°āļāļāļĒāļąāļāđāļāđāļāļēāļāđāļāđāđāļāđ performance āļĨāļāļĨāļ
- Scenario 2: Lock Acquisition Timeout
- Retry 5 āļāļĢāļąāđāļāļāđāļ§āļĒ exponential backoff (1s, 2s, 4s, 8s, 16s)
- āļŦāļĨāļąāļ 5 āļāļĢāļąāđāļ: Return error 503 "Service Temporarily Unavailable"
- Frontend āđāļŠāļāļ user-friendly message: "āļĢāļ°āļāļāļāļģāļĨāļąāļāļĒāļļāđāļ āļāļĢāļļāļāļēāļĨāļāļāđāļŦāļĄāđāļ āļēāļĒāļŦāļĨāļąāļ"
- Scenario 3: Version Conflict After Lock
- Retry transaction āļāļĩāļ 2 āļāļĢāļąāđāļ
- āļŦāļēāļāļĒāļąāļāļĨāđāļĄāđāļŦāļĨāļ§: Log error āļāļĢāđāļāļĄ context āđāļĨāļ° return 409 Conflict
- Frontend āđāļŠāļāļ user-friendly message: "āđāļĨāļāļāļĩāđāđāļāļāļŠāļēāļĢāļāļđāļāđāļāļĨāļĩāđāļĒāļ āļāļĢāļļāļāļēāļĨāļāļāđāļŦāļĄāđ"
- Monitoring:
- Alert āļāđāļē lock acquisition failures > 5% āđāļ 5 āļāļēāļāļĩ
- Dashboard āđāļŠāļāļ lock wait time percentiles
3.12. āļāļēāļĢāļāļąāļāļāļēāļĢ JSON Details (JSON & Performance - āļāļĢāļąāļāļāļĢāļļāļ)
-
3.12.1 āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđ
- āļāļąāļāđāļāđāļāļāđāļāļĄāļđāļĨāđāļāļāđāļāļāļēāļĄāļīāļāļāļĩāđāđāļāļāļēāļ°āđāļāļēāļ°āļāļāļāļąāļāđāļāđāļĨāļ°āļāļĢāļ°āđāļ āļāļāļāļāđāļāļāļŠāļēāļĢ
- āļĢāļāļāļĢāļąāļāļāļēāļĢāļāļĒāļēāļĒāļāļąāļ§āļāļāļāļĢāļ°āļāļāđāļāļĒāđāļĄāđāļāđāļāļāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ database schema
- āļāļąāļāļāļēāļĢ metadata āđāļĨāļ°āļāđāļāļĄāļđāļĨāļāļĢāļ°āļāļāļāļŠāļģāļŦāļĢāļąāļ correspondence, routing, āđāļĨāļ° workflows
-
3.12.2 āđāļāļĢāļāļŠāļĢāđāļēāļ JSON Schema āļĢāļ°āļāļāļāđāļāļāļĄāļĩ predefined JSON schemas āļŠāļģāļŦāļĢāļąāļāļāļĢāļ°āđāļ āļāđāļāļāļŠāļēāļĢāļāđāļēāļāđ:
- 3.12.2.1 Correspondence Types
- GENERIC: āļāđāļāļĄāļđāļĨāļāļ·āđāļāļāļēāļāļŠāļģāļŦāļĢāļąāļāđāļāļāļŠāļēāļĢāļāļąāđāļ§āđāļ
- RFI: āļĢāļēāļĒāļĨāļ°āđāļāļĩāļĒāļāļāļģāļāļēāļĄāđāļĨāļ°āļāđāļāļĄāļđāļĨāļāļēāļāđāļāļāļāļīāļ
- RFA: āļāđāļāļĄāļđāļĨāļāļēāļĢāļāļāļāļāļļāļĄāļąāļāļīāđāļāļāđāļĨāļ°āļ§āļąāļŠāļāļļ
- TRANSMITTAL: āļĢāļēāļĒāļāļēāļĢāđāļāļāļŠāļēāļĢāļāļĩāđāļŠāđāļāļāđāļ
- LETTER: āļāđāļāļĄāļđāļĨāļāļāļŦāļĄāļēāļĒāļāļēāļāļāļēāļĢ
- EMAIL: āļāđāļāļĄāļđāļĨāļāļĩāđāļĄāļĨ
- 3.12.2.2 Rworkflow Types
- workflow_definitions: āļāļāđāļĨāļ°āđāļāļ·āđāļāļāđāļāļāļēāļĢāļŠāđāļāļāđāļ
- workflow_histories: āļŠāļāļēāļāļ°āđāļĨāļ°āļāļĢāļ°āļ§āļąāļāļīāļāļēāļĢāļŠāđāļāļāđāļ
- workflow_instances: āļāļēāļĢāļāļģāđāļāļīāļāļāļēāļĢāđāļāđāļāđāļĨāļ°āļāļąāđāļāļāļāļ
- 3.12.2.3 Audit Types
- AUDIT_LOG: āļāđāļāļĄāļđāļĨāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ
- SECURITY_SCAN: āļāļĨāļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ
- 3.12.2.1 Correspondence Types
-
3.12.3 Virtual Columns (āļāļĢāļąāļāļāļĢāļļāļ):
- āļŠāļģāļŦāļĢāļąāļ Field āđāļ JSON āļāļĩāđāļāđāļāļāđāļāđāđāļāļāļēāļĢāļāđāļāļŦāļē (Search) āļŦāļĢāļ·āļāļāļąāļāđāļĢāļĩāļĒāļ (Sort) āļāđāļāļĒāđ āļāđāļāļāļŠāļĢāđāļēāļ Generated Column (Virtual Column) āđāļ Database āđāļĨāļ°āļāļģ Index āđāļ§āđ āđāļāļ·āđāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļŠāļđāļāļŠāļļāļ
- Schema Consistency: Field āļāļĩāđāļāļđāļāļāļģāļŦāļāļāđāļāđāļ Virtual Column āļŦāđāļēāļĄ āđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ Key Name āļŦāļĢāļ·āļ Data Type āđāļ JSON Schema Version āļāļąāļāđāļ āļŦāļēāļāļāļģāđāļāđāļāļāđāļāļāđāļāļĨāļĩāđāļĒāļ āļāđāļāļāļĄāļĩāđāļāļāļāļēāļĢ Re-index āļŦāļĢāļ·āļ Migration āļāđāļāļĄāļđāļĨāđāļāļīāļĄāļāļĩāđāļāļąāļāđāļāļ
-
3.12.4 Validation Rules
- āļāđāļāļāļĄāļĩ JSON schema validation āļŠāļģāļŦāļĢāļąāļāđāļāđāļĨāļ°āļāļĢāļ°āđāļ āļ
- āļāđāļāļāļĢāļāļāļĢāļąāļ versioning āļāļāļ schema
- āļāđāļāļāļĄāļĩ default values āļŠāļģāļŦāļĢāļąāļ field āļāļĩāđāđāļĄāđāļāļąāļāļāļąāļ
- āļāđāļāļāļāļĢāļ§āļāļŠāļāļ data types āđāļĨāļ° format āđāļŦāđāļāļđāļāļāđāļāļ
-
3.12.5 Performance Requirements
- JSON field āļāđāļāļāļĄāļĩāļāļāļēāļāđāļĄāđāđāļāļīāļ 50KB
- āļāđāļāļāļĢāļāļāļĢāļąāļ indexing āļŠāļģāļŦāļĢāļąāļ field āļāļĩāđāđāļāđāļāđāļāļŦāļēāļāđāļāļĒ
- āļāđāļāļāļĄāļĩ compression āļŠāļģāļŦāļĢāļąāļ JSON āļāļāļēāļāđāļŦāļāđ
-
3.12.6 Security Requirements
- āļāđāļāļ sanitize JSON input āđāļāļ·āđāļāļāđāļāļāļāļąāļ injection attacks
- āļāđāļāļ validate JSON structure āļāđāļāļāļāļąāļāļāļķāļ
- āļāđāļāļ encrypt sensitive data āđāļ JSON fields
-
3.12.7 JSON Schema Migration Strategy (āđāļāļīāđāļĄāđāļāļīāļĄ) āļŠāļģāļŦāļĢāļąāļ Schema Breaking Changes:
-
Phase 1 - Add New Column ALTER TABLE correspondence_revisions ADD COLUMN ref_project_id_v2 INT GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(details, '$.newProjectIdPath'))) VIRTUAL;
-
Phase 2 - Backfill Old Records
- āđāļāđ background job āđāļāļĨāļ JSON format āđāļāđāļēāđāļāđāļāđāļŦāļĄāđ
- Update
detailsJSON āļāļĩāļĨāļ° batch (1000 records)
-
Phase 3 - Switch Application Code
- Deploy code āļāļĩāđāđāļāđ path āđāļŦāļĄāđ
-
Phase 4 - Remove Old Column
- āļŦāļĨāļąāļāļāļēāļ verify āđāļĨāđāļ§āļ§āđāļēāđāļĄāđāļĄāļĩ error
- Drop old virtual column
-
āļŠāļģāļŦāļĢāļąāļ Non-Breaking Changes
- āđāļāļīāđāļĄ optional field āđāļ schema
- Old records āļāļĩāđāđāļĄāđāļĄāļĩ field = āđāļāđ default value
-
3.13. āļāđāļāļāļģāļŦāļāļāļāļīāđāļĻāļĐ
- āļāļđāđāđāļāđāļāļēāļāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđāļĢāļ°āļāļąāļāļŠāļđāļ (Global) āļŦāļĢāļ·āļāļāļđāđāđāļāđāļĢāļąāļāļāļāļļāļāļēāļāđāļāđāļāļāļĢāļāļĩāļāļīāđāļĻāļĐ
- āļŠāļēāļĄāļēāļĢāļāđāļĨāļ·āļāļ āļŠāļĢāđāļēāļāđāļāļāļēāļĄāļāļāļāđāļāļĢ (Create on behalf of) āđāļāđ āđāļāļ·āđāļāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļāļāļāđāļĨāļāļāļĩāđāđāļāļāļŠāļēāļĢ (Running Number) āļāļāļāļāļāļāđāļāļĢāļāļ·āđāļāđāļāđāđāļāļĒāđāļĄāđāļāđāļāļāļĨāđāļāļāļāļīāļāđāļŦāļĄāđ
- āļŠāļēāļĄāļēāļĢāļāļāļģāļāļēāļāđāļāļāļāļđāđāđāļāđāļāļēāļāļāļ·āđāļāđāļāđ Routing & Workflow āļāļāļ Correspondence, RFA, Circulation Sheet
3.14. āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāļŦāļĨāļąāļāļāļąāđāļāļŠāļđāļ (Admin Panel for Master Data)
- 3.14.1. Disciplines Management: Admin āļāđāļāļāļŠāļēāļĄāļēāļĢāļ āđāļāļīāđāļĄ/āļĨāļ/āđāļāđāđāļ āļŠāļēāļāļēāļāļēāļ (Disciplines) āđāļĒāļāļāļēāļĄāļŠāļąāļāļāļē (Contract) āđāļāđ
- 3.14.2. Sub-Type Mapping: Admin āļāđāļāļāļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļ Correspondence Sub-types āđāļĨāļ° Mapping āļĢāļŦāļąāļŠāļāļąāļ§āđāļĨāļ (āđāļāđāļ MAT = 11) āđāļāđ
- 3.14.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: āļŠāļīāļāļāļīāđāđāļāļāļēāļ°āđāļāļŠāļąāļāļāļē āļāļ°āļāļđāļāļāļīāļāļēāļĢāļāļēāđāļĄāļ·āđāļāļāļđāđāđāļāđāļāļĒāļđāđāđāļāļŠāļąāļāļāļēāļāļąāđāļ (āļŠāļąāļāļāļēāđāļāđāļāļŠāđāļ§āļāļŦāļāļķāđāļāļāļāļāđāļāļĢāļāļāļēāļĢ)
4.3. āļāļāļāļēāļĢāļāļąāļāļāļąāļāđāļāđ:
- āđāļĄāļ·āđāļāļāļĢāļ§āļāļŠāļāļāļŠāļīāļāļāļīāđ āļĢāļ°āļāļāļāļ°āļāļīāļāļēāļĢāļāļēāļŠāļīāļāļāļīāđāļāļēāļāļāļļāļāļĢāļ°āļāļąāļāļāļĩāđāļāļđāđāđāļāđāļĄāļĩ āđāļĨāļ°āđāļāđ āļŠāļīāļāļāļīāđāļāļĩāđāļĄāļēāļāļāļĩāđāļŠāļļāļ (Most Permissive) āđāļāđāļāļāļąāļ§āļāļąāļāļŠāļīāļ
- āļāļąāļ§āļāļĒāđāļēāļ: āļāļđāđāđāļāđ A āđāļāđāļ Viewer āđāļāļāļāļāđāļāļĢ āđāļāđāļāļđāļāļĄāļāļāļŦāļĄāļēāļĒāđāļāđāļ Editor āđāļāđāļāļĢāļāļāļēāļĢ X āđāļĄāļ·āđāļāļāļĒāļđāđāđāļāđāļāļĢāļāļāļēāļĢ X āļāļđāđāđāļāđ A āļāļ°āļĄāļĩāļŠāļīāļāļāļīāđāđāļāđāđāļāđāļāđ
4.4. āļāļēāļĢāļāļģāļŦāļāļāļāļāļāļēāļ (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.5 . Token Management (āļāļĢāļąāļāļāļĢāļļāļ)
- Payload Optimization: āđāļ JWT Access Token āđāļŦāđāđāļāđāļāđāļāļāļēāļ°
userIdāđāļĨāļ°scopeāļāļąāļāļāļļāļāļąāļāđāļāđāļēāļāļąāđāļ - Permission Caching: āļŠāļīāļāļāļīāđāļĨāļ°āđāļāļĩāļĒāļ (Permissions List) āđāļŦāđāđāļāđāļāđāļ Redis āđāļĨāļ°āļāļķāļāļĄāļēāļāļĢāļ§āļāļŠāļāļāđāļĄāļ·āđāļ Request āđāļāđāļēāļĄāļē āđāļāļ·āđāļāļĨāļāļāļāļēāļ Token āđāļĨāļ°āđāļāļīāđāļĄāļāļ§āļēāļĄāđāļĢāđāļ§
4.6. āļāļĢāļ°āļāļ§āļāļāļēāļĢāđāļĢāļīāđāļĄāļāđāļāđāļāđāļāļēāļ (Onboarding Workflow) āļāļĩāđāļŠāļĄāļāļđāļĢāļāđ
- 4.6.1. āļŠāļĢāđāļēāļāļāļāļāđāļāļĢ (Organization)
- Superadmin āļŠāļĢāđāļēāļāļāļāļāđāļāļĢāđāļŦāļĄāđ (āđāļāđāļ āļāļĢāļīāļĐāļąāļ A)
- Superadmin āđāļāđāļāļāļąāđāļāļāļđāđāđāļāđāļāļĒāđāļēāļāļāđāļāļĒ 1 āļāļāđāļŦāđāđāļāđāļ Org Admin āļŦāļĢāļ·āļ Document Control āļāļāļāļāļĢāļīāļĐāļąāļ A
- 4.6.2. āđāļāļīāđāļĄāļāļđāđāđāļāđāđāļāļāļāļāđāļāļĢ
- Org Admin āļāļāļāļāļĢāļīāļĐāļąāļ A āđāļāļīāđāļĄāļāļđāđāđāļāđāļāļ·āđāļāđ (Editor, Viewer) āđāļāđāļēāļĄāļēāđāļāļāļāļāđāļāļĢāļāļāļāļāļ
- 4.6.3. āļĄāļāļāļŦāļĄāļēāļĒāļāļđāđāđāļāđāđāļŦāđāļāļąāļāđāļāļĢāļāļāļēāļĢ (Project)
- Project Manager āļāļāļāđāļāļĢāļāļāļēāļĢ X (āļāļķāđāļāļāļēāļāļĄāļēāļāļēāļāļāļĢāļīāļĐāļąāļ A āļŦāļĢāļ·āļāļāļĢāļīāļĐāļąāļāļāļ·āđāļ) āļāļģāļāļēāļĢ "āđāļāļīāļ" āļŦāļĢāļ·āļ "āļĄāļāļāļŦāļĄāļēāļĒ" āļāļđāđāđāļāđāļāļēāļāļāļāļāđāļāļĢāļāđāļēāļāđ āļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļāđāļāđāļēāļĄāļēāđāļāđāļāļĢāļāļāļēāļĢ X
- āđāļāļāļąāđāļāļāļāļāļāļĩāđ Project Manager āļāļ°āļāļģāļŦāļāļ āļāļāļāļēāļāļĢāļ°āļāļąāļāđāļāļĢāļāļāļēāļĢ (āđāļāđāļ Project Member, āļŦāļĢāļ·āļāļāļēāļāđāļĄāđāļĄāļĩāļāļāļāļēāļāļāļīāđāļĻāļĐ āđāļŦāđāđāļāđāļŠāļīāļāļāļīāđāļāļēāļāļĢāļ°āļāļąāļāļāļāļāđāļāļĢāđāļāļāđāļāļ)
- 4.6.4. āđāļĄāļāļāļŦāļĄāļēāļĒāļāļđāđāđāļāđāđāļŦāđāļāļąāļāļŠāļąāļāļāļē (Contract)
- Contract Admin āļāļāļāļŠāļąāļāļāļē Y (āļāļķāđāļāđāļāđāļāļŠāđāļ§āļāļŦāļāļķāđāļāļāļāļāđāļāļĢāļāļāļēāļĢ X) āļāļģāļāļēāļĢāđāļĨāļ·āļāļāļāļđāđāđāļāđāļāļĩāđāļāļĒāļđāđāđāļāđāļāļĢāļāļāļēāļĢ X āđāļĨāđāļ§ āļĄāļāļāļŦāļĄāļēāļĒāđāļŦāđāđāļāđāļēāļĄāļēāđāļāļŠāļąāļāļāļē Y
- āđāļāļāļąāđāļāļāļāļāļāļĩāđ Contract Admin āļāļ°āļāļģāļŦāļāļ āļāļāļāļēāļāļĢāļ°āļāļąāļāļŠāļąāļāļāļē (āđāļāđāļ Contract Member) āđāļĨāļ°āļŠāļīāļāļāļīāđāđāļāļāļēāļ°āļāļĩāđāļāļģāđāļāđāļ
- 4.6.5 Security Onboarding:
- āļāđāļāļāļāļąāļāļāļąāļāđāļāļĨāļĩāđāļĒāļ password āļāļĢāļąāđāļāđāļĢāļāļŠāļģāļŦāļĢāļąāļāļāļđāđāđāļāđāđāļŦāļĄāđ
- āļāđāļāļāļĄāļĩ security awareness training āļŠāļģāļŦāļĢāļąāļāļāļđāđāđāļāđāļāļĩāđāļĄāļĩāļŠāļīāļāļāļīāđāļŠāļđāļ
- āļāđāļāļāļĄāļĩ process āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļĢāļĩāđāļāđāļ password āļāļĩāđāļāļĨāļāļāļ āļąāļĒ
- āļāđāļāļāļāļąāļāļāļķāļ audit log āļāļļāļāļāļĢāļąāđāļāļāļĩāđāļĄāļĩāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ permissions
4.7. āļāļēāļĢāļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāļŦāļĨāļąāļ (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)
- āļāļđāđāđāļāđāļŠāļēāļĄāļēāļĢāļāļāļđ RFA āđāļāļĢāļđāļāđāļāļ Workflow Diagram āļāļąāđāļāļŦāļĄāļāđāļāđāđāļāļŦāļāđāļēāđāļāļĩāļĒāļ§
- Interactive History (āđāļāļīāđāļĄ): āđāļāđāļāļāļ āļēāļ Workflow āļāļđāđāđāļāđāļāđāļāļāļŠāļēāļĄāļēāļĢāļ āļāļĨāļīāļāļāļĩāđ Node āļŦāļĢāļ·āļ Step āđāļāđāļēāļāļĩāđāļāđāļēāļāļĄāļēāđāļĨāđāļ§ āđāļāļ·āđāļāļāļđ Audit Log āļĒāđāļāļĒāļāļāļ Step āļāļąāđāļāđāļāđāļāļąāļāļāļĩ (āđāļāđāļ āđāļāļĢāđāļāđāļāļāļāļāļ Approve, āđāļ§āļĨāļēāđāļŦāļ, āļĄāļĩ Comment āļāļ°āđāļĢ) āđāļāļĒāđāļĄāđāļāđāļāļāļŠāļĨāļąāļāđāļāļāļđāđāļ Tab History āđāļĒāļāļāđāļēāļāļŦāļēāļ
- āļāļąāđāļāļāļāļāļāļĩāđāļĒāļąāļāđāļĄāđāļāļķāļāļŦāļĢāļ·āļāļāđāļēāļāđāļāđāļĨāđāļ§āļāļ°āđāļāđāļāļĢāļđāļāđāļāļ disabled
- āļŠāļēāļĄāļēāļĢāļāļāļģāđāļāļīāļāļāļēāļĢāđāļāđāđāļāļāļēāļ°āđāļāļāļąāđāļāļāļāļāļāļĩāđāđāļāđāļĢāļąāļāļĄāļāļāļŦāļĄāļēāļĒāļāļēāļ (active)
- āļŠāļīāļāļāļīāđ Document Control āļāļķāđāļāđāļ āļŠāļēāļĄāļēāļĢāļāļāļ "Force Proceed" āđāļāļĒāļąāļāļāļąāđāļāļāļāļāļāđāļāđāļāđāļāđāļāļļāļāļāļąāđāļāļāļāļ āļŦāļĢāļ·āļ "Revert" āļāļĨāļąāļāļāļąāđāļāļāļāļāļāđāļāļāļŦāļāđāļēāđāļāđ
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 āđāļāļĒāđāļĄāđāđāļāđāļāļąāđāļāđāļ
- State Management: āđāļāđ State Management āļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāđāļĨāļ°āđāļĄāđāļāļąāļāļāđāļāļāđāļāļīāļāđāļ āđāļāļĒāđāļāđāļāļāļēāļĢāđāļāđ React Query āļŠāļģāļŦāļĢāļąāļ Server State āđāļĨāļ° React Hook Form āļŠāļģāļŦāļĢāļąāļ Form State
- Graceful Degradation: āļŦāļēāļ Service āļĢāļāļ (āđāļāđāļ Search, Notification) āļĨāđāļĄ āļĢāļ°āļāļāļŦāļĨāļąāļ (CRUD) āļāđāļāļāļĒāļąāļāļāļģāļāļēāļāļāđāļāđāļāđ
5.13. Secure In-App PDF Viewer (āđāļŦāļĄāđ)
- 5.13.1 Viewer Capabilities: āļĢāļ°āļāļāļāđāļāļāļĄāļĩ PDF Viewer āļ āļēāļĒāđāļāđāļāļāļāļĨāļīāđāļāļāļąāļāļāļĩāđāļŠāļēāļĄāļēāļĢāļāđāļāļīāļāļāļđāđāļāļĨāđāđāļāļāļŠāļēāļĢāļŦāļĨāļąāļ (PDF) āđāļāđāļāļąāļāļāļĩāđāļāļĒāđāļĄāđāļāđāļāļāļāļēāļ§āļāđāđāļŦāļĨāļāļĨāļāđāļāļĢāļ·āđāļāļ āđāļāļ·āđāļāļāļ§āļēāļĄāļŠāļ°āļāļ§āļāđāļāļāļēāļĢāļāļĢāļ§āļāļāļēāļ (Review/Approve)
- 5.13.2 Security: āļāļēāļĢāđāļŠāļāļāļāļĨāđāļāļĨāđāļāđāļāļ āļŦāđāļēāļĄ (Disable) āļāļēāļĢāļāļģ Browser Cache āļŠāļģāļŦāļĢāļąāļāđāļāļĨāđ Sensitive āđāļāļ·āđāļāļāđāļāļāļāļąāļāļāļēāļĢāļāļđāđāļāļ·āļāđāļāļĨāđāļāļēāļāđāļāļĢāļ·āđāļāļ Client āļ āļēāļĒāļŦāļĨāļąāļ
- 5.13.3 Performance: āļāđāļāļāļĢāļāļāļĢāļąāļāļāļēāļĢāļŠāđāļāļāđāļāļĄāļđāļĨāđāļāļ Streaming (Range Requests) āđāļāļ·āđāļāđāļŦāđāđāļāļīāļāļāļđāđāļāļĨāđāļāļāļēāļāđāļŦāļāđ (āđāļāđāļ āđāļāļāđāļāļĨāļ 50MB+) āđāļāđāļĢāļ§āļāđāļĢāđāļ§āđāļāļĒāđāļĄāđāļāđāļāļāļĢāļāđāļŦāļĨāļāđāļŠāļĢāđāļāļāļąāđāļāđāļāļĨāđ
ðĄïļ 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.5.3 Frontend Performance:
- Bundle Size Optimization: āļāđāļāļāļāļ§āļāļāļļāļĄāļāļāļēāļ Bundle āđāļāļĒāļĢāļ§āļĄāđāļĄāđāđāļāļīāļ 2MB
- State Management Efficiency: āđāļāđ State Management Libraries āļāļĒāđāļēāļāđāļŦāļĄāļēāļ°āļŠāļĄ āđāļĄāđāđāļāļīāļ 2 āļāļąāļ§āļŦāļĨāļąāļ
- Memory Management: āļāđāļāļāļāđāļāļāļāļąāļ Memory Leak āļāļēāļ State āļāļĩāđāđāļĄāđāļāļģāđāļāđāļ
- 6.5.1 āļāļąāļ§āļāļĩāđāļ§āļąāļāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ:
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.6.1 Rate Limiting Strategy:
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 āļāļąāđāļ§āđāļĄāļ
- Database Restoration Procedure:
6.8. āļāļĨāļĒāļļāļāļāđāļāļēāļĢāđāļāđāļāđāļāļ·āļāļ (Notification Strategy - āļāļĢāļąāļāļāļĢāļļāļ)
- 6.8.1 āļĢāļ°āļāļāļāļ°āļŠāđāļāļāļēāļĢāđāļāđāļāđāļāļ·āļāļ (āļāđāļēāļ Email āļŦāļĢāļ·āļ Line [cite: 2.7]) āđāļĄāļ·āđāļāļĄāļĩāļāļēāļĢāļāļĢāļ°āļāļģāļāļĩāđāļŠāļģāļāļąāļ** āļāļąāļāļāļĩāđ:
- āđāļĄāļ·āđāļāļĄāļĩāđāļāļāļŠāļēāļĢāđāļŦāļĄāđ (Correspondence, RFA) āļāļđāļāļŠāđāļāļĄāļēāļāļķāļāļāļāļāđāļāļĢāļāđāļāļāļāđāļĢāļē
- āđāļĄāļ·āđāļāļĄāļĩāđāļāđāļ§āļĩāļĒāļ (Circulation) āđāļŦāļĄāđ āļĄāļāļāļŦāļĄāļēāļĒāļāļēāļāļĄāļēāļāļĩāđāđāļĢāļē
- (āļāļēāļāđāļĨāļ·āļāļ) āđāļĄāļ·āđāļāđāļāļāļŠāļēāļĢāļāļĩāđāđāļĢāļēāļŠāđāļāđāļ āļāļđāļāļāļģāđāļāļīāļāļāļēāļĢ (āđāļāđāļ āļāļāļļāļĄāļąāļāļī/āļāļāļīāđāļŠāļ)
- (āļāļēāļāđāļĨāļ·āļāļ) āđāļĄāļ·āđāļāđāļāļĨāđāļāļķāļāļ§āļąāļāļāļĢāļāļāļģāļŦāļāļ (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
- Business Logic: 80%+
- Controllers: 70%+
- Utilities: 90%+
- āļāđāļāļāļāļāļŠāļāļ 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
- Penetration Testing: āļāļāļŠāļāļ OWASP Top 10 vulnerabilities
- Security Audit: Review code āļŠāļģāļŦāļĢāļąāļ security flaws
- Virus Scanning Test: āļāļāļŠāļāļ file upload security
- Rate Limiting Test: āļāļāļŠāļāļ rate limiting functionality
- 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
Document Control:
- Document: Application Requirements Specification v1.4.5
- Version: 1.4
- Date: 2025-11-29
- Author: NAP LCBP3-DMS & Gemini
- Status: FINAL-Rev.05
- Classification: Internal Technical Documentation
- Approved By: Nattanin
End of Requirements Specification v1.4.5