69 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 āļĨāļāđāļāļāļēāļĢāļēāļ
-
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.5.1 Routing Templates (āđāļĄāđāđāļāļāļāļēāļĢāļŠāđāļāļāđāļ)
- 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:
- 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.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.2.1 Correspondence Types
-
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 āļāļąāđāļ§āđāļĄāļ
- 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
- āļāđāļāļāļāļāļŠāļāļ 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:
- File Upload Security - Virus scanning, file type validation, access controls
- Input Validation - OWASP Top 10 protection, XSS/CSRF prevention
- Rate Limiting - Comprehensive rate limiting strategy
- Secrets Management - Secure handling of sensitive configuration
Architecture Improvements:
- Document Numbering - Changed from Stored Procedure to Application-level Locking with Optimistic Locking safety net
- Resilience Patterns - Circuit breaker, retry mechanisms, fallback strategies
- Monitoring & Observability - Health checks, metrics, distributed tracing
- Caching Strategy - Comprehensive caching with proper invalidation
- Two-Phase File Storage - Temp -> Permanent storage with transaction safety
- Unified Workflow Engine - Consolidated routing logic for better maintainability
Performance Targets:
- API Response Time - < 200ms (90th percentile)
- Search Performance - < 500ms
- File Upload - < 30 seconds for 50MB files
- Cache Hit Ratio - > 80%
Operational Excellence:
- Disaster Recovery - RTO < 4 hours, RPO < 1 hour
- Backup Procedures - Comprehensive backup and restoration
- Security Testing - Penetration testing and security audits
- Performance Testing - Load testing with realistic workloads
- Maintenance Mode - Graceful system maintenance capabilities
User Experience Improvements:
- Dynamic Form Generator - Reduced code duplication and better schema support
- Mobile Responsiveness - Card view for tables on mobile devices
- Auto-Save Draft - LocalStorage integration for form resilience
- Notification Digest - Reduced notification spam
Data Management:
- Virtual Columns - Improved JSON field search performance
- Table Partitioning - Support for large-scale data growth
- Idempotency Keys - Prevention of duplicate transactions
āđāļāļāļŠāļēāļĢāļāļĩāđāļŠāļ°āļāđāļāļāļāļķāļāļāļ§āļēāļĄāļĄāļļāđāļāļĄāļąāđāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāļĢāļ°āļāļāļāļĩāđāļĄāļĩāļāļ§āļēāļĄāļāļĨāļāļāļ āļąāļĒ, āļĄāļĩāļāļ§āļēāļĄāļāļāļāļēāļ, āđāļĨāļ°āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļŠāļđāļ āļāļĢāđāļāļĄāļĢāļāļāļĢāļąāļāļāļēāļĢāđāļāļīāļāđāļāđāļāļāļāļēāļāļāđāļĨāļ°āļāļ§āļēāļĄāļāđāļāļāļāļēāļĢāļāļēāļāļāļļāļĢāļāļīāļāļāļĩāđāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāđāļ
āļŦāļĄāļēāļĒāđāļŦāļāļļ: Requirements āļāļĩāđāļāļ°āļāļđāļāļāļāļāļ§āļāđāļĨāļ°āļāļĢāļąāļāļāļĢāļļāļāđāļāđāļāļĢāļ°āļĒāļ°āļāļēāļĄ feedback āļāļēāļāļāļĩāļĄāļāļąāļāļāļēāđāļĨāļ°āļāļ§āļēāļĄāļāđāļāļāļāļēāļĢāļāļēāļāļāļļāļĢāļāļīāļāļāļĩāđāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāđāļ
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